@sirena-lwm2m/coap 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +17 -0
- package/README.md +78 -0
- package/dist/api/exchange-context.d.ts +34 -0
- package/dist/api/exchange-context.d.ts.map +1 -0
- package/dist/api/exchange-context.js +2 -0
- package/dist/api/exchange-context.js.map +1 -0
- package/dist/api/headers.d.ts +10 -0
- package/dist/api/headers.d.ts.map +1 -0
- package/dist/api/headers.js +69 -0
- package/dist/api/headers.js.map +1 -0
- package/dist/api/index.d.ts +5 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +4 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/request.d.ts +11 -0
- package/dist/api/request.d.ts.map +1 -0
- package/dist/api/request.js +49 -0
- package/dist/api/request.js.map +1 -0
- package/dist/api/response.d.ts +11 -0
- package/dist/api/response.d.ts.map +1 -0
- package/dist/api/response.js +19 -0
- package/dist/api/response.js.map +1 -0
- package/dist/blockwise/block1-assembler.d.ts +26 -0
- package/dist/blockwise/block1-assembler.d.ts.map +1 -0
- package/dist/blockwise/block1-assembler.js +94 -0
- package/dist/blockwise/block1-assembler.js.map +1 -0
- package/dist/blockwise/block2-chunker.d.ts +23 -0
- package/dist/blockwise/block2-chunker.d.ts.map +1 -0
- package/dist/blockwise/block2-chunker.js +99 -0
- package/dist/blockwise/block2-chunker.js.map +1 -0
- package/dist/blockwise/index.d.ts +8 -0
- package/dist/blockwise/index.d.ts.map +1 -0
- package/dist/blockwise/index.js +5 -0
- package/dist/blockwise/index.js.map +1 -0
- package/dist/blockwise/middleware.d.ts +7 -0
- package/dist/blockwise/middleware.d.ts.map +1 -0
- package/dist/blockwise/middleware.js +120 -0
- package/dist/blockwise/middleware.js.map +1 -0
- package/dist/blockwise/option.d.ts +12 -0
- package/dist/blockwise/option.d.ts.map +1 -0
- package/dist/blockwise/option.js +55 -0
- package/dist/blockwise/option.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/message/index.d.ts +21 -0
- package/dist/message/index.d.ts.map +1 -0
- package/dist/message/index.js +79 -0
- package/dist/message/index.js.map +1 -0
- package/dist/observability.d.ts +44 -0
- package/dist/observability.d.ts.map +1 -0
- package/dist/observability.js +71 -0
- package/dist/observability.js.map +1 -0
- package/dist/observe-notification.d.ts +21 -0
- package/dist/observe-notification.d.ts.map +1 -0
- package/dist/observe-notification.js +87 -0
- package/dist/observe-notification.js.map +1 -0
- package/dist/observe.d.ts +10 -0
- package/dist/observe.d.ts.map +1 -0
- package/dist/observe.js +3 -0
- package/dist/observe.js.map +1 -0
- package/dist/option-parser/index.d.ts +30 -0
- package/dist/option-parser/index.d.ts.map +1 -0
- package/dist/option-parser/index.js +125 -0
- package/dist/option-parser/index.js.map +1 -0
- package/dist/router/app.d.ts +8 -0
- package/dist/router/app.d.ts.map +1 -0
- package/dist/router/app.js +25 -0
- package/dist/router/app.js.map +1 -0
- package/dist/router/content-format.d.ts +7 -0
- package/dist/router/content-format.d.ts.map +1 -0
- package/dist/router/content-format.js +23 -0
- package/dist/router/content-format.js.map +1 -0
- package/dist/router/index.d.ts +9 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +5 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/radix.d.ts +16 -0
- package/dist/router/radix.d.ts.map +1 -0
- package/dist/router/radix.js +69 -0
- package/dist/router/radix.js.map +1 -0
- package/dist/router/router.d.ts +38 -0
- package/dist/router/router.d.ts.map +1 -0
- package/dist/router/router.js +111 -0
- package/dist/router/router.js.map +1 -0
- package/dist/router.d.ts +2 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +2 -0
- package/dist/router.js.map +1 -0
- package/dist/security.d.ts +3 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +2 -0
- package/dist/security.js.map +1 -0
- package/dist/store/index.d.ts +26 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +68 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/sqlite-store.d.ts +10 -0
- package/dist/store/sqlite-store.d.ts.map +1 -0
- package/dist/store/sqlite-store.js +75 -0
- package/dist/store/sqlite-store.js.map +1 -0
- package/dist/store.d.ts +5 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +3 -0
- package/dist/store.js.map +1 -0
- package/dist/transport/dtls.d.ts +38 -0
- package/dist/transport/dtls.d.ts.map +1 -0
- package/dist/transport/dtls.js +151 -0
- package/dist/transport/dtls.js.map +1 -0
- package/dist/transport/events.d.ts +34 -0
- package/dist/transport/events.d.ts.map +1 -0
- package/dist/transport/events.js +2 -0
- package/dist/transport/events.js.map +1 -0
- package/dist/transport/index.d.ts +10 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/index.js +5 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/transport/tcp-connection.d.ts +18 -0
- package/dist/transport/tcp-connection.d.ts.map +1 -0
- package/dist/transport/tcp-connection.js +72 -0
- package/dist/transport/tcp-connection.js.map +1 -0
- package/dist/transport/tcp-frame.d.ts +17 -0
- package/dist/transport/tcp-frame.d.ts.map +1 -0
- package/dist/transport/tcp-frame.js +112 -0
- package/dist/transport/tcp-frame.js.map +1 -0
- package/dist/transport/tcp-stream.d.ts +21 -0
- package/dist/transport/tcp-stream.d.ts.map +1 -0
- package/dist/transport/tcp-stream.js +52 -0
- package/dist/transport/tcp-stream.js.map +1 -0
- package/dist/transport/udp.d.ts +97 -0
- package/dist/transport/udp.d.ts.map +1 -0
- package/dist/transport/udp.js +994 -0
- package/dist/transport/udp.js.map +1 -0
- package/dist/transport.d.ts +3 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +2 -0
- package/dist/transport.js.map +1 -0
- package/docs/api-reference.md +536 -0
- package/docs/blockwise.md +117 -0
- package/docs/observability.md +206 -0
- package/docs/observe.md +203 -0
- package/docs/releasing.md +106 -0
- package/docs/router.md +170 -0
- package/docs/store.md +212 -0
- package/docs/tcp-transport.md +89 -0
- package/docs/udp-transport.md +81 -0
- package/examples/slice-1.ts +12 -0
- package/examples/slice-2.ts +96 -0
- package/examples/slice-3-psk.ts +70 -0
- package/examples/slice-3-x509.ts +85 -0
- package/examples/slice-4.ts +45 -0
- package/examples/slice-5-firmware.ts +207 -0
- package/examples/slice-6-temperature.ts +163 -0
- package/examples/slice-7-file-store.ts +92 -0
- package/examples/slice-7-otel.ts +123 -0
- package/package.json +73 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observe.d.ts","sourceRoot":"","sources":["../src/observe.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AAErC,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,IAAI,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;CAC/C"}
|
package/dist/observe.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observe.js","sourceRoot":"","sources":["../src/observe.ts"],"names":[],"mappings":"AAAA,0CAA0C"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface CoapOption {
|
|
2
|
+
number: number;
|
|
3
|
+
value: Uint8Array;
|
|
4
|
+
}
|
|
5
|
+
export interface EncodeOptionsOpts {
|
|
6
|
+
includePayloadMarker?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface DecodeOptionsResult {
|
|
9
|
+
options: CoapOption[];
|
|
10
|
+
payloadOffset: number;
|
|
11
|
+
}
|
|
12
|
+
export declare const OptionNumber: {
|
|
13
|
+
readonly UriHost: 3;
|
|
14
|
+
readonly Observe: 6;
|
|
15
|
+
readonly UriPort: 7;
|
|
16
|
+
readonly UriPath: 11;
|
|
17
|
+
readonly ContentFormat: 12;
|
|
18
|
+
readonly MaxAge: 14;
|
|
19
|
+
readonly UriQuery: 15;
|
|
20
|
+
readonly Accept: 17;
|
|
21
|
+
readonly Block2: 23;
|
|
22
|
+
readonly Block1: 27;
|
|
23
|
+
};
|
|
24
|
+
export declare function encodeOptions(options: CoapOption[], opts?: EncodeOptionsOpts): Uint8Array;
|
|
25
|
+
export declare function decodeOptions(buf: Uint8Array, offset: number): DecodeOptionsResult;
|
|
26
|
+
export declare function uintToBytes(n: number): Uint8Array;
|
|
27
|
+
export declare function bytesToUint(b: Uint8Array): number;
|
|
28
|
+
export declare function stringToBytes(s: string): Uint8Array;
|
|
29
|
+
export declare function bytesToString(b: Uint8Array): string;
|
|
30
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/option-parser/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;CAWf,CAAC;AAiCX,wBAAgB,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,UAAU,CA6BzF;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAoClF;AAID,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,CASjD;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAMjD;AAKD,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,CAEnD;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAEnD"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
export const OptionNumber = {
|
|
2
|
+
UriHost: 3,
|
|
3
|
+
Observe: 6,
|
|
4
|
+
UriPort: 7,
|
|
5
|
+
UriPath: 11,
|
|
6
|
+
ContentFormat: 12,
|
|
7
|
+
MaxAge: 14,
|
|
8
|
+
UriQuery: 15,
|
|
9
|
+
Accept: 17,
|
|
10
|
+
Block2: 23,
|
|
11
|
+
Block1: 27,
|
|
12
|
+
};
|
|
13
|
+
// RFC 7252 §3.1: option delta/length nibble encoding helpers
|
|
14
|
+
function encodeExtended(value) {
|
|
15
|
+
if (value < 13) {
|
|
16
|
+
return { nibble: value, extra: new Uint8Array(0) };
|
|
17
|
+
}
|
|
18
|
+
else if (value < 269) {
|
|
19
|
+
const buf = new Uint8Array(1);
|
|
20
|
+
buf[0] = value - 13;
|
|
21
|
+
return { nibble: 13, extra: buf };
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
const buf = new Uint8Array(2);
|
|
25
|
+
const adjusted = value - 269;
|
|
26
|
+
buf[0] = (adjusted >> 8) & 0xff;
|
|
27
|
+
buf[1] = adjusted & 0xff;
|
|
28
|
+
return { nibble: 14, extra: buf };
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function decodeExtended(nibble, buf, offset) {
|
|
32
|
+
if (nibble < 13) {
|
|
33
|
+
return { value: nibble, newOffset: offset };
|
|
34
|
+
}
|
|
35
|
+
else if (nibble === 13) {
|
|
36
|
+
return { value: buf[offset] + 13, newOffset: offset + 1 };
|
|
37
|
+
}
|
|
38
|
+
else if (nibble === 14) {
|
|
39
|
+
const value = (buf[offset] << 8) | buf[offset + 1];
|
|
40
|
+
return { value: value + 269, newOffset: offset + 2 };
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
// nibble === 15 is reserved / payload marker signal — caller handles
|
|
44
|
+
return { value: 15, newOffset: offset };
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export function encodeOptions(options, opts) {
|
|
48
|
+
const chunks = [];
|
|
49
|
+
let prevNumber = 0;
|
|
50
|
+
for (const opt of options) {
|
|
51
|
+
const delta = opt.number - prevNumber;
|
|
52
|
+
prevNumber = opt.number;
|
|
53
|
+
const { nibble: deltaNibble, extra: deltaExtra } = encodeExtended(delta);
|
|
54
|
+
const { nibble: lenNibble, extra: lenExtra } = encodeExtended(opt.value.length);
|
|
55
|
+
const header = new Uint8Array(1);
|
|
56
|
+
header[0] = ((deltaNibble & 0x0f) << 4) | (lenNibble & 0x0f);
|
|
57
|
+
chunks.push(header, deltaExtra, lenExtra, opt.value);
|
|
58
|
+
}
|
|
59
|
+
if (opts?.includePayloadMarker) {
|
|
60
|
+
chunks.push(new Uint8Array([0xff]));
|
|
61
|
+
}
|
|
62
|
+
const totalLen = chunks.reduce((acc, c) => acc + c.length, 0);
|
|
63
|
+
const result = new Uint8Array(totalLen);
|
|
64
|
+
let pos = 0;
|
|
65
|
+
for (const chunk of chunks) {
|
|
66
|
+
result.set(chunk, pos);
|
|
67
|
+
pos += chunk.length;
|
|
68
|
+
}
|
|
69
|
+
return result;
|
|
70
|
+
}
|
|
71
|
+
export function decodeOptions(buf, offset) {
|
|
72
|
+
const options = [];
|
|
73
|
+
let pos = offset;
|
|
74
|
+
let prevNumber = 0;
|
|
75
|
+
while (pos < buf.length) {
|
|
76
|
+
const headerByte = buf[pos];
|
|
77
|
+
if (headerByte === 0xff) {
|
|
78
|
+
// payload marker
|
|
79
|
+
return { options, payloadOffset: pos + 1 };
|
|
80
|
+
}
|
|
81
|
+
pos++;
|
|
82
|
+
const deltaNibble = (headerByte >> 4) & 0x0f;
|
|
83
|
+
const lenNibble = headerByte & 0x0f;
|
|
84
|
+
const deltaResult = decodeExtended(deltaNibble, buf, pos);
|
|
85
|
+
pos = deltaResult.newOffset;
|
|
86
|
+
const lenResult = decodeExtended(lenNibble, buf, pos);
|
|
87
|
+
pos = lenResult.newOffset;
|
|
88
|
+
const delta = deltaResult.value;
|
|
89
|
+
const length = lenResult.value;
|
|
90
|
+
const number = prevNumber + delta;
|
|
91
|
+
prevNumber = number;
|
|
92
|
+
const value = buf.slice(pos, pos + length);
|
|
93
|
+
pos += length;
|
|
94
|
+
options.push({ number, value });
|
|
95
|
+
}
|
|
96
|
+
return { options, payloadOffset: pos };
|
|
97
|
+
}
|
|
98
|
+
// Value format helpers
|
|
99
|
+
export function uintToBytes(n) {
|
|
100
|
+
if (n === 0)
|
|
101
|
+
return new Uint8Array(0);
|
|
102
|
+
const bytes = [];
|
|
103
|
+
let remaining = n;
|
|
104
|
+
while (remaining > 0) {
|
|
105
|
+
bytes.unshift(remaining & 0xff);
|
|
106
|
+
remaining = Math.floor(remaining / 256);
|
|
107
|
+
}
|
|
108
|
+
return new Uint8Array(bytes);
|
|
109
|
+
}
|
|
110
|
+
export function bytesToUint(b) {
|
|
111
|
+
let result = 0;
|
|
112
|
+
for (const byte of b) {
|
|
113
|
+
result = result * 256 + byte;
|
|
114
|
+
}
|
|
115
|
+
return result;
|
|
116
|
+
}
|
|
117
|
+
const textEncoder = new TextEncoder();
|
|
118
|
+
const textDecoder = new TextDecoder();
|
|
119
|
+
export function stringToBytes(s) {
|
|
120
|
+
return textEncoder.encode(s);
|
|
121
|
+
}
|
|
122
|
+
export function bytesToString(b) {
|
|
123
|
+
return textDecoder.decode(b);
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/option-parser/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Server } from '../transport/index.js';
|
|
2
|
+
import type { RouterOptions } from './router.js';
|
|
3
|
+
import { Router } from './router.js';
|
|
4
|
+
export interface AppOptions extends RouterOptions {
|
|
5
|
+
server: Server;
|
|
6
|
+
}
|
|
7
|
+
export declare function createApp(opts: AppOptions): Router;
|
|
8
|
+
//# sourceMappingURL=app.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/router/app.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAc,aAAa,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,WAAW,UAAW,SAAQ,aAAa;IAC/C,MAAM,EAAE,MAAM,CAAC;CAChB;AAeD,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAWlD"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Router } from './router.js';
|
|
2
|
+
function extractPath(url) {
|
|
3
|
+
if (url.startsWith('coap://') || url.startsWith('coaps://')) {
|
|
4
|
+
try {
|
|
5
|
+
const parsed = new URL(url);
|
|
6
|
+
return parsed.pathname || '/';
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
return '/';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
const queryIdx = url.indexOf('?');
|
|
13
|
+
return queryIdx === -1 ? url : url.slice(0, queryIdx);
|
|
14
|
+
}
|
|
15
|
+
export function createApp(opts) {
|
|
16
|
+
const { server, ...routerOpts } = opts;
|
|
17
|
+
const router = new Router(routerOpts);
|
|
18
|
+
server.on('request', (req, ctx) => {
|
|
19
|
+
const method = req.method;
|
|
20
|
+
const path = extractPath(req.url);
|
|
21
|
+
void router.handle(req, ctx, method, path);
|
|
22
|
+
});
|
|
23
|
+
return router;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/router/app.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAMrC,SAAS,WAAW,CAAC,GAAW;IAC9B,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,OAAO,MAAM,CAAC,QAAQ,IAAI,GAAG,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAgB;IACxC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,GAAG,IAAI,CAAC;IACvC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC;IAEtC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAY,EAAE,GAAoB,EAAE,EAAE;QAC1D,MAAM,MAAM,GAAG,GAAG,CAAC,MAAoB,CAAC;QACxC,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Middleware } from './router.js';
|
|
2
|
+
export interface ContentFormatRegistry {
|
|
3
|
+
accepts(contentFormat: number): boolean;
|
|
4
|
+
negotiate(accept: number[]): number | null;
|
|
5
|
+
}
|
|
6
|
+
export declare function contentFormat(registry: ContentFormatRegistry): Middleware;
|
|
7
|
+
//# sourceMappingURL=content-format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-format.d.ts","sourceRoot":"","sources":["../../src/router/content-format.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC;IACxC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC;CAC5C;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,qBAAqB,GAAG,UAAU,CAqBzE"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { OptionNumber, bytesToUint } from '../option-parser/index.js';
|
|
2
|
+
import { stringToCode } from '../message/index.js';
|
|
3
|
+
export function contentFormat(registry) {
|
|
4
|
+
return (req, ctx, next) => {
|
|
5
|
+
const cfOpt = ctx.options.find(o => o.number === OptionNumber.ContentFormat);
|
|
6
|
+
if (cfOpt !== undefined) {
|
|
7
|
+
if (!registry.accepts(bytesToUint(cfOpt.value))) {
|
|
8
|
+
ctx.abort(stringToCode('4.06'));
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
const acceptOpts = ctx.options.filter(o => o.number === OptionNumber.Accept);
|
|
13
|
+
if (acceptOpts.length > 0) {
|
|
14
|
+
const acceptValues = acceptOpts.map(o => bytesToUint(o.value));
|
|
15
|
+
if (registry.negotiate(acceptValues) === null) {
|
|
16
|
+
ctx.abort(stringToCode('4.06'));
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return next();
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=content-format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-format.js","sourceRoot":"","sources":["../../src/router/content-format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAQnD,MAAM,UAAU,aAAa,CAAC,QAA+B;IAC3D,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACxB,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,YAAY,CAAC,aAAa,CAAC,CAAC;QAC7E,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAChD,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;gBAChC,OAAO;YACT,CAAC;QACH,CAAC;QAED,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,CAAC,CAAC;QAC7E,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/D,IAAI,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC9C,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;gBAChC,OAAO;YACT,CAAC;QACH,CAAC;QAED,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { RadixTree, splitPath } from './radix.js';
|
|
2
|
+
export type { KnownParam, RouteParams, RouteMatch, MatchResult } from './radix.js';
|
|
3
|
+
export { Router } from './router.js';
|
|
4
|
+
export type { CoapMethod, Handler, RouteContext, Route, Middleware, NextFn, DispatchResult, RouterOptions } from './router.js';
|
|
5
|
+
export { contentFormat } from './content-format.js';
|
|
6
|
+
export type { ContentFormatRegistry } from './content-format.js';
|
|
7
|
+
export { createApp } from './app.js';
|
|
8
|
+
export type { AppOptions } from './app.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAClD,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACnF,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC/H,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAElD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type KnownParam = 'oid' | 'iid' | 'rid' | 'ep';
|
|
2
|
+
export type RouteParams = Partial<Record<KnownParam, string>> & Record<string, string>;
|
|
3
|
+
export type RouteMatch<T> = {
|
|
4
|
+
value: T;
|
|
5
|
+
params: RouteParams;
|
|
6
|
+
};
|
|
7
|
+
/** @deprecated Use RouteMatch instead */
|
|
8
|
+
export type MatchResult<T> = RouteMatch<T>;
|
|
9
|
+
export declare function splitPath(path: string): string[];
|
|
10
|
+
export declare class RadixTree<T> {
|
|
11
|
+
private root;
|
|
12
|
+
insert(segments: string[], value: T): void;
|
|
13
|
+
match(segments: string[]): RouteMatch<T> | null;
|
|
14
|
+
private matchFrom;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=radix.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radix.d.ts","sourceRoot":"","sources":["../../src/router/radix.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;AACtD,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACvF,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAAE,KAAK,EAAE,CAAC,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,CAAC;AAE9D,yCAAyC;AACzC,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AAmB3C,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAKhD;AAED,qBAAa,SAAS,CAAC,CAAC;IACtB,OAAO,CAAC,IAAI,CAA8B;IAE1C,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAqB1C,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI;IAI/C,OAAO,CAAC,SAAS;CA+BlB"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
function createNode() {
|
|
2
|
+
return { value: undefined, literalChildren: new Map(), paramChild: null };
|
|
3
|
+
}
|
|
4
|
+
function isParam(segment) {
|
|
5
|
+
if (segment.startsWith('{') && segment.endsWith('}')) {
|
|
6
|
+
return segment.slice(1, -1);
|
|
7
|
+
}
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
export function splitPath(path) {
|
|
11
|
+
const segments = path.split('/');
|
|
12
|
+
if (segments[0] === '')
|
|
13
|
+
segments.shift();
|
|
14
|
+
if (segments[segments.length - 1] === '')
|
|
15
|
+
segments.pop();
|
|
16
|
+
return segments;
|
|
17
|
+
}
|
|
18
|
+
export class RadixTree {
|
|
19
|
+
root = createNode();
|
|
20
|
+
insert(segments, value) {
|
|
21
|
+
let node = this.root;
|
|
22
|
+
for (const seg of segments) {
|
|
23
|
+
const paramName = isParam(seg);
|
|
24
|
+
if (paramName !== null) {
|
|
25
|
+
if (node.paramChild === null) {
|
|
26
|
+
node.paramChild = { name: paramName, node: createNode() };
|
|
27
|
+
}
|
|
28
|
+
node = node.paramChild.node;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
let child = node.literalChildren.get(seg);
|
|
32
|
+
if (child === undefined) {
|
|
33
|
+
child = createNode();
|
|
34
|
+
node.literalChildren.set(seg, child);
|
|
35
|
+
}
|
|
36
|
+
node = child;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
node.value = value;
|
|
40
|
+
}
|
|
41
|
+
match(segments) {
|
|
42
|
+
return this.matchFrom(this.root, segments, 0, {});
|
|
43
|
+
}
|
|
44
|
+
matchFrom(node, segments, depth, params) {
|
|
45
|
+
if (depth === segments.length) {
|
|
46
|
+
if (node.value !== undefined) {
|
|
47
|
+
return { value: node.value, params };
|
|
48
|
+
}
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
const seg = segments[depth];
|
|
52
|
+
// Literals take precedence over parameters
|
|
53
|
+
const literalChild = node.literalChildren.get(seg);
|
|
54
|
+
if (literalChild !== undefined) {
|
|
55
|
+
const result = this.matchFrom(literalChild, segments, depth + 1, params);
|
|
56
|
+
if (result !== null)
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
if (node.paramChild !== null) {
|
|
60
|
+
const { name, node: paramNode } = node.paramChild;
|
|
61
|
+
const nextParams = { ...params, [name]: seg };
|
|
62
|
+
const result = this.matchFrom(paramNode, segments, depth + 1, nextParams);
|
|
63
|
+
if (result !== null)
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=radix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radix.js","sourceRoot":"","sources":["../../src/router/radix.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { Request, ExchangeContext } from '../api/index.js';
|
|
2
|
+
import type { RouteParams } from './radix.js';
|
|
3
|
+
export type CoapMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'FETCH' | 'PATCH' | 'iPATCH';
|
|
4
|
+
export type Handler = (req: Request, ctx: RouteContext) => void | Promise<void>;
|
|
5
|
+
export interface RouteContext extends ExchangeContext {
|
|
6
|
+
params: RouteParams;
|
|
7
|
+
}
|
|
8
|
+
export interface Route {
|
|
9
|
+
path: string;
|
|
10
|
+
method: CoapMethod;
|
|
11
|
+
handler: Handler;
|
|
12
|
+
}
|
|
13
|
+
export type NextFn = () => Promise<void>;
|
|
14
|
+
export type Middleware = (req: Request, ctx: RouteContext, next: NextFn) => void | Promise<void>;
|
|
15
|
+
export interface RouterOptions {
|
|
16
|
+
discovery?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface DispatchResult {
|
|
19
|
+
handler: Handler;
|
|
20
|
+
params: RouteParams;
|
|
21
|
+
run(req: Request, ctx: RouteContext): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
export declare class Router {
|
|
24
|
+
private table;
|
|
25
|
+
private readonly routes;
|
|
26
|
+
private middlewares;
|
|
27
|
+
private readonly discovery;
|
|
28
|
+
constructor(opts?: RouterOptions);
|
|
29
|
+
use(middleware: Middleware): void;
|
|
30
|
+
add(route: Route): void;
|
|
31
|
+
remove(route: Route): void;
|
|
32
|
+
private buildTable;
|
|
33
|
+
private get registeredPaths();
|
|
34
|
+
private buildDiscoveryResponse;
|
|
35
|
+
handle(req: Request, ctx: ExchangeContext, method: CoapMethod, path: string): Promise<void>;
|
|
36
|
+
dispatch(method: CoapMethod, path: string): DispatchResult | null;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/router/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAKhE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;AAC1F,MAAM,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAChF,MAAM,WAAW,YAAa,SAAQ,eAAe;IAAG,MAAM,EAAE,WAAW,CAAC;CAAE;AAC9E,MAAM,WAAW,KAAK;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;CAAE;AAE9E,MAAM,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AACzC,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEjG,MAAM,WAAW,aAAa;IAAG,SAAS,CAAC,EAAE,OAAO,CAAC;CAAE;AAEvD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrD;AAKD,qBAAa,MAAM;IACjB,OAAO,CAAC,KAAK,CAA6C;IAC1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+C;IACtE,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;gBAExB,IAAI,CAAC,EAAE,aAAa;IAIhC,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAIjC,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAUvB,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAU1B,OAAO,CAAC,UAAU;IAQlB,OAAO,KAAK,eAAe,GAE1B;IAED,OAAO,CAAC,sBAAsB;IASxB,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BjG,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;CAyBlE"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { Response, Headers } from '../api/index.js';
|
|
2
|
+
import { stringToCode } from '../message/index.js';
|
|
3
|
+
import { uintToBytes, OptionNumber } from '../option-parser/index.js';
|
|
4
|
+
import { RadixTree, splitPath } from './radix.js';
|
|
5
|
+
const CONTENT_FORMAT_LINK = 40;
|
|
6
|
+
const DISCOVERY_PATH = '/.well-known/core';
|
|
7
|
+
export class Router {
|
|
8
|
+
table = new RadixTree();
|
|
9
|
+
routes = new Map();
|
|
10
|
+
middlewares = [];
|
|
11
|
+
discovery;
|
|
12
|
+
constructor(opts) {
|
|
13
|
+
this.discovery = opts?.discovery ?? false;
|
|
14
|
+
}
|
|
15
|
+
use(middleware) {
|
|
16
|
+
this.middlewares.push(middleware);
|
|
17
|
+
}
|
|
18
|
+
add(route) {
|
|
19
|
+
let methods = this.routes.get(route.path);
|
|
20
|
+
if (methods === undefined) {
|
|
21
|
+
methods = new Map();
|
|
22
|
+
this.routes.set(route.path, methods);
|
|
23
|
+
}
|
|
24
|
+
methods.set(route.method, route.handler);
|
|
25
|
+
this.table = this.buildTable();
|
|
26
|
+
}
|
|
27
|
+
remove(route) {
|
|
28
|
+
const methods = this.routes.get(route.path);
|
|
29
|
+
if (methods === undefined)
|
|
30
|
+
return;
|
|
31
|
+
methods.delete(route.method);
|
|
32
|
+
if (methods.size === 0) {
|
|
33
|
+
this.routes.delete(route.path);
|
|
34
|
+
}
|
|
35
|
+
this.table = this.buildTable();
|
|
36
|
+
}
|
|
37
|
+
buildTable() {
|
|
38
|
+
const tree = new RadixTree();
|
|
39
|
+
for (const [path, methods] of this.routes) {
|
|
40
|
+
tree.insert(splitPath(path), new Map(methods));
|
|
41
|
+
}
|
|
42
|
+
return tree;
|
|
43
|
+
}
|
|
44
|
+
get registeredPaths() {
|
|
45
|
+
return new Set(this.routes.keys());
|
|
46
|
+
}
|
|
47
|
+
buildDiscoveryResponse() {
|
|
48
|
+
const links = [...this.registeredPaths]
|
|
49
|
+
.map(p => `<${p}>;rt="core.rd-lookup-res"`)
|
|
50
|
+
.join(',');
|
|
51
|
+
const body = new TextEncoder().encode(links);
|
|
52
|
+
const headers = new Headers([{ number: OptionNumber.ContentFormat, value: uintToBytes(CONTENT_FORMAT_LINK) }]);
|
|
53
|
+
return new Response(stringToCode('2.05'), body, headers);
|
|
54
|
+
}
|
|
55
|
+
async handle(req, ctx, method, path) {
|
|
56
|
+
if (this.discovery && path === DISCOVERY_PATH && method === 'GET') {
|
|
57
|
+
await ctx.respond(this.buildDiscoveryResponse());
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const table = this.table;
|
|
61
|
+
const segs = splitPath(path);
|
|
62
|
+
const treeMatch = table.match(segs);
|
|
63
|
+
if (treeMatch === null) {
|
|
64
|
+
ctx.abort(stringToCode('4.04'));
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const handler = treeMatch.value.get(method);
|
|
68
|
+
if (handler === undefined) {
|
|
69
|
+
ctx.abort(stringToCode('4.05'));
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const params = treeMatch.params;
|
|
73
|
+
const routeCtx = Object.assign(ctx, { params });
|
|
74
|
+
const middlewares = this.middlewares;
|
|
75
|
+
const chain = [...middlewares, (r, c) => handler(r, c)];
|
|
76
|
+
const dispatch = (i) => {
|
|
77
|
+
if (i >= chain.length)
|
|
78
|
+
return Promise.resolve();
|
|
79
|
+
const fn = chain[i];
|
|
80
|
+
return Promise.resolve(fn(req, routeCtx, () => dispatch(i + 1)));
|
|
81
|
+
};
|
|
82
|
+
await dispatch(0);
|
|
83
|
+
}
|
|
84
|
+
dispatch(method, path) {
|
|
85
|
+
const table = this.table;
|
|
86
|
+
const segs = splitPath(path);
|
|
87
|
+
const match = table.match(segs);
|
|
88
|
+
if (match === null)
|
|
89
|
+
return null;
|
|
90
|
+
const handler = match.value.get(method);
|
|
91
|
+
if (handler === undefined)
|
|
92
|
+
return null;
|
|
93
|
+
const params = match.params;
|
|
94
|
+
const middlewares = this.middlewares;
|
|
95
|
+
return {
|
|
96
|
+
handler,
|
|
97
|
+
params,
|
|
98
|
+
run: (req, ctx) => {
|
|
99
|
+
const chain = [...middlewares, (r, c) => handler(r, c)];
|
|
100
|
+
const dispatch = (i) => {
|
|
101
|
+
if (i >= chain.length)
|
|
102
|
+
return Promise.resolve();
|
|
103
|
+
const fn = chain[i];
|
|
104
|
+
return Promise.resolve(fn(req, ctx, () => dispatch(i + 1)));
|
|
105
|
+
};
|
|
106
|
+
return dispatch(0);
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/router/router.ts"],"names":[],"mappings":"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"}
|
package/dist/router.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
|
package/dist/router.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACrG,YAAY,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/security.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export declare const EXCHANGE_LIFETIME = 247000;
|
|
2
|
+
export declare const NON_LIFETIME = 250000;
|
|
3
|
+
export type StoreKey = {
|
|
4
|
+
remote: string;
|
|
5
|
+
discriminant: 'mid';
|
|
6
|
+
mid: number;
|
|
7
|
+
} | {
|
|
8
|
+
remote: string;
|
|
9
|
+
discriminant: 'token';
|
|
10
|
+
token: string;
|
|
11
|
+
};
|
|
12
|
+
export interface StoreEntry {
|
|
13
|
+
responsePayload?: Uint8Array;
|
|
14
|
+
expiresAt: number;
|
|
15
|
+
}
|
|
16
|
+
export interface TransactionStore {
|
|
17
|
+
set(key: StoreKey, entry: StoreEntry): void;
|
|
18
|
+
get(key: StoreKey): StoreEntry | undefined;
|
|
19
|
+
delete(key: StoreKey): void;
|
|
20
|
+
prune(): void;
|
|
21
|
+
}
|
|
22
|
+
export interface InMemoryStoreOptions {
|
|
23
|
+
lruCap?: number;
|
|
24
|
+
}
|
|
25
|
+
export declare function createInMemoryStore(options?: InMemoryStoreOptions): TransactionStore;
|
|
26
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,SAAU,CAAC;AACzC,eAAO,MAAM,YAAY,SAAU,CAAC;AAEpC,MAAM,MAAM,QAAQ,GAChB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D,MAAM,WAAW,UAAU;IACzB,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IAC5C,GAAG,CAAC,GAAG,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;IAC3C,MAAM,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC5B,KAAK,IAAI,IAAI,CAAC;CACf;AASD,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAgED,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,gBAAgB,CAEpF"}
|