Development Kit for applicaster Zapp-Pipes datasource plugins
This project contains the Zapp-pipes development kit to develop, test, and deploy zapp-pipes bundles.
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.
* with npm : run yarn add @applicaster/zapp-pipes-dev-kit
or
* clone this repo locally, install dependencies, and require it by its path
#### 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
``javascript
// 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.
`javascript
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
`javascript
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);
`
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 :
`javascript
// 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
});
`
* Clone this repo
* Install dependencies with yarn or npm install`