@zlink-systems/framework 0.21.0 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (516) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Common/ZLinkMessage.js +5 -5
  3. package/dist/contracts/Configuration/CodecContentType.js +5 -7
  4. package/dist/contracts/Configuration/DiagnosticsValidation.js +1 -6
  5. package/dist/contracts/Configuration/EndpointNotation.js +4 -8
  6. package/dist/contracts/Configuration/Registration.js +14 -11
  7. package/dist/contracts/Configuration/RegistrationBuilders.js +32 -25
  8. package/dist/contracts/Configuration/RegistrationNormalizers.js +25 -26
  9. package/dist/contracts/Configuration/RegistrationValidators.js +36 -38
  10. package/dist/contracts/Configuration/SendTimeoutValidation.js +4 -4
  11. package/dist/contracts/Configuration/TimerRegistrationValidator.js +7 -7
  12. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -0
  13. package/dist/contracts/Handlers/JsonContract.js +23 -11
  14. package/dist/contracts/Spots/SpotKind.js +16 -8
  15. package/dist/contracts/Streams/IZLinkSession.d.ts +2 -1
  16. package/dist/location-store-integration.js +16 -16
  17. package/dist/nest-integration.js +17 -11
  18. package/dist/runtime/abort.js +9 -5
  19. package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
  20. package/dist/runtime/actors/actor-authority-publication.js +18 -17
  21. package/dist/runtime/actors/actor-client.js +83 -63
  22. package/dist/runtime/actors/actor-context.js +28 -22
  23. package/dist/runtime/actors/actor-creation.js +4 -3
  24. package/dist/runtime/actors/actor-handoff.js +89 -92
  25. package/dist/runtime/actors/actor-join-deferred-scope.d.ts +0 -1
  26. package/dist/runtime/actors/actor-join-deferred-scope.js +0 -18
  27. package/dist/runtime/actors/actor-local-native-join.js +18 -19
  28. package/dist/runtime/actors/actor-mailbox.js +1 -1
  29. package/dist/runtime/actors/actor-message-follow-context.js +24 -21
  30. package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
  31. package/dist/runtime/actors/actor-remote-joiner.js +20 -17
  32. package/dist/runtime/actors/actor-remote-wire.js +6 -7
  33. package/dist/runtime/actors/actor-runtime-state.js +87 -81
  34. package/dist/runtime/actors/actor-transfer-registry.js +3 -5
  35. package/dist/runtime/actors/bound-session-wire.js +14 -9
  36. package/dist/runtime/actors/deferred-join-accepted-journal.js +160 -130
  37. package/dist/runtime/actors/index.js +2 -5
  38. package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
  39. package/dist/runtime/actors/post-commit-actor-location.js +1 -1
  40. package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
  41. package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
  42. package/dist/runtime/admission.js +2 -6
  43. package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
  44. package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
  45. package/dist/runtime/backend/contracts/index.d.ts +1 -0
  46. package/dist/runtime/backend/mesh-completion-table.js +1 -3
  47. package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
  48. package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
  49. package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
  50. package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
  51. package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
  52. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +3 -0
  53. package/dist/runtime/backend/node/node-raw-mesh-backend.js +134 -118
  54. package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
  55. package/dist/runtime/backend/runtime-message.js +3 -3
  56. package/dist/runtime/backend/runtime-values.d.ts +2 -2
  57. package/dist/runtime/backend/runtime-values.js +4 -5
  58. package/dist/runtime/channels/channel-clients.js +27 -24
  59. package/dist/runtime/channels/channel-dispatch-pipeline.js +12 -20
  60. package/dist/runtime/channels/channel-dispatch-services.js +7 -4
  61. package/dist/runtime/channels/channel-dispatchers.js +9 -9
  62. package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
  63. package/dist/runtime/channels/channel-envelope.js +83 -47
  64. package/dist/runtime/channels/channel-outbound-operations.js +8 -8
  65. package/dist/runtime/channels/channel-receive-loops.js +20 -22
  66. package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
  67. package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
  68. package/dist/runtime/channels/channel-runtime-manager.js +18 -9
  69. package/dist/runtime/channels/channel-socket-registry.js +126 -123
  70. package/dist/runtime/channels/channel-transports.js +46 -42
  71. package/dist/runtime/channels/client-server-location-runtime.js +32 -40
  72. package/dist/runtime/channels/client-server-service-wire.js +29 -22
  73. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -0
  74. package/dist/runtime/channels/dispatch-error-reporter.js +9 -39
  75. package/dist/runtime/channels/fanout-location-runtime.js +34 -47
  76. package/dist/runtime/channels/fanout-service-wire.js +3 -5
  77. package/dist/runtime/channels/local-spot-route-transport.js +7 -1
  78. package/dist/runtime/channels/route-member-snapshot.js +3 -3
  79. package/dist/runtime/channels/source-spot-router.js +6 -2
  80. package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
  81. package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
  82. package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
  83. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +6 -0
  84. package/dist/runtime/diagnostics/dispatch-error-details.js +55 -0
  85. package/dist/runtime/diagnostics/flow-context.d.ts +2 -1
  86. package/dist/runtime/diagnostics/flow-context.js +2 -2
  87. package/dist/runtime/diagnostics/index.js +38 -10
  88. package/dist/runtime/diagnostics/message-flow.js +58 -42
  89. package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
  90. package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
  91. package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
  92. package/dist/runtime/execution/index.js +7 -6
  93. package/dist/runtime/execution/serial-execution-queue.js +12 -18
  94. package/dist/runtime/execution/state-lane.js +2 -2
  95. package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -27
  96. package/dist/runtime/foundation/event-loop-resources.js +4 -4
  97. package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
  98. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +4 -2
  99. package/dist/runtime/foundation/raw-service-mesh-runtime.js +169 -144
  100. package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
  101. package/dist/runtime/foundation/runtime-state-projections.js +22 -11
  102. package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
  103. package/dist/runtime/foundation/service-discovery-registry.js +35 -33
  104. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
  105. package/dist/runtime/foundation/service-liveness-registry.js +16 -12
  106. package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
  107. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
  108. package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
  109. package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
  110. package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
  111. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +1 -0
  112. package/dist/runtime/foundation/service-stateful-registry.js +24 -23
  113. package/dist/runtime/foundation/service-stateful-runtime.d.ts +4 -0
  114. package/dist/runtime/foundation/service-stateful-runtime.js +461 -439
  115. package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
  116. package/dist/runtime/foundation/service-topology-registry.d.ts +1 -0
  117. package/dist/runtime/foundation/service-topology-registry.js +105 -96
  118. package/dist/runtime/foundation/service-weighted-selection.js +6 -11
  119. package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
  120. package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
  121. package/dist/runtime/framework-errors-internal.js +7 -10
  122. package/dist/runtime/handlers/handler-instance-scope.js +4 -5
  123. package/dist/runtime/handlers/index.js +3 -1
  124. package/dist/runtime/host/actor-packet-relay.js +74 -70
  125. package/dist/runtime/host/actor-placement-coordinator.js +29 -31
  126. package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
  127. package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
  128. package/dist/runtime/host/actor-transfer-runtime.js +176 -153
  129. package/dist/runtime/host/application-job-queue.js +18 -22
  130. package/dist/runtime/host/bound-session-relay.js +3 -1
  131. package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
  132. package/dist/runtime/host/host-capacity-status.js +8 -4
  133. package/dist/runtime/host/index.js +245 -228
  134. package/dist/runtime/host/instance-activation-authority.js +93 -96
  135. package/dist/runtime/host/location-runtime-owner.js +16 -14
  136. package/dist/runtime/host/mesh-router-resolver.js +11 -13
  137. package/dist/runtime/host/relocation-direct-transfer.js +10 -9
  138. package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
  139. package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
  140. package/dist/runtime/host/remote-bound-session-relay.js +97 -73
  141. package/dist/runtime/host/route-mesh-runtime.js +64 -69
  142. package/dist/runtime/host/runtime-shutdown.js +1 -2
  143. package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
  144. package/dist/runtime/host/spot-address-transport.js +69 -71
  145. package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
  146. package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
  147. package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
  148. package/dist/runtime/locations/actor-location-claims.js +26 -20
  149. package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
  150. package/dist/runtime/locations/authority-key-codec.js +7 -7
  151. package/dist/runtime/locations/auto-connect-loop.js +3 -3
  152. package/dist/runtime/locations/auto-connect-planner.js +25 -19
  153. package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
  154. package/dist/runtime/locations/in-memory-authority-store.js +128 -118
  155. package/dist/runtime/locations/in-memory-location-store.js +195 -168
  156. package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
  157. package/dist/runtime/locations/key-codec.js +1 -1
  158. package/dist/runtime/locations/lease-tracker.js +23 -21
  159. package/dist/runtime/locations/lifecycle.js +4 -5
  160. package/dist/runtime/locations/location-store-repository.js +368 -324
  161. package/dist/runtime/locations/opaque-record-key.js +2 -2
  162. package/dist/runtime/locations/resolvers.js +73 -82
  163. package/dist/runtime/locations/runtime.js +68 -63
  164. package/dist/runtime/locations/spot-location-claims.js +39 -35
  165. package/dist/runtime/messaging/framework-json-v1.js +7 -7
  166. package/dist/runtime/messaging/packet-name.js +7 -6
  167. package/dist/runtime/messaging/payload-codec.js +21 -18
  168. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
  169. package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
  170. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +20 -18
  171. package/dist/runtime/routing-id.js +3 -5
  172. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
  173. package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
  174. package/dist/runtime/spots/index.js +209 -220
  175. package/dist/runtime/spots/spot-activation-registry.js +15 -14
  176. package/dist/runtime/spots/spot-activation-state.js +17 -15
  177. package/dist/runtime/spots/spot-activation.js +33 -16
  178. package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
  179. package/dist/runtime/spots/spot-actor-membership.js +1 -3
  180. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +2 -1
  181. package/dist/runtime/spots/spot-actor-packet-dispatch.js +29 -21
  182. package/dist/runtime/spots/spot-actor-packet-drain.js +14 -10
  183. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
  184. package/dist/runtime/spots/spot-closing.js +3 -7
  185. package/dist/runtime/spots/spot-context.js +2 -2
  186. package/dist/runtime/spots/spot-entry-activation.js +13 -14
  187. package/dist/runtime/spots/spot-handle.js +6 -3
  188. package/dist/runtime/spots/spot-handler-registry.js +12 -12
  189. package/dist/runtime/spots/spot-manager-public.js +5 -6
  190. package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
  191. package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
  192. package/dist/runtime/spots/spot-node-runtime-manager.js +79 -86
  193. package/dist/runtime/spots/spot-outbound.js +10 -14
  194. package/dist/runtime/spots/spot-remote-codec.js +22 -26
  195. package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
  196. package/dist/runtime/spots/spot-route-packet-dispatch.js +17 -15
  197. package/dist/runtime/spots/spot-route-replies.js +4 -6
  198. package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
  199. package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +2 -3
  200. package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
  201. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
  202. package/dist/runtime/spots/spot-serial-executor.js +5 -8
  203. package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
  204. package/dist/runtime/spots/spot-subscription-dispatch.js +6 -6
  205. package/dist/runtime/spots/spot-timer.js +26 -30
  206. package/dist/runtime/streams/actor-session-binding-registry.d.ts +21 -8
  207. package/dist/runtime/streams/actor-session-binding-registry.js +168 -148
  208. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -0
  209. package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
  210. package/dist/runtime/streams/bound-actor-relay-sender.js +20 -17
  211. package/dist/runtime/streams/bound-session-response-target.js +8 -1
  212. package/dist/runtime/streams/bound-session-service.d.ts +1 -0
  213. package/dist/runtime/streams/bound-session-service.js +14 -12
  214. package/dist/runtime/streams/index.js +28 -20
  215. package/dist/runtime/streams/managed-stream.d.ts +3 -0
  216. package/dist/runtime/streams/managed-stream.js +52 -31
  217. package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
  218. package/dist/runtime/streams/protocol.d.ts +5 -1
  219. package/dist/runtime/streams/protocol.js +68 -20
  220. package/dist/runtime/streams/session-actor-coordinator.js +37 -41
  221. package/dist/runtime/streams/session-context.d.ts +9 -2
  222. package/dist/runtime/streams/session-context.js +50 -32
  223. package/dist/runtime/streams/session-local-actors.d.ts +3 -1
  224. package/dist/runtime/streams/session-local-actors.js +17 -2
  225. package/dist/runtime/streams/session-provider.js +2 -2
  226. package/dist/runtime/streams/session-serial-executor.js +1 -2
  227. package/dist/runtime/streams/stream-frame-factory.d.ts +1 -1
  228. package/dist/runtime/streams/stream-frame-factory.js +14 -7
  229. package/dist/runtime/streams/stream-session-runtime.js +112 -78
  230. package/dist/runtime/workers/index.js +15 -4
  231. package/package.json +3 -3
  232. package/src/contracts/Channels/RouteCalls.ts +6 -1
  233. package/src/contracts/Common/ZLinkMessage.ts +5 -5
  234. package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
  235. package/src/contracts/Configuration/Builders.ts +14 -14
  236. package/src/contracts/Configuration/CodecContentType.ts +8 -10
  237. package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
  238. package/src/contracts/Configuration/EndpointNotation.ts +11 -11
  239. package/src/contracts/Configuration/ObjectRoles.ts +1 -3
  240. package/src/contracts/Configuration/Registration.ts +46 -17
  241. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
  242. package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
  243. package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
  244. package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
  245. package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
  246. package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
  247. package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
  248. package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
  249. package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
  250. package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
  251. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -6
  252. package/src/contracts/Errors/index.ts +1 -4
  253. package/src/contracts/Handlers/Attributes.ts +15 -9
  254. package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
  255. package/src/contracts/Handlers/JsonContract.ts +53 -19
  256. package/src/contracts/Locations/ActorTransfer.ts +1 -5
  257. package/src/contracts/Locations/Authority.ts +4 -11
  258. package/src/contracts/Locations/Keys.ts +6 -1
  259. package/src/contracts/Locations/Options.ts +3 -2
  260. package/src/contracts/Locations/RelocationStore.ts +1 -4
  261. package/src/contracts/Locations/Resolvers.ts +5 -5
  262. package/src/contracts/Locations/RuntimeQuery.ts +6 -2
  263. package/src/contracts/Locations/Stores.ts +1 -2
  264. package/src/contracts/Locations/index.ts +2 -8
  265. package/src/contracts/RouteMesh/Contracts.ts +1 -7
  266. package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
  267. package/src/contracts/Spots/Contracts.ts +2 -8
  268. package/src/contracts/Spots/SpotKind.ts +16 -8
  269. package/src/contracts/Spots/ZLinkSpot.ts +8 -11
  270. package/src/contracts/Streams/IZLinkSession.ts +2 -2
  271. package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
  272. package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
  273. package/src/internal.ts +5 -4
  274. package/src/location-store-integration.ts +24 -16
  275. package/src/nest-integration.ts +40 -25
  276. package/src/runtime/abort.ts +10 -4
  277. package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
  278. package/src/runtime/actors/actor-authority-publication.ts +92 -77
  279. package/src/runtime/actors/actor-client.ts +162 -133
  280. package/src/runtime/actors/actor-context.ts +142 -134
  281. package/src/runtime/actors/actor-creation.ts +47 -44
  282. package/src/runtime/actors/actor-execution-context.ts +6 -4
  283. package/src/runtime/actors/actor-handoff.ts +269 -293
  284. package/src/runtime/actors/actor-join-deferred-scope.ts +1 -32
  285. package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
  286. package/src/runtime/actors/actor-local-native-join.ts +131 -159
  287. package/src/runtime/actors/actor-mailbox.ts +16 -19
  288. package/src/runtime/actors/actor-message-follow-context.ts +46 -36
  289. package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
  290. package/src/runtime/actors/actor-remote-joiner.ts +50 -54
  291. package/src/runtime/actors/actor-remote-wire.ts +9 -13
  292. package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
  293. package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
  294. package/src/runtime/actors/actor-runtime-state.ts +127 -124
  295. package/src/runtime/actors/actor-transfer-registry.ts +9 -14
  296. package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
  297. package/src/runtime/actors/bound-session-wire.ts +37 -17
  298. package/src/runtime/actors/deferred-join-accepted-journal.ts +353 -326
  299. package/src/runtime/actors/index.ts +43 -86
  300. package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
  301. package/src/runtime/actors/post-commit-actor-location.ts +30 -23
  302. package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
  303. package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
  304. package/src/runtime/admission.ts +9 -9
  305. package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
  306. package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
  307. package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
  308. package/src/runtime/backend/contracts/index.ts +77 -52
  309. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
  310. package/src/runtime/backend/mesh-completion-table.ts +6 -9
  311. package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
  312. package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
  313. package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
  314. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
  315. package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
  316. package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
  317. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
  318. package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
  319. package/src/runtime/backend/node/node-raw-mesh-backend.ts +370 -390
  320. package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
  321. package/src/runtime/backend/runtime-message.ts +5 -3
  322. package/src/runtime/backend/runtime-values.ts +10 -7
  323. package/src/runtime/channels/channel-autoconnect.ts +1 -4
  324. package/src/runtime/channels/channel-clients.ts +93 -73
  325. package/src/runtime/channels/channel-dispatch-pipeline.ts +44 -44
  326. package/src/runtime/channels/channel-dispatch-services.ts +51 -49
  327. package/src/runtime/channels/channel-dispatchers.ts +152 -96
  328. package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
  329. package/src/runtime/channels/channel-envelope.ts +256 -150
  330. package/src/runtime/channels/channel-multipart.ts +13 -5
  331. package/src/runtime/channels/channel-outbound-operations.ts +37 -41
  332. package/src/runtime/channels/channel-receive-loops.ts +102 -98
  333. package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
  334. package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
  335. package/src/runtime/channels/channel-runtime-manager.ts +63 -37
  336. package/src/runtime/channels/channel-socket-options.ts +3 -10
  337. package/src/runtime/channels/channel-socket-registry.ts +331 -273
  338. package/src/runtime/channels/channel-transports.ts +218 -206
  339. package/src/runtime/channels/client-server-location-runtime.ts +116 -100
  340. package/src/runtime/channels/client-server-service-wire.ts +37 -36
  341. package/src/runtime/channels/dispatch-error-reporter.ts +12 -47
  342. package/src/runtime/channels/fanout-location-runtime.ts +91 -94
  343. package/src/runtime/channels/fanout-service-wire.ts +5 -12
  344. package/src/runtime/channels/handler-filter-scope.ts +1 -4
  345. package/src/runtime/channels/index.ts +1 -4
  346. package/src/runtime/channels/local-spot-route-transport.ts +20 -5
  347. package/src/runtime/channels/route-member-snapshot.ts +11 -5
  348. package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
  349. package/src/runtime/channels/source-spot-router.ts +26 -22
  350. package/src/runtime/channels/spot-direct-envelope.ts +10 -8
  351. package/src/runtime/channels/spot-node-route-transport.ts +13 -16
  352. package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
  353. package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
  354. package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
  355. package/src/runtime/codecs/index.ts +3 -2
  356. package/src/runtime/diagnostics/dispatch-error-details.ts +62 -0
  357. package/src/runtime/diagnostics/flow-context.ts +18 -7
  358. package/src/runtime/diagnostics/index.ts +96 -61
  359. package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
  360. package/src/runtime/diagnostics/message-flow.ts +107 -79
  361. package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
  362. package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
  363. package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
  364. package/src/runtime/execution/index.ts +18 -26
  365. package/src/runtime/execution/serial-execution-queue.ts +31 -40
  366. package/src/runtime/execution/state-lane.ts +2 -2
  367. package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -55
  368. package/src/runtime/foundation/event-loop-resources.ts +8 -4
  369. package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
  370. package/src/runtime/foundation/operation-identity.ts +1 -2
  371. package/src/runtime/foundation/operation-registry.ts +8 -2
  372. package/src/runtime/foundation/raw-service-mesh-runtime.ts +364 -396
  373. package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
  374. package/src/runtime/foundation/runtime-state-projections.ts +24 -23
  375. package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
  376. package/src/runtime/foundation/service-discovery-registry.ts +67 -59
  377. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
  378. package/src/runtime/foundation/service-liveness-registry.ts +18 -13
  379. package/src/runtime/foundation/service-mailbox.ts +14 -14
  380. package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
  381. package/src/runtime/foundation/service-metadata-codec.ts +2 -9
  382. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
  383. package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
  384. package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
  385. package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
  386. package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
  387. package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -4
  388. package/src/runtime/foundation/service-stateful-registry.ts +69 -59
  389. package/src/runtime/foundation/service-stateful-runtime.ts +1233 -1112
  390. package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
  391. package/src/runtime/foundation/service-topology-registry.ts +170 -159
  392. package/src/runtime/foundation/service-weighted-selection.ts +9 -15
  393. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
  394. package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
  395. package/src/runtime/framework-errors-internal.ts +31 -30
  396. package/src/runtime/handlers/handler-instance-scope.ts +18 -29
  397. package/src/runtime/handlers/index.ts +18 -8
  398. package/src/runtime/host/actor-packet-relay.ts +290 -261
  399. package/src/runtime/host/actor-placement-coordinator.ts +165 -150
  400. package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
  401. package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
  402. package/src/runtime/host/actor-transfer-runtime.ts +391 -395
  403. package/src/runtime/host/application-job-queue.ts +32 -48
  404. package/src/runtime/host/bound-session-relay.ts +7 -9
  405. package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
  406. package/src/runtime/host/host-capacity-status.ts +10 -9
  407. package/src/runtime/host/index.ts +861 -789
  408. package/src/runtime/host/instance-activation-authority.ts +125 -143
  409. package/src/runtime/host/location-runtime-owner.ts +38 -26
  410. package/src/runtime/host/mesh-router-resolver.ts +30 -23
  411. package/src/runtime/host/relocation-direct-transfer.ts +15 -15
  412. package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
  413. package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
  414. package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
  415. package/src/runtime/host/remote-bound-session-relay.ts +274 -247
  416. package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
  417. package/src/runtime/host/route-mesh-runtime.ts +227 -181
  418. package/src/runtime/host/runtime-shutdown.ts +4 -3
  419. package/src/runtime/host/service-relocation-control.ts +14 -5
  420. package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
  421. package/src/runtime/host/spot-address-transport.ts +284 -237
  422. package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
  423. package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
  424. package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
  425. package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
  426. package/src/runtime/locations/actor-location-claims.ts +61 -49
  427. package/src/runtime/locations/actor-session-route-claims.ts +1 -4
  428. package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
  429. package/src/runtime/locations/authority-key-codec.ts +13 -10
  430. package/src/runtime/locations/auto-connect-loop.ts +14 -11
  431. package/src/runtime/locations/auto-connect-planner.ts +42 -31
  432. package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
  433. package/src/runtime/locations/canonical-codec.ts +3 -1
  434. package/src/runtime/locations/creation-operation-id.ts +4 -3
  435. package/src/runtime/locations/domain-store-contract.ts +13 -7
  436. package/src/runtime/locations/in-memory-authority-store.ts +232 -199
  437. package/src/runtime/locations/in-memory-location-store.ts +432 -250
  438. package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
  439. package/src/runtime/locations/internal-store-contracts.ts +95 -38
  440. package/src/runtime/locations/key-codec.ts +3 -4
  441. package/src/runtime/locations/lease-tracker.ts +36 -27
  442. package/src/runtime/locations/lifecycle-runtime.ts +15 -3
  443. package/src/runtime/locations/lifecycle.ts +33 -28
  444. package/src/runtime/locations/location-store-repository.ts +1329 -1185
  445. package/src/runtime/locations/opaque-record-key.ts +4 -9
  446. package/src/runtime/locations/resolvers.ts +201 -178
  447. package/src/runtime/locations/runtime.ts +251 -159
  448. package/src/runtime/locations/spot-location-claims.ts +110 -112
  449. package/src/runtime/messaging/creation-payload-codec.ts +4 -1
  450. package/src/runtime/messaging/framework-json-v1.ts +34 -15
  451. package/src/runtime/messaging/packet-name.ts +8 -6
  452. package/src/runtime/messaging/payload-codec.ts +70 -50
  453. package/src/runtime/messaging/submission-result.ts +6 -9
  454. package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
  455. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +19 -18
  456. package/src/runtime/routing-id.ts +10 -7
  457. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
  458. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
  459. package/src/runtime/spots/index.ts +595 -564
  460. package/src/runtime/spots/spot-activation-registry.ts +38 -34
  461. package/src/runtime/spots/spot-activation-state.ts +43 -51
  462. package/src/runtime/spots/spot-activation.ts +179 -116
  463. package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
  464. package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
  465. package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
  466. package/src/runtime/spots/spot-actor-membership.ts +25 -27
  467. package/src/runtime/spots/spot-actor-packet-dispatch.ts +196 -148
  468. package/src/runtime/spots/spot-actor-packet-drain.ts +56 -42
  469. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
  470. package/src/runtime/spots/spot-closing.ts +11 -12
  471. package/src/runtime/spots/spot-context.ts +46 -26
  472. package/src/runtime/spots/spot-entry-activation.ts +84 -65
  473. package/src/runtime/spots/spot-handle.ts +17 -15
  474. package/src/runtime/spots/spot-handler-registry.ts +44 -31
  475. package/src/runtime/spots/spot-location-claim.ts +5 -4
  476. package/src/runtime/spots/spot-manager-public.ts +62 -82
  477. package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
  478. package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
  479. package/src/runtime/spots/spot-node-runtime-manager.ts +235 -222
  480. package/src/runtime/spots/spot-outbound.ts +47 -59
  481. package/src/runtime/spots/spot-publisher-transport.ts +5 -4
  482. package/src/runtime/spots/spot-remote-codec.ts +66 -65
  483. package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
  484. package/src/runtime/spots/spot-route-packet-dispatch.ts +129 -95
  485. package/src/runtime/spots/spot-route-replies.ts +23 -24
  486. package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
  487. package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
  488. package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +13 -18
  489. package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
  490. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
  491. package/src/runtime/spots/spot-routing-internal.ts +1 -4
  492. package/src/runtime/spots/spot-runtime-ports.ts +5 -5
  493. package/src/runtime/spots/spot-serial-executor.ts +5 -9
  494. package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
  495. package/src/runtime/spots/spot-subscription-dispatch.ts +58 -47
  496. package/src/runtime/spots/spot-timer.ts +103 -91
  497. package/src/runtime/streams/actor-session-binding-registry.ts +421 -292
  498. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +8 -4
  499. package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
  500. package/src/runtime/streams/bound-actor-relay-sender.ts +60 -50
  501. package/src/runtime/streams/bound-session-response-target.ts +39 -9
  502. package/src/runtime/streams/bound-session-service.ts +52 -42
  503. package/src/runtime/streams/index.ts +183 -100
  504. package/src/runtime/streams/managed-stream.ts +123 -90
  505. package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
  506. package/src/runtime/streams/protocol.ts +115 -46
  507. package/src/runtime/streams/session-actor-coordinator.ts +109 -93
  508. package/src/runtime/streams/session-calls.ts +2 -8
  509. package/src/runtime/streams/session-context.ts +96 -51
  510. package/src/runtime/streams/session-local-actors.ts +19 -3
  511. package/src/runtime/streams/session-provider.ts +5 -7
  512. package/src/runtime/streams/session-serial-executor.ts +7 -6
  513. package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
  514. package/src/runtime/streams/stream-frame-factory.ts +59 -40
  515. package/src/runtime/streams/stream-session-runtime.ts +317 -214
  516. package/src/runtime/workers/index.ts +68 -29
@@ -27,14 +27,11 @@ class ServiceRelocationAuthorityPayloadCodec {
27
27
  return encodeAuthorityEnvelope(Buffer.from(currentPayload), publication);
28
28
  }
29
29
  read(payload) {
30
- return decodeCanonicalAuthorityPublication(payload)
31
- ?? decodeAuthorityEnvelope(payload)?.publication;
30
+ return (decodeCanonicalAuthorityPublication(payload) ?? decodeAuthorityEnvelope(payload)?.publication);
32
31
  }
33
32
  clear(currentPayload, expectedReference) {
34
33
  const canonical = decodeCanonicalAuthorityLayout(currentPayload);
35
- const canonicalPublication = canonical === undefined
36
- ? undefined
37
- : decodeCanonicalRelocationSlot(canonical.slot);
34
+ const canonicalPublication = canonical === undefined ? undefined : decodeCanonicalRelocationSlot(canonical.slot);
38
35
  if (canonical !== undefined && canonicalPublication?.reference !== undefined) {
39
36
  if (canonicalPublication.reference !== requireText(expectedReference, 'relocation reference')) {
40
37
  throw new TypeError('Location authority relocation reference changed.');
@@ -42,8 +39,8 @@ class ServiceRelocationAuthorityPayloadCodec {
42
39
  return replaceCanonicalRelocationSlot(canonical, Buffer.alloc(0));
43
40
  }
44
41
  const current = decodeAuthorityEnvelope(currentPayload);
45
- if (current === undefined
46
- || current.publication.reference !== requireText(expectedReference, 'relocation reference')) {
42
+ if (current === undefined ||
43
+ current.publication.reference !== requireText(expectedReference, 'relocation reference')) {
47
44
  throw new TypeError('Location authority relocation reference changed.');
48
45
  }
49
46
  return Buffer.from(current.base);
@@ -224,25 +221,25 @@ function decodeCanonicalRelocationSlot(payload, rootAggregateGeneration) {
224
221
  const phase = reader.u8();
225
222
  const applicationVersion = reader.i64();
226
223
  const sourceCleanupState = reader.u8();
227
- if (!reader.done
228
- || aggregateGeneration > 0x7ffffffffffffffen
229
- || (aggregateGeneration === 0n && phase !== 1)
230
- || (rootAggregateGeneration !== undefined
231
- && aggregateGeneration !== rootAggregateGeneration)
232
- || targetAttemptGeneration > 0x7fffffffffffffffn
233
- || sourceNodeGeneration === 0n
234
- || sourceNodeGeneration > 0x7fffffffffffffffn
235
- || sourceOwnerLeaseGeneration === 0n
236
- || sourceOwnerLeaseGeneration > 0x7fffffffffffffffn
237
- || targetNodeGeneration > 0x7fffffffffffffffn
238
- || targetOwnerLeaseGeneration > 0x7fffffffffffffffn
239
- || coordinatorLeaseGeneration === 0n
240
- || coordinatorLeaseGeneration > 0x7fffffffffffffffn
241
- || coordinatorNodeGeneration === 0n
242
- || coordinatorNodeGeneration > 0x7fffffffffffffffn
243
- || phase < 1 || phase > 9
244
- || applicationVersion < 0n
245
- || sourceCleanupState > 2)
224
+ if (!reader.done ||
225
+ aggregateGeneration > 0x7ffffffffffffffen ||
226
+ (aggregateGeneration === 0n && phase !== 1) ||
227
+ (rootAggregateGeneration !== undefined && aggregateGeneration !== rootAggregateGeneration) ||
228
+ targetAttemptGeneration > 0x7fffffffffffffffn ||
229
+ sourceNodeGeneration === 0n ||
230
+ sourceNodeGeneration > 0x7fffffffffffffffn ||
231
+ sourceOwnerLeaseGeneration === 0n ||
232
+ sourceOwnerLeaseGeneration > 0x7fffffffffffffffn ||
233
+ targetNodeGeneration > 0x7fffffffffffffffn ||
234
+ targetOwnerLeaseGeneration > 0x7fffffffffffffffn ||
235
+ coordinatorLeaseGeneration === 0n ||
236
+ coordinatorLeaseGeneration > 0x7fffffffffffffffn ||
237
+ coordinatorNodeGeneration === 0n ||
238
+ coordinatorNodeGeneration > 0x7fffffffffffffffn ||
239
+ phase < 1 ||
240
+ phase > 9 ||
241
+ applicationVersion < 0n ||
242
+ sourceCleanupState > 2)
246
243
  return undefined;
247
244
  return {
248
245
  aggregateId,
@@ -294,23 +291,33 @@ function encodeCanonicalRelocationSlot(value) {
294
291
  if (!Number.isInteger(value.phase) || value.phase < 1 || value.phase > 9) {
295
292
  throw new TypeError('Canonical relocation phase is invalid.');
296
293
  }
297
- if (!Number.isInteger(value.sourceCleanupState)
298
- || value.sourceCleanupState < 0
299
- || value.sourceCleanupState > 2) {
294
+ if (!Number.isInteger(value.sourceCleanupState) ||
295
+ value.sourceCleanupState < 0 ||
296
+ value.sourceCleanupState > 2) {
300
297
  throw new TypeError('Canonical source cleanup state is invalid.');
301
298
  }
302
299
  return Buffer.concat([
303
- canonicalU64(id.high), canonicalU64(id.low),
304
- canonicalU64(aggregateGeneration), canonicalU64(targetAttemptGeneration),
305
- canonicalText16(value.reference), canonicalU32(value.checksumCrc32c),
306
- canonicalText8(value.sourceNodeRid), canonicalU64(sourceNodeGeneration),
307
- canonicalText8(value.sourceOwnerId), canonicalU64(sourceOwnerLeaseGeneration),
308
- canonicalOptionalText8(value.targetNodeRid), canonicalU64(targetNodeGeneration),
309
- canonicalOptionalText8(value.targetOwnerId), canonicalU64(targetOwnerLeaseGeneration),
310
- canonicalText8(value.coordinatorOwnerId), canonicalU64(coordinatorLeaseGeneration),
311
- canonicalText8(value.coordinatorNodeRid), canonicalU64(coordinatorNodeGeneration),
300
+ canonicalU64(id.high),
301
+ canonicalU64(id.low),
302
+ canonicalU64(aggregateGeneration),
303
+ canonicalU64(targetAttemptGeneration),
304
+ canonicalText16(value.reference),
305
+ canonicalU32(value.checksumCrc32c),
306
+ canonicalText8(value.sourceNodeRid),
307
+ canonicalU64(sourceNodeGeneration),
308
+ canonicalText8(value.sourceOwnerId),
309
+ canonicalU64(sourceOwnerLeaseGeneration),
310
+ canonicalOptionalText8(value.targetNodeRid),
311
+ canonicalU64(targetNodeGeneration),
312
+ canonicalOptionalText8(value.targetOwnerId),
313
+ canonicalU64(targetOwnerLeaseGeneration),
314
+ canonicalText8(value.coordinatorOwnerId),
315
+ canonicalU64(coordinatorLeaseGeneration),
316
+ canonicalText8(value.coordinatorNodeRid),
317
+ canonicalU64(coordinatorNodeGeneration),
312
318
  canonicalOptionalText8(value.coordinatorExpectedStoreVersion),
313
- Buffer.of(value.phase), canonicalI64(value.applicationVersion),
319
+ Buffer.of(value.phase),
320
+ canonicalI64(value.applicationVersion),
314
321
  Buffer.of(value.sourceCleanupState)
315
322
  ]);
316
323
  }
@@ -356,8 +363,11 @@ function replaceCanonicalRelocationSlot(layout, slot) {
356
363
  layout.body.subarray(layout.slotEnd)
357
364
  ]);
358
365
  const envelope = Buffer.concat([
359
- Buffer.from('ZLAU'), Buffer.of(1), canonicalU16(layout.flags),
360
- canonicalU32(body.byteLength), body
366
+ Buffer.from('ZLAU'),
367
+ Buffer.of(1),
368
+ canonicalU16(layout.flags),
369
+ canonicalU32(body.byteLength),
370
+ body
361
371
  ]);
362
372
  const result = Buffer.concat([envelope, canonicalU32(crc32c(envelope))]);
363
373
  if (result.byteLength > 1024 * 1024) {
@@ -380,9 +390,9 @@ function encodeServiceRelocationEnvelope(envelope, applicationVersion) {
380
390
  const aggregate = relocationId(canonicalUuid(envelope.aggregateId, 'aggregate id'));
381
391
  const encodedApplicationVersion = nonNegativeBigInt(applicationVersion, 'application version');
382
392
  const participants = canonicalParticipants(envelope.participants);
383
- const root = participants.find(value => value.rootSpotId !== undefined)
384
- ?? participants.find(value => value.objectKind !== 'actor')
385
- ?? participants[0];
393
+ const root = participants.find((value) => value.rootSpotId !== undefined) ??
394
+ participants.find((value) => value.objectKind !== 'actor') ??
395
+ participants[0];
386
396
  const rootObjectKind = root.rootObjectKind ?? root.objectKind;
387
397
  if (rootObjectKind === 'actor' && participants.length !== 1) {
388
398
  throw new TypeError('Standalone Actor relocation requires one participant.');
@@ -398,23 +408,29 @@ function encodeServiceRelocationEnvelope(envelope, applicationVersion) {
398
408
  payload: Buffer.from(participant.applicationState)
399
409
  };
400
410
  });
401
- const saved = participants.flatMap((participant, index) => participant.queuedMessages.map(message => ({
411
+ const saved = participants
412
+ .flatMap((participant, index) => participant.queuedMessages.map((message) => ({
402
413
  participantId: BigInt(index + 1),
403
414
  order: positiveBigInt(message.sequence, 'queue sequence'),
404
415
  frozenRecord: Buffer.from(message.payload)
405
- }))).sort(compareParticipantOrder);
406
- if (saved.some((value, index) => index > 0
407
- && compareParticipantOrder(saved[index - 1], value) === 0)) {
416
+ })))
417
+ .sort(compareParticipantOrder);
418
+ if (saved.some((value, index) => index > 0 && compareParticipantOrder(saved[index - 1], value) === 0)) {
408
419
  throw new TypeError('Relocation queue sequences must be unique per participant.');
409
420
  }
410
- const timers = participants.flatMap((participant, index) => participant.timers.map(timer => ({
411
- participantId: BigInt(index + 1), timer
412
- }))).sort((a, b) => a.participantId === b.participantId
421
+ const timers = participants
422
+ .flatMap((participant, index) => participant.timers.map((timer) => ({
423
+ participantId: BigInt(index + 1),
424
+ timer
425
+ })))
426
+ .sort((a, b) => a.participantId === b.participantId
413
427
  ? Buffer.compare(Buffer.from(a.timer.timerId), Buffer.from(b.timer.timerId))
414
- : a.participantId < b.participantId ? -1 : 1);
415
- if (timers.some((value, index) => index > 0
416
- && timers[index - 1].participantId === value.participantId
417
- && timers[index - 1].timer.timerId === value.timer.timerId)) {
428
+ : a.participantId < b.participantId
429
+ ? -1
430
+ : 1);
431
+ if (timers.some((value, index) => index > 0 &&
432
+ timers[index - 1].participantId === value.participantId &&
433
+ timers[index - 1].timer.timerId === value.timer.timerId)) {
418
434
  throw new TypeError('Relocation timer ids must be unique per participant.');
419
435
  }
420
436
  const nextOrder = new Map();
@@ -423,7 +439,8 @@ function encodeServiceRelocationEnvelope(envelope, applicationVersion) {
423
439
  if (value.order > current)
424
440
  nextOrder.set(value.participantId, value.order);
425
441
  }
426
- const pending = timers.flatMap(({ participantId, timer }) => timer.pendingTicks.map(tick => {
442
+ const pending = timers
443
+ .flatMap(({ participantId, timer }) => timer.pendingTicks.map((tick) => {
427
444
  const current = nextOrder.get(participantId) ?? 0n;
428
445
  const order = tick.order === undefined
429
446
  ? current + 1n
@@ -431,7 +448,8 @@ function encodeServiceRelocationEnvelope(envelope, applicationVersion) {
431
448
  if (order > current)
432
449
  nextOrder.set(participantId, order);
433
450
  return { participantId, order, timerName: timer.timerId, tick };
434
- })).sort(compareParticipantOrder);
451
+ }))
452
+ .sort(compareParticipantOrder);
435
453
  return Buffer.from((0, service_wire_pilot_codec_generated_1.encodeRelocationEnvelopeV1)({
436
454
  relocationHigh: aggregate.high,
437
455
  relocationLow: aggregate.low,
@@ -451,7 +469,7 @@ function encodeServiceRelocationEnvelope(envelope, applicationVersion) {
451
469
  lastCompletedScheduledIndex: nonNegativeBigInt(timer.lastScheduledIndex, 'timer scheduled index'),
452
470
  nextScheduledAtUnixMilliseconds: nonNegativeUnixMilliseconds(timer.dueAtUnixMs, 'timer due time')
453
471
  })),
454
- pendingTimerTicks: pending.map(value => ({
472
+ pendingTimerTicks: pending.map((value) => ({
455
473
  participantId: value.participantId,
456
474
  order: value.order,
457
475
  timerName: value.timerName,
@@ -487,7 +505,7 @@ function decodeServiceRelocationEnvelope(payload, aggregateGeneration) {
487
505
  }
488
506
  return wireParticipant(state.participantId, state.hasState, Buffer.from(state.payload));
489
507
  });
490
- const byId = new Map(participants.map(value => [value.participantId, value]));
508
+ const byId = new Map(participants.map((value) => [value.participantId, value]));
491
509
  for (const work of generated.savedWork) {
492
510
  byId.get(work.participantId).queuedMessages.push({
493
511
  sequence: work.order,
@@ -510,7 +528,9 @@ function decodeServiceRelocationEnvelope(payload, aggregateGeneration) {
510
528
  });
511
529
  }
512
530
  for (const tick of generated.pendingTimerTicks) {
513
- const timer = byId.get(tick.participantId).timers.find(value => value.timerId === tick.timerName);
531
+ const timer = byId
532
+ .get(tick.participantId)
533
+ .timers.find((value) => value.timerId === tick.timerName);
514
534
  timer.pendingTicks.push({
515
535
  order: tick.order,
516
536
  deliveryIndex: tick.deliveryIndex,
@@ -525,9 +545,7 @@ function decodeServiceRelocationEnvelope(payload, aggregateGeneration) {
525
545
  aggregateId,
526
546
  aggregateGeneration,
527
547
  applicationVersion: generated.applicationVersion,
528
- participants: participants.map(value => value === rootParticipant
529
- ? { ...value, ...rootProjection }
530
- : value),
548
+ participants: participants.map((value) => value === rootParticipant ? { ...value, ...rootProjection } : value),
531
549
  memberships: []
532
550
  };
533
551
  }
@@ -585,7 +603,7 @@ function canonicalParticipants(values) {
585
603
  if (values.length === 0)
586
604
  throw new TypeError('Relocation participant count is outside its bound.');
587
605
  const participants = [...values].sort((a, b) => Buffer.compare(Buffer.from(a.key), Buffer.from(b.key)));
588
- if (new Set(participants.map(value => value.key)).size !== participants.length) {
606
+ if (new Set(participants.map((value) => value.key)).size !== participants.length) {
589
607
  throw new TypeError('Relocation participants must have unique keys.');
590
608
  }
591
609
  return participants;
@@ -596,7 +614,9 @@ function authorityGlobalId(key) {
596
614
  }
597
615
  catch {
598
616
  const marker = key.indexOf(':');
599
- return marker < 0 ? requireText(key, 'participant key') : requireText(key.slice(marker + 1), 'participant key');
617
+ return marker < 0
618
+ ? requireText(key, 'participant key')
619
+ : requireText(key.slice(marker + 1), 'participant key');
600
620
  }
601
621
  }
602
622
  function relocationId(value) {
@@ -611,8 +631,14 @@ function uuid(high, low) {
611
631
  }
612
632
  function compareParticipantOrder(a, b) {
613
633
  return a.participantId === b.participantId
614
- ? a.order < b.order ? -1 : a.order > b.order ? 1 : 0
615
- : a.participantId < b.participantId ? -1 : 1;
634
+ ? a.order < b.order
635
+ ? -1
636
+ : a.order > b.order
637
+ ? 1
638
+ : 0
639
+ : a.participantId < b.participantId
640
+ ? -1
641
+ : 1;
616
642
  }
617
643
  function timerPolicy(value) {
618
644
  if (value === 'skipLateTicks')
@@ -665,21 +691,25 @@ function objectKind(value) {
665
691
  return value;
666
692
  }
667
693
  function inventoryDigest(participants, memberships = []) {
668
- const identities = participants.map(participant => ({
694
+ const identities = participants
695
+ .map((participant) => ({
669
696
  key: requireText(participant.key, 'participant key'),
670
697
  objectKind: objectKind(participant.objectKind),
671
698
  stableType: requireText(participant.stableType, 'participant stable type'),
672
699
  objectGeneration: positiveBigInt(participant.objectGeneration, 'object generation').toString(),
673
700
  authorityOwnerGeneration: positiveBigInt(participant.authorityOwnerGeneration, 'authority owner generation').toString()
674
- })).sort((left, right) => left.key.localeCompare(right.key));
701
+ }))
702
+ .sort((left, right) => left.key.localeCompare(right.key));
675
703
  if (new Set(identities.map(({ key }) => key)).size !== identities.length) {
676
704
  throw new TypeError('Relocation participants must have unique keys.');
677
705
  }
678
706
  const canonicalMemberships = encodeMemberships(memberships, participants);
679
- return (0, node_crypto_1.createHash)('sha256').update(JSON.stringify({
707
+ return (0, node_crypto_1.createHash)('sha256')
708
+ .update(JSON.stringify({
680
709
  participants: identities,
681
710
  memberships: canonicalMemberships
682
- }), 'utf8').digest('hex');
711
+ }), 'utf8')
712
+ .digest('hex');
683
713
  }
684
714
  function encodeAuthorityEnvelope(base, publication) {
685
715
  const checksum = safeInteger(publication.checksumCrc32c, 'relocation checksum');
@@ -691,8 +721,8 @@ function encodeAuthorityEnvelope(base, publication) {
691
721
  }
692
722
  const aggregateGeneration = positiveBigInt(publication.aggregateGeneration, 'aggregate generation');
693
723
  const targetOwnerLeaseGeneration = positiveBigInt(publication.targetOwnerLeaseGeneration, 'target owner lease generation');
694
- if (aggregateGeneration > 0x7fffffffffffffffn
695
- || targetOwnerLeaseGeneration > 0x7fffffffffffffffn) {
724
+ if (aggregateGeneration > 0x7fffffffffffffffn ||
725
+ targetOwnerLeaseGeneration > 0x7fffffffffffffffn) {
696
726
  throw new TypeError('Relocation publication generations must fit signed 64-bit storage.');
697
727
  }
698
728
  const payload = Buffer.concat([
@@ -727,11 +757,11 @@ function decodeAuthorityEnvelope(payload) {
727
757
  const targetOwnerId = requireText(reader.text16(), 'target owner id');
728
758
  const targetOwnerLeaseGeneration = reader.i64();
729
759
  const base = reader.bytes32();
730
- if (!reader.done
731
- || aggregateGeneration === 0n
732
- || aggregateGeneration > 0x7fffffffffffffffn
733
- || inventoryDigestBytes.byteLength !== 32
734
- || targetOwnerLeaseGeneration <= 0n) {
760
+ if (!reader.done ||
761
+ aggregateGeneration === 0n ||
762
+ aggregateGeneration > 0x7fffffffffffffffn ||
763
+ inventoryDigestBytes.byteLength !== 32 ||
764
+ targetOwnerLeaseGeneration <= 0n) {
735
765
  return undefined;
736
766
  }
737
767
  return {
@@ -753,15 +783,17 @@ function decodeAuthorityEnvelope(payload) {
753
783
  }
754
784
  function encodeMemberships(memberships, participants) {
755
785
  validateMemberships(memberships, participants);
756
- return memberships.map(membership => ({
786
+ return memberships
787
+ .map((membership) => ({
757
788
  actorKey: requireText(membership.actorKey, 'membership actor key'),
758
789
  spotKey: requireText(membership.spotKey, 'membership spot key'),
759
790
  spotObjectGeneration: positiveBigInt(membership.spotObjectGeneration, 'membership Spot generation').toString(),
760
791
  membershipEpoch: positiveBigInt(membership.membershipEpoch, 'membership epoch').toString()
761
- })).sort((left, right) => left.actorKey.localeCompare(right.actorKey));
792
+ }))
793
+ .sort((left, right) => left.actorKey.localeCompare(right.actorKey));
762
794
  }
763
795
  function validateMemberships(memberships, participants) {
764
- const byKey = new Map(participants.map(participant => [participant.key, participant]));
796
+ const byKey = new Map(participants.map((participant) => [participant.key, participant]));
765
797
  const actorKeys = new Set();
766
798
  for (const membership of memberships) {
767
799
  const actorKey = requireText(membership.actorKey, 'membership actor key');
@@ -774,9 +806,10 @@ function validateMemberships(memberships, participants) {
774
806
  throw new TypeError('Relocation membership must reference an Actor participant.');
775
807
  }
776
808
  const spot = byKey.get(requireText(membership.spotKey, 'membership spot key'));
777
- if (spot !== undefined
778
- && (spot.objectKind !== 'user_spot'
779
- || spot.objectGeneration !== positiveBigInt(membership.spotObjectGeneration, 'membership Spot generation'))) {
809
+ if (spot !== undefined &&
810
+ (spot.objectKind !== 'user_spot' ||
811
+ spot.objectGeneration !==
812
+ positiveBigInt(membership.spotObjectGeneration, 'membership Spot generation'))) {
780
813
  throw new TypeError('Relocation membership Spot fence does not match its participant.');
781
814
  }
782
815
  positiveBigInt(membership.membershipEpoch, 'membership epoch');
@@ -804,8 +837,8 @@ function requireText(value, label) {
804
837
  }
805
838
  function canonicalUuid(value, label) {
806
839
  const text = requireText(value, label);
807
- if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/u.test(text)
808
- || /^0{8}-0{4}-0{4}-0{4}-0{12}$/u.test(text)) {
840
+ if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/u.test(text) ||
841
+ /^0{8}-0{4}-0{4}-0{4}-0{12}$/u.test(text)) {
809
842
  throw new TypeError(`${label} must be a lowercase non-zero 128-bit identity.`);
810
843
  }
811
844
  return text;
@@ -849,9 +882,14 @@ function i64le(value) {
849
882
  function dotnetGuidBytes(value) {
850
883
  const canonical = Buffer.from(value.replaceAll('-', ''), 'hex');
851
884
  return Buffer.from([
852
- canonical[3], canonical[2], canonical[1], canonical[0],
853
- canonical[5], canonical[4],
854
- canonical[7], canonical[6],
885
+ canonical[3],
886
+ canonical[2],
887
+ canonical[1],
888
+ canonical[0],
889
+ canonical[5],
890
+ canonical[4],
891
+ canonical[7],
892
+ canonical[6],
855
893
  ...canonical.subarray(8)
856
894
  ]);
857
895
  }
@@ -860,13 +898,18 @@ function canonicalUuidFromDotnetBytes(value) {
860
898
  if (bytes.byteLength !== 16)
861
899
  throw new TypeError('Relocation aggregate id is invalid.');
862
900
  const canonical = Buffer.from([
863
- bytes[3], bytes[2], bytes[1], bytes[0],
864
- bytes[5], bytes[4],
865
- bytes[7], bytes[6],
901
+ bytes[3],
902
+ bytes[2],
903
+ bytes[1],
904
+ bytes[0],
905
+ bytes[5],
906
+ bytes[4],
907
+ bytes[7],
908
+ bytes[6],
866
909
  ...bytes.subarray(8)
867
910
  ]).toString('hex');
868
- return `${canonical.slice(0, 8)}-${canonical.slice(8, 12)}-${canonical.slice(12, 16)}`
869
- + `-${canonical.slice(16, 20)}-${canonical.slice(20)}`;
911
+ return (`${canonical.slice(0, 8)}-${canonical.slice(8, 12)}-${canonical.slice(12, 16)}` +
912
+ `-${canonical.slice(16, 20)}-${canonical.slice(20)}`);
870
913
  }
871
914
  class CanonicalReader {
872
915
  bytes;
@@ -43,11 +43,11 @@ exports.OperationKind = Object.freeze({
43
43
  UserSpotClose: 14
44
44
  });
45
45
  function operationRequiresReply(operationKind) {
46
- return operationKind === exports.OperationKind.NodeRequest
47
- || operationKind === exports.OperationKind.ChannelRequest
48
- || operationKind === exports.OperationKind.SpotRequest
49
- || operationKind === exports.OperationKind.ActorRequest
50
- || operationKind === exports.OperationKind.InstanceSpotRequest;
46
+ return (operationKind === exports.OperationKind.NodeRequest ||
47
+ operationKind === exports.OperationKind.ChannelRequest ||
48
+ operationKind === exports.OperationKind.SpotRequest ||
49
+ operationKind === exports.OperationKind.ActorRequest ||
50
+ operationKind === exports.OperationKind.InstanceSpotRequest);
51
51
  }
52
52
  exports.ActorLifecycleKind = Object.freeze({
53
53
  Created: 1,
@@ -16,6 +16,7 @@ export interface ServiceSessionBindingAdmissionClaim {
16
16
  }
17
17
  export type ServiceSessionBindingAdmissionResult = 'passThrough' | 'retained' | 'rejected';
18
18
  export interface ServiceSessionBindingIngressPort {
19
+ actorSlot(actorId: string, sessionRid: string): Promise<number | undefined>;
19
20
  retainOutbound(claim: ServiceSessionBindingAdmissionClaim, delivery: ServiceSessionBindingRetainedDelivery): Promise<ServiceSessionBindingAdmissionResult>;
20
21
  clearOutbound(actorId: string, error: unknown): Promise<void>;
21
22
  }
@@ -83,10 +83,10 @@ class ServiceStatefulRegistry {
83
83
  requirePositive(ref.generation, 'spot.generation');
84
84
  requireText(stableType, 'stableType');
85
85
  requirePositive(authorityOwnerGeneration, 'authorityOwnerGeneration');
86
- if (kind === 'entry'
87
- && (ref.spotId !== this.nodeRid
88
- || ref.generation !== this.nodeGeneration
89
- || stableType !== 'entry')) {
86
+ if (kind === 'entry' &&
87
+ (ref.spotId !== this.nodeRid ||
88
+ ref.generation !== this.nodeGeneration ||
89
+ stableType !== 'entry')) {
90
90
  throw new TypeError('Entry Spot identity is fixed by the owning node lifecycle.');
91
91
  }
92
92
  const current = this.spots.get(ref.spotId);
@@ -108,7 +108,9 @@ class ServiceStatefulRegistry {
108
108
  }
109
109
  requireSpotCore(ref) {
110
110
  const current = this.spots.get(ref.spotId);
111
- if (current === undefined || current.ref.generation !== ref.generation || current.state !== 'ready') {
111
+ if (current === undefined ||
112
+ current.ref.generation !== ref.generation ||
113
+ current.state !== 'ready') {
112
114
  throw new ServiceStaleGenerationError('spot', ref.spotId);
113
115
  }
114
116
  return current;
@@ -118,8 +120,7 @@ class ServiceStatefulRegistry {
118
120
  if (current.kind === 'entry')
119
121
  return false;
120
122
  for (const actor of this.actors.values()) {
121
- if (actor.spot.spotId === ref.spotId
122
- && actor.spot.generation === ref.generation) {
123
+ if (actor.spot.spotId === ref.spotId && actor.spot.generation === ref.generation) {
123
124
  return false;
124
125
  }
125
126
  }
@@ -193,9 +194,9 @@ class ServiceStatefulRegistry {
193
194
  }
194
195
  requireActorCore(ref) {
195
196
  const current = this.actors.get(ref.actorId);
196
- if (current === undefined
197
- || current.ref.generation !== ref.generation
198
- || current.ref.nodeRid !== ref.nodeRid) {
197
+ if (current === undefined ||
198
+ current.ref.generation !== ref.generation ||
199
+ current.ref.nodeRid !== ref.nodeRid) {
199
200
  throw new ServiceStaleGenerationError('actor', ref.actorId);
200
201
  }
201
202
  return current;
@@ -256,12 +257,12 @@ class ServiceStatefulRegistry {
256
257
  this.requireActorCore(binding.actor);
257
258
  requirePositive(binding.bindingGeneration, 'bindingGeneration');
258
259
  const current = this.bindings.get(actorKey(binding.actor));
259
- if (current !== undefined
260
- && current.sessionOwnerNodeRid === binding.sessionOwnerNodeRid
261
- && current.sessionOwnerNodeGeneration === binding.sessionOwnerNodeGeneration
262
- && current.sessionOwnerId === binding.sessionOwnerId
263
- && current.sessionOwnerLeaseGeneration === binding.sessionOwnerLeaseGeneration
264
- && current.bindingGeneration >= binding.bindingGeneration) {
260
+ if (current !== undefined &&
261
+ current.sessionOwnerNodeRid === binding.sessionOwnerNodeRid &&
262
+ current.sessionOwnerNodeGeneration === binding.sessionOwnerNodeGeneration &&
263
+ current.sessionOwnerId === binding.sessionOwnerId &&
264
+ current.sessionOwnerLeaseGeneration === binding.sessionOwnerLeaseGeneration &&
265
+ current.bindingGeneration >= binding.bindingGeneration) {
265
266
  throw new ServiceStaleGenerationError('binding', binding.actor.actorId);
266
267
  }
267
268
  this.nextBindingGeneration = max(this.nextBindingGeneration, binding.bindingGeneration + 1n);
@@ -279,10 +280,10 @@ class ServiceStatefulRegistry {
279
280
  const binding = this.bindings.get(key);
280
281
  if (binding === undefined)
281
282
  return false;
282
- if (binding.bindingGeneration !== expectedBindingGeneration
283
- || expectedSessionRid !== undefined && binding.sessionRid !== expectedSessionRid
284
- || expectedSessionOwnerNodeRid !== undefined
285
- && binding.sessionOwnerNodeRid !== expectedSessionOwnerNodeRid) {
283
+ if (binding.bindingGeneration !== expectedBindingGeneration ||
284
+ (expectedSessionRid !== undefined && binding.sessionRid !== expectedSessionRid) ||
285
+ (expectedSessionOwnerNodeRid !== undefined &&
286
+ binding.sessionOwnerNodeRid !== expectedSessionOwnerNodeRid)) {
286
287
  throw new ServiceStaleGenerationError('binding', actor.actorId);
287
288
  }
288
289
  this.bindings.delete(key);
@@ -324,8 +325,8 @@ class ServiceStatefulRegistry {
324
325
  : { kind: 'typeMismatch' };
325
326
  }
326
327
  const assigned = this.spotTypes.get(key);
327
- if (assigned !== undefined
328
- && (assigned.kind !== expectedKind || assigned.stableType !== stableType)) {
328
+ if (assigned !== undefined &&
329
+ (assigned.kind !== expectedKind || assigned.stableType !== stableType)) {
329
330
  return { kind: 'typeMismatch' };
330
331
  }
331
332
  }
@@ -376,7 +377,7 @@ class ServiceStatefulRegistry {
376
377
  requireText(owner, 'owner');
377
378
  const previous = this.turns.get(owner) ?? Promise.resolve();
378
379
  let release;
379
- const barrier = new Promise(resolve => {
380
+ const barrier = new Promise((resolve) => {
380
381
  release = resolve;
381
382
  });
382
383
  const tail = previous.then(() => barrier);
@@ -1,3 +1,4 @@
1
+ import type { ZLinkDispatchErrorReporter } from '../channels/dispatch-error-reporter';
1
2
  import type { RawServiceMeshRuntime } from './raw-service-mesh-runtime';
2
3
  import { type ReceiveKindData, type StreamSessionActorAuthorityFence } from './service-runtime-contracts';
3
4
  import type { ServiceMailboxRecord } from './service-mailbox';
@@ -221,6 +222,8 @@ export declare class ServiceStatefulRuntime {
221
222
  private userSpotOperationHandler?;
222
223
  private messageFollowHandler?;
223
224
  private mailboxDropHandler?;
225
+ private dispatchErrors?;
226
+ private dispatchErrorMeshName?;
224
227
  private readonly admittedUserSpotOperations;
225
228
  private readonly pendingInstanceActivations;
226
229
  private closed;
@@ -229,6 +232,7 @@ export declare class ServiceStatefulRuntime {
229
232
  readonly kind: 'spot_multicast' | 'actor_control' | 'actor_binding';
230
233
  readonly owner: string;
231
234
  }) => void): void;
235
+ setDispatchErrorReporter(reporter: ZLinkDispatchErrorReporter, meshName: string): void;
232
236
  createSpot(routingId?: string, kind?: 'user' | 'instance', stableType?: "user" | "instance"): ServiceSpotState;
233
237
  restoreUserSpotAuthority(spotId: string, stableType: string, generation: bigint, authorityOwnerGeneration: bigint): ServiceSpotState;
234
238
  restoreSpotAuthority(spotId: string, objectKind: 'user_spot' | 'instance_spot', stableType: string, generation: bigint, authorityOwnerGeneration: bigint): ServiceSpotState;