@zlink-systems/framework 0.20.0 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (487) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Common/ZLinkMessage.js +5 -5
  3. package/dist/contracts/Configuration/CodecContentType.js +5 -7
  4. package/dist/contracts/Configuration/DiagnosticsValidation.js +1 -6
  5. package/dist/contracts/Configuration/EndpointNotation.js +4 -8
  6. package/dist/contracts/Configuration/Registration.js +14 -11
  7. package/dist/contracts/Configuration/RegistrationBuilders.js +32 -25
  8. package/dist/contracts/Configuration/RegistrationNormalizers.js +25 -26
  9. package/dist/contracts/Configuration/RegistrationValidators.js +36 -38
  10. package/dist/contracts/Configuration/SendTimeoutValidation.js +4 -4
  11. package/dist/contracts/Configuration/TimerRegistrationValidator.js +7 -7
  12. package/dist/contracts/Handlers/JsonContract.js +23 -11
  13. package/dist/contracts/Spots/SpotKind.js +16 -8
  14. package/dist/location-store-integration.js +16 -16
  15. package/dist/nest-integration.js +17 -11
  16. package/dist/runtime/abort.js +9 -5
  17. package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
  18. package/dist/runtime/actors/actor-authority-publication.js +18 -17
  19. package/dist/runtime/actors/actor-client.js +83 -63
  20. package/dist/runtime/actors/actor-context.js +24 -18
  21. package/dist/runtime/actors/actor-creation.js +4 -3
  22. package/dist/runtime/actors/actor-handoff.js +89 -92
  23. package/dist/runtime/actors/actor-local-native-join.js +18 -19
  24. package/dist/runtime/actors/actor-mailbox.js +1 -1
  25. package/dist/runtime/actors/actor-message-follow-context.js +24 -21
  26. package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
  27. package/dist/runtime/actors/actor-remote-joiner.js +20 -17
  28. package/dist/runtime/actors/actor-remote-wire.js +6 -7
  29. package/dist/runtime/actors/actor-runtime-state.js +87 -81
  30. package/dist/runtime/actors/actor-transfer-registry.js +3 -5
  31. package/dist/runtime/actors/bound-session-wire.js +14 -9
  32. package/dist/runtime/actors/deferred-join-accepted-journal.js +158 -124
  33. package/dist/runtime/actors/index.js +2 -5
  34. package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
  35. package/dist/runtime/actors/post-commit-actor-location.js +1 -1
  36. package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
  37. package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
  38. package/dist/runtime/admission.js +2 -6
  39. package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
  40. package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
  41. package/dist/runtime/backend/mesh-completion-table.js +1 -3
  42. package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
  43. package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
  44. package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
  45. package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
  46. package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
  47. package/dist/runtime/backend/node/node-raw-mesh-backend.js +116 -113
  48. package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
  49. package/dist/runtime/backend/runtime-message.js +3 -3
  50. package/dist/runtime/backend/runtime-values.d.ts +2 -2
  51. package/dist/runtime/backend/runtime-values.js +4 -5
  52. package/dist/runtime/channels/channel-clients.js +27 -24
  53. package/dist/runtime/channels/channel-dispatch-pipeline.js +10 -18
  54. package/dist/runtime/channels/channel-dispatch-services.js +7 -4
  55. package/dist/runtime/channels/channel-dispatchers.js +9 -9
  56. package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
  57. package/dist/runtime/channels/channel-envelope.js +83 -47
  58. package/dist/runtime/channels/channel-outbound-operations.js +8 -8
  59. package/dist/runtime/channels/channel-receive-loops.js +20 -22
  60. package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
  61. package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
  62. package/dist/runtime/channels/channel-runtime-manager.js +18 -9
  63. package/dist/runtime/channels/channel-socket-registry.js +126 -123
  64. package/dist/runtime/channels/channel-transports.js +43 -33
  65. package/dist/runtime/channels/client-server-location-runtime.js +32 -40
  66. package/dist/runtime/channels/client-server-service-wire.js +29 -22
  67. package/dist/runtime/channels/dispatch-error-reporter.js +9 -7
  68. package/dist/runtime/channels/fanout-location-runtime.js +34 -47
  69. package/dist/runtime/channels/fanout-service-wire.js +3 -5
  70. package/dist/runtime/channels/local-spot-route-transport.js +7 -1
  71. package/dist/runtime/channels/route-member-snapshot.js +3 -3
  72. package/dist/runtime/channels/source-spot-router.js +6 -2
  73. package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
  74. package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
  75. package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
  76. package/dist/runtime/diagnostics/index.js +38 -10
  77. package/dist/runtime/diagnostics/message-flow.js +47 -39
  78. package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
  79. package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
  80. package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
  81. package/dist/runtime/execution/index.js +7 -6
  82. package/dist/runtime/execution/serial-execution-queue.js +12 -18
  83. package/dist/runtime/execution/state-lane.js +2 -2
  84. package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -23
  85. package/dist/runtime/foundation/event-loop-resources.js +4 -4
  86. package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
  87. package/dist/runtime/foundation/raw-service-mesh-runtime.js +136 -136
  88. package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
  89. package/dist/runtime/foundation/runtime-state-projections.js +22 -11
  90. package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
  91. package/dist/runtime/foundation/service-discovery-registry.js +35 -33
  92. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
  93. package/dist/runtime/foundation/service-liveness-registry.js +16 -12
  94. package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
  95. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
  96. package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
  97. package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
  98. package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
  99. package/dist/runtime/foundation/service-stateful-registry.js +24 -23
  100. package/dist/runtime/foundation/service-stateful-runtime.js +416 -438
  101. package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
  102. package/dist/runtime/foundation/service-topology-registry.js +96 -95
  103. package/dist/runtime/foundation/service-weighted-selection.js +6 -11
  104. package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
  105. package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
  106. package/dist/runtime/framework-errors-internal.js +7 -10
  107. package/dist/runtime/handlers/handler-instance-scope.js +4 -5
  108. package/dist/runtime/handlers/index.js +3 -1
  109. package/dist/runtime/host/actor-packet-relay.js +74 -70
  110. package/dist/runtime/host/actor-placement-coordinator.js +29 -31
  111. package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
  112. package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
  113. package/dist/runtime/host/actor-transfer-runtime.js +176 -153
  114. package/dist/runtime/host/application-job-queue.js +18 -22
  115. package/dist/runtime/host/bound-session-relay.js +3 -1
  116. package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
  117. package/dist/runtime/host/host-capacity-status.js +8 -4
  118. package/dist/runtime/host/index.js +244 -227
  119. package/dist/runtime/host/instance-activation-authority.js +93 -96
  120. package/dist/runtime/host/location-runtime-owner.js +16 -14
  121. package/dist/runtime/host/mesh-router-resolver.js +11 -13
  122. package/dist/runtime/host/relocation-direct-transfer.js +10 -9
  123. package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
  124. package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
  125. package/dist/runtime/host/remote-bound-session-relay.js +97 -73
  126. package/dist/runtime/host/route-mesh-runtime.js +64 -69
  127. package/dist/runtime/host/runtime-shutdown.js +1 -2
  128. package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
  129. package/dist/runtime/host/spot-address-transport.js +69 -71
  130. package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
  131. package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
  132. package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
  133. package/dist/runtime/locations/actor-location-claims.js +26 -20
  134. package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
  135. package/dist/runtime/locations/authority-key-codec.js +7 -7
  136. package/dist/runtime/locations/auto-connect-loop.js +3 -3
  137. package/dist/runtime/locations/auto-connect-planner.js +25 -19
  138. package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
  139. package/dist/runtime/locations/in-memory-authority-store.js +128 -118
  140. package/dist/runtime/locations/in-memory-location-store.js +195 -168
  141. package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
  142. package/dist/runtime/locations/key-codec.js +1 -1
  143. package/dist/runtime/locations/lease-tracker.js +23 -21
  144. package/dist/runtime/locations/lifecycle.js +4 -5
  145. package/dist/runtime/locations/location-store-repository.js +368 -324
  146. package/dist/runtime/locations/opaque-record-key.js +2 -2
  147. package/dist/runtime/locations/resolvers.js +73 -82
  148. package/dist/runtime/locations/runtime.js +68 -63
  149. package/dist/runtime/locations/spot-location-claims.js +39 -35
  150. package/dist/runtime/messaging/framework-json-v1.js +7 -7
  151. package/dist/runtime/messaging/packet-name.js +7 -6
  152. package/dist/runtime/messaging/payload-codec.js +21 -18
  153. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
  154. package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
  155. package/dist/runtime/routing-id.js +3 -5
  156. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
  157. package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
  158. package/dist/runtime/spots/index.js +208 -219
  159. package/dist/runtime/spots/spot-activation-registry.js +15 -14
  160. package/dist/runtime/spots/spot-activation-state.js +17 -15
  161. package/dist/runtime/spots/spot-activation.js +33 -16
  162. package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
  163. package/dist/runtime/spots/spot-actor-membership.js +1 -3
  164. package/dist/runtime/spots/spot-actor-packet-dispatch.js +23 -20
  165. package/dist/runtime/spots/spot-actor-packet-drain.js +12 -10
  166. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
  167. package/dist/runtime/spots/spot-closing.js +3 -7
  168. package/dist/runtime/spots/spot-context.js +2 -2
  169. package/dist/runtime/spots/spot-entry-activation.js +13 -14
  170. package/dist/runtime/spots/spot-handle.js +6 -3
  171. package/dist/runtime/spots/spot-handler-registry.js +12 -12
  172. package/dist/runtime/spots/spot-manager-public.js +5 -6
  173. package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
  174. package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
  175. package/dist/runtime/spots/spot-node-runtime-manager.js +74 -85
  176. package/dist/runtime/spots/spot-outbound.js +10 -14
  177. package/dist/runtime/spots/spot-remote-codec.js +22 -26
  178. package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
  179. package/dist/runtime/spots/spot-route-packet-dispatch.js +16 -14
  180. package/dist/runtime/spots/spot-route-replies.js +4 -6
  181. package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
  182. package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +1 -2
  183. package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
  184. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
  185. package/dist/runtime/spots/spot-serial-executor.js +5 -8
  186. package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
  187. package/dist/runtime/spots/spot-subscription-dispatch.js +5 -5
  188. package/dist/runtime/spots/spot-timer.js +25 -29
  189. package/dist/runtime/streams/actor-session-binding-registry.js +98 -107
  190. package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
  191. package/dist/runtime/streams/bound-actor-relay-sender.js +18 -16
  192. package/dist/runtime/streams/bound-session-service.js +8 -9
  193. package/dist/runtime/streams/index.js +20 -19
  194. package/dist/runtime/streams/managed-stream.js +32 -30
  195. package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
  196. package/dist/runtime/streams/protocol.js +29 -18
  197. package/dist/runtime/streams/session-actor-coordinator.js +34 -37
  198. package/dist/runtime/streams/session-context.js +30 -28
  199. package/dist/runtime/streams/session-provider.js +2 -2
  200. package/dist/runtime/streams/session-serial-executor.js +1 -2
  201. package/dist/runtime/streams/stream-frame-factory.js +11 -5
  202. package/dist/runtime/streams/stream-session-runtime.js +70 -66
  203. package/dist/runtime/workers/index.js +15 -4
  204. package/package.json +2 -2
  205. package/src/contracts/Channels/RouteCalls.ts +6 -1
  206. package/src/contracts/Common/ZLinkMessage.ts +5 -5
  207. package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
  208. package/src/contracts/Configuration/Builders.ts +14 -14
  209. package/src/contracts/Configuration/CodecContentType.ts +8 -10
  210. package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
  211. package/src/contracts/Configuration/EndpointNotation.ts +11 -11
  212. package/src/contracts/Configuration/ObjectRoles.ts +1 -3
  213. package/src/contracts/Configuration/Registration.ts +46 -17
  214. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
  215. package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
  216. package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
  217. package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
  218. package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
  219. package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
  220. package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
  221. package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
  222. package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
  223. package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
  224. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -6
  225. package/src/contracts/Errors/index.ts +1 -4
  226. package/src/contracts/Handlers/Attributes.ts +15 -9
  227. package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
  228. package/src/contracts/Handlers/JsonContract.ts +53 -19
  229. package/src/contracts/Locations/ActorTransfer.ts +1 -5
  230. package/src/contracts/Locations/Authority.ts +4 -11
  231. package/src/contracts/Locations/Keys.ts +6 -1
  232. package/src/contracts/Locations/Options.ts +3 -2
  233. package/src/contracts/Locations/RelocationStore.ts +1 -4
  234. package/src/contracts/Locations/Resolvers.ts +5 -5
  235. package/src/contracts/Locations/RuntimeQuery.ts +6 -2
  236. package/src/contracts/Locations/Stores.ts +1 -2
  237. package/src/contracts/Locations/index.ts +2 -8
  238. package/src/contracts/RouteMesh/Contracts.ts +1 -7
  239. package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
  240. package/src/contracts/Spots/Contracts.ts +2 -8
  241. package/src/contracts/Spots/SpotKind.ts +16 -8
  242. package/src/contracts/Spots/ZLinkSpot.ts +8 -11
  243. package/src/contracts/Streams/IZLinkSession.ts +0 -1
  244. package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
  245. package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
  246. package/src/internal.ts +5 -4
  247. package/src/location-store-integration.ts +24 -16
  248. package/src/nest-integration.ts +40 -25
  249. package/src/runtime/abort.ts +10 -4
  250. package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
  251. package/src/runtime/actors/actor-authority-publication.ts +92 -77
  252. package/src/runtime/actors/actor-client.ts +162 -133
  253. package/src/runtime/actors/actor-context.ts +138 -130
  254. package/src/runtime/actors/actor-creation.ts +47 -44
  255. package/src/runtime/actors/actor-execution-context.ts +6 -4
  256. package/src/runtime/actors/actor-handoff.ts +269 -293
  257. package/src/runtime/actors/actor-join-deferred-scope.ts +5 -4
  258. package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
  259. package/src/runtime/actors/actor-local-native-join.ts +131 -159
  260. package/src/runtime/actors/actor-mailbox.ts +16 -19
  261. package/src/runtime/actors/actor-message-follow-context.ts +46 -36
  262. package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
  263. package/src/runtime/actors/actor-remote-joiner.ts +50 -54
  264. package/src/runtime/actors/actor-remote-wire.ts +9 -13
  265. package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
  266. package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
  267. package/src/runtime/actors/actor-runtime-state.ts +127 -124
  268. package/src/runtime/actors/actor-transfer-registry.ts +9 -14
  269. package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
  270. package/src/runtime/actors/bound-session-wire.ts +37 -17
  271. package/src/runtime/actors/deferred-join-accepted-journal.ts +351 -320
  272. package/src/runtime/actors/index.ts +43 -86
  273. package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
  274. package/src/runtime/actors/post-commit-actor-location.ts +30 -23
  275. package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
  276. package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
  277. package/src/runtime/admission.ts +9 -9
  278. package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
  279. package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
  280. package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
  281. package/src/runtime/backend/contracts/index.ts +73 -52
  282. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
  283. package/src/runtime/backend/mesh-completion-table.ts +6 -9
  284. package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
  285. package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
  286. package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
  287. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
  288. package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
  289. package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
  290. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
  291. package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
  292. package/src/runtime/backend/node/node-raw-mesh-backend.ts +335 -383
  293. package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
  294. package/src/runtime/backend/runtime-message.ts +5 -3
  295. package/src/runtime/backend/runtime-values.ts +10 -7
  296. package/src/runtime/channels/channel-autoconnect.ts +1 -4
  297. package/src/runtime/channels/channel-clients.ts +93 -73
  298. package/src/runtime/channels/channel-dispatch-pipeline.ts +40 -42
  299. package/src/runtime/channels/channel-dispatch-services.ts +51 -49
  300. package/src/runtime/channels/channel-dispatchers.ts +152 -96
  301. package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
  302. package/src/runtime/channels/channel-envelope.ts +256 -150
  303. package/src/runtime/channels/channel-multipart.ts +13 -5
  304. package/src/runtime/channels/channel-outbound-operations.ts +37 -41
  305. package/src/runtime/channels/channel-receive-loops.ts +102 -98
  306. package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
  307. package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
  308. package/src/runtime/channels/channel-runtime-manager.ts +63 -37
  309. package/src/runtime/channels/channel-socket-options.ts +3 -10
  310. package/src/runtime/channels/channel-socket-registry.ts +331 -273
  311. package/src/runtime/channels/channel-transports.ts +215 -197
  312. package/src/runtime/channels/client-server-location-runtime.ts +116 -100
  313. package/src/runtime/channels/client-server-service-wire.ts +37 -36
  314. package/src/runtime/channels/dispatch-error-reporter.ts +11 -8
  315. package/src/runtime/channels/fanout-location-runtime.ts +91 -94
  316. package/src/runtime/channels/fanout-service-wire.ts +5 -12
  317. package/src/runtime/channels/handler-filter-scope.ts +1 -4
  318. package/src/runtime/channels/index.ts +1 -4
  319. package/src/runtime/channels/local-spot-route-transport.ts +20 -5
  320. package/src/runtime/channels/route-member-snapshot.ts +11 -5
  321. package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
  322. package/src/runtime/channels/source-spot-router.ts +26 -22
  323. package/src/runtime/channels/spot-direct-envelope.ts +10 -8
  324. package/src/runtime/channels/spot-node-route-transport.ts +13 -16
  325. package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
  326. package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
  327. package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
  328. package/src/runtime/codecs/index.ts +3 -2
  329. package/src/runtime/diagnostics/flow-context.ts +12 -3
  330. package/src/runtime/diagnostics/index.ts +96 -61
  331. package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
  332. package/src/runtime/diagnostics/message-flow.ts +95 -76
  333. package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
  334. package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
  335. package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
  336. package/src/runtime/execution/index.ts +18 -26
  337. package/src/runtime/execution/serial-execution-queue.ts +31 -40
  338. package/src/runtime/execution/state-lane.ts +2 -2
  339. package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -51
  340. package/src/runtime/foundation/event-loop-resources.ts +8 -4
  341. package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
  342. package/src/runtime/foundation/operation-identity.ts +1 -2
  343. package/src/runtime/foundation/operation-registry.ts +8 -2
  344. package/src/runtime/foundation/raw-service-mesh-runtime.ts +312 -385
  345. package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
  346. package/src/runtime/foundation/runtime-state-projections.ts +24 -23
  347. package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
  348. package/src/runtime/foundation/service-discovery-registry.ts +67 -59
  349. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
  350. package/src/runtime/foundation/service-liveness-registry.ts +18 -13
  351. package/src/runtime/foundation/service-mailbox.ts +14 -14
  352. package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
  353. package/src/runtime/foundation/service-metadata-codec.ts +2 -9
  354. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
  355. package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
  356. package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
  357. package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
  358. package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
  359. package/src/runtime/foundation/service-session-binding-ingress-port.ts +1 -4
  360. package/src/runtime/foundation/service-stateful-registry.ts +69 -59
  361. package/src/runtime/foundation/service-stateful-runtime.ts +1174 -1112
  362. package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
  363. package/src/runtime/foundation/service-topology-registry.ts +157 -159
  364. package/src/runtime/foundation/service-weighted-selection.ts +9 -15
  365. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
  366. package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
  367. package/src/runtime/framework-errors-internal.ts +31 -30
  368. package/src/runtime/handlers/handler-instance-scope.ts +18 -29
  369. package/src/runtime/handlers/index.ts +18 -8
  370. package/src/runtime/host/actor-packet-relay.ts +290 -261
  371. package/src/runtime/host/actor-placement-coordinator.ts +165 -150
  372. package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
  373. package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
  374. package/src/runtime/host/actor-transfer-runtime.ts +391 -395
  375. package/src/runtime/host/application-job-queue.ts +32 -48
  376. package/src/runtime/host/bound-session-relay.ts +7 -9
  377. package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
  378. package/src/runtime/host/host-capacity-status.ts +10 -9
  379. package/src/runtime/host/index.ts +861 -789
  380. package/src/runtime/host/instance-activation-authority.ts +125 -143
  381. package/src/runtime/host/location-runtime-owner.ts +38 -26
  382. package/src/runtime/host/mesh-router-resolver.ts +30 -23
  383. package/src/runtime/host/relocation-direct-transfer.ts +15 -15
  384. package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
  385. package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
  386. package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
  387. package/src/runtime/host/remote-bound-session-relay.ts +274 -247
  388. package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
  389. package/src/runtime/host/route-mesh-runtime.ts +227 -181
  390. package/src/runtime/host/runtime-shutdown.ts +4 -3
  391. package/src/runtime/host/service-relocation-control.ts +14 -5
  392. package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
  393. package/src/runtime/host/spot-address-transport.ts +284 -237
  394. package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
  395. package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
  396. package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
  397. package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
  398. package/src/runtime/locations/actor-location-claims.ts +61 -49
  399. package/src/runtime/locations/actor-session-route-claims.ts +1 -4
  400. package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
  401. package/src/runtime/locations/authority-key-codec.ts +13 -10
  402. package/src/runtime/locations/auto-connect-loop.ts +14 -11
  403. package/src/runtime/locations/auto-connect-planner.ts +42 -31
  404. package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
  405. package/src/runtime/locations/canonical-codec.ts +3 -1
  406. package/src/runtime/locations/creation-operation-id.ts +4 -3
  407. package/src/runtime/locations/domain-store-contract.ts +13 -7
  408. package/src/runtime/locations/in-memory-authority-store.ts +232 -199
  409. package/src/runtime/locations/in-memory-location-store.ts +432 -250
  410. package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
  411. package/src/runtime/locations/internal-store-contracts.ts +95 -38
  412. package/src/runtime/locations/key-codec.ts +3 -4
  413. package/src/runtime/locations/lease-tracker.ts +36 -27
  414. package/src/runtime/locations/lifecycle-runtime.ts +15 -3
  415. package/src/runtime/locations/lifecycle.ts +33 -28
  416. package/src/runtime/locations/location-store-repository.ts +1329 -1185
  417. package/src/runtime/locations/opaque-record-key.ts +4 -9
  418. package/src/runtime/locations/resolvers.ts +201 -178
  419. package/src/runtime/locations/runtime.ts +251 -159
  420. package/src/runtime/locations/spot-location-claims.ts +110 -112
  421. package/src/runtime/messaging/creation-payload-codec.ts +4 -1
  422. package/src/runtime/messaging/framework-json-v1.ts +34 -15
  423. package/src/runtime/messaging/packet-name.ts +8 -6
  424. package/src/runtime/messaging/payload-codec.ts +70 -50
  425. package/src/runtime/messaging/submission-result.ts +6 -9
  426. package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
  427. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
  428. package/src/runtime/routing-id.ts +10 -7
  429. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
  430. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
  431. package/src/runtime/spots/index.ts +593 -563
  432. package/src/runtime/spots/spot-activation-registry.ts +38 -34
  433. package/src/runtime/spots/spot-activation-state.ts +43 -51
  434. package/src/runtime/spots/spot-activation.ts +179 -116
  435. package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
  436. package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
  437. package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
  438. package/src/runtime/spots/spot-actor-membership.ts +25 -27
  439. package/src/runtime/spots/spot-actor-packet-dispatch.ts +184 -153
  440. package/src/runtime/spots/spot-actor-packet-drain.ts +54 -42
  441. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
  442. package/src/runtime/spots/spot-closing.ts +11 -12
  443. package/src/runtime/spots/spot-context.ts +46 -26
  444. package/src/runtime/spots/spot-entry-activation.ts +84 -65
  445. package/src/runtime/spots/spot-handle.ts +17 -15
  446. package/src/runtime/spots/spot-handler-registry.ts +44 -31
  447. package/src/runtime/spots/spot-location-claim.ts +5 -4
  448. package/src/runtime/spots/spot-manager-public.ts +62 -82
  449. package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
  450. package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
  451. package/src/runtime/spots/spot-node-runtime-manager.ts +230 -221
  452. package/src/runtime/spots/spot-outbound.ts +47 -59
  453. package/src/runtime/spots/spot-publisher-transport.ts +5 -4
  454. package/src/runtime/spots/spot-remote-codec.ts +66 -65
  455. package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
  456. package/src/runtime/spots/spot-route-packet-dispatch.ts +128 -95
  457. package/src/runtime/spots/spot-route-replies.ts +23 -24
  458. package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
  459. package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
  460. package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +11 -17
  461. package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
  462. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
  463. package/src/runtime/spots/spot-routing-internal.ts +1 -4
  464. package/src/runtime/spots/spot-runtime-ports.ts +5 -5
  465. package/src/runtime/spots/spot-serial-executor.ts +5 -9
  466. package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
  467. package/src/runtime/spots/spot-subscription-dispatch.ts +56 -46
  468. package/src/runtime/spots/spot-timer.ts +98 -91
  469. package/src/runtime/streams/actor-session-binding-registry.ts +277 -235
  470. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +7 -4
  471. package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
  472. package/src/runtime/streams/bound-actor-relay-sender.ts +53 -51
  473. package/src/runtime/streams/bound-session-response-target.ts +29 -8
  474. package/src/runtime/streams/bound-session-service.ts +39 -39
  475. package/src/runtime/streams/index.ts +176 -100
  476. package/src/runtime/streams/managed-stream.ts +98 -87
  477. package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
  478. package/src/runtime/streams/protocol.ts +73 -43
  479. package/src/runtime/streams/session-actor-coordinator.ts +97 -89
  480. package/src/runtime/streams/session-calls.ts +2 -8
  481. package/src/runtime/streams/session-context.ts +66 -48
  482. package/src/runtime/streams/session-provider.ts +5 -7
  483. package/src/runtime/streams/session-serial-executor.ts +7 -6
  484. package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
  485. package/src/runtime/streams/stream-frame-factory.ts +55 -38
  486. package/src/runtime/streams/stream-session-runtime.ts +268 -210
  487. package/src/runtime/workers/index.ts +68 -29
@@ -7,9 +7,7 @@ import type {
7
7
  ZLinkBackendSpotRouteBridge,
8
8
  ZLinkChannelBackendAdapter
9
9
  } from '../backend/contracts';
10
- import {
11
- ZLINK_BACKEND_SPOT_ROUTE_BRIDGE_ROUTE_WITH_CHANNEL_INBOUND
12
- } from '../backend/contracts';
10
+ import { ZLINK_BACKEND_SPOT_ROUTE_BRIDGE_ROUTE_WITH_CHANNEL_INBOUND } from '../backend/contracts';
13
11
  import type { ZLinkRuntimeTaskRunner } from '../execution';
14
12
  import {
15
13
  ZLinkLocationRuntime,
@@ -127,25 +125,32 @@ export class ZLinkChannelRuntimeLifecycle {
127
125
  options: ZLinkLocationOptionOverrides,
128
126
  events?: ZLinkLocationEventSink
129
127
  ): void {
130
- this.locationAutoConnect = createChannelLocationAutoConnectContext(runtime, stores, options, events);
128
+ this.locationAutoConnect = createChannelLocationAutoConnectContext(
129
+ runtime,
130
+ stores,
131
+ options,
132
+ events
133
+ );
131
134
  }
132
135
 
133
136
  private beginLocationAutoConnectCore(): LocationAutoConnectStart | undefined {
134
137
  const location = this.locationAutoConnect;
135
- if (location === undefined
136
- || this.clientServerLocation !== undefined
137
- || this.fanoutLocation !== undefined) {
138
+ if (
139
+ location === undefined ||
140
+ this.clientServerLocation !== undefined ||
141
+ this.fanoutLocation !== undefined
142
+ ) {
138
143
  return undefined;
139
144
  }
140
145
 
141
146
  const clientServerLocation = hasClientServerLocationTopology(this.options.registration)
142
147
  ? new ZLinkClientServerLocationRuntime(
143
- this.options.registration,
144
- this.options.sockets,
145
- location.runtime,
146
- location.stores,
147
- location.options
148
- )
148
+ this.options.registration,
149
+ this.options.sockets,
150
+ location.runtime,
151
+ location.stores,
152
+ location.options
153
+ )
149
154
  : undefined;
150
155
  this.clientServerLocation = clientServerLocation;
151
156
  return { location, clientServerLocation };
@@ -192,10 +197,12 @@ export class ZLinkChannelRuntimeLifecycle {
192
197
  fanoutLocation = await this.lane.run(() => this.beginFanoutLocationAutoConnectCore(start));
193
198
  await startOutsideStateLane(() => fanoutLocation?.start(signal) ?? Promise.resolve());
194
199
  } catch (error) {
195
- await startOutsideStateLane(() => Promise.all([
196
- start.clientServerLocation?.stop(signal).catch(() => undefined),
197
- fanoutLocation?.stop(signal).catch(() => undefined)
198
- ]));
200
+ await startOutsideStateLane(() =>
201
+ Promise.all([
202
+ start.clientServerLocation?.stop(signal).catch(() => undefined),
203
+ fanoutLocation?.stop(signal).catch(() => undefined)
204
+ ])
205
+ );
199
206
  await this.lane.run(() => this.resetLocationAutoConnectCore(start, fanoutLocation));
200
207
  throw error;
201
208
  }
@@ -227,11 +234,7 @@ export class ZLinkChannelRuntimeLifecycle {
227
234
  const channelReceivers = this.startChannelReceivers(taskRunner);
228
235
  const subscriberReceivers = this.startSubscriberReceivers(taskRunner);
229
236
  const routeReceivers = this.startRouteReceivers(taskRunner);
230
- const tasks = [
231
- ...channelReceivers,
232
- ...subscriberReceivers,
233
- ...routeReceivers
234
- ];
237
+ const tasks = [...channelReceivers, ...subscriberReceivers, ...routeReceivers];
235
238
  return tasks;
236
239
  }
237
240
 
@@ -240,7 +243,9 @@ export class ZLinkChannelRuntimeLifecycle {
240
243
  return;
241
244
  }
242
245
  if (taskRunner === undefined) {
243
- throw new ZLinkConfigurationException('MeshNode channel dispatch requires a runtime task runner.');
246
+ throw new ZLinkConfigurationException(
247
+ 'MeshNode channel dispatch requires a runtime task runner.'
248
+ );
244
249
  }
245
250
  for (const [meshName, mesh] of this.options.registration.spotNodes) {
246
251
  const routeHandlers: ZLinkRouteHandlerRegistration[] = [
@@ -254,57 +259,89 @@ export class ZLinkChannelRuntimeLifecycle {
254
259
  packetName: registration.packetName,
255
260
  handler: this.options.dispatchServices.routeRequestHandler(registration.handlerType)
256
261
  })),
257
- ...[...this.options.internalRouteSendHandlers?.entries() ?? []].map(
262
+ ...[...(this.options.internalRouteSendHandlers?.entries() ?? [])].map(
258
263
  ([packetName, handler]): ZLinkRouteHandlerRegistration => ({
259
- kind: 'send', packetName, handler
264
+ kind: 'send',
265
+ packetName,
266
+ handler
260
267
  })
261
268
  ),
262
- ...[...this.options.internalRouteRequestHandlers?.entries() ?? []].map(
263
- ([packetName, handler]): ZLinkRouteHandlerRegistration => ({ kind: 'request', packetName, handler })
269
+ ...[...(this.options.internalRouteRequestHandlers?.entries() ?? [])].map(
270
+ ([packetName, handler]): ZLinkRouteHandlerRegistration => ({
271
+ kind: 'request',
272
+ packetName,
273
+ handler
274
+ })
264
275
  )
265
276
  ];
266
277
  if (routeHandlers.length > 0) {
267
- this.meshRouteDispatchers.set(meshName, new ZLinkRoutePacketDispatcher({
268
- routerChannelId: meshName,
269
- codecs: this.options.codecs,
270
- dispatchErrors: this.options.dispatchServices.dispatchErrorReporter(taskRunner.errorSink),
271
- handlers: routeHandlers,
272
- filters: this.options.dispatchServices.handlerFilters(),
273
- unhandled: this.options.registration.dispatch?.unhandled
274
- }));
278
+ this.meshRouteDispatchers.set(
279
+ meshName,
280
+ new ZLinkRoutePacketDispatcher({
281
+ routerChannelId: meshName,
282
+ codecs: this.options.codecs,
283
+ dispatchErrors: this.options.dispatchServices.dispatchErrorReporter(
284
+ taskRunner.errorSink
285
+ ),
286
+ handlers: routeHandlers,
287
+ filters: this.options.dispatchServices.handlerFilters(),
288
+ unhandled: this.options.registration.dispatch?.unhandled
289
+ })
290
+ );
275
291
  }
276
292
  for (const [channelName, channel] of Object.entries(mesh.meshChannels ?? {})) {
277
- if ((channel.requestHandlers ?? []).length === 0 && (channel.sendHandlers ?? []).length === 0) {
293
+ if (
294
+ (channel.requestHandlers ?? []).length === 0 &&
295
+ (channel.sendHandlers ?? []).length === 0
296
+ ) {
278
297
  continue;
279
298
  }
280
- this.meshChannelDispatchers.set(meshChannelKey(meshName, channelName), new ZLinkChannelRequestDispatcher({
281
- meshName,
282
- channelName,
283
- routeMesh: true,
284
- codecs: this.options.codecs,
285
- dispatchErrors: this.options.dispatchServices.dispatchErrorReporter(taskRunner.errorSink),
286
- handlers: new Map(channel.requestHandlers?.map((handler) => [
287
- handler.packetName,
288
- (handler as typeof handler & { readonly handler?: ZLinkRequestHandler<unknown, unknown> }).handler
289
- ?? adaptRouteRequestHandler(
290
- this.options.dispatchServices.routeRequestHandler(handler.handlerType)
291
- )
292
- ])),
293
- sendHandlers: new Map(channel.sendHandlers?.map((handler) => [
294
- handler.packetName,
295
- (handler as typeof handler & { readonly handler?: ZLinkSendHandler<unknown> }).handler
296
- ?? adaptRouteSendHandler(
297
- this.options.dispatchServices.routeSendHandler(handler.handlerType)
298
- )
299
- ])),
300
- filters: this.options.dispatchServices.handlerFilters(),
301
- unhandled: this.options.registration.dispatch?.unhandled
302
- }));
299
+ this.meshChannelDispatchers.set(
300
+ meshChannelKey(meshName, channelName),
301
+ new ZLinkChannelRequestDispatcher({
302
+ meshName,
303
+ channelName,
304
+ routeMesh: true,
305
+ codecs: this.options.codecs,
306
+ dispatchErrors: this.options.dispatchServices.dispatchErrorReporter(
307
+ taskRunner.errorSink
308
+ ),
309
+ handlers: new Map(
310
+ channel.requestHandlers?.map((handler) => [
311
+ handler.packetName,
312
+ (
313
+ handler as typeof handler & {
314
+ readonly handler?: ZLinkRequestHandler<unknown, unknown>;
315
+ }
316
+ ).handler ??
317
+ adaptRouteRequestHandler(
318
+ this.options.dispatchServices.routeRequestHandler(handler.handlerType)
319
+ )
320
+ ])
321
+ ),
322
+ sendHandlers: new Map(
323
+ channel.sendHandlers?.map((handler) => [
324
+ handler.packetName,
325
+ (handler as typeof handler & { readonly handler?: ZLinkSendHandler<unknown> })
326
+ .handler ??
327
+ adaptRouteSendHandler(
328
+ this.options.dispatchServices.routeSendHandler(handler.handlerType)
329
+ )
330
+ ])
331
+ ),
332
+ filters: this.options.dispatchServices.handlerFilters(),
333
+ unhandled: this.options.registration.dispatch?.unhandled
334
+ })
335
+ );
303
336
  }
304
337
  }
305
338
  }
306
339
 
307
- dispatchMeshChannel(meshName: string, record: ReceiveRecord, signal?: AbortSignal): Promise<void> {
340
+ dispatchMeshChannel(
341
+ meshName: string,
342
+ record: ReceiveRecord,
343
+ signal?: AbortSignal
344
+ ): Promise<void> {
308
345
  const channelName = record.channelName;
309
346
  if (channelName === null) {
310
347
  throw new ZLinkConfigurationException('MeshNode channel record is missing channelName.');
@@ -318,11 +355,7 @@ export class ZLinkChannelRuntimeLifecycle {
318
355
  return dispatcher.dispatchMesh(record, signal);
319
356
  }
320
357
 
321
- dispatchMeshRoute(
322
- meshName: string,
323
- record: ReceiveRecord,
324
- signal?: AbortSignal
325
- ): Promise<void> {
358
+ dispatchMeshRoute(meshName: string, record: ReceiveRecord, signal?: AbortSignal): Promise<void> {
326
359
  const dispatcher = this.meshRouteDispatchers.get(meshName);
327
360
  if (dispatcher === undefined) {
328
361
  throw new ZLinkConfigurationException(
@@ -353,26 +386,32 @@ export class ZLinkChannelRuntimeLifecycle {
353
386
 
354
387
  async dispose(signal?: AbortSignal): Promise<void> {
355
388
  const work = await this.lane.run(() => this.beginDisposeCore());
356
- const transportStopped = await startOutsideStateLane(() => Promise.allSettled([
357
- ...work.channelLoops.map((loop) => loop.stop()),
358
- ...work.subscriberLoops.map((loop) => loop.stop()),
359
- ...work.routeLoops.map((loop) => loop.stop()),
360
- ...work.manualTransitions
361
- ]));
362
- const descriptorStopped = work.clientServerLocation === undefined
363
- ? []
364
- : await startOutsideStateLane(
365
- () => Promise.allSettled([work.clientServerLocation?.stop(signal)])
366
- );
367
- const fanoutDescriptorStopped = work.fanoutLocation === undefined
368
- ? []
369
- : await startOutsideStateLane(
370
- () => Promise.allSettled([work.fanoutLocation?.stop(signal)])
371
- );
372
- const cleanup = await startOutsideStateLane(() => Promise.allSettled([
373
- ...work.spotRouteBridges.map((bridge) => bridge.dispose()),
374
- this.options.sockets.dispose()
375
- ]));
389
+ const transportStopped = await startOutsideStateLane(() =>
390
+ Promise.allSettled([
391
+ ...work.channelLoops.map((loop) => loop.stop()),
392
+ ...work.subscriberLoops.map((loop) => loop.stop()),
393
+ ...work.routeLoops.map((loop) => loop.stop()),
394
+ ...work.manualTransitions
395
+ ])
396
+ );
397
+ const descriptorStopped =
398
+ work.clientServerLocation === undefined
399
+ ? []
400
+ : await startOutsideStateLane(() =>
401
+ Promise.allSettled([work.clientServerLocation?.stop(signal)])
402
+ );
403
+ const fanoutDescriptorStopped =
404
+ work.fanoutLocation === undefined
405
+ ? []
406
+ : await startOutsideStateLane(() =>
407
+ Promise.allSettled([work.fanoutLocation?.stop(signal)])
408
+ );
409
+ const cleanup = await startOutsideStateLane(() =>
410
+ Promise.allSettled([
411
+ ...work.spotRouteBridges.map((bridge) => bridge.dispose()),
412
+ this.options.sockets.dispose()
413
+ ])
414
+ );
376
415
  const errors = [
377
416
  ...transportStopped,
378
417
  ...descriptorStopped,
@@ -397,12 +436,15 @@ export class ZLinkChannelRuntimeLifecycle {
397
436
  this.manualFanoutSubscribers.clear();
398
437
  const manualLoops = new Set(
399
438
  manualStates
400
- .map(state => state.active?.loop ?? state.stopping?.loop)
439
+ .map((state) => state.active?.loop ?? state.stopping?.loop)
401
440
  .filter((loop): loop is ZLinkSubscriberReceiveLoop => loop !== undefined)
402
441
  );
403
- const subscriberLoops = [...this.subscriberReceiveLoops]
404
- .filter(loop => !manualLoops.has(loop));
405
- const manualTransitions = manualStates.map(state => this.drainManualFanoutSubscriberCore(state));
442
+ const subscriberLoops = [...this.subscriberReceiveLoops].filter(
443
+ (loop) => !manualLoops.has(loop)
444
+ );
445
+ const manualTransitions = manualStates.map((state) =>
446
+ this.drainManualFanoutSubscriberCore(state)
447
+ );
406
448
  const routeLoops = [...this.routeReceiveLoops];
407
449
  const clientServerLocation = this.clientServerLocation;
408
450
  const fanoutLocation = this.fanoutLocation;
@@ -457,20 +499,26 @@ export class ZLinkChannelRuntimeLifecycle {
457
499
  channelName,
458
500
  codecs: this.options.codecs,
459
501
  dispatchErrors: this.options.dispatchServices.dispatchErrorReporter(taskRunner.errorSink),
460
- handlers: new Map(channel.requestHandlers?.map((handler) => [
461
- handler.packetName,
462
- handler.handler ?? this.options.dispatchServices.channelRequestHandler(
463
- requireChannelHandlerType(handler.handlerType, channelName, handler.packetName)
464
- )
465
- ])),
466
- sendHandlers: new Map(channel.sendHandlers?.map((handler) => [
467
- handler.packetName,
468
- handler.handler ?? this.options.dispatchServices.channelSendHandler(
469
- requireChannelHandlerType(handler.handlerType, channelName, handler.packetName)
470
- )
471
- ])),
502
+ handlers: new Map(
503
+ channel.requestHandlers?.map((handler) => [
504
+ handler.packetName,
505
+ handler.handler ??
506
+ this.options.dispatchServices.channelRequestHandler(
507
+ requireChannelHandlerType(handler.handlerType, channelName, handler.packetName)
508
+ )
509
+ ])
510
+ ),
511
+ sendHandlers: new Map(
512
+ channel.sendHandlers?.map((handler) => [
513
+ handler.packetName,
514
+ handler.handler ??
515
+ this.options.dispatchServices.channelSendHandler(
516
+ requireChannelHandlerType(handler.handlerType, channelName, handler.packetName)
517
+ )
518
+ ])
519
+ ),
472
520
  filters: this.options.dispatchServices.handlerFilters(),
473
- unhandled: this.options.registration.dispatch?.unhandled,
521
+ unhandled: this.options.registration.dispatch?.unhandled
474
522
  });
475
523
  const spotRouteBridge = this.createSpotRouteBridgeForRouter(channelName, router);
476
524
  const loop = new ZLinkChannelReceiveLoop(
@@ -482,10 +530,8 @@ export class ZLinkChannelRuntimeLifecycle {
482
530
  this.options.sockets.tryHandleClientServerControl(channelName, received, socket),
483
531
  this.options.adapter.createReadablePoller(router),
484
532
  this.options.applicationJobQueue,
485
- error => taskRunner.errorSink.reportRuntimeTaskException(
486
- `channel:${channelName}:dispatch`,
487
- error
488
- ),
533
+ (error) =>
534
+ taskRunner.errorSink.reportRuntimeTaskException(`channel:${channelName}:dispatch`, error),
489
535
  this.receiveRoundRobin
490
536
  );
491
537
  this.channelReceiveLoops.push(loop);
@@ -494,7 +540,9 @@ export class ZLinkChannelRuntimeLifecycle {
494
540
  return tasks;
495
541
  }
496
542
 
497
- private startSubscriberReceivers(taskRunner: ZLinkRuntimeTaskRunner | undefined): Promise<void>[] {
543
+ private startSubscriberReceivers(
544
+ taskRunner: ZLinkRuntimeTaskRunner | undefined
545
+ ): Promise<void>[] {
498
546
  const tasks: Promise<void>[] = [];
499
547
  for (const [channelName, channel] of this.options.registration.channels) {
500
548
  if (channel.subscriber === undefined || (channel.publishHandlers ?? []).length === 0) {
@@ -509,7 +557,9 @@ export class ZLinkChannelRuntimeLifecycle {
509
557
  channelName,
510
558
  codecs: this.options.codecs,
511
559
  dispatchErrors: this.options.dispatchServices.dispatchErrorReporter(taskRunner.errorSink),
512
- handlers: new Map(channel.publishHandlers?.map((handler) => [handler.packetName, handler.handler])),
560
+ handlers: new Map(
561
+ channel.publishHandlers?.map((handler) => [handler.packetName, handler.handler])
562
+ ),
513
563
  filters: this.options.dispatchServices.handlerFilters(),
514
564
  unhandled: this.options.registration.dispatch?.unhandled,
515
565
  metrics: this.options.dispatchServices.metrics()
@@ -521,16 +571,9 @@ export class ZLinkChannelRuntimeLifecycle {
521
571
  const endpoints = endpointHandle.listConnections();
522
572
  this.manualFanoutSubscriberOwners.add(channel.subscriber);
523
573
  attachEndpointConnections(channel.subscriber, {
524
- connect: endpoint => this.requestManualFanoutConnect(
525
- channelName,
526
- endpoint,
527
- taskRunner,
528
- dispatcher
529
- ),
530
- disconnect: endpoint => this.requestManualFanoutDisconnect(
531
- channelName,
532
- endpoint
533
- )
574
+ connect: (endpoint) =>
575
+ this.requestManualFanoutConnect(channelName, endpoint, taskRunner, dispatcher),
576
+ disconnect: (endpoint) => this.requestManualFanoutDisconnect(channelName, endpoint)
534
577
  });
535
578
  for (const endpoint of endpoints) {
536
579
  const state = this.getOrCreateManualFanoutSubscriber(
@@ -590,16 +633,19 @@ export class ZLinkChannelRuntimeLifecycle {
590
633
  state.desired = true;
591
634
  this.enqueueManualFanoutTransition(state, async () => {
592
635
  if (!state.desired || state.active !== undefined || this.taskRunner !== taskRunner) return;
593
- void this.openManualFanoutSubscriber(state).catch(error => taskRunner.errorSink
594
- .reportRuntimeTaskException(
636
+ void this.openManualFanoutSubscriber(state).catch((error) =>
637
+ taskRunner.errorSink.reportRuntimeTaskException(
595
638
  `subscriber:${state.channelName}:manual:${state.index}:open`,
596
639
  error
597
- ));
640
+ )
641
+ );
598
642
  });
599
643
  }
600
644
 
601
645
  private requestManualFanoutDisconnect(channelName: string, endpoint: string): void {
602
- const state = this.manualFanoutSubscribers.get(manualFanoutSubscriberKey(channelName, endpoint));
646
+ const state = this.manualFanoutSubscribers.get(
647
+ manualFanoutSubscriberKey(channelName, endpoint)
648
+ );
603
649
  if (state === undefined) return;
604
650
  state.desired = false;
605
651
  this.enqueueManualFanoutTransition(state, async () => {
@@ -622,10 +668,12 @@ export class ZLinkChannelRuntimeLifecycle {
622
668
  () => startOutsideStateLane(transition),
623
669
  () => startOutsideStateLane(transition)
624
670
  )
625
- .catch(error => state.taskRunner.errorSink.reportRuntimeTaskException(
626
- `subscriber:${state.channelName}:manual:${state.index}:lifecycle`,
627
- error
628
- ));
671
+ .catch((error) =>
672
+ state.taskRunner.errorSink.reportRuntimeTaskException(
673
+ `subscriber:${state.channelName}:manual:${state.index}:lifecycle`,
674
+ error
675
+ )
676
+ );
629
677
  }
630
678
 
631
679
  private openManualFanoutSubscriber(state: ManualFanoutSubscriberState): Promise<void> {
@@ -645,13 +693,18 @@ export class ZLinkChannelRuntimeLifecycle {
645
693
  {
646
694
  onReady() {},
647
695
  onTerminated: () => {
648
- if (this.disposed
649
- || (state.active?.token !== token && state.openingToken !== token)
650
- || reconnecting) return;
696
+ if (
697
+ this.disposed ||
698
+ (state.active?.token !== token && state.openingToken !== token) ||
699
+ reconnecting
700
+ )
701
+ return;
651
702
  reconnecting = true;
652
703
  setImmediate(() => {
653
- if (this.disposed
654
- || (state.active?.token !== token && state.openingToken !== token)) {
704
+ if (
705
+ this.disposed ||
706
+ (state.active?.token !== token && state.openingToken !== token)
707
+ ) {
655
708
  reconnecting = false;
656
709
  return;
657
710
  }
@@ -667,11 +720,12 @@ export class ZLinkChannelRuntimeLifecycle {
667
720
  );
668
721
  }
669
722
  if (this.shouldReconnectManualFanoutSubscriber(state)) {
670
- void this.openManualFanoutSubscriber(state).catch(error => taskRunner.errorSink
671
- .reportRuntimeTaskException(
723
+ void this.openManualFanoutSubscriber(state).catch((error) =>
724
+ taskRunner.errorSink.reportRuntimeTaskException(
672
725
  `subscriber:${state.channelName}:manual:${state.index}:reconnect`,
673
726
  error
674
- ));
727
+ )
728
+ );
675
729
  }
676
730
  });
677
731
  });
@@ -683,29 +737,26 @@ export class ZLinkChannelRuntimeLifecycle {
683
737
  subscriber,
684
738
  dispatcher,
685
739
  this.options.applicationJobQueue,
686
- message => this.options.sockets.handleFanoutInboundResult(
687
- connectionId,
688
- message,
689
- subscriber
690
- ),
740
+ (message) =>
741
+ this.options.sockets.handleFanoutInboundResult(connectionId, message, subscriber),
691
742
  this.receiveRoundRobin,
692
- error => taskRunner.errorSink.reportRuntimeTaskException(
693
- `subscriber:${state.channelName}:manual:${state.index}:dispatch`,
694
- error
695
- )
743
+ (error) =>
744
+ taskRunner.errorSink.reportRuntimeTaskException(
745
+ `subscriber:${state.channelName}:manual:${state.index}:dispatch`,
746
+ error
747
+ )
696
748
  );
697
749
  state.openingToken = undefined;
698
750
  state.active = { token, loop };
699
751
  this.subscriberReceiveLoops.push(loop);
700
- return taskRunner.run(
701
- `subscriber:${channelName}:manual:${state.index}`,
702
- signal => loop.run(signal)
752
+ return taskRunner.run(`subscriber:${channelName}:manual:${state.index}`, (signal) =>
753
+ loop.run(signal)
703
754
  );
704
755
  } catch (error) {
705
756
  state.openingToken = undefined;
706
757
  return Promise.allSettled([
707
758
  this.options.sockets.closeFanoutSubscriberConnection(connectionId)
708
- ]).then(results => {
759
+ ]).then((results) => {
709
760
  const closeError = results[0].status === 'rejected' ? results[0].reason : undefined;
710
761
  if (closeError === undefined) throw error;
711
762
  throw new AggregateError(
@@ -720,8 +771,8 @@ export class ZLinkChannelRuntimeLifecycle {
720
771
  state: ManualFanoutSubscriberState,
721
772
  expectedToken?: symbol
722
773
  ): Promise<void> {
723
- const active = await this.lane.run(
724
- () => this.beginCloseManualFanoutSubscriberCore(state, expectedToken)
774
+ const active = await this.lane.run(() =>
775
+ this.beginCloseManualFanoutSubscriberCore(state, expectedToken)
725
776
  );
726
777
  if (active === undefined) return;
727
778
  const errors: unknown[] = [];
@@ -733,8 +784,8 @@ export class ZLinkChannelRuntimeLifecycle {
733
784
  await this.lane.run(() => this.finishCloseManualFanoutSubscriberCore(state, active));
734
785
  }
735
786
  try {
736
- await startOutsideStateLane(
737
- () => this.options.sockets.closeFanoutSubscriberConnection(state.connectionId)
787
+ await startOutsideStateLane(() =>
788
+ this.options.sockets.closeFanoutSubscriberConnection(state.connectionId)
738
789
  );
739
790
  } catch (error) {
740
791
  errors.push(error);
@@ -793,12 +844,10 @@ export class ZLinkChannelRuntimeLifecycle {
793
844
  const dispatcher = new ZLinkChannelPublishDispatcher({
794
845
  channelName,
795
846
  codecs: this.options.codecs,
796
- dispatchErrors: this.options.dispatchServices
797
- .dispatchErrorReporter(taskRunner.errorSink),
798
- handlers: new Map(channel.publishHandlers?.map(handler => [
799
- handler.packetName,
800
- handler.handler
801
- ])),
847
+ dispatchErrors: this.options.dispatchServices.dispatchErrorReporter(taskRunner.errorSink),
848
+ handlers: new Map(
849
+ channel.publishHandlers?.map((handler) => [handler.packetName, handler.handler])
850
+ ),
802
851
  filters: this.options.dispatchServices.handlerFilters(),
803
852
  unhandled: this.options.registration.dispatch?.unhandled,
804
853
  metrics: this.options.dispatchServices.metrics()
@@ -808,21 +857,18 @@ export class ZLinkChannelRuntimeLifecycle {
808
857
  subscriber,
809
858
  dispatcher,
810
859
  this.options.applicationJobQueue,
811
- message => this.options.sockets.handleFanoutInboundResult(
812
- connectionId,
813
- message,
814
- subscriber
815
- ),
860
+ (message) =>
861
+ this.options.sockets.handleFanoutInboundResult(connectionId, message, subscriber),
816
862
  undefined,
817
- error => taskRunner.errorSink.reportRuntimeTaskException(
818
- `subscriber:${channelName}:automatic:${connectionId}:dispatch`,
819
- error
820
- )
863
+ (error) =>
864
+ taskRunner.errorSink.reportRuntimeTaskException(
865
+ `subscriber:${channelName}:automatic:${connectionId}:dispatch`,
866
+ error
867
+ )
821
868
  );
822
869
  this.subscriberReceiveLoops.push(loop);
823
- void taskRunner.run(
824
- `subscriber:${channelName}:automatic:${connectionId}`,
825
- signal => loop.run(signal)
870
+ void taskRunner.run(`subscriber:${channelName}:automatic:${connectionId}`, (signal) =>
871
+ loop.run(signal)
826
872
  );
827
873
  return async () => {
828
874
  await startOutsideStateLane(() => loop.stop());
@@ -843,16 +889,25 @@ export class ZLinkChannelRuntimeLifecycle {
843
889
  continue;
844
890
  }
845
891
  const router = this.options.sockets.routeRouter(routeChannel.routerChannelId);
846
- const spotRouteBridge = this.createSpotRouteBridgeForRouter(routeChannel.routerChannelId, router);
892
+ const spotRouteBridge = this.createSpotRouteBridgeForRouter(
893
+ routeChannel.routerChannelId,
894
+ router
895
+ );
847
896
  const handlers = [
848
897
  ...collectRouteChannelHandlers(routeChannel),
849
- ...[...this.options.internalRouteSendHandlers?.entries() ?? []].map(
898
+ ...[...(this.options.internalRouteSendHandlers?.entries() ?? [])].map(
850
899
  ([packetName, handler]): ZLinkRouteHandlerRegistration => ({
851
- kind: 'send', packetName, handler
900
+ kind: 'send',
901
+ packetName,
902
+ handler
852
903
  })
853
904
  ),
854
- ...[...this.options.internalRouteRequestHandlers?.entries() ?? []].map(
855
- ([packetName, handler]): ZLinkRouteHandlerRegistration => ({ kind: 'request', packetName, handler })
905
+ ...[...(this.options.internalRouteRequestHandlers?.entries() ?? [])].map(
906
+ ([packetName, handler]): ZLinkRouteHandlerRegistration => ({
907
+ kind: 'request',
908
+ packetName,
909
+ handler
910
+ })
856
911
  )
857
912
  ];
858
913
  if (taskRunner === undefined) {
@@ -874,13 +929,16 @@ export class ZLinkChannelRuntimeLifecycle {
874
929
  this.options.adapter.createReadablePoller(router),
875
930
  this.options.applicationJobQueue,
876
931
  this.receiveRoundRobin,
877
- error => taskRunner.errorSink.reportRuntimeTaskException(
878
- `route:${routeChannel.routerChannelId}:dispatch`,
879
- error
880
- )
932
+ (error) =>
933
+ taskRunner.errorSink.reportRuntimeTaskException(
934
+ `route:${routeChannel.routerChannelId}:dispatch`,
935
+ error
936
+ )
881
937
  );
882
938
  this.routeReceiveLoops.push(loop);
883
- tasks.push(taskRunner.run(`route:${routeChannel.routerChannelId}`, (signal) => loop.run(signal)));
939
+ tasks.push(
940
+ taskRunner.run(`route:${routeChannel.routerChannelId}`, (signal) => loop.run(signal))
941
+ );
884
942
  }
885
943
  return tasks;
886
944
  }
@@ -910,9 +968,7 @@ function adaptRouteRequestHandler(
910
968
  };
911
969
  }
912
970
 
913
- function adaptRouteSendHandler(
914
- handler: ZLinkRouteRuntimeSendHandler
915
- ): ZLinkSendHandler<unknown> {
971
+ function adaptRouteSendHandler(handler: ZLinkRouteRuntimeSendHandler): ZLinkSendHandler<unknown> {
916
972
  return {
917
973
  handle: async (payload, context) => {
918
974
  await handler.handle(payload, context as never);
@@ -943,21 +999,23 @@ function manualFanoutSubscriberKey(channelName: string, endpoint: string): strin
943
999
 
944
1000
  function hasClientServerLocationTopology(registration: ZLinkFrameworkRegistration): boolean {
945
1001
  for (const channel of registration.channels.values()) {
946
- if (channel.server !== undefined
947
- || (channel.client !== undefined && (channel.client.manualConnections?.length ?? 0) === 0)) {
1002
+ if (
1003
+ channel.server !== undefined ||
1004
+ (channel.client !== undefined && (channel.client.manualConnections?.length ?? 0) === 0)
1005
+ ) {
948
1006
  return true;
949
1007
  }
950
1008
  }
951
1009
  return false;
952
1010
  }
953
1011
 
954
- function hasFanoutLocationTopology(
955
- registration: ZLinkFrameworkRegistration
956
- ): boolean {
1012
+ function hasFanoutLocationTopology(registration: ZLinkFrameworkRegistration): boolean {
957
1013
  for (const channel of registration.channels.values()) {
958
- if (channel.publisher !== undefined
959
- || (channel.subscriber !== undefined
960
- && (channel.subscriber.manualConnections?.length ?? 0) === 0)) {
1014
+ if (
1015
+ channel.publisher !== undefined ||
1016
+ (channel.subscriber !== undefined &&
1017
+ (channel.subscriber.manualConnections?.length ?? 0) === 0)
1018
+ ) {
961
1019
  return true;
962
1020
  }
963
1021
  }