@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,8 @@
1
- import { ZLinkFrameworkInternalErrorKind, createInternalFrameworkException, internalFrameworkErrorKind } from '../framework-errors-internal';
1
+ import {
2
+ ZLinkFrameworkInternalErrorKind,
3
+ createInternalFrameworkException,
4
+ internalFrameworkErrorKind
5
+ } from '../framework-errors-internal';
2
6
  import { ZLinkBufferMessage as RuntimeMessage } from '../backend/runtime-message';
3
7
  import type {
4
8
  ActorRef,
@@ -6,10 +10,7 @@ import type {
6
10
  ZLinkRouteMessageContext,
7
11
  ZLinkSessionActor
8
12
  } from '../../contracts';
9
- import {
10
- ZLinkFrameworkException,
11
- ZLinkSpotKind
12
- } from '../../contracts';
13
+ import { ZLinkFrameworkException, ZLinkSpotKind } from '../../contracts';
13
14
  import { ZLinkConfigurationException } from '../../contracts/Configuration/ConfigurationException';
14
15
  import type { Message } from '../../contracts/Common/Message';
15
16
  import {
@@ -108,12 +109,15 @@ export class ZLinkActorPacketRelay {
108
109
  const node = options.spotNodeRuntime()?.primaryMeshNode;
109
110
  return node === undefined ? undefined : String(node.status().routingId);
110
111
  },
111
- spotRouterChannelIdForMesh: spotRouterChannelIdByMesh?.call(options.meshRouters)
112
- ?? ((meshName) => meshName)
112
+ spotRouterChannelIdForMesh:
113
+ spotRouterChannelIdByMesh?.call(options.meshRouters) ?? ((meshName) => meshName)
113
114
  });
114
115
  }
115
116
 
116
- async notifyBoundActorDisconnected(actor: ZLinkSessionActor, signal?: AbortSignal): Promise<void> {
117
+ async notifyBoundActorDisconnected(
118
+ actor: ZLinkSessionActor,
119
+ signal?: AbortSignal
120
+ ): Promise<void> {
117
121
  const state = this.options.actorManager()?.getState(actor.actorId);
118
122
  const currentRemoteBoundSessionTarget =
119
123
  state?.spotId === undefined
@@ -124,9 +128,10 @@ export class ZLinkActorPacketRelay {
124
128
  );
125
129
  const currentRemoteActorPacketTarget =
126
130
  state?.spotId === undefined ? undefined : state.remoteActorPacketTarget;
127
- const remoteTarget = currentRemoteBoundSessionTarget
128
- ?? currentRemoteActorPacketTarget
129
- ?? (state?.spotId === undefined ? undefined : this.targets.cachedTargetForActor(actor));
131
+ const remoteTarget =
132
+ currentRemoteBoundSessionTarget ??
133
+ currentRemoteActorPacketTarget ??
134
+ (state?.spotId === undefined ? undefined : this.targets.cachedTargetForActor(actor));
130
135
  if (remoteTarget !== undefined) {
131
136
  await this.notifyRemoteActorDisconnected(actor.actorId, remoteTarget, signal, actor.ref);
132
137
  return;
@@ -166,12 +171,13 @@ export class ZLinkActorPacketRelay {
166
171
 
167
172
  async notifyActorDisconnectedById(actorId: string, signal?: AbortSignal): Promise<void> {
168
173
  const state = this.options.actorManager()?.getState(actorId);
169
- const remoteTarget = state === undefined
170
- ? undefined
171
- : preferredRemoteBoundSessionTarget(
172
- state.remoteBoundSessionTarget,
173
- state.boundSessionTransferTarget
174
- ) ?? state.remoteActorPacketTarget;
174
+ const remoteTarget =
175
+ state === undefined
176
+ ? undefined
177
+ : (preferredRemoteBoundSessionTarget(
178
+ state.remoteBoundSessionTarget,
179
+ state.boundSessionTransferTarget
180
+ ) ?? state.remoteActorPacketTarget);
175
181
  if (remoteTarget !== undefined) {
176
182
  await this.notifyRemoteActorDisconnected(actorId, remoteTarget, signal);
177
183
  return;
@@ -238,8 +244,10 @@ export class ZLinkActorPacketRelay {
238
244
  );
239
245
  const messageFollowContext = relay.messageFollowContext;
240
246
  if (messageFollowContext !== undefined) {
241
- if (messageFollowContext.deadlineUnixMs !== undefined
242
- && Date.now() >= messageFollowContext.deadlineUnixMs) {
247
+ if (
248
+ messageFollowContext.deadlineUnixMs !== undefined &&
249
+ Date.now() >= messageFollowContext.deadlineUnixMs
250
+ ) {
243
251
  throw createInternalFrameworkException(
244
252
  ZLinkFrameworkInternalErrorKind.DeadlineExceeded,
245
253
  `Actor request '${relay.actorId}' exceeded its Message Follow deadline.`
@@ -248,39 +256,45 @@ export class ZLinkActorPacketRelay {
248
256
  verifyActorMessageFollowPayload(messageFollowContext, [header, body]);
249
257
  }
250
258
  const relayNodeRid = relay.actorNodeRid ?? relay.bindingActorNodeRid;
251
- const relayNodeRidHex = relay.actorNodeRid === undefined
252
- ? relay.bindingActorNodeRidHex
253
- : relay.actorNodeRidHex;
259
+ const relayNodeRidHex =
260
+ relay.actorNodeRid === undefined ? relay.bindingActorNodeRidHex : relay.actorNodeRidHex;
254
261
  const relayGeneration = relay.actorGeneration ?? relay.bindingActorGeneration;
255
- const fallbackActorRef = relayNodeRid === undefined
256
- || relayGeneration === undefined
257
- ? undefined
258
- : messageFollowContext === undefined
259
- ? {
260
- actorId: relay.actorId,
261
- objectGeneration: BigInt(relayGeneration),
262
- meshName: _routeContext.meshName,
263
- nodeRid: decodeRoutingId(relayNodeRid, relayNodeRidHex),
264
- ...(relay.bindingGeneration === undefined
265
- ? {}
266
- : { bindingGeneration: BigInt(relay.bindingGeneration) })
267
- }
268
- : attachActorMessageFollowContext({
269
- actorId: relay.actorId,
270
- objectGeneration: BigInt(relayGeneration),
271
- meshName: _routeContext.meshName,
272
- nodeRid: decodeRoutingId(relayNodeRid, relayNodeRidHex),
273
- ...(relay.bindingGeneration === undefined
274
- ? {}
275
- : { bindingGeneration: BigInt(relay.bindingGeneration) })
276
- }, messageFollowContext);
262
+ const fallbackActorRef =
263
+ relayNodeRid === undefined || relayGeneration === undefined
264
+ ? undefined
265
+ : messageFollowContext === undefined
266
+ ? {
267
+ actorId: relay.actorId,
268
+ objectGeneration: BigInt(relayGeneration),
269
+ meshName: _routeContext.meshName,
270
+ nodeRid: decodeRoutingId(relayNodeRid, relayNodeRidHex),
271
+ ...(relay.bindingGeneration === undefined
272
+ ? {}
273
+ : { bindingGeneration: BigInt(relay.bindingGeneration) })
274
+ }
275
+ : attachActorMessageFollowContext(
276
+ {
277
+ actorId: relay.actorId,
278
+ objectGeneration: BigInt(relayGeneration),
279
+ meshName: _routeContext.meshName,
280
+ nodeRid: decodeRoutingId(relayNodeRid, relayNodeRidHex),
281
+ ...(relay.bindingGeneration === undefined
282
+ ? {}
283
+ : { bindingGeneration: BigInt(relay.bindingGeneration) })
284
+ },
285
+ messageFollowContext
286
+ );
277
287
  if (frameHeader.name === ZLINK_REMOTE_ACTOR_SESSION_BIND_PACKET) {
278
288
  if (frameHeader.kind !== ZLinkStreamMessageKind.Send) {
279
289
  throw new Error('Remote actor session binding requires a send frame.');
280
290
  }
281
- const { sessionNodeRid, sessionRid } = decodeRemoteActorSessionBinding(messageToBytes(body));
291
+ const { sessionNodeRid, sessionRid } = decodeRemoteActorSessionBinding(
292
+ messageToBytes(body)
293
+ );
282
294
  if (!routingIdsEqual(sessionNodeRid, _routeContext.sourceNodeRid)) {
283
- throw new Error('Remote actor session binding source did not match the declared session node.');
295
+ throw new Error(
296
+ 'Remote actor session binding source did not match the declared session node.'
297
+ );
284
298
  }
285
299
  const state = this.options.actorManager()?.getState(relay.actorId);
286
300
  const actorRef = state?.nativeActorRef;
@@ -290,34 +304,45 @@ export class ZLinkActorPacketRelay {
290
304
  if (this.requireSpotNodeRuntime().primaryMeshNode === undefined) {
291
305
  throw new Error('MeshNode actor runtime is not started.');
292
306
  }
293
- const target = relay.routerChannelId === undefined
294
- ? this.options.meshRouters.remoteBoundSessionTargetForSource(sessionNodeRid)
295
- : {
296
- routerChannelId: relay.routerChannelId,
297
- targetNodeRid: sessionNodeRid,
298
- spotId: sessionNodeRid
299
- };
307
+ const target =
308
+ relay.routerChannelId === undefined
309
+ ? this.options.meshRouters.remoteBoundSessionTargetForSource(sessionNodeRid)
310
+ : {
311
+ routerChannelId: relay.routerChannelId,
312
+ targetNodeRid: sessionNodeRid,
313
+ spotId: sessionNodeRid
314
+ };
300
315
  if (target === undefined) {
301
316
  throw new Error('Remote actor session binding did not declare a return router.');
302
317
  }
303
- const bindingGeneration = (fallbackActorRef as (ActorRef & {
304
- readonly bindingGeneration?: bigint;
305
- }) | undefined)?.bindingGeneration;
306
- const refreshedTarget = mergeRemoteBoundSessionTarget({
307
- ...target,
308
- sessionNodeRid,
309
- sessionRid,
310
- ...(bindingGeneration === undefined ? {} : { bindingGeneration })
311
- }, preferredRemoteBoundSessionTarget(
312
- state.remoteBoundSessionTarget,
313
- state.boundSessionTransferTarget
314
- ));
318
+ const bindingGeneration = (
319
+ fallbackActorRef as
320
+ | (ActorRef & {
321
+ readonly bindingGeneration?: bigint;
322
+ })
323
+ | undefined
324
+ )?.bindingGeneration;
325
+ const refreshedTarget = mergeRemoteBoundSessionTarget(
326
+ {
327
+ ...target,
328
+ sessionNodeRid,
329
+ sessionRid,
330
+ ...(bindingGeneration === undefined ? {} : { bindingGeneration })
331
+ },
332
+ preferredRemoteBoundSessionTarget(
333
+ state.remoteBoundSessionTarget,
334
+ state.boundSessionTransferTarget
335
+ )
336
+ );
315
337
  state.setRemoteBoundSessionTarget(refreshedTarget);
316
338
  return { ok: true, response: { acknowledged: true } };
317
339
  }
318
340
  if (frameHeader.name === ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET) {
319
341
  this.requireCurrentRemoteBinding(relay, _routeContext);
320
- this.options.actorManager()?.getState(relay.actorId)?.setRemoteBoundSessionTarget(undefined);
342
+ this.options
343
+ .actorManager()
344
+ ?.getState(relay.actorId)
345
+ ?.setRemoteBoundSessionTarget(undefined);
321
346
  await this.notifyLocalActorDisconnectedById(relay.actorId);
322
347
  return {
323
348
  ok: true,
@@ -331,22 +356,23 @@ export class ZLinkActorPacketRelay {
331
356
  }
332
357
  const state = this.options.actorManager()?.getState(relay.actorId);
333
358
  if (frameHeader.kind === ZLinkStreamMessageKind.Send) {
334
- const dispatch = state?.spotId === undefined
335
- ? this.requireSpotNodeRuntime().dispatchEntryActorPacket(
336
- relay.actorId,
337
- [header, body],
338
- false,
339
- remoteBoundSessionTarget,
340
- fallbackActorRef
341
- )
342
- : this.requireSpotManager().dispatchRoutedActorPacket(
343
- state.spotId,
344
- relay.actorId,
345
- [header, body],
346
- false,
347
- remoteBoundSessionTarget,
348
- fallbackActorRef
349
- );
359
+ const dispatch =
360
+ state?.spotId === undefined
361
+ ? this.requireSpotNodeRuntime().dispatchEntryActorPacket(
362
+ relay.actorId,
363
+ [header, body],
364
+ false,
365
+ remoteBoundSessionTarget,
366
+ fallbackActorRef
367
+ )
368
+ : this.requireSpotManager().dispatchRoutedActorPacket(
369
+ state.spotId,
370
+ relay.actorId,
371
+ [header, body],
372
+ false,
373
+ remoteBoundSessionTarget,
374
+ fallbackActorRef
375
+ );
350
376
  // Spec 05 §1.3: a one-way Session Actor relay completes at relay
351
377
  // queue admission, not after the remote application turn. In
352
378
  // particular, a handler may register a deferred Join whose relocation
@@ -362,10 +388,9 @@ export class ZLinkActorPacketRelay {
362
388
  try {
363
389
  await dispatch;
364
390
  } catch (error) {
365
- this.options.errorSink().reportRuntimeTaskException(
366
- 'remote actor packet relay',
367
- error
368
- );
391
+ this.options
392
+ .errorSink()
393
+ .reportRuntimeTaskException('remote actor packet relay', error);
369
394
  } finally {
370
395
  header.close();
371
396
  body.close();
@@ -380,67 +405,69 @@ export class ZLinkActorPacketRelay {
380
405
  };
381
406
  }
382
407
  if (
383
- frameHeader.kind === ZLinkStreamMessageKind.Request
384
- && frameHeader.requestSeq !== undefined
385
- && relay.returnResponse !== true
408
+ frameHeader.kind === ZLinkStreamMessageKind.Request &&
409
+ frameHeader.requestSeq !== undefined &&
410
+ relay.returnResponse !== true
386
411
  ) {
387
- const dispatch = state?.spotId === undefined
388
- ? this.requireSpotNodeRuntime().dispatchEntryActorPacket(
389
- relay.actorId,
390
- [header, body],
391
- false,
392
- remoteBoundSessionTarget,
393
- fallbackActorRef
394
- )
395
- : this.requireSpotManager().dispatchRoutedActorPacket(
396
- state.spotId,
397
- relay.actorId,
398
- [header, body],
399
- false,
400
- remoteBoundSessionTarget,
401
- fallbackActorRef
402
- );
403
- closeFrameMessages = false;
404
- const deferredPacketName = frameHeader.name;
405
- const deferredRequestSeq = frameHeader.requestSeq;
406
- const deferredMetadata = frameHeader.metadata;
407
- void dispatch.catch(async (error) => {
408
- // Spec 32 §5 — an accepted Request must end in exactly one
409
- // terminal completion. deferredResponse already told the source
410
- // the reply will arrive on the bound-session route, so a routed
411
- // dispatch REJECTED BEFORE DISPATCH (a closing/missing Spot
412
- // throws ZLinkConfigurationException from activation resolution)
413
- // must send its error there instead of only sinking it. Failures
414
- // past that boundary already produce their own terminal through
415
- // the inner actorErrorSender path — also sending here would emit
416
- // a duplicate terminal for the same requestSeq.
417
- if (
418
- error instanceof ZLinkConfigurationException
419
- && this.options.actorErrorSender !== undefined
420
- ) {
421
- try {
422
- await this.options.actorErrorSender(
412
+ const dispatch =
413
+ state?.spotId === undefined
414
+ ? this.requireSpotNodeRuntime().dispatchEntryActorPacket(
423
415
  relay.actorId,
424
- deferredPacketName,
425
- deferredRequestSeq,
426
- error,
427
- deferredMetadata,
416
+ [header, body],
417
+ false,
418
+ remoteBoundSessionTarget,
419
+ fallbackActorRef
420
+ )
421
+ : this.requireSpotManager().dispatchRoutedActorPacket(
422
+ state.spotId,
423
+ relay.actorId,
424
+ [header, body],
425
+ false,
428
426
  remoteBoundSessionTarget,
429
427
  fallbackActorRef
430
428
  );
431
- return;
432
- } catch (sendFailure) {
433
- this.options.errorSink().reportRuntimeTaskException(
434
- 'remote actor packet relay error reply',
435
- sendFailure
436
- );
429
+ closeFrameMessages = false;
430
+ const deferredPacketName = frameHeader.name;
431
+ const deferredRequestSeq = frameHeader.requestSeq;
432
+ const deferredMetadata = frameHeader.metadata;
433
+ void dispatch
434
+ .catch(async (error) => {
435
+ // Spec 32 §5 — an accepted Request must end in exactly one
436
+ // terminal completion. deferredResponse already told the source
437
+ // the reply will arrive on the bound-session route, so a routed
438
+ // dispatch REJECTED BEFORE DISPATCH (a closing/missing Spot
439
+ // throws ZLinkConfigurationException from activation resolution)
440
+ // must send its error there instead of only sinking it. Failures
441
+ // past that boundary already produce their own terminal through
442
+ // the inner actorErrorSender path — also sending here would emit
443
+ // a duplicate terminal for the same requestSeq.
444
+ if (
445
+ error instanceof ZLinkConfigurationException &&
446
+ this.options.actorErrorSender !== undefined
447
+ ) {
448
+ try {
449
+ await this.options.actorErrorSender(
450
+ relay.actorId,
451
+ deferredPacketName,
452
+ deferredRequestSeq,
453
+ error,
454
+ deferredMetadata,
455
+ remoteBoundSessionTarget,
456
+ fallbackActorRef
457
+ );
458
+ return;
459
+ } catch (sendFailure) {
460
+ this.options
461
+ .errorSink()
462
+ .reportRuntimeTaskException('remote actor packet relay error reply', sendFailure);
463
+ }
437
464
  }
438
- }
439
- this.options.errorSink().reportRuntimeTaskException('remote actor packet relay', error);
440
- }).finally(() => {
441
- header.close();
442
- body.close();
443
- });
465
+ this.options.errorSink().reportRuntimeTaskException('remote actor packet relay', error);
466
+ })
467
+ .finally(() => {
468
+ header.close();
469
+ body.close();
470
+ });
444
471
  return {
445
472
  ok: true,
446
473
  deferredResponse: true,
@@ -449,22 +476,23 @@ export class ZLinkActorPacketRelay {
449
476
  )
450
477
  };
451
478
  }
452
- const response = state?.spotId === undefined
453
- ? await this.requireSpotNodeRuntime().dispatchEntryActorPacket(
454
- relay.actorId,
455
- [header, body],
456
- relay.returnResponse === true,
457
- remoteBoundSessionTarget,
458
- fallbackActorRef
459
- )
460
- : await this.requireSpotManager().dispatchRoutedActorPacket(
461
- state.spotId,
462
- relay.actorId,
463
- [header, body],
464
- relay.returnResponse === true,
465
- remoteBoundSessionTarget,
466
- fallbackActorRef
467
- );
479
+ const response =
480
+ state?.spotId === undefined
481
+ ? await this.requireSpotNodeRuntime().dispatchEntryActorPacket(
482
+ relay.actorId,
483
+ [header, body],
484
+ relay.returnResponse === true,
485
+ remoteBoundSessionTarget,
486
+ fallbackActorRef
487
+ )
488
+ : await this.requireSpotManager().dispatchRoutedActorPacket(
489
+ state.spotId,
490
+ relay.actorId,
491
+ [header, body],
492
+ relay.returnResponse === true,
493
+ remoteBoundSessionTarget,
494
+ fallbackActorRef
495
+ );
468
496
  return {
469
497
  ok: true,
470
498
  response,
@@ -476,9 +504,10 @@ export class ZLinkActorPacketRelay {
476
504
  return {
477
505
  ok: false,
478
506
  error: error instanceof Error ? error.message : String(error),
479
- errorKind: error instanceof ZLinkFrameworkException
480
- ? internalFrameworkErrorKind(error)
481
- : ZLinkFrameworkInternalErrorKind.RequestFailed
507
+ errorKind:
508
+ error instanceof ZLinkFrameworkException
509
+ ? internalFrameworkErrorKind(error)
510
+ : ZLinkFrameworkInternalErrorKind.RequestFailed
482
511
  };
483
512
  } finally {
484
513
  if (closeFrameMessages) {
@@ -510,15 +539,15 @@ export class ZLinkActorPacketRelay {
510
539
  return await this.relayLocalActorPacket(actor, frameHeader, payload, signal);
511
540
  } catch (error) {
512
541
  if (
513
- !(error instanceof Error
514
- && error.message.includes('no complete Ready authority fence'))
515
- || performance.now() >= fenceRetryDeadlineMs
542
+ !(
543
+ error instanceof Error && error.message.includes('no complete Ready authority fence')
544
+ ) ||
545
+ performance.now() >= fenceRetryDeadlineMs
516
546
  ) {
517
547
  throw error;
518
548
  }
519
549
  this.targets.clear(actor.actorId);
520
- this.options.actorManager()?.getState(actor.actorId)
521
- ?.setRemoteActorPacketTarget(undefined);
550
+ this.options.actorManager()?.getState(actor.actorId)?.setRemoteActorPacketTarget(undefined);
522
551
  await new Promise<void>((resolve) => setTimeout(resolve, 25));
523
552
  }
524
553
  }
@@ -571,7 +600,10 @@ export class ZLinkActorPacketRelay {
571
600
  (parts) => JSON.parse(parts[0]?.getString('utf8') ?? '{}'),
572
601
  signal
573
602
  );
574
- if (reply.ok === false || (reply.response?.acknowledged !== true && reply.acknowledged !== true)) {
603
+ if (
604
+ reply.ok === false ||
605
+ (reply.response?.acknowledged !== true && reply.acknowledged !== true)
606
+ ) {
575
607
  // An {ok:false} (or unacknowledged) reply here is an immediate remote
576
608
  // rejection — the transport wait itself throws on timeout — so spec 32
577
609
  // reserves DeadlineExceeded for the deadline path and this reply
@@ -579,9 +611,10 @@ export class ZLinkActorPacketRelay {
579
611
  // reply's errorKind when it carries a valid framework kind, else
580
612
  // RequestFailed, matching how other acknowledged relay replies map
581
613
  // {ok:false} (actorRelayError / remoteRelayErrorKind).
582
- const remoteKind = Object.values(ZLinkFrameworkInternalErrorKind)
583
- .includes(reply.errorKind as ZLinkFrameworkInternalErrorKind)
584
- ? reply.errorKind as ZLinkFrameworkInternalErrorKind
614
+ const remoteKind = Object.values(ZLinkFrameworkInternalErrorKind).includes(
615
+ reply.errorKind as ZLinkFrameworkInternalErrorKind
616
+ )
617
+ ? (reply.errorKind as ZLinkFrameworkInternalErrorKind)
585
618
  : ZLinkFrameworkInternalErrorKind.RequestFailed;
586
619
  throw createInternalFrameworkException(
587
620
  remoteKind,
@@ -598,25 +631,25 @@ export class ZLinkActorPacketRelay {
598
631
  delayMs: number
599
632
  ): Promise<void> {
600
633
  try {
601
- await this.options.routeTransport.sendToSpot(
602
- target,
603
- request,
604
- { packetName: ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET }
605
- );
634
+ await this.options.routeTransport.sendToSpot(target, request, {
635
+ packetName: ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET
636
+ });
606
637
  } catch (error) {
607
638
  if (performance.now() >= deadline) {
608
639
  // Spec 32-framework-error-model: DeadlineExceeded(7). Retry
609
640
  // exhaustion on the one-way bind send remains diagnostics-only but
610
641
  // the caller waits for its bounded submission terminal so later
611
642
  // application relay cannot overtake it.
612
- this.options.errorSink().reportRuntimeTaskException(
613
- 'remote session binding send',
614
- createInternalFrameworkException(
615
- ZLinkFrameworkInternalErrorKind.DeadlineExceeded,
616
- 'Remote actor session binding send retries exceeded their deadline.',
617
- error
618
- )
619
- );
643
+ this.options
644
+ .errorSink()
645
+ .reportRuntimeTaskException(
646
+ 'remote session binding send',
647
+ createInternalFrameworkException(
648
+ ZLinkFrameworkInternalErrorKind.DeadlineExceeded,
649
+ 'Remote actor session binding send retries exceeded their deadline.',
650
+ error
651
+ )
652
+ );
620
653
  return;
621
654
  }
622
655
  await new Promise<void>((resolve) => setTimeout(resolve, delayMs));
@@ -641,20 +674,20 @@ export class ZLinkActorPacketRelay {
641
674
  const localNodeRid = localNode === undefined ? undefined : String(localNode.status().routingId);
642
675
  const storedRoute = await streamRuntime.sessionRouteFence(actor.actorId);
643
676
  const aggregateOwner = actorSessionBindingRuntimeOwnerIfRegistered(streamRuntime);
644
- const aggregateRoute = aggregateOwner === undefined
645
- ? undefined
646
- : await aggregateOwner.committedRoute(actor.actorId);
677
+ const aggregateRoute =
678
+ aggregateOwner === undefined ? undefined : await aggregateOwner.committedRoute(actor.actorId);
647
679
  const storedActorRef = aggregateRoute?.actor ?? storedRoute?.actor ?? actor.ref;
648
680
  const capturedTenureKey = this.targets.tenureKeyForActorRef(actor.actorId, storedActorRef);
649
681
  if (
650
- localNodeRid !== undefined
651
- && routingIdsEqual(storedActorRef.nodeRid, localNodeRid)
652
- && this.options.actorManager()?.getState(actor.actorId)?.actor !== undefined
682
+ localNodeRid !== undefined &&
683
+ routingIdsEqual(storedActorRef.nodeRid, localNodeRid) &&
684
+ this.options.actorManager()?.getState(actor.actorId)?.actor !== undefined
653
685
  ) {
654
686
  return false;
655
687
  }
656
- const remoteTarget = this.options.actorManager()?.getState(actor.actorId)?.remoteActorPacketTarget
657
- ?? this.targets.cachedTargetForActor(actor);
688
+ const remoteTarget =
689
+ this.options.actorManager()?.getState(actor.actorId)?.remoteActorPacketTarget ??
690
+ this.targets.cachedTargetForActor(actor);
658
691
  if (remoteTarget === undefined) {
659
692
  return false;
660
693
  }
@@ -670,27 +703,27 @@ export class ZLinkActorPacketRelay {
670
703
  let request: Record<string, unknown>;
671
704
  try {
672
705
  const authority = aggregateRoute?.authorityFence;
673
- const messageFollowContext = authority?.ownerId === undefined
674
- || authority.ownerNodeGeneration === undefined
675
- ? undefined
676
- : createInitialActorMessageFollowContext(
677
- {
678
- meshName: storedActorRef.meshName,
679
- actorRef: storedActorRef,
680
- actorType: authority.actorType ?? '',
681
- ownerNodeGeneration: authority.ownerNodeGeneration,
682
- ownerId: authority.ownerId,
683
- ownerLeaseGeneration: authority.ownerLeaseGeneration,
684
- authorityOwnerGeneration: authority.authorityOwnerGeneration,
685
- authorityStoreVersion: authority.authorityStoreVersion ?? ''
686
- },
687
- [header, payload],
688
- returnResponse,
689
- undefined,
690
- isValidMessageFollowId(frameHeader.correlationId)
691
- ? frameHeader.correlationId
692
- : createMessageFollowId()
693
- );
706
+ const messageFollowContext =
707
+ authority?.ownerId === undefined || authority.ownerNodeGeneration === undefined
708
+ ? undefined
709
+ : createInitialActorMessageFollowContext(
710
+ {
711
+ meshName: storedActorRef.meshName,
712
+ actorRef: storedActorRef,
713
+ actorType: authority.actorType ?? '',
714
+ ownerNodeGeneration: authority.ownerNodeGeneration,
715
+ ownerId: authority.ownerId,
716
+ ownerLeaseGeneration: authority.ownerLeaseGeneration,
717
+ authorityOwnerGeneration: authority.authorityOwnerGeneration,
718
+ authorityStoreVersion: authority.authorityStoreVersion ?? ''
719
+ },
720
+ [header, payload],
721
+ returnResponse,
722
+ undefined,
723
+ isValidMessageFollowId(frameHeader.correlationId)
724
+ ? frameHeader.correlationId
725
+ : createMessageFollowId()
726
+ );
694
727
  request = encodeRemoteActorPacketRelayPayload({
695
728
  actorId: actor.actorId,
696
729
  routerChannelId: remoteTarget.routerChannelId,
@@ -714,9 +747,9 @@ export class ZLinkActorPacketRelay {
714
747
  spotKind: remoteTarget.spotKind ?? ZLinkSpotKind.User
715
748
  };
716
749
  if (
717
- (frameHeader.kind === ZLinkStreamMessageKind.Send || frameHeader.requestSeq === undefined)
718
- && remoteAddress.spotKind === ZLinkSpotKind.Entry
719
- && this.options.routeTransport.submit !== undefined
750
+ (frameHeader.kind === ZLinkStreamMessageKind.Send || frameHeader.requestSeq === undefined) &&
751
+ remoteAddress.spotKind === ZLinkSpotKind.Entry &&
752
+ this.options.routeTransport.submit !== undefined
720
753
  ) {
721
754
  const result = await this.options.routeTransport.submit(
722
755
  remoteAddress.routerChannelId,
@@ -758,18 +791,17 @@ export class ZLinkActorPacketRelay {
758
791
  );
759
792
  const actorPacketTarget = this.targets.decodeFromWire(reply.actorPacketTarget);
760
793
  const currentStoredRoute = await streamRuntime.sessionRouteFence(actor.actorId);
761
- const currentAggregateRoute = aggregateOwner === undefined
762
- ? undefined
763
- : await aggregateOwner.committedRoute(actor.actorId);
794
+ const currentAggregateRoute =
795
+ aggregateOwner === undefined ? undefined : await aggregateOwner.committedRoute(actor.actorId);
764
796
  const currentActorRef = currentAggregateRoute?.actor ?? currentStoredRoute?.actor ?? actor.ref;
765
- const currentTenure = this.targets.tenureKeyForActorRef(actor.actorId, currentActorRef)
766
- === capturedTenureKey;
797
+ const currentTenure =
798
+ this.targets.tenureKeyForActorRef(actor.actorId, currentActorRef) === capturedTenureKey;
767
799
  if (
768
- currentTenure
769
- && this.targets.tenureKeyForActor(actor) === capturedTenureKey
770
- &&
800
+ currentTenure &&
801
+ this.targets.tenureKeyForActor(actor) === capturedTenureKey &&
771
802
  actorPacketTarget !== undefined &&
772
- (localNodeRid === undefined || !routingIdsEqual(actorPacketTarget.targetNodeRid, localNodeRid))
803
+ (localNodeRid === undefined ||
804
+ !routingIdsEqual(actorPacketTarget.targetNodeRid, localNodeRid))
773
805
  ) {
774
806
  this.targets.rememberActorTarget(actor, actorPacketTarget, capturedTenureKey);
775
807
  } else if (currentTenure && reply.ok !== false) {
@@ -788,7 +820,9 @@ export class ZLinkActorPacketRelay {
788
820
  streamMetadataMap(frameHeader.metadata)
789
821
  );
790
822
  if (!sent) {
791
- throw new Error(`Actor '${actor.actorId}' local bound session error response route is not ready.`);
823
+ throw new Error(
824
+ `Actor '${actor.actorId}' local bound session error response route is not ready.`
825
+ );
792
826
  }
793
827
  return true;
794
828
  }
@@ -813,7 +847,7 @@ export class ZLinkActorPacketRelay {
813
847
  bindingActorRef?: ActorRef
814
848
  ): Promise<void> {
815
849
  const spotKind: ZLinkSpotKind | undefined =
816
- 'spotKind' in remoteTarget ? remoteTarget.spotKind as ZLinkSpotKind | undefined : undefined;
850
+ 'spotKind' in remoteTarget ? (remoteTarget.spotKind as ZLinkSpotKind | undefined) : undefined;
817
851
  const header: ZLinkStreamFrameHeader = {
818
852
  kind: ZLinkStreamMessageKind.Send,
819
853
  codec: ZLinkStreamCodec.Raw,
@@ -860,19 +894,20 @@ export class ZLinkActorPacketRelay {
860
894
  routeContext: ZLinkRouteMessageContext
861
895
  ): void {
862
896
  const state = this.options.actorManager()?.getState(relay.actorId);
863
- const current = state === undefined
864
- ? undefined
865
- : preferredRemoteBoundSessionTarget(
866
- state.remoteBoundSessionTarget,
867
- state.boundSessionTransferTarget
868
- );
897
+ const current =
898
+ state === undefined
899
+ ? undefined
900
+ : preferredRemoteBoundSessionTarget(
901
+ state.remoteBoundSessionTarget,
902
+ state.boundSessionTransferTarget
903
+ );
869
904
  if (
870
- current === undefined
871
- || current.sessionNodeRid === undefined
872
- || !routingIdsEqual(current.sessionNodeRid, routeContext.sourceNodeRid)
873
- || current.bindingGeneration === undefined
874
- || relay.bindingGeneration === undefined
875
- || current.bindingGeneration !== BigInt(relay.bindingGeneration)
905
+ current === undefined ||
906
+ current.sessionNodeRid === undefined ||
907
+ !routingIdsEqual(current.sessionNodeRid, routeContext.sourceNodeRid) ||
908
+ current.bindingGeneration === undefined ||
909
+ relay.bindingGeneration === undefined ||
910
+ current.bindingGeneration !== BigInt(relay.bindingGeneration)
876
911
  ) {
877
912
  throw createInternalFrameworkException(
878
913
  ZLinkFrameworkInternalErrorKind.ActorSessionNotBound,
@@ -924,7 +959,8 @@ export class ZLinkActorPacketRelay {
924
959
  void signal;
925
960
  const state = this.options.actorManager()?.getState(actor.actorId);
926
961
  const spotId = state?.spotId as RoutingId | undefined;
927
- const hasActiveSpot = spotId !== undefined && this.options.spotManager()?.hasActiveSpot(spotId) === true;
962
+ const hasActiveSpot =
963
+ spotId !== undefined && this.options.spotManager()?.hasActiveSpot(spotId) === true;
928
964
  if (!hasActiveSpot) {
929
965
  return false;
930
966
  }
@@ -938,15 +974,17 @@ export class ZLinkActorPacketRelay {
938
974
  ) {
939
975
  return false;
940
976
  }
941
- const responseTarget = await this.options.streamBindingRuntime().captureBoundSessionResponseTarget(actor);
977
+ const responseTarget = await this.options
978
+ .streamBindingRuntime()
979
+ .captureBoundSessionResponseTarget(actor);
942
980
  const encodedHeader = encodeStreamHeader(frameHeader);
943
981
  // encodeStreamHeader returns a fresh, unaliased array; view it without re-copying.
944
982
  const header = RuntimeMessage.fromOwned(
945
983
  Buffer.from(encodedHeader.buffer, encodedHeader.byteOffset, encodedHeader.byteLength)
946
984
  );
947
985
  const body = RuntimeMessage.fromOwned(Buffer.from(messageToBytes(payload)));
948
- const returnResponse = frameHeader.kind === ZLinkStreamMessageKind.Request
949
- && frameHeader.requestSeq !== undefined;
986
+ const returnResponse =
987
+ frameHeader.kind === ZLinkStreamMessageKind.Request && frameHeader.requestSeq !== undefined;
950
988
  try {
951
989
  this.options.detachedTaskRunner.runDetached('local actor packet relay', async () => {
952
990
  try {
@@ -968,7 +1006,9 @@ export class ZLinkActorPacketRelay {
968
1006
  streamMetadataMap(frameHeader.metadata)
969
1007
  );
970
1008
  if (!sent) {
971
- throw new Error(`Actor '${actor.actorId}' local bound session response route is not ready.`);
1009
+ throw new Error(
1010
+ `Actor '${actor.actorId}' local bound session response route is not ready.`
1011
+ );
972
1012
  }
973
1013
  } catch (error) {
974
1014
  if (!returnResponse) {
@@ -1007,14 +1047,9 @@ export class ZLinkActorPacketRelay {
1007
1047
  metadata: ReadonlyMap<string, string>
1008
1048
  ): Promise<boolean> {
1009
1049
  return target === undefined
1010
- ? await this.options.streamBindingRuntime().sendLocalBoundSessionResponse(
1011
- actorId,
1012
- packetName,
1013
- requestSeq,
1014
- response,
1015
- metadata,
1016
- false
1017
- )
1050
+ ? await this.options
1051
+ .streamBindingRuntime()
1052
+ .sendLocalBoundSessionResponse(actorId, packetName, requestSeq, response, metadata, false)
1018
1053
  : await target.sendResponse(packetName, requestSeq, response, metadata);
1019
1054
  }
1020
1055
 
@@ -1027,13 +1062,9 @@ export class ZLinkActorPacketRelay {
1027
1062
  metadata: ReadonlyMap<string, string>
1028
1063
  ): Promise<boolean> {
1029
1064
  return target === undefined
1030
- ? await this.options.streamBindingRuntime().sendLocalBoundSessionError(
1031
- actorId,
1032
- packetName,
1033
- requestSeq,
1034
- error,
1035
- metadata
1036
- )
1065
+ ? await this.options
1066
+ .streamBindingRuntime()
1067
+ .sendLocalBoundSessionError(actorId, packetName, requestSeq, error, metadata)
1037
1068
  : await target.sendError(packetName, requestSeq, error, metadata);
1038
1069
  }
1039
1070
 
@@ -1055,9 +1086,7 @@ export class ZLinkActorPacketRelay {
1055
1086
  }
1056
1087
 
1057
1088
  function isValidMessageFollowId(value: string | undefined): value is string {
1058
- return value !== undefined
1059
- && /^[0-9a-f]{32}$/.test(value)
1060
- && !/^0+$/.test(value);
1089
+ return value !== undefined && /^[0-9a-f]{32}$/.test(value) && !/^0+$/.test(value);
1061
1090
  }
1062
1091
 
1063
1092
  /** Reuses the target when it already carries a spot kind instead of spreading a copy per call. */
@@ -1066,5 +1095,5 @@ function withDefaultSpotKind(
1066
1095
  ): ZLinkRemoteActorPacketTarget & { readonly spotKind: ZLinkSpotKind } {
1067
1096
  return target.spotKind === undefined
1068
1097
  ? { ...target, spotKind: ZLinkSpotKind.Entry }
1069
- : target as ZLinkRemoteActorPacketTarget & { readonly spotKind: ZLinkSpotKind };
1098
+ : (target as ZLinkRemoteActorPacketTarget & { readonly spotKind: ZLinkSpotKind });
1070
1099
  }