@zlink-systems/framework 0.21.0 → 0.22.0

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