@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
@@ -1,14 +1,9 @@
1
- import { ZLinkFrameworkInternalErrorKind, createInternalFrameworkException } from '../framework-errors-internal';
2
- import type {
3
- ZLinkMessageSerializer,
4
- RoutingId,
5
- ZLinkSession
6
- } from '../../contracts';
7
- import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
8
1
  import {
9
- ZLinkFrameworkErrorKind,
10
- ZLinkFrameworkException
11
- } from '../../contracts';
2
+ ZLinkFrameworkInternalErrorKind,
3
+ createInternalFrameworkException
4
+ } from '../framework-errors-internal';
5
+ import type { ZLinkMessageSerializer, RoutingId, ZLinkSession } from '../../contracts';
6
+ import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
12
7
  import { ZLinkSocketNativeEventType } from '../diagnostics/internal-event-contracts';
13
8
  import {
14
9
  ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome,
@@ -20,6 +15,7 @@ import {
20
15
  import type { Message } from '../../contracts/Common/Message';
21
16
  import { throwIfAborted } from '../abort';
22
17
  import { ZLinkDispatchErrorReporter, ZLinkRouteDisconnectedError } from '../channels';
18
+ import { boundSessionErrorPayload } from './bound-session-response-target';
23
19
  import { flowIfEnabled } from '../diagnostics';
24
20
  import type { ZLinkRuntimeMetrics } from '../diagnostics';
25
21
  import { wrapFrameworkPayloadMessage } from '../messaging/payload-codec';
@@ -130,10 +126,10 @@ export interface ZLinkStreamSessionRuntimeOptions {
130
126
  readonly socket: ZLinkBackendStreamSocket;
131
127
  readonly nativeSessionService?: StreamSessionService;
132
128
  readonly meshCompletions?: ZLinkMeshCompletionTable;
133
- readonly nativeSessionRouteForMesh?: (
134
- meshName: string
135
- ) => ZLinkNativeSessionRoute | undefined;
136
- readonly sessionFactory: (context: DefaultZLinkSessionContext) => ZLinkSession | Promise<ZLinkSession>;
129
+ readonly nativeSessionRouteForMesh?: (meshName: string) => ZLinkNativeSessionRoute | undefined;
130
+ readonly sessionFactory: (
131
+ context: DefaultZLinkSessionContext
132
+ ) => ZLinkSession | Promise<ZLinkSession>;
137
133
  readonly bindingRuntime: ZLinkStreamSessionContextFactory;
138
134
  readonly providerResolver?: ZLinkProviderResolver;
139
135
  readonly onError?: (error: unknown) => void;
@@ -172,7 +168,10 @@ export class ZLinkStreamSessionRuntime {
172
168
  constructor(
173
169
  private readonly options: ZLinkStreamSessionRuntimeOptions & ZLinkStreamLivenessOptions,
174
170
  routingId: unknown,
175
- private readonly removeSession: (sessionId: string, session: ZLinkStreamSessionRuntime) => void = () => {}
171
+ private readonly removeSession: (
172
+ sessionId: string,
173
+ session: ZLinkStreamSessionRuntime
174
+ ) => void = () => {}
176
175
  ) {
177
176
  this.livenessClock = options.livenessClock ?? systemLivenessClock;
178
177
  this.stream = new ZLinkManagedStream(
@@ -198,12 +197,12 @@ export class ZLinkStreamSessionRuntime {
198
197
  const sessionOrPromise = options.sessionFactory(this.context);
199
198
  this.sessionReady = isPromiseLike(sessionOrPromise)
200
199
  ? sessionOrPromise.then(
201
- (session) => this.completeSessionCreation(session),
202
- (error) => {
203
- this.context.completeConfiguration();
204
- throw error;
205
- }
206
- )
200
+ (session) => this.completeSessionCreation(session),
201
+ (error) => {
202
+ this.context.completeConfiguration();
203
+ throw error;
204
+ }
205
+ )
207
206
  : Promise.resolve(this.completeSessionCreation(sessionOrPromise));
208
207
  }
209
208
 
@@ -252,17 +251,19 @@ export class ZLinkStreamSessionRuntime {
252
251
  };
253
252
  if (decodedHeader.kind === ZLinkStreamMessageKind.Control) {
254
253
  if (
255
- messageToBytes(payload).length === 0
256
- && (decodedHeader.name === ZLINK_STREAM_HEARTBEAT_PONG
257
- || decodedHeader.name === ZLINK_STREAM_HEARTBEAT_PING)
254
+ messageToBytes(payload).length === 0 &&
255
+ (decodedHeader.name === ZLINK_STREAM_HEARTBEAT_PONG ||
256
+ decodedHeader.name === ZLINK_STREAM_HEARTBEAT_PING)
258
257
  ) {
259
- void this.handleControl(decodedHeader, payload).catch(error => {
260
- this.options.onError?.(error);
261
- }).finally(() => {
262
- applicationJobPermit?.releaseAfterInternalProcessing();
263
- payload.close();
264
- releaseTerminal();
265
- });
258
+ void this.handleControl(decodedHeader, payload)
259
+ .catch((error) => {
260
+ this.options.onError?.(error);
261
+ })
262
+ .finally(() => {
263
+ applicationJobPermit?.releaseAfterInternalProcessing();
264
+ payload.close();
265
+ releaseTerminal();
266
+ });
266
267
  return;
267
268
  }
268
269
  this.enqueueControl(
@@ -285,8 +286,8 @@ export class ZLinkStreamSessionRuntime {
285
286
  return;
286
287
  }
287
288
  if (
288
- decodedHeader.kind === ZLinkStreamMessageKind.Response
289
- || decodedHeader.kind === ZLinkStreamMessageKind.Error
289
+ decodedHeader.kind === ZLinkStreamMessageKind.Response ||
290
+ decodedHeader.kind === ZLinkStreamMessageKind.Error
290
291
  ) {
291
292
  this.enqueueInfrastructure(
292
293
  async () => {
@@ -352,13 +353,13 @@ export class ZLinkStreamSessionRuntime {
352
353
  if (forcedClose) return;
353
354
  this.livenessClock.setTimer(() => {
354
355
  if (
355
- this.disposed
356
- || this.disconnected
357
- || !this.context.isExactRetiredActorBinding(actor, retiredSession)
356
+ this.disposed ||
357
+ this.disconnected ||
358
+ !this.context.isExactRetiredActorBinding(actor, retiredSession)
358
359
  ) {
359
360
  return;
360
361
  }
361
- void this.close().catch(error => this.options.onError?.(error));
362
+ void this.close().catch((error) => this.options.onError?.(error));
362
363
  }, ZLINK_STREAM_ACTOR_BINDING_REPLACEMENT_CLOSE_DELAY_MS);
363
364
  };
364
365
  const completeCallback = (): void => {
@@ -380,16 +381,15 @@ export class ZLinkStreamSessionRuntime {
380
381
  };
381
382
  callbackDeadlineTimer = this.livenessClock.setTimer(() => {
382
383
  if (
383
- this.disposed
384
- || this.disconnected
385
- || !this.context.isExactRetiredActorBinding(actor, retiredSession)
384
+ this.disposed ||
385
+ this.disconnected ||
386
+ !this.context.isExactRetiredActorBinding(actor, retiredSession)
386
387
  ) {
387
388
  return;
388
389
  }
389
390
  forcedClose = true;
390
- void this.close().catch(error => this.options.onError?.(error));
391
- }, this.options.replacementCallbackTimeoutMs
392
- ?? ZLINK_STREAM_ACTOR_BINDING_REPLACEMENT_CALLBACK_TIMEOUT_MS);
391
+ void this.close().catch((error) => this.options.onError?.(error));
392
+ }, this.options.replacementCallbackTimeoutMs ?? ZLINK_STREAM_ACTOR_BINDING_REPLACEMENT_CALLBACK_TIMEOUT_MS);
393
393
 
394
394
  const callback = session.onActorBindingReplaced;
395
395
  if (callback === undefined) {
@@ -400,10 +400,7 @@ export class ZLinkStreamSessionRuntime {
400
400
  // Start the callback on this lifecycle turn, but do not retain the
401
401
  // serial lane while application code awaits an unrelated operation.
402
402
  const result = callback.call(session, this.context, actor.actorId);
403
- void Promise.resolve(result).then(
404
- () => completeCallback(),
405
- reportCallbackFailure
406
- );
403
+ void Promise.resolve(result).then(() => completeCallback(), reportCallbackFailure);
407
404
  } catch (error) {
408
405
  reportCallbackFailure(error);
409
406
  }
@@ -480,76 +477,148 @@ export class ZLinkStreamSessionRuntime {
480
477
  if (this.context.tryCompleteResponse(decodedHeader, dispatchPayload)) {
481
478
  return;
482
479
  }
480
+ const dispatchActor = this.context.actorForSlot(decodedHeader.actorSlot);
481
+ if (decodedHeader.actorSlot !== undefined && dispatchActor === undefined) {
482
+ const staleFlowEnabled = this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true;
483
+ await runWithFlow(
484
+ createInboundFlow(
485
+ decodedHeader.flowId,
486
+ decodedHeader.flowOrigin,
487
+ staleFlowEnabled,
488
+ staleFlowEnabled ? this.stream.sessionId : undefined
489
+ ),
490
+ async () => {
491
+ if (decodedHeader.kind === ZLinkStreamMessageKind.Request) {
492
+ const error = createInternalFrameworkException(
493
+ ZLinkFrameworkInternalErrorKind.InvalidOperation,
494
+ 'Actor slot is not a current binding.'
495
+ );
496
+ this.options.dispatchErrors?.report({
497
+ surface: ZLinkDispatchErrorSurface.StreamSession,
498
+ messageKind: ZLinkDispatchMessageKind.Request,
499
+ reason: ZLinkDispatchErrorReason.StaleTarget,
500
+ action: ZLinkDispatchErrorAction.ReplyError,
501
+ packetName: decodedHeader.name,
502
+ sourceRid:
503
+ this.context.routingId === undefined ? undefined : String(this.context.routingId),
504
+ correlationId: decodedHeader.correlationId,
505
+ flowId: decodedHeader.flowId,
506
+ flowOrigin: decodedHeader.flowOrigin,
507
+ error
508
+ });
509
+ await this.replyDispatchError(decodedHeader, error);
510
+ } else {
511
+ flowIfEnabled(
512
+ this.options.dispatchErrors?.flow,
513
+ ZLinkMessageFlowOutcome.Dropped
514
+ )?.trace({
515
+ outcome: ZLinkMessageFlowOutcome.Dropped,
516
+ surface: ZLinkDispatchErrorSurface.StreamSession,
517
+ messageKind: ZLinkDispatchMessageKind.Send,
518
+ packetName: decodedHeader.name,
519
+ correlationId: decodedHeader.correlationId,
520
+ sourceRid:
521
+ this.context.routingId === undefined ? undefined : String(this.context.routingId),
522
+ errorReason: ZLinkDispatchErrorReason.StaleTarget
523
+ });
524
+ }
525
+ }
526
+ );
527
+ return;
528
+ }
483
529
  this.context.enterDispatch(decodedHeader);
484
530
  enteredDispatch = true;
485
531
  const session = await this.requireSession();
486
- const streamKind = decodedHeader.kind === ZLinkStreamMessageKind.Request
487
- ? ZLinkDispatchMessageKind.Request
488
- : ZLinkDispatchMessageKind.Send;
532
+ const streamKind =
533
+ decodedHeader.kind === ZLinkStreamMessageKind.Request
534
+ ? ZLinkDispatchMessageKind.Request
535
+ : ZLinkDispatchMessageKind.Send;
489
536
  const streamCorr = decodedHeader.correlationId;
490
537
  const inboundHeader = decodedHeader;
491
- await runWithFlow(createInboundFlow(
492
- inboundHeader.flowId,
493
- inboundHeader.flowOrigin,
494
- this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true
495
- ), async () => {
496
- flowIfEnabled(this.options.dispatchErrors?.flow, ZLinkMessageFlowOutcome.Received)?.trace({
497
- outcome: ZLinkMessageFlowOutcome.Received,
498
- surface: ZLinkDispatchErrorSurface.StreamSession,
499
- messageKind: streamKind,
500
- packetName: inboundHeader.name,
501
- correlationId: streamCorr,
502
- sourceRid: this.context.routingId === undefined ? undefined : String(this.context.routingId)
503
- });
504
- flowIfEnabled(this.options.dispatchErrors?.flow, ZLinkMessageFlowOutcome.Admitted)?.trace({
505
- outcome: ZLinkMessageFlowOutcome.Admitted,
506
- surface: ZLinkDispatchErrorSurface.StreamSession,
507
- messageKind: streamKind,
508
- packetName: inboundHeader.name,
509
- correlationId: streamCorr,
510
- sourceRid: this.context.routingId === undefined ? undefined : String(this.context.routingId)
511
- });
512
- releaseApplicationJobPermitBeforeHandler();
513
- flowIfEnabled(this.options.dispatchErrors?.flow, ZLinkMessageFlowOutcome.Dispatched)?.trace({
514
- outcome: ZLinkMessageFlowOutcome.Dispatched,
515
- surface: ZLinkDispatchErrorSurface.StreamSession,
516
- messageKind: streamKind,
517
- packetName: inboundHeader.name,
518
- correlationId: streamCorr,
519
- sourceRid: this.context.routingId === undefined ? undefined : String(this.context.routingId)
520
- });
521
- await session.onDispatch?.(
522
- createSessionDispatchContext(inboundHeader),
523
- wrapFrameworkPayloadMessage(
524
- dispatchPayload,
525
- this.options.messageSerializers,
526
- streamCodecContentType(inboundHeader.codec),
527
- inboundHeader.name
528
- )
529
- );
530
- if (streamKind === ZLinkDispatchMessageKind.Send) {
531
- flowIfEnabled(this.options.dispatchErrors?.flow, ZLinkMessageFlowOutcome.Completed)?.trace({
532
- outcome: ZLinkMessageFlowOutcome.Completed,
538
+ const flowEnabled = this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true;
539
+ await runWithFlow(
540
+ createInboundFlow(
541
+ inboundHeader.flowId,
542
+ inboundHeader.flowOrigin,
543
+ flowEnabled,
544
+ flowEnabled ? this.stream.sessionId : undefined
545
+ ),
546
+ async () => {
547
+ flowIfEnabled(this.options.dispatchErrors?.flow, ZLinkMessageFlowOutcome.Received)?.trace(
548
+ {
549
+ outcome: ZLinkMessageFlowOutcome.Received,
550
+ surface: ZLinkDispatchErrorSurface.StreamSession,
551
+ messageKind: streamKind,
552
+ packetName: inboundHeader.name,
553
+ correlationId: streamCorr,
554
+ sourceRid:
555
+ this.context.routingId === undefined ? undefined : String(this.context.routingId)
556
+ }
557
+ );
558
+ flowIfEnabled(this.options.dispatchErrors?.flow, ZLinkMessageFlowOutcome.Admitted)?.trace(
559
+ {
560
+ outcome: ZLinkMessageFlowOutcome.Admitted,
561
+ surface: ZLinkDispatchErrorSurface.StreamSession,
562
+ messageKind: streamKind,
563
+ packetName: inboundHeader.name,
564
+ correlationId: streamCorr,
565
+ sourceRid:
566
+ this.context.routingId === undefined ? undefined : String(this.context.routingId)
567
+ }
568
+ );
569
+ releaseApplicationJobPermitBeforeHandler();
570
+ flowIfEnabled(
571
+ this.options.dispatchErrors?.flow,
572
+ ZLinkMessageFlowOutcome.Dispatched
573
+ )?.trace({
574
+ outcome: ZLinkMessageFlowOutcome.Dispatched,
533
575
  surface: ZLinkDispatchErrorSurface.StreamSession,
534
576
  messageKind: streamKind,
535
577
  packetName: inboundHeader.name,
536
578
  correlationId: streamCorr,
537
- sourceRid: this.context.routingId === undefined ? undefined : String(this.context.routingId)
579
+ sourceRid:
580
+ this.context.routingId === undefined ? undefined : String(this.context.routingId)
538
581
  });
582
+ await session.onDispatch?.(
583
+ createSessionDispatchContext(inboundHeader, dispatchActor),
584
+ wrapFrameworkPayloadMessage(
585
+ dispatchPayload,
586
+ this.options.messageSerializers,
587
+ streamCodecContentType(inboundHeader.codec),
588
+ inboundHeader.name
589
+ )
590
+ );
591
+ if (streamKind === ZLinkDispatchMessageKind.Send) {
592
+ flowIfEnabled(
593
+ this.options.dispatchErrors?.flow,
594
+ ZLinkMessageFlowOutcome.Completed
595
+ )?.trace({
596
+ outcome: ZLinkMessageFlowOutcome.Completed,
597
+ surface: ZLinkDispatchErrorSurface.StreamSession,
598
+ messageKind: streamKind,
599
+ packetName: inboundHeader.name,
600
+ correlationId: streamCorr,
601
+ sourceRid:
602
+ this.context.routingId === undefined ? undefined : String(this.context.routingId)
603
+ });
604
+ }
539
605
  }
540
- });
606
+ );
541
607
  } catch (error) {
542
608
  this.options.dispatchErrors?.report({
543
609
  surface: ZLinkDispatchErrorSurface.StreamSession,
544
- messageKind: decodedHeader.kind === ZLinkStreamMessageKind.Request
545
- ? ZLinkDispatchMessageKind.Request
546
- : ZLinkDispatchMessageKind.Send,
610
+ messageKind:
611
+ decodedHeader.kind === ZLinkStreamMessageKind.Request
612
+ ? ZLinkDispatchMessageKind.Request
613
+ : ZLinkDispatchMessageKind.Send,
547
614
  reason: ZLinkDispatchErrorReason.HandlerException,
548
- action: decodedHeader.requestSeq === undefined
549
- ? ZLinkDispatchErrorAction.Drop
550
- : ZLinkDispatchErrorAction.ReplyError,
615
+ action:
616
+ decodedHeader.requestSeq === undefined
617
+ ? ZLinkDispatchErrorAction.Drop
618
+ : ZLinkDispatchErrorAction.ReplyError,
551
619
  packetName: decodedHeader.name,
552
- sourceRid: this.context.routingId === undefined ? undefined : String(this.context.routingId),
620
+ sourceRid:
621
+ this.context.routingId === undefined ? undefined : String(this.context.routingId),
553
622
  correlationId: decodedHeader.correlationId,
554
623
  flowId: decodedHeader.flowId,
555
624
  flowOrigin: decodedHeader.flowOrigin,
@@ -602,7 +671,9 @@ export class ZLinkStreamSessionRuntime {
602
671
  this.livenessTimer = this.livenessClock.setTimer(() => {
603
672
  this.livenessTimer = undefined;
604
673
  this.serial.executeInfrastructure(
605
- async () => this.runLivenessCheck(), {}, error => this.options.onError?.(error)
674
+ async () => this.runLivenessCheck(),
675
+ {},
676
+ (error) => this.options.onError?.(error)
606
677
  );
607
678
  }, ZLINK_STREAM_HEARTBEAT_INTERVAL_MS);
608
679
  }
@@ -621,8 +692,8 @@ export class ZLinkStreamSessionRuntime {
621
692
  return;
622
693
  }
623
694
  if (
624
- this.awaitingPongSince !== undefined
625
- && now - this.awaitingPongSince >= ZLINK_STREAM_HEARTBEAT_TIMEOUT_MS
695
+ this.awaitingPongSince !== undefined &&
696
+ now - this.awaitingPongSince >= ZLINK_STREAM_HEARTBEAT_TIMEOUT_MS
626
697
  ) {
627
698
  await this.closeForLiveness(
628
699
  ZLinkStreamCloseReasonCode.HeartbeatTimeout,
@@ -674,14 +745,7 @@ export class ZLinkStreamSessionRuntime {
674
745
  ZLinkStreamMessageKind.Error,
675
746
  new Map(),
676
747
  false,
677
- {
678
- code: error instanceof ZLinkFrameworkException
679
- ? ZLinkFrameworkErrorKind[error.kind]
680
- : error instanceof Error
681
- ? error.constructor.name
682
- : 'RemoteError',
683
- message: error instanceof Error ? error.message : String(error)
684
- }
748
+ boundSessionErrorPayload(error)
685
749
  );
686
750
  try {
687
751
  if (!this.context.stream.writeRaw(message, ZLINK_SEND_DONT_WAIT)) {
@@ -706,20 +770,21 @@ export class ZLinkStreamSessionRuntime {
706
770
  packetName: string,
707
771
  correlationId: string | undefined
708
772
  ): void {
709
- const reply = kind === ZLinkStreamMessageKind.Response
710
- || kind === ZLinkStreamMessageKind.Error;
773
+ const reply = kind === ZLinkStreamMessageKind.Response || kind === ZLinkStreamMessageKind.Error;
711
774
  const outcome = reply ? ZLinkMessageFlowOutcome.Replied : ZLinkMessageFlowOutcome.Sent;
712
775
  flowIfEnabled(this.options.dispatchErrors?.flow, outcome)?.trace({
713
776
  outcome,
714
777
  surface: ZLinkDispatchErrorSurface.StreamSession,
715
- messageKind: kind === ZLinkStreamMessageKind.Response
716
- ? ZLinkDispatchMessageKind.Response
717
- : kind === ZLinkStreamMessageKind.Error
718
- ? ZLinkDispatchMessageKind.Error
719
- : ZLinkDispatchMessageKind.Send,
778
+ messageKind:
779
+ kind === ZLinkStreamMessageKind.Response
780
+ ? ZLinkDispatchMessageKind.Response
781
+ : kind === ZLinkStreamMessageKind.Error
782
+ ? ZLinkDispatchMessageKind.Error
783
+ : ZLinkDispatchMessageKind.Send,
720
784
  packetName: packetName.length === 0 ? undefined : packetName,
721
785
  correlationId,
722
- sourceRid: this.context.routingId === undefined ? undefined : String(this.context.routingId)
786
+ sourceRid: this.context.routingId === undefined ? undefined : String(this.context.routingId),
787
+ streamSessionId: this.stream.sessionId
723
788
  });
724
789
  }
725
790
 
@@ -748,15 +813,17 @@ export class ZLinkStreamSessionRuntime {
748
813
  if (this.disconnected || this.disconnectQueued) return;
749
814
  this.disconnectQueued = true;
750
815
  this.stopLivenessChecks();
751
- void this.serial.executeFinal(async () => {
752
- this.disconnectQueued = false;
753
- if (this.disconnected) return;
754
- this.stream.markTransportClosed();
755
- this.disconnected = true;
756
- await this.complete(error, true);
757
- }).catch(() => {
758
- this.disconnectQueued = false;
759
- });
816
+ void this.serial
817
+ .executeFinal(async () => {
818
+ this.disconnectQueued = false;
819
+ if (this.disconnected) return;
820
+ this.stream.markTransportClosed();
821
+ this.disconnected = true;
822
+ await this.complete(error, true);
823
+ })
824
+ .catch(() => {
825
+ this.disconnectQueued = false;
826
+ });
760
827
  }
761
828
 
762
829
  private async cleanup(): Promise<void> {
@@ -808,16 +875,22 @@ export class ZLinkStreamSessionRuntime {
808
875
  onRejected?.(error);
809
876
  return;
810
877
  }
811
- if (!this.serial.executeApplication(async () => {
812
- try {
813
- await work();
814
- } finally {
815
- claim?.close();
816
- }
817
- }, {}, () => {
818
- claim?.close();
819
- onRejected?.();
820
- })) {
878
+ if (
879
+ !this.serial.executeApplication(
880
+ async () => {
881
+ try {
882
+ await work();
883
+ } finally {
884
+ claim?.close();
885
+ }
886
+ },
887
+ {},
888
+ () => {
889
+ claim?.close();
890
+ onRejected?.();
891
+ }
892
+ )
893
+ ) {
821
894
  claim?.close();
822
895
  // The serial lane only refuses new work after dispose() closed it.
823
896
  onShutdownRejected?.();
@@ -845,6 +918,7 @@ export class ZLinkStreamSessionRuntime {
845
918
  packetName: header.name === '' ? undefined : header.name,
846
919
  correlationId: header.correlationId,
847
920
  sourceRid: this.context.routingId === undefined ? undefined : String(this.context.routingId),
921
+ streamSessionId: this.stream.sessionId,
848
922
  flowId: flowEnabled ? header.flowId : undefined,
849
923
  flowOrigin: flowEnabled ? header.flowOrigin : undefined,
850
924
  errorReason: ZLinkDispatchErrorReason.Shutdown
@@ -854,21 +928,29 @@ export class ZLinkStreamSessionRuntime {
854
928
 
855
929
  function streamShutdownDropMessageKind(kind: ZLinkStreamMessageKind): ZLinkDispatchMessageKind {
856
930
  switch (kind) {
857
- case ZLinkStreamMessageKind.Request: return ZLinkDispatchMessageKind.Request;
858
- case ZLinkStreamMessageKind.Response: return ZLinkDispatchMessageKind.Response;
859
- case ZLinkStreamMessageKind.Error: return ZLinkDispatchMessageKind.Error;
860
- case ZLinkStreamMessageKind.Control: return ZLinkDispatchMessageKind.Control;
861
- default: return ZLinkDispatchMessageKind.Send;
931
+ case ZLinkStreamMessageKind.Request:
932
+ return ZLinkDispatchMessageKind.Request;
933
+ case ZLinkStreamMessageKind.Response:
934
+ return ZLinkDispatchMessageKind.Response;
935
+ case ZLinkStreamMessageKind.Error:
936
+ return ZLinkDispatchMessageKind.Error;
937
+ case ZLinkStreamMessageKind.Control:
938
+ return ZLinkDispatchMessageKind.Control;
939
+ default:
940
+ return ZLinkDispatchMessageKind.Send;
862
941
  }
863
942
  }
864
943
 
865
944
  export class ZLinkStreamSessionNodeRuntime {
866
945
  private readonly sessions = new Map<string, ZLinkStreamSessionRuntime>();
867
946
  private readonly availablePackets: ZLinkBackendStreamPacket[] = [];
868
- private readonly pendingConnectionMetadata: Array<{
869
- readonly localAddr?: string;
870
- readonly remoteAddr?: string;
871
- } | undefined> = [];
947
+ private readonly pendingConnectionMetadata: Array<
948
+ | {
949
+ readonly localAddr?: string;
950
+ readonly remoteAddr?: string;
951
+ }
952
+ | undefined
953
+ > = [];
872
954
  private pendingConnectionMetadataHead = 0;
873
955
  private pendingConnectionMetadataCount = 0;
874
956
  private readonly unaddressedMonitorSessions: Array<string | undefined> = [];
@@ -899,21 +981,21 @@ export class ZLinkStreamSessionNodeRuntime {
899
981
  return;
900
982
  }
901
983
  const monitor = this.options.monitor;
902
- monitor?.onEvent(event => this.onMonitorEvent(event));
903
- const running = this.runReceiveLoop(this.receiveAbortController.signal)
904
- .catch((error) => {
905
- if (!this.stopped) {
906
- this.options.onError?.(error);
907
- }
908
- });
984
+ monitor?.onEvent((event) => this.onMonitorEvent(event));
985
+ const running = this.runReceiveLoop(this.receiveAbortController.signal).catch((error) => {
986
+ if (!this.stopped) {
987
+ this.options.onError?.(error);
988
+ }
989
+ });
909
990
  this.receiveLoop = running;
910
991
  if (monitor !== undefined) {
911
- this.monitorLoop = this.runMonitorLoop(monitor, this.receiveAbortController.signal)
912
- .catch((error) => {
992
+ this.monitorLoop = this.runMonitorLoop(monitor, this.receiveAbortController.signal).catch(
993
+ (error) => {
913
994
  if (!this.stopped) {
914
995
  this.options.onError?.(error);
915
996
  }
916
- });
997
+ }
998
+ );
917
999
  }
918
1000
  }
919
1001
 
@@ -1046,8 +1128,8 @@ export class ZLinkStreamSessionNodeRuntime {
1046
1128
 
1047
1129
  this.receiveWorkSinceYield += 1;
1048
1130
  if (
1049
- this.receiveWorkSinceYield >= ZLINK_STREAM_RECEIVE_FRAME_BATCH_LIMIT
1050
- && !this.isReceiveStopped(signal)
1131
+ this.receiveWorkSinceYield >= ZLINK_STREAM_RECEIVE_FRAME_BATCH_LIMIT &&
1132
+ !this.isReceiveStopped(signal)
1051
1133
  ) {
1052
1134
  this.receiveWorkSinceYield = 0;
1053
1135
  await new Promise<void>((resolve) => setImmediate(resolve));
@@ -1055,10 +1137,7 @@ export class ZLinkStreamSessionNodeRuntime {
1055
1137
  }
1056
1138
  }
1057
1139
 
1058
- private acceptPacket(
1059
- packet: ZLinkBackendStreamPacket,
1060
- permit: ApplicationJobPermitPort
1061
- ): void {
1140
+ private acceptPacket(packet: ZLinkBackendStreamPacket, permit: ApplicationJobPermitPort): void {
1062
1141
  const routingId = packet.routingId;
1063
1142
  const header = packet.header;
1064
1143
  const body = packet.body;
@@ -1080,16 +1159,17 @@ export class ZLinkStreamSessionNodeRuntime {
1080
1159
  this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true
1081
1160
  );
1082
1161
  payload = ownedMessage(body.data());
1083
- const terminalCompletion = decodedHeader.kind === ZLinkStreamMessageKind.Response
1084
- || decodedHeader.kind === ZLinkStreamMessageKind.Error;
1162
+ const terminalCompletion =
1163
+ decodedHeader.kind === ZLinkStreamMessageKind.Response ||
1164
+ decodedHeader.kind === ZLinkStreamMessageKind.Error;
1085
1165
  const applicationPermit = terminalCompletion ? undefined : permit;
1086
1166
  if (terminalCompletion) {
1087
1167
  permit.releaseAfterInternalProcessing();
1088
1168
  releasePermitOnFailure = false;
1089
1169
  } else {
1090
1170
  if (
1091
- decodedHeader.kind === ZLinkStreamMessageKind.Send
1092
- || decodedHeader.kind === ZLinkStreamMessageKind.Request
1171
+ decodedHeader.kind === ZLinkStreamMessageKind.Send ||
1172
+ decodedHeader.kind === ZLinkStreamMessageKind.Request
1093
1173
  ) {
1094
1174
  permit.markApplicationQueued();
1095
1175
  }
@@ -1184,7 +1264,10 @@ export class ZLinkStreamSessionNodeRuntime {
1184
1264
  this.pendingConnectionMetadataCount += 1;
1185
1265
  return;
1186
1266
  }
1187
- this.getOrCreateSession(event.routingId)?.enqueueConnected(event.localAddr, event.remoteAddr);
1267
+ this.getOrCreateSession(event.routingId)?.enqueueConnected(
1268
+ event.localAddr,
1269
+ event.remoteAddr
1270
+ );
1188
1271
  return;
1189
1272
  case ZLinkSocketNativeEventType.Disconnected:
1190
1273
  {
@@ -1197,10 +1280,7 @@ export class ZLinkStreamSessionNodeRuntime {
1197
1280
  session.enqueueDisconnected(error);
1198
1281
  return;
1199
1282
  }
1200
- if (
1201
- event.routingId === undefined
1202
- && !streamMonitorHasEndpoint(event)
1203
- ) {
1283
+ if (event.routingId === undefined && !streamMonitorHasEndpoint(event)) {
1204
1284
  this.enqueueEndpointlessDisconnect(error);
1205
1285
  }
1206
1286
  }
@@ -1212,37 +1292,47 @@ export class ZLinkStreamSessionNodeRuntime {
1212
1292
 
1213
1293
  private applyPendingConnectionMetadata(session: ZLinkStreamSessionRuntime): void {
1214
1294
  if (
1215
- session.stream.localAddr !== undefined
1216
- || session.stream.remoteAddr !== undefined
1217
- || this.pendingConnectionMetadataCount === 0
1295
+ session.stream.localAddr !== undefined ||
1296
+ session.stream.remoteAddr !== undefined ||
1297
+ this.pendingConnectionMetadataCount === 0
1218
1298
  ) {
1219
1299
  return;
1220
1300
  }
1221
1301
  const metadata = this.takePendingConnectionMetadata();
1222
1302
  if (metadata === undefined) return;
1223
- this.removePendingConnectionMetadata(streamMonitorEndpointKey(metadata.localAddr, metadata.remoteAddr));
1303
+ this.removePendingConnectionMetadata(
1304
+ streamMonitorEndpointKey(metadata.localAddr, metadata.remoteAddr)
1305
+ );
1224
1306
  session.enqueueConnected(metadata.localAddr, metadata.remoteAddr);
1225
1307
  this.enqueueUnaddressedMonitorSession(session.stream.sessionId);
1226
1308
  }
1227
1309
 
1228
1310
  private hasPendingConnectionMetadata(endpointKey: string): boolean {
1229
- for (let index = this.pendingConnectionMetadataHead; index < this.pendingConnectionMetadata.length; index += 1) {
1311
+ for (
1312
+ let index = this.pendingConnectionMetadataHead;
1313
+ index < this.pendingConnectionMetadata.length;
1314
+ index += 1
1315
+ ) {
1230
1316
  const metadata = this.pendingConnectionMetadata[index];
1231
- if (metadata !== undefined
1232
- && streamMonitorEndpointKey(metadata.localAddr, metadata.remoteAddr) === endpointKey) {
1317
+ if (
1318
+ metadata !== undefined &&
1319
+ streamMonitorEndpointKey(metadata.localAddr, metadata.remoteAddr) === endpointKey
1320
+ ) {
1233
1321
  return true;
1234
1322
  }
1235
1323
  }
1236
1324
  return false;
1237
1325
  }
1238
1326
 
1239
- private takePendingConnectionMetadata(): {
1240
- readonly localAddr?: string;
1241
- readonly remoteAddr?: string;
1242
- } | undefined {
1327
+ private takePendingConnectionMetadata():
1328
+ | {
1329
+ readonly localAddr?: string;
1330
+ readonly remoteAddr?: string;
1331
+ }
1332
+ | undefined {
1243
1333
  while (
1244
- this.pendingConnectionMetadataHead < this.pendingConnectionMetadata.length
1245
- && this.pendingConnectionMetadata[this.pendingConnectionMetadataHead] === undefined
1334
+ this.pendingConnectionMetadataHead < this.pendingConnectionMetadata.length &&
1335
+ this.pendingConnectionMetadata[this.pendingConnectionMetadataHead] === undefined
1246
1336
  ) {
1247
1337
  this.pendingConnectionMetadataHead += 1;
1248
1338
  }
@@ -1259,8 +1349,10 @@ export class ZLinkStreamSessionNodeRuntime {
1259
1349
  if (this.pendingConnectionMetadataCount === 0) {
1260
1350
  this.pendingConnectionMetadata.length = 0;
1261
1351
  this.pendingConnectionMetadataHead = 0;
1262
- } else if (this.pendingConnectionMetadataHead >= 1024
1263
- && this.pendingConnectionMetadataHead * 2 >= this.pendingConnectionMetadata.length) {
1352
+ } else if (
1353
+ this.pendingConnectionMetadataHead >= 1024 &&
1354
+ this.pendingConnectionMetadataHead * 2 >= this.pendingConnectionMetadata.length
1355
+ ) {
1264
1356
  this.pendingConnectionMetadata.splice(0, this.pendingConnectionMetadataHead);
1265
1357
  this.pendingConnectionMetadataHead = 0;
1266
1358
  }
@@ -1273,8 +1365,8 @@ export class ZLinkStreamSessionNodeRuntime {
1273
1365
 
1274
1366
  private takeUnaddressedMonitorSession(): string | undefined {
1275
1367
  while (
1276
- this.unaddressedMonitorSessionHead < this.unaddressedMonitorSessions.length
1277
- && this.unaddressedMonitorSessions[this.unaddressedMonitorSessionHead] === undefined
1368
+ this.unaddressedMonitorSessionHead < this.unaddressedMonitorSessions.length &&
1369
+ this.unaddressedMonitorSessions[this.unaddressedMonitorSessionHead] === undefined
1278
1370
  ) {
1279
1371
  this.unaddressedMonitorSessionHead += 1;
1280
1372
  }
@@ -1286,8 +1378,10 @@ export class ZLinkStreamSessionNodeRuntime {
1286
1378
  if (this.unaddressedMonitorSessionCount === 0) {
1287
1379
  this.unaddressedMonitorSessions.length = 0;
1288
1380
  this.unaddressedMonitorSessionHead = 0;
1289
- } else if (this.unaddressedMonitorSessionHead >= 1024
1290
- && this.unaddressedMonitorSessionHead * 2 >= this.unaddressedMonitorSessions.length) {
1381
+ } else if (
1382
+ this.unaddressedMonitorSessionHead >= 1024 &&
1383
+ this.unaddressedMonitorSessionHead * 2 >= this.unaddressedMonitorSessions.length
1384
+ ) {
1291
1385
  this.unaddressedMonitorSessions.splice(0, this.unaddressedMonitorSessionHead);
1292
1386
  this.unaddressedMonitorSessionHead = 0;
1293
1387
  }
@@ -1296,9 +1390,11 @@ export class ZLinkStreamSessionNodeRuntime {
1296
1390
 
1297
1391
  private firstUnaddressedSession(): ZLinkStreamSessionRuntime | undefined {
1298
1392
  for (const session of this.sessions.values()) {
1299
- if (!session.isDisconnected
1300
- && session.stream.localAddr === undefined
1301
- && session.stream.remoteAddr === undefined) {
1393
+ if (
1394
+ !session.isDisconnected &&
1395
+ session.stream.localAddr === undefined &&
1396
+ session.stream.remoteAddr === undefined
1397
+ ) {
1302
1398
  return session;
1303
1399
  }
1304
1400
  }
@@ -1314,7 +1410,11 @@ export class ZLinkStreamSessionNodeRuntime {
1314
1410
  }
1315
1411
 
1316
1412
  private removePendingConnectionMetadata(endpointKey: string): void {
1317
- for (let index = this.pendingConnectionMetadataHead; index < this.pendingConnectionMetadata.length; index += 1) {
1413
+ for (
1414
+ let index = this.pendingConnectionMetadataHead;
1415
+ index < this.pendingConnectionMetadata.length;
1416
+ index += 1
1417
+ ) {
1318
1418
  const metadata = this.pendingConnectionMetadata[index];
1319
1419
  if (metadata === undefined) continue;
1320
1420
  if (streamMonitorEndpointKey(metadata.localAddr, metadata.remoteAddr) === endpointKey) {
@@ -1325,7 +1425,9 @@ export class ZLinkStreamSessionNodeRuntime {
1325
1425
  this.compactPendingConnectionMetadata();
1326
1426
  }
1327
1427
 
1328
- private resolveMonitorSession(event: ZLinkBackendSocketMonitorEvent): ZLinkStreamSessionRuntime | undefined {
1428
+ private resolveMonitorSession(
1429
+ event: ZLinkBackendSocketMonitorEvent
1430
+ ): ZLinkStreamSessionRuntime | undefined {
1329
1431
  if (event.routingId !== undefined) {
1330
1432
  const session = this.getActiveSession(streamSessionIdFromRoutingId(event.routingId));
1331
1433
  if (session !== undefined) {
@@ -1336,9 +1438,11 @@ export class ZLinkStreamSessionNodeRuntime {
1336
1438
  let match: ZLinkStreamSessionRuntime | undefined;
1337
1439
  let matchCount = 0;
1338
1440
  for (const session of this.sessions.values()) {
1339
- if (session.isDisconnected
1340
- || session.stream.localAddr !== event.localAddr
1341
- || session.stream.remoteAddr !== event.remoteAddr) {
1441
+ if (
1442
+ session.isDisconnected ||
1443
+ session.stream.localAddr !== event.localAddr ||
1444
+ session.stream.remoteAddr !== event.remoteAddr
1445
+ ) {
1342
1446
  continue;
1343
1447
  }
1344
1448
  match = session;
@@ -1382,11 +1486,11 @@ export class ZLinkStreamSessionNodeRuntime {
1382
1486
  this.wakeReceiveLoop();
1383
1487
  setImmediate(() => {
1384
1488
  if (
1385
- pending.cancelled
1386
- || this.stopped
1387
- || this.pendingEndpointlessDisconnect !== pending
1388
- || this.activityVersion !== pending.activityVersion
1389
- || this.sessions.get(pending.session.stream.sessionId) !== pending.session
1489
+ pending.cancelled ||
1490
+ this.stopped ||
1491
+ this.pendingEndpointlessDisconnect !== pending ||
1492
+ this.activityVersion !== pending.activityVersion ||
1493
+ this.sessions.get(pending.session.stream.sessionId) !== pending.session
1390
1494
  ) {
1391
1495
  return;
1392
1496
  }
@@ -1425,15 +1529,11 @@ export class ZLinkStreamSessionNodeRuntime {
1425
1529
  void rejected.closeForDrain().catch((error) => this.options.onError?.(error));
1426
1530
  return undefined;
1427
1531
  }
1428
- const created = new ZLinkStreamSessionRuntime(
1429
- this.options,
1430
- routingId,
1431
- (sessionId, session) => {
1432
- if (this.sessions.get(sessionId) === session) {
1433
- this.sessions.delete(sessionId);
1434
- }
1532
+ const created = new ZLinkStreamSessionRuntime(this.options, routingId, (sessionId, session) => {
1533
+ if (this.sessions.get(sessionId) === session) {
1534
+ this.sessions.delete(sessionId);
1435
1535
  }
1436
- );
1536
+ });
1437
1537
  this.sessions.set(sessionId, created);
1438
1538
  return created;
1439
1539
  }
@@ -1444,7 +1544,10 @@ function monitorIdleDelayMs(misses: number): number {
1444
1544
  return Math.min(scaled, ZLINK_STREAM_MONITOR_IDLE_MAX_DELAY_MS);
1445
1545
  }
1446
1546
 
1447
- function streamMonitorEndpointKey(localAddr: string | undefined, remoteAddr: string | undefined): string {
1547
+ function streamMonitorEndpointKey(
1548
+ localAddr: string | undefined,
1549
+ remoteAddr: string | undefined
1550
+ ): string {
1448
1551
  return `${localAddr ?? ''}\n${remoteAddr ?? ''}`;
1449
1552
  }
1450
1553