0.1.11 • Published 3 months ago

blest-js v0.1.11

Weekly downloads
-
License
MIT
Repository
github
Last release
3 months ago

BLEST.js

The NodeJS reference implementation of BLEST (Batch-able, Lightweight, Encrypted State Transfer), an improved communication protocol for web APIs which leverages JSON, supports request batching and selective returns, and provides a modern alternative to REST. It includes examples for Connect, Express, Fastify, Hapi, and Koa.

To learn more about BLEST, please visit the website: https://blest.jhunt.dev

For a front-end implementation in React, please visit https://github.com/jhuntdev/blest-react

Features

  • Built on JSON - Reduce parsing time and overhead
  • Request Batching - Save bandwidth and reduce load times
  • Compact Payloads - Save more bandwidth
  • Selective Returns - Save even more bandwidth
  • Single Endpoint - Reduce complexity and improve data privacy
  • Fully Encrypted - Improve data privacy

Installation

Install BLEST.js from npm

With npm:

npm install --save blest-js

or using yarn:

yarn add blest-js

Usage

The default export of this library has an interface similar to Express or Connect. It also provides a Router class with a handle method for use in an existing NodeJS application and an HttpClient class with a request method for making BLEST HTTP requests.

const express = require('express');
const blest = require('blest-js');

const app = blest({
  timeout: 1000,
  url: '/',
  cors: 'http://localhost:3000'
});
const port = 8080;

const authMiddleware = (params, context) => {
  if (params?.name) {
    context.user = {
      name: params.name
    };
  } else {
    throw new Error('Unauthorized');
  }
};

const greetController = (params, context) => {
  return {
    greeting: `Hi, ${context.user?.name}!`
  };
};

const errorHandler = (params, context, error) => {
  console.log(error);
};

app.use(errorHandler);

app.use(authMiddleware);

app.route('greet', greetController);

app.listen(port, () => {
  console.log(`Server listening on port ${port}`);
});

Router

This example uses Express, but you can find examples with other frameworks here.

const express = require('express');
const { Router } = require('blest-js');

const app = express();
const port = 8080;

// Create some middleware (optional)
const authMiddleware = (params, context) => {
  if (params?.name) {
    context.user = {
      name: params.name
    };
  } else {
    throw new Error('Unauthorized');
  }
};

// Create a route controller
const greetController = (params, context) => {
  return {
    greeting: `Hi, ${context.user?.name}!`
  };
};

// Create a BLEST router
const router = new Router({ timeout: 1000 });
router.route('greet', authMiddleware, greetController);

// Parse the JSON body
app.use(express.json());

// Use the request handler
app.post('/', async (req, res, next) => {
  const [result, error] = await router.handle(req.body, {
    headers: req.headers
  });
  if (error) {
    return next(error);
  } else {
    res.json(result);
  }
});

// Listen for requests
app.listen(port, () => {
  console.log(`Server listening on port ${port}`);
});

HttpClient

const { HttpClient } = require('blest-js');

// Create a client
const client = new HttpClient('http://localhost:8080', {
  maxBatchSize: 25,
  bufferDelay: 10,
  headers: {
    'Authorization': 'Bearer token'
  }
});

// Send a request
client.request('greet', { name: 'Steve' }, ['greeting'])
.then((result) => {
  // Do something with the result
})
.catch((error) => {
  // Do something in case of error
});

License

This project is licensed under the MIT License.

0.1.11

3 months ago

0.1.10

7 months ago

0.1.0

10 months ago

0.1.2

10 months ago

0.1.1

10 months ago

0.1.8

10 months ago

0.1.7

10 months ago

0.1.9

8 months ago

0.1.4

10 months ago

0.1.3

10 months ago

0.1.6

10 months ago

0.1.5

10 months ago

0.0.11

11 months ago

0.0.12

11 months ago

0.0.10

11 months ago

0.0.9

11 months ago

0.0.8

11 months ago

0.0.5

11 months ago

0.0.4

11 months ago

0.0.7

11 months ago

0.0.6

11 months ago

0.0.3

12 months ago

0.0.2

12 months ago

0.0.1

12 months ago