@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
@@ -24,9 +24,7 @@ import {
24
24
  } from './client-server-service-wire';
25
25
  import { discoveryAvailabilityForRuntimeState } from '../foundation/runtime-state-projections';
26
26
  import { ZLinkStateLane } from '../execution/state-lane';
27
- import {
28
- isBackendRequestTimeoutError
29
- } from '../backend/runtime-values';
27
+ import { isBackendRequestTimeoutError } from '../backend/runtime-values';
30
28
 
31
29
  interface ActiveClientServerTarget {
32
30
  descriptor: ZLinkClientServerServerDescriptor;
@@ -102,7 +100,7 @@ export class ZLinkClientServerLocationRuntime {
102
100
 
103
101
  activeTargets(channelName: string): readonly ZLinkClientServerServerDescriptor[] {
104
102
  return [...this.connections.values()]
105
- .filter(target => target.state === 'ready')
103
+ .filter((target) => target.state === 'ready')
106
104
  .map((target) => target.descriptor)
107
105
  .filter((descriptor) => descriptor.channelName === channelName);
108
106
  }
@@ -111,8 +109,7 @@ export class ZLinkClientServerLocationRuntime {
111
109
  const owner = this.requireOwnerToken();
112
110
  const descriptors = await this.lane.run(() => [...this.localDescriptors]);
113
111
  for (const [channelName, current] of descriptors) {
114
- if (current.ownerId === owner.ownerId
115
- && current.leaseGeneration === owner.leaseGeneration) {
112
+ if (current.ownerId === owner.ownerId && current.leaseGeneration === owner.leaseGeneration) {
116
113
  continue;
117
114
  }
118
115
  const candidate = {
@@ -143,13 +140,14 @@ export class ZLinkClientServerLocationRuntime {
143
140
  const current = await this.lane.run(() => this.localDescriptors.get(channelName));
144
141
  if (current !== undefined) {
145
142
  const runtimeWeight = this.sockets.clientServerServerWeight(channelName);
146
- const candidate = runtimeWeight === current.weight
147
- ? current
148
- : {
149
- ...current,
150
- descriptorRevision: current.descriptorRevision + 1n,
151
- weight: runtimeWeight
152
- };
143
+ const candidate =
144
+ runtimeWeight === current.weight
145
+ ? current
146
+ : {
147
+ ...current,
148
+ descriptorRevision: current.descriptorRevision + 1n,
149
+ weight: runtimeWeight
150
+ };
153
151
  const result = await this.store.updateClientServer(
154
152
  candidate,
155
153
  ZLinkLocationWriteIntent.Renew,
@@ -201,10 +199,9 @@ export class ZLinkClientServerLocationRuntime {
201
199
  continue;
202
200
  }
203
201
  const rows = await this.listLiveServers(channelName, signal);
204
- const desired = new Map(rows.map((descriptor) => [
205
- clientServerConnectionId(descriptor),
206
- descriptor
207
- ]));
202
+ const desired = new Map(
203
+ rows.map((descriptor) => [clientServerConnectionId(descriptor), descriptor])
204
+ );
208
205
  const desiredStableKeys = new Set(rows.map(clientServerStableKey));
209
206
  for (const [connectionId, descriptor] of desired) {
210
207
  const current = await this.lane.run(() => this.connections.get(connectionId));
@@ -233,8 +230,10 @@ export class ZLinkClientServerLocationRuntime {
233
230
  const connections = await this.lane.run(() => [...this.connections]);
234
231
  for (const [connectionId, current] of connections) {
235
232
  if (current.descriptor.channelName !== channelName || desired.has(connectionId)) continue;
236
- if (desiredStableKeys.has(clientServerStableKey(current.descriptor))
237
- && current.state === 'ready') {
233
+ if (
234
+ desiredStableKeys.has(clientServerStableKey(current.descriptor)) &&
235
+ current.state === 'ready'
236
+ ) {
238
237
  continue;
239
238
  }
240
239
  await this.closeConnection(connectionId);
@@ -260,17 +259,18 @@ export class ZLinkClientServerLocationRuntime {
260
259
 
261
260
  const live: ZLinkClientServerServerDescriptor[] = [];
262
261
  for (const descriptor of rows) {
263
- if (descriptor.state === ZLinkFrameworkRuntimeState.Stopped
264
- || descriptor.state === ZLinkFrameworkRuntimeState.Error) {
262
+ if (
263
+ descriptor.state === ZLinkFrameworkRuntimeState.Stopped ||
264
+ descriptor.state === ZLinkFrameworkRuntimeState.Error
265
+ ) {
265
266
  continue;
266
267
  }
267
- const lease = await this.stores.ownerLeaseStore.readOwnerLease(
268
- descriptor.ownerId,
269
- signal
270
- );
271
- if (lease.kind === 'found'
272
- && lease.token.leaseGeneration === descriptor.leaseGeneration
273
- && lease.leaseExpiresAt.getTime() > lease.storeNow.getTime()) {
268
+ const lease = await this.stores.ownerLeaseStore.readOwnerLease(descriptor.ownerId, signal);
269
+ if (
270
+ lease.kind === 'found' &&
271
+ lease.token.leaseGeneration === descriptor.leaseGeneration &&
272
+ lease.leaseExpiresAt.getTime() > lease.storeNow.getTime()
273
+ ) {
274
274
  live.push(descriptor);
275
275
  }
276
276
  }
@@ -280,7 +280,7 @@ export class ZLinkClientServerLocationRuntime {
280
280
  private async disconnectClients(): Promise<void> {
281
281
  const connectionIds = await this.lane.run(() => [...this.connections.keys()]);
282
282
  await Promise.allSettled(
283
- connectionIds.map(connectionId => this.closeConnection(connectionId))
283
+ connectionIds.map((connectionId) => this.closeConnection(connectionId))
284
284
  );
285
285
  }
286
286
 
@@ -302,8 +302,9 @@ export class ZLinkClientServerLocationRuntime {
302
302
  descriptor.endpoint,
303
303
  {
304
304
  onTransportReady: (routingId, endpoint) => {
305
- void this.handleTransportReady(connectionId, routingId, endpoint)
306
- .catch(error => this.locationRuntime.reportDiscoveryFailure(error));
305
+ void this.handleTransportReady(connectionId, routingId, endpoint).catch((error) =>
306
+ this.locationRuntime.reportDiscoveryFailure(error)
307
+ );
307
308
  },
308
309
  onTerminated: () => {
309
310
  void this.handleConnectionTerminated(connectionId);
@@ -325,7 +326,8 @@ export class ZLinkClientServerLocationRuntime {
325
326
  ): Promise<void> {
326
327
  const current = await this.lane.run(() => {
327
328
  const target = this.connections.get(connectionId);
328
- if (target === undefined || target.state === 'ready' || target.handshakeInFlight) return undefined;
329
+ if (target === undefined || target.state === 'ready' || target.handshakeInFlight)
330
+ return undefined;
329
331
  const dealer = target.dealer;
330
332
  if (dealer === undefined) return undefined;
331
333
  target.handshakeInFlight = true;
@@ -354,10 +356,12 @@ export class ZLinkClientServerLocationRuntime {
354
356
  return descriptor;
355
357
  });
356
358
  if (admittedDescriptor === undefined) return;
357
- if (!this.sockets.admitClientServerConnection(
358
- toDiscoveryDescriptor(admittedDescriptor, admission.normalizedEffectiveMaxMessageBytes),
359
- connectionId
360
- )) {
359
+ if (
360
+ !this.sockets.admitClientServerConnection(
361
+ toDiscoveryDescriptor(admittedDescriptor, admission.normalizedEffectiveMaxMessageBytes),
362
+ connectionId
363
+ )
364
+ ) {
361
365
  throw new ZLinkConfigurationException(
362
366
  `ClientServer '${current.target.descriptor.channelName}' admission was stale.`
363
367
  );
@@ -367,8 +371,9 @@ export class ZLinkClientServerLocationRuntime {
367
371
  });
368
372
  await this.removeSupersededConnections(current.target);
369
373
  } catch (error) {
370
- const isCurrent = await this.lane.run(() =>
371
- this.connections.get(connectionId) === current.target);
374
+ const isCurrent = await this.lane.run(
375
+ () => this.connections.get(connectionId) === current.target
376
+ );
372
377
  if (!isCurrent) return;
373
378
  if (error instanceof ZLinkConfigurationException) {
374
379
  current.target.dealer = undefined;
@@ -386,22 +391,23 @@ export class ZLinkClientServerLocationRuntime {
386
391
  return retryAdmission;
387
392
  });
388
393
  if (shouldRetry) {
389
- void this.handleTransportReady(connectionId, _routingId, _endpoint)
390
- .catch(error => this.locationRuntime.reportDiscoveryFailure(error));
394
+ void this.handleTransportReady(connectionId, _routingId, _endpoint).catch((error) =>
395
+ this.locationRuntime.reportDiscoveryFailure(error)
396
+ );
391
397
  }
392
398
  }
393
399
  }
394
400
 
395
- private async removeSupersededConnections(
396
- admitted: ActiveClientServerTarget
397
- ): Promise<void> {
401
+ private async removeSupersededConnections(admitted: ActiveClientServerTarget): Promise<void> {
398
402
  const stableKey = clientServerStableKey(admitted.descriptor);
399
403
  const connections = await this.lane.run(() => [...this.connections.values()]);
400
404
  const superseded = connections
401
- .filter(current =>
402
- current.connectionId !== admitted.connectionId
403
- && clientServerStableKey(current.descriptor) === stableKey)
404
- .map(current => current.connectionId);
405
+ .filter(
406
+ (current) =>
407
+ current.connectionId !== admitted.connectionId &&
408
+ clientServerStableKey(current.descriptor) === stableKey
409
+ )
410
+ .map((current) => current.connectionId);
405
411
  for (const connectionId of superseded) {
406
412
  await this.closeConnection(connectionId);
407
413
  }
@@ -447,10 +453,14 @@ export class ZLinkClientServerLocationRuntime {
447
453
  );
448
454
  if (result.status === ZLinkLocationWriteStatus.Stored) {
449
455
  this.sockets.setClientServerServerDescriptor(draining, channelName);
450
- await this.store.removeClientServer({
451
- channelName,
452
- serverRid: descriptor.serverRid
453
- }, owner, signal);
456
+ await this.store.removeClientServer(
457
+ {
458
+ channelName,
459
+ serverRid: descriptor.serverRid
460
+ },
461
+ owner,
462
+ signal
463
+ );
454
464
  }
455
465
  this.sockets.setClientServerServerDescriptor(undefined, channelName);
456
466
  }
@@ -494,16 +504,17 @@ function sameDescriptor(
494
504
  left: ZLinkClientServerServerDescriptor,
495
505
  right: ZLinkClientServerServerDescriptor
496
506
  ): boolean {
497
- return left.lifecycleGeneration === right.lifecycleGeneration
498
- && left.descriptorRevision === right.descriptorRevision
499
- && left.endpoint === right.endpoint
500
- && left.weight === right.weight
501
- && left.state === right.state
502
- && left.ownerId === right.ownerId
503
- && left.leaseGeneration === right.leaseGeneration;
507
+ return (
508
+ left.lifecycleGeneration === right.lifecycleGeneration &&
509
+ left.descriptorRevision === right.descriptorRevision &&
510
+ left.endpoint === right.endpoint &&
511
+ left.weight === right.weight &&
512
+ left.state === right.state &&
513
+ left.ownerId === right.ownerId &&
514
+ left.leaseGeneration === right.leaseGeneration
515
+ );
504
516
  }
505
517
 
506
-
507
518
  function toDiscoveryDescriptor(
508
519
  descriptor: ZLinkClientServerServerDescriptor,
509
520
  effectiveMaxMessageBytes = 0x7fff_ffff
@@ -526,53 +537,60 @@ function requestAdmission(
526
537
  descriptor: ZLinkClientServerServerDescriptor,
527
538
  timeoutMs: number
528
539
  ): Promise<ZLinkClientServerAdmission> {
529
- const message = RuntimeMessage.from(encodeClientServerHello({
530
- channelName: descriptor.channelName,
531
- securityIdentity: descriptor.securityIdentity,
532
- normalizedEffectiveMaxMessageBytes: normalizedMessageLimit(dealer.maxMessageSize)
533
- }));
534
- return dealer.request(message, timeoutMs).then((parts) => {
535
- try {
536
- if (parts.length !== 1) {
537
- throw new ZLinkConfigurationException(
538
- `ClientServer '${descriptor.channelName}' admission reply must contain exactly one part.`
539
- );
540
+ const message = RuntimeMessage.from(
541
+ encodeClientServerHello({
542
+ channelName: descriptor.channelName,
543
+ securityIdentity: descriptor.securityIdentity,
544
+ normalizedEffectiveMaxMessageBytes: normalizedMessageLimit(dealer.maxMessageSize)
545
+ })
546
+ );
547
+ return dealer.request(message, timeoutMs).then(
548
+ (parts) => {
549
+ try {
550
+ if (parts.length !== 1) {
551
+ throw new ZLinkConfigurationException(
552
+ `ClientServer '${descriptor.channelName}' admission reply must contain exactly one part.`
553
+ );
554
+ }
555
+ const first = parts[0]!;
556
+ const record = decodeClientServerControl(first.data());
557
+ if (record.kind === 'reject') {
558
+ throw new ZLinkConfigurationException(
559
+ `ClientServer '${descriptor.channelName}' admission was rejected (${record.reason}).`
560
+ );
561
+ }
562
+ if (record.kind !== 'admit') {
563
+ throw new ZLinkConfigurationException(
564
+ `ClientServer '${descriptor.channelName}' admission reply has an invalid command.`
565
+ );
566
+ }
567
+ return record.admission;
568
+ } finally {
569
+ message.close();
570
+ closeMessages(parts);
540
571
  }
541
- const first = parts[0]!;
542
- const record = decodeClientServerControl(first.data());
543
- if (record.kind === 'reject') {
544
- throw new ZLinkConfigurationException(
545
- `ClientServer '${descriptor.channelName}' admission was rejected (${record.reason}).`
546
- );
547
- }
548
- if (record.kind !== 'admit') {
549
- throw new ZLinkConfigurationException(
550
- `ClientServer '${descriptor.channelName}' admission reply has an invalid command.`
551
- );
552
- }
553
- return record.admission;
554
- } finally {
572
+ },
573
+ (error) => {
555
574
  message.close();
556
- closeMessages(parts);
575
+ throw error;
557
576
  }
558
- }, (error) => {
559
- message.close();
560
- throw error;
561
- });
577
+ );
562
578
  }
563
579
 
564
580
  function requireMatchingAdmission(
565
581
  expected: ZLinkClientServerServerDescriptor,
566
582
  actual: ZLinkClientServerAdmission
567
583
  ): void {
568
- if (actual.channelName !== expected.channelName
569
- || actual.serverRid !== String(expected.serverRid)
570
- || actual.lifecycleGeneration !== expected.lifecycleGeneration
571
- || actual.descriptorRevision !== expected.descriptorRevision
572
- || actual.weight !== expected.weight
573
- || actual.state !== expected.state
574
- || actual.securityIdentity !== expected.securityIdentity
575
- || actual.advertisedEndpoint !== expected.endpoint) {
584
+ if (
585
+ actual.channelName !== expected.channelName ||
586
+ actual.serverRid !== String(expected.serverRid) ||
587
+ actual.lifecycleGeneration !== expected.lifecycleGeneration ||
588
+ actual.descriptorRevision !== expected.descriptorRevision ||
589
+ actual.weight !== expected.weight ||
590
+ actual.state !== expected.state ||
591
+ actual.securityIdentity !== expected.securityIdentity ||
592
+ actual.advertisedEndpoint !== expected.endpoint
593
+ ) {
576
594
  throw new ZLinkConfigurationException(
577
595
  `ClientServer '${expected.channelName}' admission does not match its descriptor.`
578
596
  );
@@ -584,7 +602,5 @@ function closeMessages(parts: readonly Message[]): void {
584
602
  }
585
603
 
586
604
  function normalizedMessageLimit(value: number): number {
587
- return Number.isSafeInteger(value) && value > 0
588
- ? Math.min(value, 0xffff_ffff)
589
- : 0x7fff_ffff;
605
+ return Number.isSafeInteger(value) && value > 0 ? Math.min(value, 0xffff_ffff) : 0x7fff_ffff;
590
606
  }
@@ -63,10 +63,7 @@ export function encodeClientServerHello(value: ZLinkClientServerHello): Buffer {
63
63
  encodeText8(value.channelName, 'channelName'),
64
64
  Buffer.of(DIRECTION_CLIENT_TO_SERVER),
65
65
  encodeText8(value.securityIdentity, 'securityIdentity'),
66
- encodeNonZeroU32(
67
- value.normalizedEffectiveMaxMessageBytes,
68
- 'normalizedEffectiveMaxMessageBytes'
69
- )
66
+ encodeNonZeroU32(value.normalizedEffectiveMaxMessageBytes, 'normalizedEffectiveMaxMessageBytes')
70
67
  );
71
68
  return encodeAdmission(COMMAND_HELLO, ROLE_CLIENT, roleBody);
72
69
  }
@@ -101,18 +98,19 @@ export function encodeClientServerLivenessAck(probeId: bigint): Buffer {
101
98
  }
102
99
 
103
100
  export function isClientServerControlFrame(frame: Uint8Array): boolean {
104
- return frame.byteLength >= 5
105
- && frame[0] === MAGIC_0
106
- && frame[1] === MAGIC_1
107
- && frame[2] === WIRE_MAJOR;
101
+ return (
102
+ frame.byteLength >= 5 && frame[0] === MAGIC_0 && frame[1] === MAGIC_1 && frame[2] === WIRE_MAJOR
103
+ );
108
104
  }
109
105
 
110
106
  export function decodeClientServerControl(frame: Uint8Array): ZLinkClientServerControlRecord {
111
107
  if (frame.byteLength > MAX_DESCRIPTOR_BYTES) fail('ClientServer control record is oversized.');
112
108
  const reader = new Reader(frame);
113
- if (reader.u8('magic[0]') !== MAGIC_0
114
- || reader.u8('magic[1]') !== MAGIC_1
115
- || reader.u8('wireMajor') !== WIRE_MAJOR) {
109
+ if (
110
+ reader.u8('magic[0]') !== MAGIC_0 ||
111
+ reader.u8('magic[1]') !== MAGIC_1 ||
112
+ reader.u8('wireMajor') !== WIRE_MAJOR
113
+ ) {
116
114
  fail('ClientServer control record prefix is invalid.');
117
115
  }
118
116
  const command = reader.u8('command');
@@ -150,9 +148,7 @@ export function decodeClientServerControl(frame: Uint8Array): ZLinkClientServerC
150
148
  if (role !== ROLE_SERVER) fail('ClientServer server admission role is invalid.');
151
149
  const admission = decodeServerAdmission(reader);
152
150
  reader.end();
153
- return command === COMMAND_ADMIT
154
- ? { kind: 'admit', admission }
155
- : { kind: 'update', admission };
151
+ return command === COMMAND_ADMIT ? { kind: 'admit', admission } : { kind: 'update', admission };
156
152
  }
157
153
 
158
154
  function encodeLiveness(command: number, probeId: bigint): Buffer {
@@ -174,10 +170,7 @@ function encodeServerAdmission(
174
170
  encodeU32(descriptor.weight),
175
171
  Buffer.of(runtimeStateToWire(descriptor.state)),
176
172
  encodeText8(descriptor.securityIdentity, 'securityIdentity'),
177
- encodeNonZeroU32(
178
- normalizedEffectiveMaxMessageBytes,
179
- 'normalizedEffectiveMaxMessageBytes'
180
- ),
173
+ encodeNonZeroU32(normalizedEffectiveMaxMessageBytes, 'normalizedEffectiveMaxMessageBytes'),
181
174
  encodeText16(descriptor.endpoint, 'advertisedEndpoint')
182
175
  );
183
176
  return encodeAdmission(command, ROLE_SERVER, roleBody);
@@ -204,9 +197,7 @@ function decodeClientHello(reader: Reader): ZLinkClientServerHello {
204
197
  return {
205
198
  channelName,
206
199
  securityIdentity: reader.text8('securityIdentity'),
207
- normalizedEffectiveMaxMessageBytes: reader.nonZeroU32(
208
- 'normalizedEffectiveMaxMessageBytes'
209
- )
200
+ normalizedEffectiveMaxMessageBytes: reader.nonZeroU32('normalizedEffectiveMaxMessageBytes')
210
201
  };
211
202
  }
212
203
 
@@ -228,9 +219,7 @@ function decodeServerAdmission(reader: Reader): ZLinkClientServerAdmission {
228
219
  weight,
229
220
  state: runtimeStateFromWire(reader.u8('runtimeState')),
230
221
  securityIdentity: reader.text8('securityIdentity'),
231
- normalizedEffectiveMaxMessageBytes: reader.nonZeroU32(
232
- 'normalizedEffectiveMaxMessageBytes'
233
- ),
222
+ normalizedEffectiveMaxMessageBytes: reader.nonZeroU32('normalizedEffectiveMaxMessageBytes'),
234
223
  advertisedEndpoint: normalizeEndpoint(reader.text16('advertisedEndpoint'))
235
224
  };
236
225
  }
@@ -278,25 +267,37 @@ function encodeText16(value: string, field: string): Buffer {
278
267
 
279
268
  function runtimeStateToWire(value: ZLinkFrameworkRuntimeState): number {
280
269
  switch (value) {
281
- case ZLinkFrameworkRuntimeState.Preparing: return 0;
282
- case ZLinkFrameworkRuntimeState.Serving: return 1;
270
+ case ZLinkFrameworkRuntimeState.Preparing:
271
+ return 0;
272
+ case ZLinkFrameworkRuntimeState.Serving:
273
+ return 1;
283
274
  case ZLinkFrameworkRuntimeState.Relocating:
284
275
  case ZLinkFrameworkRuntimeState.Relocated:
285
- case ZLinkFrameworkRuntimeState.Draining: return 2;
286
- case ZLinkFrameworkRuntimeState.Stopped: return 3;
287
- case ZLinkFrameworkRuntimeState.Error: return 4;
288
- default: fail('ClientServer runtime state is invalid.');
276
+ case ZLinkFrameworkRuntimeState.Draining:
277
+ return 2;
278
+ case ZLinkFrameworkRuntimeState.Stopped:
279
+ return 3;
280
+ case ZLinkFrameworkRuntimeState.Error:
281
+ return 4;
282
+ default:
283
+ fail('ClientServer runtime state is invalid.');
289
284
  }
290
285
  }
291
286
 
292
287
  function runtimeStateFromWire(value: number): ZLinkFrameworkRuntimeState {
293
288
  switch (value) {
294
- case 0: return ZLinkFrameworkRuntimeState.Preparing;
295
- case 1: return ZLinkFrameworkRuntimeState.Serving;
296
- case 2: return ZLinkFrameworkRuntimeState.Draining;
297
- case 3: return ZLinkFrameworkRuntimeState.Stopped;
298
- case 4: return ZLinkFrameworkRuntimeState.Error;
299
- default: fail('ClientServer runtime state is invalid.');
289
+ case 0:
290
+ return ZLinkFrameworkRuntimeState.Preparing;
291
+ case 1:
292
+ return ZLinkFrameworkRuntimeState.Serving;
293
+ case 2:
294
+ return ZLinkFrameworkRuntimeState.Draining;
295
+ case 3:
296
+ return ZLinkFrameworkRuntimeState.Stopped;
297
+ case 4:
298
+ return ZLinkFrameworkRuntimeState.Error;
299
+ default:
300
+ fail('ClientServer runtime state is invalid.');
300
301
  }
301
302
  }
302
303
 
@@ -108,10 +108,11 @@ function normalizeDispatchFailure(event: ZLinkRuntimeDispatchFailure): ZLinkRunt
108
108
 
109
109
  function channelDropReason(event: ZLinkRuntimeDispatchFailure): string | undefined {
110
110
  if (
111
- event.action !== ZLinkDispatchErrorAction.Drop
112
- || (event.surface !== ZLinkDispatchErrorSurface.Channel
113
- && event.surface !== ZLinkDispatchErrorSurface.RouteMeshChannel)
114
- ) return undefined;
111
+ event.action !== ZLinkDispatchErrorAction.Drop ||
112
+ (event.surface !== ZLinkDispatchErrorSurface.Channel &&
113
+ event.surface !== ZLinkDispatchErrorSurface.RouteMeshChannel)
114
+ )
115
+ return undefined;
115
116
  switch (event.reason) {
116
117
  case ZLinkDispatchErrorReason.HandlerMissing:
117
118
  return 'no_handler';
@@ -145,10 +146,12 @@ function dispatchErrorInfo(event: ZLinkRuntimeDispatchFailure): {
145
146
  return {
146
147
  errorType: event.error.name,
147
148
  errorMessage: event.error.message,
148
- ...(cause === event.error ? {} : {
149
- errorCauseType: cause instanceof Error ? cause.name : typeof cause,
150
- errorCauseMessage: cause instanceof Error ? cause.message : String(cause)
151
- })
149
+ ...(cause === event.error
150
+ ? {}
151
+ : {
152
+ errorCauseType: cause instanceof Error ? cause.name : typeof cause,
153
+ errorCauseMessage: cause instanceof Error ? cause.message : String(cause)
154
+ })
152
155
  };
153
156
  }
154
157
  return { errorType: typeof event.error, errorMessage: String(event.error) };