@nifrajs/web 5.5.1 → 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 +154 -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,507 @@
1
+ import { nextSeq } from "./live/bus.js";
2
+ import { applyEvent } from "./live/core.js";
3
+ import { History, keyHasher } from "./live/history.js";
4
+ import { CLOSE_CAPACITY, FIRST_WATCH_MS, LiveHub, topicOf, } from "./live/hub.js";
5
+ import { HUB_APPEND_PATH, HUB_AUTHORITY_PATH, HUB_CONFIG_HEADER, HUB_ORIGIN, hubConfigMatches, MAX_SUBJECT_CHARS, parseAppend, parseAuthorityRequest, } from "./live/hub-protocol.js";
6
+ import { assertLiveSecrets, createKeyring, KEY_PATTERN, SID_PATTERN, } from "./live/keyring.js";
7
+ import { readCapped } from "./live/read-capped.js";
8
+ import { REVOCATION_SKEW_MS, Revocations } from "./live/revocations.js";
9
+ import { appIdOf, DEFAULT_RELOAD_RATE, grantTtlOf, positive, spreadFloorOf, } from "./live/settings.js";
10
+ /** Per-socket limits the platform sets; the hub stays well under both (see the tests). */
11
+ export const MAX_ATTACHMENT_BYTES = 512;
12
+ export const MAX_SOCKET_RECORD_BYTES = 30_720;
13
+ /** The most sockets one hub was verified to hold, with every publish reaching them all well under 200 ms. */
14
+ export const DEFAULT_HUB_SOCKETS = 5_000;
15
+ /**
16
+ * About 440 bytes of heap each when no two sockets share a tag, the worst case; far less when they do.
17
+ * 150,000 of them stay near 66 MB, inside the 128 MB a Durable Object's isolate may use.
18
+ */
19
+ export const DEFAULT_HUB_MEMBERSHIPS = 150_000;
20
+ /** Alarms come no closer together than this: expiry is checked again before every frame anyway. */
21
+ export const ALARM_GAP_MS = 30_000;
22
+ const SEQ_KEY = "seq";
23
+ const APPLIED_KEY = "applied";
24
+ const FLOOR_KEY = "floor";
25
+ const REVOKED = "r:";
26
+ const SOCKET = "s:";
27
+ const DELETE_BATCH = 128;
28
+ const MAX_CALL_BYTES = 65_536;
29
+ const HEARTBEAT = "p";
30
+ /**
31
+ * The live hub's Durable Object class. Export it from the Worker's main module under the class name
32
+ * the binding names.
33
+ */
34
+ export function liveHub(options) {
35
+ return class extends LiveHubObject {
36
+ constructor(state, env) {
37
+ super(state, typeof options === "function" ? options(env) : options);
38
+ }
39
+ };
40
+ }
41
+ export class LiveHubObject {
42
+ state;
43
+ ready;
44
+ settings;
45
+ sockets = new WeakMap();
46
+ topics = new Map();
47
+ hash = keyHasher();
48
+ core;
49
+ /** The last seq handed out, stored before its event is applied. */
50
+ seq = 0;
51
+ /** The last seq applied: a load's watermark. */
52
+ applied = 0;
53
+ /** The stored revocation floor. */
54
+ floor = 0;
55
+ /** Appends run one at a time, so history is recorded in seq order. */
56
+ chain = Promise.resolve();
57
+ alarmAt;
58
+ mismatchLogged = false;
59
+ constructor(state, options) {
60
+ this.state = state;
61
+ this.settings = settingsOf(options);
62
+ this.ready = state.blockConcurrencyWhile(() => this.wake());
63
+ }
64
+ async fetch(req) {
65
+ const core = await this.ready;
66
+ if (req.method === "GET" && req.headers.get("upgrade")?.toLowerCase() === "websocket") {
67
+ return this.accept(core, req);
68
+ }
69
+ const url = new URL(req.url);
70
+ const call = url.pathname;
71
+ if (req.method !== "POST" ||
72
+ url.origin !== HUB_ORIGIN ||
73
+ (call !== HUB_APPEND_PATH && call !== HUB_AUTHORITY_PATH)) {
74
+ return Response.json({ error: "not_found" }, { status: 404 });
75
+ }
76
+ if (!hubConfigMatches(core.ring, req.headers.get(HUB_CONFIG_HEADER))) {
77
+ if (!this.mismatchLogged) {
78
+ this.mismatchLogged = true;
79
+ console.error("[nifra/web] live hub: an app called with a different `secret`, `appId` or `grantTtl` than this hub's; every call it makes is refused");
80
+ }
81
+ return Response.json({ error: "config_mismatch" }, { status: 409 });
82
+ }
83
+ const body = await bodyOf(req);
84
+ if (call === HUB_APPEND_PATH) {
85
+ const input = parseAppend(body);
86
+ if (input === undefined)
87
+ return Response.json({ error: "bad_request" }, { status: 400 });
88
+ return Response.json({ seq: await this.append(core, input) });
89
+ }
90
+ const ask = parseAuthorityRequest(body);
91
+ if (ask === undefined)
92
+ return Response.json({ error: "bad_request" }, { status: 400 });
93
+ return Response.json({
94
+ seq: this.applied,
95
+ ...core.revocations.snapshot(ask.subjects, ask.keys),
96
+ });
97
+ }
98
+ async webSocketMessage(raw, message) {
99
+ const core = await this.ready;
100
+ const socket = this.sockets.get(raw);
101
+ if (socket === undefined)
102
+ return;
103
+ const data = typeof message === "string" ? message : new Uint8Array(message);
104
+ const installing = core.hub.message(socket, data);
105
+ saveAttachment(socket);
106
+ if (installing === undefined)
107
+ return;
108
+ await installing;
109
+ // The watch moved its expiry and whether it holds a tag.
110
+ saveAttachment(socket);
111
+ await this.schedule(Math.min(socket.data.exp, (socket.data.unwatchedSince ?? Number.POSITIVE_INFINITY) + FIRST_WATCH_MS));
112
+ }
113
+ async webSocketClose(raw) {
114
+ await this.left(raw);
115
+ // Complete the closing handshake; a runtime that already replied throws here.
116
+ closeQuietly(raw, 1000, "");
117
+ }
118
+ async webSocketError(raw) {
119
+ await this.left(raw);
120
+ }
121
+ async alarm() {
122
+ const core = await this.ready;
123
+ this.alarmAt = undefined;
124
+ const sockets = core.hub.sweep();
125
+ const retention = await this.pruneRevocations(Date.now());
126
+ await this.schedule(Math.min(sockets, retention));
127
+ }
128
+ // --- HubStore: what the shared hub tells this host to keep --------------------------------------
129
+ saved(ws, socket) {
130
+ void this.state.storage.put({ [SOCKET + ws.data.sid]: socket }).catch(storageFailed);
131
+ }
132
+ removed(ws) {
133
+ void this.state.storage.delete([SOCKET + ws.data.sid]).catch(storageFailed);
134
+ }
135
+ lastBeat(ws) {
136
+ if (!(ws instanceof HubSocket))
137
+ return 0;
138
+ return this.state.getWebSocketAutoResponseTimestamp(ws.raw)?.getTime() ?? 0;
139
+ }
140
+ // --- internals ----------------------------------------------------------------------------------
141
+ /** Everything the hub knows comes back from storage and the runtime's sockets; history does not. */
142
+ async wake() {
143
+ const { state, settings } = this;
144
+ const storage = state.storage;
145
+ const ring = await createKeyring({
146
+ secrets: settings.secrets,
147
+ appId: settings.appId,
148
+ ttl: settings.ttl,
149
+ });
150
+ const head = await storage.get([SEQ_KEY, APPLIED_KEY, FLOOR_KEY]);
151
+ const seq = head.get(SEQ_KEY);
152
+ if (seqLike(seq)) {
153
+ this.seq = seq;
154
+ const floor = head.get(FLOOR_KEY);
155
+ this.floor = seqLike(floor) ? floor : seq;
156
+ }
157
+ else {
158
+ // A new hub, or one whose storage is gone: no grant issued before now is honored.
159
+ this.seq = nextSeq(0, Date.now());
160
+ this.floor = this.seq;
161
+ await storage.put({ [SEQ_KEY]: this.seq, [APPLIED_KEY]: this.seq, [FLOOR_KEY]: this.floor });
162
+ }
163
+ // An event stored but never applied may never have reached the sockets that watch it.
164
+ const lost = head.get(APPLIED_KEY) !== this.seq && seqLike(seq);
165
+ this.applied = this.seq;
166
+ const revocations = new Revocations(this.floor, settings.ttl * 1000);
167
+ for (const [name, value] of await storage.list({ prefix: REVOKED })) {
168
+ const entry = revocationOf(name, value);
169
+ if (entry !== undefined && entry.seq >= this.floor) {
170
+ revocations.apply({ type: "revoke", sub: entry.sub, key: entry.key, seq: entry.seq }, entry.at);
171
+ }
172
+ }
173
+ const history = new History(this.seq);
174
+ const hub = new LiveHub(ring, history, revocations, {
175
+ appId: settings.appId,
176
+ trusted: settings.trusted,
177
+ maxSockets: settings.maxSockets,
178
+ maxMemberships: settings.maxMemberships,
179
+ maxRssBytes: undefined,
180
+ reloadRate: settings.reloadRate,
181
+ instances: 1,
182
+ spreadFloor: settings.spreadFloor,
183
+ hash: this.hash,
184
+ store: this,
185
+ }, new Set([(topic, frame) => this.deliver(topic, frame)]));
186
+ const core = { ring, history, revocations, hub };
187
+ this.core = core;
188
+ const records = await storage.list({ prefix: SOCKET });
189
+ const kept = new Set();
190
+ let resynced = 0;
191
+ // Each record is its own copy of every tag string: one copy per tag serves every socket.
192
+ const interned = new Map();
193
+ for (const raw of state.getWebSockets()) {
194
+ const data = socketStateOf(raw.deserializeAttachment());
195
+ const stored = data === undefined ? undefined : storedOf(records.get(SOCKET + data.sid), interned);
196
+ // A socket that watched but lost its membership would miss every change: it reconnects.
197
+ if (lost || data === undefined || (data.received >= 0 && stored === undefined)) {
198
+ closeQuietly(raw, CLOSE_CAPACITY, "resync");
199
+ resynced++;
200
+ continue;
201
+ }
202
+ const socket = new HubSocket(raw, data, this.topics);
203
+ this.sockets.set(raw, socket);
204
+ hub.restore(socket, stored);
205
+ kept.add(SOCKET + data.sid);
206
+ }
207
+ const orphans = [...records.keys()].filter((name) => !kept.has(name));
208
+ for (let at = 0; at < orphans.length; at += DELETE_BATCH) {
209
+ await storage.delete(orphans.slice(at, at + DELETE_BATCH));
210
+ }
211
+ if (lost)
212
+ await storage.put({ [APPLIED_KEY]: this.seq });
213
+ hub.burst(resynced);
214
+ const Pair = Reflect.get(globalThis, "WebSocketRequestResponsePair");
215
+ if (typeof Pair === "function") {
216
+ state.setWebSocketAutoResponse(Reflect.construct(Pair, [HEARTBEAT, HEARTBEAT]));
217
+ }
218
+ this.alarmAt = (await storage.getAlarm()) ?? undefined;
219
+ return core;
220
+ }
221
+ async accept(core, req) {
222
+ const data = core.hub.upgrade(req);
223
+ if (data instanceof Response)
224
+ return data;
225
+ const pair = socketPair();
226
+ if (pair === undefined)
227
+ return Response.json({ error: "unavailable" }, { status: 503 });
228
+ const [client, server] = pair;
229
+ this.state.acceptWebSocket(server);
230
+ const socket = new HubSocket(server, data, this.topics);
231
+ this.sockets.set(server, socket);
232
+ saveAttachment(socket);
233
+ core.hub.open(socket);
234
+ await this.schedule(Date.now() + FIRST_WATCH_MS);
235
+ const init = { status: 101, webSocket: client };
236
+ return new Response(null, init);
237
+ }
238
+ append(core, input) {
239
+ const run = this.chain.then(() => this.applyNext(core, input));
240
+ this.chain = run.catch(() => { });
241
+ return run;
242
+ }
243
+ async applyNext(core, input) {
244
+ const storage = this.state.storage;
245
+ const now = Date.now();
246
+ const seq = nextSeq(this.seq, now);
247
+ this.seq = seq;
248
+ const kept = input.type === "revoke" && (input.sub !== null || input.key !== null);
249
+ const writes = { [SEQ_KEY]: seq };
250
+ if (kept)
251
+ writes[revokedKey(seq)] = { sub: input.sub, key: input.key, at: now };
252
+ // Stored before any socket hears of it: a revocation is never applied and then forgotten.
253
+ await storage.put(writes);
254
+ try {
255
+ await applyEvent(core, { ...input, seq }, this.hash);
256
+ }
257
+ catch (err) {
258
+ console.error("[nifra/web] live hub: an event could not be applied; closing live sockets", err);
259
+ core.history.reset(seq);
260
+ core.revocations.raise(seq);
261
+ core.hub.closeAll(CLOSE_CAPACITY, "resync");
262
+ }
263
+ this.applied = seq;
264
+ const after = { [APPLIED_KEY]: seq };
265
+ const raised = core.revocations.floor > this.floor;
266
+ if (raised) {
267
+ this.floor = core.revocations.floor;
268
+ after[FLOOR_KEY] = this.floor;
269
+ }
270
+ await storage.put(after);
271
+ if (kept)
272
+ await this.schedule(now + this.settings.ttl * 1000 + REVOCATION_SKEW_MS);
273
+ else if (raised)
274
+ await this.schedule(now);
275
+ return seq;
276
+ }
277
+ /** One frame to every socket on the topic whose grants are still valid. */
278
+ deliver(topic, frame) {
279
+ const members = this.topics.get(topic);
280
+ const hub = this.core?.hub;
281
+ if (members === undefined || hub === undefined)
282
+ return;
283
+ const now = Date.now();
284
+ for (const socket of members)
285
+ if (!hub.expired(socket, now))
286
+ socket.send(frame);
287
+ }
288
+ async left(raw) {
289
+ const core = await this.ready;
290
+ const socket = this.sockets.get(raw);
291
+ if (socket === undefined)
292
+ return;
293
+ this.sockets.delete(raw);
294
+ // The hub leaves a closed socket's topics without unsubscribing it; this registry is the host's.
295
+ for (const tag of socket.data.tags)
296
+ socket.unsubscribe(topicOf(this.settings.appId, tag));
297
+ core.hub.close(socket);
298
+ }
299
+ /** Drop revocations every grant they could refuse has outlived. Returns the next one's deadline. */
300
+ async pruneRevocations(now) {
301
+ const storage = this.state.storage;
302
+ const ttlMs = this.settings.ttl * 1000;
303
+ const horizon = (now - ttlMs - REVOCATION_SKEW_MS) * 1000;
304
+ const end = revokedKey(Math.max(this.floor, Math.floor(horizon)));
305
+ for (;;) {
306
+ const stale = [...(await storage.list({ prefix: REVOKED, end, limit: DELETE_BATCH })).keys()];
307
+ if (stale.length === 0)
308
+ break;
309
+ await storage.delete(stale);
310
+ }
311
+ for (const [name, value] of await storage.list({ prefix: REVOKED, limit: 1 })) {
312
+ const entry = revocationOf(name, value);
313
+ if (entry !== undefined)
314
+ return entry.at + ttlMs + REVOCATION_SKEW_MS;
315
+ }
316
+ return Number.POSITIVE_INFINITY;
317
+ }
318
+ async schedule(deadline) {
319
+ if (!Number.isFinite(deadline))
320
+ return;
321
+ const at = Math.max(deadline, Date.now() + ALARM_GAP_MS);
322
+ if (this.alarmAt !== undefined && this.alarmAt <= at)
323
+ return;
324
+ this.alarmAt = at;
325
+ await this.state.storage.setAlarm(at);
326
+ }
327
+ }
328
+ /** A hibernatable socket under the hub's own topic registry. */
329
+ class HubSocket {
330
+ raw;
331
+ data;
332
+ topics;
333
+ constructor(raw, data, topics) {
334
+ this.raw = raw;
335
+ this.data = data;
336
+ this.topics = topics;
337
+ }
338
+ get readyState() {
339
+ return this.raw.readyState;
340
+ }
341
+ send(data) {
342
+ try {
343
+ this.raw.send(data);
344
+ }
345
+ catch {
346
+ // Closed meanwhile: its close event settles the rest.
347
+ }
348
+ }
349
+ close(code, reason) {
350
+ closeQuietly(this.raw, code, reason);
351
+ }
352
+ subscribe(topic) {
353
+ let members = this.topics.get(topic);
354
+ if (members === undefined) {
355
+ members = new Set();
356
+ this.topics.set(topic, members);
357
+ }
358
+ members.add(this);
359
+ }
360
+ unsubscribe(topic) {
361
+ const members = this.topics.get(topic);
362
+ if (members === undefined || !members.delete(this))
363
+ return;
364
+ if (members.size === 0)
365
+ this.topics.delete(topic);
366
+ }
367
+ }
368
+ function settingsOf(options) {
369
+ const secret = options.secret;
370
+ const secrets = typeof secret === "string" ? [secret] : (secret ?? []);
371
+ assertLiveSecrets(secrets);
372
+ return {
373
+ secrets,
374
+ appId: appIdOf(options.appId),
375
+ ttl: grantTtlOf(options.grantTtl),
376
+ trusted: new Set(options.trustedOrigins ?? []),
377
+ maxSockets: positive(options.maxSockets, DEFAULT_HUB_SOCKETS, "maxSockets"),
378
+ maxMemberships: positive(options.maxMemberships, DEFAULT_HUB_MEMBERSHIPS, "maxMemberships"),
379
+ reloadRate: positive(options.reloadRate, DEFAULT_RELOAD_RATE, "reloadRate"),
380
+ spreadFloor: spreadFloorOf(options.spreadFloor),
381
+ };
382
+ }
383
+ /**
384
+ * Sid, gen, rate counters and since when it held no tag (-1 while it holds one): what a socket needs
385
+ * back after a wake that its record does not hold.
386
+ */
387
+ function saveAttachment(socket) {
388
+ const s = socket.data;
389
+ try {
390
+ socket.raw.serializeAttachment([
391
+ s.sid,
392
+ s.received,
393
+ s.window,
394
+ s.frames,
395
+ s.watches,
396
+ s.lastSeen,
397
+ s.unwatchedSince ?? -1,
398
+ ]);
399
+ }
400
+ catch {
401
+ // Closed meanwhile: nothing comes back for it.
402
+ }
403
+ }
404
+ function socketStateOf(value) {
405
+ if (!Array.isArray(value) || value.length !== 7)
406
+ return undefined;
407
+ const [sid, received, window, frames, watches, lastSeen, unwatchedSince] = value;
408
+ if (typeof sid !== "string" || !SID_PATTERN.test(sid))
409
+ return undefined;
410
+ if (!integer(received) || received < -1)
411
+ return undefined;
412
+ if (!integer(unwatchedSince) || unwatchedSince < -1)
413
+ return undefined;
414
+ if (!seqLike(window) || !seqLike(frames) || !seqLike(watches) || !seqLike(lastSeen)) {
415
+ return undefined;
416
+ }
417
+ return {
418
+ sid,
419
+ sub: undefined,
420
+ received,
421
+ tags: new Set(),
422
+ exp: Number.POSITIVE_INFINITY,
423
+ unwatchedSince: unwatchedSince === -1 ? undefined : unwatchedSince,
424
+ window,
425
+ frames,
426
+ watches,
427
+ lastSeen,
428
+ };
429
+ }
430
+ function storedOf(value, interned) {
431
+ if (!isRecord(value))
432
+ return undefined;
433
+ const { sub, exp, tags } = value;
434
+ if (sub !== null && !subjectLike(sub))
435
+ return undefined;
436
+ if (typeof exp !== "number" || Number.isNaN(exp) || !Array.isArray(tags))
437
+ return undefined;
438
+ const list = [];
439
+ for (const tag of tags) {
440
+ if (typeof tag !== "string")
441
+ return undefined;
442
+ const known = interned.get(tag);
443
+ if (known === undefined)
444
+ interned.set(tag, tag);
445
+ list.push(known ?? tag);
446
+ }
447
+ return { sub, exp, tags: list };
448
+ }
449
+ function revocationOf(name, value) {
450
+ const seq = Number(name.slice(REVOKED.length));
451
+ if (!seqLike(seq) || !isRecord(value))
452
+ return undefined;
453
+ const { sub, key, at } = value;
454
+ if (sub !== null && !subjectLike(sub))
455
+ return undefined;
456
+ if (key !== null && (typeof key !== "string" || !KEY_PATTERN.test(key)))
457
+ return undefined;
458
+ if (!seqLike(at))
459
+ return undefined;
460
+ return { seq, sub, key, at };
461
+ }
462
+ /** Fixed width, so storage order is seq order. */
463
+ const revokedKey = (seq) => REVOKED + String(seq).padStart(16, "0");
464
+ function socketPair() {
465
+ const Pair = Reflect.get(globalThis, "WebSocketPair");
466
+ if (typeof Pair !== "function")
467
+ return undefined;
468
+ const pair = Reflect.construct(Pair, []);
469
+ if (!isRecord(pair))
470
+ return undefined;
471
+ const server = pair[1];
472
+ return isHubWebSocket(server) ? [pair[0], server] : undefined;
473
+ }
474
+ function isHubWebSocket(value) {
475
+ return (isRecord(value) &&
476
+ typeof value.send === "function" &&
477
+ typeof value.close === "function" &&
478
+ typeof value.serializeAttachment === "function" &&
479
+ typeof value.deserializeAttachment === "function");
480
+ }
481
+ function closeQuietly(raw, code, reason) {
482
+ try {
483
+ raw.close(code, reason);
484
+ }
485
+ catch {
486
+ // Already closed.
487
+ }
488
+ }
489
+ async function bodyOf(req) {
490
+ const text = await readCapped(req, MAX_CALL_BYTES);
491
+ if (typeof text === "number")
492
+ return undefined;
493
+ try {
494
+ return JSON.parse(text);
495
+ }
496
+ catch {
497
+ return undefined;
498
+ }
499
+ }
500
+ function storageFailed(err) {
501
+ console.error("[nifra/web] live hub: a storage write failed", err);
502
+ }
503
+ const integer = (value) => typeof value === "number" && Number.isSafeInteger(value);
504
+ const seqLike = (value) => integer(value) && value >= 0;
505
+ const subjectLike = (value) => typeof value === "string" && value.length <= MAX_SUBJECT_CHARS;
506
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
507
+ //# sourceMappingURL=live-hub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-hub.js","sourceRoot":"","sources":["../src/live-hub.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * A live bus on Redis Streams, for an app that several processes serve. Every append runs one Lua
3
+ * script: a hybrid logical clock in microseconds (never below the server's clock, always above the
4
+ * last seq), then `XADD` with that seq as the entry id, trimmed to about `maxLength` entries. Each
5
+ * process reads the stream from its last id with a blocking `XREAD` on a connection of its own.
6
+ *
7
+ * import { RedisClient } from "bun"
8
+ * import { redisLiveBus } from "@nifrajs/web/live-redis"
9
+ *
10
+ * const shared = new RedisClient(process.env.REDIS_URL)
11
+ * const reader = new RedisClient(process.env.REDIS_URL)
12
+ * const bus = redisLiveBus({
13
+ * send: (command, args) => shared.send(command, [...args]),
14
+ * read: (command, args) => reader.send(command, [...args]),
15
+ * })
16
+ * const runtime = live({ secret, subject, bus, instances: 4 })
17
+ *
18
+ * Every entry also carries a running count, so a reader that fell behind a trim - or lost the
19
+ * connection - reports the gap instead of skipping what it missed.
20
+ */
21
+ import type { LiveBus } from "./live/bus.js";
22
+ /** Send one Redis command and resolve with its reply, as any client's raw-command call does. */
23
+ export type RedisCommand = (command: string, args: readonly string[]) => Promise<unknown>;
24
+ export interface RedisLiveBusOptions {
25
+ /** Appends and reads the clock; any connection. */
26
+ readonly send: RedisCommand;
27
+ /** Reads the stream. Its own connection: a blocking `XREAD` holds it. */
28
+ readonly read: RedisCommand;
29
+ /** The stream; the clock lives at `<key>:clock`. Default `nifra:live`. */
30
+ readonly key?: string;
31
+ /** Entries kept, roughly. Default 100,000, the most the live history keeps. */
32
+ readonly maxLength?: number;
33
+ /** How long one `XREAD` blocks, in ms. Default 5,000. */
34
+ readonly blockMs?: number;
35
+ /**
36
+ * How long one `XREAD` may take before it counts as a failed read, in ms: a connection that stopped
37
+ * answering would otherwise leave this process's sockets missing every change. Default `blockMs`
38
+ * plus 5,000.
39
+ */
40
+ readonly readTimeoutMs?: number;
41
+ }
42
+ /**
43
+ * KEYS[1] the stream, KEYS[2] the clock hash; ARGV[1] the event JSON, ARGV[2] the trim length.
44
+ * Lua numbers are doubles: a microsecond clock stays exact below 2^53 (the year 2255).
45
+ */
46
+ export declare const APPEND_SCRIPT = "local t = redis.call('TIME')\nlocal now = tonumber(t[1]) * 1000000 + tonumber(t[2])\nlocal last = tonumber(redis.call('HGET', KEYS[2], 'seq') or '0')\nlocal seq = math.max(last + 1, now)\nlocal id = string.format('%.0f', seq)\nlocal n = redis.call('HINCRBY', KEYS[2], 'n', 1)\nredis.call('HSET', KEYS[2], 'seq', id)\nredis.call('XADD', KEYS[1], 'MAXLEN', '~', ARGV[2], id .. '-0', 'n', n, 'e', ARGV[1])\nreturn id";
47
+ export declare function redisLiveBus(options: RedisLiveBusOptions): LiveBus;
48
+ //# sourceMappingURL=live-redis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-redis.d.ts","sourceRoot":"","sources":["../src/live-redis.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,eAAe,CAAA;AAE3E,gGAAgG;AAChG,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;AAEzF,MAAM,WAAW,mBAAmB;IAClC,mDAAmD;IACnD,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;IAC3B,yEAAyE;IACzE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;IAC3B,0EAA0E;IAC1E,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,+EAA+E;IAC/E,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,yDAAyD;IACzD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB;;;;OAIG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAChC;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,kaAQhB,CAAA;AAKV,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CA+GlE"}