@novominteractive/anyware-stateless-client
v3.0.0-rc.2
Published
Transport-agnostic TypeScript client for the Anyware Serverless Engine. Supports subscribe, unsubscribe, publish, and disconnect over any compatible transport.
Readme
Anyware Stateless Engine Client
Transport-agnostic TypeScript client for the Anyware Serverless Engine. Supports subscribe, unsubscribe, publish, and disconnect over any compatible transport.
Commercial license required. See LICENSE.md for details.
Installation
Install the core client and one transport package:
| Transport | Package | Use when |
|-----------|---------|----------|
| NATS | @novominteractive/ase-transport-nats | Browser (WebSocket) or Node.js |
| AWS IoT | @novominteractive/ase-transport-aws-iot | AWS IoT Core (MQTT over WebSocket) |
yarn add @novominteractive/anyware-stateless-client @novominteractive/ase-transport-nats
# or
yarn add @novominteractive/anyware-stateless-client @novominteractive/ase-transport-aws-iotUsage
Construct a transport and pass it to ASEClient:
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(token);
await client.subscribe<{ message: string }>('events', (payload) => {
console.log(payload.message);
});
await client.publish('commands', { action: 'start' });
await client.disconnect();See the transport package README for transport-specific configuration and token format.
API
new ASEClient(config)
interface ASEClientConfig {
/** License key for the ASE service. */
licenseKey: string;
/** Root topic prefix applied to all subjects. */
rootTopic: string;
/** Constructed transport instance from a transport package. */
transport: Transport;
}client.connect(token)
Connects using the provided token. Token format depends on the transport — see the relevant transport package README.
await client.connect(signedJwt);client.subscribe<T>(topic, handler)
Subscribes to {licenseKey}/{rootTopic}/{topic}. The handler receives the deserialized JSON payload typed as T.
await client.subscribe<MyPayloadType>('myTopic', async (payload) => {
console.log('Received:', payload);
});client.unsubscribe(topic)
Unsubscribes from {licenseKey}/{rootTopic}/{topic}.
await client.unsubscribe('myTopic');client.publish(topic, payload)
Serializes payload to JSON and publishes to {licenseKey}/{rootTopic}/{topic}.
await client.publish('myTopic', { key: 'value' });client.disconnect()
Disconnects and cleans up the transport.
await client.disconnect();Issuing tokens
Tokens must be signed server-side. Use @novominteractive/anyware-server-auth — never expose signing secrets to the client.
Issue reporting
Please email [email protected].
