@applicaster/zapp-pipes-dev-kit

Development Kit for applicaster Zapp-Pipes datasource plugins

Usage no npm install needed!

<script type="module">
  import applicasterZappPipesDevKit from 'https://cdn.skypack.dev/@applicaster/zapp-pipes-dev-kit';
</script>

README

zapp-pipes-dev-kit

This project contains the Zapp-pipes development kit to develop, test, and deploy zapp-pipes bundles.

How to use

The dev kit enables to different modes for running a zapp-pipes bundle :

  • server mode : creates a node.js server which can be used for testing requests.
  • library mode : creates a bundle which can be used directly inside an app

the Dev Kit is not intended to build production bundles - but only as a way to develop and test new providers.

Installation

  • with npm : run yarn add @applicaster/zapp-pipes-dev-kit or
  • clone this repo locally, install dependencies, and require it by its path

API :

server mode

  • Import the createZappPipesServer function from the dev kit. This function takes an configuration object as parameter, and returns the full hapi server object, plus a function to start the server
// signature
const config = {
  options: { port: 8080, host: "localhost" }, // optionnal. these are the default values
  providers: [providers] // array of providers to load
};

// returns

server = {
  ...hapiServerObject, // hapi server
  startServer // function to start the server
};
  • Import your provider(s) from other packages or local code, then invoke the method.
import { createZappPipesServer } from "zapp-pipes-dev-kit";
import provider from "your-provider-packeage";

const zappPipesServer = createZappPipesServer({ providers: [provider] });
// zappPipesServer contains the full Hapi properties so you can add routes, invoke the start function directly, etc...

// or simply start the server with its basic configuration
zappPipesServer.startServer();

you can then visit http://{host}:{port} to test the requests

Library mode

The library mode is used to package the provider(s) as they would when they are built for the app follow these steps :

  • Import the createZappPipesLibrary function. This functions take an array of providers and the release name (used to identify the library in Sentry) as parameters, and returns a ZappPipesGetter class which is the entry point of the zapp-pipes js bundle
import { createZappPipesLibrary } form 'zapp-pipes-dev-kit';
import provider form 'path-to-your-provider';

class ZappPipesGetter = {
  constructor() {
    this.get = createZappPipesLibrary({ providers: [provider], release: 'release-name' });
  }
}

export { ZappPipesGetter };

// you can now use this class to perform request like the app would.

const zappPipes = new ZappPipesGetter();
zappPipes.get('provider-name://fetchData?type=XXX&url=YYY', console.log);

native bridge injection

In each mode, server or library, you can inject a custom native bridge to allow providers to interact with the environment. the native bridge is a module which is injected in the provider's handler function, and provides several features.

In Zapp-iOS and Zapp-Android, there is no need to define a custom native bridge. But if you're using this package locally, on the server, or on any other environment, you have the ability to do so. Here's what a custom native bridge module looks like, and how to inject it :

// All methods are optional since the custom nativeBridge is merged with the
// default one. Customizing the appData() function will do in most cases

const nativeBridge = {
  sendResponse(response, code) {}, // hook invoked when the provider returns its data
  log(...messages) {}, // log function which can be used in providers and customised dependending on the environment
  throwError(reason) {}, // hook invoked when the providers returns an error
  appData() {} // function which gives the provider some data regarding the native environment (platform, bundle identifier, account Id, broadcaster Id, uuid...);
};

// library mode
const zappPipesGetter = createZappPipesLibrary({
  providers,
  release,
  nativeBridge
});

// server mode
const zappPipesServer = createZappPipesServer({
  providers,
  release,
  nativeBridge
});

For development

  • Clone this repo
  • Install dependencies with yarn or npm install