@zlink-systems/framework 0.21.0 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (516) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Common/ZLinkMessage.js +5 -5
  3. package/dist/contracts/Configuration/CodecContentType.js +5 -7
  4. package/dist/contracts/Configuration/DiagnosticsValidation.js +1 -6
  5. package/dist/contracts/Configuration/EndpointNotation.js +4 -8
  6. package/dist/contracts/Configuration/Registration.js +14 -11
  7. package/dist/contracts/Configuration/RegistrationBuilders.js +32 -25
  8. package/dist/contracts/Configuration/RegistrationNormalizers.js +25 -26
  9. package/dist/contracts/Configuration/RegistrationValidators.js +36 -38
  10. package/dist/contracts/Configuration/SendTimeoutValidation.js +4 -4
  11. package/dist/contracts/Configuration/TimerRegistrationValidator.js +7 -7
  12. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -0
  13. package/dist/contracts/Handlers/JsonContract.js +23 -11
  14. package/dist/contracts/Spots/SpotKind.js +16 -8
  15. package/dist/contracts/Streams/IZLinkSession.d.ts +2 -1
  16. package/dist/location-store-integration.js +16 -16
  17. package/dist/nest-integration.js +17 -11
  18. package/dist/runtime/abort.js +9 -5
  19. package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
  20. package/dist/runtime/actors/actor-authority-publication.js +18 -17
  21. package/dist/runtime/actors/actor-client.js +83 -63
  22. package/dist/runtime/actors/actor-context.js +28 -22
  23. package/dist/runtime/actors/actor-creation.js +4 -3
  24. package/dist/runtime/actors/actor-handoff.js +89 -92
  25. package/dist/runtime/actors/actor-join-deferred-scope.d.ts +0 -1
  26. package/dist/runtime/actors/actor-join-deferred-scope.js +0 -18
  27. package/dist/runtime/actors/actor-local-native-join.js +18 -19
  28. package/dist/runtime/actors/actor-mailbox.js +1 -1
  29. package/dist/runtime/actors/actor-message-follow-context.js +24 -21
  30. package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
  31. package/dist/runtime/actors/actor-remote-joiner.js +20 -17
  32. package/dist/runtime/actors/actor-remote-wire.js +6 -7
  33. package/dist/runtime/actors/actor-runtime-state.js +87 -81
  34. package/dist/runtime/actors/actor-transfer-registry.js +3 -5
  35. package/dist/runtime/actors/bound-session-wire.js +14 -9
  36. package/dist/runtime/actors/deferred-join-accepted-journal.js +160 -130
  37. package/dist/runtime/actors/index.js +2 -5
  38. package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
  39. package/dist/runtime/actors/post-commit-actor-location.js +1 -1
  40. package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
  41. package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
  42. package/dist/runtime/admission.js +2 -6
  43. package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
  44. package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
  45. package/dist/runtime/backend/contracts/index.d.ts +1 -0
  46. package/dist/runtime/backend/mesh-completion-table.js +1 -3
  47. package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
  48. package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
  49. package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
  50. package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
  51. package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
  52. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +3 -0
  53. package/dist/runtime/backend/node/node-raw-mesh-backend.js +134 -118
  54. package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
  55. package/dist/runtime/backend/runtime-message.js +3 -3
  56. package/dist/runtime/backend/runtime-values.d.ts +2 -2
  57. package/dist/runtime/backend/runtime-values.js +4 -5
  58. package/dist/runtime/channels/channel-clients.js +27 -24
  59. package/dist/runtime/channels/channel-dispatch-pipeline.js +12 -20
  60. package/dist/runtime/channels/channel-dispatch-services.js +7 -4
  61. package/dist/runtime/channels/channel-dispatchers.js +9 -9
  62. package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
  63. package/dist/runtime/channels/channel-envelope.js +83 -47
  64. package/dist/runtime/channels/channel-outbound-operations.js +8 -8
  65. package/dist/runtime/channels/channel-receive-loops.js +20 -22
  66. package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
  67. package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
  68. package/dist/runtime/channels/channel-runtime-manager.js +18 -9
  69. package/dist/runtime/channels/channel-socket-registry.js +126 -123
  70. package/dist/runtime/channels/channel-transports.js +46 -42
  71. package/dist/runtime/channels/client-server-location-runtime.js +32 -40
  72. package/dist/runtime/channels/client-server-service-wire.js +29 -22
  73. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -0
  74. package/dist/runtime/channels/dispatch-error-reporter.js +9 -39
  75. package/dist/runtime/channels/fanout-location-runtime.js +34 -47
  76. package/dist/runtime/channels/fanout-service-wire.js +3 -5
  77. package/dist/runtime/channels/local-spot-route-transport.js +7 -1
  78. package/dist/runtime/channels/route-member-snapshot.js +3 -3
  79. package/dist/runtime/channels/source-spot-router.js +6 -2
  80. package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
  81. package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
  82. package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
  83. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +6 -0
  84. package/dist/runtime/diagnostics/dispatch-error-details.js +55 -0
  85. package/dist/runtime/diagnostics/flow-context.d.ts +2 -1
  86. package/dist/runtime/diagnostics/flow-context.js +2 -2
  87. package/dist/runtime/diagnostics/index.js +38 -10
  88. package/dist/runtime/diagnostics/message-flow.js +58 -42
  89. package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
  90. package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
  91. package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
  92. package/dist/runtime/execution/index.js +7 -6
  93. package/dist/runtime/execution/serial-execution-queue.js +12 -18
  94. package/dist/runtime/execution/state-lane.js +2 -2
  95. package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -27
  96. package/dist/runtime/foundation/event-loop-resources.js +4 -4
  97. package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
  98. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +4 -2
  99. package/dist/runtime/foundation/raw-service-mesh-runtime.js +169 -144
  100. package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
  101. package/dist/runtime/foundation/runtime-state-projections.js +22 -11
  102. package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
  103. package/dist/runtime/foundation/service-discovery-registry.js +35 -33
  104. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
  105. package/dist/runtime/foundation/service-liveness-registry.js +16 -12
  106. package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
  107. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
  108. package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
  109. package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
  110. package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
  111. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +1 -0
  112. package/dist/runtime/foundation/service-stateful-registry.js +24 -23
  113. package/dist/runtime/foundation/service-stateful-runtime.d.ts +4 -0
  114. package/dist/runtime/foundation/service-stateful-runtime.js +461 -439
  115. package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
  116. package/dist/runtime/foundation/service-topology-registry.d.ts +1 -0
  117. package/dist/runtime/foundation/service-topology-registry.js +105 -96
  118. package/dist/runtime/foundation/service-weighted-selection.js +6 -11
  119. package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
  120. package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
  121. package/dist/runtime/framework-errors-internal.js +7 -10
  122. package/dist/runtime/handlers/handler-instance-scope.js +4 -5
  123. package/dist/runtime/handlers/index.js +3 -1
  124. package/dist/runtime/host/actor-packet-relay.js +74 -70
  125. package/dist/runtime/host/actor-placement-coordinator.js +29 -31
  126. package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
  127. package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
  128. package/dist/runtime/host/actor-transfer-runtime.js +176 -153
  129. package/dist/runtime/host/application-job-queue.js +18 -22
  130. package/dist/runtime/host/bound-session-relay.js +3 -1
  131. package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
  132. package/dist/runtime/host/host-capacity-status.js +8 -4
  133. package/dist/runtime/host/index.js +245 -228
  134. package/dist/runtime/host/instance-activation-authority.js +93 -96
  135. package/dist/runtime/host/location-runtime-owner.js +16 -14
  136. package/dist/runtime/host/mesh-router-resolver.js +11 -13
  137. package/dist/runtime/host/relocation-direct-transfer.js +10 -9
  138. package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
  139. package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
  140. package/dist/runtime/host/remote-bound-session-relay.js +97 -73
  141. package/dist/runtime/host/route-mesh-runtime.js +64 -69
  142. package/dist/runtime/host/runtime-shutdown.js +1 -2
  143. package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
  144. package/dist/runtime/host/spot-address-transport.js +69 -71
  145. package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
  146. package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
  147. package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
  148. package/dist/runtime/locations/actor-location-claims.js +26 -20
  149. package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
  150. package/dist/runtime/locations/authority-key-codec.js +7 -7
  151. package/dist/runtime/locations/auto-connect-loop.js +3 -3
  152. package/dist/runtime/locations/auto-connect-planner.js +25 -19
  153. package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
  154. package/dist/runtime/locations/in-memory-authority-store.js +128 -118
  155. package/dist/runtime/locations/in-memory-location-store.js +195 -168
  156. package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
  157. package/dist/runtime/locations/key-codec.js +1 -1
  158. package/dist/runtime/locations/lease-tracker.js +23 -21
  159. package/dist/runtime/locations/lifecycle.js +4 -5
  160. package/dist/runtime/locations/location-store-repository.js +368 -324
  161. package/dist/runtime/locations/opaque-record-key.js +2 -2
  162. package/dist/runtime/locations/resolvers.js +73 -82
  163. package/dist/runtime/locations/runtime.js +68 -63
  164. package/dist/runtime/locations/spot-location-claims.js +39 -35
  165. package/dist/runtime/messaging/framework-json-v1.js +7 -7
  166. package/dist/runtime/messaging/packet-name.js +7 -6
  167. package/dist/runtime/messaging/payload-codec.js +21 -18
  168. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
  169. package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
  170. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +20 -18
  171. package/dist/runtime/routing-id.js +3 -5
  172. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
  173. package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
  174. package/dist/runtime/spots/index.js +209 -220
  175. package/dist/runtime/spots/spot-activation-registry.js +15 -14
  176. package/dist/runtime/spots/spot-activation-state.js +17 -15
  177. package/dist/runtime/spots/spot-activation.js +33 -16
  178. package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
  179. package/dist/runtime/spots/spot-actor-membership.js +1 -3
  180. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +2 -1
  181. package/dist/runtime/spots/spot-actor-packet-dispatch.js +29 -21
  182. package/dist/runtime/spots/spot-actor-packet-drain.js +14 -10
  183. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
  184. package/dist/runtime/spots/spot-closing.js +3 -7
  185. package/dist/runtime/spots/spot-context.js +2 -2
  186. package/dist/runtime/spots/spot-entry-activation.js +13 -14
  187. package/dist/runtime/spots/spot-handle.js +6 -3
  188. package/dist/runtime/spots/spot-handler-registry.js +12 -12
  189. package/dist/runtime/spots/spot-manager-public.js +5 -6
  190. package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
  191. package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
  192. package/dist/runtime/spots/spot-node-runtime-manager.js +79 -86
  193. package/dist/runtime/spots/spot-outbound.js +10 -14
  194. package/dist/runtime/spots/spot-remote-codec.js +22 -26
  195. package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
  196. package/dist/runtime/spots/spot-route-packet-dispatch.js +17 -15
  197. package/dist/runtime/spots/spot-route-replies.js +4 -6
  198. package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
  199. package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +2 -3
  200. package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
  201. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
  202. package/dist/runtime/spots/spot-serial-executor.js +5 -8
  203. package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
  204. package/dist/runtime/spots/spot-subscription-dispatch.js +6 -6
  205. package/dist/runtime/spots/spot-timer.js +26 -30
  206. package/dist/runtime/streams/actor-session-binding-registry.d.ts +21 -8
  207. package/dist/runtime/streams/actor-session-binding-registry.js +168 -148
  208. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -0
  209. package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
  210. package/dist/runtime/streams/bound-actor-relay-sender.js +20 -17
  211. package/dist/runtime/streams/bound-session-response-target.js +8 -1
  212. package/dist/runtime/streams/bound-session-service.d.ts +1 -0
  213. package/dist/runtime/streams/bound-session-service.js +14 -12
  214. package/dist/runtime/streams/index.js +28 -20
  215. package/dist/runtime/streams/managed-stream.d.ts +3 -0
  216. package/dist/runtime/streams/managed-stream.js +52 -31
  217. package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
  218. package/dist/runtime/streams/protocol.d.ts +5 -1
  219. package/dist/runtime/streams/protocol.js +68 -20
  220. package/dist/runtime/streams/session-actor-coordinator.js +37 -41
  221. package/dist/runtime/streams/session-context.d.ts +9 -2
  222. package/dist/runtime/streams/session-context.js +50 -32
  223. package/dist/runtime/streams/session-local-actors.d.ts +3 -1
  224. package/dist/runtime/streams/session-local-actors.js +17 -2
  225. package/dist/runtime/streams/session-provider.js +2 -2
  226. package/dist/runtime/streams/session-serial-executor.js +1 -2
  227. package/dist/runtime/streams/stream-frame-factory.d.ts +1 -1
  228. package/dist/runtime/streams/stream-frame-factory.js +14 -7
  229. package/dist/runtime/streams/stream-session-runtime.js +112 -78
  230. package/dist/runtime/workers/index.js +15 -4
  231. package/package.json +3 -3
  232. package/src/contracts/Channels/RouteCalls.ts +6 -1
  233. package/src/contracts/Common/ZLinkMessage.ts +5 -5
  234. package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
  235. package/src/contracts/Configuration/Builders.ts +14 -14
  236. package/src/contracts/Configuration/CodecContentType.ts +8 -10
  237. package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
  238. package/src/contracts/Configuration/EndpointNotation.ts +11 -11
  239. package/src/contracts/Configuration/ObjectRoles.ts +1 -3
  240. package/src/contracts/Configuration/Registration.ts +46 -17
  241. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
  242. package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
  243. package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
  244. package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
  245. package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
  246. package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
  247. package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
  248. package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
  249. package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
  250. package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
  251. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -6
  252. package/src/contracts/Errors/index.ts +1 -4
  253. package/src/contracts/Handlers/Attributes.ts +15 -9
  254. package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
  255. package/src/contracts/Handlers/JsonContract.ts +53 -19
  256. package/src/contracts/Locations/ActorTransfer.ts +1 -5
  257. package/src/contracts/Locations/Authority.ts +4 -11
  258. package/src/contracts/Locations/Keys.ts +6 -1
  259. package/src/contracts/Locations/Options.ts +3 -2
  260. package/src/contracts/Locations/RelocationStore.ts +1 -4
  261. package/src/contracts/Locations/Resolvers.ts +5 -5
  262. package/src/contracts/Locations/RuntimeQuery.ts +6 -2
  263. package/src/contracts/Locations/Stores.ts +1 -2
  264. package/src/contracts/Locations/index.ts +2 -8
  265. package/src/contracts/RouteMesh/Contracts.ts +1 -7
  266. package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
  267. package/src/contracts/Spots/Contracts.ts +2 -8
  268. package/src/contracts/Spots/SpotKind.ts +16 -8
  269. package/src/contracts/Spots/ZLinkSpot.ts +8 -11
  270. package/src/contracts/Streams/IZLinkSession.ts +2 -2
  271. package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
  272. package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
  273. package/src/internal.ts +5 -4
  274. package/src/location-store-integration.ts +24 -16
  275. package/src/nest-integration.ts +40 -25
  276. package/src/runtime/abort.ts +10 -4
  277. package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
  278. package/src/runtime/actors/actor-authority-publication.ts +92 -77
  279. package/src/runtime/actors/actor-client.ts +162 -133
  280. package/src/runtime/actors/actor-context.ts +142 -134
  281. package/src/runtime/actors/actor-creation.ts +47 -44
  282. package/src/runtime/actors/actor-execution-context.ts +6 -4
  283. package/src/runtime/actors/actor-handoff.ts +269 -293
  284. package/src/runtime/actors/actor-join-deferred-scope.ts +1 -32
  285. package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
  286. package/src/runtime/actors/actor-local-native-join.ts +131 -159
  287. package/src/runtime/actors/actor-mailbox.ts +16 -19
  288. package/src/runtime/actors/actor-message-follow-context.ts +46 -36
  289. package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
  290. package/src/runtime/actors/actor-remote-joiner.ts +50 -54
  291. package/src/runtime/actors/actor-remote-wire.ts +9 -13
  292. package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
  293. package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
  294. package/src/runtime/actors/actor-runtime-state.ts +127 -124
  295. package/src/runtime/actors/actor-transfer-registry.ts +9 -14
  296. package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
  297. package/src/runtime/actors/bound-session-wire.ts +37 -17
  298. package/src/runtime/actors/deferred-join-accepted-journal.ts +353 -326
  299. package/src/runtime/actors/index.ts +43 -86
  300. package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
  301. package/src/runtime/actors/post-commit-actor-location.ts +30 -23
  302. package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
  303. package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
  304. package/src/runtime/admission.ts +9 -9
  305. package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
  306. package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
  307. package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
  308. package/src/runtime/backend/contracts/index.ts +77 -52
  309. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
  310. package/src/runtime/backend/mesh-completion-table.ts +6 -9
  311. package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
  312. package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
  313. package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
  314. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
  315. package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
  316. package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
  317. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
  318. package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
  319. package/src/runtime/backend/node/node-raw-mesh-backend.ts +370 -390
  320. package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
  321. package/src/runtime/backend/runtime-message.ts +5 -3
  322. package/src/runtime/backend/runtime-values.ts +10 -7
  323. package/src/runtime/channels/channel-autoconnect.ts +1 -4
  324. package/src/runtime/channels/channel-clients.ts +93 -73
  325. package/src/runtime/channels/channel-dispatch-pipeline.ts +44 -44
  326. package/src/runtime/channels/channel-dispatch-services.ts +51 -49
  327. package/src/runtime/channels/channel-dispatchers.ts +152 -96
  328. package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
  329. package/src/runtime/channels/channel-envelope.ts +256 -150
  330. package/src/runtime/channels/channel-multipart.ts +13 -5
  331. package/src/runtime/channels/channel-outbound-operations.ts +37 -41
  332. package/src/runtime/channels/channel-receive-loops.ts +102 -98
  333. package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
  334. package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
  335. package/src/runtime/channels/channel-runtime-manager.ts +63 -37
  336. package/src/runtime/channels/channel-socket-options.ts +3 -10
  337. package/src/runtime/channels/channel-socket-registry.ts +331 -273
  338. package/src/runtime/channels/channel-transports.ts +218 -206
  339. package/src/runtime/channels/client-server-location-runtime.ts +116 -100
  340. package/src/runtime/channels/client-server-service-wire.ts +37 -36
  341. package/src/runtime/channels/dispatch-error-reporter.ts +12 -47
  342. package/src/runtime/channels/fanout-location-runtime.ts +91 -94
  343. package/src/runtime/channels/fanout-service-wire.ts +5 -12
  344. package/src/runtime/channels/handler-filter-scope.ts +1 -4
  345. package/src/runtime/channels/index.ts +1 -4
  346. package/src/runtime/channels/local-spot-route-transport.ts +20 -5
  347. package/src/runtime/channels/route-member-snapshot.ts +11 -5
  348. package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
  349. package/src/runtime/channels/source-spot-router.ts +26 -22
  350. package/src/runtime/channels/spot-direct-envelope.ts +10 -8
  351. package/src/runtime/channels/spot-node-route-transport.ts +13 -16
  352. package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
  353. package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
  354. package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
  355. package/src/runtime/codecs/index.ts +3 -2
  356. package/src/runtime/diagnostics/dispatch-error-details.ts +62 -0
  357. package/src/runtime/diagnostics/flow-context.ts +18 -7
  358. package/src/runtime/diagnostics/index.ts +96 -61
  359. package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
  360. package/src/runtime/diagnostics/message-flow.ts +107 -79
  361. package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
  362. package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
  363. package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
  364. package/src/runtime/execution/index.ts +18 -26
  365. package/src/runtime/execution/serial-execution-queue.ts +31 -40
  366. package/src/runtime/execution/state-lane.ts +2 -2
  367. package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -55
  368. package/src/runtime/foundation/event-loop-resources.ts +8 -4
  369. package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
  370. package/src/runtime/foundation/operation-identity.ts +1 -2
  371. package/src/runtime/foundation/operation-registry.ts +8 -2
  372. package/src/runtime/foundation/raw-service-mesh-runtime.ts +364 -396
  373. package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
  374. package/src/runtime/foundation/runtime-state-projections.ts +24 -23
  375. package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
  376. package/src/runtime/foundation/service-discovery-registry.ts +67 -59
  377. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
  378. package/src/runtime/foundation/service-liveness-registry.ts +18 -13
  379. package/src/runtime/foundation/service-mailbox.ts +14 -14
  380. package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
  381. package/src/runtime/foundation/service-metadata-codec.ts +2 -9
  382. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
  383. package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
  384. package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
  385. package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
  386. package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
  387. package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -4
  388. package/src/runtime/foundation/service-stateful-registry.ts +69 -59
  389. package/src/runtime/foundation/service-stateful-runtime.ts +1233 -1112
  390. package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
  391. package/src/runtime/foundation/service-topology-registry.ts +170 -159
  392. package/src/runtime/foundation/service-weighted-selection.ts +9 -15
  393. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
  394. package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
  395. package/src/runtime/framework-errors-internal.ts +31 -30
  396. package/src/runtime/handlers/handler-instance-scope.ts +18 -29
  397. package/src/runtime/handlers/index.ts +18 -8
  398. package/src/runtime/host/actor-packet-relay.ts +290 -261
  399. package/src/runtime/host/actor-placement-coordinator.ts +165 -150
  400. package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
  401. package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
  402. package/src/runtime/host/actor-transfer-runtime.ts +391 -395
  403. package/src/runtime/host/application-job-queue.ts +32 -48
  404. package/src/runtime/host/bound-session-relay.ts +7 -9
  405. package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
  406. package/src/runtime/host/host-capacity-status.ts +10 -9
  407. package/src/runtime/host/index.ts +861 -789
  408. package/src/runtime/host/instance-activation-authority.ts +125 -143
  409. package/src/runtime/host/location-runtime-owner.ts +38 -26
  410. package/src/runtime/host/mesh-router-resolver.ts +30 -23
  411. package/src/runtime/host/relocation-direct-transfer.ts +15 -15
  412. package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
  413. package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
  414. package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
  415. package/src/runtime/host/remote-bound-session-relay.ts +274 -247
  416. package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
  417. package/src/runtime/host/route-mesh-runtime.ts +227 -181
  418. package/src/runtime/host/runtime-shutdown.ts +4 -3
  419. package/src/runtime/host/service-relocation-control.ts +14 -5
  420. package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
  421. package/src/runtime/host/spot-address-transport.ts +284 -237
  422. package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
  423. package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
  424. package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
  425. package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
  426. package/src/runtime/locations/actor-location-claims.ts +61 -49
  427. package/src/runtime/locations/actor-session-route-claims.ts +1 -4
  428. package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
  429. package/src/runtime/locations/authority-key-codec.ts +13 -10
  430. package/src/runtime/locations/auto-connect-loop.ts +14 -11
  431. package/src/runtime/locations/auto-connect-planner.ts +42 -31
  432. package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
  433. package/src/runtime/locations/canonical-codec.ts +3 -1
  434. package/src/runtime/locations/creation-operation-id.ts +4 -3
  435. package/src/runtime/locations/domain-store-contract.ts +13 -7
  436. package/src/runtime/locations/in-memory-authority-store.ts +232 -199
  437. package/src/runtime/locations/in-memory-location-store.ts +432 -250
  438. package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
  439. package/src/runtime/locations/internal-store-contracts.ts +95 -38
  440. package/src/runtime/locations/key-codec.ts +3 -4
  441. package/src/runtime/locations/lease-tracker.ts +36 -27
  442. package/src/runtime/locations/lifecycle-runtime.ts +15 -3
  443. package/src/runtime/locations/lifecycle.ts +33 -28
  444. package/src/runtime/locations/location-store-repository.ts +1329 -1185
  445. package/src/runtime/locations/opaque-record-key.ts +4 -9
  446. package/src/runtime/locations/resolvers.ts +201 -178
  447. package/src/runtime/locations/runtime.ts +251 -159
  448. package/src/runtime/locations/spot-location-claims.ts +110 -112
  449. package/src/runtime/messaging/creation-payload-codec.ts +4 -1
  450. package/src/runtime/messaging/framework-json-v1.ts +34 -15
  451. package/src/runtime/messaging/packet-name.ts +8 -6
  452. package/src/runtime/messaging/payload-codec.ts +70 -50
  453. package/src/runtime/messaging/submission-result.ts +6 -9
  454. package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
  455. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +19 -18
  456. package/src/runtime/routing-id.ts +10 -7
  457. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
  458. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
  459. package/src/runtime/spots/index.ts +595 -564
  460. package/src/runtime/spots/spot-activation-registry.ts +38 -34
  461. package/src/runtime/spots/spot-activation-state.ts +43 -51
  462. package/src/runtime/spots/spot-activation.ts +179 -116
  463. package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
  464. package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
  465. package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
  466. package/src/runtime/spots/spot-actor-membership.ts +25 -27
  467. package/src/runtime/spots/spot-actor-packet-dispatch.ts +196 -148
  468. package/src/runtime/spots/spot-actor-packet-drain.ts +56 -42
  469. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
  470. package/src/runtime/spots/spot-closing.ts +11 -12
  471. package/src/runtime/spots/spot-context.ts +46 -26
  472. package/src/runtime/spots/spot-entry-activation.ts +84 -65
  473. package/src/runtime/spots/spot-handle.ts +17 -15
  474. package/src/runtime/spots/spot-handler-registry.ts +44 -31
  475. package/src/runtime/spots/spot-location-claim.ts +5 -4
  476. package/src/runtime/spots/spot-manager-public.ts +62 -82
  477. package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
  478. package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
  479. package/src/runtime/spots/spot-node-runtime-manager.ts +235 -222
  480. package/src/runtime/spots/spot-outbound.ts +47 -59
  481. package/src/runtime/spots/spot-publisher-transport.ts +5 -4
  482. package/src/runtime/spots/spot-remote-codec.ts +66 -65
  483. package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
  484. package/src/runtime/spots/spot-route-packet-dispatch.ts +129 -95
  485. package/src/runtime/spots/spot-route-replies.ts +23 -24
  486. package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
  487. package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
  488. package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +13 -18
  489. package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
  490. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
  491. package/src/runtime/spots/spot-routing-internal.ts +1 -4
  492. package/src/runtime/spots/spot-runtime-ports.ts +5 -5
  493. package/src/runtime/spots/spot-serial-executor.ts +5 -9
  494. package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
  495. package/src/runtime/spots/spot-subscription-dispatch.ts +58 -47
  496. package/src/runtime/spots/spot-timer.ts +103 -91
  497. package/src/runtime/streams/actor-session-binding-registry.ts +421 -292
  498. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +8 -4
  499. package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
  500. package/src/runtime/streams/bound-actor-relay-sender.ts +60 -50
  501. package/src/runtime/streams/bound-session-response-target.ts +39 -9
  502. package/src/runtime/streams/bound-session-service.ts +52 -42
  503. package/src/runtime/streams/index.ts +183 -100
  504. package/src/runtime/streams/managed-stream.ts +123 -90
  505. package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
  506. package/src/runtime/streams/protocol.ts +115 -46
  507. package/src/runtime/streams/session-actor-coordinator.ts +109 -93
  508. package/src/runtime/streams/session-calls.ts +2 -8
  509. package/src/runtime/streams/session-context.ts +96 -51
  510. package/src/runtime/streams/session-local-actors.ts +19 -3
  511. package/src/runtime/streams/session-provider.ts +5 -7
  512. package/src/runtime/streams/session-serial-executor.ts +7 -6
  513. package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
  514. package/src/runtime/streams/stream-frame-factory.ts +59 -40
  515. package/src/runtime/streams/stream-session-runtime.ts +317 -214
  516. package/src/runtime/workers/index.ts +68 -29
@@ -1,4 +1,7 @@
1
- import { ZLinkFrameworkInternalErrorKind, createInternalFrameworkException } from '../framework-errors-internal';
1
+ import {
2
+ ZLinkFrameworkInternalErrorKind,
3
+ createInternalFrameworkException
4
+ } from '../framework-errors-internal';
2
5
  import { randomUUID } from 'node:crypto';
3
6
  import type { ZLinkLocationOptionOverrides } from '../../contracts/Locations/Options';
4
7
  import type {
@@ -14,29 +17,20 @@ import type {
14
17
  } from '../../contracts';
15
18
  import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
16
19
  import type { ZLinkRuntimeEventPublisher } from '../diagnostics';
17
- import {
18
- ZLinkLocationWriteIntent,
19
- ZLinkLocationWriteStatus
20
- } from '../../contracts/Locations';
20
+ import { ZLinkLocationWriteIntent, ZLinkLocationWriteStatus } from '../../contracts/Locations';
21
21
  import {
22
22
  ZLinkFrameworkRuntimeState,
23
23
  ZLinkFrameworkException,
24
24
  ZLinkObjectRole
25
25
  } from '../../contracts';
26
- import {
27
- ZLinkSubmitStatus,
28
- type ZLinkSubmitResult
29
- } from '../messaging/submission-result';
26
+ import { ZLinkSubmitStatus, type ZLinkSubmitResult } from '../messaging/submission-result';
30
27
  import {
31
28
  ZLinkRuntimeDispatchErrorAction as ZLinkDispatchErrorAction,
32
29
  ZLinkRuntimeDispatchErrorReason as ZLinkDispatchErrorReason,
33
30
  ZLinkDispatchErrorSurface,
34
31
  ZLinkDispatchMessageKind
35
32
  } from '../../contracts/Dispatch/ZLinkDispatchOptions';
36
- import {
37
- SubmitResult,
38
- isZLinkBackendResultError
39
- } from '../backend/runtime-values';
33
+ import { SubmitResult, isZLinkBackendResultError } from '../backend/runtime-values';
40
34
  import {
41
35
  ReceiveKind,
42
36
  type ReadyRecord,
@@ -154,8 +148,7 @@ export class ZLinkSpotNodeRuntimeManager {
154
148
  >();
155
149
  private disposed = false;
156
150
  private readonly autoConnectLoops: ZLinkAutoConnectLoop[] = [];
157
- private readonly publishedMeshNodeDescriptors =
158
- new Map<string, ZLinkMeshNodeDescriptor>();
151
+ private readonly publishedMeshNodeDescriptors = new Map<string, ZLinkMeshNodeDescriptor>();
159
152
  // Keep the revision source separate from the cached Store row. A new owner
160
153
  // lease may require a NewClaim against an empty Store, while peers still
161
154
  // retain the monotonic revision from this MeshNode lifecycle.
@@ -170,8 +163,9 @@ export class ZLinkSpotNodeRuntimeManager {
170
163
  private readonly applicationJobQueue: ApplicationJobQueue;
171
164
 
172
165
  constructor(private readonly options: ZLinkSpotNodeRuntimeManagerOptions) {
173
- this.applicationJobQueue = options.applicationJobQueue
174
- ?? new ApplicationJobQueue(resolveApplicationJobQueueConfiguration());
166
+ this.applicationJobQueue =
167
+ options.applicationJobQueue ??
168
+ new ApplicationJobQueue(resolveApplicationJobQueueConfiguration());
175
169
  }
176
170
 
177
171
  createReceived() {
@@ -188,7 +182,12 @@ export class ZLinkSpotNodeRuntimeManager {
188
182
  options: ZLinkLocationOptionOverrides,
189
183
  events?: ZLinkLocationEventSink
190
184
  ): void {
191
- this.locationAutoConnect = createSpotNodeLocationAutoConnectContext(runtime, stores, options, events);
185
+ this.locationAutoConnect = createSpotNodeLocationAutoConnectContext(
186
+ runtime,
187
+ stores,
188
+ options,
189
+ events
190
+ );
192
191
  }
193
192
 
194
193
  async startLocationAutoConnect(signal?: AbortSignal): Promise<void> {
@@ -254,10 +253,11 @@ export class ZLinkSpotNodeRuntimeManager {
254
253
  }
255
254
  const meshAdapter = this.options.backendAdapterFactory.createMeshAdapter();
256
255
  for (const [spotNodeName, spotNode] of this.options.registration.spotNodes.entries()) {
257
- const routingId = spotNode.routingId
258
- ?? spotNode.router?.routingId
259
- ?? spotNode.pubSub?.routingId
260
- ?? `${spotNode.routingIdPrefix ?? spotNodeName}-${randomUUID()}`;
256
+ const routingId =
257
+ spotNode.routingId ??
258
+ spotNode.router?.routingId ??
259
+ spotNode.pubSub?.routingId ??
260
+ `${spotNode.routingIdPrefix ?? spotNodeName}-${randomUUID()}`;
261
261
  const bind = spotNode.router?.bind;
262
262
  if (bind === undefined) {
263
263
  throw new ZLinkConfigurationException(
@@ -269,10 +269,12 @@ export class ZLinkSpotNodeRuntimeManager {
269
269
  routingId,
270
270
  receiveTimeoutMs: spotNode.router?.receiveTimeoutMs,
271
271
  applicationJobQueue: this.applicationJobQueue,
272
- applicationJobReceiveFlowFailureSink:
273
- this.options.applicationJobReceiveFlowFailureSink,
272
+ applicationJobReceiveFlowFailureSink: this.options.applicationJobReceiveFlowFailureSink,
274
273
  peerAdmissionSealed: () => this.options.peerAdmissionSealed?.(spotNodeName) ?? false
275
274
  });
275
+ if (this.options.dispatchErrors !== undefined) {
276
+ node.setDispatchErrorReporter?.(this.options.dispatchErrors, spotNodeName);
277
+ }
276
278
  node.setMailboxRecordDroppedHandler?.((record) =>
277
279
  this.options.dispatchErrors?.report({
278
280
  surface: ZLinkDispatchErrorSurface.RouteMeshChannel,
@@ -283,7 +285,8 @@ export class ZLinkSpotNodeRuntimeManager {
283
285
  error: new Error(
284
286
  `MeshNode '${spotNodeName}' no longer accepts ${record.kind} for '${record.owner}'.`
285
287
  )
286
- }));
288
+ })
289
+ );
287
290
  node.setProtocolErrorHandler?.((record) =>
288
291
  this.options.dispatchErrors?.report({
289
292
  surface: ZLinkDispatchErrorSurface.RouteMeshChannel,
@@ -297,10 +300,11 @@ export class ZLinkSpotNodeRuntimeManager {
297
300
  channelName: spotNodeName,
298
301
  sourceRid: record.sourceNodeRid,
299
302
  error: new Error(
300
- `MeshNode '${spotNodeName}' rejected an invalid service wire record from '${record.sourceNodeRid}'`
301
- + (record.command === undefined ? '.' : ` (command ${record.command}).`)
303
+ `MeshNode '${spotNodeName}' rejected an invalid service wire record from '${record.sourceNodeRid}'` +
304
+ (record.command === undefined ? '.' : ` (command ${record.command}).`)
302
305
  )
303
- }));
306
+ })
307
+ );
304
308
  let pump: ZLinkMeshDispatchPump | undefined;
305
309
  const completions = new ZLinkMeshCompletionTable();
306
310
  try {
@@ -313,30 +317,24 @@ export class ZLinkSpotNodeRuntimeManager {
313
317
  ...Object.keys(spotNode.instanceSpotFactoryRegistrations ?? {}),
314
318
  ...Object.keys(spotNode.actorFactoryRegistrations ?? {})
315
319
  ];
316
- const instanceSpotTypes = Object.keys(
317
- spotNode.instanceSpotFactoryRegistrations ?? {}
318
- );
320
+ const instanceSpotTypes = Object.keys(spotNode.instanceSpotFactoryRegistrations ?? {});
319
321
  const hasLegacyObjectFactories =
320
- (spotNode.spotFactories?.length ?? 0) > 0
321
- || Object.keys(spotNode.instanceSpotFactories ?? {}).length > 0
322
- || (
323
- spotNode.actorFactories instanceof Map
324
- ? spotNode.actorFactories.size
325
- : Object.keys(spotNode.actorFactories ?? {}).length
326
- ) > 0;
322
+ (spotNode.spotFactories?.length ?? 0) > 0 ||
323
+ Object.keys(spotNode.instanceSpotFactories ?? {}).length > 0 ||
324
+ (spotNode.actorFactories instanceof Map
325
+ ? spotNode.actorFactories.size
326
+ : Object.keys(spotNode.actorFactories ?? {}).length) > 0;
327
327
  node.configureObjectPlacement({
328
- role: spotNode.objectRole
329
- ?? (hasLegacyObjectFactories ? 'server' : 'none'),
328
+ role: spotNode.objectRole ?? (hasLegacyObjectFactories ? 'server' : 'none'),
330
329
  placementWeight: spotNode.placementWeight ?? 100,
331
- activeCapacityLimit:
332
- aggregatePlacementCapacity(
333
- spotNode.actorLimit ?? 0,
334
- spotNode.spotLimit ?? 0
335
- ),
330
+ activeCapacityLimit: aggregatePlacementCapacity(
331
+ spotNode.actorLimit ?? 0,
332
+ spotNode.spotLimit ?? 0
333
+ ),
336
334
  pendingCapacityLimit: spotNode.activationConcurrencyLimit ?? 128,
337
335
  objectCapabilities: [
338
- ...stableTypes.map(type => `object-type:${type}`),
339
- ...instanceSpotTypes.map(type => `instance-spot-type:${type}`)
336
+ ...stableTypes.map((type) => `object-type:${type}`),
337
+ ...instanceSpotTypes.map((type) => `instance-spot-type:${type}`)
340
338
  ],
341
339
  ...(this.options.registration.maintenanceWave === undefined
342
340
  ? {}
@@ -363,17 +361,18 @@ export class ZLinkSpotNodeRuntimeManager {
363
361
  pump = new ZLinkMeshDispatchPump(node, {
364
362
  applicationJobQueue: this.applicationJobQueue,
365
363
  dispatch: (owner, record) => this.dispatchMeshRecord(spotNodeName, owner, record),
366
- reportError: (error, context) => this.options.dispatchErrors?.report({
367
- surface: ZLinkDispatchErrorSurface.Node,
368
- messageKind: ZLinkDispatchMessageKind.Control,
369
- reason: ZLinkDispatchErrorReason.HandlerException,
370
- action: ZLinkDispatchErrorAction.Drop,
371
- meshName: spotNodeName,
372
- packetName: context?.packetName,
373
- sourceRid: context?.sourceNodeRid,
374
- commandId: context?.commandId,
375
- error
376
- })
364
+ reportError: (error, context) =>
365
+ this.options.dispatchErrors?.report({
366
+ surface: ZLinkDispatchErrorSurface.Node,
367
+ messageKind: ZLinkDispatchMessageKind.Control,
368
+ reason: ZLinkDispatchErrorReason.HandlerException,
369
+ action: ZLinkDispatchErrorAction.Drop,
370
+ meshName: spotNodeName,
371
+ packetName: context?.packetName,
372
+ sourceRid: context?.sourceNodeRid,
373
+ commandId: context?.commandId,
374
+ error
375
+ })
377
376
  });
378
377
  pump.start();
379
378
  this.meshNodes.set(spotNodeName, node);
@@ -401,7 +400,9 @@ export class ZLinkSpotNodeRuntimeManager {
401
400
  ): Promise<void> {
402
401
  const previous = this.statePublication;
403
402
  let release!: () => void;
404
- this.statePublication = new Promise<void>((resolve) => { release = resolve; });
403
+ this.statePublication = new Promise<void>((resolve) => {
404
+ release = resolve;
405
+ });
405
406
  await previous;
406
407
  try {
407
408
  await this.publishMeshNodeStateCore(state, signal, selectedMeshName);
@@ -418,8 +419,8 @@ export class ZLinkSpotNodeRuntimeManager {
418
419
  const location = this.locationAutoConnect;
419
420
  const owner = location?.runtime.currentOwnerToken;
420
421
  if (location === undefined || owner === undefined) return;
421
- const ownerChanged = this.publishedOwnerToken !== undefined
422
- && !sameOwnerToken(this.publishedOwnerToken, owner);
422
+ const ownerChanged =
423
+ this.publishedOwnerToken !== undefined && !sameOwnerToken(this.publishedOwnerToken, owner);
423
424
  if (ownerChanged) {
424
425
  // A new owner token can refer to an empty or replaced Store. The cached
425
426
  // descriptor was written under the previous lease and must not force a
@@ -436,16 +437,15 @@ export class ZLinkSpotNodeRuntimeManager {
436
437
  const actors = effectiveActorRegistrations(registration);
437
438
  const capabilities = [
438
439
  ...userSpots.map(([stableType, factory]) =>
439
- objectCapability('user_spot', stableType, factory)),
440
+ objectCapability('user_spot', stableType, factory)
441
+ ),
440
442
  ...instanceSpots.map(([stableType, factory]) =>
441
- objectCapability('instance_spot', stableType, factory)),
442
- ...actors.map(([stableType, factory]) =>
443
- objectCapability('actor', stableType, factory))
443
+ objectCapability('instance_spot', stableType, factory)
444
+ ),
445
+ ...actors.map(([stableType, factory]) => objectCapability('actor', stableType, factory))
444
446
  ].sort((left, right) => {
445
447
  const kindOrder = left.objectKind.localeCompare(right.objectKind);
446
- return kindOrder !== 0
447
- ? kindOrder
448
- : left.stableType.localeCompare(right.stableType);
448
+ return kindOrder !== 0 ? kindOrder : left.stableType.localeCompare(right.stableType);
449
449
  });
450
450
  const current = this.publishedMeshNodeDescriptors.get(meshName);
451
451
  const previousRevision = this.descriptorRevisionByMesh.get(meshName) ?? 0n;
@@ -472,11 +472,13 @@ export class ZLinkSpotNodeRuntimeManager {
472
472
  limit: registration.spotLimit ?? 0
473
473
  },
474
474
  spotTypes: capabilities
475
- .filter(capability => capability.objectKind !== 'actor')
476
- .map(capability => {
477
- const previous = current?.populationCapacity.spotTypes.find(candidate =>
478
- candidate.objectKind === capability.objectKind
479
- && candidate.stableType === capability.stableType);
475
+ .filter((capability) => capability.objectKind !== 'actor')
476
+ .map((capability) => {
477
+ const previous = current?.populationCapacity.spotTypes.find(
478
+ (candidate) =>
479
+ candidate.objectKind === capability.objectKind &&
480
+ candidate.stableType === capability.stableType
481
+ );
480
482
  return {
481
483
  objectKind: capability.objectKind as 'user_spot' | 'instance_spot',
482
484
  stableType: capability.stableType,
@@ -487,35 +489,33 @@ export class ZLinkSpotNodeRuntimeManager {
487
489
  })
488
490
  },
489
491
  activationConcurrency: {
490
- active: this.options.instanceActivationConcurrencyProvider?.(meshName).active
491
- ?? current?.activationConcurrency.active
492
- ?? 0,
493
- limit: this.options.instanceActivationConcurrencyProvider?.(meshName).limit
494
- ?? registration.activationConcurrencyLimit
495
- ?? 128
492
+ active:
493
+ this.options.instanceActivationConcurrencyProvider?.(meshName).active ??
494
+ current?.activationConcurrency.active ??
495
+ 0,
496
+ limit:
497
+ this.options.instanceActivationConcurrencyProvider?.(meshName).limit ??
498
+ registration.activationConcurrencyLimit ??
499
+ 128
496
500
  },
497
501
  channelWeights: Object.fromEntries(
498
- this.serverChannels(meshName)
499
- .map(([channelName, channel]) => [
500
- channelName,
501
- state === ZLinkFrameworkRuntimeState.Draining
502
- ? 0
503
- : this.effectiveChannelWeight(meshName, channelName, channel.weight ?? 100)
504
- ])
502
+ this.serverChannels(meshName).map(([channelName, channel]) => [
503
+ channelName,
504
+ state === ZLinkFrameworkRuntimeState.Draining
505
+ ? 0
506
+ : this.effectiveChannelWeight(meshName, channelName, channel.weight ?? 100)
507
+ ])
505
508
  ),
506
509
  applicationVersion: this.options.registration.applicationVersion,
507
510
  maintenanceWave: this.options.registration.maintenanceWave,
508
511
  spotTypes: [
509
512
  ...userSpots.map(([stableType]) => stableType),
510
513
  ...instanceSpots.map(([stableType]) => stableType),
511
- ...(registration.entrySpotType === undefined
512
- ? []
513
- : [registration.entrySpotType.name])
514
- ]
515
- .sort(),
514
+ ...(registration.entrySpotType === undefined ? [] : [registration.entrySpotType.name])
515
+ ].sort(),
516
516
  objectCapabilities: capabilities,
517
517
  state,
518
- securityIdentity: 'default',
518
+ securityIdentity: 'default'
519
519
  };
520
520
  const result = await location.runtime.writeMeshNode(
521
521
  descriptor,
@@ -553,12 +553,13 @@ export class ZLinkSpotNodeRuntimeManager {
553
553
  const status = node.status();
554
554
  const owner = location.runtime.currentOwnerToken;
555
555
  if (owner === undefined) return;
556
- const current = (await location.runtime.listLiveMeshNodes(meshName, signal))
557
- .find((descriptor) =>
558
- String(descriptor.rid) === String(status.routingId)
559
- && descriptor.lifecycleGeneration === status.lifecycleGeneration
560
- && descriptor.ownerId === owner.ownerId
561
- && descriptor.leaseGeneration === owner.leaseGeneration);
556
+ const current = (await location.runtime.listLiveMeshNodes(meshName, signal)).find(
557
+ (descriptor) =>
558
+ String(descriptor.rid) === String(status.routingId) &&
559
+ descriptor.lifecycleGeneration === status.lifecycleGeneration &&
560
+ descriptor.ownerId === owner.ownerId &&
561
+ descriptor.leaseGeneration === owner.leaseGeneration
562
+ );
562
563
  if (current !== undefined) {
563
564
  this.publishedMeshNodeDescriptors.set(meshName, current);
564
565
  this.descriptorRevisionByMesh.set(
@@ -570,10 +571,7 @@ export class ZLinkSpotNodeRuntimeManager {
570
571
  await this.publishMeshNodeState(state, signal, meshName);
571
572
  }
572
573
 
573
- private entrySpotId(
574
- meshName: string,
575
- registration: ZLinkSpotNodeOptions
576
- ): string | undefined {
574
+ private entrySpotId(meshName: string, registration: ZLinkSpotNodeOptions): string | undefined {
577
575
  if (effectiveObjectRole(registration) !== ZLinkObjectRole.Server) {
578
576
  return undefined;
579
577
  }
@@ -608,9 +606,7 @@ export class ZLinkSpotNodeRuntimeManager {
608
606
 
609
607
  entrySpotIdForMesh(meshName: string): string | undefined {
610
608
  const registration = this.options.registration.spotNodes.get(meshName);
611
- return registration === undefined
612
- ? undefined
613
- : this.entrySpotId(meshName, registration);
609
+ return registration === undefined ? undefined : this.entrySpotId(meshName, registration);
614
610
  }
615
611
 
616
612
  meshNodeDescriptor(meshName: string): ZLinkMeshNodeDescriptor | undefined {
@@ -622,9 +618,7 @@ export class ZLinkSpotNodeRuntimeManager {
622
618
  if (registration === undefined) {
623
619
  throw new ZLinkConfigurationException(`Mesh '${meshName}' is not registered.`);
624
620
  }
625
- return this.runtimePlacementWeights.get(meshName)
626
- ?? registration.placementWeight
627
- ?? 100;
621
+ return this.runtimePlacementWeights.get(meshName) ?? registration.placementWeight ?? 100;
628
622
  }
629
623
 
630
624
  channelWeight(channelName: string): number {
@@ -656,7 +650,10 @@ export class ZLinkSpotNodeRuntimeManager {
656
650
  );
657
651
  }
658
652
  const validated = requirePublicRuntimeWeight(weight, 'Channel weight');
659
- if (this.effectiveChannelWeight(match.meshName, channelName, match.configuredWeight) === validated) return;
653
+ if (
654
+ this.effectiveChannelWeight(match.meshName, channelName, match.configuredWeight) === validated
655
+ )
656
+ return;
660
657
  let weights = this.runtimeChannelWeights.get(match.meshName);
661
658
  if (weights === undefined) {
662
659
  weights = new Map();
@@ -694,15 +691,14 @@ export class ZLinkSpotNodeRuntimeManager {
694
691
  readonly meshName: string;
695
692
  readonly configuredWeight: number;
696
693
  } {
697
- const matches = [...this.options.registration.spotNodes]
698
- .flatMap(([meshName, registration]) => {
699
- const channel = registration.meshChannels?.[channelName];
700
- return channel === undefined
701
- ? []
702
- : [{ meshName, configuredWeight: channel.weight ?? 100 }];
703
- });
694
+ const matches = [...this.options.registration.spotNodes].flatMap(([meshName, registration]) => {
695
+ const channel = registration.meshChannels?.[channelName];
696
+ return channel === undefined ? [] : [{ meshName, configuredWeight: channel.weight ?? 100 }];
697
+ });
704
698
  if (matches.length === 0) {
705
- throw new ZLinkConfigurationException(`RouteMesh channel '${channelName}' is not registered.`);
699
+ throw new ZLinkConfigurationException(
700
+ `RouteMesh channel '${channelName}' is not registered.`
701
+ );
706
702
  }
707
703
  if (matches.length > 1) {
708
704
  throw new ZLinkConfigurationException(
@@ -716,12 +712,15 @@ export class ZLinkSpotNodeRuntimeManager {
716
712
  meshName: string,
717
713
  applyWeight: () => Promise<void>
718
714
  ): void {
719
- const publish = this.runtimeWeightPublication.catch(() => undefined).then(async () => {
720
- await applyWeight();
721
- const state = this.publishedMeshNodeDescriptors.get(meshName)?.state
722
- ?? ZLinkFrameworkRuntimeState.Serving;
723
- await this.publishMeshNodeState(state, undefined, meshName);
724
- });
715
+ const publish = this.runtimeWeightPublication
716
+ .catch(() => undefined)
717
+ .then(async () => {
718
+ await applyWeight();
719
+ const state =
720
+ this.publishedMeshNodeDescriptors.get(meshName)?.state ??
721
+ ZLinkFrameworkRuntimeState.Serving;
722
+ await this.publishMeshNodeState(state, undefined, meshName);
723
+ });
725
724
  this.runtimeWeightPublication = publish;
726
725
  if (this.options.detachedTaskRunner !== undefined) {
727
726
  this.options.detachedTaskRunner.runDetached(
@@ -744,13 +743,14 @@ export class ZLinkSpotNodeRuntimeManager {
744
743
  createRequest: ZLinkMessage,
745
744
  signal?: AbortSignal
746
745
  ): Promise<import('../../contracts').ZLinkActorCreateResponse | undefined> {
747
- let activation = [...this.entryActivations.values()].find(
748
- (entryActivation) => routingIdsEqual(entryActivation.nodeRid, nodeRid)
746
+ let activation = [...this.entryActivations.values()].find((entryActivation) =>
747
+ routingIdsEqual(entryActivation.nodeRid, nodeRid)
749
748
  );
750
749
  if (activation === undefined) {
751
750
  for (const [meshName, node] of this.meshNodes) {
752
751
  if (!routingIdsEqual(node.status().routingId, nodeRid)) continue;
753
- if (this.options.registration.spotNodes.get(meshName)?.entrySpotType === undefined) continue;
752
+ if (this.options.registration.spotNodes.get(meshName)?.entrySpotType === undefined)
753
+ continue;
754
754
  await this.ensureEntryActivation(meshName);
755
755
  activation = this.entryActivations.get(meshName);
756
756
  break;
@@ -759,10 +759,7 @@ export class ZLinkSpotNodeRuntimeManager {
759
759
  return activation?.notifyCreateActor(actor, createRequest, signal);
760
760
  }
761
761
 
762
- notifyPrimaryEntrySpotActorJoined(
763
- actor: ZLinkActor,
764
- signal?: AbortSignal
765
- ): Promise<void> {
762
+ notifyPrimaryEntrySpotActorJoined(actor: ZLinkActor, signal?: AbortSignal): Promise<void> {
766
763
  const activation = this.primaryEntryActivation();
767
764
  return activation?.notifyJoinActor(actor, signal) ?? Promise.resolve();
768
765
  }
@@ -774,13 +771,12 @@ export class ZLinkSpotNodeRuntimeManager {
774
771
  membershipEpoch?: bigint
775
772
  ): Promise<void> {
776
773
  const activation = this.primaryEntryActivation();
777
- return activation?.notifyLeaveActor(actor, signal, actorRef, membershipEpoch) ?? Promise.resolve();
774
+ return (
775
+ activation?.notifyLeaveActor(actor, signal, actorRef, membershipEpoch) ?? Promise.resolve()
776
+ );
778
777
  }
779
778
 
780
- notifyPrimaryEntrySpotActorDisconnected(
781
- actor: ZLinkActor,
782
- signal?: AbortSignal
783
- ): Promise<void> {
779
+ notifyPrimaryEntrySpotActorDisconnected(actor: ZLinkActor, signal?: AbortSignal): Promise<void> {
784
780
  const activation = this.primaryEntryActivation();
785
781
  return activation?.notifyDisconnectActor(actor, signal) ?? Promise.resolve();
786
782
  }
@@ -795,8 +791,9 @@ export class ZLinkSpotNodeRuntimeManager {
795
791
  }
796
792
 
797
793
  serverChannels(meshName: string) {
798
- return Object.entries(this.options.registration.spotNodes.get(meshName)?.meshChannels ?? {})
799
- .filter(([, channel]) => channel.server === true);
794
+ return Object.entries(
795
+ this.options.registration.spotNodes.get(meshName)?.meshChannels ?? {}
796
+ ).filter(([, channel]) => channel.server === true);
800
797
  }
801
798
 
802
799
  async dispose(signal?: AbortSignal, deadline?: Date): Promise<void> {
@@ -814,18 +811,22 @@ export class ZLinkSpotNodeRuntimeManager {
814
811
  const errors: unknown[] = [];
815
812
  const settle = async (operations: readonly Promise<unknown>[]) => {
816
813
  const results = await Promise.allSettled(operations);
817
- errors.push(...results
818
- .filter((result): result is PromiseRejectedResult => result.status === 'rejected')
819
- .map((result) => result.reason));
814
+ errors.push(
815
+ ...results
816
+ .filter((result): result is PromiseRejectedResult => result.status === 'rejected')
817
+ .map((result) => result.reason)
818
+ );
820
819
  };
821
820
  await settle(publishers.map(async (publisher) => publisher.close()));
822
821
  await settle(autoConnectLoops.map((loop) => loop.prepareTransportShutdown()));
823
822
  await settle(entryActivations.reverse().map((activation) => activation.dispose(deadline)));
824
823
  await settle(meshPumps.reverse().map((pump) => pump.dispose()));
825
- await settle(meshNodes.reverse().map(async (node) => {
826
- node.shutdown(1000);
827
- node.close();
828
- }));
824
+ await settle(
825
+ meshNodes.reverse().map(async (node) => {
826
+ node.shutdown(1000);
827
+ node.close();
828
+ })
829
+ );
829
830
  for (const completions of meshCompletions) {
830
831
  completions.dispose();
831
832
  }
@@ -853,18 +854,18 @@ export class ZLinkSpotNodeRuntimeManager {
853
854
  return;
854
855
  }
855
856
  const node = this.meshNodes.get(meshName);
856
- const targetsEntrySpot = owner.spotId === null
857
- || (node !== undefined && routingIdsEqual(
858
- owner.spotId as unknown as RoutingId,
859
- String(node.status().routingId)
860
- ));
861
- if (targetsEntrySpot && (
862
- record.kind === ReceiveKind.ActorSend
863
- || record.kind === ReceiveKind.ActorRequest
864
- || record.kind === ReceiveKind.SpotSend
865
- || record.kind === ReceiveKind.SpotRequest
866
- || record.kind === ReceiveKind.SpotMulticast
867
- )) {
857
+ const targetsEntrySpot =
858
+ owner.spotId === null ||
859
+ (node !== undefined &&
860
+ routingIdsEqual(owner.spotId as unknown as RoutingId, String(node.status().routingId)));
861
+ if (
862
+ targetsEntrySpot &&
863
+ (record.kind === ReceiveKind.ActorSend ||
864
+ record.kind === ReceiveKind.ActorRequest ||
865
+ record.kind === ReceiveKind.SpotSend ||
866
+ record.kind === ReceiveKind.SpotRequest ||
867
+ record.kind === ReceiveKind.SpotMulticast)
868
+ ) {
868
869
  await this.ensureEntryActivation(meshName);
869
870
  }
870
871
  const dispatcher = this.options.meshRecordDispatcher;
@@ -881,23 +882,23 @@ export class ZLinkSpotNodeRuntimeManager {
881
882
  owner: ReadyRecord,
882
883
  record: ReceiveRecord
883
884
  ): Promise<boolean> {
884
- if (record.kind !== ReceiveKind.SpotSend
885
- && record.kind !== ReceiveKind.SpotRequest
886
- && record.kind !== ReceiveKind.SpotMulticast) {
885
+ if (
886
+ record.kind !== ReceiveKind.SpotSend &&
887
+ record.kind !== ReceiveKind.SpotRequest &&
888
+ record.kind !== ReceiveKind.SpotMulticast
889
+ ) {
887
890
  return false;
888
891
  }
889
892
  await this.ensureEntryActivation(meshName);
890
893
  const activation = this.entryActivations.get(meshName);
891
- if (
892
- activation === undefined
893
- || owner.spotId === null
894
- || activation.spotId !== owner.spotId
895
- ) {
894
+ if (activation === undefined || owner.spotId === null || activation.spotId !== owner.spotId) {
896
895
  return false;
897
896
  }
898
897
  if (record.kind === ReceiveKind.SpotMulticast) {
899
898
  if (record.topic === null || record.topic.length === 0) {
900
- throw new ZLinkConfigurationException('MeshNode Entry Spot multicast record is missing its topic.');
899
+ throw new ZLinkConfigurationException(
900
+ 'MeshNode Entry Spot multicast record is missing its topic.'
901
+ );
901
902
  }
902
903
  await activation.dispatchSubscriptionRecord(
903
904
  record.topic,
@@ -928,7 +929,9 @@ export class ZLinkSpotNodeRuntimeManager {
928
929
  context,
929
930
  true
930
931
  );
931
- requireEntrySpotReply(record.reply(encodeChannelReplyParts(envelope.header, response, codecs)));
932
+ requireEntrySpotReply(
933
+ record.reply(encodeChannelReplyParts(envelope.header, response, codecs))
934
+ );
932
935
  } catch (error) {
933
936
  requireEntrySpotReply(record.reply(encodeChannelErrorReplyParts(envelope.header, error)));
934
937
  }
@@ -982,10 +985,8 @@ export class ZLinkSpotNodeRuntimeManager {
982
985
  spotPublisherClient: this.options.spotPublisherClient,
983
986
  routedTransport: this.options.routedTransport,
984
987
  spotRouterChannelIdForMesh: this.options.spotRouterChannelIdForMesh,
985
- channelMeshNameForChannel: (channelName) => resolveChannelMeshName(
986
- this.options.registration,
987
- channelName
988
- ),
988
+ channelMeshNameForChannel: (channelName) =>
989
+ resolveChannelMeshName(this.options.registration, channelName),
989
990
  timerHandlers: spotNode.entrySpotTimerHandlers,
990
991
  packetHandlers: spotNode.entrySpotPacketHandlers,
991
992
  subscriptionHandlers: spotNode.entrySpotSubscriptionHandlers,
@@ -1034,11 +1035,15 @@ export class ZLinkSpotNodeRuntimeManager {
1034
1035
  ): Promise<unknown> {
1035
1036
  let activation = this.primaryEntryActivation();
1036
1037
  if (activation === undefined) {
1037
- const candidates = this.options.primaryMeshName === undefined
1038
- ? this.options.registration.spotNodes
1039
- : new Map([[this.options.primaryMeshName, this.options.registration.spotNodes.get(
1040
- this.options.primaryMeshName
1041
- )]]);
1038
+ const candidates =
1039
+ this.options.primaryMeshName === undefined
1040
+ ? this.options.registration.spotNodes
1041
+ : new Map([
1042
+ [
1043
+ this.options.primaryMeshName,
1044
+ this.options.registration.spotNodes.get(this.options.primaryMeshName)
1045
+ ]
1046
+ ]);
1042
1047
  for (const [spotNodeName, spotNode] of candidates) {
1043
1048
  if (spotNode === undefined) {
1044
1049
  continue;
@@ -1054,7 +1059,9 @@ export class ZLinkSpotNodeRuntimeManager {
1054
1059
  }
1055
1060
  }
1056
1061
  if (activation === undefined) {
1057
- throw new ZLinkConfigurationException('Entry Spot actor packet dispatch requires an Entry Spot.');
1062
+ throw new ZLinkConfigurationException(
1063
+ 'Entry Spot actor packet dispatch requires an Entry Spot.'
1064
+ );
1058
1065
  }
1059
1066
  return await activation.dispatchActorPacket({
1060
1067
  actorId,
@@ -1114,15 +1121,16 @@ export class ZLinkSpotNodeRuntimeManager {
1114
1121
  ): Promise<ZLinkSubmitResult> {
1115
1122
  const parts = runWithOutboundFlow(
1116
1123
  this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true,
1117
- () => encodeChannelPublishEnvelopeParts(
1118
- channelName,
1119
- topic,
1120
- packetName,
1121
- event,
1122
- undefined,
1123
- this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true,
1124
- metadata
1125
- )
1124
+ () =>
1125
+ encodeChannelPublishEnvelopeParts(
1126
+ channelName,
1127
+ topic,
1128
+ packetName,
1129
+ event,
1130
+ undefined,
1131
+ this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true,
1132
+ metadata
1133
+ )
1126
1134
  );
1127
1135
  const processing = publisher.publishAsync(channelName, topic, parts, undefined, undefined);
1128
1136
  void Promise.resolve(processing).catch(() => undefined);
@@ -1137,7 +1145,15 @@ export class ZLinkSpotNodeRuntimeManager {
1137
1145
  event: Message,
1138
1146
  metadata: ReadonlyMap<string, string> = EMPTY_SPOT_METADATA
1139
1147
  ): ZLinkSubmitResult {
1140
- return this.publishWithFlags(meshName, channelName, topic, packetName, event, ZLINK_SEND_DONT_WAIT, metadata);
1148
+ return this.publishWithFlags(
1149
+ meshName,
1150
+ channelName,
1151
+ topic,
1152
+ packetName,
1153
+ event,
1154
+ ZLINK_SEND_DONT_WAIT,
1155
+ metadata
1156
+ );
1141
1157
  }
1142
1158
 
1143
1159
  private publishWithFlags(
@@ -1158,18 +1174,20 @@ export class ZLinkSpotNodeRuntimeManager {
1158
1174
  }
1159
1175
  const parts = runWithOutboundFlow(
1160
1176
  this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true,
1161
- () => encodeChannelPublishEnvelopeParts(
1162
- channelName,
1163
- topic,
1164
- packetName,
1165
- event,
1166
- undefined,
1167
- this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true,
1168
- metadata
1169
- )
1177
+ () =>
1178
+ encodeChannelPublishEnvelopeParts(
1179
+ channelName,
1180
+ topic,
1181
+ packetName,
1182
+ event,
1183
+ undefined,
1184
+ this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true,
1185
+ metadata
1186
+ )
1170
1187
  );
1171
1188
  try {
1172
- publisher.publish(channelName, topic, parts, { flags });
1189
+ const processing = publisher.publish(channelName, topic, parts, { flags });
1190
+ void Promise.resolve(processing).catch(() => undefined);
1173
1191
  return { status: ZLinkSubmitStatus.Submitted };
1174
1192
  } catch (error) {
1175
1193
  if (isZLinkBackendResultError(error) && error.operation === 'submit') {
@@ -1178,7 +1196,6 @@ export class ZLinkSpotNodeRuntimeManager {
1178
1196
  throw error;
1179
1197
  }
1180
1198
  }
1181
-
1182
1199
  }
1183
1200
 
1184
1201
  function runtimeShutdownError(): ZLinkFrameworkException {
@@ -1202,7 +1219,9 @@ function resolveChannelMeshName(
1202
1219
  channelName: string
1203
1220
  ): string | undefined {
1204
1221
  const matches = [...registration.spotNodes.entries()]
1205
- .filter(([, node]) => Object.prototype.hasOwnProperty.call(node.meshChannels ?? {}, channelName))
1222
+ .filter(([, node]) =>
1223
+ Object.prototype.hasOwnProperty.call(node.meshChannels ?? {}, channelName)
1224
+ )
1206
1225
  .map(([meshName]) => meshName);
1207
1226
  return matches.length === 1 ? matches[0] : undefined;
1208
1227
  }
@@ -1224,7 +1243,9 @@ function mapPublishSubmitStatus(result: number): ZLinkSubmitStatus {
1224
1243
  case SubmitResult.InvalidHandle:
1225
1244
  return ZLinkSubmitStatus.Shutdown;
1226
1245
  default:
1227
- throw new ZLinkConfigurationException(`Logical Multicast failed with submit result '${result}'.`);
1246
+ throw new ZLinkConfigurationException(
1247
+ `Logical Multicast failed with submit result '${result}'.`
1248
+ );
1228
1249
  }
1229
1250
  }
1230
1251
 
@@ -1238,9 +1259,7 @@ function requireEntrySpotReply(result: number): void {
1238
1259
 
1239
1260
  function requirePublicRuntimeWeight(value: number, label: string): number {
1240
1261
  if (!Number.isInteger(value) || value < 0 || value > 10_000) {
1241
- throw new ZLinkConfigurationException(
1242
- `${label} must be an integer in 0..10000.`
1243
- );
1262
+ throw new ZLinkConfigurationException(`${label} must be an integer in 0..10000.`);
1244
1263
  }
1245
1264
  return value;
1246
1265
  }
@@ -1261,8 +1280,9 @@ function effectiveUserSpotRegistrations(
1261
1280
  Object.entries(registration.spotFactoryRegistrations ?? {})
1262
1281
  );
1263
1282
  const explicitImplementations = new Set(
1264
- Object.values(registration.spotFactoryRegistrations ?? {})
1265
- .map(({ implementation }) => implementation)
1283
+ Object.values(registration.spotFactoryRegistrations ?? {}).map(
1284
+ ({ implementation }) => implementation
1285
+ )
1266
1286
  );
1267
1287
  for (const implementation of registration.spotFactories ?? []) {
1268
1288
  // `spotFactories` is also retained as the runtime implementation set.
@@ -1295,23 +1315,22 @@ function effectiveActorRegistrations(
1295
1315
  const registrations = new Map<string, DescriptorFactoryRegistration>(
1296
1316
  Object.entries(registration.actorFactoryRegistrations ?? {})
1297
1317
  );
1298
- const legacy = registration.actorFactories instanceof Map
1299
- ? registration.actorFactories.keys()
1300
- : Object.keys(registration.actorFactories ?? {});
1318
+ const legacy =
1319
+ registration.actorFactories instanceof Map
1320
+ ? registration.actorFactories.keys()
1321
+ : Object.keys(registration.actorFactories ?? {});
1301
1322
  for (const stableType of legacy) {
1302
1323
  if (!registrations.has(stableType)) registrations.set(stableType, {});
1303
1324
  }
1304
1325
  return [...registrations];
1305
1326
  }
1306
1327
 
1307
- function effectiveObjectRole(
1308
- registration: ZLinkSpotNodeOptions
1309
- ): ZLinkObjectRole {
1328
+ function effectiveObjectRole(registration: ZLinkSpotNodeOptions): ZLinkObjectRole {
1310
1329
  if (registration.objectRole === 'server') return ZLinkObjectRole.Server;
1311
1330
  if (registration.objectRole === 'client') return ZLinkObjectRole.Client;
1312
- return effectiveUserSpotRegistrations(registration).length > 0
1313
- || effectiveInstanceSpotRegistrations(registration).length > 0
1314
- || effectiveActorRegistrations(registration).length > 0
1331
+ return effectiveUserSpotRegistrations(registration).length > 0 ||
1332
+ effectiveInstanceSpotRegistrations(registration).length > 0 ||
1333
+ effectiveActorRegistrations(registration).length > 0
1315
1334
  ? ZLinkObjectRole.Server
1316
1335
  : ZLinkObjectRole.None;
1317
1336
  }
@@ -1327,9 +1346,7 @@ function objectCapability(
1327
1346
  stableType,
1328
1347
  policy,
1329
1348
  hasSnapshotAdapter: policy === 'snapshot',
1330
- limit: objectKind === 'actor'
1331
- ? 0
1332
- : factory.options?.stableTypeLimit ?? 0
1349
+ limit: objectKind === 'actor' ? 0 : (factory.options?.stableTypeLimit ?? 0)
1333
1350
  };
1334
1351
  }
1335
1352
 
@@ -1344,10 +1361,6 @@ function maxBigInt(left: bigint, right: bigint): bigint {
1344
1361
  return left > right ? left : right;
1345
1362
  }
1346
1363
 
1347
- function sameOwnerToken(
1348
- left: ZLinkLocationOwnerToken,
1349
- right: ZLinkLocationOwnerToken
1350
- ): boolean {
1351
- return left.ownerId === right.ownerId
1352
- && left.leaseGeneration === right.leaseGeneration;
1364
+ function sameOwnerToken(left: ZLinkLocationOwnerToken, right: ZLinkLocationOwnerToken): boolean {
1365
+ return left.ownerId === right.ownerId && left.leaseGeneration === right.leaseGeneration;
1353
1366
  }