npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

bigiot-js

v0.7.2

Published

JavaScript library for interacting with the BIG IoT marketplace

Downloads

19

Readme

BIG IoT JavaScript library Build Status Coverage Status Greenkeeper badge

This module provides a JavaScript library for interacting with the BIG IoT marketplace.

Features

  • Discovering offerings from the marketplace
  • Subscribing to an offering and receiving data from the provider
  • Registering an offering in the marketplace
  • Validating the JWT token presented by an offering subscriber
  • Supports Node.js (provider,consumer) and browser (consumer only)

Planned features

  • Unregistering an offering from the marketplace

Installation

Simply install this module with NPM:

$ npm install bigiot-js --save

Usage for consumers

Prerequisites:

  • Log into the BIG IoT Marketplace (or another compatible marketplace instance)
  • Register your company and a new consumer
  • Copy the consumer ID and secret from the marketplace UI

A number of examples are available:

We recomment using Webpack to include bigiot also in browser applications. But you may also use the prebuilt .js file, either:

  • Latest: https://flowhub.github.io/bigiot-js/bigiot.js
  • Versioned: https://flowhub.github.io/bigiot-js/$VERSION/bigiot.js

Authenticating with the marketplace

Once you've completed the above steps, you can use this library. Instantiate a consumer with:

const bigiot = require('bigiot-js');
const consumer = new bigiot.consumer(consumerId, consumerSecret);

Then you need to authenticate your consumer with the marketplace:

consumer.authenticate()
  .then(() => {
    // Code to run after successful authentication
  });

Specifying a CORS proxy (browser)

As of July 2018, the Marketplace API does not allow Cross-Origin-Request-Sharing. To work around this, a CORS proxy like cors-anywhere must be used.

const bigiot = require('bigiot-js');
const marketplace = undefined;
const corsproxy = 'https://mycors.example.org';
const consumer = new bigiot.consumer(consumerId, consumerSecret, marketplace, corsproxy);

Discovering available offerings

You can look up offerings in the marketplace. But for more dynamic applications, it is also possible to discover them based on various criteria.

For example, to discover all parking site offerings, you can do the following:

const query = new bigiot.offering('Parking sites', 'urn:big-iot:ParkingSiteCategory');
// If you don't care about specifics on price and location, you can remove those
delete query.license;
delete query.price;
delete query.extent;

// Then get list of matching offerings
consumer.discover(query)
  .then((matchingOfferings) => {
    // Loop through the offerings can subscribe
  });

Subscribing to a known offering

When you've found a data offering from the marketplace, you need to make a subscription in order to access it.

consumer.subscribe('Offering ID here')
  .then((subscription) => {
    // Now you're subscribed. You can use the subscription details to make calls to the offering
    consumer.access(subscription, inputData);
  });

The input data above is a JSON structure fulfilling whatever input parameters the offering requires.

Note: many Java BIG IoT providers utilize a self-signed invalid SSL certificate. These will be rejected by default. To allow requests to these providers from Node.js, pass a custom https.Agent to Consumer:

const https = require('https');
const options = { httpAgent: new https.Agent({rejectUnauthorized: false}) };
const consumer = bigiot.consumer(consumerId, consumerSecret, null, options); 

This is not possible in web browsers. To workaround, use a CORS proxy.

Usage for providers

Prerequisites:

  • Log into the BIG IoT Marketplace (or another compatible marketplace instance)
  • Register your company and a new provider
  • Copy the provider ID and secret from the marketplace UI

See a simple provider example, and the NoFlo integration in the bigiot-bridge repository.

Authenticating with the marketplace

Once you've completed the above steps, you can use this library. Instantiate a provider with:

const bigiot = require('bigiot-js');
const provider = new bigiot.provider(providerId, providerSecret);

Then you need to authenticate your provider with the marketplace:

provider.authenticate()
  .then(() => {
    // Code to run after successful authentication
  });

Defining your offering

// Instantiate an offering of the desired type
const offering = new bigiot.offering(offeringName, offeringRdfType);

// Define the HTTP endpoint consumers should call on your service
offering.endpoints = {
  uri: 'http://example.net/some/path',
};

// Define the geographical extent of your offering
offering.extent = {
  city: 'Berlin',
};

// Define the input parameters your offering accepts, if any
offering.inputData = [
  {
    name: 'latitude',
    rdfUri: 'http://schema.org/latitude',
  },
  {
    name: 'longitude',
    rdfUri: 'http://schema.org/longitude',
  },
]

// Define the data structure your offering returns when called
offering.outputData = [
  {
    name: "temperature",
    rdfUri: 'http://schema.org/airTemperatureValue',
  }
];

Once you're happy with the offering description, you can register it with the marketplace with:

provider.register(offering)
  .then(() => {
    // Code to run after successful registration
  });

The offering registration is timeboxed and will expire by default in ten minutes, so for persistent offerings you should call the activate method in a timer loop and update the expiration time regularly.

Validating subscriber JSON Web Tokens

Subscribers that make requests to your offering will present a HTTP Bearer token signed with your provider secret. You can validate it with:

provider.validateToken(token)
  .catch((err) => {
    // Give a 403 response because token is invalid or expired
  })
  .then(() => {
    // Token is valid
  });

Enabling browser support in Java Provider

These steps are needed to support direct access from web browsers when using the BIG IoT Java lib in your Provider (not bigiot-js).

  1. Use a well known, trusted SSL certificate. The default in Java Provider is self-signed and cannot be used.
  2. Enable CORS support. ((EmbeddedSpark)provider.getEmbeddedServer()).enableCorsAll();

Verify browser-compatability of offerings

Browsers must have valid SSL and support CORS to be used in browser. The bigiotjs-check-offerings tool can test offerings to verify this.

To check offerings of a specific category

bigiotjs-check-offerings --category urn:big-iot:ParkingSiteCategory

To run for all known categories and output an HTML report

bigiotjs-check-offerings --html report.html