@sirena-lwm2m/coap
v0.8.0
Published
RFC 7252 CoAP stack for Node.js with RFC 8323 TCP transport support.
Readme
@sirena-lwm2m/coap
RFC 7252 CoAP stack for Node.js with RFC 8323 TCP transport support.
Installation
npm install @sirena-lwm2m/coapQuick start — UDP
import { createServer, Response, stringToBytes } from '@sirena-lwm2m/coap';
const server = createServer({
listen: [{ host: '0.0.0.0', port: 5683 }],
});
server.on('request', async (req, ctx) => {
await ctx.respond(Response.ok(stringToBytes(req.url)));
});
await server.start();
console.log('Listening on:', server.listenerSummary());TCP transport (RFC 8323)
The server supports CoAP over TCP using the coap+tcp:// URI scheme. Bind one or more TCP listeners alongside UDP by passing URI strings to the listen array.
import { createServer, Response, stringToBytes } from '@sirena-lwm2m/coap';
const server = createServer({
listen: [
'coap://127.0.0.1:5683', // UDP
'coap+tcp://127.0.0.1:5684', // TCP (RFC 8323)
],
});
server.on('request', async (req, ctx) => {
// ctx.transport is 'udp' or 'tcp'
console.log(`[${ctx.transport}] ${req.url}`);
await ctx.respond(Response.ok(stringToBytes(`hello via ${ctx.transport}`)));
});
await server.start();
console.log('Listening on:', server.listenerSummary());
await server.stop();See examples/slice-2.ts for a working dual-transport demo.
See docs/tcp-transport.md for framing details, connection multiplexing, and configuration.
ExchangeContext
Every 'request' event handler receives a Request and an ExchangeContext:
interface ExchangeContext {
remote: string; // "ip:port" of the sender
local: string; // "ip:port" of the receiving socket
transport: 'udp' | 'tcp'; // which transport delivered this request
token: Uint8Array; // CoAP token bytes
messageId: number; // CoAP message ID (0 for TCP)
options: CoapOption[]; // raw parsed options
peer: Peer; // { mode: 'anonymous' }
respond(res: Response): Promise<void>;
cancel(): void;
abort(code: CoapCode): void;
}License
MIT
