@twolions/warmer-backend-utilities v0.0.6
@twolions/warmer-backend-utilities
Collection of common NodeJS utilities used in Warmer's backend services
Installation
npm i -S @twolions/warmer-backend-utilitiesAPI
AMQPClient
Used to send and receive messages from a RabbitMQ broker.
AMQPClient expects RABBITMQ_URL and RABBITMQ_DLX to be defined in process.env.
Arguments
queue: string
The name of the queue to connect to.
Usage
const { AMQPClient } = require('@twolions/warmer-backend-utililies');
const client = new AMQPClient('<queue>');
// send a message to the queue
await client.send({ type: 'email:send', payload: {...} });
// receive messages from queue
//
// this is a process that last for the duration of the process itself; if you want to use it along with other processes (http server, etc...) do not `await client.receive`.
await client.receive((msg) => { ... });
// acknowledge a message
client.ack(msg);
// reject a message
// if requeue is false, messages will end up in DLQ, otherwise they will be sent back to the queue where they were consumed from
client.reject(msg, opts = { requeue = false });
// close connection
await client.close();validateRequest
A Koa middleware to validate ctx.query, ctx.params, ctx.body.
validateRequest uses ajv under the hood to perform validations (defined with JSON Schema).
Arguments
schema: object
A Simplified representation of a JSON Schema:
- Keys can be suffixed with a
'?'to denote them as optional - By default, objects will have
additionalProperties: falseset; you can override this by having'*': true - All objects will have a
requiredarray, with the keys of non-optional fields - To create an array type, have the value of a key be an array with a single object, which is the description of the array items
- Has support for nested objects
Return value
voidUsage
const { validateRequest } = require('@twolions/warmer-backend-utilities')
router.post(
'/',
validateRequest({
params: {
id: { type: 'string', minLength: 1 }
},
body: {
'optional?': { type: 'string' }
nested: {
type: { type: 'string', minLength: 1 },
'count?': { type: 'number', minLength: 1 },
},
},
}),
async (ctx) => {
const { id } = ctx.request.params;
const { optional, nested } = ctx.request.body;
// optional and nested.count can be `null`
},
)validate
A function that uses the same simplified representation of a JSON Schema as validateRequest, but to validate any value you might require.
Arguments
schema: object
A Simplified representation of a JSON Schema:
value: any
The value to validate against schema
Return value
{
valid: Boolean,
errors: Array,
}Usage
const { validate } = require('@twolions/warmer-backend-utilities')sleep
⏰
asyncfunction
Returns a promise that resolves after ms miliseconds.
Arguments
ms: int
Number of miliseconds to wait before resolving promise
Return value
voidUsage
await sleep(1000); // will wait one second before resolvingretry
⏰
asyncfunction
Arguments
fn: function
Function to retry.
opts: object
Configuration options. Defaults to 3 attempts with no delay.
{
attempts: 3,
delay: 0,
}Return value
Whatever the return value of fn argument is.
Throws if attempts are reached without fn resolving.
Usage
await retry(possiblyFailingFunction, { attempts: 10, delay: 100 });