@zlink-systems/framework 0.29.1 → 0.30.1

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 (322) hide show
  1. package/LICENSE +150 -68
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/contracts/Actors/ZLinkActorClient.d.ts +2 -1
  4. package/dist/contracts/Channels/Calls.d.ts +2 -1
  5. package/dist/contracts/Common/ZLinkMessageMetadata.js +11 -5
  6. package/dist/contracts/Configuration/Builders.d.ts +1 -2
  7. package/dist/contracts/Configuration/Configs.d.ts +0 -5
  8. package/dist/contracts/Configuration/RegistrationBuilders.js +6 -4
  9. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -6
  10. package/dist/contracts/Configuration/RegistrationValidators.js +4 -4
  11. package/dist/contracts/Configuration/index.d.ts +1 -1
  12. package/dist/contracts/Handlers/Attributes.d.ts +5 -13
  13. package/dist/contracts/Handlers/Attributes.js +7 -11
  14. package/dist/contracts/Handlers/JsonContract.d.ts +2 -46
  15. package/dist/contracts/Handlers/JsonContract.js +4 -153
  16. package/dist/contracts/Spots/Contracts.d.ts +2 -1
  17. package/dist/internal.d.ts +1 -0
  18. package/dist/internal.js +3 -1
  19. package/dist/nest-integration.d.ts +1 -1
  20. package/dist/nest-integration.js +2 -1
  21. package/dist/runtime/actors/actor-client.d.ts +1 -1
  22. package/dist/runtime/actors/actor-client.js +14 -12
  23. package/dist/runtime/actors/actor-handoff.d.ts +3 -2
  24. package/dist/runtime/actors/actor-handoff.js +15 -7
  25. package/dist/runtime/actors/actor-join-relocation.d.ts +1 -0
  26. package/dist/runtime/actors/actor-local-native-join.js +9 -12
  27. package/dist/runtime/actors/actor-remote-wire.js +15 -0
  28. package/dist/runtime/actors/actor-routed-join-transport.d.ts +6 -2
  29. package/dist/runtime/actors/actor-routed-json-request.d.ts +2 -0
  30. package/dist/runtime/actors/index.d.ts +2 -1
  31. package/dist/runtime/actors/index.js +18 -6
  32. package/dist/runtime/actors/spot-actor-dispatch.js +2 -2
  33. package/dist/runtime/admission.d.ts +1 -1
  34. package/dist/runtime/admission.js +15 -5
  35. package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +9 -9
  36. package/dist/runtime/application-jobs/application-ingress-record-owner.js +45 -23
  37. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +5 -2
  38. package/dist/runtime/application-jobs/application-job-queue-scope.js +41 -21
  39. package/dist/runtime/application-jobs/contracts.d.ts +15 -2
  40. package/dist/runtime/backend/contracts/index.d.ts +27 -27
  41. package/dist/runtime/backend/mesh-completion-table.d.ts +15 -5
  42. package/dist/runtime/backend/mesh-completion-table.js +160 -50
  43. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +3 -0
  44. package/dist/runtime/backend/mesh-dispatch-pump.js +53 -36
  45. package/dist/runtime/backend/node/node-backend-adapter-factory.js +6 -1
  46. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +3 -3
  47. package/dist/runtime/backend/node/node-backend-adapter-support.js +33 -31
  48. package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
  49. package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +5 -2
  50. package/dist/runtime/backend/node/node-mesh-backend-adapter.d.ts +1 -9
  51. package/dist/runtime/backend/node/node-mesh-backend-adapter.js +1 -1
  52. package/dist/runtime/backend/node/node-raw-binding-port.js +50 -25
  53. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +22 -16
  54. package/dist/runtime/backend/node/node-raw-mesh-backend.js +133 -149
  55. package/dist/runtime/backend/node/node-socket-backend-adapter.js +15 -10
  56. package/dist/runtime/backend/raw-binding-port.d.ts +10 -3
  57. package/dist/runtime/backend/runtime-message.d.ts +1 -0
  58. package/dist/runtime/backend/runtime-message.js +5 -0
  59. package/dist/runtime/backend/runtime-values.d.ts +1 -0
  60. package/dist/runtime/backend/runtime-values.js +2 -1
  61. package/dist/runtime/channels/channel-clients.d.ts +1 -0
  62. package/dist/runtime/channels/channel-clients.js +58 -21
  63. package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +3 -2
  64. package/dist/runtime/channels/channel-dispatch-pipeline.js +20 -11
  65. package/dist/runtime/channels/channel-dispatch-services.d.ts +1 -0
  66. package/dist/runtime/channels/channel-dispatch-services.js +45 -0
  67. package/dist/runtime/channels/channel-dispatchers.d.ts +1 -1
  68. package/dist/runtime/channels/channel-dispatchers.js +27 -26
  69. package/dist/runtime/channels/channel-envelope-inspection.d.ts +1 -2
  70. package/dist/runtime/channels/channel-envelope-inspection.js +1 -16
  71. package/dist/runtime/channels/channel-envelope.d.ts +1 -0
  72. package/dist/runtime/channels/channel-envelope.js +83 -8
  73. package/dist/runtime/channels/channel-outbound-operations.d.ts +2 -2
  74. package/dist/runtime/channels/channel-outbound-operations.js +8 -8
  75. package/dist/runtime/channels/channel-receive-loops.js +3 -3
  76. package/dist/runtime/channels/channel-runtime-lifecycle.js +2 -1
  77. package/dist/runtime/channels/channel-runtime-manager.d.ts +6 -6
  78. package/dist/runtime/channels/channel-runtime-manager.js +12 -12
  79. package/dist/runtime/channels/channel-socket-registry.d.ts +10 -3
  80. package/dist/runtime/channels/channel-socket-registry.js +59 -82
  81. package/dist/runtime/channels/channel-transports.d.ts +18 -15
  82. package/dist/runtime/channels/channel-transports.js +48 -31
  83. package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
  84. package/dist/runtime/channels/local-spot-route-transport.js +2 -1
  85. package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +2 -2
  86. package/dist/runtime/channels/router-socket-spot-route-transport.js +4 -4
  87. package/dist/runtime/channels/source-spot-router.d.ts +2 -2
  88. package/dist/runtime/channels/source-spot-router.js +4 -4
  89. package/dist/runtime/channels/spot-node-route-transport.d.ts +2 -2
  90. package/dist/runtime/channels/spot-node-route-transport.js +4 -4
  91. package/dist/runtime/channels/spot-route-bridge-transport.d.ts +2 -2
  92. package/dist/runtime/channels/spot-route-bridge-transport.js +4 -4
  93. package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +5 -4
  94. package/dist/runtime/channels/spot-route-dispatch-strategy.js +18 -18
  95. package/dist/runtime/diagnostics/message-flow.d.ts +1 -0
  96. package/dist/runtime/diagnostics/message-flow.js +3 -3
  97. package/dist/runtime/execution/serial-execution-queue.d.ts +1 -0
  98. package/dist/runtime/execution/serial-execution-queue.js +1 -0
  99. package/dist/runtime/foundation/actor-join-recovery-codec.js +2 -2
  100. package/dist/runtime/foundation/durable-service-request.d.ts +14 -0
  101. package/dist/runtime/foundation/durable-service-request.js +98 -0
  102. package/dist/runtime/foundation/operation-identity.d.ts +1 -0
  103. package/dist/runtime/foundation/operation-identity.js +5 -1
  104. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +37 -6
  105. package/dist/runtime/foundation/raw-service-mesh-runtime.js +473 -220
  106. package/dist/runtime/foundation/service-liveness-registry.d.ts +20 -8
  107. package/dist/runtime/foundation/service-liveness-registry.js +57 -44
  108. package/dist/runtime/foundation/service-mailbox.d.ts +3 -0
  109. package/dist/runtime/foundation/service-mailbox.js +2 -1
  110. package/dist/runtime/foundation/service-relocation-object-owner.d.ts +1 -0
  111. package/dist/runtime/foundation/service-relocation-object-owner.js +1 -0
  112. package/dist/runtime/foundation/service-relocation-runtime.d.ts +2 -0
  113. package/dist/runtime/foundation/service-relocation-runtime.js +13 -1
  114. package/dist/runtime/foundation/service-runtime-contracts.d.ts +2 -0
  115. package/dist/runtime/foundation/service-stateful-runtime.d.ts +10 -9
  116. package/dist/runtime/foundation/service-stateful-runtime.js +78 -126
  117. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +5 -7
  118. package/dist/runtime/foundation/service-stateful-wire-codec.js +43 -61
  119. package/dist/runtime/foundation/service-topology-registry.d.ts +16 -4
  120. package/dist/runtime/foundation/service-topology-registry.js +69 -30
  121. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +3 -3
  122. package/dist/runtime/foundation/service-wire-m6a-codec.js +36 -38
  123. package/dist/runtime/handlers/handler-instance-scope.d.ts +8 -0
  124. package/dist/runtime/handlers/handler-instance-scope.js +54 -11
  125. package/dist/runtime/host/actor-packet-relay.js +7 -7
  126. package/dist/runtime/host/actor-runtime-options-factory.js +2 -2
  127. package/dist/runtime/host/application-job-queue.d.ts +28 -9
  128. package/dist/runtime/host/application-job-queue.js +214 -50
  129. package/dist/runtime/host/entry-actor-runtime.d.ts +1 -0
  130. package/dist/runtime/host/entry-actor-runtime.js +4 -1
  131. package/dist/runtime/host/index.d.ts +7 -1
  132. package/dist/runtime/host/index.js +154 -126
  133. package/dist/runtime/host/instance-activation-authority.d.ts +2 -1
  134. package/dist/runtime/host/instance-activation-authority.js +89 -25
  135. package/dist/runtime/host/remote-bound-session-relay.js +2 -18
  136. package/dist/runtime/host/route-mesh-runtime.js +1 -1
  137. package/dist/runtime/host/service-relocation-control.d.ts +1 -0
  138. package/dist/runtime/host/service-relocation-control.js +10 -4
  139. package/dist/runtime/host/service-relocation-host-runtime.d.ts +6 -8
  140. package/dist/runtime/host/service-relocation-host-runtime.js +215 -243
  141. package/dist/runtime/host/spot-address-transport.d.ts +1 -0
  142. package/dist/runtime/host/spot-address-transport.js +28 -14
  143. package/dist/runtime/host/spot-runtime-options-factory.js +3 -2
  144. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +1 -0
  145. package/dist/runtime/host/user-spot-creation-coordinator.js +1 -0
  146. package/dist/runtime/locations/actor-location-claims.d.ts +2 -2
  147. package/dist/runtime/locations/actor-location-claims.js +34 -19
  148. package/dist/runtime/locations/domain-store-contract.d.ts +2 -2
  149. package/dist/runtime/locations/in-memory-authority-store.d.ts +4 -2
  150. package/dist/runtime/locations/in-memory-authority-store.js +80 -8
  151. package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
  152. package/dist/runtime/locations/in-memory-location-store.js +19 -3
  153. package/dist/runtime/locations/internal-location-contracts.d.ts +3 -0
  154. package/dist/runtime/locations/lifecycle.d.ts +1 -2
  155. package/dist/runtime/locations/lifecycle.js +2 -5
  156. package/dist/runtime/locations/location-store-repository.d.ts +3 -2
  157. package/dist/runtime/locations/location-store-repository.js +165 -22
  158. package/dist/runtime/locations/resolvers.d.ts +2 -1
  159. package/dist/runtime/locations/resolvers.js +10 -1
  160. package/dist/runtime/locations/runtime.d.ts +1 -1
  161. package/dist/runtime/locations/runtime.js +24 -23
  162. package/dist/runtime/messaging/framework-json-v1.d.ts +4 -6
  163. package/dist/runtime/messaging/framework-json-v1.js +38 -294
  164. package/dist/runtime/messaging/packet-name.d.ts +1 -1
  165. package/dist/runtime/messaging/packet-name.js +8 -24
  166. package/dist/runtime/messaging/request-result.d.ts +2 -0
  167. package/dist/runtime/messaging/request-result.js +54 -0
  168. package/dist/runtime/messaging/submission-result.d.ts +2 -1
  169. package/dist/runtime/messaging/submission-result.js +7 -4
  170. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +15 -0
  171. package/dist/runtime/protocol/service_wire_codec.generated.js +144 -0
  172. package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +9 -0
  173. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +14 -1
  174. package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +9 -2
  175. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +33 -19
  176. package/dist/runtime/spots/index.d.ts +7 -3
  177. package/dist/runtime/spots/index.js +23 -16
  178. package/dist/runtime/spots/spot-activation.d.ts +3 -1
  179. package/dist/runtime/spots/spot-activation.js +21 -12
  180. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +2 -1
  181. package/dist/runtime/spots/spot-actor-admission-coordinator.js +11 -10
  182. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +4 -1
  183. package/dist/runtime/spots/spot-actor-packet-dispatch.js +7 -5
  184. package/dist/runtime/spots/spot-actor-packet-drain.js +2 -0
  185. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -0
  186. package/dist/runtime/spots/spot-entry-activation.js +9 -3
  187. package/dist/runtime/spots/spot-handler-registry.d.ts +3 -1
  188. package/dist/runtime/spots/spot-handler-registry.js +18 -8
  189. package/dist/runtime/spots/spot-node-autoconnect.js +4 -3
  190. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +2 -1
  191. package/dist/runtime/spots/spot-node-runtime-manager.js +4 -11
  192. package/dist/runtime/spots/spot-outbound.d.ts +3 -0
  193. package/dist/runtime/spots/spot-outbound.js +24 -15
  194. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +1 -0
  195. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +1 -1
  196. package/dist/runtime/spots/spot-routing-internal.d.ts +6 -0
  197. package/dist/runtime/spots/spot-runtime-ports.d.ts +3 -1
  198. package/dist/runtime/spots/spot-subscription-dispatch.js +0 -3
  199. package/dist/runtime/spots/spot-timer.js +1 -0
  200. package/dist/runtime/streams/stream-session-runtime.d.ts +1 -1
  201. package/dist/runtime/streams/stream-session-runtime.js +14 -28
  202. package/package.json +3 -3
  203. package/src/contracts/Actors/ZLinkActorClient.ts +2 -1
  204. package/src/contracts/Channels/Calls.ts +2 -1
  205. package/src/contracts/Common/ZLinkMessageMetadata.ts +13 -8
  206. package/src/contracts/Configuration/Builders.ts +1 -2
  207. package/src/contracts/Configuration/Configs.ts +0 -6
  208. package/src/contracts/Configuration/RegistrationBuilders.ts +8 -12
  209. package/src/contracts/Configuration/RegistrationTypes.ts +1 -6
  210. package/src/contracts/Configuration/RegistrationValidators.ts +9 -10
  211. package/src/contracts/Configuration/index.ts +1 -6
  212. package/src/contracts/Handlers/Attributes.ts +14 -21
  213. package/src/contracts/Handlers/JsonContract.ts +8 -216
  214. package/src/contracts/Spots/Contracts.ts +2 -1
  215. package/src/internal.ts +1 -0
  216. package/src/nest-integration.ts +1 -0
  217. package/src/runtime/actors/actor-client.ts +40 -16
  218. package/src/runtime/actors/actor-handoff.ts +22 -8
  219. package/src/runtime/actors/actor-join-relocation.ts +1 -0
  220. package/src/runtime/actors/actor-local-native-join.ts +17 -26
  221. package/src/runtime/actors/actor-remote-wire.ts +17 -0
  222. package/src/runtime/actors/actor-routed-join-transport.ts +14 -4
  223. package/src/runtime/actors/actor-routed-json-request.ts +10 -2
  224. package/src/runtime/actors/index.ts +19 -5
  225. package/src/runtime/actors/spot-actor-dispatch.ts +4 -2
  226. package/src/runtime/admission.ts +18 -5
  227. package/src/runtime/application-jobs/application-ingress-record-owner.ts +53 -27
  228. package/src/runtime/application-jobs/application-job-queue-scope.ts +56 -22
  229. package/src/runtime/application-jobs/contracts.ts +28 -2
  230. package/src/runtime/backend/contracts/index.ts +63 -32
  231. package/src/runtime/backend/mesh-completion-table.ts +175 -59
  232. package/src/runtime/backend/mesh-dispatch-pump.ts +59 -32
  233. package/src/runtime/backend/node/node-backend-adapter-factory.ts +12 -5
  234. package/src/runtime/backend/node/node-backend-adapter-support.ts +42 -31
  235. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +12 -2
  236. package/src/runtime/backend/node/node-mesh-backend-adapter.ts +3 -10
  237. package/src/runtime/backend/node/node-raw-binding-port.ts +73 -37
  238. package/src/runtime/backend/node/node-raw-mesh-backend.ts +209 -176
  239. package/src/runtime/backend/node/node-socket-backend-adapter.ts +32 -13
  240. package/src/runtime/backend/raw-binding-port.ts +18 -3
  241. package/src/runtime/backend/runtime-message.ts +6 -0
  242. package/src/runtime/backend/runtime-values.ts +1 -0
  243. package/src/runtime/channels/channel-clients.ts +90 -41
  244. package/src/runtime/channels/channel-dispatch-pipeline.ts +69 -34
  245. package/src/runtime/channels/channel-dispatch-services.ts +69 -1
  246. package/src/runtime/channels/channel-dispatchers.ts +29 -27
  247. package/src/runtime/channels/channel-envelope-inspection.ts +2 -16
  248. package/src/runtime/channels/channel-envelope.ts +133 -8
  249. package/src/runtime/channels/channel-outbound-operations.ts +22 -8
  250. package/src/runtime/channels/channel-receive-loops.ts +3 -3
  251. package/src/runtime/channels/channel-runtime-lifecycle.ts +7 -1
  252. package/src/runtime/channels/channel-runtime-manager.ts +29 -12
  253. package/src/runtime/channels/channel-socket-registry.ts +84 -130
  254. package/src/runtime/channels/channel-transports.ts +128 -60
  255. package/src/runtime/channels/local-spot-route-transport.ts +3 -1
  256. package/src/runtime/channels/router-socket-spot-route-transport.ts +13 -4
  257. package/src/runtime/channels/source-spot-router.ts +8 -4
  258. package/src/runtime/channels/spot-node-route-transport.ts +8 -4
  259. package/src/runtime/channels/spot-route-bridge-transport.ts +6 -4
  260. package/src/runtime/channels/spot-route-dispatch-strategy.ts +47 -18
  261. package/src/runtime/diagnostics/message-flow.ts +1 -1
  262. package/src/runtime/execution/serial-execution-queue.ts +2 -0
  263. package/src/runtime/foundation/actor-join-recovery-codec.ts +2 -2
  264. package/src/runtime/foundation/durable-service-request.ts +137 -0
  265. package/src/runtime/foundation/operation-identity.ts +5 -1
  266. package/src/runtime/foundation/raw-service-mesh-runtime.ts +642 -253
  267. package/src/runtime/foundation/service-liveness-registry.ts +68 -59
  268. package/src/runtime/foundation/service-mailbox.ts +7 -1
  269. package/src/runtime/foundation/service-relocation-object-owner.ts +2 -0
  270. package/src/runtime/foundation/service-relocation-runtime.ts +18 -1
  271. package/src/runtime/foundation/service-runtime-contracts.ts +7 -1
  272. package/src/runtime/foundation/service-stateful-runtime.ts +128 -160
  273. package/src/runtime/foundation/service-stateful-wire-codec.ts +55 -84
  274. package/src/runtime/foundation/service-topology-registry.ts +103 -42
  275. package/src/runtime/foundation/service-wire-m6a-codec.ts +57 -38
  276. package/src/runtime/handlers/handler-instance-scope.ts +67 -16
  277. package/src/runtime/host/actor-packet-relay.ts +7 -0
  278. package/src/runtime/host/actor-runtime-options-factory.ts +14 -2
  279. package/src/runtime/host/application-job-queue.ts +249 -48
  280. package/src/runtime/host/entry-actor-runtime.ts +5 -0
  281. package/src/runtime/host/index.ts +224 -160
  282. package/src/runtime/host/instance-activation-authority.ts +132 -27
  283. package/src/runtime/host/remote-bound-session-relay.ts +2 -23
  284. package/src/runtime/host/route-mesh-runtime.ts +1 -1
  285. package/src/runtime/host/service-relocation-control.ts +11 -5
  286. package/src/runtime/host/service-relocation-host-runtime.ts +317 -291
  287. package/src/runtime/host/spot-address-transport.ts +49 -24
  288. package/src/runtime/host/spot-runtime-options-factory.ts +4 -0
  289. package/src/runtime/host/user-spot-creation-coordinator.ts +8 -0
  290. package/src/runtime/locations/actor-location-claims.ts +52 -30
  291. package/src/runtime/locations/domain-store-contract.ts +6 -2
  292. package/src/runtime/locations/in-memory-authority-store.ts +113 -9
  293. package/src/runtime/locations/in-memory-location-store.ts +25 -3
  294. package/src/runtime/locations/internal-location-contracts.ts +4 -0
  295. package/src/runtime/locations/lifecycle.ts +8 -26
  296. package/src/runtime/locations/location-store-repository.ts +220 -15
  297. package/src/runtime/locations/resolvers.ts +25 -2
  298. package/src/runtime/locations/runtime.ts +28 -24
  299. package/src/runtime/messaging/framework-json-v1.ts +5 -325
  300. package/src/runtime/messaging/packet-name.ts +5 -25
  301. package/src/runtime/messaging/request-result.ts +58 -0
  302. package/src/runtime/messaging/submission-result.ts +7 -3
  303. package/src/runtime/protocol/service_wire_codec.generated.ts +131 -1
  304. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +4 -4
  305. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +45 -23
  306. package/src/runtime/spots/index.ts +30 -2
  307. package/src/runtime/spots/spot-activation.ts +33 -10
  308. package/src/runtime/spots/spot-actor-admission-coordinator.ts +13 -0
  309. package/src/runtime/spots/spot-actor-packet-dispatch.ts +10 -0
  310. package/src/runtime/spots/spot-actor-packet-drain.ts +2 -0
  311. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +1 -0
  312. package/src/runtime/spots/spot-entry-activation.ts +12 -2
  313. package/src/runtime/spots/spot-handler-registry.ts +41 -8
  314. package/src/runtime/spots/spot-node-autoconnect.ts +6 -2
  315. package/src/runtime/spots/spot-node-runtime-manager.ts +7 -12
  316. package/src/runtime/spots/spot-outbound.ts +36 -16
  317. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +2 -1
  318. package/src/runtime/spots/spot-routing-internal.ts +14 -0
  319. package/src/runtime/spots/spot-runtime-ports.ts +3 -0
  320. package/src/runtime/spots/spot-subscription-dispatch.ts +0 -3
  321. package/src/runtime/spots/spot-timer.ts +5 -1
  322. package/src/runtime/streams/stream-session-runtime.ts +13 -30
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ApplicationJobQueue = exports.ApplicationJobQueuePermit = void 0;
4
4
  exports.resolveApplicationJobQueueConfiguration = resolveApplicationJobQueueConfiguration;
5
5
  exports.nodeEffectiveProcessorCount = nodeEffectiveProcessorCount;
6
+ const api_logs_1 = require("@opentelemetry/api-logs");
7
+ const message_flow_1 = require("../diagnostics/message-flow");
6
8
  const runtime_metrics_1 = require("../diagnostics/runtime-metrics");
7
9
  const Dispatch_1 = require("../../contracts/Dispatch");
8
10
  const Registration_1 = require("../../contracts/Configuration/Registration");
@@ -50,9 +52,32 @@ function resolveApplicationJobQueueConfiguration(options = {}, effectiveProcesso
50
52
  }
51
53
  class ApplicationJobQueuePermit {
52
54
  owner;
53
- state = 'reserved';
54
- constructor(owner) {
55
+ origin;
56
+ reusable;
57
+ detachedForHandlerTurn = false;
58
+ state;
59
+ constructor(owner, origin, reusable = false) {
55
60
  this.owner = owner;
61
+ this.origin = origin;
62
+ this.reusable = reusable;
63
+ this.state = reusable ? 'idle' : 'reserved';
64
+ }
65
+ reserveStorage() {
66
+ if (this.state !== 'idle')
67
+ return false;
68
+ this.state = 'reserved';
69
+ this.detachedForHandlerTurn = false;
70
+ return true;
71
+ }
72
+ releaseStorage() {
73
+ if (!this.reusable || this.state === 'idle')
74
+ return;
75
+ if (this.state !== 'released')
76
+ throw new Error('Reservation storage still owns queue capacity.');
77
+ this.state = 'idle';
78
+ }
79
+ detachForHandlerTurn() {
80
+ this.detachedForHandlerTurn = true;
56
81
  }
57
82
  markApplicationQueued() {
58
83
  if (this.state !== 'reserved') {
@@ -64,19 +89,75 @@ class ApplicationJobQueuePermit {
64
89
  releaseBeforeHandler() {
65
90
  if (this.owner.shouldHoldPermitBeforeHandler())
66
91
  return;
67
- this.release();
92
+ this.owner.releasePermit(this);
68
93
  }
69
94
  releaseAfterInternalProcessing() {
70
- this.release();
95
+ this.owner.releasePermit(this);
71
96
  }
72
- release() {
73
- if (this.state === 'released')
74
- return;
75
- this.owner.release(this.state);
97
+ takeReleaseState() {
98
+ if (this.state === 'released' || this.state === 'idle')
99
+ return undefined;
100
+ const state = this.state;
76
101
  this.state = 'released';
102
+ return state;
77
103
  }
78
104
  }
79
105
  exports.ApplicationJobQueuePermit = ApplicationJobQueuePermit;
106
+ /** Connection-owned storage; queue accounting remains with the host queue. */
107
+ class ApplicationJobReceiveRotation {
108
+ owner;
109
+ capacity;
110
+ origin;
111
+ storage = [];
112
+ grants;
113
+ granted = 0;
114
+ consumed = 0;
115
+ constructor(owner, capacity, origin) {
116
+ this.owner = owner;
117
+ this.capacity = capacity;
118
+ this.origin = origin;
119
+ this.grants = new Array(capacity);
120
+ this.prepareStorage();
121
+ }
122
+ prepareStorage() {
123
+ for (let index = 0; index < this.capacity; index++)
124
+ this.storage.push(new ApplicationJobQueuePermit(this.owner, this.origin, true));
125
+ }
126
+ reserve() {
127
+ this.releaseUnused();
128
+ const count = this.owner.receiveRotationCapacity(this.capacity);
129
+ if (count === 0)
130
+ return;
131
+ for (let index = 0; index < this.storage.length; index++) {
132
+ const permit = this.storage[index];
133
+ if (permit.reserveStorage())
134
+ this.grants[this.granted++] = permit;
135
+ if (this.granted === count)
136
+ break;
137
+ }
138
+ if (this.granted < count) {
139
+ const start = this.storage.length;
140
+ this.prepareStorage();
141
+ for (let index = start; this.granted < count; index++) {
142
+ const permit = this.storage[index];
143
+ permit.reserveStorage();
144
+ this.grants[this.granted++] = permit;
145
+ }
146
+ }
147
+ this.owner.reserveReceiveRotation(count);
148
+ }
149
+ take() {
150
+ if (this.consumed === this.granted)
151
+ return undefined;
152
+ return this.grants[this.consumed++];
153
+ }
154
+ releaseUnused() {
155
+ this.owner.releaseUnusedReceiveRotation(this.grants, this.consumed, this.granted);
156
+ // Keep the prepared grant slots and reset only the logical count.
157
+ this.granted = 0;
158
+ this.consumed = 0;
159
+ }
160
+ }
80
161
  /**
81
162
  * Host-instance owner of the ordinary-ingress queue permit lifecycle.
82
163
  * It reserves capacity before receive/claim and transfers released capacity
@@ -86,9 +167,14 @@ class ApplicationJobQueue {
86
167
  configuration;
87
168
  nowMs;
88
169
  handlerStartGate;
89
- reservedSupplyPermits = 0n;
90
- queuedApplicationJobs = 0n;
91
- peakPermitsInUse = 0n;
170
+ loggerFailureReporter;
171
+ localWaiters = 0;
172
+ localBacklogLogged = false;
173
+ // The contract bounds capacity by INT32_MAX; public snapshots remain bigint.
174
+ permitCounts = new Uint32Array(3 /* QueuePermitCount.Size */);
175
+ limitCount;
176
+ pauseCount;
177
+ resumeCount;
92
178
  capacityWaitCount = 0n;
93
179
  capacityWaitDurationSeconds = 0;
94
180
  metricsEpoch = 0n;
@@ -104,15 +190,32 @@ class ApplicationJobQueue {
104
190
  waiters = [];
105
191
  receiveFlowTargets = new Map();
106
192
  receiveFlowController;
107
- constructor(configuration, nowMs = () => performance.now(), handlerStartGate) {
193
+ constructor(configuration, nowMs = () => performance.now(), handlerStartGate, loggerFailureReporter) {
108
194
  this.configuration = configuration;
109
195
  this.nowMs = nowMs;
110
196
  this.handlerStartGate = handlerStartGate;
197
+ this.loggerFailureReporter = loggerFailureReporter;
198
+ this.limitCount = Number(configuration.effectiveMaxQueuedApplicationJobs);
199
+ this.pauseCount = Number(configuration.pausePermitCount);
200
+ this.resumeCount = Number(configuration.resumePermitCount);
111
201
  this.receiveFlowController = new receive_flow_controller_1.ApplicationJobReceiveFlowController(this, (state) => state);
112
202
  }
113
203
  shouldHoldPermitBeforeHandler() {
114
204
  return this.handlerStartGate?.() === true;
115
205
  }
206
+ createReceiveRotation(capacity, origin) {
207
+ if (!Number.isSafeInteger(capacity) || capacity < 1)
208
+ throw new RangeError('Receive capacity must be positive.');
209
+ return new ApplicationJobReceiveRotation(this, capacity, origin);
210
+ }
211
+ receiveRotationCapacity(capacity) {
212
+ if (this.waiters.length !== 0)
213
+ return 0;
214
+ return Math.min(capacity, this.limitCount - this.permitsInUse());
215
+ }
216
+ reserveReceiveRotation(count) {
217
+ this.reserveSupply(count);
218
+ }
116
219
  registerReceiveFlowTarget(identity, applyState, failureSink) {
117
220
  this.unregisterReceiveFlowTarget(identity);
118
221
  const target = {
@@ -153,15 +256,24 @@ class ApplicationJobQueue {
153
256
  this.receiveFlowTargets.delete(identity);
154
257
  this.receiveFlowController.unregister(target);
155
258
  }
156
- acquire(signal) {
259
+ acquire(signal, origin) {
260
+ return new Promise((resolve, reject) => {
261
+ const permit = this.acquireOrResume(resolve, reject, signal, origin);
262
+ if (permit !== undefined)
263
+ resolve(permit);
264
+ });
265
+ }
266
+ acquireOrResume(resume, reject, signal, origin) {
157
267
  if (signal?.aborted === true) {
158
- return Promise.reject(abortReason(signal));
268
+ reject(abortReason(signal));
269
+ return undefined;
159
270
  }
160
- if (this.waiters.length === 0 && this.permitsInUse() < this.limit()) {
161
- return Promise.resolve(this.reserve());
271
+ if (this.waiters.length === 0 && this.permitsInUse() < this.limitCount) {
272
+ return this.reserve(origin);
162
273
  }
163
- return new Promise((resolve, reject) => {
274
+ new Promise((resolve, reject) => {
164
275
  const waiter = {
276
+ origin,
165
277
  resolve,
166
278
  reject,
167
279
  signal,
@@ -172,19 +284,25 @@ class ApplicationJobQueue {
172
284
  };
173
285
  this.waiters.push(waiter);
174
286
  this.capacityWaitCount += 1n;
287
+ const warningCount = this.updateLocalWaiters(origin, 1);
175
288
  signal?.addEventListener('abort', waiter.abort, { once: true });
176
289
  this.drainWaiters();
177
- });
290
+ if (warningCount !== undefined)
291
+ this.logLocalBacklog(warningCount);
292
+ })
293
+ .then(resume)
294
+ .catch(reject);
295
+ return undefined;
178
296
  }
179
297
  snapshot() {
180
298
  const permitsInUse = this.permitsInUse();
181
299
  const now = this.nowMs();
182
300
  return Object.freeze({
183
301
  ...this.configuration,
184
- reservedSupplyPermits: this.reservedSupplyPermits,
185
- queuedApplicationJobs: this.queuedApplicationJobs,
186
- permitsInUse,
187
- peakPermitsInUse: this.peakPermitsInUse,
302
+ reservedSupplyPermits: BigInt(this.permitCounts[0 /* QueuePermitCount.Reserved */]),
303
+ queuedApplicationJobs: BigInt(this.permitCounts[1 /* QueuePermitCount.Queued */]),
304
+ permitsInUse: BigInt(permitsInUse),
305
+ peakPermitsInUse: BigInt(this.permitCounts[2 /* QueuePermitCount.Peak */]),
188
306
  capacityWaiters: BigInt(this.waiters.length),
189
307
  capacityWaitCount: this.capacityWaitCount,
190
308
  capacityWaitDurationSeconds: this.capacityWaitDurationSeconds,
@@ -198,7 +316,7 @@ class ApplicationJobQueue {
198
316
  }
199
317
  resetMetrics() {
200
318
  this.metricsEpoch += 1n;
201
- this.peakPermitsInUse = this.permitsInUse();
319
+ this.permitCounts[2 /* QueuePermitCount.Peak */] = this.permitsInUse();
202
320
  this.capacityWaitCount = 0n;
203
321
  this.capacityWaitDurationSeconds = 0;
204
322
  this.runningTransitionCount = 0n;
@@ -225,25 +343,37 @@ class ApplicationJobQueue {
225
343
  this.flowStateConfigFailureCount += 1n;
226
344
  }
227
345
  markQueued() {
228
- if (this.reservedSupplyPermits === 0n) {
346
+ if (this.permitCounts[0 /* QueuePermitCount.Reserved */] === 0) {
229
347
  throw new Error('Application job queue has no reserved supply permit.');
230
348
  }
231
- this.reservedSupplyPermits -= 1n;
232
- this.queuedApplicationJobs += 1n;
233
- }
234
- release(state) {
235
- if (state === 'reserved') {
236
- if (this.reservedSupplyPermits === 0n) {
237
- throw new Error('Application job queue reserved permit accounting underflow.');
238
- }
239
- this.reservedSupplyPermits -= 1n;
349
+ this.permitCounts[0 /* QueuePermitCount.Reserved */] =
350
+ this.permitCounts[0 /* QueuePermitCount.Reserved */] - 1;
351
+ this.permitCounts[1 /* QueuePermitCount.Queued */] = this.permitCounts[1 /* QueuePermitCount.Queued */] + 1;
352
+ }
353
+ releasePermit(permit) {
354
+ const state = permit.takeReleaseState();
355
+ if (state !== undefined)
356
+ this.release(state);
357
+ }
358
+ releaseUnusedReceiveRotation(grants, consumed, granted) {
359
+ const count = granted - consumed;
360
+ if (count === 0)
361
+ return;
362
+ // Unconsumed grants still belong to this receive round; no record has acquired them.
363
+ for (let index = consumed; index < granted; index++) {
364
+ const permit = grants[index];
365
+ permit.takeReleaseState();
366
+ permit.releaseStorage();
240
367
  }
241
- else {
242
- if (this.queuedApplicationJobs === 0n) {
243
- throw new Error('Application job queue queued permit accounting underflow.');
244
- }
245
- this.queuedApplicationJobs -= 1n;
368
+ this.release('reserved', count);
369
+ }
370
+ release(state, count = 1) {
371
+ const index = state === 'reserved' ? 0 /* QueuePermitCount.Reserved */ : 1 /* QueuePermitCount.Queued */;
372
+ const available = this.permitCounts[index];
373
+ if (available < count) {
374
+ throw new Error(`Application job queue ${state} permit accounting underflow.`);
246
375
  }
376
+ this.permitCounts[index] = available - count;
247
377
  this.drainWaiters();
248
378
  this.evaluatePressure();
249
379
  }
@@ -251,26 +381,28 @@ class ApplicationJobQueue {
251
381
  return this.configuration.effectiveMaxQueuedApplicationJobs;
252
382
  }
253
383
  permitsInUse() {
254
- return this.reservedSupplyPermits + this.queuedApplicationJobs;
384
+ return (this.permitCounts[0 /* QueuePermitCount.Reserved */] + this.permitCounts[1 /* QueuePermitCount.Queued */]);
255
385
  }
256
- reserve(evaluatePressure = true) {
257
- this.reservedSupplyPermits += 1n;
258
- const current = this.permitsInUse();
259
- if (current > this.peakPermitsInUse)
260
- this.peakPermitsInUse = current;
386
+ reserveSupply(count, evaluatePressure = true) {
387
+ this.permitCounts[0 /* QueuePermitCount.Reserved */] =
388
+ this.permitCounts[0 /* QueuePermitCount.Reserved */] + count;
389
+ this.permitCounts[2 /* QueuePermitCount.Peak */] = Math.max(this.permitCounts[2 /* QueuePermitCount.Peak */], this.permitsInUse());
261
390
  if (evaluatePressure)
262
391
  this.evaluatePressure();
263
- return new ApplicationJobQueuePermit(this);
392
+ }
393
+ reserve(origin, evaluatePressure = true) {
394
+ this.reserveSupply(1, evaluatePressure);
395
+ return new ApplicationJobQueuePermit(this, origin);
264
396
  }
265
397
  drainWaiters() {
266
- while (this.waiters.length > 0 && this.permitsInUse() < this.limit()) {
398
+ while (this.waiters.length > 0 && this.permitsInUse() < this.limitCount) {
267
399
  const waiter = this.waiters.shift();
268
400
  if (!waiter.active)
269
401
  continue;
270
402
  waiter.active = false;
271
403
  waiter.signal?.removeEventListener('abort', waiter.abort);
272
404
  this.recordCompletedWait(waiter);
273
- waiter.resolve(this.reserve(false));
405
+ waiter.resolve(this.reserve(waiter.origin, false));
274
406
  }
275
407
  }
276
408
  cancel(waiter) {
@@ -286,18 +418,50 @@ class ApplicationJobQueue {
286
418
  this.drainWaiters();
287
419
  }
288
420
  recordCompletedWait(waiter) {
421
+ this.updateLocalWaiters(waiter.origin, -1);
289
422
  if (waiter.metricsEpoch !== this.metricsEpoch)
290
423
  return;
291
424
  const durationMs = Math.max(0, this.nowMs() - waiter.startedAtMs);
292
425
  this.capacityWaitDurationSeconds += durationMs / runtime_metrics_1.MILLISECONDS_PER_SECOND;
293
426
  }
427
+ updateLocalWaiters(origin, delta) {
428
+ if (origin !== 'local')
429
+ return undefined;
430
+ this.localWaiters += delta;
431
+ if (this.localWaiters === 0)
432
+ this.localBacklogLogged = false;
433
+ if (!this.localBacklogLogged && this.localWaiters > Number(this.limit())) {
434
+ this.localBacklogLogged = true;
435
+ return this.localWaiters;
436
+ }
437
+ return undefined;
438
+ }
439
+ logLocalBacklog(localWaiters) {
440
+ try {
441
+ message_flow_1.telemetryLogger.emit({
442
+ eventName: 'zlink.runtime.host.local_job_backlog_exceeded',
443
+ timestamp: new Date(),
444
+ severityNumber: api_logs_1.SeverityNumber.WARN,
445
+ severityText: 'WARN',
446
+ body: 'Same-host jobs waiting for a host permit exceeded the application job queue maximum.',
447
+ attributes: {
448
+ source_kind: 'host',
449
+ source_name: 'zlink.runtime.host',
450
+ local_waiters: localWaiters,
451
+ effective_maximum: Number(this.limit())
452
+ }
453
+ });
454
+ }
455
+ catch (error) {
456
+ this.loggerFailureReporter?.(error);
457
+ }
458
+ }
294
459
  evaluatePressure() {
295
- const permitsInUse = this.permitsInUse();
296
460
  const next = this.pressureStateValue === 'running'
297
- ? permitsInUse >= this.configuration.pausePermitCount
461
+ ? this.permitsInUse() >= this.pauseCount
298
462
  ? 'paused'
299
463
  : 'running'
300
- : permitsInUse <= this.configuration.resumePermitCount
464
+ : this.permitsInUse() <= this.resumeCount
301
465
  ? 'running'
302
466
  : 'paused';
303
467
  if (next === this.pressureStateValue)
@@ -20,6 +20,7 @@ export declare class ZLinkEntryActorRuntimeService implements ZLinkEntryActorRun
20
20
  private readonly binder;
21
21
  constructor(options: ZLinkEntryActorRuntimeOptions);
22
22
  resolveActor(actorId: string): ZLinkActor | undefined;
23
+ releaseMembers(meshName: string): Promise<void>;
23
24
  commitActorTransaction(actor: ZLinkActor, onJoined: () => Promise<void>): Promise<void>;
24
25
  destroyActor(node: ZLinkBackendSpotNode, entryNodeRid: ActorRef['nodeRid'], actor: ZLinkActor, signal?: AbortSignal): Promise<void>;
25
26
  routePacket(actorId: string, parts: readonly Message[], returnResponse?: boolean, remoteBoundSessionTarget?: ZLinkRemoteBoundSessionTarget, fallbackActorRef?: ActorRef): Promise<{
@@ -16,6 +16,9 @@ class ZLinkEntryActorRuntimeService {
16
16
  resolveActor(actorId) {
17
17
  return this.options.actorManager()?.getState(actorId)?.actor;
18
18
  }
19
+ async releaseMembers(meshName) {
20
+ await this.options.actorManager()?.releaseSpotActorMembers(meshName);
21
+ }
19
22
  async commitActorTransaction(actor, onJoined) {
20
23
  const state = this.options.actorManager()?.getState(actor.context.actorId);
21
24
  const entryNode = this.options.spotNodeRuntime()?.primaryMeshNode;
@@ -66,7 +69,7 @@ class ZLinkEntryActorRuntimeService {
66
69
  }
67
70
  return {
68
71
  handled: true,
69
- response: await spotManager.dispatchRoutedActorPacket(spotId, actorId, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef)
72
+ response: await spotManager.dispatchRoutedActorPacket('remote', spotId, actorId, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef)
70
73
  };
71
74
  }
72
75
  requireActorManager() {
@@ -30,7 +30,7 @@ export declare class ZLinkFrameworkRuntimeHost implements ZLinkFrameworkRuntimeL
30
30
  private readonly lifecycleSink?;
31
31
  private executionState?;
32
32
  private runtimeState;
33
- private runtimeSequence;
33
+ private runtimeStatus?;
34
34
  private readonly runtimeObservationSource;
35
35
  private runtimeDeadline?;
36
36
  private shutdownDeadline?;
@@ -95,6 +95,7 @@ export declare class ZLinkFrameworkRuntimeHost implements ZLinkFrameworkRuntimeL
95
95
  constructor(options: ZLinkFrameworkRuntimeHostOptions, internalOptions?: unknown);
96
96
  get isStarted(): boolean;
97
97
  get status(): ZLinkFrameworkRuntimeStatus;
98
+ private buildRuntimeStatus;
98
99
  private listenerRecords;
99
100
  getListenerStatus(kind: ZLinkListenerKind, name: string): ZLinkListenerStatus;
100
101
  observe(signal?: AbortSignal): AsyncIterable<ZLinkObservedStatus<ZLinkFrameworkRuntimeStatus>>;
@@ -109,6 +110,7 @@ export declare class ZLinkFrameworkRuntimeHost implements ZLinkFrameworkRuntimeL
109
110
  private recordRelocationResult;
110
111
  private completeTermination;
111
112
  private setRuntimeState;
113
+ private publishCurrentRuntimeStatus;
112
114
  private publishRuntimeStatus;
113
115
  private notifyTopologyHostStateChanged;
114
116
  private stopTopologyObservers;
@@ -163,7 +165,11 @@ export declare class ZLinkFrameworkRuntimeHost implements ZLinkFrameworkRuntimeL
163
165
  private actorRuntimeOptionsFactory;
164
166
  private createChannelRuntimeOptions;
165
167
  private createSpotNodeRuntimeOptions;
168
+ private dispatchMeshNodeRecord;
169
+ private dispatchMeshNodePayload;
170
+ private completeFormalSourceLeave;
166
171
  private dispatchMeshRecord;
172
+ private dispatchMeshActorBinding;
167
173
  private submitLocalMeshRoute;
168
174
  private dispatchMeshSpotRecord;
169
175
  private createDispatchErrorReporter;