@zlink-systems/framework 0.21.0 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (487) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Common/ZLinkMessage.js +5 -5
  3. package/dist/contracts/Configuration/CodecContentType.js +5 -7
  4. package/dist/contracts/Configuration/DiagnosticsValidation.js +1 -6
  5. package/dist/contracts/Configuration/EndpointNotation.js +4 -8
  6. package/dist/contracts/Configuration/Registration.js +14 -11
  7. package/dist/contracts/Configuration/RegistrationBuilders.js +32 -25
  8. package/dist/contracts/Configuration/RegistrationNormalizers.js +25 -26
  9. package/dist/contracts/Configuration/RegistrationValidators.js +36 -38
  10. package/dist/contracts/Configuration/SendTimeoutValidation.js +4 -4
  11. package/dist/contracts/Configuration/TimerRegistrationValidator.js +7 -7
  12. package/dist/contracts/Handlers/JsonContract.js +23 -11
  13. package/dist/contracts/Spots/SpotKind.js +16 -8
  14. package/dist/location-store-integration.js +16 -16
  15. package/dist/nest-integration.js +17 -11
  16. package/dist/runtime/abort.js +9 -5
  17. package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
  18. package/dist/runtime/actors/actor-authority-publication.js +18 -17
  19. package/dist/runtime/actors/actor-client.js +83 -63
  20. package/dist/runtime/actors/actor-context.js +24 -18
  21. package/dist/runtime/actors/actor-creation.js +4 -3
  22. package/dist/runtime/actors/actor-handoff.js +89 -92
  23. package/dist/runtime/actors/actor-local-native-join.js +18 -19
  24. package/dist/runtime/actors/actor-mailbox.js +1 -1
  25. package/dist/runtime/actors/actor-message-follow-context.js +24 -21
  26. package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
  27. package/dist/runtime/actors/actor-remote-joiner.js +20 -17
  28. package/dist/runtime/actors/actor-remote-wire.js +6 -7
  29. package/dist/runtime/actors/actor-runtime-state.js +87 -81
  30. package/dist/runtime/actors/actor-transfer-registry.js +3 -5
  31. package/dist/runtime/actors/bound-session-wire.js +14 -9
  32. package/dist/runtime/actors/deferred-join-accepted-journal.js +158 -124
  33. package/dist/runtime/actors/index.js +2 -5
  34. package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
  35. package/dist/runtime/actors/post-commit-actor-location.js +1 -1
  36. package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
  37. package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
  38. package/dist/runtime/admission.js +2 -6
  39. package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
  40. package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
  41. package/dist/runtime/backend/mesh-completion-table.js +1 -3
  42. package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
  43. package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
  44. package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
  45. package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
  46. package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
  47. package/dist/runtime/backend/node/node-raw-mesh-backend.js +116 -113
  48. package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
  49. package/dist/runtime/backend/runtime-message.js +3 -3
  50. package/dist/runtime/backend/runtime-values.d.ts +2 -2
  51. package/dist/runtime/backend/runtime-values.js +4 -5
  52. package/dist/runtime/channels/channel-clients.js +27 -24
  53. package/dist/runtime/channels/channel-dispatch-pipeline.js +10 -18
  54. package/dist/runtime/channels/channel-dispatch-services.js +7 -4
  55. package/dist/runtime/channels/channel-dispatchers.js +9 -9
  56. package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
  57. package/dist/runtime/channels/channel-envelope.js +83 -47
  58. package/dist/runtime/channels/channel-outbound-operations.js +8 -8
  59. package/dist/runtime/channels/channel-receive-loops.js +20 -22
  60. package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
  61. package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
  62. package/dist/runtime/channels/channel-runtime-manager.js +18 -9
  63. package/dist/runtime/channels/channel-socket-registry.js +126 -123
  64. package/dist/runtime/channels/channel-transports.js +43 -33
  65. package/dist/runtime/channels/client-server-location-runtime.js +32 -40
  66. package/dist/runtime/channels/client-server-service-wire.js +29 -22
  67. package/dist/runtime/channels/dispatch-error-reporter.js +9 -7
  68. package/dist/runtime/channels/fanout-location-runtime.js +34 -47
  69. package/dist/runtime/channels/fanout-service-wire.js +3 -5
  70. package/dist/runtime/channels/local-spot-route-transport.js +7 -1
  71. package/dist/runtime/channels/route-member-snapshot.js +3 -3
  72. package/dist/runtime/channels/source-spot-router.js +6 -2
  73. package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
  74. package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
  75. package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
  76. package/dist/runtime/diagnostics/index.js +38 -10
  77. package/dist/runtime/diagnostics/message-flow.js +47 -39
  78. package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
  79. package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
  80. package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
  81. package/dist/runtime/execution/index.js +7 -6
  82. package/dist/runtime/execution/serial-execution-queue.js +12 -18
  83. package/dist/runtime/execution/state-lane.js +2 -2
  84. package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -23
  85. package/dist/runtime/foundation/event-loop-resources.js +4 -4
  86. package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
  87. package/dist/runtime/foundation/raw-service-mesh-runtime.js +136 -136
  88. package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
  89. package/dist/runtime/foundation/runtime-state-projections.js +22 -11
  90. package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
  91. package/dist/runtime/foundation/service-discovery-registry.js +35 -33
  92. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
  93. package/dist/runtime/foundation/service-liveness-registry.js +16 -12
  94. package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
  95. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
  96. package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
  97. package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
  98. package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
  99. package/dist/runtime/foundation/service-stateful-registry.js +24 -23
  100. package/dist/runtime/foundation/service-stateful-runtime.js +416 -438
  101. package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
  102. package/dist/runtime/foundation/service-topology-registry.js +96 -95
  103. package/dist/runtime/foundation/service-weighted-selection.js +6 -11
  104. package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
  105. package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
  106. package/dist/runtime/framework-errors-internal.js +7 -10
  107. package/dist/runtime/handlers/handler-instance-scope.js +4 -5
  108. package/dist/runtime/handlers/index.js +3 -1
  109. package/dist/runtime/host/actor-packet-relay.js +74 -70
  110. package/dist/runtime/host/actor-placement-coordinator.js +29 -31
  111. package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
  112. package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
  113. package/dist/runtime/host/actor-transfer-runtime.js +176 -153
  114. package/dist/runtime/host/application-job-queue.js +18 -22
  115. package/dist/runtime/host/bound-session-relay.js +3 -1
  116. package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
  117. package/dist/runtime/host/host-capacity-status.js +8 -4
  118. package/dist/runtime/host/index.js +244 -227
  119. package/dist/runtime/host/instance-activation-authority.js +93 -96
  120. package/dist/runtime/host/location-runtime-owner.js +16 -14
  121. package/dist/runtime/host/mesh-router-resolver.js +11 -13
  122. package/dist/runtime/host/relocation-direct-transfer.js +10 -9
  123. package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
  124. package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
  125. package/dist/runtime/host/remote-bound-session-relay.js +97 -73
  126. package/dist/runtime/host/route-mesh-runtime.js +64 -69
  127. package/dist/runtime/host/runtime-shutdown.js +1 -2
  128. package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
  129. package/dist/runtime/host/spot-address-transport.js +69 -71
  130. package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
  131. package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
  132. package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
  133. package/dist/runtime/locations/actor-location-claims.js +26 -20
  134. package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
  135. package/dist/runtime/locations/authority-key-codec.js +7 -7
  136. package/dist/runtime/locations/auto-connect-loop.js +3 -3
  137. package/dist/runtime/locations/auto-connect-planner.js +25 -19
  138. package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
  139. package/dist/runtime/locations/in-memory-authority-store.js +128 -118
  140. package/dist/runtime/locations/in-memory-location-store.js +195 -168
  141. package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
  142. package/dist/runtime/locations/key-codec.js +1 -1
  143. package/dist/runtime/locations/lease-tracker.js +23 -21
  144. package/dist/runtime/locations/lifecycle.js +4 -5
  145. package/dist/runtime/locations/location-store-repository.js +368 -324
  146. package/dist/runtime/locations/opaque-record-key.js +2 -2
  147. package/dist/runtime/locations/resolvers.js +73 -82
  148. package/dist/runtime/locations/runtime.js +68 -63
  149. package/dist/runtime/locations/spot-location-claims.js +39 -35
  150. package/dist/runtime/messaging/framework-json-v1.js +7 -7
  151. package/dist/runtime/messaging/packet-name.js +7 -6
  152. package/dist/runtime/messaging/payload-codec.js +21 -18
  153. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
  154. package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
  155. package/dist/runtime/routing-id.js +3 -5
  156. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
  157. package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
  158. package/dist/runtime/spots/index.js +208 -219
  159. package/dist/runtime/spots/spot-activation-registry.js +15 -14
  160. package/dist/runtime/spots/spot-activation-state.js +17 -15
  161. package/dist/runtime/spots/spot-activation.js +33 -16
  162. package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
  163. package/dist/runtime/spots/spot-actor-membership.js +1 -3
  164. package/dist/runtime/spots/spot-actor-packet-dispatch.js +23 -20
  165. package/dist/runtime/spots/spot-actor-packet-drain.js +12 -10
  166. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
  167. package/dist/runtime/spots/spot-closing.js +3 -7
  168. package/dist/runtime/spots/spot-context.js +2 -2
  169. package/dist/runtime/spots/spot-entry-activation.js +13 -14
  170. package/dist/runtime/spots/spot-handle.js +6 -3
  171. package/dist/runtime/spots/spot-handler-registry.js +12 -12
  172. package/dist/runtime/spots/spot-manager-public.js +5 -6
  173. package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
  174. package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
  175. package/dist/runtime/spots/spot-node-runtime-manager.js +74 -85
  176. package/dist/runtime/spots/spot-outbound.js +10 -14
  177. package/dist/runtime/spots/spot-remote-codec.js +22 -26
  178. package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
  179. package/dist/runtime/spots/spot-route-packet-dispatch.js +16 -14
  180. package/dist/runtime/spots/spot-route-replies.js +4 -6
  181. package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
  182. package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +1 -2
  183. package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
  184. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
  185. package/dist/runtime/spots/spot-serial-executor.js +5 -8
  186. package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
  187. package/dist/runtime/spots/spot-subscription-dispatch.js +5 -5
  188. package/dist/runtime/spots/spot-timer.js +25 -29
  189. package/dist/runtime/streams/actor-session-binding-registry.js +98 -107
  190. package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
  191. package/dist/runtime/streams/bound-actor-relay-sender.js +18 -16
  192. package/dist/runtime/streams/bound-session-service.js +8 -9
  193. package/dist/runtime/streams/index.js +20 -19
  194. package/dist/runtime/streams/managed-stream.js +32 -30
  195. package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
  196. package/dist/runtime/streams/protocol.js +29 -18
  197. package/dist/runtime/streams/session-actor-coordinator.js +34 -37
  198. package/dist/runtime/streams/session-context.js +30 -28
  199. package/dist/runtime/streams/session-provider.js +2 -2
  200. package/dist/runtime/streams/session-serial-executor.js +1 -2
  201. package/dist/runtime/streams/stream-frame-factory.js +11 -5
  202. package/dist/runtime/streams/stream-session-runtime.js +70 -66
  203. package/dist/runtime/workers/index.js +15 -4
  204. package/package.json +2 -2
  205. package/src/contracts/Channels/RouteCalls.ts +6 -1
  206. package/src/contracts/Common/ZLinkMessage.ts +5 -5
  207. package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
  208. package/src/contracts/Configuration/Builders.ts +14 -14
  209. package/src/contracts/Configuration/CodecContentType.ts +8 -10
  210. package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
  211. package/src/contracts/Configuration/EndpointNotation.ts +11 -11
  212. package/src/contracts/Configuration/ObjectRoles.ts +1 -3
  213. package/src/contracts/Configuration/Registration.ts +46 -17
  214. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
  215. package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
  216. package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
  217. package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
  218. package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
  219. package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
  220. package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
  221. package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
  222. package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
  223. package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
  224. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -6
  225. package/src/contracts/Errors/index.ts +1 -4
  226. package/src/contracts/Handlers/Attributes.ts +15 -9
  227. package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
  228. package/src/contracts/Handlers/JsonContract.ts +53 -19
  229. package/src/contracts/Locations/ActorTransfer.ts +1 -5
  230. package/src/contracts/Locations/Authority.ts +4 -11
  231. package/src/contracts/Locations/Keys.ts +6 -1
  232. package/src/contracts/Locations/Options.ts +3 -2
  233. package/src/contracts/Locations/RelocationStore.ts +1 -4
  234. package/src/contracts/Locations/Resolvers.ts +5 -5
  235. package/src/contracts/Locations/RuntimeQuery.ts +6 -2
  236. package/src/contracts/Locations/Stores.ts +1 -2
  237. package/src/contracts/Locations/index.ts +2 -8
  238. package/src/contracts/RouteMesh/Contracts.ts +1 -7
  239. package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
  240. package/src/contracts/Spots/Contracts.ts +2 -8
  241. package/src/contracts/Spots/SpotKind.ts +16 -8
  242. package/src/contracts/Spots/ZLinkSpot.ts +8 -11
  243. package/src/contracts/Streams/IZLinkSession.ts +0 -1
  244. package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
  245. package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
  246. package/src/internal.ts +5 -4
  247. package/src/location-store-integration.ts +24 -16
  248. package/src/nest-integration.ts +40 -25
  249. package/src/runtime/abort.ts +10 -4
  250. package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
  251. package/src/runtime/actors/actor-authority-publication.ts +92 -77
  252. package/src/runtime/actors/actor-client.ts +162 -133
  253. package/src/runtime/actors/actor-context.ts +138 -130
  254. package/src/runtime/actors/actor-creation.ts +47 -44
  255. package/src/runtime/actors/actor-execution-context.ts +6 -4
  256. package/src/runtime/actors/actor-handoff.ts +269 -293
  257. package/src/runtime/actors/actor-join-deferred-scope.ts +5 -4
  258. package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
  259. package/src/runtime/actors/actor-local-native-join.ts +131 -159
  260. package/src/runtime/actors/actor-mailbox.ts +16 -19
  261. package/src/runtime/actors/actor-message-follow-context.ts +46 -36
  262. package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
  263. package/src/runtime/actors/actor-remote-joiner.ts +50 -54
  264. package/src/runtime/actors/actor-remote-wire.ts +9 -13
  265. package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
  266. package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
  267. package/src/runtime/actors/actor-runtime-state.ts +127 -124
  268. package/src/runtime/actors/actor-transfer-registry.ts +9 -14
  269. package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
  270. package/src/runtime/actors/bound-session-wire.ts +37 -17
  271. package/src/runtime/actors/deferred-join-accepted-journal.ts +351 -320
  272. package/src/runtime/actors/index.ts +43 -86
  273. package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
  274. package/src/runtime/actors/post-commit-actor-location.ts +30 -23
  275. package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
  276. package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
  277. package/src/runtime/admission.ts +9 -9
  278. package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
  279. package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
  280. package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
  281. package/src/runtime/backend/contracts/index.ts +73 -52
  282. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
  283. package/src/runtime/backend/mesh-completion-table.ts +6 -9
  284. package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
  285. package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
  286. package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
  287. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
  288. package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
  289. package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
  290. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
  291. package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
  292. package/src/runtime/backend/node/node-raw-mesh-backend.ts +335 -383
  293. package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
  294. package/src/runtime/backend/runtime-message.ts +5 -3
  295. package/src/runtime/backend/runtime-values.ts +10 -7
  296. package/src/runtime/channels/channel-autoconnect.ts +1 -4
  297. package/src/runtime/channels/channel-clients.ts +93 -73
  298. package/src/runtime/channels/channel-dispatch-pipeline.ts +40 -42
  299. package/src/runtime/channels/channel-dispatch-services.ts +51 -49
  300. package/src/runtime/channels/channel-dispatchers.ts +152 -96
  301. package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
  302. package/src/runtime/channels/channel-envelope.ts +256 -150
  303. package/src/runtime/channels/channel-multipart.ts +13 -5
  304. package/src/runtime/channels/channel-outbound-operations.ts +37 -41
  305. package/src/runtime/channels/channel-receive-loops.ts +102 -98
  306. package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
  307. package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
  308. package/src/runtime/channels/channel-runtime-manager.ts +63 -37
  309. package/src/runtime/channels/channel-socket-options.ts +3 -10
  310. package/src/runtime/channels/channel-socket-registry.ts +331 -273
  311. package/src/runtime/channels/channel-transports.ts +215 -197
  312. package/src/runtime/channels/client-server-location-runtime.ts +116 -100
  313. package/src/runtime/channels/client-server-service-wire.ts +37 -36
  314. package/src/runtime/channels/dispatch-error-reporter.ts +11 -8
  315. package/src/runtime/channels/fanout-location-runtime.ts +91 -94
  316. package/src/runtime/channels/fanout-service-wire.ts +5 -12
  317. package/src/runtime/channels/handler-filter-scope.ts +1 -4
  318. package/src/runtime/channels/index.ts +1 -4
  319. package/src/runtime/channels/local-spot-route-transport.ts +20 -5
  320. package/src/runtime/channels/route-member-snapshot.ts +11 -5
  321. package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
  322. package/src/runtime/channels/source-spot-router.ts +26 -22
  323. package/src/runtime/channels/spot-direct-envelope.ts +10 -8
  324. package/src/runtime/channels/spot-node-route-transport.ts +13 -16
  325. package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
  326. package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
  327. package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
  328. package/src/runtime/codecs/index.ts +3 -2
  329. package/src/runtime/diagnostics/flow-context.ts +12 -3
  330. package/src/runtime/diagnostics/index.ts +96 -61
  331. package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
  332. package/src/runtime/diagnostics/message-flow.ts +95 -76
  333. package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
  334. package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
  335. package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
  336. package/src/runtime/execution/index.ts +18 -26
  337. package/src/runtime/execution/serial-execution-queue.ts +31 -40
  338. package/src/runtime/execution/state-lane.ts +2 -2
  339. package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -51
  340. package/src/runtime/foundation/event-loop-resources.ts +8 -4
  341. package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
  342. package/src/runtime/foundation/operation-identity.ts +1 -2
  343. package/src/runtime/foundation/operation-registry.ts +8 -2
  344. package/src/runtime/foundation/raw-service-mesh-runtime.ts +312 -385
  345. package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
  346. package/src/runtime/foundation/runtime-state-projections.ts +24 -23
  347. package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
  348. package/src/runtime/foundation/service-discovery-registry.ts +67 -59
  349. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
  350. package/src/runtime/foundation/service-liveness-registry.ts +18 -13
  351. package/src/runtime/foundation/service-mailbox.ts +14 -14
  352. package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
  353. package/src/runtime/foundation/service-metadata-codec.ts +2 -9
  354. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
  355. package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
  356. package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
  357. package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
  358. package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
  359. package/src/runtime/foundation/service-session-binding-ingress-port.ts +1 -4
  360. package/src/runtime/foundation/service-stateful-registry.ts +69 -59
  361. package/src/runtime/foundation/service-stateful-runtime.ts +1174 -1112
  362. package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
  363. package/src/runtime/foundation/service-topology-registry.ts +157 -159
  364. package/src/runtime/foundation/service-weighted-selection.ts +9 -15
  365. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
  366. package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
  367. package/src/runtime/framework-errors-internal.ts +31 -30
  368. package/src/runtime/handlers/handler-instance-scope.ts +18 -29
  369. package/src/runtime/handlers/index.ts +18 -8
  370. package/src/runtime/host/actor-packet-relay.ts +290 -261
  371. package/src/runtime/host/actor-placement-coordinator.ts +165 -150
  372. package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
  373. package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
  374. package/src/runtime/host/actor-transfer-runtime.ts +391 -395
  375. package/src/runtime/host/application-job-queue.ts +32 -48
  376. package/src/runtime/host/bound-session-relay.ts +7 -9
  377. package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
  378. package/src/runtime/host/host-capacity-status.ts +10 -9
  379. package/src/runtime/host/index.ts +861 -789
  380. package/src/runtime/host/instance-activation-authority.ts +125 -143
  381. package/src/runtime/host/location-runtime-owner.ts +38 -26
  382. package/src/runtime/host/mesh-router-resolver.ts +30 -23
  383. package/src/runtime/host/relocation-direct-transfer.ts +15 -15
  384. package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
  385. package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
  386. package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
  387. package/src/runtime/host/remote-bound-session-relay.ts +274 -247
  388. package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
  389. package/src/runtime/host/route-mesh-runtime.ts +227 -181
  390. package/src/runtime/host/runtime-shutdown.ts +4 -3
  391. package/src/runtime/host/service-relocation-control.ts +14 -5
  392. package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
  393. package/src/runtime/host/spot-address-transport.ts +284 -237
  394. package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
  395. package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
  396. package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
  397. package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
  398. package/src/runtime/locations/actor-location-claims.ts +61 -49
  399. package/src/runtime/locations/actor-session-route-claims.ts +1 -4
  400. package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
  401. package/src/runtime/locations/authority-key-codec.ts +13 -10
  402. package/src/runtime/locations/auto-connect-loop.ts +14 -11
  403. package/src/runtime/locations/auto-connect-planner.ts +42 -31
  404. package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
  405. package/src/runtime/locations/canonical-codec.ts +3 -1
  406. package/src/runtime/locations/creation-operation-id.ts +4 -3
  407. package/src/runtime/locations/domain-store-contract.ts +13 -7
  408. package/src/runtime/locations/in-memory-authority-store.ts +232 -199
  409. package/src/runtime/locations/in-memory-location-store.ts +432 -250
  410. package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
  411. package/src/runtime/locations/internal-store-contracts.ts +95 -38
  412. package/src/runtime/locations/key-codec.ts +3 -4
  413. package/src/runtime/locations/lease-tracker.ts +36 -27
  414. package/src/runtime/locations/lifecycle-runtime.ts +15 -3
  415. package/src/runtime/locations/lifecycle.ts +33 -28
  416. package/src/runtime/locations/location-store-repository.ts +1329 -1185
  417. package/src/runtime/locations/opaque-record-key.ts +4 -9
  418. package/src/runtime/locations/resolvers.ts +201 -178
  419. package/src/runtime/locations/runtime.ts +251 -159
  420. package/src/runtime/locations/spot-location-claims.ts +110 -112
  421. package/src/runtime/messaging/creation-payload-codec.ts +4 -1
  422. package/src/runtime/messaging/framework-json-v1.ts +34 -15
  423. package/src/runtime/messaging/packet-name.ts +8 -6
  424. package/src/runtime/messaging/payload-codec.ts +70 -50
  425. package/src/runtime/messaging/submission-result.ts +6 -9
  426. package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
  427. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
  428. package/src/runtime/routing-id.ts +10 -7
  429. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
  430. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
  431. package/src/runtime/spots/index.ts +593 -563
  432. package/src/runtime/spots/spot-activation-registry.ts +38 -34
  433. package/src/runtime/spots/spot-activation-state.ts +43 -51
  434. package/src/runtime/spots/spot-activation.ts +179 -116
  435. package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
  436. package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
  437. package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
  438. package/src/runtime/spots/spot-actor-membership.ts +25 -27
  439. package/src/runtime/spots/spot-actor-packet-dispatch.ts +184 -153
  440. package/src/runtime/spots/spot-actor-packet-drain.ts +54 -42
  441. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
  442. package/src/runtime/spots/spot-closing.ts +11 -12
  443. package/src/runtime/spots/spot-context.ts +46 -26
  444. package/src/runtime/spots/spot-entry-activation.ts +84 -65
  445. package/src/runtime/spots/spot-handle.ts +17 -15
  446. package/src/runtime/spots/spot-handler-registry.ts +44 -31
  447. package/src/runtime/spots/spot-location-claim.ts +5 -4
  448. package/src/runtime/spots/spot-manager-public.ts +62 -82
  449. package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
  450. package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
  451. package/src/runtime/spots/spot-node-runtime-manager.ts +230 -221
  452. package/src/runtime/spots/spot-outbound.ts +47 -59
  453. package/src/runtime/spots/spot-publisher-transport.ts +5 -4
  454. package/src/runtime/spots/spot-remote-codec.ts +66 -65
  455. package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
  456. package/src/runtime/spots/spot-route-packet-dispatch.ts +128 -95
  457. package/src/runtime/spots/spot-route-replies.ts +23 -24
  458. package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
  459. package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
  460. package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +11 -17
  461. package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
  462. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
  463. package/src/runtime/spots/spot-routing-internal.ts +1 -4
  464. package/src/runtime/spots/spot-runtime-ports.ts +5 -5
  465. package/src/runtime/spots/spot-serial-executor.ts +5 -9
  466. package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
  467. package/src/runtime/spots/spot-subscription-dispatch.ts +56 -46
  468. package/src/runtime/spots/spot-timer.ts +98 -91
  469. package/src/runtime/streams/actor-session-binding-registry.ts +277 -235
  470. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +7 -4
  471. package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
  472. package/src/runtime/streams/bound-actor-relay-sender.ts +53 -51
  473. package/src/runtime/streams/bound-session-response-target.ts +29 -8
  474. package/src/runtime/streams/bound-session-service.ts +39 -39
  475. package/src/runtime/streams/index.ts +176 -100
  476. package/src/runtime/streams/managed-stream.ts +98 -87
  477. package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
  478. package/src/runtime/streams/protocol.ts +73 -43
  479. package/src/runtime/streams/session-actor-coordinator.ts +97 -89
  480. package/src/runtime/streams/session-calls.ts +2 -8
  481. package/src/runtime/streams/session-context.ts +66 -48
  482. package/src/runtime/streams/session-provider.ts +5 -7
  483. package/src/runtime/streams/session-serial-executor.ts +7 -6
  484. package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
  485. package/src/runtime/streams/stream-frame-factory.ts +55 -38
  486. package/src/runtime/streams/stream-session-runtime.ts +268 -210
  487. package/src/runtime/workers/index.ts +68 -29
@@ -1,14 +1,10 @@
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';
7
+ import { ZLinkFrameworkErrorKind, ZLinkFrameworkException } from '../../contracts';
12
8
  import { ZLinkSocketNativeEventType } from '../diagnostics/internal-event-contracts';
13
9
  import {
14
10
  ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome,
@@ -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
  }
@@ -483,73 +480,94 @@ export class ZLinkStreamSessionRuntime {
483
480
  this.context.enterDispatch(decodedHeader);
484
481
  enteredDispatch = true;
485
482
  const session = await this.requireSession();
486
- const streamKind = decodedHeader.kind === ZLinkStreamMessageKind.Request
487
- ? ZLinkDispatchMessageKind.Request
488
- : ZLinkDispatchMessageKind.Send;
483
+ const streamKind =
484
+ decodedHeader.kind === ZLinkStreamMessageKind.Request
485
+ ? ZLinkDispatchMessageKind.Request
486
+ : ZLinkDispatchMessageKind.Send;
489
487
  const streamCorr = decodedHeader.correlationId;
490
488
  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,
489
+ await runWithFlow(
490
+ createInboundFlow(
491
+ inboundHeader.flowId,
492
+ inboundHeader.flowOrigin,
493
+ this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true
494
+ ),
495
+ async () => {
496
+ flowIfEnabled(this.options.dispatchErrors?.flow, ZLinkMessageFlowOutcome.Received)?.trace(
497
+ {
498
+ outcome: ZLinkMessageFlowOutcome.Received,
499
+ surface: ZLinkDispatchErrorSurface.StreamSession,
500
+ messageKind: streamKind,
501
+ packetName: inboundHeader.name,
502
+ correlationId: streamCorr,
503
+ sourceRid:
504
+ this.context.routingId === undefined ? undefined : String(this.context.routingId)
505
+ }
506
+ );
507
+ flowIfEnabled(this.options.dispatchErrors?.flow, ZLinkMessageFlowOutcome.Admitted)?.trace(
508
+ {
509
+ outcome: ZLinkMessageFlowOutcome.Admitted,
510
+ surface: ZLinkDispatchErrorSurface.StreamSession,
511
+ messageKind: streamKind,
512
+ packetName: inboundHeader.name,
513
+ correlationId: streamCorr,
514
+ sourceRid:
515
+ this.context.routingId === undefined ? undefined : String(this.context.routingId)
516
+ }
517
+ );
518
+ releaseApplicationJobPermitBeforeHandler();
519
+ flowIfEnabled(
520
+ this.options.dispatchErrors?.flow,
521
+ ZLinkMessageFlowOutcome.Dispatched
522
+ )?.trace({
523
+ outcome: ZLinkMessageFlowOutcome.Dispatched,
533
524
  surface: ZLinkDispatchErrorSurface.StreamSession,
534
525
  messageKind: streamKind,
535
526
  packetName: inboundHeader.name,
536
527
  correlationId: streamCorr,
537
- sourceRid: this.context.routingId === undefined ? undefined : String(this.context.routingId)
528
+ sourceRid:
529
+ this.context.routingId === undefined ? undefined : String(this.context.routingId)
538
530
  });
531
+ await session.onDispatch?.(
532
+ createSessionDispatchContext(inboundHeader),
533
+ wrapFrameworkPayloadMessage(
534
+ dispatchPayload,
535
+ this.options.messageSerializers,
536
+ streamCodecContentType(inboundHeader.codec),
537
+ inboundHeader.name
538
+ )
539
+ );
540
+ if (streamKind === ZLinkDispatchMessageKind.Send) {
541
+ flowIfEnabled(
542
+ this.options.dispatchErrors?.flow,
543
+ ZLinkMessageFlowOutcome.Completed
544
+ )?.trace({
545
+ outcome: ZLinkMessageFlowOutcome.Completed,
546
+ surface: ZLinkDispatchErrorSurface.StreamSession,
547
+ messageKind: streamKind,
548
+ packetName: inboundHeader.name,
549
+ correlationId: streamCorr,
550
+ sourceRid:
551
+ this.context.routingId === undefined ? undefined : String(this.context.routingId)
552
+ });
553
+ }
539
554
  }
540
- });
555
+ );
541
556
  } catch (error) {
542
557
  this.options.dispatchErrors?.report({
543
558
  surface: ZLinkDispatchErrorSurface.StreamSession,
544
- messageKind: decodedHeader.kind === ZLinkStreamMessageKind.Request
545
- ? ZLinkDispatchMessageKind.Request
546
- : ZLinkDispatchMessageKind.Send,
559
+ messageKind:
560
+ decodedHeader.kind === ZLinkStreamMessageKind.Request
561
+ ? ZLinkDispatchMessageKind.Request
562
+ : ZLinkDispatchMessageKind.Send,
547
563
  reason: ZLinkDispatchErrorReason.HandlerException,
548
- action: decodedHeader.requestSeq === undefined
549
- ? ZLinkDispatchErrorAction.Drop
550
- : ZLinkDispatchErrorAction.ReplyError,
564
+ action:
565
+ decodedHeader.requestSeq === undefined
566
+ ? ZLinkDispatchErrorAction.Drop
567
+ : ZLinkDispatchErrorAction.ReplyError,
551
568
  packetName: decodedHeader.name,
552
- sourceRid: this.context.routingId === undefined ? undefined : String(this.context.routingId),
569
+ sourceRid:
570
+ this.context.routingId === undefined ? undefined : String(this.context.routingId),
553
571
  correlationId: decodedHeader.correlationId,
554
572
  flowId: decodedHeader.flowId,
555
573
  flowOrigin: decodedHeader.flowOrigin,
@@ -602,7 +620,9 @@ export class ZLinkStreamSessionRuntime {
602
620
  this.livenessTimer = this.livenessClock.setTimer(() => {
603
621
  this.livenessTimer = undefined;
604
622
  this.serial.executeInfrastructure(
605
- async () => this.runLivenessCheck(), {}, error => this.options.onError?.(error)
623
+ async () => this.runLivenessCheck(),
624
+ {},
625
+ (error) => this.options.onError?.(error)
606
626
  );
607
627
  }, ZLINK_STREAM_HEARTBEAT_INTERVAL_MS);
608
628
  }
@@ -621,8 +641,8 @@ export class ZLinkStreamSessionRuntime {
621
641
  return;
622
642
  }
623
643
  if (
624
- this.awaitingPongSince !== undefined
625
- && now - this.awaitingPongSince >= ZLINK_STREAM_HEARTBEAT_TIMEOUT_MS
644
+ this.awaitingPongSince !== undefined &&
645
+ now - this.awaitingPongSince >= ZLINK_STREAM_HEARTBEAT_TIMEOUT_MS
626
646
  ) {
627
647
  await this.closeForLiveness(
628
648
  ZLinkStreamCloseReasonCode.HeartbeatTimeout,
@@ -675,11 +695,12 @@ export class ZLinkStreamSessionRuntime {
675
695
  new Map(),
676
696
  false,
677
697
  {
678
- code: error instanceof ZLinkFrameworkException
679
- ? ZLinkFrameworkErrorKind[error.kind]
680
- : error instanceof Error
681
- ? error.constructor.name
682
- : 'RemoteError',
698
+ code:
699
+ error instanceof ZLinkFrameworkException
700
+ ? ZLinkFrameworkErrorKind[error.kind]
701
+ : error instanceof Error
702
+ ? error.constructor.name
703
+ : 'RemoteError',
683
704
  message: error instanceof Error ? error.message : String(error)
684
705
  }
685
706
  );
@@ -706,17 +727,17 @@ export class ZLinkStreamSessionRuntime {
706
727
  packetName: string,
707
728
  correlationId: string | undefined
708
729
  ): void {
709
- const reply = kind === ZLinkStreamMessageKind.Response
710
- || kind === ZLinkStreamMessageKind.Error;
730
+ const reply = kind === ZLinkStreamMessageKind.Response || kind === ZLinkStreamMessageKind.Error;
711
731
  const outcome = reply ? ZLinkMessageFlowOutcome.Replied : ZLinkMessageFlowOutcome.Sent;
712
732
  flowIfEnabled(this.options.dispatchErrors?.flow, outcome)?.trace({
713
733
  outcome,
714
734
  surface: ZLinkDispatchErrorSurface.StreamSession,
715
- messageKind: kind === ZLinkStreamMessageKind.Response
716
- ? ZLinkDispatchMessageKind.Response
717
- : kind === ZLinkStreamMessageKind.Error
718
- ? ZLinkDispatchMessageKind.Error
719
- : ZLinkDispatchMessageKind.Send,
735
+ messageKind:
736
+ kind === ZLinkStreamMessageKind.Response
737
+ ? ZLinkDispatchMessageKind.Response
738
+ : kind === ZLinkStreamMessageKind.Error
739
+ ? ZLinkDispatchMessageKind.Error
740
+ : ZLinkDispatchMessageKind.Send,
720
741
  packetName: packetName.length === 0 ? undefined : packetName,
721
742
  correlationId,
722
743
  sourceRid: this.context.routingId === undefined ? undefined : String(this.context.routingId)
@@ -748,15 +769,17 @@ export class ZLinkStreamSessionRuntime {
748
769
  if (this.disconnected || this.disconnectQueued) return;
749
770
  this.disconnectQueued = true;
750
771
  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
- });
772
+ void this.serial
773
+ .executeFinal(async () => {
774
+ this.disconnectQueued = false;
775
+ if (this.disconnected) return;
776
+ this.stream.markTransportClosed();
777
+ this.disconnected = true;
778
+ await this.complete(error, true);
779
+ })
780
+ .catch(() => {
781
+ this.disconnectQueued = false;
782
+ });
760
783
  }
761
784
 
762
785
  private async cleanup(): Promise<void> {
@@ -808,16 +831,22 @@ export class ZLinkStreamSessionRuntime {
808
831
  onRejected?.(error);
809
832
  return;
810
833
  }
811
- if (!this.serial.executeApplication(async () => {
812
- try {
813
- await work();
814
- } finally {
815
- claim?.close();
816
- }
817
- }, {}, () => {
818
- claim?.close();
819
- onRejected?.();
820
- })) {
834
+ if (
835
+ !this.serial.executeApplication(
836
+ async () => {
837
+ try {
838
+ await work();
839
+ } finally {
840
+ claim?.close();
841
+ }
842
+ },
843
+ {},
844
+ () => {
845
+ claim?.close();
846
+ onRejected?.();
847
+ }
848
+ )
849
+ ) {
821
850
  claim?.close();
822
851
  // The serial lane only refuses new work after dispose() closed it.
823
852
  onShutdownRejected?.();
@@ -854,21 +883,29 @@ export class ZLinkStreamSessionRuntime {
854
883
 
855
884
  function streamShutdownDropMessageKind(kind: ZLinkStreamMessageKind): ZLinkDispatchMessageKind {
856
885
  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;
886
+ case ZLinkStreamMessageKind.Request:
887
+ return ZLinkDispatchMessageKind.Request;
888
+ case ZLinkStreamMessageKind.Response:
889
+ return ZLinkDispatchMessageKind.Response;
890
+ case ZLinkStreamMessageKind.Error:
891
+ return ZLinkDispatchMessageKind.Error;
892
+ case ZLinkStreamMessageKind.Control:
893
+ return ZLinkDispatchMessageKind.Control;
894
+ default:
895
+ return ZLinkDispatchMessageKind.Send;
862
896
  }
863
897
  }
864
898
 
865
899
  export class ZLinkStreamSessionNodeRuntime {
866
900
  private readonly sessions = new Map<string, ZLinkStreamSessionRuntime>();
867
901
  private readonly availablePackets: ZLinkBackendStreamPacket[] = [];
868
- private readonly pendingConnectionMetadata: Array<{
869
- readonly localAddr?: string;
870
- readonly remoteAddr?: string;
871
- } | undefined> = [];
902
+ private readonly pendingConnectionMetadata: Array<
903
+ | {
904
+ readonly localAddr?: string;
905
+ readonly remoteAddr?: string;
906
+ }
907
+ | undefined
908
+ > = [];
872
909
  private pendingConnectionMetadataHead = 0;
873
910
  private pendingConnectionMetadataCount = 0;
874
911
  private readonly unaddressedMonitorSessions: Array<string | undefined> = [];
@@ -899,21 +936,21 @@ export class ZLinkStreamSessionNodeRuntime {
899
936
  return;
900
937
  }
901
938
  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
- });
939
+ monitor?.onEvent((event) => this.onMonitorEvent(event));
940
+ const running = this.runReceiveLoop(this.receiveAbortController.signal).catch((error) => {
941
+ if (!this.stopped) {
942
+ this.options.onError?.(error);
943
+ }
944
+ });
909
945
  this.receiveLoop = running;
910
946
  if (monitor !== undefined) {
911
- this.monitorLoop = this.runMonitorLoop(monitor, this.receiveAbortController.signal)
912
- .catch((error) => {
947
+ this.monitorLoop = this.runMonitorLoop(monitor, this.receiveAbortController.signal).catch(
948
+ (error) => {
913
949
  if (!this.stopped) {
914
950
  this.options.onError?.(error);
915
951
  }
916
- });
952
+ }
953
+ );
917
954
  }
918
955
  }
919
956
 
@@ -1046,8 +1083,8 @@ export class ZLinkStreamSessionNodeRuntime {
1046
1083
 
1047
1084
  this.receiveWorkSinceYield += 1;
1048
1085
  if (
1049
- this.receiveWorkSinceYield >= ZLINK_STREAM_RECEIVE_FRAME_BATCH_LIMIT
1050
- && !this.isReceiveStopped(signal)
1086
+ this.receiveWorkSinceYield >= ZLINK_STREAM_RECEIVE_FRAME_BATCH_LIMIT &&
1087
+ !this.isReceiveStopped(signal)
1051
1088
  ) {
1052
1089
  this.receiveWorkSinceYield = 0;
1053
1090
  await new Promise<void>((resolve) => setImmediate(resolve));
@@ -1055,10 +1092,7 @@ export class ZLinkStreamSessionNodeRuntime {
1055
1092
  }
1056
1093
  }
1057
1094
 
1058
- private acceptPacket(
1059
- packet: ZLinkBackendStreamPacket,
1060
- permit: ApplicationJobPermitPort
1061
- ): void {
1095
+ private acceptPacket(packet: ZLinkBackendStreamPacket, permit: ApplicationJobPermitPort): void {
1062
1096
  const routingId = packet.routingId;
1063
1097
  const header = packet.header;
1064
1098
  const body = packet.body;
@@ -1080,16 +1114,17 @@ export class ZLinkStreamSessionNodeRuntime {
1080
1114
  this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true
1081
1115
  );
1082
1116
  payload = ownedMessage(body.data());
1083
- const terminalCompletion = decodedHeader.kind === ZLinkStreamMessageKind.Response
1084
- || decodedHeader.kind === ZLinkStreamMessageKind.Error;
1117
+ const terminalCompletion =
1118
+ decodedHeader.kind === ZLinkStreamMessageKind.Response ||
1119
+ decodedHeader.kind === ZLinkStreamMessageKind.Error;
1085
1120
  const applicationPermit = terminalCompletion ? undefined : permit;
1086
1121
  if (terminalCompletion) {
1087
1122
  permit.releaseAfterInternalProcessing();
1088
1123
  releasePermitOnFailure = false;
1089
1124
  } else {
1090
1125
  if (
1091
- decodedHeader.kind === ZLinkStreamMessageKind.Send
1092
- || decodedHeader.kind === ZLinkStreamMessageKind.Request
1126
+ decodedHeader.kind === ZLinkStreamMessageKind.Send ||
1127
+ decodedHeader.kind === ZLinkStreamMessageKind.Request
1093
1128
  ) {
1094
1129
  permit.markApplicationQueued();
1095
1130
  }
@@ -1184,7 +1219,10 @@ export class ZLinkStreamSessionNodeRuntime {
1184
1219
  this.pendingConnectionMetadataCount += 1;
1185
1220
  return;
1186
1221
  }
1187
- this.getOrCreateSession(event.routingId)?.enqueueConnected(event.localAddr, event.remoteAddr);
1222
+ this.getOrCreateSession(event.routingId)?.enqueueConnected(
1223
+ event.localAddr,
1224
+ event.remoteAddr
1225
+ );
1188
1226
  return;
1189
1227
  case ZLinkSocketNativeEventType.Disconnected:
1190
1228
  {
@@ -1197,10 +1235,7 @@ export class ZLinkStreamSessionNodeRuntime {
1197
1235
  session.enqueueDisconnected(error);
1198
1236
  return;
1199
1237
  }
1200
- if (
1201
- event.routingId === undefined
1202
- && !streamMonitorHasEndpoint(event)
1203
- ) {
1238
+ if (event.routingId === undefined && !streamMonitorHasEndpoint(event)) {
1204
1239
  this.enqueueEndpointlessDisconnect(error);
1205
1240
  }
1206
1241
  }
@@ -1212,37 +1247,47 @@ export class ZLinkStreamSessionNodeRuntime {
1212
1247
 
1213
1248
  private applyPendingConnectionMetadata(session: ZLinkStreamSessionRuntime): void {
1214
1249
  if (
1215
- session.stream.localAddr !== undefined
1216
- || session.stream.remoteAddr !== undefined
1217
- || this.pendingConnectionMetadataCount === 0
1250
+ session.stream.localAddr !== undefined ||
1251
+ session.stream.remoteAddr !== undefined ||
1252
+ this.pendingConnectionMetadataCount === 0
1218
1253
  ) {
1219
1254
  return;
1220
1255
  }
1221
1256
  const metadata = this.takePendingConnectionMetadata();
1222
1257
  if (metadata === undefined) return;
1223
- this.removePendingConnectionMetadata(streamMonitorEndpointKey(metadata.localAddr, metadata.remoteAddr));
1258
+ this.removePendingConnectionMetadata(
1259
+ streamMonitorEndpointKey(metadata.localAddr, metadata.remoteAddr)
1260
+ );
1224
1261
  session.enqueueConnected(metadata.localAddr, metadata.remoteAddr);
1225
1262
  this.enqueueUnaddressedMonitorSession(session.stream.sessionId);
1226
1263
  }
1227
1264
 
1228
1265
  private hasPendingConnectionMetadata(endpointKey: string): boolean {
1229
- for (let index = this.pendingConnectionMetadataHead; index < this.pendingConnectionMetadata.length; index += 1) {
1266
+ for (
1267
+ let index = this.pendingConnectionMetadataHead;
1268
+ index < this.pendingConnectionMetadata.length;
1269
+ index += 1
1270
+ ) {
1230
1271
  const metadata = this.pendingConnectionMetadata[index];
1231
- if (metadata !== undefined
1232
- && streamMonitorEndpointKey(metadata.localAddr, metadata.remoteAddr) === endpointKey) {
1272
+ if (
1273
+ metadata !== undefined &&
1274
+ streamMonitorEndpointKey(metadata.localAddr, metadata.remoteAddr) === endpointKey
1275
+ ) {
1233
1276
  return true;
1234
1277
  }
1235
1278
  }
1236
1279
  return false;
1237
1280
  }
1238
1281
 
1239
- private takePendingConnectionMetadata(): {
1240
- readonly localAddr?: string;
1241
- readonly remoteAddr?: string;
1242
- } | undefined {
1282
+ private takePendingConnectionMetadata():
1283
+ | {
1284
+ readonly localAddr?: string;
1285
+ readonly remoteAddr?: string;
1286
+ }
1287
+ | undefined {
1243
1288
  while (
1244
- this.pendingConnectionMetadataHead < this.pendingConnectionMetadata.length
1245
- && this.pendingConnectionMetadata[this.pendingConnectionMetadataHead] === undefined
1289
+ this.pendingConnectionMetadataHead < this.pendingConnectionMetadata.length &&
1290
+ this.pendingConnectionMetadata[this.pendingConnectionMetadataHead] === undefined
1246
1291
  ) {
1247
1292
  this.pendingConnectionMetadataHead += 1;
1248
1293
  }
@@ -1259,8 +1304,10 @@ export class ZLinkStreamSessionNodeRuntime {
1259
1304
  if (this.pendingConnectionMetadataCount === 0) {
1260
1305
  this.pendingConnectionMetadata.length = 0;
1261
1306
  this.pendingConnectionMetadataHead = 0;
1262
- } else if (this.pendingConnectionMetadataHead >= 1024
1263
- && this.pendingConnectionMetadataHead * 2 >= this.pendingConnectionMetadata.length) {
1307
+ } else if (
1308
+ this.pendingConnectionMetadataHead >= 1024 &&
1309
+ this.pendingConnectionMetadataHead * 2 >= this.pendingConnectionMetadata.length
1310
+ ) {
1264
1311
  this.pendingConnectionMetadata.splice(0, this.pendingConnectionMetadataHead);
1265
1312
  this.pendingConnectionMetadataHead = 0;
1266
1313
  }
@@ -1273,8 +1320,8 @@ export class ZLinkStreamSessionNodeRuntime {
1273
1320
 
1274
1321
  private takeUnaddressedMonitorSession(): string | undefined {
1275
1322
  while (
1276
- this.unaddressedMonitorSessionHead < this.unaddressedMonitorSessions.length
1277
- && this.unaddressedMonitorSessions[this.unaddressedMonitorSessionHead] === undefined
1323
+ this.unaddressedMonitorSessionHead < this.unaddressedMonitorSessions.length &&
1324
+ this.unaddressedMonitorSessions[this.unaddressedMonitorSessionHead] === undefined
1278
1325
  ) {
1279
1326
  this.unaddressedMonitorSessionHead += 1;
1280
1327
  }
@@ -1286,8 +1333,10 @@ export class ZLinkStreamSessionNodeRuntime {
1286
1333
  if (this.unaddressedMonitorSessionCount === 0) {
1287
1334
  this.unaddressedMonitorSessions.length = 0;
1288
1335
  this.unaddressedMonitorSessionHead = 0;
1289
- } else if (this.unaddressedMonitorSessionHead >= 1024
1290
- && this.unaddressedMonitorSessionHead * 2 >= this.unaddressedMonitorSessions.length) {
1336
+ } else if (
1337
+ this.unaddressedMonitorSessionHead >= 1024 &&
1338
+ this.unaddressedMonitorSessionHead * 2 >= this.unaddressedMonitorSessions.length
1339
+ ) {
1291
1340
  this.unaddressedMonitorSessions.splice(0, this.unaddressedMonitorSessionHead);
1292
1341
  this.unaddressedMonitorSessionHead = 0;
1293
1342
  }
@@ -1296,9 +1345,11 @@ export class ZLinkStreamSessionNodeRuntime {
1296
1345
 
1297
1346
  private firstUnaddressedSession(): ZLinkStreamSessionRuntime | undefined {
1298
1347
  for (const session of this.sessions.values()) {
1299
- if (!session.isDisconnected
1300
- && session.stream.localAddr === undefined
1301
- && session.stream.remoteAddr === undefined) {
1348
+ if (
1349
+ !session.isDisconnected &&
1350
+ session.stream.localAddr === undefined &&
1351
+ session.stream.remoteAddr === undefined
1352
+ ) {
1302
1353
  return session;
1303
1354
  }
1304
1355
  }
@@ -1314,7 +1365,11 @@ export class ZLinkStreamSessionNodeRuntime {
1314
1365
  }
1315
1366
 
1316
1367
  private removePendingConnectionMetadata(endpointKey: string): void {
1317
- for (let index = this.pendingConnectionMetadataHead; index < this.pendingConnectionMetadata.length; index += 1) {
1368
+ for (
1369
+ let index = this.pendingConnectionMetadataHead;
1370
+ index < this.pendingConnectionMetadata.length;
1371
+ index += 1
1372
+ ) {
1318
1373
  const metadata = this.pendingConnectionMetadata[index];
1319
1374
  if (metadata === undefined) continue;
1320
1375
  if (streamMonitorEndpointKey(metadata.localAddr, metadata.remoteAddr) === endpointKey) {
@@ -1325,7 +1380,9 @@ export class ZLinkStreamSessionNodeRuntime {
1325
1380
  this.compactPendingConnectionMetadata();
1326
1381
  }
1327
1382
 
1328
- private resolveMonitorSession(event: ZLinkBackendSocketMonitorEvent): ZLinkStreamSessionRuntime | undefined {
1383
+ private resolveMonitorSession(
1384
+ event: ZLinkBackendSocketMonitorEvent
1385
+ ): ZLinkStreamSessionRuntime | undefined {
1329
1386
  if (event.routingId !== undefined) {
1330
1387
  const session = this.getActiveSession(streamSessionIdFromRoutingId(event.routingId));
1331
1388
  if (session !== undefined) {
@@ -1336,9 +1393,11 @@ export class ZLinkStreamSessionNodeRuntime {
1336
1393
  let match: ZLinkStreamSessionRuntime | undefined;
1337
1394
  let matchCount = 0;
1338
1395
  for (const session of this.sessions.values()) {
1339
- if (session.isDisconnected
1340
- || session.stream.localAddr !== event.localAddr
1341
- || session.stream.remoteAddr !== event.remoteAddr) {
1396
+ if (
1397
+ session.isDisconnected ||
1398
+ session.stream.localAddr !== event.localAddr ||
1399
+ session.stream.remoteAddr !== event.remoteAddr
1400
+ ) {
1342
1401
  continue;
1343
1402
  }
1344
1403
  match = session;
@@ -1382,11 +1441,11 @@ export class ZLinkStreamSessionNodeRuntime {
1382
1441
  this.wakeReceiveLoop();
1383
1442
  setImmediate(() => {
1384
1443
  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
1444
+ pending.cancelled ||
1445
+ this.stopped ||
1446
+ this.pendingEndpointlessDisconnect !== pending ||
1447
+ this.activityVersion !== pending.activityVersion ||
1448
+ this.sessions.get(pending.session.stream.sessionId) !== pending.session
1390
1449
  ) {
1391
1450
  return;
1392
1451
  }
@@ -1425,15 +1484,11 @@ export class ZLinkStreamSessionNodeRuntime {
1425
1484
  void rejected.closeForDrain().catch((error) => this.options.onError?.(error));
1426
1485
  return undefined;
1427
1486
  }
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
- }
1487
+ const created = new ZLinkStreamSessionRuntime(this.options, routingId, (sessionId, session) => {
1488
+ if (this.sessions.get(sessionId) === session) {
1489
+ this.sessions.delete(sessionId);
1435
1490
  }
1436
- );
1491
+ });
1437
1492
  this.sessions.set(sessionId, created);
1438
1493
  return created;
1439
1494
  }
@@ -1444,7 +1499,10 @@ function monitorIdleDelayMs(misses: number): number {
1444
1499
  return Math.min(scaled, ZLINK_STREAM_MONITOR_IDLE_MAX_DELAY_MS);
1445
1500
  }
1446
1501
 
1447
- function streamMonitorEndpointKey(localAddr: string | undefined, remoteAddr: string | undefined): string {
1502
+ function streamMonitorEndpointKey(
1503
+ localAddr: string | undefined,
1504
+ remoteAddr: string | undefined
1505
+ ): string {
1448
1506
  return `${localAddr ?? ''}\n${remoteAddr ?? ''}`;
1449
1507
  }
1450
1508