@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,6 +1,4 @@
1
- import type {
2
- ApplicationJobRecordLease
3
- } from '../application-jobs/application-ingress-record-owner';
1
+ import type { ApplicationJobRecordLease } from '../application-jobs/application-ingress-record-owner';
4
2
 
5
3
  export type ServiceMailboxDomain = 'application' | 'infrastructure';
6
4
 
@@ -59,12 +57,15 @@ interface DomainState {
59
57
  export class ServiceMailbox {
60
58
  private readonly application: DomainState;
61
59
  private readonly infrastructure: DomainState;
62
- private readonly relocationSeals = new Map<string, {
63
- readonly serial: bigint;
64
- readonly captured: ServiceMailboxRecord[];
65
- readonly held: ServiceMailboxRecord[];
66
- heldBytes: number;
67
- }>();
60
+ private readonly relocationSeals = new Map<
61
+ string,
62
+ {
63
+ readonly serial: bigint;
64
+ readonly captured: ServiceMailboxRecord[];
65
+ readonly held: ServiceMailboxRecord[];
66
+ heldBytes: number;
67
+ }
68
+ >();
68
69
  private readonly relocatedOwners = new Set<string>();
69
70
  private nextClaimSerial = 1n;
70
71
  private nextRelocationSerial = 1n;
@@ -154,10 +155,7 @@ export class ServiceMailbox {
154
155
  }
155
156
  }
156
157
 
157
- release(
158
- claim: ServiceMailboxClaim,
159
- remaining: readonly ServiceMailboxRecord[] = []
160
- ): boolean {
158
+ release(claim: ServiceMailboxClaim, remaining: readonly ServiceMailboxRecord[] = []): boolean {
161
159
  const target = this.domain(claim.domain);
162
160
  const queue = target.owners.get(claim.owner);
163
161
  if (queue === undefined || !queue.claimed || queue.claimSerial !== claim.serial) return false;
@@ -217,7 +215,9 @@ export class ServiceMailbox {
217
215
  return true;
218
216
  }
219
217
 
220
- commitRelocation(seal: ServiceMailboxRelocationSeal): readonly ServiceMailboxRecord[] | undefined {
218
+ commitRelocation(
219
+ seal: ServiceMailboxRelocationSeal
220
+ ): readonly ServiceMailboxRecord[] | undefined {
221
221
  const current = this.relocationSeals.get(seal.owner);
222
222
  if (current === undefined || current.serial !== seal.serial) return undefined;
223
223
  this.relocationSeals.delete(seal.owner);
@@ -5,8 +5,7 @@ const detachedStateLaneResource = new AsyncResource('zlink:service-maintenance-r
5
5
 
6
6
  export type ServiceMaintenanceKind = 'retire' | 'shutdown';
7
7
  export type ServiceMaintenanceState =
8
- | 'serving' | 'preparing' | 'retiring' | 'draining'
9
- | 'completed' | 'blocked' | 'forceStopped';
8
+ 'serving' | 'preparing' | 'retiring' | 'draining' | 'completed' | 'blocked' | 'forceStopped';
10
9
 
11
10
  export interface ServiceRelocationUnit {
12
11
  readonly id: string;
@@ -104,7 +103,10 @@ export class ServiceMaintenanceRuntime {
104
103
  abortSignal?: AbortSignal
105
104
  ): Promise<ServiceMaintenanceSnapshot> {
106
105
  const controller = new AbortController();
107
- const timer = setTimeout(() => controller.abort(new Error('Maintenance deadline exceeded.')), deadlineMs);
106
+ const timer = setTimeout(
107
+ () => controller.abort(new Error('Maintenance deadline exceeded.')),
108
+ deadlineMs
109
+ );
108
110
  const abort = () => controller.abort(abortSignal?.reason);
109
111
  if (abortSignal?.aborted === true) {
110
112
  abort();
@@ -113,7 +115,7 @@ export class ServiceMaintenanceRuntime {
113
115
  }
114
116
  try {
115
117
  this.transition('preparing');
116
- if (!await this.options.preflight(kind, controller.signal)) {
118
+ if (!(await this.options.preflight(kind, controller.signal))) {
117
119
  return await this.transitionAsync('blocked');
118
120
  }
119
121
  if (kind === 'retire') {
@@ -141,10 +143,7 @@ export class ServiceMaintenanceRuntime {
141
143
  }
142
144
  }
143
145
 
144
- private async runUnits(
145
- signal: AbortSignal,
146
- stopStartingSignal?: AbortSignal
147
- ): Promise<void> {
146
+ private async runUnits(signal: AbortSignal, stopStartingSignal?: AbortSignal): Promise<void> {
148
147
  const pending = new Set<Promise<void>>();
149
148
  for (;;) {
150
149
  const queued = await this.lane.run(() => this.units.length > 0);
@@ -155,7 +154,7 @@ export class ServiceMaintenanceRuntime {
155
154
  stopStartingSignal.throwIfAborted();
156
155
  }
157
156
  let admitted = false;
158
- for (let index = 0;;) {
157
+ for (let index = 0; ;) {
159
158
  if (stopStartingSignal?.aborted === true) break;
160
159
  const unit = await this.lane.run(() => this.units.at(index));
161
160
  if (unit === undefined) break;
@@ -173,14 +172,16 @@ export class ServiceMaintenanceRuntime {
173
172
  if (!claim.claimed || claim.publication === undefined) continue;
174
173
  admitted = true;
175
174
  let running!: Promise<void>;
176
- running = startOutsideStateLane(() => unit.relocate(signal).finally(async () => {
177
- const publication = await this.lane.run(() => {
178
- this.activeOutbound--;
179
- pending.delete(running);
180
- return this.publishCore();
181
- });
182
- this.notify(publication);
183
- }));
175
+ running = startOutsideStateLane(() =>
176
+ unit.relocate(signal).finally(async () => {
177
+ const publication = await this.lane.run(() => {
178
+ this.activeOutbound--;
179
+ pending.delete(running);
180
+ return this.publishCore();
181
+ });
182
+ this.notify(publication);
183
+ })
184
+ );
184
185
  pending.add(running);
185
186
  this.notify(claim.publication);
186
187
  }
@@ -197,7 +198,9 @@ export class ServiceMaintenanceRuntime {
197
198
  this.publish();
198
199
  }
199
200
 
200
- private async transitionAsync(state: ServiceMaintenanceState): Promise<ServiceMaintenanceSnapshot> {
201
+ private async transitionAsync(
202
+ state: ServiceMaintenanceState
203
+ ): Promise<ServiceMaintenanceSnapshot> {
201
204
  const publication = await this.lane.run(() => {
202
205
  this.state = state;
203
206
  return this.publishCore();
@@ -236,7 +239,5 @@ export function classifyRelocationRecovery(
236
239
  inventoryMatches: boolean
237
240
  ): 'resume' | 'orphan' | 'relocationDataLost' {
238
241
  if (!publishedReference) return payloadPresent ? 'orphan' : 'resume';
239
- return payloadPresent && checksumMatches && inventoryMatches
240
- ? 'resume'
241
- : 'relocationDataLost';
242
+ return payloadPresent && checksumMatches && inventoryMatches ? 'resume' : 'relocationDataLost';
242
243
  }
@@ -1,9 +1,7 @@
1
1
  const MAX_METADATA_BYTES = 1024;
2
2
  const FATAL_UTF8 = new TextDecoder('utf-8', { fatal: true });
3
3
 
4
- export function encodeServiceMetadataFrame(
5
- entries: ReadonlyMap<string, string>
6
- ): Buffer {
4
+ export function encodeServiceMetadataFrame(entries: ReadonlyMap<string, string>): Buffer {
7
5
  if (entries.size > 0xff) {
8
6
  throw new RangeError('Application metadata contains more than 255 entries.');
9
7
  }
@@ -61,12 +59,7 @@ export function validateServiceMetadataFrame(frame: Uint8Array): Buffer {
61
59
  return Buffer.from(bytes);
62
60
  }
63
61
 
64
- function textBytes(
65
- value: string,
66
- minimum: number,
67
- maximum: number,
68
- name: string
69
- ): Buffer {
62
+ function textBytes(value: string, minimum: number, maximum: number, name: string): Buffer {
70
63
  const bytes = Buffer.from(value, 'utf8');
71
64
  if (bytes.byteLength < minimum || bytes.byteLength > maximum || bytes.includes(0)) {
72
65
  throw new RangeError(`${name} must contain ${minimum}..${maximum} UTF-8 bytes without NUL.`);
@@ -8,11 +8,11 @@ import type {
8
8
  ZLinkLocationOwnerToken,
9
9
  ZLinkMeshNodeDescriptorKey
10
10
  } from '../locations/internal-location-contracts';
11
- import type { ZLinkAuthorityStore, ZLinkObjectCreationStore } from '../locations/internal-store-contracts';
12
- import {
13
- inventoryDigest,
14
- type ServiceRelocationEnvelope
15
- } from './service-relocation-runtime';
11
+ import type {
12
+ ZLinkAuthorityStore,
13
+ ZLinkObjectCreationStore
14
+ } from '../locations/internal-store-contracts';
15
+ import { inventoryDigest, type ServiceRelocationEnvelope } from './service-relocation-runtime';
16
16
 
17
17
  export interface ServiceRelocationAggregateParticipantPlan {
18
18
  readonly key: ZLinkAuthorityKey;
@@ -39,7 +39,8 @@ export interface ServicePreparedRelocationAggregate {
39
39
  type AggregateStore = Pick<
40
40
  ZLinkObjectCreationStore,
41
41
  'prepareAggregate' | 'commitAggregate' | 'abortAggregate'
42
- > & Pick<ZLinkAuthorityStore, 'readAuthority'>;
42
+ > &
43
+ Pick<ZLinkAuthorityStore, 'readAuthority'>;
43
44
 
44
45
  const MAX_PREPARE_CONFLICT_ATTEMPTS = 8;
45
46
 
@@ -76,7 +77,7 @@ export class ServiceRelocationAggregateCommitter {
76
77
  // A heartbeat can change one of those versions while every authority
77
78
  // row remains the exact Store-confirmed value in this plan. Retry only
78
79
  // that coordination loss; a changed authority row leaves immediately.
79
- if (!await this.authorityStoreVersionsUnchanged(plan, signal)) break;
80
+ if (!(await this.authorityStoreVersionsUnchanged(plan, signal))) break;
80
81
  signal?.throwIfAborted();
81
82
  result = await this.store.prepareAggregate(request, signal);
82
83
  }
@@ -84,8 +85,8 @@ export class ServiceRelocationAggregateCommitter {
84
85
  throw new Error(`Location Store rejected relocation aggregate prepare: ${result.kind}.`);
85
86
  }
86
87
  if (
87
- result.fence.aggregateId.value !== aggregateId.value
88
- || result.fence.aggregateGeneration !== plan.envelope.aggregateGeneration
88
+ result.fence.aggregateId.value !== aggregateId.value ||
89
+ result.fence.aggregateGeneration !== plan.envelope.aggregateGeneration
89
90
  ) {
90
91
  throw new Error('Location Store returned a different relocation aggregate fence.');
91
92
  }
@@ -99,8 +100,8 @@ export class ServiceRelocationAggregateCommitter {
99
100
  for (const participant of plan.participants) {
100
101
  const current = await this.store.readAuthority(participant.key, signal);
101
102
  if (
102
- current.kind !== 'snapshot'
103
- || current.storeVersion.value !== participant.expected.storeVersion.value
103
+ current.kind !== 'snapshot' ||
104
+ current.storeVersion.value !== participant.expected.storeVersion.value
104
105
  ) {
105
106
  return false;
106
107
  }
@@ -125,10 +126,7 @@ export class ServiceRelocationAggregateCommitter {
125
126
  return await this.readCommittedParticipants(prepared.plan, signal);
126
127
  }
127
128
 
128
- async abort(
129
- prepared: ServicePreparedRelocationAggregate,
130
- signal?: AbortSignal
131
- ): Promise<void> {
129
+ async abort(prepared: ServicePreparedRelocationAggregate, signal?: AbortSignal): Promise<void> {
132
130
  const result = await this.store.abortAggregate(prepared.fence, signal);
133
131
  if (result.kind !== 'aborted' && result.kind !== 'alreadyAborted') {
134
132
  throw new Error(`Location Store rejected relocation aggregate abort: ${result.kind}.`);
@@ -150,25 +148,27 @@ export class ServiceRelocationAggregateCommitter {
150
148
  for (const participant of plan.participants) {
151
149
  const current = await this.store.readAuthority(participant.key, signal);
152
150
  if (
153
- current.kind !== 'snapshot'
154
- || current.objectGeneration !== participant.expected.objectGeneration
155
- || current.storeVersion.value === participant.expected.storeVersion.value
156
- || !Buffer.from(current.payload).equals(Buffer.from(participant.authorityPayload))
151
+ current.kind !== 'snapshot' ||
152
+ current.objectGeneration !== participant.expected.objectGeneration ||
153
+ current.storeVersion.value === participant.expected.storeVersion.value ||
154
+ !Buffer.from(current.payload).equals(Buffer.from(participant.authorityPayload))
157
155
  ) {
158
- throw new Error('Committed relocation aggregate does not match its exact participant plan.');
156
+ throw new Error(
157
+ 'Committed relocation aggregate does not match its exact participant plan.'
158
+ );
159
159
  }
160
160
  if (participant.ownerTransition === 'newOwner') {
161
161
  if (
162
- current.ownerId !== plan.targetOwner.ownerId
163
- || current.ownerLeaseGeneration !== plan.targetOwner.leaseGeneration
164
- || current.authorityOwnerGeneration <= participant.expected.authorityOwnerGeneration
162
+ current.ownerId !== plan.targetOwner.ownerId ||
163
+ current.ownerLeaseGeneration !== plan.targetOwner.leaseGeneration ||
164
+ current.authorityOwnerGeneration <= participant.expected.authorityOwnerGeneration
165
165
  ) {
166
166
  throw new Error('Committed relocation participant has a different owner fence.');
167
167
  }
168
168
  } else if (
169
- current.ownerId !== participant.expected.ownerId
170
- || current.ownerLeaseGeneration !== participant.expected.ownerLeaseGeneration
171
- || current.authorityOwnerGeneration !== participant.expected.authorityOwnerGeneration
169
+ current.ownerId !== participant.expected.ownerId ||
170
+ current.ownerLeaseGeneration !== participant.expected.ownerLeaseGeneration ||
171
+ current.authorityOwnerGeneration !== participant.expected.authorityOwnerGeneration
172
172
  ) {
173
173
  throw new Error('Preserved relocation participant changed its owner fence.');
174
174
  }
@@ -181,21 +181,22 @@ export class ServiceRelocationAggregateCommitter {
181
181
  function validateAndEncodeParticipants(
182
182
  plan: ServiceRelocationAggregatePlan
183
183
  ): readonly ZLinkAggregateParticipant[] {
184
- const envelopeByKey = new Map(plan.envelope.participants.map(value => [value.key, value]));
184
+ const envelopeByKey = new Map(plan.envelope.participants.map((value) => [value.key, value]));
185
185
  const ordered = [...plan.participants].sort((left, right) =>
186
- left.key.value.localeCompare(right.key.value));
186
+ left.key.value.localeCompare(right.key.value)
187
+ );
187
188
  if (
188
- ordered.length !== plan.envelope.participants.length
189
- || new Set(ordered.map(({ key }) => key.value)).size !== ordered.length
189
+ ordered.length !== plan.envelope.participants.length ||
190
+ new Set(ordered.map(({ key }) => key.value)).size !== ordered.length
190
191
  ) {
191
192
  throw new TypeError('Relocation aggregate plan must cover every participant exactly once.');
192
193
  }
193
- return ordered.map(participant => {
194
+ return ordered.map((participant) => {
194
195
  const envelope = envelopeByKey.get(participant.key.value);
195
196
  if (
196
- envelope === undefined
197
- || envelope.objectGeneration !== participant.expected.objectGeneration
198
- || envelope.authorityOwnerGeneration !== participant.expected.authorityOwnerGeneration
197
+ envelope === undefined ||
198
+ envelope.objectGeneration !== participant.expected.objectGeneration ||
199
+ envelope.authorityOwnerGeneration !== participant.expected.authorityOwnerGeneration
199
200
  ) {
200
201
  throw new TypeError('Relocation aggregate participant fence differs from its envelope.');
201
202
  }
@@ -210,8 +211,10 @@ function validateAndEncodeParticipants(
210
211
  }
211
212
 
212
213
  function aggregateIdentity(value: string): ZLinkAggregateId {
213
- if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/.test(value)
214
- || /^0{8}-0{4}-0{4}-0{4}-0{12}$/.test(value)) {
214
+ if (
215
+ !/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/.test(value) ||
216
+ /^0{8}-0{4}-0{4}-0{4}-0{12}$/.test(value)
217
+ ) {
215
218
  throw new TypeError('Relocation aggregate id must be a lowercase non-zero 128-bit identity.');
216
219
  }
217
220
  return { value } as ZLinkAggregateId;
@@ -6,10 +6,7 @@ export interface ServiceRelocationStaging {
6
6
  }
7
7
 
8
8
  export interface ServiceRelocationRestoreOwner<TStaging extends ServiceRelocationStaging> {
9
- prepare(
10
- envelope: ServiceRelocationEnvelope,
11
- signal?: AbortSignal
12
- ): Promise<TStaging>;
9
+ prepare(envelope: ServiceRelocationEnvelope, signal?: AbortSignal): Promise<TStaging>;
13
10
  publish(
14
11
  staging: TStaging,
15
12
  authority: ZLinkAuthoritySnapshot,
@@ -1,4 +1,7 @@
1
- import type { ZLinkAuthorityKey, ZLinkAuthoritySnapshot } from '../locations/internal-location-contracts';
1
+ import type {
2
+ ZLinkAuthorityKey,
3
+ ZLinkAuthoritySnapshot
4
+ } from '../locations/internal-location-contracts';
2
5
  import type {
3
6
  ServiceRelocationRestoreOwner,
4
7
  ServiceRelocationStaging
@@ -80,7 +83,7 @@ export class ServiceRelocationObjectCaptureOwner {
80
83
  memberships: readonly ServiceRelocationMembership[],
81
84
  signal?: AbortSignal
82
85
  ): Promise<ServiceCapturedObjectRelocation> {
83
- if (spot.objectKind !== 'user_spot' || actors.some(actor => actor.objectKind !== 'actor')) {
86
+ if (spot.objectKind !== 'user_spot' || actors.some((actor) => actor.objectKind !== 'actor')) {
84
87
  throw new TypeError('User Spot relocation requires one Spot and only Actor participants.');
85
88
  }
86
89
  if (actors.length !== memberships.length) {
@@ -105,13 +108,7 @@ export class ServiceRelocationObjectCaptureOwner {
105
108
  if (actor.objectKind !== 'actor' || membership.actorKey !== actor.authorityKey) {
106
109
  throw new TypeError('Standalone Actor relocation has an invalid membership identity.');
107
110
  }
108
- return await this.capture(
109
- aggregateId,
110
- aggregateGeneration,
111
- [actor],
112
- [membership],
113
- signal
114
- );
111
+ return await this.capture(aggregateId, aggregateGeneration, [actor], [membership], signal);
115
112
  }
116
113
 
117
114
  async captureInstanceSpotAggregate(
@@ -122,8 +119,10 @@ export class ServiceRelocationObjectCaptureOwner {
122
119
  memberships: readonly ServiceRelocationMembership[],
123
120
  signal?: AbortSignal
124
121
  ): Promise<ServiceCapturedObjectRelocation> {
125
- if (spot.objectKind !== 'instance_spot'
126
- || actors.some(actor => actor.objectKind !== 'actor')) {
122
+ if (
123
+ spot.objectKind !== 'instance_spot' ||
124
+ actors.some((actor) => actor.objectKind !== 'actor')
125
+ ) {
127
126
  throw new TypeError(
128
127
  'Instance Spot relocation requires one Spot and only Actor participants.'
129
128
  );
@@ -170,20 +169,23 @@ export class ServiceRelocationObjectCaptureOwner {
170
169
  authorityOwnerGeneration: unit.authorityOwnerGeneration,
171
170
  applicationState: Buffer.from(await unit.captureApplicationState(signal)),
172
171
  boundSessionState: Buffer.from(work.boundSessionState),
173
- queuedMessages: work.queuedMessages.map(message => ({
172
+ queuedMessages: work.queuedMessages.map((message) => ({
174
173
  sequence: message.sequence,
175
174
  payload: Buffer.from(message.payload)
176
175
  })),
177
- timers: work.timers.map(timer => ({ ...timer }))
176
+ timers: work.timers.map((timer) => ({ ...timer }))
178
177
  }),
179
178
  signal
180
179
  );
181
- return new ServiceCapturedObjectRelocation({
182
- aggregateId,
183
- aggregateGeneration,
184
- participants,
185
- memberships
186
- }, units);
180
+ return new ServiceCapturedObjectRelocation(
181
+ {
182
+ aggregateId,
183
+ aggregateGeneration,
184
+ participants,
185
+ memberships
186
+ },
187
+ units
188
+ );
187
189
  } catch (error) {
188
190
  for (const { unit } of captured.reverse()) await unit.abortSeal();
189
191
  throw error;
@@ -195,13 +197,8 @@ export interface ServiceRelocationHiddenObject {
195
197
  readonly authorityKey: string;
196
198
  }
197
199
 
198
- export interface ServiceRelocationTargetObjectPort<
199
- THidden extends ServiceRelocationHiddenObject
200
- > {
201
- createHidden(
202
- participant: ServiceRelocationParticipant,
203
- signal?: AbortSignal
204
- ): Promise<THidden>;
200
+ export interface ServiceRelocationTargetObjectPort<THidden extends ServiceRelocationHiddenObject> {
201
+ createHidden(participant: ServiceRelocationParticipant, signal?: AbortSignal): Promise<THidden>;
205
202
  restoreApplicationState(
206
203
  hidden: THidden,
207
204
  payload: Uint8Array,
@@ -212,26 +209,14 @@ export interface ServiceRelocationTargetObjectPort<
212
209
  memberships: readonly ServiceRelocationMembership[],
213
210
  signal?: AbortSignal
214
211
  ): Promise<void>;
215
- publish(
216
- hidden: THidden,
217
- authority: ZLinkAuthoritySnapshot,
218
- signal?: AbortSignal
219
- ): Promise<void>;
220
- restoreBoundSession(
221
- hidden: THidden,
222
- payload: Uint8Array,
223
- signal?: AbortSignal
224
- ): Promise<void>;
212
+ publish(hidden: THidden, authority: ZLinkAuthoritySnapshot, signal?: AbortSignal): Promise<void>;
213
+ restoreBoundSession(hidden: THidden, payload: Uint8Array, signal?: AbortSignal): Promise<void>;
225
214
  replayQueuedMessage(
226
215
  hidden: THidden,
227
216
  message: ServiceRelocationQueuedMessage,
228
217
  signal?: AbortSignal
229
218
  ): Promise<void>;
230
- restoreTimer(
231
- hidden: THidden,
232
- timer: ServiceRelocationTimer,
233
- signal?: AbortSignal
234
- ): Promise<void>;
219
+ restoreTimer(hidden: THidden, timer: ServiceRelocationTimer, signal?: AbortSignal): Promise<void>;
235
220
  normalize(
236
221
  hidden: THidden,
237
222
  authority: ZLinkAuthoritySnapshot,
@@ -285,16 +270,18 @@ export class ServiceRelocationObjectRestoreOwner<
285
270
  await mapConcurrentOrdered(
286
271
  participants,
287
272
  this.maxConcurrentCallbacks,
288
- participant => this.target.restoreApplicationState(
289
- hidden.get(participant.key)!,
290
- participant.applicationState,
291
- signal
292
- ),
273
+ (participant) =>
274
+ this.target.restoreApplicationState(
275
+ hidden.get(participant.key)!,
276
+ participant.applicationState,
277
+ signal
278
+ ),
293
279
  signal
294
280
  );
295
281
  await this.target.restoreMemberships(hidden, envelope.memberships, signal);
296
- const spot = envelope.participants.find(({ objectKind }) =>
297
- objectKind === 'user_spot' || objectKind === 'instance_spot');
282
+ const spot = envelope.participants.find(
283
+ ({ objectKind }) => objectKind === 'user_spot' || objectKind === 'instance_spot'
284
+ );
298
285
  const primary = spot ?? envelope.participants[0]!;
299
286
  return {
300
287
  id: `${envelope.aggregateId}:${envelope.aggregateGeneration}`,
@@ -324,11 +311,7 @@ export class ServiceRelocationObjectRestoreOwner<
324
311
  ): Promise<void> {
325
312
  for (const participant of staging.envelope.participants) {
326
313
  const hidden = staging.hidden.get(participant.key)!;
327
- await this.target.restoreBoundSession(
328
- hidden,
329
- participant.boundSessionState,
330
- signal
331
- );
314
+ await this.target.restoreBoundSession(hidden, participant.boundSessionState, signal);
332
315
  for (const message of participant.queuedMessages) {
333
316
  await this.target.replayQueuedMessage(hidden, message, signal);
334
317
  }
@@ -379,8 +362,9 @@ export class ServiceRelocationObjectRestoreOwner<
379
362
  }
380
363
 
381
364
  function validateRelocationShape(envelope: ServiceRelocationEnvelope): void {
382
- const spots = envelope.participants.filter(({ objectKind }) =>
383
- objectKind === 'user_spot' || objectKind === 'instance_spot');
365
+ const spots = envelope.participants.filter(
366
+ ({ objectKind }) => objectKind === 'user_spot' || objectKind === 'instance_spot'
367
+ );
384
368
  const actors = envelope.participants.filter(({ objectKind }) => objectKind === 'actor');
385
369
  if (spots.length === 0 && (actors.length !== 1 || envelope.participants.length !== 1)) {
386
370
  throw new TypeError('Standalone relocation must contain exactly one Actor.');
@@ -420,9 +404,7 @@ async function mapConcurrentOrdered<TInput, TResult>(
420
404
  }
421
405
  }
422
406
  };
423
- await Promise.all(
424
- Array.from({ length: Math.min(concurrency, values.length) }, () => worker())
425
- );
407
+ await Promise.all(Array.from({ length: Math.min(concurrency, values.length) }, () => worker()));
426
408
  if (failure !== undefined) throw failure;
427
409
  return results;
428
410
  }