@spine-event-engine/server 2.0.0-snapshot.11

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 (378) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +209 -0
  3. package/REFERENCE.md +760 -0
  4. package/dist/browser/browser-server.d.ts +95 -0
  5. package/dist/browser/browser-server.d.ts.map +1 -0
  6. package/dist/browser/browser-server.js +719 -0
  7. package/dist/browser/browser-server.js.map +1 -0
  8. package/dist/browser/durable-subscription-bindings.d.ts +122 -0
  9. package/dist/browser/durable-subscription-bindings.d.ts.map +1 -0
  10. package/dist/browser/durable-subscription-bindings.js +524 -0
  11. package/dist/browser/durable-subscription-bindings.js.map +1 -0
  12. package/dist/browser/index.d.ts +12 -0
  13. package/dist/browser/index.d.ts.map +1 -0
  14. package/dist/browser/index.js +24 -0
  15. package/dist/browser/index.js.map +1 -0
  16. package/dist/browser/options.d.ts +183 -0
  17. package/dist/browser/options.d.ts.map +1 -0
  18. package/dist/browser/options.js +15 -0
  19. package/dist/browser/options.js.map +1 -0
  20. package/dist/bus/command-bus.d.ts +63 -0
  21. package/dist/bus/command-bus.d.ts.map +1 -0
  22. package/dist/bus/command-bus.js +236 -0
  23. package/dist/bus/command-bus.js.map +1 -0
  24. package/dist/bus/command-dispatcher-registry.d.ts +33 -0
  25. package/dist/bus/command-dispatcher-registry.d.ts.map +1 -0
  26. package/dist/bus/command-dispatcher-registry.js +75 -0
  27. package/dist/bus/command-dispatcher-registry.js.map +1 -0
  28. package/dist/bus/command-dispatcher.d.ts +25 -0
  29. package/dist/bus/command-dispatcher.d.ts.map +1 -0
  30. package/dist/bus/command-dispatcher.js +15 -0
  31. package/dist/bus/command-dispatcher.js.map +1 -0
  32. package/dist/bus/command-errors.d.ts +23 -0
  33. package/dist/bus/command-errors.d.ts.map +1 -0
  34. package/dist/bus/command-errors.js +52 -0
  35. package/dist/bus/command-errors.js.map +1 -0
  36. package/dist/bus/event-bus.d.ts +113 -0
  37. package/dist/bus/event-bus.d.ts.map +1 -0
  38. package/dist/bus/event-bus.js +518 -0
  39. package/dist/bus/event-bus.js.map +1 -0
  40. package/dist/bus/event-dispatcher-origin-schemas.d.ts +17 -0
  41. package/dist/bus/event-dispatcher-origin-schemas.d.ts.map +1 -0
  42. package/dist/bus/event-dispatcher-origin-schemas.js +32 -0
  43. package/dist/bus/event-dispatcher-origin-schemas.js.map +1 -0
  44. package/dist/bus/event-dispatcher-registry.d.ts +48 -0
  45. package/dist/bus/event-dispatcher-registry.d.ts.map +1 -0
  46. package/dist/bus/event-dispatcher-registry.js +176 -0
  47. package/dist/bus/event-dispatcher-registry.js.map +1 -0
  48. package/dist/bus/event-dispatcher.d.ts +48 -0
  49. package/dist/bus/event-dispatcher.d.ts.map +1 -0
  50. package/dist/bus/event-dispatcher.js +15 -0
  51. package/dist/bus/event-dispatcher.js.map +1 -0
  52. package/dist/context/bounded-context.d.ts +592 -0
  53. package/dist/context/bounded-context.d.ts.map +1 -0
  54. package/dist/context/bounded-context.js +1897 -0
  55. package/dist/context/bounded-context.js.map +1 -0
  56. package/dist/context/entity-inbox.d.ts +63 -0
  57. package/dist/context/entity-inbox.d.ts.map +1 -0
  58. package/dist/context/entity-inbox.js +387 -0
  59. package/dist/context/entity-inbox.js.map +1 -0
  60. package/dist/context/local-inbox-handoff.d.ts +248 -0
  61. package/dist/context/local-inbox-handoff.d.ts.map +1 -0
  62. package/dist/context/local-inbox-handoff.js +340 -0
  63. package/dist/context/local-inbox-handoff.js.map +1 -0
  64. package/dist/context/projection-handoff.d.ts +46 -0
  65. package/dist/context/projection-handoff.d.ts.map +1 -0
  66. package/dist/context/projection-handoff.js +177 -0
  67. package/dist/context/projection-handoff.js.map +1 -0
  68. package/dist/context/tenant-index.d.ts +41 -0
  69. package/dist/context/tenant-index.d.ts.map +1 -0
  70. package/dist/context/tenant-index.js +93 -0
  71. package/dist/context/tenant-index.js.map +1 -0
  72. package/dist/delivery/conditional-pickup.d.ts +25 -0
  73. package/dist/delivery/conditional-pickup.d.ts.map +1 -0
  74. package/dist/delivery/conditional-pickup.js +26 -0
  75. package/dist/delivery/conditional-pickup.js.map +1 -0
  76. package/dist/delivery/delivery-builder.d.ts +216 -0
  77. package/dist/delivery/delivery-builder.d.ts.map +1 -0
  78. package/dist/delivery/delivery-builder.js +323 -0
  79. package/dist/delivery/delivery-builder.js.map +1 -0
  80. package/dist/delivery/delivery-lease.d.ts +15 -0
  81. package/dist/delivery/delivery-lease.d.ts.map +1 -0
  82. package/dist/delivery/delivery-lease.js +44 -0
  83. package/dist/delivery/delivery-lease.js.map +1 -0
  84. package/dist/delivery/delivery-loop.d.ts +113 -0
  85. package/dist/delivery/delivery-loop.d.ts.map +1 -0
  86. package/dist/delivery/delivery-loop.js +119 -0
  87. package/dist/delivery/delivery-loop.js.map +1 -0
  88. package/dist/delivery/delivery-monitor.d.ts +165 -0
  89. package/dist/delivery/delivery-monitor.d.ts.map +1 -0
  90. package/dist/delivery/delivery-monitor.js +168 -0
  91. package/dist/delivery/delivery-monitor.js.map +1 -0
  92. package/dist/delivery/delivery-ports.d.ts +151 -0
  93. package/dist/delivery/delivery-ports.d.ts.map +1 -0
  94. package/dist/delivery/delivery-ports.js +15 -0
  95. package/dist/delivery/delivery-ports.js.map +1 -0
  96. package/dist/delivery/delivery-run-control.d.ts +50 -0
  97. package/dist/delivery/delivery-run-control.d.ts.map +1 -0
  98. package/dist/delivery/delivery-run-control.js +66 -0
  99. package/dist/delivery/delivery-run-control.js.map +1 -0
  100. package/dist/delivery/delivery-run-coordinator.d.ts +218 -0
  101. package/dist/delivery/delivery-run-coordinator.d.ts.map +1 -0
  102. package/dist/delivery/delivery-run-coordinator.js +609 -0
  103. package/dist/delivery/delivery-run-coordinator.js.map +1 -0
  104. package/dist/delivery/delivery-storage-error.d.ts +13 -0
  105. package/dist/delivery/delivery-storage-error.d.ts.map +1 -0
  106. package/dist/delivery/delivery-storage-error.js +30 -0
  107. package/dist/delivery/delivery-storage-error.js.map +1 -0
  108. package/dist/delivery/delivery-supervisor.d.ts +175 -0
  109. package/dist/delivery/delivery-supervisor.d.ts.map +1 -0
  110. package/dist/delivery/delivery-supervisor.js +469 -0
  111. package/dist/delivery/delivery-supervisor.js.map +1 -0
  112. package/dist/delivery/delivery-worker.d.ts +180 -0
  113. package/dist/delivery/delivery-worker.d.ts.map +1 -0
  114. package/dist/delivery/delivery-worker.js +232 -0
  115. package/dist/delivery/delivery-worker.js.map +1 -0
  116. package/dist/delivery/delivery.d.ts +236 -0
  117. package/dist/delivery/delivery.d.ts.map +1 -0
  118. package/dist/delivery/delivery.js +539 -0
  119. package/dist/delivery/delivery.js.map +1 -0
  120. package/dist/delivery/inbox-records.d.ts +19 -0
  121. package/dist/delivery/inbox-records.d.ts.map +1 -0
  122. package/dist/delivery/inbox-records.js +291 -0
  123. package/dist/delivery/inbox-records.js.map +1 -0
  124. package/dist/delivery/inbox-storage.d.ts +83 -0
  125. package/dist/delivery/inbox-storage.d.ts.map +1 -0
  126. package/dist/delivery/inbox-storage.js +336 -0
  127. package/dist/delivery/inbox-storage.js.map +1 -0
  128. package/dist/delivery/inbox.d.ts +272 -0
  129. package/dist/delivery/inbox.d.ts.map +1 -0
  130. package/dist/delivery/inbox.js +183 -0
  131. package/dist/delivery/inbox.js.map +1 -0
  132. package/dist/delivery/parked-delivery-obligations.d.ts +182 -0
  133. package/dist/delivery/parked-delivery-obligations.d.ts.map +1 -0
  134. package/dist/delivery/parked-delivery-obligations.js +390 -0
  135. package/dist/delivery/parked-delivery-obligations.js.map +1 -0
  136. package/dist/delivery/shard-index.d.ts +41 -0
  137. package/dist/delivery/shard-index.d.ts.map +1 -0
  138. package/dist/delivery/shard-index.js +67 -0
  139. package/dist/delivery/shard-index.js.map +1 -0
  140. package/dist/delivery/sharded-work-registry.d.ts +114 -0
  141. package/dist/delivery/sharded-work-registry.d.ts.map +1 -0
  142. package/dist/delivery/sharded-work-registry.js +361 -0
  143. package/dist/delivery/sharded-work-registry.js.map +1 -0
  144. package/dist/entity/entity-metadata.d.ts +173 -0
  145. package/dist/entity/entity-metadata.d.ts.map +1 -0
  146. package/dist/entity/entity-metadata.js +187 -0
  147. package/dist/entity/entity-metadata.js.map +1 -0
  148. package/dist/entity/entity-storage-descriptor.d.ts +64 -0
  149. package/dist/entity/entity-storage-descriptor.d.ts.map +1 -0
  150. package/dist/entity/entity-storage-descriptor.js +227 -0
  151. package/dist/entity/entity-storage-descriptor.js.map +1 -0
  152. package/dist/entity/entity-transaction.d.ts +372 -0
  153. package/dist/entity/entity-transaction.d.ts.map +1 -0
  154. package/dist/entity/entity-transaction.js +413 -0
  155. package/dist/entity/entity-transaction.js.map +1 -0
  156. package/dist/entity/entity-transition-validation.d.ts +47 -0
  157. package/dist/entity/entity-transition-validation.d.ts.map +1 -0
  158. package/dist/entity/entity-transition-validation.js +327 -0
  159. package/dist/entity/entity-transition-validation.js.map +1 -0
  160. package/dist/entity/entity.d.ts +605 -0
  161. package/dist/entity/entity.d.ts.map +1 -0
  162. package/dist/entity/entity.js +981 -0
  163. package/dist/entity/entity.js.map +1 -0
  164. package/dist/entity/implicit-required-id.d.ts +15 -0
  165. package/dist/entity/implicit-required-id.d.ts.map +1 -0
  166. package/dist/entity/implicit-required-id.js +123 -0
  167. package/dist/entity/implicit-required-id.js.map +1 -0
  168. package/dist/entity/spec-scanner.d.ts +14 -0
  169. package/dist/entity/spec-scanner.d.ts.map +1 -0
  170. package/dist/entity/spec-scanner.js +37 -0
  171. package/dist/entity/spec-scanner.js.map +1 -0
  172. package/dist/handler/command-registration-readiness.d.ts +99 -0
  173. package/dist/handler/command-registration-readiness.d.ts.map +1 -0
  174. package/dist/handler/command-registration-readiness.js +120 -0
  175. package/dist/handler/command-registration-readiness.js.map +1 -0
  176. package/dist/handler/declared-rejections.d.ts +11 -0
  177. package/dist/handler/declared-rejections.d.ts.map +1 -0
  178. package/dist/handler/declared-rejections.js +34 -0
  179. package/dist/handler/declared-rejections.js.map +1 -0
  180. package/dist/handler/event-handler-filter.d.ts +43 -0
  181. package/dist/handler/event-handler-filter.d.ts.map +1 -0
  182. package/dist/handler/event-handler-filter.js +128 -0
  183. package/dist/handler/event-handler-filter.js.map +1 -0
  184. package/dist/handler/event-registration-readiness.d.ts +196 -0
  185. package/dist/handler/event-registration-readiness.d.ts.map +1 -0
  186. package/dist/handler/event-registration-readiness.js +187 -0
  187. package/dist/handler/event-registration-readiness.js.map +1 -0
  188. package/dist/handler/external.d.ts +10 -0
  189. package/dist/handler/external.d.ts.map +1 -0
  190. package/dist/handler/external.js +15 -0
  191. package/dist/handler/external.js.map +1 -0
  192. package/dist/handler/generated-handler-registry.d.ts +185 -0
  193. package/dist/handler/generated-handler-registry.d.ts.map +1 -0
  194. package/dist/handler/generated-handler-registry.js +439 -0
  195. package/dist/handler/generated-handler-registry.js.map +1 -0
  196. package/dist/handler/generated-registry-discovery.d.ts +94 -0
  197. package/dist/handler/generated-registry-discovery.d.ts.map +1 -0
  198. package/dist/handler/generated-registry-discovery.js +226 -0
  199. package/dist/handler/generated-registry-discovery.js.map +1 -0
  200. package/dist/handler/handler-decorators.d.ts +151 -0
  201. package/dist/handler/handler-decorators.d.ts.map +1 -0
  202. package/dist/handler/handler-decorators.js +275 -0
  203. package/dist/handler/handler-decorators.js.map +1 -0
  204. package/dist/handler/handler-metadata.d.ts +553 -0
  205. package/dist/handler/handler-metadata.d.ts.map +1 -0
  206. package/dist/handler/handler-metadata.js +437 -0
  207. package/dist/handler/handler-metadata.js.map +1 -0
  208. package/dist/handler/registration-readiness-metadata.d.ts +68 -0
  209. package/dist/handler/registration-readiness-metadata.d.ts.map +1 -0
  210. package/dist/handler/registration-readiness-metadata.js +171 -0
  211. package/dist/handler/registration-readiness-metadata.js.map +1 -0
  212. package/dist/handler/rejection-source.d.ts +11 -0
  213. package/dist/handler/rejection-source.d.ts.map +1 -0
  214. package/dist/handler/rejection-source.js +25 -0
  215. package/dist/handler/rejection-source.js.map +1 -0
  216. package/dist/handler/standalone.d.ts +25 -0
  217. package/dist/handler/standalone.d.ts.map +1 -0
  218. package/dist/handler/standalone.js +38 -0
  219. package/dist/handler/standalone.js.map +1 -0
  220. package/dist/index.d.ts +46 -0
  221. package/dist/index.d.ts.map +1 -0
  222. package/dist/index.js +54 -0
  223. package/dist/index.js.map +1 -0
  224. package/dist/integration/external-messages.d.ts +49 -0
  225. package/dist/integration/external-messages.d.ts.map +1 -0
  226. package/dist/integration/external-messages.js +112 -0
  227. package/dist/integration/external-messages.js.map +1 -0
  228. package/dist/integration/integration-broker.d.ts +74 -0
  229. package/dist/integration/integration-broker.d.ts.map +1 -0
  230. package/dist/integration/integration-broker.js +444 -0
  231. package/dist/integration/integration-broker.js.map +1 -0
  232. package/dist/integration/third-party-context.d.ts +56 -0
  233. package/dist/integration/third-party-context.d.ts.map +1 -0
  234. package/dist/integration/third-party-context.js +130 -0
  235. package/dist/integration/third-party-context.js.map +1 -0
  236. package/dist/repository/command-errors.d.ts +25 -0
  237. package/dist/repository/command-errors.d.ts.map +1 -0
  238. package/dist/repository/command-errors.js +43 -0
  239. package/dist/repository/command-errors.js.map +1 -0
  240. package/dist/repository/command-routing.d.ts +72 -0
  241. package/dist/repository/command-routing.d.ts.map +1 -0
  242. package/dist/repository/command-routing.js +98 -0
  243. package/dist/repository/command-routing.js.map +1 -0
  244. package/dist/repository/commit-fence.d.ts +22 -0
  245. package/dist/repository/commit-fence.d.ts.map +1 -0
  246. package/dist/repository/commit-fence.js +37 -0
  247. package/dist/repository/commit-fence.js.map +1 -0
  248. package/dist/repository/event-routing.d.ts +71 -0
  249. package/dist/repository/event-routing.d.ts.map +1 -0
  250. package/dist/repository/event-routing.js +96 -0
  251. package/dist/repository/event-routing.js.map +1 -0
  252. package/dist/repository/primitive-id.d.ts +75 -0
  253. package/dist/repository/primitive-id.d.ts.map +1 -0
  254. package/dist/repository/primitive-id.js +85 -0
  255. package/dist/repository/primitive-id.js.map +1 -0
  256. package/dist/repository/repository.d.ts +667 -0
  257. package/dist/repository/repository.d.ts.map +1 -0
  258. package/dist/repository/repository.js +3510 -0
  259. package/dist/repository/repository.js.map +1 -0
  260. package/dist/repository/routing-declarations.d.ts +75 -0
  261. package/dist/repository/routing-declarations.d.ts.map +1 -0
  262. package/dist/repository/routing-declarations.js +101 -0
  263. package/dist/repository/routing-declarations.js.map +1 -0
  264. package/dist/repository/state-update-routing.d.ts +66 -0
  265. package/dist/repository/state-update-routing.d.ts.map +1 -0
  266. package/dist/repository/state-update-routing.js +91 -0
  267. package/dist/repository/state-update-routing.js.map +1 -0
  268. package/dist/runtime/runtime.d.ts +156 -0
  269. package/dist/runtime/runtime.d.ts.map +1 -0
  270. package/dist/runtime/runtime.js +215 -0
  271. package/dist/runtime/runtime.js.map +1 -0
  272. package/dist/runtime/signal-intake.d.ts +84 -0
  273. package/dist/runtime/signal-intake.d.ts.map +1 -0
  274. package/dist/runtime/signal-intake.js +94 -0
  275. package/dist/runtime/signal-intake.js.map +1 -0
  276. package/dist/runtime/signal-metadata.d.ts +217 -0
  277. package/dist/runtime/signal-metadata.d.ts.map +1 -0
  278. package/dist/runtime/signal-metadata.js +333 -0
  279. package/dist/runtime/signal-metadata.js.map +1 -0
  280. package/dist/runtime/signal-publisher.d.ts +144 -0
  281. package/dist/runtime/signal-publisher.d.ts.map +1 -0
  282. package/dist/runtime/signal-publisher.js +248 -0
  283. package/dist/runtime/signal-publisher.js.map +1 -0
  284. package/dist/runtime/standalone-handler-runtime.d.ts +114 -0
  285. package/dist/runtime/standalone-handler-runtime.d.ts.map +1 -0
  286. package/dist/runtime/standalone-handler-runtime.js +307 -0
  287. package/dist/runtime/standalone-handler-runtime.js.map +1 -0
  288. package/dist/server/environment-attachment.d.ts +356 -0
  289. package/dist/server/environment-attachment.d.ts.map +1 -0
  290. package/dist/server/environment-attachment.js +2062 -0
  291. package/dist/server/environment-attachment.js.map +1 -0
  292. package/dist/server/environment-delivery-records.d.ts +77 -0
  293. package/dist/server/environment-delivery-records.d.ts.map +1 -0
  294. package/dist/server/environment-delivery-records.js +282 -0
  295. package/dist/server/environment-delivery-records.js.map +1 -0
  296. package/dist/server/environment-delivery-worker.d.ts +161 -0
  297. package/dist/server/environment-delivery-worker.d.ts.map +1 -0
  298. package/dist/server/environment-delivery-worker.js +673 -0
  299. package/dist/server/environment-delivery-worker.js.map +1 -0
  300. package/dist/server/environment.d.ts +43 -0
  301. package/dist/server/environment.d.ts.map +1 -0
  302. package/dist/server/environment.js +90 -0
  303. package/dist/server/environment.js.map +1 -0
  304. package/dist/server/managed-child-subscription.d.ts +11 -0
  305. package/dist/server/managed-child-subscription.d.ts.map +1 -0
  306. package/dist/server/managed-child-subscription.js +44 -0
  307. package/dist/server/managed-child-subscription.js.map +1 -0
  308. package/dist/server/managed-server-application.d.ts +327 -0
  309. package/dist/server/managed-server-application.d.ts.map +1 -0
  310. package/dist/server/managed-server-application.js +937 -0
  311. package/dist/server/managed-server-application.js.map +1 -0
  312. package/dist/server/node-coordinator.d.ts +191 -0
  313. package/dist/server/node-coordinator.d.ts.map +1 -0
  314. package/dist/server/node-coordinator.js +552 -0
  315. package/dist/server/node-coordinator.js.map +1 -0
  316. package/dist/server/process-server-coordinator.d.ts +15 -0
  317. package/dist/server/process-server-coordinator.d.ts.map +1 -0
  318. package/dist/server/process-server-coordinator.js +112 -0
  319. package/dist/server/process-server-coordinator.js.map +1 -0
  320. package/dist/server/reserved-spine-rpc-paths.json +8 -0
  321. package/dist/server/retryable-close.d.ts +28 -0
  322. package/dist/server/retryable-close.d.ts.map +1 -0
  323. package/dist/server/retryable-close.js +129 -0
  324. package/dist/server/retryable-close.js.map +1 -0
  325. package/dist/server/server-environment.d.ts +180 -0
  326. package/dist/server/server-environment.d.ts.map +1 -0
  327. package/dist/server/server-environment.js +418 -0
  328. package/dist/server/server-environment.js.map +1 -0
  329. package/dist/server/server-log.d.ts +18 -0
  330. package/dist/server/server-log.d.ts.map +1 -0
  331. package/dist/server/server-log.js +100 -0
  332. package/dist/server/server-log.js.map +1 -0
  333. package/dist/server/server.d.ts +221 -0
  334. package/dist/server/server.d.ts.map +1 -0
  335. package/dist/server/server.js +704 -0
  336. package/dist/server/server.js.map +1 -0
  337. package/dist/services/query-reader.d.ts +19 -0
  338. package/dist/services/query-reader.d.ts.map +1 -0
  339. package/dist/services/query-reader.js +43 -0
  340. package/dist/services/query-reader.js.map +1 -0
  341. package/dist/services/spine-services.d.ts +88 -0
  342. package/dist/services/spine-services.d.ts.map +1 -0
  343. package/dist/services/spine-services.js +1582 -0
  344. package/dist/services/spine-services.js.map +1 -0
  345. package/dist/spi/delivery.d.ts +5 -0
  346. package/dist/spi/delivery.d.ts.map +1 -0
  347. package/dist/spi/delivery.js +18 -0
  348. package/dist/spi/delivery.js.map +1 -0
  349. package/dist/spi/handler-registry.d.ts +8 -0
  350. package/dist/spi/handler-registry.d.ts.map +1 -0
  351. package/dist/spi/handler-registry.js +15 -0
  352. package/dist/spi/handler-registry.js.map +1 -0
  353. package/dist/stand/stand.d.ts +294 -0
  354. package/dist/stand/stand.d.ts.map +1 -0
  355. package/dist/stand/stand.js +681 -0
  356. package/dist/stand/stand.js.map +1 -0
  357. package/dist/stand/subscription-observer.d.ts +53 -0
  358. package/dist/stand/subscription-observer.d.ts.map +1 -0
  359. package/dist/stand/subscription-observer.js +444 -0
  360. package/dist/stand/subscription-observer.js.map +1 -0
  361. package/dist/stand/subscription-records.d.ts +12 -0
  362. package/dist/stand/subscription-records.d.ts.map +1 -0
  363. package/dist/stand/subscription-records.js +99 -0
  364. package/dist/stand/subscription-records.js.map +1 -0
  365. package/dist/stand/subscription-registry.d.ts +285 -0
  366. package/dist/stand/subscription-registry.d.ts.map +1 -0
  367. package/dist/stand/subscription-registry.js +403 -0
  368. package/dist/stand/subscription-registry.js.map +1 -0
  369. package/dist/stand/subscription-runtime.d.ts +102 -0
  370. package/dist/stand/subscription-runtime.d.ts.map +1 -0
  371. package/dist/stand/subscription-runtime.js +380 -0
  372. package/dist/stand/subscription-runtime.js.map +1 -0
  373. package/dist/testing/index.d.ts +36 -0
  374. package/dist/testing/index.d.ts.map +1 -0
  375. package/dist/testing/index.js +54 -0
  376. package/dist/testing/index.js.map +1 -0
  377. package/dist/tsconfig.tsbuildinfo +1 -0
  378. package/package.json +76 -0
@@ -0,0 +1,673 @@
1
+ /*
2
+ * Copyright 2026, CodeMatters. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5
+ * in compliance with the License. You may obtain a copy of the License at
6
+ *
7
+ * https://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
10
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11
+ * or implied. See the License for the specific language governing permissions and limitations under
12
+ * the License.
13
+ */
14
+ var _a;
15
+ import {} from "@spine-event-engine/storage";
16
+ import { TenantBoundary } from "@spine-event-engine/storage/provider";
17
+ import { fromBinary } from "@bufbuild/protobuf";
18
+ import { CommandSchema, EventSchema } from "@spine-event-engine/proto";
19
+ import { deliveryRunWorkers, } from "../delivery/delivery-run-coordinator.js";
20
+ import { DeliveryBuilder, UniformAcrossAllShards } from "../delivery/delivery-builder.js";
21
+ import { Delivery, } from "../delivery/delivery.js";
22
+ import { DeliverySupervisor, deliverySupervisorAccess, } from "../delivery/delivery-supervisor.js";
23
+ import { DeliveryWorker } from "../delivery/delivery-worker.js";
24
+ import { ShardIndex } from "../delivery/shard-index.js";
25
+ const managedChild = process.env.SPINE_MANAGED_SERVER_CHILD === "true";
26
+ let cancelManagedDelivery = false;
27
+ let managedDeliveryActivated = !managedChild;
28
+ const waitingManagedSupervisors = new Set();
29
+ /**
30
+ * Controls private managed-child Delivery admission.
31
+ *
32
+ * @internal
33
+ */
34
+ export const environmentDeliveryWorkerAccess = Object.freeze({
35
+ activateManagedChild() {
36
+ managedDeliveryActivated = true;
37
+ for (const start of waitingManagedSupervisors)
38
+ start();
39
+ waitingManagedSupervisors.clear();
40
+ },
41
+ cancelManagedChild() {
42
+ cancelManagedDelivery = true;
43
+ waitingManagedSupervisors.clear();
44
+ },
45
+ });
46
+ /**
47
+ * Routes each owner-partitioned obligation to its exact runtime worker.
48
+ *
49
+ * @internal
50
+ */
51
+ export class EnvironmentDeliveryWorker {
52
+ #workers = new Map();
53
+ #supervisor;
54
+ #stoppedWorkers = new Set();
55
+ #stoppedSupervisors = new Set();
56
+ #stoppedOwners = new Set();
57
+ #createWorker;
58
+ #nodeId;
59
+ #ports;
60
+ /**
61
+ * Creates an environment delivery worker.
62
+ *
63
+ * @param options Optionally supplies a worker factory for lifecycle tests.
64
+ */
65
+ constructor(options = {}) {
66
+ this.#createWorker = options.createWorker ?? EnvironmentDeliveryValues.createWorker;
67
+ this.#ports = options.ports;
68
+ this.#nodeId = options.nodeId;
69
+ this.#supervisor = new RuntimeDeliverySupervisor(this.#ports, this.#nodeId);
70
+ }
71
+ /**
72
+ * Adds one owner-specific delivery runtime.
73
+ * @param runtime Supplies the runtime to configure.
74
+ */
75
+ add(runtime) {
76
+ if (this.#workers.has(runtime.owner.key)) {
77
+ throw new Error("Environment delivery owner is already configured.");
78
+ }
79
+ const worker = this.#createWorker(runtime, this.#ports, this.#nodeId);
80
+ this.#workers.set(runtime.owner.key, worker);
81
+ try {
82
+ this.#supervisor.add(runtime);
83
+ }
84
+ catch (error) {
85
+ this.#workers.delete(runtime.owner.key);
86
+ throw error;
87
+ }
88
+ void this.#supervisor.start();
89
+ }
90
+ /**
91
+ * Starts selected shards for one owner-specific obligation.
92
+ *
93
+ * @param obligation Supplies the finite delivery obligation.
94
+ * @param shards Selects shards to run.
95
+ * @returns Evidence produced by the worker.
96
+ */
97
+ start(obligation, shards) {
98
+ const owner = EnvironmentDeliveryValues.soleOwner(obligation.scopes);
99
+ const worker = this.#workers.get(owner.key);
100
+ if (worker === undefined) {
101
+ return Promise.reject(new Error("Environment delivery owner is not configured."));
102
+ }
103
+ return worker.start(obligation, shards).then(async (evidence) => {
104
+ await this.#supervisor.start();
105
+ return evidence;
106
+ });
107
+ }
108
+ /**
109
+ * Notifies a running supervisor about new work.
110
+ * @param scope Identifies the changed scope.
111
+ */
112
+ notify(scope) {
113
+ this.#requiredWorker(scope.owner.key);
114
+ this.#supervisor.notify(scope.owner.key, scope.ready.shard);
115
+ }
116
+ /**
117
+ * Stops every configured owner and aggregates failures.
118
+ */
119
+ stop() {
120
+ const failures = [];
121
+ for (const [key, worker] of this.#workers) {
122
+ if (this.#stoppedOwners.has(key)) {
123
+ continue;
124
+ }
125
+ this.#stopOwner(key, worker, failures);
126
+ }
127
+ try {
128
+ this.#supervisor.stop();
129
+ }
130
+ catch (error) {
131
+ failures.push(error);
132
+ }
133
+ EnvironmentDeliveryValues.throwFailures(failures, "Environment delivery worker stop failed.");
134
+ }
135
+ /**
136
+ * Awaits every configured worker and supervisor.
137
+ *
138
+ * @returns A promise that resolves after all configured work settles.
139
+ */
140
+ async awaitSettled() {
141
+ await Promise.all([
142
+ ...Array.from(this.#workers.values(), (worker) => worker.awaitSettled()),
143
+ this.#supervisor.awaitSettled(),
144
+ ]);
145
+ }
146
+ /**
147
+ * Closes every configured worker and supervisor.
148
+ *
149
+ * @returns A promise that settles after all configured resources retire.
150
+ */
151
+ async retire() {
152
+ const settled = await Promise.allSettled([
153
+ ...Array.from(this.#workers.values(), (worker) => EnvironmentDeliveryValues.attempt(() => worker.retire())),
154
+ EnvironmentDeliveryValues.attempt(() => this.#supervisor.retire()),
155
+ ]);
156
+ const failures = [];
157
+ for (const result of settled) {
158
+ if (result.status === "rejected") {
159
+ failures.push(result.reason);
160
+ }
161
+ }
162
+ EnvironmentDeliveryValues.throwFailures(failures, "Environment delivery worker retirement failed.");
163
+ }
164
+ /**
165
+ * Stops selected owners and aggregates failures.
166
+ * @param ownerKeys Identifies owners to stop.
167
+ */
168
+ stopOwners(ownerKeys) {
169
+ const selected = ownerKeys.map((key) => {
170
+ const worker = this.#workers.get(key);
171
+ if (worker === undefined) {
172
+ throw new Error("Environment delivery owner is not configured.");
173
+ }
174
+ return { key, worker };
175
+ });
176
+ const failures = [];
177
+ this.#supervisor.fenceOwners(ownerKeys);
178
+ for (const { key, worker } of selected) {
179
+ if (this.#stoppedOwners.has(key)) {
180
+ continue;
181
+ }
182
+ this.#stopOwner(key, worker, failures);
183
+ }
184
+ EnvironmentDeliveryValues.throwFailures(failures, "Environment registration worker stop failed.");
185
+ }
186
+ /**
187
+ * Awaits selected owners.
188
+ *
189
+ * @param ownerKeys Identifies owners to await.
190
+ * @returns A promise that resolves after selected owner work settles.
191
+ */
192
+ async awaitOwnersSettled(ownerKeys) {
193
+ await Promise.all([
194
+ ...ownerKeys.map((key) => this.#requiredWorker(key).awaitSettled()),
195
+ this.#supervisor.awaitOwnersSettled(ownerKeys),
196
+ ]);
197
+ }
198
+ /**
199
+ * Closes selected owners and releases local state.
200
+ *
201
+ * @param ownerKeys Identifies owners to retire.
202
+ * @returns A promise that settles after selected owners retire.
203
+ */
204
+ async retireOwners(ownerKeys) {
205
+ const selected = ownerKeys.map((key) => ({ key, worker: this.#requiredWorker(key) }));
206
+ const retired = await Promise.allSettled(selected.map(({ worker }) => EnvironmentDeliveryValues.attempt(() => worker.retire())));
207
+ await this.#supervisor.retireOwners(ownerKeys);
208
+ for (const { key } of selected) {
209
+ this.#workers.delete(key);
210
+ this.#stoppedWorkers.delete(key);
211
+ this.#stoppedSupervisors.delete(key);
212
+ this.#stoppedOwners.delete(key);
213
+ }
214
+ const failures = retired.flatMap((result) => result.status === "rejected" ? [result.reason] : []);
215
+ EnvironmentDeliveryValues.throwFailures(failures, "Environment registration worker retirement failed.");
216
+ }
217
+ #requiredWorker(key) {
218
+ const worker = this.#workers.get(key);
219
+ if (worker === undefined) {
220
+ throw new Error("Environment delivery owner is not configured.");
221
+ }
222
+ return worker;
223
+ }
224
+ #stopOwner(key, worker, failures) {
225
+ if (!this.#stoppedWorkers.has(key)) {
226
+ try {
227
+ worker.stop();
228
+ this.#stoppedWorkers.add(key);
229
+ }
230
+ catch (error) {
231
+ failures.push(error);
232
+ }
233
+ }
234
+ if (!this.#stoppedSupervisors.has(key)) {
235
+ this.#stoppedSupervisors.add(key);
236
+ }
237
+ if (this.#stoppedWorkers.has(key) && this.#stoppedSupervisors.has(key)) {
238
+ this.#stoppedOwners.add(key);
239
+ }
240
+ }
241
+ }
242
+ class RuntimeDeliverySupervisor {
243
+ #groups = new Map();
244
+ #ports;
245
+ #nodeId;
246
+ constructor(ports, nodeId) {
247
+ this.#ports = ports;
248
+ this.#nodeId = nodeId;
249
+ }
250
+ add(runtime) {
251
+ const grouped = new Map();
252
+ for (const shard of EnvironmentDeliveryValues.uniqueShards(runtime.scopes)) {
253
+ const shards = grouped.get(shard.ofTotal) ?? [];
254
+ shards.push(shard);
255
+ grouped.set(shard.ofTotal, shards);
256
+ }
257
+ if (grouped.size === 0) {
258
+ throw new Error("Environment delivery supervisor requires at least one shard.");
259
+ }
260
+ for (const [shardCount, shards] of grouped) {
261
+ const key = this.#groupKey(runtime.owner.key, shardCount);
262
+ let group = this.#groups.get(key);
263
+ if (group === undefined) {
264
+ group = EnvironmentDeliveryValues.createSupervisorGroup(runtime, shards, this.#ports, this.#nodeId);
265
+ this.#groups.set(key, group);
266
+ }
267
+ group.add(runtime.owner.key, runtime, shards);
268
+ }
269
+ }
270
+ remove(ownerKey) {
271
+ for (const group of this.#groups.values())
272
+ group.remove(ownerKey);
273
+ }
274
+ async start() {
275
+ if (!managedDeliveryActivated) {
276
+ waitingManagedSupervisors.add(() => {
277
+ void this.start();
278
+ });
279
+ return;
280
+ }
281
+ if (cancelManagedDelivery)
282
+ return;
283
+ await Promise.all(Array.from(this.#groups.values(), (group) => group.start()));
284
+ }
285
+ notify(ownerKey, shard) {
286
+ this.#groups.get(this.#groupKey(ownerKey, shard.ofTotal))?.notify(shard);
287
+ }
288
+ fenceOwners(ownerKeys) {
289
+ for (const group of this.#groups.values())
290
+ group.fenceOwners(ownerKeys);
291
+ }
292
+ async awaitOwnersSettled(ownerKeys) {
293
+ await Promise.all(Array.from(this.#groups.values(), (group) => group.awaitOwnersSettled(ownerKeys)));
294
+ }
295
+ async retireOwners(ownerKeys) {
296
+ for (const [key, group] of this.#groups) {
297
+ await group.retireOwners(ownerKeys);
298
+ if (group.empty)
299
+ this.#groups.delete(key);
300
+ }
301
+ }
302
+ stop() {
303
+ const failures = [];
304
+ for (const group of this.#groups.values()) {
305
+ try {
306
+ group.stop();
307
+ }
308
+ catch (error) {
309
+ failures.push(error);
310
+ }
311
+ }
312
+ EnvironmentDeliveryValues.throwFailures(failures, "Environment delivery supervisor stop failed.");
313
+ }
314
+ async awaitSettled() {
315
+ const settled = await Promise.allSettled(Array.from(this.#groups.values(), (group) => group.awaitSettled()));
316
+ EnvironmentDeliveryValues.throwFailures(settled.flatMap((result) => (result.status === "rejected" ? [result.reason] : [])), "Environment delivery supervisor settlement failed.");
317
+ }
318
+ async retire() {
319
+ const settled = await Promise.allSettled(Array.from(this.#groups.values(), (group) => EnvironmentDeliveryValues.attempt(() => group.retire())));
320
+ EnvironmentDeliveryValues.throwFailures(settled.flatMap((result) => (result.status === "rejected" ? [result.reason] : [])), "Environment delivery supervisor retirement failed.");
321
+ }
322
+ #groupKey(ownerKey, shardCount) {
323
+ return this.#ports?.source === undefined
324
+ ? `${ownerKey}/${String(shardCount)}`
325
+ : `remote/${String(shardCount)}`;
326
+ }
327
+ }
328
+ class RuntimeDeliverySupervisorGroup {
329
+ #source;
330
+ #supervisor;
331
+ #routes = new Map();
332
+ #retiringOwners = new Set();
333
+ #active = new Map();
334
+ #reserved;
335
+ shardCount;
336
+ #start;
337
+ #stopped = false;
338
+ #close;
339
+ constructor(options) {
340
+ // `createSupervisorGroup()` rejects an empty shard collection before internal construction.
341
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
342
+ const first = options.shards[0];
343
+ this.shardCount = first.ofTotal;
344
+ this.#reserved = new Map(options.shards.map((shard) => [shard.key(), new Map()]));
345
+ this.#source =
346
+ options.source === undefined
347
+ ? new LocalDeliverySource(options.shards)
348
+ : EnvironmentDeliveryValues.requireSource(options.source);
349
+ this.#supervisor = new DeliverySupervisor({
350
+ source: this.#source,
351
+ delivery: options.delivery,
352
+ onMessage: (message) => this.#route(message),
353
+ });
354
+ deliverySupervisorAccess.installAdmission(this.#supervisor, (message) => this.#accept(message));
355
+ deliverySupervisorAccess.installFinalization(this.#supervisor, (shard) => {
356
+ this.#releaseUndeliveredReservations(shard);
357
+ });
358
+ if (options.logger !== undefined) {
359
+ deliverySupervisorAccess.installLogger(this.#supervisor, options.logger);
360
+ }
361
+ }
362
+ add(ownerKey, runtime, shards) {
363
+ if (this.#source instanceof LocalDeliverySource)
364
+ this.#source.add(shards);
365
+ for (const scope of runtime.scopes) {
366
+ if (scope.ready.shard.ofTotal !== this.shardCount)
367
+ continue;
368
+ const key = _a.key(scope.ready);
369
+ const routes = this.#routes.get(key) ?? [];
370
+ routes.push({
371
+ ownerKey,
372
+ descriptor: runtime.descriptor,
373
+ tenant: runtime.tenant,
374
+ tenantKey: runtime.tenant.tenantId === undefined
375
+ ? undefined
376
+ : String(TenantBoundary.from(runtime.tenant.tenantId).key),
377
+ });
378
+ this.#routes.set(key, routes);
379
+ }
380
+ }
381
+ get empty() {
382
+ return this.#routes.size === 0;
383
+ }
384
+ fenceOwners(ownerKeys) {
385
+ for (const ownerKey of ownerKeys)
386
+ this.#retiringOwners.add(ownerKey);
387
+ }
388
+ async awaitOwnersSettled(ownerKeys) {
389
+ await Promise.all(Array.from(this.#reserved.values(), async (reservations) => Promise.all(Array.from(reservations.values())
390
+ .filter((reservation) => ownerKeys.includes(reservation.route.ownerKey))
391
+ .map((reservation) => reservation.settled.promise))));
392
+ await Promise.all(ownerKeys.map(async (ownerKey) => {
393
+ const active = this.#active.get(ownerKey);
394
+ if (active !== undefined)
395
+ await Promise.allSettled(active);
396
+ }));
397
+ }
398
+ async retireOwners(ownerKeys) {
399
+ this.fenceOwners(ownerKeys);
400
+ await this.awaitOwnersSettled(ownerKeys);
401
+ for (const ownerKey of ownerKeys)
402
+ this.remove(ownerKey);
403
+ if (this.empty)
404
+ await this.retire();
405
+ }
406
+ remove(ownerKey) {
407
+ for (const [key, routes] of this.#routes) {
408
+ const retained = routes.filter((route) => route.ownerKey !== ownerKey);
409
+ if (retained.length === 0)
410
+ this.#routes.delete(key);
411
+ else
412
+ this.#routes.set(key, retained);
413
+ }
414
+ }
415
+ start() {
416
+ if (this.#stopped) {
417
+ return Promise.reject(new Error("Environment delivery supervisor is stopped."));
418
+ }
419
+ if (this.#start === undefined) {
420
+ this.#start = this.#supervisor.start().then(() => {
421
+ if (this.#source instanceof LocalDeliverySource)
422
+ this.#source.enableRecovery();
423
+ });
424
+ }
425
+ return this.#start;
426
+ }
427
+ notify(shard) {
428
+ if (this.#stopped)
429
+ return;
430
+ // spine-log-boundary: server.delivery_notify_start
431
+ void this.start()
432
+ .then(() => {
433
+ this.#supervisor.notify(shard);
434
+ })
435
+ .catch(() => undefined);
436
+ }
437
+ stop() {
438
+ if (this.#stopped)
439
+ return;
440
+ this.#stopped = true;
441
+ this.#close = this.#supervisor.close();
442
+ // spine-log-boundary: server.delivery_supervisor_close
443
+ void this.#close.catch(() => undefined);
444
+ }
445
+ async awaitSettled() {
446
+ await this.#start;
447
+ await this.#close;
448
+ }
449
+ async retire() {
450
+ this.stop();
451
+ await this.awaitSettled();
452
+ }
453
+ #accept(message) {
454
+ const route = this.#select(message);
455
+ if (route !== undefined) {
456
+ // `options.shards` initializes one private reservation map per supervised shard.
457
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
458
+ const reservations = this.#reserved.get(message.shard.key());
459
+ reservations.set(_a.messageKey(message), {
460
+ route,
461
+ settled: Promise.withResolvers(),
462
+ });
463
+ }
464
+ return route !== undefined;
465
+ }
466
+ #route(message) {
467
+ const key = _a.messageKey(message);
468
+ // `Delivery` invokes the callback only after this group's admission reserved its route.
469
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
470
+ const reservations = this.#reserved.get(message.shard.key());
471
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
472
+ const reservation = reservations.get(key);
473
+ const route = reservation.route;
474
+ const active = this.#active.get(route.ownerKey) ?? new Set();
475
+ this.#active.set(route.ownerKey, active);
476
+ const replay = Promise.resolve()
477
+ .then(() => route.descriptor.replay(message, route.tenant.tenantId))
478
+ .finally(() => {
479
+ active.delete(replay);
480
+ if (active.size === 0)
481
+ this.#active.delete(route.ownerKey);
482
+ });
483
+ active.add(replay);
484
+ reservations.delete(key);
485
+ reservation.settled.resolve(undefined);
486
+ return replay;
487
+ }
488
+ #releaseUndeliveredReservations(shard) {
489
+ // `options.shards` initializes one private reservation map per supervised shard.
490
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
491
+ const reservations = this.#reserved.get(shard.key());
492
+ for (const reservation of reservations.values()) {
493
+ reservation.settled.resolve(undefined);
494
+ }
495
+ reservations.clear();
496
+ }
497
+ #select(message) {
498
+ const key = _a.key(message);
499
+ const routes = this.#routes.get(key);
500
+ const route = _a.select(routes, message);
501
+ return route === undefined || this.#retiringOwners.has(route.ownerKey) ? undefined : route;
502
+ }
503
+ static select(routes, message) {
504
+ if (routes === undefined || routes.length === 0)
505
+ return undefined;
506
+ const tenantKey = _a.tenantKey(message);
507
+ return routes.find((route) => route.tenantKey === tenantKey);
508
+ }
509
+ /**
510
+ *
511
+ * Derives a tenant boundary key from the delivery label's matching envelope.
512
+ * `HANDLE_COMMAND` reads the Command actor tenant; Event labels read imported
513
+ * or past-message Event origin tenants.
514
+ *
515
+ * @param message Contains the admitted delivery message.
516
+ * @returns The tenant boundary key when the supported envelope carries one.
517
+ */
518
+ static tenantKey(message) {
519
+ if (message.signal === undefined)
520
+ return undefined;
521
+ try {
522
+ if (message.label === "HANDLE_COMMAND") {
523
+ const tenantId = fromBinary(CommandSchema, message.signal.value).context?.actorContext
524
+ ?.tenantId;
525
+ return tenantId === undefined ? undefined : String(TenantBoundary.from(tenantId).key);
526
+ }
527
+ const origin = fromBinary(EventSchema, message.signal.value).context?.origin;
528
+ if (origin?.case === "importContext") {
529
+ const value = origin.value.tenantId;
530
+ return value === undefined ? undefined : String(TenantBoundary.from(value).key);
531
+ }
532
+ if (origin?.case === "pastMessage") {
533
+ const value = origin.value.actorContext?.tenantId;
534
+ return value === undefined ? undefined : String(TenantBoundary.from(value).key);
535
+ }
536
+ }
537
+ catch {
538
+ return undefined;
539
+ }
540
+ return undefined;
541
+ }
542
+ static key(route) {
543
+ const targetTypeUrl = route.inboxId?.targetTypeUrl ?? route.targetTypeUrl;
544
+ if (targetTypeUrl === undefined)
545
+ throw new Error("Environment delivery route has no target type.");
546
+ return JSON.stringify([route.label, targetTypeUrl, route.shard.index, route.shard.ofTotal]);
547
+ }
548
+ static messageKey(message) {
549
+ return `${message.signalId}/${_a.key(message)}`;
550
+ }
551
+ }
552
+ _a = RuntimeDeliverySupervisorGroup;
553
+ class LocalDeliverySource {
554
+ #shards = new Map();
555
+ #recoveryEnabled = false;
556
+ constructor(shards) {
557
+ this.add(shards);
558
+ }
559
+ add(shards) {
560
+ for (const shard of shards)
561
+ this.#shards.set(shard.key(), shard);
562
+ }
563
+ enableRecovery() {
564
+ this.#recoveryEnabled = true;
565
+ }
566
+ shardSnapshot() {
567
+ return Promise.resolve(this.#recoveryEnabled
568
+ ? Array.from(this.#shards.values(), (shard) => ({
569
+ shard,
570
+ status: "NOT_PICKED",
571
+ messages: 1,
572
+ }))
573
+ : []);
574
+ }
575
+ observeShardUpdates(options) {
576
+ return EnvironmentDeliveryValues.updatesUntilAborted(options?.signal);
577
+ }
578
+ releaseExpired() {
579
+ return Promise.resolve([]);
580
+ }
581
+ }
582
+ /**
583
+ *
584
+ * @internal Groups private delivery-runtime assembly and failure operations.
585
+ */
586
+ const EnvironmentDeliveryValues = Object.freeze({
587
+ requireSource(source) {
588
+ if (source === null ||
589
+ typeof source !== "object" ||
590
+ typeof source.shardSnapshot !== "function" ||
591
+ typeof source.observeShardUpdates !== "function" ||
592
+ typeof source.releaseExpired !== "function") {
593
+ throw new TypeError("Environment delivery source is invalid.");
594
+ }
595
+ return source;
596
+ },
597
+ createWorker(runtime, ports, nodeId) {
598
+ const delivery = new Delivery({
599
+ context: runtime.context,
600
+ storageFactory: runtime.storageFactory,
601
+ node: nodeId ?? runtime.context.name,
602
+ ...(ports ?? {}),
603
+ });
604
+ const worker = new DeliveryWorker({
605
+ delivery,
606
+ shards: EnvironmentDeliveryValues.uniqueShards(runtime.scopes),
607
+ onMessage: (message) => runtime.descriptor.replay(message, runtime.tenant.tenantId),
608
+ });
609
+ return deliveryRunWorkers.worker(worker);
610
+ },
611
+ createSupervisorGroup(runtime, shards, ports, nodeId) {
612
+ const first = shards[0];
613
+ if (first === undefined) {
614
+ throw new Error("Environment delivery supervisor requires at least one shard.");
615
+ }
616
+ const builder = new DeliveryBuilder()
617
+ .withContext(runtime.context)
618
+ .withStorageFactory(runtime.storageFactory)
619
+ .withStrategy(UniformAcrossAllShards.forNumber(first.ofTotal))
620
+ .withNode(nodeId ?? runtime.context.name);
621
+ if (ports !== undefined)
622
+ builder.withInbox(ports.inbox).withWorkRegistry(ports.workRegistry);
623
+ return new RuntimeDeliverySupervisorGroup({
624
+ delivery: builder.build(),
625
+ shards,
626
+ ...(ports?.source === undefined ? {} : { source: ports.source }),
627
+ ...(runtime.logger === undefined ? {} : { logger: runtime.logger }),
628
+ });
629
+ },
630
+ updatesUntilAborted(signal) {
631
+ return {
632
+ [Symbol.asyncIterator]() {
633
+ return {
634
+ next: () => new Promise((resolve) => {
635
+ if (signal?.aborted) {
636
+ resolve({ done: true, value: undefined });
637
+ return;
638
+ }
639
+ signal?.addEventListener("abort", () => {
640
+ resolve({ done: true, value: undefined });
641
+ }, { once: true });
642
+ }),
643
+ };
644
+ },
645
+ };
646
+ },
647
+ soleOwner(scopes) {
648
+ const first = scopes[0]?.owner;
649
+ if (first === undefined || scopes.some(({ owner }) => owner.key !== first.key)) {
650
+ throw new Error("Environment delivery obligation requires exactly one owner.");
651
+ }
652
+ return first;
653
+ },
654
+ uniqueShards(scopes) {
655
+ const shards = new Map();
656
+ for (const { ready } of scopes) {
657
+ shards.set(ready.shard.key(), ready.shard);
658
+ }
659
+ return Object.freeze([...shards.values()]);
660
+ },
661
+ throwFailures(failures, message) {
662
+ if (failures.length === 1) {
663
+ throw failures[0];
664
+ }
665
+ if (failures.length > 1) {
666
+ throw new AggregateError(failures, message);
667
+ }
668
+ },
669
+ async attempt(action) {
670
+ await action();
671
+ },
672
+ });
673
+ //# sourceMappingURL=environment-delivery-worker.js.map