@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,1573 @@
1
+ import { ZLinkFrameworkInternalErrorKind, createInternalFrameworkException } from '../framework-errors-internal';
2
+ import { randomUUID } from 'node:crypto';
3
+ import type { ZLinkLocationOptionOverrides } from '../../contracts/Locations/Options';
4
+ import type {
5
+ ActorRef,
6
+ RoutingId,
7
+ ZLinkActor,
8
+ ZLinkChannelClient,
9
+ ZLinkFanoutClient,
10
+ ZLinkMessage,
11
+ ZLinkMeshNodeDescriptor,
12
+ ZLinkMessageSerializer,
13
+ ZLinkSpotPublisherClient
14
+ } from '../../contracts';
15
+ import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
16
+ import type { ZLinkRuntimeEventPublisher } from '../diagnostics';
17
+ import {
18
+ ZLinkLocationWriteIntent,
19
+ ZLinkLocationWriteStatus
20
+ } from '../../contracts/Locations';
21
+ import {
22
+ ZLinkFrameworkRuntimeState,
23
+ ZLinkFrameworkException,
24
+ ZLinkObjectRole
25
+ } from '../../contracts';
26
+ import {
27
+ ZLinkSubmitStatus,
28
+ type ZLinkSubmitResult
29
+ } from '../messaging/submission-result';
30
+ import {
31
+ ZLinkRuntimeDispatchErrorAction as ZLinkDispatchErrorAction,
32
+ ZLinkRuntimeDispatchErrorReason as ZLinkDispatchErrorReason,
33
+ ZLinkDispatchErrorSurface,
34
+ ZLinkDispatchMessageKind
35
+ } from '../../contracts/Dispatch/ZLinkDispatchOptions';
36
+ import {
37
+ SubmitResult,
38
+ isZLinkBackendResultError
39
+ } from '../backend/runtime-values';
40
+ import {
41
+ ReceiveKind,
42
+ type ReadyRecord,
43
+ type ReceiveRecord
44
+ } from '../foundation/service-runtime-contracts';
45
+ import type { Message } from '../../contracts/Common/Message';
46
+ import type { ZLinkMessageFollowOrigin } from '../foundation/service-runtime-contracts';
47
+ import {
48
+ ZLinkConfigurationException,
49
+ type ZLinkFrameworkRegistration,
50
+ type ZLinkSpotNodeOptions
51
+ } from '../configuration';
52
+ import type {
53
+ ZLinkBackendAdapterFactory,
54
+ ZLinkBackendContext,
55
+ ZLinkBackendMeshNode,
56
+ ZLinkBackendSpotNode
57
+ } from '../backend/contracts';
58
+ import type { ZLinkLocationOwnerToken } from '../../contracts/Locations/Writes';
59
+ import { ZLinkMeshDispatchPump } from '../backend/mesh-dispatch-pump';
60
+ import { requireZLinkInfrastructureExecutionArea } from '../execution';
61
+ import { runWithOutboundFlow } from '../diagnostics/flow-context';
62
+ import { ZLinkMeshCompletionTable } from '../backend/mesh-completion-table';
63
+ import type { ZLinkDispatchErrorReporter } from '../channels';
64
+ import {
65
+ decodeChannelEnvelope,
66
+ decodeChannelPayload,
67
+ encodeChannelErrorReplyParts,
68
+ encodeChannelPublishEnvelopeParts,
69
+ encodeChannelReplyParts
70
+ } from '../channels/channel-envelope';
71
+ import {
72
+ ZLinkAutoConnectLoop,
73
+ ZLinkAutoConnectReconciler,
74
+ ZLinkLocationRuntime,
75
+ type ZLinkLocationEventSink,
76
+ type ZLinkLocationRuntimeStores
77
+ } from '../locations';
78
+ import type { ZLinkRemoteBoundSessionTarget } from '../actors';
79
+ import type { ZLinkActorHandoffPacket } from '../actors/actor-handoff';
80
+ import type { ZLinkDetachedTaskRunner } from './spot-actor-join-dispatch';
81
+ import { ZLinkEntrySpotActivation } from './spot-entry-activation';
82
+ import {
83
+ createSpotNodeLocationAutoConnectContext,
84
+ spotNodeAutoConnectCapability,
85
+ type ZLinkSpotNodeLocationAutoConnectContext
86
+ } from './spot-node-autoconnect';
87
+ import type { ZLinkSpotRoutedTransport } from './spot-outbound';
88
+ import type { ZLinkSpotRouteResolver } from './spot-routing-internal';
89
+ import { routingIdsEqual, toBackendRoutingId } from '../routing-id';
90
+ import type {
91
+ ZLinkEntryActorRuntime,
92
+ ZLinkSpotActorTransferRuntime,
93
+ ZLinkSpotActorHandoffRuntime,
94
+ ZLinkSpotBoundSessionRuntime
95
+ } from './spot-runtime-ports';
96
+ import { createAbortError } from '../abort';
97
+ import type { ServiceMessageFollowRecord } from '../foundation/service-stateful-wire-codec';
98
+ import {
99
+ ApplicationJobQueue,
100
+ resolveApplicationJobQueueConfiguration
101
+ } from '../host/application-job-queue';
102
+
103
+ const ZLINK_SEND_DONT_WAIT = 1;
104
+
105
+ // Shared default for the dominant no-metadata call; avoids a Map allocation
106
+ // per outbound operation.
107
+ const EMPTY_SPOT_METADATA: ReadonlyMap<string, string> = new Map();
108
+
109
+ export interface ZLinkSpotNodeRuntimeManagerOptions {
110
+ readonly registration: ZLinkFrameworkRegistration;
111
+ readonly primaryMeshName?: string;
112
+ readonly backendAdapterFactory: ZLinkBackendAdapterFactory;
113
+ readonly context: ZLinkBackendContext;
114
+ readonly channelClient?: ZLinkChannelClient;
115
+ readonly fanoutClient?: ZLinkFanoutClient;
116
+ readonly spotPublisherClient?: ZLinkSpotPublisherClient;
117
+ readonly spotRouteResolver?: ZLinkSpotRouteResolver;
118
+ readonly routedTransport?: ZLinkSpotRoutedTransport;
119
+ readonly spotRouterChannelIdForMesh?: (meshName: string) => string;
120
+ readonly providerResolver?: ZLinkProviderResolver;
121
+ readonly dispatchErrors?: ZLinkDispatchErrorReporter;
122
+ readonly runtimeEventPublisher?: ZLinkRuntimeEventPublisher;
123
+ readonly metrics?: import('../diagnostics').ZLinkRuntimeMetrics;
124
+ readonly messageSerializers?: ReadonlyMap<string, ZLinkMessageSerializer>;
125
+ readonly entryActorRuntime?: ZLinkEntryActorRuntime;
126
+ readonly actorTransferRuntime?: ZLinkSpotActorTransferRuntime;
127
+ readonly boundSessionRuntime?: ZLinkSpotBoundSessionRuntime;
128
+ readonly actorHandoffRuntime?: ZLinkSpotActorHandoffRuntime;
129
+ readonly detachedTaskRunner?: ZLinkDetachedTaskRunner;
130
+ readonly applicationJobQueue?: ApplicationJobQueue;
131
+ readonly applicationJobReceiveFlowFailureSink?: (error: unknown) => void;
132
+ readonly peerAdmissionSealed?: (meshName: string) => boolean;
133
+ readonly meshRecordDispatcher?: (
134
+ meshName: string,
135
+ owner: ReadyRecord,
136
+ record: ReceiveRecord
137
+ ) => void | Promise<void>;
138
+ readonly messageFollowReceiver?: (record: ServiceMessageFollowRecord) => void;
139
+ readonly instanceActivationConcurrencyProvider?: (meshName: string) => {
140
+ readonly active: number;
141
+ readonly limit: number;
142
+ };
143
+ }
144
+
145
+ interface ZLinkPublishSlotWaiter {
146
+ readonly resolve: (acquired: boolean) => void;
147
+ readonly reject: (error: unknown) => void;
148
+ readonly signal?: AbortSignal;
149
+ abortHandler?: () => void;
150
+ timeout?: ReturnType<typeof setTimeout>;
151
+ deadlineMs?: number;
152
+ settled: boolean;
153
+ }
154
+
155
+ interface ZLinkPublishSlotQueue {
156
+ readonly waiters: Array<ZLinkPublishSlotWaiter | undefined>;
157
+ head: number;
158
+ count: number;
159
+ }
160
+
161
+ export class ZLinkSpotNodeRuntimeManager {
162
+ private readonly meshNodes = new Map<string, ZLinkBackendMeshNode>();
163
+ private readonly meshPumps = new Map<string, ZLinkMeshDispatchPump>();
164
+ private readonly meshCompletions = new Map<string, ZLinkMeshCompletionTable>();
165
+ private readonly entryActivations = new Map<string, ZLinkEntrySpotActivation>();
166
+ private readonly entryActivationStarts = new Map<string, Promise<void>>();
167
+ private readonly publishers = new Map<
168
+ string,
169
+ ReturnType<ZLinkBackendMeshNode['createPublisher']>
170
+ >();
171
+ private readonly activePublishes = new Set<string>();
172
+ private readonly publishSlotWaiters = new Map<string, ZLinkPublishSlotQueue>();
173
+ private disposed = false;
174
+ private readonly autoConnectLoops: ZLinkAutoConnectLoop[] = [];
175
+ private readonly publishedMeshNodeDescriptors =
176
+ new Map<string, ZLinkMeshNodeDescriptor>();
177
+ // Keep the revision source separate from the cached Store row. A new owner
178
+ // lease may require a NewClaim against an empty Store, while peers still
179
+ // retain the monotonic revision from this MeshNode lifecycle.
180
+ private readonly descriptorRevisionByMesh = new Map<string, bigint>();
181
+ private publishedOwnerToken?: ZLinkLocationOwnerToken;
182
+ private readonly runtimePlacementWeights = new Map<string, number>();
183
+ private readonly runtimeChannelWeights = new Map<string, Map<string, number>>();
184
+ private readonly entrySpotIds = new Map<string, string>();
185
+ private runtimeWeightPublication = Promise.resolve();
186
+ private statePublication = Promise.resolve();
187
+ private locationAutoConnect?: ZLinkSpotNodeLocationAutoConnectContext;
188
+ private readonly applicationJobQueue: ApplicationJobQueue;
189
+
190
+ constructor(private readonly options: ZLinkSpotNodeRuntimeManagerOptions) {
191
+ this.applicationJobQueue = options.applicationJobQueue
192
+ ?? new ApplicationJobQueue(resolveApplicationJobQueueConfiguration());
193
+ }
194
+
195
+ createReceived() {
196
+ return this.options.backendAdapterFactory.createReceived();
197
+ }
198
+
199
+ createTopicMessage() {
200
+ return this.options.backendAdapterFactory.createTopicMessage();
201
+ }
202
+
203
+ configureLocationAutoConnect(
204
+ runtime: ZLinkLocationRuntime,
205
+ stores: ZLinkLocationRuntimeStores,
206
+ options: ZLinkLocationOptionOverrides,
207
+ events?: ZLinkLocationEventSink
208
+ ): void {
209
+ this.locationAutoConnect = createSpotNodeLocationAutoConnectContext(runtime, stores, options, events);
210
+ }
211
+
212
+ async startLocationAutoConnect(signal?: AbortSignal): Promise<void> {
213
+ const location = this.locationAutoConnect;
214
+ if (location === undefined || this.autoConnectLoops.length > 0) {
215
+ return;
216
+ }
217
+ try {
218
+ for (const [spotNodeName, spotNode] of this.options.registration.spotNodes.entries()) {
219
+ const node = this.meshNodes.get(spotNodeName);
220
+ if (node === undefined) {
221
+ continue;
222
+ }
223
+ const capability = spotNodeAutoConnectCapability(spotNodeName, spotNode, node);
224
+ if (capability === undefined) continue;
225
+ const reconciler = new ZLinkAutoConnectReconciler({
226
+ local: capability.local,
227
+ localRow: capability.localRow,
228
+ runtime: location.runtime,
229
+ peerResolver: location.resolver,
230
+ executor: capability.executor,
231
+ events: location.events,
232
+ options: location.options
233
+ });
234
+ const loop = new ZLinkAutoConnectLoop({
235
+ reconciler,
236
+ local: capability.local,
237
+ options: location.options,
238
+ changeStampStore: location.changeStampStore,
239
+ leaseTracker: location.leaseTracker
240
+ });
241
+ await loop.start(signal);
242
+ this.autoConnectLoops.push(loop);
243
+ }
244
+ } catch (error) {
245
+ await Promise.allSettled(this.autoConnectLoops.map((loop) => loop.stop(signal)));
246
+ this.autoConnectLoops.length = 0;
247
+ throw error;
248
+ }
249
+ }
250
+
251
+ /**
252
+ * Fences transport connections that were created under an owner token which
253
+ * is no longer valid. The loops are discarded so a later owner renewal can
254
+ * build them again with the current lifecycle descriptor.
255
+ */
256
+ async fenceLocationAutoConnect(): Promise<void> {
257
+ const loops = [...this.autoConnectLoops];
258
+ this.autoConnectLoops.length = 0;
259
+ await Promise.allSettled(loops.map((loop) => loop.prepareTransportShutdown()));
260
+ for (const node of this.meshNodes.values()) {
261
+ for (const peer of node.peers()) {
262
+ if (peer.routingId !== null) {
263
+ node.disconnectPeer(peer.routingId, peer.lifecycleGeneration);
264
+ }
265
+ }
266
+ }
267
+ }
268
+
269
+ async start(): Promise<void> {
270
+ if (this.options.registration.spotNodes.size === 0) {
271
+ return;
272
+ }
273
+ const meshAdapter = this.options.backendAdapterFactory.createMeshAdapter();
274
+ for (const [spotNodeName, spotNode] of this.options.registration.spotNodes.entries()) {
275
+ const routingId = spotNode.routingId
276
+ ?? spotNode.router?.routingId
277
+ ?? spotNode.pubSub?.routingId
278
+ ?? `${spotNode.routingIdPrefix ?? spotNodeName}-${randomUUID()}`;
279
+ const bind = spotNode.router?.bind;
280
+ if (bind === undefined) {
281
+ throw new ZLinkConfigurationException(
282
+ `MeshNode '${spotNodeName}' requires a routing id and ROUTER bind endpoint.`
283
+ );
284
+ }
285
+ const node = meshAdapter.createMeshNode(this.options.context, {
286
+ meshName: spotNodeName,
287
+ routingId,
288
+ applicationJobQueue: this.applicationJobQueue,
289
+ applicationJobReceiveFlowFailureSink:
290
+ this.options.applicationJobReceiveFlowFailureSink,
291
+ peerAdmissionSealed: () => this.options.peerAdmissionSealed?.(spotNodeName) ?? false
292
+ });
293
+ node.setMailboxRecordDroppedHandler?.((record) =>
294
+ this.options.dispatchErrors?.report({
295
+ surface: ZLinkDispatchErrorSurface.RouteMeshChannel,
296
+ messageKind: ZLinkDispatchMessageKind.Send,
297
+ reason: ZLinkDispatchErrorReason.StaleTarget,
298
+ action: ZLinkDispatchErrorAction.Drop,
299
+ channelName: spotNodeName,
300
+ error: new Error(
301
+ `MeshNode '${spotNodeName}' no longer accepts ${record.kind} for '${record.owner}'.`
302
+ )
303
+ }));
304
+ node.setProtocolErrorHandler?.((record) =>
305
+ this.options.dispatchErrors?.report({
306
+ surface: ZLinkDispatchErrorSurface.RouteMeshChannel,
307
+ messageKind: record.request
308
+ ? ZLinkDispatchMessageKind.Request
309
+ : ZLinkDispatchMessageKind.Send,
310
+ reason: ZLinkDispatchErrorReason.InvalidFrame,
311
+ action: record.replied
312
+ ? ZLinkDispatchErrorAction.ReplyError
313
+ : ZLinkDispatchErrorAction.Drop,
314
+ channelName: spotNodeName,
315
+ sourceRid: record.sourceNodeRid,
316
+ error: new Error(
317
+ `MeshNode '${spotNodeName}' rejected an invalid service wire record from '${record.sourceNodeRid}'`
318
+ + (record.command === undefined ? '.' : ` (command ${record.command}).`)
319
+ )
320
+ }));
321
+ let pump: ZLinkMeshDispatchPump | undefined;
322
+ const completions = new ZLinkMeshCompletionTable();
323
+ try {
324
+ node.setBind(bind);
325
+ if (spotNode.router?.advertiseHost !== undefined) {
326
+ node.setAdvertiseHost(spotNode.router.advertiseHost);
327
+ }
328
+ const stableTypes = [
329
+ ...Object.keys(spotNode.spotFactoryRegistrations ?? {}),
330
+ ...Object.keys(spotNode.instanceSpotFactoryRegistrations ?? {}),
331
+ ...Object.keys(spotNode.actorFactoryRegistrations ?? {})
332
+ ];
333
+ const instanceSpotTypes = Object.keys(
334
+ spotNode.instanceSpotFactoryRegistrations ?? {}
335
+ );
336
+ const hasLegacyObjectFactories =
337
+ (spotNode.spotFactories?.length ?? 0) > 0
338
+ || Object.keys(spotNode.instanceSpotFactories ?? {}).length > 0
339
+ || (
340
+ spotNode.actorFactories instanceof Map
341
+ ? spotNode.actorFactories.size
342
+ : Object.keys(spotNode.actorFactories ?? {}).length
343
+ ) > 0;
344
+ node.configureObjectPlacement({
345
+ role: spotNode.objectRole
346
+ ?? (hasLegacyObjectFactories ? 'server' : 'none'),
347
+ placementWeight: spotNode.placementWeight ?? 100,
348
+ activeCapacityLimit:
349
+ aggregatePlacementCapacity(
350
+ spotNode.actorLimit ?? 0,
351
+ spotNode.spotLimit ?? 0
352
+ ),
353
+ pendingCapacityLimit: spotNode.activationConcurrencyLimit ?? 128,
354
+ objectCapabilities: [
355
+ ...stableTypes.map(type => `object-type:${type}`),
356
+ ...instanceSpotTypes.map(type => `instance-spot-type:${type}`)
357
+ ],
358
+ ...(this.options.registration.maintenanceWave === undefined
359
+ ? {}
360
+ : { maintenanceWave: this.options.registration.maintenanceWave })
361
+ });
362
+ for (const [channelName, channel] of this.serverChannels(spotNodeName)) {
363
+ node.addChannelName(channelName);
364
+ if (channel.weight !== undefined) {
365
+ await node.setChannelWeight(channelName, channel.weight);
366
+ }
367
+ }
368
+ node.setMessageFollowHandler?.((record) => this.options.messageFollowReceiver?.(record));
369
+ node.start();
370
+ this.publishers.set(spotNodeName, node.createPublisher());
371
+ for (const endpoint of spotNode.router?.manualConnections ?? []) {
372
+ await node.connectPeer({ endpoint });
373
+ }
374
+ for (const peer of spotNode.router?.manualPeerConnections ?? []) {
375
+ await node.connectPeer({
376
+ endpoint: peer.endpoint,
377
+ expectedRid: toBackendRoutingId(peer.peerRid)
378
+ });
379
+ }
380
+ pump = new ZLinkMeshDispatchPump(node, {
381
+ applicationJobQueue: this.applicationJobQueue,
382
+ dispatch: (owner, record) => this.dispatchMeshRecord(spotNodeName, owner, record),
383
+ reportError: (error, context) => this.options.dispatchErrors?.report({
384
+ surface: ZLinkDispatchErrorSurface.Node,
385
+ messageKind: ZLinkDispatchMessageKind.Control,
386
+ reason: ZLinkDispatchErrorReason.HandlerException,
387
+ action: ZLinkDispatchErrorAction.Drop,
388
+ meshName: spotNodeName,
389
+ packetName: context?.packetName,
390
+ sourceRid: context?.sourceNodeRid,
391
+ commandId: context?.commandId,
392
+ error
393
+ })
394
+ });
395
+ pump.start();
396
+ this.meshNodes.set(spotNodeName, node);
397
+ this.meshPumps.set(spotNodeName, pump);
398
+ this.meshCompletions.set(spotNodeName, completions);
399
+ } catch (error) {
400
+ this.entryActivations.delete(spotNodeName);
401
+ this.publishers.get(spotNodeName)?.close();
402
+ this.publishers.delete(spotNodeName);
403
+ this.meshCompletions.delete(spotNodeName);
404
+ this.meshPumps.delete(spotNodeName);
405
+ this.meshNodes.delete(spotNodeName);
406
+ completions.dispose(error);
407
+ await pump?.dispose();
408
+ node.close();
409
+ throw error;
410
+ }
411
+ }
412
+ }
413
+
414
+ async publishMeshNodeState(
415
+ state: ZLinkFrameworkRuntimeState,
416
+ signal?: AbortSignal,
417
+ selectedMeshName?: string
418
+ ): Promise<void> {
419
+ const previous = this.statePublication;
420
+ let release!: () => void;
421
+ this.statePublication = new Promise<void>((resolve) => { release = resolve; });
422
+ await previous;
423
+ try {
424
+ await this.publishMeshNodeStateCore(state, signal, selectedMeshName);
425
+ } finally {
426
+ release();
427
+ }
428
+ }
429
+
430
+ private async publishMeshNodeStateCore(
431
+ state: ZLinkFrameworkRuntimeState,
432
+ signal?: AbortSignal,
433
+ selectedMeshName?: string
434
+ ): Promise<void> {
435
+ const location = this.locationAutoConnect;
436
+ const owner = location?.runtime.currentOwnerToken;
437
+ if (location === undefined || owner === undefined) return;
438
+ const ownerChanged = this.publishedOwnerToken !== undefined
439
+ && !sameOwnerToken(this.publishedOwnerToken, owner);
440
+ if (ownerChanged) {
441
+ // A new owner token can refer to an empty or replaced Store. The cached
442
+ // descriptor was written under the previous lease and must not force a
443
+ // Renew against a row that no longer exists.
444
+ this.publishedMeshNodeDescriptors.clear();
445
+ }
446
+ for (const [meshName, registration] of this.options.registration.spotNodes) {
447
+ if (selectedMeshName !== undefined && meshName !== selectedMeshName) continue;
448
+ const node = this.meshNodes.get(meshName);
449
+ if (node === undefined) continue;
450
+ const status = node.status();
451
+ const userSpots = effectiveUserSpotRegistrations(registration);
452
+ const instanceSpots = effectiveInstanceSpotRegistrations(registration);
453
+ const actors = effectiveActorRegistrations(registration);
454
+ const capabilities = [
455
+ ...userSpots.map(([stableType, factory]) =>
456
+ objectCapability('user_spot', stableType, factory)),
457
+ ...instanceSpots.map(([stableType, factory]) =>
458
+ objectCapability('instance_spot', stableType, factory)),
459
+ ...actors.map(([stableType, factory]) =>
460
+ objectCapability('actor', stableType, factory))
461
+ ].sort((left, right) => {
462
+ const kindOrder = left.objectKind.localeCompare(right.objectKind);
463
+ return kindOrder !== 0
464
+ ? kindOrder
465
+ : left.stableType.localeCompare(right.stableType);
466
+ });
467
+ const current = this.publishedMeshNodeDescriptors.get(meshName);
468
+ const previousRevision = this.descriptorRevisionByMesh.get(meshName) ?? 0n;
469
+ const descriptor = {
470
+ meshName,
471
+ rid: status.routingId,
472
+ lifecycleGeneration: status.lifecycleGeneration,
473
+ descriptorRevision: maxBigInt(previousRevision, current?.descriptorRevision ?? 0n) + 1n,
474
+ // The raw MeshNode resolves port zero and applies AdvertiseHost once.
475
+ // Discovery and RouteMesh hello must publish that same public identity.
476
+ endpoint: status.localEndpoint,
477
+ objectRole: effectiveObjectRole(registration),
478
+ entrySpotId: this.entrySpotId(meshName, registration),
479
+ placementWeight: this.placementWeight(meshName),
480
+ populationCapacity: {
481
+ actors: {
482
+ active: current?.populationCapacity.actors.active ?? 0,
483
+ reserved: current?.populationCapacity.actors.reserved ?? 0,
484
+ limit: registration.actorLimit ?? 0
485
+ },
486
+ spots: {
487
+ active: current?.populationCapacity.spots.active ?? 0,
488
+ reserved: current?.populationCapacity.spots.reserved ?? 0,
489
+ limit: registration.spotLimit ?? 0
490
+ },
491
+ spotTypes: capabilities
492
+ .filter(capability => capability.objectKind !== 'actor')
493
+ .map(capability => {
494
+ const previous = current?.populationCapacity.spotTypes.find(candidate =>
495
+ candidate.objectKind === capability.objectKind
496
+ && candidate.stableType === capability.stableType);
497
+ return {
498
+ objectKind: capability.objectKind as 'user_spot' | 'instance_spot',
499
+ stableType: capability.stableType,
500
+ active: previous?.active ?? 0,
501
+ reserved: previous?.reserved ?? 0,
502
+ limit: capability.limit
503
+ };
504
+ })
505
+ },
506
+ activationConcurrency: {
507
+ active: this.options.instanceActivationConcurrencyProvider?.(meshName).active
508
+ ?? current?.activationConcurrency.active
509
+ ?? 0,
510
+ limit: this.options.instanceActivationConcurrencyProvider?.(meshName).limit
511
+ ?? registration.activationConcurrencyLimit
512
+ ?? 128
513
+ },
514
+ channelWeights: Object.fromEntries(
515
+ this.serverChannels(meshName)
516
+ .map(([channelName, channel]) => [
517
+ channelName,
518
+ state === ZLinkFrameworkRuntimeState.Draining
519
+ ? 0
520
+ : this.effectiveChannelWeight(meshName, channelName, channel.weight ?? 100)
521
+ ])
522
+ ),
523
+ applicationVersion: this.options.registration.applicationVersion,
524
+ maintenanceWave: this.options.registration.maintenanceWave,
525
+ spotTypes: [
526
+ ...userSpots.map(([stableType]) => stableType),
527
+ ...instanceSpots.map(([stableType]) => stableType),
528
+ ...(registration.entrySpotType === undefined
529
+ ? []
530
+ : [registration.entrySpotType.name])
531
+ ]
532
+ .sort(),
533
+ objectCapabilities: capabilities,
534
+ state,
535
+ securityIdentity: 'default',
536
+ };
537
+ const result = await location.runtime.writeMeshNode(
538
+ descriptor,
539
+ ownerChanged
540
+ ? ZLinkLocationWriteIntent.Renew
541
+ : current === undefined
542
+ ? ZLinkLocationWriteIntent.NewClaim
543
+ : ZLinkLocationWriteIntent.Renew,
544
+ signal
545
+ );
546
+ if (result.status !== ZLinkLocationWriteStatus.Stored) {
547
+ throw new ZLinkConfigurationException(
548
+ `MeshNode '${meshName}' descriptor publication failed: ${result.status}.`
549
+ );
550
+ }
551
+ this.publishedMeshNodeDescriptors.set(meshName, {
552
+ ...descriptor,
553
+ ownerId: location.runtime.currentOwnerToken!.ownerId,
554
+ leaseGeneration: location.runtime.currentOwnerToken!.leaseGeneration,
555
+ updatedAt: result.updatedAt
556
+ });
557
+ this.descriptorRevisionByMesh.set(meshName, descriptor.descriptorRevision);
558
+ }
559
+ this.publishedOwnerToken = owner;
560
+ }
561
+
562
+ async reconcileAndPublishMeshNodeState(
563
+ state: ZLinkFrameworkRuntimeState,
564
+ meshName: string,
565
+ signal?: AbortSignal
566
+ ): Promise<void> {
567
+ const location = this.locationAutoConnect;
568
+ const node = this.meshNodes.get(meshName);
569
+ if (location === undefined || node === undefined) return;
570
+ const status = node.status();
571
+ const owner = location.runtime.currentOwnerToken;
572
+ if (owner === undefined) return;
573
+ const current = (await location.runtime.listLiveMeshNodes(meshName, signal))
574
+ .find((descriptor) =>
575
+ String(descriptor.rid) === String(status.routingId)
576
+ && descriptor.lifecycleGeneration === status.lifecycleGeneration
577
+ && descriptor.ownerId === owner.ownerId
578
+ && descriptor.leaseGeneration === owner.leaseGeneration);
579
+ if (current !== undefined) {
580
+ this.publishedMeshNodeDescriptors.set(meshName, current);
581
+ this.descriptorRevisionByMesh.set(
582
+ meshName,
583
+ maxBigInt(this.descriptorRevisionByMesh.get(meshName) ?? 0n, current.descriptorRevision)
584
+ );
585
+ this.publishedOwnerToken = owner;
586
+ }
587
+ await this.publishMeshNodeState(state, signal, meshName);
588
+ }
589
+
590
+ private entrySpotId(
591
+ meshName: string,
592
+ registration: ZLinkSpotNodeOptions
593
+ ): string | undefined {
594
+ if (effectiveObjectRole(registration) !== ZLinkObjectRole.Server
595
+ || registration.entrySpotType === undefined) {
596
+ return undefined;
597
+ }
598
+ let entrySpotId = this.entrySpotIds.get(meshName);
599
+ if (entrySpotId !== undefined) return entrySpotId;
600
+ const prefix = registration.routingIdPrefix ?? meshName;
601
+ entrySpotId = createFrameworkEntrySpotId(prefix);
602
+ this.entrySpotIds.set(meshName, entrySpotId);
603
+ return entrySpotId;
604
+ }
605
+
606
+ get meshNodesByName(): ReadonlyMap<string, ZLinkBackendMeshNode> {
607
+ return this.meshNodes;
608
+ }
609
+
610
+ meshNode(meshName: string): ZLinkBackendMeshNode | undefined {
611
+ return this.meshNodes.get(meshName);
612
+ }
613
+
614
+ async sendMessageFollowNotification(
615
+ sourceNodeRid: RoutingId,
616
+ targetNodeRid: RoutingId,
617
+ record: Omit<ServiceMessageFollowRecord, 'kind'>
618
+ ): Promise<boolean> {
619
+ for (const node of this.meshNodes.values()) {
620
+ if (!routingIdsEqual(node.status().routingId, sourceNodeRid)) continue;
621
+ if (node.sendMessageFollowNotification === undefined) return false;
622
+ return await node.sendMessageFollowNotification(targetNodeRid, record);
623
+ }
624
+ return false;
625
+ }
626
+
627
+ entrySpotIdForMesh(meshName: string): string | undefined {
628
+ const registration = this.options.registration.spotNodes.get(meshName);
629
+ return registration === undefined
630
+ ? undefined
631
+ : this.entrySpotId(meshName, registration);
632
+ }
633
+
634
+ meshNodeDescriptor(meshName: string): ZLinkMeshNodeDescriptor | undefined {
635
+ return this.publishedMeshNodeDescriptors.get(meshName);
636
+ }
637
+
638
+ placementWeight(meshName: string): number {
639
+ const registration = this.options.registration.spotNodes.get(meshName);
640
+ if (registration === undefined) {
641
+ throw new ZLinkConfigurationException(`Mesh '${meshName}' is not registered.`);
642
+ }
643
+ return this.runtimePlacementWeights.get(meshName)
644
+ ?? registration.placementWeight
645
+ ?? 100;
646
+ }
647
+
648
+ channelWeight(channelName: string): number {
649
+ const match = this.resolveChannel(channelName);
650
+ return this.effectiveChannelWeight(match.meshName, channelName, match.configuredWeight);
651
+ }
652
+
653
+ setRuntimePlacementWeight(meshName: string, weight: number): void {
654
+ const node = this.meshNodes.get(meshName);
655
+ if (node === undefined) {
656
+ throw new ZLinkConfigurationException(
657
+ `Mesh '${meshName}' runtime placement weight requires a started MeshNode.`
658
+ );
659
+ }
660
+ const validated = requirePublicRuntimeWeight(weight, 'Placement weight');
661
+ if (this.placementWeight(meshName) === validated) return;
662
+ this.runtimePlacementWeights.set(meshName, validated);
663
+ this.scheduleRuntimeWeightPublication(meshName, async () => {
664
+ await node.setPlacementWeight(validated);
665
+ });
666
+ }
667
+
668
+ setRuntimeChannelWeight(channelName: string, weight: number): void {
669
+ const match = this.resolveChannel(channelName);
670
+ const node = this.meshNodes.get(match.meshName);
671
+ if (node === undefined) {
672
+ throw new ZLinkConfigurationException(
673
+ `Channel '${channelName}' runtime weight requires a started MeshNode.`
674
+ );
675
+ }
676
+ const validated = requirePublicRuntimeWeight(weight, 'Channel weight');
677
+ if (this.effectiveChannelWeight(match.meshName, channelName, match.configuredWeight) === validated) return;
678
+ let weights = this.runtimeChannelWeights.get(match.meshName);
679
+ if (weights === undefined) {
680
+ weights = new Map();
681
+ this.runtimeChannelWeights.set(match.meshName, weights);
682
+ }
683
+ weights.set(channelName, validated);
684
+ this.scheduleRuntimeWeightPublication(match.meshName, async () => {
685
+ await node.setChannelWeight(channelName, validated);
686
+ });
687
+ }
688
+
689
+ waitForRuntimeWeightPublication(): Promise<void> {
690
+ return this.runtimeWeightPublication;
691
+ }
692
+
693
+ meshCompletionTable(meshName: string): ZLinkMeshCompletionTable | undefined {
694
+ return this.meshCompletions.get(meshName);
695
+ }
696
+
697
+ get primaryMeshNode(): ZLinkBackendMeshNode | undefined {
698
+ return this.options.primaryMeshName === undefined
699
+ ? this.meshNodes.values().next().value
700
+ : this.meshNodes.get(this.options.primaryMeshName);
701
+ }
702
+
703
+ private effectiveChannelWeight(
704
+ meshName: string,
705
+ channelName: string,
706
+ configuredWeight: number
707
+ ): number {
708
+ return this.runtimeChannelWeights.get(meshName)?.get(channelName) ?? configuredWeight;
709
+ }
710
+
711
+ private resolveChannel(channelName: string): {
712
+ readonly meshName: string;
713
+ readonly configuredWeight: number;
714
+ } {
715
+ const matches = [...this.options.registration.spotNodes]
716
+ .flatMap(([meshName, registration]) => {
717
+ const channel = registration.meshChannels?.[channelName];
718
+ return channel === undefined
719
+ ? []
720
+ : [{ meshName, configuredWeight: channel.weight ?? 100 }];
721
+ });
722
+ if (matches.length === 0) {
723
+ throw new ZLinkConfigurationException(`RouteMesh channel '${channelName}' is not registered.`);
724
+ }
725
+ if (matches.length > 1) {
726
+ throw new ZLinkConfigurationException(
727
+ `RouteMesh channel '${channelName}' is registered in more than one Mesh.`
728
+ );
729
+ }
730
+ return matches[0]!;
731
+ }
732
+
733
+ private scheduleRuntimeWeightPublication(
734
+ meshName: string,
735
+ applyWeight: () => Promise<void>
736
+ ): void {
737
+ const publish = this.runtimeWeightPublication.catch(() => undefined).then(async () => {
738
+ await applyWeight();
739
+ const state = this.publishedMeshNodeDescriptors.get(meshName)?.state
740
+ ?? ZLinkFrameworkRuntimeState.Serving;
741
+ await this.publishMeshNodeState(state, undefined, meshName);
742
+ });
743
+ this.runtimeWeightPublication = publish;
744
+ if (this.options.detachedTaskRunner !== undefined) {
745
+ this.options.detachedTaskRunner.runDetached(
746
+ `RouteMesh '${meshName}' runtime weight publication`,
747
+ async () => await publish
748
+ );
749
+ } else {
750
+ void publish.catch(() => undefined);
751
+ }
752
+ }
753
+
754
+ get primaryMeshCompletions(): ZLinkMeshCompletionTable | undefined {
755
+ const meshName = this.options.primaryMeshName ?? this.meshNodes.keys().next().value;
756
+ return meshName === undefined ? undefined : this.meshCompletions.get(meshName);
757
+ }
758
+
759
+ async notifyEntrySpotActorCreated(
760
+ nodeRid: RoutingId,
761
+ actor: ZLinkActor,
762
+ createRequest: ZLinkMessage,
763
+ signal?: AbortSignal
764
+ ): Promise<import('../../contracts').ZLinkActorCreateResponse | undefined> {
765
+ let activation = [...this.entryActivations.values()].find(
766
+ (entryActivation) => routingIdsEqual(entryActivation.nodeRid, nodeRid)
767
+ );
768
+ if (activation === undefined) {
769
+ for (const [meshName, node] of this.meshNodes) {
770
+ if (!routingIdsEqual(node.status().routingId, nodeRid)) continue;
771
+ if (this.options.registration.spotNodes.get(meshName)?.entrySpotType === undefined) continue;
772
+ await this.ensureEntryActivation(meshName);
773
+ activation = this.entryActivations.get(meshName);
774
+ break;
775
+ }
776
+ }
777
+ return activation?.notifyCreateActor(actor, createRequest, signal);
778
+ }
779
+
780
+ notifyPrimaryEntrySpotActorJoined(
781
+ actor: ZLinkActor,
782
+ signal?: AbortSignal
783
+ ): Promise<void> {
784
+ const activation = this.primaryEntryActivation();
785
+ return activation?.notifyJoinActor(actor, signal) ?? Promise.resolve();
786
+ }
787
+
788
+ notifyPrimaryEntrySpotActorLeft(
789
+ actor: ZLinkActor,
790
+ signal?: AbortSignal,
791
+ actorRef?: ActorRef,
792
+ membershipEpoch?: bigint
793
+ ): Promise<void> {
794
+ const activation = this.primaryEntryActivation();
795
+ return activation?.notifyLeaveActor(actor, signal, actorRef, membershipEpoch) ?? Promise.resolve();
796
+ }
797
+
798
+ notifyPrimaryEntrySpotActorDisconnected(
799
+ actor: ZLinkActor,
800
+ signal?: AbortSignal
801
+ ): Promise<void> {
802
+ const activation = this.primaryEntryActivation();
803
+ return activation?.notifyDisconnectActor(actor, signal) ?? Promise.resolve();
804
+ }
805
+
806
+ async notifyEntrySpotActorDisconnected(
807
+ meshName: string,
808
+ actor: ZLinkActor,
809
+ signal?: AbortSignal
810
+ ): Promise<void> {
811
+ await this.ensureEntryActivation(meshName);
812
+ await this.entryActivations.get(meshName)?.notifyDisconnectActor(actor, signal);
813
+ }
814
+
815
+ serverChannels(meshName: string) {
816
+ return Object.entries(this.options.registration.spotNodes.get(meshName)?.meshChannels ?? {})
817
+ .filter(([, channel]) => channel.server === true);
818
+ }
819
+
820
+ async dispose(signal?: AbortSignal, deadline?: Date): Promise<void> {
821
+ this.disposed = true;
822
+ const autoConnectLoops = [...this.autoConnectLoops];
823
+ const entryActivations = [...this.entryActivations.values()];
824
+ const meshPumps = [...this.meshPumps.values()];
825
+ const meshNodes = [...this.meshNodes.values()];
826
+ const meshCompletions = [...this.meshCompletions.values()];
827
+ this.entryActivations.clear();
828
+ this.autoConnectLoops.length = 0;
829
+ this.meshPumps.clear();
830
+ const publishers = [...this.publishers.values()];
831
+ this.publishers.clear();
832
+ this.rejectPublishSlotWaiters(runtimeShutdownError());
833
+ const errors: unknown[] = [];
834
+ const settle = async (operations: readonly Promise<unknown>[]) => {
835
+ const results = await Promise.allSettled(operations);
836
+ errors.push(...results
837
+ .filter((result): result is PromiseRejectedResult => result.status === 'rejected')
838
+ .map((result) => result.reason));
839
+ };
840
+ await settle(publishers.map(async (publisher) => publisher.close()));
841
+ await settle(autoConnectLoops.map((loop) => loop.prepareTransportShutdown()));
842
+ await settle(entryActivations.reverse().map((activation) => activation.dispose(deadline)));
843
+ await settle(meshPumps.reverse().map((pump) => pump.dispose()));
844
+ await settle(meshNodes.reverse().map(async (node) => {
845
+ node.shutdown(1000);
846
+ node.close();
847
+ }));
848
+ for (const completions of meshCompletions) {
849
+ completions.dispose();
850
+ }
851
+ this.meshNodes.clear();
852
+ this.meshCompletions.clear();
853
+ await settle(autoConnectLoops.map((loop) => loop.finishTransportShutdown(signal)));
854
+ if (errors.length === 1) throw errors[0];
855
+ if (errors.length > 1) throw new AggregateError(errors, 'SPOT node runtime cleanup failed.');
856
+ }
857
+
858
+ private async dispatchMeshRecord(
859
+ meshName: string,
860
+ owner: ReadyRecord,
861
+ record: ReceiveRecord
862
+ ): Promise<void> {
863
+ if (record.kind === ReceiveKind.Completion) {
864
+ requireZLinkInfrastructureExecutionArea();
865
+ const completions = this.meshCompletions.get(meshName);
866
+ if (completions === undefined) {
867
+ throw new ZLinkConfigurationException(
868
+ `MeshNode '${meshName}' received a completion before its completion table was registered.`
869
+ );
870
+ }
871
+ completions.complete(record);
872
+ return;
873
+ }
874
+ const node = this.meshNodes.get(meshName);
875
+ const targetsEntrySpot = owner.spotId === null
876
+ || (node !== undefined && routingIdsEqual(
877
+ owner.spotId as unknown as RoutingId,
878
+ String(node.status().routingId)
879
+ ));
880
+ if (targetsEntrySpot && (
881
+ record.kind === ReceiveKind.ActorSend
882
+ || record.kind === ReceiveKind.ActorRequest
883
+ || record.kind === ReceiveKind.SpotSend
884
+ || record.kind === ReceiveKind.SpotRequest
885
+ || record.kind === ReceiveKind.SpotMulticast
886
+ )) {
887
+ await this.ensureEntryActivation(meshName);
888
+ }
889
+ const dispatcher = this.options.meshRecordDispatcher;
890
+ if (dispatcher === undefined) {
891
+ throw new ZLinkConfigurationException(
892
+ `MeshNode '${meshName}' received a record before its framework dispatcher was registered.`
893
+ );
894
+ }
895
+ await dispatcher(meshName, owner, record);
896
+ }
897
+
898
+ async dispatchEntrySpotRecord(
899
+ meshName: string,
900
+ owner: ReadyRecord,
901
+ record: ReceiveRecord
902
+ ): Promise<boolean> {
903
+ if (record.kind !== ReceiveKind.SpotSend
904
+ && record.kind !== ReceiveKind.SpotRequest
905
+ && record.kind !== ReceiveKind.SpotMulticast) {
906
+ return false;
907
+ }
908
+ await this.ensureEntryActivation(meshName);
909
+ const activation = this.entryActivations.get(meshName);
910
+ if (
911
+ activation === undefined
912
+ || owner.spotId === null
913
+ || activation.spotId !== owner.spotId
914
+ ) {
915
+ return false;
916
+ }
917
+ if (record.kind === ReceiveKind.SpotMulticast) {
918
+ if (record.topic === null || record.topic.length === 0) {
919
+ throw new ZLinkConfigurationException('MeshNode Entry Spot multicast record is missing its topic.');
920
+ }
921
+ await activation.dispatchSubscriptionRecord(
922
+ record.topic,
923
+ record.parts,
924
+ record.sourceNodeRid as unknown as RoutingId | null
925
+ );
926
+ return true;
927
+ }
928
+ const envelope = decodeChannelEnvelope(
929
+ record.parts,
930
+ undefined,
931
+ this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true
932
+ );
933
+ const codecs = { serializers: this.options.registration.messageSerializers };
934
+ const decodePayload = () => decodeChannelPayload(envelope, codecs);
935
+ const context = {
936
+ channelName: envelope.header.channelName,
937
+ contentType: envelope.header.contentType
938
+ };
939
+ if (record.kind === ReceiveKind.SpotSend) {
940
+ await activation.dispatchPacketEncoded(envelope.packetName, decodePayload, context, false);
941
+ return true;
942
+ }
943
+ try {
944
+ const response = await activation.dispatchPacketEncoded(
945
+ envelope.packetName,
946
+ decodePayload,
947
+ context,
948
+ true
949
+ );
950
+ requireEntrySpotReply(record.reply(encodeChannelReplyParts(envelope.header, response, codecs)));
951
+ } catch (error) {
952
+ requireEntrySpotReply(record.reply(encodeChannelErrorReplyParts(envelope.header, error)));
953
+ }
954
+ return true;
955
+ }
956
+
957
+ private async ensureEntryActivation(spotNodeName: string): Promise<void> {
958
+ if (this.entryActivations.has(spotNodeName)) {
959
+ return;
960
+ }
961
+ const pending = this.entryActivationStarts.get(spotNodeName);
962
+ if (pending !== undefined) {
963
+ await pending;
964
+ return;
965
+ }
966
+ const spotNode = this.options.registration.spotNodes.get(spotNodeName);
967
+ const node = this.meshNodes.get(spotNodeName);
968
+ if (spotNode === undefined || node === undefined || spotNode.entrySpotType === undefined) {
969
+ return;
970
+ }
971
+ const start = this.initializeEntrySpot(spotNodeName, node, spotNode);
972
+ this.entryActivationStarts.set(spotNodeName, start);
973
+ try {
974
+ await start;
975
+ } finally {
976
+ if (this.entryActivationStarts.get(spotNodeName) === start) {
977
+ this.entryActivationStarts.delete(spotNodeName);
978
+ }
979
+ }
980
+ }
981
+
982
+ private async initializeEntrySpot(
983
+ spotNodeName: string,
984
+ node: ZLinkBackendMeshNode,
985
+ spotNode: ZLinkSpotNodeOptions
986
+ ): Promise<void> {
987
+ if (spotNode.entrySpotType === undefined) {
988
+ return;
989
+ }
990
+ const activation = new ZLinkEntrySpotActivation({
991
+ entrySpotType: spotNode.entrySpotType,
992
+ nativeSpot: node.entrySpot() as never,
993
+ nativeNode: node as unknown as ZLinkBackendSpotNode,
994
+ createReceived: () => this.options.backendAdapterFactory.createReceived(),
995
+ createTopicMessage: () => this.options.backendAdapterFactory.createTopicMessage(),
996
+ nodeRid: String(node.status().routingId),
997
+ spotNodeName,
998
+ providerResolver: this.options.providerResolver,
999
+ channelClient: this.options.channelClient,
1000
+ fanoutClient: this.options.fanoutClient,
1001
+ spotPublisherClient: this.options.spotPublisherClient,
1002
+ routedTransport: this.options.routedTransport,
1003
+ spotRouterChannelIdForMesh: this.options.spotRouterChannelIdForMesh,
1004
+ channelMeshNameForChannel: (channelName) => resolveChannelMeshName(
1005
+ this.options.registration,
1006
+ channelName
1007
+ ),
1008
+ timerHandlers: spotNode.entrySpotTimerHandlers,
1009
+ packetHandlers: spotNode.entrySpotPacketHandlers,
1010
+ subscriptionHandlers: spotNode.entrySpotSubscriptionHandlers,
1011
+ actorSendHandlers: spotNode.entrySpotActorSendHandlers,
1012
+ actorRequestHandlers: spotNode.entrySpotActorRequestHandlers,
1013
+ messageSerializers: this.options.registration.messageSerializers,
1014
+ entryActorRuntime: this.options.entryActorRuntime,
1015
+ actorTransferRuntime: this.options.actorTransferRuntime,
1016
+ boundSessionRuntime: this.options.boundSessionRuntime,
1017
+ actorHandoffRuntime: this.options.actorHandoffRuntime,
1018
+ detachedTaskRunner: this.options.detachedTaskRunner,
1019
+ dispatchErrors: this.options.dispatchErrors,
1020
+ runtimeEventPublisher: this.options.runtimeEventPublisher,
1021
+ metrics: this.options.metrics
1022
+ });
1023
+ try {
1024
+ await activation.create();
1025
+ await activation.configure();
1026
+ await activation.initialize();
1027
+ this.entryActivations.set(spotNodeName, activation);
1028
+ } catch (error) {
1029
+ try {
1030
+ await activation.dispose();
1031
+ } catch (disposeError) {
1032
+ throw new AggregateError(
1033
+ [error, disposeError],
1034
+ `Entry Spot '${spotNodeName}' materialization cleanup failed.`
1035
+ );
1036
+ }
1037
+ throw error;
1038
+ }
1039
+ }
1040
+
1041
+ private primaryEntryActivation(): ZLinkEntrySpotActivation | undefined {
1042
+ return this.entryActivations.values().next().value;
1043
+ }
1044
+
1045
+ async dispatchEntryActorPacket(
1046
+ actorId: string,
1047
+ parts: readonly Message[],
1048
+ returnResponse = false,
1049
+ remoteBoundSessionTarget?: ZLinkRemoteBoundSessionTarget,
1050
+ fallbackActorRef?: ActorRef,
1051
+ requestTerminal?: (response: unknown) => Promise<void> | void,
1052
+ messageFollowOrigin?: ZLinkMessageFollowOrigin
1053
+ ): Promise<unknown> {
1054
+ let activation = this.primaryEntryActivation();
1055
+ if (activation === undefined) {
1056
+ const candidates = this.options.primaryMeshName === undefined
1057
+ ? this.options.registration.spotNodes
1058
+ : new Map([[this.options.primaryMeshName, this.options.registration.spotNodes.get(
1059
+ this.options.primaryMeshName
1060
+ )]]);
1061
+ for (const [spotNodeName, spotNode] of candidates) {
1062
+ if (spotNode === undefined) {
1063
+ continue;
1064
+ }
1065
+ if (spotNode.entrySpotType === undefined) {
1066
+ continue;
1067
+ }
1068
+ await this.ensureEntryActivation(spotNodeName);
1069
+ activation = this.entryActivations.get(spotNodeName);
1070
+ if (activation !== undefined) {
1071
+ break;
1072
+ }
1073
+ }
1074
+ }
1075
+ if (activation === undefined) {
1076
+ throw new ZLinkConfigurationException('Entry Spot actor packet dispatch requires an Entry Spot.');
1077
+ }
1078
+ return await activation.dispatchActorPacket({
1079
+ actorId,
1080
+ parts,
1081
+ returnResponse,
1082
+ remoteBoundSessionTarget,
1083
+ fallbackActorRef,
1084
+ requestTerminal,
1085
+ messageFollowOrigin
1086
+ });
1087
+ }
1088
+
1089
+ async dispatchEntryActorJoin(
1090
+ meshName: string,
1091
+ actor: ZLinkActor,
1092
+ handoffBacklog: readonly ZLinkActorHandoffPacket[] = []
1093
+ ): Promise<void> {
1094
+ await this.ensureEntryActivation(meshName);
1095
+ const activation = this.entryActivations.get(meshName);
1096
+ if (activation === undefined) {
1097
+ throw new ZLinkConfigurationException(
1098
+ `Entry Spot actor join requires an Entry Spot for MeshNode '${meshName}'.`
1099
+ );
1100
+ }
1101
+ await activation.commitServiceActorJoin(actor, handoffBacklog);
1102
+ }
1103
+
1104
+ publish(
1105
+ meshName: string,
1106
+ channelName: string,
1107
+ topic: string,
1108
+ packetName: string | undefined,
1109
+ event: Message,
1110
+ signal?: AbortSignal,
1111
+ metadata: ReadonlyMap<string, string> = EMPTY_SPOT_METADATA
1112
+ ): Promise<ZLinkSubmitResult> {
1113
+ if (this.disposed) {
1114
+ return Promise.reject(runtimeShutdownError());
1115
+ }
1116
+ if (signal?.aborted === true) {
1117
+ return Promise.reject(signal.reason ?? createAbortError());
1118
+ }
1119
+ const publisher = this.publishers.get(meshName);
1120
+ if (publisher === undefined) {
1121
+ throw new ZLinkConfigurationException(`RouteMesh '${meshName}' publisher is not started.`);
1122
+ }
1123
+ const sendTimeoutMs = this.options.registration.spotNodes
1124
+ .get(meshName)?.publisherConfig?.sendTimeoutMs ?? 1000;
1125
+ const slot = this.acquirePublishSlot(meshName, sendTimeoutMs, signal);
1126
+ if (slot === false) {
1127
+ // The bounded executor-admission tokens are exhausted. Do not retain the
1128
+ // payload, cancellation state, or a timer for this hard-overload call.
1129
+ return Promise.resolve(this.publishTimedOut());
1130
+ }
1131
+ if (slot === true) {
1132
+ return this.executePublish(
1133
+ publisher,
1134
+ meshName,
1135
+ channelName,
1136
+ topic,
1137
+ packetName,
1138
+ event,
1139
+ metadata
1140
+ );
1141
+ }
1142
+ return slot.then((acquired) => acquired
1143
+ ? this.executePublish(
1144
+ publisher,
1145
+ meshName,
1146
+ channelName,
1147
+ topic,
1148
+ packetName,
1149
+ event,
1150
+ metadata
1151
+ )
1152
+ : this.publishTimedOut());
1153
+ }
1154
+
1155
+ private async executePublish(
1156
+ publisher: ReturnType<ZLinkBackendMeshNode['createPublisher']>,
1157
+ meshName: string,
1158
+ channelName: string,
1159
+ topic: string,
1160
+ packetName: string | undefined,
1161
+ event: Message,
1162
+ metadata: ReadonlyMap<string, string>
1163
+ ): Promise<ZLinkSubmitResult> {
1164
+ // The slot is the source-local admission boundary. Once publishAsync takes
1165
+ // the owned frames, target processing cannot change the caller terminal.
1166
+ // Call-scoped flow (spec 27 §4): the fanout envelope flow pair does not
1167
+ // outlive this publish call.
1168
+ try {
1169
+ const parts = runWithOutboundFlow(
1170
+ this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true,
1171
+ () => encodeChannelPublishEnvelopeParts(
1172
+ channelName,
1173
+ topic,
1174
+ packetName,
1175
+ event,
1176
+ undefined,
1177
+ this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true,
1178
+ metadata
1179
+ )
1180
+ );
1181
+ const processing = publisher.publishAsync(
1182
+ channelName,
1183
+ topic,
1184
+ parts,
1185
+ undefined,
1186
+ undefined
1187
+ );
1188
+ void Promise.resolve(processing).catch(() => undefined);
1189
+ return Promise.resolve({ status: ZLinkSubmitStatus.Submitted });
1190
+ } finally {
1191
+ this.releasePublishSlot(meshName);
1192
+ }
1193
+ }
1194
+
1195
+ tryPublish(
1196
+ meshName: string,
1197
+ channelName: string,
1198
+ topic: string,
1199
+ packetName: string | undefined,
1200
+ event: Message,
1201
+ metadata: ReadonlyMap<string, string> = EMPTY_SPOT_METADATA
1202
+ ): ZLinkSubmitResult {
1203
+ return this.publishWithFlags(meshName, channelName, topic, packetName, event, ZLINK_SEND_DONT_WAIT, metadata);
1204
+ }
1205
+
1206
+ private publishWithFlags(
1207
+ meshName: string,
1208
+ channelName: string,
1209
+ topic: string,
1210
+ packetName: string | undefined,
1211
+ event: Message,
1212
+ flags: number,
1213
+ metadata: ReadonlyMap<string, string>
1214
+ ): ZLinkSubmitResult {
1215
+ if (this.disposed) {
1216
+ throw runtimeShutdownError();
1217
+ }
1218
+ const publisher = this.publishers.get(meshName);
1219
+ if (publisher === undefined) {
1220
+ throw new ZLinkConfigurationException(`RouteMesh '${meshName}' publisher is not started.`);
1221
+ }
1222
+ const parts = runWithOutboundFlow(
1223
+ this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true,
1224
+ () => encodeChannelPublishEnvelopeParts(
1225
+ channelName,
1226
+ topic,
1227
+ packetName,
1228
+ event,
1229
+ undefined,
1230
+ this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true,
1231
+ metadata
1232
+ )
1233
+ );
1234
+ try {
1235
+ publisher.publish(channelName, topic, parts, { flags });
1236
+ return { status: ZLinkSubmitStatus.Submitted };
1237
+ } catch (error) {
1238
+ if (isZLinkBackendResultError(error) && error.operation === 'submit') {
1239
+ return { status: mapPublishSubmitStatus(error.result) };
1240
+ }
1241
+ throw error;
1242
+ }
1243
+ }
1244
+
1245
+ private acquirePublishSlot(
1246
+ meshName: string,
1247
+ timeoutMs: number,
1248
+ signal?: AbortSignal
1249
+ ): boolean | Promise<boolean> {
1250
+ if (!this.activePublishes.has(meshName)) {
1251
+ this.activePublishes.add(meshName);
1252
+ return true;
1253
+ }
1254
+ const waiterCapacity = Math.max(
1255
+ 1,
1256
+ this.options.registration.spotNodes
1257
+ .get(meshName)?.publisherConfig?.sendHighWaterMark ?? 1
1258
+ );
1259
+ const queue = this.publishSlotWaiters.get(meshName) ?? {
1260
+ waiters: [],
1261
+ head: 0,
1262
+ count: 0
1263
+ };
1264
+ if (queue.count >= waiterCapacity) {
1265
+ // This call has no bounded executor-admission token. Fail without
1266
+ // retaining its payload in a pending work queue.
1267
+ return false;
1268
+ }
1269
+ return new Promise<boolean>((resolve, reject) => {
1270
+ const waiter: ZLinkPublishSlotWaiter = {
1271
+ resolve,
1272
+ reject,
1273
+ signal,
1274
+ settled: false
1275
+ };
1276
+ if (timeoutMs !== -1) {
1277
+ waiter.deadlineMs = performance.now() + Math.max(0, timeoutMs);
1278
+ }
1279
+ queue.waiters.push(waiter);
1280
+ queue.count += 1;
1281
+ this.publishSlotWaiters.set(meshName, queue);
1282
+ if (timeoutMs !== -1) {
1283
+ waiter.timeout = setTimeout(() => this.settlePublishSlotWaiter(
1284
+ meshName,
1285
+ waiter,
1286
+ false
1287
+ ), Math.max(0, timeoutMs));
1288
+ }
1289
+ if (signal !== undefined) {
1290
+ waiter.abortHandler = () => this.rejectPublishSlotWaiter(
1291
+ meshName,
1292
+ waiter,
1293
+ signal.reason ?? createAbortError()
1294
+ );
1295
+ signal.addEventListener('abort', waiter.abortHandler, { once: true });
1296
+ }
1297
+ });
1298
+ }
1299
+
1300
+ private publishTimedOut(): ZLinkSubmitResult {
1301
+ return { status: ZLinkSubmitStatus.TimedOut };
1302
+ }
1303
+
1304
+ private releasePublishSlot(meshName: string): void {
1305
+ const queue = this.publishSlotWaiters.get(meshName);
1306
+ while (queue !== undefined && queue.count > 0) {
1307
+ const waiter = this.takePublishSlotWaiter(queue);
1308
+ if (waiter === undefined) continue;
1309
+ if (waiter.settled) continue;
1310
+ if (waiter.deadlineMs !== undefined && performance.now() >= waiter.deadlineMs) {
1311
+ this.cleanupPublishSlotWaiter(waiter);
1312
+ waiter.settled = true;
1313
+ waiter.resolve(false);
1314
+ continue;
1315
+ }
1316
+ this.cleanupPublishSlotWaiter(waiter);
1317
+ waiter.settled = true;
1318
+ waiter.resolve(true);
1319
+ if (queue.count === 0) this.publishSlotWaiters.delete(meshName);
1320
+ return;
1321
+ }
1322
+ this.publishSlotWaiters.delete(meshName);
1323
+ this.activePublishes.delete(meshName);
1324
+ }
1325
+
1326
+ private settlePublishSlotWaiter(
1327
+ meshName: string,
1328
+ waiter: ZLinkPublishSlotWaiter,
1329
+ acquired: boolean
1330
+ ): void {
1331
+ if (waiter.settled) return;
1332
+ waiter.settled = true;
1333
+ this.removePublishSlotWaiter(meshName, waiter);
1334
+ this.cleanupPublishSlotWaiter(waiter);
1335
+ waiter.resolve(acquired);
1336
+ }
1337
+
1338
+ private rejectPublishSlotWaiter(
1339
+ meshName: string,
1340
+ waiter: ZLinkPublishSlotWaiter,
1341
+ error: unknown
1342
+ ): void {
1343
+ if (waiter.settled) return;
1344
+ waiter.settled = true;
1345
+ this.removePublishSlotWaiter(meshName, waiter);
1346
+ this.cleanupPublishSlotWaiter(waiter);
1347
+ waiter.reject(error);
1348
+ }
1349
+
1350
+ private removePublishSlotWaiter(meshName: string, waiter: ZLinkPublishSlotWaiter): void {
1351
+ const queue = this.publishSlotWaiters.get(meshName);
1352
+ if (queue === undefined) return;
1353
+ const index = queue.waiters.indexOf(waiter, queue.head);
1354
+ if (index >= 0) {
1355
+ queue.waiters[index] = undefined;
1356
+ queue.count -= 1;
1357
+ this.compactPublishSlotWaiters(queue);
1358
+ }
1359
+ if (queue.count === 0) this.publishSlotWaiters.delete(meshName);
1360
+ }
1361
+
1362
+ private cleanupPublishSlotWaiter(waiter: ZLinkPublishSlotWaiter): void {
1363
+ if (waiter.timeout !== undefined) clearTimeout(waiter.timeout);
1364
+ if (waiter.abortHandler !== undefined) {
1365
+ waiter.signal?.removeEventListener('abort', waiter.abortHandler);
1366
+ }
1367
+ }
1368
+
1369
+ private rejectPublishSlotWaiters(error: unknown): void {
1370
+ for (const [meshName, queue] of this.publishSlotWaiters) {
1371
+ let waiter: ZLinkPublishSlotWaiter | undefined;
1372
+ while ((waiter = this.takePublishSlotWaiter(queue)) !== undefined) {
1373
+ this.rejectPublishSlotWaiter(meshName, waiter, error);
1374
+ }
1375
+ this.publishSlotWaiters.delete(meshName);
1376
+ }
1377
+ this.activePublishes.clear();
1378
+ }
1379
+
1380
+ private takePublishSlotWaiter(queue: ZLinkPublishSlotQueue): ZLinkPublishSlotWaiter | undefined {
1381
+ while (queue.head < queue.waiters.length && queue.waiters[queue.head] === undefined) {
1382
+ queue.head += 1;
1383
+ }
1384
+ const waiter = queue.waiters[queue.head];
1385
+ if (waiter === undefined) return undefined;
1386
+ queue.waiters[queue.head] = undefined;
1387
+ queue.head += 1;
1388
+ queue.count -= 1;
1389
+ this.compactPublishSlotWaiters(queue);
1390
+ return waiter;
1391
+ }
1392
+
1393
+ private compactPublishSlotWaiters(queue: ZLinkPublishSlotQueue): void {
1394
+ if (queue.count === 0) {
1395
+ queue.waiters.length = 0;
1396
+ queue.head = 0;
1397
+ } else if (queue.head >= 1024 && queue.head * 2 >= queue.waiters.length) {
1398
+ queue.waiters.splice(0, queue.head);
1399
+ queue.head = 0;
1400
+ }
1401
+ }
1402
+ }
1403
+
1404
+ function runtimeShutdownError(): ZLinkFrameworkException {
1405
+ return createInternalFrameworkException(
1406
+ ZLinkFrameworkInternalErrorKind.RuntimeShutdown,
1407
+ 'SPOT publisher runtime is shutting down.'
1408
+ );
1409
+ }
1410
+
1411
+ export function createFrameworkEntrySpotId(prefix: string): string {
1412
+ if (!/^[A-Za-z0-9._-]{1,64}$/.test(prefix)) {
1413
+ throw new ZLinkConfigurationException(
1414
+ 'Entry Spot diagnostic prefix must contain 1..64 ASCII letters, digits, dot, underscore, or hyphen.'
1415
+ );
1416
+ }
1417
+ return `${prefix}-entry-${randomUUID()}`;
1418
+ }
1419
+
1420
+ function resolveChannelMeshName(
1421
+ registration: ZLinkFrameworkRegistration,
1422
+ channelName: string
1423
+ ): string | undefined {
1424
+ const matches = [...registration.spotNodes.entries()]
1425
+ .filter(([, node]) => Object.prototype.hasOwnProperty.call(node.meshChannels ?? {}, channelName))
1426
+ .map(([meshName]) => meshName);
1427
+ return matches.length === 1 ? matches[0] : undefined;
1428
+ }
1429
+
1430
+ function mapPublishSubmitStatus(result: number): ZLinkSubmitStatus {
1431
+ switch (result) {
1432
+ case SubmitResult.Ok:
1433
+ return ZLinkSubmitStatus.Submitted;
1434
+ case SubmitResult.Backpressured:
1435
+ case SubmitResult.NotAdmitted:
1436
+ return ZLinkSubmitStatus.Backpressured;
1437
+ case SubmitResult.NotFound:
1438
+ // A publish with no matching subscriber is a successful zero-recipient
1439
+ // operation, not an operation-specific not-found failure.
1440
+ return ZLinkSubmitStatus.Submitted;
1441
+ case SubmitResult.NotConnected:
1442
+ return ZLinkSubmitStatus.RouteNotConnected;
1443
+ case SubmitResult.Terminated:
1444
+ case SubmitResult.InvalidHandle:
1445
+ return ZLinkSubmitStatus.Shutdown;
1446
+ default:
1447
+ throw new ZLinkConfigurationException(`Logical Multicast failed with submit result '${result}'.`);
1448
+ }
1449
+ }
1450
+
1451
+ function requireEntrySpotReply(result: number): void {
1452
+ if (result !== SubmitResult.Ok) {
1453
+ throw new ZLinkConfigurationException(
1454
+ `MeshNode Entry Spot reply was not accepted (submit result ${result}).`
1455
+ );
1456
+ }
1457
+ }
1458
+
1459
+ function requirePublicRuntimeWeight(value: number, label: string): number {
1460
+ if (!Number.isInteger(value) || value < 0 || value > 10_000) {
1461
+ throw new ZLinkConfigurationException(
1462
+ `${label} must be an integer in 0..10000.`
1463
+ );
1464
+ }
1465
+ return value;
1466
+ }
1467
+
1468
+ interface DescriptorFactoryRegistration {
1469
+ readonly options?: {
1470
+ readonly stableTypeLimit?: number;
1471
+ };
1472
+ readonly relocation?: {
1473
+ readonly kind: 'disabled' | 'recreate' | 'snapshot';
1474
+ };
1475
+ }
1476
+
1477
+ function effectiveUserSpotRegistrations(
1478
+ registration: ZLinkSpotNodeOptions
1479
+ ): Array<[string, DescriptorFactoryRegistration]> {
1480
+ const registrations = new Map<string, DescriptorFactoryRegistration>(
1481
+ Object.entries(registration.spotFactoryRegistrations ?? {})
1482
+ );
1483
+ const explicitImplementations = new Set(
1484
+ Object.values(registration.spotFactoryRegistrations ?? {})
1485
+ .map(({ implementation }) => implementation)
1486
+ );
1487
+ for (const implementation of registration.spotFactories ?? []) {
1488
+ // `spotFactories` is also retained as the runtime implementation set.
1489
+ // When the caller supplied an explicit stable type, the implementation
1490
+ // must not be projected a second time under its JavaScript class name.
1491
+ // That legacy alias advertises a different public placement type and can
1492
+ // make location routing disagree with the configured factory.
1493
+ if (!explicitImplementations.has(implementation) && !registrations.has(implementation.name)) {
1494
+ registrations.set(implementation.name, {});
1495
+ }
1496
+ }
1497
+ return [...registrations];
1498
+ }
1499
+
1500
+ function effectiveInstanceSpotRegistrations(
1501
+ registration: ZLinkSpotNodeOptions
1502
+ ): Array<[string, DescriptorFactoryRegistration]> {
1503
+ const registrations = new Map<string, DescriptorFactoryRegistration>(
1504
+ Object.entries(registration.instanceSpotFactoryRegistrations ?? {})
1505
+ );
1506
+ for (const stableType of Object.keys(registration.instanceSpotFactories ?? {})) {
1507
+ if (!registrations.has(stableType)) registrations.set(stableType, {});
1508
+ }
1509
+ return [...registrations];
1510
+ }
1511
+
1512
+ function effectiveActorRegistrations(
1513
+ registration: ZLinkSpotNodeOptions
1514
+ ): Array<[string, DescriptorFactoryRegistration]> {
1515
+ const registrations = new Map<string, DescriptorFactoryRegistration>(
1516
+ Object.entries(registration.actorFactoryRegistrations ?? {})
1517
+ );
1518
+ const legacy = registration.actorFactories instanceof Map
1519
+ ? registration.actorFactories.keys()
1520
+ : Object.keys(registration.actorFactories ?? {});
1521
+ for (const stableType of legacy) {
1522
+ if (!registrations.has(stableType)) registrations.set(stableType, {});
1523
+ }
1524
+ return [...registrations];
1525
+ }
1526
+
1527
+ function effectiveObjectRole(
1528
+ registration: ZLinkSpotNodeOptions
1529
+ ): ZLinkObjectRole {
1530
+ if (registration.objectRole === 'server') return ZLinkObjectRole.Server;
1531
+ if (registration.objectRole === 'client') return ZLinkObjectRole.Client;
1532
+ return effectiveUserSpotRegistrations(registration).length > 0
1533
+ || effectiveInstanceSpotRegistrations(registration).length > 0
1534
+ || effectiveActorRegistrations(registration).length > 0
1535
+ ? ZLinkObjectRole.Server
1536
+ : ZLinkObjectRole.None;
1537
+ }
1538
+
1539
+ function objectCapability(
1540
+ objectKind: 'actor' | 'user_spot' | 'instance_spot',
1541
+ stableType: string,
1542
+ factory: DescriptorFactoryRegistration
1543
+ ) {
1544
+ const policy = factory.relocation?.kind ?? 'disabled';
1545
+ return {
1546
+ objectKind,
1547
+ stableType,
1548
+ policy,
1549
+ hasSnapshotAdapter: policy === 'snapshot',
1550
+ limit: objectKind === 'actor'
1551
+ ? 0
1552
+ : factory.options?.stableTypeLimit ?? 0
1553
+ };
1554
+ }
1555
+
1556
+ function aggregatePlacementCapacity(actorLimit: number, spotLimit: number): number {
1557
+ const unlimited = 0x7fff_ffff;
1558
+ const actors = actorLimit === 0 ? unlimited : actorLimit;
1559
+ const spots = spotLimit === 0 ? unlimited : spotLimit;
1560
+ return Math.min(unlimited, actors + spots);
1561
+ }
1562
+
1563
+ function maxBigInt(left: bigint, right: bigint): bigint {
1564
+ return left > right ? left : right;
1565
+ }
1566
+
1567
+ function sameOwnerToken(
1568
+ left: ZLinkLocationOwnerToken,
1569
+ right: ZLinkLocationOwnerToken
1570
+ ): boolean {
1571
+ return left.ownerId === right.ownerId
1572
+ && left.leaseGeneration === right.leaseGeneration;
1573
+ }