@zlink-systems/framework 0.20.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,5 +1,4 @@
1
- import type {
2
- } from '../../contracts';
1
+ import type {} from '../../contracts';
3
2
  import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
4
3
  import type { ZLinkRuntimeEventPublisher } from '../diagnostics';
5
4
  import {
@@ -18,7 +17,10 @@ import type {
18
17
  ZLinkDetachedTaskRunner,
19
18
  ZLinkSpotRoutedTransport
20
19
  } from '../spots';
21
- import type { ZLinkEntryActorRuntime, ZLinkSpotActorTransferRuntime } from '../spots/spot-runtime-ports';
20
+ import type {
21
+ ZLinkEntryActorRuntime,
22
+ ZLinkSpotActorTransferRuntime
23
+ } from '../spots/spot-runtime-ports';
22
24
  import type { MeshRouterResolver } from './mesh-router-resolver';
23
25
  import type { ZLinkBoundSessionRelay } from './bound-session-relay';
24
26
  import type { ZLinkActorHandoffCoordinator } from '../actors';
@@ -55,8 +57,14 @@ export class ZLinkSpotNodeRuntimeOptionsFactory {
55
57
  primaryMeshName: this.options.meshRouters.primaryMeshName(),
56
58
  backendAdapterFactory: this.options.backendAdapterFactory,
57
59
  context: this.options.context,
58
- channelClient: new DefaultZLinkChannelClient(this.options.registration, this.options.channelTransport),
59
- fanoutClient: new DefaultZLinkFanoutClient(this.options.registration, this.options.channelTransport),
60
+ channelClient: new DefaultZLinkChannelClient(
61
+ this.options.registration,
62
+ this.options.channelTransport
63
+ ),
64
+ fanoutClient: new DefaultZLinkFanoutClient(
65
+ this.options.registration,
66
+ this.options.channelTransport
67
+ ),
60
68
  spotPublisherClient: new DefaultZLinkSpotPublisherClient(
61
69
  this.options.registration,
62
70
  this.options.spotPublisherTransport
@@ -68,8 +76,7 @@ export class ZLinkSpotNodeRuntimeOptionsFactory {
68
76
  runtimeEventPublisher: this.options.runtimeEventPublisher,
69
77
  metrics: this.options.metrics,
70
78
  applicationJobQueue: this.options.applicationJobQueue,
71
- applicationJobReceiveFlowFailureSink:
72
- this.options.applicationJobReceiveFlowFailureSink,
79
+ applicationJobReceiveFlowFailureSink: this.options.applicationJobReceiveFlowFailureSink,
73
80
  detachedTaskRunner: this.options.detachedTaskRunner,
74
81
  messageSerializers: this.options.registration.messageSerializers,
75
82
  entryActorRuntime: this.options.entryActorRuntime,
@@ -78,5 +85,4 @@ export class ZLinkSpotNodeRuntimeOptionsFactory {
78
85
  actorHandoffRuntime: this.options.actorHandoff
79
86
  };
80
87
  }
81
-
82
88
  }
@@ -1,8 +1,5 @@
1
1
  import type { ZLinkRuntimeEventPublisher } from '../diagnostics';
2
- import {
3
- ZLinkSpotRelocationCoordinationMode,
4
- ZLinkUserSpotExecutionMode
5
- } from '../../contracts';
2
+ import { ZLinkSpotRelocationCoordinationMode, ZLinkUserSpotExecutionMode } from '../../contracts';
6
3
  import {
7
4
  toFrameworkActorRef,
8
5
  type DefaultZLinkActorManager,
@@ -18,10 +15,7 @@ import {
18
15
  type ZLinkSpotPublisherClientTransport
19
16
  } from '../channels';
20
17
  import type { ZLinkDispatchErrorReporter } from '../channels';
21
- import {
22
- ZLinkConfigurationException,
23
- type ZLinkFrameworkRegistration
24
- } from '../configuration';
18
+ import { ZLinkConfigurationException, type ZLinkFrameworkRegistration } from '../configuration';
25
19
  import type { ZLinkLocationLifecycle } from '../locations';
26
20
  import type { ZLinkBackendMeshNode } from '../backend';
27
21
  import type { ZLinkSpotRouteResolver } from '../spots/spot-routing-internal';
@@ -83,16 +77,14 @@ export class ZLinkSpotRuntimeOptionsFactory {
83
77
  this.options.spotNodeRuntime()?.meshNode(meshName)?.status().lifecycleGeneration,
84
78
  entryNodeRid: undefined,
85
79
  entryNodeRidProvider: () => this.primaryNodeRoutingId(),
86
- entrySpotIdProvider: meshName =>
80
+ entrySpotIdProvider: (meshName) =>
87
81
  this.options.spotNodeRuntime()?.entrySpotIdForMesh(meshName),
88
82
  entrySpotCallbacks: {
89
83
  onLeaveActor: (actor, signal, actorRef, membershipEpoch) =>
90
- this.options.spotNodeRuntime()?.notifyPrimaryEntrySpotActorLeft(
91
- actor,
92
- signal,
93
- actorRef,
94
- membershipEpoch
95
- ) ?? Promise.resolve()
84
+ this.options
85
+ .spotNodeRuntime()
86
+ ?.notifyPrimaryEntrySpotActorLeft(actor, signal, actorRef, membershipEpoch) ??
87
+ Promise.resolve()
96
88
  },
97
89
  dispatchEntryActorPacket: (
98
90
  actorId,
@@ -105,7 +97,9 @@ export class ZLinkSpotRuntimeOptionsFactory {
105
97
  ) => {
106
98
  const runtime = this.options.spotNodeRuntime();
107
99
  if (runtime === undefined) {
108
- throw new ZLinkConfigurationException('Entry Spot actor packet dispatch requires the MeshNode runtime.');
100
+ throw new ZLinkConfigurationException(
101
+ 'Entry Spot actor packet dispatch requires the MeshNode runtime.'
102
+ );
109
103
  }
110
104
  return runtime.dispatchEntryActorPacket(
111
105
  actorId,
@@ -120,12 +114,20 @@ export class ZLinkSpotRuntimeOptionsFactory {
120
114
  dispatchEntryActorJoin: async (meshName, actor, handoffBacklog) => {
121
115
  const runtime = this.options.spotNodeRuntime();
122
116
  if (runtime === undefined) {
123
- throw new ZLinkConfigurationException('Entry Spot actor join requires the MeshNode runtime.');
117
+ throw new ZLinkConfigurationException(
118
+ 'Entry Spot actor join requires the MeshNode runtime.'
119
+ );
124
120
  }
125
121
  await runtime.dispatchEntryActorJoin(meshName, actor, handoffBacklog);
126
122
  },
127
- channelClient: new DefaultZLinkChannelClient(this.options.registration, this.options.channelTransport),
128
- fanoutClient: new DefaultZLinkFanoutClient(this.options.registration, this.options.channelTransport),
123
+ channelClient: new DefaultZLinkChannelClient(
124
+ this.options.registration,
125
+ this.options.channelTransport
126
+ ),
127
+ fanoutClient: new DefaultZLinkFanoutClient(
128
+ this.options.registration,
129
+ this.options.channelTransport
130
+ ),
129
131
  spotPublisherClient: new DefaultZLinkSpotPublisherClient(
130
132
  this.options.registration,
131
133
  this.options.spotPublisherTransport
@@ -135,7 +137,9 @@ export class ZLinkSpotRuntimeOptionsFactory {
135
137
  spotRouterChannelIdForMesh: this.options.meshRouters.spotRouterChannelIdByMesh(),
136
138
  channelMeshNameForChannel: (channelName) => {
137
139
  const matches = [...this.options.registration.spotNodes.entries()]
138
- .filter(([, node]) => Object.prototype.hasOwnProperty.call(node.meshChannels ?? {}, channelName))
140
+ .filter(([, node]) =>
141
+ Object.prototype.hasOwnProperty.call(node.meshChannels ?? {}, channelName)
142
+ )
139
143
  .map(([meshName]) => meshName);
140
144
  return matches.length === 1 ? matches[0] : undefined;
141
145
  },
@@ -150,36 +154,38 @@ export class ZLinkSpotRuntimeOptionsFactory {
150
154
  beginInstanceClosingAuthority: (meshName, spotId) =>
151
155
  this.options.beginInstanceClosingAuthority(meshName, String(spotId)),
152
156
  instanceSpotApplicationTargetProvider: (meshName, spotId) =>
153
- this.options.spotNodeRuntime()
157
+ this.options
158
+ .spotNodeRuntime()
154
159
  ?.meshNode(meshName)
155
160
  ?.instanceSpotApplicationTarget?.(String(spotId)),
156
161
  instanceSpotApplicationQuiescenceProvider: (meshName, spotId, signal) =>
157
- this.options.spotNodeRuntime()
162
+ this.options
163
+ .spotNodeRuntime()
158
164
  ?.meshNode(meshName)
159
- ?.waitForInstanceApplicationQuiescence?.(String(spotId), signal)
160
- ?? Promise.resolve(),
165
+ ?.waitForInstanceApplicationQuiescence?.(String(spotId), signal) ?? Promise.resolve(),
161
166
  createNativeSpot: (meshName, spotId, authority) => {
162
167
  const node = this.options.spotNodeRuntime()?.meshNode(meshName);
163
168
  if (node === undefined) {
164
169
  return undefined;
165
170
  }
166
- const restored = authority === undefined
167
- ? undefined
168
- : node.restoreSpotAuthority?.(
169
- String(spotId),
170
- authority.objectKind ?? 'user_spot',
171
- authority.stableType,
172
- authority.objectGeneration,
173
- authority.authorityOwnerGeneration
174
- ) ?? node.restoreUserSpotAuthority?.(
171
+ const restored =
172
+ authority === undefined
173
+ ? undefined
174
+ : (node.restoreSpotAuthority?.(
175
+ String(spotId),
176
+ authority.objectKind ?? 'user_spot',
177
+ authority.stableType,
178
+ authority.objectGeneration,
179
+ authority.authorityOwnerGeneration
180
+ ) ??
181
+ node.restoreUserSpotAuthority?.(
175
182
  String(spotId),
176
183
  authority.stableType,
177
184
  authority.objectGeneration,
178
185
  authority.authorityOwnerGeneration
179
- );
180
- const result = restored === undefined
181
- ? node.getOrCreateSpot(spotId)
182
- : { spot: restored, created: true };
186
+ ));
187
+ const result =
188
+ restored === undefined ? node.getOrCreateSpot(spotId) : { spot: restored, created: true };
183
189
  return {
184
190
  routingId: spotId,
185
191
  lifecycleGeneration: result.spot.status().lifecycleGeneration,
@@ -216,21 +222,21 @@ export class ZLinkSpotRuntimeOptionsFactory {
216
222
  expectedAuthorityOwnerGeneration: fence.authorityOwnerGeneration,
217
223
  expectedOwnerLeaseGeneration: fence.ownerLeaseGeneration
218
224
  }),
219
- actorLifecycleResolver: (actorId) =>
220
- this.options.actorManager()?.getState(actorId)?.actor,
225
+ actorLifecycleResolver: (actorId) => this.options.actorManager()?.getState(actorId)?.actor,
221
226
  actorDispatchOwnerResolver: (actorId) => {
222
227
  const state = this.options.actorManager()?.getState(actorId);
223
- const actorRef = state?.nativeActorRef === undefined
224
- ? undefined
225
- : toFrameworkActorRef(state.nativeActorRef, state.meshName ?? '');
228
+ const actorRef =
229
+ state?.nativeActorRef === undefined
230
+ ? undefined
231
+ : toFrameworkActorRef(state.nativeActorRef, state.meshName ?? '');
226
232
  const localNodeRid = this.primaryNodeRoutingId();
227
233
  if (
228
- state?.actor === undefined
229
- || state.spot === undefined
230
- || state.remoteActorPacketTarget !== undefined
231
- || actorRef === undefined
232
- || localNodeRid === undefined
233
- || String(actorRef.nodeRid) !== localNodeRid
234
+ state?.actor === undefined ||
235
+ state.spot === undefined ||
236
+ state.remoteActorPacketTarget !== undefined ||
237
+ actorRef === undefined ||
238
+ localNodeRid === undefined ||
239
+ String(actorRef.nodeRid) !== localNodeRid
234
240
  ) {
235
241
  return {};
236
242
  }
@@ -241,24 +247,28 @@ export class ZLinkSpotRuntimeOptionsFactory {
241
247
  },
242
248
  userSpotExecutionMode: (meshName, spotType) => {
243
249
  const registrations =
244
- this.options.registration.spotNodes.get(meshName)
245
- ?.spotFactoryRegistrations ?? {};
246
- const registration = Object.values(registrations)
247
- .find(candidate => candidate.implementation === spotType);
248
- return registration?.options?.executionMode
249
- ?? ZLinkUserSpotExecutionMode.SpotWide;
250
+ this.options.registration.spotNodes.get(meshName)?.spotFactoryRegistrations ?? {};
251
+ const registration = Object.values(registrations).find(
252
+ (candidate) => candidate.implementation === spotType
253
+ );
254
+ return registration?.options?.executionMode ?? ZLinkUserSpotExecutionMode.SpotWide;
250
255
  },
251
256
  userSpotRelocationCoordinationMode: (meshName, spotType) => {
252
257
  const registrations =
253
- this.options.registration.spotNodes.get(meshName)
254
- ?.spotFactoryRegistrations ?? {};
255
- const registration = Object.values(registrations)
256
- .find(candidate => candidate.implementation === spotType);
257
- return registration?.options?.relocationCoordinationMode
258
- ?? ZLinkSpotRelocationCoordinationMode.FrameworkManaged;
258
+ this.options.registration.spotNodes.get(meshName)?.spotFactoryRegistrations ?? {};
259
+ const registration = Object.values(registrations).find(
260
+ (candidate) => candidate.implementation === spotType
261
+ );
262
+ return (
263
+ registration?.options?.relocationCoordinationMode ??
264
+ ZLinkSpotRelocationCoordinationMode.FrameworkManaged
265
+ );
259
266
  },
260
267
  actorBindingGenerationObserver: (actorId, generation) =>
261
- this.options.actorManager()?.getState(actorId)?.setBoundSessionBindingGeneration(generation),
268
+ this.options
269
+ .actorManager()
270
+ ?.getState(actorId)
271
+ ?.setBoundSessionBindingGeneration(generation),
262
272
  actorTransferRuntime,
263
273
  boundSessionRuntime: this.options.boundSessionRelay.boundSessions,
264
274
  actorHandoffRuntime: this.options.actorHandoff,
@@ -282,5 +292,4 @@ export class ZLinkSpotRuntimeOptionsFactory {
282
292
  const node = this.options.spotNodeRuntime()?.meshNode(meshName);
283
293
  return node === undefined ? undefined : String(node.status().routingId);
284
294
  }
285
-
286
295
  }
@@ -4,15 +4,14 @@ import type {
4
4
  ZLinkAuthoritySnapshot,
5
5
  ZLinkAuthorityReadResult
6
6
  } from '../../contracts/Locations/Authority';
7
- import type { ZLinkAuthorityStore, ZLinkObjectCreationStore } from '../locations/internal-store-contracts';
8
7
  import type {
9
- ZLinkRelocationStore
10
- } from '../../contracts/Locations/RelocationStore';
8
+ ZLinkAuthorityStore,
9
+ ZLinkObjectCreationStore
10
+ } from '../locations/internal-store-contracts';
11
+ import type { ZLinkRelocationStore } from '../../contracts/Locations/RelocationStore';
11
12
  import { relocationBlobReference } from '../locations/relocation-blob';
12
13
  import type { ZLinkBackendMeshNode } from '../backend/contracts';
13
- import type {
14
- ServicePendingInstanceActivation
15
- } from '../foundation/service-stateful-runtime';
14
+ import type { ServicePendingInstanceActivation } from '../foundation/service-stateful-runtime';
16
15
  import type {
17
16
  ServiceDirectSpotRouteFence,
18
17
  ServiceInstanceRouteFence,
@@ -175,9 +174,9 @@ export class ZLinkStatefulAuthorityRouteRuntime {
175
174
  const status = sink.status();
176
175
  for (const pending of snapshot.pending) {
177
176
  if (
178
- pending.targetMeshName === meshName
179
- && routingIdsEqual(status.routingId, pending.targetNodeRid)
180
- && status.lifecycleGeneration === pending.targetNodeGeneration
177
+ pending.targetMeshName === meshName &&
178
+ routingIdsEqual(status.routingId, pending.targetNodeRid) &&
179
+ status.lifecycleGeneration === pending.targetNodeGeneration
181
180
  ) {
182
181
  await this.recoverPendingInstanceActivation(sink, pending, signal);
183
182
  }
@@ -187,20 +186,18 @@ export class ZLinkStatefulAuthorityRouteRuntime {
187
186
  if (route.meshName !== meshName) continue;
188
187
  const previousRoute = previous.get(key);
189
188
  const expectedSpotRoute = previousRoute?.spotRoute ?? null;
190
- const expectedInstanceRoute = previousRoute?.kind === 'instance_spot'
191
- ? previousRoute.instanceRoute
192
- : null;
189
+ const expectedInstanceRoute =
190
+ previousRoute?.kind === 'instance_spot' ? previousRoute.instanceRoute : null;
193
191
  sink.rememberSpotRoute(route.spotRoute, expectedSpotRoute);
194
192
  if (route.kind === 'instance_spot') {
195
193
  const status = sink.status();
196
194
  if (
197
- routingIdsEqual(status.routingId, route.instanceRoute.targetNodeRid)
198
- && status.lifecycleGeneration === route.instanceRoute.targetNodeGeneration
195
+ routingIdsEqual(status.routingId, route.instanceRoute.targetNodeRid) &&
196
+ status.lifecycleGeneration === route.instanceRoute.targetNodeGeneration
199
197
  ) {
200
198
  if (route.activationRecovery !== undefined) {
201
199
  if (
202
- route.activationRecovery.replayCursor
203
- === route.activationRecovery.inboxSequence
200
+ route.activationRecovery.replayCursor === route.activationRecovery.inboxSequence
204
201
  ) {
205
202
  const released = await sink.completeRecoveredInstanceActivation(
206
203
  {
@@ -273,9 +270,7 @@ export class ZLinkStatefulAuthorityRouteRuntime {
273
270
  // then cannot remove a route or intent installed for a newer generation.
274
271
  for (const { meshName, sink } of sinks) {
275
272
  const previous = this.appliedByMesh.get(meshName) ?? new Map();
276
- const meshCurrent = new Map(
277
- [...current].filter(([, route]) => route.meshName === meshName)
278
- );
273
+ const meshCurrent = new Map([...current].filter(([, route]) => route.meshName === meshName));
279
274
  const changedSpotIds = new Set<string>();
280
275
  for (const [key, oldRoute] of previous) {
281
276
  const next = meshCurrent.get(key);
@@ -319,23 +314,25 @@ export class ZLinkStatefulAuthorityRouteRuntime {
319
314
  const envelope = await this.readRecoveryEnvelope(recovery, signal);
320
315
  const status = sink.status();
321
316
  if (
322
- envelope.targetMeshName !== route.meshName
323
- || envelope.target.stableType !== route.stableType
324
- || envelope.target.targetSpotId !== route.instanceRoute.targetSpotId
325
- || envelope.target.targetNodeRid !== route.instanceRoute.targetNodeRid
326
- || envelope.target.targetNodeGeneration !== route.instanceRoute.targetNodeGeneration
327
- || envelope.target.descriptorVersion !== status.descriptorRevision.toString()
317
+ envelope.targetMeshName !== route.meshName ||
318
+ envelope.target.stableType !== route.stableType ||
319
+ envelope.target.targetSpotId !== route.instanceRoute.targetSpotId ||
320
+ envelope.target.targetNodeRid !== route.instanceRoute.targetNodeRid ||
321
+ envelope.target.targetNodeGeneration !== route.instanceRoute.targetNodeGeneration ||
322
+ envelope.target.descriptorVersion !== status.descriptorRevision.toString()
328
323
  ) {
329
324
  this.options.reportError(
330
325
  new Error('Instance activation recovery envelope does not match Ready authority.')
331
326
  );
332
327
  return false;
333
328
  }
334
- return (await sink.recoverInstanceActivation(
335
- envelope,
336
- route.instanceRoute,
337
- expectedCurrentRoute
338
- )) !== false;
329
+ return (
330
+ (await sink.recoverInstanceActivation(
331
+ envelope,
332
+ route.instanceRoute,
333
+ expectedCurrentRoute
334
+ )) !== false
335
+ );
339
336
  }
340
337
 
341
338
  private async recoverPendingInstanceActivation(
@@ -343,21 +340,24 @@ export class ZLinkStatefulAuthorityRouteRuntime {
343
340
  recovery: PendingInstanceActivationRecovery,
344
341
  signal?: AbortSignal
345
342
  ): Promise<void> {
346
- const envelope = await this.readRecoveryEnvelope({
347
- reference: recovery.pending.requestReference,
348
- sha256: recovery.pending.requestSha256,
349
- encodedSize: Number(recovery.pending.requestEncodedSize),
350
- inboxSequence: 1n,
351
- replayCursor: 0n
352
- }, signal);
343
+ const envelope = await this.readRecoveryEnvelope(
344
+ {
345
+ reference: recovery.pending.requestReference,
346
+ sha256: recovery.pending.requestSha256,
347
+ encodedSize: Number(recovery.pending.requestEncodedSize),
348
+ inboxSequence: 1n,
349
+ replayCursor: 0n
350
+ },
351
+ signal
352
+ );
353
353
  const status = sink.status();
354
354
  if (
355
- envelope.targetMeshName !== recovery.targetMeshName
356
- || envelope.target.stableType !== recovery.stableType
357
- || envelope.target.targetSpotId !== recovery.spotId
358
- || envelope.target.targetNodeRid !== recovery.targetNodeRid
359
- || envelope.target.targetNodeGeneration !== recovery.targetNodeGeneration
360
- || envelope.target.descriptorVersion !== status.descriptorRevision.toString()
355
+ envelope.targetMeshName !== recovery.targetMeshName ||
356
+ envelope.target.stableType !== recovery.stableType ||
357
+ envelope.target.targetSpotId !== recovery.spotId ||
358
+ envelope.target.targetNodeRid !== recovery.targetNodeRid ||
359
+ envelope.target.targetNodeGeneration !== recovery.targetNodeGeneration ||
360
+ envelope.target.descriptorVersion !== status.descriptorRevision.toString()
361
361
  ) {
362
362
  const creationStore = this.options.creationStore;
363
363
  if (creationStore === undefined) {
@@ -366,20 +366,23 @@ export class ZLinkStatefulAuthorityRouteRuntime {
366
366
  );
367
367
  return;
368
368
  }
369
- const aborted = await creationStore.abort({
370
- key: { kind: 'instance_spot', globalId: recovery.spotId },
371
- reservationId: recovery.pending.reservationId,
372
- expectedStoreVersion: recovery.pending.storeVersion,
373
- target: {
374
- meshName: recovery.pending.meshName,
375
- nodeRid: recovery.pending.nodeRid as never,
376
- nodeLifecycleGeneration: recovery.pending.nodeGeneration,
377
- owner: {
378
- ownerId: recovery.pending.ownerId,
379
- leaseGeneration: recovery.pending.ownerLeaseGeneration
369
+ const aborted = await creationStore.abort(
370
+ {
371
+ key: { kind: 'instance_spot', globalId: recovery.spotId },
372
+ reservationId: recovery.pending.reservationId,
373
+ expectedStoreVersion: recovery.pending.storeVersion,
374
+ target: {
375
+ meshName: recovery.pending.meshName,
376
+ nodeRid: recovery.pending.nodeRid as never,
377
+ nodeLifecycleGeneration: recovery.pending.nodeGeneration,
378
+ owner: {
379
+ ownerId: recovery.pending.ownerId,
380
+ leaseGeneration: recovery.pending.ownerLeaseGeneration
381
+ }
380
382
  }
381
- }
382
- }, signal);
383
+ },
384
+ signal
385
+ );
383
386
  if (aborted.kind === 'aborted' || aborted.kind === 'alreadyAborted') {
384
387
  try {
385
388
  await this.options.relocationStore?.delete(
@@ -392,11 +395,8 @@ export class ZLinkStatefulAuthorityRouteRuntime {
392
395
  }
393
396
  return;
394
397
  }
395
- if ((await sink.recoverPendingInstanceActivation(
396
- envelope,
397
- recovery.pending,
398
- null
399
- )) === false) return;
398
+ if ((await sink.recoverPendingInstanceActivation(envelope, recovery.pending, null)) === false)
399
+ return;
400
400
  }
401
401
 
402
402
  private async readRecoveryEnvelope(
@@ -407,20 +407,15 @@ export class ZLinkStatefulAuthorityRouteRuntime {
407
407
  if (relocationStore === undefined) {
408
408
  throw new Error('Instance activation recovery requires a Relocation Store.');
409
409
  }
410
- const result = await relocationStore.read(
411
- relocationBlobReference(recovery.reference),
412
- signal
413
- );
410
+ const result = await relocationStore.read(relocationBlobReference(recovery.reference), signal);
414
411
  if (result.kind !== 'found') {
415
- throw new Error(
416
- `Instance activation recovery payload '${recovery.reference}' is missing.`
417
- );
412
+ throw new Error(`Instance activation recovery payload '${recovery.reference}' is missing.`);
418
413
  }
419
414
  const payload = Buffer.from(result.bytes);
420
415
  const sha256 = createHash('sha256').update(payload).digest();
421
416
  if (
422
- payload.byteLength !== recovery.encodedSize
423
- || !sha256.equals(Buffer.from(recovery.sha256))
417
+ payload.byteLength !== recovery.encodedSize ||
418
+ !sha256.equals(Buffer.from(recovery.sha256))
424
419
  ) {
425
420
  throw new Error(
426
421
  `Instance activation recovery payload '${recovery.reference}' failed integrity validation.`
@@ -480,9 +475,9 @@ export class ZLinkStatefulAuthorityRouteRuntime {
480
475
  const route = authorityRoute(current);
481
476
  if (route !== undefined) result.set(authorityRouteKey(route), route);
482
477
  if (
483
- current.allocation.state === 'active'
484
- && current.allocation.objectKind === 'actor'
485
- && decodeActorAuthorityIdentity(
478
+ current.allocation.state === 'active' &&
479
+ current.allocation.objectKind === 'actor' &&
480
+ decodeActorAuthorityIdentity(
486
481
  serviceRelocationAuthorityApplicationPayload(current.payload),
487
482
  current.objectGeneration
488
483
  ) !== undefined
@@ -502,14 +497,17 @@ function authorityNeedsExactRead(
502
497
  ): boolean {
503
498
  if (pendingInstanceActivation(snapshot) !== undefined) return true;
504
499
  if (relocationCodec.read(snapshot.payload) !== undefined) return true;
505
- if (decodeServiceReadySpotAuthority(
506
- serviceRelocationAuthorityApplicationPayload(snapshot.payload)
507
- )?.activationRecovery !== undefined) {
500
+ if (
501
+ decodeServiceReadySpotAuthority(serviceRelocationAuthorityApplicationPayload(snapshot.payload))
502
+ ?.activationRecovery !== undefined
503
+ ) {
508
504
  return true;
509
505
  }
510
- return snapshot.allocation.state === 'active'
511
- && snapshot.allocation.objectKind === 'actor'
512
- && decodeActorAuthorityIdentity(snapshot.payload, snapshot.objectGeneration) !== undefined;
506
+ return (
507
+ snapshot.allocation.state === 'active' &&
508
+ snapshot.allocation.objectKind === 'actor' &&
509
+ decodeActorAuthorityIdentity(snapshot.payload, snapshot.objectGeneration) !== undefined
510
+ );
513
511
  }
514
512
 
515
513
  function pendingInstanceActivation(
@@ -519,16 +517,16 @@ function pendingInstanceActivation(
519
517
  const projection = snapshot.pendingCreation;
520
518
  const decoded = decodeServiceInstanceAuthorityPayload(snapshot.payload);
521
519
  if (
522
- allocation.state !== 'reserved'
523
- || allocation.objectKind !== 'instance_spot'
524
- || projection === undefined
525
- || decoded?.state !== 'coldActivating'
526
- || decoded.stableType !== allocation.stableType
527
- || decoded.ownerId !== snapshot.ownerId
528
- || decoded.ownerLeaseGeneration !== snapshot.ownerLeaseGeneration
529
- || decoded.ownerMeshName !== allocation.descriptor.meshName
530
- || decoded.ownerNodeGeneration !== allocation.descriptorLifecycleGeneration
531
- || !routingIdsEqual(decoded.ownerNodeRid, allocation.descriptor.rid)
520
+ allocation.state !== 'reserved' ||
521
+ allocation.objectKind !== 'instance_spot' ||
522
+ projection === undefined ||
523
+ decoded?.state !== 'coldActivating' ||
524
+ decoded.stableType !== allocation.stableType ||
525
+ decoded.ownerId !== snapshot.ownerId ||
526
+ decoded.ownerLeaseGeneration !== snapshot.ownerLeaseGeneration ||
527
+ decoded.ownerMeshName !== allocation.descriptor.meshName ||
528
+ decoded.ownerNodeGeneration !== allocation.descriptorLifecycleGeneration ||
529
+ !routingIdsEqual(decoded.ownerNodeRid, allocation.descriptor.rid)
532
530
  ) {
533
531
  return undefined;
534
532
  }
@@ -561,17 +559,17 @@ function authorityRoute(snapshot: ZLinkAuthoritySnapshot): AppliedAuthorityRoute
561
559
  serviceRelocationAuthorityApplicationPayload(snapshot.payload)
562
560
  );
563
561
  if (
564
- allocation.state !== 'active'
565
- || allocation.objectKind === 'actor'
566
- || allocation.descriptor.meshName.length === 0
567
- || decoded === undefined
568
- || decoded.kind !== allocation.objectKind
569
- || decoded.stableType !== allocation.stableType
570
- || decoded.ownerId !== snapshot.ownerId
571
- || decoded.ownerLeaseGeneration !== snapshot.ownerLeaseGeneration
572
- || decoded.ownerMeshName !== allocation.descriptor.meshName
573
- || decoded.ownerNodeGeneration !== allocation.descriptorLifecycleGeneration
574
- || !routingIdsEqual(decoded.ownerNodeRid, allocation.descriptor.rid)
562
+ allocation.state !== 'active' ||
563
+ allocation.objectKind === 'actor' ||
564
+ allocation.descriptor.meshName.length === 0 ||
565
+ decoded === undefined ||
566
+ decoded.kind !== allocation.objectKind ||
567
+ decoded.stableType !== allocation.stableType ||
568
+ decoded.ownerId !== snapshot.ownerId ||
569
+ decoded.ownerLeaseGeneration !== snapshot.ownerLeaseGeneration ||
570
+ decoded.ownerMeshName !== allocation.descriptor.meshName ||
571
+ decoded.ownerNodeGeneration !== allocation.descriptorLifecycleGeneration ||
572
+ !routingIdsEqual(decoded.ownerNodeRid, allocation.descriptor.rid)
575
573
  ) {
576
574
  return undefined;
577
575
  }
@@ -607,8 +605,9 @@ function authorityRoute(snapshot: ZLinkAuthoritySnapshot): AppliedAuthorityRoute
607
605
  }
608
606
 
609
607
  function authorityRouteKey(route: AppliedAuthorityRoute): string {
610
- return `${route.meshName}\0${route.spotRoute.spot.spotId}\0`
611
- + `${route.spotRoute.spot.generation}`;
608
+ return (
609
+ `${route.meshName}\0${route.spotRoute.spot.spotId}\0` + `${route.spotRoute.spot.generation}`
610
+ );
612
611
  }
613
612
 
614
613
  function sameAppliedRoute(
@@ -616,26 +615,28 @@ function sameAppliedRoute(
616
615
  right: AppliedAuthorityRoute | undefined
617
616
  ): boolean {
618
617
  if (right === undefined) return false;
619
- return left.kind === right.kind
620
- && left.stableType === right.stableType
621
- && left.meshName === right.meshName
622
- && left.instanceRoute.targetNodeRid === right.instanceRoute.targetNodeRid
623
- && left.instanceRoute.targetNodeGeneration === right.instanceRoute.targetNodeGeneration
624
- && left.instanceRoute.authorityOwnerGeneration === right.instanceRoute.authorityOwnerGeneration
625
- && left.instanceRoute.storeVersion === right.instanceRoute.storeVersion;
618
+ return (
619
+ left.kind === right.kind &&
620
+ left.stableType === right.stableType &&
621
+ left.meshName === right.meshName &&
622
+ left.instanceRoute.targetNodeRid === right.instanceRoute.targetNodeRid &&
623
+ left.instanceRoute.targetNodeGeneration === right.instanceRoute.targetNodeGeneration &&
624
+ left.instanceRoute.authorityOwnerGeneration === right.instanceRoute.authorityOwnerGeneration &&
625
+ left.instanceRoute.storeVersion === right.instanceRoute.storeVersion
626
+ );
626
627
  }
627
628
 
628
629
  function asStatefulAuthorityRouteSink(
629
630
  node: ZLinkBackendMeshNode
630
631
  ): StatefulAuthorityRouteSink | undefined {
631
632
  const candidate = node as ZLinkBackendMeshNode & Partial<StatefulAuthorityRouteSink>;
632
- return typeof candidate.rememberSpotRoute === 'function'
633
- && typeof candidate.forgetSpotRoute === 'function'
634
- && typeof candidate.registerInstanceIntent === 'function'
635
- && typeof candidate.forgetInstanceIntent === 'function'
636
- && typeof candidate.recoverInstanceActivation === 'function'
637
- && typeof candidate.completeRecoveredInstanceActivation === 'function'
638
- ? candidate as StatefulAuthorityRouteSink
633
+ return typeof candidate.rememberSpotRoute === 'function' &&
634
+ typeof candidate.forgetSpotRoute === 'function' &&
635
+ typeof candidate.registerInstanceIntent === 'function' &&
636
+ typeof candidate.forgetInstanceIntent === 'function' &&
637
+ typeof candidate.recoverInstanceActivation === 'function' &&
638
+ typeof candidate.completeRecoveredInstanceActivation === 'function'
639
+ ? (candidate as StatefulAuthorityRouteSink)
639
640
  : undefined;
640
641
  }
641
642