@nifrajs/core 3.5.0 → 4.0.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 (325) hide show
  1. package/README.md +26 -0
  2. package/dist/assurance.d.ts +7 -0
  3. package/dist/assurance.d.ts.map +1 -1
  4. package/dist/assurance.js +39 -3
  5. package/dist/assurance.js.map +1 -1
  6. package/dist/capabilities.d.ts +20 -2
  7. package/dist/capabilities.d.ts.map +1 -1
  8. package/dist/capabilities.js +47 -15
  9. package/dist/capabilities.js.map +1 -1
  10. package/dist/diff.d.ts +2 -1
  11. package/dist/diff.d.ts.map +1 -1
  12. package/dist/diff.js +26 -2
  13. package/dist/diff.js.map +1 -1
  14. package/dist/durable-adapters.d.ts.map +1 -1
  15. package/dist/durable-adapters.js +16 -3
  16. package/dist/durable-adapters.js.map +1 -1
  17. package/dist/durable-effect.d.ts.map +1 -1
  18. package/dist/durable-effect.js +6 -3
  19. package/dist/durable-effect.js.map +1 -1
  20. package/dist/edge-kit.d.ts +2 -0
  21. package/dist/edge-kit.d.ts.map +1 -1
  22. package/dist/edge-kit.js +2 -0
  23. package/dist/edge-kit.js.map +1 -1
  24. package/dist/effect-lifecycle.d.ts.map +1 -1
  25. package/dist/effect-lifecycle.js +2 -1
  26. package/dist/effect-lifecycle.js.map +1 -1
  27. package/dist/effect-scope.d.ts.map +1 -1
  28. package/dist/effect-scope.js +1 -1
  29. package/dist/effect-scope.js.map +1 -1
  30. package/dist/errors.d.ts +1 -1
  31. package/dist/errors.d.ts.map +1 -1
  32. package/dist/errors.js.map +1 -1
  33. package/dist/evidence.d.ts +24 -1
  34. package/dist/evidence.d.ts.map +1 -1
  35. package/dist/evidence.js +168 -13
  36. package/dist/evidence.js.map +1 -1
  37. package/dist/idempotency.d.ts +31 -0
  38. package/dist/idempotency.d.ts.map +1 -1
  39. package/dist/idempotency.js +40 -8
  40. package/dist/idempotency.js.map +1 -1
  41. package/dist/index.d.ts +8 -5
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +5 -2
  44. package/dist/index.js.map +1 -1
  45. package/dist/internal/code-unit-order.d.ts +7 -0
  46. package/dist/internal/code-unit-order.d.ts.map +1 -0
  47. package/dist/internal/code-unit-order.js +9 -0
  48. package/dist/internal/code-unit-order.js.map +1 -0
  49. package/dist/internal/durable-saga-protocol.d.ts.map +1 -1
  50. package/dist/internal/durable-saga-protocol.js +2 -0
  51. package/dist/internal/durable-saga-protocol.js.map +1 -1
  52. package/dist/internal/route-catalog.d.ts +6 -6
  53. package/dist/internal/route-catalog.d.ts.map +1 -1
  54. package/dist/internal/route-catalog.js +20 -18
  55. package/dist/internal/route-catalog.js.map +1 -1
  56. package/dist/internal/route-compiler.d.ts +7 -6
  57. package/dist/internal/route-compiler.d.ts.map +1 -1
  58. package/dist/internal/route-compiler.js +36 -4
  59. package/dist/internal/route-compiler.js.map +1 -1
  60. package/dist/internal/route-execution.d.ts +7 -3
  61. package/dist/internal/route-execution.d.ts.map +1 -1
  62. package/dist/internal/route-execution.js.map +1 -1
  63. package/dist/internal/route-lanes.d.ts +1 -0
  64. package/dist/internal/route-lanes.d.ts.map +1 -1
  65. package/dist/internal/route-lanes.js +34 -29
  66. package/dist/internal/route-lanes.js.map +1 -1
  67. package/dist/internal/route-program.d.ts +8 -2
  68. package/dist/internal/route-program.d.ts.map +1 -1
  69. package/dist/internal/route-program.js +222 -20
  70. package/dist/internal/route-program.js.map +1 -1
  71. package/dist/ledger.d.ts.map +1 -1
  72. package/dist/ledger.js +8 -5
  73. package/dist/ledger.js.map +1 -1
  74. package/dist/manifest.d.ts.map +1 -1
  75. package/dist/manifest.js +41 -37
  76. package/dist/manifest.js.map +1 -1
  77. package/dist/mount.d.ts +36 -0
  78. package/dist/mount.d.ts.map +1 -1
  79. package/dist/mount.js +32 -0
  80. package/dist/mount.js.map +1 -1
  81. package/dist/reflection.d.ts +26 -0
  82. package/dist/reflection.d.ts.map +1 -1
  83. package/dist/reflection.js +65 -1
  84. package/dist/reflection.js.map +1 -1
  85. package/dist/response-observer.d.ts +1 -1
  86. package/dist/response-observer.d.ts.map +1 -1
  87. package/dist/response-observer.js.map +1 -1
  88. package/dist/router/overlap.d.ts +23 -0
  89. package/dist/router/overlap.d.ts.map +1 -0
  90. package/dist/router/overlap.js +224 -0
  91. package/dist/router/overlap.js.map +1 -0
  92. package/dist/router/pattern.d.ts +117 -2
  93. package/dist/router/pattern.d.ts.map +1 -1
  94. package/dist/router/pattern.js +283 -23
  95. package/dist/router/pattern.js.map +1 -1
  96. package/dist/router/router.d.ts +18 -4
  97. package/dist/router/router.d.ts.map +1 -1
  98. package/dist/router/router.js +51 -44
  99. package/dist/router/router.js.map +1 -1
  100. package/dist/server/auth.d.ts +53 -0
  101. package/dist/server/auth.d.ts.map +1 -0
  102. package/dist/server/auth.js +9 -0
  103. package/dist/server/auth.js.map +1 -0
  104. package/dist/server/bare-error-lane.d.ts +12 -7
  105. package/dist/server/bare-error-lane.d.ts.map +1 -1
  106. package/dist/server/bare-error-lane.js +13 -11
  107. package/dist/server/bare-error-lane.js.map +1 -1
  108. package/dist/server/body-lane.d.ts +20 -2
  109. package/dist/server/body-lane.d.ts.map +1 -1
  110. package/dist/server/body-lane.js +26 -7
  111. package/dist/server/body-lane.js.map +1 -1
  112. package/dist/server/body-parser.d.ts +68 -0
  113. package/dist/server/body-parser.d.ts.map +1 -0
  114. package/dist/server/body-parser.js +172 -0
  115. package/dist/server/body-parser.js.map +1 -0
  116. package/dist/server/body.d.ts.map +1 -1
  117. package/dist/server/body.js +62 -7
  118. package/dist/server/body.js.map +1 -1
  119. package/dist/server/client-ip.d.ts +8 -0
  120. package/dist/server/client-ip.d.ts.map +1 -1
  121. package/dist/server/client-ip.js +8 -0
  122. package/dist/server/client-ip.js.map +1 -1
  123. package/dist/server/context.d.ts +71 -6
  124. package/dist/server/context.d.ts.map +1 -1
  125. package/dist/server/contract.d.ts +15 -5
  126. package/dist/server/contract.d.ts.map +1 -1
  127. package/dist/server/contract.js +25 -4
  128. package/dist/server/contract.js.map +1 -1
  129. package/dist/server/core-copies.d.ts +2 -0
  130. package/dist/server/core-copies.d.ts.map +1 -0
  131. package/dist/server/core-copies.js +20 -0
  132. package/dist/server/core-copies.js.map +1 -0
  133. package/dist/server/edge.d.ts.map +1 -1
  134. package/dist/server/edge.js +2 -0
  135. package/dist/server/edge.js.map +1 -1
  136. package/dist/server/http.d.ts +11 -0
  137. package/dist/server/http.d.ts.map +1 -1
  138. package/dist/server/http.js +36 -0
  139. package/dist/server/http.js.map +1 -1
  140. package/dist/server/idempotency-lane.d.ts +6 -0
  141. package/dist/server/idempotency-lane.d.ts.map +1 -1
  142. package/dist/server/idempotency-lane.js +130 -73
  143. package/dist/server/idempotency-lane.js.map +1 -1
  144. package/dist/server/install.d.ts +4 -0
  145. package/dist/server/install.d.ts.map +1 -1
  146. package/dist/server/install.js +4 -0
  147. package/dist/server/install.js.map +1 -1
  148. package/dist/server/methods.d.ts +45 -0
  149. package/dist/server/methods.d.ts.map +1 -0
  150. package/dist/server/methods.js +37 -0
  151. package/dist/server/methods.js.map +1 -0
  152. package/dist/server/multipart.d.ts +63 -0
  153. package/dist/server/multipart.d.ts.map +1 -0
  154. package/dist/server/multipart.js +374 -0
  155. package/dist/server/multipart.js.map +1 -0
  156. package/dist/server/node-outcome-hook.d.ts +20 -0
  157. package/dist/server/node-outcome-hook.d.ts.map +1 -1
  158. package/dist/server/node-outcome-hook.js +15 -6
  159. package/dist/server/node-outcome-hook.js.map +1 -1
  160. package/dist/server/not-found-answer.d.ts +40 -0
  161. package/dist/server/not-found-answer.d.ts.map +1 -0
  162. package/dist/server/not-found-answer.js +56 -0
  163. package/dist/server/not-found-answer.js.map +1 -0
  164. package/dist/server/not-found.d.ts +23 -0
  165. package/dist/server/not-found.d.ts.map +1 -0
  166. package/dist/server/not-found.js +81 -0
  167. package/dist/server/not-found.js.map +1 -0
  168. package/dist/server/plugin.d.ts +26 -1
  169. package/dist/server/plugin.d.ts.map +1 -1
  170. package/dist/server/plugin.js.map +1 -1
  171. package/dist/server/proto-guard.d.ts +18 -5
  172. package/dist/server/proto-guard.d.ts.map +1 -1
  173. package/dist/server/proto-guard.js +114 -9
  174. package/dist/server/proto-guard.js.map +1 -1
  175. package/dist/server/query.d.ts +7 -0
  176. package/dist/server/query.d.ts.map +1 -1
  177. package/dist/server/query.js +47 -0
  178. package/dist/server/query.js.map +1 -1
  179. package/dist/server/registry.d.ts +13 -2
  180. package/dist/server/registry.d.ts.map +1 -1
  181. package/dist/server/request-context.d.ts +11 -0
  182. package/dist/server/request-context.d.ts.map +1 -1
  183. package/dist/server/request-context.js +33 -19
  184. package/dist/server/request-context.js.map +1 -1
  185. package/dist/server/request-lineage.d.ts +8 -0
  186. package/dist/server/request-lineage.d.ts.map +1 -0
  187. package/dist/server/request-lineage.js +14 -0
  188. package/dist/server/request-lineage.js.map +1 -0
  189. package/dist/server/request-target.d.ts +31 -0
  190. package/dist/server/request-target.d.ts.map +1 -0
  191. package/dist/server/request-target.js +44 -0
  192. package/dist/server/request-target.js.map +1 -0
  193. package/dist/server/respond.d.ts +1 -1
  194. package/dist/server/respond.d.ts.map +1 -1
  195. package/dist/server/respond.js +16 -4
  196. package/dist/server/respond.js.map +1 -1
  197. package/dist/server/response-contract-lane.d.ts +19 -1
  198. package/dist/server/response-contract-lane.d.ts.map +1 -1
  199. package/dist/server/response-contract-lane.js +59 -14
  200. package/dist/server/response-contract-lane.js.map +1 -1
  201. package/dist/server/response-observer-runtime.d.ts +9 -5
  202. package/dist/server/response-observer-runtime.d.ts.map +1 -1
  203. package/dist/server/response-observer-runtime.js +10 -6
  204. package/dist/server/response-observer-runtime.js.map +1 -1
  205. package/dist/server/runtime-core.d.ts +2 -0
  206. package/dist/server/runtime-core.d.ts.map +1 -1
  207. package/dist/server/runtime-core.js.map +1 -1
  208. package/dist/server/server-types.d.ts +53 -3
  209. package/dist/server/server-types.d.ts.map +1 -1
  210. package/dist/server/server.d.ts +191 -19
  211. package/dist/server/server.d.ts.map +1 -1
  212. package/dist/server/server.js +1206 -218
  213. package/dist/server/server.js.map +1 -1
  214. package/dist/server/sse.d.ts.map +1 -1
  215. package/dist/server/sse.js +10 -7
  216. package/dist/server/sse.js.map +1 -1
  217. package/dist/server/static-headers.d.ts +3 -0
  218. package/dist/server/static-headers.d.ts.map +1 -1
  219. package/dist/server/static-headers.js +19 -1
  220. package/dist/server/static-headers.js.map +1 -1
  221. package/dist/server/transport-lane.d.ts +8 -0
  222. package/dist/server/transport-lane.d.ts.map +1 -1
  223. package/dist/server/transport-lane.js +9 -8
  224. package/dist/server/transport-lane.js.map +1 -1
  225. package/dist/server/validation.d.ts.map +1 -1
  226. package/dist/server/validation.js +5 -1
  227. package/dist/server/validation.js.map +1 -1
  228. package/dist/server/websocket.d.ts +10 -3
  229. package/dist/server/websocket.d.ts.map +1 -1
  230. package/dist/server/websocket.js +7 -4
  231. package/dist/server/websocket.js.map +1 -1
  232. package/dist/server/ws-bun.d.ts +2 -0
  233. package/dist/server/ws-bun.d.ts.map +1 -1
  234. package/dist/server/ws-bun.js +6 -3
  235. package/dist/server/ws-bun.js.map +1 -1
  236. package/dist/server/ws-hook.d.ts +2 -1
  237. package/dist/server/ws-hook.d.ts.map +1 -1
  238. package/dist/server.d.ts +7 -4
  239. package/dist/server.d.ts.map +1 -1
  240. package/dist/server.js +4 -1
  241. package/dist/server.js.map +1 -1
  242. package/dist/single-copy-register.js +5 -0
  243. package/dist/single-copy-register.js.map +1 -1
  244. package/dist/single-copy.d.ts +46 -3
  245. package/dist/single-copy.d.ts.map +1 -1
  246. package/dist/single-copy.js +125 -12
  247. package/dist/single-copy.js.map +1 -1
  248. package/dist/tool-contract.d.ts +23 -0
  249. package/dist/tool-contract.d.ts.map +1 -1
  250. package/dist/tool-contract.js +37 -3
  251. package/dist/tool-contract.js.map +1 -1
  252. package/dist/transport-codec.d.ts.map +1 -1
  253. package/dist/transport-codec.js +2 -1
  254. package/dist/transport-codec.js.map +1 -1
  255. package/package.json +27 -2
  256. package/src/assurance.ts +52 -2
  257. package/src/capabilities.ts +81 -22
  258. package/src/diff.ts +31 -6
  259. package/src/durable-adapters.ts +20 -3
  260. package/src/durable-effect.ts +10 -3
  261. package/src/edge-kit.ts +7 -0
  262. package/src/effect-lifecycle.ts +5 -1
  263. package/src/effect-scope.ts +2 -1
  264. package/src/errors.ts +3 -0
  265. package/src/evidence.ts +237 -12
  266. package/src/idempotency.ts +72 -8
  267. package/src/index.ts +40 -3
  268. package/src/internal/code-unit-order.ts +8 -0
  269. package/src/internal/durable-saga-protocol.ts +2 -0
  270. package/src/internal/route-catalog.ts +19 -18
  271. package/src/internal/route-compiler.ts +62 -13
  272. package/src/internal/route-execution.ts +13 -3
  273. package/src/internal/route-lanes.ts +37 -28
  274. package/src/internal/route-program.ts +434 -20
  275. package/src/ledger.ts +11 -5
  276. package/src/manifest.ts +41 -36
  277. package/src/mount.ts +62 -0
  278. package/src/reflection.ts +84 -1
  279. package/src/response-observer.ts +1 -0
  280. package/src/router/overlap.ts +258 -0
  281. package/src/router/pattern.ts +349 -25
  282. package/src/router/router.ts +76 -51
  283. package/src/server/auth.ts +75 -0
  284. package/src/server/bare-error-lane.ts +12 -11
  285. package/src/server/body-lane.ts +46 -6
  286. package/src/server/body-parser.ts +241 -0
  287. package/src/server/body.ts +82 -9
  288. package/src/server/client-ip.ts +9 -0
  289. package/src/server/context.ts +219 -12
  290. package/src/server/contract.ts +54 -9
  291. package/src/server/core-copies.ts +21 -0
  292. package/src/server/edge.ts +2 -0
  293. package/src/server/http.ts +34 -0
  294. package/src/server/idempotency-lane.ts +147 -72
  295. package/src/server/install.ts +6 -0
  296. package/src/server/methods.ts +143 -0
  297. package/src/server/multipart.ts +424 -0
  298. package/src/server/node-outcome-hook.ts +40 -7
  299. package/src/server/not-found-answer.ts +109 -0
  300. package/src/server/not-found.ts +121 -0
  301. package/src/server/plugin.ts +45 -1
  302. package/src/server/proto-guard.ts +128 -9
  303. package/src/server/query.ts +49 -0
  304. package/src/server/registry.ts +17 -2
  305. package/src/server/request-context.ts +44 -16
  306. package/src/server/request-lineage.ts +15 -0
  307. package/src/server/request-target.ts +46 -0
  308. package/src/server/respond.ts +14 -3
  309. package/src/server/response-contract-lane.ts +97 -16
  310. package/src/server/response-observer-runtime.ts +37 -8
  311. package/src/server/runtime-core.ts +2 -0
  312. package/src/server/server-types.ts +59 -2
  313. package/src/server/server.ts +1613 -269
  314. package/src/server/sse.ts +10 -8
  315. package/src/server/static-headers.ts +22 -1
  316. package/src/server/transport-lane.ts +17 -9
  317. package/src/server/validation.ts +7 -1
  318. package/src/server/websocket.ts +23 -9
  319. package/src/server/ws-bun.ts +8 -3
  320. package/src/server/ws-hook.ts +2 -1
  321. package/src/server.ts +38 -2
  322. package/src/single-copy-register.ts +5 -0
  323. package/src/single-copy.ts +160 -12
  324. package/src/tool-contract.ts +66 -3
  325. package/src/transport-codec.ts +2 -1
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Two physical copies of `@nifrajs/core` in one process (a linked sibling checkout, a nested install)
3
+ * split every piece of module-scoped identity: a route from one copy's `server()` merged into the
4
+ * other answers 500 from an internal TypeError as soon as it sets a cookie. The install is the
5
+ * defect, so it is named the moment the second copy loads, not at the first failing request.
6
+ * `nifra check` is the gate that fails the build on it; this is the runtime notice.
7
+ *
8
+ * Each copy records its module URL in a process-wide list. The query is dropped, so a dev server that
9
+ * re-evaluates this same file (HMR, `--hot`) is one copy, not two.
10
+ */
11
+ const registry = globalThis;
12
+ const COPIES = Symbol.for("nifra.core.copies");
13
+ registry[COPIES] ??= [];
14
+ const copies = registry[COPIES];
15
+ const here = String(import.meta.url).split("?")[0];
16
+ if (!copies.includes(here) && copies.push(here) > 1) {
17
+ console.warn(`[nifra] @nifrajs/core is loaded ${copies.length} times; \`nifra check\` names each importer:\n ${copies.join("\n ")}`);
18
+ }
19
+ export {};
20
+ //# sourceMappingURL=core-copies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-copies.js","sourceRoot":"","sources":["../../src/server/core-copies.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,QAAQ,GAAG,UAA6D,CAAA;AAC9E,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;AAC9C,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;AACvB,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;AAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAW,CAAA;AAE5D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACpD,OAAO,CAAC,IAAI,CACV,mCAAmC,MAAM,CAAC,MAAM,mDAAmD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CACzH,CAAA;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"edge.d.ts","sourceRoot":"","sources":["../../src/server/edge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAqB,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAEhF;6FAC6F;AAC7F,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;CAC3C;AAED,uGAAuG;AACvG,MAAM,WAAW,mBAAmB;IAClC,0CAA0C;IAC1C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,sEAAsE;IACtE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,0DAA0D;IAC1D,OAAO,IAAI,IAAI,CAAA;CAChB;AAED;6FAC6F;AAC7F,MAAM,MAAM,gBAAgB,CAAC,GAAG,GAAG,OAAO,IAAI,CAC5C,UAAU,EAAE,mBAAmB,EAC/B,OAAO,EAAE;IAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;CAAE,KACvE,YAAY,CAAC,IAAI,CAAC,CAAA;AAQvB;6EAC6E;AAC7E,MAAM,WAAW,0BAA0B;IACzC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IACjC,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG;QAAE,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;KAAE,CAAA;CACjE;AAKD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAAC,GAAG,GAAG,OAAO,EAC1C,GAAG,EAAE;IACH,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;IACzE,uBAAuB,CAAC,CACtB,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,GACvB,YAAY,CAAC,uBAAuB,CAAC,CAAA;CACzC,EACD,OAAO,CAAC,EAAE;IACR,SAAS,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAA;IACjC;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,0BAA0B,CAAA;CACxD,GACA;IACD,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,gBAAgB,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;IAChF,SAAS,CAAC,CAAC,UAAU,EAAE,mBAAmB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;CACjG,CA4DA"}
1
+ {"version":3,"file":"edge.d.ts","sourceRoot":"","sources":["../../src/server/edge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAqB,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAEhF;6FAC6F;AAC7F,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;CAC3C;AAED,uGAAuG;AACvG,MAAM,WAAW,mBAAmB;IAClC,0CAA0C;IAC1C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,sEAAsE;IACtE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,0DAA0D;IAC1D,OAAO,IAAI,IAAI,CAAA;CAChB;AAED;6FAC6F;AAC7F,MAAM,MAAM,gBAAgB,CAAC,GAAG,GAAG,OAAO,IAAI,CAC5C,UAAU,EAAE,mBAAmB,EAC/B,OAAO,EAAE;IAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;CAAE,KACvE,YAAY,CAAC,IAAI,CAAC,CAAA;AAQvB;6EAC6E;AAC7E,MAAM,WAAW,0BAA0B;IACzC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IACjC,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG;QAAE,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;KAAE,CAAA;CACjE;AAKD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAAC,GAAG,GAAG,OAAO,EAC1C,GAAG,EAAE;IACH,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;IACzE,uBAAuB,CAAC,CACtB,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,GACvB,YAAY,CAAC,uBAAuB,CAAC,CAAA;CACzC,EACD,OAAO,CAAC,EAAE;IACR,SAAS,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAA;IACjC;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,0BAA0B,CAAA;CACxD,GACA;IACD,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,gBAAgB,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;IAChF,SAAS,CAAC,CAAC,UAAU,EAAE,mBAAmB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;CACjG,CA8DA"}
@@ -62,6 +62,8 @@ export function toFetchHandler(app, options) {
62
62
  outcome.attach(server, outcome.handler, outcome.data, {
63
63
  openNow: true,
64
64
  pubsub: outcome.pubsub,
65
+ // `wsMaxPayloadBytes`, as the Bun, Node, Deno and hub lanes enforce it.
66
+ maxPayloadBytes: outcome.maxPayloadBytes,
65
67
  });
66
68
  // `webSocket` is a Workers-only `ResponseInit` field (absent from the standard type), and a
67
69
  // 101 status is only valid on the Workers runtime - both gated by the `Pair` feature check.
@@ -1 +1 @@
1
- {"version":3,"file":"edge.js","sourceRoot":"","sources":["../../src/server/edge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"edge.js","sourceRoot":"","sources":["../../src/server/edge.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,17 @@ import { type ResponseResult } from "./runtime-core.js";
22
22
  * current origin, because the whole point is that the value never got to name a host.
23
23
  */
24
24
  export declare function isSameOriginPath(value: string): boolean;
25
+ /**
26
+ * Whether `method` is a token a route can be registered under: uppercase ASCII letters, digits and
27
+ * hyphens, a letter first, 1 to 32 characters. That covers every method in the IANA registry.
28
+ *
29
+ * Every registered method has this shape and the router compares tokens exactly, so a request whose
30
+ * token does not have it can never reach a handler. The server uses this to keep such a request away
31
+ * from everything that runs around routing as well - `onRequest` hooks and mounted handlers - because
32
+ * those see the raw token, and code that tests `req.method === "POST"` would otherwise read a
33
+ * differently-cased token as a method it does not guard.
34
+ */
35
+ export declare function isRoutableMethod(method: string): boolean;
25
36
  /** A uniform JSON error envelope: `{ ok: false, error }` at the given status. */
26
37
  export declare function jsonError(status: number, error: string, headers?: Record<string, string>): Response;
27
38
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,mBAAmB,CAAA;AAE/E;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CASvD;AAED,iFAAiF;AACjF,wBAAgB,SAAS,CACvB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,QAAQ,CAKV;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,cAAc,CAEhB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAMD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAwBhD;AAKD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAc9C"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,mBAAmB,CAAA;AAE/E;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CASvD;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAsBxD;AAED,iFAAiF;AACjF,wBAAgB,SAAS,CACvB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,QAAQ,CAKV;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,cAAc,CAEhB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAMD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAwBhD;AAKD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAc9C"}
@@ -33,6 +33,42 @@ export function isSameOriginPath(value) {
33
33
  }
34
34
  return true;
35
35
  }
36
+ /**
37
+ * Whether `method` is a token a route can be registered under: uppercase ASCII letters, digits and
38
+ * hyphens, a letter first, 1 to 32 characters. That covers every method in the IANA registry.
39
+ *
40
+ * Every registered method has this shape and the router compares tokens exactly, so a request whose
41
+ * token does not have it can never reach a handler. The server uses this to keep such a request away
42
+ * from everything that runs around routing as well - `onRequest` hooks and mounted handlers - because
43
+ * those see the raw token, and code that tests `req.method === "POST"` would otherwise read a
44
+ * differently-cased token as a method it does not guard.
45
+ */
46
+ export function isRoutableMethod(method) {
47
+ // The common verbs first: a string switch settles them without walking the token, which keeps the
48
+ // check close to free on the lanes that run it per request.
49
+ switch (method) {
50
+ case "GET":
51
+ case "POST":
52
+ case "PUT":
53
+ case "PATCH":
54
+ case "DELETE":
55
+ case "HEAD":
56
+ case "OPTIONS":
57
+ return true;
58
+ }
59
+ const length = method.length;
60
+ if (length === 0 || length > 32)
61
+ return false;
62
+ for (let i = 0; i < length; i++) {
63
+ const code = method.charCodeAt(i);
64
+ if (code >= 65 && code <= 90)
65
+ continue;
66
+ if (i > 0 && (code === 45 || (code >= 48 && code <= 57)))
67
+ continue;
68
+ return false;
69
+ }
70
+ return true;
71
+ }
36
72
  /** A uniform JSON error envelope: `{ ok: false, error }` at the given status. */
37
73
  export function jsonError(status, error, headers) {
38
74
  return Response.json({ ok: false, error }, headers !== undefined ? { status, headers } : { status });
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,8 @@ import type { IdentityPlugin } from "./server.js";
5
5
  export interface ResolvedIdempotency {
6
6
  readonly store: IdempotencyStore;
7
7
  readonly ttlMs: number;
8
+ /** The lease renewed while a handler runs; unset when the store cannot renew. */
9
+ readonly pendingTtlMs: number | undefined;
8
10
  readonly headerName: string;
9
11
  readonly namespace: NonNullable<RouteSchema["idempotency"]>["namespace"];
10
12
  readonly maxResponseBytes: number;
@@ -22,6 +24,10 @@ export interface IdempotencyRuntime {
22
24
  readonly trackEffect: (context: object, committed: boolean) => void;
23
25
  /** Resolve a route's declared idempotency into a pinned store + defaults, or `undefined` when off. */
24
26
  resolve(schema: RouteSchema | undefined, authenticated: boolean, maxBodyBytes: number): ResolvedIdempotency | undefined;
27
+ /** Wrap an idempotent route's handler so the lane can tell a request rejected before it ran. */
28
+ wrapHandler<C extends {
29
+ readonly req: Request;
30
+ }>(handler: (context: C) => unknown): (context: C) => unknown;
25
31
  /** The dedupe lane: read the key, fingerprint the request, consult the store, run/replay/reject. */
26
32
  run<T>(config: ResolvedIdempotency, req: Request, platform: Platform | undefined, entry: unknown, params: Record<string, string>, search: string | undefined, wrapResponse: (response: Response) => T, host: IdempotencyHost): Promise<T>;
27
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"idempotency-lane.d.ts","sourceRoot":"","sources":["../../src/server/idempotency-lane.ts"],"names":[],"mappings":"AAUA,OAAO,EAML,KAAK,gBAAgB,EAMtB,MAAM,mBAAmB,CAAA;AAQ1B,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAGzD,OAAO,KAAK,EAAa,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5D,kGAAkG;AAClG,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAA;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;IACxE,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;CAClC;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CACN,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAC9B,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,OAAO,CAAC,QAAQ,CAAC,CAAA;CACrB;AAED,qGAAqG;AACrG,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAA;IACnE,sGAAsG;IACtG,OAAO,CACL,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,aAAa,EAAE,OAAO,EACtB,YAAY,EAAE,MAAM,GACnB,mBAAmB,GAAG,SAAS,CAAA;IAClC,oGAAoG;IACpG,GAAG,CAAC,CAAC,EACH,MAAM,EAAE,mBAAmB,EAC3B,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAC9B,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,CAAC,EACvC,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,CAAC,CAAC,CAAA;CACd;AAOD;;;;;;GAMG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAA;CAC9C;AAED,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE,wBAAwB,GAAG,cAAc,CAO9E;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,wBAAwB,GAAG,kBAAkB,CAiN/F"}
1
+ {"version":3,"file":"idempotency-lane.d.ts","sourceRoot":"","sources":["../../src/server/idempotency-lane.ts"],"names":[],"mappings":"AAUA,OAAO,EAOL,KAAK,gBAAgB,EAMtB,MAAM,mBAAmB,CAAA;AAQ1B,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAGzD,OAAO,KAAK,EAAa,cAAc,EAAE,MAAM,aAAa,CAAA;AAU5D,kGAAkG;AAClG,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAA;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,iFAAiF;IACjF,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAA;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;IACxE,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;CAClC;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CACN,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAC9B,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,OAAO,CAAC,QAAQ,CAAC,CAAA;CACrB;AAED,qGAAqG;AACrG,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAA;IACnE,sGAAsG;IACtG,OAAO,CACL,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,aAAa,EAAE,OAAO,EACtB,YAAY,EAAE,MAAM,GACnB,mBAAmB,GAAG,SAAS,CAAA;IAClC,gGAAgG;IAChG,WAAW,CAAC,CAAC,SAAS;QAAE,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAA;KAAE,EAC7C,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,OAAO,GAC/B,CAAC,OAAO,EAAE,CAAC,KAAK,OAAO,CAAA;IAC1B,oGAAoG;IACpG,GAAG,CAAC,CAAC,EACH,MAAM,EAAE,mBAAmB,EAC3B,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAC9B,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,CAAC,EACvC,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,CAAC,CAAC,CAAA;CACd;AAOD;;;;;;GAMG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAA;CAC9C;AAED,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE,wBAAwB,GAAG,cAAc,CAO9E;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,wBAAwB,GAAG,kBAAkB,CA6Q/F"}
@@ -8,11 +8,17 @@
8
8
  * server-specific is supplied through {@link IdempotencyHost} so this module depends on no server internals.
9
9
  */
10
10
  import { RouteConfigError } from "../errors.js";
11
- import { canonicalizeIdempotencyBody, computeIdempotencyFingerprint, DEFAULT_IDEMPOTENCY_HEADER, DEFAULT_IDEMPOTENCY_TTL_MS, IdempotencyResponseTooLargeError, MemoryIdempotencyStore, responseFromStored, serializeResponse, validIdempotencyKey, validIdempotencyNamespace, } from "../idempotency.js";
11
+ import { canonicalizeIdempotencyBody, computeIdempotencyFingerprint, DEFAULT_IDEMPOTENCY_HEADER, DEFAULT_IDEMPOTENCY_PENDING_TTL_MS, DEFAULT_IDEMPOTENCY_TTL_MS, IdempotencyResponseTooLargeError, MemoryIdempotencyStore, responseFromStored, serializeResponse, validIdempotencyKey, validIdempotencyNamespace, } from "../idempotency.js";
12
12
  import { beginRequestEffectTracking, markEffect, requestEffectEvidence, requestIsSafeToRetry, } from "../internal/effect-execution.js";
13
13
  import { readBoundedBytes } from "./body.js";
14
14
  import { jsonError, urlPartsOf } from "./http.js";
15
15
  import { INSTALL_IDEMPOTENCY } from "./install.js";
16
+ /** Requests whose route handler was entered. One rejected before it - by auth, validation, a guard -
17
+ * began no execution, so its key is released rather than stored. */
18
+ const HANDLER_ENTERED = new WeakSet();
19
+ /** Statuses that say the request was not carried out (RFC 9110). A handler answering with one, with no
20
+ * owned effect begun, releases its key, so a refused caller cannot hold a store entry for the TTL. */
21
+ const REFUSALS = new Set([401, 403, 408, 409, 425, 429]);
16
22
  export function idempotency(options) {
17
23
  const runtime = createIdempotencyRuntime(options);
18
24
  const apply = (app) => {
@@ -40,6 +46,12 @@ export function createIdempotencyRuntime(options) {
40
46
  trackEffect(context, committed) {
41
47
  markEffect(context, committed);
42
48
  },
49
+ wrapHandler(handler) {
50
+ return (context) => {
51
+ HANDLER_ENTERED.add(context.req);
52
+ return handler(context);
53
+ };
54
+ },
43
55
  resolve(schema, authenticated, maxBodyBytes) {
44
56
  const config = schema?.idempotency;
45
57
  if (config === undefined)
@@ -55,6 +67,11 @@ export function createIdempotencyRuntime(options) {
55
67
  if (!Number.isSafeInteger(ttlMs) || ttlMs <= 0) {
56
68
  throw new RouteConfigError("INVALID_IDEMPOTENCY", "idempotency ttlMs must be a finite positive number");
57
69
  }
70
+ const pendingTtlMs = config.pendingTtlMs;
71
+ if (pendingTtlMs !== undefined &&
72
+ (store.renew === undefined || !Number.isSafeInteger(pendingTtlMs) || pendingTtlMs <= 0)) {
73
+ throw new RouteConfigError("INVALID_IDEMPOTENCY", "idempotency pendingTtlMs must be a positive integer, on a store that implements renew()");
74
+ }
58
75
  const headerName = (config.headerName ?? DEFAULT_IDEMPOTENCY_HEADER).toLowerCase();
59
76
  try {
60
77
  new Headers().set(headerName, "probe");
@@ -79,6 +96,9 @@ export function createIdempotencyRuntime(options) {
79
96
  return Object.freeze({
80
97
  store,
81
98
  ttlMs,
99
+ pendingTtlMs: store.renew === undefined
100
+ ? undefined
101
+ : (pendingTtlMs ?? DEFAULT_IDEMPOTENCY_PENDING_TTL_MS),
82
102
  headerName,
83
103
  namespace,
84
104
  maxResponseBytes,
@@ -102,7 +122,14 @@ export function createIdempotencyRuntime(options) {
102
122
  const url = urlPartsOf(req.url);
103
123
  const canonicalBody = canonicalizeIdempotencyBody(read.bytes, req.headers.get("content-type"));
104
124
  const fingerprint = await computeIdempotencyFingerprint(req.method, `${url.pathname}${url.search}`, canonicalBody, req.headers.get("content-type") ?? "");
105
- const begin = await config.store.begin({ namespace, key, fingerprint, ttlMs: config.ttlMs });
125
+ const pendingTtlMs = config.pendingTtlMs;
126
+ const begin = await config.store.begin({
127
+ namespace,
128
+ key,
129
+ fingerprint,
130
+ ttlMs: config.ttlMs,
131
+ pendingTtlMs,
132
+ });
106
133
  if (begin.state === "replay") {
107
134
  return wrapResponse(responseFromStored(begin.response, { maxBytes: config.maxResponseBytes }));
108
135
  }
@@ -115,90 +142,120 @@ export function createIdempotencyRuntime(options) {
115
142
  return wrapResponse(jsonError(503, "idempotency_store_capacity", { "Retry-After": "1" }));
116
143
  }
117
144
  const reservation = begin.reservation;
118
- // Fresh key: re-expose the buffered body as a Request so the normal lanes can read + validate it,
119
- // then run those lanes to a concrete Response.
120
- const bufferedInit = {
121
- method: req.method,
122
- headers: req.headers,
123
- signal: req.signal,
124
- };
125
- if (read.bytes.byteLength > 0)
126
- bufferedInit.body = read.bytes;
127
- const buffered = new Request(req.url, bufferedInit);
128
- beginRequestEffectTracking(buffered);
129
- let response;
145
+ let heartbeat;
146
+ if (pendingTtlMs !== undefined) {
147
+ // Renew the lease while the handler runs: only a process that died stops renewing, so its
148
+ // key frees after the lease rather than the replay TTL.
149
+ heartbeat = setInterval(() => {
150
+ // A failed renewal only lets the lease lapse, which completion then reports.
151
+ Promise.resolve()
152
+ .then(() => config.store.renew?.({ namespace, key, reservation, ttlMs: pendingTtlMs }))
153
+ .catch(() => undefined);
154
+ }, pendingTtlMs / 3);
155
+ heartbeat.unref?.();
156
+ }
130
157
  try {
131
- response = await host.runLanes(buffered, platform, entry, params, search);
132
- }
133
- catch (err) {
134
- const evidence = requestEffectEvidence(buffered);
135
- if (!evidence.began) {
136
- // The request-local boundary proves no owned effect started, so this is the one safe case
137
- // where releasing the key cannot duplicate an effect.
138
- await config.store.abandon({ namespace, key, reservation });
139
- throw err;
158
+ // Fresh key: re-expose the buffered body as a Request so the normal lanes can read + validate it,
159
+ // then run those lanes to a concrete Response.
160
+ const bufferedInit = {
161
+ method: req.method,
162
+ headers: req.headers,
163
+ signal: req.signal,
164
+ };
165
+ if (read.bytes.byteLength > 0)
166
+ bufferedInit.body = read.bytes;
167
+ const buffered = new Request(req.url, bufferedInit);
168
+ beginRequestEffectTracking(buffered);
169
+ // The handler threw, or its response body failed while being captured: no response to store.
170
+ const settleThrown = async (err) => {
171
+ if (!requestEffectEvidence(buffered).began) {
172
+ // The request-local boundary proves no owned effect started, so this is the one safe case
173
+ // where releasing the key cannot duplicate an effect.
174
+ await config.store.abandon({ namespace, key, reservation });
175
+ throw err;
176
+ }
177
+ // A committed or ambiguous effect must never be repeated. Persist a payload-free terminal
178
+ // response even though the normal handler lifecycle escaped without producing one.
179
+ const terminal = new Response(null, { status: 500 });
180
+ const completed = await config.store.complete({
181
+ namespace,
182
+ key,
183
+ reservation,
184
+ response: await serializeResponse(terminal, { maxBytes: config.maxResponseBytes }),
185
+ });
186
+ if (!completed) {
187
+ return wrapResponse(jsonError(503, "idempotency_reservation_lost", { "Retry-After": "1" }));
188
+ }
189
+ return wrapResponse(terminal);
190
+ };
191
+ let response;
192
+ try {
193
+ response = await host.runLanes(buffered, platform, entry, params, search);
194
+ }
195
+ catch (err) {
196
+ return await settleThrown(err);
197
+ }
198
+ if (!HANDLER_ENTERED.has(buffered) && !requestEffectEvidence(buffered).began) {
199
+ // Rejected before the handler ran: no execution began, so there is nothing a retry could
200
+ // duplicate and no result is saved - storing every rejection would let callers who never
201
+ // pass auth fill the store and lock everyone else out.
202
+ const abandoned = await config.store.abandon({ namespace, key, reservation });
203
+ if (!abandoned) {
204
+ return wrapResponse(jsonError(503, "idempotency_reservation_lost", { "Retry-After": "1" }));
205
+ }
206
+ return wrapResponse(response);
207
+ }
208
+ if ((REFUSALS.has(response.status) ||
209
+ (response.status >= 500 && requestIsSafeToRetry(buffered))) &&
210
+ !requestEffectEvidence(buffered).began) {
211
+ const abandoned = await config.store.abandon({ namespace, key, reservation });
212
+ if (!abandoned) {
213
+ return wrapResponse(jsonError(503, "idempotency_reservation_lost", { "Retry-After": "1" }));
214
+ }
215
+ return wrapResponse(response);
216
+ }
217
+ // Once the handler ran, every other concrete response is terminal for this key. A non-2xx may
218
+ // follow an already-committed external effect; abandoning it would let a retry duplicate it.
219
+ let storedResponse;
220
+ try {
221
+ storedResponse = await serializeResponse(response, { maxBytes: config.maxResponseBytes });
222
+ }
223
+ catch (error) {
224
+ if (!(error instanceof IdempotencyResponseTooLargeError))
225
+ return await settleThrown(error);
226
+ // The effect may already have happened, so never abandon and permit a duplicate execution.
227
+ // Commit a small terminal response under the winning key and return that same response now.
228
+ response = jsonError(507, "idempotency_response_too_large");
229
+ try {
230
+ storedResponse = await serializeResponse(response, {
231
+ maxBytes: config.maxResponseBytes,
232
+ });
233
+ }
234
+ catch (terminalError) {
235
+ if (!(terminalError instanceof IdempotencyResponseTooLargeError))
236
+ throw terminalError;
237
+ // Even an intentionally tiny bound must remain truthful. An empty 507 preserves terminal
238
+ // status + replay safety without silently storing more bytes than the route permits.
239
+ response = new Response(null, { status: 507 });
240
+ storedResponse = await serializeResponse(response, {
241
+ maxBytes: config.maxResponseBytes,
242
+ });
243
+ }
140
244
  }
141
- // A committed or ambiguous effect must never be repeated. Persist a payload-free terminal
142
- // response even though the normal handler lifecycle escaped without producing one.
143
- response = new Response(null, { status: 500 });
144
245
  const completed = await config.store.complete({
145
246
  namespace,
146
247
  key,
147
248
  reservation,
148
- response: await serializeResponse(response, { maxBytes: config.maxResponseBytes }),
249
+ response: storedResponse,
149
250
  });
150
251
  if (!completed) {
151
252
  return wrapResponse(jsonError(503, "idempotency_reservation_lost", { "Retry-After": "1" }));
152
253
  }
153
254
  return wrapResponse(response);
154
255
  }
155
- if (response.status >= 500 &&
156
- requestIsSafeToRetry(buffered) &&
157
- !requestEffectEvidence(buffered).began) {
158
- const abandoned = await config.store.abandon({ namespace, key, reservation });
159
- if (!abandoned) {
160
- return wrapResponse(jsonError(503, "idempotency_reservation_lost", { "Retry-After": "1" }));
161
- }
162
- return wrapResponse(response);
163
- }
164
- // Once the handler ran, every concrete response is terminal for this key. A non-2xx may follow
165
- // an already-committed external effect; abandoning it would let a retry duplicate that effect.
166
- let storedResponse;
167
- try {
168
- storedResponse = await serializeResponse(response, { maxBytes: config.maxResponseBytes });
169
- }
170
- catch (error) {
171
- if (!(error instanceof IdempotencyResponseTooLargeError))
172
- throw error;
173
- // The effect may already have happened, so never abandon and permit a duplicate execution.
174
- // Commit a small terminal response under the winning key and return that same response now.
175
- response = jsonError(507, "idempotency_response_too_large");
176
- try {
177
- storedResponse = await serializeResponse(response, {
178
- maxBytes: config.maxResponseBytes,
179
- });
180
- }
181
- catch (terminalError) {
182
- if (!(terminalError instanceof IdempotencyResponseTooLargeError))
183
- throw terminalError;
184
- // Even an intentionally tiny bound must remain truthful. An empty 507 preserves terminal
185
- // status + replay safety without silently storing more bytes than the route permits.
186
- response = new Response(null, { status: 507 });
187
- storedResponse = await serializeResponse(response, {
188
- maxBytes: config.maxResponseBytes,
189
- });
190
- }
191
- }
192
- const completed = await config.store.complete({
193
- namespace,
194
- key,
195
- reservation,
196
- response: storedResponse,
197
- });
198
- if (!completed) {
199
- return wrapResponse(jsonError(503, "idempotency_reservation_lost", { "Retry-After": "1" }));
256
+ finally {
257
+ clearInterval(heartbeat);
200
258
  }
201
- return wrapResponse(response);
202
259
  },
203
260
  };
204
261
  }
@@ -1 +1 @@
1
- {"version":3,"file":"idempotency-lane.js","sourceRoot":"","sources":["../../src/server/idempotency-lane.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"idempotency-lane.js","sourceRoot":"","sources":["../../src/server/idempotency-lane.ts"],"names":[],"mappings":"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"}
@@ -8,8 +8,12 @@ export declare const INSTALL_MCP: unique symbol;
8
8
  export declare const INSTALL_SSE: unique symbol;
9
9
  /** @internal Install the Node-direct renderer on a server (called by the `nodeDirect()` plugin). */
10
10
  export declare const INSTALL_NODE_DIRECT: unique symbol;
11
+ /** @internal Install the not-found lane on a server (called by the `notFound()` plugin). */
12
+ export declare const INSTALL_NOT_FOUND: unique symbol;
11
13
  /** @internal Install the WebSocket runtime on a server (called by the `websocket()` plugin). */
12
14
  export declare const INSTALL_WS: unique symbol;
15
+ /** @internal Read the installed WebSocket runtime when a server is composed into another server. */
16
+ export declare const GET_WS_RUNTIME: unique symbol;
13
17
  /** @internal Install the response-contract runtime on a server (called by the `responseContract()` plugin). */
14
18
  export declare const INSTALL_RESPONSE_CONTRACT: unique symbol;
15
19
  /** @internal Install the response-observer adapters on a server. */
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/server/install.ts"],"names":[],"mappings":"AAUA,oGAAoG;AACpG,eAAO,MAAM,mBAAmB,EAAE,OAAO,MAAwD,CAAA;AAEjG,uGAAuG;AACvG,eAAO,MAAM,qBAAqB,EAAE,OAAO,MAE1C,CAAA;AAED,oFAAoF;AACpF,eAAO,MAAM,WAAW,EAAE,OAAO,MAAgD,CAAA;AAEjF,8FAA8F;AAC9F,eAAO,MAAM,WAAW,EAAE,OAAO,MAAgD,CAAA;AAEjF,oGAAoG;AACpG,eAAO,MAAM,mBAAmB,EAAE,OAAO,MAAwD,CAAA;AAEjG,gGAAgG;AAChG,eAAO,MAAM,UAAU,EAAE,OAAO,MAA+C,CAAA;AAE/E,+GAA+G;AAC/G,eAAO,MAAM,yBAAyB,EAAE,OAAO,MAE9C,CAAA;AAED,oEAAoE;AACpE,eAAO,MAAM,yBAAyB,EAAE,OAAO,MAE9C,CAAA;AAED,wGAAwG;AACxG,eAAO,MAAM,kBAAkB,EAAE,OAAO,MAEvC,CAAA;AAED,oGAAoG;AACpG,eAAO,MAAM,iBAAiB,EAAE,OAAO,MAAsD,CAAA"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/server/install.ts"],"names":[],"mappings":"AAUA,oGAAoG;AACpG,eAAO,MAAM,mBAAmB,EAAE,OAAO,MAAwD,CAAA;AAEjG,uGAAuG;AACvG,eAAO,MAAM,qBAAqB,EAAE,OAAO,MAE1C,CAAA;AAED,oFAAoF;AACpF,eAAO,MAAM,WAAW,EAAE,OAAO,MAAgD,CAAA;AAEjF,8FAA8F;AAC9F,eAAO,MAAM,WAAW,EAAE,OAAO,MAAgD,CAAA;AAEjF,oGAAoG;AACpG,eAAO,MAAM,mBAAmB,EAAE,OAAO,MAAwD,CAAA;AAEjG,4FAA4F;AAC5F,eAAO,MAAM,iBAAiB,EAAE,OAAO,MAAsD,CAAA;AAE7F,gGAAgG;AAChG,eAAO,MAAM,UAAU,EAAE,OAAO,MAA+C,CAAA;AAE/E,oGAAoG;AACpG,eAAO,MAAM,cAAc,EAAE,OAAO,MAAmD,CAAA;AAEvF,+GAA+G;AAC/G,eAAO,MAAM,yBAAyB,EAAE,OAAO,MAE9C,CAAA;AAED,oEAAoE;AACpE,eAAO,MAAM,yBAAyB,EAAE,OAAO,MAE9C,CAAA;AAED,wGAAwG;AACxG,eAAO,MAAM,kBAAkB,EAAE,OAAO,MAEvC,CAAA;AAED,oGAAoG;AACpG,eAAO,MAAM,iBAAiB,EAAE,OAAO,MAAsD,CAAA"}
@@ -17,8 +17,12 @@ export const INSTALL_MCP = Symbol.for("@nifrajs/core/install-mcp");
17
17
  export const INSTALL_SSE = Symbol.for("@nifrajs/core/install-sse");
18
18
  /** @internal Install the Node-direct renderer on a server (called by the `nodeDirect()` plugin). */
19
19
  export const INSTALL_NODE_DIRECT = Symbol.for("@nifrajs/core/install-node-direct");
20
+ /** @internal Install the not-found lane on a server (called by the `notFound()` plugin). */
21
+ export const INSTALL_NOT_FOUND = Symbol.for("@nifrajs/core/install-not-found");
20
22
  /** @internal Install the WebSocket runtime on a server (called by the `websocket()` plugin). */
21
23
  export const INSTALL_WS = Symbol.for("@nifrajs/core/install-ws");
24
+ /** @internal Read the installed WebSocket runtime when a server is composed into another server. */
25
+ export const GET_WS_RUNTIME = Symbol.for("@nifrajs/core/get-ws-runtime");
22
26
  /** @internal Install the response-contract runtime on a server (called by the `responseContract()` plugin). */
23
27
  export const INSTALL_RESPONSE_CONTRACT = Symbol.for("@nifrajs/core/install-response-contract");
24
28
  /** @internal Install the response-observer adapters on a server. */
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/server/install.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAE7D,oGAAoG;AACpG,MAAM,CAAC,MAAM,mBAAmB,GAAkB,MAAM,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAA;AAEjG,uGAAuG;AACvG,MAAM,CAAC,MAAM,qBAAqB,GAAkB,MAAM,CAAC,GAAG,CAC5D,qCAAqC,CACtC,CAAA;AAED,oFAAoF;AACpF,MAAM,CAAC,MAAM,WAAW,GAAkB,MAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;AAEjF,8FAA8F;AAC9F,MAAM,CAAC,MAAM,WAAW,GAAkB,MAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;AAEjF,oGAAoG;AACpG,MAAM,CAAC,MAAM,mBAAmB,GAAkB,MAAM,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAA;AAEjG,gGAAgG;AAChG,MAAM,CAAC,MAAM,UAAU,GAAkB,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;AAE/E,+GAA+G;AAC/G,MAAM,CAAC,MAAM,yBAAyB,GAAkB,MAAM,CAAC,GAAG,CAChE,yCAAyC,CAC1C,CAAA;AAED,oEAAoE;AACpE,MAAM,CAAC,MAAM,yBAAyB,GAAkB,MAAM,CAAC,GAAG,CAChE,yCAAyC,CAC1C,CAAA;AAED,wGAAwG;AACxG,MAAM,CAAC,MAAM,kBAAkB,GAAkB,MAAM,CAAC,GAAG,CACzD,uBAAuB,CAAC,gBAAgB,CACzC,CAAA;AAED,oGAAoG;AACpG,MAAM,CAAC,MAAM,iBAAiB,GAAkB,MAAM,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAA"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/server/install.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAE7D,oGAAoG;AACpG,MAAM,CAAC,MAAM,mBAAmB,GAAkB,MAAM,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAA;AAEjG,uGAAuG;AACvG,MAAM,CAAC,MAAM,qBAAqB,GAAkB,MAAM,CAAC,GAAG,CAC5D,qCAAqC,CACtC,CAAA;AAED,oFAAoF;AACpF,MAAM,CAAC,MAAM,WAAW,GAAkB,MAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;AAEjF,8FAA8F;AAC9F,MAAM,CAAC,MAAM,WAAW,GAAkB,MAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;AAEjF,oGAAoG;AACpG,MAAM,CAAC,MAAM,mBAAmB,GAAkB,MAAM,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAA;AAEjG,4FAA4F;AAC5F,MAAM,CAAC,MAAM,iBAAiB,GAAkB,MAAM,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAA;AAE7F,gGAAgG;AAChG,MAAM,CAAC,MAAM,UAAU,GAAkB,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;AAE/E,oGAAoG;AACpG,MAAM,CAAC,MAAM,cAAc,GAAkB,MAAM,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAA;AAEvF,+GAA+G;AAC/G,MAAM,CAAC,MAAM,yBAAyB,GAAkB,MAAM,CAAC,GAAG,CAChE,yCAAyC,CAC1C,CAAA;AAED,oEAAoE;AACpE,MAAM,CAAC,MAAM,yBAAyB,GAAkB,MAAM,CAAC,GAAG,CAChE,yCAAyC,CAC1C,CAAA;AAED,wGAAwG;AACxG,MAAM,CAAC,MAAM,kBAAkB,GAAkB,MAAM,CAAC,GAAG,CACzD,uBAAuB,CAAC,gBAAgB,CACzC,CAAA;AAED,oGAAoG;AACpG,MAAM,CAAC,MAAM,iBAAiB,GAAkB,MAAM,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAA"}
@@ -0,0 +1,45 @@
1
+ import { type Method } from "../router/router.js";
2
+ import type { RouteSchema } from "./context.js";
3
+ import type { MethodRoutesPlugin } from "./plugin.js";
4
+ import type { OutputOf } from "./registry.js";
5
+ import type { Handler } from "./server.js";
6
+ export type { MethodRoutesPlugin } from "./plugin.js";
7
+ /**
8
+ * Register one handler under every standard method: `app.use(all(path, handler))`.
9
+ *
10
+ * ```ts
11
+ * import { all } from "@nifrajs/core/methods"
12
+ *
13
+ * const app = server().use(all("/echo", (c) => ({ method: c.req.method })))
14
+ * ```
15
+ *
16
+ * It is the same as calling `get`, `post`, `put`, `patch`, `delete`, `head` and `options` with the
17
+ * one handler, as a single registration: a method already registered on the path makes the call
18
+ * throw and adds nothing. A schema applies to every method, so with a `body` schema a request that
19
+ * carries no body is refused under any of them, `GET` included.
20
+ */
21
+ export declare function all<Path extends string, S extends RouteSchema, H extends Handler<Path, S, Ctx>, Ctx = NonNullable<unknown>>(path: Path, schema: S, handler: H): MethodRoutesPlugin<Method, Path, S, OutputOf<H>, Ctx>;
22
+ export declare function all<Path extends string, H extends Handler<Path, RouteSchema, Ctx>, Ctx = NonNullable<unknown>>(path: Path, handler: H): MethodRoutesPlugin<Method, Path, Record<never, never>, OutputOf<H>, Ctx>;
23
+ /**
24
+ * Register one handler under the method, or the methods, you name:
25
+ * `app.use(method("PROPFIND", path, handler))`.
26
+ *
27
+ * ```ts
28
+ * import { method } from "@nifrajs/core/methods"
29
+ *
30
+ * const app = server()
31
+ * .use(method("PROPFIND", "/dav/*path", (c) => listing(c.params.path)))
32
+ * .use(method(["GET", "POST"], "/search", (c) => search(c.req)))
33
+ * ```
34
+ *
35
+ * A name is case-insensitive and is registered uppercase. It must be a token of letters, digits and
36
+ * hyphens that starts with a letter, at most 32 characters, and not `TRACE`, `CONNECT` or `TRACK`;
37
+ * anything else throws when `method()` is called. A list is one registration: every method is added,
38
+ * or none is.
39
+ *
40
+ * Only the standard methods among the names join the app's typed registry, so the typed client has
41
+ * a call for those and none for a custom token.
42
+ */
43
+ export declare function method<const M extends string, Path extends string, S extends RouteSchema, H extends Handler<Path, S, Ctx>, Ctx = NonNullable<unknown>>(name: M | readonly M[], path: Path, schema: S, handler: H): MethodRoutesPlugin<M, Path, S, OutputOf<H>, Ctx>;
44
+ export declare function method<const M extends string, Path extends string, H extends Handler<Path, RouteSchema, Ctx>, Ctx = NonNullable<unknown>>(name: M | readonly M[], path: Path, handler: H): MethodRoutesPlugin<M, Path, Record<never, never>, OutputOf<H>, Ctx>;
45
+ //# sourceMappingURL=methods.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"methods.d.ts","sourceRoot":"","sources":["../../src/server/methods.ts"],"names":[],"mappings":"AAKA,OAAO,EAAgC,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAkCrD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,GAAG,CACjB,IAAI,SAAS,MAAM,EACnB,CAAC,SAAS,WAAW,EACrB,CAAC,SAAS,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAC/B,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,EAC1B,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;AAC3F,wBAAgB,GAAG,CACjB,IAAI,SAAS,MAAM,EACnB,CAAC,SAAS,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,EACzC,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,EAC1B,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;AASnG;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,MAAM,CACpB,KAAK,CAAC,CAAC,SAAS,MAAM,EACtB,IAAI,SAAS,MAAM,EACnB,CAAC,SAAS,WAAW,EACrB,CAAC,SAAS,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAC/B,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,EAE1B,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,EACtB,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,CAAC,GACT,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;AACnD,wBAAgB,MAAM,CACpB,KAAK,CAAC,CAAC,SAAS,MAAM,EACtB,IAAI,SAAS,MAAM,EACnB,CAAC,SAAS,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,EACzC,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,EAE1B,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,EACtB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,CAAC,GACT,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA"}