Skip to main content

JavaScript

Stencil nodejs client package provides a store to lookup protobuf descriptors and options to keep the protobuf descriptors upto date.

It has following features

  • Ability to refresh protobuf descriptors in specified intervals
  • Support to download descriptors from multiple urls

Installation

npm install --save @raystack/stencil

Usage

Creating a client

const { Stencil } = require("stencil");

const url = "http://url/to/proto/descriptorset/file";
const client = await Stencil.getInstance(url, {
shouldRefresh: true,
refreshInterval: 43200, // 12 hrs
});

Creating a multiURLClient

const { MultiURLStencil } = require("stencil");

const url1 = "http://url/to/proto/descriptorset/file";
const url2 = "http://url/to/proto/descriptorset/file2";
const client = await MultiURLStencil.getInstance([url1, url2], {
shouldRefresh: true,
refreshInterval: 43200, // 12 hrs
});

Get proto descriptor type

const { Stencil } = require("stencil");

const url = "http://url/to/proto/descriptorset/file";
const client = await Stencil.getInstance(url, {
shouldRefresh: false,
});
const type = client.getType("google.protobuf.DescriptorProto");

Encode/Decode message

Let's say we want to encode message for below proto message defniniton

syntax = "proto3";

package test;

message One {
int64 field_one = 1;
}
const { Stencil } = require('stencil');

const url = 'http://url/to/proto/descriptorset/file';
const client = await Stencil.getInstance(url, {
shouldRefresh: false
});
const type = client.getType('test.One');
// Encode
const msg = { field_one: 10 };
const errs = type.verify(msg);
if errs {
throw new Error(`unable to serialize message: ${errs}`);
}
const encodedBuffer = type.encode(msg).finish();
// Decode
const decodedType = type.decode(encodedBuffer);
console.log(decodedType.toObject())

Setting up development environment

Prerequisite Tools

  1. Clone the repo

    $ git clone https://github.com/raystack/stencil
    $ cd stencil/clients/js
  2. Install dependencies

    $ npm install
  3. Run the tests. All of the tests are written with jest.

    $ npm test

Versioning

We use SemVer for versioning. For the versions available, see the tags.