@zlink-systems/framework 0.10.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 (1121) hide show
  1. package/LICENSE +105 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/contracts/Actors/ZLinkActor.d.ts +7 -0
  4. package/dist/contracts/Actors/ZLinkActor.js +2 -0
  5. package/dist/contracts/Actors/ZLinkActorClient.d.ts +15 -0
  6. package/dist/contracts/Actors/ZLinkActorClient.js +2 -0
  7. package/dist/contracts/Actors/ZLinkActorContext.d.ts +14 -0
  8. package/dist/contracts/Actors/ZLinkActorContext.js +2 -0
  9. package/dist/contracts/Actors/ZLinkActorFactory.d.ts +34 -0
  10. package/dist/contracts/Actors/ZLinkActorFactory.js +2 -0
  11. package/dist/contracts/Actors/ZLinkActorManager.d.ts +34 -0
  12. package/dist/contracts/Actors/ZLinkActorManager.js +2 -0
  13. package/dist/contracts/Actors/index.d.ts +5 -0
  14. package/dist/contracts/Actors/index.js +21 -0
  15. package/dist/contracts/Channels/Calls.d.ts +28 -0
  16. package/dist/contracts/Channels/Calls.js +2 -0
  17. package/dist/contracts/Channels/IZLinkChannelClient.d.ts +5 -0
  18. package/dist/contracts/Channels/IZLinkChannelClient.js +2 -0
  19. package/dist/contracts/Channels/IZLinkFanoutClient.d.ts +11 -0
  20. package/dist/contracts/Channels/IZLinkFanoutClient.js +2 -0
  21. package/dist/contracts/Channels/RouteCalls.d.ts +11 -0
  22. package/dist/contracts/Channels/RouteCalls.js +2 -0
  23. package/dist/contracts/Channels/index.d.ts +4 -0
  24. package/dist/contracts/Channels/index.js +20 -0
  25. package/dist/contracts/Codecs/IZLinkCodecRegistryBuilder.d.ts +14 -0
  26. package/dist/contracts/Codecs/IZLinkCodecRegistryBuilder.js +2 -0
  27. package/dist/contracts/Codecs/ZLinkMessageSerializer.d.ts +5 -0
  28. package/dist/contracts/Codecs/ZLinkMessageSerializer.js +2 -0
  29. package/dist/contracts/Codecs/index.d.ts +2 -0
  30. package/dist/contracts/Codecs/index.js +18 -0
  31. package/dist/contracts/Common/ActorRef.d.ts +7 -0
  32. package/dist/contracts/Common/ActorRef.js +2 -0
  33. package/dist/contracts/Common/CoreTypes.d.ts +6 -0
  34. package/dist/contracts/Common/CoreTypes.js +2 -0
  35. package/dist/contracts/Common/Message.d.ts +9 -0
  36. package/dist/contracts/Common/Message.js +2 -0
  37. package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +12 -0
  38. package/dist/contracts/Common/ZLinkEncodedPayload.js +41 -0
  39. package/dist/contracts/Common/ZLinkMessage.d.ts +25 -0
  40. package/dist/contracts/Common/ZLinkMessage.js +127 -0
  41. package/dist/contracts/Common/ZLinkMessageMetadata.d.ts +10 -0
  42. package/dist/contracts/Common/ZLinkMessageMetadata.js +49 -0
  43. package/dist/contracts/Common/ZLinkProviderResolver.d.ts +5 -0
  44. package/dist/contracts/Common/ZLinkProviderResolver.js +2 -0
  45. package/dist/contracts/Common/encoded-payload-storage.d.ts +3 -0
  46. package/dist/contracts/Common/encoded-payload-storage.js +18 -0
  47. package/dist/contracts/Common/index.d.ts +5 -0
  48. package/dist/contracts/Common/index.js +24 -0
  49. package/dist/contracts/Configuration/Builders.d.ts +153 -0
  50. package/dist/contracts/Configuration/Builders.js +2 -0
  51. package/dist/contracts/Configuration/CodecContentType.d.ts +2 -0
  52. package/dist/contracts/Configuration/CodecContentType.js +68 -0
  53. package/dist/contracts/Configuration/CodecSerializerSelection.d.ts +9 -0
  54. package/dist/contracts/Configuration/CodecSerializerSelection.js +15 -0
  55. package/dist/contracts/Configuration/Configs.d.ts +23 -0
  56. package/dist/contracts/Configuration/Configs.js +2 -0
  57. package/dist/contracts/Configuration/ConfigurationException.d.ts +3 -0
  58. package/dist/contracts/Configuration/ConfigurationException.js +10 -0
  59. package/dist/contracts/Configuration/Connections.d.ts +5 -0
  60. package/dist/contracts/Configuration/Connections.js +2 -0
  61. package/dist/contracts/Configuration/DiagnosticsValidation.d.ts +3 -0
  62. package/dist/contracts/Configuration/DiagnosticsValidation.js +23 -0
  63. package/dist/contracts/Configuration/EndpointNotation.d.ts +77 -0
  64. package/dist/contracts/Configuration/EndpointNotation.js +218 -0
  65. package/dist/contracts/Configuration/InternalDefaults.d.ts +7 -0
  66. package/dist/contracts/Configuration/InternalDefaults.js +47 -0
  67. package/dist/contracts/Configuration/ObjectRoles.d.ts +38 -0
  68. package/dist/contracts/Configuration/ObjectRoles.js +13 -0
  69. package/dist/contracts/Configuration/Registration.d.ts +11 -0
  70. package/dist/contracts/Configuration/Registration.js +162 -0
  71. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +14 -0
  72. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +61 -0
  73. package/dist/contracts/Configuration/RegistrationBuilders.d.ts +61 -0
  74. package/dist/contracts/Configuration/RegistrationBuilders.js +1181 -0
  75. package/dist/contracts/Configuration/RegistrationCodecRegistry.d.ts +19 -0
  76. package/dist/contracts/Configuration/RegistrationCodecRegistry.js +79 -0
  77. package/dist/contracts/Configuration/RegistrationNormalizers.d.ts +23 -0
  78. package/dist/contracts/Configuration/RegistrationNormalizers.js +319 -0
  79. package/dist/contracts/Configuration/RegistrationTypes.d.ts +414 -0
  80. package/dist/contracts/Configuration/RegistrationTypes.js +2 -0
  81. package/dist/contracts/Configuration/RegistrationValidators.d.ts +2 -0
  82. package/dist/contracts/Configuration/RegistrationValidators.js +461 -0
  83. package/dist/contracts/Configuration/RouteChannelInternalState.d.ts +10 -0
  84. package/dist/contracts/Configuration/RouteChannelInternalState.js +39 -0
  85. package/dist/contracts/Configuration/RuntimeEndpointConnections.d.ts +9 -0
  86. package/dist/contracts/Configuration/RuntimeEndpointConnections.js +80 -0
  87. package/dist/contracts/Configuration/SendTimeoutValidation.d.ts +2 -0
  88. package/dist/contracts/Configuration/SendTimeoutValidation.js +16 -0
  89. package/dist/contracts/Configuration/TimerRegistrationValidator.d.ts +2 -0
  90. package/dist/contracts/Configuration/TimerRegistrationValidator.js +24 -0
  91. package/dist/contracts/Configuration/index.d.ts +5 -0
  92. package/dist/contracts/Configuration/index.js +18 -0
  93. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +181 -0
  94. package/dist/contracts/Dispatch/ZLinkDispatchOptions.js +89 -0
  95. package/dist/contracts/Dispatch/ZLinkFlowOrigin.d.ts +1 -0
  96. package/dist/contracts/Dispatch/ZLinkFlowOrigin.js +2 -0
  97. package/dist/contracts/Dispatch/index.d.ts +2 -0
  98. package/dist/contracts/Dispatch/index.js +18 -0
  99. package/dist/contracts/Errors/ZLinkFrameworkException.d.ts +20 -0
  100. package/dist/contracts/Errors/ZLinkFrameworkException.js +29 -0
  101. package/dist/contracts/Errors/index.d.ts +1 -0
  102. package/dist/contracts/Errors/index.js +6 -0
  103. package/dist/contracts/Eventing/Metrics.d.ts +29 -0
  104. package/dist/contracts/Eventing/Metrics.js +4 -0
  105. package/dist/contracts/Eventing/index.d.ts +1 -0
  106. package/dist/contracts/Eventing/index.js +17 -0
  107. package/dist/contracts/Handlers/Attributes.d.ts +24 -0
  108. package/dist/contracts/Handlers/Attributes.js +84 -0
  109. package/dist/contracts/Handlers/Contexts.d.ts +18 -0
  110. package/dist/contracts/Handlers/Contexts.js +2 -0
  111. package/dist/contracts/Handlers/IZLinkChannelHandlers.d.ts +43 -0
  112. package/dist/contracts/Handlers/IZLinkChannelHandlers.js +2 -0
  113. package/dist/contracts/Handlers/IZLinkHandlerFilter.d.ts +15 -0
  114. package/dist/contracts/Handlers/IZLinkHandlerFilter.js +11 -0
  115. package/dist/contracts/Handlers/JsonContract.d.ts +46 -0
  116. package/dist/contracts/Handlers/JsonContract.js +137 -0
  117. package/dist/contracts/Handlers/ZLinkHandlerFilterNext.d.ts +1 -0
  118. package/dist/contracts/Handlers/ZLinkHandlerFilterNext.js +2 -0
  119. package/dist/contracts/Handlers/index.d.ts +5 -0
  120. package/dist/contracts/Handlers/index.js +33 -0
  121. package/dist/contracts/Locations/ActorTransfer.d.ts +41 -0
  122. package/dist/contracts/Locations/ActorTransfer.js +2 -0
  123. package/dist/contracts/Locations/Authority.d.ts +296 -0
  124. package/dist/contracts/Locations/Authority.js +17 -0
  125. package/dist/contracts/Locations/Diagnostics.d.ts +42 -0
  126. package/dist/contracts/Locations/Diagnostics.js +12 -0
  127. package/dist/contracts/Locations/Keys.d.ts +86 -0
  128. package/dist/contracts/Locations/Keys.js +2 -0
  129. package/dist/contracts/Locations/Models.d.ts +7 -0
  130. package/dist/contracts/Locations/Models.js +23 -0
  131. package/dist/contracts/Locations/Options.d.ts +23 -0
  132. package/dist/contracts/Locations/Options.js +20 -0
  133. package/dist/contracts/Locations/Readiness.d.ts +5 -0
  134. package/dist/contracts/Locations/Readiness.js +2 -0
  135. package/dist/contracts/Locations/RelocationStore.d.ts +38 -0
  136. package/dist/contracts/Locations/RelocationStore.js +2 -0
  137. package/dist/contracts/Locations/Resolvers.d.ts +4 -0
  138. package/dist/contracts/Locations/Resolvers.js +2 -0
  139. package/dist/contracts/Locations/Rows.d.ts +152 -0
  140. package/dist/contracts/Locations/Rows.js +19 -0
  141. package/dist/contracts/Locations/RuntimeQuery.d.ts +25 -0
  142. package/dist/contracts/Locations/RuntimeQuery.js +2 -0
  143. package/dist/contracts/Locations/Stores.d.ts +88 -0
  144. package/dist/contracts/Locations/Stores.js +2 -0
  145. package/dist/contracts/Locations/Values.d.ts +27 -0
  146. package/dist/contracts/Locations/Values.js +36 -0
  147. package/dist/contracts/Locations/Watch.d.ts +14 -0
  148. package/dist/contracts/Locations/Watch.js +12 -0
  149. package/dist/contracts/Locations/Writes.d.ts +48 -0
  150. package/dist/contracts/Locations/Writes.js +15 -0
  151. package/dist/contracts/Locations/index.d.ts +12 -0
  152. package/dist/contracts/Locations/index.js +30 -0
  153. package/dist/contracts/RouteMesh/Contracts.d.ts +102 -0
  154. package/dist/contracts/RouteMesh/Contracts.js +39 -0
  155. package/dist/contracts/RouteMesh/RuntimeTopology.d.ts +165 -0
  156. package/dist/contracts/RouteMesh/RuntimeTopology.js +38 -0
  157. package/dist/contracts/RouteMesh/index.d.ts +2 -0
  158. package/dist/contracts/RouteMesh/index.js +18 -0
  159. package/dist/contracts/Spots/Builders.d.ts +10 -0
  160. package/dist/contracts/Spots/Builders.js +2 -0
  161. package/dist/contracts/Spots/Contracts.d.ts +110 -0
  162. package/dist/contracts/Spots/Contracts.js +9 -0
  163. package/dist/contracts/Spots/SpotKind.d.ts +8 -0
  164. package/dist/contracts/Spots/SpotKind.js +28 -0
  165. package/dist/contracts/Spots/ZLinkSpot.d.ts +62 -0
  166. package/dist/contracts/Spots/ZLinkSpot.js +15 -0
  167. package/dist/contracts/Spots/index.d.ts +3 -0
  168. package/dist/contracts/Spots/index.js +19 -0
  169. package/dist/contracts/Streams/BoundSessionContracts.d.ts +8 -0
  170. package/dist/contracts/Streams/BoundSessionContracts.js +2 -0
  171. package/dist/contracts/Streams/IZLinkSession.d.ts +44 -0
  172. package/dist/contracts/Streams/IZLinkSession.js +2 -0
  173. package/dist/contracts/Streams/IZLinkSessionActor.d.ts +15 -0
  174. package/dist/contracts/Streams/IZLinkSessionActor.js +2 -0
  175. package/dist/contracts/Streams/IZLinkSessionPacketHandler.d.ts +9 -0
  176. package/dist/contracts/Streams/IZLinkSessionPacketHandler.js +2 -0
  177. package/dist/contracts/Streams/IZLinkStream.d.ts +9 -0
  178. package/dist/contracts/Streams/IZLinkStream.js +2 -0
  179. package/dist/contracts/Streams/ZLinkMessageMetadata.d.ts +1 -0
  180. package/dist/contracts/Streams/ZLinkMessageMetadata.js +2 -0
  181. package/dist/contracts/Streams/ZLinkStreamCompression.d.ts +8 -0
  182. package/dist/contracts/Streams/ZLinkStreamCompression.js +2 -0
  183. package/dist/contracts/Streams/ZLinkStreamError.d.ts +8 -0
  184. package/dist/contracts/Streams/ZLinkStreamError.js +8 -0
  185. package/dist/contracts/Streams/index.d.ts +8 -0
  186. package/dist/contracts/Streams/index.js +24 -0
  187. package/dist/contracts/Timers/IZLinkTimer.d.ts +5 -0
  188. package/dist/contracts/Timers/IZLinkTimer.js +2 -0
  189. package/dist/contracts/Timers/ZLinkTimerOptions.d.ts +10 -0
  190. package/dist/contracts/Timers/ZLinkTimerOptions.js +9 -0
  191. package/dist/contracts/Timers/ZLinkTimerTick.d.ts +12 -0
  192. package/dist/contracts/Timers/ZLinkTimerTick.js +2 -0
  193. package/dist/contracts/Timers/index.d.ts +3 -0
  194. package/dist/contracts/Timers/index.js +19 -0
  195. package/dist/contracts/index.d.ts +25 -0
  196. package/dist/contracts/index.js +45 -0
  197. package/dist/index.d.ts +1 -0
  198. package/dist/index.js +17 -0
  199. package/dist/internal.d.ts +26 -0
  200. package/dist/internal.js +48 -0
  201. package/dist/location-store-integration.d.ts +5 -0
  202. package/dist/location-store-integration.js +31 -0
  203. package/dist/nest-integration.d.ts +49 -0
  204. package/dist/nest-integration.js +143 -0
  205. package/dist/runtime/abort.d.ts +13 -0
  206. package/dist/runtime/abort.js +71 -0
  207. package/dist/runtime/actors/actor-authority-payload-codec.d.ts +33 -0
  208. package/dist/runtime/actors/actor-authority-payload-codec.js +366 -0
  209. package/dist/runtime/actors/actor-authority-publication.d.ts +28 -0
  210. package/dist/runtime/actors/actor-authority-publication.js +207 -0
  211. package/dist/runtime/actors/actor-client.d.ts +36 -0
  212. package/dist/runtime/actors/actor-client.js +612 -0
  213. package/dist/runtime/actors/actor-context.d.ts +26 -0
  214. package/dist/runtime/actors/actor-context.js +433 -0
  215. package/dist/runtime/actors/actor-creation.d.ts +19 -0
  216. package/dist/runtime/actors/actor-creation.js +158 -0
  217. package/dist/runtime/actors/actor-execution-context.d.ts +6 -0
  218. package/dist/runtime/actors/actor-execution-context.js +27 -0
  219. package/dist/runtime/actors/actor-handoff.d.ts +191 -0
  220. package/dist/runtime/actors/actor-handoff.js +1252 -0
  221. package/dist/runtime/actors/actor-join-deferred-scope.d.ts +11 -0
  222. package/dist/runtime/actors/actor-join-deferred-scope.js +144 -0
  223. package/dist/runtime/actors/actor-join-relocation.d.ts +38 -0
  224. package/dist/runtime/actors/actor-join-relocation.js +2 -0
  225. package/dist/runtime/actors/actor-lifecycle-snapshot.d.ts +21 -0
  226. package/dist/runtime/actors/actor-lifecycle-snapshot.js +58 -0
  227. package/dist/runtime/actors/actor-local-native-join.d.ts +27 -0
  228. package/dist/runtime/actors/actor-local-native-join.js +409 -0
  229. package/dist/runtime/actors/actor-mailbox.d.ts +10 -0
  230. package/dist/runtime/actors/actor-mailbox.js +53 -0
  231. package/dist/runtime/actors/actor-message-follow-context.d.ts +46 -0
  232. package/dist/runtime/actors/actor-message-follow-context.js +257 -0
  233. package/dist/runtime/actors/actor-native-lookup.d.ts +4 -0
  234. package/dist/runtime/actors/actor-native-lookup.js +30 -0
  235. package/dist/runtime/actors/actor-packet-relay-wire.d.ts +73 -0
  236. package/dist/runtime/actors/actor-packet-relay-wire.js +144 -0
  237. package/dist/runtime/actors/actor-remote-joiner.d.ts +37 -0
  238. package/dist/runtime/actors/actor-remote-joiner.js +122 -0
  239. package/dist/runtime/actors/actor-remote-wire.d.ts +73 -0
  240. package/dist/runtime/actors/actor-remote-wire.js +84 -0
  241. package/dist/runtime/actors/actor-retry-delay.d.ts +5 -0
  242. package/dist/runtime/actors/actor-retry-delay.js +40 -0
  243. package/dist/runtime/actors/actor-routed-join-transport.d.ts +33 -0
  244. package/dist/runtime/actors/actor-routed-join-transport.js +2 -0
  245. package/dist/runtime/actors/actor-routed-json-request.d.ts +11 -0
  246. package/dist/runtime/actors/actor-routed-json-request.js +39 -0
  247. package/dist/runtime/actors/actor-runtime-contracts.d.ts +63 -0
  248. package/dist/runtime/actors/actor-runtime-contracts.js +2 -0
  249. package/dist/runtime/actors/actor-runtime-state.d.ts +152 -0
  250. package/dist/runtime/actors/actor-runtime-state.js +545 -0
  251. package/dist/runtime/actors/actor-source-transfer.d.ts +27 -0
  252. package/dist/runtime/actors/actor-source-transfer.js +2 -0
  253. package/dist/runtime/actors/actor-transfer-registry.d.ts +18 -0
  254. package/dist/runtime/actors/actor-transfer-registry.js +71 -0
  255. package/dist/runtime/actors/actor-transport-delivery-gate.d.ts +6 -0
  256. package/dist/runtime/actors/actor-transport-delivery-gate.js +4 -0
  257. package/dist/runtime/actors/bound-session-wire.d.ts +81 -0
  258. package/dist/runtime/actors/bound-session-wire.js +184 -0
  259. package/dist/runtime/actors/deferred-join-accepted-journal.d.ts +47 -0
  260. package/dist/runtime/actors/deferred-join-accepted-journal.js +962 -0
  261. package/dist/runtime/actors/index.d.ts +79 -0
  262. package/dist/runtime/actors/index.js +639 -0
  263. package/dist/runtime/actors/post-commit-actor-binder.d.ts +18 -0
  264. package/dist/runtime/actors/post-commit-actor-binder.js +68 -0
  265. package/dist/runtime/actors/post-commit-actor-location.d.ts +19 -0
  266. package/dist/runtime/actors/post-commit-actor-location.js +72 -0
  267. package/dist/runtime/actors/spot-actor-dispatch.d.ts +59 -0
  268. package/dist/runtime/actors/spot-actor-dispatch.js +179 -0
  269. package/dist/runtime/actors/transferred-actor-rollback.d.ts +16 -0
  270. package/dist/runtime/actors/transferred-actor-rollback.js +91 -0
  271. package/dist/runtime/admission.d.ts +20 -0
  272. package/dist/runtime/admission.js +166 -0
  273. package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +57 -0
  274. package/dist/runtime/application-jobs/application-ingress-record-owner.js +185 -0
  275. package/dist/runtime/application-jobs/application-job-queue-handler-start-gate.d.ts +8 -0
  276. package/dist/runtime/application-jobs/application-job-queue-handler-start-gate.js +8 -0
  277. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +17 -0
  278. package/dist/runtime/application-jobs/application-job-queue-scope.js +57 -0
  279. package/dist/runtime/application-jobs/contracts.d.ts +19 -0
  280. package/dist/runtime/application-jobs/contracts.js +2 -0
  281. package/dist/runtime/application-jobs/receive-flow-controller.d.ts +32 -0
  282. package/dist/runtime/application-jobs/receive-flow-controller.js +165 -0
  283. package/dist/runtime/backend/contracts/index.d.ts +487 -0
  284. package/dist/runtime/backend/contracts/index.js +29 -0
  285. package/dist/runtime/backend/index.d.ts +9 -0
  286. package/dist/runtime/backend/index.js +25 -0
  287. package/dist/runtime/backend/mesh-actor-session-node-adapter.d.ts +3 -0
  288. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +51 -0
  289. package/dist/runtime/backend/mesh-completion-table.d.ts +34 -0
  290. package/dist/runtime/backend/mesh-completion-table.js +124 -0
  291. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +48 -0
  292. package/dist/runtime/backend/mesh-dispatch-pump.js +322 -0
  293. package/dist/runtime/backend/mesh-record-dispatcher.d.ts +19 -0
  294. package/dist/runtime/backend/mesh-record-dispatcher.js +53 -0
  295. package/dist/runtime/backend/node/index.d.ts +4 -0
  296. package/dist/runtime/backend/node/index.js +22 -0
  297. package/dist/runtime/backend/node/node-backend-adapter-factory.d.ts +12 -0
  298. package/dist/runtime/backend/node/node-backend-adapter-factory.js +161 -0
  299. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +52 -0
  300. package/dist/runtime/backend/node/node-backend-adapter-support.js +203 -0
  301. package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +13 -0
  302. package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +52 -0
  303. package/dist/runtime/backend/node/node-mesh-backend-adapter.d.ts +11 -0
  304. package/dist/runtime/backend/node/node-mesh-backend-adapter.js +23 -0
  305. package/dist/runtime/backend/node/node-monitor-backend-adapter.d.ts +6 -0
  306. package/dist/runtime/backend/node/node-monitor-backend-adapter.js +38 -0
  307. package/dist/runtime/backend/node/node-raw-binding-port.d.ts +8 -0
  308. package/dist/runtime/backend/node/node-raw-binding-port.js +411 -0
  309. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +266 -0
  310. package/dist/runtime/backend/node/node-raw-mesh-backend.js +1707 -0
  311. package/dist/runtime/backend/node/node-socket-backend-adapter.d.ts +9 -0
  312. package/dist/runtime/backend/node/node-socket-backend-adapter.js +286 -0
  313. package/dist/runtime/backend/node-backend-adapter.d.ts +9 -0
  314. package/dist/runtime/backend/node-backend-adapter.js +12 -0
  315. package/dist/runtime/backend/raw-binding-port.d.ts +58 -0
  316. package/dist/runtime/backend/raw-binding-port.js +2 -0
  317. package/dist/runtime/backend/runtime-message.d.ts +14 -0
  318. package/dist/runtime/backend/runtime-message.js +44 -0
  319. package/dist/runtime/backend/runtime-values.d.ts +78 -0
  320. package/dist/runtime/backend/runtime-values.js +66 -0
  321. package/dist/runtime/channels/channel-autoconnect.d.ts +14 -0
  322. package/dist/runtime/channels/channel-autoconnect.js +23 -0
  323. package/dist/runtime/channels/channel-clients.d.ts +50 -0
  324. package/dist/runtime/channels/channel-clients.js +329 -0
  325. package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +76 -0
  326. package/dist/runtime/channels/channel-dispatch-pipeline.js +237 -0
  327. package/dist/runtime/channels/channel-dispatch-services.d.ts +52 -0
  328. package/dist/runtime/channels/channel-dispatch-services.js +132 -0
  329. package/dist/runtime/channels/channel-dispatchers.d.ts +125 -0
  330. package/dist/runtime/channels/channel-dispatchers.js +575 -0
  331. package/dist/runtime/channels/channel-envelope-inspection.d.ts +25 -0
  332. package/dist/runtime/channels/channel-envelope-inspection.js +96 -0
  333. package/dist/runtime/channels/channel-envelope.d.ts +73 -0
  334. package/dist/runtime/channels/channel-envelope.js +546 -0
  335. package/dist/runtime/channels/channel-framework-packets.d.ts +2 -0
  336. package/dist/runtime/channels/channel-framework-packets.js +6 -0
  337. package/dist/runtime/channels/channel-multipart.d.ts +16 -0
  338. package/dist/runtime/channels/channel-multipart.js +31 -0
  339. package/dist/runtime/channels/channel-outbound-operations.d.ts +33 -0
  340. package/dist/runtime/channels/channel-outbound-operations.js +343 -0
  341. package/dist/runtime/channels/channel-receive-loops.d.ts +151 -0
  342. package/dist/runtime/channels/channel-receive-loops.js +728 -0
  343. package/dist/runtime/channels/channel-receive-task-tracker.d.ts +14 -0
  344. package/dist/runtime/channels/channel-receive-task-tracker.js +37 -0
  345. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +77 -0
  346. package/dist/runtime/channels/channel-runtime-lifecycle.js +630 -0
  347. package/dist/runtime/channels/channel-runtime-manager.d.ts +84 -0
  348. package/dist/runtime/channels/channel-runtime-manager.js +193 -0
  349. package/dist/runtime/channels/channel-socket-options.d.ts +18 -0
  350. package/dist/runtime/channels/channel-socket-options.js +119 -0
  351. package/dist/runtime/channels/channel-socket-registry.d.ts +157 -0
  352. package/dist/runtime/channels/channel-socket-registry.js +1428 -0
  353. package/dist/runtime/channels/channel-transports.d.ts +126 -0
  354. package/dist/runtime/channels/channel-transports.js +448 -0
  355. package/dist/runtime/channels/client-server-location-runtime.d.ts +41 -0
  356. package/dist/runtime/channels/client-server-location-runtime.js +465 -0
  357. package/dist/runtime/channels/client-server-service-wire.d.ts +48 -0
  358. package/dist/runtime/channels/client-server-service-wire.js +306 -0
  359. package/dist/runtime/channels/dispatch-error-reporter.d.ts +22 -0
  360. package/dist/runtime/channels/dispatch-error-reporter.js +133 -0
  361. package/dist/runtime/channels/fanout-location-runtime.d.ts +38 -0
  362. package/dist/runtime/channels/fanout-location-runtime.js +356 -0
  363. package/dist/runtime/channels/fanout-service-wire.d.ts +12 -0
  364. package/dist/runtime/channels/fanout-service-wire.js +29 -0
  365. package/dist/runtime/channels/handler-filter-scope.d.ts +8 -0
  366. package/dist/runtime/channels/handler-filter-scope.js +11 -0
  367. package/dist/runtime/channels/index.d.ts +9 -0
  368. package/dist/runtime/channels/index.js +30 -0
  369. package/dist/runtime/channels/local-spot-route-transport.d.ts +9 -0
  370. package/dist/runtime/channels/local-spot-route-transport.js +40 -0
  371. package/dist/runtime/channels/route-disconnected-error.d.ts +3 -0
  372. package/dist/runtime/channels/route-disconnected-error.js +10 -0
  373. package/dist/runtime/channels/route-member-snapshot.d.ts +10 -0
  374. package/dist/runtime/channels/route-member-snapshot.js +55 -0
  375. package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +12 -0
  376. package/dist/runtime/channels/router-socket-spot-route-transport.js +43 -0
  377. package/dist/runtime/channels/source-spot-router.d.ts +10 -0
  378. package/dist/runtime/channels/source-spot-router.js +46 -0
  379. package/dist/runtime/channels/spot-direct-envelope.d.ts +5 -0
  380. package/dist/runtime/channels/spot-direct-envelope.js +29 -0
  381. package/dist/runtime/channels/spot-node-route-transport.d.ts +13 -0
  382. package/dist/runtime/channels/spot-node-route-transport.js +60 -0
  383. package/dist/runtime/channels/spot-route-bridge-transport.d.ts +14 -0
  384. package/dist/runtime/channels/spot-route-bridge-transport.js +58 -0
  385. package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +50 -0
  386. package/dist/runtime/channels/spot-route-dispatch-strategy.js +128 -0
  387. package/dist/runtime/channels/spot-route-target-resolver.d.ts +16 -0
  388. package/dist/runtime/channels/spot-route-target-resolver.js +92 -0
  389. package/dist/runtime/codecs/index.d.ts +14 -0
  390. package/dist/runtime/codecs/index.js +44 -0
  391. package/dist/runtime/configuration/index.d.ts +1 -0
  392. package/dist/runtime/configuration/index.js +17 -0
  393. package/dist/runtime/diagnostics/dispatch-error-port.d.ts +8 -0
  394. package/dist/runtime/diagnostics/dispatch-error-port.js +2 -0
  395. package/dist/runtime/diagnostics/flow-context.d.ts +21 -0
  396. package/dist/runtime/diagnostics/flow-context.js +68 -0
  397. package/dist/runtime/diagnostics/index.d.ts +82 -0
  398. package/dist/runtime/diagnostics/index.js +335 -0
  399. package/dist/runtime/diagnostics/internal-event-contracts.d.ts +139 -0
  400. package/dist/runtime/diagnostics/internal-event-contracts.js +68 -0
  401. package/dist/runtime/diagnostics/message-flow.d.ts +55 -0
  402. package/dist/runtime/diagnostics/message-flow.js +420 -0
  403. package/dist/runtime/diagnostics/runtime-metrics.d.ts +123 -0
  404. package/dist/runtime/diagnostics/runtime-metrics.js +454 -0
  405. package/dist/runtime/diagnostics/runtime-observation-queue.d.ts +58 -0
  406. package/dist/runtime/diagnostics/runtime-observation-queue.js +324 -0
  407. package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +33 -0
  408. package/dist/runtime/diagnostics/topology-runtime-projections.js +255 -0
  409. package/dist/runtime/execution/index.d.ts +114 -0
  410. package/dist/runtime/execution/index.js +363 -0
  411. package/dist/runtime/execution/serial-execution-queue.d.ts +94 -0
  412. package/dist/runtime/execution/serial-execution-queue.js +411 -0
  413. package/dist/runtime/execution/serial-work-size.d.ts +4 -0
  414. package/dist/runtime/execution/serial-work-size.js +28 -0
  415. package/dist/runtime/execution/state-lane.d.ts +28 -0
  416. package/dist/runtime/execution/state-lane.js +105 -0
  417. package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +72 -0
  418. package/dist/runtime/foundation/actor-join-recovery-codec.js +333 -0
  419. package/dist/runtime/foundation/event-loop-resources.d.ts +37 -0
  420. package/dist/runtime/foundation/event-loop-resources.js +163 -0
  421. package/dist/runtime/foundation/index.d.ts +18 -0
  422. package/dist/runtime/foundation/index.js +34 -0
  423. package/dist/runtime/foundation/message-follow-suppression-registry.d.ts +38 -0
  424. package/dist/runtime/foundation/message-follow-suppression-registry.js +89 -0
  425. package/dist/runtime/foundation/operation-identity.d.ts +12 -0
  426. package/dist/runtime/foundation/operation-identity.js +33 -0
  427. package/dist/runtime/foundation/operation-registry.d.ts +42 -0
  428. package/dist/runtime/foundation/operation-registry.js +146 -0
  429. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +143 -0
  430. package/dist/runtime/foundation/raw-service-mesh-runtime.js +1349 -0
  431. package/dist/runtime/foundation/route-mesh-connection-policy.d.ts +3 -0
  432. package/dist/runtime/foundation/route-mesh-connection-policy.js +13 -0
  433. package/dist/runtime/foundation/runtime-state-projections.d.ts +13 -0
  434. package/dist/runtime/foundation/runtime-state-projections.js +44 -0
  435. package/dist/runtime/foundation/service-authority-payload-codec.d.ts +56 -0
  436. package/dist/runtime/foundation/service-authority-payload-codec.js +411 -0
  437. package/dist/runtime/foundation/service-discovery-registry.d.ts +42 -0
  438. package/dist/runtime/foundation/service-discovery-registry.js +175 -0
  439. package/dist/runtime/foundation/service-instance-activation-recovery-codec.d.ts +19 -0
  440. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +287 -0
  441. package/dist/runtime/foundation/service-liveness-registry.d.ts +28 -0
  442. package/dist/runtime/foundation/service-liveness-registry.js +109 -0
  443. package/dist/runtime/foundation/service-mailbox.d.ts +60 -0
  444. package/dist/runtime/foundation/service-mailbox.js +283 -0
  445. package/dist/runtime/foundation/service-maintenance-runtime.d.ts +45 -0
  446. package/dist/runtime/foundation/service-maintenance-runtime.js +198 -0
  447. package/dist/runtime/foundation/service-metadata-codec.d.ts +2 -0
  448. package/dist/runtime/foundation/service-metadata-codec.js +69 -0
  449. package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +35 -0
  450. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +139 -0
  451. package/dist/runtime/foundation/service-relocation-coordinator.d.ts +19 -0
  452. package/dist/runtime/foundation/service-relocation-coordinator.js +16 -0
  453. package/dist/runtime/foundation/service-relocation-object-owner.d.ts +71 -0
  454. package/dist/runtime/foundation/service-relocation-object-owner.js +242 -0
  455. package/dist/runtime/foundation/service-relocation-runtime.d.ts +143 -0
  456. package/dist/runtime/foundation/service-relocation-runtime.js +1080 -0
  457. package/dist/runtime/foundation/service-runtime-contracts.d.ts +332 -0
  458. package/dist/runtime/foundation/service-runtime-contracts.js +66 -0
  459. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +23 -0
  460. package/dist/runtime/foundation/service-session-binding-ingress-port.js +11 -0
  461. package/dist/runtime/foundation/service-stateful-registry.d.ts +142 -0
  462. package/dist/runtime/foundation/service-stateful-registry.js +465 -0
  463. package/dist/runtime/foundation/service-stateful-runtime.d.ts +393 -0
  464. package/dist/runtime/foundation/service-stateful-runtime.js +3898 -0
  465. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +597 -0
  466. package/dist/runtime/foundation/service-stateful-wire-codec.js +2006 -0
  467. package/dist/runtime/foundation/service-topology-registry.d.ts +68 -0
  468. package/dist/runtime/foundation/service-topology-registry.js +393 -0
  469. package/dist/runtime/foundation/service-weighted-selection.d.ts +14 -0
  470. package/dist/runtime/foundation/service-weighted-selection.js +128 -0
  471. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +10 -0
  472. package/dist/runtime/foundation/service-wire-binary-primitives.js +53 -0
  473. package/dist/runtime/foundation/service-wire-codec.d.ts +22 -0
  474. package/dist/runtime/foundation/service-wire-codec.js +67 -0
  475. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +110 -0
  476. package/dist/runtime/foundation/service-wire-constants.generated.js +132 -0
  477. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +102 -0
  478. package/dist/runtime/foundation/service-wire-m6a-codec.js +568 -0
  479. package/dist/runtime/framework-errors-internal.d.ts +95 -0
  480. package/dist/runtime/framework-errors-internal.js +301 -0
  481. package/dist/runtime/handlers/handler-instance-scope.d.ts +11 -0
  482. package/dist/runtime/handlers/handler-instance-scope.js +284 -0
  483. package/dist/runtime/handlers/index.d.ts +13 -0
  484. package/dist/runtime/handlers/index.js +57 -0
  485. package/dist/runtime/host/actor-packet-relay.d.ts +60 -0
  486. package/dist/runtime/host/actor-packet-relay.js +664 -0
  487. package/dist/runtime/host/actor-placement-coordinator.d.ts +32 -0
  488. package/dist/runtime/host/actor-placement-coordinator.js +386 -0
  489. package/dist/runtime/host/actor-runtime-options-factory.d.ts +65 -0
  490. package/dist/runtime/host/actor-runtime-options-factory.js +160 -0
  491. package/dist/runtime/host/actor-transfer-authority-runtime.d.ts +26 -0
  492. package/dist/runtime/host/actor-transfer-authority-runtime.js +138 -0
  493. package/dist/runtime/host/actor-transfer-runtime.d.ts +149 -0
  494. package/dist/runtime/host/actor-transfer-runtime.js +1245 -0
  495. package/dist/runtime/host/application-job-queue.d.ts +99 -0
  496. package/dist/runtime/host/application-job-queue.js +409 -0
  497. package/dist/runtime/host/bound-session-relay.d.ts +41 -0
  498. package/dist/runtime/host/bound-session-relay.js +52 -0
  499. package/dist/runtime/host/bounded-replay-map.d.ts +12 -0
  500. package/dist/runtime/host/bounded-replay-map.js +42 -0
  501. package/dist/runtime/host/channel-runtime-options-factory.d.ts +22 -0
  502. package/dist/runtime/host/channel-runtime-options-factory.js +76 -0
  503. package/dist/runtime/host/entry-actor-runtime.d.ts +30 -0
  504. package/dist/runtime/host/entry-actor-runtime.js +80 -0
  505. package/dist/runtime/host/host-capacity-status.d.ts +11 -0
  506. package/dist/runtime/host/host-capacity-status.js +85 -0
  507. package/dist/runtime/host/index.d.ts +188 -0
  508. package/dist/runtime/host/index.js +2552 -0
  509. package/dist/runtime/host/instance-activation-authority.d.ts +33 -0
  510. package/dist/runtime/host/instance-activation-authority.js +496 -0
  511. package/dist/runtime/host/location-runtime-owner.d.ts +48 -0
  512. package/dist/runtime/host/location-runtime-owner.js +227 -0
  513. package/dist/runtime/host/mesh-router-resolver.d.ts +16 -0
  514. package/dist/runtime/host/mesh-router-resolver.js +108 -0
  515. package/dist/runtime/host/relocation-direct-transfer.d.ts +81 -0
  516. package/dist/runtime/host/relocation-direct-transfer.js +240 -0
  517. package/dist/runtime/host/relocation-integrity-fault-gate.d.ts +6 -0
  518. package/dist/runtime/host/relocation-integrity-fault-gate.js +5 -0
  519. package/dist/runtime/host/relocation-state-adapter.d.ts +8 -0
  520. package/dist/runtime/host/relocation-state-adapter.js +13 -0
  521. package/dist/runtime/host/remote-actor-join-receiver.d.ts +47 -0
  522. package/dist/runtime/host/remote-actor-join-receiver.js +161 -0
  523. package/dist/runtime/host/remote-actor-packet-target-store.d.ts +29 -0
  524. package/dist/runtime/host/remote-actor-packet-target-store.js +185 -0
  525. package/dist/runtime/host/remote-bound-session-relay.d.ts +58 -0
  526. package/dist/runtime/host/remote-bound-session-relay.js +540 -0
  527. package/dist/runtime/host/route-mesh-runtime-options.d.ts +9 -0
  528. package/dist/runtime/host/route-mesh-runtime-options.js +41 -0
  529. package/dist/runtime/host/route-mesh-runtime.d.ts +76 -0
  530. package/dist/runtime/host/route-mesh-runtime.js +746 -0
  531. package/dist/runtime/host/runtime-shutdown.d.ts +33 -0
  532. package/dist/runtime/host/runtime-shutdown.js +68 -0
  533. package/dist/runtime/host/service-relocation-control.d.ts +7 -0
  534. package/dist/runtime/host/service-relocation-control.js +24 -0
  535. package/dist/runtime/host/service-relocation-host-runtime.d.ts +241 -0
  536. package/dist/runtime/host/service-relocation-host-runtime.js +4113 -0
  537. package/dist/runtime/host/spot-address-transport.d.ts +47 -0
  538. package/dist/runtime/host/spot-address-transport.js +601 -0
  539. package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +38 -0
  540. package/dist/runtime/host/spot-node-runtime-options-factory.js +36 -0
  541. package/dist/runtime/host/spot-runtime-options-factory.d.ts +48 -0
  542. package/dist/runtime/host/spot-runtime-options-factory.js +169 -0
  543. package/dist/runtime/host/stateful-authority-route-runtime.d.ts +34 -0
  544. package/dist/runtime/host/stateful-authority-route-runtime.js +440 -0
  545. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +69 -0
  546. package/dist/runtime/host/user-spot-creation-coordinator.js +759 -0
  547. package/dist/runtime/locations/actor-location-claims.d.ts +43 -0
  548. package/dist/runtime/locations/actor-location-claims.js +319 -0
  549. package/dist/runtime/locations/actor-session-route-claims.d.ts +10 -0
  550. package/dist/runtime/locations/actor-session-route-claims.js +51 -0
  551. package/dist/runtime/locations/aggregate-inventory-store.d.ts +18 -0
  552. package/dist/runtime/locations/aggregate-inventory-store.js +399 -0
  553. package/dist/runtime/locations/authority-key-codec.d.ts +6 -0
  554. package/dist/runtime/locations/authority-key-codec.js +78 -0
  555. package/dist/runtime/locations/auto-connect-loop.d.ts +37 -0
  556. package/dist/runtime/locations/auto-connect-loop.js +112 -0
  557. package/dist/runtime/locations/auto-connect-planner.d.ts +9 -0
  558. package/dist/runtime/locations/auto-connect-planner.js +137 -0
  559. package/dist/runtime/locations/auto-connect-reconciler.d.ts +57 -0
  560. package/dist/runtime/locations/auto-connect-reconciler.js +358 -0
  561. package/dist/runtime/locations/auto-connect-types.d.ts +42 -0
  562. package/dist/runtime/locations/auto-connect-types.js +2 -0
  563. package/dist/runtime/locations/auto-connect.d.ts +4 -0
  564. package/dist/runtime/locations/auto-connect.js +20 -0
  565. package/dist/runtime/locations/canonical-codec.d.ts +7 -0
  566. package/dist/runtime/locations/canonical-codec.js +48 -0
  567. package/dist/runtime/locations/domain-store-contract.d.ts +34 -0
  568. package/dist/runtime/locations/domain-store-contract.js +2 -0
  569. package/dist/runtime/locations/in-memory-authority-store.d.ts +51 -0
  570. package/dist/runtime/locations/in-memory-authority-store.js +895 -0
  571. package/dist/runtime/locations/in-memory-location-store.d.ts +78 -0
  572. package/dist/runtime/locations/in-memory-location-store.js +1008 -0
  573. package/dist/runtime/locations/in-memory-provider-location-store.d.ts +19 -0
  574. package/dist/runtime/locations/in-memory-provider-location-store.js +183 -0
  575. package/dist/runtime/locations/index.d.ts +11 -0
  576. package/dist/runtime/locations/index.js +27 -0
  577. package/dist/runtime/locations/internal-location-contracts.d.ts +7 -0
  578. package/dist/runtime/locations/internal-location-contracts.js +21 -0
  579. package/dist/runtime/locations/internal-store-contracts.d.ts +35 -0
  580. package/dist/runtime/locations/internal-store-contracts.js +2 -0
  581. package/dist/runtime/locations/key-codec.d.ts +13 -0
  582. package/dist/runtime/locations/key-codec.js +41 -0
  583. package/dist/runtime/locations/lease-tracker.d.ts +36 -0
  584. package/dist/runtime/locations/lease-tracker.js +155 -0
  585. package/dist/runtime/locations/lifecycle-runtime.d.ts +19 -0
  586. package/dist/runtime/locations/lifecycle-runtime.js +2 -0
  587. package/dist/runtime/locations/lifecycle.d.ts +40 -0
  588. package/dist/runtime/locations/lifecycle.js +120 -0
  589. package/dist/runtime/locations/location-store-repository.d.ts +72 -0
  590. package/dist/runtime/locations/location-store-repository.js +3198 -0
  591. package/dist/runtime/locations/relocation-blob.d.ts +7 -0
  592. package/dist/runtime/locations/relocation-blob.js +24 -0
  593. package/dist/runtime/locations/resolvers.d.ts +145 -0
  594. package/dist/runtime/locations/resolvers.js +693 -0
  595. package/dist/runtime/locations/runtime.d.ts +144 -0
  596. package/dist/runtime/locations/runtime.js +792 -0
  597. package/dist/runtime/locations/spot-location-claims.d.ts +36 -0
  598. package/dist/runtime/locations/spot-location-claims.js +305 -0
  599. package/dist/runtime/messaging/creation-payload-codec.d.ts +4 -0
  600. package/dist/runtime/messaging/creation-payload-codec.js +40 -0
  601. package/dist/runtime/messaging/framework-json-v1.d.ts +7 -0
  602. package/dist/runtime/messaging/framework-json-v1.js +296 -0
  603. package/dist/runtime/messaging/index.d.ts +1 -0
  604. package/dist/runtime/messaging/index.js +2 -0
  605. package/dist/runtime/messaging/packet-name.d.ts +4 -0
  606. package/dist/runtime/messaging/packet-name.js +79 -0
  607. package/dist/runtime/messaging/payload-codec.d.ts +25 -0
  608. package/dist/runtime/messaging/payload-codec.js +255 -0
  609. package/dist/runtime/messaging/submission-result.d.ts +15 -0
  610. package/dist/runtime/messaging/submission-result.js +37 -0
  611. package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +395 -0
  612. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +645 -0
  613. package/dist/runtime/routing-id.d.ts +8 -0
  614. package/dist/runtime/routing-id.js +112 -0
  615. package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +124 -0
  616. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +269 -0
  617. package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +33 -0
  618. package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +94 -0
  619. package/dist/runtime/spots/index.d.ts +247 -0
  620. package/dist/runtime/spots/index.js +2090 -0
  621. package/dist/runtime/spots/spot-activation-registry.d.ts +47 -0
  622. package/dist/runtime/spots/spot-activation-registry.js +272 -0
  623. package/dist/runtime/spots/spot-activation-state.d.ts +104 -0
  624. package/dist/runtime/spots/spot-activation-state.js +288 -0
  625. package/dist/runtime/spots/spot-activation.d.ts +89 -0
  626. package/dist/runtime/spots/spot-activation.js +601 -0
  627. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +20 -0
  628. package/dist/runtime/spots/spot-actor-admission-coordinator.js +194 -0
  629. package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +83 -0
  630. package/dist/runtime/spots/spot-actor-join-dispatch.js +185 -0
  631. package/dist/runtime/spots/spot-actor-lifecycle-drain.d.ts +22 -0
  632. package/dist/runtime/spots/spot-actor-lifecycle-drain.js +51 -0
  633. package/dist/runtime/spots/spot-actor-membership.d.ts +39 -0
  634. package/dist/runtime/spots/spot-actor-membership.js +179 -0
  635. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +91 -0
  636. package/dist/runtime/spots/spot-actor-packet-dispatch.js +315 -0
  637. package/dist/runtime/spots/spot-actor-packet-drain.d.ts +40 -0
  638. package/dist/runtime/spots/spot-actor-packet-drain.js +235 -0
  639. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +18 -0
  640. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +110 -0
  641. package/dist/runtime/spots/spot-closing.d.ts +2 -0
  642. package/dist/runtime/spots/spot-closing.js +30 -0
  643. package/dist/runtime/spots/spot-context.d.ts +46 -0
  644. package/dist/runtime/spots/spot-context.js +113 -0
  645. package/dist/runtime/spots/spot-entry-activation.d.ts +107 -0
  646. package/dist/runtime/spots/spot-entry-activation.js +342 -0
  647. package/dist/runtime/spots/spot-handle.d.ts +28 -0
  648. package/dist/runtime/spots/spot-handle.js +38 -0
  649. package/dist/runtime/spots/spot-handler-registry.d.ts +52 -0
  650. package/dist/runtime/spots/spot-handler-registry.js +155 -0
  651. package/dist/runtime/spots/spot-lifecycle-metrics.d.ts +8 -0
  652. package/dist/runtime/spots/spot-lifecycle-metrics.js +16 -0
  653. package/dist/runtime/spots/spot-location-claim.d.ts +25 -0
  654. package/dist/runtime/spots/spot-location-claim.js +55 -0
  655. package/dist/runtime/spots/spot-manager-internal-contracts.d.ts +10 -0
  656. package/dist/runtime/spots/spot-manager-internal-contracts.js +2 -0
  657. package/dist/runtime/spots/spot-manager-public.d.ts +32 -0
  658. package/dist/runtime/spots/spot-manager-public.js +219 -0
  659. package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +26 -0
  660. package/dist/runtime/spots/spot-native-actor-join-admission.js +105 -0
  661. package/dist/runtime/spots/spot-native-flags.d.ts +2 -0
  662. package/dist/runtime/spots/spot-native-flags.js +5 -0
  663. package/dist/runtime/spots/spot-node-autoconnect.d.ts +23 -0
  664. package/dist/runtime/spots/spot-node-autoconnect.js +246 -0
  665. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +137 -0
  666. package/dist/runtime/spots/spot-node-runtime-manager.js +1111 -0
  667. package/dist/runtime/spots/spot-outbound.d.ts +78 -0
  668. package/dist/runtime/spots/spot-outbound.js +460 -0
  669. package/dist/runtime/spots/spot-provider.d.ts +4 -0
  670. package/dist/runtime/spots/spot-provider.js +28 -0
  671. package/dist/runtime/spots/spot-publisher-transport.d.ts +14 -0
  672. package/dist/runtime/spots/spot-publisher-transport.js +28 -0
  673. package/dist/runtime/spots/spot-remote-codec.d.ts +50 -0
  674. package/dist/runtime/spots/spot-remote-codec.js +190 -0
  675. package/dist/runtime/spots/spot-remote-route-codec.d.ts +47 -0
  676. package/dist/runtime/spots/spot-remote-route-codec.js +168 -0
  677. package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +25 -0
  678. package/dist/runtime/spots/spot-route-packet-dispatch.js +238 -0
  679. package/dist/runtime/spots/spot-route-replies.d.ts +17 -0
  680. package/dist/runtime/spots/spot-route-replies.js +76 -0
  681. package/dist/runtime/spots/spot-route-reply-wire.d.ts +10 -0
  682. package/dist/runtime/spots/spot-route-reply-wire.js +6 -0
  683. package/dist/runtime/spots/spot-routed-actor-admission.d.ts +36 -0
  684. package/dist/runtime/spots/spot-routed-actor-admission.js +240 -0
  685. package/dist/runtime/spots/spot-routed-bound-session-dispatch.d.ts +19 -0
  686. package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +46 -0
  687. package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +54 -0
  688. package/dist/runtime/spots/spot-routed-frame-dispatch.js +162 -0
  689. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +43 -0
  690. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +152 -0
  691. package/dist/runtime/spots/spot-routing-internal.d.ts +28 -0
  692. package/dist/runtime/spots/spot-routing-internal.js +2 -0
  693. package/dist/runtime/spots/spot-runtime-ports.d.ts +64 -0
  694. package/dist/runtime/spots/spot-runtime-ports.js +2 -0
  695. package/dist/runtime/spots/spot-serial-executor.d.ts +38 -0
  696. package/dist/runtime/spots/spot-serial-executor.js +133 -0
  697. package/dist/runtime/spots/spot-serial-turn-executor.d.ts +54 -0
  698. package/dist/runtime/spots/spot-serial-turn-executor.js +219 -0
  699. package/dist/runtime/spots/spot-subscription-dispatch.d.ts +32 -0
  700. package/dist/runtime/spots/spot-subscription-dispatch.js +194 -0
  701. package/dist/runtime/spots/spot-timer.d.ts +110 -0
  702. package/dist/runtime/spots/spot-timer.js +419 -0
  703. package/dist/runtime/streams/actor-session-binding-registry.d.ts +193 -0
  704. package/dist/runtime/streams/actor-session-binding-registry.js +1127 -0
  705. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +20 -0
  706. package/dist/runtime/streams/actor-session-binding-runtime-owner.js +19 -0
  707. package/dist/runtime/streams/actor-session-lifecycle-coordinator.d.ts +4 -0
  708. package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +24 -0
  709. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +29 -0
  710. package/dist/runtime/streams/bound-actor-relay-sender.js +181 -0
  711. package/dist/runtime/streams/bound-session-response-target.d.ts +25 -0
  712. package/dist/runtime/streams/bound-session-response-target.js +54 -0
  713. package/dist/runtime/streams/bound-session-service.d.ts +48 -0
  714. package/dist/runtime/streams/bound-session-service.js +201 -0
  715. package/dist/runtime/streams/index.d.ts +152 -0
  716. package/dist/runtime/streams/index.js +338 -0
  717. package/dist/runtime/streams/managed-stream.d.ts +53 -0
  718. package/dist/runtime/streams/managed-stream.js +329 -0
  719. package/dist/runtime/streams/native-fallback-bound-session.d.ts +24 -0
  720. package/dist/runtime/streams/native-fallback-bound-session.js +201 -0
  721. package/dist/runtime/streams/protocol.d.ts +67 -0
  722. package/dist/runtime/streams/protocol.js +244 -0
  723. package/dist/runtime/streams/session-actor-coordinator.d.ts +56 -0
  724. package/dist/runtime/streams/session-actor-coordinator.js +371 -0
  725. package/dist/runtime/streams/session-calls.d.ts +59 -0
  726. package/dist/runtime/streams/session-calls.js +123 -0
  727. package/dist/runtime/streams/session-context.d.ts +108 -0
  728. package/dist/runtime/streams/session-context.js +377 -0
  729. package/dist/runtime/streams/session-local-actors.d.ts +10 -0
  730. package/dist/runtime/streams/session-local-actors.js +26 -0
  731. package/dist/runtime/streams/session-provider.d.ts +4 -0
  732. package/dist/runtime/streams/session-provider.js +30 -0
  733. package/dist/runtime/streams/session-requests.d.ts +25 -0
  734. package/dist/runtime/streams/session-requests.js +100 -0
  735. package/dist/runtime/streams/session-serial-executor.d.ts +12 -0
  736. package/dist/runtime/streams/session-serial-executor.js +58 -0
  737. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +62 -0
  738. package/dist/runtime/streams/stream-binding-runtime-ports.js +2 -0
  739. package/dist/runtime/streams/stream-frame-factory.d.ts +44 -0
  740. package/dist/runtime/streams/stream-frame-factory.js +149 -0
  741. package/dist/runtime/streams/stream-message-utils.d.ts +5 -0
  742. package/dist/runtime/streams/stream-message-utils.js +74 -0
  743. package/dist/runtime/streams/stream-session-runtime.d.ts +166 -0
  744. package/dist/runtime/streams/stream-session-runtime.js +1144 -0
  745. package/dist/runtime/workers/index.d.ts +38 -0
  746. package/dist/runtime/workers/index.js +474 -0
  747. package/package.json +19 -0
  748. package/src/contracts/Actors/ZLinkActor.ts +8 -0
  749. package/src/contracts/Actors/ZLinkActorClient.ts +18 -0
  750. package/src/contracts/Actors/ZLinkActorContext.ts +15 -0
  751. package/src/contracts/Actors/ZLinkActorFactory.ts +41 -0
  752. package/src/contracts/Actors/ZLinkActorManager.ts +31 -0
  753. package/src/contracts/Actors/index.ts +5 -0
  754. package/src/contracts/Channels/Calls.ts +33 -0
  755. package/src/contracts/Channels/IZLinkChannelClient.ts +6 -0
  756. package/src/contracts/Channels/IZLinkFanoutClient.ts +13 -0
  757. package/src/contracts/Channels/RouteCalls.ts +13 -0
  758. package/src/contracts/Channels/index.ts +4 -0
  759. package/src/contracts/Codecs/IZLinkCodecRegistryBuilder.ts +22 -0
  760. package/src/contracts/Codecs/ZLinkMessageSerializer.ts +6 -0
  761. package/src/contracts/Codecs/index.ts +2 -0
  762. package/src/contracts/Common/ActorRef.ts +8 -0
  763. package/src/contracts/Common/CoreTypes.ts +6 -0
  764. package/src/contracts/Common/Message.ts +9 -0
  765. package/src/contracts/Common/ZLinkEncodedPayload.ts +47 -0
  766. package/src/contracts/Common/ZLinkMessage.ts +135 -0
  767. package/src/contracts/Common/ZLinkMessageMetadata.ts +77 -0
  768. package/src/contracts/Common/ZLinkProviderResolver.ts +6 -0
  769. package/src/contracts/Common/encoded-payload-storage.ts +16 -0
  770. package/src/contracts/Common/index.ts +5 -0
  771. package/src/contracts/Configuration/Builders.ts +200 -0
  772. package/src/contracts/Configuration/CodecContentType.ts +68 -0
  773. package/src/contracts/Configuration/CodecSerializerSelection.ts +28 -0
  774. package/src/contracts/Configuration/Configs.ts +27 -0
  775. package/src/contracts/Configuration/ConfigurationException.ts +6 -0
  776. package/src/contracts/Configuration/Connections.ts +5 -0
  777. package/src/contracts/Configuration/DiagnosticsValidation.ts +25 -0
  778. package/src/contracts/Configuration/EndpointNotation.ts +232 -0
  779. package/src/contracts/Configuration/InternalDefaults.ts +13 -0
  780. package/src/contracts/Configuration/ObjectRoles.ts +47 -0
  781. package/src/contracts/Configuration/Registration.ts +191 -0
  782. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +76 -0
  783. package/src/contracts/Configuration/RegistrationBuilders.ts +1705 -0
  784. package/src/contracts/Configuration/RegistrationCodecRegistry.ts +118 -0
  785. package/src/contracts/Configuration/RegistrationNormalizers.ts +404 -0
  786. package/src/contracts/Configuration/RegistrationTypes.ts +499 -0
  787. package/src/contracts/Configuration/RegistrationValidators.ts +698 -0
  788. package/src/contracts/Configuration/RouteChannelInternalState.ts +50 -0
  789. package/src/contracts/Configuration/RuntimeEndpointConnections.ts +91 -0
  790. package/src/contracts/Configuration/SendTimeoutValidation.ts +15 -0
  791. package/src/contracts/Configuration/TimerRegistrationValidator.ts +37 -0
  792. package/src/contracts/Configuration/index.ts +35 -0
  793. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +222 -0
  794. package/src/contracts/Dispatch/ZLinkFlowOrigin.ts +1 -0
  795. package/src/contracts/Dispatch/index.ts +2 -0
  796. package/src/contracts/Errors/ZLinkFrameworkException.ts +27 -0
  797. package/src/contracts/Errors/index.ts +4 -0
  798. package/src/contracts/Eventing/Metrics.ts +27 -0
  799. package/src/contracts/Eventing/index.ts +1 -0
  800. package/src/contracts/Handlers/Attributes.ts +111 -0
  801. package/src/contracts/Handlers/Contexts.ts +21 -0
  802. package/src/contracts/Handlers/IZLinkChannelHandlers.ts +69 -0
  803. package/src/contracts/Handlers/IZLinkHandlerFilter.ts +22 -0
  804. package/src/contracts/Handlers/JsonContract.ts +172 -0
  805. package/src/contracts/Handlers/ZLinkHandlerFilterNext.ts +1 -0
  806. package/src/contracts/Handlers/index.ts +17 -0
  807. package/src/contracts/Locations/ActorTransfer.ts +84 -0
  808. package/src/contracts/Locations/Authority.ts +308 -0
  809. package/src/contracts/Locations/Diagnostics.ts +48 -0
  810. package/src/contracts/Locations/Keys.ts +93 -0
  811. package/src/contracts/Locations/Models.ts +7 -0
  812. package/src/contracts/Locations/Options.ts +42 -0
  813. package/src/contracts/Locations/Readiness.ts +11 -0
  814. package/src/contracts/Locations/RelocationStore.ts +51 -0
  815. package/src/contracts/Locations/Resolvers.ts +8 -0
  816. package/src/contracts/Locations/Rows.ts +164 -0
  817. package/src/contracts/Locations/RuntimeQuery.ts +56 -0
  818. package/src/contracts/Locations/Stores.ts +92 -0
  819. package/src/contracts/Locations/Values.ts +32 -0
  820. package/src/contracts/Locations/Watch.ts +16 -0
  821. package/src/contracts/Locations/Writes.ts +56 -0
  822. package/src/contracts/Locations/index.ts +48 -0
  823. package/src/contracts/RouteMesh/Contracts.ts +145 -0
  824. package/src/contracts/RouteMesh/RuntimeTopology.ts +201 -0
  825. package/src/contracts/RouteMesh/index.ts +2 -0
  826. package/src/contracts/Spots/Builders.ts +11 -0
  827. package/src/contracts/Spots/Contracts.ts +150 -0
  828. package/src/contracts/Spots/SpotKind.ts +24 -0
  829. package/src/contracts/Spots/ZLinkSpot.ts +88 -0
  830. package/src/contracts/Spots/index.ts +3 -0
  831. package/src/contracts/Streams/BoundSessionContracts.ts +9 -0
  832. package/src/contracts/Streams/IZLinkSession.ts +52 -0
  833. package/src/contracts/Streams/IZLinkSessionActor.ts +17 -0
  834. package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +11 -0
  835. package/src/contracts/Streams/IZLinkStream.ts +10 -0
  836. package/src/contracts/Streams/ZLinkMessageMetadata.ts +1 -0
  837. package/src/contracts/Streams/ZLinkStreamCompression.ts +9 -0
  838. package/src/contracts/Streams/ZLinkStreamError.ts +9 -0
  839. package/src/contracts/Streams/index.ts +8 -0
  840. package/src/contracts/Timers/IZLinkTimer.ts +5 -0
  841. package/src/contracts/Timers/ZLinkTimerOptions.ts +11 -0
  842. package/src/contracts/Timers/ZLinkTimerTick.ts +12 -0
  843. package/src/contracts/Timers/index.ts +3 -0
  844. package/src/contracts/index.ts +71 -0
  845. package/src/index.ts +1 -0
  846. package/src/internal.ts +29 -0
  847. package/src/location-store-integration.ts +51 -0
  848. package/src/nest-integration.ts +251 -0
  849. package/src/runtime/abort.ts +70 -0
  850. package/src/runtime/actors/actor-authority-payload-codec.ts +454 -0
  851. package/src/runtime/actors/actor-authority-publication.ts +277 -0
  852. package/src/runtime/actors/actor-client.ts +1018 -0
  853. package/src/runtime/actors/actor-context.ts +583 -0
  854. package/src/runtime/actors/actor-creation.ts +254 -0
  855. package/src/runtime/actors/actor-execution-context.ts +38 -0
  856. package/src/runtime/actors/actor-handoff.ts +1911 -0
  857. package/src/runtime/actors/actor-join-deferred-scope.ts +183 -0
  858. package/src/runtime/actors/actor-join-relocation.ts +39 -0
  859. package/src/runtime/actors/actor-lifecycle-snapshot.ts +90 -0
  860. package/src/runtime/actors/actor-local-native-join.ts +725 -0
  861. package/src/runtime/actors/actor-mailbox.ts +92 -0
  862. package/src/runtime/actors/actor-message-follow-context.ts +347 -0
  863. package/src/runtime/actors/actor-native-lookup.ts +38 -0
  864. package/src/runtime/actors/actor-packet-relay-wire.ts +223 -0
  865. package/src/runtime/actors/actor-remote-joiner.ts +238 -0
  866. package/src/runtime/actors/actor-remote-wire.ts +169 -0
  867. package/src/runtime/actors/actor-retry-delay.ts +37 -0
  868. package/src/runtime/actors/actor-routed-join-transport.ts +58 -0
  869. package/src/runtime/actors/actor-routed-json-request.ts +44 -0
  870. package/src/runtime/actors/actor-runtime-contracts.ts +126 -0
  871. package/src/runtime/actors/actor-runtime-state.ts +805 -0
  872. package/src/runtime/actors/actor-source-transfer.ts +62 -0
  873. package/src/runtime/actors/actor-transfer-registry.ts +112 -0
  874. package/src/runtime/actors/actor-transport-delivery-gate.ts +17 -0
  875. package/src/runtime/actors/bound-session-wire.ts +257 -0
  876. package/src/runtime/actors/deferred-join-accepted-journal.ts +1319 -0
  877. package/src/runtime/actors/index.ts +972 -0
  878. package/src/runtime/actors/post-commit-actor-binder.ts +70 -0
  879. package/src/runtime/actors/post-commit-actor-location.ts +114 -0
  880. package/src/runtime/actors/spot-actor-dispatch.ts +362 -0
  881. package/src/runtime/actors/transferred-actor-rollback.ts +123 -0
  882. package/src/runtime/admission.ts +192 -0
  883. package/src/runtime/application-jobs/application-ingress-record-owner.ts +216 -0
  884. package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +10 -0
  885. package/src/runtime/application-jobs/application-job-queue-scope.ts +64 -0
  886. package/src/runtime/application-jobs/contracts.ts +26 -0
  887. package/src/runtime/application-jobs/receive-flow-controller.ts +188 -0
  888. package/src/runtime/backend/contracts/index.ts +765 -0
  889. package/src/runtime/backend/index.ts +9 -0
  890. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +73 -0
  891. package/src/runtime/backend/mesh-completion-table.ts +165 -0
  892. package/src/runtime/backend/mesh-dispatch-pump.ts +363 -0
  893. package/src/runtime/backend/mesh-record-dispatcher.ts +65 -0
  894. package/src/runtime/backend/node/index.ts +4 -0
  895. package/src/runtime/backend/node/node-backend-adapter-factory.ts +204 -0
  896. package/src/runtime/backend/node/node-backend-adapter-support.ts +257 -0
  897. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +133 -0
  898. package/src/runtime/backend/node/node-mesh-backend-adapter.ts +44 -0
  899. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +39 -0
  900. package/src/runtime/backend/node/node-raw-binding-port.contract.ts +21 -0
  901. package/src/runtime/backend/node/node-raw-binding-port.ts +518 -0
  902. package/src/runtime/backend/node/node-raw-mesh-backend.ts +2669 -0
  903. package/src/runtime/backend/node/node-socket-backend-adapter.ts +372 -0
  904. package/src/runtime/backend/node-backend-adapter.ts +19 -0
  905. package/src/runtime/backend/raw-binding-port.ts +69 -0
  906. package/src/runtime/backend/runtime-message.ts +51 -0
  907. package/src/runtime/backend/runtime-values.ts +107 -0
  908. package/src/runtime/channels/channel-autoconnect.ts +46 -0
  909. package/src/runtime/channels/channel-clients.ts +527 -0
  910. package/src/runtime/channels/channel-dispatch-pipeline.ts +408 -0
  911. package/src/runtime/channels/channel-dispatch-services.ts +234 -0
  912. package/src/runtime/channels/channel-dispatchers.ts +790 -0
  913. package/src/runtime/channels/channel-envelope-inspection.ts +125 -0
  914. package/src/runtime/channels/channel-envelope.ts +743 -0
  915. package/src/runtime/channels/channel-framework-packets.ts +8 -0
  916. package/src/runtime/channels/channel-multipart.ts +61 -0
  917. package/src/runtime/channels/channel-outbound-operations.ts +584 -0
  918. package/src/runtime/channels/channel-receive-loops.ts +901 -0
  919. package/src/runtime/channels/channel-receive-task-tracker.ts +39 -0
  920. package/src/runtime/channels/channel-runtime-lifecycle.ts +969 -0
  921. package/src/runtime/channels/channel-runtime-manager.ts +444 -0
  922. package/src/runtime/channels/channel-socket-options.ts +153 -0
  923. package/src/runtime/channels/channel-socket-registry.ts +1837 -0
  924. package/src/runtime/channels/channel-transports.ts +1154 -0
  925. package/src/runtime/channels/client-server-location-runtime.ts +576 -0
  926. package/src/runtime/channels/client-server-service-wire.ts +390 -0
  927. package/src/runtime/channels/dispatch-error-reporter.ts +165 -0
  928. package/src/runtime/channels/fanout-location-runtime.ts +459 -0
  929. package/src/runtime/channels/fanout-service-wire.ts +43 -0
  930. package/src/runtime/channels/handler-filter-scope.ts +29 -0
  931. package/src/runtime/channels/index.ts +45 -0
  932. package/src/runtime/channels/local-spot-route-transport.ts +59 -0
  933. package/src/runtime/channels/route-disconnected-error.ts +6 -0
  934. package/src/runtime/channels/route-member-snapshot.ts +55 -0
  935. package/src/runtime/channels/router-socket-spot-route-transport.ts +77 -0
  936. package/src/runtime/channels/source-spot-router.ts +89 -0
  937. package/src/runtime/channels/spot-direct-envelope.ts +44 -0
  938. package/src/runtime/channels/spot-node-route-transport.ts +92 -0
  939. package/src/runtime/channels/spot-route-bridge-transport.ts +75 -0
  940. package/src/runtime/channels/spot-route-dispatch-strategy.ts +329 -0
  941. package/src/runtime/channels/spot-route-target-resolver.ts +101 -0
  942. package/src/runtime/codecs/index.ts +69 -0
  943. package/src/runtime/configuration/index.ts +1 -0
  944. package/src/runtime/diagnostics/dispatch-error-port.ts +8 -0
  945. package/src/runtime/diagnostics/flow-context.ts +84 -0
  946. package/src/runtime/diagnostics/index.ts +441 -0
  947. package/src/runtime/diagnostics/internal-event-contracts.ts +135 -0
  948. package/src/runtime/diagnostics/message-flow.ts +560 -0
  949. package/src/runtime/diagnostics/runtime-metrics.ts +601 -0
  950. package/src/runtime/diagnostics/runtime-observation-queue.ts +362 -0
  951. package/src/runtime/diagnostics/topology-runtime-projections.ts +298 -0
  952. package/src/runtime/execution/index.ts +466 -0
  953. package/src/runtime/execution/serial-execution-queue.ts +534 -0
  954. package/src/runtime/execution/serial-work-size.ts +31 -0
  955. package/src/runtime/execution/state-lane.ts +116 -0
  956. package/src/runtime/foundation/actor-join-recovery-codec.ts +465 -0
  957. package/src/runtime/foundation/event-loop-resources.ts +162 -0
  958. package/src/runtime/foundation/index.ts +18 -0
  959. package/src/runtime/foundation/message-follow-suppression-registry.ts +130 -0
  960. package/src/runtime/foundation/operation-identity.ts +49 -0
  961. package/src/runtime/foundation/operation-registry.ts +162 -0
  962. package/src/runtime/foundation/raw-service-mesh-runtime.ts +1771 -0
  963. package/src/runtime/foundation/route-mesh-connection-policy.ts +28 -0
  964. package/src/runtime/foundation/runtime-state-projections.ts +68 -0
  965. package/src/runtime/foundation/service-authority-payload-codec.ts +566 -0
  966. package/src/runtime/foundation/service-discovery-registry.ts +263 -0
  967. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +329 -0
  968. package/src/runtime/foundation/service-liveness-registry.ts +144 -0
  969. package/src/runtime/foundation/service-mailbox.ts +369 -0
  970. package/src/runtime/foundation/service-maintenance-runtime.ts +242 -0
  971. package/src/runtime/foundation/service-metadata-codec.ts +75 -0
  972. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +218 -0
  973. package/src/runtime/foundation/service-relocation-coordinator.ts +37 -0
  974. package/src/runtime/foundation/service-relocation-object-owner.ts +428 -0
  975. package/src/runtime/foundation/service-relocation-runtime.ts +1407 -0
  976. package/src/runtime/foundation/service-runtime-contracts.ts +423 -0
  977. package/src/runtime/foundation/service-session-binding-ingress-port.ts +45 -0
  978. package/src/runtime/foundation/service-stateful-registry.ts +664 -0
  979. package/src/runtime/foundation/service-stateful-runtime.ts +5753 -0
  980. package/src/runtime/foundation/service-stateful-wire-codec.ts +3008 -0
  981. package/src/runtime/foundation/service-topology-registry.ts +599 -0
  982. package/src/runtime/foundation/service-weighted-selection.ts +166 -0
  983. package/src/runtime/foundation/service-wire-binary-primitives.ts +80 -0
  984. package/src/runtime/foundation/service-wire-codec.ts +91 -0
  985. package/src/runtime/foundation/service-wire-constants.generated.ts +131 -0
  986. package/src/runtime/foundation/service-wire-m6a-codec.ts +647 -0
  987. package/src/runtime/framework-errors-internal.ts +338 -0
  988. package/src/runtime/handlers/handler-instance-scope.ts +372 -0
  989. package/src/runtime/handlers/index.ts +93 -0
  990. package/src/runtime/host/actor-packet-relay.ts +1070 -0
  991. package/src/runtime/host/actor-placement-coordinator.ts +573 -0
  992. package/src/runtime/host/actor-runtime-options-factory.ts +282 -0
  993. package/src/runtime/host/actor-transfer-authority-runtime.ts +225 -0
  994. package/src/runtime/host/actor-transfer-runtime.ts +1958 -0
  995. package/src/runtime/host/application-job-queue.ts +518 -0
  996. package/src/runtime/host/bound-session-relay.ts +94 -0
  997. package/src/runtime/host/bounded-replay-map.ts +42 -0
  998. package/src/runtime/host/channel-runtime-options-factory.ts +104 -0
  999. package/src/runtime/host/entry-actor-runtime.ts +115 -0
  1000. package/src/runtime/host/host-capacity-status.ts +103 -0
  1001. package/src/runtime/host/index.ts +3492 -0
  1002. package/src/runtime/host/instance-activation-authority.ts +658 -0
  1003. package/src/runtime/host/location-runtime-owner.ts +313 -0
  1004. package/src/runtime/host/mesh-router-resolver.ts +114 -0
  1005. package/src/runtime/host/relocation-direct-transfer.ts +273 -0
  1006. package/src/runtime/host/relocation-integrity-fault-gate.ts +8 -0
  1007. package/src/runtime/host/relocation-state-adapter.ts +24 -0
  1008. package/src/runtime/host/remote-actor-join-receiver.ts +264 -0
  1009. package/src/runtime/host/remote-actor-packet-target-store.ts +244 -0
  1010. package/src/runtime/host/remote-bound-session-relay.ts +900 -0
  1011. package/src/runtime/host/route-mesh-runtime-options.ts +46 -0
  1012. package/src/runtime/host/route-mesh-runtime.ts +891 -0
  1013. package/src/runtime/host/runtime-shutdown.ts +101 -0
  1014. package/src/runtime/host/service-relocation-control.ts +28 -0
  1015. package/src/runtime/host/service-relocation-host-runtime.ts +5817 -0
  1016. package/src/runtime/host/spot-address-transport.ts +997 -0
  1017. package/src/runtime/host/spot-node-runtime-options-factory.ts +82 -0
  1018. package/src/runtime/host/spot-runtime-options-factory.ts +286 -0
  1019. package/src/runtime/host/stateful-authority-route-runtime.ts +662 -0
  1020. package/src/runtime/host/user-spot-creation-coordinator.ts +1176 -0
  1021. package/src/runtime/locations/actor-location-claims.ts +426 -0
  1022. package/src/runtime/locations/actor-session-route-claims.ts +64 -0
  1023. package/src/runtime/locations/aggregate-inventory-store.ts +581 -0
  1024. package/src/runtime/locations/authority-key-codec.ts +80 -0
  1025. package/src/runtime/locations/auto-connect-loop.ts +131 -0
  1026. package/src/runtime/locations/auto-connect-planner.ts +178 -0
  1027. package/src/runtime/locations/auto-connect-reconciler.ts +425 -0
  1028. package/src/runtime/locations/auto-connect-types.ts +62 -0
  1029. package/src/runtime/locations/auto-connect.ts +4 -0
  1030. package/src/runtime/locations/canonical-codec.ts +54 -0
  1031. package/src/runtime/locations/domain-store-contract.ts +149 -0
  1032. package/src/runtime/locations/in-memory-authority-store.ts +1172 -0
  1033. package/src/runtime/locations/in-memory-location-store.ts +1467 -0
  1034. package/src/runtime/locations/in-memory-provider-location-store.ts +213 -0
  1035. package/src/runtime/locations/index.ts +11 -0
  1036. package/src/runtime/locations/internal-location-contracts.ts +22 -0
  1037. package/src/runtime/locations/internal-store-contracts.ts +90 -0
  1038. package/src/runtime/locations/key-codec.ts +61 -0
  1039. package/src/runtime/locations/lease-tracker.ts +221 -0
  1040. package/src/runtime/locations/lifecycle-runtime.ts +44 -0
  1041. package/src/runtime/locations/lifecycle.ts +272 -0
  1042. package/src/runtime/locations/location-store-repository.ts +4211 -0
  1043. package/src/runtime/locations/relocation-blob.ts +36 -0
  1044. package/src/runtime/locations/resolvers.ts +1054 -0
  1045. package/src/runtime/locations/runtime.ts +1126 -0
  1046. package/src/runtime/locations/spot-location-claims.ts +435 -0
  1047. package/src/runtime/messaging/creation-payload-codec.ts +59 -0
  1048. package/src/runtime/messaging/framework-json-v1.ts +307 -0
  1049. package/src/runtime/messaging/index.ts +1 -0
  1050. package/src/runtime/messaging/packet-name.ts +94 -0
  1051. package/src/runtime/messaging/payload-codec.ts +418 -0
  1052. package/src/runtime/messaging/submission-result.ts +61 -0
  1053. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +189 -0
  1054. package/src/runtime/routing-id.ts +125 -0
  1055. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +418 -0
  1056. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +147 -0
  1057. package/src/runtime/spots/index.ts +3303 -0
  1058. package/src/runtime/spots/spot-activation-registry.ts +335 -0
  1059. package/src/runtime/spots/spot-activation-state.ts +414 -0
  1060. package/src/runtime/spots/spot-activation.ts +1027 -0
  1061. package/src/runtime/spots/spot-actor-admission-coordinator.ts +354 -0
  1062. package/src/runtime/spots/spot-actor-join-dispatch.ts +303 -0
  1063. package/src/runtime/spots/spot-actor-lifecycle-drain.ts +79 -0
  1064. package/src/runtime/spots/spot-actor-membership.ts +266 -0
  1065. package/src/runtime/spots/spot-actor-packet-dispatch.ts +593 -0
  1066. package/src/runtime/spots/spot-actor-packet-drain.ts +328 -0
  1067. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +162 -0
  1068. package/src/runtime/spots/spot-closing.ts +34 -0
  1069. package/src/runtime/spots/spot-context.ts +259 -0
  1070. package/src/runtime/spots/spot-entry-activation.ts +551 -0
  1071. package/src/runtime/spots/spot-handle.ts +101 -0
  1072. package/src/runtime/spots/spot-handler-registry.ts +273 -0
  1073. package/src/runtime/spots/spot-lifecycle-metrics.ts +15 -0
  1074. package/src/runtime/spots/spot-location-claim.ts +86 -0
  1075. package/src/runtime/spots/spot-manager-internal-contracts.ts +11 -0
  1076. package/src/runtime/spots/spot-manager-public.ts +361 -0
  1077. package/src/runtime/spots/spot-native-actor-join-admission.ts +151 -0
  1078. package/src/runtime/spots/spot-native-flags.ts +4 -0
  1079. package/src/runtime/spots/spot-node-autoconnect.ts +325 -0
  1080. package/src/runtime/spots/spot-node-runtime-manager.ts +1573 -0
  1081. package/src/runtime/spots/spot-outbound.ts +761 -0
  1082. package/src/runtime/spots/spot-provider.ts +36 -0
  1083. package/src/runtime/spots/spot-publisher-transport.ts +69 -0
  1084. package/src/runtime/spots/spot-remote-codec.ts +308 -0
  1085. package/src/runtime/spots/spot-remote-route-codec.ts +284 -0
  1086. package/src/runtime/spots/spot-route-packet-dispatch.ts +359 -0
  1087. package/src/runtime/spots/spot-route-replies.ts +126 -0
  1088. package/src/runtime/spots/spot-route-reply-wire.ts +15 -0
  1089. package/src/runtime/spots/spot-routed-actor-admission.ts +351 -0
  1090. package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +132 -0
  1091. package/src/runtime/spots/spot-routed-frame-dispatch.ts +250 -0
  1092. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +254 -0
  1093. package/src/runtime/spots/spot-routing-internal.ts +33 -0
  1094. package/src/runtime/spots/spot-runtime-ports.ts +196 -0
  1095. package/src/runtime/spots/spot-serial-executor.ts +170 -0
  1096. package/src/runtime/spots/spot-serial-turn-executor.ts +319 -0
  1097. package/src/runtime/spots/spot-subscription-dispatch.ts +252 -0
  1098. package/src/runtime/spots/spot-timer.ts +609 -0
  1099. package/src/runtime/streams/actor-session-binding-registry.ts +1691 -0
  1100. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +78 -0
  1101. package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +20 -0
  1102. package/src/runtime/streams/bound-actor-relay-sender.ts +275 -0
  1103. package/src/runtime/streams/bound-session-response-target.ts +91 -0
  1104. package/src/runtime/streams/bound-session-service.ts +500 -0
  1105. package/src/runtime/streams/index.ts +706 -0
  1106. package/src/runtime/streams/managed-stream.ts +509 -0
  1107. package/src/runtime/streams/native-fallback-bound-session.ts +321 -0
  1108. package/src/runtime/streams/protocol.ts +291 -0
  1109. package/src/runtime/streams/session-actor-coordinator.ts +605 -0
  1110. package/src/runtime/streams/session-calls.ts +221 -0
  1111. package/src/runtime/streams/session-context.ts +609 -0
  1112. package/src/runtime/streams/session-local-actors.ts +30 -0
  1113. package/src/runtime/streams/session-provider.ts +50 -0
  1114. package/src/runtime/streams/session-requests.ts +109 -0
  1115. package/src/runtime/streams/session-serial-executor.ts +97 -0
  1116. package/src/runtime/streams/stream-binding-runtime-ports.ts +106 -0
  1117. package/src/runtime/streams/stream-frame-factory.ts +255 -0
  1118. package/src/runtime/streams/stream-message-utils.ts +89 -0
  1119. package/src/runtime/streams/stream-session-runtime.ts +1420 -0
  1120. package/src/runtime/workers/index.ts +580 -0
  1121. package/tsconfig.json +17 -0
@@ -0,0 +1,1691 @@
1
+ import { ZLinkFrameworkInternalErrorKind, createInternalFrameworkException } from '../framework-errors-internal';
2
+ import { createAbortError, throwIfAborted } from '../abort';
3
+ import { AsyncResource } from 'node:async_hooks';
4
+ import { ZLinkStateLane } from '../execution/state-lane';
5
+ import { routingIdsEqual } from '../routing-id';
6
+ import type {
7
+ ServiceSessionBindingAdmissionClaim,
8
+ ServiceSessionBindingAdmissionResult
9
+ } from '../foundation/service-session-binding-ingress-port';
10
+
11
+ const detachedStateLaneResource = new AsyncResource('zlink:actor-session-binding-registry');
12
+ export interface ZLinkActorSessionBindingActor {
13
+ readonly actorId: string;
14
+ }
15
+
16
+ export interface ZLinkActorSessionBindingContext<TActor extends ZLinkActorSessionBindingActor> {
17
+ readonly routingId?: unknown;
18
+ bindLocal(actor: TActor, bindingToken: string): void;
19
+ unbindLocal(actorId: string, bindingToken: string): void;
20
+ }
21
+
22
+ export interface ZLinkActorSessionRoute<
23
+ TContext extends ZLinkActorSessionBindingContext<TActor>,
24
+ TActor extends ZLinkActorSessionBindingActor
25
+ > {
26
+ readonly context: TContext;
27
+ readonly actor: TActor;
28
+ readonly bindingToken: string;
29
+ readonly sessionIdentity?: string;
30
+ readonly activeFrames: ZLinkActorSessionActiveFrames;
31
+ sealId?: string;
32
+ authorityFence?: ZLinkActorSessionAuthorityFence;
33
+ }
34
+
35
+ export interface ZLinkActorSessionRelocationClaim {
36
+ readonly actorId: string;
37
+ readonly actorGeneration: bigint;
38
+ readonly bindingGeneration: bigint;
39
+ readonly sessionIdentity?: string;
40
+ readonly actorNodeRid?: string;
41
+ readonly actorNodeGeneration?: bigint;
42
+ readonly sealId: string;
43
+ }
44
+
45
+ export interface ZLinkActorSessionRetainedOutbound {
46
+ deliver(): Promise<boolean>;
47
+ fail(error: unknown): void;
48
+ }
49
+
50
+ export interface ZLinkActorSessionAcceptedProducerProof {
51
+ readonly actorId: string;
52
+ readonly objectGeneration: bigint;
53
+ readonly actorNodeRid: string;
54
+ readonly actorNodeGeneration: bigint;
55
+ readonly sessionIdentity: string;
56
+ readonly bindingGeneration: bigint;
57
+ }
58
+
59
+ export interface ZLinkActorSessionRelocationSnapshot extends ZLinkActorSessionRelocationClaim {
60
+ readonly phase: 'sealed' | 'applying' | 'applied' | 'terminal';
61
+ readonly applyFingerprint?: string;
62
+ }
63
+
64
+ interface ZLinkActorSessionFrameAdmission {
65
+ complete(): Promise<void>;
66
+ completeCore(): void;
67
+ }
68
+
69
+ interface ZLinkActorSessionRequestFrameAdmission {
70
+ complete(): Promise<void>;
71
+ /**
72
+ * Claims the one allowed submission attempt. A request captured by a seal
73
+ * before this call waits for that exact seal to publish or abort its route;
74
+ * a request captured after this call only observes its original terminal.
75
+ */
76
+ beginSubmission(signal?: AbortSignal): Promise<void> | undefined;
77
+ }
78
+
79
+ interface ZLinkActorSessionActiveFrames {
80
+ count: number;
81
+ readonly requests: Set<{
82
+ captureBySeal(): void;
83
+ }>;
84
+ }
85
+
86
+ interface ZLinkActorSessionActiveFrameWaiter {
87
+ readonly resolve: () => void;
88
+ readonly reject: (error: unknown) => void;
89
+ }
90
+
91
+ interface ZLinkActorSessionRelocationState {
92
+ readonly actorId: string;
93
+ readonly actorGeneration: bigint;
94
+ readonly bindingGeneration: bigint;
95
+ readonly sessionIdentity?: string;
96
+ readonly actorNodeRid?: string;
97
+ readonly actorNodeGeneration?: bigint;
98
+ readonly sealId: string;
99
+ phase: 'sealed' | 'applying' | 'applied' | 'terminal';
100
+ applyFingerprint?: string;
101
+ applyPromise?: Promise<void>;
102
+ acceptedProducerProof?: ZLinkActorSessionAcceptedProducerProof;
103
+ readonly ready: Promise<void>;
104
+ readonly terminal: Promise<void>;
105
+ readonly resolveTerminal: () => void;
106
+ }
107
+
108
+ interface ZLinkActorSessionOutboundEntry {
109
+ readonly sealId?: string;
110
+ readonly operation: ZLinkActorSessionRetainedOutbound;
111
+ readonly arrivalOrder: bigint;
112
+ readonly claim?: ServiceSessionBindingAdmissionClaim;
113
+ readonly authorization: 'legacy' | 'source' | 'pendingTarget';
114
+ released: boolean;
115
+ settled: boolean;
116
+ }
117
+
118
+ interface ZLinkActorSessionRelocationQueue {
119
+ readonly actorId: string;
120
+ activeSealId?: string;
121
+ readonly seals: Map<string, ZLinkActorSessionRelocationState>;
122
+ readonly outbound: ZLinkActorSessionOutboundEntry[];
123
+ nextArrivalOrder: bigint;
124
+ outboundCount: number;
125
+ drainPromise?: Promise<void>;
126
+ }
127
+
128
+ export interface ZLinkActorSessionAuthorityFence {
129
+ readonly authorityOwnerGeneration: bigint;
130
+ readonly ownerLeaseGeneration: bigint;
131
+ readonly ownerId?: string;
132
+ readonly ownerNodeGeneration?: bigint;
133
+ readonly authorityStoreVersion?: string;
134
+ readonly actorType?: string;
135
+ }
136
+
137
+ export class ZLinkActorSessionBindingRegistry<
138
+ TContext extends ZLinkActorSessionBindingContext<TActor>,
139
+ TActor extends ZLinkActorSessionBindingActor
140
+ > {
141
+ private readonly lane = new ZLinkStateLane();
142
+ private readonly routes = new Map<string, ZLinkActorSessionRoute<TContext, TActor>>();
143
+ private readonly sealWaiters = new Map<string, Set<{
144
+ readonly bindingToken: string;
145
+ readonly resolve: () => void;
146
+ readonly reject: (error: unknown) => void;
147
+ }>>();
148
+ private readonly activeFrameWaiters = new Map<string, Set<ZLinkActorSessionActiveFrameWaiter>>();
149
+ private readonly relocations = new Map<string, ZLinkActorSessionRelocationQueue>();
150
+ private readonly terminalRelocations = new Map<ZLinkActorSessionRelocationState, true>();
151
+
152
+ constructor(
153
+ private readonly terminalRelocationCapacity = 4096,
154
+ private readonly outboundCapacity = 4096,
155
+ // Spec 06 — SessionRelocationSealTimeout bounds how long a session
156
+ // relocation seal may hold ingress (default 3,000 ms, finite only).
157
+ // Every wait on the seal (accept paths) and on active-frame drain
158
+ // (the sealing side) must observe that bound; an unbounded wait here
159
+ // turns a lost control or a lifecycle interlock into a silent stall
160
+ // (spec 48:205 — transport/deadline limits apply during relocation).
161
+ private readonly sealWaitTimeoutMs = 3_000
162
+ ) {
163
+ if (!Number.isSafeInteger(terminalRelocationCapacity) || terminalRelocationCapacity <= 0) {
164
+ throw new RangeError('Session relocation terminal capacity must be a positive safe integer.');
165
+ }
166
+ if (!Number.isSafeInteger(outboundCapacity) || outboundCapacity <= 0) {
167
+ throw new RangeError('Session relocation outbound capacity must be a positive safe integer.');
168
+ }
169
+ if (!Number.isSafeInteger(sealWaitTimeoutMs) || sealWaitTimeoutMs <= 0) {
170
+ throw new RangeError('Session relocation seal timeout must be a positive safe integer.');
171
+ }
172
+ }
173
+
174
+ async bind(
175
+ context: TContext,
176
+ actor: TActor,
177
+ bindingToken: string,
178
+ authorityFence?: ZLinkActorSessionAuthorityFence,
179
+ sessionIdentity?: string
180
+ ): Promise<void> {
181
+ await this.lane.run(() => this.bindCore(context, actor, bindingToken, authorityFence, sessionIdentity));
182
+ }
183
+
184
+ private bindCore(
185
+ context: TContext,
186
+ actor: TActor,
187
+ bindingToken: string,
188
+ authorityFence?: ZLinkActorSessionAuthorityFence,
189
+ sessionIdentity?: string
190
+ ): void {
191
+ this.routes.set(actor.actorId, {
192
+ context,
193
+ actor,
194
+ bindingToken,
195
+ sessionIdentity: sessionIdentity ?? sessionIdentityFromContext(context),
196
+ activeFrames: { count: 0, requests: new Set() },
197
+ authorityFence
198
+ });
199
+ context.bindLocal(actor, bindingToken);
200
+ }
201
+
202
+ async replace(
203
+ previous: ZLinkActorSessionRoute<TContext, TActor>,
204
+ context: TContext,
205
+ actor: TActor,
206
+ bindingToken: string,
207
+ authorityFence?: ZLinkActorSessionAuthorityFence,
208
+ sessionIdentity?: string
209
+ ): Promise<void> {
210
+ await this.lane.run(() => this.replaceCore(
211
+ previous, context, actor, bindingToken, authorityFence, sessionIdentity
212
+ ));
213
+ }
214
+
215
+ private replaceCore(
216
+ previous: ZLinkActorSessionRoute<TContext, TActor>,
217
+ context: TContext,
218
+ actor: TActor,
219
+ bindingToken: string,
220
+ authorityFence?: ZLinkActorSessionAuthorityFence,
221
+ sessionIdentity?: string
222
+ ): void {
223
+ const current = this.routes.get(actor.actorId);
224
+ if (current !== previous) {
225
+ throw createInternalFrameworkException(
226
+ ZLinkFrameworkInternalErrorKind.ActorSessionNotBound,
227
+ `Actor '${actor.actorId}' session binding changed before route replacement.`,
228
+ true
229
+ );
230
+ }
231
+
232
+ context.bindLocal(actor, bindingToken);
233
+ const sameLocalBinding = previous.context === context
234
+ && previous.bindingToken === bindingToken;
235
+ if (!sameLocalBinding) {
236
+ try {
237
+ previous.context.unbindLocal(actor.actorId, previous.bindingToken);
238
+ } catch (error) {
239
+ context.unbindLocal(actor.actorId, bindingToken);
240
+ previous.context.bindLocal(previous.actor, previous.bindingToken);
241
+ throw error;
242
+ }
243
+ }
244
+ this.routes.set(actor.actorId, {
245
+ context,
246
+ actor,
247
+ bindingToken,
248
+ sessionIdentity: sessionIdentity ?? sessionIdentityFromContext(context),
249
+ activeFrames: previous.activeFrames,
250
+ sealId: previous.sealId,
251
+ authorityFence: authorityFence ?? previous.authorityFence
252
+ });
253
+ }
254
+
255
+ async replaceAndReleaseSeal(
256
+ previous: ZLinkActorSessionRoute<TContext, TActor>,
257
+ context: TContext,
258
+ actor: TActor,
259
+ bindingToken: string,
260
+ sealId: string,
261
+ authorityFence?: ZLinkActorSessionAuthorityFence,
262
+ sessionIdentity?: string
263
+ ): Promise<void> {
264
+ await this.lane.run(() => this.replaceAndReleaseSealCore(
265
+ previous, context, actor, bindingToken, sealId, authorityFence, sessionIdentity
266
+ ));
267
+ }
268
+
269
+ private replaceAndReleaseSealCore(
270
+ previous: ZLinkActorSessionRoute<TContext, TActor>,
271
+ context: TContext,
272
+ actor: TActor,
273
+ bindingToken: string,
274
+ sealId: string,
275
+ authorityFence?: ZLinkActorSessionAuthorityFence,
276
+ sessionIdentity?: string
277
+ ): void {
278
+ if (previous.sealId !== sealId) {
279
+ throw createInternalFrameworkException(
280
+ ZLinkFrameworkInternalErrorKind.ActorLocationStale,
281
+ `Actor '${actor.actorId}' route switch did not match its relocation seal.`,
282
+ true
283
+ );
284
+ }
285
+ // JavaScript cannot interleave another ingress turn between these two
286
+ // synchronous mutations. The replacement preserves the seal, then the
287
+ // exact release publishes the route to held ingress as one owner turn.
288
+ this.replaceCore(previous, context, actor, bindingToken, authorityFence, sessionIdentity);
289
+ if (!this.abortSealCore(actor.actorId, sealId)) {
290
+ throw createInternalFrameworkException(
291
+ ZLinkFrameworkInternalErrorKind.ActorLocationStale,
292
+ `Actor '${actor.actorId}' route switch lost its relocation seal.`,
293
+ true
294
+ );
295
+ }
296
+ }
297
+
298
+ async find(actorId: string): Promise<TActor | undefined> {
299
+ return await this.lane.run(() => this.findCore(actorId));
300
+ }
301
+
302
+ private findCore(actorId: string): TActor | undefined {
303
+ return this.routes.get(actorId)?.actor;
304
+ }
305
+
306
+ async route(actorId: string): Promise<ZLinkActorSessionRoute<TContext, TActor> | undefined> {
307
+ return await this.lane.run(() => this.routeCore(actorId));
308
+ }
309
+
310
+ private routeCore(actorId: string): ZLinkActorSessionRoute<TContext, TActor> | undefined {
311
+ return this.routes.get(actorId);
312
+ }
313
+
314
+ async capturePendingReplyClaim(
315
+ actorId: string,
316
+ actor: ZLinkActorSessionBindingActor,
317
+ bindingToken: string
318
+ ): Promise<{ readonly context: TContext } | undefined> {
319
+ return await this.lane.run(() => this.capturePendingReplyClaimCore(actorId, actor, bindingToken));
320
+ }
321
+
322
+ private capturePendingReplyClaimCore(
323
+ actorId: string,
324
+ actor: ZLinkActorSessionBindingActor,
325
+ bindingToken: string
326
+ ): { readonly context: TContext } | undefined {
327
+ const route = this.routes.get(actorId);
328
+ if (route === undefined || route.actor !== actor || route.bindingToken !== bindingToken) {
329
+ return undefined;
330
+ }
331
+ return Object.freeze({ context: route.context });
332
+ }
333
+
334
+ async unbind(actorId: string, context: TContext, bindingToken: string): Promise<void> {
335
+ await this.lane.run(() => this.unbindCore(actorId, context, bindingToken));
336
+ }
337
+
338
+ private unbindCore(actorId: string, context: TContext, bindingToken: string): void {
339
+ const route = this.routes.get(actorId);
340
+ if (route === undefined || route.context !== context || route.bindingToken !== bindingToken) {
341
+ return;
342
+ }
343
+ this.routes.delete(actorId);
344
+ context.unbindLocal(actorId, bindingToken);
345
+ this.rejectSealWaiters(
346
+ actorId,
347
+ new Error(`Actor '${actorId}' session binding was removed while ingress was held.`)
348
+ );
349
+ this.rejectActiveFrameWaiters(
350
+ actorId,
351
+ new Error(`Actor '${actorId}' session binding was removed while accepted frames were active.`)
352
+ );
353
+ this.clearRouteRelocation(
354
+ actorId,
355
+ route,
356
+ new Error(`Actor '${actorId}' session binding was removed.`)
357
+ );
358
+ }
359
+
360
+ async unbindActor(actorId: string): Promise<void> {
361
+ await this.lane.run(() => this.unbindActorCore(actorId));
362
+ }
363
+
364
+ private unbindActorCore(actorId: string): void {
365
+ const route = this.routes.get(actorId);
366
+ if (route === undefined) {
367
+ return;
368
+ }
369
+ this.unbindCore(actorId, route.context, route.bindingToken);
370
+ }
371
+
372
+ async cleanup(context: TContext): Promise<void> {
373
+ await this.lane.run(() => this.cleanupCore(context));
374
+ }
375
+
376
+ private cleanupCore(context: TContext): void {
377
+ for (const route of [...this.routes.values()]) {
378
+ if (route.context === context) {
379
+ this.unbindCore(route.actor.actorId, context, route.bindingToken);
380
+ }
381
+ }
382
+ }
383
+
384
+ async requireRoute(actorId: string): Promise<ZLinkActorSessionRoute<TContext, TActor>> {
385
+ return await this.lane.run(() => this.requireRouteCore(actorId));
386
+ }
387
+
388
+ private requireRouteCore(actorId: string): ZLinkActorSessionRoute<TContext, TActor> {
389
+ const route = this.routes.get(actorId);
390
+ if (route !== undefined) {
391
+ return route;
392
+ }
393
+ throw createInternalFrameworkException(
394
+ ZLinkFrameworkInternalErrorKind.ActorSessionNotBound,
395
+ `No current session binding exists for actor '${actorId}'.`,
396
+ true
397
+ );
398
+ }
399
+
400
+ async requireCurrentToken(actorId: string, bindingToken: string): Promise<void> {
401
+ await this.lane.run(() => this.requireCurrentTokenCore(actorId, bindingToken));
402
+ }
403
+
404
+ private requireCurrentTokenCore(actorId: string, bindingToken: string): void {
405
+ const route = this.requireRouteCore(actorId);
406
+ if (route.bindingToken === bindingToken) {
407
+ return;
408
+ }
409
+ throw createInternalFrameworkException(
410
+ ZLinkFrameworkInternalErrorKind.ActorSessionNotBound,
411
+ `Actor '${actorId}' session binding is stale.`,
412
+ true
413
+ );
414
+ }
415
+
416
+ async accept(actorId: string, bindingToken: string): Promise<void> {
417
+ await this.lane.run(() => this.acceptCore(actorId, bindingToken));
418
+ }
419
+
420
+ private acceptCore(actorId: string, bindingToken: string): void {
421
+ const route = this.requireRouteCore(actorId);
422
+ if (route.bindingToken !== bindingToken) {
423
+ throw createInternalFrameworkException(
424
+ ZLinkFrameworkInternalErrorKind.ActorSessionNotBound,
425
+ `Actor '${actorId}' session binding is stale.`,
426
+ true
427
+ );
428
+ }
429
+ if (route.sealId !== undefined) {
430
+ throw createInternalFrameworkException(
431
+ ZLinkFrameworkInternalErrorKind.ActorLocationStale,
432
+ `Actor '${actorId}' session ingress is sealed for relocation.`,
433
+ true
434
+ );
435
+ }
436
+ }
437
+
438
+ /**
439
+ * Holds Session ingress accepted after a relocation seal until the target
440
+ * route is published and the seal is released. The caller keeps the
441
+ * request payload and reply context open while this wait is in progress.
442
+ */
443
+ async acceptWhenReady(
444
+ actorId: string,
445
+ bindingToken: string,
446
+ signal?: AbortSignal
447
+ ): Promise<void> {
448
+ for (;;) {
449
+ throwIfAborted(signal);
450
+ const accepted = await this.lane.run(() => this.acceptWhenReadyCore(actorId, bindingToken));
451
+ if (accepted) return;
452
+ await this.waitForSealRelease(actorId, bindingToken, signal);
453
+ }
454
+ }
455
+
456
+ private acceptWhenReadyCore(actorId: string, bindingToken: string): boolean {
457
+ const route = this.requireRouteCore(actorId);
458
+ this.requireCurrentTokenCore(actorId, bindingToken);
459
+ if (route.sealId === undefined) {
460
+ try {
461
+ this.acceptCore(actorId, bindingToken);
462
+ return true;
463
+ } catch (error) {
464
+ // A new seal can race the check above. Re-enter the wait only for
465
+ // that relocation fence; unrelated binding failures stay visible.
466
+ if (this.routes.get(actorId)?.sealId === undefined) throw error;
467
+ }
468
+ }
469
+ return false;
470
+ }
471
+
472
+ async beginAcceptedFrameWhenReady(
473
+ actorId: string,
474
+ bindingToken: string,
475
+ signal?: AbortSignal
476
+ ): Promise<ZLinkActorSessionFrameAdmission> {
477
+ for (;;) {
478
+ throwIfAborted(signal);
479
+ const admission = await this.lane.run(() => this.beginAcceptedFrameCore(actorId, bindingToken));
480
+ if (admission !== undefined) return admission;
481
+ await this.waitForSealRelease(actorId, bindingToken, signal);
482
+ }
483
+ }
484
+
485
+ private beginAcceptedFrameCore(
486
+ actorId: string,
487
+ bindingToken: string
488
+ ): ZLinkActorSessionFrameAdmission | undefined {
489
+ const route = this.requireRouteCore(actorId);
490
+ this.requireCurrentTokenCore(actorId, bindingToken);
491
+ if (route.sealId !== undefined) return undefined;
492
+ route.activeFrames.count++;
493
+ let completed = false;
494
+ const completeCore = () => {
495
+ if (completed) return;
496
+ completed = true;
497
+ route.activeFrames.count--;
498
+ if (
499
+ route.activeFrames.count === 0
500
+ && this.routes.get(actorId)?.activeFrames === route.activeFrames
501
+ ) {
502
+ this.resolveActiveFrameWaiters(actorId);
503
+ }
504
+ };
505
+ return {
506
+ complete: async () => {
507
+ await this.lane.run(completeCore);
508
+ },
509
+ completeCore
510
+ };
511
+ }
512
+
513
+ async beginAcceptedRequestFrameWhenReady(
514
+ actorId: string,
515
+ bindingToken: string,
516
+ signal?: AbortSignal
517
+ ): Promise<ZLinkActorSessionRequestFrameAdmission> {
518
+ const frame = await this.beginAcceptedFrameWhenReady(actorId, bindingToken, signal);
519
+ return await this.lane.run(() => this.beginAcceptedRequestFrameCore(actorId, bindingToken, frame));
520
+ }
521
+
522
+ private beginAcceptedRequestFrameCore(
523
+ actorId: string,
524
+ bindingToken: string,
525
+ frame: ZLinkActorSessionFrameAdmission
526
+ ): ZLinkActorSessionRequestFrameAdmission {
527
+ const activeFrames = this.requireRouteCore(actorId).activeFrames;
528
+ let submissionStarted = false;
529
+ let capturedBySeal = false;
530
+ let finished = false;
531
+ const request = {
532
+ captureBySeal: () => {
533
+ if (finished || capturedBySeal) return;
534
+ capturedBySeal = true;
535
+ // Spec 20:389-396,408-412 — command 42 captures the Session-side
536
+ // frame, while the request correlation and its detached terminal
537
+ // remain alive. This removes the 42 -> request terminal -> 44 -> 42
538
+ // cycle without turning the capture into another submission.
539
+ frame.completeCore();
540
+ }
541
+ };
542
+ activeFrames.requests.add(request);
543
+ return {
544
+ beginSubmission: async (submissionSignal) => {
545
+ const captured = await this.lane.run(() => {
546
+ if (submissionStarted) return false;
547
+ // Claim before the asynchronous seal wait. A second continuation
548
+ // must not observe an unclaimed request while the first is waiting
549
+ // for command 44 to publish the route.
550
+ submissionStarted = true;
551
+ return capturedBySeal;
552
+ });
553
+ if (!captured) return;
554
+ await this.acceptWhenReady(actorId, bindingToken, submissionSignal);
555
+ },
556
+ complete: async () => {
557
+ await this.lane.run(() => {
558
+ if (finished) return;
559
+ finished = true;
560
+ activeFrames.requests.delete(request);
561
+ frame.completeCore();
562
+ });
563
+ }
564
+ };
565
+ }
566
+
567
+ async runAcceptedFrameWhenReady<TResult>(
568
+ actorId: string,
569
+ bindingToken: string,
570
+ operation: () => Promise<TResult>,
571
+ signal?: AbortSignal
572
+ ): Promise<TResult> {
573
+ const admission = await this.beginAcceptedFrameWhenReady(
574
+ actorId,
575
+ bindingToken,
576
+ signal
577
+ );
578
+ try {
579
+ return await operation();
580
+ } finally {
581
+ await admission.complete();
582
+ }
583
+ }
584
+
585
+ async seal(actorId: string, sealId: string, expected: ZLinkActorSessionRouteFence): Promise<void> {
586
+ await this.lane.run(() => this.sealCore(actorId, sealId, expected));
587
+ }
588
+
589
+ private sealCore(actorId: string, sealId: string, expected: ZLinkActorSessionRouteFence): void {
590
+ const route = this.requireRouteCore(actorId);
591
+ if (route.sealId !== undefined) {
592
+ if (route.sealId === sealId && routeMatchesFence(route, expected)) {
593
+ return;
594
+ }
595
+ throw createInternalFrameworkException(
596
+ ZLinkFrameworkInternalErrorKind.ActorLocationStale,
597
+ `Actor '${actorId}' session ingress is sealed by another relocation.`,
598
+ true
599
+ );
600
+ }
601
+ if (!routeMatchesFence(route, expected)) {
602
+ throw createInternalFrameworkException(
603
+ ZLinkFrameworkInternalErrorKind.ActorSessionNotBound,
604
+ `Actor '${actorId}' session route seal was fenced by its binding identity.`,
605
+ true
606
+ );
607
+ }
608
+ route.sealId = sealId;
609
+ // A pre-seal REQUEST is captured as part of installing command 42. Its
610
+ // Session frame no longer gates the seal; its single submission attempt
611
+ // and terminal continue under the request admission state above.
612
+ for (const request of route.activeFrames.requests) {
613
+ request.captureBySeal();
614
+ }
615
+ }
616
+
617
+ async sealAndWait(
618
+ actorId: string,
619
+ sealId: string,
620
+ expected: ZLinkActorSessionRouteFence,
621
+ signal?: AbortSignal
622
+ ): Promise<void> {
623
+ await this.lane.run(() => this.sealCore(actorId, sealId, expected));
624
+ await this.waitForActiveFrames(actorId, signal);
625
+ }
626
+
627
+ async sealRelocation(
628
+ claim: ZLinkActorSessionRelocationClaim,
629
+ expected: ZLinkActorSessionRouteFence,
630
+ signal?: AbortSignal
631
+ ): Promise<void> {
632
+ for (;;) {
633
+ throwIfAborted(signal);
634
+ const step = await this.lane.run(() => this.prepareRelocationSeal(claim, expected, signal));
635
+ if (step.kind === 'existing') {
636
+ await waitForSessionRelocation(step.wait, signal);
637
+ return;
638
+ }
639
+ if (step.kind === 'predecessor') {
640
+ await waitForSessionRelocation(step.wait, signal);
641
+ continue;
642
+ }
643
+ await step.wait;
644
+ return;
645
+ }
646
+ }
647
+
648
+ private prepareRelocationSeal(
649
+ claim: ZLinkActorSessionRelocationClaim,
650
+ expected: ZLinkActorSessionRouteFence,
651
+ signal?: AbortSignal
652
+ ):
653
+ | { readonly kind: 'existing' | 'predecessor'; readonly wait: Promise<void> }
654
+ | { readonly kind: 'new'; readonly wait: Promise<void> } {
655
+ const queue = this.relocations.get(claim.actorId);
656
+ const existing = queue?.seals.get(claim.sealId);
657
+ if (existing !== undefined) {
658
+ assertRelocationClaim(existing, claim);
659
+ return { kind: 'existing', wait: existing.ready };
660
+ }
661
+ const predecessor = queue?.activeSealId === undefined
662
+ ? undefined
663
+ : queue.seals.get(queue.activeSealId);
664
+ if (predecessor !== undefined && predecessor.phase !== 'terminal') {
665
+ if (predecessor.sessionIdentity === undefined || claim.sessionIdentity === undefined) {
666
+ throw createInternalFrameworkException(
667
+ ZLinkFrameworkInternalErrorKind.ActorLocationStale,
668
+ `Actor '${claim.actorId}' session ingress is sealed by another relocation.`,
669
+ true
670
+ );
671
+ }
672
+ assertSuccessorSessionIdentity(predecessor, claim);
673
+ return { kind: 'predecessor', wait: predecessor.terminal };
674
+ }
675
+
676
+ this.sealCore(claim.actorId, claim.sealId, expected);
677
+ let resolveTerminal!: () => void;
678
+ const terminal = new Promise<void>((resolve) => { resolveTerminal = resolve; });
679
+ const ready = this.waitForActiveFramesCore(claim.actorId, signal);
680
+ const actorQueue: ZLinkActorSessionRelocationQueue = queue ?? {
681
+ actorId: claim.actorId,
682
+ seals: new Map(),
683
+ outbound: [],
684
+ nextArrivalOrder: 1n,
685
+ outboundCount: 0
686
+ };
687
+ const state: ZLinkActorSessionRelocationState = {
688
+ ...claim,
689
+ phase: 'sealed',
690
+ ready,
691
+ terminal,
692
+ resolveTerminal
693
+ };
694
+ actorQueue.seals.set(claim.sealId, state);
695
+ actorQueue.activeSealId = claim.sealId;
696
+ this.relocations.set(claim.actorId, actorQueue);
697
+ return { kind: 'new', wait: ready };
698
+ }
699
+
700
+ async relocationSnapshot(
701
+ actorId: string,
702
+ sealId: string
703
+ ): Promise<ZLinkActorSessionRelocationSnapshot | undefined> {
704
+ return await this.lane.run(() => this.relocationSnapshotCore(actorId, sealId));
705
+ }
706
+
707
+ private relocationSnapshotCore(
708
+ actorId: string,
709
+ sealId: string
710
+ ): ZLinkActorSessionRelocationSnapshot | undefined {
711
+ return this.relocations.get(actorId)?.seals.get(sealId);
712
+ }
713
+
714
+ async retainRelocationOutbound(
715
+ actorId: string,
716
+ operation: ZLinkActorSessionRetainedOutbound,
717
+ sealId?: string
718
+ ): Promise<ServiceSessionBindingAdmissionResult> {
719
+ return await this.lane.run(() => this.retainRelocationOutboundCorePublic(actorId, operation, sealId));
720
+ }
721
+
722
+ private retainRelocationOutboundCorePublic(
723
+ actorId: string,
724
+ operation: ZLinkActorSessionRetainedOutbound,
725
+ sealId?: string
726
+ ): ServiceSessionBindingAdmissionResult {
727
+ if (sealId !== undefined) {
728
+ const queue = this.relocations.get(actorId);
729
+ const state = queue?.seals.get(sealId);
730
+ if (
731
+ queue === undefined
732
+ || state === undefined
733
+ || (queue.activeSealId !== sealId
734
+ && !(queue.activeSealId === undefined && state.phase === 'terminal'))
735
+ ) {
736
+ failRetainedOutbound(
737
+ operation,
738
+ new Error(`Actor '${actorId}' Session outbound did not match its exact relocation seal.`)
739
+ );
740
+ return 'rejected';
741
+ }
742
+ }
743
+ return this.retainRelocationOutboundCore(actorId, operation, 'legacy');
744
+ }
745
+
746
+ async admitRelocationOutbound(
747
+ claim: ServiceSessionBindingAdmissionClaim,
748
+ operation: ZLinkActorSessionRetainedOutbound
749
+ ): Promise<ServiceSessionBindingAdmissionResult> {
750
+ return await this.lane.run(() => this.admitRelocationOutboundCore(claim, operation));
751
+ }
752
+
753
+ private admitRelocationOutboundCore(
754
+ claim: ServiceSessionBindingAdmissionClaim,
755
+ operation: ZLinkActorSessionRetainedOutbound
756
+ ): ServiceSessionBindingAdmissionResult {
757
+ const queue = this.relocations.get(claim.actorId);
758
+ const state = queue?.activeSealId === undefined
759
+ ? undefined
760
+ : queue.seals.get(queue.activeSealId);
761
+ const error = this.outboundAdmissionError(claim);
762
+ if (error !== undefined) {
763
+ failRetainedOutbound(operation, error);
764
+ return 'rejected';
765
+ }
766
+ if (queue === undefined || state === undefined) {
767
+ if (!this.matchesCurrentProducerNode(claim)) {
768
+ failRetainedOutbound(
769
+ operation,
770
+ new Error(`Actor '${claim.actorId}' Session outbound admission was fenced by its current binding.`)
771
+ );
772
+ return 'rejected';
773
+ }
774
+ if (queue === undefined) return 'passThrough';
775
+ return this.retainRelocationOutboundCore(
776
+ claim.actorId,
777
+ operation,
778
+ 'source',
779
+ claim
780
+ );
781
+ }
782
+ if (state.phase === 'sealed' || state.phase === 'applying') {
783
+ const matchesSource = matchesRelocationSourceProof(state, claim);
784
+ const matchesCurrent = this.matchesCurrentProducerNode(claim);
785
+ const authorization = matchesSource || matchesCurrent
786
+ ? 'source'
787
+ : 'pendingTarget';
788
+ return this.retainRelocationOutboundCore(
789
+ claim.actorId,
790
+ operation,
791
+ authorization,
792
+ claim
793
+ );
794
+ }
795
+ const acceptedProof = state.acceptedProducerProof;
796
+ if (
797
+ acceptedProof === undefined
798
+ || !matchesAcceptedProducerProof(acceptedProof, claim)
799
+ ) {
800
+ failRetainedOutbound(
801
+ operation,
802
+ new Error(`Actor '${claim.actorId}' Session outbound admission did not match its accepted producer proof.`)
803
+ );
804
+ return 'rejected';
805
+ }
806
+ return this.retainRelocationOutboundCore(
807
+ claim.actorId,
808
+ operation,
809
+ 'source',
810
+ claim
811
+ );
812
+ }
813
+
814
+ private retainRelocationOutboundCore(
815
+ actorId: string,
816
+ operation: ZLinkActorSessionRetainedOutbound,
817
+ authorization: ZLinkActorSessionOutboundEntry['authorization'],
818
+ claim?: ServiceSessionBindingAdmissionClaim
819
+ ): ServiceSessionBindingAdmissionResult {
820
+ const queue = this.relocations.get(actorId);
821
+ const state = queue?.activeSealId === undefined
822
+ ? undefined
823
+ : queue.seals.get(queue.activeSealId);
824
+ if (queue === undefined) return 'passThrough';
825
+ if (state === undefined || state.phase === 'applied' || state.phase === 'terminal') {
826
+ if (queue.drainPromise === undefined && queue.outbound.length === 0) return 'passThrough';
827
+ if (!this.reserveOutbound(queue, operation)) return 'rejected';
828
+ queue.outbound.push({
829
+ operation,
830
+ authorization,
831
+ arrivalOrder: queue.nextArrivalOrder++,
832
+ ...(claim === undefined ? {} : { claim }),
833
+ released: true,
834
+ settled: false
835
+ });
836
+ this.startOutboundDrain(queue);
837
+ return 'retained';
838
+ }
839
+ if (!this.reserveOutbound(queue, operation)) return 'rejected';
840
+ queue.outbound.push({
841
+ sealId: state.sealId,
842
+ operation,
843
+ authorization,
844
+ arrivalOrder: queue.nextArrivalOrder++,
845
+ ...(claim === undefined ? {} : { claim }),
846
+ released: false,
847
+ settled: false
848
+ });
849
+ return 'retained';
850
+ }
851
+
852
+ async discardRelocationOutbound(actorId: string, sealId: string, error: unknown): Promise<void> {
853
+ await this.lane.run(() => this.discardRelocationOutboundCore(actorId, sealId, error));
854
+ }
855
+
856
+ private discardRelocationOutboundCore(actorId: string, sealId: string, error: unknown): void {
857
+ const queue = this.relocations.get(actorId);
858
+ if (queue === undefined) return;
859
+ for (let index = queue.outbound.length - 1; index >= 0; index--) {
860
+ const entry = queue.outbound[index]!;
861
+ if (entry.sealId !== sealId) continue;
862
+ queue.outbound.splice(index, 1);
863
+ this.failOutbound(queue, entry, error);
864
+ }
865
+ this.deleteEmptyRelocationQueue(queue);
866
+ }
867
+
868
+ async applyRelocation(
869
+ actorId: string,
870
+ sealId: string,
871
+ applyFingerprint: string,
872
+ action: 'commit' | 'abort',
873
+ commitOwnerTransition: () => Promise<void>,
874
+ acceptedProducerProof?: ZLinkActorSessionAcceptedProducerProof
875
+ ): Promise<void> {
876
+ const prepared = await this.lane.run(() => this.prepareRelocationApply(
877
+ actorId,
878
+ sealId,
879
+ applyFingerprint,
880
+ action,
881
+ acceptedProducerProof
882
+ ));
883
+ if (prepared.applyPromise !== undefined) {
884
+ await prepared.applyPromise;
885
+ return;
886
+ }
887
+ startOutsideStateLane(() => {
888
+ void (async () => {
889
+ try {
890
+ await commitOwnerTransition();
891
+ await this.lane.run(() => this.completeRelocationApply(prepared));
892
+ prepared.resolve!();
893
+ } catch (error) {
894
+ await this.lane.run(() => this.failRelocationApply(prepared));
895
+ prepared.reject!(error);
896
+ }
897
+ })();
898
+ });
899
+ await prepared.promise!;
900
+ }
901
+
902
+ private prepareRelocationApply(
903
+ actorId: string,
904
+ sealId: string,
905
+ applyFingerprint: string,
906
+ action: 'commit' | 'abort',
907
+ acceptedProducerProof?: ZLinkActorSessionAcceptedProducerProof
908
+ ): {
909
+ readonly queue: ZLinkActorSessionRelocationQueue;
910
+ readonly state: ZLinkActorSessionRelocationState;
911
+ readonly applyPromise?: Promise<void>;
912
+ readonly action?: 'commit' | 'abort';
913
+ readonly acceptedProducerProof?: ZLinkActorSessionAcceptedProducerProof;
914
+ readonly promise?: Promise<void>;
915
+ readonly resolve?: () => void;
916
+ readonly reject?: (error: unknown) => void;
917
+ readonly actorId?: string;
918
+ readonly sealId?: string;
919
+ } {
920
+ const queue = this.relocations.get(actorId);
921
+ const state = queue?.seals.get(sealId);
922
+ if (queue === undefined || state === undefined) {
923
+ throw createInternalFrameworkException(
924
+ ZLinkFrameworkInternalErrorKind.ActorLocationStale,
925
+ `Actor '${actorId}' route apply did not match its exact Session seal.`,
926
+ true
927
+ );
928
+ }
929
+ if (state.phase !== 'sealed') {
930
+ if (state.applyFingerprint !== applyFingerprint || state.applyPromise === undefined) {
931
+ throw createInternalFrameworkException(
932
+ ZLinkFrameworkInternalErrorKind.ActorLocationStale,
933
+ `Actor '${actorId}' Session seal received a conflicting route apply.`,
934
+ true
935
+ );
936
+ }
937
+ return { queue, state, applyPromise: state.applyPromise };
938
+ }
939
+ if (
940
+ action === 'commit'
941
+ && acceptedProducerProof !== undefined
942
+ && !validAcceptedTargetProof(state, acceptedProducerProof)
943
+ ) {
944
+ throw createInternalFrameworkException(
945
+ ZLinkFrameworkInternalErrorKind.ActorLocationStale,
946
+ `Actor '${actorId}' command 44 target producer proof did not match its Session seal.`,
947
+ true
948
+ );
949
+ }
950
+ if (action === 'abort' && acceptedProducerProof !== undefined) {
951
+ throw createInternalFrameworkException(
952
+ ZLinkFrameworkInternalErrorKind.ActorLocationStale,
953
+ `Actor '${actorId}' abort route supplied a target producer proof.`,
954
+ true
955
+ );
956
+ }
957
+
958
+ state.phase = 'applying';
959
+ state.applyFingerprint = applyFingerprint;
960
+ let resolve!: () => void;
961
+ let reject!: (error: unknown) => void;
962
+ const promise = new Promise<void>((complete, fail) => {
963
+ resolve = complete;
964
+ reject = fail;
965
+ });
966
+ state.applyPromise = promise;
967
+ return {
968
+ queue,
969
+ state,
970
+ action,
971
+ acceptedProducerProof,
972
+ promise,
973
+ resolve,
974
+ reject,
975
+ actorId,
976
+ sealId
977
+ };
978
+ }
979
+
980
+ private completeRelocationApply(prepared: {
981
+ readonly queue: ZLinkActorSessionRelocationQueue;
982
+ readonly state: ZLinkActorSessionRelocationState;
983
+ readonly action?: 'commit' | 'abort';
984
+ readonly acceptedProducerProof?: ZLinkActorSessionAcceptedProducerProof;
985
+ readonly actorId?: string;
986
+ readonly sealId?: string;
987
+ }): void {
988
+ const { queue, state, action, acceptedProducerProof, actorId, sealId } = prepared;
989
+ const proof = action === 'commit'
990
+ ? acceptedProducerProof ?? this.currentProducerProof(actorId!)
991
+ : relocationSourceProof(state);
992
+ state.acceptedProducerProof = proof;
993
+ for (let index = queue.outbound.length - 1; index >= 0; index--) {
994
+ const entry = queue.outbound[index]!;
995
+ if (entry.sealId !== sealId) continue;
996
+ if (entry.authorization !== 'pendingTarget') {
997
+ entry.released = true;
998
+ continue;
999
+ }
1000
+ if (
1001
+ action === 'commit'
1002
+ && proof !== undefined
1003
+ && entry.claim !== undefined
1004
+ && matchesAcceptedProducerProof(proof, entry.claim)
1005
+ ) {
1006
+ entry.released = true;
1007
+ continue;
1008
+ }
1009
+ queue.outbound.splice(index, 1);
1010
+ this.failOutbound(
1011
+ queue,
1012
+ entry,
1013
+ new Error(`Actor '${actorId}' pending Session producer did not match command 44 proof.`)
1014
+ );
1015
+ }
1016
+ this.startOutboundDrain(queue);
1017
+ state.phase = 'applied';
1018
+ }
1019
+
1020
+ private failRelocationApply(prepared: {
1021
+ readonly state: ZLinkActorSessionRelocationState;
1022
+ }): void {
1023
+ prepared.state.phase = 'sealed';
1024
+ prepared.state.applyFingerprint = undefined;
1025
+ prepared.state.applyPromise = undefined;
1026
+ prepared.state.acceptedProducerProof = undefined;
1027
+ }
1028
+
1029
+ private currentProducerProof(
1030
+ actorId: string
1031
+ ): ZLinkActorSessionAcceptedProducerProof | undefined {
1032
+ const route = this.routes.get(actorId);
1033
+ const actorRef = (route?.actor as TActor & { readonly ref?: {
1034
+ readonly actorId?: unknown;
1035
+ readonly objectGeneration?: unknown;
1036
+ readonly generation?: unknown;
1037
+ readonly nodeRid?: unknown;
1038
+ readonly ownerNodeGeneration?: unknown;
1039
+ readonly bindingGeneration?: unknown;
1040
+ } }).ref;
1041
+ const sessionIdentity = route?.sessionIdentity;
1042
+ if (
1043
+ route === undefined
1044
+ || actorRef === undefined
1045
+ || sessionIdentity === undefined
1046
+ || actorRef.ownerNodeGeneration === undefined
1047
+ ) return undefined;
1048
+ return {
1049
+ actorId,
1050
+ objectGeneration: BigInt(
1051
+ actorRef.objectGeneration as bigint | number | string | boolean | undefined
1052
+ ?? actorRef.generation as bigint | number | string | boolean | undefined
1053
+ ?? -1
1054
+ ),
1055
+ actorNodeRid: String(actorRef.nodeRid ?? ''),
1056
+ actorNodeGeneration: BigInt(
1057
+ actorRef.ownerNodeGeneration as bigint | number | string | boolean
1058
+ ),
1059
+ sessionIdentity: String(sessionIdentity),
1060
+ bindingGeneration: BigInt(
1061
+ actorRef.bindingGeneration as bigint | number | string | boolean | undefined ?? -1
1062
+ )
1063
+ };
1064
+ }
1065
+
1066
+ async observeRelocationTerminal(
1067
+ actorId: string,
1068
+ sealId: string,
1069
+ applyFingerprint: string
1070
+ ): Promise<void> {
1071
+ await this.lane.run(() => this.observeRelocationTerminalCore(actorId, sealId, applyFingerprint));
1072
+ }
1073
+
1074
+ private observeRelocationTerminalCore(
1075
+ actorId: string,
1076
+ sealId: string,
1077
+ applyFingerprint: string
1078
+ ): void {
1079
+ const queue = this.relocations.get(actorId);
1080
+ const state = queue?.seals.get(sealId);
1081
+ if (
1082
+ queue === undefined
1083
+ || state === undefined
1084
+ || state.applyFingerprint !== applyFingerprint
1085
+ || (state.phase !== 'applied' && state.phase !== 'terminal')
1086
+ ) {
1087
+ throw createInternalFrameworkException(
1088
+ ZLinkFrameworkInternalErrorKind.ActorLocationStale,
1089
+ `Actor '${actorId}' Session relocation terminal did not match its exact route apply.`,
1090
+ true
1091
+ );
1092
+ }
1093
+ if (state.phase === 'terminal') {
1094
+ this.rememberTerminalRelocation(state);
1095
+ return;
1096
+ }
1097
+ state.phase = 'terminal';
1098
+ if (queue.activeSealId === sealId) queue.activeSealId = undefined;
1099
+ state.resolveTerminal();
1100
+ this.rememberTerminalRelocation(state);
1101
+ }
1102
+
1103
+ /**
1104
+ * Actor-wide relocation teardown: every seal (active and terminal-retained)
1105
+ * and every held outbound entry for `actorId` is discarded unconditionally.
1106
+ * Reserved for paths where the Actor itself is gone or being torn down
1107
+ * (destroy, ownership clear, relocation-seal expiry/failure) — never for a
1108
+ * single physical route's disconnect, which must not disturb a relocation
1109
+ * seal it does not own (see `clearRouteRelocation`).
1110
+ */
1111
+ async clearRelocation(actorId: string, error: unknown): Promise<void> {
1112
+ await this.lane.run(() => this.clearRelocationCore(actorId, error));
1113
+ }
1114
+
1115
+ private clearRelocationCore(actorId: string, error: unknown): void {
1116
+ const queue = this.relocations.get(actorId);
1117
+ if (queue === undefined) return;
1118
+ this.relocations.delete(actorId);
1119
+ for (const entry of queue.outbound.splice(0)) this.failOutbound(queue, entry, error);
1120
+ for (const state of queue.seals.values()) {
1121
+ this.terminalRelocations.delete(state);
1122
+ if (state.phase !== 'terminal') state.resolveTerminal();
1123
+ }
1124
+ }
1125
+
1126
+ /**
1127
+ * Spec 48 §137: a relocation seal's lifecycle is independent of any single
1128
+ * physical route's binding. Unbinding one physical route (a disconnect)
1129
+ * must retire only the still-open (nonterminal) relocation seal that this
1130
+ * exact route's Session owns, and the outbound held against that seal — it
1131
+ * must never reach into a seal that has already reached 'terminal' (its
1132
+ * bounded retention exists precisely so a late same-seal relay can still
1133
+ * pass on a successor route) nor into a different Session's active seal
1134
+ * (a concurrent successor that already re-sealed before this stale route
1135
+ * noticed the disconnect).
1136
+ */
1137
+ private clearRouteRelocation(
1138
+ actorId: string,
1139
+ route: ZLinkActorSessionRoute<TContext, TActor>,
1140
+ error: unknown
1141
+ ): void {
1142
+ const queue = this.relocations.get(actorId);
1143
+ if (queue === undefined) return;
1144
+ const activeSealId = queue.activeSealId;
1145
+ const activeState = activeSealId === undefined ? undefined : queue.seals.get(activeSealId);
1146
+ const ownsActiveSeal = activeState !== undefined
1147
+ && activeState.phase !== 'terminal'
1148
+ && activeState.sessionIdentity === route.sessionIdentity;
1149
+ if (!ownsActiveSeal) {
1150
+ // Nothing this exact route still holds open — leave terminal
1151
+ // retention and any other Session's active seal untouched.
1152
+ this.deleteEmptyRelocationQueue(queue);
1153
+ return;
1154
+ }
1155
+ for (let index = queue.outbound.length - 1; index >= 0; index--) {
1156
+ const entry = queue.outbound[index]!;
1157
+ if (entry.sealId !== activeSealId) continue;
1158
+ queue.outbound.splice(index, 1);
1159
+ this.failOutbound(queue, entry, error);
1160
+ }
1161
+ queue.activeSealId = undefined;
1162
+ queue.seals.delete(activeSealId!);
1163
+ this.terminalRelocations.delete(activeState);
1164
+ activeState.resolveTerminal();
1165
+ this.deleteEmptyRelocationQueue(queue);
1166
+ }
1167
+
1168
+ async abortSeal(actorId: string, sealId: string): Promise<boolean> {
1169
+ return await this.lane.run(() => this.abortSealCore(actorId, sealId));
1170
+ }
1171
+
1172
+ private abortSealCore(actorId: string, sealId: string): boolean {
1173
+ const route = this.routes.get(actorId);
1174
+ if (route === undefined || route.sealId !== sealId) return false;
1175
+ route.sealId = undefined;
1176
+ this.resolveSealWaiters(actorId, sealId);
1177
+ return true;
1178
+ }
1179
+
1180
+ async updateAuthorityFence(
1181
+ actorId: string,
1182
+ authorityFence: ZLinkActorSessionAuthorityFence
1183
+ ): Promise<void> {
1184
+ await this.lane.run(() => this.updateAuthorityFenceCore(actorId, authorityFence));
1185
+ }
1186
+
1187
+ private updateAuthorityFenceCore(actorId: string, authorityFence: ZLinkActorSessionAuthorityFence): void {
1188
+ const route = this.requireRouteCore(actorId);
1189
+ route.authorityFence = authorityFence;
1190
+ }
1191
+
1192
+ async validateSeal(actorId: string, sealId: string): Promise<boolean> {
1193
+ return await this.lane.run(() => this.validateSealCore(actorId, sealId));
1194
+ }
1195
+
1196
+ private validateSealCore(actorId: string, sealId: string): boolean {
1197
+ const route = this.routes.get(actorId);
1198
+ return route !== undefined
1199
+ && route.sealId === sealId;
1200
+ }
1201
+
1202
+ /** True while a relocation seal currently holds this actor's ingress. */
1203
+ async isSealed(actorId: string): Promise<boolean> {
1204
+ return await this.lane.run(() => this.isSealedCore(actorId));
1205
+ }
1206
+
1207
+ private isSealedCore(actorId: string): boolean {
1208
+ return this.routes.get(actorId)?.sealId !== undefined;
1209
+ }
1210
+
1211
+ private async waitForSealRelease(
1212
+ actorId: string,
1213
+ bindingToken: string,
1214
+ signal?: AbortSignal
1215
+ ): Promise<void> {
1216
+ const prepared = await this.lane.run(() => ({
1217
+ wait: this.waitForSealReleaseCore(actorId, bindingToken, signal)
1218
+ }));
1219
+ await prepared.wait;
1220
+ }
1221
+
1222
+ private waitForSealReleaseCore(
1223
+ actorId: string,
1224
+ bindingToken: string,
1225
+ signal?: AbortSignal
1226
+ ): Promise<void> {
1227
+ const route = this.requireRouteCore(actorId);
1228
+ this.requireCurrentTokenCore(actorId, bindingToken);
1229
+ if (route.sealId === undefined) return Promise.resolve();
1230
+ return new Promise<void>((resolve, reject) => {
1231
+ const waiters = this.sealWaiters.get(actorId) ?? new Set();
1232
+ let settled = false;
1233
+ let timer: ReturnType<typeof setTimeout> | undefined;
1234
+ const cleanup = () => {
1235
+ if (timer !== undefined) clearTimeout(timer);
1236
+ signal?.removeEventListener('abort', onAbort);
1237
+ };
1238
+ const resolveWaiter = () => {
1239
+ if (settled) return;
1240
+ settled = true;
1241
+ cleanup();
1242
+ resolve();
1243
+ };
1244
+ const rejectWaiter = (error: unknown) => {
1245
+ if (settled) return;
1246
+ settled = true;
1247
+ cleanup();
1248
+ reject(error);
1249
+ };
1250
+ const waiter = { bindingToken, resolve: resolveWaiter, reject: rejectWaiter };
1251
+ waiters.add(waiter);
1252
+ this.sealWaiters.set(actorId, waiters);
1253
+ const removeWaiter = () => {
1254
+ waiters.delete(waiter);
1255
+ if (waiters.size === 0) this.sealWaiters.delete(actorId);
1256
+ };
1257
+ timer = startOutsideStateLane(() => setTimeout(() => {
1258
+ this.lane.tryPost(() => {
1259
+ removeWaiter();
1260
+ rejectWaiter(createInternalFrameworkException(
1261
+ ZLinkFrameworkInternalErrorKind.DeadlineExceeded,
1262
+ `Actor '${actorId}' session seal was not released within the relocation seal timeout.`,
1263
+ true
1264
+ ));
1265
+ });
1266
+ }, this.sealWaitTimeoutMs));
1267
+ timer.unref();
1268
+ const onAbort = () => {
1269
+ this.lane.tryPost(() => {
1270
+ removeWaiter();
1271
+ rejectWaiter(signal?.reason ?? createAbortError());
1272
+ });
1273
+ };
1274
+ if (signal === undefined) return;
1275
+ if (signal.aborted) {
1276
+ onAbort();
1277
+ return;
1278
+ }
1279
+ startOutsideStateLane(() => signal.addEventListener('abort', onAbort, { once: true }));
1280
+ });
1281
+ }
1282
+
1283
+ private async waitForActiveFrames(actorId: string, signal?: AbortSignal): Promise<void> {
1284
+ const prepared = await this.lane.run(() => ({
1285
+ wait: this.waitForActiveFramesCore(actorId, signal)
1286
+ }));
1287
+ await prepared.wait;
1288
+ }
1289
+
1290
+ private waitForActiveFramesCore(actorId: string, signal?: AbortSignal): Promise<void> {
1291
+ const route = this.requireRouteCore(actorId);
1292
+ if (route.activeFrames.count === 0) return Promise.resolve();
1293
+ return new Promise<void>((resolve, reject) => {
1294
+ const waiters = this.activeFrameWaiters.get(actorId) ?? new Set();
1295
+ let settled = false;
1296
+ let timer: ReturnType<typeof setTimeout> | undefined;
1297
+ const cleanup = () => {
1298
+ if (timer !== undefined) clearTimeout(timer);
1299
+ signal?.removeEventListener('abort', onAbort);
1300
+ };
1301
+ const waiter: ZLinkActorSessionActiveFrameWaiter = {
1302
+ resolve: () => {
1303
+ if (settled) return;
1304
+ settled = true;
1305
+ cleanup();
1306
+ resolve();
1307
+ },
1308
+ reject: (error) => {
1309
+ if (settled) return;
1310
+ settled = true;
1311
+ cleanup();
1312
+ reject(error);
1313
+ }
1314
+ };
1315
+ const onAbort = () => {
1316
+ this.lane.tryPost(() => {
1317
+ waiters.delete(waiter);
1318
+ if (waiters.size === 0) this.activeFrameWaiters.delete(actorId);
1319
+ waiter.reject(signal?.reason ?? createAbortError());
1320
+ });
1321
+ };
1322
+ waiters.add(waiter);
1323
+ this.activeFrameWaiters.set(actorId, waiters);
1324
+ // Spec 48:205 — transport/deadline limits keep applying during
1325
+ // relocation: the sealing side must not wait forever for active
1326
+ // frames that themselves may be waiting on this relocation.
1327
+ timer = startOutsideStateLane(() => setTimeout(() => {
1328
+ this.lane.tryPost(() => {
1329
+ waiters.delete(waiter);
1330
+ if (waiters.size === 0) this.activeFrameWaiters.delete(actorId);
1331
+ waiter.reject(createInternalFrameworkException(
1332
+ ZLinkFrameworkInternalErrorKind.DeadlineExceeded,
1333
+ `Actor '${actorId}' session seal timed out waiting for active frames.`,
1334
+ true
1335
+ ));
1336
+ });
1337
+ }, this.sealWaitTimeoutMs));
1338
+ timer.unref();
1339
+ if (signal === undefined) return;
1340
+ if (signal.aborted) onAbort();
1341
+ else startOutsideStateLane(() => signal.addEventListener('abort', onAbort, { once: true }));
1342
+ });
1343
+ }
1344
+
1345
+ private resolveActiveFrameWaiters(actorId: string): void {
1346
+ const waiters = this.activeFrameWaiters.get(actorId);
1347
+ if (waiters === undefined) return;
1348
+ this.activeFrameWaiters.delete(actorId);
1349
+ for (const waiter of waiters) waiter.resolve();
1350
+ }
1351
+
1352
+ private rejectActiveFrameWaiters(actorId: string, error: unknown): void {
1353
+ const waiters = this.activeFrameWaiters.get(actorId);
1354
+ if (waiters === undefined) return;
1355
+ this.activeFrameWaiters.delete(actorId);
1356
+ for (const waiter of waiters) waiter.reject(error);
1357
+ }
1358
+
1359
+ private startOutboundDrain(queue: ZLinkActorSessionRelocationQueue): void {
1360
+ if (queue.drainPromise !== undefined) return;
1361
+ const drain = startOutsideStateLane(async () => {
1362
+ for (;;) {
1363
+ const entry = await this.lane.run(() => {
1364
+ const current = queue.outbound.at(0);
1365
+ if (current === undefined || !current.released) return undefined;
1366
+ if (current.settled) {
1367
+ queue.outbound.shift();
1368
+ return null;
1369
+ }
1370
+ return current;
1371
+ });
1372
+ if (entry === undefined) return;
1373
+ if (entry === null) continue;
1374
+ try {
1375
+ const delivered = await entry.operation.deliver();
1376
+ await this.lane.run(() => {
1377
+ if (delivered) this.settleOutbound(queue, entry);
1378
+ else this.failOutbound(
1379
+ queue,
1380
+ entry,
1381
+ new Error(`Actor '${queue.actorId}' retained Session outbound delivery was rejected.`)
1382
+ );
1383
+ if (queue.outbound[0] === entry) queue.outbound.shift();
1384
+ });
1385
+ } catch (error) {
1386
+ await this.lane.run(() => {
1387
+ this.failOutbound(queue, entry, error);
1388
+ if (queue.outbound[0] === entry) queue.outbound.shift();
1389
+ });
1390
+ }
1391
+ }
1392
+ });
1393
+ startOutsideStateLane(() => {
1394
+ void drain.finally(async () => await this.lane.run(() => {
1395
+ if (queue.drainPromise === drain) queue.drainPromise = undefined;
1396
+ if (queue.outbound[0]?.released === true) this.startOutboundDrain(queue);
1397
+ else this.deleteEmptyRelocationQueue(queue);
1398
+ }));
1399
+ });
1400
+ queue.drainPromise = drain;
1401
+ }
1402
+
1403
+ private reserveOutbound(
1404
+ queue: ZLinkActorSessionRelocationQueue,
1405
+ operation: ZLinkActorSessionRetainedOutbound
1406
+ ): boolean {
1407
+ if (queue.outboundCount < this.outboundCapacity) {
1408
+ queue.outboundCount++;
1409
+ return true;
1410
+ }
1411
+ failRetainedOutbound(
1412
+ operation,
1413
+ new Error(`Actor '${queue.actorId}' Session relocation outbound capacity was exhausted.`)
1414
+ );
1415
+ return false;
1416
+ }
1417
+
1418
+ private settleOutbound(
1419
+ queue: ZLinkActorSessionRelocationQueue,
1420
+ entry: ZLinkActorSessionOutboundEntry
1421
+ ): void {
1422
+ if (entry.settled) return;
1423
+ entry.settled = true;
1424
+ queue.outboundCount--;
1425
+ }
1426
+
1427
+ private failOutbound(
1428
+ queue: ZLinkActorSessionRelocationQueue,
1429
+ entry: ZLinkActorSessionOutboundEntry,
1430
+ error: unknown
1431
+ ): void {
1432
+ if (entry.settled) return;
1433
+ this.settleOutbound(queue, entry);
1434
+ failRetainedOutbound(entry.operation, error);
1435
+ }
1436
+
1437
+ private outboundAdmissionError(
1438
+ claim: ServiceSessionBindingAdmissionClaim
1439
+ ): Error | undefined {
1440
+ if (
1441
+ claim.actorId.length === 0
1442
+ || claim.objectGeneration <= 0n
1443
+ || claim.actorNodeRid.length === 0
1444
+ || claim.actorNodeGeneration <= 0n
1445
+ || claim.producerNodeRid.length === 0
1446
+ || claim.producerNodeGeneration <= 0n
1447
+ || claim.bindingGeneration <= 0n
1448
+ || claim.sessionIdentity.length === 0
1449
+ || !routingIdsEqual(claim.producerNodeRid, claim.actorNodeRid)
1450
+ || claim.producerNodeGeneration !== claim.actorNodeGeneration
1451
+ ) {
1452
+ return new Error(`Actor '${claim.actorId}' Session outbound admission claim is invalid.`);
1453
+ }
1454
+ const route = this.routes.get(claim.actorId);
1455
+ const ref = route?.actor as (TActor & { readonly ref?: {
1456
+ readonly actorId?: unknown;
1457
+ readonly objectGeneration?: unknown;
1458
+ readonly generation?: unknown;
1459
+ readonly bindingGeneration?: unknown;
1460
+ } }) | undefined;
1461
+ const actorRef = ref?.ref;
1462
+ const routeSessionIdentity = route?.sessionIdentity;
1463
+ if (
1464
+ route === undefined
1465
+ || actorRef === undefined
1466
+ || String(actorRef.actorId ?? claim.actorId) !== claim.actorId
1467
+ || BigInt(
1468
+ actorRef.objectGeneration as bigint | number | string | boolean | undefined
1469
+ ?? actorRef.generation as bigint | number | string | boolean | undefined
1470
+ ?? -1
1471
+ ) !== claim.objectGeneration
1472
+ || BigInt(
1473
+ actorRef.bindingGeneration as bigint | number | string | boolean | undefined ?? -1
1474
+ ) !== claim.bindingGeneration
1475
+ || String(routeSessionIdentity ?? '') !== claim.sessionIdentity
1476
+ ) {
1477
+ return new Error(`Actor '${claim.actorId}' Session outbound admission was fenced by its current binding.`);
1478
+ }
1479
+ return undefined;
1480
+ }
1481
+
1482
+ private matchesCurrentProducerNode(claim: ServiceSessionBindingAdmissionClaim): boolean {
1483
+ const route = this.routes.get(claim.actorId);
1484
+ const actorRef = (route?.actor as TActor & { readonly ref?: {
1485
+ readonly nodeRid?: unknown;
1486
+ } }).ref;
1487
+ return route !== undefined
1488
+ && actorRef !== undefined
1489
+ && routingIdsEqual(String(actorRef.nodeRid ?? ''), claim.actorNodeRid);
1490
+ }
1491
+
1492
+ private rememberTerminalRelocation(state: ZLinkActorSessionRelocationState): void {
1493
+ this.terminalRelocations.delete(state);
1494
+ this.terminalRelocations.set(state, true);
1495
+ while (this.terminalRelocations.size > this.terminalRelocationCapacity) {
1496
+ const oldest = this.terminalRelocations.keys().next().value as
1497
+ ZLinkActorSessionRelocationState | undefined;
1498
+ if (oldest === undefined) return;
1499
+ this.terminalRelocations.delete(oldest);
1500
+ const queue = this.relocations.get(oldest.actorId);
1501
+ if (queue?.seals.get(oldest.sealId) === oldest) {
1502
+ queue.seals.delete(oldest.sealId);
1503
+ this.deleteEmptyRelocationQueue(queue);
1504
+ }
1505
+ }
1506
+ }
1507
+
1508
+ private deleteEmptyRelocationQueue(queue: ZLinkActorSessionRelocationQueue): void {
1509
+ if (
1510
+ queue.activeSealId === undefined
1511
+ && queue.seals.size === 0
1512
+ && queue.outbound.length === 0
1513
+ && queue.drainPromise === undefined
1514
+ && this.relocations.get(queue.actorId) === queue
1515
+ ) {
1516
+ this.relocations.delete(queue.actorId);
1517
+ }
1518
+ }
1519
+
1520
+ private resolveSealWaiters(actorId: string, _sealId: string): void {
1521
+ const waiters = this.sealWaiters.get(actorId);
1522
+ if (waiters === undefined) return;
1523
+ this.sealWaiters.delete(actorId);
1524
+ for (const waiter of waiters) waiter.resolve();
1525
+ }
1526
+
1527
+ private rejectSealWaiters(actorId: string, error: unknown): void {
1528
+ const waiters = this.sealWaiters.get(actorId);
1529
+ if (waiters === undefined) return;
1530
+ this.sealWaiters.delete(actorId);
1531
+ for (const waiter of waiters) waiter.reject(error);
1532
+ }
1533
+ }
1534
+
1535
+ function assertRelocationClaim(
1536
+ state: ZLinkActorSessionRelocationState,
1537
+ claim: ZLinkActorSessionRelocationClaim
1538
+ ): void {
1539
+ if (
1540
+ state.actorGeneration !== claim.actorGeneration
1541
+ || state.bindingGeneration !== claim.bindingGeneration
1542
+ || state.sessionIdentity !== claim.sessionIdentity
1543
+ || state.actorNodeRid !== claim.actorNodeRid
1544
+ || state.actorNodeGeneration !== claim.actorNodeGeneration
1545
+ ) {
1546
+ throw createInternalFrameworkException(
1547
+ ZLinkFrameworkInternalErrorKind.ActorLocationStale,
1548
+ `Actor '${claim.actorId}' repeated Session seal changed its exact identity.`,
1549
+ true
1550
+ );
1551
+ }
1552
+ }
1553
+
1554
+ function startOutsideStateLane<T>(work: () => T): T {
1555
+ return detachedStateLaneResource.runInAsyncScope(work);
1556
+ }
1557
+
1558
+ function matchesRelocationSourceProof(
1559
+ state: ZLinkActorSessionRelocationState,
1560
+ claim: ServiceSessionBindingAdmissionClaim
1561
+ ): boolean {
1562
+ return state.actorId === claim.actorId
1563
+ && state.actorGeneration === claim.objectGeneration
1564
+ && state.bindingGeneration === claim.bindingGeneration
1565
+ && state.sessionIdentity === claim.sessionIdentity
1566
+ && state.actorNodeRid !== undefined
1567
+ && routingIdsEqual(state.actorNodeRid, claim.actorNodeRid)
1568
+ && state.actorNodeGeneration === claim.actorNodeGeneration;
1569
+ }
1570
+
1571
+ function matchesAcceptedProducerProof(
1572
+ proof: ZLinkActorSessionAcceptedProducerProof,
1573
+ claim: ServiceSessionBindingAdmissionClaim
1574
+ ): boolean {
1575
+ return proof.actorId === claim.actorId
1576
+ && proof.objectGeneration === claim.objectGeneration
1577
+ && routingIdsEqual(proof.actorNodeRid, claim.actorNodeRid)
1578
+ && proof.actorNodeGeneration === claim.actorNodeGeneration
1579
+ && proof.sessionIdentity === claim.sessionIdentity
1580
+ && proof.bindingGeneration === claim.bindingGeneration;
1581
+ }
1582
+
1583
+ function validAcceptedTargetProof(
1584
+ state: ZLinkActorSessionRelocationState,
1585
+ proof: ZLinkActorSessionAcceptedProducerProof
1586
+ ): boolean {
1587
+ return proof.actorId === state.actorId
1588
+ && proof.objectGeneration === state.actorGeneration
1589
+ && proof.actorNodeRid.length > 0
1590
+ && proof.actorNodeGeneration > 0n
1591
+ && proof.sessionIdentity === state.sessionIdentity
1592
+ && proof.bindingGeneration === state.bindingGeneration;
1593
+ }
1594
+
1595
+ function relocationSourceProof(
1596
+ state: ZLinkActorSessionRelocationState
1597
+ ): ZLinkActorSessionAcceptedProducerProof | undefined {
1598
+ if (
1599
+ state.sessionIdentity === undefined
1600
+ || state.actorNodeRid === undefined
1601
+ || state.actorNodeGeneration === undefined
1602
+ ) return undefined;
1603
+ return {
1604
+ actorId: state.actorId,
1605
+ objectGeneration: state.actorGeneration,
1606
+ actorNodeRid: state.actorNodeRid,
1607
+ actorNodeGeneration: state.actorNodeGeneration,
1608
+ sessionIdentity: state.sessionIdentity,
1609
+ bindingGeneration: state.bindingGeneration
1610
+ };
1611
+ }
1612
+
1613
+ function failRetainedOutbound(
1614
+ operation: ZLinkActorSessionRetainedOutbound,
1615
+ error: unknown
1616
+ ): void {
1617
+ try {
1618
+ operation.fail(error);
1619
+ } catch {
1620
+ // The aggregate has already removed the entry. A failure observer cannot
1621
+ // retain or settle the same delivery a second time.
1622
+ }
1623
+ }
1624
+
1625
+ function assertSuccessorSessionIdentity(
1626
+ predecessor: ZLinkActorSessionRelocationState,
1627
+ successor: ZLinkActorSessionRelocationClaim
1628
+ ): void {
1629
+ if (
1630
+ predecessor.actorGeneration !== successor.actorGeneration
1631
+ || predecessor.bindingGeneration !== successor.bindingGeneration
1632
+ || predecessor.sessionIdentity !== successor.sessionIdentity
1633
+ ) {
1634
+ throw createInternalFrameworkException(
1635
+ ZLinkFrameworkInternalErrorKind.ActorLocationStale,
1636
+ `Actor '${successor.actorId}' successor Session seal changed its exact Session identity.`,
1637
+ true
1638
+ );
1639
+ }
1640
+ }
1641
+
1642
+ export interface ZLinkActorSessionRouteFence {
1643
+ readonly objectGeneration: bigint;
1644
+ readonly bindingGeneration: bigint;
1645
+ }
1646
+
1647
+ function routeMatchesFence<
1648
+ TContext extends ZLinkActorSessionBindingContext<TActor>,
1649
+ TActor extends ZLinkActorSessionBindingActor
1650
+ >(route: ZLinkActorSessionRoute<TContext, TActor>, expected: ZLinkActorSessionRouteFence): boolean {
1651
+ const ref = (route.actor as TActor & { readonly ref?: unknown }).ref as {
1652
+ readonly objectGeneration?: bigint;
1653
+ readonly generation?: bigint;
1654
+ readonly bindingGeneration?: bigint;
1655
+ } | undefined;
1656
+ return ref !== undefined
1657
+ && BigInt(ref.objectGeneration ?? ref.generation ?? -1n) === expected.objectGeneration
1658
+ && ref.bindingGeneration === expected.bindingGeneration;
1659
+ }
1660
+
1661
+ function sessionIdentityFromContext<
1662
+ TActor extends ZLinkActorSessionBindingActor,
1663
+ TContext extends ZLinkActorSessionBindingContext<TActor>
1664
+ >(context: TContext): string | undefined {
1665
+ return context.routingId === undefined ? undefined : String(context.routingId);
1666
+ }
1667
+
1668
+ function waitForSessionRelocation(
1669
+ operation: Promise<void>,
1670
+ signal?: AbortSignal
1671
+ ): Promise<void> {
1672
+ if (signal === undefined) return operation;
1673
+ if (signal.aborted) return Promise.reject(signal.reason ?? createAbortError());
1674
+ return new Promise<void>((resolve, reject) => {
1675
+ const onAbort = () => {
1676
+ signal.removeEventListener('abort', onAbort);
1677
+ reject(signal.reason ?? createAbortError());
1678
+ };
1679
+ signal.addEventListener('abort', onAbort, { once: true });
1680
+ operation.then(
1681
+ () => {
1682
+ signal.removeEventListener('abort', onAbort);
1683
+ resolve();
1684
+ },
1685
+ error => {
1686
+ signal.removeEventListener('abort', onAbort);
1687
+ reject(error);
1688
+ }
1689
+ );
1690
+ });
1691
+ }