@zlink-systems/framework 0.30.1 → 0.30.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 (340) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +6 -0
  3. package/dist/contracts/Common/ZLinkEncodedPayload.js +18 -3
  4. package/dist/contracts/Common/encoded-payload-storage.d.ts +1 -1
  5. package/dist/contracts/Common/encoded-payload-storage.js +5 -2
  6. package/dist/contracts/Configuration/Builders.d.ts +1 -1
  7. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +2 -1
  8. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +5 -1
  9. package/dist/contracts/Configuration/RegistrationBuilders.js +2 -2
  10. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
  11. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +2 -2
  12. package/dist/contracts/Locations/Rows.d.ts +2 -0
  13. package/dist/contracts/Spots/Contracts.d.ts +4 -0
  14. package/dist/contracts/Spots/ZLinkSpot.d.ts +3 -3
  15. package/dist/runtime/abort.d.ts +5 -0
  16. package/dist/runtime/abort.js +10 -0
  17. package/dist/runtime/actors/actor-authority-publication.js +3 -2
  18. package/dist/runtime/actors/actor-client.d.ts +0 -1
  19. package/dist/runtime/actors/actor-client.js +38 -45
  20. package/dist/runtime/actors/actor-context.d.ts +2 -0
  21. package/dist/runtime/actors/actor-context.js +46 -9
  22. package/dist/runtime/actors/actor-handoff.d.ts +7 -3
  23. package/dist/runtime/actors/actor-handoff.js +212 -88
  24. package/dist/runtime/actors/actor-join-relocation.d.ts +2 -0
  25. package/dist/runtime/actors/actor-local-native-join.js +4 -0
  26. package/dist/runtime/actors/actor-mailbox.js +27 -1
  27. package/dist/runtime/actors/actor-remote-joiner.js +3 -1
  28. package/dist/runtime/actors/actor-reply.d.ts +4 -0
  29. package/dist/runtime/actors/actor-reply.js +29 -0
  30. package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -0
  31. package/dist/runtime/actors/actor-runtime-state.js +2 -20
  32. package/dist/runtime/actors/actor-source-transfer.d.ts +1 -17
  33. package/dist/runtime/actors/index.d.ts +6 -2
  34. package/dist/runtime/actors/index.js +37 -21
  35. package/dist/runtime/actors/session-disconnected-wire.d.ts +8 -0
  36. package/dist/runtime/actors/session-disconnected-wire.js +48 -0
  37. package/dist/runtime/admission.d.ts +9 -1
  38. package/dist/runtime/admission.js +55 -32
  39. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +13 -0
  40. package/dist/runtime/application-jobs/application-job-queue-scope.js +27 -1
  41. package/dist/runtime/application-jobs/contracts.d.ts +2 -0
  42. package/dist/runtime/backend/contracts/index.d.ts +19 -3
  43. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +2 -2
  44. package/dist/runtime/backend/mesh-completion-table.js +5 -0
  45. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +26 -2
  46. package/dist/runtime/backend/mesh-dispatch-pump.js +193 -107
  47. package/dist/runtime/backend/node/node-raw-binding-port.js +90 -58
  48. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +33 -8
  49. package/dist/runtime/backend/node/node-raw-mesh-backend.js +142 -143
  50. package/dist/runtime/backend/node/node-socket-backend-adapter.d.ts +1 -1
  51. package/dist/runtime/backend/node/node-socket-backend-adapter.js +5 -5
  52. package/dist/runtime/channels/channel-clients.d.ts +1 -0
  53. package/dist/runtime/channels/channel-clients.js +20 -5
  54. package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +22 -3
  55. package/dist/runtime/channels/channel-dispatch-pipeline.js +103 -57
  56. package/dist/runtime/channels/channel-dispatchers.d.ts +3 -2
  57. package/dist/runtime/channels/channel-dispatchers.js +44 -37
  58. package/dist/runtime/channels/channel-envelope.d.ts +1 -0
  59. package/dist/runtime/channels/channel-envelope.js +74 -31
  60. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +4 -3
  61. package/dist/runtime/channels/channel-runtime-lifecycle.js +19 -24
  62. package/dist/runtime/channels/channel-runtime-manager.d.ts +3 -2
  63. package/dist/runtime/channels/channel-runtime-manager.js +4 -4
  64. package/dist/runtime/channels/channel-transports.d.ts +0 -1
  65. package/dist/runtime/channels/channel-transports.js +35 -33
  66. package/dist/runtime/channels/client-server-location-runtime.js +5 -4
  67. package/dist/runtime/channels/dispatch-error-reporter.d.ts +2 -1
  68. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  69. package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
  70. package/dist/runtime/channels/fanout-location-runtime.js +3 -3
  71. package/dist/runtime/diagnostics/flow-context.js +19 -7
  72. package/dist/runtime/diagnostics/index.js +4 -9
  73. package/dist/runtime/diagnostics/message-flow.d.ts +8 -0
  74. package/dist/runtime/diagnostics/message-flow.js +35 -5
  75. package/dist/runtime/diagnostics/runtime-metrics.d.ts +2 -2
  76. package/dist/runtime/diagnostics/runtime-metrics.js +10 -8
  77. package/dist/runtime/execution/index.d.ts +4 -2
  78. package/dist/runtime/execution/index.js +33 -10
  79. package/dist/runtime/execution/serial-execution-queue.d.ts +4 -0
  80. package/dist/runtime/execution/serial-execution-queue.js +21 -2
  81. package/dist/runtime/execution/state-lane.d.ts +2 -0
  82. package/dist/runtime/execution/state-lane.js +5 -0
  83. package/dist/runtime/foundation/operation-registry.d.ts +25 -1
  84. package/dist/runtime/foundation/operation-registry.js +86 -18
  85. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +39 -3
  86. package/dist/runtime/foundation/raw-service-mesh-runtime.js +151 -55
  87. package/dist/runtime/foundation/service-liveness-registry.d.ts +12 -1
  88. package/dist/runtime/foundation/service-liveness-registry.js +38 -0
  89. package/dist/runtime/foundation/service-mailbox.d.ts +7 -0
  90. package/dist/runtime/foundation/service-maintenance-runtime.js +1 -6
  91. package/dist/runtime/foundation/service-relocation-object-owner.d.ts +2 -3
  92. package/dist/runtime/foundation/service-relocation-object-owner.js +48 -35
  93. package/dist/runtime/foundation/service-relocation-runtime.js +7 -3
  94. package/dist/runtime/foundation/service-runtime-contracts.d.ts +8 -1
  95. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +2 -1
  96. package/dist/runtime/foundation/service-stateful-registry.d.ts +5 -4
  97. package/dist/runtime/foundation/service-stateful-registry.js +24 -26
  98. package/dist/runtime/foundation/service-stateful-runtime.d.ts +72 -6
  99. package/dist/runtime/foundation/service-stateful-runtime.js +444 -117
  100. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +14 -1
  101. package/dist/runtime/foundation/service-stateful-wire-codec.js +48 -27
  102. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +6 -1
  103. package/dist/runtime/foundation/service-wire-binary-primitives.js +27 -11
  104. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  105. package/dist/runtime/foundation/service-wire-constants.generated.js +1 -0
  106. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +10 -0
  107. package/dist/runtime/foundation/service-wire-m6a-codec.js +166 -53
  108. package/dist/runtime/host/actor-packet-relay.d.ts +6 -4
  109. package/dist/runtime/host/actor-packet-relay.js +59 -72
  110. package/dist/runtime/host/actor-placement-coordinator.js +25 -8
  111. package/dist/runtime/host/actor-transfer-runtime.d.ts +7 -31
  112. package/dist/runtime/host/actor-transfer-runtime.js +85 -331
  113. package/dist/runtime/host/application-job-queue.d.ts +24 -3
  114. package/dist/runtime/host/application-job-queue.js +28 -41
  115. package/dist/runtime/host/index.d.ts +5 -1
  116. package/dist/runtime/host/index.js +171 -97
  117. package/dist/runtime/host/location-runtime-owner.js +2 -6
  118. package/dist/runtime/host/mesh-router-resolver.d.ts +4 -0
  119. package/dist/runtime/host/mesh-router-resolver.js +14 -6
  120. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -4
  121. package/dist/runtime/host/remote-bound-session-relay.js +71 -190
  122. package/dist/runtime/host/route-mesh-runtime.d.ts +2 -2
  123. package/dist/runtime/host/route-mesh-runtime.js +5 -3
  124. package/dist/runtime/host/runtime-shutdown.d.ts +1 -0
  125. package/dist/runtime/host/runtime-shutdown.js +3 -2
  126. package/dist/runtime/host/service-relocation-host-runtime.d.ts +17 -7
  127. package/dist/runtime/host/service-relocation-host-runtime.js +550 -367
  128. package/dist/runtime/host/spot-runtime-options-factory.js +15 -7
  129. package/dist/runtime/host/user-spot-creation-coordinator.js +33 -84
  130. package/dist/runtime/locations/auto-connect-loop.d.ts +2 -0
  131. package/dist/runtime/locations/auto-connect-loop.js +22 -14
  132. package/dist/runtime/locations/auto-connect-reconciler.js +0 -6
  133. package/dist/runtime/locations/auto-connect-types.d.ts +0 -1
  134. package/dist/runtime/locations/descriptor-publication.d.ts +4 -0
  135. package/dist/runtime/locations/descriptor-publication.js +11 -0
  136. package/dist/runtime/locations/domain-store-contract.d.ts +1 -0
  137. package/dist/runtime/locations/in-memory-authority-store.d.ts +7 -1
  138. package/dist/runtime/locations/in-memory-authority-store.js +56 -19
  139. package/dist/runtime/locations/in-memory-location-store.js +1 -10
  140. package/dist/runtime/locations/index.d.ts +1 -0
  141. package/dist/runtime/locations/index.js +1 -0
  142. package/dist/runtime/locations/lease-tracker.js +1 -6
  143. package/dist/runtime/locations/location-store-repository.d.ts +51 -1
  144. package/dist/runtime/locations/location-store-repository.js +363 -139
  145. package/dist/runtime/locations/relocation-blob.d.ts +18 -1
  146. package/dist/runtime/locations/relocation-blob.js +52 -1
  147. package/dist/runtime/locations/request-source-resolver.d.ts +37 -0
  148. package/dist/runtime/locations/request-source-resolver.js +80 -0
  149. package/dist/runtime/locations/resolvers.js +1 -1
  150. package/dist/runtime/locations/runtime.d.ts +6 -2
  151. package/dist/runtime/locations/runtime.js +37 -30
  152. package/dist/runtime/messaging/payload-codec.d.ts +7 -1
  153. package/dist/runtime/messaging/payload-codec.js +7 -6
  154. package/dist/runtime/messaging/request-result.js +29 -26
  155. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +19 -1
  156. package/dist/runtime/protocol/service_wire_codec.generated.js +85 -0
  157. package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +7 -1
  158. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +23 -7
  159. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +3 -2
  160. package/dist/runtime/spots/index.d.ts +18 -11
  161. package/dist/runtime/spots/index.js +234 -176
  162. package/dist/runtime/spots/spot-activation-registry.d.ts +4 -2
  163. package/dist/runtime/spots/spot-activation-registry.js +21 -11
  164. package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
  165. package/dist/runtime/spots/spot-activation-state.js +7 -7
  166. package/dist/runtime/spots/spot-activation.d.ts +6 -3
  167. package/dist/runtime/spots/spot-activation.js +123 -44
  168. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -0
  169. package/dist/runtime/spots/spot-actor-admission-coordinator.js +13 -22
  170. package/dist/runtime/spots/spot-actor-membership.d.ts +0 -1
  171. package/dist/runtime/spots/spot-actor-membership.js +0 -8
  172. package/dist/runtime/spots/spot-actor-packet-dispatch.js +33 -8
  173. package/dist/runtime/spots/spot-actor-packet-drain.js +5 -33
  174. package/dist/runtime/spots/spot-entry-activation.d.ts +2 -0
  175. package/dist/runtime/spots/spot-entry-activation.js +14 -9
  176. package/dist/runtime/spots/spot-handler-registry.d.ts +4 -3
  177. package/dist/runtime/spots/spot-handler-registry.js +6 -2
  178. package/dist/runtime/spots/spot-manager-internal-contracts.d.ts +2 -2
  179. package/dist/runtime/spots/spot-manager-public.js +2 -2
  180. package/dist/runtime/spots/spot-node-autoconnect.d.ts +2 -1
  181. package/dist/runtime/spots/spot-node-autoconnect.js +18 -39
  182. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -2
  183. package/dist/runtime/spots/spot-node-runtime-manager.js +115 -50
  184. package/dist/runtime/spots/spot-outbound.js +3 -3
  185. package/dist/runtime/spots/spot-remote-codec.js +5 -1
  186. package/dist/runtime/spots/spot-runtime-ports.d.ts +0 -1
  187. package/dist/runtime/spots/spot-serial-executor.d.ts +10 -0
  188. package/dist/runtime/spots/spot-serial-executor.js +61 -8
  189. package/dist/runtime/spots/spot-serial-turn-executor.js +19 -2
  190. package/dist/runtime/spots/spot-subscription-dispatch.js +1 -1
  191. package/dist/runtime/spots/spot-timer.d.ts +57 -5
  192. package/dist/runtime/spots/spot-timer.js +287 -103
  193. package/dist/runtime/streams/actor-session-binding-registry.d.ts +42 -11
  194. package/dist/runtime/streams/actor-session-binding-registry.js +165 -48
  195. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +8 -4
  196. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -1
  197. package/dist/runtime/streams/bound-actor-relay-sender.js +15 -8
  198. package/dist/runtime/streams/bound-session-service.d.ts +1 -1
  199. package/dist/runtime/streams/bound-session-service.js +6 -11
  200. package/dist/runtime/streams/index.d.ts +3 -2
  201. package/dist/runtime/streams/index.js +6 -4
  202. package/dist/runtime/streams/managed-stream.js +3 -2
  203. package/dist/runtime/streams/native-fallback-bound-session.js +8 -73
  204. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -8
  205. package/dist/runtime/streams/session-actor-coordinator.js +15 -32
  206. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +3 -10
  207. package/dist/runtime/streams/stream-session-runtime.js +1 -4
  208. package/dist/runtime/workers/index.js +1 -1
  209. package/package.json +3 -3
  210. package/src/contracts/Common/ZLinkEncodedPayload.ts +24 -4
  211. package/src/contracts/Common/encoded-payload-storage.ts +6 -3
  212. package/src/contracts/Configuration/Builders.ts +4 -1
  213. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +7 -2
  214. package/src/contracts/Configuration/RegistrationBuilders.ts +6 -2
  215. package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
  216. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -1
  217. package/src/contracts/Locations/Rows.ts +2 -0
  218. package/src/contracts/Spots/Contracts.ts +8 -0
  219. package/src/contracts/Spots/ZLinkSpot.ts +3 -3
  220. package/src/runtime/abort.ts +12 -0
  221. package/src/runtime/actors/actor-authority-publication.ts +3 -2
  222. package/src/runtime/actors/actor-client.ts +61 -70
  223. package/src/runtime/actors/actor-context.ts +49 -9
  224. package/src/runtime/actors/actor-handoff.ts +282 -106
  225. package/src/runtime/actors/actor-join-relocation.ts +2 -0
  226. package/src/runtime/actors/actor-local-native-join.ts +4 -0
  227. package/src/runtime/actors/actor-mailbox.ts +40 -2
  228. package/src/runtime/actors/actor-remote-joiner.ts +6 -1
  229. package/src/runtime/actors/actor-reply.ts +42 -0
  230. package/src/runtime/actors/actor-runtime-contracts.ts +2 -0
  231. package/src/runtime/actors/actor-runtime-state.ts +2 -20
  232. package/src/runtime/actors/actor-source-transfer.ts +1 -34
  233. package/src/runtime/actors/index.ts +41 -27
  234. package/src/runtime/actors/session-disconnected-wire.ts +66 -0
  235. package/src/runtime/admission.ts +69 -34
  236. package/src/runtime/application-jobs/application-job-queue-scope.ts +33 -1
  237. package/src/runtime/application-jobs/contracts.ts +2 -0
  238. package/src/runtime/backend/contracts/index.ts +39 -4
  239. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +5 -3
  240. package/src/runtime/backend/mesh-completion-table.ts +4 -0
  241. package/src/runtime/backend/mesh-dispatch-pump.ts +223 -124
  242. package/src/runtime/backend/node/node-raw-binding-port.ts +106 -70
  243. package/src/runtime/backend/node/node-raw-mesh-backend.ts +221 -170
  244. package/src/runtime/backend/node/node-socket-backend-adapter.ts +5 -5
  245. package/src/runtime/channels/channel-clients.ts +49 -24
  246. package/src/runtime/channels/channel-dispatch-pipeline.ts +173 -124
  247. package/src/runtime/channels/channel-dispatchers.ts +116 -72
  248. package/src/runtime/channels/channel-envelope.ts +105 -36
  249. package/src/runtime/channels/channel-runtime-lifecycle.ts +13 -13
  250. package/src/runtime/channels/channel-runtime-manager.ts +12 -5
  251. package/src/runtime/channels/channel-transports.ts +49 -58
  252. package/src/runtime/channels/client-server-location-runtime.ts +11 -10
  253. package/src/runtime/channels/dispatch-error-reporter.ts +4 -2
  254. package/src/runtime/channels/fanout-location-runtime.ts +17 -9
  255. package/src/runtime/diagnostics/flow-context.ts +20 -7
  256. package/src/runtime/diagnostics/index.ts +1 -7
  257. package/src/runtime/diagnostics/message-flow.ts +47 -9
  258. package/src/runtime/diagnostics/runtime-metrics.ts +12 -10
  259. package/src/runtime/execution/index.ts +40 -14
  260. package/src/runtime/execution/serial-execution-queue.ts +31 -4
  261. package/src/runtime/execution/state-lane.ts +7 -0
  262. package/src/runtime/foundation/operation-registry.ts +98 -20
  263. package/src/runtime/foundation/raw-service-mesh-runtime.ts +244 -67
  264. package/src/runtime/foundation/service-liveness-registry.ts +39 -0
  265. package/src/runtime/foundation/service-mailbox.ts +8 -0
  266. package/src/runtime/foundation/service-maintenance-runtime.ts +1 -8
  267. package/src/runtime/foundation/service-relocation-object-owner.ts +54 -37
  268. package/src/runtime/foundation/service-relocation-runtime.ts +7 -3
  269. package/src/runtime/foundation/service-runtime-contracts.ts +12 -1
  270. package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -1
  271. package/src/runtime/foundation/service-stateful-registry.ts +38 -35
  272. package/src/runtime/foundation/service-stateful-runtime.ts +667 -152
  273. package/src/runtime/foundation/service-stateful-wire-codec.ts +49 -11
  274. package/src/runtime/foundation/service-wire-binary-primitives.ts +35 -12
  275. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  276. package/src/runtime/foundation/service-wire-m6a-codec.ts +187 -51
  277. package/src/runtime/host/actor-packet-relay.ts +113 -94
  278. package/src/runtime/host/actor-placement-coordinator.ts +31 -8
  279. package/src/runtime/host/actor-transfer-runtime.ts +104 -430
  280. package/src/runtime/host/application-job-queue.ts +29 -44
  281. package/src/runtime/host/index.ts +286 -129
  282. package/src/runtime/host/location-runtime-owner.ts +2 -6
  283. package/src/runtime/host/mesh-router-resolver.ts +13 -5
  284. package/src/runtime/host/remote-bound-session-relay.ts +86 -248
  285. package/src/runtime/host/route-mesh-runtime.ts +11 -5
  286. package/src/runtime/host/runtime-shutdown.ts +15 -4
  287. package/src/runtime/host/service-relocation-host-runtime.ts +784 -475
  288. package/src/runtime/host/spot-runtime-options-factory.ts +18 -7
  289. package/src/runtime/host/user-spot-creation-coordinator.ts +41 -100
  290. package/src/runtime/locations/auto-connect-loop.ts +22 -14
  291. package/src/runtime/locations/auto-connect-reconciler.ts +0 -6
  292. package/src/runtime/locations/auto-connect-types.ts +0 -1
  293. package/src/runtime/locations/descriptor-publication.ts +7 -0
  294. package/src/runtime/locations/domain-store-contract.ts +5 -0
  295. package/src/runtime/locations/in-memory-authority-store.ts +85 -23
  296. package/src/runtime/locations/in-memory-location-store.ts +1 -12
  297. package/src/runtime/locations/index.ts +1 -0
  298. package/src/runtime/locations/lease-tracker.ts +2 -9
  299. package/src/runtime/locations/location-store-repository.ts +628 -152
  300. package/src/runtime/locations/relocation-blob.ts +75 -1
  301. package/src/runtime/locations/request-source-resolver.ts +138 -0
  302. package/src/runtime/locations/resolvers.ts +2 -2
  303. package/src/runtime/locations/runtime.ts +70 -40
  304. package/src/runtime/messaging/payload-codec.ts +8 -11
  305. package/src/runtime/messaging/request-result.ts +33 -29
  306. package/src/runtime/protocol/service_wire_codec.generated.ts +87 -4
  307. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +13 -10
  308. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +3 -2
  309. package/src/runtime/spots/index.ts +375 -281
  310. package/src/runtime/spots/spot-activation-registry.ts +25 -13
  311. package/src/runtime/spots/spot-activation-state.ts +12 -19
  312. package/src/runtime/spots/spot-activation.ts +170 -86
  313. package/src/runtime/spots/spot-actor-admission-coordinator.ts +25 -55
  314. package/src/runtime/spots/spot-actor-membership.ts +0 -15
  315. package/src/runtime/spots/spot-actor-packet-dispatch.ts +56 -11
  316. package/src/runtime/spots/spot-actor-packet-drain.ts +9 -52
  317. package/src/runtime/spots/spot-entry-activation.ts +24 -19
  318. package/src/runtime/spots/spot-handler-registry.ts +15 -4
  319. package/src/runtime/spots/spot-manager-internal-contracts.ts +2 -2
  320. package/src/runtime/spots/spot-manager-public.ts +2 -2
  321. package/src/runtime/spots/spot-node-autoconnect.ts +22 -45
  322. package/src/runtime/spots/spot-node-runtime-manager.ts +197 -67
  323. package/src/runtime/spots/spot-outbound.ts +3 -3
  324. package/src/runtime/spots/spot-remote-codec.ts +9 -2
  325. package/src/runtime/spots/spot-runtime-ports.ts +0 -1
  326. package/src/runtime/spots/spot-serial-executor.ts +97 -25
  327. package/src/runtime/spots/spot-serial-turn-executor.ts +22 -3
  328. package/src/runtime/spots/spot-subscription-dispatch.ts +1 -1
  329. package/src/runtime/spots/spot-timer.ts +413 -157
  330. package/src/runtime/streams/actor-session-binding-registry.ts +236 -64
  331. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +16 -8
  332. package/src/runtime/streams/bound-actor-relay-sender.ts +23 -9
  333. package/src/runtime/streams/bound-session-service.ts +7 -10
  334. package/src/runtime/streams/index.ts +12 -6
  335. package/src/runtime/streams/managed-stream.ts +4 -2
  336. package/src/runtime/streams/native-fallback-bound-session.ts +14 -103
  337. package/src/runtime/streams/session-actor-coordinator.ts +39 -88
  338. package/src/runtime/streams/stream-binding-runtime-ports.ts +3 -9
  339. package/src/runtime/streams/stream-session-runtime.ts +1 -5
  340. package/src/runtime/workers/index.ts +1 -1
@@ -30,7 +30,7 @@ export interface ServiceRelocationCaptureUnit {
30
30
  readonly authorityOwnerGeneration: bigint;
31
31
  seal(signal?: AbortSignal): Promise<ServiceRelocationSealedWork>;
32
32
  captureApplicationState(signal?: AbortSignal): Promise<Uint8Array>;
33
- commitSeal(): Promise<void> | void;
33
+ commitSeal(followAuthorities: ReadonlyMap<string, ZLinkAuthoritySnapshot>): Promise<void> | void;
34
34
  abortSeal(): Promise<void> | void;
35
35
  /** Expired-owner terminal: pending requests fail once and dispatch stays closed. */
36
36
  discardSeal?(reason: unknown): Promise<void> | void;
@@ -44,12 +44,14 @@ export class ServiceCapturedObjectRelocation {
44
44
  private readonly units: readonly ServiceRelocationCaptureUnit[]
45
45
  ) {}
46
46
 
47
- async commitSource(): Promise<void> {
47
+ async commitSource(
48
+ followAuthorities: ReadonlyMap<string, ZLinkAuthoritySnapshot>
49
+ ): Promise<void> {
48
50
  if (this.terminal === 'committed') return;
49
51
  if (this.terminal !== 'open') {
50
52
  throw new Error(`Relocation source capture was already ${this.terminal}.`);
51
53
  }
52
- for (const unit of this.units) await unit.commitSeal();
54
+ for (const unit of this.units) await unit.commitSeal(followAuthorities);
53
55
  this.terminal = 'committed';
54
56
  }
55
57
 
@@ -58,17 +60,10 @@ export class ServiceCapturedObjectRelocation {
58
60
  if (this.terminal !== 'open') {
59
61
  throw new Error(`A ${this.terminal} relocation source capture cannot be aborted.`);
60
62
  }
61
- const failures: unknown[] = [];
62
- for (const unit of [...this.units].reverse()) {
63
- try {
64
- await unit.abortSeal();
65
- } catch (error) {
66
- failures.push(error);
67
- }
68
- }
69
- this.terminal = 'aborted';
70
- if (failures.length !== 0) {
71
- throw new AggregateError(failures, 'Relocation source rollback was incomplete.');
63
+ try {
64
+ await abortSourceSeals(this.units);
65
+ } finally {
66
+ this.terminal = 'aborted';
72
67
  }
73
68
  }
74
69
 
@@ -167,32 +162,37 @@ export class ServiceRelocationObjectCaptureOwner {
167
162
  ): Promise<ServiceCapturedObjectRelocation> {
168
163
  const captured: Array<{
169
164
  readonly unit: ServiceRelocationCaptureUnit;
170
- readonly work: ServiceRelocationSealedWork;
165
+ work?: ServiceRelocationSealedWork;
171
166
  }> = [];
172
167
  try {
173
168
  for (const unit of units) {
174
169
  signal?.throwIfAborted();
175
- const work = await unit.seal(signal);
176
- captured.push({ unit, work });
170
+ const capture: (typeof captured)[number] = { unit };
171
+ captured.push(capture);
172
+ capture.work = await unit.seal(signal);
177
173
  }
178
174
  const participants = await mapConcurrentOrdered(
179
175
  captured,
180
176
  this.maxConcurrentCallbacks,
181
- async ({ unit, work }) => ({
182
- key: unit.authorityKey,
183
- objectKind: unit.objectKind,
184
- stableType: unit.stableType,
185
- objectGeneration: unit.objectGeneration,
186
- authorityOwnerGeneration: unit.authorityOwnerGeneration,
187
- applicationState: Buffer.from(await unit.captureApplicationState(signal)),
188
- boundSessionState: Buffer.from(work.boundSessionState),
189
- ...(work.sessionBinding === undefined ? {} : { sessionBinding: work.sessionBinding }),
190
- queuedMessages: work.queuedMessages.map((message) => ({
191
- sequence: message.sequence,
192
- payload: Buffer.from(message.payload)
193
- })),
194
- timers: work.timers.map((timer) => ({ ...timer }))
195
- }),
177
+ async ({ unit, work: sealedWork }) => {
178
+ // Application capture starts only after every seal completed.
179
+ const work = sealedWork!;
180
+ return {
181
+ key: unit.authorityKey,
182
+ objectKind: unit.objectKind,
183
+ stableType: unit.stableType,
184
+ objectGeneration: unit.objectGeneration,
185
+ authorityOwnerGeneration: unit.authorityOwnerGeneration,
186
+ applicationState: Buffer.from(await unit.captureApplicationState(signal)),
187
+ boundSessionState: Buffer.from(work.boundSessionState),
188
+ ...(work.sessionBinding === undefined ? {} : { sessionBinding: work.sessionBinding }),
189
+ queuedMessages: work.queuedMessages.map((message) => ({
190
+ sequence: message.sequence,
191
+ payload: Buffer.from(message.payload)
192
+ })),
193
+ timers: work.timers.map((timer) => ({ ...timer }))
194
+ };
195
+ },
196
196
  signal
197
197
  );
198
198
  return new ServiceCapturedObjectRelocation(
@@ -205,12 +205,33 @@ export class ServiceRelocationObjectCaptureOwner {
205
205
  units
206
206
  );
207
207
  } catch (error) {
208
- for (const { unit } of captured.reverse()) await unit.abortSeal();
208
+ try {
209
+ await abortSourceSeals(captured.map(({ unit }) => unit));
210
+ } catch (rollbackError) {
211
+ throw new AggregateError(
212
+ [error, rollbackError],
213
+ 'Relocation capture failed and source rollback was incomplete.'
214
+ );
215
+ }
209
216
  throw error;
210
217
  }
211
218
  }
212
219
  }
213
220
 
221
+ async function abortSourceSeals(units: readonly ServiceRelocationCaptureUnit[]): Promise<void> {
222
+ const failures: unknown[] = [];
223
+ for (const unit of [...units].reverse()) {
224
+ try {
225
+ await unit.abortSeal();
226
+ } catch (error) {
227
+ failures.push(error);
228
+ }
229
+ }
230
+ if (failures.length !== 0) {
231
+ throw new AggregateError(failures, 'Relocation source rollback was incomplete.');
232
+ }
233
+ }
234
+
214
235
  export interface ServiceRelocationHiddenObject {
215
236
  readonly authorityKey: string;
216
237
  }
@@ -234,7 +255,6 @@ export interface ServiceRelocationTargetObjectPort<THidden extends ServiceReloca
234
255
  message: ServiceRelocationQueuedMessage,
235
256
  signal?: AbortSignal
236
257
  ): Promise<void>;
237
- restoreTimer(hidden: THidden, timer: ServiceRelocationTimer, signal?: AbortSignal): Promise<void>;
238
258
  normalize(
239
259
  hidden: THidden,
240
260
  authority: ZLinkAuthoritySnapshot,
@@ -333,9 +353,6 @@ export class ServiceRelocationObjectRestoreOwner<
333
353
  for (const message of participant.queuedMessages) {
334
354
  await this.target.replayQueuedMessage(hidden, message, signal);
335
355
  }
336
- for (const timer of participant.timers) {
337
- await this.target.restoreTimer(hidden, timer, signal);
338
- }
339
356
  }
340
357
  }
341
358
 
@@ -796,12 +796,16 @@ export function decodeServiceRelocationEnvelope(
796
796
  });
797
797
  }
798
798
  for (const timer of generated.timerRegistrations) {
799
+ const dueAtUnixMs = unixMilliseconds(timer.nextScheduledAtUnixMilliseconds);
800
+ const intervalMs = unixMilliseconds(timer.periodMilliseconds);
799
801
  byId.get(timer.participantId)!.timers.push({
800
802
  timerId: timer.name,
801
803
  handlerType: timer.handlerType,
802
- startedAtUnixMs: 0,
803
- dueAtUnixMs: unixMilliseconds(timer.nextScheduledAtUnixMilliseconds),
804
- intervalMs: unixMilliseconds(timer.periodMilliseconds),
804
+ // The wire anchors the nominal schedule by its next due time: the next
805
+ // nominal tick after the completed ScheduledIndex (Spot timer §1).
806
+ startedAtUnixMs: dueAtUnixMs - Number(timer.lastCompletedScheduledIndex + 1n) * intervalMs,
807
+ dueAtUnixMs,
808
+ intervalMs,
805
809
  overrunPolicy: timerPolicyName(timer.overrunPolicy),
806
810
  maxCatchUpTicks: unixMilliseconds(timer.maxCatchUpTicks),
807
811
  stopOnUnhandledException: timer.stopOnUnhandledException,
@@ -243,12 +243,22 @@ export interface ReceiveRequirements {
243
243
  }
244
244
 
245
245
  export interface ZLinkMessageFollowOrigin {
246
+ readonly requestSource?: import('../locations/request-source-resolver').ZLinkRequestSourceFence;
246
247
  readonly sourceNodeRid: RoutingId;
247
248
  readonly originalOperation: MeshOperationId;
248
249
  readonly originalReplyRouteId: bigint;
250
+ /** The canonical target accepted with the original native Actor frame. */
251
+ readonly target?: import('./service-stateful-wire-codec').ServiceActorRouteFence;
249
252
  }
250
253
 
251
254
  export interface ReceiveRecord {
255
+ /** Resolve record prerequisites in owner order, outside an application handler turn. */
256
+ readonly prepareDispatch?: (
257
+ this: ReceiveRecord,
258
+ signal: AbortSignal
259
+ ) => boolean | Promise<boolean>;
260
+ readonly statefulMailboxRecord?: import('./service-mailbox').ServiceMailboxRecord;
261
+ readonly requestSource?: import('../locations/request-source-resolver').ZLinkRequestSourceFence;
252
262
  readonly kind: number;
253
263
  readonly domain: number;
254
264
  readonly sourceNodeRid: RoutingId | null;
@@ -377,7 +387,8 @@ export interface StreamSessionService {
377
387
  retiredSession: ServiceRetiredBoundSessionRouteFence,
378
388
  actor: ServiceActorRef
379
389
  ) => void,
380
- actorAuthority?: StreamSessionActorAuthorityFence
390
+ actorAuthority?: StreamSessionActorAuthorityFence,
391
+ close?: () => Promise<void>
381
392
  ): MeshOperationId;
382
393
  unbindActor(
383
394
  sessionRid: RoutingId,
@@ -1,5 +1,6 @@
1
+ import type { RoutingId } from '../../contracts';
1
2
  export interface ServiceSessionBindingIngressPort {
2
- actorSlot(actorId: string, sessionRid: string): Promise<number | undefined>;
3
+ actorSlot(actorId: string, sessionRid: RoutingId): Promise<number | undefined>;
3
4
  }
4
5
 
5
6
  const ports = new WeakMap<object, ServiceSessionBindingIngressPort>();
@@ -1,4 +1,9 @@
1
- import { ZLINK_MAX_IDENTITY_TEXT_BYTES } from '../../contracts/Common/CoreTypes';
1
+ import {
2
+ ZLINK_MAX_IDENTITY_TEXT_BYTES,
3
+ ZLINK_MAX_ROUTING_ID_BYTES
4
+ } from '../../contracts/Common/CoreTypes';
5
+ import { routingIdsEqual } from '../routing-id';
6
+ import { encodeServiceWireRoutingId } from './service-wire-binary-primitives';
2
7
  import { OperationRegistry, type PendingOperation } from './operation-registry';
3
8
 
4
9
  export type ServiceSpotKind = 'entry' | 'user' | 'instance';
@@ -114,7 +119,6 @@ export class ServiceStatefulRegistry {
114
119
  private readonly reservationAttempts = new Map<string, bigint>();
115
120
  private readonly turns = new Map<string, Promise<void>>();
116
121
  private nextReservationId = 1n;
117
- private nextBindingGeneration = 1n;
118
122
 
119
123
  constructor(
120
124
  readonly nodeRid: string,
@@ -392,47 +396,35 @@ export class ServiceStatefulRegistry {
392
396
  return current;
393
397
  }
394
398
 
395
- bindSession(
396
- actor: ServiceActorRef,
397
- sessionRid: string,
398
- sessionOwnerNodeRid: string,
399
- sessionOwnerNodeGeneration?: bigint,
400
- sessionOwnerId?: string,
401
- sessionOwnerLeaseGeneration?: bigint
402
- ): ServiceSessionBinding {
403
- const current = this.requireActorCore(actor);
404
- requireText(sessionRid, 'sessionRid');
405
- requireText(sessionOwnerNodeRid, 'sessionOwnerNodeRid');
406
- const binding: ServiceSessionBinding = Object.freeze({
407
- actor: Object.freeze({ ...current.ref }),
408
- sessionRid,
409
- sessionOwnerNodeRid,
410
- ...(sessionOwnerNodeGeneration === undefined ? {} : { sessionOwnerNodeGeneration }),
411
- ...(sessionOwnerId === undefined ? {} : { sessionOwnerId }),
412
- ...(sessionOwnerLeaseGeneration === undefined ? {} : { sessionOwnerLeaseGeneration }),
413
- bindingGeneration: this.nextBindingGeneration++,
414
- membershipEpoch: current.membershipEpoch
415
- });
416
- this.bindings.set(actorKey(actor), binding);
417
- return binding;
418
- }
419
-
420
- installSessionBinding(binding: ServiceSessionBinding): void {
399
+ installSessionBinding(binding: ServiceSessionBinding): ServiceSessionBinding {
421
400
  this.requireActorCore(binding.actor);
401
+ encodeServiceWireRoutingId(
402
+ binding.sessionRid,
403
+ 'sessionRid',
404
+ ZLINK_MAX_ROUTING_ID_BYTES,
405
+ (message) => {
406
+ throw new RangeError(message);
407
+ }
408
+ );
409
+ requireText(binding.sessionOwnerNodeRid, 'sessionOwnerNodeRid');
422
410
  requirePositive(binding.bindingGeneration, 'bindingGeneration');
423
411
  const current = this.bindings.get(actorKey(binding.actor));
424
412
  if (
425
413
  current !== undefined &&
426
414
  current.sessionOwnerNodeRid === binding.sessionOwnerNodeRid &&
427
415
  current.sessionOwnerNodeGeneration === binding.sessionOwnerNodeGeneration &&
428
- current.sessionOwnerId === binding.sessionOwnerId &&
429
- current.sessionOwnerLeaseGeneration === binding.sessionOwnerLeaseGeneration &&
430
416
  current.bindingGeneration >= binding.bindingGeneration
431
417
  ) {
418
+ if (
419
+ current.bindingGeneration === binding.bindingGeneration &&
420
+ current.sessionRid === binding.sessionRid
421
+ )
422
+ return current;
432
423
  throw new ServiceStaleGenerationError('binding', binding.actor.actorId);
433
424
  }
434
- this.nextBindingGeneration = max(this.nextBindingGeneration, binding.bindingGeneration + 1n);
435
- this.bindings.set(actorKey(binding.actor), Object.freeze({ ...binding }));
425
+ const accepted = Object.freeze({ ...binding });
426
+ this.bindings.set(actorKey(binding.actor), accepted);
427
+ return accepted;
436
428
  }
437
429
 
438
430
  binding(actor: ServiceActorRef): ServiceSessionBinding | undefined {
@@ -455,7 +447,8 @@ export class ServiceStatefulRegistry {
455
447
  if (binding === undefined) return false;
456
448
  if (
457
449
  binding.bindingGeneration !== expectedBindingGeneration ||
458
- (expectedSessionRid !== undefined && binding.sessionRid !== expectedSessionRid) ||
450
+ (expectedSessionRid !== undefined &&
451
+ !routingIdsEqual(binding.sessionRid, expectedSessionRid)) ||
459
452
  (expectedSessionOwnerNodeRid !== undefined &&
460
453
  binding.sessionOwnerNodeRid !== expectedSessionOwnerNodeRid)
461
454
  ) {
@@ -621,6 +614,8 @@ function createSpotState(
621
614
  }
622
615
  }
623
616
 
617
+ export const RELOCATION_REPLY_RETENTION_MS = 24 * 60 * 60 * 1_000;
618
+
624
619
  export class ServiceTerminalOperationRegistry<T, Context = unknown> {
625
620
  private readonly operations: OperationRegistry<T, Context>;
626
621
 
@@ -636,8 +631,8 @@ export class ServiceTerminalOperationRegistry<T, Context = unknown> {
636
631
  return this.operations.register(timeoutMs, timeoutOwner, context);
637
632
  }
638
633
 
639
- reply(id: bigint, value: T): boolean {
640
- return this.operations.complete(id, value);
634
+ reply(id: bigint, value: T, terminalContextRetentionMs = 0): boolean {
635
+ return this.operations.complete(id, value, terminalContextRetentionMs);
641
636
  }
642
637
 
643
638
  fail(id: bigint, error: unknown): boolean {
@@ -660,6 +655,10 @@ export class ServiceTerminalOperationRegistry<T, Context = unknown> {
660
655
  return this.operations.size;
661
656
  }
662
657
 
658
+ nextDeadlineMs(): number {
659
+ return this.operations.nextDeadlineMs();
660
+ }
661
+
663
662
  expire(nowMs: number, turnDeadlineMs: number): number {
664
663
  return this.operations.expire(nowMs, turnDeadlineMs);
665
664
  }
@@ -667,6 +666,10 @@ export class ServiceTerminalOperationRegistry<T, Context = unknown> {
667
666
  close(): void {
668
667
  this.operations.close('Stateful runtime closed.');
669
668
  }
669
+
670
+ failAll(reason: unknown): void {
671
+ this.operations.failAll(reason);
672
+ }
670
673
  }
671
674
 
672
675
  function actorKey(actor: ServiceActorRef): string {