@zlink-systems/framework 0.21.0 → 0.22.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 (487) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Common/ZLinkMessage.js +5 -5
  3. package/dist/contracts/Configuration/CodecContentType.js +5 -7
  4. package/dist/contracts/Configuration/DiagnosticsValidation.js +1 -6
  5. package/dist/contracts/Configuration/EndpointNotation.js +4 -8
  6. package/dist/contracts/Configuration/Registration.js +14 -11
  7. package/dist/contracts/Configuration/RegistrationBuilders.js +32 -25
  8. package/dist/contracts/Configuration/RegistrationNormalizers.js +25 -26
  9. package/dist/contracts/Configuration/RegistrationValidators.js +36 -38
  10. package/dist/contracts/Configuration/SendTimeoutValidation.js +4 -4
  11. package/dist/contracts/Configuration/TimerRegistrationValidator.js +7 -7
  12. package/dist/contracts/Handlers/JsonContract.js +23 -11
  13. package/dist/contracts/Spots/SpotKind.js +16 -8
  14. package/dist/location-store-integration.js +16 -16
  15. package/dist/nest-integration.js +17 -11
  16. package/dist/runtime/abort.js +9 -5
  17. package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
  18. package/dist/runtime/actors/actor-authority-publication.js +18 -17
  19. package/dist/runtime/actors/actor-client.js +83 -63
  20. package/dist/runtime/actors/actor-context.js +24 -18
  21. package/dist/runtime/actors/actor-creation.js +4 -3
  22. package/dist/runtime/actors/actor-handoff.js +89 -92
  23. package/dist/runtime/actors/actor-local-native-join.js +18 -19
  24. package/dist/runtime/actors/actor-mailbox.js +1 -1
  25. package/dist/runtime/actors/actor-message-follow-context.js +24 -21
  26. package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
  27. package/dist/runtime/actors/actor-remote-joiner.js +20 -17
  28. package/dist/runtime/actors/actor-remote-wire.js +6 -7
  29. package/dist/runtime/actors/actor-runtime-state.js +87 -81
  30. package/dist/runtime/actors/actor-transfer-registry.js +3 -5
  31. package/dist/runtime/actors/bound-session-wire.js +14 -9
  32. package/dist/runtime/actors/deferred-join-accepted-journal.js +158 -124
  33. package/dist/runtime/actors/index.js +2 -5
  34. package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
  35. package/dist/runtime/actors/post-commit-actor-location.js +1 -1
  36. package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
  37. package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
  38. package/dist/runtime/admission.js +2 -6
  39. package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
  40. package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
  41. package/dist/runtime/backend/mesh-completion-table.js +1 -3
  42. package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
  43. package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
  44. package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
  45. package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
  46. package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
  47. package/dist/runtime/backend/node/node-raw-mesh-backend.js +116 -113
  48. package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
  49. package/dist/runtime/backend/runtime-message.js +3 -3
  50. package/dist/runtime/backend/runtime-values.d.ts +2 -2
  51. package/dist/runtime/backend/runtime-values.js +4 -5
  52. package/dist/runtime/channels/channel-clients.js +27 -24
  53. package/dist/runtime/channels/channel-dispatch-pipeline.js +10 -18
  54. package/dist/runtime/channels/channel-dispatch-services.js +7 -4
  55. package/dist/runtime/channels/channel-dispatchers.js +9 -9
  56. package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
  57. package/dist/runtime/channels/channel-envelope.js +83 -47
  58. package/dist/runtime/channels/channel-outbound-operations.js +8 -8
  59. package/dist/runtime/channels/channel-receive-loops.js +20 -22
  60. package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
  61. package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
  62. package/dist/runtime/channels/channel-runtime-manager.js +18 -9
  63. package/dist/runtime/channels/channel-socket-registry.js +126 -123
  64. package/dist/runtime/channels/channel-transports.js +43 -33
  65. package/dist/runtime/channels/client-server-location-runtime.js +32 -40
  66. package/dist/runtime/channels/client-server-service-wire.js +29 -22
  67. package/dist/runtime/channels/dispatch-error-reporter.js +9 -7
  68. package/dist/runtime/channels/fanout-location-runtime.js +34 -47
  69. package/dist/runtime/channels/fanout-service-wire.js +3 -5
  70. package/dist/runtime/channels/local-spot-route-transport.js +7 -1
  71. package/dist/runtime/channels/route-member-snapshot.js +3 -3
  72. package/dist/runtime/channels/source-spot-router.js +6 -2
  73. package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
  74. package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
  75. package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
  76. package/dist/runtime/diagnostics/index.js +38 -10
  77. package/dist/runtime/diagnostics/message-flow.js +47 -39
  78. package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
  79. package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
  80. package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
  81. package/dist/runtime/execution/index.js +7 -6
  82. package/dist/runtime/execution/serial-execution-queue.js +12 -18
  83. package/dist/runtime/execution/state-lane.js +2 -2
  84. package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -23
  85. package/dist/runtime/foundation/event-loop-resources.js +4 -4
  86. package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
  87. package/dist/runtime/foundation/raw-service-mesh-runtime.js +136 -136
  88. package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
  89. package/dist/runtime/foundation/runtime-state-projections.js +22 -11
  90. package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
  91. package/dist/runtime/foundation/service-discovery-registry.js +35 -33
  92. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
  93. package/dist/runtime/foundation/service-liveness-registry.js +16 -12
  94. package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
  95. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
  96. package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
  97. package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
  98. package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
  99. package/dist/runtime/foundation/service-stateful-registry.js +24 -23
  100. package/dist/runtime/foundation/service-stateful-runtime.js +416 -438
  101. package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
  102. package/dist/runtime/foundation/service-topology-registry.js +96 -95
  103. package/dist/runtime/foundation/service-weighted-selection.js +6 -11
  104. package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
  105. package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
  106. package/dist/runtime/framework-errors-internal.js +7 -10
  107. package/dist/runtime/handlers/handler-instance-scope.js +4 -5
  108. package/dist/runtime/handlers/index.js +3 -1
  109. package/dist/runtime/host/actor-packet-relay.js +74 -70
  110. package/dist/runtime/host/actor-placement-coordinator.js +29 -31
  111. package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
  112. package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
  113. package/dist/runtime/host/actor-transfer-runtime.js +176 -153
  114. package/dist/runtime/host/application-job-queue.js +18 -22
  115. package/dist/runtime/host/bound-session-relay.js +3 -1
  116. package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
  117. package/dist/runtime/host/host-capacity-status.js +8 -4
  118. package/dist/runtime/host/index.js +244 -227
  119. package/dist/runtime/host/instance-activation-authority.js +93 -96
  120. package/dist/runtime/host/location-runtime-owner.js +16 -14
  121. package/dist/runtime/host/mesh-router-resolver.js +11 -13
  122. package/dist/runtime/host/relocation-direct-transfer.js +10 -9
  123. package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
  124. package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
  125. package/dist/runtime/host/remote-bound-session-relay.js +97 -73
  126. package/dist/runtime/host/route-mesh-runtime.js +64 -69
  127. package/dist/runtime/host/runtime-shutdown.js +1 -2
  128. package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
  129. package/dist/runtime/host/spot-address-transport.js +69 -71
  130. package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
  131. package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
  132. package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
  133. package/dist/runtime/locations/actor-location-claims.js +26 -20
  134. package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
  135. package/dist/runtime/locations/authority-key-codec.js +7 -7
  136. package/dist/runtime/locations/auto-connect-loop.js +3 -3
  137. package/dist/runtime/locations/auto-connect-planner.js +25 -19
  138. package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
  139. package/dist/runtime/locations/in-memory-authority-store.js +128 -118
  140. package/dist/runtime/locations/in-memory-location-store.js +195 -168
  141. package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
  142. package/dist/runtime/locations/key-codec.js +1 -1
  143. package/dist/runtime/locations/lease-tracker.js +23 -21
  144. package/dist/runtime/locations/lifecycle.js +4 -5
  145. package/dist/runtime/locations/location-store-repository.js +368 -324
  146. package/dist/runtime/locations/opaque-record-key.js +2 -2
  147. package/dist/runtime/locations/resolvers.js +73 -82
  148. package/dist/runtime/locations/runtime.js +68 -63
  149. package/dist/runtime/locations/spot-location-claims.js +39 -35
  150. package/dist/runtime/messaging/framework-json-v1.js +7 -7
  151. package/dist/runtime/messaging/packet-name.js +7 -6
  152. package/dist/runtime/messaging/payload-codec.js +21 -18
  153. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
  154. package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
  155. package/dist/runtime/routing-id.js +3 -5
  156. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
  157. package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
  158. package/dist/runtime/spots/index.js +208 -219
  159. package/dist/runtime/spots/spot-activation-registry.js +15 -14
  160. package/dist/runtime/spots/spot-activation-state.js +17 -15
  161. package/dist/runtime/spots/spot-activation.js +33 -16
  162. package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
  163. package/dist/runtime/spots/spot-actor-membership.js +1 -3
  164. package/dist/runtime/spots/spot-actor-packet-dispatch.js +23 -20
  165. package/dist/runtime/spots/spot-actor-packet-drain.js +12 -10
  166. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
  167. package/dist/runtime/spots/spot-closing.js +3 -7
  168. package/dist/runtime/spots/spot-context.js +2 -2
  169. package/dist/runtime/spots/spot-entry-activation.js +13 -14
  170. package/dist/runtime/spots/spot-handle.js +6 -3
  171. package/dist/runtime/spots/spot-handler-registry.js +12 -12
  172. package/dist/runtime/spots/spot-manager-public.js +5 -6
  173. package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
  174. package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
  175. package/dist/runtime/spots/spot-node-runtime-manager.js +74 -85
  176. package/dist/runtime/spots/spot-outbound.js +10 -14
  177. package/dist/runtime/spots/spot-remote-codec.js +22 -26
  178. package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
  179. package/dist/runtime/spots/spot-route-packet-dispatch.js +16 -14
  180. package/dist/runtime/spots/spot-route-replies.js +4 -6
  181. package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
  182. package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +1 -2
  183. package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
  184. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
  185. package/dist/runtime/spots/spot-serial-executor.js +5 -8
  186. package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
  187. package/dist/runtime/spots/spot-subscription-dispatch.js +5 -5
  188. package/dist/runtime/spots/spot-timer.js +25 -29
  189. package/dist/runtime/streams/actor-session-binding-registry.js +98 -107
  190. package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
  191. package/dist/runtime/streams/bound-actor-relay-sender.js +18 -16
  192. package/dist/runtime/streams/bound-session-service.js +8 -9
  193. package/dist/runtime/streams/index.js +20 -19
  194. package/dist/runtime/streams/managed-stream.js +32 -30
  195. package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
  196. package/dist/runtime/streams/protocol.js +29 -18
  197. package/dist/runtime/streams/session-actor-coordinator.js +34 -37
  198. package/dist/runtime/streams/session-context.js +30 -28
  199. package/dist/runtime/streams/session-provider.js +2 -2
  200. package/dist/runtime/streams/session-serial-executor.js +1 -2
  201. package/dist/runtime/streams/stream-frame-factory.js +11 -5
  202. package/dist/runtime/streams/stream-session-runtime.js +70 -66
  203. package/dist/runtime/workers/index.js +15 -4
  204. package/package.json +2 -2
  205. package/src/contracts/Channels/RouteCalls.ts +6 -1
  206. package/src/contracts/Common/ZLinkMessage.ts +5 -5
  207. package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
  208. package/src/contracts/Configuration/Builders.ts +14 -14
  209. package/src/contracts/Configuration/CodecContentType.ts +8 -10
  210. package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
  211. package/src/contracts/Configuration/EndpointNotation.ts +11 -11
  212. package/src/contracts/Configuration/ObjectRoles.ts +1 -3
  213. package/src/contracts/Configuration/Registration.ts +46 -17
  214. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
  215. package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
  216. package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
  217. package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
  218. package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
  219. package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
  220. package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
  221. package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
  222. package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
  223. package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
  224. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -6
  225. package/src/contracts/Errors/index.ts +1 -4
  226. package/src/contracts/Handlers/Attributes.ts +15 -9
  227. package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
  228. package/src/contracts/Handlers/JsonContract.ts +53 -19
  229. package/src/contracts/Locations/ActorTransfer.ts +1 -5
  230. package/src/contracts/Locations/Authority.ts +4 -11
  231. package/src/contracts/Locations/Keys.ts +6 -1
  232. package/src/contracts/Locations/Options.ts +3 -2
  233. package/src/contracts/Locations/RelocationStore.ts +1 -4
  234. package/src/contracts/Locations/Resolvers.ts +5 -5
  235. package/src/contracts/Locations/RuntimeQuery.ts +6 -2
  236. package/src/contracts/Locations/Stores.ts +1 -2
  237. package/src/contracts/Locations/index.ts +2 -8
  238. package/src/contracts/RouteMesh/Contracts.ts +1 -7
  239. package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
  240. package/src/contracts/Spots/Contracts.ts +2 -8
  241. package/src/contracts/Spots/SpotKind.ts +16 -8
  242. package/src/contracts/Spots/ZLinkSpot.ts +8 -11
  243. package/src/contracts/Streams/IZLinkSession.ts +0 -1
  244. package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
  245. package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
  246. package/src/internal.ts +5 -4
  247. package/src/location-store-integration.ts +24 -16
  248. package/src/nest-integration.ts +40 -25
  249. package/src/runtime/abort.ts +10 -4
  250. package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
  251. package/src/runtime/actors/actor-authority-publication.ts +92 -77
  252. package/src/runtime/actors/actor-client.ts +162 -133
  253. package/src/runtime/actors/actor-context.ts +138 -130
  254. package/src/runtime/actors/actor-creation.ts +47 -44
  255. package/src/runtime/actors/actor-execution-context.ts +6 -4
  256. package/src/runtime/actors/actor-handoff.ts +269 -293
  257. package/src/runtime/actors/actor-join-deferred-scope.ts +5 -4
  258. package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
  259. package/src/runtime/actors/actor-local-native-join.ts +131 -159
  260. package/src/runtime/actors/actor-mailbox.ts +16 -19
  261. package/src/runtime/actors/actor-message-follow-context.ts +46 -36
  262. package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
  263. package/src/runtime/actors/actor-remote-joiner.ts +50 -54
  264. package/src/runtime/actors/actor-remote-wire.ts +9 -13
  265. package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
  266. package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
  267. package/src/runtime/actors/actor-runtime-state.ts +127 -124
  268. package/src/runtime/actors/actor-transfer-registry.ts +9 -14
  269. package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
  270. package/src/runtime/actors/bound-session-wire.ts +37 -17
  271. package/src/runtime/actors/deferred-join-accepted-journal.ts +351 -320
  272. package/src/runtime/actors/index.ts +43 -86
  273. package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
  274. package/src/runtime/actors/post-commit-actor-location.ts +30 -23
  275. package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
  276. package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
  277. package/src/runtime/admission.ts +9 -9
  278. package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
  279. package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
  280. package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
  281. package/src/runtime/backend/contracts/index.ts +73 -52
  282. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
  283. package/src/runtime/backend/mesh-completion-table.ts +6 -9
  284. package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
  285. package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
  286. package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
  287. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
  288. package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
  289. package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
  290. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
  291. package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
  292. package/src/runtime/backend/node/node-raw-mesh-backend.ts +335 -383
  293. package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
  294. package/src/runtime/backend/runtime-message.ts +5 -3
  295. package/src/runtime/backend/runtime-values.ts +10 -7
  296. package/src/runtime/channels/channel-autoconnect.ts +1 -4
  297. package/src/runtime/channels/channel-clients.ts +93 -73
  298. package/src/runtime/channels/channel-dispatch-pipeline.ts +40 -42
  299. package/src/runtime/channels/channel-dispatch-services.ts +51 -49
  300. package/src/runtime/channels/channel-dispatchers.ts +152 -96
  301. package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
  302. package/src/runtime/channels/channel-envelope.ts +256 -150
  303. package/src/runtime/channels/channel-multipart.ts +13 -5
  304. package/src/runtime/channels/channel-outbound-operations.ts +37 -41
  305. package/src/runtime/channels/channel-receive-loops.ts +102 -98
  306. package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
  307. package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
  308. package/src/runtime/channels/channel-runtime-manager.ts +63 -37
  309. package/src/runtime/channels/channel-socket-options.ts +3 -10
  310. package/src/runtime/channels/channel-socket-registry.ts +331 -273
  311. package/src/runtime/channels/channel-transports.ts +215 -197
  312. package/src/runtime/channels/client-server-location-runtime.ts +116 -100
  313. package/src/runtime/channels/client-server-service-wire.ts +37 -36
  314. package/src/runtime/channels/dispatch-error-reporter.ts +11 -8
  315. package/src/runtime/channels/fanout-location-runtime.ts +91 -94
  316. package/src/runtime/channels/fanout-service-wire.ts +5 -12
  317. package/src/runtime/channels/handler-filter-scope.ts +1 -4
  318. package/src/runtime/channels/index.ts +1 -4
  319. package/src/runtime/channels/local-spot-route-transport.ts +20 -5
  320. package/src/runtime/channels/route-member-snapshot.ts +11 -5
  321. package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
  322. package/src/runtime/channels/source-spot-router.ts +26 -22
  323. package/src/runtime/channels/spot-direct-envelope.ts +10 -8
  324. package/src/runtime/channels/spot-node-route-transport.ts +13 -16
  325. package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
  326. package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
  327. package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
  328. package/src/runtime/codecs/index.ts +3 -2
  329. package/src/runtime/diagnostics/flow-context.ts +12 -3
  330. package/src/runtime/diagnostics/index.ts +96 -61
  331. package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
  332. package/src/runtime/diagnostics/message-flow.ts +95 -76
  333. package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
  334. package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
  335. package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
  336. package/src/runtime/execution/index.ts +18 -26
  337. package/src/runtime/execution/serial-execution-queue.ts +31 -40
  338. package/src/runtime/execution/state-lane.ts +2 -2
  339. package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -51
  340. package/src/runtime/foundation/event-loop-resources.ts +8 -4
  341. package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
  342. package/src/runtime/foundation/operation-identity.ts +1 -2
  343. package/src/runtime/foundation/operation-registry.ts +8 -2
  344. package/src/runtime/foundation/raw-service-mesh-runtime.ts +312 -385
  345. package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
  346. package/src/runtime/foundation/runtime-state-projections.ts +24 -23
  347. package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
  348. package/src/runtime/foundation/service-discovery-registry.ts +67 -59
  349. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
  350. package/src/runtime/foundation/service-liveness-registry.ts +18 -13
  351. package/src/runtime/foundation/service-mailbox.ts +14 -14
  352. package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
  353. package/src/runtime/foundation/service-metadata-codec.ts +2 -9
  354. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
  355. package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
  356. package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
  357. package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
  358. package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
  359. package/src/runtime/foundation/service-session-binding-ingress-port.ts +1 -4
  360. package/src/runtime/foundation/service-stateful-registry.ts +69 -59
  361. package/src/runtime/foundation/service-stateful-runtime.ts +1174 -1112
  362. package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
  363. package/src/runtime/foundation/service-topology-registry.ts +157 -159
  364. package/src/runtime/foundation/service-weighted-selection.ts +9 -15
  365. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
  366. package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
  367. package/src/runtime/framework-errors-internal.ts +31 -30
  368. package/src/runtime/handlers/handler-instance-scope.ts +18 -29
  369. package/src/runtime/handlers/index.ts +18 -8
  370. package/src/runtime/host/actor-packet-relay.ts +290 -261
  371. package/src/runtime/host/actor-placement-coordinator.ts +165 -150
  372. package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
  373. package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
  374. package/src/runtime/host/actor-transfer-runtime.ts +391 -395
  375. package/src/runtime/host/application-job-queue.ts +32 -48
  376. package/src/runtime/host/bound-session-relay.ts +7 -9
  377. package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
  378. package/src/runtime/host/host-capacity-status.ts +10 -9
  379. package/src/runtime/host/index.ts +861 -789
  380. package/src/runtime/host/instance-activation-authority.ts +125 -143
  381. package/src/runtime/host/location-runtime-owner.ts +38 -26
  382. package/src/runtime/host/mesh-router-resolver.ts +30 -23
  383. package/src/runtime/host/relocation-direct-transfer.ts +15 -15
  384. package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
  385. package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
  386. package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
  387. package/src/runtime/host/remote-bound-session-relay.ts +274 -247
  388. package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
  389. package/src/runtime/host/route-mesh-runtime.ts +227 -181
  390. package/src/runtime/host/runtime-shutdown.ts +4 -3
  391. package/src/runtime/host/service-relocation-control.ts +14 -5
  392. package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
  393. package/src/runtime/host/spot-address-transport.ts +284 -237
  394. package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
  395. package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
  396. package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
  397. package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
  398. package/src/runtime/locations/actor-location-claims.ts +61 -49
  399. package/src/runtime/locations/actor-session-route-claims.ts +1 -4
  400. package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
  401. package/src/runtime/locations/authority-key-codec.ts +13 -10
  402. package/src/runtime/locations/auto-connect-loop.ts +14 -11
  403. package/src/runtime/locations/auto-connect-planner.ts +42 -31
  404. package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
  405. package/src/runtime/locations/canonical-codec.ts +3 -1
  406. package/src/runtime/locations/creation-operation-id.ts +4 -3
  407. package/src/runtime/locations/domain-store-contract.ts +13 -7
  408. package/src/runtime/locations/in-memory-authority-store.ts +232 -199
  409. package/src/runtime/locations/in-memory-location-store.ts +432 -250
  410. package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
  411. package/src/runtime/locations/internal-store-contracts.ts +95 -38
  412. package/src/runtime/locations/key-codec.ts +3 -4
  413. package/src/runtime/locations/lease-tracker.ts +36 -27
  414. package/src/runtime/locations/lifecycle-runtime.ts +15 -3
  415. package/src/runtime/locations/lifecycle.ts +33 -28
  416. package/src/runtime/locations/location-store-repository.ts +1329 -1185
  417. package/src/runtime/locations/opaque-record-key.ts +4 -9
  418. package/src/runtime/locations/resolvers.ts +201 -178
  419. package/src/runtime/locations/runtime.ts +251 -159
  420. package/src/runtime/locations/spot-location-claims.ts +110 -112
  421. package/src/runtime/messaging/creation-payload-codec.ts +4 -1
  422. package/src/runtime/messaging/framework-json-v1.ts +34 -15
  423. package/src/runtime/messaging/packet-name.ts +8 -6
  424. package/src/runtime/messaging/payload-codec.ts +70 -50
  425. package/src/runtime/messaging/submission-result.ts +6 -9
  426. package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
  427. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
  428. package/src/runtime/routing-id.ts +10 -7
  429. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
  430. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
  431. package/src/runtime/spots/index.ts +593 -563
  432. package/src/runtime/spots/spot-activation-registry.ts +38 -34
  433. package/src/runtime/spots/spot-activation-state.ts +43 -51
  434. package/src/runtime/spots/spot-activation.ts +179 -116
  435. package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
  436. package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
  437. package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
  438. package/src/runtime/spots/spot-actor-membership.ts +25 -27
  439. package/src/runtime/spots/spot-actor-packet-dispatch.ts +184 -153
  440. package/src/runtime/spots/spot-actor-packet-drain.ts +54 -42
  441. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
  442. package/src/runtime/spots/spot-closing.ts +11 -12
  443. package/src/runtime/spots/spot-context.ts +46 -26
  444. package/src/runtime/spots/spot-entry-activation.ts +84 -65
  445. package/src/runtime/spots/spot-handle.ts +17 -15
  446. package/src/runtime/spots/spot-handler-registry.ts +44 -31
  447. package/src/runtime/spots/spot-location-claim.ts +5 -4
  448. package/src/runtime/spots/spot-manager-public.ts +62 -82
  449. package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
  450. package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
  451. package/src/runtime/spots/spot-node-runtime-manager.ts +230 -221
  452. package/src/runtime/spots/spot-outbound.ts +47 -59
  453. package/src/runtime/spots/spot-publisher-transport.ts +5 -4
  454. package/src/runtime/spots/spot-remote-codec.ts +66 -65
  455. package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
  456. package/src/runtime/spots/spot-route-packet-dispatch.ts +128 -95
  457. package/src/runtime/spots/spot-route-replies.ts +23 -24
  458. package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
  459. package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
  460. package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +11 -17
  461. package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
  462. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
  463. package/src/runtime/spots/spot-routing-internal.ts +1 -4
  464. package/src/runtime/spots/spot-runtime-ports.ts +5 -5
  465. package/src/runtime/spots/spot-serial-executor.ts +5 -9
  466. package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
  467. package/src/runtime/spots/spot-subscription-dispatch.ts +56 -46
  468. package/src/runtime/spots/spot-timer.ts +98 -91
  469. package/src/runtime/streams/actor-session-binding-registry.ts +277 -235
  470. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +7 -4
  471. package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
  472. package/src/runtime/streams/bound-actor-relay-sender.ts +53 -51
  473. package/src/runtime/streams/bound-session-response-target.ts +29 -8
  474. package/src/runtime/streams/bound-session-service.ts +39 -39
  475. package/src/runtime/streams/index.ts +176 -100
  476. package/src/runtime/streams/managed-stream.ts +98 -87
  477. package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
  478. package/src/runtime/streams/protocol.ts +73 -43
  479. package/src/runtime/streams/session-actor-coordinator.ts +97 -89
  480. package/src/runtime/streams/session-calls.ts +2 -8
  481. package/src/runtime/streams/session-context.ts +66 -48
  482. package/src/runtime/streams/session-provider.ts +5 -7
  483. package/src/runtime/streams/session-serial-executor.ts +7 -6
  484. package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
  485. package/src/runtime/streams/stream-frame-factory.ts +55 -38
  486. package/src/runtime/streams/stream-session-runtime.ts +268 -210
  487. package/src/runtime/workers/index.ts +68 -29
@@ -1,4 +1,7 @@
1
- import { ZLinkFrameworkInternalErrorKind, createInternalFrameworkException } from '../framework-errors-internal';
1
+ import {
2
+ ZLinkFrameworkInternalErrorKind,
3
+ createInternalFrameworkException
4
+ } from '../framework-errors-internal';
2
5
  import { createHash } from 'node:crypto';
3
6
  import type {
4
7
  ZLinkLocationOwnerToken,
@@ -9,10 +12,11 @@ import type {
9
12
  ZLinkAuthorityKey,
10
13
  ZLinkAuthoritySnapshot
11
14
  } from '../locations/internal-location-contracts';
12
- import type { ZLinkAuthorityStore, ZLinkObjectCreationStore } from '../locations/internal-store-contracts';
13
- import {
14
- ZLinkFrameworkException
15
- } from '../../contracts';
15
+ import type {
16
+ ZLinkAuthorityStore,
17
+ ZLinkObjectCreationStore
18
+ } from '../locations/internal-store-contracts';
19
+ import { ZLinkFrameworkException } from '../../contracts';
16
20
  import {
17
21
  decodeServiceInstanceAuthorityPayload,
18
22
  decodeServiceReadySpotAuthority,
@@ -32,13 +36,8 @@ import type {
32
36
  } from '../foundation/service-stateful-wire-codec';
33
37
  import { routingIdsEqual } from '../routing-id';
34
38
  import { encodeAuthorityKey } from '../locations/authority-key-codec';
35
- import {
36
- crc32c
37
- } from '../foundation/service-relocation-runtime';
38
- import {
39
- putNewRelocationBlob,
40
- relocationBlobReference
41
- } from '../locations/relocation-blob';
39
+ import { crc32c } from '../foundation/service-relocation-runtime';
40
+ import { putNewRelocationBlob, relocationBlobReference } from '../locations/relocation-blob';
42
41
 
43
42
  import {
44
43
  encodeInstanceActivationRecoveryEnvelope,
@@ -70,17 +69,14 @@ export interface ZLinkInstanceActivationAuthorityOptions {
70
69
  ) => void;
71
70
  }
72
71
 
73
- export class ZLinkInstanceActivationAuthority
74
- implements ServiceAsyncInstanceActivationAuthority {
72
+ export class ZLinkInstanceActivationAuthority implements ServiceAsyncInstanceActivationAuthority {
75
73
  private readonly pending = new Map<string, PendingReservation>();
76
74
 
77
75
  constructor(private readonly options: ZLinkInstanceActivationAuthorityOptions) {}
78
76
 
79
77
  async read(target: ServiceInstanceActivationTarget): Promise<ServiceInstanceAuthorityRead> {
80
78
  const current = await this.options.store.readAuthority(authorityKey(target.targetSpotId));
81
- return current.kind === 'snapshot'
82
- ? readyRead(current, target)
83
- : { kind: 'missing' };
79
+ return current.kind === 'snapshot' ? readyRead(current, target) : { kind: 'missing' };
84
80
  }
85
81
 
86
82
  async reserve(
@@ -107,11 +103,11 @@ implements ServiceAsyncInstanceActivationAuthority {
107
103
  );
108
104
  const storedRead = await relocationStore.read(stored.reference);
109
105
  if (
110
- stored.reference.value.length === 0
111
- || stored.expiresAt.getTime() <= stored.storeNow.getTime()
112
- || storedRead.kind !== 'found'
113
- || crc32c(storedRead.bytes) !== crc32c(requestBytes)
114
- || !Buffer.from(storedRead.bytes).equals(requestBytes)
106
+ stored.reference.value.length === 0 ||
107
+ stored.expiresAt.getTime() <= stored.storeNow.getTime() ||
108
+ storedRead.kind !== 'found' ||
109
+ crc32c(storedRead.bytes) !== crc32c(requestBytes) ||
110
+ !Buffer.from(storedRead.bytes).equals(requestBytes)
115
111
  ) {
116
112
  await this.deleteOrphan(stored.reference);
117
113
  throw new Error('Relocation Store returned an invalid creation request receipt.');
@@ -154,9 +150,10 @@ implements ServiceAsyncInstanceActivationAuthority {
154
150
  }
155
151
  });
156
152
  if (reserved.kind === 'conflict' || reserved.kind === 'alreadyExists') {
157
- const existingState = reserved.current.kind === 'snapshot'
158
- ? decodeServiceInstanceAuthorityPayload(reserved.current.payload)?.state
159
- : undefined;
153
+ const existingState =
154
+ reserved.current.kind === 'snapshot'
155
+ ? decodeServiceInstanceAuthorityPayload(reserved.current.payload)?.state
156
+ : undefined;
160
157
  if (existingState === 'closing') {
161
158
  await this.awaitClosingRelease(target, activation.deadlineUnixMs);
162
159
  continue;
@@ -176,11 +173,11 @@ implements ServiceAsyncInstanceActivationAuthority {
176
173
  throw error;
177
174
  }
178
175
  if (
179
- reserved.kind === 'conflict'
180
- && reserved.current.kind === 'snapshot'
181
- && reserved.current.allocation.objectKind === 'instance_spot'
182
- && reserved.current.allocation.stableType === target.stableType
183
- && reserved.current.allocation.state === 'reserved'
176
+ reserved.kind === 'conflict' &&
177
+ reserved.current.kind === 'snapshot' &&
178
+ reserved.current.allocation.objectKind === 'instance_spot' &&
179
+ reserved.current.allocation.stableType === target.stableType &&
180
+ reserved.current.allocation.state === 'reserved'
184
181
  ) {
185
182
  this.options.metrics?.recordInstanceSpotClaimConflict(
186
183
  this.options.meshName,
@@ -228,22 +225,22 @@ implements ServiceAsyncInstanceActivationAuthority {
228
225
  const current = await this.options.store.readAuthority(authorityKey(target.targetSpotId));
229
226
  const projection = current.kind === 'snapshot' ? current.pendingCreation : undefined;
230
227
  if (
231
- current.kind !== 'snapshot'
232
- || current.allocation.state !== 'reserved'
233
- || current.allocation.objectKind !== 'instance_spot'
234
- || current.allocation.stableType !== target.stableType
235
- || current.storeVersion.value !== pending.storeVersion
236
- || current.objectGeneration !== pending.objectGeneration
237
- || current.authorityOwnerGeneration !== pending.authorityOwnerGeneration
238
- || current.ownerId !== pending.ownerId
239
- || current.ownerLeaseGeneration !== pending.ownerLeaseGeneration
240
- || current.allocation.descriptor.meshName !== pending.meshName
241
- || !routingIdsEqual(current.allocation.descriptor.rid, pending.nodeRid)
242
- || current.allocation.descriptorLifecycleGeneration !== pending.nodeGeneration
243
- || projection?.reservationId !== pending.reservationId
244
- || projection.requestContentReference !== pending.requestReference
245
- || projection.requestEncodedSize !== pending.requestEncodedSize
246
- || !Buffer.from(projection.requestSha256).equals(Buffer.from(pending.requestSha256))
228
+ current.kind !== 'snapshot' ||
229
+ current.allocation.state !== 'reserved' ||
230
+ current.allocation.objectKind !== 'instance_spot' ||
231
+ current.allocation.stableType !== target.stableType ||
232
+ current.storeVersion.value !== pending.storeVersion ||
233
+ current.objectGeneration !== pending.objectGeneration ||
234
+ current.authorityOwnerGeneration !== pending.authorityOwnerGeneration ||
235
+ current.ownerId !== pending.ownerId ||
236
+ current.ownerLeaseGeneration !== pending.ownerLeaseGeneration ||
237
+ current.allocation.descriptor.meshName !== pending.meshName ||
238
+ !routingIdsEqual(current.allocation.descriptor.rid, pending.nodeRid) ||
239
+ current.allocation.descriptorLifecycleGeneration !== pending.nodeGeneration ||
240
+ projection?.reservationId !== pending.reservationId ||
241
+ projection.requestContentReference !== pending.requestReference ||
242
+ projection.requestEncodedSize !== pending.requestEncodedSize ||
243
+ !Buffer.from(projection.requestSha256).equals(Buffer.from(pending.requestSha256))
247
244
  ) {
248
245
  throw new Error('Pending Instance activation recovery fence is stale.');
249
246
  }
@@ -259,9 +256,7 @@ implements ServiceAsyncInstanceActivationAuthority {
259
256
  ownerId: current.ownerId,
260
257
  leaseGeneration: current.ownerLeaseGeneration
261
258
  },
262
- requestReference: relocationBlobReference(
263
- projection.requestContentReference
264
- ),
259
+ requestReference: relocationBlobReference(projection.requestContentReference),
265
260
  requestSha256: Buffer.from(projection.requestSha256),
266
261
  requestEncodedSize: Number(projection.requestEncodedSize)
267
262
  });
@@ -274,13 +269,7 @@ implements ServiceAsyncInstanceActivationAuthority {
274
269
  spot: ServiceSpotState
275
270
  ): Promise<{ readonly kind: 'committed' | 'lost'; readonly route: ServiceInstanceRouteFence }> {
276
271
  const pending = this.requirePending(reservation);
277
- requireCommitIdentity(
278
- target,
279
- reservation,
280
- pending.creating,
281
- spot,
282
- this.options.meshName
283
- );
272
+ requireCommitIdentity(target, reservation, pending.creating, spot, this.options.meshName);
284
273
  let result;
285
274
  try {
286
275
  result = await this.options.store.commit({
@@ -348,16 +337,16 @@ implements ServiceAsyncInstanceActivationAuthority {
348
337
  }
349
338
  const decoded = decodeServiceReadySpotAuthority(current.payload);
350
339
  if (
351
- decoded?.kind !== 'instance_spot'
352
- || decoded.spotId !== target.targetSpotId
353
- || decoded.stableType !== target.stableType
354
- || current.allocation.state !== 'active'
355
- || current.objectGeneration !== route.objectGeneration
356
- || current.authorityOwnerGeneration !== route.authorityOwnerGeneration
357
- || current.ownerId !== route.ownerId
358
- || current.ownerLeaseGeneration !== route.leaseGeneration
359
- || current.allocation.descriptorLifecycleGeneration !== route.targetNodeGeneration
360
- || !routingIdsEqual(current.allocation.descriptor.rid, route.targetNodeRid)
340
+ decoded?.kind !== 'instance_spot' ||
341
+ decoded.spotId !== target.targetSpotId ||
342
+ decoded.stableType !== target.stableType ||
343
+ current.allocation.state !== 'active' ||
344
+ current.objectGeneration !== route.objectGeneration ||
345
+ current.authorityOwnerGeneration !== route.authorityOwnerGeneration ||
346
+ current.ownerId !== route.ownerId ||
347
+ current.ownerLeaseGeneration !== route.leaseGeneration ||
348
+ current.allocation.descriptorLifecycleGeneration !== route.targetNodeGeneration ||
349
+ !routingIdsEqual(current.allocation.descriptor.rid, route.targetNodeRid)
361
350
  ) {
362
351
  throw new Error('Instance activation authority changed before inbox release.');
363
352
  }
@@ -398,30 +387,26 @@ implements ServiceAsyncInstanceActivationAuthority {
398
387
  const completedPayload = decodeServiceReadySpotAuthority(completed.payload);
399
388
  const completedRecovery = completedPayload?.activationRecovery;
400
389
  if (
401
- completedPayload?.kind !== 'instance_spot'
402
- || completedRecovery === undefined
403
- || completedRecovery.replayCursor !== completedRecovery.inboxSequence
390
+ completedPayload?.kind !== 'instance_spot' ||
391
+ completedRecovery === undefined ||
392
+ completedRecovery.replayCursor !== completedRecovery.inboxSequence
404
393
  ) {
405
394
  throw new Error('Instance activation terminal completion was not durably recorded.');
406
395
  }
407
- const stored = await this.options.store.compareExchangeAuthority(
408
- key,
409
- completed.storeVersion,
410
- {
411
- kind: 'put',
412
- generationTransition: 'preserve',
413
- payload: encodeServiceInstanceAuthorityPayload({
414
- state: 'ready',
415
- stableType: completedPayload.stableType,
416
- spotId: completedPayload.spotId,
417
- ownerId: completedPayload.ownerId,
418
- ownerLeaseGeneration: completedPayload.ownerLeaseGeneration,
419
- ownerMeshName: completedPayload.ownerMeshName,
420
- ownerNodeRid: completedPayload.ownerNodeRid,
421
- ownerNodeGeneration: completedPayload.ownerNodeGeneration
422
- })
423
- }
424
- );
396
+ const stored = await this.options.store.compareExchangeAuthority(key, completed.storeVersion, {
397
+ kind: 'put',
398
+ generationTransition: 'preserve',
399
+ payload: encodeServiceInstanceAuthorityPayload({
400
+ state: 'ready',
401
+ stableType: completedPayload.stableType,
402
+ spotId: completedPayload.spotId,
403
+ ownerId: completedPayload.ownerId,
404
+ ownerLeaseGeneration: completedPayload.ownerLeaseGeneration,
405
+ ownerMeshName: completedPayload.ownerMeshName,
406
+ ownerNodeRid: completedPayload.ownerNodeRid,
407
+ ownerNodeGeneration: completedPayload.ownerNodeGeneration
408
+ })
409
+ });
425
410
  if (stored.kind !== 'stored') {
426
411
  throw new Error(`Instance activation inbox release failed: ${stored.kind}.`);
427
412
  }
@@ -480,8 +465,8 @@ implements ServiceAsyncInstanceActivationAuthority {
480
465
  const current = await this.options.store.readAuthority(key);
481
466
  if (current.kind === 'snapshot') {
482
467
  if (
483
- current.allocation.objectKind !== 'instance_spot'
484
- || current.allocation.stableType !== target.stableType
468
+ current.allocation.objectKind !== 'instance_spot' ||
469
+ current.allocation.stableType !== target.stableType
485
470
  ) {
486
471
  throw new Error('Concurrent Instance activation resolved to a different Spot type.');
487
472
  }
@@ -509,10 +494,10 @@ implements ServiceAsyncInstanceActivationAuthority {
509
494
  if (current.kind !== 'snapshot') return;
510
495
  const decoded = decodeServiceInstanceAuthorityPayload(current.payload);
511
496
  if (
512
- current.allocation.objectKind !== 'instance_spot'
513
- || current.allocation.stableType !== target.stableType
514
- || decoded?.kind !== 'instance_spot'
515
- || decoded.spotId !== target.targetSpotId
497
+ current.allocation.objectKind !== 'instance_spot' ||
498
+ current.allocation.stableType !== target.stableType ||
499
+ decoded?.kind !== 'instance_spot' ||
500
+ decoded.spotId !== target.targetSpotId
516
501
  ) {
517
502
  throw new Error('Instance authority changed to a different Spot while closing.');
518
503
  }
@@ -526,10 +511,7 @@ implements ServiceAsyncInstanceActivationAuthority {
526
511
 
527
512
  private requirePending(reservation: ServiceInstanceActivationReservation): PendingReservation {
528
513
  const pending = this.pending.get(reservation.token);
529
- if (
530
- pending === undefined
531
- || pending.creating.objectGeneration !== reservation.attempt
532
- ) {
514
+ if (pending === undefined || pending.creating.objectGeneration !== reservation.attempt) {
533
515
  throw new Error('Instance activation reservation is stale.');
534
516
  }
535
517
  return pending;
@@ -543,18 +525,18 @@ function readyRead(
543
525
  const decoded = decodeServiceReadySpotAuthority(snapshot.payload);
544
526
  const creating = decodeServiceInstanceAuthorityPayload(snapshot.payload);
545
527
  if (
546
- creating?.state === 'coldActivating'
547
- && snapshot.allocation.objectKind === 'instance_spot'
548
- && snapshot.allocation.state === 'reserved'
549
- && creating.stableType === target.stableType
550
- && creating.spotId === target.targetSpotId
551
- && creating.ownerId === snapshot.ownerId
552
- && creating.ownerLeaseGeneration === snapshot.ownerLeaseGeneration
553
- && creating.ownerMeshName === snapshot.allocation.descriptor.meshName
554
- && creating.ownerNodeGeneration === snapshot.allocation.descriptorLifecycleGeneration
555
- && routingIdsEqual(creating.ownerNodeRid, snapshot.allocation.descriptor.rid)
556
- && routingIdsEqual(target.targetNodeRid, snapshot.allocation.descriptor.rid)
557
- && target.targetNodeGeneration === snapshot.allocation.descriptorLifecycleGeneration
528
+ creating?.state === 'coldActivating' &&
529
+ snapshot.allocation.objectKind === 'instance_spot' &&
530
+ snapshot.allocation.state === 'reserved' &&
531
+ creating.stableType === target.stableType &&
532
+ creating.spotId === target.targetSpotId &&
533
+ creating.ownerId === snapshot.ownerId &&
534
+ creating.ownerLeaseGeneration === snapshot.ownerLeaseGeneration &&
535
+ creating.ownerMeshName === snapshot.allocation.descriptor.meshName &&
536
+ creating.ownerNodeGeneration === snapshot.allocation.descriptorLifecycleGeneration &&
537
+ routingIdsEqual(creating.ownerNodeRid, snapshot.allocation.descriptor.rid) &&
538
+ routingIdsEqual(target.targetNodeRid, snapshot.allocation.descriptor.rid) &&
539
+ target.targetNodeGeneration === snapshot.allocation.descriptorLifecycleGeneration
558
540
  ) {
559
541
  return {
560
542
  kind: 'creating',
@@ -563,18 +545,18 @@ function readyRead(
563
545
  };
564
546
  }
565
547
  if (
566
- decoded?.kind !== 'instance_spot'
567
- || decoded.stableType !== target.stableType
568
- || decoded.spotId !== target.targetSpotId
569
- || snapshot.allocation.objectKind !== 'instance_spot'
570
- || snapshot.allocation.state !== 'active'
571
- || decoded.ownerId !== snapshot.ownerId
572
- || decoded.ownerLeaseGeneration !== snapshot.ownerLeaseGeneration
573
- || decoded.ownerMeshName !== snapshot.allocation.descriptor.meshName
574
- || decoded.ownerNodeGeneration !== snapshot.allocation.descriptorLifecycleGeneration
575
- || !routingIdsEqual(decoded.ownerNodeRid, snapshot.allocation.descriptor.rid)
576
- || !routingIdsEqual(target.targetNodeRid, snapshot.allocation.descriptor.rid)
577
- || target.targetNodeGeneration !== snapshot.allocation.descriptorLifecycleGeneration
548
+ decoded?.kind !== 'instance_spot' ||
549
+ decoded.stableType !== target.stableType ||
550
+ decoded.spotId !== target.targetSpotId ||
551
+ snapshot.allocation.objectKind !== 'instance_spot' ||
552
+ snapshot.allocation.state !== 'active' ||
553
+ decoded.ownerId !== snapshot.ownerId ||
554
+ decoded.ownerLeaseGeneration !== snapshot.ownerLeaseGeneration ||
555
+ decoded.ownerMeshName !== snapshot.allocation.descriptor.meshName ||
556
+ decoded.ownerNodeGeneration !== snapshot.allocation.descriptorLifecycleGeneration ||
557
+ !routingIdsEqual(decoded.ownerNodeRid, snapshot.allocation.descriptor.rid) ||
558
+ !routingIdsEqual(target.targetNodeRid, snapshot.allocation.descriptor.rid) ||
559
+ target.targetNodeGeneration !== snapshot.allocation.descriptorLifecycleGeneration
578
560
  ) {
579
561
  return { kind: 'missing' };
580
562
  }
@@ -587,16 +569,16 @@ function readyExisting(
587
569
  ): Extract<ServiceInstanceAuthorityRead, { readonly kind: 'ready' }> {
588
570
  const decoded = decodeServiceReadySpotAuthority(snapshot.payload);
589
571
  if (
590
- decoded?.kind !== 'instance_spot'
591
- || decoded.stableType !== target.stableType
592
- || decoded.spotId !== target.targetSpotId
593
- || snapshot.allocation.objectKind !== 'instance_spot'
594
- || snapshot.allocation.state !== 'active'
595
- || decoded.ownerId !== snapshot.ownerId
596
- || decoded.ownerLeaseGeneration !== snapshot.ownerLeaseGeneration
597
- || decoded.ownerMeshName !== snapshot.allocation.descriptor.meshName
598
- || decoded.ownerNodeGeneration !== snapshot.allocation.descriptorLifecycleGeneration
599
- || !routingIdsEqual(decoded.ownerNodeRid, snapshot.allocation.descriptor.rid)
572
+ decoded?.kind !== 'instance_spot' ||
573
+ decoded.stableType !== target.stableType ||
574
+ decoded.spotId !== target.targetSpotId ||
575
+ snapshot.allocation.objectKind !== 'instance_spot' ||
576
+ snapshot.allocation.state !== 'active' ||
577
+ decoded.ownerId !== snapshot.ownerId ||
578
+ decoded.ownerLeaseGeneration !== snapshot.ownerLeaseGeneration ||
579
+ decoded.ownerMeshName !== snapshot.allocation.descriptor.meshName ||
580
+ decoded.ownerNodeGeneration !== snapshot.allocation.descriptorLifecycleGeneration ||
581
+ !routingIdsEqual(decoded.ownerNodeRid, snapshot.allocation.descriptor.rid)
600
582
  ) {
601
583
  throw new Error('Existing Instance authority is not a matching Ready allocation.');
602
584
  }
@@ -619,18 +601,18 @@ function requireCommitIdentity(
619
601
  meshName: string
620
602
  ): void {
621
603
  if (
622
- creating.allocation.state !== 'reserved'
623
- || creating.allocation.objectKind !== 'instance_spot'
624
- || creating.allocation.stableType !== target.stableType
625
- || creating.objectGeneration !== reservation.attempt
626
- || !routingIdsEqual(creating.allocation.descriptor.rid, target.targetNodeRid)
627
- || creating.allocation.descriptor.meshName !== meshName
628
- || creating.allocation.descriptorLifecycleGeneration !== target.targetNodeGeneration
629
- || spot.kind !== 'instance'
630
- || spot.stableType !== target.stableType
631
- || spot.ref.spotId !== target.targetSpotId
632
- || spot.ref.generation !== reservation.attempt
633
- || spot.authorityOwnerGeneration !== creating.authorityOwnerGeneration
604
+ creating.allocation.state !== 'reserved' ||
605
+ creating.allocation.objectKind !== 'instance_spot' ||
606
+ creating.allocation.stableType !== target.stableType ||
607
+ creating.objectGeneration !== reservation.attempt ||
608
+ !routingIdsEqual(creating.allocation.descriptor.rid, target.targetNodeRid) ||
609
+ creating.allocation.descriptor.meshName !== meshName ||
610
+ creating.allocation.descriptorLifecycleGeneration !== target.targetNodeGeneration ||
611
+ spot.kind !== 'instance' ||
612
+ spot.stableType !== target.stableType ||
613
+ spot.ref.spotId !== target.targetSpotId ||
614
+ spot.ref.generation !== reservation.attempt ||
615
+ spot.authorityOwnerGeneration !== creating.authorityOwnerGeneration
634
616
  ) {
635
617
  throw new Error('Instance activation Ready identity does not match its exact reservation.');
636
618
  }
@@ -94,10 +94,14 @@ export class ZLinkLocationRuntimeOwner {
94
94
  metrics: this.options.metrics,
95
95
  meshNames: [...this.options.registration.spotNodes.keys()],
96
96
  leaseScopes: [
97
- ...[...this.options.registration.spotNodes.keys()]
98
- .map(name => ({ kind: 'mesh' as const, name })),
99
- ...[...this.options.registration.channels.keys()]
100
- .map(name => ({ kind: 'channel' as const, name }))
97
+ ...[...this.options.registration.spotNodes.keys()].map((name) => ({
98
+ kind: 'mesh' as const,
99
+ name
100
+ })),
101
+ ...[...this.options.registration.channels.keys()].map((name) => ({
102
+ kind: 'channel' as const,
103
+ name
104
+ }))
101
105
  ],
102
106
  rewriteAuthorityPayloadForOwner: this.options.rewriteAuthorityPayloadForOwner
103
107
  });
@@ -108,7 +112,7 @@ export class ZLinkLocationRuntimeOwner {
108
112
  primaryMeshName ?? '',
109
113
  stores.authorityStore,
110
114
  stores.spotStore,
111
- spotId => this.spotRouteInvalidator?.(spotId)
115
+ (spotId) => this.spotRouteInvalidator?.(spotId)
112
116
  );
113
117
  return runtime;
114
118
  }
@@ -131,7 +135,9 @@ export class ZLinkLocationRuntimeOwner {
131
135
  createSpotRouteResolver(
132
136
  spotMeshNames: readonly string[],
133
137
  spotRouterChannelIdByMesh: (meshName: string) => string,
134
- resolveLocalSpot?: (spotId: RoutingId) => import('../spots/spot-routing-internal').ZLinkSpotRouteTarget | undefined
138
+ resolveLocalSpot?: (
139
+ spotId: RoutingId
140
+ ) => import('../spots/spot-routing-internal').ZLinkSpotRouteTarget | undefined
135
141
  ): ZLinkSpotRouteResolver | undefined {
136
142
  const stores = this.stores;
137
143
  if (stores === undefined || spotMeshNames.length === 0) {
@@ -150,7 +156,9 @@ export class ZLinkLocationRuntimeOwner {
150
156
  );
151
157
  }
152
158
 
153
- createActorLocationResolver(spotMeshNames: readonly string[]): ZLinkStoreLocationResolvers | undefined {
159
+ createActorLocationResolver(
160
+ spotMeshNames: readonly string[]
161
+ ): ZLinkStoreLocationResolvers | undefined {
154
162
  const stores = this.stores;
155
163
  if (stores === undefined) {
156
164
  return undefined;
@@ -166,9 +174,8 @@ export class ZLinkLocationRuntimeOwner {
166
174
 
167
175
  ownerNodeRid(spotNodeRuntime?: ZLinkSpotNodeRuntimeManager): RoutingId {
168
176
  const primaryMeshNode = spotNodeRuntime?.primaryMeshNode;
169
- const spotNodeRid = primaryMeshNode === undefined
170
- ? undefined
171
- : String(primaryMeshNode.status().routingId);
177
+ const spotNodeRid =
178
+ primaryMeshNode === undefined ? undefined : String(primaryMeshNode.status().routingId);
172
179
  if (spotNodeRid !== undefined) {
173
180
  return spotNodeRid;
174
181
  }
@@ -184,7 +191,8 @@ export class ZLinkLocationRuntimeOwner {
184
191
  }
185
192
  }
186
193
  for (const spotNode of this.options.registration.spotNodes.values()) {
187
- const routingId = spotNode.routingId ?? spotNode.router?.routingId ?? spotNode.pubSub?.routingId;
194
+ const routingId =
195
+ spotNode.routingId ?? spotNode.router?.routingId ?? spotNode.pubSub?.routingId;
188
196
  if (routingId !== undefined) {
189
197
  return routingId;
190
198
  }
@@ -297,19 +305,23 @@ export class ZLinkLocationRuntimeOwner {
297
305
  }
298
306
 
299
307
  function isActorTransferStore(value: unknown): value is ZLinkActorTransferStore {
300
- const store = value as Partial<Record<
301
- | 'prepareActorTransfer'
302
- | 'commitActorTransfer'
303
- | 'activateActorTransfer'
304
- | 'abortActorTransfer'
305
- | 'takeOverActorTransfer'
306
- | 'resolveActorTransfer',
307
- unknown
308
- >>;
309
- return typeof store.prepareActorTransfer === 'function'
310
- && typeof store.commitActorTransfer === 'function'
311
- && typeof store.activateActorTransfer === 'function'
312
- && typeof store.abortActorTransfer === 'function'
313
- && typeof store.takeOverActorTransfer === 'function'
314
- && typeof store.resolveActorTransfer === 'function';
308
+ const store = value as Partial<
309
+ Record<
310
+ | 'prepareActorTransfer'
311
+ | 'commitActorTransfer'
312
+ | 'activateActorTransfer'
313
+ | 'abortActorTransfer'
314
+ | 'takeOverActorTransfer'
315
+ | 'resolveActorTransfer',
316
+ unknown
317
+ >
318
+ >;
319
+ return (
320
+ typeof store.prepareActorTransfer === 'function' &&
321
+ typeof store.commitActorTransfer === 'function' &&
322
+ typeof store.activateActorTransfer === 'function' &&
323
+ typeof store.abortActorTransfer === 'function' &&
324
+ typeof store.takeOverActorTransfer === 'function' &&
325
+ typeof store.resolveActorTransfer === 'function'
326
+ );
315
327
  }
@@ -7,8 +7,10 @@ export class MeshRouterResolver {
7
7
  constructor(private readonly registration: ZLinkFrameworkRegistration) {}
8
8
 
9
9
  canUseRouterChannel(routerChannelId: string): boolean {
10
- return this.registration.routeChannels.has(routerChannelId)
11
- || this.registration.spotNodes.get(routerChannelId)?.router !== undefined;
10
+ return (
11
+ this.registration.routeChannels.has(routerChannelId) ||
12
+ this.registration.spotNodes.get(routerChannelId)?.router !== undefined
13
+ );
12
14
  }
13
15
 
14
16
  classifyManualNodeTarget(meshName: string, targetNodeRid: RoutingId): boolean | undefined {
@@ -38,9 +40,10 @@ export class MeshRouterResolver {
38
40
  return candidates.length === 1 ? candidates[0] : undefined;
39
41
  }
40
42
 
41
- remoteBoundSessionTargetForSource(sourceNodeRid: RoutingId): ZLinkRemoteBoundSessionTarget | undefined {
42
- const routerChannelId = this.defaultSpotRouterChannelId()
43
- ?? this.defaultRouterChannelId();
43
+ remoteBoundSessionTargetForSource(
44
+ sourceNodeRid: RoutingId
45
+ ): ZLinkRemoteBoundSessionTarget | undefined {
46
+ const routerChannelId = this.defaultSpotRouterChannelId() ?? this.defaultRouterChannelId();
44
47
  if (routerChannelId === undefined) {
45
48
  return undefined;
46
49
  }
@@ -54,12 +57,14 @@ export class MeshRouterResolver {
54
57
 
55
58
  primaryMeshName(): string | undefined {
56
59
  const names = [...this.registration.spotNodes.entries()]
57
- .filter(([, node]) =>
58
- node.entrySpotType !== undefined
59
- || (node.spotFactories?.length ?? 0) > 0
60
- || (node.actorFactories instanceof Map
61
- ? node.actorFactories.size > 0
62
- : Object.keys(node.actorFactories ?? {}).length > 0))
60
+ .filter(
61
+ ([, node]) =>
62
+ node.entrySpotType !== undefined ||
63
+ (node.spotFactories?.length ?? 0) > 0 ||
64
+ (node.actorFactories instanceof Map
65
+ ? node.actorFactories.size > 0
66
+ : Object.keys(node.actorFactories ?? {}).length > 0)
67
+ )
63
68
  .map(([name]) => name);
64
69
  if (names.length === 1) return names[0];
65
70
  if (names.length > 1) return undefined;
@@ -69,18 +74,19 @@ export class MeshRouterResolver {
69
74
 
70
75
  actorMeshName(actorType: string): string | undefined {
71
76
  const matches = [...this.registration.spotNodes.entries()]
72
- .filter(([, node]) => node.actorFactories instanceof Map
73
- ? node.actorFactories.has(actorType)
74
- : node.actorFactories !== undefined && Object.hasOwn(node.actorFactories, actorType))
77
+ .filter(([, node]) =>
78
+ node.actorFactories instanceof Map
79
+ ? node.actorFactories.has(actorType)
80
+ : node.actorFactories !== undefined && Object.hasOwn(node.actorFactories, actorType)
81
+ )
75
82
  .map(([name]) => name);
76
83
  return matches.length === 1 ? matches[0] : undefined;
77
84
  }
78
85
 
79
86
  spotLocationMeshNames(): readonly string[] {
80
- return [...new Set([
81
- ...this.registration.spotNodes.keys(),
82
- ...this.registration.routeChannels.keys()
83
- ])];
87
+ return [
88
+ ...new Set([...this.registration.spotNodes.keys(), ...this.registration.routeChannels.keys()])
89
+ ];
84
90
  }
85
91
 
86
92
  spotRouterChannelIdByMesh(): (meshName: string) => string {
@@ -89,8 +95,8 @@ export class MeshRouterResolver {
89
95
  for (const [spotMeshName, spotNode] of this.registration.spotNodes.entries()) {
90
96
  const conventionalRouteChannelId = `${spotMeshName}.route`;
91
97
  if (
92
- this.registration.routeChannels.has(conventionalRouteChannelId)
93
- || this.registration.routeChannelOptions.has(conventionalRouteChannelId)
98
+ this.registration.routeChannels.has(conventionalRouteChannelId) ||
99
+ this.registration.routeChannelOptions.has(conventionalRouteChannelId)
94
100
  ) {
95
101
  mapped.set(spotMeshName, conventionalRouteChannelId);
96
102
  continue;
@@ -100,9 +106,10 @@ export class MeshRouterResolver {
100
106
  continue;
101
107
  }
102
108
  const candidates = routeChannels
103
- .filter((routeChannel) =>
104
- routeChannel.routingId !== undefined &&
105
- routingIdsEqual(routeChannel.routingId, spotNodeRid)
109
+ .filter(
110
+ (routeChannel) =>
111
+ routeChannel.routingId !== undefined &&
112
+ routingIdsEqual(routeChannel.routingId, spotNodeRid)
106
113
  )
107
114
  .map((routeChannel) => routeChannel.routerChannelId);
108
115
  if (candidates.length === 1) {