@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,1958 @@
1
+ import { createHash, randomUUID } from 'node:crypto';
2
+ import type {
3
+ ActorRef,
4
+ RoutingId,
5
+ ZLinkActor,
6
+ ZLinkActorJoinOperationId,
7
+ ZLinkMessage,
8
+ ZLinkMessageSerializer,
9
+ ZLinkRelocationStore,
10
+ ZLinkSpot
11
+ } from '../../contracts';
12
+ import { ZLinkSpotKind } from '../../contracts';
13
+ import type {
14
+ ZLinkAggregateId,
15
+ ZLinkAuthoritySnapshot,
16
+ ZLinkLocationOwnerToken
17
+ } from '../locations/internal-location-contracts';
18
+ import type {
19
+ ZLinkAuthorityStore,
20
+ ZLinkObjectCreationStore,
21
+ ZLinkOwnerLeaseStore
22
+ } from '../locations/internal-store-contracts';
23
+ import { encodeAuthorityKey } from '../locations/authority-key-codec';
24
+ import type { Message } from '../../contracts/Common/Message';
25
+ import type { ZLinkBackendActorRef, ZLinkBackendMeshNode } from '../backend';
26
+ import {
27
+ toFrameworkActorRef,
28
+ mergeRemoteBoundSessionTarget,
29
+ preferredRemoteBoundSessionTarget,
30
+ type ZLinkActorHandoffCoordinator,
31
+ type ZLinkActorHandoffPrefixAdmission,
32
+ type ZLinkActorHandoffPrefixQueue,
33
+ type ZLinkActorHandoffReplayPreparation,
34
+ type ZLinkActorRoutedJoinTransport,
35
+ type ZLinkActorTransferRegistry,
36
+ isDeferredJoinAcceptedRootPublication,
37
+ ZLinkDeferredJoinAcceptedJournal,
38
+ rewriteActorAuthorityRoute,
39
+ type ZLinkDeferredJoinAcceptedRoot,
40
+ type ZLinkDeferredJoinRootIdentity,
41
+ type ZLinkRemoteBoundSessionTarget
42
+ } from '../actors';
43
+ import type { ZLinkActorRuntimeState } from '../actors/actor-runtime-state';
44
+ import { ZLinkActorRetryDelay } from '../actors/actor-retry-delay';
45
+ import { encodeRoutingIdStorageHex, routingIdsEqual } from '../routing-id';
46
+ import type { ZLinkLocationLifecycle } from '../locations';
47
+ import { wrapFrameworkPayloadMessage } from '../messaging/payload-codec';
48
+ import type { DefaultZLinkSpotManager } from '../spots';
49
+ import type {
50
+ ZLinkSpotRouteResolver,
51
+ ZLinkSpotRouteTarget
52
+ } from '../spots/spot-routing-internal';
53
+ import type {
54
+ ZLinkActorHandoffPacket,
55
+ ZLinkActorHandoffResult,
56
+ ZLinkActorHandoffTerminalAcceptance,
57
+ ZLinkActorHandoffTerminalAck
58
+ } from '../actors/actor-handoff';
59
+ import type { ZLinkNativeActorJoinSnapshot } from '../spots/spot-runtime-ports';
60
+ import {
61
+ ownerFence,
62
+ type ZLinkActorMessageFollowOwnerFence
63
+ } from '../actors/actor-message-follow-context';
64
+ import type {
65
+ ServiceSessionRelocationRoute,
66
+ ServiceSessionRelocationSeal,
67
+ ServiceSessionRelocationSealed,
68
+ ServiceWireOperationId
69
+ } from '../foundation/service-stateful-wire-codec';
70
+ import { serviceSessionRelocationIdentityKey } from '../foundation/service-stateful-wire-codec';
71
+ import { operationIdentityKey } from '../foundation/operation-identity';
72
+ import { BoundedReplayMap } from './bounded-replay-map';
73
+
74
+ const DEFERRED_JOIN_TERMINAL_CAPACITY = 4096;
75
+
76
+ interface ZLinkSessionRelocationWirePort {
77
+ requestSessionRelocationSeal(
78
+ meshName: string,
79
+ targetNodeRid: RoutingId,
80
+ request: ServiceSessionRelocationSeal,
81
+ signal?: AbortSignal
82
+ ): Promise<ServiceSessionRelocationSealed>;
83
+ sendSessionRelocationRoute(
84
+ meshName: string,
85
+ targetNodeRid: RoutingId,
86
+ request: ServiceSessionRelocationRoute,
87
+ signal?: AbortSignal
88
+ ): Promise<void>;
89
+ }
90
+
91
+ type ZLinkCommittedActorAuthority = Pick<
92
+ ZLinkAuthoritySnapshot,
93
+ | 'objectGeneration'
94
+ | 'authorityOwnerGeneration'
95
+ | 'ownerId'
96
+ | 'ownerLeaseGeneration'
97
+ | 'allocation'
98
+ >;
99
+
100
+ /** Converts only committed actor authority evidence into a Message Follow fence. */
101
+ export function committedActorOwnerFence(
102
+ actorId: string,
103
+ targetActorRef: ActorRef,
104
+ authority: ZLinkCommittedActorAuthority
105
+ ): ZLinkActorMessageFollowOwnerFence {
106
+ if (targetActorRef.actorId !== actorId
107
+ || targetActorRef.objectGeneration <= 0n
108
+ || authority.objectGeneration !== targetActorRef.objectGeneration
109
+ || authority.allocation.state !== 'active'
110
+ || authority.allocation.objectKind !== 'actor'
111
+ || authority.allocation.descriptor.meshName !== targetActorRef.meshName
112
+ || !routingIdsEqual(authority.allocation.descriptor.rid, targetActorRef.nodeRid)
113
+ || authority.ownerId.length === 0
114
+ || authority.ownerLeaseGeneration <= 0n
115
+ || authority.allocation.descriptorLifecycleGeneration <= 0n
116
+ || authority.authorityOwnerGeneration <= 0n) {
117
+ throw new Error(
118
+ `Actor '${actorId}' handoff target does not match the committed authority snapshot.`
119
+ );
120
+ }
121
+ return ownerFence({
122
+ ownerId: authority.ownerId,
123
+ ownerLeaseGeneration: authority.ownerLeaseGeneration,
124
+ nodeRid: String(authority.allocation.descriptor.rid),
125
+ nodeRidHex: encodeRoutingIdStorageHex(authority.allocation.descriptor.rid),
126
+ nodeGeneration: authority.allocation.descriptorLifecycleGeneration,
127
+ authorityOwnerGeneration: authority.authorityOwnerGeneration
128
+ });
129
+ }
130
+
131
+ function requireSourceObjectGeneration(
132
+ actorId: string,
133
+ state: ZLinkActorRuntimeState
134
+ ): bigint {
135
+ const generation = state.nativeActorRef?.generation;
136
+ if (generation === undefined || generation <= 0n) {
137
+ throw new Error(`Actor '${actorId}' handoff requires a positive source ObjectGeneration.`);
138
+ }
139
+ return generation;
140
+ }
141
+
142
+ function createHandoffReplayGate(): {
143
+ readonly start: Promise<void>;
144
+ open(): void;
145
+ } {
146
+ let open!: () => void;
147
+ const start = new Promise<void>(resolve => {
148
+ open = resolve;
149
+ });
150
+ return { start, open };
151
+ }
152
+
153
+ export interface ZLinkActorTransferRuntimeActorManager {
154
+ getState(actorId: string): ZLinkActorRuntimeState | undefined;
155
+ getOrCreateActor(actorId: string, actorType: string, signal?: AbortSignal): Promise<ZLinkActor>;
156
+ getOrCreateWithNativeRef(
157
+ actorId: string,
158
+ actorType: string,
159
+ actorRef: ZLinkBackendActorRef,
160
+ actorCreateRequest?: unknown,
161
+ signal?: AbortSignal
162
+ ): Promise<ZLinkActor>;
163
+ materializeTransferredActor(
164
+ actorId: string,
165
+ actorType: string,
166
+ adapterKey: string | undefined,
167
+ transferState: ZLinkMessage,
168
+ signal?: AbortSignal
169
+ ): Promise<{ readonly actor: ZLinkActor; readonly actorRef: ActorRef }>;
170
+ prepareRelocationActor(
171
+ actorId: string,
172
+ actorType: string,
173
+ objectGeneration: bigint,
174
+ authorityOwnerGeneration: bigint,
175
+ spotId: RoutingId,
176
+ spotGeneration: bigint,
177
+ membershipEpoch: bigint,
178
+ signal?: AbortSignal,
179
+ transfer?: {
180
+ readonly adapterKey: string;
181
+ readonly state: ZLinkMessage;
182
+ }
183
+ ): Promise<ZLinkActor>;
184
+ publishRelocationActor(actorId: string): void;
185
+ rollbackTransferredActor(actor: ZLinkActor, signal?: AbortSignal): Promise<void>;
186
+ completeCoreRelocationSource(actorId: string): Promise<void>;
187
+ }
188
+
189
+ export interface ZLinkActorTransferRuntimeOptions {
190
+ readonly routeTransport: ZLinkActorRoutedJoinTransport;
191
+ readonly messageSerializers?: ReadonlyMap<string, ZLinkMessageSerializer>;
192
+ readonly spotManager: () => DefaultZLinkSpotManager | undefined;
193
+ readonly actorManager: () => ZLinkActorTransferRuntimeActorManager | undefined;
194
+ readonly primaryMeshNode: () => ZLinkBackendMeshNode;
195
+ readonly notifyEntrySpotActorLeft: (actor: ZLinkActor, signal?: AbortSignal) => Promise<void>;
196
+ readonly restoreEntrySpotActorJoined: (actor: ZLinkActor, signal?: AbortSignal) => Promise<void>;
197
+ readonly locationLifecycle: () => ZLinkLocationLifecycle | undefined;
198
+ /** Resolves the authoritative Ready route for a target User/Instance Spot. */
199
+ readonly spotRouteResolver?: () => ZLinkSpotRouteResolver | undefined;
200
+ readonly actorHandoff: ZLinkActorHandoffCoordinator;
201
+ readonly actorTransferRegistry: ZLinkActorTransferRegistry;
202
+ readonly authorityStore: () => (
203
+ ZLinkAuthorityStore
204
+ & ZLinkObjectCreationStore
205
+ & ZLinkOwnerLeaseStore
206
+ ) | undefined;
207
+ readonly currentOwner: () => ZLinkLocationOwnerToken | undefined;
208
+ readonly relocationStore: () => ZLinkRelocationStore | undefined;
209
+ /** Live admitted peers of a mesh; used to stop retries against a gone session owner. */
210
+ readonly liveDescriptors?: (
211
+ meshName: string,
212
+ signal?: AbortSignal
213
+ ) => Promise<readonly import('../../contracts').ZLinkMeshNodeDescriptor[]>;
214
+ /** Service-wire command 42/43/44 bridge, installed after the host runtime is assembled. */
215
+ readonly sessionRelocationWire?: () => ZLinkSessionRelocationWirePort | undefined;
216
+ readonly clearRemoteActorPacketTarget: (actorId: string) => void;
217
+ /** Acquires that permit before the Actor FIFO claims the runnable child. */
218
+ readonly prepareApplicationJob?: ZLinkActorHandoffReplayPreparation;
219
+ readonly reportPostCommitError?: (error: unknown) => void;
220
+ readonly onSourceDepartureCompleted?: (actorId: string) => void;
221
+ readonly shutdownSignal?: () => AbortSignal | undefined;
222
+ readonly metrics?: import('../diagnostics').ZLinkRuntimeMetrics;
223
+ }
224
+
225
+ export class ZLinkActorTransferRuntime {
226
+ private readonly sourceDepartureTasks = new Map<string, Promise<void>>();
227
+ private readonly coreSourceLeaves = new Map<string, {
228
+ readonly promise: Promise<void>;
229
+ readonly resolve: () => void;
230
+ readonly reject: (error: unknown) => void;
231
+ readonly submitted: Promise<void>;
232
+ readonly resolveSubmitted: () => void;
233
+ readonly rejectSubmitted: (error: unknown) => void;
234
+ notifySubmitted?: () => Promise<void>;
235
+ }>();
236
+ private readonly activeDeferredJoinTerminals =
237
+ new Map<string, Promise<ZLinkDeferredJoinAcceptedRoot>>();
238
+ private readonly deferredJoinTerminals =
239
+ new BoundedReplayMap<string, ZLinkDeferredJoinAcceptedRoot>(
240
+ DEFERRED_JOIN_TERMINAL_CAPACITY
241
+ );
242
+
243
+ constructor(private readonly options: ZLinkActorTransferRuntimeOptions) {}
244
+
245
+ beginDeferredActorHandoff(
246
+ actor: ZLinkActor,
247
+ state: ZLinkActorRuntimeState,
248
+ operationId: string
249
+ ): void {
250
+ const actorId = actor.context.actorId;
251
+ this.options.actorHandoff.beginProvisional(
252
+ actorId,
253
+ operationId,
254
+ requireSourceObjectGeneration(actorId, state)
255
+ );
256
+ }
257
+
258
+ promoteDeferredActorHandoff(
259
+ actor: ZLinkActor,
260
+ _state: ZLinkActorRuntimeState,
261
+ operationId: string
262
+ ): void {
263
+ this.options.actorHandoff.promoteProvisional(actor.context.actorId, operationId);
264
+ }
265
+
266
+ async completeDeferredActorHandoff(
267
+ actor: ZLinkActor,
268
+ target: ZLinkSpotRouteTarget,
269
+ _targetActorRef: ActorRef,
270
+ operationId: string
271
+ ): Promise<void> {
272
+ const actorId = actor.context.actorId;
273
+ if (!this.options.actorHandoff.isProvisional(actorId)) return;
274
+ const manager = this.options.spotManager();
275
+ if (manager === undefined) {
276
+ throw new Error(`Actor '${actorId}' same-node Join has no local Spot manager.`);
277
+ }
278
+ const admitted = this.options.actorHandoff.admitDeferredPrefix(
279
+ actorId,
280
+ operationId,
281
+ drain => manager.admitRoutedActorPacketPrefix(
282
+ target.spotId,
283
+ actorId,
284
+ drain
285
+ ),
286
+ this.options.prepareApplicationJob
287
+ );
288
+ void this.observeHandoffReplay(admitted.terminal);
289
+ }
290
+
291
+ async cancelDeferredActorHandoff(
292
+ actor: ZLinkActor,
293
+ _state: ZLinkActorRuntimeState,
294
+ operationId: string
295
+ ): Promise<void> {
296
+ const admitted = this.admitDeferredSourcePrefix(
297
+ actor,
298
+ _state,
299
+ operationId
300
+ );
301
+ void this.observeHandoffReplay(admitted.terminal);
302
+ }
303
+
304
+ async prepareDeferredJoinAccepted(
305
+ actorId: string,
306
+ operationId: ZLinkActorJoinOperationId,
307
+ actorRef: ActorRef,
308
+ rawReply: Uint8Array,
309
+ replyContentType?: string,
310
+ signal?: AbortSignal,
311
+ canonicalInventoryDigest?: string
312
+ ): Promise<ZLinkDeferredJoinAcceptedRoot> {
313
+ return await this.requireDeferredJoinJournal().prepare(
314
+ actorId,
315
+ operationId,
316
+ actorRef,
317
+ rawReply,
318
+ replyContentType,
319
+ signal,
320
+ canonicalInventoryDigest
321
+ );
322
+ }
323
+
324
+ async isDeferredJoinAcceptedRootPublication(
325
+ reference: string,
326
+ checksumCrc32c: number,
327
+ expected: ZLinkDeferredJoinRootIdentity,
328
+ signal?: AbortSignal
329
+ ): Promise<boolean> {
330
+ const relocation = this.options.relocationStore();
331
+ return relocation === undefined
332
+ ? false
333
+ : await isDeferredJoinAcceptedRootPublication(
334
+ relocation,
335
+ reference,
336
+ checksumCrc32c,
337
+ expected,
338
+ signal
339
+ );
340
+ }
341
+
342
+ async discardDeferredJoinAccepted(
343
+ root: ZLinkDeferredJoinAcceptedRoot,
344
+ signal?: AbortSignal
345
+ ): Promise<void> {
346
+ await this.requireDeferredJoinJournal().discardPrepared(root, signal);
347
+ }
348
+
349
+ markDeferredJoinAcceptedCommitted(
350
+ root: ZLinkDeferredJoinAcceptedRoot,
351
+ actorRef: ActorRef,
352
+ signal?: AbortSignal
353
+ ): Promise<ZLinkDeferredJoinAcceptedRoot> {
354
+ return this.requireDeferredJoinJournal().markCommitted(root, actorRef, signal);
355
+ }
356
+
357
+ async commitAndDeliverDeferredJoinAccepted(
358
+ root: ZLinkDeferredJoinAcceptedRoot,
359
+ actor: ZLinkActor,
360
+ actorRef: ActorRef,
361
+ submitMailbox: <T>(operation: () => Promise<T>) => Promise<T>,
362
+ signal?: AbortSignal
363
+ ): Promise<ZLinkDeferredJoinAcceptedRoot> {
364
+ const terminalKey = deferredJoinTerminalKey(root);
365
+ const terminal = this.deferredJoinTerminals.get(terminalKey);
366
+ if (terminal !== undefined) {
367
+ this.deferredJoinTerminals.touch(terminalKey);
368
+ return terminal;
369
+ }
370
+ const active = this.activeDeferredJoinTerminals.get(terminalKey);
371
+ if (active !== undefined) return await waitForOperation(active, signal);
372
+ const completion = this.commitAndDeliverDeferredJoinAcceptedCore(
373
+ root,
374
+ actor,
375
+ actorRef,
376
+ submitMailbox
377
+ );
378
+ this.activeDeferredJoinTerminals.set(terminalKey, completion);
379
+ void completion.then(
380
+ completed => {
381
+ this.deferredJoinTerminals.remember(terminalKey, completed);
382
+ if (this.activeDeferredJoinTerminals.get(terminalKey) === completion) {
383
+ this.activeDeferredJoinTerminals.delete(terminalKey);
384
+ }
385
+ },
386
+ () => {
387
+ if (this.activeDeferredJoinTerminals.get(terminalKey) === completion) {
388
+ this.activeDeferredJoinTerminals.delete(terminalKey);
389
+ }
390
+ }
391
+ );
392
+ return await waitForOperation(completion, signal);
393
+ }
394
+
395
+ private async commitAndDeliverDeferredJoinAcceptedCore(
396
+ root: ZLinkDeferredJoinAcceptedRoot,
397
+ actor: ZLinkActor,
398
+ actorRef: ActorRef,
399
+ submitMailbox: <T>(operation: () => Promise<T>) => Promise<T>
400
+ ): Promise<ZLinkDeferredJoinAcceptedRoot> {
401
+ const targetActorRef = this.options.actorManager()
402
+ ?.getState(actor.context.actorId)
403
+ ?.nativeActorRef;
404
+ const currentActorRef = targetActorRef === undefined
405
+ ? actorRef
406
+ : toFrameworkActorRef(targetActorRef, actor.context.meshName);
407
+ let current = root.cursor === 'prepared'
408
+ ? await this.requireDeferredJoinJournal().markCommitted(root, currentActorRef)
409
+ : root;
410
+ if (current.cursor === 'delivered') return current;
411
+ let lastError: unknown;
412
+ for (let attempt = 0; attempt < 3; attempt++) {
413
+ try {
414
+ current = await this.requireDeferredJoinJournal().deliver(
415
+ current,
416
+ actor,
417
+ currentActorRef,
418
+ submitMailbox
419
+ );
420
+ return current;
421
+ } catch (error) {
422
+ lastError = error;
423
+ if (attempt < 2) {
424
+ await new Promise<void>(resolve => {
425
+ const timer = setTimeout(resolve, 10 << attempt);
426
+ timer.unref();
427
+ });
428
+ current = await this.requireDeferredJoinJournal().recover(
429
+ currentActorRef.actorId
430
+ ) ?? current;
431
+ }
432
+ }
433
+ }
434
+ throw lastError;
435
+ }
436
+
437
+ private requireDeferredJoinJournal(): ZLinkDeferredJoinAcceptedJournal {
438
+ const authority = this.options.authorityStore();
439
+ const relocation = this.options.relocationStore();
440
+ if (authority === undefined || relocation === undefined) {
441
+ throw new Error('Cross-node deferred Actor Join requires Location and Relocation Stores.');
442
+ }
443
+ return new ZLinkDeferredJoinAcceptedJournal(
444
+ authority,
445
+ relocation,
446
+ this.options.messageSerializers
447
+ );
448
+ }
449
+
450
+ private async prepareSourceActorLeave(
451
+ actor: ZLinkActor,
452
+ sourceSpotId: RoutingId | undefined,
453
+ signal?: AbortSignal
454
+ ): Promise<void> {
455
+ if (sourceSpotId !== undefined) {
456
+ const manager = this.options.spotManager();
457
+ if (manager !== undefined) {
458
+ await manager.prepareActorLeaveForTransfer(sourceSpotId, actor, signal);
459
+ return;
460
+ }
461
+ }
462
+ await this.options.notifyEntrySpotActorLeft(actor, signal);
463
+ }
464
+
465
+ private async restoreSourceActor(
466
+ actor: ZLinkActor,
467
+ sourceSpotId: RoutingId | undefined,
468
+ signal?: AbortSignal
469
+ ): Promise<void> {
470
+ if (sourceSpotId !== undefined) {
471
+ const manager = this.options.spotManager();
472
+ if (manager !== undefined) {
473
+ await manager.restoreActorAfterFailedTransfer(sourceSpotId, actor, signal);
474
+ return;
475
+ }
476
+ }
477
+ await this.options.restoreEntrySpotActorJoined(actor, signal);
478
+ }
479
+
480
+ private async beginSourceActorMove(
481
+ actor: ZLinkActor,
482
+ state: ZLinkActorRuntimeState,
483
+ deferredOperationId?: string
484
+ ): Promise<void> {
485
+ if (deferredOperationId !== undefined && this.options.actorHandoff.isProvisional(actor.context.actorId)) {
486
+ this.promoteDeferredActorHandoff(actor, state, deferredOperationId);
487
+ }
488
+ state.beginMove();
489
+ if (!this.options.actorHandoff.isActive(actor.context.actorId)) {
490
+ this.options.actorHandoff.begin(
491
+ actor.context.actorId,
492
+ requireSourceObjectGeneration(actor.context.actorId, state)
493
+ );
494
+ }
495
+ try {
496
+ if (state.spotId !== undefined) {
497
+ relocationDebug('source_actor_move.await_spot_transfer', {
498
+ actorId: actor.context.actorId,
499
+ spotId: String(state.spotId)
500
+ });
501
+ await this.options.spotManager()?.beginActorTransfer(state.spotId, actor.context.actorId);
502
+ relocationDebug('source_actor_move.spot_transfer_complete', {
503
+ actorId: actor.context.actorId,
504
+ spotId: String(state.spotId)
505
+ });
506
+ }
507
+ } catch (error) {
508
+ if (deferredOperationId === undefined) {
509
+ this.options.actorHandoff.cancel(actor.context.actorId);
510
+ } else {
511
+ const admitted = this.admitDeferredSourcePrefix(
512
+ actor,
513
+ state,
514
+ deferredOperationId
515
+ );
516
+ void this.observeHandoffReplay(admitted.terminal);
517
+ }
518
+ state.endMove();
519
+ throw error;
520
+ }
521
+ }
522
+
523
+ private async cancelSourceActorMove(
524
+ actor: ZLinkActor,
525
+ state: ZLinkActorRuntimeState,
526
+ deferredOperationId?: string,
527
+ replayStart: Promise<void> = Promise.resolve()
528
+ ): Promise<void> {
529
+ try {
530
+ if (state.spotId !== undefined) {
531
+ await this.options.spotManager()?.cancelActorTransfer(state.spotId, actor.context.actorId);
532
+ }
533
+ } finally {
534
+ try {
535
+ if (deferredOperationId === undefined) {
536
+ const admitted = this.admitCanceledSourcePrefix(actor, state, replayStart);
537
+ void this.observeHandoffReplay(admitted.terminal);
538
+ } else {
539
+ const admitted = this.admitDeferredSourcePrefix(
540
+ actor,
541
+ state,
542
+ deferredOperationId,
543
+ replayStart
544
+ );
545
+ void this.observeHandoffReplay(admitted.terminal);
546
+ }
547
+ } finally {
548
+ state.endMove();
549
+ }
550
+ }
551
+ }
552
+
553
+ private admitCanceledSourcePrefix(
554
+ actor: ZLinkActor,
555
+ state: ZLinkActorRuntimeState,
556
+ replayStart: Promise<void> = Promise.resolve()
557
+ ): ZLinkActorHandoffPrefixAdmission {
558
+ // The seal-era ingress hold returns to the source queue on a precommit
559
+ // abort. Rejection stays reserved for a source Actor whose dispatch is
560
+ // gone, because held packets then have no queue left to return to.
561
+ const queue = this.sourceHandoffPrefixQueue(actor, state);
562
+ if (queue === undefined) {
563
+ this.options.actorHandoff.cancel(actor.context.actorId);
564
+ return { terminal: Promise.resolve() };
565
+ }
566
+ return this.options.actorHandoff.admitCanceledPrefix(
567
+ actor.context.actorId,
568
+ queue,
569
+ this.options.prepareApplicationJob,
570
+ replayStart
571
+ );
572
+ }
573
+
574
+ private admitDeferredSourcePrefix(
575
+ actor: ZLinkActor,
576
+ state: ZLinkActorRuntimeState,
577
+ operationId: string,
578
+ replayStart: Promise<void> = Promise.resolve()
579
+ ): ZLinkActorHandoffPrefixAdmission {
580
+ const queue = this.sourceHandoffPrefixQueue(actor, state);
581
+ if (queue === undefined) {
582
+ this.options.actorHandoff.cancel(actor.context.actorId);
583
+ return { terminal: Promise.resolve() };
584
+ }
585
+ return this.options.actorHandoff.admitDeferredPrefix(
586
+ actor.context.actorId,
587
+ operationId,
588
+ queue,
589
+ this.options.prepareApplicationJob,
590
+ replayStart
591
+ );
592
+ }
593
+
594
+ private async observeHandoffReplay(release: Promise<void>): Promise<void> {
595
+ try {
596
+ await release;
597
+ } catch (error) {
598
+ // Release drains every held record before rejecting. Lifecycle cleanup
599
+ // must continue, while the existing runtime task boundary retains the
600
+ // one-way/invariant failure for diagnostics.
601
+ try {
602
+ this.options.reportPostCommitError?.(error);
603
+ } catch {
604
+ // Diagnostics cannot interrupt the relocation terminal lifecycle.
605
+ }
606
+ }
607
+ }
608
+
609
+ private sourceHandoffPrefixQueue(
610
+ actor: ZLinkActor,
611
+ state: ZLinkActorRuntimeState
612
+ ): ZLinkActorHandoffPrefixQueue | undefined {
613
+ const sourceSpotId = state.spotId;
614
+ const manager = this.options.spotManager();
615
+ if (sourceSpotId === undefined || manager === undefined) {
616
+ return undefined;
617
+ }
618
+ return drain => manager.admitRoutedActorPacketPrefix(
619
+ sourceSpotId,
620
+ actor.context.actorId,
621
+ drain
622
+ );
623
+ }
624
+
625
+ async prepareSource(
626
+ actor: ZLinkActor,
627
+ state: ZLinkActorRuntimeState,
628
+ signal?: AbortSignal,
629
+ lifecycleAuthority: 'framework' | 'core' = 'framework',
630
+ deferredOperationId?: string,
631
+ relocation?: ServiceWireOperationId
632
+ ) {
633
+ await this.beginSourceActorMove(actor, state, deferredOperationId);
634
+ const relocationMetric = state.meshName === undefined
635
+ ? undefined
636
+ : this.options.metrics?.startRelocation(
637
+ state.meshName,
638
+ 'actor',
639
+ this.options.actorTransferRegistry.policy(state.actorType)
640
+ );
641
+ const sourceSpotId = state.spotId;
642
+ let sourceLeaveStarted = false;
643
+ let sealId: string | undefined;
644
+ try {
645
+ if (state.remoteBoundSessionTarget !== undefined) {
646
+ sealId = randomUUID();
647
+ const sealedTarget = await this.sealBoundSessionRoute(
648
+ actor,
649
+ state,
650
+ signal,
651
+ relocation
652
+ );
653
+ state.setRemoteBoundSessionTarget(sealedTarget);
654
+ this.options.actorHandoff.sealConnectionBoundIngress(actor.context.actorId);
655
+ }
656
+ const transfer = await this.options.actorTransferRegistry.transferOut(
657
+ actor,
658
+ state.actorType,
659
+ signal
660
+ );
661
+ // The captured state is handed off inline with the join request; the
662
+ // Relocation Store no longer carries relocation state payloads
663
+ // (spec 28 §2 — direct transfer is the only handoff original).
664
+ relocationMetric?.recordBytes(transfer.state.toEncodedPayload().toBytes().byteLength);
665
+ if (lifecycleAuthority === 'framework') {
666
+ sourceLeaveStarted = true;
667
+ await this.prepareSourceActorLeave(actor, sourceSpotId, signal);
668
+ }
669
+ const coreSourceLeave = lifecycleAuthority === 'core'
670
+ ? this.beginCoreSourceLeave(actor.context.actorId)
671
+ : undefined;
672
+ const sourceLeaveCompletion = coreSourceLeave?.completion;
673
+ const handoffBacklog = lifecycleAuthority === 'core'
674
+ ? this.options.actorHandoff.snapshotCoreBacklog(actor.context.actorId)
675
+ : this.options.actorHandoff.snapshot(actor.context.actorId);
676
+ let phase: 'prepared' | 'committed' | 'rolledBack' = 'prepared';
677
+ let committedTargetOwnerFence:
678
+ ZLinkActorMessageFollowOwnerFence | undefined;
679
+ return {
680
+ ...transfer,
681
+ handoffBacklog,
682
+ sourceLeaveCompletion,
683
+ sourceLeaveSubmitted: coreSourceLeave?.submitted,
684
+ onSourceLeaveSubmitted: (notify: () => Promise<void>) => {
685
+ const pending = this.coreSourceLeaves.get(actor.context.actorId);
686
+ if (pending === undefined) {
687
+ throw new Error(
688
+ `Actor '${actor.context.actorId}' has no pending Core source leave.`
689
+ );
690
+ }
691
+ pending.notifySubmitted = notify;
692
+ },
693
+ observeTargetAuthority: async (
694
+ target: ZLinkSpotRouteTarget,
695
+ targetActorRef: ActorRef,
696
+ observeSignal?: AbortSignal
697
+ ) => {
698
+ const authority = this.options.authorityStore();
699
+ if (authority === undefined
700
+ || target.targetOwnerId === undefined
701
+ || target.ownerLeaseGeneration === undefined
702
+ || target.targetNodeGeneration === undefined) {
703
+ throw new Error(
704
+ `Actor '${actor.context.actorId}' relocation target has no complete authority fence.`
705
+ );
706
+ }
707
+ const committed = await authority.readAuthority(
708
+ encodeAuthorityKey('actor', actor.context.actorId),
709
+ observeSignal
710
+ );
711
+ if (
712
+ committed.kind !== 'snapshot'
713
+ || committed.ownerId !== target.targetOwnerId
714
+ || committed.ownerLeaseGeneration !== target.ownerLeaseGeneration
715
+ || committed.allocation.descriptorLifecycleGeneration !== target.targetNodeGeneration
716
+ || !routingIdsEqual(committed.allocation.descriptor.rid, target.targetNodeRid)
717
+ || committed.objectGeneration !== targetActorRef.objectGeneration
718
+ ) {
719
+ throw new Error(
720
+ `Actor '${actor.context.actorId}' relocation target authority was not committed exactly.`
721
+ );
722
+ }
723
+ committedTargetOwnerFence = committedActorOwnerFence(
724
+ actor.context.actorId,
725
+ targetActorRef,
726
+ committed
727
+ );
728
+ },
729
+ commit: (
730
+ target: Parameters<ZLinkActorHandoffCoordinator['complete']>[1],
731
+ targetActorRef: ActorRef,
732
+ results: Parameters<ZLinkActorHandoffCoordinator['complete']>[3],
733
+ releaseLocation = true
734
+ ) => {
735
+ if (phase !== 'prepared') return;
736
+ if (committedTargetOwnerFence === undefined) {
737
+ throw new Error(
738
+ `Actor '${actor.context.actorId}' handoff has no committed target authority fence.`
739
+ );
740
+ }
741
+ phase = 'committed';
742
+ relocationMetric?.complete('completed');
743
+ try {
744
+ this.options.actorHandoff.complete(
745
+ actor.context.actorId,
746
+ target,
747
+ targetActorRef,
748
+ results,
749
+ committedTargetOwnerFence
750
+ );
751
+ } catch (error) {
752
+ // The target has already committed. Local Message Follow setup is now
753
+ // post-commit work and must not turn the accepted transfer into a
754
+ // source rollback that can no longer undo the target.
755
+ this.options.reportPostCommitError?.(error);
756
+ } finally {
757
+ const releaseSourceLocation = lifecycleAuthority === 'core' && releaseLocation;
758
+ if (releaseSourceLocation && sourceLeaveCompletion !== undefined) {
759
+ // Core sends the source leave control after the authority
760
+ // transition. Keep the source shell available for that
761
+ // callback, then release the old location and registry entry.
762
+ void sourceLeaveCompletion.then(
763
+ () => this.scheduleSourceDeparture(actor, sourceSpotId, true),
764
+ error => {
765
+ this.options.reportPostCommitError?.(error);
766
+ this.scheduleSourceDeparture(actor, sourceSpotId, true);
767
+ }
768
+ );
769
+ } else {
770
+ this.scheduleSourceDeparture(actor, sourceSpotId, releaseSourceLocation);
771
+ }
772
+ }
773
+ },
774
+ rollback: async () => {
775
+ if (phase !== 'prepared') return;
776
+ phase = 'rolledBack';
777
+ relocationMetric?.complete('aborted');
778
+ this.coreSourceLeaves.delete(actor.context.actorId);
779
+ const replayGate = createHandoffReplayGate();
780
+ try {
781
+ await this.cancelSourceActorMove(
782
+ actor,
783
+ state,
784
+ deferredOperationId,
785
+ replayGate.start
786
+ );
787
+ await this.restoreSourceActor(actor, sourceSpotId);
788
+ if (sealId !== undefined) {
789
+ await this.observeBoundSessionSealAbort(actor, state);
790
+ }
791
+ } finally {
792
+ replayGate.open();
793
+ }
794
+ }
795
+ };
796
+ } catch (error) {
797
+ relocationMetric?.complete('failed');
798
+ const replayGate = createHandoffReplayGate();
799
+ try {
800
+ await this.cancelSourceActorMove(
801
+ actor,
802
+ state,
803
+ deferredOperationId,
804
+ replayGate.start
805
+ );
806
+ if (sourceLeaveStarted) await this.restoreSourceActor(actor, sourceSpotId);
807
+ if (sealId !== undefined) {
808
+ await this.observeBoundSessionSealAbort(actor, state);
809
+ }
810
+ } catch (rollbackError) {
811
+ throw new AggregateError([error, rollbackError], 'Actor source leave and rollback both failed.');
812
+ } finally {
813
+ replayGate.open();
814
+ }
815
+ throw error;
816
+ }
817
+ }
818
+
819
+ async prepareMaintenanceSession(
820
+ actor: ZLinkActor,
821
+ state: ZLinkActorRuntimeState,
822
+ signal?: AbortSignal,
823
+ manageMembership = true,
824
+ relocation?: ServiceWireOperationId
825
+ ): Promise<{
826
+ readonly target?: ZLinkRemoteBoundSessionTarget;
827
+ readonly handoffBacklog: readonly import('../actors').ZLinkActorHandoffPacket[];
828
+ takeRelocationRelay(): readonly import('../actors').ZLinkActorHandoffPacket[];
829
+ setReplayResults(results: readonly import('../actors').ZLinkActorHandoffResult[]): void;
830
+ commit(
831
+ target: ZLinkSpotRouteTarget,
832
+ targetActorRef: ActorRef,
833
+ targetOwnerFence: ZLinkActorMessageFollowOwnerFence
834
+ ): Promise<void>;
835
+ rollback(): Promise<void>;
836
+ }> {
837
+ relocationDebug('maintenance_session.begin', {
838
+ actorId: actor.context.actorId,
839
+ spotId: state.spotId === undefined ? undefined : String(state.spotId)
840
+ });
841
+ if (manageMembership) {
842
+ await this.beginSourceActorMove(actor, state);
843
+ } else {
844
+ state.beginMove();
845
+ this.options.actorHandoff.begin(
846
+ actor.context.actorId,
847
+ requireSourceObjectGeneration(actor.context.actorId, state)
848
+ );
849
+ }
850
+ relocationDebug('maintenance_session.source_move_complete', {
851
+ actorId: actor.context.actorId
852
+ });
853
+ let sealId: string | undefined;
854
+ try {
855
+ if (state.remoteBoundSessionTarget !== undefined) {
856
+ sealId = randomUUID();
857
+ state.setRemoteBoundSessionTarget(
858
+ await this.sealBoundSessionRoute(actor, state, signal, relocation)
859
+ );
860
+ this.options.actorHandoff.sealConnectionBoundIngress(actor.context.actorId);
861
+ }
862
+ const handoffBacklog = this.options.actorHandoff.snapshot(actor.context.actorId);
863
+ let terminal: 'prepared' | 'committed' | 'rolledBack' = 'prepared';
864
+ let replayResults: readonly import('../actors').ZLinkActorHandoffResult[] = [];
865
+ return {
866
+ target: state.remoteBoundSessionTarget,
867
+ handoffBacklog,
868
+ takeRelocationRelay: () =>
869
+ this.options.actorHandoff.takeRelocationRelay(actor.context.actorId),
870
+ setReplayResults: results => {
871
+ if (terminal === 'prepared') replayResults = [...results];
872
+ },
873
+ commit: async (target, targetActorRef, targetOwnerFence) => {
874
+ if (terminal === 'rolledBack') return;
875
+ if (terminal === 'prepared') {
876
+ this.options.actorHandoff.complete(
877
+ actor.context.actorId,
878
+ target,
879
+ targetActorRef,
880
+ replayResults,
881
+ targetOwnerFence
882
+ );
883
+ if (manageMembership && state.spotId !== undefined) {
884
+ await this.options.spotManager()
885
+ ?.commitActorLeaveAfterTransfer(state.spotId, actor.context.actorId);
886
+ }
887
+ state.endMove();
888
+ terminal = 'committed';
889
+ }
890
+ },
891
+ rollback: async () => {
892
+ if (terminal !== 'prepared') return;
893
+ terminal = 'rolledBack';
894
+ const replayGate = createHandoffReplayGate();
895
+ try {
896
+ if (manageMembership) {
897
+ await this.cancelSourceActorMove(
898
+ actor,
899
+ state,
900
+ undefined,
901
+ replayGate.start
902
+ );
903
+ } else {
904
+ try {
905
+ const admitted = this.admitCanceledSourcePrefix(
906
+ actor,
907
+ state,
908
+ replayGate.start
909
+ );
910
+ void this.observeHandoffReplay(admitted.terminal);
911
+ } finally {
912
+ state.endMove();
913
+ }
914
+ }
915
+ if (sealId !== undefined) {
916
+ await this.observeBoundSessionSealAbort(actor, state);
917
+ }
918
+ } finally {
919
+ replayGate.open();
920
+ }
921
+ }
922
+ };
923
+ } catch (error) {
924
+ let sourceRestored = false;
925
+ const replayGate = createHandoffReplayGate();
926
+ try {
927
+ if (manageMembership) {
928
+ try {
929
+ await this.cancelSourceActorMove(
930
+ actor,
931
+ state,
932
+ undefined,
933
+ replayGate.start
934
+ );
935
+ sourceRestored = true;
936
+ } catch {}
937
+ } else {
938
+ try {
939
+ const admitted = this.admitCanceledSourcePrefix(
940
+ actor,
941
+ state,
942
+ replayGate.start
943
+ );
944
+ void this.observeHandoffReplay(admitted.terminal);
945
+ sourceRestored = true;
946
+ } catch {
947
+ // The Session owner keeps the seal until timeout when the source
948
+ // queue could not be restored.
949
+ } finally {
950
+ state.endMove();
951
+ }
952
+ }
953
+ if (sourceRestored && sealId !== undefined) {
954
+ await this.observeBoundSessionSealAbort(actor, state);
955
+ }
956
+ } finally {
957
+ replayGate.open();
958
+ }
959
+ throw error;
960
+ }
961
+ }
962
+
963
+ async notifyCoreSourceLeave(actor: ZLinkActor, callback: () => Promise<void>): Promise<void> {
964
+ const pending = this.coreSourceLeaves.get(actor.context.actorId);
965
+ let callbackResult: Promise<void>;
966
+ try {
967
+ callbackResult = Promise.resolve(callback());
968
+ } catch (error) {
969
+ callbackResult = Promise.reject(error);
970
+ }
971
+ // Submission, not the callback result, releases the target Join. Observe
972
+ // a fast rejection while the submission ACK is in flight without making
973
+ // that rejection an unhandled promise.
974
+ void callbackResult.catch(() => {});
975
+ try {
976
+ if (pending !== undefined) {
977
+ if (pending.notifySubmitted === undefined) {
978
+ throw new Error(
979
+ `Actor '${actor.context.actorId}' has no Core source leave submission notifier.`
980
+ );
981
+ }
982
+ await pending.notifySubmitted();
983
+ pending.resolveSubmitted();
984
+ }
985
+ await callbackResult;
986
+ pending?.resolve();
987
+ } catch (error) {
988
+ pending?.rejectSubmitted(error);
989
+ pending?.reject(error);
990
+ throw error;
991
+ } finally {
992
+ this.coreSourceLeaves.delete(actor.context.actorId);
993
+ }
994
+ }
995
+
996
+ async completeRelocationSourceLeave(
997
+ actor: ZLinkActor,
998
+ sourceSpotId: RoutingId | undefined,
999
+ signal?: AbortSignal
1000
+ ): Promise<void> {
1001
+ await this.prepareSourceActorLeave(actor, sourceSpotId, signal);
1002
+ }
1003
+
1004
+ relayMaintenanceTerminal(
1005
+ actorId: string,
1006
+ packet: ZLinkActorHandoffPacket,
1007
+ result: ZLinkActorHandoffResult,
1008
+ sourceNodeRid: RoutingId,
1009
+ targetAuthorityOwnerGeneration?: bigint
1010
+ ): ZLinkActorHandoffTerminalAck {
1011
+ return this.options.actorHandoff.acceptRelocatedTerminal(
1012
+ actorId,
1013
+ packet,
1014
+ result,
1015
+ sourceNodeRid,
1016
+ targetAuthorityOwnerGeneration
1017
+ );
1018
+ }
1019
+
1020
+ relayCanonicalMaintenanceTerminal(
1021
+ operationId: string,
1022
+ replyRouteId: string,
1023
+ result: ZLinkActorHandoffResult,
1024
+ sourceNodeRid: RoutingId,
1025
+ targetAuthorityOwnerGeneration?: bigint
1026
+ ): ZLinkActorHandoffTerminalAcceptance {
1027
+ return this.options.actorHandoff.acceptRelocatedTerminalRelay(
1028
+ operationId,
1029
+ replyRouteId,
1030
+ undefined,
1031
+ result,
1032
+ sourceNodeRid,
1033
+ targetAuthorityOwnerGeneration
1034
+ );
1035
+ }
1036
+
1037
+ private async sealBoundSessionRoute(
1038
+ actor: ZLinkActor,
1039
+ state: ZLinkActorRuntimeState,
1040
+ signal?: AbortSignal,
1041
+ relocation?: ServiceWireOperationId
1042
+ ): Promise<ZLinkRemoteBoundSessionTarget> {
1043
+ const target = state.remoteBoundSessionTarget;
1044
+ const actorRef = state.nativeActorRef;
1045
+ if (
1046
+ target === undefined || actorRef === undefined ||
1047
+ target.bindingGeneration === undefined || target.bindingGeneration <= 0n ||
1048
+ state.locationGeneration === undefined || state.locationGeneration < 0n ||
1049
+ state.ownerLeaseGeneration === undefined || state.ownerLeaseGeneration <= 0n
1050
+ ) {
1051
+ throw new Error(`Actor '${actor.context.actorId}' Session route cannot be sealed without its exact source fence.`);
1052
+ }
1053
+ const serviceWire = this.options.sessionRelocationWire?.();
1054
+ const authorityStore = this.options.authorityStore();
1055
+ const descriptors = this.options.liveDescriptors;
1056
+ if (
1057
+ relocation === undefined
1058
+ || serviceWire === undefined
1059
+ || authorityStore === undefined
1060
+ || descriptors === undefined
1061
+ || target.sessionRid === undefined
1062
+ ) {
1063
+ throw new Error(
1064
+ `Actor '${actor.context.actorId}' Session relocation requires the command 42/43 service-wire path.`
1065
+ );
1066
+ }
1067
+ const [authority, live] = await Promise.all([
1068
+ authorityStore.readAuthority(
1069
+ encodeAuthorityKey('actor', actor.context.actorId),
1070
+ signal
1071
+ ),
1072
+ descriptors(target.routerChannelId, signal)
1073
+ ]);
1074
+ const local = this.options.primaryMeshNode().status();
1075
+ const sessionOwner = live.find(value =>
1076
+ String(value.rid) === String(target.targetNodeRid)
1077
+ );
1078
+ if (
1079
+ authority.kind !== 'snapshot'
1080
+ || sessionOwner === undefined
1081
+ || String(local.routingId) !== String(actorRef.nodeRid)
1082
+ || authority.objectGeneration !== actorRef.generation
1083
+ || authority.authorityOwnerGeneration !== state.locationGeneration
1084
+ || authority.ownerLeaseGeneration !== state.ownerLeaseGeneration
1085
+ || String(authority.allocation.descriptor.rid) !== String(actorRef.nodeRid)
1086
+ || authority.allocation.descriptorLifecycleGeneration !== local.lifecycleGeneration
1087
+ || (target.sessionNodeRid !== undefined
1088
+ && String(target.sessionNodeRid) !== String(target.targetNodeRid))
1089
+ ) {
1090
+ throw new Error(
1091
+ `Actor '${actor.context.actorId}' Session route service-wire source fence is stale.`
1092
+ );
1093
+ }
1094
+ const coordinator = {
1095
+ ownerId: authority.ownerId,
1096
+ leaseGeneration: authority.ownerLeaseGeneration,
1097
+ nodeRid: String(local.routingId),
1098
+ nodeGeneration: local.lifecycleGeneration,
1099
+ expectedAuthorityStoreVersion: authority.storeVersion.value
1100
+ };
1101
+ const session = {
1102
+ sessionOwnerNodeRid: String(target.targetNodeRid),
1103
+ sessionOwnerNodeGeneration: sessionOwner.lifecycleGeneration,
1104
+ sessionOwnerId: sessionOwner.ownerId,
1105
+ sessionOwnerLeaseGeneration: sessionOwner.leaseGeneration,
1106
+ sessionRid: String(target.sessionRid),
1107
+ bindingGeneration: target.bindingGeneration
1108
+ };
1109
+ const request: ServiceSessionRelocationSeal = {
1110
+ relocation,
1111
+ coordinator,
1112
+ senderRole: 'source',
1113
+ actor: {
1114
+ actor: {
1115
+ actorId: actor.context.actorId,
1116
+ generation: actorRef.generation,
1117
+ nodeRid: String(actorRef.nodeRid)
1118
+ },
1119
+ targetNodeGeneration: local.lifecycleGeneration,
1120
+ authorityOwnerGeneration: authority.authorityOwnerGeneration,
1121
+ ownerLeaseGeneration: authority.ownerLeaseGeneration
1122
+ },
1123
+ session
1124
+ };
1125
+ await serviceWire.requestSessionRelocationSeal(
1126
+ target.routerChannelId,
1127
+ target.targetNodeRid,
1128
+ request,
1129
+ signal
1130
+ );
1131
+ return {
1132
+ ...target,
1133
+ previousAuthorityOwnerGeneration: authority.authorityOwnerGeneration,
1134
+ previousOwnerLeaseGeneration: authority.ownerLeaseGeneration,
1135
+ relocationSealId: serviceSessionRelocationIdentityKey(request),
1136
+ serviceWireRelocation: { relocation, coordinator, session }
1137
+ };
1138
+ }
1139
+
1140
+ private async abortBoundSessionRouteSeal(
1141
+ actor: ZLinkActor,
1142
+ state: ZLinkActorRuntimeState,
1143
+ targetOverride?: ZLinkRemoteBoundSessionTarget
1144
+ ): Promise<void> {
1145
+ const target = targetOverride ?? preferredRemoteBoundSessionTarget(
1146
+ state.remoteBoundSessionTarget,
1147
+ state.boundSessionTransferTarget
1148
+ );
1149
+ const actorRef = state.nativeActorRef;
1150
+ if (target === undefined || actorRef === undefined || target.bindingGeneration === undefined ||
1151
+ target.previousAuthorityOwnerGeneration === undefined || target.previousOwnerLeaseGeneration === undefined) {
1152
+ throw new Error(`Actor '${actor.context.actorId}' Session route seal cannot be released without its exact fence.`);
1153
+ }
1154
+ const serviceFence = target.serviceWireRelocation;
1155
+ const serviceWire = this.options.sessionRelocationWire?.();
1156
+ if (serviceFence === undefined || serviceWire === undefined) {
1157
+ throw new Error(
1158
+ `Actor '${actor.context.actorId}' Session route service-wire release is unavailable.`
1159
+ );
1160
+ }
1161
+ const route: ServiceSessionRelocationRoute = {
1162
+ relocation: serviceFence.relocation,
1163
+ coordinator: serviceFence.coordinator,
1164
+ senderRole: 'source',
1165
+ actor: {
1166
+ actorId: actor.context.actorId,
1167
+ generation: actorRef.generation,
1168
+ nodeRid: String(actorRef.nodeRid)
1169
+ },
1170
+ session: serviceFence.session,
1171
+ route: {
1172
+ action: 'abort',
1173
+ currentAuthorityOwnerGeneration: target.previousAuthorityOwnerGeneration
1174
+ }
1175
+ };
1176
+ if (target.relocationSealId !== serviceSessionRelocationIdentityKey(route)) {
1177
+ throw new Error(
1178
+ `Actor '${actor.context.actorId}' Session route seal release changed its seal identity.`
1179
+ );
1180
+ }
1181
+ await serviceWire.sendSessionRelocationRoute(
1182
+ target.routerChannelId,
1183
+ target.targetNodeRid,
1184
+ route,
1185
+ this.options.shutdownSignal?.()
1186
+ );
1187
+ }
1188
+
1189
+ private async observeBoundSessionSealAbort(
1190
+ actor: ZLinkActor,
1191
+ state: ZLinkActorRuntimeState
1192
+ ): Promise<void> {
1193
+ try {
1194
+ await this.abortBoundSessionRouteSeal(actor, state);
1195
+ } catch (error) {
1196
+ try {
1197
+ this.options.reportPostCommitError?.(error);
1198
+ } catch {
1199
+ // Diagnostics cannot replace the relocation failure terminal.
1200
+ }
1201
+ }
1202
+ }
1203
+
1204
+ private beginCoreSourceLeave(actorId: string): {
1205
+ readonly completion: Promise<void>;
1206
+ readonly submitted: Promise<void>;
1207
+ } {
1208
+ let resolve!: () => void;
1209
+ let reject!: (error: unknown) => void;
1210
+ const promise = new Promise<void>((accept, fail) => {
1211
+ resolve = accept;
1212
+ reject = fail;
1213
+ });
1214
+ let resolveSubmitted!: () => void;
1215
+ let rejectSubmitted!: (error: unknown) => void;
1216
+ const submitted = new Promise<void>((accept, fail) => {
1217
+ resolveSubmitted = accept;
1218
+ rejectSubmitted = fail;
1219
+ });
1220
+ void promise.catch(() => {});
1221
+ void submitted.catch(() => {});
1222
+ this.coreSourceLeaves.set(actorId, {
1223
+ promise,
1224
+ resolve,
1225
+ reject,
1226
+ submitted,
1227
+ resolveSubmitted,
1228
+ rejectSubmitted
1229
+ });
1230
+ return { completion: promise, submitted };
1231
+ }
1232
+
1233
+ private scheduleSourceDeparture(
1234
+ actor: ZLinkActor,
1235
+ sourceSpotId: RoutingId | undefined,
1236
+ releaseLocation: boolean
1237
+ ): void {
1238
+ if (this.sourceDepartureTasks.has(actor.context.actorId)) return;
1239
+ const task = this.finishSourceDeparture(actor, sourceSpotId, releaseLocation)
1240
+ .finally(() => this.sourceDepartureTasks.delete(actor.context.actorId));
1241
+ this.sourceDepartureTasks.set(actor.context.actorId, task);
1242
+ }
1243
+
1244
+ private async finishSourceDeparture(
1245
+ actor: ZLinkActor,
1246
+ sourceSpotId: RoutingId | undefined,
1247
+ releaseLocation: boolean
1248
+ ): Promise<void> {
1249
+ const retry = new ZLinkActorRetryDelay();
1250
+ while (this.options.shutdownSignal?.()?.aborted !== true) {
1251
+ try {
1252
+ if (sourceSpotId !== undefined) {
1253
+ await this.options.spotManager()?.commitActorLeaveAfterTransfer(sourceSpotId, actor.context.actorId);
1254
+ }
1255
+ if (releaseLocation) {
1256
+ const state = this.options.actorManager()?.getState(actor.context.actorId);
1257
+ if (state?.actorType !== undefined && state.ownsLocation) {
1258
+ await this.options.locationLifecycle()?.releaseActor(
1259
+ state.actorType,
1260
+ actor.context.actorId
1261
+ );
1262
+ state.markLocationReleased();
1263
+ }
1264
+ // Message Follow owns the bounded stale route after the native leave.
1265
+ // The source Actor shell must therefore be removed from the process
1266
+ // registry so a later relocation can materialize the same Actor ID on
1267
+ // this node without colliding with its previous incarnation.
1268
+ await this.options.actorManager()?.completeCoreRelocationSource(actor.context.actorId);
1269
+ }
1270
+ this.options.onSourceDepartureCompleted?.(actor.context.actorId);
1271
+ return;
1272
+ } catch (error) {
1273
+ this.options.reportPostCommitError?.(error);
1274
+ if (!await retry.wait(this.options.shutdownSignal?.())) return;
1275
+ }
1276
+ }
1277
+ }
1278
+
1279
+ async getOrCreateRoutedActor(
1280
+ actorId: string,
1281
+ actorType: string,
1282
+ actorRef?: ActorRef,
1283
+ remoteBoundSessionTarget?: ZLinkRemoteBoundSessionTarget,
1284
+ actorCreateRequest?: Message,
1285
+ signal?: AbortSignal
1286
+ ): Promise<{ readonly actor: ZLinkActor; readonly actorRef: ZLinkBackendActorRef }> {
1287
+ const actorManager = this.requireActorManager('Routed actor join requires ZLINK_ACTOR_MANAGER.');
1288
+ const actor = actorRef === undefined
1289
+ ? await actorManager.getOrCreateActor(actorId, actorType, signal)
1290
+ : await actorManager.getOrCreateWithNativeRef(
1291
+ actorId,
1292
+ actorType,
1293
+ actorRef as unknown as ZLinkBackendActorRef,
1294
+ actorCreateRequest === undefined
1295
+ ? undefined
1296
+ : wrapFrameworkPayloadMessage(actorCreateRequest, this.options.messageSerializers),
1297
+ signal
1298
+ );
1299
+ const state = actorManager.getState(actorId);
1300
+ if (state === undefined) {
1301
+ throw new Error(`Actor '${actorId}' state was not created.`);
1302
+ }
1303
+ if (actorRef !== undefined) {
1304
+ state.setNativeActorRef(actorRef as unknown as ZLinkBackendActorRef);
1305
+ state.setRemoteBoundSessionTarget(remoteBoundSessionTarget);
1306
+ return { actor, actorRef: actorRef as unknown as ZLinkBackendActorRef };
1307
+ }
1308
+ return { actor, actorRef: state.ensureNativeActorRef(this.options.primaryMeshNode()) };
1309
+ }
1310
+
1311
+ async materializeRoutedActor(
1312
+ actorId: string,
1313
+ actorType: string,
1314
+ adapterKey: string | undefined,
1315
+ transferState: Message,
1316
+ actorEntryNodeRid: RoutingId | undefined,
1317
+ remoteBoundSessionTarget?: ZLinkRemoteBoundSessionTarget,
1318
+ signal?: AbortSignal
1319
+ ): Promise<{ readonly actor: ZLinkActor; readonly actorRef: ZLinkBackendActorRef }> {
1320
+ const actorManager = this.requireActorManager('Routed actor transfer requires ZLINK_ACTOR_MANAGER.');
1321
+ const materialized = await actorManager.materializeTransferredActor(
1322
+ actorId,
1323
+ actorType,
1324
+ adapterKey,
1325
+ wrapFrameworkPayloadMessage(transferState, this.options.messageSerializers),
1326
+ signal
1327
+ );
1328
+ const state = actorManager.getState(actorId);
1329
+ if (state === undefined) {
1330
+ throw new Error(`Actor '${actorId}' transfer state was not created.`);
1331
+ }
1332
+ if (actorEntryNodeRid !== undefined) state.setEntryNodeRid(actorEntryNodeRid);
1333
+ state.setBoundSessionTransferTarget(remoteBoundSessionTarget);
1334
+ if (remoteBoundSessionTarget !== undefined) {
1335
+ state.setRemoteBoundSessionTarget(
1336
+ mergeRemoteBoundSessionTarget(
1337
+ remoteBoundSessionTarget,
1338
+ state.remoteBoundSessionTarget
1339
+ )
1340
+ );
1341
+ }
1342
+ if (remoteBoundSessionTarget?.bindingGeneration !== undefined) {
1343
+ state.setBoundSessionBindingGeneration(remoteBoundSessionTarget.bindingGeneration);
1344
+ }
1345
+ return {
1346
+ actor: materialized.actor,
1347
+ actorRef: materialized.actorRef as unknown as ZLinkBackendActorRef
1348
+ };
1349
+ }
1350
+
1351
+ async commitRoutedActorAuthority(
1352
+ actor: ZLinkActor,
1353
+ sourceActorRef: ActorRef,
1354
+ transferId: string,
1355
+ spotId: RoutingId,
1356
+ spotGeneration: bigint,
1357
+ membershipEpoch: bigint,
1358
+ deadlineUnixMs: number,
1359
+ signal?: AbortSignal
1360
+ ): Promise<ZLinkAuthoritySnapshot> {
1361
+ const deadlineAtMs = performance.now() + (deadlineUnixMs - Date.now());
1362
+ const store = this.options.authorityStore();
1363
+ const owner = this.options.currentOwner();
1364
+ const state = this.options.actorManager()?.getState(actor.context.actorId);
1365
+ const actorType = state?.actorType;
1366
+ const local = this.options.primaryMeshNode().status();
1367
+ const targetActorRef = state?.nativeActorRef === undefined
1368
+ ? undefined
1369
+ : toFrameworkActorRef(state.nativeActorRef, actor.context.meshName);
1370
+ if (
1371
+ store === undefined
1372
+ || owner === undefined
1373
+ || state === undefined
1374
+ || actorType === undefined
1375
+ || targetActorRef === undefined
1376
+ || local.lifecycleGeneration <= 0n
1377
+ || spotGeneration <= 0n
1378
+ || membershipEpoch <= 0n
1379
+ || !Number.isSafeInteger(deadlineUnixMs)
1380
+ ) {
1381
+ throw new Error(
1382
+ `Actor '${actor.context.actorId}' target authority commit has an incomplete materialization fence.`
1383
+ );
1384
+ }
1385
+ const key = encodeAuthorityKey('actor', actor.context.actorId);
1386
+ const expected = await store.readAuthority(key, signal);
1387
+ if (expected.kind !== 'snapshot') {
1388
+ throw new Error(`Actor '${actor.context.actorId}' source authority is missing at the target.`);
1389
+ }
1390
+ const exactTarget = (value: ZLinkAuthoritySnapshot): boolean =>
1391
+ value.allocation.state === 'active'
1392
+ && value.allocation.objectKind === 'actor'
1393
+ && value.allocation.stableType === actorType
1394
+ && value.objectGeneration === targetActorRef.objectGeneration
1395
+ && value.ownerId === owner.ownerId
1396
+ && value.ownerLeaseGeneration === owner.leaseGeneration
1397
+ && value.allocation.descriptor.meshName === actor.context.meshName
1398
+ && routingIdsEqual(value.allocation.descriptor.rid, local.routingId)
1399
+ && value.allocation.descriptorLifecycleGeneration === local.lifecycleGeneration;
1400
+ const adopt = (value: ZLinkAuthoritySnapshot): ZLinkAuthoritySnapshot => {
1401
+ state.setLocationGeneration(value.authorityOwnerGeneration);
1402
+ state.setOwnerLeaseGeneration(value.ownerLeaseGeneration);
1403
+ state.setJoinedSpot(spotId, state.spot, membershipEpoch, spotGeneration);
1404
+ state.markLocationOwned();
1405
+ return value;
1406
+ };
1407
+ if (exactTarget(expected)) return adopt(expected);
1408
+ if (
1409
+ expected.allocation.state !== 'active'
1410
+ || expected.allocation.objectKind !== 'actor'
1411
+ || expected.allocation.stableType !== actorType
1412
+ || expected.objectGeneration !== sourceActorRef.objectGeneration
1413
+ || expected.allocation.descriptor.meshName !== sourceActorRef.meshName
1414
+ || !routingIdsEqual(expected.allocation.descriptor.rid, sourceActorRef.nodeRid)
1415
+ ) {
1416
+ throw new Error(
1417
+ `Actor '${actor.context.actorId}' relocation source authority is stale at the target.`
1418
+ );
1419
+ }
1420
+ const membershipMutation = Buffer.from(JSON.stringify({
1421
+ actorId: actor.context.actorId,
1422
+ actorGeneration: targetActorRef.objectGeneration.toString(),
1423
+ spotId: String(spotId),
1424
+ spotGeneration: spotGeneration.toString(),
1425
+ membershipEpoch: membershipEpoch.toString()
1426
+ }), 'utf8');
1427
+ const request = {
1428
+ aggregateId: { value: transferId } as ZLinkAggregateId,
1429
+ aggregateGeneration: local.lifecycleGeneration,
1430
+ participants: [{
1431
+ authorityKey: key,
1432
+ expectedStoreVersion: expected.storeVersion,
1433
+ ownerTransition: 'newOwner' as const,
1434
+ authorityPayload: rewriteActorAuthorityRoute(
1435
+ expected.payload,
1436
+ targetActorRef,
1437
+ String(spotId),
1438
+ spotGeneration,
1439
+ ZLinkSpotKind.User,
1440
+ local.lifecycleGeneration,
1441
+ owner
1442
+ ),
1443
+ membershipMutation
1444
+ }],
1445
+ inventoryDigest: createHash('sha256').update(membershipMutation).digest(),
1446
+ targetDescriptor: {
1447
+ meshName: actor.context.meshName,
1448
+ rid: local.routingId
1449
+ },
1450
+ targetDescriptorLifecycleGeneration: local.lifecycleGeneration,
1451
+ capacity: expected.allocation.capacity,
1452
+ targetOwner: owner
1453
+ };
1454
+ let prepared: Awaited<ReturnType<typeof store.prepareAggregate>> | undefined;
1455
+ let firstError: unknown;
1456
+ for (;;) {
1457
+ signal?.throwIfAborted();
1458
+ try {
1459
+ prepared = await store.prepareAggregate(request, signal);
1460
+ } catch (error) {
1461
+ firstError ??= error;
1462
+ }
1463
+ if (prepared?.kind === 'prepared' || prepared?.kind === 'alreadyPrepared') break;
1464
+ const observed = await this.readActorAuthorityForRelocation(store, key, signal);
1465
+ if (observed !== undefined && exactTarget(observed)) return adopt(observed);
1466
+ if (prepared !== undefined || observed !== undefined && !sameSourceActorAuthority(observed, expected)) {
1467
+ throw new Error(
1468
+ `Actor '${actor.context.actorId}' target authority prepare was rejected.`,
1469
+ { cause: firstError }
1470
+ );
1471
+ }
1472
+ await waitForActorAuthorityRetry(deadlineAtMs, signal, firstError);
1473
+ }
1474
+ for (;;) {
1475
+ signal?.throwIfAborted();
1476
+ let committed: Awaited<ReturnType<typeof store.commitAggregate>> | undefined;
1477
+ try {
1478
+ committed = await store.commitAggregate(prepared.fence, signal);
1479
+ } catch (error) {
1480
+ firstError ??= error;
1481
+ }
1482
+ const observed = await this.readActorAuthorityForRelocation(store, key, signal);
1483
+ if (observed !== undefined && exactTarget(observed)) return adopt(observed);
1484
+ if (
1485
+ committed?.kind === 'stale'
1486
+ || committed?.kind === 'generationExhausted'
1487
+ || observed !== undefined && !sameSourceActorAuthority(observed, expected)
1488
+ ) {
1489
+ throw new Error(
1490
+ `Actor '${actor.context.actorId}' target authority commit did not converge.`,
1491
+ { cause: firstError }
1492
+ );
1493
+ }
1494
+ await waitForActorAuthorityRetry(deadlineAtMs, signal, firstError);
1495
+ }
1496
+ }
1497
+
1498
+ private async readActorAuthorityForRelocation(
1499
+ store: ZLinkAuthorityStore,
1500
+ key: ReturnType<typeof encodeAuthorityKey>,
1501
+ signal?: AbortSignal
1502
+ ): Promise<ZLinkAuthoritySnapshot | undefined> {
1503
+ try {
1504
+ const current = await store.readAuthority(key, signal);
1505
+ return current.kind === 'snapshot' ? current : undefined;
1506
+ } catch {
1507
+ return undefined;
1508
+ }
1509
+ }
1510
+
1511
+ rememberRoutedActorTransferTarget(
1512
+ actorId: string,
1513
+ target: ZLinkRemoteBoundSessionTarget | undefined
1514
+ ): void {
1515
+ if (target === undefined) return;
1516
+ const state = this.options.actorManager()?.getState(actorId);
1517
+ if (state === undefined) {
1518
+ return;
1519
+ }
1520
+ state.setBoundSessionTransferTarget(target);
1521
+ state.setRemoteBoundSessionTarget(
1522
+ mergeRemoteBoundSessionTarget(target, state.remoteBoundSessionTarget)
1523
+ );
1524
+ if (target.bindingGeneration !== undefined) {
1525
+ state.setBoundSessionBindingGeneration(target.bindingGeneration);
1526
+ }
1527
+ }
1528
+
1529
+ commitRoutedActor(actor: ZLinkActor, spotId: RoutingId, spot: ZLinkSpot): void {
1530
+ const state = this.options.actorManager()?.getState(actor.context.actorId);
1531
+ state?.setJoinedSpot(spotId, spot);
1532
+ const actorRef = state?.nativeActorRef;
1533
+ const binding = state?.boundSessionTransferTarget;
1534
+ if (
1535
+ actorRef !== undefined
1536
+ && binding?.sessionNodeRid !== undefined
1537
+ && binding.sessionRid !== undefined
1538
+ && binding.bindingGeneration !== undefined
1539
+ ) {
1540
+ this.options.primaryMeshNode().restoreActorSessionBinding?.(
1541
+ actorRef,
1542
+ binding.sessionNodeRid,
1543
+ binding.sessionRid,
1544
+ binding.bindingGeneration
1545
+ );
1546
+ }
1547
+ }
1548
+
1549
+ bindRoutedActorRef(actor: ZLinkActor, actorRef: ActorRef): void {
1550
+ const node = this.options.primaryMeshNode();
1551
+ const localActorRef = node.actorLookup(actor.context.actorId).actor;
1552
+ const targetActorRef = {
1553
+ actorId: actorRef.actorId,
1554
+ nodeRid: node.status().routingId,
1555
+ generation: localActorRef.generation > 0n
1556
+ ? localActorRef.generation
1557
+ : actorRef.objectGeneration
1558
+ };
1559
+ this.options.actorManager()?.getState(actor.context.actorId)?.setNativeActorRef(targetActorRef);
1560
+ }
1561
+
1562
+ async claimRoutedActorLocation(
1563
+ actor: ZLinkActor,
1564
+ spotId: RoutingId,
1565
+ spotMeshName: string,
1566
+ joinedLocation?: {
1567
+ readonly spotGeneration: bigint;
1568
+ readonly membershipEpoch: bigint;
1569
+ }
1570
+ ): Promise<void> {
1571
+ const state = this.options.actorManager()?.getState(actor.context.actorId);
1572
+ const actorType = state?.actorType;
1573
+ const lifecycle = this.options.locationLifecycle();
1574
+ if (state === undefined || actorType === undefined || lifecycle === undefined) {
1575
+ return;
1576
+ }
1577
+ const node = this.options.primaryMeshNode();
1578
+ const location = node.actorLookup(actor.context.actorId);
1579
+ const spotGeneration = joinedLocation?.spotGeneration ?? location.spotGeneration;
1580
+ const membershipEpoch = joinedLocation?.membershipEpoch ?? location.membershipEpoch;
1581
+ if (spotGeneration <= 0n || membershipEpoch <= 0n) {
1582
+ throw new Error(`Actor '${actor.context.actorId}' committed target location has invalid lifecycle generations.`);
1583
+ }
1584
+ // RoutingId is an opaque byte value, so the committed target is compared by
1585
+ // value. Reference equality would reject a matching SPOT read back from the
1586
+ // Core lookup.
1587
+ if (
1588
+ joinedLocation === undefined
1589
+ && (
1590
+ location.spotId === null
1591
+ || location.spotId === undefined
1592
+ || encodeRoutingIdStorageHex(location.spotId as RoutingId)
1593
+ !== encodeRoutingIdStorageHex(spotId)
1594
+ )
1595
+ ) {
1596
+ throw new Error(`Actor '${actor.context.actorId}' Core location does not match the committed target SPOT.`);
1597
+ }
1598
+ const deadline = performance.now() + 5_000;
1599
+ const ownerNodeGeneration = node.status().lifecycleGeneration;
1600
+ if (ownerNodeGeneration <= 0n) {
1601
+ throw new Error(`Actor '${actor.context.actorId}' owner MeshNode has no valid lifecycle generation.`);
1602
+ }
1603
+ const authority = await this.options.authorityStore()?.readAuthority(
1604
+ encodeAuthorityKey('actor', actor.context.actorId)
1605
+ );
1606
+ if (
1607
+ authority?.kind === 'snapshot'
1608
+ && authority.allocation.state === 'active'
1609
+ && String(authority.allocation.descriptor.rid) === String(node.status().routingId)
1610
+ && authority.allocation.descriptorLifecycleGeneration === ownerNodeGeneration
1611
+ ) {
1612
+ state.setLocationGeneration(authority.authorityOwnerGeneration);
1613
+ state.setOwnerLeaseGeneration(authority.ownerLeaseGeneration);
1614
+ state.setJoinedSpot(spotId, state.spot, membershipEpoch, spotGeneration);
1615
+ await this.installNativeActorPacketTarget(state, spotId, spotGeneration, node);
1616
+ return;
1617
+ }
1618
+ let claim;
1619
+ for (;;) {
1620
+ claim = await lifecycle.takeoverActorJoinedSpot(
1621
+ actorType,
1622
+ actor.context.actorId,
1623
+ toFrameworkActorRef(
1624
+ state.nativeActorRef ?? location.actor as never,
1625
+ spotMeshName
1626
+ ),
1627
+ spotMeshName,
1628
+ spotId,
1629
+ spotGeneration,
1630
+ membershipEpoch,
1631
+ ownerNodeGeneration,
1632
+ async () => state.clearAfterDestroy()
1633
+ );
1634
+ if (claim.status !== 'conflict' || performance.now() >= deadline) {
1635
+ break;
1636
+ }
1637
+ await new Promise<void>((resolve) => setTimeout(resolve, 10));
1638
+ }
1639
+ if (claim.status === 'conflict') {
1640
+ throw new Error(`Actor '${actor.context.actorId}' target location takeover was rejected.`);
1641
+ }
1642
+ if (claim.generation !== undefined) {
1643
+ state.setLocationGeneration(claim.generation);
1644
+ }
1645
+ if (claim.claimed !== undefined) {
1646
+ state.setOwnerLeaseGeneration(claim.claimed.leaseGeneration);
1647
+ }
1648
+ state.setJoinedSpot(spotId, state.spot, membershipEpoch, spotGeneration);
1649
+ state.markLocationOwned();
1650
+ await this.installNativeActorPacketTarget(state, spotId, spotGeneration, node);
1651
+ }
1652
+
1653
+ private async installNativeActorPacketTarget(
1654
+ state: ZLinkActorRuntimeState,
1655
+ spotId: RoutingId,
1656
+ spotGeneration: bigint,
1657
+ node: ZLinkBackendMeshNode
1658
+ ): Promise<void> {
1659
+ const target = await this.options.spotRouteResolver?.()?.resolve(spotId);
1660
+ if (target === undefined || target.spotKind === 'entry') return;
1661
+ if (
1662
+ !routingIdsEqual(target.spotId, spotId)
1663
+ || !routingIdsEqual(target.targetNodeRid, node.status().routingId)
1664
+ || target.targetSpotGeneration !== spotGeneration
1665
+ ) {
1666
+ throw new Error('Committed native Actor target does not match its Ready Spot route.');
1667
+ }
1668
+ state.setRemoteActorPacketTarget(target);
1669
+ }
1670
+
1671
+ async claimNativeActorLocation(
1672
+ actor: ZLinkActor,
1673
+ spotId: RoutingId,
1674
+ spotMeshName: string
1675
+ ): Promise<ZLinkNativeActorJoinSnapshot> {
1676
+ const state = this.options.actorManager()?.getState(actor.context.actorId);
1677
+ const previousLocation = this.options.locationLifecycle()?.actorLocationSnapshot(actor.context.actorId);
1678
+ const snapshot = {
1679
+ spotId: state?.spotId,
1680
+ spot: state?.spot,
1681
+ locationSpotId: previousLocation?.spotId,
1682
+ spotMeshName: previousLocation?.meshName,
1683
+ actorRef: previousLocation?.actorRef,
1684
+ spotGeneration: previousLocation?.spotGeneration,
1685
+ membershipEpoch: previousLocation?.membershipEpoch,
1686
+ ownerNodeGeneration: previousLocation?.ownerNodeGeneration
1687
+ };
1688
+ await this.claimRoutedActorLocation(actor, spotId, spotMeshName);
1689
+ return snapshot;
1690
+ }
1691
+
1692
+ async publishRoutedActorOwnership(actor: ZLinkActor): Promise<void> {
1693
+ const state = this.options.actorManager()?.getState(actor.context.actorId);
1694
+ const actorRef = state?.nativeActorRef;
1695
+ const generation = state?.locationGeneration;
1696
+ if (state === undefined || actorRef === undefined || generation === undefined) return;
1697
+ const boundSessionTarget = preferredRemoteBoundSessionTarget(
1698
+ state.remoteBoundSessionTarget,
1699
+ state.boundSessionTransferTarget
1700
+ );
1701
+ if (boundSessionTarget?.serviceWireRelocation === undefined) return;
1702
+ await this.publishBoundSessionOwnership(
1703
+ actor.context.actorId,
1704
+ actorRef,
1705
+ generation,
1706
+ boundSessionTarget,
1707
+ state.ownerLeaseGeneration
1708
+ );
1709
+ }
1710
+
1711
+ async openRoutedActorSession(_actor: ZLinkActor): Promise<void> {}
1712
+
1713
+ clearRoutedActor(actor: ZLinkActor): void {
1714
+ this.options.actorManager()?.getState(actor.context.actorId)?.clearJoinedSpot();
1715
+ this.options.clearRemoteActorPacketTarget(actor.context.actorId);
1716
+ }
1717
+
1718
+ async rollbackNativeActorJoin(
1719
+ actor: ZLinkActor,
1720
+ snapshot: ZLinkNativeActorJoinSnapshot
1721
+ ): Promise<void> {
1722
+ const state = this.options.actorManager()?.getState(actor.context.actorId);
1723
+ const actorType = state?.actorType;
1724
+ const lifecycle = this.options.locationLifecycle();
1725
+ if (snapshot.spotId === undefined) state?.clearJoinedSpot();
1726
+ else state?.setJoinedSpot(snapshot.spotId, snapshot.spot);
1727
+ if (state?.ownsLocation !== true || actorType === undefined || lifecycle === undefined) return;
1728
+ if (snapshot.spotId === undefined) {
1729
+ if (
1730
+ snapshot.locationSpotId === undefined
1731
+ || snapshot.spotGeneration === undefined
1732
+ || snapshot.membershipEpoch === undefined
1733
+ || snapshot.ownerNodeGeneration === undefined
1734
+ ) {
1735
+ throw new Error(`Actor '${actor.context.actorId}' cannot restore its Entry SPOT location without its exact generation fields.`);
1736
+ }
1737
+ await lifecycle.notifyActorLeftSpot(
1738
+ actorType,
1739
+ actor.context.actorId,
1740
+ snapshot.locationSpotId,
1741
+ snapshot.spotGeneration,
1742
+ snapshot.membershipEpoch,
1743
+ snapshot.ownerNodeGeneration
1744
+ );
1745
+ return;
1746
+ }
1747
+ if (snapshot.actorRef === undefined) {
1748
+ throw new Error(`Actor '${actor.context.actorId}' cannot restore its previous SPOT location without a native ref.`);
1749
+ }
1750
+ if (
1751
+ snapshot.spotMeshName === undefined
1752
+ || snapshot.spotGeneration === undefined
1753
+ || snapshot.membershipEpoch === undefined
1754
+ || snapshot.ownerNodeGeneration === undefined
1755
+ ) {
1756
+ throw new Error(`Actor '${actor.context.actorId}' cannot restore its previous SPOT location without its exact generation fields.`);
1757
+ }
1758
+ const restored = await lifecycle.takeoverActorJoinedSpot(
1759
+ actorType,
1760
+ actor.context.actorId,
1761
+ snapshot.actorRef,
1762
+ snapshot.spotMeshName,
1763
+ snapshot.spotId,
1764
+ snapshot.spotGeneration,
1765
+ snapshot.membershipEpoch,
1766
+ snapshot.ownerNodeGeneration,
1767
+ async () => state.clearAfterDestroy()
1768
+ );
1769
+ if (restored.status === 'conflict') {
1770
+ throw new Error(`Actor '${actor.context.actorId}' previous SPOT location could not be restored.`);
1771
+ }
1772
+ if (restored.generation !== undefined) state.setLocationGeneration(restored.generation);
1773
+ if (restored.claimed !== undefined) state.setOwnerLeaseGeneration(restored.claimed.leaseGeneration);
1774
+ }
1775
+
1776
+ async rollbackRoutedActor(actor: ZLinkActor, signal?: AbortSignal): Promise<void> {
1777
+ const manager = this.options.actorManager();
1778
+ const state = manager?.getState(actor.context.actorId);
1779
+ const actorType = state?.actorType;
1780
+ const lifecycle = this.options.locationLifecycle();
1781
+ let locationError: unknown;
1782
+ if (state?.ownsLocation === true && actorType !== undefined && lifecycle !== undefined) {
1783
+ try {
1784
+ await lifecycle.releaseActor(actorType, actor.context.actorId);
1785
+ state.markLocationReleased();
1786
+ } catch (error) {
1787
+ locationError = error;
1788
+ void lifecycle.releaseActorEventually(actorType, actor.context.actorId);
1789
+ }
1790
+ }
1791
+ try {
1792
+ await manager?.rollbackTransferredActor(actor, signal);
1793
+ } catch (rollbackError) {
1794
+ if (locationError !== undefined) {
1795
+ throw new AggregateError(
1796
+ [locationError, rollbackError],
1797
+ `Actor '${actor.context.actorId}' target transfer rollback failed.`
1798
+ );
1799
+ }
1800
+ throw rollbackError;
1801
+ }
1802
+ if (locationError !== undefined) throw locationError;
1803
+ }
1804
+
1805
+ actorEntryNodeRid(actor: ZLinkActor): RoutingId | undefined {
1806
+ return this.options.actorManager()?.getState(actor.context.actorId)?.entryNodeRid;
1807
+ }
1808
+
1809
+ private requireActorManager(message: string): ZLinkActorTransferRuntimeActorManager {
1810
+ const actorManager = this.options.actorManager();
1811
+ if (actorManager === undefined) {
1812
+ throw new Error(message);
1813
+ }
1814
+ return actorManager;
1815
+ }
1816
+
1817
+ private async publishBoundSessionOwnership(
1818
+ actorId: string,
1819
+ actorRef: ZLinkBackendActorRef,
1820
+ ownershipGeneration: bigint,
1821
+ target: ZLinkRemoteBoundSessionTarget | undefined,
1822
+ targetOwnerLeaseGeneration: bigint | undefined
1823
+ ): Promise<void> {
1824
+ if (target === undefined) {
1825
+ return;
1826
+ }
1827
+ const serviceFence = target.serviceWireRelocation;
1828
+ const serviceWire = serviceFence === undefined
1829
+ ? undefined
1830
+ : this.options.sessionRelocationWire?.();
1831
+ if (serviceFence === undefined) {
1832
+ throw new Error(`Actor '${actorId}' command 44 has no service-wire relocation fence.`);
1833
+ }
1834
+ {
1835
+ if (
1836
+ target.bindingGeneration === undefined
1837
+ || target.previousAuthorityOwnerGeneration === undefined
1838
+ || target.bindingGeneration <= 0n
1839
+ || target.previousAuthorityOwnerGeneration < 0n
1840
+ || ownershipGeneration <= target.previousAuthorityOwnerGeneration
1841
+ ) {
1842
+ throw new Error(`Actor '${actorId}' command 44 Session route fence is incomplete.`);
1843
+ }
1844
+ if (serviceWire === undefined) {
1845
+ throw new Error(`Actor '${actorId}' command 44 service-wire bridge is unavailable.`);
1846
+ }
1847
+ const authority = await this.options.authorityStore()?.readAuthority(
1848
+ encodeAuthorityKey('actor', actorId),
1849
+ this.options.shutdownSignal?.()
1850
+ );
1851
+ if (
1852
+ authority?.kind !== 'snapshot'
1853
+ || authority.objectGeneration !== actorRef.generation
1854
+ || authority.authorityOwnerGeneration !== ownershipGeneration
1855
+ || authority.ownerLeaseGeneration !== targetOwnerLeaseGeneration
1856
+ || String(authority.allocation.descriptor.rid) !== String(actorRef.nodeRid)
1857
+ ) {
1858
+ throw new Error(`Actor '${actorId}' command 44 target authority fence is stale.`);
1859
+ }
1860
+ await serviceWire.sendSessionRelocationRoute(
1861
+ target.routerChannelId,
1862
+ target.targetNodeRid,
1863
+ {
1864
+ relocation: serviceFence.relocation,
1865
+ coordinator: serviceFence.coordinator,
1866
+ senderRole: 'target',
1867
+ actor: {
1868
+ actorId,
1869
+ generation: actorRef.generation,
1870
+ nodeRid: String(actorRef.nodeRid)
1871
+ },
1872
+ session: serviceFence.session,
1873
+ route: {
1874
+ action: 'commit',
1875
+ previousAuthorityOwnerGeneration: target.previousAuthorityOwnerGeneration,
1876
+ targetAuthorityOwnerGeneration: ownershipGeneration,
1877
+ targetNodeRid: String(actorRef.nodeRid),
1878
+ targetNodeGeneration: authority.allocation.descriptorLifecycleGeneration
1879
+ }
1880
+ },
1881
+ this.options.shutdownSignal?.()
1882
+ );
1883
+ return;
1884
+ }
1885
+ }
1886
+ }
1887
+
1888
+ function relocationDebug(marker: string, detail: Record<string, unknown>): void {
1889
+ if (process.env.ZLINK_DEBUG_FRAMEWORK_RELOCATION !== '1') return;
1890
+ console.error('[zlink.runtime.relocation]', marker, detail);
1891
+ }
1892
+
1893
+ function deferredJoinTerminalKey(root: ZLinkDeferredJoinAcceptedRoot): string {
1894
+ return `${root.actor.actorId}:${root.actor.objectGeneration.toString()}:` +
1895
+ operationIdentityKey(root.operationId);
1896
+ }
1897
+
1898
+ function waitForOperation<T>(operation: Promise<T>, signal?: AbortSignal): Promise<T> {
1899
+ if (signal === undefined) return operation;
1900
+ if (signal.aborted) return Promise.reject(signal.reason);
1901
+ return new Promise<T>((resolve, reject) => {
1902
+ const abort = () => reject(signal.reason);
1903
+ signal.addEventListener('abort', abort, { once: true });
1904
+ operation.then(
1905
+ value => {
1906
+ signal.removeEventListener('abort', abort);
1907
+ resolve(value);
1908
+ },
1909
+ error => {
1910
+ signal.removeEventListener('abort', abort);
1911
+ reject(error);
1912
+ }
1913
+ );
1914
+ });
1915
+ }
1916
+
1917
+ function sameSourceActorAuthority(
1918
+ current: ZLinkAuthoritySnapshot,
1919
+ expected: ZLinkAuthoritySnapshot
1920
+ ): boolean {
1921
+ return current.storeVersion.value === expected.storeVersion.value
1922
+ && current.objectGeneration === expected.objectGeneration
1923
+ && current.authorityOwnerGeneration === expected.authorityOwnerGeneration
1924
+ && current.ownerId === expected.ownerId
1925
+ && current.ownerLeaseGeneration === expected.ownerLeaseGeneration
1926
+ && current.allocation.state === expected.allocation.state
1927
+ && current.allocation.objectKind === expected.allocation.objectKind
1928
+ && current.allocation.stableType === expected.allocation.stableType
1929
+ && current.allocation.descriptor.meshName === expected.allocation.descriptor.meshName
1930
+ && routingIdsEqual(
1931
+ current.allocation.descriptor.rid,
1932
+ expected.allocation.descriptor.rid
1933
+ )
1934
+ && current.allocation.descriptorLifecycleGeneration
1935
+ === expected.allocation.descriptorLifecycleGeneration;
1936
+ }
1937
+
1938
+ async function waitForActorAuthorityRetry(
1939
+ deadlineAtMs: number,
1940
+ signal: AbortSignal | undefined,
1941
+ cause: unknown
1942
+ ): Promise<void> {
1943
+ signal?.throwIfAborted();
1944
+ const remaining = deadlineAtMs - performance.now();
1945
+ if (remaining <= 0) {
1946
+ throw new Error('Actor target authority deadline expired.', { cause });
1947
+ }
1948
+ await new Promise<void>((resolve, reject) => {
1949
+ const timer = setTimeout(resolve, Math.min(10, remaining));
1950
+ timer.unref();
1951
+ const abort = () => {
1952
+ clearTimeout(timer);
1953
+ reject(signal?.reason);
1954
+ };
1955
+ signal?.addEventListener('abort', abort, { once: true });
1956
+ timer.refresh();
1957
+ });
1958
+ }