@compassdigital/provider

An easy way to get started building data providers for Compass Digital. Provides an easy interface for creating methods that will be called via JSON-RPC 2.0.

Usage no npm install needed!

<script type="module">
  import compassdigitalProvider from 'https://cdn.skypack.dev/@compassdigital/provider';
</script>

README

Compass Digital Data Provider

An easy way to get started building data providers for Compass Digital. Provides an easy interface for creating methods that will be called via JSON-RPC 2.0.

Includes a built-in HTTP server and AWS Lambda handler.

Requirements

  • node.js 8.10+

Installation

npm install @compassdigital/provider --save

Usage

var Provider = require("@compassdigital/provider");

var provider = new Provider({type: "menu"});

// Handle the 'get_menu' method
provider.on("get_menu", function(req, callback)
{
    // Do something to get the result
    your_function(req, function(err, res)
    {
        callback(err, res);
    });
});

// Convenience method: respond to several methods using the same handler
provider.on(["get_menu", "get_menu_today"], () => {...});

Context

Sometimes your handler needs to know the context of the method call e.g. the user's id, location, etc. This is accessible via promises from this.context().

For example:

provider.on('get_menu', function (req, callback) {
    // Get the user's id
    this.context()
        .user()
        .then(function (user_data) {
            var user_id = user_data.id;

            callback(err, { message: 'Your user id was ' + user_id });
        });
});

HTTP Server

// Start on port 3000
provider.start(3000);

// Stop server
provider.stop();

AWS Lambda Handler

Create lambda.js ending with:

var provider = (module.exports = provider.lambda); //...

Configure a Lambda function with the setting Handler:

lambda.handler

Testing

KEY_ARN="SOME PRIVATE AWS KMS KEY ARN" node test