@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
@@ -3,11 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ZLinkUserSpotCreationCoordinator = void 0;
4
4
  exports.encodeLocationCreationContent = encodeLocationCreationContent;
5
5
  exports.decodeLocationCreationContent = decodeLocationCreationContent;
6
- const framework_errors_internal_1 = require("../framework-errors-internal");
7
6
  const node_crypto_1 = require("node:crypto");
8
7
  const contracts_1 = require("../../contracts");
9
8
  const service_authority_payload_codec_1 = require("../foundation/service-authority-payload-codec");
9
+ const framework_errors_internal_1 = require("../framework-errors-internal");
10
10
  const authority_key_codec_1 = require("../locations/authority-key-codec");
11
+ const DEFAULT_USER_SPOT_CLEANUP_TIMEOUT_MS = 1_000;
12
+ const DEFAULT_USER_SPOT_POLL_INTERVAL_MS = 10;
11
13
  /**
12
14
  * Makes generic Location Store reservation the only visibility barrier for a
13
15
  * User Spot. Only the reservation winner invokes application lifecycle code.
@@ -20,9 +22,10 @@ class ZLinkUserSpotCreationCoordinator {
20
22
  this.options = options;
21
23
  }
22
24
  async getOrCreate(request, materialize, discard) {
23
- const deadline = createDeadline(request.timeoutMs, request.signal);
24
- const deadlineMs = performance.now() + request.timeoutMs;
25
25
  const deadlineUnixMs = Date.now() + request.timeoutMs;
26
+ const remainingMs = Math.max(0, deadlineUnixMs - Date.now());
27
+ const deadline = createDeadline(remainingMs, request.signal);
28
+ const deadlineMs = performance.now() + remainingMs;
26
29
  const signal = deadline.signal;
27
30
  signal.throwIfAborted();
28
31
  const sha256 = (0, node_crypto_1.createHash)('sha256').update(request.requestPayload).digest();
@@ -85,7 +88,7 @@ class ZLinkUserSpotCreationCoordinator {
85
88
  count: 1
86
89
  }
87
90
  }
88
- }, signal);
91
+ }, signal, BigInt(deadlineUnixMs));
89
92
  }
90
93
  catch (error) {
91
94
  deadline.close();
@@ -192,60 +195,35 @@ class ZLinkUserSpotCreationCoordinator {
192
195
  deadline.close();
193
196
  }
194
197
  }
195
- async close(spot, closeOwner, signal, ownerPresent, ownerCanClose) {
198
+ async close(spot, closeOwner, signal) {
196
199
  const resolved = await this.resolveCloseTarget(spot, signal);
197
200
  if (resolved === undefined)
198
201
  return false;
199
202
  const { spot: currentRef, snapshot: current } = resolved;
200
203
  const key = (0, authority_key_codec_1.encodeAuthorityKey)('user_spot', String(spot.spotId));
201
- if (ownerPresent?.(currentRef) === false) {
202
- throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving, `User Spot '${String(spot.spotId)}' is missing from its authority owner.`, true);
203
- }
204
- if (ownerCanClose?.(currentRef) === false)
205
- return false;
206
- const closing = await this.beginClosing(key, current, String(spot.spotId), signal);
207
- let closed;
208
- try {
209
- closed = await closeOwner(currentRef, closing);
210
- }
211
- catch (error) {
212
- await this.restoreReady(key, closing, String(spot.spotId), signal);
213
- throw error;
214
- }
215
- if (!closed) {
216
- await this.restoreReady(key, closing, String(spot.spotId), signal);
217
- return false;
218
- }
219
- const deleted = await this.options.store.compareExchangeAuthority(key, closing.storeVersion, { kind: 'delete' }, signal);
220
- if (deleted.kind === 'deleted') {
221
- this.forgetReadyRoute(currentRef.spotId, current);
222
- return true;
223
- }
224
- if (deleted.kind === 'conflict') {
225
- throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving, `User Spot '${String(spot.spotId)}' authority changed while closing.`, true);
226
- }
227
- throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotGenerationStale, `User Spot '${String(spot.spotId)}' generation cannot be closed.`);
204
+ return await closeOwner(currentRef, async (onCommitted) => this.commitCloseAuthority(key, current, String(spot.spotId), onCommitted));
205
+ }
206
+ /** Commits Closing for the owner's own incarnation when its context requests Close. */
207
+ async beginOwnerClose(spot, onCommitted) {
208
+ const resolved = await this.resolveCloseTarget(spot);
209
+ if (resolved === undefined)
210
+ return undefined;
211
+ const spotId = String(spot.spotId);
212
+ return await this.commitCloseAuthority((0, authority_key_codec_1.encodeAuthorityKey)('user_spot', spotId), resolved.snapshot, spotId, onCommitted);
228
213
  }
229
214
  async resolveCloseTarget(spot, signal) {
230
215
  const key = (0, authority_key_codec_1.encodeAuthorityKey)('user_spot', String(spot.spotId));
231
216
  const current = await this.options.store.readAuthority(key, signal);
232
217
  if (current.kind === 'missing')
233
218
  return undefined;
234
- if (current.objectGeneration !== spot.objectGeneration) {
235
- throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotGenerationStale, `User Spot '${String(spot.spotId)}' generation is stale.`);
236
- }
237
- const currentRef = spotRef(current, {
238
- meshName: current.allocation.descriptor.meshName,
239
- spotId: spot.spotId,
240
- stableType: current.allocation.stableType,
241
- requestPayload: Buffer.alloc(0),
242
- timeoutMs: 1
243
- });
244
- if (String(current.allocation.descriptor.rid) !== String(spot.nodeRid) ||
245
- current.allocation.descriptor.meshName !== spot.meshName) {
246
- throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotGenerationStale, `User Spot '${String(spot.spotId)}' owner route is stale.`);
247
- }
248
- return { spot: currentRef, snapshot: current };
219
+ return {
220
+ spot: requireCloseTarget(current, String(spot.spotId), {
221
+ objectGeneration: spot.objectGeneration,
222
+ nodeRid: String(spot.nodeRid),
223
+ meshName: spot.meshName
224
+ }),
225
+ snapshot: current
226
+ };
249
227
  }
250
228
  async handleRemoteCreate(record, materialize, discard, signal) {
251
229
  const key = `${record.spotId}\0${record.reservation.reservationId}`;
@@ -348,7 +326,7 @@ class ZLinkUserSpotCreationCoordinator {
348
326
  leaseGeneration: current.ownerLeaseGeneration
349
327
  }
350
328
  }
351
- }, signal);
329
+ }, signal, record.deadlineUnixMs);
352
330
  await discard?.(signal);
353
331
  return {
354
332
  result: { spot, state: local.state, reply: local.reply },
@@ -380,7 +358,7 @@ class ZLinkUserSpotCreationCoordinator {
380
358
  ownerNodeRid: String(current.allocation.descriptor.rid),
381
359
  ownerNodeGeneration: current.allocation.descriptorLifecycleGeneration
382
360
  })
383
- }, signal);
361
+ }, signal, record.deadlineUnixMs);
384
362
  }
385
363
  catch (error) {
386
364
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestFailed, 'User Spot Ready commit Store operation failed.', false, error);
@@ -401,7 +379,7 @@ class ZLinkUserSpotCreationCoordinator {
401
379
  }
402
380
  catch (error) {
403
381
  local?.publication?.abort();
404
- const cleanupDeadline = createDeadline(this.options.cleanupTimeoutMs ?? 1_000);
382
+ const cleanupDeadline = createDeadline(this.options.cleanupTimeoutMs ?? DEFAULT_USER_SPOT_CLEANUP_TIMEOUT_MS);
405
383
  const cleanupSignal = cleanupDeadline.signal;
406
384
  const cleanup = await Promise.allSettled([
407
385
  waitForAbort(this.options.store.abort({
@@ -430,52 +408,50 @@ class ZLinkUserSpotCreationCoordinator {
430
408
  throw error;
431
409
  }
432
410
  }
433
- async handleRemoteClose(record, closeOwner, signal) {
411
+ async handleRemoteClose(record, closeOwner, signal, canResume) {
434
412
  const key = (0, authority_key_codec_1.encodeAuthorityKey)('user_spot', record.target.spotId);
435
413
  const current = await this.options.store.readAuthority(key, signal);
436
414
  if (current.kind === 'missing')
437
415
  return false;
438
- if (current.objectGeneration !== record.target.objectGeneration) {
439
- throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotGenerationStale, `User Spot '${record.target.spotId}' generation is stale.`);
440
- }
441
- if (current.authorityOwnerGeneration !== record.target.authorityOwnerGeneration ||
442
- current.storeVersion.value !== record.target.expectedStoreVersion ||
443
- String(current.allocation.descriptor.rid) !== record.target.targetNodeRid ||
444
- current.allocation.descriptorLifecycleGeneration !== record.target.targetNodeGeneration ||
445
- current.allocation.objectKind !== 'user_spot' ||
446
- current.allocation.state !== 'active') {
447
- throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving, `User Spot '${record.target.spotId}' close authority is moving.`, true);
448
- }
449
- const spot = {
416
+ const candidate = {
450
417
  spotId: record.target.spotId,
451
418
  objectGeneration: current.objectGeneration,
452
419
  meshName: current.allocation.descriptor.meshName,
453
420
  nodeRid: current.allocation.descriptor.rid
454
421
  };
455
- const closing = await this.beginClosing(key, current, record.target.spotId, signal);
456
- let closed;
457
- try {
458
- closed = await closeOwner(spot, signal);
459
- }
460
- catch (error) {
461
- await this.restoreReady(key, closing, record.target.spotId, signal);
462
- throw error;
463
- }
464
- if (!closed) {
465
- await this.restoreReady(key, closing, record.target.spotId, signal);
466
- return false;
467
- }
468
- const deleted = await this.options.store.compareExchangeAuthority(key, closing.storeVersion, { kind: 'delete' }, signal);
469
- if (deleted.kind === 'deleted') {
470
- this.forgetReadyRoute(record.target.spotId, current);
471
- return true;
472
- }
473
- throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving, `User Spot '${record.target.spotId}' authority changed while closing.`, true);
422
+ // A Closing committed by this owner is resumed, so its store version has
423
+ // advanced past the one the source observed.
424
+ const resuming = canResume?.(candidate) === true &&
425
+ (0, service_authority_payload_codec_1.decodeServiceClosingSpotAuthority)(current.payload)?.kind === 'user_spot';
426
+ const spot = requireCloseTarget(current, record.target.spotId, {
427
+ objectGeneration: record.target.objectGeneration,
428
+ nodeRid: record.target.targetNodeRid,
429
+ nodeGeneration: record.target.targetNodeGeneration,
430
+ authorityOwnerGeneration: record.target.authorityOwnerGeneration,
431
+ storeVersion: resuming ? undefined : record.target.expectedStoreVersion
432
+ });
433
+ return await closeOwner(spot, async (onCommitted) => this.commitCloseAuthority(key, current, record.target.spotId, onCommitted), signal);
434
+ }
435
+ async commitCloseAuthority(key, current, spotId, onCommitted) {
436
+ const closing = await this.beginClosing(key, current, spotId);
437
+ const authority = {
438
+ release: async () => {
439
+ this.forgetReadyRoute(spotId, current);
440
+ const deleted = await this.options.store.compareExchangeAuthority(key, closing.storeVersion, {
441
+ kind: 'delete'
442
+ });
443
+ if (deleted.kind !== 'deleted') {
444
+ throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving, `User Spot '${spotId}' authority changed while closing.`, true);
445
+ }
446
+ }
447
+ };
448
+ onCommitted();
449
+ return authority;
474
450
  }
475
451
  forgetReadyRoute(spotId, snapshot) {
476
452
  this.options.forgetReadyRoute?.(snapshot.allocation.descriptor.meshName, readySpotRoute(spotId, snapshot));
477
453
  }
478
- async beginClosing(key, current, spotId, signal) {
454
+ async beginClosing(key, current, spotId) {
479
455
  const ready = (0, service_authority_payload_codec_1.decodeServiceReadySpotAuthority)(current.payload);
480
456
  if (ready?.kind !== 'user_spot' ||
481
457
  ready.spotId !== spotId ||
@@ -486,23 +462,13 @@ class ZLinkUserSpotCreationCoordinator {
486
462
  kind: 'put',
487
463
  payload: userSpotAuthorityPayload(current, spotId, 'closing'),
488
464
  generationTransition: 'preserve'
489
- }, signal);
465
+ }, undefined);
490
466
  if (closing.kind === 'stored') {
491
467
  const { kind: _kind, ...snapshot } = closing;
492
468
  return { kind: 'snapshot', ...snapshot };
493
469
  }
494
470
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving, `User Spot authority changed while entering Closing.`, true);
495
471
  }
496
- async restoreReady(key, closing, spotId, signal) {
497
- const restored = await this.options.store.compareExchangeAuthority(key, closing.storeVersion, {
498
- kind: 'put',
499
- payload: userSpotAuthorityPayload(closing, spotId, 'ready'),
500
- generationTransition: 'preserve'
501
- }, signal);
502
- if (restored.kind !== 'stored') {
503
- throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving, 'User Spot Ready authority could not be restored after close was declined.', true);
504
- }
505
- }
506
472
  async awaitReady(request, signal) {
507
473
  const key = (0, authority_key_codec_1.encodeAuthorityKey)('user_spot', String(request.spotId));
508
474
  for (;;) {
@@ -511,7 +477,7 @@ class ZLinkUserSpotCreationCoordinator {
511
477
  if (current.kind === 'snapshot' && current.allocation.state === 'active') {
512
478
  return spotRef(current, request);
513
479
  }
514
- await wait(this.options.pollIntervalMs ?? 10, signal);
480
+ await wait(this.options.pollIntervalMs ?? DEFAULT_USER_SPOT_POLL_INTERVAL_MS, signal);
515
481
  }
516
482
  }
517
483
  async remoteCreate(request, snapshot, targetNodeRid, targetNodeGeneration, deadlineUnixMs, deadlineMs) {
@@ -588,6 +554,41 @@ function readySpotRoute(spotId, snapshot) {
588
554
  storeVersion: snapshot.storeVersion.value
589
555
  };
590
556
  }
557
+ /**
558
+ * The single classifier of a Close target (§7, §9): another ObjectGeneration is
559
+ * SpotGenerationStale; any owner fence difference or an authority that is not
560
+ * in a Framework-owned Ready or Closing state is SpotMoving.
561
+ */
562
+ function requireCloseTarget(current, spotId, fence) {
563
+ if (current.objectGeneration !== fence.objectGeneration) {
564
+ throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotGenerationStale, `User Spot '${spotId}' generation is stale.`);
565
+ }
566
+ // A committed Closing stays the close target: its owner resumes that Close.
567
+ const decoded = (0, service_authority_payload_codec_1.decodeServiceReadySpotAuthority)(current.payload) ??
568
+ (0, service_authority_payload_codec_1.decodeServiceClosingSpotAuthority)(current.payload);
569
+ const allocation = current.allocation;
570
+ if (decoded?.kind !== 'user_spot' ||
571
+ decoded.spotId !== spotId ||
572
+ decoded.ownerId !== current.ownerId ||
573
+ decoded.ownerLeaseGeneration !== current.ownerLeaseGeneration ||
574
+ allocation.objectKind !== 'user_spot' ||
575
+ allocation.state !== 'active' ||
576
+ String(allocation.descriptor.rid) !== fence.nodeRid ||
577
+ (fence.meshName !== undefined && allocation.descriptor.meshName !== fence.meshName) ||
578
+ (fence.nodeGeneration !== undefined &&
579
+ allocation.descriptorLifecycleGeneration !== fence.nodeGeneration) ||
580
+ (fence.authorityOwnerGeneration !== undefined &&
581
+ current.authorityOwnerGeneration !== fence.authorityOwnerGeneration) ||
582
+ (fence.storeVersion !== undefined && current.storeVersion.value !== fence.storeVersion)) {
583
+ throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving, `User Spot '${spotId}' owner fence changed or the Spot is moving.`, true);
584
+ }
585
+ return {
586
+ spotId: spotId,
587
+ objectGeneration: current.objectGeneration,
588
+ meshName: allocation.descriptor.meshName,
589
+ nodeRid: allocation.descriptor.rid
590
+ };
591
+ }
591
592
  function spotRef(snapshot, request, allowPending = false) {
592
593
  const decoded = (0, service_authority_payload_codec_1.decodeServiceReadySpotAuthority)(snapshot.payload);
593
594
  if (allowPending
@@ -2,8 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ZLinkAggregateInventoryStore = void 0;
4
4
  const node_crypto_1 = require("node:crypto");
5
+ const actor_join_recovery_codec_1 = require("../foundation/actor-join-recovery-codec");
5
6
  const in_memory_provider_location_store_1 = require("./in-memory-provider-location-store");
6
- const PREFIX = 'zlink:v11:aggregate-inventory:';
7
+ const INVENTORY_PAGE_KIND = 'aggregate-inventory-page-v1';
8
+ const INVENTORY_ROOT_KIND = 'aggregate-inventory-root-v1';
9
+ const PREFIX = `${in_memory_provider_location_store_1.PROVIDER_STORAGE_NAMESPACE_PREFIX}aggregate-inventory:`;
7
10
  const MAX_PAGE_ENTRIES = 1_024;
8
11
  const MAX_PAGE_BYTES = 1_024 * 1_024;
9
12
  const MAX_TREE_LEVELS = 32;
@@ -135,8 +138,8 @@ function buildTree(request) {
135
138
  if (request.participants.length < 1) {
136
139
  throw new RangeError('Aggregate inventory requires at least one participant.');
137
140
  }
138
- if (request.inventoryDigest.byteLength !== 32) {
139
- throw new TypeError('Aggregate inventory digest must contain 32 bytes.');
141
+ if (request.inventoryDigest.byteLength !== actor_join_recovery_codec_1.SHA256_DIGEST_BYTES) {
142
+ throw new TypeError(`Aggregate inventory digest must contain ${actor_join_recovery_codec_1.SHA256_DIGEST_BYTES} bytes.`);
140
143
  }
141
144
  const entries = request.participants.map((participant, index) => ({
142
145
  index,
@@ -162,7 +165,7 @@ function buildTree(request) {
162
165
  MAX_PAGE_BYTES) {
163
166
  level++;
164
167
  if (level >= MAX_TREE_LEVELS) {
165
- throw new RangeError('Aggregate inventory tree exceeds 32 levels.');
168
+ throw new RangeError(`Aggregate inventory tree exceeds ${MAX_TREE_LEVELS} levels.`);
166
169
  }
167
170
  references = packIndexPages(level, references, pages);
168
171
  }
@@ -180,7 +183,7 @@ function packLeafPages(entries, pages) {
180
183
  let bytes;
181
184
  do {
182
185
  page = {
183
- kind: 'aggregate-inventory-page-v1',
186
+ kind: INVENTORY_PAGE_KIND,
184
187
  level: 0,
185
188
  index: references.length,
186
189
  startIndex: offset,
@@ -211,7 +214,7 @@ function packIndexPages(level, children, pages) {
211
214
  do {
212
215
  const selected = children.slice(offset, offset + count);
213
216
  page = {
214
- kind: 'aggregate-inventory-page-v1',
217
+ kind: INVENTORY_PAGE_KIND,
215
218
  level,
216
219
  index: references.length,
217
220
  startIndex: selected[0].startIndex,
@@ -240,7 +243,7 @@ function rootCandidate(totalCount, topLevel, topPages, pages, digest, declaredDi
240
243
  pageCountsByLevel[page.level]++;
241
244
  }
242
245
  return {
243
- kind: 'aggregate-inventory-root-v1',
246
+ kind: INVENTORY_ROOT_KIND,
244
247
  totalCount,
245
248
  digest,
246
249
  declaredDigest,
@@ -325,7 +328,7 @@ function decodeRoot(bytes) {
325
328
  if (value === null ||
326
329
  typeof value !== 'object' ||
327
330
  !('kind' in value) ||
328
- value.kind !== 'aggregate-inventory-root-v1') {
331
+ value.kind !== INVENTORY_ROOT_KIND) {
329
332
  throw new Error('Invalid inventory root.');
330
333
  }
331
334
  return value;
@@ -335,7 +338,7 @@ function decodePage(bytes) {
335
338
  if (value === null ||
336
339
  typeof value !== 'object' ||
337
340
  !('kind' in value) ||
338
- value.kind !== 'aggregate-inventory-page-v1' ||
341
+ value.kind !== INVENTORY_PAGE_KIND ||
339
342
  !('entries' in value) ||
340
343
  !Array.isArray(value.entries) ||
341
344
  !('children' in value) ||
@@ -379,7 +382,7 @@ function isSha256(value) {
379
382
  }
380
383
  function sameHash(expected, actual) {
381
384
  return (isSha256(expected) &&
382
- actual.byteLength === 32 &&
385
+ actual.byteLength === actor_join_recovery_codec_1.SHA256_DIGEST_BYTES &&
383
386
  (0, node_crypto_1.timingSafeEqual)(Buffer.from(expected, 'hex'), Buffer.from(actual)));
384
387
  }
385
388
  function dataLost(fence, reason) {
@@ -2,10 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.encodeAuthorityKey = encodeAuthorityKey;
4
4
  exports.decodeAuthorityKey = decodeAuthorityKey;
5
+ const CoreTypes_1 = require("../../contracts/Common/CoreTypes");
5
6
  function encodeAuthorityKey(kind, globalId) {
6
7
  const bytes = Buffer.from(globalId);
7
- if (bytes.byteLength < 1 || bytes.byteLength > 255) {
8
- throw new RangeError('Authority identity must contain 1..255 UTF-8 bytes.');
8
+ if (bytes.byteLength < 1 || bytes.byteLength > CoreTypes_1.ZLINK_MAX_IDENTITY_TEXT_BYTES) {
9
+ throw new RangeError(`Authority identity must contain 1..${CoreTypes_1.ZLINK_MAX_IDENTITY_TEXT_BYTES} UTF-8 bytes.`);
9
10
  }
10
11
  const discriminator = kind === 'actor' ? 'a' : 's';
11
12
  return {
@@ -20,7 +21,7 @@ function decodeAuthorityKey(key) {
20
21
  if (match === null)
21
22
  throw new TypeError('Authority key is not canonical.');
22
23
  const declaredLength = Number(match[2]);
23
- if (declaredLength > 255)
24
+ if (declaredLength > CoreTypes_1.ZLINK_MAX_IDENTITY_TEXT_BYTES)
24
25
  throw new TypeError('Authority key identity exceeds the byte limit.');
25
26
  const encoded = match[3];
26
27
  const bytes = [];
@@ -1,6 +1,7 @@
1
1
  import { type ZLinkLocationOptionOverrides } from '../../contracts/Locations/Options';
2
2
  import type { RoutingId } from '../../contracts/Common';
3
3
  import { type ZLinkPeerLocationResolver, type ZLinkPeerLocation } from './internal-location-contracts';
4
+ import type { ZLinkDispatchErrorSink } from '../diagnostics/dispatch-error-port';
4
5
  import type { IZLinkAutoConnectExecutor, IZLinkAutoConnectPeerPublisher, ZLinkAutoConnectEventSink, ZLinkAutoConnectLocal, ZLinkAutoConnectTarget } from './auto-connect-types';
5
6
  export interface ZLinkAutoConnectReconcilerOptions {
6
7
  readonly local: ZLinkAutoConnectLocal;
@@ -12,6 +13,7 @@ export interface ZLinkAutoConnectReconcilerOptions {
12
13
  readonly events?: ZLinkAutoConnectEventSink;
13
14
  readonly options?: ZLinkLocationOptionOverrides;
14
15
  readonly monotonicNowMs?: () => number;
16
+ readonly errorSink: ZLinkDispatchErrorSink;
15
17
  }
16
18
  export declare class ZLinkAutoConnectReconciler {
17
19
  private readonly lane;
@@ -24,6 +26,7 @@ export declare class ZLinkAutoConnectReconciler {
24
26
  private readonly events?;
25
27
  private readonly options;
26
28
  private readonly monotonicNowMs;
29
+ private readonly errorSink;
27
30
  private readonly active;
28
31
  private readonly pendingDisconnects;
29
32
  private readonly failedEndpoints;
@@ -50,6 +53,7 @@ export declare class ZLinkAutoConnectReconciler {
50
53
  private completePublishClaimCore;
51
54
  private preparePublishRenewalCore;
52
55
  private recordStoreFailure;
56
+ private connectTarget;
53
57
  private beginStoreFailureCore;
54
58
  private completeStoreFailureConnectCore;
55
59
  private recordDisconnectedEndpoint;
@@ -7,6 +7,7 @@ const key_codec_1 = require("./key-codec");
7
7
  const EndpointNotation_1 = require("../../contracts/Configuration/EndpointNotation");
8
8
  const auto_connect_planner_1 = require("./auto-connect-planner");
9
9
  const state_lane_1 = require("../execution/state-lane");
10
+ const zlink_1 = require("@zlink-systems/zlink");
10
11
  const encodeRoutingIdHex = key_codec_1.ZLinkLocationKeyCodec.encodeRoutingIdHex;
11
12
  class ZLinkAutoConnectReconciler {
12
13
  lane = new state_lane_1.ZLinkStateLane();
@@ -19,6 +20,7 @@ class ZLinkAutoConnectReconciler {
19
20
  events;
20
21
  options;
21
22
  monotonicNowMs;
23
+ errorSink;
22
24
  active = new Map();
23
25
  pendingDisconnects = new Map();
24
26
  failedEndpoints = new Set();
@@ -45,6 +47,7 @@ class ZLinkAutoConnectReconciler {
45
47
  this.events = options.events;
46
48
  this.options = { ...Options_1.zlinkRuntimeDefaultLocationOptions, ...options.options };
47
49
  this.monotonicNowMs = options.monotonicNowMs ?? (() => performance.now());
50
+ this.errorSink = options.errorSink;
48
51
  this.executor.onDisconnected?.((endpoint) => this.recordDisconnectedEndpoint(endpoint));
49
52
  }
50
53
  get storeFailed() {
@@ -116,13 +119,6 @@ class ZLinkAutoConnectReconciler {
116
119
  await this.lane.run(() => {
117
120
  this.storeFailedValue = false;
118
121
  this.storeFailureStartedAtMs = undefined;
119
- // After a store restart, owners may need one full lease interval to
120
- // reclaim their token and republish a descriptor. Do not interpret the
121
- // incomplete post-restart scan as a definitive removal.
122
- // Keep the existing transport set through one lease interval while
123
- // owners reclaim their tokens and republish descriptors. This deferral
124
- // applies only after a Store operation failed; a successful empty scan
125
- // is authoritative and must remove stale peers promptly.
126
122
  this.recoveryDeferUntilMs = this.monotonicNowMs() + this.options.ownerLeaseTtlMs;
127
123
  });
128
124
  }
@@ -133,7 +129,6 @@ class ZLinkAutoConnectReconciler {
133
129
  .map((nodeRid) => encodeRoutingIdHex(nodeRid)));
134
130
  });
135
131
  const candidates = auto_connect_planner_1.ZLinkAutoConnectPlanner.computeCandidates(this.local, rows);
136
- const nowMs = this.monotonicNowMs();
137
132
  this.executor.expectPeers?.([...candidates.values()]);
138
133
  this.executor.replaceNotRequired?.(auto_connect_planner_1.ZLinkAutoConnectPlanner.computeNotRequired(this.local, rows));
139
134
  const desired = new Map(auto_connect_planner_1.ZLinkAutoConnectPlanner.computeDesired(this.local, rows));
@@ -152,6 +147,19 @@ class ZLinkAutoConnectReconciler {
152
147
  if (activeKeys.has(key))
153
148
  desired.set(key, target);
154
149
  }
150
+ const deferringMissingTargets = this.monotonicNowMs() < (await this.lane.run(() => this.recoveryDeferUntilMs));
151
+ let staleCandidates = candidates;
152
+ if (deferringMissingTargets) {
153
+ const retainedCandidates = new Map(candidates);
154
+ const lastDesired = await this.lane.run(() => [...this.lastDesired]);
155
+ for (const [key, target] of lastDesired) {
156
+ if (!desired.has(key))
157
+ desired.set(key, target);
158
+ if (!retainedCandidates.has(key))
159
+ retainedCandidates.set(key, target);
160
+ }
161
+ staleCandidates = retainedCandidates;
162
+ }
155
163
  await this.lane.run(() => {
156
164
  this.lastDesired = new Map(desired);
157
165
  });
@@ -178,14 +186,13 @@ class ZLinkAutoConnectReconciler {
178
186
  await this.lane.run(() => {
179
187
  this.pendingDisconnects.delete(key);
180
188
  });
181
- const connected = await this.executor.connect(target);
182
- if (connected) {
189
+ await this.connectTarget(target, async () => {
183
190
  connectedEndpoints.push(target.endpoint);
184
191
  await this.lane.run(() => {
185
192
  this.active.set(key, target);
186
193
  this.failedEndpoints.delete(target.endpoint);
187
194
  });
188
- }
195
+ });
189
196
  continue;
190
197
  }
191
198
  if (current.endpoint !== target.endpoint || current.ownerId !== target.ownerId) {
@@ -203,25 +210,16 @@ class ZLinkAutoConnectReconciler {
203
210
  await this.lane.run(() => {
204
211
  this.pendingDisconnects.delete(key);
205
212
  });
206
- const connected = await this.executor.connect(target);
207
- if (connected) {
213
+ await this.connectTarget(target, async () => {
208
214
  connectedEndpoints.push(target.endpoint);
209
215
  await this.lane.run(() => {
210
216
  this.active.set(key, target);
211
217
  this.failedEndpoints.delete(target.endpoint);
212
218
  });
213
- }
219
+ });
214
220
  }
215
221
  }
216
- if (nowMs < (await this.lane.run(() => this.recoveryDeferUntilMs))) {
217
- this.publishDesiredSetChange(connectedEndpoints, disconnectedEndpoints);
218
- return;
219
- }
220
- // A store restart can expose an incomplete descriptor set while peers are
221
- // reclaiming their owner leases. Preserve existing transport connections
222
- // during that recovery window; stale-peer cleanup is safe after the
223
- // deferred reconciliation has completed.
224
- this.executor.disconnectStalePeers?.([...candidates.values()]);
222
+ this.executor.disconnectStalePeers?.([...staleCandidates.values()]);
225
223
  const activeTargets = await this.lane.run(() => [...this.active]);
226
224
  for (const [key, target] of activeTargets) {
227
225
  if (!desired.has(key)) {
@@ -330,10 +328,24 @@ class ZLinkAutoConnectReconciler {
330
328
  if (retryTargets === undefined)
331
329
  return;
332
330
  for (const [key, target] of retryTargets) {
333
- if (await this.executor.connect(target)) {
331
+ await this.connectTarget(target, async () => {
334
332
  await this.lane.run(() => this.completeStoreFailureConnectCore(key, target));
335
- }
333
+ });
334
+ }
335
+ }
336
+ async connectTarget(target, accept) {
337
+ let accepted;
338
+ try {
339
+ accepted = await this.executor.connect(target);
340
+ }
341
+ catch (error) {
342
+ if (!(error instanceof zlink_1.ConnectError))
343
+ throw error;
344
+ this.errorSink.reportRuntimeTaskException('auto-connect', error);
345
+ return;
336
346
  }
347
+ if (accepted)
348
+ await accept();
337
349
  }
338
350
  beginStoreFailureCore() {
339
351
  const nowMs = this.monotonicNowMs();
@@ -1,12 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.randomOperationId = randomOperationId;
4
+ const stream_wire_1 = require("@zlink-systems/stream-wire");
5
+ const operation_identity_1 = require("../foundation/operation-identity");
4
6
  const node_crypto_1 = require("node:crypto");
5
- function randomOperationId(entropy = (0, node_crypto_1.randomBytes)(16)) {
6
- if (entropy.byteLength !== 16)
7
- throw new RangeError('Operation ID entropy must be 16 bytes.');
7
+ function randomOperationId(entropy = (0, node_crypto_1.randomBytes)(operation_identity_1.OPERATION_IDENTITY_BYTES)) {
8
+ if (entropy.byteLength !== operation_identity_1.OPERATION_IDENTITY_BYTES)
9
+ throw new RangeError(`Operation ID entropy must be ${operation_identity_1.OPERATION_IDENTITY_BYTES} bytes.`);
8
10
  const bytes = Buffer.from(entropy);
9
11
  const high = bytes.readBigUInt64BE(0);
10
- const low = bytes.readBigUInt64BE(8);
12
+ const low = bytes.readBigUInt64BE(stream_wire_1.UINT64_BYTES);
11
13
  return high === 0n && low === 0n ? { high, low: 1n } : { high, low };
12
14
  }
@@ -22,10 +22,10 @@ export interface ZLinkDomainLocationStore {
22
22
  compareExchangeAuthority(key: ZLinkAuthorityKey, expectedStoreVersion: ZLinkAuthorityStoreVersion, mutation: ZLinkAuthorityMutation, signal?: AbortSignal): Promise<ZLinkAuthorityCompareExchangeResult>;
23
23
  listAuthorities(prefix: string, cursor: ZLinkAuthorityScanCursor | undefined, limit: number, signal?: AbortSignal): Promise<ZLinkAuthorityScanResult>;
24
24
  readCreationTerminal(operation: ZLinkCreationOperationIdentity, signal?: AbortSignal): Promise<ZLinkCreationTerminalReadResult>;
25
- reserve(request: ZLinkObjectReserveRequest, signal?: AbortSignal): Promise<ZLinkObjectReserveResult>;
26
- commit(request: ZLinkObjectCommitRequest, signal?: AbortSignal): Promise<ZLinkObjectCommitResult>;
25
+ reserve(request: ZLinkObjectReserveRequest, signal?: AbortSignal, deadlineUnixMs?: bigint): Promise<ZLinkObjectReserveResult>;
26
+ commit(request: ZLinkObjectCommitRequest, signal?: AbortSignal, deadlineUnixMs?: bigint): Promise<ZLinkObjectCommitResult>;
27
27
  completeCreation(request: ZLinkObjectCreationCompleteRequest, signal?: AbortSignal): Promise<ZLinkObjectCreationCompleteResult>;
28
- abort(request: ZLinkObjectAbortRequest, signal?: AbortSignal): Promise<ZLinkObjectAbortResult>;
28
+ abort(request: ZLinkObjectAbortRequest, signal?: AbortSignal, deadlineUnixMs?: bigint): Promise<ZLinkObjectAbortResult>;
29
29
  prepareAggregate(request: ZLinkAggregatePrepareRequest, signal?: AbortSignal): Promise<ZLinkAggregatePrepareResult>;
30
30
  commitAggregate(fence: ZLinkAggregateFence, signal?: AbortSignal): Promise<ZLinkAggregateCommitResult>;
31
31
  abortAggregate(fence: ZLinkAggregateFence, signal?: AbortSignal): Promise<ZLinkAggregateAbortResult>;