@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
@@ -39,8 +39,7 @@ export class ZLinkClientServerRuntimeProjection implements ZLinkClientServerRunt
39
39
 
40
40
  constructor(
41
41
  private readonly runtime: RuntimeAccessor,
42
- private readonly hostState: HostStateAccessor =
43
- () => ZLinkFrameworkRuntimeState.Serving
42
+ private readonly hostState: HostStateAccessor = () => ZLinkFrameworkRuntimeState.Serving
44
43
  ) {}
45
44
 
46
45
  snapshot(channelName: string): ZLinkClientServerStatus {
@@ -50,23 +49,30 @@ export class ZLinkClientServerRuntimeProjection implements ZLinkClientServerRunt
50
49
  private snapshotCore(channelName: string): ZLinkClientServerStatus {
51
50
  const topology = this.requireRuntime().clientServerTopology(channelName);
52
51
  if (topology.localRole === undefined) {
53
- throw new ZLinkConfigurationException(`ClientServer channel '${channelName}' is not registered.`);
52
+ throw new ZLinkConfigurationException(
53
+ `ClientServer channel '${channelName}' is not registered.`
54
+ );
54
55
  }
55
56
  const targets = topology.descriptors.map((descriptor): ZLinkClientServerTargetStatus => ({
56
57
  nodeRid: descriptor.serverRoutingId,
57
58
  weight: descriptor.weight,
58
- state: descriptor.state === 'serving' ? ZLinkPeerState.Ready
59
- : descriptor.state === 'retiring' ? ZLinkPeerState.Draining
60
- : descriptor.state === 'preparing' ? ZLinkPeerState.Connecting
61
- : ZLinkPeerState.NotConnected,
62
- unavailableReason: descriptor.state === 'serving' && descriptor.weight > 0
63
- ? undefined
64
- : descriptor.state === 'retiring'
65
- ? ZLinkTopologyReason.Draining
66
- : ZLinkTopologyReason.NoReadyTarget
59
+ state:
60
+ descriptor.state === 'serving'
61
+ ? ZLinkPeerState.Ready
62
+ : descriptor.state === 'retiring'
63
+ ? ZLinkPeerState.Draining
64
+ : descriptor.state === 'preparing'
65
+ ? ZLinkPeerState.Connecting
66
+ : ZLinkPeerState.NotConnected,
67
+ unavailableReason:
68
+ descriptor.state === 'serving' && descriptor.weight > 0
69
+ ? undefined
70
+ : descriptor.state === 'retiring'
71
+ ? ZLinkTopologyReason.Draining
72
+ : ZLinkTopologyReason.NoReadyTarget
67
73
  }));
68
74
  const readyTargetCount = targets.filter(
69
- target => target.state === ZLinkPeerState.Ready && target.weight > 0
75
+ (target) => target.state === ZLinkPeerState.Ready && target.weight > 0
70
76
  ).length;
71
77
  const hostState = this.hostState();
72
78
  const isReady = topologyRuntimeIsReady(hostState, readyTargetCount);
@@ -110,13 +116,16 @@ export class ZLinkClientServerRuntimeProjection implements ZLinkClientServerRunt
110
116
  } catch {
111
117
  // The last complete projection remains valid after native teardown.
112
118
  }
113
- queue.seal({
114
- ...current,
115
- state: ZLinkTopologyState.Stopped,
116
- isReady: false,
117
- sequence: this.sequence,
118
- observedAt: new Date()
119
- }, channelName);
119
+ queue.seal(
120
+ {
121
+ ...current,
122
+ state: ZLinkTopologyState.Stopped,
123
+ isReady: false,
124
+ sequence: this.sequence,
125
+ observedAt: new Date()
126
+ },
127
+ channelName
128
+ );
120
129
  }
121
130
  };
122
131
  this.hostObservers.add(hostObserver);
@@ -154,7 +163,8 @@ export class ZLinkClientServerRuntimeProjection implements ZLinkClientServerRunt
154
163
 
155
164
  private requireRuntime(): ZLinkChannelRuntimeManager {
156
165
  const runtime = this.runtime();
157
- if (runtime === undefined) throw new ZLinkConfigurationException('ClientServer runtime has not started.');
166
+ if (runtime === undefined)
167
+ throw new ZLinkConfigurationException('ClientServer runtime has not started.');
158
168
  return runtime;
159
169
  }
160
170
  }
@@ -165,8 +175,7 @@ export class ZLinkFanoutRuntimeProjection implements ZLinkFanoutRuntime {
165
175
 
166
176
  constructor(
167
177
  private readonly runtime: RuntimeAccessor,
168
- private readonly hostState: HostStateAccessor =
169
- () => ZLinkFrameworkRuntimeState.Serving
178
+ private readonly hostState: HostStateAccessor = () => ZLinkFrameworkRuntimeState.Serving
170
179
  ) {}
171
180
 
172
181
  snapshot(channelName: string): ZLinkFanoutStatus {
@@ -174,21 +183,27 @@ export class ZLinkFanoutRuntimeProjection implements ZLinkFanoutRuntime {
174
183
  }
175
184
 
176
185
  private snapshotCore(channelName: string): ZLinkFanoutStatus {
177
- const publishers = this.requireRuntime().fanoutTopology(channelName).descriptors
178
- .map((descriptor): ZLinkPeerStatus => ({
186
+ const publishers = this.requireRuntime()
187
+ .fanoutTopology(channelName)
188
+ .descriptors.map((descriptor): ZLinkPeerStatus => ({
179
189
  nodeRid: descriptor.publisherRoutingId,
180
- state: descriptor.state === 'serving' ? ZLinkPeerState.Ready
181
- : descriptor.state === 'retiring' ? ZLinkPeerState.Draining
182
- : descriptor.state === 'preparing' ? ZLinkPeerState.Connecting
183
- : ZLinkPeerState.NotConnected,
184
- unavailableReason: descriptor.state === 'serving'
185
- ? undefined
186
- : descriptor.state === 'retiring'
187
- ? ZLinkTopologyReason.Draining
188
- : ZLinkTopologyReason.NoReadyTarget
190
+ state:
191
+ descriptor.state === 'serving'
192
+ ? ZLinkPeerState.Ready
193
+ : descriptor.state === 'retiring'
194
+ ? ZLinkPeerState.Draining
195
+ : descriptor.state === 'preparing'
196
+ ? ZLinkPeerState.Connecting
197
+ : ZLinkPeerState.NotConnected,
198
+ unavailableReason:
199
+ descriptor.state === 'serving'
200
+ ? undefined
201
+ : descriptor.state === 'retiring'
202
+ ? ZLinkTopologyReason.Draining
203
+ : ZLinkTopologyReason.NoReadyTarget
189
204
  }));
190
205
  const readyPublisherCount = publishers.filter(
191
- publisher => publisher.state === ZLinkPeerState.Ready
206
+ (publisher) => publisher.state === ZLinkPeerState.Ready
192
207
  ).length;
193
208
  const hostState = this.hostState();
194
209
  const hostReady = runtimeStateIsReady(hostState);
@@ -235,13 +250,16 @@ export class ZLinkFanoutRuntimeProjection implements ZLinkFanoutRuntime {
235
250
  } catch {
236
251
  // The last complete projection remains valid after native teardown.
237
252
  }
238
- queue.seal({
239
- ...current,
240
- state: ZLinkTopologyState.Stopped,
241
- isReady: false,
242
- sequence: this.sequence,
243
- observedAt: new Date()
244
- }, channelName);
253
+ queue.seal(
254
+ {
255
+ ...current,
256
+ state: ZLinkTopologyState.Stopped,
257
+ isReady: false,
258
+ sequence: this.sequence,
259
+ observedAt: new Date()
260
+ },
261
+ channelName
262
+ );
245
263
  }
246
264
  };
247
265
  this.hostObservers.add(hostObserver);
@@ -275,7 +293,8 @@ export class ZLinkFanoutRuntimeProjection implements ZLinkFanoutRuntime {
275
293
 
276
294
  private requireRuntime(): ZLinkChannelRuntimeManager {
277
295
  const runtime = this.runtime();
278
- if (runtime === undefined) throw new ZLinkConfigurationException('Fanout runtime has not started.');
296
+ if (runtime === undefined)
297
+ throw new ZLinkConfigurationException('Fanout runtime has not started.');
279
298
  return runtime;
280
299
  }
281
300
  }
@@ -32,10 +32,7 @@ export type ZLinkExecutionArea = 'application' | 'infrastructure';
32
32
 
33
33
  const executionAreaStorage = new AsyncLocalStorage<ZLinkExecutionArea>();
34
34
 
35
- export function runZLinkExecutionArea<T>(
36
- area: ZLinkExecutionArea,
37
- operation: () => T
38
- ): T {
35
+ export function runZLinkExecutionArea<T>(area: ZLinkExecutionArea, operation: () => T): T {
39
36
  return executionAreaStorage.run(area, operation);
40
37
  }
41
38
 
@@ -140,7 +137,10 @@ export class ZLinkSpotSerialTurn {
140
137
  return;
141
138
  }
142
139
  await Promise.race([
143
- owner.then(() => undefined, () => undefined),
140
+ owner.then(
141
+ () => undefined,
142
+ () => undefined
143
+ ),
144
144
  this.suspended
145
145
  ]);
146
146
  }
@@ -169,12 +169,8 @@ export function runZLinkSpotSerialTurn<T>(
169
169
  turn: ZLinkSpotSerialTurn,
170
170
  operation: () => Promise<T> | T
171
171
  ): Promise<T> {
172
- return runZLinkExecutionArea(
173
- 'application',
174
- () => spotSerialTurnStorage.run(
175
- { executor, turnId, turn },
176
- async () => operation()
177
- )
172
+ return runZLinkExecutionArea('application', () =>
173
+ spotSerialTurnStorage.run({ executor, turnId, turn }, async () => operation())
178
174
  );
179
175
  }
180
176
 
@@ -194,18 +190,13 @@ export function captureZLinkSpotSerialTurn(
194
190
  /** Returns the physical Spot owner only while its captured turn owns the gate. */
195
191
  export function currentZLinkSpotSerialSourceId(): unknown {
196
192
  const current = spotSerialTurnStorage.getStore();
197
- if (
198
- current === undefined
199
- || !current.executor.isActiveTurn(current.turn, current.turnId)
200
- ) {
193
+ if (current === undefined || !current.executor.isActiveTurn(current.turn, current.turnId)) {
201
194
  return undefined;
202
195
  }
203
196
  return current.executor.sourceSpotId;
204
197
  }
205
198
 
206
- export function requireZLinkYieldTurn(
207
- capturedTurn?: ZLinkSpotSerialTurn
208
- ): ZLinkSpotSerialTurn {
199
+ export function requireZLinkYieldTurn(capturedTurn?: ZLinkSpotSerialTurn): ZLinkSpotSerialTurn {
209
200
  const turn = capturedTurn ?? captureZLinkSpotSerialTurn();
210
201
  if (turn === undefined || !turn.yieldAllowed) {
211
202
  throw new ZLinkConfigurationException(
@@ -227,15 +218,19 @@ export function captureZLinkExecutionTurn(): ZLinkCapturedExecutionTurn | undefi
227
218
  }
228
219
  return {
229
220
  yieldPromise: <T>(pending: Promise<T>) => current.turn.yieldPromise(pending),
230
- post: (callback: () => void) => { void current.executor.post(callback); }
221
+ post: (callback: () => void) => {
222
+ void current.executor.post(callback);
223
+ }
231
224
  };
232
225
  }
233
226
 
234
227
  export function isCurrentZLinkSpotSerialTurn(executor: ZLinkSpotSerialTurnExecutorLike): boolean {
235
228
  const current = spotSerialTurnStorage.getStore();
236
- return current !== undefined
237
- && current.executor === executor
238
- && executor.isActiveTurn(current.turn, current.turnId);
229
+ return (
230
+ current !== undefined &&
231
+ current.executor === executor &&
232
+ executor.isActiveTurn(current.turn, current.turnId)
233
+ );
239
234
  }
240
235
 
241
236
  export interface ZLinkExecutionBarrierSeal {
@@ -306,10 +301,7 @@ export class ZLinkExecutionBarrier {
306
301
  return seal;
307
302
  }
308
303
 
309
- async waitForQuiescence(
310
- seal: ZLinkExecutionBarrierSeal,
311
- signal?: AbortSignal
312
- ): Promise<void> {
304
+ async waitForQuiescence(seal: ZLinkExecutionBarrierSeal, signal?: AbortSignal): Promise<void> {
313
305
  this.requireCurrent(seal);
314
306
  if (this.activeClaims === 0) return;
315
307
  if (signal?.aborted === true) throw signal.reason;
@@ -12,10 +12,11 @@ export interface ZLinkSerialSchedulerOptions {
12
12
  readonly lifecycleBurstLimit?: number;
13
13
  }
14
14
 
15
- export const ZLINK_DEFAULT_SERIAL_SCHEDULER_OPTIONS: Required<ZLinkSerialSchedulerOptions> = Object.freeze({
16
- ownerTimeBudget: 10,
17
- lifecycleBurstLimit: 8,
18
- });
15
+ export const ZLINK_DEFAULT_SERIAL_SCHEDULER_OPTIONS: Required<ZLinkSerialSchedulerOptions> =
16
+ Object.freeze({
17
+ ownerTimeBudget: 10,
18
+ lifecycleBurstLimit: 8
19
+ });
19
20
 
20
21
  export interface ZLinkSerialWorkRecord<T> {
21
22
  readonly acceptedSequence: bigint;
@@ -102,10 +103,7 @@ export class ZLinkSerialExecutionQueue {
102
103
  /**
103
104
  * Enqueues a continuation for an already-admitted owner turn.
104
105
  */
105
- submitContinuation<T>(
106
- operation: () => Promise<T> | T,
107
- context?: unknown
108
- ): Promise<T> {
106
+ submitContinuation<T>(operation: () => Promise<T> | T, context?: unknown): Promise<T> {
109
107
  try {
110
108
  return this.admit(operation, { lane: 'application' }, context);
111
109
  } catch (error) {
@@ -125,12 +123,7 @@ export class ZLinkSerialExecutionQueue {
125
123
  context?: unknown,
126
124
  preparation?: ZLinkSerialWorkPreparation
127
125
  ): Promise<T> {
128
- return this.admit(
129
- operation,
130
- { ...options, lane: 'application' },
131
- context,
132
- preparation
133
- );
126
+ return this.admit(operation, { ...options, lane: 'application' }, context, preparation);
134
127
  }
135
128
 
136
129
  /**
@@ -160,14 +153,14 @@ export class ZLinkSerialExecutionQueue {
160
153
  }
161
154
 
162
155
  get hasPendingWork(): boolean {
163
- return this.draining
164
- || this.application.records.length > 0
165
- || this.lifecycle.records.length > 0;
156
+ return (
157
+ this.draining || this.application.records.length > 0 || this.lifecycle.records.length > 0
158
+ );
166
159
  }
167
160
 
168
161
  whenIdle(): Promise<void> {
169
162
  if (!this.hasPendingWork) return Promise.resolve();
170
- return new Promise(resolve => this.idleWaiters.push(resolve));
163
+ return new Promise((resolve) => this.idleWaiters.push(resolve));
171
164
  }
172
165
 
173
166
  /** Stops new submissions while allowing the accepted FIFO to finish. */
@@ -257,8 +250,10 @@ export class ZLinkSerialExecutionQueue {
257
250
  const record = selection.record;
258
251
  if (selection.lane === 'lifecycle') {
259
252
  const applicationHead = this.application.records[0]!;
260
- if (this.application.records.length > 0
261
- && !this.cancelPreparationForRearbitration(applicationHead)) {
253
+ if (
254
+ this.application.records.length > 0 &&
255
+ !this.cancelPreparationForRearbitration(applicationHead)
256
+ ) {
262
257
  waitingForPreparation = true;
263
258
  break;
264
259
  }
@@ -268,8 +263,7 @@ export class ZLinkSerialExecutionQueue {
268
263
  waitingForPreparation = true;
269
264
  break;
270
265
  }
271
- if (record.preparationState === 'pending'
272
- || record.preparationState === 'canceling') {
266
+ if (record.preparationState === 'pending' || record.preparationState === 'canceling') {
273
267
  waitingForPreparation = true;
274
268
  break;
275
269
  }
@@ -295,8 +289,10 @@ export class ZLinkSerialExecutionQueue {
295
289
  } finally {
296
290
  this.draining = false;
297
291
  this.claimStartedAt = undefined;
298
- if (!waitingForPreparation
299
- && (this.application.records.length > 0 || this.lifecycle.records.length > 0)) {
292
+ if (
293
+ !waitingForPreparation &&
294
+ (this.application.records.length > 0 || this.lifecycle.records.length > 0)
295
+ ) {
300
296
  this.scheduleDrain();
301
297
  } else {
302
298
  if (this.application.records.length === 0 && this.lifecycle.records.length === 0) {
@@ -306,10 +302,12 @@ export class ZLinkSerialExecutionQueue {
306
302
  }
307
303
  }
308
304
 
309
- private selectNext(): {
310
- readonly lane: ZLinkSerialWorkLane;
311
- readonly record: SerialWorkRecord<unknown>;
312
- } | undefined {
305
+ private selectNext():
306
+ | {
307
+ readonly lane: ZLinkSerialWorkLane;
308
+ readonly record: SerialWorkRecord<unknown>;
309
+ }
310
+ | undefined {
313
311
  const applicationReady = this.application.records.length > 0;
314
312
  const lifecycleReady = this.lifecycle.records.length > 0;
315
313
  if (!applicationReady && !lifecycleReady) return undefined;
@@ -329,9 +327,7 @@ export class ZLinkSerialExecutionQueue {
329
327
  readonly lane: ZLinkSerialWorkLane;
330
328
  readonly record: SerialWorkRecord<unknown>;
331
329
  }): ZLinkSerialWorkRecord<unknown> {
332
- const record = selection.lane === 'lifecycle'
333
- ? this.takeLifecycle()
334
- : this.takeApplication();
330
+ const record = selection.lane === 'lifecycle' ? this.takeLifecycle() : this.takeApplication();
335
331
  if (record !== selection.record) {
336
332
  throw new Error('The selected serial work record changed before owner claim.');
337
333
  }
@@ -340,10 +336,7 @@ export class ZLinkSerialExecutionQueue {
340
336
 
341
337
  private takeLifecycle(): ZLinkSerialWorkRecord<unknown> {
342
338
  this.lifecycleStreak += 1;
343
- if (
344
- this.application.records.length > 0
345
- && this.lifecycleStreak >= this.lifecycleBurstLimit
346
- ) {
339
+ if (this.application.records.length > 0 && this.lifecycleStreak >= this.lifecycleBurstLimit) {
347
340
  this.lifecycleDebt = true;
348
341
  }
349
342
  return this.lifecycle.records.shift()!;
@@ -375,7 +368,7 @@ export class ZLinkSerialExecutionQueue {
375
368
  record.preparationController = undefined;
376
369
  this.scheduleDrain();
377
370
  },
378
- error => {
371
+ (error) => {
379
372
  if (record.preparationState === 'canceling' || controller.signal.aborted) {
380
373
  preparation.cancel();
381
374
  record.preparationState = 'idle';
@@ -390,9 +383,7 @@ export class ZLinkSerialExecutionQueue {
390
383
  }
391
384
 
392
385
  /** Returns false while an outstanding readiness attempt is being canceled. */
393
- private cancelPreparationForRearbitration(
394
- record: SerialWorkRecord<unknown>
395
- ): boolean {
386
+ private cancelPreparationForRearbitration(record: SerialWorkRecord<unknown>): boolean {
396
387
  if (record.preparation === undefined || record.preparationState === 'idle') return true;
397
388
  if (record.preparationState === 'ready') {
398
389
  record.preparation.cancel();
@@ -438,5 +429,5 @@ function validateNonNegative(value: number, field: string): void {
438
429
  }
439
430
 
440
431
  function macrotaskBoundary(): Promise<void> {
441
- return new Promise(resolve => setImmediate(resolve));
432
+ return new Promise((resolve) => setImmediate(resolve));
442
433
  }
@@ -66,8 +66,8 @@ export class ZLinkStateLane {
66
66
  throwIfReentrant(): void {
67
67
  if (this.isOnLane) {
68
68
  throw new Error(
69
- 'This code already runs on the state lane it is trying to enter. Call the component\'s '
70
- + 'private state method directly instead of re-entering its public surface.'
69
+ "This code already runs on the state lane it is trying to enter. Call the component's " +
70
+ 'private state method directly instead of re-entering its public surface.'
71
71
  );
72
72
  }
73
73
  }
@@ -89,17 +89,28 @@ export function canonicalActorJoinHandoffId(input: {
89
89
  }): string {
90
90
  const actor = textBytes(input.actorId, 'actorId');
91
91
  if (actor.byteLength > 0xffff) throw new RangeError('Actor id exceeds u16 bytes.');
92
- const digest = createHash('sha256').update(Buffer.concat([
93
- Buffer.from(input.sourceActorNodeRid),
94
- u16(actor.byteLength),
95
- actor,
96
- u64(input.actorGeneration),
97
- u64(input.sourceActorNodeGeneration),
98
- u64(input.correlation)
99
- ])).digest().subarray(0, 16);
92
+ const digest = createHash('sha256')
93
+ .update(
94
+ Buffer.concat([
95
+ Buffer.from(input.sourceActorNodeRid),
96
+ u16(actor.byteLength),
97
+ actor,
98
+ u64(input.actorGeneration),
99
+ u64(input.sourceActorNodeGeneration),
100
+ u64(input.correlation)
101
+ ])
102
+ )
103
+ .digest()
104
+ .subarray(0, 16);
100
105
  return Buffer.from([
101
- digest[3]!, digest[2]!, digest[1]!, digest[0]!,
102
- digest[5]!, digest[4]!, digest[7]!, digest[6]!,
106
+ digest[3]!,
107
+ digest[2]!,
108
+ digest[1]!,
109
+ digest[0]!,
110
+ digest[5]!,
111
+ digest[4]!,
112
+ digest[7]!,
113
+ digest[6]!,
103
114
  ...digest.subarray(8)
104
115
  ]).toString('hex');
105
116
  }
@@ -116,10 +127,10 @@ export function encodeCanonicalActorJoinRecoverySavedWork(
116
127
  if (request.byteLength > MAXIMUM_MESSAGE_BYTES || reply.byteLength > MAXIMUM_MESSAGE_BYTES) {
117
128
  throw new RangeError('Actor Join recovery message exceeds 1 MiB.');
118
129
  }
119
- const replyContentType = operationId === undefined ? null : requireText(
120
- input.replyContentType,
121
- 'Actor Join reply content type'
122
- );
130
+ const replyContentType =
131
+ operationId === undefined
132
+ ? null
133
+ : requireText(input.replyContentType, 'Actor Join reply content type');
123
134
  const metadata = encodeMetadataJson({
124
135
  Request: {
125
136
  ActorId: requireText(input.actorId, 'Actor id'),
@@ -209,21 +220,23 @@ export function encodeCanonicalActorJoinRecoverySavedWork(
209
220
  if (metadata.byteLength > MAXIMUM_METADATA_BYTES) {
210
221
  throw new RangeError('Actor Join recovery metadata exceeds 256 KiB.');
211
222
  }
212
- return Buffer.from(encodeGeneratedZljrRecordV1({
213
- source: {
214
- nodeRid: Buffer.from(encodeRoutingIdStorageHex(input.sourceNodeRid), 'utf8'),
215
- nodeGeneration: nonZeroU64(input.actorNodeGeneration, 'source node generation'),
216
- ownerId: input.coordinator.ownerId,
217
- ownerLeaseGeneration: nonZeroU64(
218
- input.coordinator.leaseGeneration,
219
- 'source owner lease generation'
220
- )
221
- },
222
- operation: { high: 0n, low: 0n },
223
- metadata,
224
- request,
225
- reply
226
- }));
223
+ return Buffer.from(
224
+ encodeGeneratedZljrRecordV1({
225
+ source: {
226
+ nodeRid: Buffer.from(encodeRoutingIdStorageHex(input.sourceNodeRid), 'utf8'),
227
+ nodeGeneration: nonZeroU64(input.actorNodeGeneration, 'source node generation'),
228
+ ownerId: input.coordinator.ownerId,
229
+ ownerLeaseGeneration: nonZeroU64(
230
+ input.coordinator.leaseGeneration,
231
+ 'source owner lease generation'
232
+ )
233
+ },
234
+ operation: { high: 0n, low: 0n },
235
+ metadata,
236
+ request,
237
+ reply
238
+ })
239
+ );
227
240
  }
228
241
 
229
242
  export function decodeCanonicalActorJoinRecoverySavedWork(
@@ -241,17 +254,20 @@ export function decodeCanonicalActorJoinRecoverySavedWork(
241
254
  }
242
255
  const payload = frozen.applicationPayload;
243
256
  if (
244
- frozen.recordKind !== 1
245
- || frozen.sourceKind !== 1
246
- || payload?.packetName !== RECOVERY_PACKET_NAME
247
- || payload.contentType !== RECOVERY_CONTENT_TYPE
257
+ frozen.recordKind !== 1 ||
258
+ frozen.sourceKind !== 1 ||
259
+ payload?.packetName !== RECOVERY_PACKET_NAME ||
260
+ payload.contentType !== RECOVERY_CONTENT_TYPE
248
261
  ) {
249
262
  return undefined;
250
263
  }
251
264
  throw error;
252
265
  }
253
266
  const metadataBytes = Buffer.from(record.metadata);
254
- const metadata = JSON.parse(quoteJsonIntegers(metadataBytes.toString('utf8'))) as Record<string, unknown>;
267
+ const metadata = JSON.parse(quoteJsonIntegers(metadataBytes.toString('utf8'))) as Record<
268
+ string,
269
+ unknown
270
+ >;
255
271
  const requestValue = object(metadata.Request, 'Request');
256
272
  const handoffId = text(requestValue.HandoffId, 'Request.HandoffId');
257
273
  const relocationAggregateId = canonicalUuid(
@@ -262,10 +278,7 @@ export function decodeCanonicalActorJoinRecoverySavedWork(
262
278
  requestValue.ReservedPayloadBytes,
263
279
  'Request.ReservedPayloadBytes'
264
280
  );
265
- if (
266
- canonicalUuid(handoffId) !== relocationAggregateId
267
- || reservationToken !== handoffId
268
- ) {
281
+ if (canonicalUuid(handoffId) !== relocationAggregateId || reservationToken !== handoffId) {
269
282
  throw new TypeError('Canonical Actor Join recovery reservation identity changed.');
270
283
  }
271
284
  const request = Buffer.from(record.request);
@@ -329,9 +342,9 @@ export function routingIdBytes(value: RoutingId): Buffer {
329
342
 
330
343
  function encodeMetadataJson(value: unknown): Buffer {
331
344
  const marker = '__zlink_u64__:';
332
- const encoded = JSON.stringify(value, (_key, item) => typeof item === 'bigint'
333
- ? `${marker}${item.toString()}`
334
- : item);
345
+ const encoded = JSON.stringify(value, (_key, item) =>
346
+ typeof item === 'bigint' ? `${marker}${item.toString()}` : item
347
+ );
335
348
  return Buffer.from(encoded.replace(new RegExp(`"${marker}(\\d+)"`, 'gu'), '$1'), 'utf8');
336
349
  }
337
350
 
@@ -373,8 +386,10 @@ function canonicalUuid(value: string): string {
373
386
  if (!/^[0-9a-f]{32}$/u.test(hex) || /^0+$/u.test(hex)) {
374
387
  throw new TypeError('Actor Join relocation id is invalid.');
375
388
  }
376
- return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}`
377
- + `-${hex.slice(16, 20)}-${hex.slice(20)}`;
389
+ return (
390
+ `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}` +
391
+ `-${hex.slice(16, 20)}-${hex.slice(20)}`
392
+ );
378
393
  }
379
394
 
380
395
  function predictedRelocationPayloadBytes(
@@ -385,17 +400,19 @@ function predictedRelocationPayloadBytes(
385
400
  throw new RangeError('Actor Join request size is invalid.');
386
401
  }
387
402
  if (
388
- relocationContentType !== RECREATE_RELOCATION_CONTENT_TYPE
389
- && relocationContentType !== SNAPSHOT_RELOCATION_CONTENT_TYPE
403
+ relocationContentType !== RECREATE_RELOCATION_CONTENT_TYPE &&
404
+ relocationContentType !== SNAPSHOT_RELOCATION_CONTENT_TYPE
390
405
  ) {
391
406
  throw new TypeError('Actor Join relocation content type is invalid.');
392
407
  }
393
- return FRAMEWORK_METADATA_UPPER_BOUND_BYTES
394
- + ACCEPTED_JOURNAL_UPPER_BOUND_BYTES
395
- + requestBytes
396
- + (relocationContentType === SNAPSHOT_RELOCATION_CONTENT_TYPE
408
+ return (
409
+ FRAMEWORK_METADATA_UPPER_BOUND_BYTES +
410
+ ACCEPTED_JOURNAL_UPPER_BOUND_BYTES +
411
+ requestBytes +
412
+ (relocationContentType === SNAPSHOT_RELOCATION_CONTENT_TYPE
397
413
  ? SNAPSHOT_APPLICATION_STATE_RESERVATION_BYTES
398
- : 0);
414
+ : 0)
415
+ );
399
416
  }
400
417
 
401
418
  function textBytes(value: string, name: string): Buffer {
@@ -445,7 +462,8 @@ function nullableText(value: unknown, name: string): string | undefined {
445
462
  }
446
463
 
447
464
  function integer(value: unknown, name: string): bigint {
448
- if (typeof value !== 'string' || !/^\d+$/u.test(value)) throw new TypeError(`${name} is invalid.`);
465
+ if (typeof value !== 'string' || !/^\d+$/u.test(value))
466
+ throw new TypeError(`${name} is invalid.`);
449
467
  const parsed = BigInt(value);
450
468
  if (parsed > 0xffff_ffff_ffff_ffffn) throw new TypeError(`${name} exceeds u64.`);
451
469
  return parsed;
@@ -133,8 +133,10 @@ export class EventLoopWorkQueues {
133
133
  if (this.infrastructureCount === 0) {
134
134
  this.infrastructure.length = 0;
135
135
  this.infrastructureHead = 0;
136
- } else if (this.infrastructureHead >= 1024
137
- && this.infrastructureHead * 2 >= this.infrastructure.length) {
136
+ } else if (
137
+ this.infrastructureHead >= 1024 &&
138
+ this.infrastructureHead * 2 >= this.infrastructure.length
139
+ ) {
138
140
  this.infrastructure.splice(0, this.infrastructureHead);
139
141
  this.infrastructureHead = 0;
140
142
  }
@@ -144,8 +146,10 @@ export class EventLoopWorkQueues {
144
146
  if (this.applicationCount === 0) {
145
147
  this.application.length = 0;
146
148
  this.applicationHead = 0;
147
- } else if (this.applicationHead >= 1024
148
- && this.applicationHead * 2 >= this.application.length) {
149
+ } else if (
150
+ this.applicationHead >= 1024 &&
151
+ this.applicationHead * 2 >= this.application.length
152
+ ) {
149
153
  this.application.splice(0, this.applicationHead);
150
154
  this.applicationHead = 0;
151
155
  }