@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.
Files changed (157) hide show
  1. package/LICENSE +17 -0
  2. package/README.md +78 -0
  3. package/dist/api/exchange-context.d.ts +34 -0
  4. package/dist/api/exchange-context.d.ts.map +1 -0
  5. package/dist/api/exchange-context.js +2 -0
  6. package/dist/api/exchange-context.js.map +1 -0
  7. package/dist/api/headers.d.ts +10 -0
  8. package/dist/api/headers.d.ts.map +1 -0
  9. package/dist/api/headers.js +69 -0
  10. package/dist/api/headers.js.map +1 -0
  11. package/dist/api/index.d.ts +5 -0
  12. package/dist/api/index.d.ts.map +1 -0
  13. package/dist/api/index.js +4 -0
  14. package/dist/api/index.js.map +1 -0
  15. package/dist/api/request.d.ts +11 -0
  16. package/dist/api/request.d.ts.map +1 -0
  17. package/dist/api/request.js +49 -0
  18. package/dist/api/request.js.map +1 -0
  19. package/dist/api/response.d.ts +11 -0
  20. package/dist/api/response.d.ts.map +1 -0
  21. package/dist/api/response.js +19 -0
  22. package/dist/api/response.js.map +1 -0
  23. package/dist/blockwise/block1-assembler.d.ts +26 -0
  24. package/dist/blockwise/block1-assembler.d.ts.map +1 -0
  25. package/dist/blockwise/block1-assembler.js +94 -0
  26. package/dist/blockwise/block1-assembler.js.map +1 -0
  27. package/dist/blockwise/block2-chunker.d.ts +23 -0
  28. package/dist/blockwise/block2-chunker.d.ts.map +1 -0
  29. package/dist/blockwise/block2-chunker.js +99 -0
  30. package/dist/blockwise/block2-chunker.js.map +1 -0
  31. package/dist/blockwise/index.d.ts +8 -0
  32. package/dist/blockwise/index.d.ts.map +1 -0
  33. package/dist/blockwise/index.js +5 -0
  34. package/dist/blockwise/index.js.map +1 -0
  35. package/dist/blockwise/middleware.d.ts +7 -0
  36. package/dist/blockwise/middleware.d.ts.map +1 -0
  37. package/dist/blockwise/middleware.js +120 -0
  38. package/dist/blockwise/middleware.js.map +1 -0
  39. package/dist/blockwise/option.d.ts +12 -0
  40. package/dist/blockwise/option.d.ts.map +1 -0
  41. package/dist/blockwise/option.js +55 -0
  42. package/dist/blockwise/option.js.map +1 -0
  43. package/dist/index.d.ts +10 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +6 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/message/index.d.ts +21 -0
  48. package/dist/message/index.d.ts.map +1 -0
  49. package/dist/message/index.js +79 -0
  50. package/dist/message/index.js.map +1 -0
  51. package/dist/observability.d.ts +44 -0
  52. package/dist/observability.d.ts.map +1 -0
  53. package/dist/observability.js +71 -0
  54. package/dist/observability.js.map +1 -0
  55. package/dist/observe-notification.d.ts +21 -0
  56. package/dist/observe-notification.d.ts.map +1 -0
  57. package/dist/observe-notification.js +87 -0
  58. package/dist/observe-notification.js.map +1 -0
  59. package/dist/observe.d.ts +10 -0
  60. package/dist/observe.d.ts.map +1 -0
  61. package/dist/observe.js +3 -0
  62. package/dist/observe.js.map +1 -0
  63. package/dist/option-parser/index.d.ts +30 -0
  64. package/dist/option-parser/index.d.ts.map +1 -0
  65. package/dist/option-parser/index.js +125 -0
  66. package/dist/option-parser/index.js.map +1 -0
  67. package/dist/router/app.d.ts +8 -0
  68. package/dist/router/app.d.ts.map +1 -0
  69. package/dist/router/app.js +25 -0
  70. package/dist/router/app.js.map +1 -0
  71. package/dist/router/content-format.d.ts +7 -0
  72. package/dist/router/content-format.d.ts.map +1 -0
  73. package/dist/router/content-format.js +23 -0
  74. package/dist/router/content-format.js.map +1 -0
  75. package/dist/router/index.d.ts +9 -0
  76. package/dist/router/index.d.ts.map +1 -0
  77. package/dist/router/index.js +5 -0
  78. package/dist/router/index.js.map +1 -0
  79. package/dist/router/radix.d.ts +16 -0
  80. package/dist/router/radix.d.ts.map +1 -0
  81. package/dist/router/radix.js +69 -0
  82. package/dist/router/radix.js.map +1 -0
  83. package/dist/router/router.d.ts +38 -0
  84. package/dist/router/router.d.ts.map +1 -0
  85. package/dist/router/router.js +111 -0
  86. package/dist/router/router.js.map +1 -0
  87. package/dist/router.d.ts +2 -0
  88. package/dist/router.d.ts.map +1 -0
  89. package/dist/router.js +2 -0
  90. package/dist/router.js.map +1 -0
  91. package/dist/security.d.ts +3 -0
  92. package/dist/security.d.ts.map +1 -0
  93. package/dist/security.js +2 -0
  94. package/dist/security.js.map +1 -0
  95. package/dist/store/index.d.ts +26 -0
  96. package/dist/store/index.d.ts.map +1 -0
  97. package/dist/store/index.js +68 -0
  98. package/dist/store/index.js.map +1 -0
  99. package/dist/store/sqlite-store.d.ts +10 -0
  100. package/dist/store/sqlite-store.d.ts.map +1 -0
  101. package/dist/store/sqlite-store.js +75 -0
  102. package/dist/store/sqlite-store.js.map +1 -0
  103. package/dist/store.d.ts +5 -0
  104. package/dist/store.d.ts.map +1 -0
  105. package/dist/store.js +3 -0
  106. package/dist/store.js.map +1 -0
  107. package/dist/transport/dtls.d.ts +38 -0
  108. package/dist/transport/dtls.d.ts.map +1 -0
  109. package/dist/transport/dtls.js +151 -0
  110. package/dist/transport/dtls.js.map +1 -0
  111. package/dist/transport/events.d.ts +34 -0
  112. package/dist/transport/events.d.ts.map +1 -0
  113. package/dist/transport/events.js +2 -0
  114. package/dist/transport/events.js.map +1 -0
  115. package/dist/transport/index.d.ts +10 -0
  116. package/dist/transport/index.d.ts.map +1 -0
  117. package/dist/transport/index.js +5 -0
  118. package/dist/transport/index.js.map +1 -0
  119. package/dist/transport/tcp-connection.d.ts +18 -0
  120. package/dist/transport/tcp-connection.d.ts.map +1 -0
  121. package/dist/transport/tcp-connection.js +72 -0
  122. package/dist/transport/tcp-connection.js.map +1 -0
  123. package/dist/transport/tcp-frame.d.ts +17 -0
  124. package/dist/transport/tcp-frame.d.ts.map +1 -0
  125. package/dist/transport/tcp-frame.js +112 -0
  126. package/dist/transport/tcp-frame.js.map +1 -0
  127. package/dist/transport/tcp-stream.d.ts +21 -0
  128. package/dist/transport/tcp-stream.d.ts.map +1 -0
  129. package/dist/transport/tcp-stream.js +52 -0
  130. package/dist/transport/tcp-stream.js.map +1 -0
  131. package/dist/transport/udp.d.ts +97 -0
  132. package/dist/transport/udp.d.ts.map +1 -0
  133. package/dist/transport/udp.js +994 -0
  134. package/dist/transport/udp.js.map +1 -0
  135. package/dist/transport.d.ts +3 -0
  136. package/dist/transport.d.ts.map +1 -0
  137. package/dist/transport.js +2 -0
  138. package/dist/transport.js.map +1 -0
  139. package/docs/api-reference.md +536 -0
  140. package/docs/blockwise.md +117 -0
  141. package/docs/observability.md +206 -0
  142. package/docs/observe.md +203 -0
  143. package/docs/releasing.md +106 -0
  144. package/docs/router.md +170 -0
  145. package/docs/store.md +212 -0
  146. package/docs/tcp-transport.md +89 -0
  147. package/docs/udp-transport.md +81 -0
  148. package/examples/slice-1.ts +12 -0
  149. package/examples/slice-2.ts +96 -0
  150. package/examples/slice-3-psk.ts +70 -0
  151. package/examples/slice-3-x509.ts +85 -0
  152. package/examples/slice-4.ts +45 -0
  153. package/examples/slice-5-firmware.ts +207 -0
  154. package/examples/slice-6-temperature.ts +163 -0
  155. package/examples/slice-7-file-store.ts +92 -0
  156. package/examples/slice-7-otel.ts +123 -0
  157. 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"}
@@ -0,0 +1,3 @@
1
+ // RFC 7641: Observe — reactive push types
2
+ export {};
3
+ //# sourceMappingURL=observe.js.map
@@ -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,5 @@
1
+ export { RadixTree, splitPath } from './radix.js';
2
+ export { Router } from './router.js';
3
+ export { contentFormat } from './content-format.js';
4
+ export { createApp } from './app.js';
5
+ //# sourceMappingURL=index.js.map
@@ -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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"}
@@ -0,0 +1,2 @@
1
+ export * from './router/index.js';
2
+ //# sourceMappingURL=router.d.ts.map
@@ -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,2 @@
1
+ export * from './router/index.js';
2
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export type { SecurityOptions, PskSecurityOptions, X509SecurityOptions } from './transport/index.js';
2
+ export type { Peer } from './api/index.js';
3
+ //# sourceMappingURL=security.d.ts.map
@@ -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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=security.js.map
@@ -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"}