@zlink-systems/framework 0.26.0 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (561) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Actors/ZLinkActorClient.d.ts +1 -1
  3. package/dist/contracts/Channels/Calls.d.ts +1 -1
  4. package/dist/contracts/Common/CoreTypes.d.ts +6 -0
  5. package/dist/contracts/Common/CoreTypes.js +7 -0
  6. package/dist/contracts/Common/index.d.ts +1 -1
  7. package/dist/contracts/Common/index.js +0 -1
  8. package/dist/contracts/Configuration/Builders.d.ts +0 -1
  9. package/dist/contracts/Configuration/Configs.d.ts +0 -1
  10. package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
  11. package/dist/contracts/Configuration/InternalDefaults.js +9 -1
  12. package/dist/contracts/Configuration/Registration.d.ts +13 -2
  13. package/dist/contracts/Configuration/Registration.js +58 -36
  14. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
  15. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
  16. package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
  17. package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
  18. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -5
  19. package/dist/contracts/Configuration/RegistrationValidators.js +15 -14
  20. package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
  21. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
  22. package/dist/contracts/Handlers/JsonContract.js +10 -4
  23. package/dist/contracts/Locations/Authority.d.ts +1 -1
  24. package/dist/contracts/Locations/Authority.js +3 -2
  25. package/dist/contracts/Locations/Options.js +1 -1
  26. package/dist/contracts/Locations/Stores.d.ts +12 -0
  27. package/dist/contracts/Locations/Stores.js +9 -0
  28. package/dist/contracts/Spots/Contracts.d.ts +2 -2
  29. package/dist/contracts/Streams/BoundSessionContracts.d.ts +1 -1
  30. package/dist/contracts/Streams/IZLinkSession.d.ts +2 -3
  31. package/dist/contracts/Streams/IZLinkSessionActor.d.ts +2 -2
  32. package/dist/internal.d.ts +4 -0
  33. package/dist/internal.js +15 -1
  34. package/dist/nest-integration.d.ts +4 -2
  35. package/dist/nest-integration.js +14 -4
  36. package/dist/runtime/abort.d.ts +1 -0
  37. package/dist/runtime/abort.js +8 -5
  38. package/dist/runtime/activation-admission.d.ts +1 -2
  39. package/dist/runtime/activation-admission.js +2 -6
  40. package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
  41. package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
  42. package/dist/runtime/actors/actor-client.d.ts +2 -2
  43. package/dist/runtime/actors/actor-client.js +49 -153
  44. package/dist/runtime/actors/actor-context.d.ts +3 -5
  45. package/dist/runtime/actors/actor-context.js +13 -11
  46. package/dist/runtime/actors/actor-handoff.d.ts +4 -4
  47. package/dist/runtime/actors/actor-handoff.js +8 -8
  48. package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
  49. package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
  50. package/dist/runtime/actors/actor-local-native-join.js +83 -105
  51. package/dist/runtime/actors/actor-native-lookup.js +2 -8
  52. package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
  53. package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
  54. package/dist/runtime/actors/actor-remote-joiner.d.ts +1 -1
  55. package/dist/runtime/actors/actor-remote-joiner.js +5 -9
  56. package/dist/runtime/actors/actor-remote-wire.js +5 -3
  57. package/dist/runtime/actors/actor-request-deadline.d.ts +1 -0
  58. package/dist/runtime/actors/actor-request-deadline.js +6 -0
  59. package/dist/runtime/actors/actor-retry-delay.js +2 -1
  60. package/dist/runtime/actors/actor-routed-join-transport.d.ts +2 -3
  61. package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
  62. package/dist/runtime/actors/actor-runtime-state.js +70 -187
  63. package/dist/runtime/actors/bound-session-wire.js +2 -7
  64. package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
  65. package/dist/runtime/actors/deferred-join-completion.js +1 -0
  66. package/dist/runtime/actors/index.d.ts +9 -7
  67. package/dist/runtime/actors/index.js +87 -69
  68. package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
  69. package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
  70. package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
  71. package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
  72. package/dist/runtime/admission.d.ts +2 -0
  73. package/dist/runtime/admission.js +7 -1
  74. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
  75. package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
  76. package/dist/runtime/backend/contracts/index.d.ts +7 -27
  77. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
  78. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
  79. package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
  80. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +3 -1
  81. package/dist/runtime/backend/node/node-backend-adapter-support.js +51 -10
  82. package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
  83. package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +1 -2
  84. package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
  85. package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
  86. package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
  87. package/dist/runtime/backend/node/node-raw-binding-port.js +41 -34
  88. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
  89. package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
  90. package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
  91. package/dist/runtime/backend/raw-binding-port.d.ts +1 -1
  92. package/dist/runtime/backend/runtime-values.d.ts +4 -1
  93. package/dist/runtime/backend/runtime-values.js +2 -0
  94. package/dist/runtime/channels/channel-clients.d.ts +20 -8
  95. package/dist/runtime/channels/channel-clients.js +73 -59
  96. package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
  97. package/dist/runtime/channels/channel-envelope.d.ts +1 -1
  98. package/dist/runtime/channels/channel-envelope.js +51 -39
  99. package/dist/runtime/channels/channel-outbound-operations.d.ts +5 -2
  100. package/dist/runtime/channels/channel-outbound-operations.js +25 -42
  101. package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
  102. package/dist/runtime/channels/channel-receive-loops.js +27 -6
  103. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
  104. package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
  105. package/dist/runtime/channels/channel-runtime-manager.d.ts +4 -4
  106. package/dist/runtime/channels/channel-runtime-manager.js +13 -10
  107. package/dist/runtime/channels/channel-socket-options.js +3 -12
  108. package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
  109. package/dist/runtime/channels/channel-socket-registry.js +240 -177
  110. package/dist/runtime/channels/channel-transports.d.ts +21 -31
  111. package/dist/runtime/channels/channel-transports.js +80 -62
  112. package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
  113. package/dist/runtime/channels/client-server-location-runtime.js +10 -11
  114. package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
  115. package/dist/runtime/channels/client-server-service-wire.js +32 -11
  116. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
  117. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  118. package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
  119. package/dist/runtime/channels/fanout-location-runtime.js +130 -72
  120. package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
  121. package/dist/runtime/channels/local-spot-route-transport.js +1 -3
  122. package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +1 -1
  123. package/dist/runtime/channels/router-socket-spot-route-transport.js +2 -2
  124. package/dist/runtime/channels/source-spot-router.d.ts +1 -1
  125. package/dist/runtime/channels/source-spot-router.js +2 -4
  126. package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
  127. package/dist/runtime/channels/spot-direct-envelope.js +4 -3
  128. package/dist/runtime/channels/spot-node-route-transport.d.ts +1 -1
  129. package/dist/runtime/channels/spot-node-route-transport.js +5 -5
  130. package/dist/runtime/channels/spot-route-bridge-transport.d.ts +1 -1
  131. package/dist/runtime/channels/spot-route-bridge-transport.js +2 -2
  132. package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +2 -4
  133. package/dist/runtime/channels/spot-route-dispatch-strategy.js +11 -12
  134. package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
  135. package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
  136. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
  137. package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
  138. package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
  139. package/dist/runtime/diagnostics/flow-context.js +16 -2
  140. package/dist/runtime/diagnostics/index.d.ts +4 -2
  141. package/dist/runtime/diagnostics/index.js +14 -4
  142. package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
  143. package/dist/runtime/diagnostics/message-flow.js +10 -19
  144. package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
  145. package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
  146. package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
  147. package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
  148. package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
  149. package/dist/runtime/disposal.d.ts +5 -0
  150. package/dist/runtime/disposal.js +22 -0
  151. package/dist/runtime/execution/index.d.ts +12 -9
  152. package/dist/runtime/execution/index.js +58 -14
  153. package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
  154. package/dist/runtime/execution/serial-execution-queue.js +54 -15
  155. package/dist/runtime/execution/state-lane.d.ts +8 -1
  156. package/dist/runtime/execution/state-lane.js +118 -3
  157. package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
  158. package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
  159. package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
  160. package/dist/runtime/foundation/event-loop-resources.js +6 -119
  161. package/dist/runtime/foundation/operation-identity.d.ts +2 -0
  162. package/dist/runtime/foundation/operation-identity.js +9 -5
  163. package/dist/runtime/foundation/operation-registry.d.ts +5 -7
  164. package/dist/runtime/foundation/operation-registry.js +34 -44
  165. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +8 -5
  166. package/dist/runtime/foundation/raw-service-mesh-runtime.js +79 -94
  167. package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
  168. package/dist/runtime/foundation/runtime-state-projections.js +8 -0
  169. package/dist/runtime/foundation/service-authority-payload-codec.js +22 -12
  170. package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
  171. package/dist/runtime/foundation/service-discovery-registry.js +22 -3
  172. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
  173. package/dist/runtime/foundation/service-liveness-registry.js +2 -1
  174. package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
  175. package/dist/runtime/foundation/service-maintenance-runtime.js +0 -6
  176. package/dist/runtime/foundation/service-metadata-codec.js +3 -3
  177. package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
  178. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
  179. package/dist/runtime/foundation/service-relocation-object-owner.js +3 -2
  180. package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
  181. package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
  182. package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
  183. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -12
  184. package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
  185. package/dist/runtime/foundation/service-stateful-registry.js +10 -2
  186. package/dist/runtime/foundation/service-stateful-runtime.d.ts +26 -25
  187. package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
  188. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
  189. package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
  190. package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
  191. package/dist/runtime/foundation/service-topology-registry.js +17 -32
  192. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
  193. package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
  194. package/dist/runtime/foundation/service-wire-codec.js +10 -8
  195. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  196. package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
  197. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
  198. package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
  199. package/dist/runtime/framework-errors-internal.d.ts +2 -1
  200. package/dist/runtime/framework-errors-internal.js +343 -122
  201. package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
  202. package/dist/runtime/handlers/handler-instance-scope.js +61 -74
  203. package/dist/runtime/host/actor-packet-relay.d.ts +11 -8
  204. package/dist/runtime/host/actor-packet-relay.js +54 -99
  205. package/dist/runtime/host/actor-placement-coordinator.js +7 -5
  206. package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
  207. package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
  208. package/dist/runtime/host/actor-transfer-runtime.d.ts +16 -18
  209. package/dist/runtime/host/actor-transfer-runtime.js +143 -176
  210. package/dist/runtime/host/application-job-queue.js +16 -33
  211. package/dist/runtime/host/bound-session-relay.js +1 -1
  212. package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
  213. package/dist/runtime/host/index.d.ts +14 -13
  214. package/dist/runtime/host/index.js +190 -171
  215. package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
  216. package/dist/runtime/host/instance-activation-authority.js +17 -45
  217. package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
  218. package/dist/runtime/host/location-runtime-owner.js +2 -2
  219. package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
  220. package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
  221. package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
  222. package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
  223. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
  224. package/dist/runtime/host/remote-bound-session-relay.js +15 -28
  225. package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
  226. package/dist/runtime/host/route-mesh-runtime.js +171 -252
  227. package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
  228. package/dist/runtime/host/runtime-shutdown.js +18 -21
  229. package/dist/runtime/host/service-relocation-control.js +6 -1
  230. package/dist/runtime/host/service-relocation-host-runtime.d.ts +21 -30
  231. package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
  232. package/dist/runtime/host/spot-address-transport.d.ts +3 -12
  233. package/dist/runtime/host/spot-address-transport.js +78 -220
  234. package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
  235. package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
  236. package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -10
  237. package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
  238. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
  239. package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
  240. package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
  241. package/dist/runtime/locations/authority-key-codec.js +4 -3
  242. package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
  243. package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
  244. package/dist/runtime/locations/creation-operation-id.js +6 -4
  245. package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
  246. package/dist/runtime/locations/in-memory-authority-store.js +31 -15
  247. package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
  248. package/dist/runtime/locations/in-memory-location-store.js +17 -14
  249. package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
  250. package/dist/runtime/locations/in-memory-provider-location-store.js +72 -22
  251. package/dist/runtime/locations/key-codec.js +3 -2
  252. package/dist/runtime/locations/lease-tracker.d.ts +3 -5
  253. package/dist/runtime/locations/lease-tracker.js +7 -11
  254. package/dist/runtime/locations/lifecycle.d.ts +4 -9
  255. package/dist/runtime/locations/lifecycle.js +2 -31
  256. package/dist/runtime/locations/location-store-failure.d.ts +2 -0
  257. package/dist/runtime/locations/location-store-failure.js +7 -0
  258. package/dist/runtime/locations/location-store-pages.d.ts +3 -0
  259. package/dist/runtime/locations/location-store-pages.js +13 -0
  260. package/dist/runtime/locations/location-store-repository.d.ts +5 -7
  261. package/dist/runtime/locations/location-store-repository.js +309 -336
  262. package/dist/runtime/locations/relocation-blob.js +18 -5
  263. package/dist/runtime/locations/resolvers.d.ts +5 -5
  264. package/dist/runtime/locations/resolvers.js +37 -28
  265. package/dist/runtime/locations/runtime.d.ts +5 -4
  266. package/dist/runtime/locations/runtime.js +123 -92
  267. package/dist/runtime/locations/spot-location-claims.d.ts +6 -0
  268. package/dist/runtime/locations/spot-location-claims.js +42 -1
  269. package/dist/runtime/messaging/payload-codec.js +26 -20
  270. package/dist/runtime/messaging/request-deadline.d.ts +3 -0
  271. package/dist/runtime/messaging/request-deadline.js +39 -0
  272. package/dist/runtime/messaging/submission-result.d.ts +4 -0
  273. package/dist/runtime/messaging/submission-result.js +56 -1
  274. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
  275. package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
  276. package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
  277. package/dist/runtime/spots/index.d.ts +14 -20
  278. package/dist/runtime/spots/index.js +302 -176
  279. package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
  280. package/dist/runtime/spots/spot-activation-registry.js +14 -50
  281. package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
  282. package/dist/runtime/spots/spot-activation-state.js +2 -2
  283. package/dist/runtime/spots/spot-activation.d.ts +3 -4
  284. package/dist/runtime/spots/spot-activation.js +49 -32
  285. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
  286. package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
  287. package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
  288. package/dist/runtime/spots/spot-actor-join-dispatch.js +4 -52
  289. package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
  290. package/dist/runtime/spots/spot-actor-membership.js +22 -45
  291. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
  292. package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
  293. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
  294. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
  295. package/dist/runtime/spots/spot-context.d.ts +2 -2
  296. package/dist/runtime/spots/spot-entry-activation.d.ts +2 -2
  297. package/dist/runtime/spots/spot-entry-activation.js +9 -20
  298. package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
  299. package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
  300. package/dist/runtime/spots/spot-manager-public.js +5 -4
  301. package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
  302. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
  303. package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
  304. package/dist/runtime/spots/spot-outbound.d.ts +7 -8
  305. package/dist/runtime/spots/spot-outbound.js +21 -23
  306. package/dist/runtime/spots/spot-remote-codec.js +5 -3
  307. package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
  308. package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
  309. package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
  310. package/dist/runtime/spots/spot-route-replies.js +3 -1
  311. package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -3
  312. package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
  313. package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
  314. package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
  315. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
  316. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
  317. package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -16
  318. package/dist/runtime/spots/spot-serial-executor.js +2 -2
  319. package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
  320. package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
  321. package/dist/runtime/spots/spot-timer.d.ts +3 -2
  322. package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
  323. package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
  324. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
  325. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +8 -4
  326. package/dist/runtime/streams/bound-actor-relay-sender.js +65 -41
  327. package/dist/runtime/streams/bound-session-service.d.ts +7 -0
  328. package/dist/runtime/streams/bound-session-service.js +12 -2
  329. package/dist/runtime/streams/index.d.ts +16 -17
  330. package/dist/runtime/streams/index.js +22 -23
  331. package/dist/runtime/streams/managed-stream.d.ts +5 -2
  332. package/dist/runtime/streams/managed-stream.js +20 -13
  333. package/dist/runtime/streams/native-fallback-bound-session.js +14 -19
  334. package/dist/runtime/streams/protocol.d.ts +6 -33
  335. package/dist/runtime/streams/protocol.js +38 -110
  336. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
  337. package/dist/runtime/streams/session-actor-coordinator.js +12 -4
  338. package/dist/runtime/streams/session-calls.d.ts +6 -8
  339. package/dist/runtime/streams/session-calls.js +6 -22
  340. package/dist/runtime/streams/session-context.d.ts +10 -10
  341. package/dist/runtime/streams/session-context.js +25 -10
  342. package/dist/runtime/streams/session-requests.js +2 -1
  343. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
  344. package/dist/runtime/streams/stream-frame-factory.js +2 -2
  345. package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
  346. package/dist/runtime/streams/stream-session-runtime.js +25 -33
  347. package/dist/runtime/workers/index.d.ts +2 -2
  348. package/dist/runtime/workers/index.js +5 -4
  349. package/package.json +3 -3
  350. package/src/contracts/Actors/ZLinkActorClient.ts +1 -1
  351. package/src/contracts/Channels/Calls.ts +1 -1
  352. package/src/contracts/Common/CoreTypes.ts +7 -0
  353. package/src/contracts/Common/index.ts +1 -1
  354. package/src/contracts/Configuration/Builders.ts +0 -1
  355. package/src/contracts/Configuration/Configs.ts +0 -1
  356. package/src/contracts/Configuration/InternalDefaults.ts +12 -0
  357. package/src/contracts/Configuration/Registration.ts +92 -48
  358. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
  359. package/src/contracts/Configuration/RegistrationBuilders.ts +77 -71
  360. package/src/contracts/Configuration/RegistrationTypes.ts +1 -5
  361. package/src/contracts/Configuration/RegistrationValidators.ts +19 -17
  362. package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
  363. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
  364. package/src/contracts/Handlers/JsonContract.ts +14 -4
  365. package/src/contracts/Locations/Authority.ts +7 -3
  366. package/src/contracts/Locations/Options.ts +1 -1
  367. package/src/contracts/Locations/Stores.ts +14 -0
  368. package/src/contracts/Spots/Contracts.ts +2 -2
  369. package/src/contracts/Streams/BoundSessionContracts.ts +1 -1
  370. package/src/contracts/Streams/IZLinkSession.ts +2 -3
  371. package/src/contracts/Streams/IZLinkSessionActor.ts +2 -6
  372. package/src/internal.ts +14 -0
  373. package/src/nest-integration.ts +28 -10
  374. package/src/runtime/abort.ts +6 -5
  375. package/src/runtime/activation-admission.ts +2 -8
  376. package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
  377. package/src/runtime/actors/actor-client.ts +85 -218
  378. package/src/runtime/actors/actor-context.ts +39 -33
  379. package/src/runtime/actors/actor-handoff.ts +24 -22
  380. package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
  381. package/src/runtime/actors/actor-local-native-join.ts +172 -174
  382. package/src/runtime/actors/actor-native-lookup.ts +2 -9
  383. package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
  384. package/src/runtime/actors/actor-remote-joiner.ts +9 -11
  385. package/src/runtime/actors/actor-remote-wire.ts +5 -3
  386. package/src/runtime/actors/actor-request-deadline.ts +4 -0
  387. package/src/runtime/actors/actor-retry-delay.ts +2 -1
  388. package/src/runtime/actors/actor-routed-join-transport.ts +3 -5
  389. package/src/runtime/actors/actor-runtime-state.ts +85 -247
  390. package/src/runtime/actors/bound-session-wire.ts +2 -8
  391. package/src/runtime/actors/deferred-join-completion.ts +10 -6
  392. package/src/runtime/actors/index.ts +100 -79
  393. package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
  394. package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
  395. package/src/runtime/admission.ts +8 -1
  396. package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
  397. package/src/runtime/backend/contracts/index.ts +14 -37
  398. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
  399. package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
  400. package/src/runtime/backend/node/node-backend-adapter-support.ts +67 -10
  401. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +0 -2
  402. package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
  403. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
  404. package/src/runtime/backend/node/node-raw-binding-port.ts +44 -49
  405. package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
  406. package/src/runtime/backend/node/node-socket-backend-adapter.ts +4 -3
  407. package/src/runtime/backend/raw-binding-port.ts +1 -1
  408. package/src/runtime/backend/runtime-values.ts +4 -1
  409. package/src/runtime/channels/channel-clients.ts +139 -102
  410. package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
  411. package/src/runtime/channels/channel-envelope.ts +74 -57
  412. package/src/runtime/channels/channel-outbound-operations.ts +40 -55
  413. package/src/runtime/channels/channel-receive-loops.ts +39 -7
  414. package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
  415. package/src/runtime/channels/channel-runtime-manager.ts +12 -30
  416. package/src/runtime/channels/channel-socket-options.ts +8 -15
  417. package/src/runtime/channels/channel-socket-registry.ts +291 -196
  418. package/src/runtime/channels/channel-transports.ts +168 -145
  419. package/src/runtime/channels/client-server-location-runtime.ts +17 -17
  420. package/src/runtime/channels/client-server-service-wire.ts +40 -12
  421. package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
  422. package/src/runtime/channels/fanout-location-runtime.ts +172 -91
  423. package/src/runtime/channels/local-spot-route-transport.ts +1 -5
  424. package/src/runtime/channels/router-socket-spot-route-transport.ts +2 -6
  425. package/src/runtime/channels/source-spot-router.ts +2 -9
  426. package/src/runtime/channels/spot-direct-envelope.ts +1 -1
  427. package/src/runtime/channels/spot-node-route-transport.ts +7 -9
  428. package/src/runtime/channels/spot-route-bridge-transport.ts +5 -12
  429. package/src/runtime/channels/spot-route-dispatch-strategy.ts +11 -30
  430. package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
  431. package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
  432. package/src/runtime/diagnostics/flow-context.ts +16 -2
  433. package/src/runtime/diagnostics/index.ts +27 -17
  434. package/src/runtime/diagnostics/message-flow.ts +15 -25
  435. package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
  436. package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
  437. package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
  438. package/src/runtime/disposal.ts +19 -0
  439. package/src/runtime/execution/index.ts +60 -20
  440. package/src/runtime/execution/serial-execution-queue.ts +131 -18
  441. package/src/runtime/execution/state-lane.ts +142 -4
  442. package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
  443. package/src/runtime/foundation/event-loop-resources.ts +5 -122
  444. package/src/runtime/foundation/operation-identity.ts +11 -5
  445. package/src/runtime/foundation/operation-registry.ts +33 -50
  446. package/src/runtime/foundation/raw-service-mesh-runtime.ts +127 -125
  447. package/src/runtime/foundation/runtime-state-projections.ts +9 -1
  448. package/src/runtime/foundation/service-authority-payload-codec.ts +31 -13
  449. package/src/runtime/foundation/service-discovery-registry.ts +32 -3
  450. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
  451. package/src/runtime/foundation/service-liveness-registry.ts +2 -1
  452. package/src/runtime/foundation/service-maintenance-runtime.ts +0 -10
  453. package/src/runtime/foundation/service-metadata-codec.ts +2 -2
  454. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
  455. package/src/runtime/foundation/service-relocation-object-owner.ts +5 -2
  456. package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
  457. package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
  458. package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -17
  459. package/src/runtime/foundation/service-stateful-registry.ts +14 -2
  460. package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
  461. package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
  462. package/src/runtime/foundation/service-topology-registry.ts +23 -32
  463. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
  464. package/src/runtime/foundation/service-wire-codec.ts +15 -8
  465. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  466. package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
  467. package/src/runtime/framework-errors-internal.ts +380 -134
  468. package/src/runtime/handlers/handler-instance-scope.ts +68 -95
  469. package/src/runtime/host/actor-packet-relay.ts +63 -160
  470. package/src/runtime/host/actor-placement-coordinator.ts +8 -5
  471. package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
  472. package/src/runtime/host/actor-transfer-runtime.ts +180 -260
  473. package/src/runtime/host/application-job-queue.ts +28 -34
  474. package/src/runtime/host/bound-session-relay.ts +1 -2
  475. package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
  476. package/src/runtime/host/index.ts +327 -320
  477. package/src/runtime/host/instance-activation-authority.ts +89 -109
  478. package/src/runtime/host/location-runtime-owner.ts +4 -2
  479. package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
  480. package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
  481. package/src/runtime/host/remote-bound-session-relay.ts +16 -57
  482. package/src/runtime/host/route-mesh-runtime.ts +228 -271
  483. package/src/runtime/host/runtime-shutdown.ts +17 -21
  484. package/src/runtime/host/service-relocation-control.ts +14 -1
  485. package/src/runtime/host/service-relocation-host-runtime.ts +699 -561
  486. package/src/runtime/host/spot-address-transport.ts +175 -356
  487. package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
  488. package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
  489. package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
  490. package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
  491. package/src/runtime/locations/authority-key-codec.ts +7 -3
  492. package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
  493. package/src/runtime/locations/creation-operation-id.ts +6 -3
  494. package/src/runtime/locations/domain-store-contract.ts +12 -3
  495. package/src/runtime/locations/in-memory-authority-store.ts +44 -15
  496. package/src/runtime/locations/in-memory-location-store.ts +50 -39
  497. package/src/runtime/locations/in-memory-provider-location-store.ts +100 -25
  498. package/src/runtime/locations/key-codec.ts +3 -2
  499. package/src/runtime/locations/lease-tracker.ts +8 -14
  500. package/src/runtime/locations/lifecycle.ts +13 -43
  501. package/src/runtime/locations/location-store-failure.ts +4 -0
  502. package/src/runtime/locations/location-store-pages.ts +18 -0
  503. package/src/runtime/locations/location-store-repository.ts +457 -482
  504. package/src/runtime/locations/relocation-blob.ts +17 -6
  505. package/src/runtime/locations/resolvers.ts +75 -49
  506. package/src/runtime/locations/runtime.ts +220 -110
  507. package/src/runtime/locations/spot-location-claims.ts +58 -1
  508. package/src/runtime/messaging/payload-codec.ts +35 -24
  509. package/src/runtime/messaging/request-deadline.ts +58 -0
  510. package/src/runtime/messaging/submission-result.ts +72 -2
  511. package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
  512. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
  513. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
  514. package/src/runtime/spots/index.ts +433 -229
  515. package/src/runtime/spots/spot-activation-registry.ts +30 -69
  516. package/src/runtime/spots/spot-activation-state.ts +2 -2
  517. package/src/runtime/spots/spot-activation.ts +67 -37
  518. package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
  519. package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
  520. package/src/runtime/spots/spot-actor-membership.ts +40 -72
  521. package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
  522. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
  523. package/src/runtime/spots/spot-context.ts +3 -3
  524. package/src/runtime/spots/spot-entry-activation.ts +13 -30
  525. package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
  526. package/src/runtime/spots/spot-manager-public.ts +21 -17
  527. package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
  528. package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
  529. package/src/runtime/spots/spot-outbound.ts +59 -47
  530. package/src/runtime/spots/spot-remote-codec.ts +7 -3
  531. package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
  532. package/src/runtime/spots/spot-route-replies.ts +6 -4
  533. package/src/runtime/spots/spot-routed-actor-admission.ts +13 -26
  534. package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
  535. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
  536. package/src/runtime/spots/spot-runtime-ports.ts +5 -27
  537. package/src/runtime/spots/spot-serial-executor.ts +2 -2
  538. package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
  539. package/src/runtime/spots/spot-timer.ts +3 -2
  540. package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
  541. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
  542. package/src/runtime/streams/bound-actor-relay-sender.ts +98 -66
  543. package/src/runtime/streams/bound-session-service.ts +22 -2
  544. package/src/runtime/streams/index.ts +78 -68
  545. package/src/runtime/streams/managed-stream.ts +32 -23
  546. package/src/runtime/streams/native-fallback-bound-session.ts +14 -28
  547. package/src/runtime/streams/protocol.ts +34 -88
  548. package/src/runtime/streams/session-actor-coordinator.ts +17 -5
  549. package/src/runtime/streams/session-calls.ts +11 -36
  550. package/src/runtime/streams/session-context.ts +60 -25
  551. package/src/runtime/streams/session-requests.ts +2 -1
  552. package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
  553. package/src/runtime/streams/stream-frame-factory.ts +2 -3
  554. package/src/runtime/streams/stream-session-runtime.ts +57 -59
  555. package/src/runtime/workers/index.ts +13 -12
  556. package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
  557. package/dist/runtime/actors/post-commit-actor-location.js +0 -72
  558. package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
  559. package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
  560. package/src/runtime/actors/post-commit-actor-location.ts +0 -121
  561. package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
@@ -7,9 +7,11 @@ exports.submitRoutedActorJoinReply = submitRoutedActorJoinReply;
7
7
  exports.submitRoutedActorJoinError = submitRoutedActorJoinError;
8
8
  exports.appendRouteReplyParts = appendRouteReplyParts;
9
9
  exports.hasReplyToken = hasReplyToken;
10
+ const node_os_1 = require("node:os");
10
11
  const channel_envelope_1 = require("../channels/channel-envelope");
11
12
  const configuration_1 = require("../configuration");
12
13
  const spot_route_reply_wire_1 = require("./spot-route-reply-wire");
14
+ const nativeErrnoValues = node_os_1.constants.errno;
13
15
  function submitRouteReply(operation) {
14
16
  try {
15
17
  operation.submit();
@@ -70,5 +72,5 @@ function requireRoutedActorJoinEnvelope(decoded) {
70
72
  function isNativeBadAddress(error) {
71
73
  return (typeof error === 'object' &&
72
74
  error !== null &&
73
- Number(error.nativeErrno) === 14);
75
+ Number(error.nativeErrno) === nativeErrnoValues.EFAULT);
74
76
  }
@@ -1,18 +1,18 @@
1
1
  import type { ZLinkActor, ZLinkMessage, ZLinkMessageSerializer, ZLinkSpotActorJoinResult } from '../../contracts';
2
+ import type { ZLinkActorHandoffPacket, ZLinkActorHandoffResult } from '../actors/actor-handoff';
3
+ import type { ZLinkRemoteBoundSessionTarget } from '../actors/actor-runtime-state';
2
4
  import type { ZLinkBackendReceived as BackendReceived } from '../backend/runtime-values';
3
5
  import { type ZLinkRoutedActorTransferProvider } from './spot-remote-codec';
4
6
  import type { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
5
- import type { ZLinkActorHandoffPacket, ZLinkActorHandoffResult } from '../actors/actor-handoff';
6
7
  interface ZLinkRoutedActorAdmissionTarget {
7
8
  onActorJoin?(actorId: string, request: ZLinkMessage): Promise<ZLinkSpotActorJoinResult>;
8
9
  }
9
10
  interface ZLinkSpotRoutedActorAdmissionOptions {
10
11
  readonly serial: ZLinkSpotSerialTurnExecutor;
11
- readonly isSpotClosing?: () => boolean;
12
12
  readonly getTarget: () => ZLinkRoutedActorAdmissionTarget;
13
13
  readonly defaultAccept: boolean;
14
14
  readonly routedActorTransferProvider?: ZLinkRoutedActorTransferProvider;
15
- readonly commitTransferredActor?: (actor: ZLinkActor, backlog: readonly ZLinkActorHandoffPacket[]) => Promise<readonly ZLinkActorHandoffResult[]>;
15
+ readonly commitTransferredActor?: (actor: ZLinkActor, backlog: readonly ZLinkActorHandoffPacket[], sealedSession: ZLinkRemoteBoundSessionTarget | undefined) => Promise<readonly ZLinkActorHandoffResult[]>;
16
16
  readonly messageSerializers?: ReadonlyMap<string, ZLinkMessageSerializer>;
17
17
  readonly pendingAdmissionTimeoutMs?: number;
18
18
  /** Spec 27 §4: with tracing Off, inbound flow fields are neither validated nor carried forward. */
@@ -7,7 +7,7 @@ const payload_codec_1 = require("../messaging/payload-codec");
7
7
  const routing_id_1 = require("../routing-id");
8
8
  const spot_remote_codec_1 = require("./spot-remote-codec");
9
9
  const spot_route_replies_1 = require("./spot-route-replies");
10
- const framework_errors_internal_1 = require("../framework-errors-internal");
10
+ const DEFAULT_PENDING_ADMISSION_TIMEOUT_MS = 30_000;
11
11
  class ZLinkSpotRoutedActorAdmission {
12
12
  options;
13
13
  pending = new Map();
@@ -22,15 +22,6 @@ class ZLinkSpotRoutedActorAdmission {
22
22
  if (decoded === undefined) {
23
23
  return false;
24
24
  }
25
- if (this.options.isSpotClosing?.() === true) {
26
- try {
27
- (0, spot_route_replies_1.submitRoutedActorJoinError)(received, decoded, (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestRejected, `Actor '${decoded.actorId}' target Spot is closing.`));
28
- }
29
- finally {
30
- this.closeDecoded(decoded);
31
- }
32
- return true;
33
- }
34
25
  if (decoded.phase === 'admission') {
35
26
  await this.admitTransfer(decoded, received);
36
27
  return true;
@@ -149,7 +140,7 @@ class ZLinkSpotRoutedActorAdmission {
149
140
  throw new Error('Remote actor transfer commit cannot materialize the target actor.');
150
141
  }
151
142
  const { actor, actorRef } = await this.options.routedActorTransferProvider(decoded.actorId, decoded.actorType, decoded.transferAdapterKey, decoded.transferState, decoded.actorEntryNodeRid, decoded.remoteBoundSessionTarget);
152
- const handoffResults = (await this.options.commitTransferredActor?.(actor, decoded.handoffBacklog)) ?? [];
143
+ const handoffResults = (await this.options.commitTransferredActor?.(actor, decoded.handoffBacklog, decoded.remoteBoundSessionTarget)) ?? [];
153
144
  const commitReply = {
154
145
  accepted: true,
155
146
  actorNodeRid: String(actorRef.nodeRid),
@@ -193,7 +184,7 @@ class ZLinkSpotRoutedActorAdmission {
193
184
  pending.deadline = setTimeout(() => {
194
185
  if (this.pending.get(transferId) === pending)
195
186
  this.pending.delete(transferId);
196
- }, this.options.pendingAdmissionTimeoutMs ?? 30_000);
187
+ }, this.options.pendingAdmissionTimeoutMs ?? DEFAULT_PENDING_ADMISSION_TIMEOUT_MS);
197
188
  pending.deadline.unref();
198
189
  }
199
190
  closeDecoded(decoded) {
@@ -17,12 +17,11 @@ interface ZLinkRoutedFrameAdmissionTarget {
17
17
  interface ZLinkSpotRoutedFrameDispatchOptions {
18
18
  readonly nativeSpotId: string;
19
19
  readonly serial: ZLinkSpotSerialTurnExecutor;
20
- readonly isSpotClosing?: () => boolean;
21
20
  readonly resolveActor: (actorId: string) => ZLinkActor | undefined;
22
21
  readonly getTarget: () => ZLinkRoutedFrameAdmissionTarget & ZLinkSpot;
23
22
  readonly defaultAccept: boolean;
24
23
  readonly routedActorTransferProvider?: ZLinkRoutedActorTransferProvider;
25
- readonly commitTransferredActor?: (actor: ZLinkActor, backlog: readonly ZLinkActorHandoffPacket[]) => Promise<readonly ZLinkActorHandoffResult[]>;
24
+ readonly commitTransferredActor?: (actor: ZLinkActor, backlog: readonly ZLinkActorHandoffPacket[], sealedSession: ZLinkRemoteBoundSessionTarget | undefined) => Promise<readonly ZLinkActorHandoffResult[]>;
26
25
  readonly actorPacketHandler?: (delivery: ZLinkActorPacketDelivery) => Promise<unknown>;
27
26
  readonly routedBoundSessionReceiver?: (actorId: string, message: unknown, packetName: string | undefined, metadata: ReadonlyMap<string, string>, actorRef?: ActorRef, actorPacketTarget?: unknown, signal?: AbortSignal) => Promise<void>;
28
27
  readonly routedBoundSessionResponseReceiver?: (actorId: string, packetName: string, requestSeq: bigint, message: unknown, replyOptions: ZLinkActorResponseOptions, actorPacketTarget?: unknown, signal?: AbortSignal) => Promise<void>;
@@ -40,7 +40,6 @@ class ZLinkSpotRoutedFrameDispatch {
40
40
  });
41
41
  this.routedActorAdmission = new spot_routed_actor_admission_1.ZLinkSpotRoutedActorAdmission({
42
42
  serial: options.serial,
43
- isSpotClosing: options.isSpotClosing,
44
43
  getTarget: options.getTarget,
45
44
  defaultAccept: options.defaultAccept,
46
45
  routedActorTransferProvider: options.routedActorTransferProvider,
@@ -6,6 +6,7 @@ import type { ZLinkSpotHandlerRegistration } from './spot-handler-registry';
6
6
  import type { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
7
7
  import type { ZLinkSerialWorkOptions } from '../execution/serial-execution-queue';
8
8
  interface ZLinkRoutedSpotPacketActivation {
9
+ readonly objectGeneration?: bigint;
9
10
  readonly meshName?: string;
10
11
  readonly spotId: RoutingId;
11
12
  readonly spot: ZLinkSpot;
@@ -28,6 +29,9 @@ interface ZLinkRoutedSpotPacketContext {
28
29
  readonly signal?: AbortSignal;
29
30
  /** Wait until a recovered activation has actually entered its first handler. */
30
31
  readonly awaitFirstHandlerTurn?: boolean;
32
+ readonly onOneWayError?: (error: unknown) => void;
33
+ /** Retains the caller's Instance address intent through an incarnation boundary. */
34
+ readonly activationRecord?: import('../foundation/service-runtime-contracts').ReceiveRecord;
31
35
  }
32
36
  export declare class ZLinkRoutedSpotPacketDispatch {
33
37
  private readonly options;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ZLinkRoutedSpotPacketDispatch = void 0;
4
+ const dispatch_error_details_1 = require("../diagnostics/dispatch-error-details");
4
5
  const contracts_1 = require("../../contracts");
5
6
  const ZLinkDispatchOptions_1 = require("../../contracts/Dispatch/ZLinkDispatchOptions");
6
7
  const configuration_1 = require("../configuration");
@@ -58,17 +59,42 @@ class ZLinkRoutedSpotPacketDispatch {
58
59
  const applicationClaim = activation.meshName === undefined
59
60
  ? undefined
60
61
  : this.options.claimApplicationWork?.(activation.meshName);
61
- const runHandler = async () => {
62
+ const originalRecord = context.activationRecord?.activationRecord;
63
+ const instanceIntent = originalRecord?.activation === 'missing' ||
64
+ (originalRecord?.activation === 'ready' && originalRecord.instanceIntent);
65
+ const runHandler = async (failure) => {
62
66
  try {
67
+ if (failure !== undefined)
68
+ throw failure;
69
+ const current = this.options.resolveActivation(spotId);
70
+ if (current === undefined ||
71
+ (!instanceIntent &&
72
+ (current !== activation ||
73
+ (originalRecord?.activation === 'ready' &&
74
+ originalRecord.route.objectGeneration !== current.objectGeneration)))) {
75
+ throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestTargetNotFound, `Spot '${String(spotId)}' is not active.`);
76
+ }
77
+ if (context.activationRecord?.deadlineUnixMs !== undefined &&
78
+ context.activationRecord.deadlineUnixMs < BigInt(Date.now())) {
79
+ throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.DeadlineExceeded, `Spot '${String(spotId)}' request deadline has expired.`);
80
+ }
81
+ const currentRegistrations = current === activation
82
+ ? registrations
83
+ : current.handlers
84
+ .snapshot()
85
+ .filter((registration) => registration.kind === 'packet' &&
86
+ (registration.packetName ?? registration.handlerType.name) ===
87
+ (packetName ?? ''));
63
88
  // Decode only after the Spot has acquired both application admission
64
89
  // and its execution authority.
65
90
  const payload = decodePayload();
66
- for (const registration of registrations) {
67
- const handler = await (0, handler_instance_scope_1.resolveLifecycleHandler)(activation.spot, registration.handlerType, this.options.providerResolver);
91
+ for (const registration of currentRegistrations) {
92
+ const handler = await (0, handler_instance_scope_1.resolveLifecycleHandler)(current.spot, registration.handlerType, this.options.providerResolver);
68
93
  resolveFirstHandlerTurn?.();
69
94
  resolveFirstHandlerTurn = undefined;
95
+ context.activationRecord?.onHandlerTurnStarted?.();
70
96
  (0, application_job_queue_scope_1.releaseApplicationJobPermitBeforeHandler)();
71
- response = await handler.handle(activation.spot, payload, {
97
+ response = await handler.handle(current.spot, payload, {
72
98
  channelName: context.channelName,
73
99
  contentType: context.contentType,
74
100
  packetName: packetName,
@@ -94,8 +120,24 @@ class ZLinkRoutedSpotPacketDispatch {
94
120
  detachedApplicationPermit?.releaseAfterInternalProcessing();
95
121
  applicationClaim?.close();
96
122
  }
97
- }, (error) => this.reportFailure(spotId, packetName, context, false, error), context.workOptions, { signal: context.signal });
98
- await firstHandlerTurn;
123
+ }, (error) => {
124
+ if (context.onOneWayError === undefined) {
125
+ this.reportFailure(spotId, packetName, context, false, error);
126
+ }
127
+ else if (resolveFirstHandlerTurn === undefined) {
128
+ context.onOneWayError(error);
129
+ }
130
+ }, context.workOptions, { signal: context.signal }, instanceIntent
131
+ ? async (failure) => {
132
+ try {
133
+ await runHandler(failure);
134
+ }
135
+ finally {
136
+ detachedApplicationPermit?.releaseAfterInternalProcessing();
137
+ applicationClaim?.close();
138
+ }
139
+ }
140
+ : undefined);
99
141
  }
100
142
  catch (error) {
101
143
  detached = false;
@@ -103,16 +145,18 @@ class ZLinkRoutedSpotPacketDispatch {
103
145
  rejectFirstHandlerTurn?.(error);
104
146
  throw error;
105
147
  }
148
+ await firstHandlerTurn;
106
149
  }
107
150
  else {
108
151
  if (activation.serial.isCurrentTurn) {
109
152
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.InvalidOperation, `Spot '${spotId}' cannot await a request to its current serial turn.`);
110
153
  }
111
- await activation.serial.execute(runHandler, context.workOptions);
154
+ await activation.serial.execute(runHandler, context.workOptions, instanceIntent ? runHandler : undefined);
112
155
  }
113
156
  }
114
157
  catch (error) {
115
- this.reportFailure(spotId, packetName, context, returnResponse, error);
158
+ if (context.activationRecord?.activationRecord === undefined)
159
+ this.reportFailure(spotId, packetName, context, returnResponse, error);
116
160
  throw error;
117
161
  }
118
162
  finally {
@@ -122,16 +166,17 @@ class ZLinkRoutedSpotPacketDispatch {
122
166
  return returnResponse ? response : undefined;
123
167
  }
124
168
  reportFailure(spotId, packetName, context, returnResponse, error) {
125
- const frameworkErrorKind = error instanceof contracts_1.ZLinkFrameworkException ? (0, framework_errors_internal_1.internalFrameworkErrorKind)(error) : undefined;
126
- this.options.dispatchErrors?.report({
127
- surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.SpotRoute,
169
+ const reporter = this.options.dispatchErrors;
170
+ if (reporter?.captureEnabled() !== true)
171
+ return;
172
+ reporter.report({
173
+ surface: context.activationRecord?.activationRecord?.kind === 'instanceSpot'
174
+ ? ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.InstanceSpot
175
+ : ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.SpotRoute,
128
176
  messageKind: returnResponse
129
177
  ? ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request
130
178
  : ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Send,
131
- reason: frameworkErrorKind === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.WorkerQueueFull ||
132
- frameworkErrorKind === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.DeadlineExceeded
133
- ? ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.Backpressure
134
- : ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.HandlerException,
179
+ reason: (0, dispatch_error_details_1.dispatchReasonFromError)(error),
135
180
  action: returnResponse ? ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.FailCaller : ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.Drop,
136
181
  packetName,
137
182
  channelName: context.channelName,
@@ -140,6 +185,11 @@ class ZLinkRoutedSpotPacketDispatch {
140
185
  });
141
186
  }
142
187
  reportMissing(spotId, packetName, context, returnResponse) {
188
+ if (context.activationRecord?.activationRecord !== undefined) {
189
+ if (!returnResponse && context.onOneWayError !== undefined)
190
+ context.onOneWayError((0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.HandlerNotFound, `SPOT route handler not found: ${packetName}`));
191
+ return;
192
+ }
143
193
  this.options.dispatchErrors?.report({
144
194
  surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.SpotRoute,
145
195
  messageKind: returnResponse
@@ -17,41 +17,27 @@ export interface ZLinkEntryActorRuntime {
17
17
  }
18
18
  export interface ZLinkSpotActorTransferRuntime {
19
19
  prepareDeferredJoinAccepted(actorId: string, operationId: ZLinkActorJoinOperationId, actorRef: ActorRef, rawReply: Uint8Array, replyContentType?: string): ZLinkDeferredJoinCompletion;
20
- deliverDeferredJoinAccepted(completion: ZLinkDeferredJoinCompletion, actor: ZLinkActor, actorRef: ActorRef, submitMailbox: <T>(operation: () => Promise<T>) => Promise<T>, signal?: AbortSignal): Promise<void>;
20
+ deliverDeferredJoinCompletion(completion: ZLinkDeferredJoinCompletion, actor: ZLinkActor, actorRef: ActorRef, submitMailbox: <T>(operation: () => Promise<T>) => Promise<T>, signal?: AbortSignal): Promise<void>;
21
21
  getOrCreateRoutedActor(actorId: string, actorType: string, actorRef?: ActorRef, remoteBoundSessionTarget?: ZLinkRemoteBoundSessionTarget, actorCreateRequest?: Message, signal?: AbortSignal): Promise<ZLinkRemoteActorJoinActor>;
22
22
  materializeRoutedActor: ZLinkRoutedActorTransferProvider;
23
23
  commitRoutedActorAuthority(actor: ZLinkActor, sourceActorRef: ActorRef, transferId: string, spotId: RoutingId, spotGeneration: bigint, membershipEpoch: bigint, deadlineAtMs: number, signal?: AbortSignal): Promise<import('../locations/internal-location-contracts').ZLinkAuthoritySnapshot>;
24
- rememberRoutedActorTransferTarget(actorId: string, target: ZLinkRemoteBoundSessionTarget | undefined): void;
25
- claimNativeActorLocation(actor: ZLinkActor, spotId: RoutingId, spotMeshName: string): Promise<ZLinkNativeActorJoinSnapshot>;
26
24
  claimRoutedActorLocation(actor: ZLinkActor, spotId: RoutingId, spotMeshName: string, joinedLocation?: {
27
25
  readonly spotGeneration: bigint;
28
26
  readonly membershipEpoch: bigint;
29
27
  }): Promise<void>;
30
- publishRoutedActorOwnership(actor: ZLinkActor): Promise<void>;
28
+ publishRoutedActorOwnership(actor: ZLinkActor, sealedSession: ZLinkRemoteBoundSessionTarget | undefined): Promise<void>;
31
29
  openRoutedActorSession(actor: ZLinkActor): Promise<void>;
32
30
  bindRoutedActorRef(actor: ZLinkActor, actorRef: ActorRef): void;
33
31
  commitRoutedActor(actor: ZLinkActor, spotId: RoutingId, spot: ZLinkSpot): void;
34
32
  clearRoutedActor(actor: ZLinkActor): void;
35
- rollbackNativeActorJoin(actor: ZLinkActor, snapshot: ZLinkNativeActorJoinSnapshot): Promise<void>;
36
33
  rollbackRoutedActor(actor: ZLinkActor, signal?: AbortSignal): Promise<void>;
37
34
  notifyCoreSourceLeave(actor: ZLinkActor, callback: () => Promise<void>): Promise<void>;
38
35
  actorEntryNodeRid(actor: ZLinkActor): RoutingId | undefined;
39
36
  }
40
- export interface ZLinkNativeActorJoinSnapshot {
41
- readonly spotId?: RoutingId;
42
- readonly spot?: ZLinkSpot;
43
- readonly locationSpotId?: RoutingId;
44
- readonly spotMeshName?: string;
45
- readonly actorRef?: ActorRef;
46
- readonly spotGeneration?: bigint;
47
- readonly membershipEpoch?: bigint;
48
- readonly ownerNodeGeneration?: bigint;
49
- }
50
37
  export interface ZLinkSpotBoundSessionRuntime {
51
38
  receiveRoutedBoundSession(actorId: string, message: unknown, packetName: string | undefined, metadata: ReadonlyMap<string, string>, actorRef?: ActorRef, actorPacketTarget?: unknown, signal?: AbortSignal): Promise<void>;
52
39
  receiveRoutedBoundSessionResponse(actorId: string, packetName: string, requestSeq: bigint, message: unknown, replyOptions: ZLinkActorResponseOptions, actorPacketTarget?: unknown, signal?: AbortSignal): Promise<void>;
53
40
  receiveRoutedBoundSessionError(actorId: string, packetName: string, requestSeq: bigint, error: unknown, metadata: ReadonlyMap<string, string>, actorPacketTarget?: unknown, signal?: AbortSignal): Promise<void>;
54
- rememberRemoteBoundSessionTarget(actorId: string, target: ZLinkRemoteBoundSessionTarget | undefined): void;
55
41
  resolveRemoteBoundSessionTarget(sourceNodeRid: RoutingId, sourceSessionRid: RoutingId): ZLinkRemoteBoundSessionTarget | undefined;
56
42
  actorPacketTargetForState(actorId: string): ZLinkRemoteActorPacketTarget | undefined;
57
43
  sendActorResponse(actor: ZLinkActor, packetName: string, requestSeq: bigint, response: unknown, replyOptions: ZLinkActorResponseOptions, fallbackBoundSessionTarget?: ZLinkRemoteBoundSessionTarget, fallbackActorRef?: ActorRef, signal?: AbortSignal): Promise<void>;
@@ -71,7 +71,7 @@ class ZLinkSpotSerialExecutor {
71
71
  */
72
72
  close() {
73
73
  const children = this.closeChildren();
74
- return Promise.all([children, this.spotSerial.close()]).then(() => undefined);
74
+ return Promise.all([children, this.spotSerial.whenIdle()]).then(() => undefined);
75
75
  }
76
76
  /**
77
77
  * Closes the Actor and timer queues. The Spot queue stays open for the Spot
@@ -87,7 +87,7 @@ class ZLinkSpotSerialExecutor {
87
87
  this.timerSerials.clear();
88
88
  this.actorExecutors.clear();
89
89
  this.closePromise = Promise.all([
90
- ...childSerials.map((serial) => serial.close()),
90
+ ...childSerials.map((serial) => serial.whenIdle()),
91
91
  ...actorExecutors.map((executor) => executor.close())
92
92
  ]).then(() => undefined);
93
93
  return this.closePromise;
@@ -1,6 +1,11 @@
1
- import { ZLinkExecutionBarrier, ZLinkSpotSerialTurn } from '../execution';
1
+ import { ZLinkExecutionBarrier, type ZLinkExecutionBarrierClaim, ZLinkSpotSerialTurn } from '../execution';
2
2
  import type { SpotId } from '../../contracts';
3
- import { type ZLinkSerialSchedulerOptions, type ZLinkSerialWorkOptions } from '../execution/serial-execution-queue';
3
+ import type { ZLinkFrameworkException } from '../../contracts/Errors/ZLinkFrameworkException';
4
+ import { type ZLinkSerialSchedulerOptions, type ZLinkSerialWorkOptions, type ZLinkSerialWorkRecord } from '../execution/serial-execution-queue';
5
+ import type { ZLinkSerialLifecycleContext } from '../execution/serial-execution-queue';
6
+ export type ZLinkSpotApplicationTurnContext = ZLinkExecutionBarrierClaim & {
7
+ readonly replay?: (failure?: unknown) => Promise<unknown> | unknown;
8
+ };
4
9
  export declare class ZLinkSpotSerialTurnExecutor {
5
10
  private readonly yieldAllowed;
6
11
  readonly sourceSpotId?: SpotId | undefined;
@@ -10,6 +15,7 @@ export declare class ZLinkSpotSerialTurnExecutor {
10
15
  private executionBarrier;
11
16
  private resumedOwnerTurn;
12
17
  private lastActivityAtMs;
18
+ private lifecycleAdmissionClosed;
13
19
  activeTurnId: number;
14
20
  constructor(yieldAllowed?: boolean, sourceSpotId?: SpotId | undefined, schedulerOptions?: ZLinkSerialSchedulerOptions);
15
21
  get isExecuting(): boolean;
@@ -17,14 +23,25 @@ export declare class ZLinkSpotSerialTurnExecutor {
17
23
  get hasPendingWork(): boolean;
18
24
  get lastActivityAt(): number;
19
25
  get currentTurn(): ZLinkSpotSerialTurn | undefined;
20
- /** Stops new turns while allowing turns accepted before close to complete. */
21
- close(): Promise<void>;
26
+ /** Waits for turns admitted through the execution barrier to complete. */
27
+ whenIdle(): Promise<void>;
22
28
  closeAdmission(): void;
29
+ /**
30
+ * Spot messaging §7 step 3: after Close ends this queue's admission, an Instance
31
+ * intent message is refused before admission as a released owner fence, and any
32
+ * other message finds no incarnation. Undefined while admission is open.
33
+ */
34
+ applicationAdmissionRefusal(instanceIntent: boolean): ZLinkFrameworkException | undefined;
35
+ /**
36
+ * Spot messaging §7: once Close commits Closing, membership work can no longer
37
+ * enter this incarnation while Instance intent messages still queue behind Close.
38
+ */
39
+ setLifecycleAdmissionClosed(closed: boolean): void;
23
40
  /** Distinguishes a gate-owning turn from a suspended AsyncLocalStorage tail. */
24
41
  isActiveTurn(turn: ZLinkSpotSerialTurn, turnId: number): boolean;
25
42
  setExecutionBarrier(barrier: ZLinkExecutionBarrier): void;
26
43
  /** Runs `operation` in serial order, one turn at a time. */
27
- execute<T>(operation: () => Promise<T> | T, workOptions?: ZLinkSerialWorkOptions): Promise<T>;
44
+ execute<T>(operation: () => Promise<T> | T, workOptions?: ZLinkSerialWorkOptions, replay?: (failure?: unknown) => Promise<T>): Promise<T>;
28
45
  /**
29
46
  * Always enqueues `operation` as its own serial turn, even when called
30
47
  * from within the currently active turn. Detached completion callbacks use
@@ -37,15 +54,18 @@ export declare class ZLinkSpotSerialTurnExecutor {
37
54
  */
38
55
  postOneWay(operation: () => Promise<unknown> | unknown, onError: (error: unknown) => void, workOptions?: ZLinkSerialWorkOptions, admission?: {
39
56
  readonly signal?: AbortSignal;
40
- }): Promise<void>;
57
+ }, replay?: (failure?: unknown) => Promise<unknown>): Promise<void>;
41
58
  /**
42
59
  * Enqueues the framework-owned turn that completes a boundary while normal
43
60
  * application admission remains sealed. Callers must release the matching
44
61
  * barrier seal after this turn finishes.
45
62
  */
46
63
  postBarrierTurn<T>(operation: () => Promise<T> | T, workOptions?: ZLinkSerialWorkOptions): Promise<T>;
47
- /** Holds this Spot's lifecycle FIFO until the full operation result settles. */
64
+ /** Admits membership work and holds the lifecycle FIFO until its result settles. */
48
65
  executeLifecycleOperation<T>(operation: () => Promise<T> | T): Promise<T>;
66
+ /** Runs owner control work that establishes or completes its own admission seal. */
67
+ executeControlLifecycleOperation<T>(operation: () => Promise<T> | T, context?: ZLinkSerialLifecycleContext): Promise<T>;
68
+ visitPendingApplication(visitor: (record: ZLinkSerialWorkRecord<unknown>) => void): void;
49
69
  private enqueueApplicationTurn;
50
70
  private enqueueFrameworkTurn;
51
71
  private enqueueContinuationTurn;
@@ -14,6 +14,7 @@ class ZLinkSpotSerialTurnExecutor {
14
14
  executionBarrier;
15
15
  resumedOwnerTurn;
16
16
  lastActivityAtMs = performance.now();
17
+ lifecycleAdmissionClosed = false;
17
18
  activeTurnId = 0;
18
19
  constructor(yieldAllowed = true, sourceSpotId, schedulerOptions) {
19
20
  this.yieldAllowed = yieldAllowed;
@@ -35,13 +36,32 @@ class ZLinkSpotSerialTurnExecutor {
35
36
  get currentTurn() {
36
37
  return (0, execution_1.captureZLinkSpotSerialTurn)(this);
37
38
  }
38
- /** Stops new turns while allowing turns accepted before close to complete. */
39
- close() {
40
- return this.scheduler.close();
39
+ /** Waits for turns admitted through the execution barrier to complete. */
40
+ whenIdle() {
41
+ return this.scheduler.whenIdle();
41
42
  }
42
43
  closeAdmission() {
43
44
  this.scheduler.closeAdmission();
44
45
  }
46
+ /**
47
+ * Spot messaging §7 step 3: after Close ends this queue's admission, an Instance
48
+ * intent message is refused before admission as a released owner fence, and any
49
+ * other message finds no incarnation. Undefined while admission is open.
50
+ */
51
+ applicationAdmissionRefusal(instanceIntent) {
52
+ if (!this.scheduler.admissionClosed)
53
+ return undefined;
54
+ return instanceIntent
55
+ ? (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving, 'The Spot incarnation released its authority before admitting this Instance intent message.')
56
+ : (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestTargetNotFound, 'The Spot incarnation is closed.');
57
+ }
58
+ /**
59
+ * Spot messaging §7: once Close commits Closing, membership work can no longer
60
+ * enter this incarnation while Instance intent messages still queue behind Close.
61
+ */
62
+ setLifecycleAdmissionClosed(closed) {
63
+ this.lifecycleAdmissionClosed = closed;
64
+ }
45
65
  /** Distinguishes a gate-owning turn from a suspended AsyncLocalStorage tail. */
46
66
  isActiveTurn(turn, turnId) {
47
67
  return (this.depth > 0 &&
@@ -57,11 +77,11 @@ class ZLinkSpotSerialTurnExecutor {
57
77
  this.executionBarrier = barrier;
58
78
  }
59
79
  /** Runs `operation` in serial order, one turn at a time. */
60
- execute(operation, workOptions) {
80
+ execute(operation, workOptions, replay) {
61
81
  if (this.isCurrentTurn) {
62
82
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.InvalidOperation, 'A Spot serial turn cannot implicitly execute another turn for the same owner.');
63
83
  }
64
- return this.enqueueApplicationTurn(operation, workOptions);
84
+ return this.enqueueApplicationTurn(operation, workOptions, replay);
65
85
  }
66
86
  /**
67
87
  * Always enqueues `operation` as its own serial turn, even when called
@@ -75,11 +95,18 @@ class ZLinkSpotSerialTurnExecutor {
75
95
  * Queues a one-way turn in serial order. Handler completion is reported
76
96
  * through `onError` and never blocks the sender turn.
77
97
  */
78
- async postOneWay(operation, onError, workOptions = {}, admission = {}) {
98
+ async postOneWay(operation, onError, workOptions = {}, admission = {}, replay) {
79
99
  this.lastActivityAtMs = performance.now();
80
100
  let barrierClaim;
81
101
  try {
82
- barrierClaim = await this.executionBarrier?.enter();
102
+ const entry = this.executionBarrier?.enter();
103
+ barrierClaim = entry instanceof Promise ? await entry : entry;
104
+ const refusal = this.applicationAdmissionRefusal(replay !== undefined);
105
+ if (refusal !== undefined)
106
+ throw refusal;
107
+ if (barrierClaim !== undefined && replay !== undefined) {
108
+ Object.assign(barrierClaim, { replay: (0, application_job_queue_scope_1.bindApplicationJobPermit)(replay) });
109
+ }
83
110
  if (admission.signal?.aborted === true) {
84
111
  throw new DOMException('The operation was aborted.', 'AbortError');
85
112
  }
@@ -112,15 +139,55 @@ class ZLinkSpotSerialTurnExecutor {
112
139
  postBarrierTurn(operation, workOptions) {
113
140
  return this.enqueueFrameworkTurn(operation, workOptions);
114
141
  }
115
- /** Holds this Spot's lifecycle FIFO until the full operation result settles. */
142
+ /** Admits membership work and holds the lifecycle FIFO until its result settles. */
116
143
  executeLifecycleOperation(operation) {
117
- return this.scheduler.submitLifecycleOperation(operation);
144
+ let entry;
145
+ try {
146
+ if (this.lifecycleAdmissionClosed) {
147
+ throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestRejected, 'Spot lifecycle admission is closed by a committed Close.');
148
+ }
149
+ entry = this.executionBarrier?.enter();
150
+ }
151
+ catch (error) {
152
+ return Promise.reject(error);
153
+ }
154
+ const submit = (claim) => {
155
+ try {
156
+ return this.scheduler.submitLifecycleOperation(operation);
157
+ }
158
+ catch (error) {
159
+ return Promise.reject(error);
160
+ }
161
+ finally {
162
+ claim?.release();
163
+ }
164
+ };
165
+ return entry instanceof Promise ? entry.then(submit) : submit(entry);
118
166
  }
119
- async enqueueApplicationTurn(operation, workOptions = {}) {
167
+ /** Runs owner control work that establishes or completes its own admission seal. */
168
+ executeControlLifecycleOperation(operation, context) {
169
+ try {
170
+ return this.scheduler.submitLifecycleOperation(operation, context);
171
+ }
172
+ catch (error) {
173
+ return Promise.reject(error);
174
+ }
175
+ }
176
+ visitPendingApplication(visitor) {
177
+ this.scheduler.visitPendingApplication(visitor);
178
+ }
179
+ async enqueueApplicationTurn(operation, workOptions = {}, replay) {
120
180
  this.lastActivityAtMs = performance.now();
121
181
  let barrierClaim;
122
182
  try {
123
- barrierClaim = await this.executionBarrier?.enter();
183
+ const entry = this.executionBarrier?.enter();
184
+ barrierClaim = entry instanceof Promise ? await entry : entry;
185
+ const refusal = this.applicationAdmissionRefusal(replay !== undefined);
186
+ if (refusal !== undefined)
187
+ throw refusal;
188
+ if (barrierClaim !== undefined && replay !== undefined) {
189
+ Object.assign(barrierClaim, { replay: (0, application_job_queue_scope_1.bindApplicationJobPermit)(replay) });
190
+ }
124
191
  return await this.submitQueuedTurn(operation, workOptions, barrierClaim);
125
192
  }
126
193
  catch (error) {
@@ -152,6 +219,11 @@ class ZLinkSpotSerialTurnExecutor {
152
219
  : this.scheduler.submit(boundOperation, options, barrierClaim);
153
220
  }
154
221
  runQueuedRecord(record) {
222
+ const context = record.context;
223
+ if (context?.replay !== undefined && record.operation === context.replay) {
224
+ context.release();
225
+ return Promise.resolve(this.executionBarrier?.enter()).then((claim) => this.runTurn(record.operation, (value) => record.resolve(value), (error) => record.reject(error), claim, record.release));
226
+ }
155
227
  return this.runTurn(record.operation, (value) => record.resolve(value), (error) => record.reject(error), record.context, record.release);
156
228
  }
157
229
  yieldPromise(pending) {
@@ -6,10 +6,11 @@ import type { ZLinkEntrySpotTimerHandlerRegistration, ZLinkSpotTimerHandlerRegis
6
6
  import { ZLinkTimerOverrunPolicy } from '../../contracts';
7
7
  import { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
8
8
  import type { ZLinkExecutionBarrier } from '../execution';
9
- import type { OperationClock } from '../foundation/operation-registry';
10
- export interface ZLinkTimerClock extends OperationClock {
9
+ export interface ZLinkTimerClock {
11
10
  now(): number;
12
11
  utcNow(): number;
12
+ setTimeout(callback: () => void, delayMs: number): unknown;
13
+ clearTimeout(handle: unknown): void;
13
14
  }
14
15
  type ZLinkTimerOwnerSpot = ZLinkSpot | ZLinkEntrySpot;
15
16
  type ZLinkTimerFailureReporter = (tick: ZLinkTimerTick, cause: unknown, event?: ZLinkSpotEventKind.TimerHandlerFailed | ZLinkSpotEventKind.TimerStoppedAfterUnhandledException) => Promise<void> | void;