@zlink-systems/framework 0.21.0 → 0.23.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 (516) 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/Dispatch/ZLinkDispatchOptions.d.ts +1 -0
  13. package/dist/contracts/Handlers/JsonContract.js +23 -11
  14. package/dist/contracts/Spots/SpotKind.js +16 -8
  15. package/dist/contracts/Streams/IZLinkSession.d.ts +2 -1
  16. package/dist/location-store-integration.js +16 -16
  17. package/dist/nest-integration.js +17 -11
  18. package/dist/runtime/abort.js +9 -5
  19. package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
  20. package/dist/runtime/actors/actor-authority-publication.js +18 -17
  21. package/dist/runtime/actors/actor-client.js +83 -63
  22. package/dist/runtime/actors/actor-context.js +28 -22
  23. package/dist/runtime/actors/actor-creation.js +4 -3
  24. package/dist/runtime/actors/actor-handoff.js +89 -92
  25. package/dist/runtime/actors/actor-join-deferred-scope.d.ts +0 -1
  26. package/dist/runtime/actors/actor-join-deferred-scope.js +0 -18
  27. package/dist/runtime/actors/actor-local-native-join.js +18 -19
  28. package/dist/runtime/actors/actor-mailbox.js +1 -1
  29. package/dist/runtime/actors/actor-message-follow-context.js +24 -21
  30. package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
  31. package/dist/runtime/actors/actor-remote-joiner.js +20 -17
  32. package/dist/runtime/actors/actor-remote-wire.js +6 -7
  33. package/dist/runtime/actors/actor-runtime-state.js +87 -81
  34. package/dist/runtime/actors/actor-transfer-registry.js +3 -5
  35. package/dist/runtime/actors/bound-session-wire.js +14 -9
  36. package/dist/runtime/actors/deferred-join-accepted-journal.js +160 -130
  37. package/dist/runtime/actors/index.js +2 -5
  38. package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
  39. package/dist/runtime/actors/post-commit-actor-location.js +1 -1
  40. package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
  41. package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
  42. package/dist/runtime/admission.js +2 -6
  43. package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
  44. package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
  45. package/dist/runtime/backend/contracts/index.d.ts +1 -0
  46. package/dist/runtime/backend/mesh-completion-table.js +1 -3
  47. package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
  48. package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
  49. package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
  50. package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
  51. package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
  52. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +3 -0
  53. package/dist/runtime/backend/node/node-raw-mesh-backend.js +134 -118
  54. package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
  55. package/dist/runtime/backend/runtime-message.js +3 -3
  56. package/dist/runtime/backend/runtime-values.d.ts +2 -2
  57. package/dist/runtime/backend/runtime-values.js +4 -5
  58. package/dist/runtime/channels/channel-clients.js +27 -24
  59. package/dist/runtime/channels/channel-dispatch-pipeline.js +12 -20
  60. package/dist/runtime/channels/channel-dispatch-services.js +7 -4
  61. package/dist/runtime/channels/channel-dispatchers.js +9 -9
  62. package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
  63. package/dist/runtime/channels/channel-envelope.js +83 -47
  64. package/dist/runtime/channels/channel-outbound-operations.js +8 -8
  65. package/dist/runtime/channels/channel-receive-loops.js +20 -22
  66. package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
  67. package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
  68. package/dist/runtime/channels/channel-runtime-manager.js +18 -9
  69. package/dist/runtime/channels/channel-socket-registry.js +126 -123
  70. package/dist/runtime/channels/channel-transports.js +46 -42
  71. package/dist/runtime/channels/client-server-location-runtime.js +32 -40
  72. package/dist/runtime/channels/client-server-service-wire.js +29 -22
  73. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -0
  74. package/dist/runtime/channels/dispatch-error-reporter.js +9 -39
  75. package/dist/runtime/channels/fanout-location-runtime.js +34 -47
  76. package/dist/runtime/channels/fanout-service-wire.js +3 -5
  77. package/dist/runtime/channels/local-spot-route-transport.js +7 -1
  78. package/dist/runtime/channels/route-member-snapshot.js +3 -3
  79. package/dist/runtime/channels/source-spot-router.js +6 -2
  80. package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
  81. package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
  82. package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
  83. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +6 -0
  84. package/dist/runtime/diagnostics/dispatch-error-details.js +55 -0
  85. package/dist/runtime/diagnostics/flow-context.d.ts +2 -1
  86. package/dist/runtime/diagnostics/flow-context.js +2 -2
  87. package/dist/runtime/diagnostics/index.js +38 -10
  88. package/dist/runtime/diagnostics/message-flow.js +58 -42
  89. package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
  90. package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
  91. package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
  92. package/dist/runtime/execution/index.js +7 -6
  93. package/dist/runtime/execution/serial-execution-queue.js +12 -18
  94. package/dist/runtime/execution/state-lane.js +2 -2
  95. package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -27
  96. package/dist/runtime/foundation/event-loop-resources.js +4 -4
  97. package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
  98. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +4 -2
  99. package/dist/runtime/foundation/raw-service-mesh-runtime.js +169 -144
  100. package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
  101. package/dist/runtime/foundation/runtime-state-projections.js +22 -11
  102. package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
  103. package/dist/runtime/foundation/service-discovery-registry.js +35 -33
  104. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
  105. package/dist/runtime/foundation/service-liveness-registry.js +16 -12
  106. package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
  107. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
  108. package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
  109. package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
  110. package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
  111. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +1 -0
  112. package/dist/runtime/foundation/service-stateful-registry.js +24 -23
  113. package/dist/runtime/foundation/service-stateful-runtime.d.ts +4 -0
  114. package/dist/runtime/foundation/service-stateful-runtime.js +461 -439
  115. package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
  116. package/dist/runtime/foundation/service-topology-registry.d.ts +1 -0
  117. package/dist/runtime/foundation/service-topology-registry.js +105 -96
  118. package/dist/runtime/foundation/service-weighted-selection.js +6 -11
  119. package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
  120. package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
  121. package/dist/runtime/framework-errors-internal.js +7 -10
  122. package/dist/runtime/handlers/handler-instance-scope.js +4 -5
  123. package/dist/runtime/handlers/index.js +3 -1
  124. package/dist/runtime/host/actor-packet-relay.js +74 -70
  125. package/dist/runtime/host/actor-placement-coordinator.js +29 -31
  126. package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
  127. package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
  128. package/dist/runtime/host/actor-transfer-runtime.js +176 -153
  129. package/dist/runtime/host/application-job-queue.js +18 -22
  130. package/dist/runtime/host/bound-session-relay.js +3 -1
  131. package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
  132. package/dist/runtime/host/host-capacity-status.js +8 -4
  133. package/dist/runtime/host/index.js +245 -228
  134. package/dist/runtime/host/instance-activation-authority.js +93 -96
  135. package/dist/runtime/host/location-runtime-owner.js +16 -14
  136. package/dist/runtime/host/mesh-router-resolver.js +11 -13
  137. package/dist/runtime/host/relocation-direct-transfer.js +10 -9
  138. package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
  139. package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
  140. package/dist/runtime/host/remote-bound-session-relay.js +97 -73
  141. package/dist/runtime/host/route-mesh-runtime.js +64 -69
  142. package/dist/runtime/host/runtime-shutdown.js +1 -2
  143. package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
  144. package/dist/runtime/host/spot-address-transport.js +69 -71
  145. package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
  146. package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
  147. package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
  148. package/dist/runtime/locations/actor-location-claims.js +26 -20
  149. package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
  150. package/dist/runtime/locations/authority-key-codec.js +7 -7
  151. package/dist/runtime/locations/auto-connect-loop.js +3 -3
  152. package/dist/runtime/locations/auto-connect-planner.js +25 -19
  153. package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
  154. package/dist/runtime/locations/in-memory-authority-store.js +128 -118
  155. package/dist/runtime/locations/in-memory-location-store.js +195 -168
  156. package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
  157. package/dist/runtime/locations/key-codec.js +1 -1
  158. package/dist/runtime/locations/lease-tracker.js +23 -21
  159. package/dist/runtime/locations/lifecycle.js +4 -5
  160. package/dist/runtime/locations/location-store-repository.js +368 -324
  161. package/dist/runtime/locations/opaque-record-key.js +2 -2
  162. package/dist/runtime/locations/resolvers.js +73 -82
  163. package/dist/runtime/locations/runtime.js +68 -63
  164. package/dist/runtime/locations/spot-location-claims.js +39 -35
  165. package/dist/runtime/messaging/framework-json-v1.js +7 -7
  166. package/dist/runtime/messaging/packet-name.js +7 -6
  167. package/dist/runtime/messaging/payload-codec.js +21 -18
  168. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
  169. package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
  170. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +20 -18
  171. package/dist/runtime/routing-id.js +3 -5
  172. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
  173. package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
  174. package/dist/runtime/spots/index.js +209 -220
  175. package/dist/runtime/spots/spot-activation-registry.js +15 -14
  176. package/dist/runtime/spots/spot-activation-state.js +17 -15
  177. package/dist/runtime/spots/spot-activation.js +33 -16
  178. package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
  179. package/dist/runtime/spots/spot-actor-membership.js +1 -3
  180. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +2 -1
  181. package/dist/runtime/spots/spot-actor-packet-dispatch.js +29 -21
  182. package/dist/runtime/spots/spot-actor-packet-drain.js +14 -10
  183. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
  184. package/dist/runtime/spots/spot-closing.js +3 -7
  185. package/dist/runtime/spots/spot-context.js +2 -2
  186. package/dist/runtime/spots/spot-entry-activation.js +13 -14
  187. package/dist/runtime/spots/spot-handle.js +6 -3
  188. package/dist/runtime/spots/spot-handler-registry.js +12 -12
  189. package/dist/runtime/spots/spot-manager-public.js +5 -6
  190. package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
  191. package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
  192. package/dist/runtime/spots/spot-node-runtime-manager.js +79 -86
  193. package/dist/runtime/spots/spot-outbound.js +10 -14
  194. package/dist/runtime/spots/spot-remote-codec.js +22 -26
  195. package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
  196. package/dist/runtime/spots/spot-route-packet-dispatch.js +17 -15
  197. package/dist/runtime/spots/spot-route-replies.js +4 -6
  198. package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
  199. package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +2 -3
  200. package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
  201. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
  202. package/dist/runtime/spots/spot-serial-executor.js +5 -8
  203. package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
  204. package/dist/runtime/spots/spot-subscription-dispatch.js +6 -6
  205. package/dist/runtime/spots/spot-timer.js +26 -30
  206. package/dist/runtime/streams/actor-session-binding-registry.d.ts +21 -8
  207. package/dist/runtime/streams/actor-session-binding-registry.js +168 -148
  208. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -0
  209. package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
  210. package/dist/runtime/streams/bound-actor-relay-sender.js +20 -17
  211. package/dist/runtime/streams/bound-session-response-target.js +8 -1
  212. package/dist/runtime/streams/bound-session-service.d.ts +1 -0
  213. package/dist/runtime/streams/bound-session-service.js +14 -12
  214. package/dist/runtime/streams/index.js +28 -20
  215. package/dist/runtime/streams/managed-stream.d.ts +3 -0
  216. package/dist/runtime/streams/managed-stream.js +52 -31
  217. package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
  218. package/dist/runtime/streams/protocol.d.ts +5 -1
  219. package/dist/runtime/streams/protocol.js +68 -20
  220. package/dist/runtime/streams/session-actor-coordinator.js +37 -41
  221. package/dist/runtime/streams/session-context.d.ts +9 -2
  222. package/dist/runtime/streams/session-context.js +50 -32
  223. package/dist/runtime/streams/session-local-actors.d.ts +3 -1
  224. package/dist/runtime/streams/session-local-actors.js +17 -2
  225. package/dist/runtime/streams/session-provider.js +2 -2
  226. package/dist/runtime/streams/session-serial-executor.js +1 -2
  227. package/dist/runtime/streams/stream-frame-factory.d.ts +1 -1
  228. package/dist/runtime/streams/stream-frame-factory.js +14 -7
  229. package/dist/runtime/streams/stream-session-runtime.js +112 -78
  230. package/dist/runtime/workers/index.js +15 -4
  231. package/package.json +3 -3
  232. package/src/contracts/Channels/RouteCalls.ts +6 -1
  233. package/src/contracts/Common/ZLinkMessage.ts +5 -5
  234. package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
  235. package/src/contracts/Configuration/Builders.ts +14 -14
  236. package/src/contracts/Configuration/CodecContentType.ts +8 -10
  237. package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
  238. package/src/contracts/Configuration/EndpointNotation.ts +11 -11
  239. package/src/contracts/Configuration/ObjectRoles.ts +1 -3
  240. package/src/contracts/Configuration/Registration.ts +46 -17
  241. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
  242. package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
  243. package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
  244. package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
  245. package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
  246. package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
  247. package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
  248. package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
  249. package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
  250. package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
  251. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -6
  252. package/src/contracts/Errors/index.ts +1 -4
  253. package/src/contracts/Handlers/Attributes.ts +15 -9
  254. package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
  255. package/src/contracts/Handlers/JsonContract.ts +53 -19
  256. package/src/contracts/Locations/ActorTransfer.ts +1 -5
  257. package/src/contracts/Locations/Authority.ts +4 -11
  258. package/src/contracts/Locations/Keys.ts +6 -1
  259. package/src/contracts/Locations/Options.ts +3 -2
  260. package/src/contracts/Locations/RelocationStore.ts +1 -4
  261. package/src/contracts/Locations/Resolvers.ts +5 -5
  262. package/src/contracts/Locations/RuntimeQuery.ts +6 -2
  263. package/src/contracts/Locations/Stores.ts +1 -2
  264. package/src/contracts/Locations/index.ts +2 -8
  265. package/src/contracts/RouteMesh/Contracts.ts +1 -7
  266. package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
  267. package/src/contracts/Spots/Contracts.ts +2 -8
  268. package/src/contracts/Spots/SpotKind.ts +16 -8
  269. package/src/contracts/Spots/ZLinkSpot.ts +8 -11
  270. package/src/contracts/Streams/IZLinkSession.ts +2 -2
  271. package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
  272. package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
  273. package/src/internal.ts +5 -4
  274. package/src/location-store-integration.ts +24 -16
  275. package/src/nest-integration.ts +40 -25
  276. package/src/runtime/abort.ts +10 -4
  277. package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
  278. package/src/runtime/actors/actor-authority-publication.ts +92 -77
  279. package/src/runtime/actors/actor-client.ts +162 -133
  280. package/src/runtime/actors/actor-context.ts +142 -134
  281. package/src/runtime/actors/actor-creation.ts +47 -44
  282. package/src/runtime/actors/actor-execution-context.ts +6 -4
  283. package/src/runtime/actors/actor-handoff.ts +269 -293
  284. package/src/runtime/actors/actor-join-deferred-scope.ts +1 -32
  285. package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
  286. package/src/runtime/actors/actor-local-native-join.ts +131 -159
  287. package/src/runtime/actors/actor-mailbox.ts +16 -19
  288. package/src/runtime/actors/actor-message-follow-context.ts +46 -36
  289. package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
  290. package/src/runtime/actors/actor-remote-joiner.ts +50 -54
  291. package/src/runtime/actors/actor-remote-wire.ts +9 -13
  292. package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
  293. package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
  294. package/src/runtime/actors/actor-runtime-state.ts +127 -124
  295. package/src/runtime/actors/actor-transfer-registry.ts +9 -14
  296. package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
  297. package/src/runtime/actors/bound-session-wire.ts +37 -17
  298. package/src/runtime/actors/deferred-join-accepted-journal.ts +353 -326
  299. package/src/runtime/actors/index.ts +43 -86
  300. package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
  301. package/src/runtime/actors/post-commit-actor-location.ts +30 -23
  302. package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
  303. package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
  304. package/src/runtime/admission.ts +9 -9
  305. package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
  306. package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
  307. package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
  308. package/src/runtime/backend/contracts/index.ts +77 -52
  309. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
  310. package/src/runtime/backend/mesh-completion-table.ts +6 -9
  311. package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
  312. package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
  313. package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
  314. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
  315. package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
  316. package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
  317. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
  318. package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
  319. package/src/runtime/backend/node/node-raw-mesh-backend.ts +370 -390
  320. package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
  321. package/src/runtime/backend/runtime-message.ts +5 -3
  322. package/src/runtime/backend/runtime-values.ts +10 -7
  323. package/src/runtime/channels/channel-autoconnect.ts +1 -4
  324. package/src/runtime/channels/channel-clients.ts +93 -73
  325. package/src/runtime/channels/channel-dispatch-pipeline.ts +44 -44
  326. package/src/runtime/channels/channel-dispatch-services.ts +51 -49
  327. package/src/runtime/channels/channel-dispatchers.ts +152 -96
  328. package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
  329. package/src/runtime/channels/channel-envelope.ts +256 -150
  330. package/src/runtime/channels/channel-multipart.ts +13 -5
  331. package/src/runtime/channels/channel-outbound-operations.ts +37 -41
  332. package/src/runtime/channels/channel-receive-loops.ts +102 -98
  333. package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
  334. package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
  335. package/src/runtime/channels/channel-runtime-manager.ts +63 -37
  336. package/src/runtime/channels/channel-socket-options.ts +3 -10
  337. package/src/runtime/channels/channel-socket-registry.ts +331 -273
  338. package/src/runtime/channels/channel-transports.ts +218 -206
  339. package/src/runtime/channels/client-server-location-runtime.ts +116 -100
  340. package/src/runtime/channels/client-server-service-wire.ts +37 -36
  341. package/src/runtime/channels/dispatch-error-reporter.ts +12 -47
  342. package/src/runtime/channels/fanout-location-runtime.ts +91 -94
  343. package/src/runtime/channels/fanout-service-wire.ts +5 -12
  344. package/src/runtime/channels/handler-filter-scope.ts +1 -4
  345. package/src/runtime/channels/index.ts +1 -4
  346. package/src/runtime/channels/local-spot-route-transport.ts +20 -5
  347. package/src/runtime/channels/route-member-snapshot.ts +11 -5
  348. package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
  349. package/src/runtime/channels/source-spot-router.ts +26 -22
  350. package/src/runtime/channels/spot-direct-envelope.ts +10 -8
  351. package/src/runtime/channels/spot-node-route-transport.ts +13 -16
  352. package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
  353. package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
  354. package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
  355. package/src/runtime/codecs/index.ts +3 -2
  356. package/src/runtime/diagnostics/dispatch-error-details.ts +62 -0
  357. package/src/runtime/diagnostics/flow-context.ts +18 -7
  358. package/src/runtime/diagnostics/index.ts +96 -61
  359. package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
  360. package/src/runtime/diagnostics/message-flow.ts +107 -79
  361. package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
  362. package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
  363. package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
  364. package/src/runtime/execution/index.ts +18 -26
  365. package/src/runtime/execution/serial-execution-queue.ts +31 -40
  366. package/src/runtime/execution/state-lane.ts +2 -2
  367. package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -55
  368. package/src/runtime/foundation/event-loop-resources.ts +8 -4
  369. package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
  370. package/src/runtime/foundation/operation-identity.ts +1 -2
  371. package/src/runtime/foundation/operation-registry.ts +8 -2
  372. package/src/runtime/foundation/raw-service-mesh-runtime.ts +364 -396
  373. package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
  374. package/src/runtime/foundation/runtime-state-projections.ts +24 -23
  375. package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
  376. package/src/runtime/foundation/service-discovery-registry.ts +67 -59
  377. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
  378. package/src/runtime/foundation/service-liveness-registry.ts +18 -13
  379. package/src/runtime/foundation/service-mailbox.ts +14 -14
  380. package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
  381. package/src/runtime/foundation/service-metadata-codec.ts +2 -9
  382. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
  383. package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
  384. package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
  385. package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
  386. package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
  387. package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -4
  388. package/src/runtime/foundation/service-stateful-registry.ts +69 -59
  389. package/src/runtime/foundation/service-stateful-runtime.ts +1233 -1112
  390. package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
  391. package/src/runtime/foundation/service-topology-registry.ts +170 -159
  392. package/src/runtime/foundation/service-weighted-selection.ts +9 -15
  393. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
  394. package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
  395. package/src/runtime/framework-errors-internal.ts +31 -30
  396. package/src/runtime/handlers/handler-instance-scope.ts +18 -29
  397. package/src/runtime/handlers/index.ts +18 -8
  398. package/src/runtime/host/actor-packet-relay.ts +290 -261
  399. package/src/runtime/host/actor-placement-coordinator.ts +165 -150
  400. package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
  401. package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
  402. package/src/runtime/host/actor-transfer-runtime.ts +391 -395
  403. package/src/runtime/host/application-job-queue.ts +32 -48
  404. package/src/runtime/host/bound-session-relay.ts +7 -9
  405. package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
  406. package/src/runtime/host/host-capacity-status.ts +10 -9
  407. package/src/runtime/host/index.ts +861 -789
  408. package/src/runtime/host/instance-activation-authority.ts +125 -143
  409. package/src/runtime/host/location-runtime-owner.ts +38 -26
  410. package/src/runtime/host/mesh-router-resolver.ts +30 -23
  411. package/src/runtime/host/relocation-direct-transfer.ts +15 -15
  412. package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
  413. package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
  414. package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
  415. package/src/runtime/host/remote-bound-session-relay.ts +274 -247
  416. package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
  417. package/src/runtime/host/route-mesh-runtime.ts +227 -181
  418. package/src/runtime/host/runtime-shutdown.ts +4 -3
  419. package/src/runtime/host/service-relocation-control.ts +14 -5
  420. package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
  421. package/src/runtime/host/spot-address-transport.ts +284 -237
  422. package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
  423. package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
  424. package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
  425. package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
  426. package/src/runtime/locations/actor-location-claims.ts +61 -49
  427. package/src/runtime/locations/actor-session-route-claims.ts +1 -4
  428. package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
  429. package/src/runtime/locations/authority-key-codec.ts +13 -10
  430. package/src/runtime/locations/auto-connect-loop.ts +14 -11
  431. package/src/runtime/locations/auto-connect-planner.ts +42 -31
  432. package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
  433. package/src/runtime/locations/canonical-codec.ts +3 -1
  434. package/src/runtime/locations/creation-operation-id.ts +4 -3
  435. package/src/runtime/locations/domain-store-contract.ts +13 -7
  436. package/src/runtime/locations/in-memory-authority-store.ts +232 -199
  437. package/src/runtime/locations/in-memory-location-store.ts +432 -250
  438. package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
  439. package/src/runtime/locations/internal-store-contracts.ts +95 -38
  440. package/src/runtime/locations/key-codec.ts +3 -4
  441. package/src/runtime/locations/lease-tracker.ts +36 -27
  442. package/src/runtime/locations/lifecycle-runtime.ts +15 -3
  443. package/src/runtime/locations/lifecycle.ts +33 -28
  444. package/src/runtime/locations/location-store-repository.ts +1329 -1185
  445. package/src/runtime/locations/opaque-record-key.ts +4 -9
  446. package/src/runtime/locations/resolvers.ts +201 -178
  447. package/src/runtime/locations/runtime.ts +251 -159
  448. package/src/runtime/locations/spot-location-claims.ts +110 -112
  449. package/src/runtime/messaging/creation-payload-codec.ts +4 -1
  450. package/src/runtime/messaging/framework-json-v1.ts +34 -15
  451. package/src/runtime/messaging/packet-name.ts +8 -6
  452. package/src/runtime/messaging/payload-codec.ts +70 -50
  453. package/src/runtime/messaging/submission-result.ts +6 -9
  454. package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
  455. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +19 -18
  456. package/src/runtime/routing-id.ts +10 -7
  457. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
  458. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
  459. package/src/runtime/spots/index.ts +595 -564
  460. package/src/runtime/spots/spot-activation-registry.ts +38 -34
  461. package/src/runtime/spots/spot-activation-state.ts +43 -51
  462. package/src/runtime/spots/spot-activation.ts +179 -116
  463. package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
  464. package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
  465. package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
  466. package/src/runtime/spots/spot-actor-membership.ts +25 -27
  467. package/src/runtime/spots/spot-actor-packet-dispatch.ts +196 -148
  468. package/src/runtime/spots/spot-actor-packet-drain.ts +56 -42
  469. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
  470. package/src/runtime/spots/spot-closing.ts +11 -12
  471. package/src/runtime/spots/spot-context.ts +46 -26
  472. package/src/runtime/spots/spot-entry-activation.ts +84 -65
  473. package/src/runtime/spots/spot-handle.ts +17 -15
  474. package/src/runtime/spots/spot-handler-registry.ts +44 -31
  475. package/src/runtime/spots/spot-location-claim.ts +5 -4
  476. package/src/runtime/spots/spot-manager-public.ts +62 -82
  477. package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
  478. package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
  479. package/src/runtime/spots/spot-node-runtime-manager.ts +235 -222
  480. package/src/runtime/spots/spot-outbound.ts +47 -59
  481. package/src/runtime/spots/spot-publisher-transport.ts +5 -4
  482. package/src/runtime/spots/spot-remote-codec.ts +66 -65
  483. package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
  484. package/src/runtime/spots/spot-route-packet-dispatch.ts +129 -95
  485. package/src/runtime/spots/spot-route-replies.ts +23 -24
  486. package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
  487. package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
  488. package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +13 -18
  489. package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
  490. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
  491. package/src/runtime/spots/spot-routing-internal.ts +1 -4
  492. package/src/runtime/spots/spot-runtime-ports.ts +5 -5
  493. package/src/runtime/spots/spot-serial-executor.ts +5 -9
  494. package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
  495. package/src/runtime/spots/spot-subscription-dispatch.ts +58 -47
  496. package/src/runtime/spots/spot-timer.ts +103 -91
  497. package/src/runtime/streams/actor-session-binding-registry.ts +421 -292
  498. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +8 -4
  499. package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
  500. package/src/runtime/streams/bound-actor-relay-sender.ts +60 -50
  501. package/src/runtime/streams/bound-session-response-target.ts +39 -9
  502. package/src/runtime/streams/bound-session-service.ts +52 -42
  503. package/src/runtime/streams/index.ts +183 -100
  504. package/src/runtime/streams/managed-stream.ts +123 -90
  505. package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
  506. package/src/runtime/streams/protocol.ts +115 -46
  507. package/src/runtime/streams/session-actor-coordinator.ts +109 -93
  508. package/src/runtime/streams/session-calls.ts +2 -8
  509. package/src/runtime/streams/session-context.ts +96 -51
  510. package/src/runtime/streams/session-local-actors.ts +19 -3
  511. package/src/runtime/streams/session-provider.ts +5 -7
  512. package/src/runtime/streams/session-serial-executor.ts +7 -6
  513. package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
  514. package/src/runtime/streams/stream-frame-factory.ts +59 -40
  515. package/src/runtime/streams/stream-session-runtime.ts +317 -214
  516. package/src/runtime/workers/index.ts +68 -29
@@ -2,7 +2,11 @@ import type { Message } from '../../contracts/Common/Message';
2
2
  import type { ZLinkBackendSpotRouteBridge } from '../backend/contracts';
3
3
  import { ZLinkConfigurationException } from '../configuration';
4
4
  import type { ZLinkSpotRouteTarget } from '../spots/spot-routing-internal';
5
- import { closeMessages, decodeChannelReply, type ZLinkChannelEnvelopeCodecRegistry } from './channel-envelope';
5
+ import {
6
+ closeMessages,
7
+ decodeChannelReply,
8
+ type ZLinkChannelEnvelopeCodecRegistry
9
+ } from './channel-envelope';
6
10
  import { appendParts } from './channel-multipart';
7
11
  import { awaitWithAbort } from '../abort';
8
12
 
@@ -16,13 +20,20 @@ export class ZLinkSpotRouteBridgeTransport {
16
20
  return this.bridges.has(routerChannelId);
17
21
  }
18
22
 
19
- async send(target: ZLinkSpotRouteTarget, parts: readonly Message[], signal?: AbortSignal): Promise<void> {
23
+ async send(
24
+ target: ZLinkSpotRouteTarget,
25
+ parts: readonly Message[],
26
+ signal?: AbortSignal
27
+ ): Promise<void> {
20
28
  const bridge = this.requireBridge(target.routerChannelId);
21
29
  try {
22
- await awaitWithAbort(appendParts(
23
- bridge.send(target.routerChannelId, target.targetNodeRid, target.spotId),
24
- parts
25
- ).submit(), signal);
30
+ await awaitWithAbort(
31
+ appendParts(
32
+ bridge.send(target.routerChannelId, target.targetNodeRid, target.spotId),
33
+ parts
34
+ ).submit(),
35
+ signal
36
+ );
26
37
  } finally {
27
38
  closeMessages(parts);
28
39
  }
@@ -39,7 +50,9 @@ export class ZLinkSpotRouteBridgeTransport {
39
50
  const operation = appendParts(
40
51
  bridge.request(target.routerChannelId, target.targetNodeRid, target.spotId),
41
52
  parts
42
- ).timeout(timeoutMs ?? 0).submit();
53
+ )
54
+ .timeout(timeoutMs ?? 0)
55
+ .submit();
43
56
  const replyParts = await awaitWithAbort(operation, signal, () => {
44
57
  void operation.then(closeMessages, () => undefined);
45
58
  });
@@ -58,7 +71,8 @@ export class ZLinkSpotRouteBridgeTransport {
58
71
  signal?: AbortSignal
59
72
  ): Promise<readonly Message[]> {
60
73
  const bridge = this.requireBridge(target.routerChannelId);
61
- const operation = bridge.request(target.routerChannelId, target.targetNodeRid, target.spotId)
74
+ const operation = bridge
75
+ .request(target.routerChannelId, target.targetNodeRid, target.spotId)
62
76
  .message(request)
63
77
  .timeout(timeoutMs ?? this.defaultRequestTimeoutMs ?? 0)
64
78
  .submit();
@@ -69,7 +83,10 @@ export class ZLinkSpotRouteBridgeTransport {
69
83
 
70
84
  private requireBridge(routerChannelId: string): ZLinkBackendSpotRouteBridge {
71
85
  const bridge = this.bridges.get(routerChannelId);
72
- if (bridge === undefined) throw new ZLinkConfigurationException(`Route channel '${routerChannelId}' has no SPOT route bridge.`);
86
+ if (bridge === undefined)
87
+ throw new ZLinkConfigurationException(
88
+ `Route channel '${routerChannelId}' has no SPOT route bridge.`
89
+ );
73
90
  return bridge;
74
91
  }
75
92
  }
@@ -1,7 +1,11 @@
1
1
  import type { Message } from '../../contracts/Common/Message';
2
2
  import type { RoutingId } from '../../contracts';
3
3
  import type { ZLinkFrameworkRegistration } from '../configuration';
4
- import type { ZLinkBackendSpot, ZLinkBackendSpotNode, ZLinkBackendSpotRouteBridge } from '../backend/contracts';
4
+ import type {
5
+ ZLinkBackendSpot,
6
+ ZLinkBackendSpotNode,
7
+ ZLinkBackendSpotRouteBridge
8
+ } from '../backend/contracts';
5
9
  import type { ZLinkSpotRouteTarget } from '../spots/spot-routing-internal';
6
10
  import {
7
11
  encodeChannelEnvelopeParts,
@@ -103,9 +107,8 @@ export class ZLinkSpotRouteDispatchStrategy {
103
107
  ): Promise<void> {
104
108
  // Call-scoped flow (spec 27 §4): the envelope flow pair lives only for
105
109
  // the duration of this outbound call, never in the caller's context.
106
- return runWithOutboundFlow(
107
- this.options.flowCreationEnabled?.() ?? true,
108
- () => this.routeSendToSpotScoped(spotRouteTarget, packetName, message, signal, metadata, timeoutMs)
110
+ return runWithOutboundFlow(this.options.flowCreationEnabled?.() ?? true, () =>
111
+ this.routeSendToSpotScoped(spotRouteTarget, packetName, message, signal, metadata, timeoutMs)
109
112
  );
110
113
  }
111
114
 
@@ -143,8 +146,10 @@ export class ZLinkSpotRouteDispatchStrategy {
143
146
  this.options.flowCreationEnabled?.() ?? true,
144
147
  metadata
145
148
  ) as readonly Message[];
146
- if (this.targets.hasNamedSpotNode(spotRouteTarget.routerChannelId)
147
- && await this.spotNodeTransport.send(spotRouteTarget, parts, signal)) {
149
+ if (
150
+ this.targets.hasNamedSpotNode(spotRouteTarget.routerChannelId) &&
151
+ (await this.spotNodeTransport.send(spotRouteTarget, parts, signal))
152
+ ) {
148
153
  return;
149
154
  }
150
155
  if (this.bridgeTransport.has(spotRouteTarget.routerChannelId)) {
@@ -169,9 +174,15 @@ export class ZLinkSpotRouteDispatchStrategy {
169
174
  signal?: AbortSignal,
170
175
  metadata?: ReadonlyMap<string, string>
171
176
  ): Promise<TReply> {
172
- return runWithOutboundFlow(
173
- this.options.flowCreationEnabled?.() ?? true,
174
- () => this.routeRequestToSpotScoped<TReply>(spotRouteTarget, packetName, request, timeoutMs, signal, metadata)
177
+ return runWithOutboundFlow(this.options.flowCreationEnabled?.() ?? true, () =>
178
+ this.routeRequestToSpotScoped<TReply>(
179
+ spotRouteTarget,
180
+ packetName,
181
+ request,
182
+ timeoutMs,
183
+ signal,
184
+ metadata
185
+ )
175
186
  );
176
187
  }
177
188
 
@@ -219,7 +230,13 @@ export class ZLinkSpotRouteDispatchStrategy {
219
230
  if (namedSpotNodeRequest !== undefined) return namedSpotNodeRequest;
220
231
  }
221
232
  if (this.bridgeTransport.has(spotRouteTarget.routerChannelId)) {
222
- return this.bridgeTransport.request<TReply>(spotRouteTarget, parts, codecs, timeoutMs, signal);
233
+ return this.bridgeTransport.request<TReply>(
234
+ spotRouteTarget,
235
+ parts,
236
+ codecs,
237
+ timeoutMs,
238
+ signal
239
+ );
223
240
  }
224
241
  if (this.targets.hasBoundRouteRouter(spotRouteTarget.routerChannelId)) {
225
242
  return this.routerSocketTransport.request<TReply>(
@@ -296,7 +313,13 @@ export class ZLinkSpotRouteDispatchStrategy {
296
313
  timeoutMs: number | undefined,
297
314
  signal?: AbortSignal
298
315
  ): Promise<readonly Message[]> {
299
- return this.sourceSpotRouter.requestRaw(sourceSpot, spotRouteTarget, request, timeoutMs, signal);
316
+ return this.sourceSpotRouter.requestRaw(
317
+ sourceSpot,
318
+ spotRouteTarget,
319
+ request,
320
+ timeoutMs,
321
+ signal
322
+ );
300
323
  }
301
324
 
302
325
  async routeRequestRawToSpot(
@@ -318,12 +341,16 @@ export class ZLinkSpotRouteDispatchStrategy {
318
341
  if (this.bridgeTransport.has(spotRouteTarget.routerChannelId)) {
319
342
  return this.bridgeTransport.requestRaw(spotRouteTarget, request, timeoutMs, signal);
320
343
  }
321
- const spotNodeRequest = this.spotNodeTransport.requestRaw(spotRouteTarget, request, timeoutMs, signal);
344
+ const spotNodeRequest = this.spotNodeTransport.requestRaw(
345
+ spotRouteTarget,
346
+ request,
347
+ timeoutMs,
348
+ signal
349
+ );
322
350
  if (spotNodeRequest !== undefined) {
323
351
  return spotNodeRequest;
324
352
  }
325
353
 
326
354
  return this.routerSocketTransport.requestRaw(spotRouteTarget, request, timeoutMs, signal);
327
355
  }
328
-
329
356
  }
@@ -17,8 +17,9 @@ export class ZLinkSpotRouteTargetResolver {
17
17
  if (named?.router !== undefined) {
18
18
  return this.spotNodes?.get(routerChannelId);
19
19
  }
20
- const channelOwners = [...this.registration.spotNodes.entries()]
21
- .filter(([, node]) => Object.prototype.hasOwnProperty.call(node.meshChannels ?? {}, routerChannelId));
20
+ const channelOwners = [...this.registration.spotNodes.entries()].filter(([, node]) =>
21
+ Object.prototype.hasOwnProperty.call(node.meshChannels ?? {}, routerChannelId)
22
+ );
22
23
  if (channelOwners.length === 1) {
23
24
  return this.spotNodes?.get(channelOwners[0][0]);
24
25
  }
@@ -40,8 +41,10 @@ export class ZLinkSpotRouteTargetResolver {
40
41
  }
41
42
 
42
43
  localRouteNode(target: ZLinkSpotRouteTarget): ZLinkBackendSpotNode | undefined {
43
- const routeNode = this.routeNode(target.routerChannelId) ?? this.spotNodes?.get(target.routerChannelId);
44
- return routeNode !== undefined && routingIdsMatchSpotRoute(routeNode.routingId, target.targetNodeRid)
44
+ const routeNode =
45
+ this.routeNode(target.routerChannelId) ?? this.spotNodes?.get(target.routerChannelId);
46
+ return routeNode !== undefined &&
47
+ routingIdsMatchSpotRoute(routeNode.routingId, target.targetNodeRid)
45
48
  ? routeNode
46
49
  : undefined;
47
50
  }
@@ -55,8 +58,10 @@ export class ZLinkSpotRouteTargetResolver {
55
58
  }
56
59
 
57
60
  canRouteChannel(routerChannelId: string): boolean {
58
- return this.registration.routeChannels.has(routerChannelId)
59
- || this.spotNodeRouter(routerChannelId) !== undefined;
61
+ return (
62
+ this.registration.routeChannels.has(routerChannelId) ||
63
+ this.spotNodeRouter(routerChannelId) !== undefined
64
+ );
60
65
  }
61
66
 
62
67
  canRoutePacketChannel(routerChannelId: string): boolean {
@@ -73,15 +78,19 @@ export class ZLinkSpotRouteTargetResolver {
73
78
  hasNamedSpotNode(routerChannelId: string): boolean {
74
79
  return this.registration.spotNodes.has(routerChannelId);
75
80
  }
76
-
77
81
  }
78
82
 
79
- function routingIdsMatchSpotRoute(left: RoutingId | undefined, right: RoutingId | undefined): boolean {
83
+ function routingIdsMatchSpotRoute(
84
+ left: RoutingId | undefined,
85
+ right: RoutingId | undefined
86
+ ): boolean {
80
87
  if (left === undefined || right === undefined) {
81
88
  return false;
82
89
  }
83
90
  const rightCandidates = spotRouteRoutingIdCandidates(right);
84
- return [...spotRouteRoutingIdCandidates(left)].some(candidate => rightCandidates.has(candidate));
91
+ return [...spotRouteRoutingIdCandidates(left)].some((candidate) =>
92
+ rightCandidates.has(candidate)
93
+ );
85
94
  }
86
95
 
87
96
  function spotRouteRoutingIdCandidates(routingId: RoutingId): ReadonlySet<string> {
@@ -12,7 +12,9 @@ import {
12
12
  type ZLinkCodecSerializerSelection
13
13
  } from '../../contracts/Configuration/CodecSerializerSelection';
14
14
 
15
- export class DefaultZLinkCodecRegistryBuilder implements ZLinkCodecRegistryBuilder, ZLinkCodecRegistrar {
15
+ export class DefaultZLinkCodecRegistryBuilder
16
+ implements ZLinkCodecRegistryBuilder, ZLinkCodecRegistrar
17
+ {
16
18
  private readonly serializers = new Map<string, ZLinkMessageSerializer>();
17
19
  private readonly serializerSelections = new Map<string, ZLinkCodecSerializerSelection>();
18
20
  private readonly streamCodecs = new Map<string, unknown>();
@@ -65,5 +67,4 @@ export class DefaultZLinkCodecRegistryBuilder implements ZLinkCodecRegistryBuild
65
67
  this.codecs.add(normalized);
66
68
  return this;
67
69
  }
68
-
69
70
  }
@@ -0,0 +1,62 @@
1
+ const ERROR_MESSAGE_MAX_LENGTH = 512;
2
+
3
+ const CREDENTIAL_PATTERNS: ReadonlyArray<readonly [RegExp, string]> = [
4
+ [/Authorization\s*:\s*(?:(?:Bearer|Basic)\s+)?[^\s,;]+/gi, 'Authorization: <redacted>'],
5
+ [/Bearer\s+[^\s,;]+/gi, 'Bearer <redacted>'],
6
+ [/password\s*=\s*[^\s,;]+/gi, 'password=<redacted>'],
7
+ [/token\s*=\s*[^\s,;]+/gi, 'token=<redacted>']
8
+ ];
9
+
10
+ export function dispatchErrorDetails(error: unknown): {
11
+ readonly errorType?: string;
12
+ readonly errorMessage?: string;
13
+ readonly errorCauseType?: string;
14
+ readonly errorCauseMessage?: string;
15
+ } {
16
+ if (error === undefined || error === null) return {};
17
+ if (error instanceof Error) {
18
+ const cause = deepestErrorCause(error);
19
+ return {
20
+ errorType: error.name,
21
+ errorMessage: sanitizeErrorMessage(error.message),
22
+ ...(cause === error
23
+ ? {}
24
+ : {
25
+ errorCauseType: cause instanceof Error ? cause.name : typeof cause,
26
+ errorCauseMessage: sanitizeErrorMessage(
27
+ cause instanceof Error ? cause.message : String(cause)
28
+ )
29
+ })
30
+ };
31
+ }
32
+ const errorType = typeof error === 'object' ? error.constructor.name : typeof error;
33
+ const message =
34
+ typeof error === 'string' ||
35
+ typeof error === 'number' ||
36
+ typeof error === 'boolean' ||
37
+ typeof error === 'bigint'
38
+ ? `${error}`
39
+ : Object.prototype.toString.call(error);
40
+ return { errorType, errorMessage: sanitizeErrorMessage(message) };
41
+ }
42
+
43
+ function deepestErrorCause(error: Error): unknown {
44
+ let current: unknown = error;
45
+ const seen = new Set<unknown>();
46
+ while (current instanceof Error && current.cause !== undefined && !seen.has(current)) {
47
+ seen.add(current);
48
+ current = current.cause;
49
+ }
50
+ return current;
51
+ }
52
+
53
+ function sanitizeErrorMessage(message: string): string {
54
+ if (message.length === 0) return '';
55
+ const lineEnd = message.search(/[\r\n]/u);
56
+ let sanitized = lineEnd < 0 ? message : message.slice(0, lineEnd);
57
+ for (const [pattern, replacement] of CREDENTIAL_PATTERNS) {
58
+ pattern.lastIndex = 0;
59
+ sanitized = sanitized.replace(pattern, replacement);
60
+ }
61
+ return sanitized.slice(0, ERROR_MESSAGE_MAX_LENGTH);
62
+ }
@@ -5,6 +5,7 @@ import type { ZLinkFlowOrigin } from '../../contracts';
5
5
  export interface ZLinkFlowContextValue {
6
6
  readonly flowId: string;
7
7
  readonly flowOrigin: ZLinkFlowOrigin;
8
+ readonly streamSessionId?: string;
8
9
  }
9
10
 
10
11
  const flowStorage = new AsyncLocalStorage<ZLinkFlowContextValue | undefined>();
@@ -13,9 +14,18 @@ export function currentFlowContext(): ZLinkFlowContextValue | undefined {
13
14
  return flowStorage.getStore();
14
15
  }
15
16
 
16
- export function currentOrCreateFlow(origin?: ZLinkFlowOrigin, createIfAbsent?: true): ZLinkFlowContextValue;
17
- export function currentOrCreateFlow(origin: ZLinkFlowOrigin, createIfAbsent: false): ZLinkFlowContextValue | undefined;
18
- export function currentOrCreateFlow(origin: ZLinkFlowOrigin, createIfAbsent: boolean): ZLinkFlowContextValue | undefined;
17
+ export function currentOrCreateFlow(
18
+ origin?: ZLinkFlowOrigin,
19
+ createIfAbsent?: true
20
+ ): ZLinkFlowContextValue;
21
+ export function currentOrCreateFlow(
22
+ origin: ZLinkFlowOrigin,
23
+ createIfAbsent: false
24
+ ): ZLinkFlowContextValue | undefined;
25
+ export function currentOrCreateFlow(
26
+ origin: ZLinkFlowOrigin,
27
+ createIfAbsent: boolean
28
+ ): ZLinkFlowContextValue | undefined;
19
29
  /**
20
30
  * Returns the ambient flow context or, when absent and `createIfAbsent`, a
21
31
  * fresh flow value. The returned value is NOT installed into the ambient
@@ -62,14 +72,15 @@ export function runWithOutboundFlow<T>(enabled: boolean, callback: () => T): T {
62
72
  }
63
73
 
64
74
  export function createInboundFlow(
65
- flowId?: string,
66
- flowOrigin?: ZLinkFlowOrigin,
67
- createIfAbsent = true
75
+ flowId: string | undefined,
76
+ flowOrigin: ZLinkFlowOrigin | undefined,
77
+ createIfAbsent: boolean,
78
+ streamSessionId: string | undefined
68
79
  ): ZLinkFlowContextValue | undefined {
69
80
  if (!createIfAbsent) {
70
81
  return undefined;
71
82
  }
72
- return { flowId: flowId ?? createFlowId(), flowOrigin: flowOrigin ?? 'Inbound' };
83
+ return { flowId: flowId ?? createFlowId(), flowOrigin: flowOrigin ?? 'Inbound', streamSessionId };
73
84
  }
74
85
 
75
86
  function createFlowId(): string {
@@ -47,10 +47,7 @@ export {
47
47
  ZLinkLocationSpotEventKind,
48
48
  ZLinkSocketNativeEventType
49
49
  } from './internal-event-contracts';
50
- import type {
51
- ZLinkBackendSocketMonitor,
52
- ZLinkBackendSocketMonitorEvent
53
- } from '../backend';
50
+ import type { ZLinkBackendSocketMonitor, ZLinkBackendSocketMonitorEvent } from '../backend';
54
51
  import { AsyncResource } from 'node:async_hooks';
55
52
  import { ZLinkStateLane } from '../execution/state-lane';
56
53
  import { normalizeOpaqueRoutingId } from '../routing-id';
@@ -66,15 +63,9 @@ export interface ZLinkActorOwnerLeaseObservation {
66
63
  }
67
64
 
68
65
  /** Emits high-cardinality resolver detail only on the existing relocation debug path. */
69
- export function emitActorOwnerLeaseObservation(
70
- observation: ZLinkActorOwnerLeaseObservation
71
- ): void {
66
+ export function emitActorOwnerLeaseObservation(observation: ZLinkActorOwnerLeaseObservation): void {
72
67
  if (process.env.ZLINK_DEBUG_FRAMEWORK_RELOCATION !== '1') return;
73
- console.error(
74
- '[zlink.runtime.relocation]',
75
- 'actor_route.owner_lease_observed',
76
- observation
77
- );
68
+ console.error('[zlink.runtime.relocation]', 'actor_route.owner_lease_observed', observation);
78
69
  }
79
70
 
80
71
  /** Runtime composition port. It is intentionally absent from the public contract barrel. */
@@ -111,9 +102,8 @@ export class ZLinkSocketMonitoringSource {
111
102
  private readonly publisher: ZLinkRuntimeEventPublisher
112
103
  ) {
113
104
  validateSourceName(registration.sourceName);
114
- this.enabledEvents = registration.events === undefined
115
- ? undefined
116
- : new Set(registration.events);
105
+ this.enabledEvents =
106
+ registration.events === undefined ? undefined : new Set(registration.events);
117
107
  }
118
108
 
119
109
  start(): void {
@@ -155,38 +145,38 @@ export class ZLinkLocationRuntimeMonitoringSource {
155
145
  let topology;
156
146
  let serviceSummary;
157
147
  try {
158
- [status, topology, serviceSummary] = await startOutsideStateLane(() => Promise.all([
159
- this.query.getStatus(signal),
160
- this.query.listTopology({}, undefined, signal),
161
- this.query.listServiceSummaries({}, undefined, signal)
162
- ]));
148
+ [status, topology, serviceSummary] = await startOutsideStateLane(() =>
149
+ Promise.all([
150
+ this.query.getStatus(signal),
151
+ this.query.listTopology({}, undefined, signal),
152
+ this.query.listServiceSummaries({}, undefined, signal)
153
+ ])
154
+ );
163
155
  } catch (error) {
164
156
  if (await this.lane.run(() => this.markStoreFailureCore())) {
165
- await startOutsideStateLane(() => this.publisher.publish({
166
- sourceName: this.registration.sourceName,
167
- timestamp: new Date(),
168
- event: LocationRuntimeEventKind.StoreFailure
169
- } satisfies ZLinkLocationRuntimeEvent));
157
+ await startOutsideStateLane(() =>
158
+ this.publisher.publish({
159
+ sourceName: this.registration.sourceName,
160
+ timestamp: new Date(),
161
+ event: LocationRuntimeEventKind.StoreFailure
162
+ } satisfies ZLinkLocationRuntimeEvent)
163
+ );
170
164
  }
171
165
  return;
172
166
  }
173
167
 
174
168
  if (await this.lane.run(() => this.markStoreRecoveredCore())) {
175
- await startOutsideStateLane(() => this.publisher.publish({
176
- sourceName: this.registration.sourceName,
177
- timestamp: new Date(),
178
- event: LocationRuntimeEventKind.StoreRecovered
179
- } satisfies ZLinkLocationRuntimeEvent));
169
+ await startOutsideStateLane(() =>
170
+ this.publisher.publish({
171
+ sourceName: this.registration.sourceName,
172
+ timestamp: new Date(),
173
+ event: LocationRuntimeEventKind.StoreRecovered
174
+ } satisfies ZLinkLocationRuntimeEvent)
175
+ );
180
176
  }
181
177
 
182
- await this.publishIfChanged(
183
- LocationRuntimeEventKind.StatusChanged,
184
- status
185
- );
186
- await this.publishIfChanged(
187
- LocationRuntimeEventKind.TopologyChanged,
188
- topology.items
189
- );
178
+ await this.publishIfChanged(LocationRuntimeEventKind.StatusChanged, status);
179
+ await this.publishIfChanged(LocationRuntimeEventKind.TopologyChanged, topology.items);
190
180
  await this.publishIfChanged(
191
181
  LocationRuntimeEventKind.ServiceSummaryChanged,
192
182
  serviceSummary.items
@@ -205,16 +195,16 @@ export class ZLinkLocationRuntimeMonitoringSource {
205
195
  return true;
206
196
  }
207
197
 
208
- private async publishIfChanged(event: ZLinkLocationRuntimeEventKind, snapshot: unknown): Promise<void> {
198
+ private async publishIfChanged(
199
+ event: ZLinkLocationRuntimeEventKind,
200
+ snapshot: unknown
201
+ ): Promise<void> {
209
202
  const current = stableSnapshot(snapshot);
210
203
  const previous = await this.lane.run(() => this.previousSnapshotCore(event));
211
204
  if (current === previous) return;
212
- await startOutsideStateLane(() => publishLocationRuntimeChange(
213
- this.publisher,
214
- this.registration.sourceName,
215
- event,
216
- snapshot
217
- ));
205
+ await startOutsideStateLane(() =>
206
+ publishLocationRuntimeChange(this.publisher, this.registration.sourceName, event, snapshot)
207
+ );
218
208
  await this.lane.run(() => this.updateSnapshotCore(event, current));
219
209
  }
220
210
 
@@ -258,7 +248,12 @@ export class ZLinkLocationMonitoringEventEmitter {
258
248
  },
259
249
  private readonly publisher?: ZLinkRuntimeEventPublisher
260
250
  ) {
261
- for (const source of [registration.peer, registration.spot, registration.actor, registration.route]) {
251
+ for (const source of [
252
+ registration.peer,
253
+ registration.spot,
254
+ registration.actor,
255
+ registration.route
256
+ ]) {
262
257
  if (source !== undefined) {
263
258
  validateSourceName(source.sourceName);
264
259
  }
@@ -313,36 +308,68 @@ export class ZLinkLocationMonitoringEventEmitter {
313
308
  this.publishRoute(RouteLocationEventKind.ResolveMiss, { key });
314
309
  }
315
310
 
316
- private publishPeer(event: ZLinkLocationPeerEvent['event'], payload: Record<string, unknown>): void {
311
+ private publishPeer(
312
+ event: ZLinkLocationPeerEvent['event'],
313
+ payload: Record<string, unknown>
314
+ ): void {
317
315
  const registration = this.registration.peer;
318
316
  if (registration === undefined) {
319
317
  return;
320
318
  }
321
- this.publish({ sourceName: registration.sourceName, timestamp: new Date(), event, ...payload } as ZLinkLocationPeerEvent);
319
+ this.publish({
320
+ sourceName: registration.sourceName,
321
+ timestamp: new Date(),
322
+ event,
323
+ ...payload
324
+ } as ZLinkLocationPeerEvent);
322
325
  }
323
326
 
324
- private publishSpotLocation(event: ZLinkLocationSpotEvent['event'], payload: Record<string, unknown>): void {
327
+ private publishSpotLocation(
328
+ event: ZLinkLocationSpotEvent['event'],
329
+ payload: Record<string, unknown>
330
+ ): void {
325
331
  const registration = this.registration.spot;
326
332
  if (registration === undefined) {
327
333
  return;
328
334
  }
329
- this.publish({ sourceName: registration.sourceName, timestamp: new Date(), event, ...payload } as ZLinkLocationSpotEvent);
335
+ this.publish({
336
+ sourceName: registration.sourceName,
337
+ timestamp: new Date(),
338
+ event,
339
+ ...payload
340
+ } as ZLinkLocationSpotEvent);
330
341
  }
331
342
 
332
- private publishActor(event: ZLinkLocationActorEvent['event'], payload: Record<string, unknown>): void {
343
+ private publishActor(
344
+ event: ZLinkLocationActorEvent['event'],
345
+ payload: Record<string, unknown>
346
+ ): void {
333
347
  const registration = this.registration.actor;
334
348
  if (registration === undefined) {
335
349
  return;
336
350
  }
337
- this.publish({ sourceName: registration.sourceName, timestamp: new Date(), event, ...payload } as ZLinkLocationActorEvent);
351
+ this.publish({
352
+ sourceName: registration.sourceName,
353
+ timestamp: new Date(),
354
+ event,
355
+ ...payload
356
+ } as ZLinkLocationActorEvent);
338
357
  }
339
358
 
340
- private publishRoute(event: ZLinkLocationRouteEvent['event'], payload: Record<string, unknown>): void {
359
+ private publishRoute(
360
+ event: ZLinkLocationRouteEvent['event'],
361
+ payload: Record<string, unknown>
362
+ ): void {
341
363
  const registration = this.registration.route;
342
364
  if (registration === undefined) {
343
365
  return;
344
366
  }
345
- this.publish({ sourceName: registration.sourceName, timestamp: new Date(), event, ...payload } as ZLinkLocationRouteEvent);
367
+ this.publish({
368
+ sourceName: registration.sourceName,
369
+ timestamp: new Date(),
370
+ event,
371
+ ...payload
372
+ } as ZLinkLocationRouteEvent);
346
373
  }
347
374
 
348
375
  private publish<TEvent extends ZLinkRuntimeEvent>(event: TEvent): void {
@@ -357,7 +384,10 @@ export class ZLinkLocationMonitoringEventEmitter {
357
384
 
358
385
  export * from './topology-runtime-projections';
359
386
 
360
- function toSocketEvent(sourceName: string, raw: ZLinkBackendSocketMonitorEvent): ZLinkSocketEvent | undefined {
387
+ function toSocketEvent(
388
+ sourceName: string,
389
+ raw: ZLinkBackendSocketMonitorEvent
390
+ ): ZLinkSocketEvent | undefined {
361
391
  const event = mapSocketEvent(raw.nativeEvent as ZLinkSocketNativeEventType, raw.value);
362
392
  if (event === undefined) {
363
393
  return undefined;
@@ -408,11 +438,16 @@ async function publishLocationRuntimeChange<T>(
408
438
  snapshot: T
409
439
  ): Promise<void> {
410
440
  const base = { sourceName, timestamp: new Date() };
411
- const runtimeEvent: ZLinkLocationRuntimeEvent = event === LocationRuntimeEventKind.StatusChanged
412
- ? { ...base, event, status: snapshot as ZLinkLocationRuntimeStatus }
413
- : event === LocationRuntimeEventKind.TopologyChanged
414
- ? { ...base, event, topology: snapshot as readonly ZLinkLocationTopologyEntry[] }
415
- : { ...base, event: LocationRuntimeEventKind.ServiceSummaryChanged, serviceSummary: snapshot as readonly ZLinkLocationServiceSummary[] };
441
+ const runtimeEvent: ZLinkLocationRuntimeEvent =
442
+ event === LocationRuntimeEventKind.StatusChanged
443
+ ? { ...base, event, status: snapshot as ZLinkLocationRuntimeStatus }
444
+ : event === LocationRuntimeEventKind.TopologyChanged
445
+ ? { ...base, event, topology: snapshot as readonly ZLinkLocationTopologyEntry[] }
446
+ : {
447
+ ...base,
448
+ event: LocationRuntimeEventKind.ServiceSummaryChanged,
449
+ serviceSummary: snapshot as readonly ZLinkLocationServiceSummary[]
450
+ };
416
451
  await publisher.publish(runtimeEvent);
417
452
  }
418
453
 
@@ -421,7 +456,7 @@ function startOutsideStateLane<T>(work: () => T): T {
421
456
  }
422
457
 
423
458
  function stableSnapshot(value: unknown): string {
424
- return JSON.stringify(value, (_key, item) => typeof item === 'bigint' ? item.toString() : item);
459
+ return JSON.stringify(value, (_key, item) => (typeof item === 'bigint' ? item.toString() : item));
425
460
  }
426
461
 
427
462
  function validateSourceName(sourceName: string): void {