@zlink-systems/framework 0.25.0 → 0.27.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 (557) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Channels/IZLinkFanoutClient.d.ts +0 -6
  3. package/dist/contracts/Common/CoreTypes.d.ts +6 -0
  4. package/dist/contracts/Common/CoreTypes.js +7 -0
  5. package/dist/contracts/Common/index.d.ts +1 -1
  6. package/dist/contracts/Common/index.js +0 -1
  7. package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
  8. package/dist/contracts/Configuration/InternalDefaults.js +9 -1
  9. package/dist/contracts/Configuration/Registration.d.ts +13 -2
  10. package/dist/contracts/Configuration/Registration.js +58 -36
  11. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
  12. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
  13. package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
  14. package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
  15. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
  16. package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
  17. package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
  18. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
  19. package/dist/contracts/Handlers/JsonContract.js +10 -4
  20. package/dist/contracts/Locations/Authority.d.ts +1 -1
  21. package/dist/contracts/Locations/Authority.js +3 -2
  22. package/dist/contracts/Locations/Options.js +1 -1
  23. package/dist/contracts/Locations/Stores.d.ts +12 -0
  24. package/dist/contracts/Locations/Stores.js +9 -0
  25. package/dist/contracts/RouteMesh/RuntimeTopology.d.ts +8 -0
  26. package/dist/contracts/Spots/Contracts.d.ts +1 -1
  27. package/dist/internal.d.ts +5 -0
  28. package/dist/internal.js +16 -1
  29. package/dist/nest-integration.d.ts +4 -2
  30. package/dist/nest-integration.js +14 -4
  31. package/dist/runtime/abort.d.ts +1 -0
  32. package/dist/runtime/abort.js +8 -5
  33. package/dist/runtime/activation-admission.d.ts +28 -0
  34. package/dist/runtime/activation-admission.js +57 -0
  35. package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
  36. package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
  37. package/dist/runtime/actors/actor-client.d.ts +2 -2
  38. package/dist/runtime/actors/actor-client.js +42 -143
  39. package/dist/runtime/actors/actor-context.d.ts +3 -5
  40. package/dist/runtime/actors/actor-context.js +19 -17
  41. package/dist/runtime/actors/actor-handoff.d.ts +13 -7
  42. package/dist/runtime/actors/actor-handoff.js +36 -25
  43. package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
  44. package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
  45. package/dist/runtime/actors/actor-local-native-join.js +85 -123
  46. package/dist/runtime/actors/actor-native-lookup.js +2 -8
  47. package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
  48. package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
  49. package/dist/runtime/actors/actor-remote-joiner.d.ts +3 -3
  50. package/dist/runtime/actors/actor-remote-joiner.js +11 -17
  51. package/dist/runtime/actors/actor-remote-wire.js +5 -3
  52. package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
  53. package/dist/runtime/actors/actor-request-deadline.js +31 -0
  54. package/dist/runtime/actors/actor-retry-delay.js +2 -1
  55. package/dist/runtime/actors/actor-runtime-contracts.d.ts +4 -2
  56. package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
  57. package/dist/runtime/actors/actor-runtime-state.js +70 -187
  58. package/dist/runtime/actors/actor-source-transfer.d.ts +5 -5
  59. package/dist/runtime/actors/bound-session-wire.js +2 -7
  60. package/dist/runtime/actors/deferred-join-completion.d.ts +19 -0
  61. package/dist/runtime/actors/deferred-join-completion.js +21 -0
  62. package/dist/runtime/actors/index.d.ts +10 -8
  63. package/dist/runtime/actors/index.js +101 -73
  64. package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
  65. package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
  66. package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
  67. package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
  68. package/dist/runtime/admission.d.ts +7 -1
  69. package/dist/runtime/admission.js +11 -1
  70. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
  71. package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
  72. package/dist/runtime/backend/contracts/index.d.ts +8 -33
  73. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +3 -26
  74. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
  75. package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
  76. package/dist/runtime/backend/node/node-backend-adapter-factory.d.ts +1 -2
  77. package/dist/runtime/backend/node/node-backend-adapter-factory.js +4 -18
  78. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +7 -4
  79. package/dist/runtime/backend/node/node-backend-adapter-support.js +28 -34
  80. package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
  81. package/dist/runtime/backend/node/node-event-loop-poller.js +11 -6
  82. package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
  83. package/dist/runtime/backend/node/node-raw-binding-port.d.ts +1 -1
  84. package/dist/runtime/backend/node/node-raw-binding-port.js +51 -19
  85. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +21 -19
  86. package/dist/runtime/backend/node/node-raw-mesh-backend.js +171 -111
  87. package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
  88. package/dist/runtime/backend/raw-binding-port.d.ts +13 -1
  89. package/dist/runtime/backend/runtime-values.d.ts +4 -1
  90. package/dist/runtime/backend/runtime-values.js +2 -0
  91. package/dist/runtime/channels/channel-clients.d.ts +20 -9
  92. package/dist/runtime/channels/channel-clients.js +68 -60
  93. package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
  94. package/dist/runtime/channels/channel-envelope.js +47 -29
  95. package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
  96. package/dist/runtime/channels/channel-outbound-operations.js +9 -18
  97. package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
  98. package/dist/runtime/channels/channel-receive-loops.js +27 -6
  99. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
  100. package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
  101. package/dist/runtime/channels/channel-runtime-manager.d.ts +2 -5
  102. package/dist/runtime/channels/channel-runtime-manager.js +4 -12
  103. package/dist/runtime/channels/channel-socket-options.js +3 -2
  104. package/dist/runtime/channels/channel-socket-registry.d.ts +30 -32
  105. package/dist/runtime/channels/channel-socket-registry.js +296 -235
  106. package/dist/runtime/channels/channel-transports.d.ts +11 -20
  107. package/dist/runtime/channels/channel-transports.js +68 -47
  108. package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
  109. package/dist/runtime/channels/client-server-location-runtime.js +10 -11
  110. package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
  111. package/dist/runtime/channels/client-server-service-wire.js +32 -11
  112. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
  113. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  114. package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
  115. package/dist/runtime/channels/fanout-location-runtime.js +133 -81
  116. package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
  117. package/dist/runtime/channels/spot-direct-envelope.js +4 -3
  118. package/dist/runtime/channels/spot-node-route-transport.js +3 -2
  119. package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
  120. package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
  121. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
  122. package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
  123. package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
  124. package/dist/runtime/diagnostics/flow-context.js +16 -2
  125. package/dist/runtime/diagnostics/index.d.ts +4 -2
  126. package/dist/runtime/diagnostics/index.js +14 -4
  127. package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
  128. package/dist/runtime/diagnostics/message-flow.js +10 -19
  129. package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
  130. package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
  131. package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
  132. package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
  133. package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
  134. package/dist/runtime/disposal.d.ts +5 -0
  135. package/dist/runtime/disposal.js +22 -0
  136. package/dist/runtime/execution/index.d.ts +22 -9
  137. package/dist/runtime/execution/index.js +107 -37
  138. package/dist/runtime/execution/serial-execution-queue.d.ts +12 -7
  139. package/dist/runtime/execution/serial-execution-queue.js +99 -26
  140. package/dist/runtime/execution/state-lane.d.ts +8 -1
  141. package/dist/runtime/execution/state-lane.js +118 -3
  142. package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
  143. package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
  144. package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
  145. package/dist/runtime/foundation/event-loop-resources.js +6 -119
  146. package/dist/runtime/foundation/listener-records.d.ts +11 -0
  147. package/dist/runtime/foundation/listener-records.js +20 -0
  148. package/dist/runtime/foundation/operation-identity.d.ts +2 -0
  149. package/dist/runtime/foundation/operation-identity.js +9 -5
  150. package/dist/runtime/foundation/operation-registry.d.ts +5 -7
  151. package/dist/runtime/foundation/operation-registry.js +34 -44
  152. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +18 -26
  153. package/dist/runtime/foundation/raw-service-mesh-runtime.js +122 -469
  154. package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
  155. package/dist/runtime/foundation/runtime-state-projections.js +8 -0
  156. package/dist/runtime/foundation/service-authority-payload-codec.d.ts +1 -0
  157. package/dist/runtime/foundation/service-authority-payload-codec.js +30 -12
  158. package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
  159. package/dist/runtime/foundation/service-discovery-registry.js +22 -3
  160. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
  161. package/dist/runtime/foundation/service-liveness-registry.js +2 -1
  162. package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
  163. package/dist/runtime/foundation/service-maintenance-runtime.js +23 -8
  164. package/dist/runtime/foundation/service-metadata-codec.js +3 -3
  165. package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
  166. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
  167. package/dist/runtime/foundation/service-relocation-coordinator.d.ts +9 -0
  168. package/dist/runtime/foundation/service-relocation-coordinator.js +14 -1
  169. package/dist/runtime/foundation/service-relocation-object-owner.d.ts +8 -0
  170. package/dist/runtime/foundation/service-relocation-object-owner.js +19 -6
  171. package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
  172. package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
  173. package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
  174. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -19
  175. package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
  176. package/dist/runtime/foundation/service-stateful-registry.js +10 -2
  177. package/dist/runtime/foundation/service-stateful-runtime.d.ts +28 -24
  178. package/dist/runtime/foundation/service-stateful-runtime.js +297 -244
  179. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +12 -7
  180. package/dist/runtime/foundation/service-stateful-wire-codec.js +240 -143
  181. package/dist/runtime/foundation/service-topology-registry.d.ts +1 -3
  182. package/dist/runtime/foundation/service-topology-registry.js +22 -61
  183. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
  184. package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
  185. package/dist/runtime/foundation/service-wire-codec.js +10 -8
  186. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  187. package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
  188. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
  189. package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
  190. package/dist/runtime/framework-errors-internal.d.ts +2 -1
  191. package/dist/runtime/framework-errors-internal.js +343 -122
  192. package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
  193. package/dist/runtime/handlers/handler-instance-scope.js +61 -74
  194. package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
  195. package/dist/runtime/host/actor-packet-relay.js +48 -91
  196. package/dist/runtime/host/actor-placement-coordinator.js +7 -5
  197. package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
  198. package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
  199. package/dist/runtime/host/actor-transfer-runtime.d.ts +28 -28
  200. package/dist/runtime/host/actor-transfer-runtime.js +210 -256
  201. package/dist/runtime/host/application-job-queue.js +16 -33
  202. package/dist/runtime/host/bound-session-relay.js +1 -1
  203. package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
  204. package/dist/runtime/host/index.d.ts +19 -14
  205. package/dist/runtime/host/index.js +234 -175
  206. package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
  207. package/dist/runtime/host/instance-activation-authority.js +17 -45
  208. package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
  209. package/dist/runtime/host/location-runtime-owner.js +2 -2
  210. package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
  211. package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
  212. package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
  213. package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
  214. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
  215. package/dist/runtime/host/remote-bound-session-relay.js +11 -23
  216. package/dist/runtime/host/route-mesh-runtime.d.ts +14 -10
  217. package/dist/runtime/host/route-mesh-runtime.js +178 -257
  218. package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
  219. package/dist/runtime/host/runtime-shutdown.js +18 -21
  220. package/dist/runtime/host/service-relocation-control.js +6 -1
  221. package/dist/runtime/host/service-relocation-host-runtime.d.ts +71 -38
  222. package/dist/runtime/host/service-relocation-host-runtime.js +816 -651
  223. package/dist/runtime/host/spot-address-transport.d.ts +2 -3
  224. package/dist/runtime/host/spot-address-transport.js +34 -136
  225. package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
  226. package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
  227. package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -7
  228. package/dist/runtime/host/spot-runtime-options-factory.js +53 -21
  229. package/dist/runtime/host/stateful-authority-route-runtime.js +6 -2
  230. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +14 -6
  231. package/dist/runtime/host/user-spot-creation-coordinator.js +96 -95
  232. package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
  233. package/dist/runtime/locations/authority-key-codec.js +4 -3
  234. package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
  235. package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
  236. package/dist/runtime/locations/creation-operation-id.js +6 -4
  237. package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
  238. package/dist/runtime/locations/in-memory-authority-store.js +31 -15
  239. package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
  240. package/dist/runtime/locations/in-memory-location-store.js +17 -14
  241. package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
  242. package/dist/runtime/locations/in-memory-provider-location-store.js +79 -27
  243. package/dist/runtime/locations/key-codec.js +3 -2
  244. package/dist/runtime/locations/lease-tracker.d.ts +3 -5
  245. package/dist/runtime/locations/lease-tracker.js +7 -11
  246. package/dist/runtime/locations/lifecycle.d.ts +5 -10
  247. package/dist/runtime/locations/lifecycle.js +4 -33
  248. package/dist/runtime/locations/location-store-failure.d.ts +2 -0
  249. package/dist/runtime/locations/location-store-failure.js +7 -0
  250. package/dist/runtime/locations/location-store-pages.d.ts +3 -0
  251. package/dist/runtime/locations/location-store-pages.js +13 -0
  252. package/dist/runtime/locations/location-store-repository.d.ts +5 -7
  253. package/dist/runtime/locations/location-store-repository.js +303 -332
  254. package/dist/runtime/locations/relocation-blob.js +18 -5
  255. package/dist/runtime/locations/resolvers.d.ts +5 -5
  256. package/dist/runtime/locations/resolvers.js +44 -30
  257. package/dist/runtime/locations/runtime.d.ts +5 -4
  258. package/dist/runtime/locations/runtime.js +123 -92
  259. package/dist/runtime/locations/spot-location-claims.d.ts +8 -2
  260. package/dist/runtime/locations/spot-location-claims.js +40 -23
  261. package/dist/runtime/messaging/payload-codec.js +26 -20
  262. package/dist/runtime/messaging/submission-result.d.ts +3 -0
  263. package/dist/runtime/messaging/submission-result.js +48 -0
  264. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +2 -0
  265. package/dist/runtime/protocol/service_wire_codec.generated.js +17 -8
  266. package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +1 -0
  267. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +3 -2
  268. package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +3 -3
  269. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +4 -4
  270. package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +6 -3
  271. package/dist/runtime/spots/index.d.ts +29 -29
  272. package/dist/runtime/spots/index.js +441 -313
  273. package/dist/runtime/spots/spot-activation-registry.d.ts +4 -4
  274. package/dist/runtime/spots/spot-activation-registry.js +27 -60
  275. package/dist/runtime/spots/spot-activation-state.d.ts +2 -11
  276. package/dist/runtime/spots/spot-activation-state.js +4 -17
  277. package/dist/runtime/spots/spot-activation.d.ts +10 -9
  278. package/dist/runtime/spots/spot-activation.js +103 -81
  279. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
  280. package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
  281. package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
  282. package/dist/runtime/spots/spot-actor-join-dispatch.js +5 -55
  283. package/dist/runtime/spots/spot-actor-lifecycle-drain.js +2 -2
  284. package/dist/runtime/spots/spot-actor-membership.d.ts +7 -5
  285. package/dist/runtime/spots/spot-actor-membership.js +44 -53
  286. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
  287. package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
  288. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
  289. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
  290. package/dist/runtime/spots/spot-context.d.ts +2 -2
  291. package/dist/runtime/spots/spot-entry-activation.d.ts +3 -4
  292. package/dist/runtime/spots/spot-entry-activation.js +9 -21
  293. package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
  294. package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
  295. package/dist/runtime/spots/spot-manager-public.js +6 -5
  296. package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
  297. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +22 -21
  298. package/dist/runtime/spots/spot-node-runtime-manager.js +73 -82
  299. package/dist/runtime/spots/spot-outbound.d.ts +4 -3
  300. package/dist/runtime/spots/spot-outbound.js +10 -37
  301. package/dist/runtime/spots/spot-remote-codec.js +5 -3
  302. package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
  303. package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
  304. package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
  305. package/dist/runtime/spots/spot-route-replies.js +3 -1
  306. package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -2
  307. package/dist/runtime/spots/spot-routed-actor-admission.js +3 -2
  308. package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +2 -7
  309. package/dist/runtime/spots/spot-routed-frame-dispatch.js +1 -70
  310. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
  311. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
  312. package/dist/runtime/spots/spot-runtime-ports.d.ts +4 -20
  313. package/dist/runtime/spots/spot-serial-executor.d.ts +5 -0
  314. package/dist/runtime/spots/spot-serial-executor.js +9 -2
  315. package/dist/runtime/spots/spot-serial-turn-executor.d.ts +29 -6
  316. package/dist/runtime/spots/spot-serial-turn-executor.js +89 -13
  317. package/dist/runtime/spots/spot-timer.d.ts +3 -2
  318. package/dist/runtime/streams/actor-session-binding-registry.d.ts +17 -32
  319. package/dist/runtime/streams/actor-session-binding-registry.js +145 -367
  320. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +2 -6
  321. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
  322. package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
  323. package/dist/runtime/streams/bound-session-service.d.ts +7 -0
  324. package/dist/runtime/streams/bound-session-service.js +12 -19
  325. package/dist/runtime/streams/index.d.ts +15 -14
  326. package/dist/runtime/streams/index.js +38 -39
  327. package/dist/runtime/streams/managed-stream.d.ts +3 -0
  328. package/dist/runtime/streams/managed-stream.js +17 -8
  329. package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
  330. package/dist/runtime/streams/protocol.d.ts +6 -33
  331. package/dist/runtime/streams/protocol.js +38 -110
  332. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
  333. package/dist/runtime/streams/session-actor-coordinator.js +12 -4
  334. package/dist/runtime/streams/session-calls.d.ts +1 -1
  335. package/dist/runtime/streams/session-calls.js +5 -4
  336. package/dist/runtime/streams/session-context.d.ts +6 -6
  337. package/dist/runtime/streams/session-context.js +22 -4
  338. package/dist/runtime/streams/session-requests.js +2 -1
  339. package/dist/runtime/streams/session-serial-executor.js +2 -2
  340. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
  341. package/dist/runtime/streams/stream-frame-factory.js +2 -2
  342. package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
  343. package/dist/runtime/streams/stream-session-runtime.js +25 -33
  344. package/dist/runtime/workers/index.d.ts +2 -2
  345. package/dist/runtime/workers/index.js +5 -4
  346. package/package.json +3 -3
  347. package/src/contracts/Channels/IZLinkFanoutClient.ts +0 -7
  348. package/src/contracts/Common/CoreTypes.ts +7 -0
  349. package/src/contracts/Common/index.ts +1 -1
  350. package/src/contracts/Configuration/InternalDefaults.ts +12 -0
  351. package/src/contracts/Configuration/Registration.ts +92 -48
  352. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
  353. package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
  354. package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
  355. package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
  356. package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
  357. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
  358. package/src/contracts/Handlers/JsonContract.ts +14 -4
  359. package/src/contracts/Locations/Authority.ts +7 -3
  360. package/src/contracts/Locations/Options.ts +1 -1
  361. package/src/contracts/Locations/Stores.ts +14 -0
  362. package/src/contracts/RouteMesh/RuntimeTopology.ts +10 -0
  363. package/src/contracts/Spots/Contracts.ts +1 -1
  364. package/src/internal.ts +15 -0
  365. package/src/nest-integration.ts +28 -10
  366. package/src/runtime/abort.ts +6 -5
  367. package/src/runtime/activation-admission.ts +72 -0
  368. package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
  369. package/src/runtime/actors/actor-client.ts +77 -204
  370. package/src/runtime/actors/actor-context.ts +45 -39
  371. package/src/runtime/actors/actor-handoff.ts +55 -45
  372. package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
  373. package/src/runtime/actors/actor-local-native-join.ts +174 -215
  374. package/src/runtime/actors/actor-native-lookup.ts +2 -9
  375. package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
  376. package/src/runtime/actors/actor-remote-joiner.ts +15 -36
  377. package/src/runtime/actors/actor-remote-wire.ts +5 -3
  378. package/src/runtime/actors/actor-request-deadline.ts +49 -0
  379. package/src/runtime/actors/actor-retry-delay.ts +2 -1
  380. package/src/runtime/actors/actor-runtime-contracts.ts +4 -10
  381. package/src/runtime/actors/actor-runtime-state.ts +85 -247
  382. package/src/runtime/actors/actor-source-transfer.ts +5 -18
  383. package/src/runtime/actors/bound-session-wire.ts +2 -8
  384. package/src/runtime/actors/deferred-join-completion.ts +44 -0
  385. package/src/runtime/actors/index.ts +122 -88
  386. package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
  387. package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
  388. package/src/runtime/admission.ts +13 -2
  389. package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
  390. package/src/runtime/backend/contracts/index.ts +15 -42
  391. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -28
  392. package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
  393. package/src/runtime/backend/node/node-backend-adapter-factory.ts +5 -25
  394. package/src/runtime/backend/node/node-backend-adapter-support.ts +32 -35
  395. package/src/runtime/backend/node/node-event-loop-poller.ts +16 -8
  396. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
  397. package/src/runtime/backend/node/node-raw-binding-port.ts +58 -23
  398. package/src/runtime/backend/node/node-raw-mesh-backend.ts +252 -162
  399. package/src/runtime/backend/node/node-socket-backend-adapter.ts +5 -4
  400. package/src/runtime/backend/raw-binding-port.ts +14 -1
  401. package/src/runtime/backend/runtime-values.ts +4 -1
  402. package/src/runtime/channels/channel-clients.ts +132 -96
  403. package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
  404. package/src/runtime/channels/channel-envelope.ts +58 -29
  405. package/src/runtime/channels/channel-outbound-operations.ts +10 -31
  406. package/src/runtime/channels/channel-receive-loops.ts +39 -7
  407. package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
  408. package/src/runtime/channels/channel-runtime-manager.ts +8 -15
  409. package/src/runtime/channels/channel-socket-options.ts +8 -2
  410. package/src/runtime/channels/channel-socket-registry.ts +369 -262
  411. package/src/runtime/channels/channel-transports.ts +161 -115
  412. package/src/runtime/channels/client-server-location-runtime.ts +17 -17
  413. package/src/runtime/channels/client-server-service-wire.ts +40 -12
  414. package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
  415. package/src/runtime/channels/fanout-location-runtime.ts +175 -106
  416. package/src/runtime/channels/spot-direct-envelope.ts +1 -1
  417. package/src/runtime/channels/spot-node-route-transport.ts +5 -2
  418. package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
  419. package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
  420. package/src/runtime/diagnostics/flow-context.ts +16 -2
  421. package/src/runtime/diagnostics/index.ts +27 -17
  422. package/src/runtime/diagnostics/message-flow.ts +15 -25
  423. package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
  424. package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
  425. package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
  426. package/src/runtime/disposal.ts +19 -0
  427. package/src/runtime/execution/index.ts +116 -38
  428. package/src/runtime/execution/serial-execution-queue.ts +179 -34
  429. package/src/runtime/execution/state-lane.ts +142 -4
  430. package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
  431. package/src/runtime/foundation/event-loop-resources.ts +5 -122
  432. package/src/runtime/foundation/listener-records.ts +21 -0
  433. package/src/runtime/foundation/operation-identity.ts +11 -5
  434. package/src/runtime/foundation/operation-registry.ts +33 -50
  435. package/src/runtime/foundation/raw-service-mesh-runtime.ts +170 -571
  436. package/src/runtime/foundation/runtime-state-projections.ts +9 -1
  437. package/src/runtime/foundation/service-authority-payload-codec.ts +41 -13
  438. package/src/runtime/foundation/service-discovery-registry.ts +32 -3
  439. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
  440. package/src/runtime/foundation/service-liveness-registry.ts +2 -1
  441. package/src/runtime/foundation/service-maintenance-runtime.ts +30 -19
  442. package/src/runtime/foundation/service-metadata-codec.ts +2 -2
  443. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
  444. package/src/runtime/foundation/service-relocation-coordinator.ts +13 -0
  445. package/src/runtime/foundation/service-relocation-object-owner.ts +23 -7
  446. package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
  447. package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
  448. package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -25
  449. package/src/runtime/foundation/service-stateful-registry.ts +14 -2
  450. package/src/runtime/foundation/service-stateful-runtime.ts +435 -327
  451. package/src/runtime/foundation/service-stateful-wire-codec.ts +329 -199
  452. package/src/runtime/foundation/service-topology-registry.ts +30 -79
  453. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
  454. package/src/runtime/foundation/service-wire-codec.ts +15 -8
  455. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  456. package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
  457. package/src/runtime/framework-errors-internal.ts +380 -134
  458. package/src/runtime/handlers/handler-instance-scope.ts +68 -95
  459. package/src/runtime/host/actor-packet-relay.ts +57 -147
  460. package/src/runtime/host/actor-placement-coordinator.ts +8 -5
  461. package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
  462. package/src/runtime/host/actor-transfer-runtime.ts +266 -418
  463. package/src/runtime/host/application-job-queue.ts +28 -34
  464. package/src/runtime/host/bound-session-relay.ts +1 -2
  465. package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
  466. package/src/runtime/host/index.ts +408 -312
  467. package/src/runtime/host/instance-activation-authority.ts +89 -109
  468. package/src/runtime/host/location-runtime-owner.ts +4 -2
  469. package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
  470. package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
  471. package/src/runtime/host/remote-bound-session-relay.ts +12 -44
  472. package/src/runtime/host/route-mesh-runtime.ts +236 -275
  473. package/src/runtime/host/runtime-shutdown.ts +17 -21
  474. package/src/runtime/host/service-relocation-control.ts +14 -1
  475. package/src/runtime/host/service-relocation-host-runtime.ts +1161 -904
  476. package/src/runtime/host/spot-address-transport.ts +73 -195
  477. package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
  478. package/src/runtime/host/spot-runtime-options-factory.ts +92 -30
  479. package/src/runtime/host/stateful-authority-route-runtime.ts +8 -4
  480. package/src/runtime/host/user-spot-creation-coordinator.ts +182 -163
  481. package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
  482. package/src/runtime/locations/authority-key-codec.ts +7 -3
  483. package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
  484. package/src/runtime/locations/creation-operation-id.ts +6 -3
  485. package/src/runtime/locations/domain-store-contract.ts +12 -3
  486. package/src/runtime/locations/in-memory-authority-store.ts +44 -15
  487. package/src/runtime/locations/in-memory-location-store.ts +50 -39
  488. package/src/runtime/locations/in-memory-provider-location-store.ts +110 -31
  489. package/src/runtime/locations/key-codec.ts +3 -2
  490. package/src/runtime/locations/lease-tracker.ts +8 -14
  491. package/src/runtime/locations/lifecycle.ts +16 -45
  492. package/src/runtime/locations/location-store-failure.ts +4 -0
  493. package/src/runtime/locations/location-store-pages.ts +18 -0
  494. package/src/runtime/locations/location-store-repository.ts +450 -478
  495. package/src/runtime/locations/relocation-blob.ts +17 -6
  496. package/src/runtime/locations/resolvers.ts +90 -58
  497. package/src/runtime/locations/runtime.ts +220 -110
  498. package/src/runtime/locations/spot-location-claims.ts +54 -26
  499. package/src/runtime/messaging/payload-codec.ts +35 -24
  500. package/src/runtime/messaging/submission-result.ts +57 -1
  501. package/src/runtime/protocol/service_wire_codec.generated.ts +27 -10
  502. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +4 -4
  503. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +6 -6
  504. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +6 -3
  505. package/src/runtime/spots/index.ts +687 -437
  506. package/src/runtime/spots/spot-activation-registry.ts +42 -71
  507. package/src/runtime/spots/spot-activation-state.ts +4 -16
  508. package/src/runtime/spots/spot-activation.ts +167 -115
  509. package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
  510. package/src/runtime/spots/spot-actor-join-dispatch.ts +25 -79
  511. package/src/runtime/spots/spot-actor-lifecycle-drain.ts +20 -18
  512. package/src/runtime/spots/spot-actor-membership.ts +107 -75
  513. package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
  514. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
  515. package/src/runtime/spots/spot-context.ts +3 -3
  516. package/src/runtime/spots/spot-entry-activation.ts +13 -33
  517. package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
  518. package/src/runtime/spots/spot-manager-public.ts +29 -21
  519. package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
  520. package/src/runtime/spots/spot-node-runtime-manager.ts +145 -140
  521. package/src/runtime/spots/spot-outbound.ts +47 -68
  522. package/src/runtime/spots/spot-remote-codec.ts +7 -3
  523. package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
  524. package/src/runtime/spots/spot-route-replies.ts +6 -4
  525. package/src/runtime/spots/spot-routed-actor-admission.ts +13 -6
  526. package/src/runtime/spots/spot-routed-frame-dispatch.ts +6 -77
  527. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
  528. package/src/runtime/spots/spot-runtime-ports.ts +10 -43
  529. package/src/runtime/spots/spot-serial-executor.ts +10 -2
  530. package/src/runtime/spots/spot-serial-turn-executor.ts +120 -13
  531. package/src/runtime/spots/spot-timer.ts +3 -2
  532. package/src/runtime/streams/actor-session-binding-registry.ts +182 -560
  533. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +1 -19
  534. package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
  535. package/src/runtime/streams/bound-session-service.ts +23 -37
  536. package/src/runtime/streams/index.ts +102 -88
  537. package/src/runtime/streams/managed-stream.ts +29 -10
  538. package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
  539. package/src/runtime/streams/protocol.ts +34 -88
  540. package/src/runtime/streams/session-actor-coordinator.ts +17 -5
  541. package/src/runtime/streams/session-calls.ts +6 -5
  542. package/src/runtime/streams/session-context.ts +54 -10
  543. package/src/runtime/streams/session-requests.ts +2 -1
  544. package/src/runtime/streams/session-serial-executor.ts +2 -2
  545. package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
  546. package/src/runtime/streams/stream-frame-factory.ts +2 -3
  547. package/src/runtime/streams/stream-session-runtime.ts +57 -59
  548. package/src/runtime/workers/index.ts +13 -12
  549. package/dist/runtime/actors/deferred-join-accepted-journal.d.ts +0 -47
  550. package/dist/runtime/actors/deferred-join-accepted-journal.js +0 -992
  551. package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
  552. package/dist/runtime/actors/post-commit-actor-location.js +0 -72
  553. package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
  554. package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
  555. package/src/runtime/actors/deferred-join-accepted-journal.ts +0 -1346
  556. package/src/runtime/actors/post-commit-actor-location.ts +0 -121
  557. package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
@@ -1,10 +1,29 @@
1
+ import { createHash } from 'node:crypto';
2
+ import {
3
+ type RoutingId,
4
+ type SpotRef,
5
+ type ZLinkSpotCreateResult,
6
+ ZLinkFrameworkException,
7
+ ZLinkSpotCreateState
8
+ } from '../../contracts';
9
+
10
+ import {
11
+ decodeServiceClosingSpotAuthority,
12
+ decodeServiceReadySpotAuthority,
13
+ encodeServiceUserSpotAuthorityPayload
14
+ } from '../foundation/service-authority-payload-codec';
15
+ import type { ServiceUserSpotOperationResult } from '../foundation/service-stateful-runtime';
16
+ import type {
17
+ ServiceDirectSpotRouteFence,
18
+ ServiceUserSpotCloseRecord,
19
+ ServiceUserSpotCreateRecord
20
+ } from '../foundation/service-stateful-wire-codec';
1
21
  import {
2
22
  ZLinkFrameworkInternalErrorKind,
3
23
  createInternalFrameworkException,
4
24
  wireReplyFailureException
5
25
  } from '../framework-errors-internal';
6
- import { createHash } from 'node:crypto';
7
- import type { RoutingId, SpotRef, ZLinkSpotCreateResult } from '../../contracts';
26
+ import { encodeAuthorityKey } from '../locations/authority-key-codec';
8
27
  import type {
9
28
  ZLinkAuthoritySnapshot,
10
29
  ZLinkLocationOwnerToken,
@@ -14,19 +33,9 @@ import type {
14
33
  ZLinkAuthorityStore,
15
34
  ZLinkObjectCreationStore
16
35
  } from '../locations/internal-store-contracts';
17
- import { ZLinkFrameworkException, ZLinkSpotCreateState } from '../../contracts';
18
- import {
19
- decodeServiceReadySpotAuthority,
20
- encodeServiceUserSpotAuthorityPayload
21
- } from '../foundation/service-authority-payload-codec';
22
- import { encodeAuthorityKey } from '../locations/authority-key-codec';
23
36
  import type { ZLinkLocalSpotCreateResult } from '../spots/spot-manager-internal-contracts';
24
- import type { ServiceUserSpotOperationResult } from '../foundation/service-stateful-runtime';
25
- import type {
26
- ServiceUserSpotCloseRecord,
27
- ServiceUserSpotCreateRecord,
28
- ServiceDirectSpotRouteFence
29
- } from '../foundation/service-stateful-wire-codec';
37
+ const DEFAULT_USER_SPOT_CLEANUP_TIMEOUT_MS = 1_000;
38
+ const DEFAULT_USER_SPOT_POLL_INTERVAL_MS = 10;
30
39
 
31
40
  export interface ZLinkUserSpotCreationCoordinatorOptions {
32
41
  readonly store: ZLinkObjectCreationStore & ZLinkAuthorityStore;
@@ -108,9 +117,10 @@ export class ZLinkUserSpotCreationCoordinator {
108
117
  ) => Promise<ZLinkLocalSpotCreateResult>,
109
118
  discard?: (signal?: AbortSignal) => Promise<void>
110
119
  ): Promise<ZLinkUserSpotCreationResult> {
111
- const deadline = createDeadline(request.timeoutMs, request.signal);
112
- const deadlineMs = performance.now() + request.timeoutMs;
113
120
  const deadlineUnixMs = Date.now() + request.timeoutMs;
121
+ const remainingMs = Math.max(0, deadlineUnixMs - Date.now());
122
+ const deadline = createDeadline(remainingMs, request.signal);
123
+ const deadlineMs = performance.now() + remainingMs;
114
124
  const signal = deadline.signal;
115
125
  signal.throwIfAborted();
116
126
  const sha256 = createHash('sha256').update(request.requestPayload).digest();
@@ -186,7 +196,8 @@ export class ZLinkUserSpotCreationCoordinator {
186
196
  }
187
197
  }
188
198
  },
189
- signal
199
+ signal,
200
+ BigInt(deadlineUnixMs)
190
201
  );
191
202
  } catch (error) {
192
203
  deadline.close();
@@ -332,55 +343,34 @@ export class ZLinkUserSpotCreationCoordinator {
332
343
 
333
344
  async close(
334
345
  spot: SpotRef,
335
- closeOwner: (current: SpotRef, snapshot: ZLinkAuthoritySnapshot) => Promise<boolean>,
336
- signal?: AbortSignal,
337
- ownerPresent?: (current: SpotRef) => boolean,
338
- ownerCanClose?: (current: SpotRef) => boolean
346
+ closeOwner: (
347
+ current: SpotRef,
348
+ beginAuthority: (onCommitted: () => void) => Promise<{ release(): Promise<void> }>
349
+ ) => Promise<boolean>,
350
+ signal?: AbortSignal
339
351
  ): Promise<boolean> {
340
352
  const resolved = await this.resolveCloseTarget(spot, signal);
341
353
  if (resolved === undefined) return false;
342
354
  const { spot: currentRef, snapshot: current } = resolved;
343
355
  const key = encodeAuthorityKey('user_spot', String(spot.spotId));
344
- if (ownerPresent?.(currentRef) === false) {
345
- throw createInternalFrameworkException(
346
- ZLinkFrameworkInternalErrorKind.SpotMoving,
347
- `User Spot '${String(spot.spotId)}' is missing from its authority owner.`,
348
- true
349
- );
350
- }
351
- if (ownerCanClose?.(currentRef) === false) return false;
352
- const closing = await this.beginClosing(key, current, String(spot.spotId), signal);
353
- let closed: boolean;
354
- try {
355
- closed = await closeOwner(currentRef, closing);
356
- } catch (error) {
357
- await this.restoreReady(key, closing, String(spot.spotId), signal);
358
- throw error;
359
- }
360
- if (!closed) {
361
- await this.restoreReady(key, closing, String(spot.spotId), signal);
362
- return false;
363
- }
364
- const deleted = await this.options.store.compareExchangeAuthority(
365
- key,
366
- closing.storeVersion,
367
- { kind: 'delete' },
368
- signal
356
+ return await closeOwner(currentRef, async (onCommitted) =>
357
+ this.commitCloseAuthority(key, current, String(spot.spotId), onCommitted)
369
358
  );
370
- if (deleted.kind === 'deleted') {
371
- this.forgetReadyRoute(currentRef.spotId, current);
372
- return true;
373
- }
374
- if (deleted.kind === 'conflict') {
375
- throw createInternalFrameworkException(
376
- ZLinkFrameworkInternalErrorKind.SpotMoving,
377
- `User Spot '${String(spot.spotId)}' authority changed while closing.`,
378
- true
379
- );
380
- }
381
- throw createInternalFrameworkException(
382
- ZLinkFrameworkInternalErrorKind.SpotGenerationStale,
383
- `User Spot '${String(spot.spotId)}' generation cannot be closed.`
359
+ }
360
+
361
+ /** Commits Closing for the owner's own incarnation when its context requests Close. */
362
+ async beginOwnerClose(
363
+ spot: SpotRef,
364
+ onCommitted: () => void
365
+ ): Promise<{ release(): Promise<void> } | undefined> {
366
+ const resolved = await this.resolveCloseTarget(spot);
367
+ if (resolved === undefined) return undefined;
368
+ const spotId = String(spot.spotId);
369
+ return await this.commitCloseAuthority(
370
+ encodeAuthorityKey('user_spot', spotId),
371
+ resolved.snapshot,
372
+ spotId,
373
+ onCommitted
384
374
  );
385
375
  }
386
376
 
@@ -391,29 +381,14 @@ export class ZLinkUserSpotCreationCoordinator {
391
381
  const key = encodeAuthorityKey('user_spot', String(spot.spotId));
392
382
  const current = await this.options.store.readAuthority(key, signal);
393
383
  if (current.kind === 'missing') return undefined;
394
- if (current.objectGeneration !== spot.objectGeneration) {
395
- throw createInternalFrameworkException(
396
- ZLinkFrameworkInternalErrorKind.SpotGenerationStale,
397
- `User Spot '${String(spot.spotId)}' generation is stale.`
398
- );
399
- }
400
- const currentRef = spotRef(current, {
401
- meshName: current.allocation.descriptor.meshName,
402
- spotId: spot.spotId,
403
- stableType: current.allocation.stableType,
404
- requestPayload: Buffer.alloc(0),
405
- timeoutMs: 1
406
- });
407
- if (
408
- String(current.allocation.descriptor.rid) !== String(spot.nodeRid) ||
409
- current.allocation.descriptor.meshName !== spot.meshName
410
- ) {
411
- throw createInternalFrameworkException(
412
- ZLinkFrameworkInternalErrorKind.SpotGenerationStale,
413
- `User Spot '${String(spot.spotId)}' owner route is stale.`
414
- );
415
- }
416
- return { spot: currentRef, snapshot: current };
384
+ return {
385
+ spot: requireCloseTarget(current, String(spot.spotId), {
386
+ objectGeneration: spot.objectGeneration,
387
+ nodeRid: String(spot.nodeRid),
388
+ meshName: spot.meshName
389
+ }),
390
+ snapshot: current
391
+ };
417
392
  }
418
393
 
419
394
  async handleRemoteCreate(
@@ -565,7 +540,8 @@ export class ZLinkUserSpotCreationCoordinator {
565
540
  }
566
541
  }
567
542
  },
568
- signal
543
+ signal,
544
+ record.deadlineUnixMs
569
545
  );
570
546
  await discard?.(signal);
571
547
  return {
@@ -600,7 +576,8 @@ export class ZLinkUserSpotCreationCoordinator {
600
576
  ownerNodeGeneration: current.allocation.descriptorLifecycleGeneration
601
577
  })
602
578
  },
603
- signal
579
+ signal,
580
+ record.deadlineUnixMs
604
581
  );
605
582
  } catch (error) {
606
583
  throw createInternalFrameworkException(
@@ -631,7 +608,9 @@ export class ZLinkUserSpotCreationCoordinator {
631
608
  };
632
609
  } catch (error) {
633
610
  local?.publication?.abort();
634
- const cleanupDeadline = createDeadline(this.options.cleanupTimeoutMs ?? 1_000);
611
+ const cleanupDeadline = createDeadline(
612
+ this.options.cleanupTimeoutMs ?? DEFAULT_USER_SPOT_CLEANUP_TIMEOUT_MS
613
+ );
635
614
  const cleanupSignal = cleanupDeadline.signal;
636
615
  const cleanup = await Promise.allSettled([
637
616
  waitForAbort(
@@ -672,65 +651,71 @@ export class ZLinkUserSpotCreationCoordinator {
672
651
 
673
652
  async handleRemoteClose(
674
653
  record: ServiceUserSpotCloseRecord,
675
- closeOwner: (spot: SpotRef, signal?: AbortSignal) => Promise<boolean>,
676
- signal?: AbortSignal
654
+ closeOwner: (
655
+ spot: SpotRef,
656
+ beginAuthority: (onCommitted: () => void) => Promise<{ release(): Promise<void> }>,
657
+ signal?: AbortSignal
658
+ ) => Promise<boolean>,
659
+ signal?: AbortSignal,
660
+ canResume?: (spot: SpotRef) => boolean
677
661
  ): Promise<boolean> {
678
662
  const key = encodeAuthorityKey('user_spot', record.target.spotId);
679
663
  const current = await this.options.store.readAuthority(key, signal);
680
664
  if (current.kind === 'missing') return false;
681
- if (current.objectGeneration !== record.target.objectGeneration) {
682
- throw createInternalFrameworkException(
683
- ZLinkFrameworkInternalErrorKind.SpotGenerationStale,
684
- `User Spot '${record.target.spotId}' generation is stale.`
685
- );
686
- }
687
- if (
688
- current.authorityOwnerGeneration !== record.target.authorityOwnerGeneration ||
689
- current.storeVersion.value !== record.target.expectedStoreVersion ||
690
- String(current.allocation.descriptor.rid) !== record.target.targetNodeRid ||
691
- current.allocation.descriptorLifecycleGeneration !== record.target.targetNodeGeneration ||
692
- current.allocation.objectKind !== 'user_spot' ||
693
- current.allocation.state !== 'active'
694
- ) {
695
- throw createInternalFrameworkException(
696
- ZLinkFrameworkInternalErrorKind.SpotMoving,
697
- `User Spot '${record.target.spotId}' close authority is moving.`,
698
- true
699
- );
700
- }
701
- const spot: SpotRef = {
665
+ const candidate: SpotRef = {
702
666
  spotId: record.target.spotId as RoutingId,
703
667
  objectGeneration: current.objectGeneration,
704
668
  meshName: current.allocation.descriptor.meshName,
705
669
  nodeRid: current.allocation.descriptor.rid
706
670
  };
707
- const closing = await this.beginClosing(key, current, record.target.spotId, signal);
708
- let closed: boolean;
709
- try {
710
- closed = await closeOwner(spot, signal);
711
- } catch (error) {
712
- await this.restoreReady(key, closing, record.target.spotId, signal);
713
- throw error;
714
- }
715
- if (!closed) {
716
- await this.restoreReady(key, closing, record.target.spotId, signal);
717
- return false;
718
- }
719
- const deleted = await this.options.store.compareExchangeAuthority(
720
- key,
721
- closing.storeVersion,
722
- { kind: 'delete' },
671
+ // A Closing committed by this owner is resumed, so its store version has
672
+ // advanced past the one the source observed.
673
+ const resuming =
674
+ canResume?.(candidate) === true &&
675
+ decodeServiceClosingSpotAuthority(current.payload)?.kind === 'user_spot';
676
+ const spot = requireCloseTarget(current, record.target.spotId, {
677
+ objectGeneration: record.target.objectGeneration,
678
+ nodeRid: record.target.targetNodeRid,
679
+ nodeGeneration: record.target.targetNodeGeneration,
680
+ authorityOwnerGeneration: record.target.authorityOwnerGeneration,
681
+ storeVersion: resuming ? undefined : record.target.expectedStoreVersion
682
+ });
683
+ return await closeOwner(
684
+ spot,
685
+ async (onCommitted) =>
686
+ this.commitCloseAuthority(key, current, record.target.spotId, onCommitted),
723
687
  signal
724
688
  );
725
- if (deleted.kind === 'deleted') {
726
- this.forgetReadyRoute(record.target.spotId as RoutingId, current);
727
- return true;
728
- }
729
- throw createInternalFrameworkException(
730
- ZLinkFrameworkInternalErrorKind.SpotMoving,
731
- `User Spot '${record.target.spotId}' authority changed while closing.`,
732
- true
733
- );
689
+ }
690
+
691
+ private async commitCloseAuthority(
692
+ key: ReturnType<typeof encodeAuthorityKey>,
693
+ current: ZLinkAuthoritySnapshot,
694
+ spotId: string,
695
+ onCommitted: () => void
696
+ ): Promise<{ release(): Promise<void> }> {
697
+ const closing = await this.beginClosing(key, current, spotId);
698
+ const authority = {
699
+ release: async () => {
700
+ this.forgetReadyRoute(spotId as RoutingId, current);
701
+ const deleted = await this.options.store.compareExchangeAuthority(
702
+ key,
703
+ closing.storeVersion,
704
+ {
705
+ kind: 'delete'
706
+ }
707
+ );
708
+ if (deleted.kind !== 'deleted') {
709
+ throw createInternalFrameworkException(
710
+ ZLinkFrameworkInternalErrorKind.SpotMoving,
711
+ `User Spot '${spotId}' authority changed while closing.`,
712
+ true
713
+ );
714
+ }
715
+ }
716
+ };
717
+ onCommitted();
718
+ return authority;
734
719
  }
735
720
 
736
721
  forgetReadyRoute(spotId: RoutingId, snapshot: ZLinkAuthoritySnapshot): void {
@@ -743,8 +728,7 @@ export class ZLinkUserSpotCreationCoordinator {
743
728
  private async beginClosing(
744
729
  key: ReturnType<typeof encodeAuthorityKey>,
745
730
  current: ZLinkAuthoritySnapshot,
746
- spotId: string,
747
- signal?: AbortSignal
731
+ spotId: string
748
732
  ): Promise<ZLinkAuthoritySnapshot> {
749
733
  const ready = decodeServiceReadySpotAuthority(current.payload);
750
734
  if (
@@ -766,7 +750,7 @@ export class ZLinkUserSpotCreationCoordinator {
766
750
  payload: userSpotAuthorityPayload(current, spotId, 'closing'),
767
751
  generationTransition: 'preserve'
768
752
  },
769
- signal
753
+ undefined
770
754
  );
771
755
  if (closing.kind === 'stored') {
772
756
  const { kind: _kind, ...snapshot } = closing;
@@ -779,31 +763,6 @@ export class ZLinkUserSpotCreationCoordinator {
779
763
  );
780
764
  }
781
765
 
782
- private async restoreReady(
783
- key: ReturnType<typeof encodeAuthorityKey>,
784
- closing: ZLinkAuthoritySnapshot,
785
- spotId: string,
786
- signal?: AbortSignal
787
- ): Promise<void> {
788
- const restored = await this.options.store.compareExchangeAuthority(
789
- key,
790
- closing.storeVersion,
791
- {
792
- kind: 'put',
793
- payload: userSpotAuthorityPayload(closing, spotId, 'ready'),
794
- generationTransition: 'preserve'
795
- },
796
- signal
797
- );
798
- if (restored.kind !== 'stored') {
799
- throw createInternalFrameworkException(
800
- ZLinkFrameworkInternalErrorKind.SpotMoving,
801
- 'User Spot Ready authority could not be restored after close was declined.',
802
- true
803
- );
804
- }
805
- }
806
-
807
766
  private async awaitReady(
808
767
  request: ZLinkUserSpotCreationRequest,
809
768
  signal: AbortSignal
@@ -815,7 +774,7 @@ export class ZLinkUserSpotCreationCoordinator {
815
774
  if (current.kind === 'snapshot' && current.allocation.state === 'active') {
816
775
  return spotRef(current, request);
817
776
  }
818
- await wait(this.options.pollIntervalMs ?? 10, signal);
777
+ await wait(this.options.pollIntervalMs ?? DEFAULT_USER_SPOT_POLL_INTERVAL_MS, signal);
819
778
  }
820
779
  }
821
780
 
@@ -926,6 +885,66 @@ function readySpotRoute(
926
885
  };
927
886
  }
928
887
 
888
+ /** The Close fence a caller observed; omitted parts are not part of that caller's fence. */
889
+ interface ZLinkUserSpotCloseFence {
890
+ readonly objectGeneration: bigint;
891
+ readonly nodeRid: string;
892
+ readonly meshName?: string;
893
+ readonly nodeGeneration?: bigint;
894
+ readonly authorityOwnerGeneration?: bigint;
895
+ readonly storeVersion?: string;
896
+ }
897
+
898
+ /**
899
+ * The single classifier of a Close target (§7, §9): another ObjectGeneration is
900
+ * SpotGenerationStale; any owner fence difference or an authority that is not
901
+ * in a Framework-owned Ready or Closing state is SpotMoving.
902
+ */
903
+ function requireCloseTarget(
904
+ current: ZLinkAuthoritySnapshot,
905
+ spotId: string,
906
+ fence: ZLinkUserSpotCloseFence
907
+ ): SpotRef {
908
+ if (current.objectGeneration !== fence.objectGeneration) {
909
+ throw createInternalFrameworkException(
910
+ ZLinkFrameworkInternalErrorKind.SpotGenerationStale,
911
+ `User Spot '${spotId}' generation is stale.`
912
+ );
913
+ }
914
+ // A committed Closing stays the close target: its owner resumes that Close.
915
+ const decoded =
916
+ decodeServiceReadySpotAuthority(current.payload) ??
917
+ decodeServiceClosingSpotAuthority(current.payload);
918
+ const allocation = current.allocation;
919
+ if (
920
+ decoded?.kind !== 'user_spot' ||
921
+ decoded.spotId !== spotId ||
922
+ decoded.ownerId !== current.ownerId ||
923
+ decoded.ownerLeaseGeneration !== current.ownerLeaseGeneration ||
924
+ allocation.objectKind !== 'user_spot' ||
925
+ allocation.state !== 'active' ||
926
+ String(allocation.descriptor.rid) !== fence.nodeRid ||
927
+ (fence.meshName !== undefined && allocation.descriptor.meshName !== fence.meshName) ||
928
+ (fence.nodeGeneration !== undefined &&
929
+ allocation.descriptorLifecycleGeneration !== fence.nodeGeneration) ||
930
+ (fence.authorityOwnerGeneration !== undefined &&
931
+ current.authorityOwnerGeneration !== fence.authorityOwnerGeneration) ||
932
+ (fence.storeVersion !== undefined && current.storeVersion.value !== fence.storeVersion)
933
+ ) {
934
+ throw createInternalFrameworkException(
935
+ ZLinkFrameworkInternalErrorKind.SpotMoving,
936
+ `User Spot '${spotId}' owner fence changed or the Spot is moving.`,
937
+ true
938
+ );
939
+ }
940
+ return {
941
+ spotId: spotId as RoutingId,
942
+ objectGeneration: current.objectGeneration,
943
+ meshName: allocation.descriptor.meshName,
944
+ nodeRid: allocation.descriptor.rid
945
+ };
946
+ }
947
+
929
948
  function spotRef(
930
949
  snapshot: ZLinkAuthoritySnapshot,
931
950
  request: ZLinkUserSpotCreationRequest,
@@ -1,12 +1,15 @@
1
1
  import { createHash, timingSafeEqual } from 'node:crypto';
2
2
  import type { ZLinkLocationStore, ZLinkStoreKey, ZLinkStoreReadResult } from '../../contracts';
3
+ import { SHA256_DIGEST_BYTES } from '../foundation/actor-join-recovery-codec';
4
+ import { PROVIDER_STORAGE_NAMESPACE_PREFIX, storeKey } from './in-memory-provider-location-store';
3
5
  import type {
4
6
  ZLinkAggregateFence,
5
7
  ZLinkAggregatePrepareRequest
6
8
  } from './internal-location-contracts';
7
- import { storeKey } from './in-memory-provider-location-store';
8
9
 
9
- const PREFIX = 'zlink:v11:aggregate-inventory:';
10
+ const INVENTORY_PAGE_KIND = 'aggregate-inventory-page-v1';
11
+ const INVENTORY_ROOT_KIND = 'aggregate-inventory-root-v1';
12
+ const PREFIX = `${PROVIDER_STORAGE_NAMESPACE_PREFIX}aggregate-inventory:`;
10
13
  const MAX_PAGE_ENTRIES = 1_024;
11
14
  const MAX_PAGE_BYTES = 1_024 * 1_024;
12
15
  const MAX_TREE_LEVELS = 32;
@@ -30,7 +33,7 @@ interface InventoryReference {
30
33
  }
31
34
 
32
35
  interface InventoryPage {
33
- readonly kind: 'aggregate-inventory-page-v1';
36
+ readonly kind: typeof INVENTORY_PAGE_KIND;
34
37
  readonly level: number;
35
38
  readonly index: number;
36
39
  readonly startIndex: number;
@@ -40,7 +43,7 @@ interface InventoryPage {
40
43
  }
41
44
 
42
45
  interface InventoryRoot {
43
- readonly kind: 'aggregate-inventory-root-v1';
46
+ readonly kind: typeof INVENTORY_ROOT_KIND;
44
47
  readonly totalCount: number;
45
48
  readonly digest: string;
46
49
  readonly declaredDigest: string;
@@ -209,8 +212,8 @@ function buildTree(request: ZLinkAggregatePrepareRequest): InventoryTree {
209
212
  if (request.participants.length < 1) {
210
213
  throw new RangeError('Aggregate inventory requires at least one participant.');
211
214
  }
212
- if (request.inventoryDigest.byteLength !== 32) {
213
- throw new TypeError('Aggregate inventory digest must contain 32 bytes.');
215
+ if (request.inventoryDigest.byteLength !== SHA256_DIGEST_BYTES) {
216
+ throw new TypeError(`Aggregate inventory digest must contain ${SHA256_DIGEST_BYTES} bytes.`);
214
217
  }
215
218
  const entries = request.participants.map((participant, index): InventoryEntry => ({
216
219
  index,
@@ -240,7 +243,7 @@ function buildTree(request: ZLinkAggregatePrepareRequest): InventoryTree {
240
243
  ) {
241
244
  level++;
242
245
  if (level >= MAX_TREE_LEVELS) {
243
- throw new RangeError('Aggregate inventory tree exceeds 32 levels.');
246
+ throw new RangeError(`Aggregate inventory tree exceeds ${MAX_TREE_LEVELS} levels.`);
244
247
  }
245
248
  references = packIndexPages(level, references, pages);
246
249
  }
@@ -269,7 +272,7 @@ function packLeafPages(
269
272
  let bytes: Uint8Array;
270
273
  do {
271
274
  page = {
272
- kind: 'aggregate-inventory-page-v1',
275
+ kind: INVENTORY_PAGE_KIND,
273
276
  level: 0,
274
277
  index: references.length,
275
278
  startIndex: offset,
@@ -304,7 +307,7 @@ function packIndexPages(
304
307
  do {
305
308
  const selected = children.slice(offset, offset + count);
306
309
  page = {
307
- kind: 'aggregate-inventory-page-v1',
310
+ kind: INVENTORY_PAGE_KIND,
308
311
  level,
309
312
  index: references.length,
310
313
  startIndex: selected[0]!.startIndex,
@@ -339,7 +342,7 @@ function rootCandidate(
339
342
  if (page.level <= topLevel) pageCountsByLevel[page.level]!++;
340
343
  }
341
344
  return {
342
- kind: 'aggregate-inventory-root-v1',
345
+ kind: INVENTORY_ROOT_KIND,
343
346
  totalCount,
344
347
  digest,
345
348
  declaredDigest,
@@ -456,7 +459,7 @@ function decodeRoot(bytes: Uint8Array): InventoryRoot {
456
459
  value === null ||
457
460
  typeof value !== 'object' ||
458
461
  !('kind' in value) ||
459
- value.kind !== 'aggregate-inventory-root-v1'
462
+ value.kind !== INVENTORY_ROOT_KIND
460
463
  ) {
461
464
  throw new Error('Invalid inventory root.');
462
465
  }
@@ -469,7 +472,7 @@ function decodePage(bytes: Uint8Array): InventoryPage {
469
472
  value === null ||
470
473
  typeof value !== 'object' ||
471
474
  !('kind' in value) ||
472
- value.kind !== 'aggregate-inventory-page-v1' ||
475
+ value.kind !== INVENTORY_PAGE_KIND ||
473
476
  !('entries' in value) ||
474
477
  !Array.isArray(value.entries) ||
475
478
  !('children' in value) ||
@@ -524,7 +527,7 @@ function isSha256(value: unknown): value is string {
524
527
  function sameHash(expected: string, actual: Uint8Array): boolean {
525
528
  return (
526
529
  isSha256(expected) &&
527
- actual.byteLength === 32 &&
530
+ actual.byteLength === SHA256_DIGEST_BYTES &&
528
531
  timingSafeEqual(Buffer.from(expected, 'hex'), Buffer.from(actual))
529
532
  );
530
533
  }
@@ -1,3 +1,4 @@
1
+ import { ZLINK_MAX_IDENTITY_TEXT_BYTES } from '../../contracts/Common/CoreTypes';
1
2
  import type {
2
3
  ZLinkAuthorityKey,
3
4
  ZLinkPlacementObjectKind
@@ -8,8 +9,10 @@ export function encodeAuthorityKey(
8
9
  globalId: string
9
10
  ): ZLinkAuthorityKey {
10
11
  const bytes = Buffer.from(globalId);
11
- if (bytes.byteLength < 1 || bytes.byteLength > 255) {
12
- throw new RangeError('Authority identity must contain 1..255 UTF-8 bytes.');
12
+ if (bytes.byteLength < 1 || bytes.byteLength > ZLINK_MAX_IDENTITY_TEXT_BYTES) {
13
+ throw new RangeError(
14
+ `Authority identity must contain 1..${ZLINK_MAX_IDENTITY_TEXT_BYTES} UTF-8 bytes.`
15
+ );
13
16
  }
14
17
  const discriminator = kind === 'actor' ? 'a' : 's';
15
18
  return {
@@ -27,7 +30,8 @@ export function decodeAuthorityKey(key: ZLinkAuthorityKey): {
27
30
  const match = /^zla1:([as]):([1-9][0-9]{0,2}):(.*)$/.exec(key.value);
28
31
  if (match === null) throw new TypeError('Authority key is not canonical.');
29
32
  const declaredLength = Number(match[2]);
30
- if (declaredLength > 255) throw new TypeError('Authority key identity exceeds the byte limit.');
33
+ if (declaredLength > ZLINK_MAX_IDENTITY_TEXT_BYTES)
34
+ throw new TypeError('Authority key identity exceeds the byte limit.');
31
35
  const encoded = match[3]!;
32
36
  const bytes: number[] = [];
33
37
  for (let index = 0; index < encoded.length;) {