@hyper-graph/ws-adapter
TypeScript icon, indicating that this package has built-in type declarations

0.7.0 • Public • Published

NestJS Websocket Adapter

Motivation:

Websocket adapters, which provided by NestJS, are very simple and cannot be used in large applications. They can only receive messages, send replies, without correlation id, and send events. Using them you can't reply with correlation id in common, can't verify connect and etc. This adapter try to resolve more of common cases.

Features

Correlation ID

Then you return data from a gateway it will return with correlationId which was received from client. This behavior can be configured by adapter options.

Events

It's not a feature, but events has different api than nestjs adapters. You can emit an event on connect and all data that you pass will be sent to client with wrapping into protocol.

Formatter

You can specify a formatter for your application. It means you can use JSON, yml, xml, binary or another format of data.

Protocol

Protocol control all data that receive or send application and wrap it into control object. Protocol can receive correlationId and send it in response with data what return message handler. You can also pass your own implementation of protocol.

Connect verification

You can set connect verification handler. This handler will be called for each connect request. If handler throws an error, connect will be rejected. You can set headers that will be sent to client with accept message.

Multiple handlers

You can set as many handlers for one patter as you need to. All responses will be merged into one object and pass into protocol as one result.

Regex patterns

In nestjs adapters you can pass only string as pattern into SubscribeMessage decorator. All messages checks using strict equal. This adapter supports string and regex for searching handlers which will be called.

Gateway namespaces

You can specify namespaces for your gateway. How do they work depends on protocol. See more information in API Reference.

API Reference:

Adapter

Base usage:

const app = await NestFactory.create(AppModule);

app.useWebsocketAdapter(new WebsocketAdapter(app));

await app.listenAsync(3000);

Formatter

You can pass formatter in options in first argument.

const app = await NestFactory.create(AppModule);

app.useWebsocketAdapter(new WebsocketAdapter(app, {
    formatter: new JsonFormat(),
}));

await app.listenAsync(3000);

JsonFormat is builtin formatter.

You can write your own formatter for example for yml.

For do this you will extend BaseFormat class and implement to methods: parse and format.

Protocol

You can use protocol like formatter. It can be passed in options in second argument.

const app = await NestFactory.create(AppModule);

app.useWebsocketAdapter(new WebsocketAdapter(app, {
    protocol: new JsonRpcProtocol(),
}));

await app.listenAsync(3000);

JsonRpcProtocol is builtin protocol.

You can write your own protocol handler.

For do this you will extend BaseProtocol class and implement to methods: handle and formatEvent.

These methods are not so simple as parse and format in a formatter, but BaseProtocol class provides some helpful methods. You also can use JsonRpcProtocol class as example for your own implementation.

Namespace delimiter

If you want to use namespaces, you can specify a delimiter between namespaces and method.

const app = await NestFactory.create(AppModule);

app.useWebsocketAdapter(new WebsocketAdapter(app, {
    namespaceDelimiter: '/',
}));

await app.listenAsync(3000);

Gateways

WebSocketGateway Decorator

This adapter support WebSocketGateway arguments. NestJS use first argument as port if it's a number else it will be used as options. If you pass a port, you can pass options in second argument.

TODO: Work In Progress

Dependents (0)

Package Sidebar

Install

npm i @hyper-graph/ws-adapter

Weekly Downloads

2

Version

0.7.0

License

MIT

Unpacked Size

70.8 kB

Total Files

60

Last publish

Collaborators

  • tsapko3628