@novominteractive/ase-transport-nats
v1.0.0-rc.2
Published
NATS transport for [`@novominteractive/anyware-stateless-client`](https://www.npmjs.com/package/@novominteractive/anyware-stateless-client). Supports browser WebSocket connections and Node.js TCP connections.
Readme
@novominteractive/ase-transport-nats
NATS transport for @novominteractive/anyware-stateless-client. Supports browser WebSocket connections and Node.js TCP connections.
Installation
yarn add @novominteractive/anyware-stateless-client @novominteractive/ase-transport-natsFor Node.js TCP connections, also install the Node transport:
yarn add @nats-io/transport-nodePeer dependencies
| Package | Required | Notes |
|---------|----------|-------|
| @novominteractive/anyware-stateless-client | Yes | Core client |
| @nats-io/transport-node | No | Only needed for TCP connections in Node.js |
Usage
Browser / Node.js via WebSocket
Point servers at the WebSocket port of your NATS server (typically 4221).
import ASEClient from '@novominteractive/anyware-stateless-client';
import { NatsTransport } from '@novominteractive/ase-transport-nats';
const client = new ASEClient({
licenseKey: 'your-license-key',
rootTopic: 'myProject/production',
transport: new NatsTransport({ servers: 'ws://your-nats-server:4221' }),
});
await client.connect(credsToken);Node.js via TCP
For server-side code, inject connect from @nats-io/transport-node and use a nats:// URL (TCP port, typically 4222). This avoids the WebSocket overhead and works on Node.js 20+.
import { connect } from '@nats-io/transport-node';
import ASEClient from '@novominteractive/anyware-stateless-client';
import { NatsTransport } from '@novominteractive/ase-transport-nats';
const client = new ASEClient({
licenseKey: 'your-license-key',
rootTopic: 'myProject/production',
transport: new NatsTransport({
servers: 'nats://your-nats-server:4222',
connect,
}),
});Token format
The NATS transport expects a .creds string — a NATS User JWT bundled with its NKey seed. Use signNatsToken from @novominteractive/anyware-server-auth to issue one server-side:
import { signASEToken } from '@novominteractive/anyware-server-auth';
const token = await signASEToken({
transport: 'nats',
payload: {
subscribeTopics: ['myProject/events'],
publishTopics: ['myProject/commands'],
ttlSeconds: 3600,
},
config: {
signingKeySeed: process.env.NATS_SIGNING_SEED!,
accountPublicKey: process.env.NATS_ACCOUNT_PUBLIC_KEY!,
licenseKey: 'your-license-key',
},
});The signing seed and account public key come from the license bundle issued by Novom Interactive.
Configuration
interface NatsTransportConfig {
/**
* NATS server URL or array of URLs.
* - WebSocket (browser / Node.js): `ws://host:4221` or `wss://host:4221`
* - TCP (Node.js only, requires `connect` from @nats-io/transport-node): `nats://host:4222`
*/
servers: string | string[];
/**
* Optional TCP connect function for Node.js.
* Pass `connect` from `@nats-io/transport-node` together with a `nats://` URL.
* When omitted, `wsconnect` from `@nats-io/nats-core` is used.
*/
connect?: NatsConnectFn;
}NATS server requirements
The NATS server must be configured with:
- A full JWT resolver (accounts and operator)
- A WebSocket listener if clients connect via
ws://orwss://
