@nifrajs/web 5.5.0 → 5.6.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 (457) hide show
  1. package/CHANGELOG.md +162 -0
  2. package/dist/boundary.d.ts +67 -7
  3. package/dist/boundary.d.ts.map +1 -1
  4. package/dist/boundary.js +6 -4
  5. package/dist/boundary.js.map +1 -1
  6. package/dist/build-plan.d.ts +3 -0
  7. package/dist/build-plan.d.ts.map +1 -1
  8. package/dist/build-plan.js.map +1 -1
  9. package/dist/build-vite.d.ts.map +1 -1
  10. package/dist/build-vite.js +2 -0
  11. package/dist/build-vite.js.map +1 -1
  12. package/dist/build.d.ts +9 -2
  13. package/dist/build.d.ts.map +1 -1
  14. package/dist/build.js +9 -0
  15. package/dist/build.js.map +1 -1
  16. package/dist/client.d.ts +2 -1
  17. package/dist/client.d.ts.map +1 -1
  18. package/dist/client.js +140 -12
  19. package/dist/client.js.map +1 -1
  20. package/dist/csp.d.ts +8 -0
  21. package/dist/csp.d.ts.map +1 -1
  22. package/dist/csp.js +11 -2
  23. package/dist/csp.js.map +1 -1
  24. package/dist/deferred.d.ts +6 -4
  25. package/dist/deferred.d.ts.map +1 -1
  26. package/dist/deferred.js +10 -6
  27. package/dist/deferred.js.map +1 -1
  28. package/dist/dev-feed.d.ts.map +1 -1
  29. package/dist/dev-feed.js +11 -2
  30. package/dist/dev-feed.js.map +1 -1
  31. package/dist/dev-session.d.ts.map +1 -1
  32. package/dist/dev-session.js +13 -6
  33. package/dist/dev-session.js.map +1 -1
  34. package/dist/dev.d.ts +4 -1
  35. package/dist/dev.d.ts.map +1 -1
  36. package/dist/dev.js +12 -5
  37. package/dist/dev.js.map +1 -1
  38. package/dist/diagnostic-catalog.d.ts +4 -0
  39. package/dist/diagnostic-catalog.d.ts.map +1 -1
  40. package/dist/diagnostic-catalog.js +48 -0
  41. package/dist/diagnostic-catalog.js.map +1 -1
  42. package/dist/diagnostic.d.ts +1 -1
  43. package/dist/diagnostic.d.ts.map +1 -1
  44. package/dist/diagnostic.js +1 -1
  45. package/dist/diagnostic.js.map +1 -1
  46. package/dist/fn.d.ts +5 -3
  47. package/dist/fn.d.ts.map +1 -1
  48. package/dist/fn.js +20 -5
  49. package/dist/fn.js.map +1 -1
  50. package/dist/fs.d.ts.map +1 -1
  51. package/dist/fs.js +13 -3
  52. package/dist/fs.js.map +1 -1
  53. package/dist/identity.d.ts +22 -0
  54. package/dist/identity.d.ts.map +1 -0
  55. package/dist/identity.js +60 -0
  56. package/dist/identity.js.map +1 -0
  57. package/dist/index.d.ts +7 -6
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +4 -2
  60. package/dist/index.js.map +1 -1
  61. package/dist/internal/cdn/cloudflare.d.ts +2 -1
  62. package/dist/internal/cdn/cloudflare.d.ts.map +1 -1
  63. package/dist/internal/cdn/cloudflare.js +2 -1
  64. package/dist/internal/cdn/cloudflare.js.map +1 -1
  65. package/dist/internal/certified-components.d.ts +1 -1
  66. package/dist/internal/certified-components.js +1 -1
  67. package/dist/internal/codegen.d.ts +11 -10
  68. package/dist/internal/codegen.d.ts.map +1 -1
  69. package/dist/internal/codegen.js +65 -8
  70. package/dist/internal/codegen.js.map +1 -1
  71. package/dist/internal/dev-websocket.d.ts +73 -0
  72. package/dist/internal/dev-websocket.d.ts.map +1 -0
  73. package/dist/internal/dev-websocket.js +145 -0
  74. package/dist/internal/dev-websocket.js.map +1 -0
  75. package/dist/internal/hole-runtime.d.ts +66 -0
  76. package/dist/internal/hole-runtime.d.ts.map +1 -0
  77. package/dist/internal/hole-runtime.js +211 -0
  78. package/dist/internal/hole-runtime.js.map +1 -0
  79. package/dist/internal/identity-epoch.d.ts +50 -0
  80. package/dist/internal/identity-epoch.d.ts.map +1 -0
  81. package/dist/internal/identity-epoch.js +179 -0
  82. package/dist/internal/identity-epoch.js.map +1 -0
  83. package/dist/internal/invalidation-contract.d.ts +23 -0
  84. package/dist/internal/invalidation-contract.d.ts.map +1 -0
  85. package/dist/internal/invalidation-contract.js +11 -0
  86. package/dist/internal/invalidation-contract.js.map +1 -0
  87. package/dist/internal/invalidation.d.ts +62 -0
  88. package/dist/internal/invalidation.d.ts.map +1 -0
  89. package/dist/internal/invalidation.js +149 -0
  90. package/dist/internal/invalidation.js.map +1 -0
  91. package/dist/internal/island-bindings.d.ts +51 -0
  92. package/dist/internal/island-bindings.d.ts.map +1 -0
  93. package/dist/internal/island-bindings.js +147 -0
  94. package/dist/internal/island-bindings.js.map +1 -0
  95. package/dist/internal/island-list.d.ts +26 -0
  96. package/dist/internal/island-list.d.ts.map +1 -0
  97. package/dist/internal/island-list.js +78 -0
  98. package/dist/internal/island-list.js.map +1 -0
  99. package/dist/internal/island-mount.d.ts +4 -0
  100. package/dist/internal/island-mount.d.ts.map +1 -0
  101. package/dist/internal/island-mount.js +66 -0
  102. package/dist/internal/island-mount.js.map +1 -0
  103. package/dist/internal/island-owner.d.ts +5 -0
  104. package/dist/internal/island-owner.d.ts.map +1 -0
  105. package/dist/internal/island-owner.js +20 -0
  106. package/dist/internal/island-owner.js.map +1 -0
  107. package/dist/internal/island-resource.d.ts +30 -0
  108. package/dist/internal/island-resource.d.ts.map +1 -0
  109. package/dist/internal/island-resource.js +57 -0
  110. package/dist/internal/island-resource.js.map +1 -0
  111. package/dist/internal/island-signals.d.ts +51 -0
  112. package/dist/internal/island-signals.d.ts.map +1 -0
  113. package/dist/internal/island-signals.js +220 -0
  114. package/dist/internal/island-signals.js.map +1 -0
  115. package/dist/internal/keep-alive-table.d.ts +23 -0
  116. package/dist/internal/keep-alive-table.d.ts.map +1 -0
  117. package/dist/internal/keep-alive-table.js +53 -0
  118. package/dist/internal/keep-alive-table.js.map +1 -0
  119. package/dist/internal/live-contract.d.ts +96 -0
  120. package/dist/internal/live-contract.d.ts.map +1 -0
  121. package/dist/internal/live-contract.js +5 -0
  122. package/dist/internal/live-contract.js.map +1 -0
  123. package/dist/internal/live-queries.d.ts +22 -0
  124. package/dist/internal/live-queries.d.ts.map +1 -0
  125. package/dist/internal/live-queries.js +54 -0
  126. package/dist/internal/live-queries.js.map +1 -0
  127. package/dist/internal/page-events.d.ts +10 -0
  128. package/dist/internal/page-events.d.ts.map +1 -0
  129. package/dist/internal/page-events.js +26 -0
  130. package/dist/internal/page-events.js.map +1 -0
  131. package/dist/internal/page-execution.d.ts +14 -1
  132. package/dist/internal/page-execution.d.ts.map +1 -1
  133. package/dist/internal/page-execution.js +415 -31
  134. package/dist/internal/page-execution.js.map +1 -1
  135. package/dist/internal/ppr/admission.d.ts +83 -0
  136. package/dist/internal/ppr/admission.d.ts.map +1 -0
  137. package/dist/internal/ppr/admission.js +221 -0
  138. package/dist/internal/ppr/admission.js.map +1 -0
  139. package/dist/internal/ppr/canary.d.ts +24 -0
  140. package/dist/internal/ppr/canary.d.ts.map +1 -0
  141. package/dist/internal/ppr/canary.js +102 -0
  142. package/dist/internal/ppr/canary.js.map +1 -0
  143. package/dist/internal/ppr/compile-shell.d.ts +39 -0
  144. package/dist/internal/ppr/compile-shell.d.ts.map +1 -0
  145. package/dist/internal/ppr/compile-shell.js +298 -0
  146. package/dist/internal/ppr/compile-shell.js.map +1 -0
  147. package/dist/internal/ppr/contract.d.ts +177 -0
  148. package/dist/internal/ppr/contract.d.ts.map +1 -0
  149. package/dist/internal/ppr/contract.js +80 -0
  150. package/dist/internal/ppr/contract.js.map +1 -0
  151. package/dist/internal/ppr/frames.d.ts +71 -0
  152. package/dist/internal/ppr/frames.d.ts.map +1 -0
  153. package/dist/internal/ppr/frames.js +119 -0
  154. package/dist/internal/ppr/frames.js.map +1 -0
  155. package/dist/internal/ppr/integration.d.ts +19 -0
  156. package/dist/internal/ppr/integration.d.ts.map +1 -0
  157. package/dist/internal/ppr/integration.js +106 -0
  158. package/dist/internal/ppr/integration.js.map +1 -0
  159. package/dist/internal/ppr/options.d.ts +96 -0
  160. package/dist/internal/ppr/options.d.ts.map +1 -0
  161. package/dist/internal/ppr/options.js +125 -0
  162. package/dist/internal/ppr/options.js.map +1 -0
  163. package/dist/internal/ppr/route-rules.d.ts +12 -0
  164. package/dist/internal/ppr/route-rules.d.ts.map +1 -0
  165. package/dist/internal/ppr/route-rules.js +53 -0
  166. package/dist/internal/ppr/route-rules.js.map +1 -0
  167. package/dist/internal/ppr/runtime.d.ts +29 -0
  168. package/dist/internal/ppr/runtime.d.ts.map +1 -0
  169. package/dist/internal/ppr/runtime.js +32 -0
  170. package/dist/internal/ppr/runtime.js.map +1 -0
  171. package/dist/internal/ppr/server.d.ts +29 -0
  172. package/dist/internal/ppr/server.d.ts.map +1 -0
  173. package/dist/internal/ppr/server.js +1407 -0
  174. package/dist/internal/ppr/server.js.map +1 -0
  175. package/dist/internal/ppr/shell-store.d.ts +38 -0
  176. package/dist/internal/ppr/shell-store.d.ts.map +1 -0
  177. package/dist/internal/ppr/shell-store.js +90 -0
  178. package/dist/internal/ppr/shell-store.js.map +1 -0
  179. package/dist/internal/prerendered-pages.d.ts +1 -1
  180. package/dist/internal/prerendered-pages.d.ts.map +1 -1
  181. package/dist/internal/prerendered-pages.js +7 -4
  182. package/dist/internal/prerendered-pages.js.map +1 -1
  183. package/dist/internal/query-digest.d.ts +9 -0
  184. package/dist/internal/query-digest.d.ts.map +1 -0
  185. package/dist/internal/query-digest.js +23 -0
  186. package/dist/internal/query-digest.js.map +1 -0
  187. package/dist/internal/query-runtime.d.ts +6 -1
  188. package/dist/internal/query-runtime.d.ts.map +1 -1
  189. package/dist/internal/query-runtime.js +9 -0
  190. package/dist/internal/query-runtime.js.map +1 -1
  191. package/dist/internal/query-seam.d.ts +29 -0
  192. package/dist/internal/query-seam.d.ts.map +1 -0
  193. package/dist/internal/query-seam.js +23 -0
  194. package/dist/internal/query-seam.js.map +1 -0
  195. package/dist/internal/render-document.d.ts +28 -1
  196. package/dist/internal/render-document.d.ts.map +1 -1
  197. package/dist/internal/render-document.js +83 -18
  198. package/dist/internal/render-document.js.map +1 -1
  199. package/dist/internal/request-abort.d.ts +8 -0
  200. package/dist/internal/request-abort.d.ts.map +1 -0
  201. package/dist/internal/request-abort.js +22 -0
  202. package/dist/internal/request-abort.js.map +1 -0
  203. package/dist/internal/server-boundary.d.ts +2 -0
  204. package/dist/internal/server-boundary.d.ts.map +1 -1
  205. package/dist/internal/server-boundary.js +8 -1
  206. package/dist/internal/server-boundary.js.map +1 -1
  207. package/dist/internal/share-data.d.ts +10 -0
  208. package/dist/internal/share-data.d.ts.map +1 -0
  209. package/dist/internal/share-data.js +135 -0
  210. package/dist/internal/share-data.js.map +1 -0
  211. package/dist/internal/store-signature.d.ts +15 -0
  212. package/dist/internal/store-signature.d.ts.map +1 -0
  213. package/dist/internal/store-signature.js +114 -0
  214. package/dist/internal/store-signature.js.map +1 -0
  215. package/dist/internal/vite-plugin-compat.d.ts +2 -2
  216. package/dist/internal/vite-plugin-compat.js +2 -2
  217. package/dist/internal/web-app.d.ts +25 -0
  218. package/dist/internal/web-app.d.ts.map +1 -1
  219. package/dist/internal/web-app.js +78 -3
  220. package/dist/internal/web-app.js.map +1 -1
  221. package/dist/islands-swap.d.ts +41 -0
  222. package/dist/islands-swap.d.ts.map +1 -0
  223. package/dist/islands-swap.js +270 -0
  224. package/dist/islands-swap.js.map +1 -0
  225. package/dist/islands.d.ts +86 -24
  226. package/dist/islands.d.ts.map +1 -1
  227. package/dist/islands.js +138 -78
  228. package/dist/islands.js.map +1 -1
  229. package/dist/isr.d.ts +67 -13
  230. package/dist/isr.d.ts.map +1 -1
  231. package/dist/isr.js +247 -99
  232. package/dist/isr.js.map +1 -1
  233. package/dist/keep-alive.d.ts +147 -0
  234. package/dist/keep-alive.d.ts.map +1 -0
  235. package/dist/keep-alive.js +1069 -0
  236. package/dist/keep-alive.js.map +1 -0
  237. package/dist/live/bus.d.ts +56 -0
  238. package/dist/live/bus.d.ts.map +1 -0
  239. package/dist/live/bus.js +32 -0
  240. package/dist/live/bus.js.map +1 -0
  241. package/dist/live/core.d.ts +25 -0
  242. package/dist/live/core.d.ts.map +1 -0
  243. package/dist/live/core.js +29 -0
  244. package/dist/live/core.js.map +1 -0
  245. package/dist/live/history.d.ts +38 -0
  246. package/dist/live/history.d.ts.map +1 -0
  247. package/dist/live/history.js +104 -0
  248. package/dist/live/history.js.map +1 -0
  249. package/dist/live/hub-protocol.d.ts +46 -0
  250. package/dist/live/hub-protocol.d.ts.map +1 -0
  251. package/dist/live/hub-protocol.js +108 -0
  252. package/dist/live/hub-protocol.js.map +1 -0
  253. package/dist/live/hub.d.ts +181 -0
  254. package/dist/live/hub.d.ts.map +1 -0
  255. package/dist/live/hub.js +539 -0
  256. package/dist/live/hub.js.map +1 -0
  257. package/dist/live/keyring.d.ts +87 -0
  258. package/dist/live/keyring.d.ts.map +1 -0
  259. package/dist/live/keyring.js +260 -0
  260. package/dist/live/keyring.js.map +1 -0
  261. package/dist/live/read-capped.d.ts +6 -0
  262. package/dist/live/read-capped.d.ts.map +1 -0
  263. package/dist/live/read-capped.js +42 -0
  264. package/dist/live/read-capped.js.map +1 -0
  265. package/dist/live/revocations.d.ts +52 -0
  266. package/dist/live/revocations.d.ts.map +1 -0
  267. package/dist/live/revocations.js +116 -0
  268. package/dist/live/revocations.js.map +1 -0
  269. package/dist/live/settings.d.ts +14 -0
  270. package/dist/live/settings.d.ts.map +1 -0
  271. package/dist/live/settings.js +38 -0
  272. package/dist/live/settings.js.map +1 -0
  273. package/dist/live-client.d.ts +34 -0
  274. package/dist/live-client.d.ts.map +1 -0
  275. package/dist/live-client.js +840 -0
  276. package/dist/live-client.js.map +1 -0
  277. package/dist/live-hub.d.ts +130 -0
  278. package/dist/live-hub.d.ts.map +1 -0
  279. package/dist/live-hub.js +507 -0
  280. package/dist/live-hub.js.map +1 -0
  281. package/dist/live-redis.d.ts +48 -0
  282. package/dist/live-redis.d.ts.map +1 -0
  283. package/dist/live-redis.js +201 -0
  284. package/dist/live-redis.js.map +1 -0
  285. package/dist/live.d.ts +94 -0
  286. package/dist/live.d.ts.map +1 -0
  287. package/dist/live.js +869 -0
  288. package/dist/live.js.map +1 -0
  289. package/dist/manifest.d.ts +113 -2
  290. package/dist/manifest.d.ts.map +1 -1
  291. package/dist/manifest.js +109 -5
  292. package/dist/manifest.js.map +1 -1
  293. package/dist/navigation.d.ts +9 -3
  294. package/dist/navigation.d.ts.map +1 -1
  295. package/dist/navigation.js +13 -3
  296. package/dist/navigation.js.map +1 -1
  297. package/dist/plugins/vite-zone-guard.d.ts +6 -0
  298. package/dist/plugins/vite-zone-guard.d.ts.map +1 -1
  299. package/dist/plugins/vite-zone-guard.js +8 -2
  300. package/dist/plugins/vite-zone-guard.js.map +1 -1
  301. package/dist/ppr.d.ts +73 -0
  302. package/dist/ppr.d.ts.map +1 -0
  303. package/dist/ppr.js +76 -0
  304. package/dist/ppr.js.map +1 -0
  305. package/dist/query.d.ts +8 -13
  306. package/dist/query.d.ts.map +1 -1
  307. package/dist/query.js +112 -18
  308. package/dist/query.js.map +1 -1
  309. package/dist/render-seam.d.ts +30 -0
  310. package/dist/render-seam.d.ts.map +1 -1
  311. package/dist/render-seam.js +5 -0
  312. package/dist/render-seam.js.map +1 -1
  313. package/dist/route-types.d.ts.map +1 -1
  314. package/dist/route-types.js +2 -2
  315. package/dist/route-types.js.map +1 -1
  316. package/dist/router.d.ts +72 -4
  317. package/dist/router.d.ts.map +1 -1
  318. package/dist/router.js +374 -99
  319. package/dist/router.js.map +1 -1
  320. package/dist/server-components/build.d.ts.map +1 -1
  321. package/dist/server-components/build.js +3 -3
  322. package/dist/server-components/build.js.map +1 -1
  323. package/dist/server-components/client.d.ts +23 -1
  324. package/dist/server-components/client.d.ts.map +1 -1
  325. package/dist/server-components/client.js +92 -5
  326. package/dist/server-components/client.js.map +1 -1
  327. package/dist/server-components/hole.d.ts +8 -0
  328. package/dist/server-components/hole.d.ts.map +1 -0
  329. package/dist/server-components/hole.js +20 -0
  330. package/dist/server-components/hole.js.map +1 -0
  331. package/dist/server-components/html-policy.d.ts.map +1 -1
  332. package/dist/server-components/html-policy.js +62 -4
  333. package/dist/server-components/html-policy.js.map +1 -1
  334. package/dist/server-components/html-scan.d.ts +17 -0
  335. package/dist/server-components/html-scan.d.ts.map +1 -0
  336. package/dist/server-components/html-scan.js +180 -0
  337. package/dist/server-components/html-scan.js.map +1 -0
  338. package/dist/server-components/html.d.ts.map +1 -1
  339. package/dist/server-components/html.js +19 -4
  340. package/dist/server-components/html.js.map +1 -1
  341. package/dist/server-components/router-integration.d.ts +4 -1
  342. package/dist/server-components/router-integration.d.ts.map +1 -1
  343. package/dist/server-components/router-integration.js +23 -2
  344. package/dist/server-components/router-integration.js.map +1 -1
  345. package/dist/server-components/runtime.d.ts +6 -1
  346. package/dist/server-components/runtime.d.ts.map +1 -1
  347. package/dist/server-components/runtime.js +86 -28
  348. package/dist/server-components/runtime.js.map +1 -1
  349. package/dist/server-components/state.d.ts +3 -1
  350. package/dist/server-components/state.d.ts.map +1 -1
  351. package/dist/server-components/state.js +50 -38
  352. package/dist/server-components/state.js.map +1 -1
  353. package/dist/server-components/types.d.ts +9 -0
  354. package/dist/server-components/types.d.ts.map +1 -1
  355. package/dist/vite.d.ts +5 -1
  356. package/dist/vite.d.ts.map +1 -1
  357. package/dist/vite.js +58 -4
  358. package/dist/vite.js.map +1 -1
  359. package/package.json +48 -8
  360. package/src/boundary.ts +77 -5
  361. package/src/build-plan.ts +3 -0
  362. package/src/build-vite.ts +2 -0
  363. package/src/build.ts +19 -1
  364. package/src/client.ts +147 -10
  365. package/src/csp.ts +16 -2
  366. package/src/deferred.ts +11 -5
  367. package/src/dev-feed.ts +11 -2
  368. package/src/dev-session.ts +22 -11
  369. package/src/dev.ts +29 -8
  370. package/src/diagnostic-catalog.ts +53 -0
  371. package/src/diagnostic.ts +1 -0
  372. package/src/fn.ts +24 -7
  373. package/src/fs.ts +22 -8
  374. package/src/identity.ts +61 -0
  375. package/src/index.ts +19 -0
  376. package/src/internal/cdn/cloudflare.ts +2 -1
  377. package/src/internal/certified-components.ts +1 -1
  378. package/src/internal/codegen.ts +87 -8
  379. package/src/internal/dev-websocket.ts +230 -0
  380. package/src/internal/hole-runtime.ts +286 -0
  381. package/src/internal/identity-epoch.ts +235 -0
  382. package/src/internal/invalidation-contract.ts +35 -0
  383. package/src/internal/invalidation.ts +213 -0
  384. package/src/internal/island-bindings.ts +191 -0
  385. package/src/internal/island-list.ts +92 -0
  386. package/src/internal/island-mount.ts +68 -0
  387. package/src/internal/island-owner.ts +20 -0
  388. package/src/internal/island-resource.ts +76 -0
  389. package/src/internal/island-signals.ts +249 -0
  390. package/src/internal/keep-alive-table.ts +72 -0
  391. package/src/internal/live-contract.ts +106 -0
  392. package/src/internal/live-queries.ts +60 -0
  393. package/src/internal/page-events.ts +27 -0
  394. package/src/internal/page-execution.ts +579 -40
  395. package/src/internal/ppr/admission.ts +300 -0
  396. package/src/internal/ppr/canary.ts +122 -0
  397. package/src/internal/ppr/compile-shell.ts +379 -0
  398. package/src/internal/ppr/contract.ts +265 -0
  399. package/src/internal/ppr/frames.ts +170 -0
  400. package/src/internal/ppr/integration.ts +137 -0
  401. package/src/internal/ppr/options.ts +221 -0
  402. package/src/internal/ppr/route-rules.ts +77 -0
  403. package/src/internal/ppr/runtime.ts +36 -0
  404. package/src/internal/ppr/server.ts +1764 -0
  405. package/src/internal/ppr/shell-store.ts +139 -0
  406. package/src/internal/prerendered-pages.ts +7 -4
  407. package/src/internal/query-digest.ts +34 -0
  408. package/src/internal/query-runtime.ts +14 -1
  409. package/src/internal/query-seam.ts +48 -0
  410. package/src/internal/render-document.ts +149 -22
  411. package/src/internal/request-abort.ts +26 -0
  412. package/src/internal/server-boundary.ts +10 -1
  413. package/src/internal/share-data.ts +136 -0
  414. package/src/internal/store-signature.ts +149 -0
  415. package/src/internal/vite-plugin-compat.ts +2 -2
  416. package/src/internal/web-app.ts +121 -3
  417. package/src/islands-swap.ts +283 -0
  418. package/src/islands.ts +169 -72
  419. package/src/isr.ts +348 -106
  420. package/src/keep-alive.ts +1315 -0
  421. package/src/live/bus.ts +77 -0
  422. package/src/live/core.ts +52 -0
  423. package/src/live/history.ts +109 -0
  424. package/src/live/hub-protocol.ts +133 -0
  425. package/src/live/hub.ts +615 -0
  426. package/src/live/keyring.ts +379 -0
  427. package/src/live/read-capped.ts +36 -0
  428. package/src/live/revocations.ts +155 -0
  429. package/src/live/settings.ts +46 -0
  430. package/src/live-client.ts +973 -0
  431. package/src/live-hub.ts +658 -0
  432. package/src/live-redis.ts +259 -0
  433. package/src/live.ts +1096 -0
  434. package/src/manifest.ts +274 -6
  435. package/src/navigation.ts +14 -2
  436. package/src/plugins/vite-zone-guard.ts +15 -2
  437. package/src/ppr.ts +153 -0
  438. package/src/query.ts +147 -20
  439. package/src/render-seam.ts +35 -0
  440. package/src/route-types.ts +3 -1
  441. package/src/router.ts +494 -101
  442. package/src/server-components/build.ts +9 -3
  443. package/src/server-components/client.ts +89 -5
  444. package/src/server-components/hole.ts +23 -0
  445. package/src/server-components/html-policy.ts +63 -4
  446. package/src/server-components/html-scan.ts +159 -0
  447. package/src/server-components/html.ts +18 -4
  448. package/src/server-components/router-integration.ts +21 -2
  449. package/src/server-components/runtime.ts +112 -30
  450. package/src/server-components/state.ts +66 -44
  451. package/src/server-components/types.ts +16 -0
  452. package/src/vite.ts +75 -6
  453. package/dist/nano.d.ts +0 -125
  454. package/dist/nano.d.ts.map +0 -1
  455. package/dist/nano.js +0 -190
  456. package/dist/nano.js.map +0 -1
  457. package/src/nano.ts +0 -246
@@ -0,0 +1,539 @@
1
+ /**
2
+ * The live socket endpoint and its fan-out. A socket subscribes to the tags of the keys its installed
3
+ * grants hold; each change goes out as one identical `changed` frame per tag topic, so Bun can send it
4
+ * with one native publish. Frames carry tags only: never data, key text, subjects or seqs.
5
+ *
6
+ * Installing a watch and applying a bus event each run as one synchronous step (subscribe, then scan
7
+ * history, then `ready`; record in history, then publish), so every event is either reported in
8
+ * `ready.stale` or delivered after the subscription, and `ready` precedes every later frame.
9
+ */
10
+ import { isSameOriginRequest } from "@nifrajs/core/server";
11
+ import { MAX_GRANT_CHARS } from "./keyring.js";
12
+ export const CLOSE_BAD_GRANT = 4401;
13
+ export const CLOSE_REVOKED = 4403;
14
+ export const CLOSE_SCOPE = 4409;
15
+ export const CLOSE_CAPACITY = 1013;
16
+ export const CLOSE_PROTOCOL = 1008;
17
+ /** Nothing to watch: a tab with no tag to hear about reconnects only once it has one. */
18
+ export const CLOSE_UNWATCHED = 1000;
19
+ export const MAX_FRAME_BYTES = 32_768;
20
+ export const MAX_WATCH_GRANTS = 3;
21
+ export const MAX_WATCHES_PER_MINUTE = 20;
22
+ /** Every inbound frame, heartbeats included: a client heartbeats twice a minute. */
23
+ export const MAX_FRAMES_PER_MINUTE = 60;
24
+ export const MAX_OUTBOUND_BYTES = 65_536;
25
+ export const MAX_TOPICS = 200_000;
26
+ export const IDLE_MS = 150_000;
27
+ /**
28
+ * How long a socket may hold no tag: from its open, or from the watch or revocation that left it
29
+ * none. A tab watches right after its first live load, so only a socket nobody listens on runs out.
30
+ */
31
+ export const FIRST_WATCH_MS = 60_000;
32
+ export const SWEEP_MS = 10_000;
33
+ export const COALESCE_MS = 25;
34
+ /** How long after closing many sockets at once their reconnects are told to spread their reloads. */
35
+ export const RECONNECT_WINDOW_MS = 30_000;
36
+ const TAG_CACHE_SIZE = 16_384;
37
+ const SPREAD_STEPS = [250, 500, 1000, 2000, 5000];
38
+ const HEARTBEAT = "p";
39
+ export class LiveHub {
40
+ ring;
41
+ history;
42
+ revocations;
43
+ options;
44
+ publishers;
45
+ /** Bus unreachable: no watch is accepted and no socket kept. */
46
+ down = false;
47
+ sockets = new Set();
48
+ /** Local subscribers per tag: the intern table, and the input to `spread`. */
49
+ members = new Map();
50
+ /** Socket-tag subscriptions held, the sum of `members`. */
51
+ memberships = 0;
52
+ tagOf;
53
+ coalescing = new Map();
54
+ /** The last time many sockets were closed at once, and how many. */
55
+ burstAt = Number.NEGATIVE_INFINITY;
56
+ burstSize = 0;
57
+ coalesceTimer;
58
+ sweepTimer;
59
+ constructor(ring, history, revocations, options,
60
+ /** Where `changed` frames go: each attached app's `publish`. */
61
+ publishers) {
62
+ this.ring = ring;
63
+ this.history = history;
64
+ this.revocations = revocations;
65
+ this.options = options;
66
+ this.publishers = publishers;
67
+ this.tagOf = options.tags ?? tagCache(ring);
68
+ }
69
+ get size() {
70
+ return this.sockets.size;
71
+ }
72
+ /** The tag of `key` under each listed secret, newest first. */
73
+ tagsOf(key) {
74
+ const tags = [];
75
+ for (let secret = 0; secret < this.ring.secretCount; secret++)
76
+ tags.push(this.tagOf(key, secret));
77
+ return Promise.all(tags);
78
+ }
79
+ /** The handshake: a missing, `null` or untrusted Origin is refused. */
80
+ upgrade(req) {
81
+ const origin = req.headers.get("origin");
82
+ if (origin === null ||
83
+ !(this.options.trusted.has(origin) || isSameOriginRequest(origin, req))) {
84
+ return Response.json({ error: "forbidden_origin" }, { status: 403 });
85
+ }
86
+ const now = Date.now();
87
+ return {
88
+ sid: randomSid(),
89
+ sub: undefined,
90
+ received: -1,
91
+ tags: new Set(),
92
+ exp: Number.POSITIVE_INFINITY,
93
+ unwatchedSince: now,
94
+ window: now,
95
+ frames: 0,
96
+ watches: 0,
97
+ lastSeen: now,
98
+ };
99
+ }
100
+ open(ws) {
101
+ if (this.down || this.sockets.size >= this.options.maxSockets || this.overRss()) {
102
+ ws.close(CLOSE_CAPACITY, "at capacity");
103
+ return;
104
+ }
105
+ this.sockets.add(ws);
106
+ this.startSweep();
107
+ const spread = Date.now() - this.burstAt < RECONNECT_WINDOW_MS ? this.spread(this.burstSize) : 0;
108
+ this.send(ws, JSON.stringify(spread > 0
109
+ ? { t: "welcome", sid: ws.data.sid, spread }
110
+ : { t: "welcome", sid: ws.data.sid }));
111
+ }
112
+ /** The runtime has dropped the closed socket's topics; only the counts are left to settle. */
113
+ close(ws) {
114
+ this.forget(ws, false);
115
+ }
116
+ /** A change, already in history: publish one frame per tag, at most once per key per window. */
117
+ change(keys, tags) {
118
+ for (let i = 0; i < keys.length; i++) {
119
+ const key = keys[i] ?? "";
120
+ const keyTags = tags[i] ?? [];
121
+ // Nobody here watches it: nothing to send now or at the end of a window.
122
+ if (!keyTags.some((tag) => this.members.has(tag)))
123
+ continue;
124
+ const pending = this.coalescing.get(key);
125
+ if (pending !== undefined) {
126
+ pending.again = true;
127
+ continue;
128
+ }
129
+ this.coalescing.set(key, { tags: keyTags, again: false });
130
+ this.publishTags(keyTags);
131
+ }
132
+ if (this.coalescing.size > 0 && this.coalesceTimer === undefined) {
133
+ this.coalesceTimer = unref(setTimeout(() => this.flush(), COALESCE_MS));
134
+ }
135
+ }
136
+ /** A revocation, already stored. `tags` are the key's tags for a `revokeKey`. */
137
+ revoke(event, tags) {
138
+ if (event.key === null) {
139
+ for (const ws of [...this.sockets]) {
140
+ if (event.sub === null || ws.data.sub === event.sub)
141
+ this.drop(ws, CLOSE_REVOKED, "revoked");
142
+ }
143
+ return;
144
+ }
145
+ // One terminal `changed` to every subscriber, then the revoked ones leave the topics: no later
146
+ // frame for this key reaches them.
147
+ this.publishTags(tags);
148
+ for (const ws of this.sockets) {
149
+ if (event.sub !== null && ws.data.sub !== event.sub)
150
+ continue;
151
+ let left = false;
152
+ for (const tag of tags) {
153
+ if (!ws.data.tags.has(tag))
154
+ continue;
155
+ this.leave(ws, tag);
156
+ left = true;
157
+ }
158
+ const state = ws.data;
159
+ if (left && state.tags.size === 0)
160
+ state.unwatchedSince ??= Date.now();
161
+ if (left)
162
+ this.options.store?.saved(ws, {
163
+ sub: state.sub ?? null,
164
+ exp: state.exp,
165
+ tags: [...state.tags],
166
+ });
167
+ }
168
+ }
169
+ /** Close every socket: history or revocations before now are unknown, or the bus is gone. */
170
+ closeAll(code, reason) {
171
+ const sockets = [...this.sockets];
172
+ this.burst(sockets.length);
173
+ for (const ws of sockets)
174
+ this.drop(ws, code, reason);
175
+ }
176
+ /**
177
+ * `count` sockets just closed together and will reconnect together. Each must reload under its new
178
+ * socket id, so for a while `welcome` tells them to spread those reloads as a change would.
179
+ */
180
+ burst(count) {
181
+ const now = Date.now();
182
+ const recent = now - this.burstAt < RECONNECT_WINDOW_MS;
183
+ this.burstSize = recent ? Math.max(this.burstSize, count) : count;
184
+ this.burstAt = now;
185
+ }
186
+ /** Resolves once a watch is installed or refused. */
187
+ message(ws, data) {
188
+ // Refused at open or already dropped: a frame still in flight gets no say.
189
+ if (!this.sockets.has(ws))
190
+ return undefined;
191
+ const state = ws.data;
192
+ const now = Date.now();
193
+ state.lastSeen = now;
194
+ if (now - state.window >= 60_000) {
195
+ state.window = now;
196
+ state.frames = 0;
197
+ state.watches = 0;
198
+ }
199
+ if (++state.frames > MAX_FRAMES_PER_MINUTE) {
200
+ this.drop(ws, CLOSE_PROTOCOL, "rate");
201
+ return undefined;
202
+ }
203
+ if (data === HEARTBEAT) {
204
+ this.send(ws, HEARTBEAT);
205
+ return undefined;
206
+ }
207
+ const watch = typeof data === "string" ? parseWatch(data) : undefined;
208
+ if (watch === undefined) {
209
+ this.drop(ws, CLOSE_PROTOCOL, "protocol");
210
+ return undefined;
211
+ }
212
+ if (++state.watches > MAX_WATCHES_PER_MINUTE) {
213
+ this.drop(ws, CLOSE_PROTOCOL, "rate");
214
+ return undefined;
215
+ }
216
+ if (watch.gen <= state.received)
217
+ return undefined;
218
+ state.received = watch.gen;
219
+ return this.install(ws, watch).catch(() => this.drop(ws, 1011, "error"));
220
+ }
221
+ async install(ws, watch) {
222
+ const state = ws.data;
223
+ const now = Date.now();
224
+ const prepared = [];
225
+ // One grant per path: the page and each open boundary show different URLs.
226
+ const paths = new Set();
227
+ for (const token of watch.grants) {
228
+ const grant = await this.ring.open(token, now);
229
+ if (grant === undefined || grant.claims.sid !== state.sid) {
230
+ return this.drop(ws, CLOSE_BAD_GRANT, "grant");
231
+ }
232
+ if (paths.has(grant.claims.path))
233
+ return this.drop(ws, CLOSE_PROTOCOL, "protocol");
234
+ paths.add(grant.claims.path);
235
+ const owners = [];
236
+ const tags = [];
237
+ for (const [id, owner] of Object.entries(grant.claims.owners)) {
238
+ owners.push({ id, w: owner.w, hashes: owner.k.map(this.options.hash) });
239
+ tags.push(...(await Promise.all(owner.k.map((key) => this.tagOf(key, grant.secret)))));
240
+ }
241
+ prepared.push({ grant, owners, tags });
242
+ }
243
+ // One synchronous step from here to `ready`.
244
+ if (!this.sockets.has(ws) || ws.readyState !== 1 || state.received !== watch.gen)
245
+ return;
246
+ if (this.down)
247
+ return this.drop(ws, CLOSE_CAPACITY, "unavailable");
248
+ let sub = state.sub;
249
+ for (const { grant } of prepared) {
250
+ const claims = grant.claims;
251
+ if (this.revocations.grantRevoked(claims))
252
+ return this.drop(ws, CLOSE_REVOKED, "revoked");
253
+ for (const owner of Object.values(claims.owners)) {
254
+ for (const key of owner.k) {
255
+ if (this.revocations.keyRevoked(key, claims)) {
256
+ return this.drop(ws, CLOSE_BAD_GRANT, "grant");
257
+ }
258
+ }
259
+ }
260
+ if (sub !== undefined && sub !== claims.sub)
261
+ return this.drop(ws, CLOSE_SCOPE, "scope");
262
+ sub = claims.sub;
263
+ }
264
+ // At most 3 grants of 64 keys each (`parseWatch`, the keyring): 192 memberships per socket.
265
+ const next = new Set();
266
+ for (const { tags } of prepared)
267
+ for (const tag of tags)
268
+ next.add(tag);
269
+ let added = 0;
270
+ for (const tag of next)
271
+ if (!this.members.has(tag))
272
+ added++;
273
+ const budget = this.options.maxMemberships ?? Number.POSITIVE_INFINITY;
274
+ if (this.members.size + added > (this.options.maxTopics ?? MAX_TOPICS) ||
275
+ this.memberships - state.tags.size + next.size > budget) {
276
+ return this.drop(ws, CLOSE_CAPACITY, "at capacity");
277
+ }
278
+ state.sub = sub;
279
+ for (const tag of state.tags)
280
+ if (!next.has(tag))
281
+ this.leave(ws, tag);
282
+ for (const tag of next) {
283
+ if (state.tags.has(tag))
284
+ continue;
285
+ this.join(ws, tag);
286
+ }
287
+ // An empty watch does not restart the clock: only holding a tag stops it.
288
+ state.unwatchedSince = next.size === 0 ? (state.unwatchedSince ?? now) : undefined;
289
+ // Per grant, in watch order: two frames can hold an owner of the same id.
290
+ const stale = [];
291
+ let exp = Number.POSITIVE_INFINITY;
292
+ for (const { grant, owners } of prepared) {
293
+ exp = Math.min(exp, grant.claims.exp * 1000);
294
+ const changed = [];
295
+ for (const owner of owners) {
296
+ if (!this.history.known(owner.w) ||
297
+ owner.hashes.some((hash) => this.history.changedSince(hash, owner.w)))
298
+ changed.push(owner.id);
299
+ }
300
+ stale.push(changed);
301
+ }
302
+ state.exp = exp;
303
+ this.options.store?.saved(ws, { sub: state.sub ?? null, exp, tags: [...state.tags] });
304
+ this.send(ws, JSON.stringify({ t: "ready", gen: watch.gen, stale }));
305
+ }
306
+ /**
307
+ * A socket whose hub lost its memory but not its connection: its membership comes back as stored.
308
+ * Every revocation since was applied to what is stored, so nothing here is checked again.
309
+ */
310
+ restore(ws, stored) {
311
+ this.sockets.add(ws);
312
+ if (stored === undefined)
313
+ return;
314
+ const state = ws.data;
315
+ state.sub = stored.sub;
316
+ state.exp = stored.exp;
317
+ for (const tag of stored.tags)
318
+ if (!state.tags.has(tag))
319
+ this.join(ws, tag);
320
+ if (state.tags.size > 0)
321
+ state.unwatchedSince = undefined;
322
+ }
323
+ flush() {
324
+ this.coalesceTimer = undefined;
325
+ for (const [key, pending] of this.coalescing) {
326
+ if (!pending.again) {
327
+ this.coalescing.delete(key);
328
+ continue;
329
+ }
330
+ pending.again = false;
331
+ this.publishTags(pending.tags);
332
+ }
333
+ if (this.coalescing.size > 0) {
334
+ this.coalesceTimer = unref(setTimeout(() => this.flush(), COALESCE_MS));
335
+ }
336
+ }
337
+ publishTags(tags) {
338
+ for (const tag of tags) {
339
+ const subscribers = this.members.get(tag);
340
+ if (subscribers === undefined)
341
+ continue;
342
+ const frame = JSON.stringify({ t: "changed", tag, spread: this.spread(subscribers) });
343
+ for (const publish of this.publishers)
344
+ publish(this.topic(tag), frame);
345
+ }
346
+ }
347
+ /**
348
+ * How long clients spread their reloads, from this process's subscriber count, rounded up to a few
349
+ * steps so the frame shows no more than its order of magnitude.
350
+ */
351
+ spread(subscribers) {
352
+ const { instances, reloadRate, spreadFloor } = this.options;
353
+ const raw = Math.max(spreadFloor, ((subscribers * instances) / reloadRate) * 1000);
354
+ if (raw <= 100)
355
+ return 0;
356
+ return SPREAD_STEPS.find((step) => step >= raw) ?? 5000;
357
+ }
358
+ join(ws, tag) {
359
+ ws.data.tags.add(tag);
360
+ this.members.set(tag, (this.members.get(tag) ?? 0) + 1);
361
+ this.memberships++;
362
+ ws.subscribe(this.topic(tag));
363
+ }
364
+ leave(ws, tag, open = true) {
365
+ ws.data.tags.delete(tag);
366
+ if (open)
367
+ ws.unsubscribe(this.topic(tag));
368
+ this.memberships--;
369
+ const count = (this.members.get(tag) ?? 1) - 1;
370
+ if (count === 0)
371
+ this.members.delete(tag);
372
+ else
373
+ this.members.set(tag, count);
374
+ }
375
+ /** Leave every topic before closing: nothing published after this reaches the socket. */
376
+ drop(ws, code, reason) {
377
+ this.forget(ws);
378
+ ws.close(code, reason);
379
+ }
380
+ forget(ws, open = true) {
381
+ if (!this.sockets.delete(ws))
382
+ return;
383
+ for (const tag of [...ws.data.tags])
384
+ this.leave(ws, tag, open);
385
+ this.options.store?.removed(ws);
386
+ if (this.sockets.size === 0)
387
+ this.stopSweep();
388
+ }
389
+ send(ws, frame) {
390
+ ws.send(frame);
391
+ if (bufferedOf(ws) > MAX_OUTBOUND_BYTES)
392
+ this.drop(ws, CLOSE_CAPACITY, "backpressure");
393
+ }
394
+ topic(tag) {
395
+ return topicOf(this.options.appId, tag);
396
+ }
397
+ /** Read on every open, never cached: a burst of opens must not all pass on one stale reading. */
398
+ overRss() {
399
+ const cap = this.options.maxRssBytes;
400
+ return cap !== undefined && rss() > cap;
401
+ }
402
+ startSweep() {
403
+ if (this.options.store !== undefined)
404
+ return;
405
+ this.sweepTimer ??= unref(setInterval(() => this.sweep(), SWEEP_MS));
406
+ }
407
+ stopSweep() {
408
+ if (this.sweepTimer === undefined)
409
+ return;
410
+ clearInterval(this.sweepTimer);
411
+ this.sweepTimer = undefined;
412
+ }
413
+ /**
414
+ * Drop the socket when its earliest grant has expired. A host whose sweep can run late (an alarm)
415
+ * asks before every frame it sends.
416
+ */
417
+ expired(ws, now) {
418
+ if (ws.data.exp > now)
419
+ return false;
420
+ this.drop(ws, CLOSE_BAD_GRANT, "expired");
421
+ return true;
422
+ }
423
+ /**
424
+ * Expired grants, silent peers, sockets with nothing to watch and slow readers. Returns the earliest
425
+ * deadline left: a grant expiry, the silence limit, or the end of {@link FIRST_WATCH_MS}; infinite
426
+ * with no socket.
427
+ */
428
+ sweep() {
429
+ const now = Date.now();
430
+ const store = this.options.store;
431
+ let next = Number.POSITIVE_INFINITY;
432
+ for (const ws of [...this.sockets]) {
433
+ const state = ws.data;
434
+ const seen = store === undefined ? state.lastSeen : Math.max(state.lastSeen, store.lastBeat(ws));
435
+ const unwatched = state.unwatchedSince;
436
+ if (state.exp <= now)
437
+ this.drop(ws, CLOSE_BAD_GRANT, "expired");
438
+ else if (now - seen > IDLE_MS)
439
+ this.drop(ws, CLOSE_PROTOCOL, "idle");
440
+ else if (unwatched !== undefined && now - unwatched >= FIRST_WATCH_MS) {
441
+ this.drop(ws, CLOSE_UNWATCHED, "unwatched");
442
+ }
443
+ else if (bufferedOf(ws) > MAX_OUTBOUND_BYTES)
444
+ this.drop(ws, CLOSE_CAPACITY, "backpressure");
445
+ else {
446
+ const due = Number.isFinite(state.exp) ? state.exp : seen + IDLE_MS;
447
+ next = Math.min(next, due, unwatched === undefined ? due : unwatched + FIRST_WATCH_MS);
448
+ }
449
+ }
450
+ return next;
451
+ }
452
+ }
453
+ /** The pub/sub topic of one tag. */
454
+ export const topicOf = (appId, tag) => `nifra:live:${appId}:${tag}`;
455
+ /** {@link Keyring.tag}, kept: a key's tag changes only with the secrets. Oldest entry out first. */
456
+ export function tagCache(ring, size = TAG_CACHE_SIZE) {
457
+ const cache = new Map();
458
+ return (key, secret) => {
459
+ const name = `${secret}:${key}`;
460
+ const cached = cache.get(name);
461
+ if (cached !== undefined)
462
+ return cached;
463
+ if (cache.size >= size) {
464
+ const oldest = cache.keys().next().value;
465
+ if (oldest !== undefined)
466
+ cache.delete(oldest);
467
+ }
468
+ const tag = ring.tag(key, secret);
469
+ cache.set(name, tag);
470
+ return tag;
471
+ };
472
+ }
473
+ function parseWatch(text) {
474
+ if (text.length > MAX_FRAME_BYTES || utf8Length(text) > MAX_FRAME_BYTES)
475
+ return undefined;
476
+ let value;
477
+ try {
478
+ value = JSON.parse(text);
479
+ }
480
+ catch {
481
+ return undefined;
482
+ }
483
+ if (!isRecord(value))
484
+ return undefined;
485
+ const { t, gen, grants } = value;
486
+ if (t !== "watch" || typeof gen !== "number" || !Number.isSafeInteger(gen) || gen < 0)
487
+ return undefined;
488
+ if (!Array.isArray(grants) || grants.length > MAX_WATCH_GRANTS)
489
+ return undefined;
490
+ const list = [];
491
+ for (const grant of grants) {
492
+ if (typeof grant !== "string" || grant.length > MAX_GRANT_CHARS)
493
+ return undefined;
494
+ list.push(grant);
495
+ }
496
+ return { gen, grants: list };
497
+ }
498
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
499
+ function utf8Length(text) {
500
+ let bytes = 0;
501
+ for (let i = 0; i < text.length; i++) {
502
+ const code = text.charCodeAt(i);
503
+ // A surrogate pair is 4 bytes, counted as 2 + 2.
504
+ bytes += code < 0x80 ? 1 : code < 0x800 ? 2 : code >= 0xd800 && code < 0xe000 ? 2 : 3;
505
+ }
506
+ return bytes;
507
+ }
508
+ function randomSid() {
509
+ let sid = "";
510
+ for (const byte of crypto.getRandomValues(new Uint8Array(16)))
511
+ sid += byte.toString(16).padStart(2, "0");
512
+ return sid;
513
+ }
514
+ /** Bytes queued for a socket: Bun's `getBufferedAmount()`, or a standard socket's `bufferedAmount`. */
515
+ function bufferedOf(ws) {
516
+ const raw = ws.raw;
517
+ if (typeof raw !== "object" || raw === null)
518
+ return 0;
519
+ if ("getBufferedAmount" in raw && typeof raw.getBufferedAmount === "function") {
520
+ const amount = raw.getBufferedAmount();
521
+ return typeof amount === "number" ? amount : 0;
522
+ }
523
+ if ("bufferedAmount" in raw && typeof raw.bufferedAmount === "number")
524
+ return raw.bufferedAmount;
525
+ return 0;
526
+ }
527
+ function rss() {
528
+ const usage = typeof process === "undefined" ? undefined : process.memoryUsage;
529
+ return typeof usage?.rss === "function" ? usage.rss() : 0;
530
+ }
531
+ export function unref(timer) {
532
+ if (typeof timer === "object" && timer !== null && "unref" in timer) {
533
+ const release = timer.unref;
534
+ if (typeof release === "function")
535
+ release.call(timer);
536
+ }
537
+ return timer;
538
+ }
539
+ //# sourceMappingURL=hub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hub.js","sourceRoot":"","sources":["../../src/live/hub.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * The live keyring: AES-256-GCM grants under hourly per-process subkeys, and the HMAC tags and subject
3
+ * tags derived from the same secrets. Everything here is WebCrypto, so it runs unchanged on Bun, Node,
4
+ * Deno and Workers.
5
+ *
6
+ * Token: `base64url(kid || nonce || AES-256-GCM(JSON claims))`, with the 16-byte `kid` authenticated as
7
+ * associated data. `kid = secretId (4) || processId (8) || hour (4)`.
8
+ */
9
+ export declare const MIN_SECRET_BYTES = 32;
10
+ export declare const MAX_SECRETS = 3;
11
+ /** A grant token longer than this is refused before decoding, and never issued. */
12
+ export declare const MAX_GRANT_CHARS = 10240;
13
+ export declare const MAX_KEYS_PER_FRAME = 64;
14
+ /** The cache-tag charset: a letter, then up to 127 of `A-Z a-z 0-9 . _ : / -`. */
15
+ export declare const KEY_PATTERN: RegExp;
16
+ export declare const SID_PATTERN: RegExp;
17
+ /**
18
+ * Seals under one subkey before it refuses more. Random 96-bit nonces stay safe for about 2^32
19
+ * encryptions per key; an hourly per-process subkey at 10,000 grants a second sees 3.6e7.
20
+ */
21
+ export declare const MAX_SEALS_PER_SUBKEY: number;
22
+ export interface GrantOwner {
23
+ /** The keys the owner's loader declared. */
24
+ readonly k: readonly string[];
25
+ /** The bus seq read before the owner's data was loaded. */
26
+ readonly w: number;
27
+ }
28
+ export interface GrantClaims {
29
+ readonly v: 1;
30
+ readonly sid: string;
31
+ readonly sub: string | null;
32
+ readonly path: string;
33
+ readonly frame: string;
34
+ readonly owners: Readonly<Record<string, GrantOwner>>;
35
+ /** The seq read at issuance: revocations above it refuse the grant. */
36
+ readonly s: number;
37
+ /** Renewals re-signed without loaders since the last load that ran them all. */
38
+ readonly r: number;
39
+ readonly iat: number;
40
+ readonly exp: number;
41
+ readonly aud: string;
42
+ }
43
+ export type GrantInput = Omit<GrantClaims, "v" | "iat" | "exp" | "aud">;
44
+ export interface OpenedGrant {
45
+ readonly claims: GrantClaims;
46
+ /** Index of the secret that decrypted it; that secret also derives the grant's tags. */
47
+ readonly secret: number;
48
+ }
49
+ export interface Keyring {
50
+ readonly appId: string;
51
+ /** Grant lifetime in seconds. */
52
+ readonly ttl: number;
53
+ readonly secretCount: number;
54
+ /** Each secret's public 32-bit id, newest first: a token names its secret by it. */
55
+ readonly secretIds: readonly number[];
56
+ /**
57
+ * Encrypt under the first secret; `undefined` when the token would exceed {@link MAX_GRANT_CHARS} or
58
+ * the hour's subkey reached {@link MAX_SEALS_PER_SUBKEY}.
59
+ */
60
+ seal(input: GrantInput, nowMs: number): Promise<string | undefined>;
61
+ /** Authenticate and decrypt, or `undefined` for anything not issued by this keyring and still valid. */
62
+ open(token: unknown, nowMs: number): Promise<OpenedGrant | undefined>;
63
+ /** The 128-bit wire tag of a key under one secret (default: the first). */
64
+ tag(key: string, secret?: number): Promise<string>;
65
+ /**
66
+ * The subject's stable opaque tag under each listed secret, newest first. Across a rotation the
67
+ * same viewer keeps one tag in common, whichever process served the load.
68
+ */
69
+ subjectTags(subject: string | null): Promise<string[]>;
70
+ }
71
+ /** A rotation list: newest first, never empty. */
72
+ export type LiveSecrets = readonly [string, ...string[]];
73
+ export interface KeyringOptions {
74
+ readonly secrets: LiveSecrets;
75
+ readonly appId: string;
76
+ readonly ttl: number;
77
+ /** Fixed per process; random when omitted. Tests pin it. */
78
+ readonly processId?: Uint8Array;
79
+ /** Tests lower it; see {@link MAX_SEALS_PER_SUBKEY}. */
80
+ readonly maxSealsPerSubkey?: number;
81
+ }
82
+ /** Synchronous boot checks: count and strength. Duplicate ids need derivation, see {@link createKeyring}. */
83
+ export declare function assertLiveSecrets(secrets: readonly unknown[]): asserts secrets is LiveSecrets;
84
+ /** Derive every key a secret needs. Rejects when two secrets share a `secretId`. */
85
+ export declare function createKeyring(options: KeyringOptions): Promise<Keyring>;
86
+ export declare const toBase64Url: (bytes: Uint8Array) => string;
87
+ //# sourceMappingURL=keyring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyring.d.ts","sourceRoot":"","sources":["../../src/live/keyring.ts"],"names":[],"mappings":"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"}