@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,4 +1,12 @@
1
- import { ZLinkFrameworkRuntimeState } from '../../contracts';
1
+ import { ZLinkFrameworkRuntimeState, ZLinkTopologyState } from '../../contracts';
2
+
3
+ export function runtimeObservationIsTerminal(state: ZLinkFrameworkRuntimeState): boolean {
4
+ return state === ZLinkFrameworkRuntimeState.Stopped;
5
+ }
6
+
7
+ export function topologyObservationIsTerminal(state: ZLinkTopologyState): boolean {
8
+ return state === ZLinkTopologyState.Stopped || state === ZLinkTopologyState.Failed;
9
+ }
2
10
 
3
11
  export type MaintenanceAdmissionState =
4
12
  'preparing' | 'serving' | 'retiring' | 'draining' | 'stopped' | 'error';
@@ -1,5 +1,13 @@
1
- import { crc32c } from './service-relocation-runtime';
1
+ import { UINT64_MAX } from '@zlink-systems/stream-wire';
2
+ import { ZLinkSpotKind, zlinkSpotKindToWire } from '../../contracts';
2
3
  import type { ZLinkLocationOwnerToken } from '../../contracts/Locations';
4
+ import { SHA256_DIGEST_BYTES } from './actor-join-recovery-codec';
5
+ import { crc32c } from './service-relocation-runtime';
6
+ import { SERVICE_WIRE_TEXT8_MAX_BYTES } from './service-wire-binary-primitives';
7
+ const SPOT_AUTHORITY_OBJECT_KIND = 2;
8
+ const USER_SPOT_WIRE_KIND = zlinkSpotKindToWire(ZLinkSpotKind.User);
9
+ const INSTANCE_SPOT_WIRE_KIND = zlinkSpotKindToWire(ZLinkSpotKind.Instance);
10
+ const AUTHORITY_TEXT16_MAX_BYTES = 0xffff;
3
11
 
4
12
  const AUTHORITY_MAGIC = Buffer.from([0x5a, 0x4c, 0x41, 0x55]);
5
13
  const AUTHORITY_FORMAT_VERSION = 1;
@@ -189,6 +197,16 @@ export function decodeServiceReadySpotAuthority(
189
197
  return decoded?.state === 'ready' && decoded.operationKind === 0 ? decoded : undefined;
190
198
  }
191
199
 
200
+ export function decodeServiceClosingSpotAuthority(
201
+ payload: Uint8Array
202
+ ): ServiceReadySpotAuthority | undefined {
203
+ const decoded = decodeSpotAuthority(payload);
204
+ return decoded?.operationKind === 3 &&
205
+ (decoded.kind === 'user_spot' || decoded.state === 'closing')
206
+ ? decoded
207
+ : undefined;
208
+ }
209
+
192
210
  export function decodeServiceInstanceAuthorityPayload(
193
211
  payload: Uint8Array
194
212
  ): ServiceDecodedInstanceAuthority | undefined {
@@ -301,7 +319,7 @@ function decodeSpotAuthority(payload: Uint8Array):
301
319
  const operationKind = body.u8();
302
320
  const objectKind = body.u8();
303
321
  const object = body.takeReader(body.u16());
304
- if (objectKind !== 2) return undefined;
322
+ if (objectKind !== SPOT_AUTHORITY_OBJECT_KIND) return undefined;
305
323
  const spotKind = object.u8();
306
324
  const spot = object.takeReader(object.u16());
307
325
  if (!object.done) return undefined;
@@ -310,12 +328,12 @@ function decodeSpotAuthority(payload: Uint8Array):
310
328
  let state: number;
311
329
  let stableType: string;
312
330
  let spotId: string;
313
- if (spotKind === 2) {
331
+ if (spotKind === USER_SPOT_WIRE_KIND) {
314
332
  kind = 'user_spot';
315
333
  spotId = spot.rid();
316
334
  stableType = spot.text8();
317
335
  state = spot.u8();
318
- } else if (spotKind === 3) {
336
+ } else if (spotKind === INSTANCE_SPOT_WIRE_KIND) {
319
337
  kind = 'instance_spot';
320
338
  state = spot.u8();
321
339
  const instance = spot.takeReader(spot.u16());
@@ -407,23 +425,33 @@ function rid(value: string, name: string): Buffer {
407
425
 
408
426
  function text16(value: string, name: string): Buffer {
409
427
  const bytes = Buffer.from(value);
410
- if (bytes.byteLength < 1 || bytes.byteLength > 0xffff || bytes.includes(0)) {
411
- throw new RangeError(`${name} must contain 1..65535 UTF-8 bytes without NUL.`);
428
+ if (bytes.byteLength < 1 || bytes.byteLength > AUTHORITY_TEXT16_MAX_BYTES || bytes.includes(0)) {
429
+ throw new RangeError(
430
+ `${name} must contain 1..${AUTHORITY_TEXT16_MAX_BYTES} UTF-8 bytes without NUL.`
431
+ );
412
432
  }
413
433
  return concat(u16(bytes.byteLength), bytes);
414
434
  }
415
435
 
416
436
  function sha256(value: Uint8Array): Buffer {
417
- if (value.byteLength !== 32) {
418
- throw new RangeError('activationRecovery.sha256 must contain exactly 32 bytes.');
437
+ if (value.byteLength !== SHA256_DIGEST_BYTES) {
438
+ throw new RangeError(
439
+ `activationRecovery.sha256 must contain exactly ${SHA256_DIGEST_BYTES} bytes.`
440
+ );
419
441
  }
420
- return concat(Buffer.of(32), value);
442
+ return concat(Buffer.of(SHA256_DIGEST_BYTES), value);
421
443
  }
422
444
 
423
445
  function sized8(value: string, name: string): Buffer {
424
446
  const bytes = Buffer.from(value);
425
- if (bytes.byteLength < 1 || bytes.byteLength > 255 || bytes.includes(0)) {
426
- throw new RangeError(`${name} must contain 1..255 UTF-8 bytes without NUL.`);
447
+ if (
448
+ bytes.byteLength < 1 ||
449
+ bytes.byteLength > SERVICE_WIRE_TEXT8_MAX_BYTES ||
450
+ bytes.includes(0)
451
+ ) {
452
+ throw new RangeError(
453
+ `${name} must contain 1..${SERVICE_WIRE_TEXT8_MAX_BYTES} UTF-8 bytes without NUL.`
454
+ );
427
455
  }
428
456
  return concat(Buffer.of(bytes.byteLength), bytes);
429
457
  }
@@ -448,7 +476,7 @@ function boundedU32(value: number, name: string): Buffer {
448
476
  }
449
477
 
450
478
  function u64(value: bigint, name: string): Buffer {
451
- if (value <= 0n || value > 0xffff_ffff_ffff_ffffn) {
479
+ if (value <= 0n || value > UINT64_MAX) {
452
480
  throw new RangeError(`${name} must be a non-zero u64.`);
453
481
  }
454
482
  const result = Buffer.alloc(8);
@@ -457,7 +485,7 @@ function u64(value: bigint, name: string): Buffer {
457
485
  }
458
486
 
459
487
  function ordinalU64(value: bigint, name: string): Buffer {
460
- if (value < 0n || value > 0xffff_ffff_ffff_ffffn) {
488
+ if (value < 0n || value > UINT64_MAX) {
461
489
  throw new RangeError(`${name} must be a u64.`);
462
490
  }
463
491
  const result = Buffer.alloc(8);
@@ -1,3 +1,8 @@
1
+ import {
2
+ isValidPublicWeight,
3
+ ZLINK_MAX_PUBLIC_WEIGHT
4
+ } from '../../contracts/Configuration/RegistrationBuilderPolicy';
5
+ import { SmoothWeightedSelection } from './service-weighted-selection';
1
6
  export interface ClientServerDescriptor {
2
7
  readonly channelName: string;
3
8
  readonly serverRoutingId: string;
@@ -31,6 +36,20 @@ export interface SelectedClientServer {
31
36
 
32
37
  /** Dedicated discovery state; fanout publishers never reuse RouteMesh peer rows. */
33
38
  export class ServiceDiscoveryRegistry {
39
+ private readonly clientServerChanged = new Set<(error?: Error) => void>();
40
+
41
+ onClientServerChanged(listener: (error?: Error) => void): () => void {
42
+ this.clientServerChanged.add(listener);
43
+ return () => {
44
+ this.clientServerChanged.delete(listener);
45
+ };
46
+ }
47
+
48
+ dispose(error: Error): void {
49
+ for (const listener of this.clientServerChanged) listener(error);
50
+ this.clientServerChanged.clear();
51
+ }
52
+
34
53
  private readonly clientServers = new Map<string, Current<ClientServerDescriptor>>();
35
54
  private readonly fanoutPublishers = new Map<string, Current<FanoutPublisherDescriptor>>();
36
55
  private readonly clientServerSelections = new Map<
@@ -101,6 +120,14 @@ export class ServiceDiscoveryRegistry {
101
120
  return selection.select();
102
121
  }
103
122
 
123
+ hasReadyClientServer(channelName: string): boolean {
124
+ return [...this.clientServers.values()].some(
125
+ ({ descriptor }) =>
126
+ descriptor.channelName === channelName &&
127
+ (descriptor.state === 'serving' || descriptor.state === 'retiring')
128
+ );
129
+ }
130
+
104
131
  clientServerDescriptors(channelName: string): readonly ClientServerDescriptor[] {
105
132
  return [...this.clientServers.values()]
106
133
  .map((value) => value.descriptor)
@@ -161,6 +188,7 @@ export class ServiceDiscoveryRegistry {
161
188
  if (this.clientServerSelections.has(channelName)) {
162
189
  this.clientServerSelections.get(channelName)!.rebuild();
163
190
  }
191
+ for (const listener of this.clientServerChanged) listener();
164
192
  }
165
193
 
166
194
  private clientServerCandidates(channelName: string) {
@@ -239,8 +267,10 @@ function validateClientServer(descriptor: ClientServerDescriptor): void {
239
267
  requireText(descriptor.securityIdentity, 'securityIdentity');
240
268
  requireText(descriptor.advertisedEndpoint, 'advertisedEndpoint');
241
269
  validateRevision(descriptor.lifecycleGeneration, descriptor.descriptorRevision);
242
- if (!Number.isInteger(descriptor.weight) || descriptor.weight < 0 || descriptor.weight > 10_000) {
243
- throw new RangeError('ClientServer weight must be an integer in 0..10000.');
270
+ if (!isValidPublicWeight(descriptor.weight)) {
271
+ throw new RangeError(
272
+ `ClientServer weight must be an integer in 0..${ZLINK_MAX_PUBLIC_WEIGHT}.`
273
+ );
244
274
  }
245
275
  if (
246
276
  !Number.isSafeInteger(descriptor.effectiveMaxMessageBytes) ||
@@ -268,4 +298,3 @@ function requireText(value: string, field: string): void {
268
298
  throw new TypeError(`${field} must be non-empty text without NUL.`);
269
299
  }
270
300
  }
271
- import { SmoothWeightedSelection } from './service-weighted-selection';
@@ -1,3 +1,5 @@
1
+ import { SERVICE_WIRE_TEXT8_MAX_BYTES } from './service-wire-binary-primitives';
2
+ import { UINT64_MAX } from '@zlink-systems/stream-wire';
1
3
  import { crc32c } from './service-relocation-runtime';
2
4
  import { validateApplicationPayloadFrame } from './service-wire-m6a-codec';
3
5
  import type { ServiceInstanceActivationTarget } from './service-stateful-wire-codec';
@@ -199,8 +201,14 @@ function requireOperation(value: ServiceInstanceActivationRecoveryEnvelope): voi
199
201
 
200
202
  function textBytes(value: string, name: string): Buffer {
201
203
  const bytes = Buffer.from(value, 'utf8');
202
- if (bytes.byteLength < 1 || bytes.byteLength > 255 || bytes.includes(0)) {
203
- throw new RangeError(`${name} must contain 1..255 UTF-8 bytes without NUL.`);
204
+ if (
205
+ bytes.byteLength < 1 ||
206
+ bytes.byteLength > SERVICE_WIRE_TEXT8_MAX_BYTES ||
207
+ bytes.includes(0)
208
+ ) {
209
+ throw new RangeError(
210
+ `${name} must contain 1..${SERVICE_WIRE_TEXT8_MAX_BYTES} UTF-8 bytes without NUL.`
211
+ );
204
212
  }
205
213
  return bytes;
206
214
  }
@@ -216,13 +224,13 @@ function writeText8(target: Buffer, offset: number, value: Uint8Array): number {
216
224
  }
217
225
 
218
226
  function validatePositiveU64(value: bigint, name: string): void {
219
- if (value <= 0n || value > 0xffff_ffff_ffff_ffffn) {
227
+ if (value <= 0n || value > UINT64_MAX) {
220
228
  throw new RangeError(`${name} is out of range.`);
221
229
  }
222
230
  }
223
231
 
224
232
  function validateU64(value: bigint, name: string): void {
225
- if (value < 0n || value > 0xffff_ffff_ffff_ffffn) {
233
+ if (value < 0n || value > UINT64_MAX) {
226
234
  throw new RangeError(`${name} is out of range.`);
227
235
  }
228
236
  }
@@ -1,3 +1,4 @@
1
+ import { UINT64_MAX } from '@zlink-systems/stream-wire';
1
2
  export interface ServiceProbe {
2
3
  readonly nodeRoutingId: string;
3
4
  readonly connectionId: string;
@@ -139,7 +140,7 @@ export class ServiceLivenessRegistry {
139
140
 
140
141
  private allocateProbeId(): bigint {
141
142
  const result = this.nextProbeId++;
142
- if (this.nextProbeId > 0xffff_ffff_ffff_ffffn) this.nextProbeId = 1n;
143
+ if (this.nextProbeId > UINT64_MAX) this.nextProbeId = 1n;
143
144
  return result;
144
145
  }
145
146
  }
@@ -145,12 +145,27 @@ export class ServiceMaintenanceRuntime {
145
145
 
146
146
  private async runUnits(signal: AbortSignal, stopStartingSignal?: AbortSignal): Promise<void> {
147
147
  const pending = new Set<Promise<void>>();
148
+ // A unit failure is recorded before its promise leaves `pending`, so no
149
+ // failure is lost. Every started unit runs to its own terminal before the
150
+ // first failure is reported: the host result follows the settled
151
+ // authority of each unit (spec 30 §13).
152
+ const failures: unknown[] = [];
153
+ const reportFailure = async (): Promise<void> => {
154
+ if (failures.length === 0) return;
155
+ await Promise.allSettled(pending);
156
+ throw failures[0];
157
+ };
148
158
  for (;;) {
159
+ await reportFailure();
149
160
  const queued = await this.lane.run(() => this.units.length > 0);
150
- if (!queued && pending.size === 0) return;
161
+ if (!queued && pending.size === 0) {
162
+ await reportFailure();
163
+ return;
164
+ }
151
165
  signal.throwIfAborted();
152
166
  if (stopStartingSignal?.aborted === true) {
153
167
  await Promise.allSettled(pending);
168
+ await reportFailure();
154
169
  stopStartingSignal.throwIfAborted();
155
170
  }
156
171
  let admitted = false;
@@ -173,19 +188,25 @@ export class ServiceMaintenanceRuntime {
173
188
  admitted = true;
174
189
  let running!: Promise<void>;
175
190
  running = startOutsideStateLane(() =>
176
- unit.relocate(signal).finally(async () => {
177
- const publication = await this.lane.run(() => {
178
- this.activeOutbound--;
179
- pending.delete(running);
180
- return this.publishCore();
181
- });
182
- this.notify(publication);
183
- })
191
+ unit
192
+ .relocate(signal)
193
+ .catch((error: unknown) => {
194
+ failures.push(error);
195
+ })
196
+ .finally(async () => {
197
+ const publication = await this.lane.run(() => {
198
+ this.activeOutbound--;
199
+ pending.delete(running);
200
+ return this.publishCore();
201
+ });
202
+ this.notify(publication);
203
+ })
184
204
  );
185
205
  pending.add(running);
186
206
  this.notify(claim.publication);
187
207
  }
188
208
  if (pending.size === 0) {
209
+ await reportFailure();
189
210
  if (!admitted) throw new Error('No relocation unit is ready to start.');
190
211
  } else {
191
212
  await Promise.race(pending);
@@ -231,13 +252,3 @@ export class ServiceMaintenanceRuntime {
231
252
  function startOutsideStateLane<T>(work: () => T): T {
232
253
  return detachedStateLaneResource.runInAsyncScope(work);
233
254
  }
234
-
235
- export function classifyRelocationRecovery(
236
- publishedReference: boolean,
237
- payloadPresent: boolean,
238
- checksumMatches: boolean,
239
- inventoryMatches: boolean
240
- ): 'resume' | 'orphan' | 'relocationDataLost' {
241
- if (!publishedReference) return payloadPresent ? 'orphan' : 'resume';
242
- return payloadPresent && checksumMatches && inventoryMatches ? 'resume' : 'relocationDataLost';
243
- }
@@ -1,4 +1,4 @@
1
- const MAX_METADATA_BYTES = 1024;
1
+ import { ZLINK_STREAM_MAX_METADATA_BYTES as MAX_METADATA_BYTES } from '@zlink-systems/stream-wire';
2
2
  const FATAL_UTF8 = new TextDecoder('utf-8', { fatal: true });
3
3
 
4
4
  export function encodeServiceMetadataFrame(entries: ReadonlyMap<string, string>): Buffer {
@@ -18,7 +18,7 @@ export function encodeServiceMetadataFrame(entries: ReadonlyMap<string, string>)
18
18
 
19
19
  export function validateServiceMetadataFrame(frame: Uint8Array): Buffer {
20
20
  if (frame.byteLength > MAX_METADATA_BYTES) {
21
- throw new RangeError('Application metadata frame exceeds 1024 bytes.');
21
+ throw new RangeError(`Application metadata frame exceeds ${MAX_METADATA_BYTES} bytes.`);
22
22
  }
23
23
  const bytes = Buffer.from(frame);
24
24
  let offset = 0;
@@ -36,15 +36,13 @@ export interface ServicePreparedRelocationAggregate {
36
36
  readonly plan: ServiceRelocationAggregatePlan;
37
37
  }
38
38
 
39
- type AggregateStore = Pick<
40
- ZLinkObjectCreationStore,
41
- 'prepareAggregate' | 'commitAggregate' | 'abortAggregate'
42
- > &
39
+ type AggregateStore = Pick<ZLinkObjectCreationStore, 'prepareAggregate' | 'abortAggregate'> &
43
40
  Pick<ZLinkAuthorityStore, 'readAuthority'>;
44
41
 
45
42
  const MAX_PREPARE_CONFLICT_ATTEMPTS = 8;
46
43
 
47
- /** Commits every owner and membership row through one Location Store fence. */
44
+ /** Prepares and aborts relocation through one Location Store fence. */
45
+
48
46
  export class ServiceRelocationAggregateCommitter {
49
47
  constructor(private readonly store: AggregateStore) {}
50
48
 
@@ -109,73 +107,12 @@ export class ServiceRelocationAggregateCommitter {
109
107
  return true;
110
108
  }
111
109
 
112
- async commit(
113
- prepared: ServicePreparedRelocationAggregate,
114
- signal?: AbortSignal
115
- ): Promise<ReadonlyMap<string, ZLinkAuthoritySnapshot>> {
116
- try {
117
- await this.commitFence(prepared.fence, signal);
118
- } catch (firstError) {
119
- // A lost commit response is reconciled by repeating the exact durable fence.
120
- try {
121
- await this.commitFence(prepared.fence, signal);
122
- } catch {
123
- throw firstError;
124
- }
125
- }
126
- return await this.readCommittedParticipants(prepared.plan, signal);
127
- }
128
-
129
110
  async abort(prepared: ServicePreparedRelocationAggregate, signal?: AbortSignal): Promise<void> {
130
111
  const result = await this.store.abortAggregate(prepared.fence, signal);
131
112
  if (result.kind !== 'aborted' && result.kind !== 'alreadyAborted') {
132
113
  throw new Error(`Location Store rejected relocation aggregate abort: ${result.kind}.`);
133
114
  }
134
115
  }
135
-
136
- private async commitFence(fence: ZLinkAggregateFence, signal?: AbortSignal): Promise<void> {
137
- const result = await this.store.commitAggregate(fence, signal);
138
- if (result.kind !== 'committed' && result.kind !== 'alreadyCommitted') {
139
- throw new Error(`Location Store rejected relocation aggregate commit: ${result.kind}.`);
140
- }
141
- }
142
-
143
- private async readCommittedParticipants(
144
- plan: ServiceRelocationAggregatePlan,
145
- signal?: AbortSignal
146
- ): Promise<ReadonlyMap<string, ZLinkAuthoritySnapshot>> {
147
- const committed = new Map<string, ZLinkAuthoritySnapshot>();
148
- for (const participant of plan.participants) {
149
- const current = await this.store.readAuthority(participant.key, signal);
150
- if (
151
- current.kind !== 'snapshot' ||
152
- current.objectGeneration !== participant.expected.objectGeneration ||
153
- current.storeVersion.value === participant.expected.storeVersion.value ||
154
- !Buffer.from(current.payload).equals(Buffer.from(participant.authorityPayload))
155
- ) {
156
- throw new Error(
157
- 'Committed relocation aggregate does not match its exact participant plan.'
158
- );
159
- }
160
- if (participant.ownerTransition === 'newOwner') {
161
- if (
162
- current.ownerId !== plan.targetOwner.ownerId ||
163
- current.ownerLeaseGeneration !== plan.targetOwner.leaseGeneration ||
164
- current.authorityOwnerGeneration <= participant.expected.authorityOwnerGeneration
165
- ) {
166
- throw new Error('Committed relocation participant has a different owner fence.');
167
- }
168
- } else if (
169
- current.ownerId !== participant.expected.ownerId ||
170
- current.ownerLeaseGeneration !== participant.expected.ownerLeaseGeneration ||
171
- current.authorityOwnerGeneration !== participant.expected.authorityOwnerGeneration
172
- ) {
173
- throw new Error('Preserved relocation participant changed its owner fence.');
174
- }
175
- committed.set(participant.key.value, current);
176
- }
177
- return committed;
178
- }
179
116
  }
180
117
 
181
118
  function validateAndEncodeParticipants(
@@ -32,3 +32,16 @@ export class ServiceRelocationPostCommitError extends Error {
32
32
  this.name = 'ServiceRelocationPostCommitError';
33
33
  }
34
34
  }
35
+
36
+ /**
37
+ * A relocation whose settled authority leaves the host in `Error` with
38
+ * `Blocked/RelocationFailed` (spec 30 §13): the source owner lease ended
39
+ * before its Preserve fence succeeded, or units settled on both the source
40
+ * and the target.
41
+ */
42
+ export class ServiceRelocationAuthorityError extends Error {
43
+ constructor(message: string, options?: ErrorOptions) {
44
+ super(message, options);
45
+ this.name = 'ServiceRelocationAuthorityError';
46
+ }
47
+ }
@@ -13,6 +13,7 @@ import type {
13
13
  ServiceRelocationQueuedMessage,
14
14
  ServiceRelocationTimer
15
15
  } from './service-relocation-runtime';
16
+ const DEFAULT_RELOCATION_CALLBACK_CONCURRENCY = 8;
16
17
 
17
18
  export interface ServiceRelocationSealedWork {
18
19
  readonly boundSessionState: Uint8Array;
@@ -30,10 +31,12 @@ export interface ServiceRelocationCaptureUnit {
30
31
  captureApplicationState(signal?: AbortSignal): Promise<Uint8Array>;
31
32
  commitSeal(): Promise<void> | void;
32
33
  abortSeal(): Promise<void> | void;
34
+ /** Expired-owner terminal: pending requests fail once and dispatch stays closed. */
35
+ discardSeal?(reason: unknown): Promise<void> | void;
33
36
  }
34
37
 
35
38
  export class ServiceCapturedObjectRelocation {
36
- private terminal: 'open' | 'committed' | 'aborted' = 'open';
39
+ private terminal: 'open' | 'committed' | 'aborted' | 'discarded' = 'open';
37
40
 
38
41
  constructor(
39
42
  readonly envelope: ServiceRelocationEnvelope,
@@ -42,8 +45,8 @@ export class ServiceCapturedObjectRelocation {
42
45
 
43
46
  async commitSource(): Promise<void> {
44
47
  if (this.terminal === 'committed') return;
45
- if (this.terminal === 'aborted') {
46
- throw new Error('Relocation source capture was already aborted.');
48
+ if (this.terminal !== 'open') {
49
+ throw new Error(`Relocation source capture was already ${this.terminal}.`);
47
50
  }
48
51
  for (const unit of this.units) await unit.commitSeal();
49
52
  this.terminal = 'committed';
@@ -51,8 +54,8 @@ export class ServiceCapturedObjectRelocation {
51
54
 
52
55
  async abortSource(): Promise<void> {
53
56
  if (this.terminal === 'aborted') return;
54
- if (this.terminal === 'committed') {
55
- throw new Error('Committed relocation source capture cannot be aborted.');
57
+ if (this.terminal !== 'open') {
58
+ throw new Error(`A ${this.terminal} relocation source capture cannot be aborted.`);
56
59
  }
57
60
  const failures: unknown[] = [];
58
61
  for (const unit of [...this.units].reverse()) {
@@ -67,11 +70,24 @@ export class ServiceCapturedObjectRelocation {
67
70
  throw new AggregateError(failures, 'Relocation source rollback was incomplete.');
68
71
  }
69
72
  }
73
+
74
+ /**
75
+ * The source owner lease ended before the authority settled (spec 28 §4.4):
76
+ * the source neither resumes nor commits. Retained work is dropped and
77
+ * every pending request without a terminal fails once with `reason`.
78
+ */
79
+ async discardSource(reason: unknown): Promise<void> {
80
+ if (this.terminal !== 'open') return;
81
+ this.terminal = 'discarded';
82
+ for (const unit of this.units) await unit.discardSeal?.(reason);
83
+ }
70
84
  }
71
85
 
72
86
  /** Captures the two valid relocation units: User Spot aggregate or one Actor. */
73
87
  export class ServiceRelocationObjectCaptureOwner {
74
- constructor(private readonly maxConcurrentCallbacks = 8) {
88
+ constructor(
89
+ private readonly maxConcurrentCallbacks: number = DEFAULT_RELOCATION_CALLBACK_CONCURRENCY
90
+ ) {
75
91
  requireCallbackConcurrency(maxConcurrentCallbacks);
76
92
  }
77
93
 
@@ -241,7 +257,7 @@ export class ServiceRelocationObjectRestoreOwner<
241
257
  constructor(
242
258
  private readonly target: ServiceRelocationTargetObjectPort<THidden>,
243
259
  private readonly authorityKey: (value: string) => ZLinkAuthorityKey,
244
- private readonly maxConcurrentCallbacks = 8
260
+ private readonly maxConcurrentCallbacks: number = DEFAULT_RELOCATION_CALLBACK_CONCURRENCY
245
261
  ) {
246
262
  requireCallbackConcurrency(maxConcurrentCallbacks);
247
263
  }