@graphrefly/ts 0.0.0 → 0.0.2

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 (405) hide show
  1. package/README.md +135 -0
  2. package/dist/actions-types-CSC3NMDl.d.ts +657 -0
  3. package/dist/actions-types-wl9Mgkmr.d.cts +657 -0
  4. package/dist/adapters/index.cjs +5219 -2974
  5. package/dist/adapters/index.cjs.map +1 -1
  6. package/dist/adapters/index.d.cts +204 -192
  7. package/dist/adapters/index.d.ts +204 -192
  8. package/dist/adapters/index.js +3685 -1833
  9. package/dist/adapters/index.js.map +1 -1
  10. package/dist/adapters/nestjs/microservices.cjs +841 -0
  11. package/dist/adapters/nestjs/microservices.cjs.map +1 -0
  12. package/dist/adapters/nestjs/microservices.d.cts +45 -0
  13. package/dist/adapters/nestjs/microservices.d.ts +45 -0
  14. package/dist/adapters/nestjs/microservices.js +206 -0
  15. package/dist/adapters/nestjs/microservices.js.map +1 -0
  16. package/dist/adapters/nestjs/native.cjs +1391 -0
  17. package/dist/adapters/nestjs/native.cjs.map +1 -0
  18. package/dist/adapters/nestjs/native.d.cts +111 -0
  19. package/dist/adapters/nestjs/native.d.ts +111 -0
  20. package/dist/adapters/nestjs/native.js +577 -0
  21. package/dist/adapters/nestjs/native.js.map +1 -0
  22. package/dist/adapters/nestjs/websockets.cjs +924 -0
  23. package/dist/adapters/nestjs/websockets.cjs.map +1 -0
  24. package/dist/adapters/nestjs/websockets.d.cts +47 -0
  25. package/dist/adapters/nestjs/websockets.d.ts +47 -0
  26. package/dist/adapters/nestjs/websockets.js +286 -0
  27. package/dist/adapters/nestjs/websockets.js.map +1 -0
  28. package/dist/adapters/nestjs.cjs +1085 -0
  29. package/dist/adapters/nestjs.cjs.map +1 -0
  30. package/dist/adapters/nestjs.d.cts +385 -0
  31. package/dist/adapters/nestjs.d.ts +385 -0
  32. package/dist/adapters/nestjs.js +112 -0
  33. package/dist/adapters/nestjs.js.map +1 -0
  34. package/dist/adapters/observe-storage.d.cts +4 -4
  35. package/dist/adapters/observe-storage.d.ts +4 -4
  36. package/dist/adapters/observe-storage.js +5 -4
  37. package/dist/adapters/observe-storage.js.map +1 -1
  38. package/dist/adapters/react.cjs +166 -0
  39. package/dist/adapters/react.cjs.map +1 -0
  40. package/dist/adapters/react.d.cts +31 -0
  41. package/dist/adapters/react.d.ts +31 -0
  42. package/dist/adapters/react.js +51 -0
  43. package/dist/adapters/react.js.map +1 -0
  44. package/dist/adapters/solid.cjs +157 -0
  45. package/dist/adapters/solid.cjs.map +1 -0
  46. package/dist/adapters/solid.d.cts +26 -0
  47. package/dist/adapters/solid.d.ts +26 -0
  48. package/dist/adapters/solid.js +48 -0
  49. package/dist/adapters/solid.js.map +1 -0
  50. package/dist/adapters/svelte.cjs +148 -0
  51. package/dist/adapters/svelte.cjs.map +1 -0
  52. package/dist/adapters/svelte.d.cts +31 -0
  53. package/dist/adapters/svelte.d.ts +31 -0
  54. package/dist/adapters/svelte.js +46 -0
  55. package/dist/adapters/svelte.js.map +1 -0
  56. package/dist/adapters/vue.cjs +155 -0
  57. package/dist/adapters/vue.cjs.map +1 -0
  58. package/dist/adapters/vue.d.cts +26 -0
  59. package/dist/adapters/vue.d.ts +26 -0
  60. package/dist/adapters/vue.js +46 -0
  61. package/dist/adapters/vue.js.map +1 -0
  62. package/dist/agent-runtime-types-core-CaXfKNtY.d.cts +406 -0
  63. package/dist/agent-runtime-types-core-hU299uIC.d.ts +406 -0
  64. package/dist/agent-runtime-types-tool-BEpSINol.d.ts +695 -0
  65. package/dist/agent-runtime-types-tool-DninPEzk.d.cts +695 -0
  66. package/dist/agentic-memory-retention-BmGX368S.d.ts +14 -0
  67. package/dist/agentic-memory-retention-Ih1qhX9Z.d.cts +14 -0
  68. package/dist/agentic-memory-types-CVSUS6XR.d.ts +473 -0
  69. package/dist/agentic-memory-types-FnnYlVUs.d.cts +473 -0
  70. package/dist/capability-admission-BW2CziT6.d.ts +102 -0
  71. package/dist/capability-admission-lwSecxXs.d.cts +102 -0
  72. package/dist/chunk-2KUAG2GZ.js +9693 -0
  73. package/dist/chunk-2KUAG2GZ.js.map +1 -0
  74. package/dist/chunk-2NJP6GO4.js +1320 -0
  75. package/dist/chunk-2NJP6GO4.js.map +1 -0
  76. package/dist/{chunk-GDL26N2T.js → chunk-3KN7NJDR.js} +2 -2
  77. package/dist/{chunk-COHO25CZ.js → chunk-4NWSNI4K.js} +2232 -1672
  78. package/dist/chunk-4NWSNI4K.js.map +1 -0
  79. package/dist/{chunk-Z2ANQ6JW.js → chunk-4Q77MMJY.js} +2 -2
  80. package/dist/chunk-6E76H4OU.js +132 -0
  81. package/dist/chunk-6E76H4OU.js.map +1 -0
  82. package/dist/chunk-7GOTIIQ7.js +819 -0
  83. package/dist/chunk-7GOTIIQ7.js.map +1 -0
  84. package/dist/{chunk-D6BG7U6A.js → chunk-7HZRJMN6.js} +3 -3
  85. package/dist/{chunk-SCRFRCGR.js → chunk-BSQGE5PS.js} +1 -1
  86. package/dist/{chunk-PKVBHGBM.js → chunk-CJIFGJQG.js} +7 -7
  87. package/dist/{chunk-G4M3NHRJ.js → chunk-CX6B6PO2.js} +93 -10
  88. package/dist/chunk-CX6B6PO2.js.map +1 -0
  89. package/dist/chunk-DGUM43GV.js +11 -0
  90. package/dist/chunk-DGUM43GV.js.map +1 -0
  91. package/dist/{chunk-JIMUDQN3.js → chunk-E4QCH32M.js} +449 -447
  92. package/dist/chunk-E4QCH32M.js.map +1 -0
  93. package/dist/{chunk-RIIOUTGM.js → chunk-ECURQ3HD.js} +19 -129
  94. package/dist/chunk-ECURQ3HD.js.map +1 -0
  95. package/dist/{chunk-2ILL7HQI.js → chunk-EOKT4QFF.js} +134 -128
  96. package/dist/chunk-EOKT4QFF.js.map +1 -0
  97. package/dist/{chunk-K3FXTC3I.js → chunk-HJACH5PU.js} +3 -3
  98. package/dist/{chunk-GTPCOEOZ.js → chunk-IDMLXLLG.js} +3 -3
  99. package/dist/{chunk-DKP56CSW.js → chunk-JKAYLDQV.js} +2 -2
  100. package/dist/{chunk-4VLAQHZI.js → chunk-K7FB3JTD.js} +17 -1
  101. package/dist/chunk-K7FB3JTD.js.map +1 -0
  102. package/dist/chunk-L6LDXRWE.js +219 -0
  103. package/dist/chunk-L6LDXRWE.js.map +1 -0
  104. package/dist/chunk-M7J6Z4IJ.js +1930 -0
  105. package/dist/chunk-M7J6Z4IJ.js.map +1 -0
  106. package/dist/chunk-MQEQMS7B.js +1009 -0
  107. package/dist/chunk-MQEQMS7B.js.map +1 -0
  108. package/dist/chunk-MTELVIYR.js +1421 -0
  109. package/dist/chunk-MTELVIYR.js.map +1 -0
  110. package/dist/chunk-PVC7WDKI.js +885 -0
  111. package/dist/chunk-PVC7WDKI.js.map +1 -0
  112. package/dist/chunk-RAHNUYA5.js +368 -0
  113. package/dist/chunk-RAHNUYA5.js.map +1 -0
  114. package/dist/{chunk-DK554R7P.js → chunk-S6HXABGL.js} +2 -1
  115. package/dist/chunk-S6HXABGL.js.map +1 -0
  116. package/dist/{chunk-I3IHOHCJ.js → chunk-SHZDP2MQ.js} +1181 -1001
  117. package/dist/chunk-SHZDP2MQ.js.map +1 -0
  118. package/dist/{chunk-Y3ZLRGHC.js → chunk-SIDJO2T4.js} +16 -16
  119. package/dist/chunk-STXRMPW4.js +4131 -0
  120. package/dist/chunk-STXRMPW4.js.map +1 -0
  121. package/dist/{chunk-JR4IKCR2.js → chunk-TPND5MJS.js} +5 -5
  122. package/dist/chunk-TQPCAIQI.js +612 -0
  123. package/dist/chunk-TQPCAIQI.js.map +1 -0
  124. package/dist/chunk-UT3MHJCW.js +49 -0
  125. package/dist/chunk-UT3MHJCW.js.map +1 -0
  126. package/dist/{chunk-TEW47IVR.js → chunk-VPEFSDME.js} +2 -2
  127. package/dist/{chunk-SWTLEQL6.js → chunk-WQIA3GFB.js} +2 -2
  128. package/dist/chunk-WQIA3GFB.js.map +1 -0
  129. package/dist/{chunk-DJC4CHLQ.js → chunk-YDWBXXQZ.js} +5 -5
  130. package/dist/{chunk-6PHB5CJS.js → chunk-ZLFRB6FI.js} +2 -2
  131. package/dist/composition/index.cjs +1256 -1059
  132. package/dist/composition/index.cjs.map +1 -1
  133. package/dist/composition/index.d.cts +4 -4
  134. package/dist/composition/index.d.ts +4 -4
  135. package/dist/composition/index.js +7 -6
  136. package/dist/core/index.cjs +1218 -1021
  137. package/dist/core/index.cjs.map +1 -1
  138. package/dist/core/index.d.cts +2 -2
  139. package/dist/core/index.d.ts +2 -2
  140. package/dist/core/index.js +5 -4
  141. package/dist/cqrs/index.cjs.map +1 -1
  142. package/dist/cqrs/index.d.cts +4 -4
  143. package/dist/cqrs/index.d.ts +4 -4
  144. package/dist/cqrs/index.js +3 -2
  145. package/dist/cqrs/index.js.map +1 -1
  146. package/dist/cqrs/messaging.cjs +312 -0
  147. package/dist/cqrs/messaging.cjs.map +1 -0
  148. package/dist/cqrs/messaging.d.cts +57 -0
  149. package/dist/cqrs/messaging.d.ts +57 -0
  150. package/dist/cqrs/messaging.js +274 -0
  151. package/dist/cqrs/messaging.js.map +1 -0
  152. package/dist/cqrs/work-queue.cjs +329 -0
  153. package/dist/cqrs/work-queue.cjs.map +1 -0
  154. package/dist/cqrs/work-queue.d.cts +90 -0
  155. package/dist/cqrs/work-queue.d.ts +90 -0
  156. package/dist/cqrs/work-queue.js +292 -0
  157. package/dist/cqrs/work-queue.js.map +1 -0
  158. package/dist/data/index.cjs +19 -0
  159. package/dist/data/index.cjs.map +1 -0
  160. package/dist/data/index.d.cts +36 -0
  161. package/dist/data/index.d.ts +36 -0
  162. package/dist/data/index.js +1 -0
  163. package/dist/data/index.js.map +1 -0
  164. package/dist/data-structures/index.cjs +1252 -1052
  165. package/dist/data-structures/index.cjs.map +1 -1
  166. package/dist/data-structures/index.d.cts +9 -8
  167. package/dist/data-structures/index.d.ts +9 -8
  168. package/dist/data-structures/index.js +9 -7
  169. package/dist/{describe-BZb7AS2y.d.ts → describe-B_A5fbXH.d.ts} +1 -1
  170. package/dist/{describe-Ciu8SUnN.d.cts → describe-CQRrkv-Q.d.cts} +1 -1
  171. package/dist/executors/tool-provider-adapters.cjs +3091 -0
  172. package/dist/executors/tool-provider-adapters.cjs.map +1 -0
  173. package/dist/executors/tool-provider-adapters.d.cts +174 -0
  174. package/dist/executors/tool-provider-adapters.d.ts +174 -0
  175. package/dist/executors/tool-provider-adapters.js +1336 -0
  176. package/dist/executors/tool-provider-adapters.js.map +1 -0
  177. package/dist/executors/tool-provider-runtime.cjs +5178 -0
  178. package/dist/executors/tool-provider-runtime.cjs.map +1 -0
  179. package/dist/executors/tool-provider-runtime.d.cts +17 -0
  180. package/dist/executors/tool-provider-runtime.d.ts +17 -0
  181. package/dist/executors/tool-provider-runtime.js +15 -0
  182. package/dist/executors/tool-provider-runtime.js.map +1 -0
  183. package/dist/executors/tool-provider.cjs +6392 -0
  184. package/dist/executors/tool-provider.cjs.map +1 -0
  185. package/dist/executors/tool-provider.d.cts +60 -0
  186. package/dist/executors/tool-provider.d.ts +60 -0
  187. package/dist/executors/tool-provider.js +89 -0
  188. package/dist/executors/tool-provider.js.map +1 -0
  189. package/dist/executors/work-queue.cjs +342 -0
  190. package/dist/executors/work-queue.cjs.map +1 -0
  191. package/dist/executors/work-queue.d.cts +90 -0
  192. package/dist/executors/work-queue.d.ts +90 -0
  193. package/dist/executors/work-queue.js +306 -0
  194. package/dist/executors/work-queue.js.map +1 -0
  195. package/dist/graph/index.cjs +1536 -1324
  196. package/dist/graph/index.cjs.map +1 -1
  197. package/dist/graph/index.d.cts +10 -9
  198. package/dist/graph/index.d.ts +10 -9
  199. package/dist/graph/index.js +22 -20
  200. package/dist/{graph-s23RbbFO.d.cts → graph-CWK3HLPB.d.cts} +134 -132
  201. package/dist/{graph-DfdF9zy4.d.ts → graph-ho5sotHP.d.ts} +134 -132
  202. package/dist/{index-SnzZu3x7.d.ts → index-CQWcE0Dw.d.ts} +18 -4
  203. package/dist/{index-CAEmLCYF.d.cts → index-DHA1i67c.d.cts} +18 -4
  204. package/dist/index.cjs +3331 -3020
  205. package/dist/index.cjs.map +1 -1
  206. package/dist/index.d.cts +14 -10
  207. package/dist/index.d.ts +14 -10
  208. package/dist/index.js +114 -108
  209. package/dist/inspection/boundary.cjs +98 -0
  210. package/dist/inspection/boundary.cjs.map +1 -0
  211. package/dist/inspection/boundary.d.cts +61 -0
  212. package/dist/inspection/boundary.d.ts +61 -0
  213. package/dist/inspection/boundary.js +75 -0
  214. package/dist/inspection/boundary.js.map +1 -0
  215. package/dist/measurements-C0mAvWU1.d.cts +164 -0
  216. package/dist/measurements-OMpCeBwh.d.ts +164 -0
  217. package/dist/{messages-BZqrGGm1.d.ts → messages-CAzUPPJM.d.cts} +10 -5
  218. package/dist/{messages-BZqrGGm1.d.cts → messages-CAzUPPJM.d.ts} +10 -5
  219. package/dist/messaging/index.cjs +756 -619
  220. package/dist/messaging/index.cjs.map +1 -1
  221. package/dist/messaging/index.d.cts +17 -226
  222. package/dist/messaging/index.d.ts +17 -226
  223. package/dist/messaging/index.js +19 -749
  224. package/dist/messaging/index.js.map +1 -1
  225. package/dist/operators/index.cjs +1256 -1059
  226. package/dist/operators/index.cjs.map +1 -1
  227. package/dist/operators/index.d.cts +6 -6
  228. package/dist/operators/index.d.ts +6 -6
  229. package/dist/operators/index.js +9 -8
  230. package/dist/orchestration/index.cjs +8664 -2617
  231. package/dist/orchestration/index.cjs.map +1 -1
  232. package/dist/orchestration/index.d.cts +171 -221
  233. package/dist/orchestration/index.d.ts +171 -221
  234. package/dist/orchestration/index.js +74 -982
  235. package/dist/orchestration/index.js.map +1 -1
  236. package/dist/orchestration/messaging.cjs +314 -0
  237. package/dist/orchestration/messaging.cjs.map +1 -0
  238. package/dist/orchestration/messaging.d.cts +56 -0
  239. package/dist/orchestration/messaging.d.ts +56 -0
  240. package/dist/orchestration/messaging.js +276 -0
  241. package/dist/orchestration/messaging.js.map +1 -0
  242. package/dist/orchestration/work-queue.cjs +1500 -0
  243. package/dist/orchestration/work-queue.cjs.map +1 -0
  244. package/dist/orchestration/work-queue.d.cts +196 -0
  245. package/dist/orchestration/work-queue.d.ts +196 -0
  246. package/dist/orchestration/work-queue.js +1289 -0
  247. package/dist/orchestration/work-queue.js.map +1 -0
  248. package/dist/patterns/event-flow.cjs +433 -0
  249. package/dist/patterns/event-flow.cjs.map +1 -0
  250. package/dist/patterns/event-flow.d.cts +115 -0
  251. package/dist/patterns/event-flow.d.ts +115 -0
  252. package/dist/patterns/event-flow.js +14 -0
  253. package/dist/patterns/event-flow.js.map +1 -0
  254. package/dist/patterns/index.cjs +748 -355
  255. package/dist/patterns/index.cjs.map +1 -1
  256. package/dist/patterns/index.d.cts +9 -5
  257. package/dist/patterns/index.d.ts +9 -5
  258. package/dist/patterns/index.js +13 -4
  259. package/dist/process-types-C9uMYz3i.d.ts +200 -0
  260. package/dist/process-types-h3uRlzDc.d.cts +200 -0
  261. package/dist/{reactive-collection-BxBqtIOE.d.cts → reactive-collection-B9R0Bl1P.d.cts} +11 -41
  262. package/dist/{reactive-collection-Cb1II1Fi.d.ts → reactive-collection-BXFrH0U2.d.ts} +11 -41
  263. package/dist/{reactive-collection-storage-D-KmjE0J.d.cts → reactive-collection-storage-BLGv8Xp8.d.cts} +5 -5
  264. package/dist/{reactive-collection-storage-BNiEc-Gd.d.ts → reactive-collection-storage-a4zD3665.d.ts} +5 -5
  265. package/dist/{reactive-map-BcB4KsQR.d.ts → reactive-map-C_8sOfdS.d.cts} +7 -6
  266. package/dist/{reactive-map-D-g3dv8I.d.cts → reactive-map-jle5dnok.d.ts} +7 -6
  267. package/dist/render/index.d.cts +3 -3
  268. package/dist/render/index.d.ts +3 -3
  269. package/dist/render/index.js +1 -0
  270. package/dist/scheduled-readiness-5rwQlyjV.d.ts +91 -0
  271. package/dist/scheduled-readiness-DpRY8jI0.d.cts +91 -0
  272. package/dist/semantic-memory-graph-C2ZUwIlq.d.ts +30 -0
  273. package/dist/semantic-memory-graph-DlZBD_Eu.d.cts +30 -0
  274. package/dist/{semantic-memory-graph-BYoIlP35.d.cts → semantic-memory-graph-types-BvzdqmkY.d.cts} +2 -28
  275. package/dist/{semantic-memory-graph-CxyXLms3.d.ts → semantic-memory-graph-types-Ci-OtahO.d.ts} +2 -28
  276. package/dist/solutions/index.cjs +6788 -2128
  277. package/dist/solutions/index.cjs.map +1 -1
  278. package/dist/solutions/index.d.cts +15 -519
  279. package/dist/solutions/index.d.ts +15 -519
  280. package/dist/solutions/index.js +91 -7
  281. package/dist/solutions/reactive-layout/browser/index.cjs +457 -0
  282. package/dist/solutions/reactive-layout/browser/index.cjs.map +1 -0
  283. package/dist/solutions/reactive-layout/browser/index.d.cts +44 -0
  284. package/dist/solutions/reactive-layout/browser/index.d.ts +44 -0
  285. package/dist/solutions/reactive-layout/browser/index.js +69 -0
  286. package/dist/solutions/reactive-layout/browser/index.js.map +1 -0
  287. package/dist/solutions/reactive-layout/index.cjs +4494 -0
  288. package/dist/solutions/reactive-layout/index.cjs.map +1 -0
  289. package/dist/solutions/reactive-layout/index.d.cts +37 -0
  290. package/dist/solutions/reactive-layout/index.d.ts +37 -0
  291. package/dist/solutions/reactive-layout/index.js +146 -0
  292. package/dist/solutions/reactive-layout/index.js.map +1 -0
  293. package/dist/solutions/reactive-layout/node-canvas/index.cjs +555 -0
  294. package/dist/solutions/reactive-layout/node-canvas/index.cjs.map +1 -0
  295. package/dist/solutions/reactive-layout/node-canvas/index.d.cts +54 -0
  296. package/dist/solutions/reactive-layout/node-canvas/index.d.ts +54 -0
  297. package/dist/solutions/reactive-layout/node-canvas/index.js +131 -0
  298. package/dist/solutions/reactive-layout/node-canvas/index.js.map +1 -0
  299. package/dist/solutions/reactive-layout/react-native/index.cjs +504 -0
  300. package/dist/solutions/reactive-layout/react-native/index.cjs.map +1 -0
  301. package/dist/solutions/reactive-layout/react-native/index.d.cts +51 -0
  302. package/dist/solutions/reactive-layout/react-native/index.d.ts +51 -0
  303. package/dist/solutions/reactive-layout/react-native/index.js +77 -0
  304. package/dist/solutions/reactive-layout/react-native/index.js.map +1 -0
  305. package/dist/solutions/reactive-layout/skia/index.cjs +557 -0
  306. package/dist/solutions/reactive-layout/skia/index.cjs.map +1 -0
  307. package/dist/solutions/reactive-layout/skia/index.d.cts +64 -0
  308. package/dist/solutions/reactive-layout/skia/index.d.ts +64 -0
  309. package/dist/solutions/reactive-layout/skia/index.js +70 -0
  310. package/dist/solutions/reactive-layout/skia/index.js.map +1 -0
  311. package/dist/solutions/work-item/actions.cjs +2345 -0
  312. package/dist/solutions/work-item/actions.cjs.map +1 -0
  313. package/dist/solutions/work-item/actions.d.cts +40 -0
  314. package/dist/solutions/work-item/actions.d.ts +40 -0
  315. package/dist/solutions/work-item/actions.js +2078 -0
  316. package/dist/solutions/work-item/actions.js.map +1 -0
  317. package/dist/solutions/work-item/scheduling.cjs +9797 -0
  318. package/dist/solutions/work-item/scheduling.cjs.map +1 -0
  319. package/dist/solutions/work-item/scheduling.d.cts +1868 -0
  320. package/dist/solutions/work-item/scheduling.d.ts +1868 -0
  321. package/dist/solutions/work-item/scheduling.js +146 -0
  322. package/dist/solutions/work-item/scheduling.js.map +1 -0
  323. package/dist/solutions/work-item/work-queue.cjs +306 -0
  324. package/dist/solutions/work-item/work-queue.cjs.map +1 -0
  325. package/dist/solutions/work-item/work-queue.d.cts +71 -0
  326. package/dist/solutions/work-item/work-queue.d.ts +71 -0
  327. package/dist/solutions/work-item/work-queue.js +270 -0
  328. package/dist/solutions/work-item/work-queue.js.map +1 -0
  329. package/dist/sources/browser.cjs +1399 -1052
  330. package/dist/sources/browser.cjs.map +1 -1
  331. package/dist/sources/browser.d.cts +33 -6
  332. package/dist/sources/browser.d.ts +33 -6
  333. package/dist/sources/browser.js +73 -6
  334. package/dist/sources/browser.js.map +1 -1
  335. package/dist/sources/index.cjs +1345 -1065
  336. package/dist/sources/index.cjs.map +1 -1
  337. package/dist/sources/index.d.cts +5 -5
  338. package/dist/sources/index.d.ts +5 -5
  339. package/dist/sources/index.js +7 -6
  340. package/dist/sources/node.cjs.map +1 -1
  341. package/dist/sources/node.d.cts +4 -4
  342. package/dist/sources/node.d.ts +4 -4
  343. package/dist/sources/node.js +2 -1
  344. package/dist/sources/node.js.map +1 -1
  345. package/dist/storage/browser.cjs +16 -0
  346. package/dist/storage/browser.cjs.map +1 -1
  347. package/dist/storage/browser.js +4 -3
  348. package/dist/storage/browser.js.map +1 -1
  349. package/dist/storage/index.cjs +16 -0
  350. package/dist/storage/index.cjs.map +1 -1
  351. package/dist/storage/index.d.cts +6 -5
  352. package/dist/storage/index.d.ts +6 -5
  353. package/dist/storage/index.js +10 -9
  354. package/dist/storage/node.cjs +16 -0
  355. package/dist/storage/node.cjs.map +1 -1
  356. package/dist/storage/node.js +4 -3
  357. package/dist/storage/node.js.map +1 -1
  358. package/dist/store-BmtEs9mG.d.ts +123 -0
  359. package/dist/store-PAAsYvML.d.cts +123 -0
  360. package/dist/testing/index.cjs +1 -0
  361. package/dist/testing/index.cjs.map +1 -1
  362. package/dist/testing/index.d.cts +1 -1
  363. package/dist/testing/index.d.ts +1 -1
  364. package/dist/testing/index.js +3 -2
  365. package/dist/types-BRNKoFHj.d.ts +357 -0
  366. package/dist/{types-h12mNYbq.d.ts → types-BS6CyR-x.d.cts} +49 -130
  367. package/dist/types-BWK2ay3e.d.cts +457 -0
  368. package/dist/types-BXKSAoE1.d.cts +357 -0
  369. package/dist/types-BaPpZItj.d.ts +457 -0
  370. package/dist/types-BhveCMg5.d.cts +274 -0
  371. package/dist/{types-bNMSWKqF.d.cts → types-C9NOgNJw.d.ts} +49 -130
  372. package/dist/types-CTsQ8Ww4.d.ts +274 -0
  373. package/dist/types-DL_05n2M.d.ts +34 -0
  374. package/dist/types-XDoqxYO9.d.cts +34 -0
  375. package/dist/work-item-runtime-types-BqtWnSCS.d.ts +138 -0
  376. package/dist/work-item-runtime-types-CHO03AKh.d.cts +138 -0
  377. package/dist/work-queue/index.cjs +1136 -0
  378. package/dist/work-queue/index.cjs.map +1 -0
  379. package/dist/work-queue/index.d.cts +21 -0
  380. package/dist/work-queue/index.d.ts +21 -0
  381. package/dist/work-queue/index.js +1082 -0
  382. package/dist/work-queue/index.js.map +1 -0
  383. package/package.json +603 -249
  384. package/dist/chunk-2ILL7HQI.js.map +0 -1
  385. package/dist/chunk-4VLAQHZI.js.map +0 -1
  386. package/dist/chunk-COHO25CZ.js.map +0 -1
  387. package/dist/chunk-DK554R7P.js.map +0 -1
  388. package/dist/chunk-G4M3NHRJ.js.map +0 -1
  389. package/dist/chunk-I3IHOHCJ.js.map +0 -1
  390. package/dist/chunk-JIMUDQN3.js.map +0 -1
  391. package/dist/chunk-RIIOUTGM.js.map +0 -1
  392. package/dist/chunk-SWTLEQL6.js.map +0 -1
  393. /package/dist/{chunk-GDL26N2T.js.map → chunk-3KN7NJDR.js.map} +0 -0
  394. /package/dist/{chunk-Z2ANQ6JW.js.map → chunk-4Q77MMJY.js.map} +0 -0
  395. /package/dist/{chunk-D6BG7U6A.js.map → chunk-7HZRJMN6.js.map} +0 -0
  396. /package/dist/{chunk-SCRFRCGR.js.map → chunk-BSQGE5PS.js.map} +0 -0
  397. /package/dist/{chunk-PKVBHGBM.js.map → chunk-CJIFGJQG.js.map} +0 -0
  398. /package/dist/{chunk-K3FXTC3I.js.map → chunk-HJACH5PU.js.map} +0 -0
  399. /package/dist/{chunk-GTPCOEOZ.js.map → chunk-IDMLXLLG.js.map} +0 -0
  400. /package/dist/{chunk-DKP56CSW.js.map → chunk-JKAYLDQV.js.map} +0 -0
  401. /package/dist/{chunk-Y3ZLRGHC.js.map → chunk-SIDJO2T4.js.map} +0 -0
  402. /package/dist/{chunk-JR4IKCR2.js.map → chunk-TPND5MJS.js.map} +0 -0
  403. /package/dist/{chunk-TEW47IVR.js.map → chunk-VPEFSDME.js.map} +0 -0
  404. /package/dist/{chunk-DJC4CHLQ.js.map → chunk-YDWBXXQZ.js.map} +0 -0
  405. /package/dist/{chunk-6PHB5CJS.js.map → chunk-ZLFRB6FI.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/patterns/event-flow.ts","../../src/protocol/messages.ts","../../src/ctx/types.ts","../../src/messaging/utils.ts","../../src/messaging/event-message.ts"],"sourcesContent":["/**\n * Event-flow projector helpers (D326/D329/D331).\n *\n * eventFlow consumes declared graph sources that emit EventMessage or\n * MessageEnvelope<EventMessage>. It records projection facts and high-water over\n * source coordinates; it does not own topics, subscriptions, cursors, retention,\n * ack/seek/close, queues, workers, or dead-letter policy.\n */\n\nimport { depBatch } from \"../ctx/types.js\";\nimport type { DataIssue } from \"../data/index.js\";\nimport type { Graph } from \"../graph/graph.js\";\nimport type { EventMessage, MessageEnvelope } from \"../messaging/index.js\";\nimport { eventMessageIssue } from \"../messaging/index.js\";\nimport type { Node } from \"../node/node.js\";\n\nexport interface EventFlowSource<T = unknown> {\n\treadonly source: string;\n\treadonly node: Node<EventMessage<T> | MessageEnvelope<EventMessage<T>> | unknown>;\n}\n\nexport type EventFlowSourceInput<T = unknown> =\n\t| Node<EventMessage<T> | MessageEnvelope<EventMessage<T>> | unknown>\n\t| EventFlowSource<T>;\n\nexport interface EventFlowSourceRef {\n\treadonly source: string;\n\treadonly topic?: string;\n\treadonly seq?: number;\n\treadonly messageId?: string;\n\treadonly idempotencyKey?: string;\n}\n\nexport interface EventFlowRecord<T = unknown> {\n\treadonly recordSeq: number;\n\treadonly flowId: string;\n\treadonly event: EventMessage<T>;\n\treadonly source: EventFlowSourceRef;\n\treadonly observedAtMs: number;\n\treadonly correlationId?: string;\n\treadonly causationId?: string;\n}\n\nexport interface EventFlowStatus {\n\treadonly kind: \"recorded\" | \"rejected\" | \"projection-ready\" | \"projection-stale\";\n\treadonly flowId: string;\n\treadonly recordSeq?: number;\n\treadonly eventId?: string;\n\treadonly eventType?: string;\n\treadonly source?: EventFlowSourceRef;\n\treadonly issueCode?: string;\n\treadonly timestampMs: number;\n}\n\nexport interface EventFlowAuditRecord {\n\treadonly seq: number;\n\treadonly flowId: string;\n\treadonly outcome: \"recorded\" | \"rejected\";\n\treadonly eventId?: string;\n\treadonly eventType?: string;\n\treadonly issueCode?: string;\n\treadonly source?: EventFlowSourceRef;\n\treadonly highWater: EventFlowHighWater;\n\treadonly timestampMs: number;\n}\n\nexport interface EventFlowSourceHighWater {\n\treadonly source: string;\n\treadonly topic?: string;\n\treadonly seq?: number;\n\treadonly messageId?: string;\n\treadonly recordSeq: number;\n}\n\nexport interface EventFlowHighWater {\n\treadonly flowId: string;\n\treadonly recordSeq: number;\n\treadonly auditSeq: number;\n\treadonly sources: readonly EventFlowSourceHighWater[];\n}\n\nexport interface EventFlowOptions<T = unknown> {\n\treadonly flowId?: string;\n\treadonly name?: string;\n\treadonly sources: readonly EventFlowSourceInput<T>[];\n\treadonly now?: () => number;\n}\n\nexport interface EventFlowBundle<T = unknown> {\n\treadonly records: Node<EventFlowRecord<T>>;\n\treadonly status: Node<EventFlowStatus>;\n\treadonly issues: Node<DataIssue>;\n\treadonly audit: Node<EventFlowAuditRecord>;\n\treadonly highWater: Node<EventFlowHighWater>;\n}\n\nexport interface EventFlowProjectionFrame<TState> {\n\treadonly state: TState;\n\treadonly highWater: EventFlowHighWater;\n}\n\nexport interface EventFlowProjectionStatus {\n\treadonly kind: \"projected\" | \"rejected\";\n\treadonly projectionId: string;\n\treadonly recordSeq?: number;\n\treadonly issueCode?: string;\n\treadonly timestampMs: number;\n}\n\nexport interface EventFlowProjectionOptions<TState, TPayload = unknown> {\n\treadonly projectionId?: string;\n\treadonly name?: string;\n\treadonly initial: TState;\n\treadonly reduce: (state: TState, record: EventFlowRecord<TPayload>) => TState;\n\treadonly now?: () => number;\n}\n\nexport interface EventFlowProjectionBundle<TState> {\n\treadonly snapshot: Node<TState>;\n\treadonly frames: Node<EventFlowProjectionFrame<TState>>;\n\treadonly status: Node<EventFlowProjectionStatus>;\n\treadonly issues: Node<DataIssue>;\n\treadonly highWater: Node<EventFlowHighWater>;\n}\n\ntype EventFlowRuntimeFact<T = unknown> =\n\t| { readonly kind: \"record\"; readonly record: EventFlowRecord<T> }\n\t| { readonly kind: \"status\"; readonly status: EventFlowStatus }\n\t| { readonly kind: \"issue\"; readonly issue: DataIssue }\n\t| { readonly kind: \"audit\"; readonly audit: EventFlowAuditRecord }\n\t| { readonly kind: \"high-water\"; readonly highWater: EventFlowHighWater };\n\ninterface EventFlowRuntimeState {\n\trecordSeq: number;\n\tauditSeq: number;\n\thighWater: Map<string, EventFlowSourceHighWater>;\n}\n\nexport function eventFlow<T = unknown>(\n\tgraph: Graph,\n\topts: EventFlowOptions<T>,\n): EventFlowBundle<T> {\n\tconst name = opts.name ?? opts.flowId ?? \"eventFlow\";\n\tconst flowId = opts.flowId ?? name;\n\tconst now = opts.now ?? Date.now;\n\tconst sources = normalizeSources(opts.sources);\n\tconst runtime = graph.node<EventFlowRuntimeFact<T>>(\n\t\tsources.map((source) => source.node),\n\t\t(ctx) => {\n\t\t\tconst state =\n\t\t\t\tctx.state.get<EventFlowRuntimeState>() ??\n\t\t\t\t({\n\t\t\t\t\trecordSeq: 0,\n\t\t\t\t\tauditSeq: 0,\n\t\t\t\t\thighWater: new Map(),\n\t\t\t\t} satisfies EventFlowRuntimeState);\n\t\t\tctx.state.persist(true);\n\t\t\tfor (let i = 0; i < sources.length; i++) {\n\t\t\t\tconst source = sources[i];\n\t\t\t\tfor (const raw of depBatch(ctx, i) ?? []) {\n\t\t\t\t\treduceEventSource(raw, source.source, flowId, now(), state, (fact) =>\n\t\t\t\t\t\tctx.down([[\"DATA\", fact as EventFlowRuntimeFact<T>]]),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tctx.state.set(state);\n\t\t},\n\t\t{\n\t\t\tname: `${name}/runtime`,\n\t\t\tfactory: \"eventFlowRuntime\",\n\t\t\tmeta: { flowId, sources: sources.map((source) => source.source) },\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\treturn {\n\t\trecords: runtimeProjection(graph, runtime, \"record\", `${name}/records`, \"eventFlowRecords\"),\n\t\tstatus: runtimeProjection(graph, runtime, \"status\", `${name}/status`, \"eventFlowStatus\"),\n\t\tissues: runtimeProjection(graph, runtime, \"issue\", `${name}/issues`, \"eventFlowIssues\"),\n\t\taudit: runtimeProjection(graph, runtime, \"audit\", `${name}/audit`, \"eventFlowAudit\"),\n\t\thighWater: runtimeProjection(\n\t\t\tgraph,\n\t\t\truntime,\n\t\t\t\"high-water\",\n\t\t\t`${name}/highWater`,\n\t\t\t\"eventFlowHighWater\",\n\t\t),\n\t};\n}\n\nexport function eventFlowProjection<TState, TPayload = unknown>(\n\tgraph: Graph,\n\tflowOrRecords: EventFlowBundle<TPayload> | Node<EventFlowRecord<TPayload>>,\n\topts: EventFlowProjectionOptions<TState, TPayload>,\n): EventFlowProjectionBundle<TState> {\n\tconst records = isEventFlowBundle(flowOrRecords) ? flowOrRecords.records : flowOrRecords;\n\tconst name = opts.name ?? opts.projectionId ?? \"eventFlowProjection\";\n\tconst projectionId = opts.projectionId ?? name;\n\tconst now = opts.now ?? Date.now;\n\tconst runtime = graph.node<\n\t\t| { readonly kind: \"frame\"; readonly frame: EventFlowProjectionFrame<TState> }\n\t\t| { readonly kind: \"status\"; readonly status: EventFlowProjectionStatus }\n\t\t| { readonly kind: \"issue\"; readonly issue: DataIssue }\n\t\t| { readonly kind: \"high-water\"; readonly highWater: EventFlowHighWater }\n\t>(\n\t\t[records],\n\t\t(ctx) => {\n\t\t\tconst state = ctx.state.get<{\n\t\t\t\tvalue: TState;\n\t\t\t\thighWater: EventFlowHighWater;\n\t\t\t\tsourceHighWater: Map<string, EventFlowSourceHighWater>;\n\t\t\t}>() ?? {\n\t\t\t\tvalue: opts.initial,\n\t\t\t\thighWater: emptyHighWater(projectionId),\n\t\t\t\tsourceHighWater: new Map(),\n\t\t\t};\n\t\t\tctx.state.persist(true);\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst record = raw as EventFlowRecord<TPayload>;\n\t\t\t\ttry {\n\t\t\t\t\tstate.value = opts.reduce(state.value, record);\n\t\t\t\t\tstate.highWater = projectionHighWater(projectionId, record, state.sourceHighWater);\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\"DATA\", { kind: \"frame\", frame: { state: state.value, highWater: state.highWater } }],\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkind: \"status\",\n\t\t\t\t\t\t\t\tstatus: {\n\t\t\t\t\t\t\t\t\tkind: \"projected\",\n\t\t\t\t\t\t\t\t\tprojectionId,\n\t\t\t\t\t\t\t\t\trecordSeq: record.recordSeq,\n\t\t\t\t\t\t\t\t\ttimestampMs: now(),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\t[\"DATA\", { kind: \"high-water\", highWater: state.highWater }],\n\t\t\t\t\t]);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst issue = dataIssue(\n\t\t\t\t\t\t\"event-flow-projection-threw\",\n\t\t\t\t\t\terror instanceof Error ? error.message : \"eventFlowProjection reducer threw\",\n\t\t\t\t\t\t{ projectionId, record },\n\t\t\t\t\t);\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\"DATA\", { kind: \"issue\", issue }],\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkind: \"status\",\n\t\t\t\t\t\t\t\tstatus: {\n\t\t\t\t\t\t\t\t\tkind: \"rejected\",\n\t\t\t\t\t\t\t\t\tprojectionId,\n\t\t\t\t\t\t\t\t\trecordSeq: record.recordSeq,\n\t\t\t\t\t\t\t\t\tissueCode: issue.code,\n\t\t\t\t\t\t\t\t\ttimestampMs: now(),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tctx.state.set(state);\n\t\t},\n\t\t{\n\t\t\tname: `${name}/runtime`,\n\t\t\tfactory: \"eventFlowProjectionRuntime\",\n\t\t\tmeta: { projectionId },\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\treturn {\n\t\tframes: projectionRuntime(\n\t\t\tgraph,\n\t\t\truntime,\n\t\t\t\"frame\",\n\t\t\t`${name}/frames`,\n\t\t\t\"eventFlowProjectionFrames\",\n\t\t),\n\t\tsnapshot: projectionRuntime(\n\t\t\tgraph,\n\t\t\truntime,\n\t\t\t\"frame\",\n\t\t\t`${name}/snapshot`,\n\t\t\t\"eventFlowProjectionSnapshot\",\n\t\t\t(fact) => (fact as { readonly frame: EventFlowProjectionFrame<TState> }).frame.state,\n\t\t),\n\t\tstatus: projectionRuntime(\n\t\t\tgraph,\n\t\t\truntime,\n\t\t\t\"status\",\n\t\t\t`${name}/status`,\n\t\t\t\"eventFlowProjectionStatus\",\n\t\t),\n\t\tissues: projectionRuntime(\n\t\t\tgraph,\n\t\t\truntime,\n\t\t\t\"issue\",\n\t\t\t`${name}/issues`,\n\t\t\t\"eventFlowProjectionIssues\",\n\t\t),\n\t\thighWater: projectionRuntime(\n\t\t\tgraph,\n\t\t\truntime,\n\t\t\t\"high-water\",\n\t\t\t`${name}/highWater`,\n\t\t\t\"eventFlowProjectionHighWater\",\n\t\t),\n\t};\n}\n\nfunction reduceEventSource<T>(\n\traw: unknown,\n\tsource: string,\n\tflowId: string,\n\ttimestampMs: number,\n\tstate: EventFlowRuntimeState,\n\temit: (fact: EventFlowRuntimeFact<T>) => void,\n): void {\n\tconst normalized = normalizeInput(raw, source);\n\tif (normalized.issue !== undefined) {\n\t\tconst status: EventFlowStatus = {\n\t\t\tkind: \"rejected\",\n\t\t\tflowId,\n\t\t\tsource: normalized.source,\n\t\t\tissueCode: normalized.issue.code,\n\t\t\ttimestampMs,\n\t\t};\n\t\tconst audit = auditRecord(flowId, state, \"rejected\", timestampMs, {\n\t\t\tsource: normalized.source,\n\t\t\tissueCode: normalized.issue.code,\n\t\t});\n\t\temit({ kind: \"issue\", issue: normalized.issue });\n\t\temit({ kind: \"status\", status });\n\t\temit({ kind: \"audit\", audit });\n\t\temit({ kind: \"high-water\", highWater: highWaterSnapshot(flowId, state) });\n\t\treturn;\n\t}\n\n\tconst recordSeq = ++state.recordSeq;\n\tconst record: EventFlowRecord<T> = {\n\t\trecordSeq,\n\t\tflowId,\n\t\tevent: normalized.event as EventMessage<T>,\n\t\tsource: normalized.source,\n\t\tobservedAtMs: timestampMs,\n\t\t...(normalized.event.correlationId === undefined\n\t\t\t? {}\n\t\t\t: { correlationId: normalized.event.correlationId }),\n\t\t...(normalized.event.causationId === undefined\n\t\t\t? {}\n\t\t\t: { causationId: normalized.event.causationId }),\n\t};\n\tstate.highWater.set(sourceKey(normalized.source), {\n\t\tsource: normalized.source.source,\n\t\t...(normalized.source.topic === undefined ? {} : { topic: normalized.source.topic }),\n\t\t...(normalized.source.seq === undefined ? {} : { seq: normalized.source.seq }),\n\t\tmessageId: normalized.event.id,\n\t\trecordSeq,\n\t});\n\tconst audit = auditRecord(flowId, state, \"recorded\", timestampMs, {\n\t\tsource: normalized.source,\n\t\teventId: normalized.event.id,\n\t\teventType: normalized.event.type,\n\t});\n\tconst highWater = highWaterSnapshot(flowId, state);\n\tconst status: EventFlowStatus = {\n\t\tkind: \"recorded\",\n\t\tflowId,\n\t\trecordSeq,\n\t\teventId: normalized.event.id,\n\t\teventType: normalized.event.type,\n\t\tsource: normalized.source,\n\t\ttimestampMs,\n\t};\n\temit({ kind: \"record\", record });\n\temit({ kind: \"status\", status });\n\temit({ kind: \"audit\", audit });\n\temit({ kind: \"high-water\", highWater });\n}\n\nfunction normalizeInput(\n\traw: unknown,\n\tsource: string,\n):\n\t| {\n\t\t\treadonly event: EventMessage;\n\t\t\treadonly source: EventFlowSourceRef;\n\t\t\treadonly issue?: undefined;\n\t }\n\t| { readonly source: EventFlowSourceRef; readonly issue: DataIssue } {\n\tconst envelope = messageEnvelopeOf(raw);\n\tconst value = envelope?.payload ?? raw;\n\tconst sourceRef: EventFlowSourceRef =\n\t\tenvelope === undefined\n\t\t\t? { source, ...(eventIdOf(value) === undefined ? {} : { messageId: eventIdOf(value) }) }\n\t\t\t: {\n\t\t\t\t\tsource,\n\t\t\t\t\ttopic: envelope.topic,\n\t\t\t\t\tseq: envelope.seq,\n\t\t\t\t\tmessageId: envelope.payload.id,\n\t\t\t\t\t...(envelope.idempotencyKey === undefined\n\t\t\t\t\t\t? {}\n\t\t\t\t\t\t: { idempotencyKey: envelope.idempotencyKey }),\n\t\t\t\t};\n\tconst issue = eventMessageIssue(value);\n\tif (issue !== undefined) {\n\t\treturn {\n\t\t\tsource: sourceRef,\n\t\t\tissue: dataIssue(issue.code, issue.message, { source: sourceRef, value }),\n\t\t};\n\t}\n\treturn { event: value as EventMessage, source: sourceRef };\n}\n\nfunction messageEnvelopeOf(value: unknown): MessageEnvelope<EventMessage> | undefined {\n\tif (!isRecord(value)) return undefined;\n\tif (\n\t\ttypeof value.topic !== \"string\" ||\n\t\t!Number.isInteger(value.seq) ||\n\t\ttypeof value.timestampMs !== \"number\" ||\n\t\t!(\"payload\" in value)\n\t) {\n\t\treturn undefined;\n\t}\n\tconst payloadIssue = eventMessageIssue(value.payload);\n\treturn payloadIssue === undefined\n\t\t? (value as unknown as MessageEnvelope<EventMessage>)\n\t\t: undefined;\n}\n\nfunction normalizeSources<T>(\n\tsources: readonly EventFlowSourceInput<T>[],\n): readonly EventFlowSource[] {\n\tif (sources.length === 0) throw new Error(\"eventFlow: sources must be non-empty\");\n\treturn sources.map((source, index) => {\n\t\tif (isRecord(source) && \"node\" in source) {\n\t\t\tif (typeof source.source !== \"string\" || source.source.length === 0) {\n\t\t\t\tthrow new Error(\"eventFlow: source name must be non-empty\");\n\t\t\t}\n\t\t\treturn source as EventFlowSource;\n\t\t}\n\t\treturn { source: `source-${index}`, node: source as EventFlowSource[\"node\"] };\n\t});\n}\n\nfunction runtimeProjection<TOut, T>(\n\tgraph: Graph,\n\truntime: Node<EventFlowRuntimeFact<T>>,\n\tkind: EventFlowRuntimeFact<T>[\"kind\"],\n\tname: string,\n\tfactory: string,\n): Node<TOut> {\n\treturn graph.node<TOut>(\n\t\t[runtime],\n\t\t(ctx) => {\n\t\t\tfor (const fact of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst typed = fact as EventFlowRuntimeFact<T>;\n\t\t\t\tif (typed.kind === kind) ctx.down([[\"DATA\", valueOfRuntimeFact(typed) as TOut]]);\n\t\t\t}\n\t\t},\n\t\t{ name, factory, completeWhenDepsComplete: false, errorWhenDepsError: false },\n\t);\n}\n\nfunction projectionRuntime<TOut, TFact extends { readonly kind: string }>(\n\tgraph: Graph,\n\truntime: Node<TFact>,\n\tkind: TFact[\"kind\"],\n\tname: string,\n\tfactory: string,\n\tmap: (fact: Extract<TFact, { readonly kind: typeof kind }>) => TOut = valueOfRuntimeFact as never,\n): Node<TOut> {\n\treturn graph.node<TOut>(\n\t\t[runtime],\n\t\t(ctx) => {\n\t\t\tfor (const fact of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst typed = fact as TFact;\n\t\t\t\tif (typed.kind === kind) ctx.down([[\"DATA\", map(typed as never)]]);\n\t\t\t}\n\t\t},\n\t\t{ name, factory, completeWhenDepsComplete: false, errorWhenDepsError: false },\n\t);\n}\n\nfunction valueOfRuntimeFact(fact: { readonly kind: string }): unknown {\n\tif (\"record\" in fact) return fact.record;\n\tif (\"status\" in fact) return fact.status;\n\tif (\"issue\" in fact) return fact.issue;\n\tif (\"audit\" in fact) return fact.audit;\n\tif (\"highWater\" in fact) return fact.highWater;\n\tif (\"frame\" in fact) return fact.frame;\n\treturn undefined;\n}\n\nfunction auditRecord(\n\tflowId: string,\n\tstate: EventFlowRuntimeState,\n\toutcome: \"recorded\" | \"rejected\",\n\ttimestampMs: number,\n\topts: {\n\t\treadonly source?: EventFlowSourceRef;\n\t\treadonly eventId?: string;\n\t\treadonly eventType?: string;\n\t\treadonly issueCode?: string;\n\t},\n): EventFlowAuditRecord {\n\treturn {\n\t\tseq: ++state.auditSeq,\n\t\tflowId,\n\t\toutcome,\n\t\t...(opts.eventId === undefined ? {} : { eventId: opts.eventId }),\n\t\t...(opts.eventType === undefined ? {} : { eventType: opts.eventType }),\n\t\t...(opts.issueCode === undefined ? {} : { issueCode: opts.issueCode }),\n\t\t...(opts.source === undefined ? {} : { source: opts.source }),\n\t\thighWater: highWaterSnapshot(flowId, state),\n\t\ttimestampMs,\n\t};\n}\n\nfunction highWaterSnapshot(flowId: string, state: EventFlowRuntimeState): EventFlowHighWater {\n\treturn {\n\t\tflowId,\n\t\trecordSeq: state.recordSeq,\n\t\tauditSeq: state.auditSeq,\n\t\tsources: [...state.highWater.values()].sort(\n\t\t\t(a, b) => a.source.localeCompare(b.source) || (a.topic ?? \"\").localeCompare(b.topic ?? \"\"),\n\t\t),\n\t};\n}\n\nfunction emptyHighWater(flowId: string): EventFlowHighWater {\n\treturn { flowId, recordSeq: 0, auditSeq: 0, sources: [] };\n}\n\nfunction projectionHighWater(\n\tflowId: string,\n\trecord: EventFlowRecord,\n\tsourceHighWater: Map<string, EventFlowSourceHighWater>,\n): EventFlowHighWater {\n\tsourceHighWater.set(sourceKey(record.source), {\n\t\tsource: record.source.source,\n\t\t...(record.source.topic === undefined ? {} : { topic: record.source.topic }),\n\t\t...(record.source.seq === undefined ? {} : { seq: record.source.seq }),\n\t\tmessageId: record.event.id,\n\t\trecordSeq: record.recordSeq,\n\t});\n\treturn {\n\t\tflowId,\n\t\trecordSeq: record.recordSeq,\n\t\tauditSeq: 0,\n\t\tsources: [...sourceHighWater.values()].sort(\n\t\t\t(a, b) => a.source.localeCompare(b.source) || (a.topic ?? \"\").localeCompare(b.topic ?? \"\"),\n\t\t),\n\t};\n}\n\nfunction sourceKey(source: EventFlowSourceRef): string {\n\treturn `${source.source}\\u0000${source.topic ?? \"\"}`;\n}\n\nfunction eventIdOf(value: unknown): string | undefined {\n\treturn isRecord(value) && typeof value.id === \"string\" ? value.id : undefined;\n}\n\nfunction dataIssue(code: string, message: string, details?: unknown): DataIssue {\n\treturn {\n\t\tkind: \"issue\",\n\t\tcode,\n\t\tmessage,\n\t\tseverity: \"error\",\n\t\tsource: \"eventFlow\",\n\t\t...(details === undefined ? {} : { details }),\n\t};\n}\n\nfunction isEventFlowBundle<T>(value: unknown): value is EventFlowBundle<T> {\n\treturn isRecord(value) && \"records\" in value && \"highWater\" in value;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","/**\n * Wave-protocol message types and the tier const table.\n *\n * Canonical authority: ~/src/graphrefly/spec/rules.jsonl\n * R-msg-format, R-msg-closed-set, R-tier (D34), R-data-payload, R-sentinel.\n */\n\n/** Opaque pause-lock / pull identifier (R-pause-lockset, R-pull). */\nexport type LockId = string | symbol;\n\n/** Explicit pull demand payload (D269/D272). Params are holder-visible context, never DATA-up. */\nexport interface PullDemand {\n\treadonly pullId: LockId;\n\treadonly params?: unknown;\n}\n\n/**\n * The CLOSED set of 11 message types (R-msg-closed-set / D9 + D269 + START handshake).\n * No open set, no user-defined custom types. Adding a type is a spec change.\n */\nexport type Message =\n\t| readonly [\"START\"]\n\t| readonly [\"DIRTY\"]\n\t| readonly [\"DATA\", unknown]\n\t| readonly [\"RESOLVED\"]\n\t| readonly [\"INVALIDATE\"]\n\t| readonly [\"COMPLETE\"]\n\t| readonly [\"ERROR\", unknown]\n\t| readonly [\"TEARDOWN\"]\n\t| readonly [\"PAUSE\", LockId]\n\t| readonly [\"RESUME\", LockId]\n\t| readonly [\"PULL\", PullDemand];\n\n/** One array of messages delivered in one call = one Wave (R-wave-boundary). */\nexport type Wave = readonly Message[];\n\n/** The message-type tag (the first tuple element). */\nexport type MessageType = Message[0];\n\n/**\n * SENTINEL = absence-of-DATA (R-sentinel / D16). TS representation is `undefined`.\n * Never a valid DATA payload; `null` IS a valid DATA value (domain-level absence).\n */\nexport const SENTINEL = undefined;\n\n/** R-data-payload: ERROR payloads must not collide with terminal metadata shorthand. */\nexport function isInvalidErrorPayload(v: unknown): boolean {\n\treturn v === SENTINEL || typeof v === \"boolean\";\n}\n\n/** R-data-payload / D78: host-language failures that collide with ctx.terminal shorthand become diagnostics. */\nexport function errorPayload(reason: unknown, fallback = \"error without a valid payload\"): unknown {\n\treturn isInvalidErrorPayload(reason) ? new Error(fallback) : reason;\n}\n\nexport const TIER_START = 0;\nexport const TIER_CONTROL = 1;\nexport const TIER_NOTIFICATION = 2;\nexport const TIER_VALUE = 3;\nexport const TIER_SETTLE = 4;\nexport const TIER_TERMINAL = 5;\nexport const TIER_TEARDOWN = 6;\n\n/**\n * Tier const table (R-tier / D34). Tiers below value dispatch immediately; value\n * and above are batch-deferred. This is a compile-time const table (D18), not runtime config.\n */\nconst TIER: Record<MessageType, number> = {\n\tSTART: TIER_START,\n\tPAUSE: TIER_CONTROL,\n\tRESUME: TIER_CONTROL,\n\tPULL: TIER_CONTROL,\n\tDIRTY: TIER_NOTIFICATION,\n\tDATA: TIER_VALUE,\n\tRESOLVED: TIER_VALUE,\n\tINVALIDATE: TIER_SETTLE,\n\tCOMPLETE: TIER_TERMINAL,\n\tERROR: TIER_TERMINAL,\n\tTEARDOWN: TIER_TEARDOWN,\n};\n\nexport function messageTier(t: MessageType): number {\n\treturn TIER[t];\n}\n\n/** Value and above are deferred inside a batch (DATA/RESOLVED/INVALIDATE/terminal/teardown). */\nexport function isDeferredTier(t: MessageType): boolean {\n\treturn TIER[t] >= TIER_VALUE;\n}\n\n/** Value-tier messages (DATA/RESOLVED) occupy the tier-3 slot. */\nexport function isValueTier(t: MessageType): boolean {\n\treturn TIER[t] === TIER_VALUE;\n}\n\n/** The pause buffer holds the settle slice only: value-tier DATA/RESOLVED plus INVALIDATE. */\nexport function isPauseBufferedTier(t: MessageType): boolean {\n\tconst tier = TIER[t];\n\treturn tier === TIER_VALUE || tier === TIER_SETTLE;\n}\n\n/**\n * A TERMINAL message = tier 5 (COMPLETE | ERROR), R-tier / D34. Detected via the CENTRAL tier\n * table, NOT a per-variant `=== \"COMPLETE\" || === \"ERROR\"` check — so terminal routing stays\n * driven by the one const table (feedback_use_tier_for_signal_routing); discriminate COMPLETE vs\n * ERROR within the tier by the message type only where the handling actually differs.\n */\nexport function isTerminal(t: MessageType): boolean {\n\treturn TIER[t] === TIER_TERMINAL;\n}\n\n/**\n * ctx.up carries control/demand tiers only (R-ctx-up / D269): DIRTY, PAUSE, RESUME, PULL,\n * INVALIDATE, TEARDOWN. DATA/RESOLVED (tier 3) and COMPLETE/ERROR (tier 5) are\n * down-only.\n */\nexport function isUpAllowed(t: MessageType): boolean {\n\tconst tier = TIER[t];\n\treturn tier !== TIER_VALUE && tier !== TIER_TERMINAL;\n}\n","/**\n * The fn-invocation context and per-dep input shapes.\n *\n * Canonical authority: ~/src/graphrefly/spec/rules.jsonl\n * R-fn-contract (D8/D27), R-ctx-state (D23/D29), R-cleanup-hooks (D28), R-ctx-up.\n */\n\nimport type { Dispatcher } from \"../dispatcher/index.js\";\nimport type { EnvironmentDrivers } from \"../graph/environment.js\";\nimport type { Node } from \"../node/node.js\";\nimport { type Message, type PullDemand, SENTINEL, type Wave } from \"../protocol/messages.js\";\n\n/** A downstream sink callback (the only way to connect to a node's output). */\nexport type Sink = (msg: Message, delivery?: DeliveryMeta) => void;\n\n/** Internal delivery metadata used to preserve the upstream `ctx.down(msgs)` wave boundary. */\nexport interface DeliveryMeta {\n\treadonly wave: object;\n\treadonly last: boolean;\n}\n\n/**\n * Internal current-value reader. It is deliberately a symbol-backed implementation detail:\n * raw ctx exposes `waveData` + `terminal`; helpers below derive from that plus this dep cache.\n */\nexport const CTX_DEP_CACHE: unique symbol = Symbol(\"graphrefly.ctx.depCache\");\n\nexport interface CtxDepCache {\n\treadonly latest: readonly unknown[];\n}\n\n/** Internal node-construction binding for graph-local helper-created deps. */\nexport const CTX_NODE_BINDING: unique symbol = Symbol(\"graphrefly.ctx.nodeBinding\");\n\nexport interface CtxNodeBinding {\n\treadonly dispatcher: Dispatcher;\n\tcreate<T>(factory: () => Node<T>): Node<T>;\n}\n\n/** Per-dep wave projections: dep -> waves -> values/SENTINEL markers. */\nexport type WaveData = readonly (readonly (readonly unknown[])[])[];\n\n/** Terminal metadata parallel to `waveData`: false = none, true = COMPLETE, otherwise ERROR payload. */\nexport type TerminalData = readonly unknown[];\n\nexport function isTerminalNone(t: unknown): boolean {\n\treturn t === false || t === undefined;\n}\n\nexport function isTerminalComplete(t: unknown): t is true {\n\treturn t === true;\n}\n\nexport function isTerminalError(t: unknown): boolean {\n\treturn !isTerminalNone(t) && !isTerminalComplete(t);\n}\n\nexport function terminalErrorValue(t: unknown): unknown {\n\treturn isTerminalError(t) ? t : undefined;\n}\n\n/**\n * Per-node private cross-wave state (R-ctx-state / D23,D29). Default fresh-lifecycle\n * wipe; `persist(true)` keeps it across lifecycle transitions.\n */\nexport interface CtxState {\n\tget<S = unknown>(): S | undefined;\n\tset<S = unknown>(v: S): void;\n\tpersist(on?: boolean): void;\n}\n\n/**\n * Deferred SELF-rewire (R-rewire-deferred / D47). A node fn may, DURING its run, request a\n * mutation of its OWN dep set; the request is QUEUED and applied at the committed wave boundary\n * (after the current wave settles / batch commit / final-lock RESUME) as a fresh wave, reusing\n * R-rewire surgical/Option-C semantics (D42). This is the ONLY legal self-triggered rewire — an\n * IMMEDIATE in-fn `node.subscribeDep/unsubscribeDep/replaceDeps` is the D37 mid-fn feedback-cycle ERROR. An\n * added cached dep pushes `[DIRTY,DATA]` on the boundary wave (R-push-subscribe); a removed dep\n * is drained and, if it loses its last subscriber, `_deactivate`s + fires `onDeactivation`\n * (input-side teardown — the basis for higher-order operator cancellation / abortInFlight).\n */\nexport interface RewireNext {\n\t/** Defer subscribing to a dep (paired with the re-supplied fn — positional fn-deps lock, SD-1). */\n\tsubscribeDep(dep: Node<unknown>, fn: NodeFn): void;\n\t/** Defer unsubscribing from a dep (its source is torn down if it loses its last subscriber). */\n\tunsubscribeDep(dep: Node<unknown>, fn: NodeFn): void;\n\t/** Defer replacing the whole dep set (surgical: kept deps untouched, removed drained, added fresh-subscribe). */\n\treplaceDeps(deps: Node<unknown>[], fn: NodeFn): void;\n}\n\n/**\n * The single argument to a node fn: `(ctx) => void` (R-fn-contract / D8). All emission\n * is explicit via `ctx.down`; there is no return-value framing.\n */\nexport interface Ctx {\n\t/**\n\t * Emit upstream toward deps — control tiers only (R-ctx-up). IMMEDIATE. `towardDep` (a dep index)\n\t * routes the wave up ONE declared edge (R-up-routing directed-up); omitted = broadcast up all deps.\n\t * A pull DEMAND is `up([[PULL, { pullId, params }]])` — but for a SELF-demand (demanding a dep\n\t * this fn also reads) use {@link Ctx.upNext} instead, since an immediate demand whose delivery loops back\n\t * re-enters this fn mid-wave (D37 / R-reentrancy).\n\t */\n\tup(msgs: Wave, towardDep?: number): void;\n\t/** Emit downstream toward sinks. */\n\tdown(msgs: Wave): void;\n\t/**\n\t * The single raw dep-value input surface (R-ctx-wave-data / D77): dep -> upstream waves ->\n\t * per-wave DATA payloads and INVALIDATE/SENTINEL markers. `waveData[i] = []` means dep i\n\t * delivered no wave to this invocation; `waveData[i] = [[]]` means RESOLVED-only.\n\t */\n\twaveData: WaveData;\n\t/** Terminal metadata for the same invocation; terminal values never enter `waveData`. */\n\tterminal: TerminalData;\n\tstate: CtxState;\n\t/** Release external resources on deactivation (R-cleanup-hooks). */\n\tonDeactivation(fn: () => void): void;\n\t/** Flush on INVALIDATE (R-cleanup-hooks). */\n\tonInvalidate(fn: () => void): void;\n\t/** Graph-owned environment drivers for source/adapter boundaries (D130/D131). */\n\tenvironment(): EnvironmentDrivers;\n\t/** Holder-visible context for a PULL-caused invocation (D272); absent for ordinary waves. */\n\treadonly pull?: PullDemand;\n\t/**\n\t * Deferred SELF-rewire (R-rewire-deferred / D47) — the substrate affordance higher-order\n\t * operators (switchMap/mergeMap/concatMap/exhaustMap/flatMap) use to grow/shrink their own\n\t * inner-source dep set in response to their own data. Always present; see {@link RewireNext}.\n\t */\n\trewireNext: RewireNext;\n\t/**\n\t * Deferred up — the boundary-deferred form of {@link Ctx.up} (R-up-routing / R-pull / D59). Routes\n\t * `msgs` up from this node at the COMMITTED wave boundary (broadcast, or up the single `towardDep`\n\t * edge), riding the same R-rewire-deferred (D47) drain as {@link RewireNext}. This is the\n\t * SELF-DEMAND path: a consumer issues `ctx.upNext([[PULL, { pullId, params }]])` to demand a pull\n\t * dep it ALSO reads — the cone-routed PULL reaches the pullId-holder, whose delivery loops back as a\n\t * FRESH wave (not a mid-fn re-entry → no D37). The consumer accepts one-wave latency (the\n\t * HTTP-request model). No node reference needed: the author writes the pullId verbatim.\n\t */\n\tupNext(msgs: Wave, towardDep?: number): void;\n\t/**\n\t * Read a dep's latest value by index (dynamicNode only, R-dynamic-node / D35).\n\t * Present only on dynamicNode fns; all declared deps still participate in wave\n\t * tracking. Under D49/R-resolved-undirty an unread dep's change still fires the fn,\n\t * which re-emits its (unchanged) output as a DATA occurrence — there is NO equals-\n\t * absorption; pair with distinctUntilChanged to suppress unchanged re-emits (opt-in).\n\t */\n\ttrack?(depIndex: number): unknown;\n\t[CTX_DEP_CACHE]?: CtxDepCache;\n\t[CTX_NODE_BINDING]?: CtxNodeBinding;\n}\n\n/** A node fn (R-fn-contract). Registered in a dispatcher pool, indexed by Handle. */\nexport type NodeFn = (ctx: Ctx) => void;\n\n/** Number of declared dep slots visible in this invocation. */\nexport function depCount(ctx: Ctx): number {\n\treturn ctx.waveData.length;\n}\n\n/** DATA/SENTINEL projection batches delivered by one dep in this invocation. */\nexport function depWaves(ctx: Ctx, depIndex: number): readonly (readonly unknown[])[] {\n\treturn ctx.waveData[depIndex] ?? [];\n}\n\n/** Flattened DATA projection for old event-counting operator bodies; null = no wave. */\nexport function depBatch(ctx: Ctx, depIndex: number): readonly unknown[] | null {\n\tconst waves = depWaves(ctx, depIndex);\n\tif (waves.length === 0) return null;\n\tconst flattened = waves.flat().filter((v) => v !== SENTINEL);\n\treturn flattened.length === 0 ? [] : flattened;\n}\n\n/** Latest cached DATA for a dep, derived from implementation-owned dep cache. */\nexport function depLatest(ctx: Ctx, depIndex: number): unknown {\n\treturn ctx[CTX_DEP_CACHE]?.latest[depIndex];\n}\n\n/** Terminal metadata for one dep: false = none, true = COMPLETE, otherwise ERROR payload. */\nexport function depTerminal(ctx: Ctx, depIndex: number): unknown {\n\tconst t = ctx.terminal[depIndex];\n\treturn t === undefined ? false : t;\n}\n","import type { Node } from \"../node/node.js\";\nimport type { PullDemand } from \"../protocol/messages.js\";\nimport type { MessageBusCommand } from \"./types.js\";\n\nexport function pullParams<T>(pull: PullDemand | undefined): T {\n\treturn (isObjectRecord(pull?.params) ? pull.params : {}) as T;\n}\n\nexport function publishCommand<T extends MessageBusCommand>(\n\tcommandNode: Node<MessageBusCommand>,\n\tcommand: T,\n): T {\n\tcommandNode.down([[\"DATA\", command]]);\n\treturn command;\n}\n\nexport function makeTopicState(): {\n\tclosed: boolean;\n\theadSeq: number;\n\tnextSeq: number;\n\tmessages: [];\n} {\n\treturn { closed: false, headSeq: 1, nextSeq: 1, messages: [] };\n}\n\nexport function uniqueTopics(topics: readonly string[]): readonly string[] {\n\tconst unique = [...new Set(topics)];\n\tif (unique.length !== topics.length) throw new Error(\"messageBus: duplicate topic\");\n\tfor (const topic of unique) assertTopicKey(topic, \"messageBus\");\n\treturn Object.freeze(unique.sort());\n}\n\nexport function assertTopicKey(topic: string, owner: string): void {\n\tconst error = validateTopicKey(topic, owner);\n\tif (error !== undefined) throw new Error(error);\n}\n\nexport function validateTopicKey(topic: string, owner: string): string | undefined {\n\tif (typeof topic !== \"string\" || topic.length === 0)\n\t\treturn `${owner}: topic must be a non-empty string`;\n\treturn undefined;\n}\n\nexport function assertNonEmpty(value: string, owner: string): void {\n\tif (typeof value !== \"string\" || value.length === 0)\n\t\tthrow new Error(`${owner}: must be a non-empty string`);\n}\n\nexport function positiveLimit(limit: number | undefined): number {\n\tif (limit === undefined) return 100;\n\tif (!Number.isInteger(limit) || limit < 1)\n\t\tthrow new Error(\"messageBus: limit must be a positive integer\");\n\treturn limit;\n}\n\nexport function isPositiveSeq(value: unknown): value is number {\n\treturn Number.isInteger(value) && (value as number) >= 1;\n}\n\nexport function isObjectRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function commandTopic(command: unknown): string | undefined {\n\treturn isObjectRecord(command) && typeof command.topic === \"string\" ? command.topic : undefined;\n}\n\nexport function commandIdOf(command: unknown): string | undefined {\n\treturn isObjectRecord(command) && typeof command.commandId === \"string\"\n\t\t? command.commandId\n\t\t: undefined;\n}\n\nexport function idempotencyKey(topic: string, key: string): string {\n\treturn `${topic}\\u0000${key}`;\n}\n","import type { DataIssue } from \"../data/index.js\";\nimport type { EventMessage, EventMessageOptions } from \"./types.js\";\nimport { assertNonEmpty, isObjectRecord } from \"./utils.js\";\n\nexport function eventMessage<T>(\n\ttype: string,\n\tpayload: T,\n\topts: EventMessageOptions,\n): EventMessage<T> {\n\tassertNonEmpty(type, \"eventMessage.type\");\n\tassertNonEmpty(opts.id, \"eventMessage.id\");\n\treturn {\n\t\tid: opts.id,\n\t\ttype,\n\t\tpayload,\n\t\t...(opts.key === undefined ? {} : { key: opts.key }),\n\t\t...(opts.subjectId === undefined ? {} : { subjectId: opts.subjectId }),\n\t\t...(opts.correlationId === undefined ? {} : { correlationId: opts.correlationId }),\n\t\t...(opts.causationId === undefined ? {} : { causationId: opts.causationId }),\n\t\t...(opts.occurredAtMs === undefined ? {} : { occurredAtMs: opts.occurredAtMs }),\n\t\t...(opts.actor === undefined ? {} : { actor: opts.actor }),\n\t\t...(opts.evidenceRefs === undefined ? {} : { evidenceRefs: opts.evidenceRefs }),\n\t\t...(opts.schema === undefined ? {} : { schema: opts.schema }),\n\t\t...(opts.metadata === undefined ? {} : { metadata: opts.metadata }),\n\t};\n}\n\nexport function isEventMessage(value: unknown): value is EventMessage {\n\treturn eventMessageIssue(value) === undefined;\n}\n\nexport function eventMessageIssue(value: unknown): DataIssue | undefined {\n\tif (!isObjectRecord(value)) {\n\t\treturn eventIssue(\"event message must be an object\");\n\t}\n\tif (typeof value.id !== \"string\" || value.id.length === 0) {\n\t\treturn eventIssue(\"event message id must be a non-empty string\");\n\t}\n\tif (typeof value.type !== \"string\" || value.type.length === 0) {\n\t\treturn eventIssue(\"event message type must be a non-empty string\");\n\t}\n\tif (!(\"payload\" in value)) {\n\t\treturn eventIssue(\"event message payload field is required\");\n\t}\n\treturn undefined;\n}\n\nfunction eventIssue(message: string): DataIssue {\n\treturn {\n\t\tkind: \"issue\",\n\t\tcode: \"malformed-event-message\",\n\t\tmessage,\n\t\tseverity: \"error\",\n\t\tsource: \"messageBus.eventMessage\",\n\t};\n}\n"],"mappings":"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","names":["status","audit"]}
@@ -0,0 +1,115 @@
1
+ import { DataIssue } from '../data/index.cjs';
2
+ import { d as Graph } from '../graph-CWK3HLPB.cjs';
3
+ import { N as Node } from '../types-BS6CyR-x.cjs';
4
+ import { E as EventMessage, c as MessageEnvelope } from '../types-BhveCMg5.cjs';
5
+ import '../core/index.cjs';
6
+ import '../messages-CAzUPPJM.cjs';
7
+ import '../codec-BB7p8fJc.cjs';
8
+ import '../describe-CQRrkv-Q.cjs';
9
+
10
+ /**
11
+ * Event-flow projector helpers (D326/D329/D331).
12
+ *
13
+ * eventFlow consumes declared graph sources that emit EventMessage or
14
+ * MessageEnvelope<EventMessage>. It records projection facts and high-water over
15
+ * source coordinates; it does not own topics, subscriptions, cursors, retention,
16
+ * ack/seek/close, queues, workers, or dead-letter policy.
17
+ */
18
+
19
+ interface EventFlowSource<T = unknown> {
20
+ readonly source: string;
21
+ readonly node: Node<EventMessage<T> | MessageEnvelope<EventMessage<T>> | unknown>;
22
+ }
23
+ type EventFlowSourceInput<T = unknown> = Node<EventMessage<T> | MessageEnvelope<EventMessage<T>> | unknown> | EventFlowSource<T>;
24
+ interface EventFlowSourceRef {
25
+ readonly source: string;
26
+ readonly topic?: string;
27
+ readonly seq?: number;
28
+ readonly messageId?: string;
29
+ readonly idempotencyKey?: string;
30
+ }
31
+ interface EventFlowRecord<T = unknown> {
32
+ readonly recordSeq: number;
33
+ readonly flowId: string;
34
+ readonly event: EventMessage<T>;
35
+ readonly source: EventFlowSourceRef;
36
+ readonly observedAtMs: number;
37
+ readonly correlationId?: string;
38
+ readonly causationId?: string;
39
+ }
40
+ interface EventFlowStatus {
41
+ readonly kind: "recorded" | "rejected" | "projection-ready" | "projection-stale";
42
+ readonly flowId: string;
43
+ readonly recordSeq?: number;
44
+ readonly eventId?: string;
45
+ readonly eventType?: string;
46
+ readonly source?: EventFlowSourceRef;
47
+ readonly issueCode?: string;
48
+ readonly timestampMs: number;
49
+ }
50
+ interface EventFlowAuditRecord {
51
+ readonly seq: number;
52
+ readonly flowId: string;
53
+ readonly outcome: "recorded" | "rejected";
54
+ readonly eventId?: string;
55
+ readonly eventType?: string;
56
+ readonly issueCode?: string;
57
+ readonly source?: EventFlowSourceRef;
58
+ readonly highWater: EventFlowHighWater;
59
+ readonly timestampMs: number;
60
+ }
61
+ interface EventFlowSourceHighWater {
62
+ readonly source: string;
63
+ readonly topic?: string;
64
+ readonly seq?: number;
65
+ readonly messageId?: string;
66
+ readonly recordSeq: number;
67
+ }
68
+ interface EventFlowHighWater {
69
+ readonly flowId: string;
70
+ readonly recordSeq: number;
71
+ readonly auditSeq: number;
72
+ readonly sources: readonly EventFlowSourceHighWater[];
73
+ }
74
+ interface EventFlowOptions<T = unknown> {
75
+ readonly flowId?: string;
76
+ readonly name?: string;
77
+ readonly sources: readonly EventFlowSourceInput<T>[];
78
+ readonly now?: () => number;
79
+ }
80
+ interface EventFlowBundle<T = unknown> {
81
+ readonly records: Node<EventFlowRecord<T>>;
82
+ readonly status: Node<EventFlowStatus>;
83
+ readonly issues: Node<DataIssue>;
84
+ readonly audit: Node<EventFlowAuditRecord>;
85
+ readonly highWater: Node<EventFlowHighWater>;
86
+ }
87
+ interface EventFlowProjectionFrame<TState> {
88
+ readonly state: TState;
89
+ readonly highWater: EventFlowHighWater;
90
+ }
91
+ interface EventFlowProjectionStatus {
92
+ readonly kind: "projected" | "rejected";
93
+ readonly projectionId: string;
94
+ readonly recordSeq?: number;
95
+ readonly issueCode?: string;
96
+ readonly timestampMs: number;
97
+ }
98
+ interface EventFlowProjectionOptions<TState, TPayload = unknown> {
99
+ readonly projectionId?: string;
100
+ readonly name?: string;
101
+ readonly initial: TState;
102
+ readonly reduce: (state: TState, record: EventFlowRecord<TPayload>) => TState;
103
+ readonly now?: () => number;
104
+ }
105
+ interface EventFlowProjectionBundle<TState> {
106
+ readonly snapshot: Node<TState>;
107
+ readonly frames: Node<EventFlowProjectionFrame<TState>>;
108
+ readonly status: Node<EventFlowProjectionStatus>;
109
+ readonly issues: Node<DataIssue>;
110
+ readonly highWater: Node<EventFlowHighWater>;
111
+ }
112
+ declare function eventFlow<T = unknown>(graph: Graph, opts: EventFlowOptions<T>): EventFlowBundle<T>;
113
+ declare function eventFlowProjection<TState, TPayload = unknown>(graph: Graph, flowOrRecords: EventFlowBundle<TPayload> | Node<EventFlowRecord<TPayload>>, opts: EventFlowProjectionOptions<TState, TPayload>): EventFlowProjectionBundle<TState>;
114
+
115
+ export { type EventFlowAuditRecord, type EventFlowBundle, type EventFlowHighWater, type EventFlowOptions, type EventFlowProjectionBundle, type EventFlowProjectionFrame, type EventFlowProjectionOptions, type EventFlowProjectionStatus, type EventFlowRecord, type EventFlowSource, type EventFlowSourceHighWater, type EventFlowSourceInput, type EventFlowSourceRef, type EventFlowStatus, eventFlow, eventFlowProjection };
@@ -0,0 +1,115 @@
1
+ import { DataIssue } from '../data/index.js';
2
+ import { d as Graph } from '../graph-ho5sotHP.js';
3
+ import { N as Node } from '../types-C9NOgNJw.js';
4
+ import { E as EventMessage, c as MessageEnvelope } from '../types-CTsQ8Ww4.js';
5
+ import '../core/index.js';
6
+ import '../messages-CAzUPPJM.js';
7
+ import '../codec-BB7p8fJc.js';
8
+ import '../describe-B_A5fbXH.js';
9
+
10
+ /**
11
+ * Event-flow projector helpers (D326/D329/D331).
12
+ *
13
+ * eventFlow consumes declared graph sources that emit EventMessage or
14
+ * MessageEnvelope<EventMessage>. It records projection facts and high-water over
15
+ * source coordinates; it does not own topics, subscriptions, cursors, retention,
16
+ * ack/seek/close, queues, workers, or dead-letter policy.
17
+ */
18
+
19
+ interface EventFlowSource<T = unknown> {
20
+ readonly source: string;
21
+ readonly node: Node<EventMessage<T> | MessageEnvelope<EventMessage<T>> | unknown>;
22
+ }
23
+ type EventFlowSourceInput<T = unknown> = Node<EventMessage<T> | MessageEnvelope<EventMessage<T>> | unknown> | EventFlowSource<T>;
24
+ interface EventFlowSourceRef {
25
+ readonly source: string;
26
+ readonly topic?: string;
27
+ readonly seq?: number;
28
+ readonly messageId?: string;
29
+ readonly idempotencyKey?: string;
30
+ }
31
+ interface EventFlowRecord<T = unknown> {
32
+ readonly recordSeq: number;
33
+ readonly flowId: string;
34
+ readonly event: EventMessage<T>;
35
+ readonly source: EventFlowSourceRef;
36
+ readonly observedAtMs: number;
37
+ readonly correlationId?: string;
38
+ readonly causationId?: string;
39
+ }
40
+ interface EventFlowStatus {
41
+ readonly kind: "recorded" | "rejected" | "projection-ready" | "projection-stale";
42
+ readonly flowId: string;
43
+ readonly recordSeq?: number;
44
+ readonly eventId?: string;
45
+ readonly eventType?: string;
46
+ readonly source?: EventFlowSourceRef;
47
+ readonly issueCode?: string;
48
+ readonly timestampMs: number;
49
+ }
50
+ interface EventFlowAuditRecord {
51
+ readonly seq: number;
52
+ readonly flowId: string;
53
+ readonly outcome: "recorded" | "rejected";
54
+ readonly eventId?: string;
55
+ readonly eventType?: string;
56
+ readonly issueCode?: string;
57
+ readonly source?: EventFlowSourceRef;
58
+ readonly highWater: EventFlowHighWater;
59
+ readonly timestampMs: number;
60
+ }
61
+ interface EventFlowSourceHighWater {
62
+ readonly source: string;
63
+ readonly topic?: string;
64
+ readonly seq?: number;
65
+ readonly messageId?: string;
66
+ readonly recordSeq: number;
67
+ }
68
+ interface EventFlowHighWater {
69
+ readonly flowId: string;
70
+ readonly recordSeq: number;
71
+ readonly auditSeq: number;
72
+ readonly sources: readonly EventFlowSourceHighWater[];
73
+ }
74
+ interface EventFlowOptions<T = unknown> {
75
+ readonly flowId?: string;
76
+ readonly name?: string;
77
+ readonly sources: readonly EventFlowSourceInput<T>[];
78
+ readonly now?: () => number;
79
+ }
80
+ interface EventFlowBundle<T = unknown> {
81
+ readonly records: Node<EventFlowRecord<T>>;
82
+ readonly status: Node<EventFlowStatus>;
83
+ readonly issues: Node<DataIssue>;
84
+ readonly audit: Node<EventFlowAuditRecord>;
85
+ readonly highWater: Node<EventFlowHighWater>;
86
+ }
87
+ interface EventFlowProjectionFrame<TState> {
88
+ readonly state: TState;
89
+ readonly highWater: EventFlowHighWater;
90
+ }
91
+ interface EventFlowProjectionStatus {
92
+ readonly kind: "projected" | "rejected";
93
+ readonly projectionId: string;
94
+ readonly recordSeq?: number;
95
+ readonly issueCode?: string;
96
+ readonly timestampMs: number;
97
+ }
98
+ interface EventFlowProjectionOptions<TState, TPayload = unknown> {
99
+ readonly projectionId?: string;
100
+ readonly name?: string;
101
+ readonly initial: TState;
102
+ readonly reduce: (state: TState, record: EventFlowRecord<TPayload>) => TState;
103
+ readonly now?: () => number;
104
+ }
105
+ interface EventFlowProjectionBundle<TState> {
106
+ readonly snapshot: Node<TState>;
107
+ readonly frames: Node<EventFlowProjectionFrame<TState>>;
108
+ readonly status: Node<EventFlowProjectionStatus>;
109
+ readonly issues: Node<DataIssue>;
110
+ readonly highWater: Node<EventFlowHighWater>;
111
+ }
112
+ declare function eventFlow<T = unknown>(graph: Graph, opts: EventFlowOptions<T>): EventFlowBundle<T>;
113
+ declare function eventFlowProjection<TState, TPayload = unknown>(graph: Graph, flowOrRecords: EventFlowBundle<TPayload> | Node<EventFlowRecord<TPayload>>, opts: EventFlowProjectionOptions<TState, TPayload>): EventFlowProjectionBundle<TState>;
114
+
115
+ export { type EventFlowAuditRecord, type EventFlowBundle, type EventFlowHighWater, type EventFlowOptions, type EventFlowProjectionBundle, type EventFlowProjectionFrame, type EventFlowProjectionOptions, type EventFlowProjectionStatus, type EventFlowRecord, type EventFlowSource, type EventFlowSourceHighWater, type EventFlowSourceInput, type EventFlowSourceRef, type EventFlowStatus, eventFlow, eventFlowProjection };
@@ -0,0 +1,14 @@
1
+ import {
2
+ eventFlow,
3
+ eventFlowProjection
4
+ } from "../chunk-RAHNUYA5.js";
5
+ import "../chunk-PVC7WDKI.js";
6
+ import "../chunk-UT3MHJCW.js";
7
+ import "../chunk-WQIA3GFB.js";
8
+ import "../chunk-S6HXABGL.js";
9
+ import "../chunk-DGUM43GV.js";
10
+ export {
11
+ eventFlow,
12
+ eventFlowProjection
13
+ };
14
+ //# sourceMappingURL=event-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}