neume-network / strategies

Indexing strategies for the neume network.
GNU General Public License v3.0
11 stars 7 forks source link

neume-network-strategies

purpose

The goal of this repository and the overall idea of separating neume-network-core's source from its strategies, is to allow any type of music platform to quickly define their on-chain schema - allowing them to re-use neume-network-core to index and distribute their and other platform's music ecosystem.

installation and contributing

implementing new strategies

Checkout the quickstart guide for a in-depth walkthrough.

high-level checklist for implementation

To implement a strategy with maximum efficiency, we recommend doing all on-chain and off-chain requests using the extraction Worker API.

extractor strategy interface definition

An extractor strategy must implement the following interface:

interface Extractor {
  name: String;
  init(args...): Object<messages:  Message[], write: String>;
  update(message: Message): Object<messages: Message[], write: String>;
}

Where Message is defined as any JSON object compliant to the definitions in neume-network/message-schema.

A neume-network extraction message is layed out similarly to a react.js component in that foundamentally, it is a component implementing lifecycle methods.

Below is a visual overview of a neume-network extractor component's lifecycle.

transformer strategy interface definition

A transformer strategy must implement the following interface:

interface Transformer {
  name: String;
  onLine(line: String): String | null | undefined;
  onError(error: Error): any;
  onClose(): String | null | undefined;
}

Where Message is defined as any JSON object compliant to the definitions in neume-network/message-schema.