@zlink-systems/framework 0.25.0 → 0.27.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 (557) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Channels/IZLinkFanoutClient.d.ts +0 -6
  3. package/dist/contracts/Common/CoreTypes.d.ts +6 -0
  4. package/dist/contracts/Common/CoreTypes.js +7 -0
  5. package/dist/contracts/Common/index.d.ts +1 -1
  6. package/dist/contracts/Common/index.js +0 -1
  7. package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
  8. package/dist/contracts/Configuration/InternalDefaults.js +9 -1
  9. package/dist/contracts/Configuration/Registration.d.ts +13 -2
  10. package/dist/contracts/Configuration/Registration.js +58 -36
  11. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
  12. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
  13. package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
  14. package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
  15. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
  16. package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
  17. package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
  18. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
  19. package/dist/contracts/Handlers/JsonContract.js +10 -4
  20. package/dist/contracts/Locations/Authority.d.ts +1 -1
  21. package/dist/contracts/Locations/Authority.js +3 -2
  22. package/dist/contracts/Locations/Options.js +1 -1
  23. package/dist/contracts/Locations/Stores.d.ts +12 -0
  24. package/dist/contracts/Locations/Stores.js +9 -0
  25. package/dist/contracts/RouteMesh/RuntimeTopology.d.ts +8 -0
  26. package/dist/contracts/Spots/Contracts.d.ts +1 -1
  27. package/dist/internal.d.ts +5 -0
  28. package/dist/internal.js +16 -1
  29. package/dist/nest-integration.d.ts +4 -2
  30. package/dist/nest-integration.js +14 -4
  31. package/dist/runtime/abort.d.ts +1 -0
  32. package/dist/runtime/abort.js +8 -5
  33. package/dist/runtime/activation-admission.d.ts +28 -0
  34. package/dist/runtime/activation-admission.js +57 -0
  35. package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
  36. package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
  37. package/dist/runtime/actors/actor-client.d.ts +2 -2
  38. package/dist/runtime/actors/actor-client.js +42 -143
  39. package/dist/runtime/actors/actor-context.d.ts +3 -5
  40. package/dist/runtime/actors/actor-context.js +19 -17
  41. package/dist/runtime/actors/actor-handoff.d.ts +13 -7
  42. package/dist/runtime/actors/actor-handoff.js +36 -25
  43. package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
  44. package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
  45. package/dist/runtime/actors/actor-local-native-join.js +85 -123
  46. package/dist/runtime/actors/actor-native-lookup.js +2 -8
  47. package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
  48. package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
  49. package/dist/runtime/actors/actor-remote-joiner.d.ts +3 -3
  50. package/dist/runtime/actors/actor-remote-joiner.js +11 -17
  51. package/dist/runtime/actors/actor-remote-wire.js +5 -3
  52. package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
  53. package/dist/runtime/actors/actor-request-deadline.js +31 -0
  54. package/dist/runtime/actors/actor-retry-delay.js +2 -1
  55. package/dist/runtime/actors/actor-runtime-contracts.d.ts +4 -2
  56. package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
  57. package/dist/runtime/actors/actor-runtime-state.js +70 -187
  58. package/dist/runtime/actors/actor-source-transfer.d.ts +5 -5
  59. package/dist/runtime/actors/bound-session-wire.js +2 -7
  60. package/dist/runtime/actors/deferred-join-completion.d.ts +19 -0
  61. package/dist/runtime/actors/deferred-join-completion.js +21 -0
  62. package/dist/runtime/actors/index.d.ts +10 -8
  63. package/dist/runtime/actors/index.js +101 -73
  64. package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
  65. package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
  66. package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
  67. package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
  68. package/dist/runtime/admission.d.ts +7 -1
  69. package/dist/runtime/admission.js +11 -1
  70. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
  71. package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
  72. package/dist/runtime/backend/contracts/index.d.ts +8 -33
  73. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +3 -26
  74. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
  75. package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
  76. package/dist/runtime/backend/node/node-backend-adapter-factory.d.ts +1 -2
  77. package/dist/runtime/backend/node/node-backend-adapter-factory.js +4 -18
  78. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +7 -4
  79. package/dist/runtime/backend/node/node-backend-adapter-support.js +28 -34
  80. package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
  81. package/dist/runtime/backend/node/node-event-loop-poller.js +11 -6
  82. package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
  83. package/dist/runtime/backend/node/node-raw-binding-port.d.ts +1 -1
  84. package/dist/runtime/backend/node/node-raw-binding-port.js +51 -19
  85. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +21 -19
  86. package/dist/runtime/backend/node/node-raw-mesh-backend.js +171 -111
  87. package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
  88. package/dist/runtime/backend/raw-binding-port.d.ts +13 -1
  89. package/dist/runtime/backend/runtime-values.d.ts +4 -1
  90. package/dist/runtime/backend/runtime-values.js +2 -0
  91. package/dist/runtime/channels/channel-clients.d.ts +20 -9
  92. package/dist/runtime/channels/channel-clients.js +68 -60
  93. package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
  94. package/dist/runtime/channels/channel-envelope.js +47 -29
  95. package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
  96. package/dist/runtime/channels/channel-outbound-operations.js +9 -18
  97. package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
  98. package/dist/runtime/channels/channel-receive-loops.js +27 -6
  99. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
  100. package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
  101. package/dist/runtime/channels/channel-runtime-manager.d.ts +2 -5
  102. package/dist/runtime/channels/channel-runtime-manager.js +4 -12
  103. package/dist/runtime/channels/channel-socket-options.js +3 -2
  104. package/dist/runtime/channels/channel-socket-registry.d.ts +30 -32
  105. package/dist/runtime/channels/channel-socket-registry.js +296 -235
  106. package/dist/runtime/channels/channel-transports.d.ts +11 -20
  107. package/dist/runtime/channels/channel-transports.js +68 -47
  108. package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
  109. package/dist/runtime/channels/client-server-location-runtime.js +10 -11
  110. package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
  111. package/dist/runtime/channels/client-server-service-wire.js +32 -11
  112. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
  113. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  114. package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
  115. package/dist/runtime/channels/fanout-location-runtime.js +133 -81
  116. package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
  117. package/dist/runtime/channels/spot-direct-envelope.js +4 -3
  118. package/dist/runtime/channels/spot-node-route-transport.js +3 -2
  119. package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
  120. package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
  121. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
  122. package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
  123. package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
  124. package/dist/runtime/diagnostics/flow-context.js +16 -2
  125. package/dist/runtime/diagnostics/index.d.ts +4 -2
  126. package/dist/runtime/diagnostics/index.js +14 -4
  127. package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
  128. package/dist/runtime/diagnostics/message-flow.js +10 -19
  129. package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
  130. package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
  131. package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
  132. package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
  133. package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
  134. package/dist/runtime/disposal.d.ts +5 -0
  135. package/dist/runtime/disposal.js +22 -0
  136. package/dist/runtime/execution/index.d.ts +22 -9
  137. package/dist/runtime/execution/index.js +107 -37
  138. package/dist/runtime/execution/serial-execution-queue.d.ts +12 -7
  139. package/dist/runtime/execution/serial-execution-queue.js +99 -26
  140. package/dist/runtime/execution/state-lane.d.ts +8 -1
  141. package/dist/runtime/execution/state-lane.js +118 -3
  142. package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
  143. package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
  144. package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
  145. package/dist/runtime/foundation/event-loop-resources.js +6 -119
  146. package/dist/runtime/foundation/listener-records.d.ts +11 -0
  147. package/dist/runtime/foundation/listener-records.js +20 -0
  148. package/dist/runtime/foundation/operation-identity.d.ts +2 -0
  149. package/dist/runtime/foundation/operation-identity.js +9 -5
  150. package/dist/runtime/foundation/operation-registry.d.ts +5 -7
  151. package/dist/runtime/foundation/operation-registry.js +34 -44
  152. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +18 -26
  153. package/dist/runtime/foundation/raw-service-mesh-runtime.js +122 -469
  154. package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
  155. package/dist/runtime/foundation/runtime-state-projections.js +8 -0
  156. package/dist/runtime/foundation/service-authority-payload-codec.d.ts +1 -0
  157. package/dist/runtime/foundation/service-authority-payload-codec.js +30 -12
  158. package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
  159. package/dist/runtime/foundation/service-discovery-registry.js +22 -3
  160. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
  161. package/dist/runtime/foundation/service-liveness-registry.js +2 -1
  162. package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
  163. package/dist/runtime/foundation/service-maintenance-runtime.js +23 -8
  164. package/dist/runtime/foundation/service-metadata-codec.js +3 -3
  165. package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
  166. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
  167. package/dist/runtime/foundation/service-relocation-coordinator.d.ts +9 -0
  168. package/dist/runtime/foundation/service-relocation-coordinator.js +14 -1
  169. package/dist/runtime/foundation/service-relocation-object-owner.d.ts +8 -0
  170. package/dist/runtime/foundation/service-relocation-object-owner.js +19 -6
  171. package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
  172. package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
  173. package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
  174. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -19
  175. package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
  176. package/dist/runtime/foundation/service-stateful-registry.js +10 -2
  177. package/dist/runtime/foundation/service-stateful-runtime.d.ts +28 -24
  178. package/dist/runtime/foundation/service-stateful-runtime.js +297 -244
  179. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +12 -7
  180. package/dist/runtime/foundation/service-stateful-wire-codec.js +240 -143
  181. package/dist/runtime/foundation/service-topology-registry.d.ts +1 -3
  182. package/dist/runtime/foundation/service-topology-registry.js +22 -61
  183. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
  184. package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
  185. package/dist/runtime/foundation/service-wire-codec.js +10 -8
  186. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  187. package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
  188. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
  189. package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
  190. package/dist/runtime/framework-errors-internal.d.ts +2 -1
  191. package/dist/runtime/framework-errors-internal.js +343 -122
  192. package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
  193. package/dist/runtime/handlers/handler-instance-scope.js +61 -74
  194. package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
  195. package/dist/runtime/host/actor-packet-relay.js +48 -91
  196. package/dist/runtime/host/actor-placement-coordinator.js +7 -5
  197. package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
  198. package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
  199. package/dist/runtime/host/actor-transfer-runtime.d.ts +28 -28
  200. package/dist/runtime/host/actor-transfer-runtime.js +210 -256
  201. package/dist/runtime/host/application-job-queue.js +16 -33
  202. package/dist/runtime/host/bound-session-relay.js +1 -1
  203. package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
  204. package/dist/runtime/host/index.d.ts +19 -14
  205. package/dist/runtime/host/index.js +234 -175
  206. package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
  207. package/dist/runtime/host/instance-activation-authority.js +17 -45
  208. package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
  209. package/dist/runtime/host/location-runtime-owner.js +2 -2
  210. package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
  211. package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
  212. package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
  213. package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
  214. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
  215. package/dist/runtime/host/remote-bound-session-relay.js +11 -23
  216. package/dist/runtime/host/route-mesh-runtime.d.ts +14 -10
  217. package/dist/runtime/host/route-mesh-runtime.js +178 -257
  218. package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
  219. package/dist/runtime/host/runtime-shutdown.js +18 -21
  220. package/dist/runtime/host/service-relocation-control.js +6 -1
  221. package/dist/runtime/host/service-relocation-host-runtime.d.ts +71 -38
  222. package/dist/runtime/host/service-relocation-host-runtime.js +816 -651
  223. package/dist/runtime/host/spot-address-transport.d.ts +2 -3
  224. package/dist/runtime/host/spot-address-transport.js +34 -136
  225. package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
  226. package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
  227. package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -7
  228. package/dist/runtime/host/spot-runtime-options-factory.js +53 -21
  229. package/dist/runtime/host/stateful-authority-route-runtime.js +6 -2
  230. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +14 -6
  231. package/dist/runtime/host/user-spot-creation-coordinator.js +96 -95
  232. package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
  233. package/dist/runtime/locations/authority-key-codec.js +4 -3
  234. package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
  235. package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
  236. package/dist/runtime/locations/creation-operation-id.js +6 -4
  237. package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
  238. package/dist/runtime/locations/in-memory-authority-store.js +31 -15
  239. package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
  240. package/dist/runtime/locations/in-memory-location-store.js +17 -14
  241. package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
  242. package/dist/runtime/locations/in-memory-provider-location-store.js +79 -27
  243. package/dist/runtime/locations/key-codec.js +3 -2
  244. package/dist/runtime/locations/lease-tracker.d.ts +3 -5
  245. package/dist/runtime/locations/lease-tracker.js +7 -11
  246. package/dist/runtime/locations/lifecycle.d.ts +5 -10
  247. package/dist/runtime/locations/lifecycle.js +4 -33
  248. package/dist/runtime/locations/location-store-failure.d.ts +2 -0
  249. package/dist/runtime/locations/location-store-failure.js +7 -0
  250. package/dist/runtime/locations/location-store-pages.d.ts +3 -0
  251. package/dist/runtime/locations/location-store-pages.js +13 -0
  252. package/dist/runtime/locations/location-store-repository.d.ts +5 -7
  253. package/dist/runtime/locations/location-store-repository.js +303 -332
  254. package/dist/runtime/locations/relocation-blob.js +18 -5
  255. package/dist/runtime/locations/resolvers.d.ts +5 -5
  256. package/dist/runtime/locations/resolvers.js +44 -30
  257. package/dist/runtime/locations/runtime.d.ts +5 -4
  258. package/dist/runtime/locations/runtime.js +123 -92
  259. package/dist/runtime/locations/spot-location-claims.d.ts +8 -2
  260. package/dist/runtime/locations/spot-location-claims.js +40 -23
  261. package/dist/runtime/messaging/payload-codec.js +26 -20
  262. package/dist/runtime/messaging/submission-result.d.ts +3 -0
  263. package/dist/runtime/messaging/submission-result.js +48 -0
  264. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +2 -0
  265. package/dist/runtime/protocol/service_wire_codec.generated.js +17 -8
  266. package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +1 -0
  267. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +3 -2
  268. package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +3 -3
  269. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +4 -4
  270. package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +6 -3
  271. package/dist/runtime/spots/index.d.ts +29 -29
  272. package/dist/runtime/spots/index.js +441 -313
  273. package/dist/runtime/spots/spot-activation-registry.d.ts +4 -4
  274. package/dist/runtime/spots/spot-activation-registry.js +27 -60
  275. package/dist/runtime/spots/spot-activation-state.d.ts +2 -11
  276. package/dist/runtime/spots/spot-activation-state.js +4 -17
  277. package/dist/runtime/spots/spot-activation.d.ts +10 -9
  278. package/dist/runtime/spots/spot-activation.js +103 -81
  279. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
  280. package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
  281. package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
  282. package/dist/runtime/spots/spot-actor-join-dispatch.js +5 -55
  283. package/dist/runtime/spots/spot-actor-lifecycle-drain.js +2 -2
  284. package/dist/runtime/spots/spot-actor-membership.d.ts +7 -5
  285. package/dist/runtime/spots/spot-actor-membership.js +44 -53
  286. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
  287. package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
  288. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
  289. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
  290. package/dist/runtime/spots/spot-context.d.ts +2 -2
  291. package/dist/runtime/spots/spot-entry-activation.d.ts +3 -4
  292. package/dist/runtime/spots/spot-entry-activation.js +9 -21
  293. package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
  294. package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
  295. package/dist/runtime/spots/spot-manager-public.js +6 -5
  296. package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
  297. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +22 -21
  298. package/dist/runtime/spots/spot-node-runtime-manager.js +73 -82
  299. package/dist/runtime/spots/spot-outbound.d.ts +4 -3
  300. package/dist/runtime/spots/spot-outbound.js +10 -37
  301. package/dist/runtime/spots/spot-remote-codec.js +5 -3
  302. package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
  303. package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
  304. package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
  305. package/dist/runtime/spots/spot-route-replies.js +3 -1
  306. package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -2
  307. package/dist/runtime/spots/spot-routed-actor-admission.js +3 -2
  308. package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +2 -7
  309. package/dist/runtime/spots/spot-routed-frame-dispatch.js +1 -70
  310. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
  311. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
  312. package/dist/runtime/spots/spot-runtime-ports.d.ts +4 -20
  313. package/dist/runtime/spots/spot-serial-executor.d.ts +5 -0
  314. package/dist/runtime/spots/spot-serial-executor.js +9 -2
  315. package/dist/runtime/spots/spot-serial-turn-executor.d.ts +29 -6
  316. package/dist/runtime/spots/spot-serial-turn-executor.js +89 -13
  317. package/dist/runtime/spots/spot-timer.d.ts +3 -2
  318. package/dist/runtime/streams/actor-session-binding-registry.d.ts +17 -32
  319. package/dist/runtime/streams/actor-session-binding-registry.js +145 -367
  320. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +2 -6
  321. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
  322. package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
  323. package/dist/runtime/streams/bound-session-service.d.ts +7 -0
  324. package/dist/runtime/streams/bound-session-service.js +12 -19
  325. package/dist/runtime/streams/index.d.ts +15 -14
  326. package/dist/runtime/streams/index.js +38 -39
  327. package/dist/runtime/streams/managed-stream.d.ts +3 -0
  328. package/dist/runtime/streams/managed-stream.js +17 -8
  329. package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
  330. package/dist/runtime/streams/protocol.d.ts +6 -33
  331. package/dist/runtime/streams/protocol.js +38 -110
  332. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
  333. package/dist/runtime/streams/session-actor-coordinator.js +12 -4
  334. package/dist/runtime/streams/session-calls.d.ts +1 -1
  335. package/dist/runtime/streams/session-calls.js +5 -4
  336. package/dist/runtime/streams/session-context.d.ts +6 -6
  337. package/dist/runtime/streams/session-context.js +22 -4
  338. package/dist/runtime/streams/session-requests.js +2 -1
  339. package/dist/runtime/streams/session-serial-executor.js +2 -2
  340. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
  341. package/dist/runtime/streams/stream-frame-factory.js +2 -2
  342. package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
  343. package/dist/runtime/streams/stream-session-runtime.js +25 -33
  344. package/dist/runtime/workers/index.d.ts +2 -2
  345. package/dist/runtime/workers/index.js +5 -4
  346. package/package.json +3 -3
  347. package/src/contracts/Channels/IZLinkFanoutClient.ts +0 -7
  348. package/src/contracts/Common/CoreTypes.ts +7 -0
  349. package/src/contracts/Common/index.ts +1 -1
  350. package/src/contracts/Configuration/InternalDefaults.ts +12 -0
  351. package/src/contracts/Configuration/Registration.ts +92 -48
  352. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
  353. package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
  354. package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
  355. package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
  356. package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
  357. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
  358. package/src/contracts/Handlers/JsonContract.ts +14 -4
  359. package/src/contracts/Locations/Authority.ts +7 -3
  360. package/src/contracts/Locations/Options.ts +1 -1
  361. package/src/contracts/Locations/Stores.ts +14 -0
  362. package/src/contracts/RouteMesh/RuntimeTopology.ts +10 -0
  363. package/src/contracts/Spots/Contracts.ts +1 -1
  364. package/src/internal.ts +15 -0
  365. package/src/nest-integration.ts +28 -10
  366. package/src/runtime/abort.ts +6 -5
  367. package/src/runtime/activation-admission.ts +72 -0
  368. package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
  369. package/src/runtime/actors/actor-client.ts +77 -204
  370. package/src/runtime/actors/actor-context.ts +45 -39
  371. package/src/runtime/actors/actor-handoff.ts +55 -45
  372. package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
  373. package/src/runtime/actors/actor-local-native-join.ts +174 -215
  374. package/src/runtime/actors/actor-native-lookup.ts +2 -9
  375. package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
  376. package/src/runtime/actors/actor-remote-joiner.ts +15 -36
  377. package/src/runtime/actors/actor-remote-wire.ts +5 -3
  378. package/src/runtime/actors/actor-request-deadline.ts +49 -0
  379. package/src/runtime/actors/actor-retry-delay.ts +2 -1
  380. package/src/runtime/actors/actor-runtime-contracts.ts +4 -10
  381. package/src/runtime/actors/actor-runtime-state.ts +85 -247
  382. package/src/runtime/actors/actor-source-transfer.ts +5 -18
  383. package/src/runtime/actors/bound-session-wire.ts +2 -8
  384. package/src/runtime/actors/deferred-join-completion.ts +44 -0
  385. package/src/runtime/actors/index.ts +122 -88
  386. package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
  387. package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
  388. package/src/runtime/admission.ts +13 -2
  389. package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
  390. package/src/runtime/backend/contracts/index.ts +15 -42
  391. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -28
  392. package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
  393. package/src/runtime/backend/node/node-backend-adapter-factory.ts +5 -25
  394. package/src/runtime/backend/node/node-backend-adapter-support.ts +32 -35
  395. package/src/runtime/backend/node/node-event-loop-poller.ts +16 -8
  396. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
  397. package/src/runtime/backend/node/node-raw-binding-port.ts +58 -23
  398. package/src/runtime/backend/node/node-raw-mesh-backend.ts +252 -162
  399. package/src/runtime/backend/node/node-socket-backend-adapter.ts +5 -4
  400. package/src/runtime/backend/raw-binding-port.ts +14 -1
  401. package/src/runtime/backend/runtime-values.ts +4 -1
  402. package/src/runtime/channels/channel-clients.ts +132 -96
  403. package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
  404. package/src/runtime/channels/channel-envelope.ts +58 -29
  405. package/src/runtime/channels/channel-outbound-operations.ts +10 -31
  406. package/src/runtime/channels/channel-receive-loops.ts +39 -7
  407. package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
  408. package/src/runtime/channels/channel-runtime-manager.ts +8 -15
  409. package/src/runtime/channels/channel-socket-options.ts +8 -2
  410. package/src/runtime/channels/channel-socket-registry.ts +369 -262
  411. package/src/runtime/channels/channel-transports.ts +161 -115
  412. package/src/runtime/channels/client-server-location-runtime.ts +17 -17
  413. package/src/runtime/channels/client-server-service-wire.ts +40 -12
  414. package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
  415. package/src/runtime/channels/fanout-location-runtime.ts +175 -106
  416. package/src/runtime/channels/spot-direct-envelope.ts +1 -1
  417. package/src/runtime/channels/spot-node-route-transport.ts +5 -2
  418. package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
  419. package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
  420. package/src/runtime/diagnostics/flow-context.ts +16 -2
  421. package/src/runtime/diagnostics/index.ts +27 -17
  422. package/src/runtime/diagnostics/message-flow.ts +15 -25
  423. package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
  424. package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
  425. package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
  426. package/src/runtime/disposal.ts +19 -0
  427. package/src/runtime/execution/index.ts +116 -38
  428. package/src/runtime/execution/serial-execution-queue.ts +179 -34
  429. package/src/runtime/execution/state-lane.ts +142 -4
  430. package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
  431. package/src/runtime/foundation/event-loop-resources.ts +5 -122
  432. package/src/runtime/foundation/listener-records.ts +21 -0
  433. package/src/runtime/foundation/operation-identity.ts +11 -5
  434. package/src/runtime/foundation/operation-registry.ts +33 -50
  435. package/src/runtime/foundation/raw-service-mesh-runtime.ts +170 -571
  436. package/src/runtime/foundation/runtime-state-projections.ts +9 -1
  437. package/src/runtime/foundation/service-authority-payload-codec.ts +41 -13
  438. package/src/runtime/foundation/service-discovery-registry.ts +32 -3
  439. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
  440. package/src/runtime/foundation/service-liveness-registry.ts +2 -1
  441. package/src/runtime/foundation/service-maintenance-runtime.ts +30 -19
  442. package/src/runtime/foundation/service-metadata-codec.ts +2 -2
  443. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
  444. package/src/runtime/foundation/service-relocation-coordinator.ts +13 -0
  445. package/src/runtime/foundation/service-relocation-object-owner.ts +23 -7
  446. package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
  447. package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
  448. package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -25
  449. package/src/runtime/foundation/service-stateful-registry.ts +14 -2
  450. package/src/runtime/foundation/service-stateful-runtime.ts +435 -327
  451. package/src/runtime/foundation/service-stateful-wire-codec.ts +329 -199
  452. package/src/runtime/foundation/service-topology-registry.ts +30 -79
  453. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
  454. package/src/runtime/foundation/service-wire-codec.ts +15 -8
  455. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  456. package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
  457. package/src/runtime/framework-errors-internal.ts +380 -134
  458. package/src/runtime/handlers/handler-instance-scope.ts +68 -95
  459. package/src/runtime/host/actor-packet-relay.ts +57 -147
  460. package/src/runtime/host/actor-placement-coordinator.ts +8 -5
  461. package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
  462. package/src/runtime/host/actor-transfer-runtime.ts +266 -418
  463. package/src/runtime/host/application-job-queue.ts +28 -34
  464. package/src/runtime/host/bound-session-relay.ts +1 -2
  465. package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
  466. package/src/runtime/host/index.ts +408 -312
  467. package/src/runtime/host/instance-activation-authority.ts +89 -109
  468. package/src/runtime/host/location-runtime-owner.ts +4 -2
  469. package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
  470. package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
  471. package/src/runtime/host/remote-bound-session-relay.ts +12 -44
  472. package/src/runtime/host/route-mesh-runtime.ts +236 -275
  473. package/src/runtime/host/runtime-shutdown.ts +17 -21
  474. package/src/runtime/host/service-relocation-control.ts +14 -1
  475. package/src/runtime/host/service-relocation-host-runtime.ts +1161 -904
  476. package/src/runtime/host/spot-address-transport.ts +73 -195
  477. package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
  478. package/src/runtime/host/spot-runtime-options-factory.ts +92 -30
  479. package/src/runtime/host/stateful-authority-route-runtime.ts +8 -4
  480. package/src/runtime/host/user-spot-creation-coordinator.ts +182 -163
  481. package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
  482. package/src/runtime/locations/authority-key-codec.ts +7 -3
  483. package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
  484. package/src/runtime/locations/creation-operation-id.ts +6 -3
  485. package/src/runtime/locations/domain-store-contract.ts +12 -3
  486. package/src/runtime/locations/in-memory-authority-store.ts +44 -15
  487. package/src/runtime/locations/in-memory-location-store.ts +50 -39
  488. package/src/runtime/locations/in-memory-provider-location-store.ts +110 -31
  489. package/src/runtime/locations/key-codec.ts +3 -2
  490. package/src/runtime/locations/lease-tracker.ts +8 -14
  491. package/src/runtime/locations/lifecycle.ts +16 -45
  492. package/src/runtime/locations/location-store-failure.ts +4 -0
  493. package/src/runtime/locations/location-store-pages.ts +18 -0
  494. package/src/runtime/locations/location-store-repository.ts +450 -478
  495. package/src/runtime/locations/relocation-blob.ts +17 -6
  496. package/src/runtime/locations/resolvers.ts +90 -58
  497. package/src/runtime/locations/runtime.ts +220 -110
  498. package/src/runtime/locations/spot-location-claims.ts +54 -26
  499. package/src/runtime/messaging/payload-codec.ts +35 -24
  500. package/src/runtime/messaging/submission-result.ts +57 -1
  501. package/src/runtime/protocol/service_wire_codec.generated.ts +27 -10
  502. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +4 -4
  503. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +6 -6
  504. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +6 -3
  505. package/src/runtime/spots/index.ts +687 -437
  506. package/src/runtime/spots/spot-activation-registry.ts +42 -71
  507. package/src/runtime/spots/spot-activation-state.ts +4 -16
  508. package/src/runtime/spots/spot-activation.ts +167 -115
  509. package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
  510. package/src/runtime/spots/spot-actor-join-dispatch.ts +25 -79
  511. package/src/runtime/spots/spot-actor-lifecycle-drain.ts +20 -18
  512. package/src/runtime/spots/spot-actor-membership.ts +107 -75
  513. package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
  514. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
  515. package/src/runtime/spots/spot-context.ts +3 -3
  516. package/src/runtime/spots/spot-entry-activation.ts +13 -33
  517. package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
  518. package/src/runtime/spots/spot-manager-public.ts +29 -21
  519. package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
  520. package/src/runtime/spots/spot-node-runtime-manager.ts +145 -140
  521. package/src/runtime/spots/spot-outbound.ts +47 -68
  522. package/src/runtime/spots/spot-remote-codec.ts +7 -3
  523. package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
  524. package/src/runtime/spots/spot-route-replies.ts +6 -4
  525. package/src/runtime/spots/spot-routed-actor-admission.ts +13 -6
  526. package/src/runtime/spots/spot-routed-frame-dispatch.ts +6 -77
  527. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
  528. package/src/runtime/spots/spot-runtime-ports.ts +10 -43
  529. package/src/runtime/spots/spot-serial-executor.ts +10 -2
  530. package/src/runtime/spots/spot-serial-turn-executor.ts +120 -13
  531. package/src/runtime/spots/spot-timer.ts +3 -2
  532. package/src/runtime/streams/actor-session-binding-registry.ts +182 -560
  533. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +1 -19
  534. package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
  535. package/src/runtime/streams/bound-session-service.ts +23 -37
  536. package/src/runtime/streams/index.ts +102 -88
  537. package/src/runtime/streams/managed-stream.ts +29 -10
  538. package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
  539. package/src/runtime/streams/protocol.ts +34 -88
  540. package/src/runtime/streams/session-actor-coordinator.ts +17 -5
  541. package/src/runtime/streams/session-calls.ts +6 -5
  542. package/src/runtime/streams/session-context.ts +54 -10
  543. package/src/runtime/streams/session-requests.ts +2 -1
  544. package/src/runtime/streams/session-serial-executor.ts +2 -2
  545. package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
  546. package/src/runtime/streams/stream-frame-factory.ts +2 -3
  547. package/src/runtime/streams/stream-session-runtime.ts +57 -59
  548. package/src/runtime/workers/index.ts +13 -12
  549. package/dist/runtime/actors/deferred-join-accepted-journal.d.ts +0 -47
  550. package/dist/runtime/actors/deferred-join-accepted-journal.js +0 -992
  551. package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
  552. package/dist/runtime/actors/post-commit-actor-location.js +0 -72
  553. package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
  554. package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
  555. package/src/runtime/actors/deferred-join-accepted-journal.ts +0 -1346
  556. package/src/runtime/actors/post-commit-actor-location.ts +0 -121
  557. package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
@@ -27,36 +27,23 @@ export interface ZLinkPreparedActorSource {
27
27
 
28
28
  export interface ZLinkActorSourceTransfer {
29
29
  /** Starts the ingress handoff before target route lookup. */
30
- beginDeferredActorHandoff?(
31
- actor: ZLinkActor,
32
- state: ZLinkActorRuntimeState,
33
- operationId: string
34
- ): void;
30
+ beginDeferredActorHandoff?(actor: ZLinkActor, state: ZLinkActorRuntimeState): void;
35
31
  /** Changes a provisional ingress fence into a relocation handoff. */
36
- promoteDeferredActorHandoff?(
37
- actor: ZLinkActor,
38
- state: ZLinkActorRuntimeState,
39
- operationId: string
40
- ): void;
32
+ promoteDeferredActorHandoff?(actor: ZLinkActor, state: ZLinkActorRuntimeState): void;
41
33
  /** Finishes a same-node deferred Join handoff after completion callback. */
42
34
  completeDeferredActorHandoff?(
43
35
  actor: ZLinkActor,
44
36
  target: ZLinkSpotRouteTarget,
45
- targetActorRef: ActorRef,
46
- operationId: string
37
+ targetActorRef: ActorRef
47
38
  ): Promise<void>;
48
39
  /** Releases an early handoff when Join cannot commit. */
49
- cancelDeferredActorHandoff?(
50
- actor: ZLinkActor,
51
- state: ZLinkActorRuntimeState,
52
- operationId: string
53
- ): Promise<void>;
40
+ cancelDeferredActorHandoff?(actor: ZLinkActor, state: ZLinkActorRuntimeState): Promise<void>;
54
41
  prepareSource(
55
42
  actor: ZLinkActor,
56
43
  state: ZLinkActorRuntimeState,
57
44
  signal?: AbortSignal,
58
45
  lifecycleAuthority?: 'framework' | 'core',
59
- deferredOperationId?: string,
46
+ deferredJoin?: boolean,
60
47
  relocation?: ServiceWireOperationId
61
48
  ): Promise<ZLinkPreparedActorSource>;
62
49
  }
@@ -1,3 +1,4 @@
1
+ import { FLOW_ORIGIN_VALUES } from '../diagnostics/flow-context';
1
2
  export const ZLINK_REMOTE_BOUND_SESSION_FENCE_NACK_CODE = 'zlink.bound_session.fence';
2
3
 
3
4
  /**
@@ -69,17 +70,10 @@ export function encodeRemoteBoundSessionSendPayload(input: {
69
70
  };
70
71
  }
71
72
 
72
- const WIRE_FLOW_ORIGIN: Record<import('../../contracts').ZLinkFlowOrigin, string> = {
73
- Inbound: 'inbound',
74
- Timer: 'timer',
75
- Application: 'application',
76
- Lifecycle: 'lifecycle'
77
- };
78
-
79
73
  function encodeWireFlowOrigin(
80
74
  origin: import('../../contracts').ZLinkFlowOrigin | undefined
81
75
  ): string | undefined {
82
- return origin === undefined ? undefined : WIRE_FLOW_ORIGIN[origin];
76
+ return origin === undefined ? undefined : FLOW_ORIGIN_VALUES[origin];
83
77
  }
84
78
 
85
79
  export function encodeRemoteBoundSessionResponsePayload(input: {
@@ -0,0 +1,44 @@
1
+ import type { ActorRef, ZLinkActorJoinOperationId, ZLinkFrameworkErrorKind } from '../../contracts';
2
+
3
+ /**
4
+ * The Accepted or Failed result of a deferred cross-node Join. Spot Actor
5
+ * membership sections 4-5: the public OperationId, optional reply and delivery
6
+ * state live only while the current source and target processes run. The
7
+ * completion is never written to a Store or replayed after a restart.
8
+ */
9
+ export type ZLinkDeferredJoinCompletion = {
10
+ readonly operationId: ZLinkActorJoinOperationId;
11
+ readonly actor: ActorRef;
12
+ readonly rawReply: Buffer;
13
+ readonly replyContentType?: string;
14
+ } & (
15
+ | { readonly status: 'accepted' }
16
+ | { readonly status: 'failed'; readonly kind: ZLinkFrameworkErrorKind }
17
+ );
18
+
19
+ export function createDeferredJoinCompletion(
20
+ actorId: string,
21
+ operationId: ZLinkActorJoinOperationId,
22
+ actor: ActorRef,
23
+ rawReply: Uint8Array,
24
+ replyContentType?: string
25
+ ): ZLinkDeferredJoinCompletion {
26
+ if (
27
+ actorId.length === 0 ||
28
+ actor.actorId !== actorId ||
29
+ actor.objectGeneration <= 0n ||
30
+ (operationId.high === 0n && operationId.low === 0n)
31
+ ) {
32
+ throw new Error('Deferred Join completion identity is invalid.');
33
+ }
34
+ if (replyContentType !== undefined && replyContentType.length === 0) {
35
+ throw new TypeError('Deferred Join reply content type must be non-empty.');
36
+ }
37
+ return {
38
+ status: 'accepted',
39
+ operationId,
40
+ actor,
41
+ rawReply: Buffer.from(rawReply),
42
+ ...(replyContentType === undefined ? {} : { replyContentType })
43
+ };
44
+ }
@@ -1,41 +1,52 @@
1
1
  import {
2
- ZLinkFrameworkInternalErrorKind,
3
- createInternalFrameworkException,
4
- wireReplyFailureException
5
- } from '../framework-errors-internal';
6
- import type {
7
- ActorRef,
8
- RoutingId,
9
- SpotRef,
10
- ZLinkActor,
11
- ZLinkActorCreateCall,
12
- ZLinkActorCreateResult,
13
- ZLinkActorGetOrCreateCall,
14
- ZLinkActorManager
2
+ type ActorRef,
3
+ type RoutingId,
4
+ type SpotRef,
5
+ type ZLinkActor,
6
+ type ZLinkActorCreateCall,
7
+ type ZLinkActorCreateResult,
8
+ type ZLinkActorGetOrCreateCall,
9
+ type ZLinkActorManager,
10
+ ZLinkEncodedPayload,
11
+ ZLinkFrameworkException,
12
+ ZLinkMessage
15
13
  } from '../../contracts';
16
- import { ZLinkEncodedPayload, ZLinkFrameworkException } from '../../contracts';
17
- import { ZLinkBufferMessage as RuntimeMessage } from '../backend/runtime-message';
18
- import { ZLinkMessage } from '../../contracts';
19
- import { ZLinkConfigurationException } from '../configuration';
14
+ import { DEFAULT_REQUEST_TIMEOUT_MS } from '../../contracts/Configuration/Registration';
20
15
  import { throwIfAborted } from '../abort';
21
16
  import type { ZLinkBackendActorRef, ZLinkBackendSpotNode } from '../backend/contracts';
22
17
  import { closeMeshCompletion } from '../backend/mesh-completion-table';
18
+ import { ZLinkBufferMessage as RuntimeMessage } from '../backend/runtime-message';
19
+ import { ZLinkConfigurationException } from '../configuration';
20
+ import { METRIC_NAMES } from '../diagnostics/runtime-metrics';
23
21
  import {
24
22
  captureZLinkSpotSerialTurn,
25
23
  requireZLinkYieldTurn,
26
24
  type ZLinkSpotSerialTurn
27
25
  } from '../execution';
26
+ import {
27
+ ZLinkFrameworkInternalErrorKind,
28
+ createInternalFrameworkException,
29
+ wireReplyFailureException
30
+ } from '../framework-errors-internal';
28
31
  import { disposeLifecycleHandlers } from '../handlers/handler-instance-scope';
32
+ import { encodeFrameworkPayloadMessage } from '../messaging/payload-codec';
33
+ import { ZLinkActorCreationCoordinator, type ZLinkActorCreateRequest } from './actor-creation';
34
+ import type { ZLinkActorManagerOptions } from './actor-runtime-contracts';
35
+ import {
36
+ ZLinkActorRuntimeState,
37
+ toFrameworkActorRef,
38
+ type ZLinkActorCreationAttemptResult
39
+ } from './actor-runtime-state';
40
+ import { ZLinkTransferredActorRollbackCoordinator } from './transferred-actor-rollback';
41
+ const ACTOR_CREATION_RETRY_INTERVAL_MS = 5;
42
+ const LOCAL_DIAGNOSTIC_NODE_RID = 'local';
29
43
 
30
44
  export {
31
45
  DefaultZLinkActorClient,
32
46
  forwardEncodedActorPacket,
33
47
  type ZLinkActorClientOptions
34
48
  } from './actor-client';
35
-
36
- import { encodeFrameworkPayloadMessage } from '../messaging/payload-codec';
37
49
  export { DefaultZLinkActorContext, ZLINK_ACTOR_JOIN_ENTRY_SPOT_RUNTIME } from './actor-context';
38
- import { ZLinkActorCreationCoordinator, type ZLinkActorCreateRequest } from './actor-creation';
39
50
  export { ZLinkActorSerialExecutor } from './actor-mailbox';
40
51
  export {
41
52
  DEFAULT_MESSAGE_FOLLOW_DURATION_MS,
@@ -60,8 +71,6 @@ export {
60
71
  } from './actor-message-follow-context';
61
72
  export {
62
73
  ZLinkActorRuntimeState,
63
- mergeRemoteBoundSessionTarget,
64
- preferredRemoteBoundSessionTarget,
65
74
  toFrameworkActorRef,
66
75
  toFrameworkRoutingId,
67
76
  type ZLinkActorCreationOperation,
@@ -69,12 +78,9 @@ export {
69
78
  type ZLinkRemoteBoundSessionTarget
70
79
  } from './actor-runtime-state';
71
80
  export {
72
- isDeferredJoinAcceptedRootPublication,
73
- ZLinkDeferredJoinAcceptedJournal,
74
- type ZLinkDeferredJoinAcceptedRoot,
75
- type ZLinkDeferredJoinRootIdentity,
76
- type ZLinkDeferredJoinDeliveryCursor
77
- } from './deferred-join-accepted-journal';
81
+ createDeferredJoinCompletion,
82
+ type ZLinkDeferredJoinCompletion
83
+ } from './deferred-join-completion';
78
84
  export {
79
85
  decodeActorAuthorityIdentity,
80
86
  decodeRelocatingActorAuthorityIdentity,
@@ -85,11 +91,6 @@ export {
85
91
  publishInitialActorAuthority,
86
92
  type ZLinkActorAuthorityIdentity
87
93
  } from './actor-authority-publication';
88
- import {
89
- ZLinkActorRuntimeState,
90
- toFrameworkActorRef,
91
- type ZLinkActorCreationAttemptResult
92
- } from './actor-runtime-state';
93
94
  export {
94
95
  ZLinkActorPacketKind,
95
96
  ZLinkSpotActorDispatcher,
@@ -107,8 +108,6 @@ export type {
107
108
  ZLinkActorJoinCoordinator,
108
109
  ZLinkActorManagerOptions
109
110
  } from './actor-runtime-contracts';
110
- import type { ZLinkActorManagerOptions } from './actor-runtime-contracts';
111
- import { ZLinkTransferredActorRollbackCoordinator } from './transferred-actor-rollback';
112
111
  export {
113
112
  ZLinkActorTransferRegistry,
114
113
  type ZLinkActorTransferPayloadState
@@ -146,11 +145,18 @@ export class DefaultZLinkActorManager implements ZLinkActorManager {
146
145
  private readonly creation: ZLinkActorCreationCoordinator;
147
146
  private readonly transferredActorRollback: ZLinkTransferredActorRollbackCoordinator;
148
147
 
149
- constructor(private readonly options: ZLinkActorManagerOptions) {
148
+ constructor(
149
+ private readonly options: ZLinkActorManagerOptions,
150
+ private readonly detachedTaskRunner: import('../spots/spot-actor-join-dispatch').ZLinkDetachedTaskRunner
151
+ ) {
152
+ if ((detachedTaskRunner as unknown) === undefined) {
153
+ throw new Error('Actor manager requires a detached task runner.');
154
+ }
150
155
  this.creation = new ZLinkActorCreationCoordinator(options);
151
156
  this.transferredActorRollback = new ZLinkTransferredActorRollbackCoordinator(
152
157
  this.states,
153
- options
158
+ options,
159
+ (actorId, state) => this.finalizeDestroyedActor(actorId, state)
154
160
  );
155
161
  }
156
162
 
@@ -207,7 +213,6 @@ export class DefaultZLinkActorManager implements ZLinkActorManager {
207
213
  `Actor '${actor.actorId}' is relocating.`
208
214
  );
209
215
  }
210
- const actorInstance = state.actor;
211
216
  const node = this.options.nativeActorNodeProvider?.() ?? this.options.nativeActorNode;
212
217
  const completions = this.options.nativeActorCompletionTableProvider?.();
213
218
  const entryNodeRid = state.entryNodeRid ?? current.nodeRid;
@@ -236,14 +241,7 @@ export class DefaultZLinkActorManager implements ZLinkActorManager {
236
241
  if (state.actorType !== undefined && state.ownsLocation) {
237
242
  await this.options.locationLifecycle?.releaseActor(state.actorType, actor.actorId, current);
238
243
  }
239
- this.options.actorDestroyedCleanup?.(actor.actorId);
240
- await disposeLifecycleHandlers(actorInstance);
241
- state.clearAfterDestroy();
242
- if (this.states.get(actor.actorId) === state) {
243
- this.states.delete(actor.actorId);
244
- this.actorMeshNames.delete(actor.actorId);
245
- }
246
- this.options.metrics?.change('zlink.actor.count', -1);
244
+ await this.finalizeDestroyedActor(actor.actorId, state);
247
245
  });
248
246
  try {
249
247
  await destroyTask;
@@ -265,7 +263,7 @@ export class DefaultZLinkActorManager implements ZLinkActorManager {
265
263
  const state = this.getOrCreateState(actorId);
266
264
  this.rememberActorMeshFromType(actorId, actorType);
267
265
  if (state.actor !== undefined) {
268
- await disposeLifecycleHandlers(state.actor);
266
+ await disposeLifecycleHandlers(state.actor, this.detachedTaskRunner);
269
267
  }
270
268
  state.prepareForRemoteReentry();
271
269
  const operation = state.getOrStartCreation(actorType, false, () =>
@@ -410,7 +408,7 @@ export class DefaultZLinkActorManager implements ZLinkActorManager {
410
408
  actorType: string,
411
409
  objectGeneration: bigint,
412
410
  authorityOwnerGeneration: bigint,
413
- spotId: RoutingId,
411
+ spotId: RoutingId | undefined,
414
412
  spotGeneration: bigint,
415
413
  membershipEpoch: bigint,
416
414
  signal?: AbortSignal,
@@ -436,7 +434,7 @@ export class DefaultZLinkActorManager implements ZLinkActorManager {
436
434
  actorType,
437
435
  objectGeneration,
438
436
  authorityOwnerGeneration,
439
- String(spotId),
437
+ spotId === undefined ? undefined : String(spotId),
440
438
  spotGeneration,
441
439
  membershipEpoch
442
440
  );
@@ -459,18 +457,13 @@ export class DefaultZLinkActorManager implements ZLinkActorManager {
459
457
  await registry.restore(transfer.adapterKey, actor, transfer.state, signal);
460
458
  }
461
459
  state.setLocationGeneration(authorityOwnerGeneration);
462
- state.setJoinedSpot(spotId, undefined, membershipEpoch);
460
+ if (spotId !== undefined) state.setJoinedSpot(spotId, undefined, membershipEpoch);
463
461
  return actor;
464
462
  } catch (error) {
465
463
  if (nativeRef !== undefined) node.discardRelocatedActor?.(nativeRef);
466
464
  this.relocationStaged.delete(actorId);
467
465
  const failedState = this.states.get(actorId);
468
- if (failedState?.actor !== undefined) {
469
- await disposeLifecycleHandlers(failedState.actor);
470
- }
471
- failedState?.clearAfterDestroy();
472
- this.states.delete(actorId);
473
- this.actorMeshNames.delete(actorId);
466
+ await this.finalizeActorState(actorId, failedState);
474
467
  throw error;
475
468
  }
476
469
  }
@@ -500,29 +493,61 @@ export class DefaultZLinkActorManager implements ZLinkActorManager {
500
493
  const state = this.states.get(actorId);
501
494
  const node = this.options.nativeActorNodeProvider?.() ?? this.options.nativeActorNode;
502
495
  const nativeActorRef = exactNativeActorRef ?? state?.nativeActorRef;
503
- if (nativeActorRef !== undefined) {
504
- node?.discardRelocatedActor?.(nativeActorRef);
496
+ const failures: unknown[] = [];
497
+ try {
498
+ if (nativeActorRef !== undefined) {
499
+ node?.discardRelocatedActor?.(nativeActorRef);
500
+ }
501
+ } catch (error) {
502
+ failures.push(error);
505
503
  }
506
- if (state?.actor !== undefined) {
507
- await disposeLifecycleHandlers(state.actor);
504
+ try {
505
+ await this.completeCoreRelocationSource(actorId);
506
+ } catch (error) {
507
+ failures.push(error);
508
+ }
509
+ if (failures.length > 0) {
510
+ throw failures.length === 1
511
+ ? failures[0]
512
+ : new AggregateError(failures, 'Actor relocation cleanup failed.');
508
513
  }
509
- state?.clearAfterDestroy();
510
- this.states.delete(actorId);
511
- this.actorMeshNames.delete(actorId);
512
- this.relocationStaged.delete(actorId);
513
514
  }
514
515
 
515
516
  async completeCoreRelocationSource(actorId: string): Promise<void> {
516
517
  const state = this.states.get(actorId);
517
- if (state?.actor !== undefined) {
518
- await disposeLifecycleHandlers(state.actor);
518
+ await this.finalizeActorState(actorId, state);
519
+ }
520
+
521
+ private async finalizeActorState(
522
+ actorId: string,
523
+ state: ZLinkActorRuntimeState | undefined
524
+ ): Promise<void> {
525
+ if (state === undefined || this.states.get(actorId) !== state) return;
526
+ try {
527
+ if (state.actor !== undefined)
528
+ await disposeLifecycleHandlers(state.actor, this.detachedTaskRunner);
529
+ } finally {
530
+ state.clearAfterDestroy();
531
+ if (this.states.get(actorId) === state) {
532
+ this.states.delete(actorId);
533
+ this.actorMeshNames.delete(actorId);
534
+ this.relocationStaged.delete(actorId);
535
+ }
519
536
  }
520
- state?.clearAfterDestroy();
521
- this.states.delete(actorId);
522
- this.actorMeshNames.delete(actorId);
523
- this.relocationStaged.delete(actorId);
524
537
  }
525
538
 
539
+ private async finalizeDestroyedActor(
540
+ actorId: string,
541
+ state: ZLinkActorRuntimeState
542
+ ): Promise<void> {
543
+ if (this.states.get(actorId) !== state) return;
544
+ try {
545
+ this.options.actorDestroyedCleanup?.(actorId);
546
+ } finally {
547
+ await this.finalizeActorState(actorId, state);
548
+ this.options.metrics?.change(METRIC_NAMES.ActorCount, -1);
549
+ }
550
+ }
526
551
  async getOrCreateActor(
527
552
  actorId: string,
528
553
  actorType: string,
@@ -572,7 +597,7 @@ export class DefaultZLinkActorManager implements ZLinkActorManager {
572
597
  createRequest,
573
598
  signal,
574
599
  false,
575
- 30_000,
600
+ DEFAULT_REQUEST_TIMEOUT_MS,
576
601
  nativeActorRef
577
602
  );
578
603
  }
@@ -637,14 +662,7 @@ export class DefaultZLinkActorManager implements ZLinkActorManager {
637
662
  destroyedActorRef
638
663
  );
639
664
  }
640
- this.options.actorDestroyedCleanup?.(actor.context.actorId);
641
- await disposeLifecycleHandlers(actor);
642
- state.clearAfterDestroy();
643
- if (this.states.get(actor.context.actorId) === state) {
644
- this.states.delete(actor.context.actorId);
645
- this.actorMeshNames.delete(actor.context.actorId);
646
- }
647
- this.options.metrics?.change('zlink.actor.count', -1);
665
+ await this.finalizeDestroyedActor(actor.context.actorId, state);
648
666
  });
649
667
 
650
668
  try {
@@ -662,7 +680,7 @@ export class DefaultZLinkActorManager implements ZLinkActorManager {
662
680
  request: unknown,
663
681
  signal?: AbortSignal,
664
682
  claimLocation = true,
665
- timeoutMs = 30_000,
683
+ timeoutMs: number = DEFAULT_REQUEST_TIMEOUT_MS,
666
684
  nativeActorRef?: ZLinkBackendActorRef
667
685
  ): Promise<ZLinkActorLocalCreateResult> {
668
686
  const deadline = performance.now() + timeoutMs;
@@ -687,9 +705,25 @@ export class DefaultZLinkActorManager implements ZLinkActorManager {
687
705
  if (request !== undefined && createRequest.nativeRequest !== undefined) {
688
706
  state.setCreateRequestPayload(createRequest.nativeRequest.data());
689
707
  }
690
- const operation = state.getOrStartCreation(actorType, failIfExists, () =>
691
- this.creation.createActor(actorId, actorType, state, createRequest, claimLocation, signal)
692
- );
708
+ const operation = state.getOrStartCreation(actorType, failIfExists, async () => {
709
+ const meshName = state.meshName ?? this.options.actorMeshNameProvider?.(actorType);
710
+ const release =
711
+ meshName === undefined
712
+ ? undefined
713
+ : await this.options.activationAdmission?.acquire(meshName, signal);
714
+ try {
715
+ return await this.creation.createActor(
716
+ actorId,
717
+ actorType,
718
+ state,
719
+ createRequest,
720
+ claimLocation,
721
+ signal
722
+ );
723
+ } finally {
724
+ release?.();
725
+ }
726
+ });
693
727
  if (operation.created) {
694
728
  void operation.task.then(
695
729
  (result) => {
@@ -753,7 +787,7 @@ export class DefaultZLinkActorManager implements ZLinkActorManager {
753
787
  if (this.states.get(actorId) === state) {
754
788
  this.states.delete(actorId);
755
789
  this.actorMeshNames.delete(actorId);
756
- this.options.metrics?.change('zlink.actor.count', -1);
790
+ this.options.metrics?.change(METRIC_NAMES.ActorCount, -1);
757
791
  }
758
792
  }
759
793
 
@@ -784,7 +818,7 @@ export class DefaultZLinkActorManager implements ZLinkActorManager {
784
818
  state.rememberMeshName(remembered);
785
819
  }
786
820
  this.states.set(actorId, state);
787
- this.options.metrics?.change('zlink.actor.count', 1);
821
+ this.options.metrics?.change(METRIC_NAMES.ActorCount, 1);
788
822
  return state;
789
823
  }
790
824
 
@@ -797,7 +831,7 @@ export class DefaultZLinkActorManager implements ZLinkActorManager {
797
831
  actorId: state.actorId,
798
832
  objectGeneration: 1n,
799
833
  meshName: state.meshName ?? '',
800
- nodeRid: this.options.actorCreatedNodeRidProvider?.() ?? 'local'
834
+ nodeRid: this.options.actorCreatedNodeRidProvider?.() ?? LOCAL_DIAGNOSTIC_NODE_RID
801
835
  };
802
836
  }
803
837
  }
@@ -817,7 +851,7 @@ class ZLinkActorCreateCallRuntime implements ZLinkActorCreateCall {
817
851
  private meshNameValue: string | undefined;
818
852
  private requestValue: unknown;
819
853
  private requestConfigured = false;
820
- private timeoutMsValue = 30_000;
854
+ private timeoutMsValue: number = DEFAULT_REQUEST_TIMEOUT_MS;
821
855
  private timeoutConfigured = false;
822
856
  private submitted = false;
823
857
  private readonly turn: ZLinkSpotSerialTurn | undefined = captureZLinkSpotSerialTurn();
@@ -942,7 +976,7 @@ async function waitForCreationRetry(signal?: AbortSignal): Promise<void> {
942
976
  if (error === undefined) resolve();
943
977
  else reject(error);
944
978
  };
945
- const timer = setTimeout(() => finish(), 5);
979
+ const timer = setTimeout(() => finish(), ACTOR_CREATION_RETRY_INTERVAL_MS);
946
980
  const onAbort = () => {
947
981
  finish(signal?.reason ?? new Error('Actor creation was aborted.'));
948
982
  };
@@ -1,28 +1,31 @@
1
+ import { ZlinkStreamContentType } from '@zlink-systems/stream-wire';
1
2
  import {
2
- ZLinkFrameworkInternalErrorKind,
3
- createInternalFrameworkException
4
- } from '../framework-errors-internal';
5
- import type {
6
- Type,
7
- ZLinkActor,
8
- ZLinkActorHandlerRegistry,
9
- ZLinkSpot,
10
- ZLinkSpotActorJoinResult,
11
- ZLinkMessageContext,
12
- ZLinkSpotActorRequestHandler,
13
- ZLinkSpotActorSendHandler
3
+ type Type,
4
+ type ZLinkActor,
5
+ type ZLinkActorHandlerRegistry,
6
+ type ZLinkMessageContext,
7
+ type ZLinkMessageSerializer,
8
+ type ZLinkSpot,
9
+ type ZLinkSpotActorJoinResult,
10
+ type ZLinkSpotActorRequestHandler,
11
+ type ZLinkSpotActorSendHandler,
12
+ ZLinkFrameworkException,
13
+ ZLinkMessageMetadataEmpty
14
14
  } from '../../contracts';
15
- import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
16
- import { ZLinkFrameworkException, ZLinkMessageMetadataEmpty } from '../../contracts';
15
+
17
16
  import type { Message } from '../../contracts/Common/Message';
18
- import { ZLinkConfigurationException } from '../configuration';
17
+ import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
19
18
  import { readZLinkDecoratorMetadata } from '../../contracts/Handlers/Attributes';
19
+ import { ZLinkConfigurationException } from '../configuration';
20
+ import type { ZLinkSerialWorkOptions } from '../execution/serial-execution-queue';
21
+ import {
22
+ ZLinkFrameworkInternalErrorKind,
23
+ createInternalFrameworkException
24
+ } from '../framework-errors-internal';
25
+ import { runWithLifecycleHandler } from '../handlers/handler-instance-scope';
20
26
  import { wrapFrameworkPayloadMessage } from '../messaging/payload-codec';
21
- import type { ZLinkMessageSerializer } from '../../contracts';
22
- import { actorJoinIdentity } from './actor-lifecycle-snapshot';
23
27
  import { runActorHandlerWithDeferredJoins } from './actor-join-deferred-scope';
24
- import { runWithLifecycleHandler } from '../handlers/handler-instance-scope';
25
- import type { ZLinkSerialWorkOptions } from '../execution/serial-execution-queue';
28
+ import { actorJoinIdentity } from './actor-lifecycle-snapshot';
26
29
 
27
30
  export enum ZLinkActorPacketKind {
28
31
  Send = 'send',
@@ -34,6 +37,7 @@ export interface ZLinkActorPacketDescriptor {
34
37
  readonly packetName: string;
35
38
  readonly actorType: Type<ZLinkActor>;
36
39
  readonly handlerType: Type;
40
+ readonly methodName?: string;
37
41
  }
38
42
 
39
43
  export class ZLinkSpotActorHandlerRegistryRuntime implements ZLinkActorHandlerRegistry {
@@ -56,7 +60,8 @@ export class ZLinkSpotActorHandlerRegistryRuntime implements ZLinkActorHandlerRe
56
60
  : ZLinkActorPacketKind.Request,
57
61
  packetName: resolvedPacketName,
58
62
  actorType: Object as unknown as Type<ZLinkActor>,
59
- handlerType
63
+ handlerType,
64
+ methodName: metadata.methodName
60
65
  });
61
66
  }
62
67
 
@@ -67,7 +72,16 @@ export class ZLinkSpotActorHandlerRegistryRuntime implements ZLinkActorHandlerRe
67
72
  `Actor packet '${descriptor.packetName}' for '${descriptor.actorType.name}' is already registered.`
68
73
  );
69
74
  }
70
- this.packets.set(key, descriptor);
75
+ const metadata = readZLinkDecoratorMetadata(descriptor.handlerType).find(
76
+ (entry) =>
77
+ entry.kind ===
78
+ (descriptor.kind === ZLinkActorPacketKind.Send ? 'spotActorSend' : 'spotActorRequest') &&
79
+ entry.packetName === descriptor.packetName
80
+ );
81
+ this.packets.set(key, {
82
+ ...descriptor,
83
+ methodName: descriptor.methodName ?? metadata?.methodName
84
+ });
71
85
  return this;
72
86
  }
73
87
 
@@ -144,9 +158,10 @@ export class ZLinkSpotActorDispatcher {
144
158
  await this.invokeHandler<ZLinkSpotActorSendHandler<ZLinkSpot, ZLinkActor, TMessage>, void>(
145
159
  actor,
146
160
  descriptor,
147
- (handler) =>
161
+ (handler, method) =>
148
162
  runActorHandlerWithDeferredJoins(() =>
149
- handler.handle(
163
+ method.call(
164
+ handler,
150
165
  this.options.spot,
151
166
  actor,
152
167
  this.createContext(packetName, context),
@@ -232,10 +247,11 @@ export class ZLinkSpotActorDispatcher {
232
247
  return await this.invokeHandler<
233
248
  ZLinkSpotActorRequestHandler<ZLinkSpot, ZLinkActor, TRequest, TReply>,
234
249
  TResult
235
- >(actor, descriptor, (handler) =>
250
+ >(actor, descriptor, (handler, method) =>
236
251
  runActorHandlerWithDeferredJoins(
237
252
  () =>
238
- handler.handle(
253
+ method.call(
254
+ handler,
239
255
  this.options.spot,
240
256
  actor,
241
257
  this.createContext(packetName, context),
@@ -274,7 +290,7 @@ export class ZLinkSpotActorDispatcher {
274
290
  evaluateActorJoin(
275
291
  actor: ZLinkActor,
276
292
  request: Message,
277
- contentType = 'application/json'
293
+ contentType: string = ZlinkStreamContentType.Json
278
294
  ): Promise<ZLinkSpotActorJoinResult> {
279
295
  return this.execute(async () => {
280
296
  const payload = wrapFrameworkPayloadMessage(
@@ -337,14 +353,29 @@ export class ZLinkSpotActorDispatcher {
337
353
 
338
354
  private async invokeHandler<THandler, TResult>(
339
355
  actor: ZLinkActor,
340
- descriptor: Pick<ZLinkActorPacketDescriptor, 'handlerType'>,
341
- callback: (handler: THandler) => Promise<TResult>
356
+ descriptor: Pick<ZLinkActorPacketDescriptor, 'handlerType' | 'methodName'>,
357
+ callback: (
358
+ handler: THandler,
359
+ method: THandler extends { handle: infer TMethod } ? TMethod : never
360
+ ) => Promise<TResult>
342
361
  ): Promise<TResult> {
343
362
  return await runWithLifecycleHandler(
344
363
  actor,
345
364
  descriptor.handlerType,
346
365
  this.options.providerResolver,
347
- (resolved) => callback(resolved as THandler)
366
+ (resolved) => {
367
+ const methodName = descriptor.methodName ?? 'handle';
368
+ const method = (resolved as Record<string, unknown>)[methodName];
369
+ if (typeof method !== 'function') {
370
+ throw new ZLinkConfigurationException(
371
+ `Actor handler '${descriptor.handlerType.name}.${methodName}' is not callable.`
372
+ );
373
+ }
374
+ return callback(
375
+ resolved as THandler,
376
+ method as THandler extends { handle: infer TMethod } ? TMethod : never
377
+ );
378
+ }
348
379
  );
349
380
  }
350
381