@zlink-systems/framework 0.30.0 → 0.30.2
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.
- package/LICENSE +150 -68
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Actors/ZLinkActorClient.d.ts +2 -1
- package/dist/contracts/Channels/Calls.d.ts +2 -1
- package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +6 -0
- package/dist/contracts/Common/ZLinkEncodedPayload.js +18 -3
- package/dist/contracts/Common/ZLinkMessageMetadata.js +11 -5
- package/dist/contracts/Common/encoded-payload-storage.d.ts +1 -1
- package/dist/contracts/Common/encoded-payload-storage.js +5 -2
- package/dist/contracts/Configuration/Builders.d.ts +1 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +2 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +5 -1
- package/dist/contracts/Configuration/RegistrationBuilders.js +2 -2
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +2 -2
- package/dist/contracts/Handlers/Attributes.d.ts +5 -13
- package/dist/contracts/Handlers/Attributes.js +7 -11
- package/dist/contracts/Handlers/JsonContract.d.ts +2 -46
- package/dist/contracts/Handlers/JsonContract.js +4 -153
- package/dist/contracts/Locations/Rows.d.ts +2 -0
- package/dist/contracts/Spots/Contracts.d.ts +6 -1
- package/dist/contracts/Spots/ZLinkSpot.d.ts +3 -3
- package/dist/nest-integration.d.ts +1 -1
- package/dist/nest-integration.js +2 -1
- package/dist/runtime/abort.d.ts +5 -0
- package/dist/runtime/abort.js +10 -0
- package/dist/runtime/actors/actor-authority-publication.js +3 -2
- package/dist/runtime/actors/actor-client.d.ts +1 -2
- package/dist/runtime/actors/actor-client.js +52 -57
- package/dist/runtime/actors/actor-context.d.ts +2 -0
- package/dist/runtime/actors/actor-context.js +46 -9
- package/dist/runtime/actors/actor-handoff.d.ts +8 -4
- package/dist/runtime/actors/actor-handoff.js +219 -92
- package/dist/runtime/actors/actor-join-relocation.d.ts +3 -0
- package/dist/runtime/actors/actor-local-native-join.js +13 -12
- package/dist/runtime/actors/actor-mailbox.js +27 -1
- package/dist/runtime/actors/actor-remote-joiner.js +3 -1
- package/dist/runtime/actors/actor-remote-wire.js +15 -0
- package/dist/runtime/actors/actor-reply.d.ts +4 -0
- package/dist/runtime/actors/actor-reply.js +29 -0
- package/dist/runtime/actors/actor-routed-join-transport.d.ts +6 -2
- package/dist/runtime/actors/actor-routed-json-request.d.ts +2 -0
- package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -0
- package/dist/runtime/actors/actor-runtime-state.js +2 -20
- package/dist/runtime/actors/actor-source-transfer.d.ts +1 -17
- package/dist/runtime/actors/index.d.ts +8 -3
- package/dist/runtime/actors/index.js +55 -27
- package/dist/runtime/actors/session-disconnected-wire.d.ts +8 -0
- package/dist/runtime/actors/session-disconnected-wire.js +48 -0
- package/dist/runtime/actors/spot-actor-dispatch.js +2 -2
- package/dist/runtime/admission.d.ts +9 -1
- package/dist/runtime/admission.js +56 -23
- package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +6 -8
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +39 -22
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +15 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +61 -20
- package/dist/runtime/application-jobs/contracts.d.ts +12 -1
- package/dist/runtime/backend/contracts/index.d.ts +37 -12
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +2 -2
- package/dist/runtime/backend/mesh-completion-table.d.ts +9 -1
- package/dist/runtime/backend/mesh-completion-table.js +154 -49
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +28 -1
- package/dist/runtime/backend/mesh-dispatch-pump.js +208 -101
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +2 -2
- package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -9
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +5 -2
- package/dist/runtime/backend/node/node-raw-binding-port.js +124 -72
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +46 -13
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +181 -164
- package/dist/runtime/backend/node/node-socket-backend-adapter.d.ts +1 -1
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +11 -11
- package/dist/runtime/backend/raw-binding-port.d.ts +2 -2
- package/dist/runtime/backend/runtime-message.d.ts +1 -0
- package/dist/runtime/backend/runtime-message.js +5 -0
- package/dist/runtime/backend/runtime-values.d.ts +1 -0
- package/dist/runtime/backend/runtime-values.js +2 -1
- package/dist/runtime/channels/channel-clients.d.ts +2 -0
- package/dist/runtime/channels/channel-clients.js +75 -23
- package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +25 -5
- package/dist/runtime/channels/channel-dispatch-pipeline.js +111 -56
- package/dist/runtime/channels/channel-dispatch-services.d.ts +1 -0
- package/dist/runtime/channels/channel-dispatch-services.js +45 -0
- package/dist/runtime/channels/channel-dispatchers.d.ts +4 -3
- package/dist/runtime/channels/channel-dispatchers.js +62 -54
- package/dist/runtime/channels/channel-envelope-inspection.d.ts +1 -2
- package/dist/runtime/channels/channel-envelope-inspection.js +1 -16
- package/dist/runtime/channels/channel-envelope.d.ts +2 -0
- package/dist/runtime/channels/channel-envelope.js +146 -28
- package/dist/runtime/channels/channel-outbound-operations.d.ts +2 -2
- package/dist/runtime/channels/channel-outbound-operations.js +8 -8
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +4 -3
- package/dist/runtime/channels/channel-runtime-lifecycle.js +19 -24
- package/dist/runtime/channels/channel-runtime-manager.d.ts +9 -8
- package/dist/runtime/channels/channel-runtime-manager.js +16 -16
- package/dist/runtime/channels/channel-transports.d.ts +18 -16
- package/dist/runtime/channels/channel-transports.js +77 -58
- package/dist/runtime/channels/client-server-location-runtime.js +5 -4
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +2 -1
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/fanout-location-runtime.js +3 -3
- package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
- package/dist/runtime/channels/local-spot-route-transport.js +2 -1
- package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +2 -2
- package/dist/runtime/channels/router-socket-spot-route-transport.js +4 -4
- package/dist/runtime/channels/source-spot-router.d.ts +2 -2
- package/dist/runtime/channels/source-spot-router.js +4 -4
- package/dist/runtime/channels/spot-node-route-transport.d.ts +2 -2
- package/dist/runtime/channels/spot-node-route-transport.js +4 -4
- package/dist/runtime/channels/spot-route-bridge-transport.d.ts +2 -2
- package/dist/runtime/channels/spot-route-bridge-transport.js +4 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +5 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +18 -18
- package/dist/runtime/diagnostics/flow-context.js +19 -7
- package/dist/runtime/diagnostics/index.js +4 -9
- package/dist/runtime/diagnostics/message-flow.d.ts +8 -0
- package/dist/runtime/diagnostics/message-flow.js +35 -5
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +2 -2
- package/dist/runtime/diagnostics/runtime-metrics.js +10 -8
- package/dist/runtime/execution/index.d.ts +4 -2
- package/dist/runtime/execution/index.js +33 -10
- package/dist/runtime/execution/serial-execution-queue.d.ts +5 -0
- package/dist/runtime/execution/serial-execution-queue.js +22 -2
- package/dist/runtime/execution/state-lane.d.ts +2 -0
- package/dist/runtime/execution/state-lane.js +5 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +2 -2
- package/dist/runtime/foundation/durable-service-request.d.ts +14 -0
- package/dist/runtime/foundation/durable-service-request.js +98 -0
- package/dist/runtime/foundation/operation-identity.d.ts +1 -0
- package/dist/runtime/foundation/operation-identity.js +5 -1
- package/dist/runtime/foundation/operation-registry.d.ts +25 -1
- package/dist/runtime/foundation/operation-registry.js +86 -18
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +61 -8
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +486 -266
- package/dist/runtime/foundation/service-liveness-registry.d.ts +12 -1
- package/dist/runtime/foundation/service-liveness-registry.js +38 -0
- package/dist/runtime/foundation/service-mailbox.d.ts +7 -0
- package/dist/runtime/foundation/service-maintenance-runtime.js +1 -6
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +3 -3
- package/dist/runtime/foundation/service-relocation-object-owner.js +48 -34
- package/dist/runtime/foundation/service-relocation-runtime.d.ts +2 -0
- package/dist/runtime/foundation/service-relocation-runtime.js +20 -4
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +10 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +2 -1
- package/dist/runtime/foundation/service-stateful-registry.d.ts +5 -4
- package/dist/runtime/foundation/service-stateful-registry.js +24 -26
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +75 -9
- package/dist/runtime/foundation/service-stateful-runtime.js +486 -218
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +14 -6
- package/dist/runtime/foundation/service-stateful-wire-codec.js +48 -27
- package/dist/runtime/foundation/service-topology-registry.d.ts +12 -2
- package/dist/runtime/foundation/service-topology-registry.js +61 -27
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +6 -1
- package/dist/runtime/foundation/service-wire-binary-primitives.js +27 -11
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +1 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +13 -3
- package/dist/runtime/foundation/service-wire-m6a-codec.js +189 -78
- package/dist/runtime/handlers/handler-instance-scope.d.ts +8 -0
- package/dist/runtime/handlers/handler-instance-scope.js +54 -11
- package/dist/runtime/host/actor-packet-relay.d.ts +6 -4
- package/dist/runtime/host/actor-packet-relay.js +59 -72
- package/dist/runtime/host/actor-placement-coordinator.js +25 -8
- package/dist/runtime/host/actor-runtime-options-factory.js +2 -2
- package/dist/runtime/host/actor-transfer-runtime.d.ts +7 -31
- package/dist/runtime/host/actor-transfer-runtime.js +85 -331
- package/dist/runtime/host/application-job-queue.d.ts +40 -7
- package/dist/runtime/host/application-job-queue.js +137 -42
- package/dist/runtime/host/entry-actor-runtime.d.ts +1 -0
- package/dist/runtime/host/entry-actor-runtime.js +3 -0
- package/dist/runtime/host/index.d.ts +12 -2
- package/dist/runtime/host/index.js +300 -202
- package/dist/runtime/host/location-runtime-owner.js +2 -6
- package/dist/runtime/host/mesh-router-resolver.d.ts +4 -0
- package/dist/runtime/host/mesh-router-resolver.js +14 -6
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -4
- package/dist/runtime/host/remote-bound-session-relay.js +73 -208
- package/dist/runtime/host/route-mesh-runtime.d.ts +2 -2
- package/dist/runtime/host/route-mesh-runtime.js +6 -4
- package/dist/runtime/host/runtime-shutdown.d.ts +1 -0
- package/dist/runtime/host/runtime-shutdown.js +3 -2
- package/dist/runtime/host/service-relocation-control.d.ts +1 -0
- package/dist/runtime/host/service-relocation-control.js +10 -4
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +22 -14
- package/dist/runtime/host/service-relocation-host-runtime.js +754 -599
- package/dist/runtime/host/spot-address-transport.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.js +16 -7
- package/dist/runtime/host/user-spot-creation-coordinator.js +33 -84
- package/dist/runtime/locations/actor-location-claims.d.ts +2 -2
- package/dist/runtime/locations/actor-location-claims.js +34 -19
- package/dist/runtime/locations/auto-connect-loop.d.ts +2 -0
- package/dist/runtime/locations/auto-connect-loop.js +22 -14
- package/dist/runtime/locations/auto-connect-reconciler.js +0 -6
- package/dist/runtime/locations/auto-connect-types.d.ts +0 -1
- package/dist/runtime/locations/descriptor-publication.d.ts +4 -0
- package/dist/runtime/locations/descriptor-publication.js +11 -0
- package/dist/runtime/locations/domain-store-contract.d.ts +1 -0
- package/dist/runtime/locations/in-memory-authority-store.d.ts +7 -1
- package/dist/runtime/locations/in-memory-authority-store.js +56 -19
- package/dist/runtime/locations/in-memory-location-store.js +1 -10
- package/dist/runtime/locations/index.d.ts +1 -0
- package/dist/runtime/locations/index.js +1 -0
- package/dist/runtime/locations/lease-tracker.js +1 -6
- package/dist/runtime/locations/lifecycle.d.ts +1 -2
- package/dist/runtime/locations/lifecycle.js +2 -5
- package/dist/runtime/locations/location-store-repository.d.ts +51 -1
- package/dist/runtime/locations/location-store-repository.js +363 -139
- package/dist/runtime/locations/relocation-blob.d.ts +18 -1
- package/dist/runtime/locations/relocation-blob.js +52 -1
- package/dist/runtime/locations/request-source-resolver.d.ts +37 -0
- package/dist/runtime/locations/request-source-resolver.js +80 -0
- package/dist/runtime/locations/resolvers.js +1 -1
- package/dist/runtime/locations/runtime.d.ts +7 -3
- package/dist/runtime/locations/runtime.js +61 -53
- package/dist/runtime/messaging/framework-json-v1.d.ts +4 -6
- package/dist/runtime/messaging/framework-json-v1.js +38 -294
- package/dist/runtime/messaging/packet-name.d.ts +1 -1
- package/dist/runtime/messaging/packet-name.js +8 -24
- package/dist/runtime/messaging/payload-codec.d.ts +7 -1
- package/dist/runtime/messaging/payload-codec.js +7 -6
- package/dist/runtime/messaging/request-result.d.ts +2 -0
- package/dist/runtime/messaging/request-result.js +57 -0
- package/dist/runtime/messaging/submission-result.d.ts +1 -0
- package/dist/runtime/messaging/submission-result.js +5 -2
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +34 -1
- package/dist/runtime/protocol/service_wire_codec.generated.js +229 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +16 -1
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +37 -8
- package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +7 -2
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +36 -21
- package/dist/runtime/spots/index.d.ts +21 -11
- package/dist/runtime/spots/index.js +243 -178
- package/dist/runtime/spots/spot-activation-registry.d.ts +4 -2
- package/dist/runtime/spots/spot-activation-registry.js +21 -11
- package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
- package/dist/runtime/spots/spot-activation-state.js +7 -7
- package/dist/runtime/spots/spot-activation.d.ts +7 -3
- package/dist/runtime/spots/spot-activation.js +140 -52
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -0
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +13 -22
- package/dist/runtime/spots/spot-actor-membership.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-membership.js +0 -8
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +33 -8
- package/dist/runtime/spots/spot-actor-packet-drain.js +5 -33
- package/dist/runtime/spots/spot-entry-activation.d.ts +2 -0
- package/dist/runtime/spots/spot-entry-activation.js +20 -11
- package/dist/runtime/spots/spot-handler-registry.d.ts +7 -4
- package/dist/runtime/spots/spot-handler-registry.js +24 -10
- package/dist/runtime/spots/spot-manager-internal-contracts.d.ts +2 -2
- package/dist/runtime/spots/spot-manager-public.js +2 -2
- package/dist/runtime/spots/spot-node-autoconnect.d.ts +2 -1
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -42
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -2
- package/dist/runtime/spots/spot-node-runtime-manager.js +115 -50
- package/dist/runtime/spots/spot-outbound.d.ts +3 -0
- package/dist/runtime/spots/spot-outbound.js +27 -18
- package/dist/runtime/spots/spot-remote-codec.js +5 -1
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +1 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +1 -1
- package/dist/runtime/spots/spot-runtime-ports.d.ts +1 -1
- package/dist/runtime/spots/spot-serial-executor.d.ts +10 -0
- package/dist/runtime/spots/spot-serial-executor.js +61 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +19 -2
- package/dist/runtime/spots/spot-subscription-dispatch.js +1 -4
- package/dist/runtime/spots/spot-timer.d.ts +57 -5
- package/dist/runtime/spots/spot-timer.js +288 -103
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +42 -11
- package/dist/runtime/streams/actor-session-binding-registry.js +165 -48
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +8 -4
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +15 -8
- package/dist/runtime/streams/bound-session-service.d.ts +1 -1
- package/dist/runtime/streams/bound-session-service.js +6 -11
- package/dist/runtime/streams/index.d.ts +3 -2
- package/dist/runtime/streams/index.js +6 -4
- package/dist/runtime/streams/managed-stream.js +3 -2
- package/dist/runtime/streams/native-fallback-bound-session.js +8 -73
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -8
- package/dist/runtime/streams/session-actor-coordinator.js +15 -32
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +3 -10
- package/dist/runtime/streams/stream-session-runtime.d.ts +1 -1
- package/dist/runtime/streams/stream-session-runtime.js +14 -31
- package/dist/runtime/workers/index.js +1 -1
- package/package.json +3 -3
- package/src/contracts/Actors/ZLinkActorClient.ts +2 -1
- package/src/contracts/Channels/Calls.ts +2 -1
- package/src/contracts/Common/ZLinkEncodedPayload.ts +24 -4
- package/src/contracts/Common/ZLinkMessageMetadata.ts +13 -8
- package/src/contracts/Common/encoded-payload-storage.ts +6 -3
- package/src/contracts/Configuration/Builders.ts +4 -1
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +7 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +6 -2
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -1
- package/src/contracts/Handlers/Attributes.ts +14 -21
- package/src/contracts/Handlers/JsonContract.ts +8 -216
- package/src/contracts/Locations/Rows.ts +2 -0
- package/src/contracts/Spots/Contracts.ts +10 -1
- package/src/contracts/Spots/ZLinkSpot.ts +3 -3
- package/src/nest-integration.ts +1 -0
- package/src/runtime/abort.ts +12 -0
- package/src/runtime/actors/actor-authority-publication.ts +3 -2
- package/src/runtime/actors/actor-client.ts +100 -85
- package/src/runtime/actors/actor-context.ts +49 -9
- package/src/runtime/actors/actor-handoff.ts +291 -110
- package/src/runtime/actors/actor-join-relocation.ts +3 -0
- package/src/runtime/actors/actor-local-native-join.ts +21 -26
- package/src/runtime/actors/actor-mailbox.ts +40 -2
- package/src/runtime/actors/actor-remote-joiner.ts +6 -1
- package/src/runtime/actors/actor-remote-wire.ts +17 -0
- package/src/runtime/actors/actor-reply.ts +42 -0
- package/src/runtime/actors/actor-routed-join-transport.ts +14 -4
- package/src/runtime/actors/actor-routed-json-request.ts +10 -2
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -0
- package/src/runtime/actors/actor-runtime-state.ts +2 -20
- package/src/runtime/actors/actor-source-transfer.ts +1 -34
- package/src/runtime/actors/index.ts +60 -32
- package/src/runtime/actors/session-disconnected-wire.ts +66 -0
- package/src/runtime/actors/spot-actor-dispatch.ts +4 -2
- package/src/runtime/admission.ts +69 -21
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +41 -25
- package/src/runtime/application-jobs/application-job-queue-scope.ts +83 -22
- package/src/runtime/application-jobs/contracts.ts +16 -1
- package/src/runtime/backend/contracts/index.ts +92 -18
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +5 -3
- package/src/runtime/backend/mesh-completion-table.ts +160 -57
- package/src/runtime/backend/mesh-dispatch-pump.ts +237 -108
- package/src/runtime/backend/node/node-backend-adapter-support.ts +17 -8
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +12 -2
- package/src/runtime/backend/node/node-raw-binding-port.ts +148 -85
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +315 -201
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +26 -11
- package/src/runtime/backend/raw-binding-port.ts +7 -2
- package/src/runtime/backend/runtime-message.ts +6 -0
- package/src/runtime/backend/runtime-values.ts +1 -0
- package/src/runtime/channels/channel-clients.ts +132 -58
- package/src/runtime/channels/channel-dispatch-pipeline.ts +198 -114
- package/src/runtime/channels/channel-dispatch-services.ts +69 -1
- package/src/runtime/channels/channel-dispatchers.ts +136 -90
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -16
- package/src/runtime/channels/channel-envelope.ts +225 -31
- package/src/runtime/channels/channel-outbound-operations.ts +22 -8
- package/src/runtime/channels/channel-runtime-lifecycle.ts +13 -13
- package/src/runtime/channels/channel-runtime-manager.ts +41 -17
- package/src/runtime/channels/channel-transports.ts +171 -112
- package/src/runtime/channels/client-server-location-runtime.ts +11 -10
- package/src/runtime/channels/dispatch-error-reporter.ts +4 -2
- package/src/runtime/channels/fanout-location-runtime.ts +17 -9
- package/src/runtime/channels/local-spot-route-transport.ts +3 -1
- package/src/runtime/channels/router-socket-spot-route-transport.ts +13 -4
- package/src/runtime/channels/source-spot-router.ts +8 -4
- package/src/runtime/channels/spot-node-route-transport.ts +8 -4
- package/src/runtime/channels/spot-route-bridge-transport.ts +6 -4
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +47 -18
- package/src/runtime/diagnostics/flow-context.ts +20 -7
- package/src/runtime/diagnostics/index.ts +1 -7
- package/src/runtime/diagnostics/message-flow.ts +47 -9
- package/src/runtime/diagnostics/runtime-metrics.ts +12 -10
- package/src/runtime/execution/index.ts +40 -14
- package/src/runtime/execution/serial-execution-queue.ts +33 -4
- package/src/runtime/execution/state-lane.ts +7 -0
- package/src/runtime/foundation/actor-join-recovery-codec.ts +2 -2
- package/src/runtime/foundation/durable-service-request.ts +137 -0
- package/src/runtime/foundation/operation-identity.ts +5 -1
- package/src/runtime/foundation/operation-registry.ts +98 -20
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +704 -336
- package/src/runtime/foundation/service-liveness-registry.ts +39 -0
- package/src/runtime/foundation/service-mailbox.ts +8 -0
- package/src/runtime/foundation/service-maintenance-runtime.ts +1 -8
- package/src/runtime/foundation/service-relocation-object-owner.ts +55 -36
- package/src/runtime/foundation/service-relocation-runtime.ts +25 -4
- package/src/runtime/foundation/service-runtime-contracts.ts +19 -2
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -1
- package/src/runtime/foundation/service-stateful-registry.ts +38 -35
- package/src/runtime/foundation/service-stateful-runtime.ts +732 -275
- package/src/runtime/foundation/service-stateful-wire-codec.ts +49 -16
- package/src/runtime/foundation/service-topology-registry.ts +91 -36
- package/src/runtime/foundation/service-wire-binary-primitives.ts +35 -12
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +231 -76
- package/src/runtime/handlers/handler-instance-scope.ts +67 -16
- package/src/runtime/host/actor-packet-relay.ts +113 -94
- package/src/runtime/host/actor-placement-coordinator.ts +31 -8
- package/src/runtime/host/actor-runtime-options-factory.ts +13 -2
- package/src/runtime/host/actor-transfer-runtime.ts +104 -430
- package/src/runtime/host/application-job-queue.ts +160 -41
- package/src/runtime/host/entry-actor-runtime.ts +4 -0
- package/src/runtime/host/index.ts +473 -271
- package/src/runtime/host/location-runtime-owner.ts +2 -6
- package/src/runtime/host/mesh-router-resolver.ts +13 -5
- package/src/runtime/host/remote-bound-session-relay.ts +88 -271
- package/src/runtime/host/route-mesh-runtime.ts +12 -6
- package/src/runtime/host/runtime-shutdown.ts +15 -4
- package/src/runtime/host/service-relocation-control.ts +11 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +1092 -759
- package/src/runtime/host/spot-address-transport.ts +4 -2
- package/src/runtime/host/spot-runtime-options-factory.ts +20 -7
- package/src/runtime/host/user-spot-creation-coordinator.ts +41 -100
- package/src/runtime/locations/actor-location-claims.ts +52 -30
- package/src/runtime/locations/auto-connect-loop.ts +22 -14
- package/src/runtime/locations/auto-connect-reconciler.ts +0 -6
- package/src/runtime/locations/auto-connect-types.ts +0 -1
- package/src/runtime/locations/descriptor-publication.ts +7 -0
- package/src/runtime/locations/domain-store-contract.ts +5 -0
- package/src/runtime/locations/in-memory-authority-store.ts +85 -23
- package/src/runtime/locations/in-memory-location-store.ts +1 -12
- package/src/runtime/locations/index.ts +1 -0
- package/src/runtime/locations/lease-tracker.ts +2 -9
- package/src/runtime/locations/lifecycle.ts +8 -26
- package/src/runtime/locations/location-store-repository.ts +628 -152
- package/src/runtime/locations/relocation-blob.ts +75 -1
- package/src/runtime/locations/request-source-resolver.ts +138 -0
- package/src/runtime/locations/resolvers.ts +2 -2
- package/src/runtime/locations/runtime.ts +98 -64
- package/src/runtime/messaging/framework-json-v1.ts +5 -325
- package/src/runtime/messaging/packet-name.ts +5 -25
- package/src/runtime/messaging/payload-codec.ts +8 -11
- package/src/runtime/messaging/request-result.ts +62 -0
- package/src/runtime/messaging/submission-result.ts +5 -1
- package/src/runtime/protocol/service_wire_codec.generated.ts +218 -5
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +16 -13
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +46 -25
- package/src/runtime/spots/index.ts +389 -283
- package/src/runtime/spots/spot-activation-registry.ts +25 -13
- package/src/runtime/spots/spot-activation-state.ts +12 -19
- package/src/runtime/spots/spot-activation.ts +198 -96
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +25 -55
- package/src/runtime/spots/spot-actor-membership.ts +0 -15
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +56 -11
- package/src/runtime/spots/spot-actor-packet-drain.ts +9 -52
- package/src/runtime/spots/spot-entry-activation.ts +33 -21
- package/src/runtime/spots/spot-handler-registry.ts +56 -12
- package/src/runtime/spots/spot-manager-internal-contracts.ts +2 -2
- package/src/runtime/spots/spot-manager-public.ts +2 -2
- package/src/runtime/spots/spot-node-autoconnect.ts +28 -47
- package/src/runtime/spots/spot-node-runtime-manager.ts +197 -67
- package/src/runtime/spots/spot-outbound.ts +39 -19
- package/src/runtime/spots/spot-remote-codec.ts +9 -2
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +2 -1
- package/src/runtime/spots/spot-runtime-ports.ts +1 -1
- package/src/runtime/spots/spot-serial-executor.ts +97 -25
- package/src/runtime/spots/spot-serial-turn-executor.ts +22 -3
- package/src/runtime/spots/spot-subscription-dispatch.ts +1 -4
- package/src/runtime/spots/spot-timer.ts +418 -158
- package/src/runtime/streams/actor-session-binding-registry.ts +236 -64
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +16 -8
- package/src/runtime/streams/bound-actor-relay-sender.ts +23 -9
- package/src/runtime/streams/bound-session-service.ts +7 -10
- package/src/runtime/streams/index.ts +12 -6
- package/src/runtime/streams/managed-stream.ts +4 -2
- package/src/runtime/streams/native-fallback-bound-session.ts +14 -103
- package/src/runtime/streams/session-actor-coordinator.ts +39 -88
- package/src/runtime/streams/stream-binding-runtime-ports.ts +3 -9
- package/src/runtime/streams/stream-session-runtime.ts +13 -34
- package/src/runtime/workers/index.ts +1 -1
|
@@ -59,22 +59,7 @@ export class ZLinkSpotActorAdmissionCoordinator {
|
|
|
59
59
|
remoteBoundSessionTarget,
|
|
60
60
|
fallbackActorRef,
|
|
61
61
|
undefined,
|
|
62
|
-
messageFollowOrigin
|
|
63
|
-
(
|
|
64
|
-
replayedParts,
|
|
65
|
-
replayReturnResponse,
|
|
66
|
-
replayRemoteBoundSessionTarget,
|
|
67
|
-
replayFallbackActorRef
|
|
68
|
-
) =>
|
|
69
|
-
this.dispatchActorPacketDirect(
|
|
70
|
-
origin,
|
|
71
|
-
activation,
|
|
72
|
-
actorId,
|
|
73
|
-
replayedParts,
|
|
74
|
-
replayReturnResponse,
|
|
75
|
-
replayRemoteBoundSessionTarget,
|
|
76
|
-
replayFallbackActorRef
|
|
77
|
-
)
|
|
62
|
+
messageFollowOrigin
|
|
78
63
|
);
|
|
79
64
|
if (handoff !== undefined) return await handoff;
|
|
80
65
|
return await this.dispatchActorPacketDirect(
|
|
@@ -102,10 +87,7 @@ export class ZLinkSpotActorAdmissionCoordinator {
|
|
|
102
87
|
),
|
|
103
88
|
serial: activation.serial,
|
|
104
89
|
actors: {
|
|
105
|
-
resolveActor: (actorId) =>
|
|
106
|
-
activation.hasDepartedActor(actorId)
|
|
107
|
-
? undefined
|
|
108
|
-
: (activation.resolveJoinedActor(actorId) ?? this.options.actorResolver?.(actorId)),
|
|
90
|
+
resolveActor: (actorId) => this.resolveActor(activation, actorId),
|
|
109
91
|
getTarget: () => activation.spot,
|
|
110
92
|
defaultAccept: false,
|
|
111
93
|
transfer:
|
|
@@ -192,38 +174,21 @@ export class ZLinkSpotActorAdmissionCoordinator {
|
|
|
192
174
|
actorId: string,
|
|
193
175
|
records: readonly ZLinkActorHandoffPrefixRecord[]
|
|
194
176
|
): ZLinkActorHandoffPrefixAdmission {
|
|
195
|
-
|
|
177
|
+
return activation.admitActorPacketPrefix(
|
|
196
178
|
actorId,
|
|
197
|
-
records
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
fallbackActorRef
|
|
210
|
-
)
|
|
211
|
-
)
|
|
212
|
-
),
|
|
213
|
-
preparation: record.preparation,
|
|
214
|
-
workOptions: { payloadBytes: record.payloadBytes }
|
|
215
|
-
}))
|
|
179
|
+
records,
|
|
180
|
+
(actorSerial, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef) =>
|
|
181
|
+
this.dispatchActorPacketInActorTurn(
|
|
182
|
+
currentApplicationJobOrigin(),
|
|
183
|
+
activation,
|
|
184
|
+
actorSerial,
|
|
185
|
+
actorId,
|
|
186
|
+
parts,
|
|
187
|
+
returnResponse,
|
|
188
|
+
remoteBoundSessionTarget,
|
|
189
|
+
fallbackActorRef
|
|
190
|
+
)
|
|
216
191
|
);
|
|
217
|
-
const terminal = Promise.allSettled(terminals).then((outcomes) => {
|
|
218
|
-
const errors = outcomes.flatMap((outcome) =>
|
|
219
|
-
outcome.status === 'rejected' ? [outcome.reason] : []
|
|
220
|
-
);
|
|
221
|
-
if (errors.length === 1) throw errors[0];
|
|
222
|
-
if (errors.length > 1) {
|
|
223
|
-
throw new AggregateError(errors, `Actor '${actorId}' durable prefix replay failed.`);
|
|
224
|
-
}
|
|
225
|
-
});
|
|
226
|
-
return { terminal };
|
|
227
192
|
}
|
|
228
193
|
|
|
229
194
|
private dispatchActorPacketInActorTurn(
|
|
@@ -242,11 +207,7 @@ export class ZLinkSpotActorAdmissionCoordinator {
|
|
|
242
207
|
spotId: () => String(activation.spotId),
|
|
243
208
|
registry: activation.actorHandlers,
|
|
244
209
|
serial: actorSerial,
|
|
245
|
-
resolveActor: (targetActorId) =>
|
|
246
|
-
activation.hasDepartedActor(targetActorId)
|
|
247
|
-
? undefined
|
|
248
|
-
: (activation.resolveJoinedActor(targetActorId) ??
|
|
249
|
-
this.options.actorResolver?.(targetActorId)),
|
|
210
|
+
resolveActor: (targetActorId) => this.resolveActor(activation, targetActorId),
|
|
250
211
|
actorLeft: (targetActorId) => activation.hasDepartedActor(targetActorId),
|
|
251
212
|
onDisconnectActor: (actor) =>
|
|
252
213
|
activation.serial.execute(() => activation.spot.onDisconnectActor?.(actor)),
|
|
@@ -271,6 +232,15 @@ export class ZLinkSpotActorAdmissionCoordinator {
|
|
|
271
232
|
);
|
|
272
233
|
}
|
|
273
234
|
|
|
235
|
+
private resolveActor(activation: ZLinkSpotActivation, actorId: string): ZLinkActor | undefined {
|
|
236
|
+
if (activation.hasDepartedActor(actorId)) return undefined;
|
|
237
|
+
// The manager owns relocation visibility. Membership alone cannot publish
|
|
238
|
+
// a staged Actor; resolver absence supports standalone Spot runtimes.
|
|
239
|
+
return this.options.actorResolver === undefined
|
|
240
|
+
? activation.resolveJoinedActor(actorId)
|
|
241
|
+
: this.options.actorResolver(actorId);
|
|
242
|
+
}
|
|
243
|
+
|
|
274
244
|
private async commitTransferredActorTransaction(
|
|
275
245
|
activation: ZLinkSpotActivation,
|
|
276
246
|
actor: ZLinkActor,
|
|
@@ -219,21 +219,6 @@ export class ZLinkSpotActorMembership {
|
|
|
219
219
|
);
|
|
220
220
|
}
|
|
221
221
|
|
|
222
|
-
async restoreActorAfterFailedTransfer(
|
|
223
|
-
spotId: RoutingId,
|
|
224
|
-
actor: ZLinkActor,
|
|
225
|
-
signal?: AbortSignal
|
|
226
|
-
): Promise<void> {
|
|
227
|
-
throwIfAborted(signal);
|
|
228
|
-
const activation = this.requireActivation(spotId);
|
|
229
|
-
await this.runLifecycleOperation(activation, () =>
|
|
230
|
-
activation.serial.execute(async () => {
|
|
231
|
-
activation.cancelActorTransfer(actor.context.actorId);
|
|
232
|
-
await activation.spot.onJoinedActor(actor);
|
|
233
|
-
})
|
|
234
|
-
);
|
|
235
|
-
}
|
|
236
|
-
|
|
237
222
|
async beginActorTransfer(spotId: RoutingId, actorId: string): Promise<void> {
|
|
238
223
|
const activation = this.requireActivation(spotId);
|
|
239
224
|
await this.runLifecycleOperation(activation, () =>
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import { actorMessageFollowContext } from '../actors/actor-message-follow-context';
|
|
2
|
+
import { DefaultZLinkActorContext } from '../actors/actor-context';
|
|
3
|
+
import { decodeSessionDisconnected } from '../actors/session-disconnected-wire';
|
|
4
|
+
import { routingIdsEqual } from '../routing-id';
|
|
1
5
|
import type { ApplicationJobOrigin } from '../application-jobs/contracts';
|
|
2
6
|
import {
|
|
3
7
|
ZLinkFrameworkInternalErrorKind,
|
|
@@ -12,7 +16,13 @@ import type {
|
|
|
12
16
|
ZLinkSpot
|
|
13
17
|
} from '../../contracts';
|
|
14
18
|
import type { Message } from '../../contracts/Common/Message';
|
|
15
|
-
import {
|
|
19
|
+
import {
|
|
20
|
+
ZLinkFrameworkException,
|
|
21
|
+
ZLinkFrameworkErrorKind,
|
|
22
|
+
ZLinkMessage,
|
|
23
|
+
ZLinkEncodedPayload,
|
|
24
|
+
zlinkMessageMetadata
|
|
25
|
+
} from '../../contracts';
|
|
16
26
|
import {
|
|
17
27
|
ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome,
|
|
18
28
|
ZLinkRuntimeDispatchErrorAction as ZLinkDispatchErrorAction,
|
|
@@ -45,6 +55,10 @@ import { zlinkMetadataByteLength, zlinkSerialWorkOptions } from '../execution/se
|
|
|
45
55
|
import type { ZLinkMessageFollowOrigin } from '../foundation/service-runtime-contracts';
|
|
46
56
|
import { releaseApplicationJobPermitBeforeHandler } from '../application-jobs/application-job-queue-scope';
|
|
47
57
|
|
|
58
|
+
const emptyDisconnectedReply = ZLinkMessage.fromEncoded(
|
|
59
|
+
ZLinkEncodedPayload.fromOwned(Buffer.alloc(0))
|
|
60
|
+
);
|
|
61
|
+
|
|
48
62
|
export interface ZLinkActorResponseOptions {
|
|
49
63
|
readonly metadata: ReadonlyMap<string, string>;
|
|
50
64
|
readonly compressPayload: boolean;
|
|
@@ -204,11 +218,13 @@ export class ZLinkSpotActorPacketDispatch {
|
|
|
204
218
|
? ZLinkDispatchErrorAction.ReplyError
|
|
205
219
|
: ZLinkDispatchErrorAction.Drop;
|
|
206
220
|
this.trace(ZLinkMessageFlowOutcome.Received, actorId, header, messageKind);
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
header.
|
|
210
|
-
|
|
211
|
-
|
|
221
|
+
const disconnected = header.name === ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET;
|
|
222
|
+
const disconnectedReply =
|
|
223
|
+
disconnected && header.kind === ZLinkStreamMessageKind.Request
|
|
224
|
+
? emptyDisconnectedReply
|
|
225
|
+
: undefined;
|
|
226
|
+
if (this.options.actorLeft?.(actorId) === true && disconnected) {
|
|
227
|
+
return disconnectedReply;
|
|
212
228
|
}
|
|
213
229
|
const routed = await this.options.routeBeforeLocal?.(delivery);
|
|
214
230
|
if (routed?.handled === true) {
|
|
@@ -229,9 +245,34 @@ export class ZLinkSpotActorPacketDispatch {
|
|
|
229
245
|
requestTerminal
|
|
230
246
|
);
|
|
231
247
|
}
|
|
232
|
-
if (
|
|
248
|
+
if (disconnected) {
|
|
249
|
+
const identity = decodeSessionDisconnected(messageToBytes(parts[1]));
|
|
250
|
+
if (identity === undefined) {
|
|
251
|
+
if (this.options.dispatchErrors?.captureEnabled() === true)
|
|
252
|
+
this.reportInvalidFrame(
|
|
253
|
+
actorId,
|
|
254
|
+
messageKind,
|
|
255
|
+
new ZLinkFrameworkException(
|
|
256
|
+
ZLinkFrameworkErrorKind.ProtocolError,
|
|
257
|
+
'ProtocolError: malformed Session disconnect identity.'
|
|
258
|
+
),
|
|
259
|
+
'warning'
|
|
260
|
+
);
|
|
261
|
+
return disconnectedReply;
|
|
262
|
+
}
|
|
263
|
+
const current =
|
|
264
|
+
actor.context instanceof DefaultZLinkActorContext
|
|
265
|
+
? actor.context.currentSessionBinding
|
|
266
|
+
: undefined;
|
|
267
|
+
if (
|
|
268
|
+
current !== undefined &&
|
|
269
|
+
(!routingIdsEqual(current.sessionNodeRid, identity.sessionOwnerNodeRid) ||
|
|
270
|
+
current.sessionOwnerNodeGeneration !== identity.sessionOwnerNodeGeneration ||
|
|
271
|
+
current.bindingGeneration !== identity.bindingGeneration)
|
|
272
|
+
)
|
|
273
|
+
return disconnectedReply;
|
|
233
274
|
await this.options.onDisconnectActor(actor);
|
|
234
|
-
return
|
|
275
|
+
return disconnectedReply;
|
|
235
276
|
}
|
|
236
277
|
const decodePayload = this.createPayloadDecoder(parts[1], header);
|
|
237
278
|
return this.dispatchActorPacket(
|
|
@@ -303,7 +344,9 @@ export class ZLinkSpotActorPacketDispatch {
|
|
|
303
344
|
return undefined;
|
|
304
345
|
}
|
|
305
346
|
const missingActorError = createInternalFrameworkException(
|
|
306
|
-
|
|
347
|
+
actorMessageFollowContext(fallbackActorRef) === undefined
|
|
348
|
+
? ZLinkFrameworkInternalErrorKind.ActorDispatchHandlerNotFound
|
|
349
|
+
: ZLinkFrameworkInternalErrorKind.ActorLocationStale,
|
|
307
350
|
`SPOT actor is not registered locally: ${actorId}`
|
|
308
351
|
);
|
|
309
352
|
if (
|
|
@@ -603,7 +646,8 @@ export class ZLinkSpotActorPacketDispatch {
|
|
|
603
646
|
private reportInvalidFrame(
|
|
604
647
|
actorId: string,
|
|
605
648
|
messageKind: ZLinkDispatchMessageKind,
|
|
606
|
-
error?: unknown
|
|
649
|
+
error?: unknown,
|
|
650
|
+
severity?: 'warning'
|
|
607
651
|
): void {
|
|
608
652
|
this.options.dispatchErrors?.report({
|
|
609
653
|
surface: ZLinkDispatchErrorSurface.SpotActor,
|
|
@@ -612,7 +656,8 @@ export class ZLinkSpotActorPacketDispatch {
|
|
|
612
656
|
action: ZLinkDispatchErrorAction.Drop,
|
|
613
657
|
spotId: this.options.spotId(),
|
|
614
658
|
actorId,
|
|
615
|
-
error
|
|
659
|
+
error,
|
|
660
|
+
severity
|
|
616
661
|
});
|
|
617
662
|
}
|
|
618
663
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { ActorRef, RoutingId, ZLinkMessageSerializer } from '../../contracts';
|
|
2
|
-
import { ZLinkFrameworkException, ZLinkFrameworkErrorKind } from '../../contracts';
|
|
3
2
|
import type { Message } from '../../contracts/Common/Message';
|
|
4
3
|
import { ZLinkBufferMessage as RuntimeMessage } from '../backend/runtime-message';
|
|
5
4
|
import { RequestResult } from '../backend/runtime-values';
|
|
@@ -7,15 +6,9 @@ import type { ZLinkBackendActorRef, ZLinkBackendActorRecvInfo } from '../backend
|
|
|
7
6
|
import type { ZLinkActorPacketDelivery } from './spot-actor-packet-dispatch';
|
|
8
7
|
import { REMOTE_BOUND_SESSION_BIND_PACKET } from './spot-remote-codec';
|
|
9
8
|
import { ZLINK_RECV_DONT_WAIT } from './spot-native-flags';
|
|
10
|
-
import {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
messageToBytes,
|
|
14
|
-
streamCodecForContentType,
|
|
15
|
-
ZLinkStreamHeaderFlags,
|
|
16
|
-
ZLinkStreamMessageKind
|
|
17
|
-
} from '../streams/protocol';
|
|
18
|
-
import { encodeFrameworkPayload } from '../messaging/payload-codec';
|
|
9
|
+
import { decodeStreamHeader, messageToBytes, ZLinkStreamMessageKind } from '../streams/protocol';
|
|
10
|
+
import { encodeActorReply } from '../actors/actor-reply';
|
|
11
|
+
import { boundSessionErrorPayload } from '../streams/bound-session-response-target';
|
|
19
12
|
|
|
20
13
|
export interface ZLinkActorDispatchPart {
|
|
21
14
|
readonly info: {
|
|
@@ -218,7 +211,7 @@ export class ZLinkSpotActorPacketDrain {
|
|
|
218
211
|
this.encodeActorReplyFrame(
|
|
219
212
|
parts[0],
|
|
220
213
|
ZLinkStreamMessageKind.Error,
|
|
221
|
-
|
|
214
|
+
boundSessionErrorPayload(error)
|
|
222
215
|
)
|
|
223
216
|
],
|
|
224
217
|
RequestResult.Ok
|
|
@@ -231,37 +224,14 @@ export class ZLinkSpotActorPacketDrain {
|
|
|
231
224
|
kind: ZLinkStreamMessageKind.Response | ZLinkStreamMessageKind.Error,
|
|
232
225
|
payload: unknown
|
|
233
226
|
): Message {
|
|
234
|
-
const
|
|
235
|
-
|
|
227
|
+
const [frame] = encodeActorReply(
|
|
228
|
+
messageToBytes(requestHeaderPart),
|
|
229
|
+
kind,
|
|
236
230
|
payload,
|
|
237
231
|
this.options.messageSerializers,
|
|
238
|
-
|
|
239
|
-
'payload'
|
|
232
|
+
this.flowEnabled()
|
|
240
233
|
);
|
|
241
|
-
|
|
242
|
-
// encodeStreamFrame returns a fresh, unaliased array; view it without re-copying.
|
|
243
|
-
const frame = encodeStreamFrame(
|
|
244
|
-
{
|
|
245
|
-
kind,
|
|
246
|
-
codec: streamCodecForContentType(encoded.contentType),
|
|
247
|
-
flags: ZLinkStreamHeaderFlags.None,
|
|
248
|
-
requestSeq: requestHeader.requestSeq,
|
|
249
|
-
name: '',
|
|
250
|
-
metadata: new Map(),
|
|
251
|
-
correlationId: requestHeader.correlationId,
|
|
252
|
-
// Spec 27 §7: preserve the request flow pair on the reply while
|
|
253
|
-
// tracing is on; the gated decode above already strips it at Off.
|
|
254
|
-
flowId: requestHeader.flowId,
|
|
255
|
-
flowOrigin: requestHeader.flowOrigin
|
|
256
|
-
},
|
|
257
|
-
encoded.message.data()
|
|
258
|
-
);
|
|
259
|
-
return RuntimeMessage.fromOwned(
|
|
260
|
-
Buffer.from(frame.buffer, frame.byteOffset, frame.byteLength)
|
|
261
|
-
) as Message;
|
|
262
|
-
} finally {
|
|
263
|
-
encoded.message.close();
|
|
264
|
-
}
|
|
234
|
+
return RuntimeMessage.fromOwned(frame) as Message;
|
|
265
235
|
}
|
|
266
236
|
|
|
267
237
|
private consumeRemoteBoundSessionBind(
|
|
@@ -329,16 +299,3 @@ function isStreamHeaderMessage(message: Message, flowEnabled: boolean): boolean
|
|
|
329
299
|
function closeMessages(messages: readonly Message[]): void {
|
|
330
300
|
for (const message of messages) message.close();
|
|
331
301
|
}
|
|
332
|
-
|
|
333
|
-
function frameworkErrorPayload(error: unknown): {
|
|
334
|
-
readonly message: string;
|
|
335
|
-
readonly kind: ZLinkFrameworkErrorKind;
|
|
336
|
-
} {
|
|
337
|
-
return {
|
|
338
|
-
message: error instanceof Error ? error.message : String(error),
|
|
339
|
-
kind:
|
|
340
|
-
error instanceof ZLinkFrameworkException
|
|
341
|
-
? error.kind
|
|
342
|
-
: ZLinkFrameworkErrorKind.InternalFailure
|
|
343
|
-
};
|
|
344
|
-
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { currentApplicationJobOrigin } from '../application-jobs/application-job-queue-scope';
|
|
1
2
|
import type {
|
|
2
3
|
ActorRef,
|
|
3
4
|
RoutingId,
|
|
@@ -50,7 +51,7 @@ import {
|
|
|
50
51
|
DefaultZLinkSpotHandlerRegistry
|
|
51
52
|
} from './spot-handler-registry';
|
|
52
53
|
import { DefaultZLinkSpotOutbound, type ZLinkSpotRoutedTransport } from './spot-outbound';
|
|
53
|
-
import {
|
|
54
|
+
import { createFreshProviderInstance } from './spot-provider';
|
|
54
55
|
import { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
|
|
55
56
|
import { ZLinkSpotSerialExecutor } from './spot-serial-executor';
|
|
56
57
|
import { invokeSpotClosing } from './spot-closing';
|
|
@@ -106,7 +107,7 @@ export class ZLinkEntrySpotActivation {
|
|
|
106
107
|
private readonly spotSerialExecutor: ZLinkSpotSerialExecutor;
|
|
107
108
|
private readonly timers: ZLinkSpotTimerRegistry;
|
|
108
109
|
private readonly actorHandlers = new ZLinkSpotActorHandlerRegistryRuntime();
|
|
109
|
-
private readonly handlers
|
|
110
|
+
private readonly handlers: DefaultZLinkSpotHandlerRegistry;
|
|
110
111
|
private readonly outbound: DefaultZLinkSpotOutbound;
|
|
111
112
|
private readonly workerRuntime: ZLinkWorkerRuntime;
|
|
112
113
|
private readonly lifecycleMetrics: ZLinkSpotLifecycleMetrics;
|
|
@@ -125,6 +126,10 @@ export class ZLinkEntrySpotActivation {
|
|
|
125
126
|
'Entry Spot activation requires a detached task runner.'
|
|
126
127
|
);
|
|
127
128
|
}
|
|
129
|
+
this.handlers = new DefaultZLinkSpotHandlerRegistry(
|
|
130
|
+
this.actorHandlers,
|
|
131
|
+
options.providerResolver
|
|
132
|
+
);
|
|
128
133
|
this.serial = new ZLinkSpotSerialTurnExecutor(false, options.nativeSpot.routingId);
|
|
129
134
|
this.spotSerialExecutor = new ZLinkSpotSerialExecutor(
|
|
130
135
|
this.serial,
|
|
@@ -265,7 +270,7 @@ export class ZLinkEntrySpotActivation {
|
|
|
265
270
|
}
|
|
266
271
|
|
|
267
272
|
async create(): Promise<void> {
|
|
268
|
-
const entrySpot = await
|
|
273
|
+
const entrySpot = await createFreshProviderInstance(
|
|
269
274
|
this.options.entrySpotType,
|
|
270
275
|
this.options.providerResolver,
|
|
271
276
|
this.context
|
|
@@ -328,7 +333,10 @@ export class ZLinkEntrySpotActivation {
|
|
|
328
333
|
await cleanup(() => this.timers.dispose());
|
|
329
334
|
await cleanup(() => this.spotSerialExecutor.close());
|
|
330
335
|
await cleanup(() => disposeLifecycleHandlers(this.entrySpot, this.options.detachedTaskRunner));
|
|
331
|
-
await cleanup(() =>
|
|
336
|
+
await cleanup(async () => {
|
|
337
|
+
await this.options.entryActorRuntime?.releaseMembers?.(this.options.spotNodeName);
|
|
338
|
+
await this.options.nativeSpot.dispose();
|
|
339
|
+
});
|
|
332
340
|
if (this.initialized) {
|
|
333
341
|
this.lifecycleMetrics.closed('entry');
|
|
334
342
|
}
|
|
@@ -472,23 +480,7 @@ export class ZLinkEntrySpotActivation {
|
|
|
472
480
|
remoteBoundSessionTarget,
|
|
473
481
|
fallbackActorRef,
|
|
474
482
|
undefined,
|
|
475
|
-
messageFollowOrigin
|
|
476
|
-
(
|
|
477
|
-
replayedParts,
|
|
478
|
-
replayReturnResponse,
|
|
479
|
-
replayRemoteBoundSessionTarget,
|
|
480
|
-
replayFallbackActorRef
|
|
481
|
-
) =>
|
|
482
|
-
this.spotSerialExecutor.executeActor(actorId, () =>
|
|
483
|
-
this.dispatchActorPacketInsideMailbox({
|
|
484
|
-
origin: delivery.origin,
|
|
485
|
-
actorId,
|
|
486
|
-
parts: replayedParts,
|
|
487
|
-
returnResponse: replayReturnResponse,
|
|
488
|
-
remoteBoundSessionTarget: replayRemoteBoundSessionTarget,
|
|
489
|
-
fallbackActorRef: replayFallbackActorRef
|
|
490
|
-
})
|
|
491
|
-
)
|
|
483
|
+
messageFollowOrigin
|
|
492
484
|
);
|
|
493
485
|
if (handoff !== undefined) return await handoff;
|
|
494
486
|
return this.spotSerialExecutor.executeActor(actorId, () =>
|
|
@@ -496,6 +488,26 @@ export class ZLinkEntrySpotActivation {
|
|
|
496
488
|
);
|
|
497
489
|
}
|
|
498
490
|
|
|
491
|
+
/** Restores source packets through the Entry Actor's existing executor. */
|
|
492
|
+
admitActorPacketPrefix(
|
|
493
|
+
actorId: string,
|
|
494
|
+
records: readonly import('../actors/actor-handoff').ZLinkActorHandoffPrefixRecord[]
|
|
495
|
+
): import('../actors/actor-handoff').ZLinkActorHandoffPrefixAdmission {
|
|
496
|
+
return this.spotSerialExecutor.admitActorPacketPrefix(
|
|
497
|
+
actorId,
|
|
498
|
+
records,
|
|
499
|
+
(_serial, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef) =>
|
|
500
|
+
this.dispatchActorPacketInsideMailbox({
|
|
501
|
+
origin: currentApplicationJobOrigin(),
|
|
502
|
+
actorId,
|
|
503
|
+
parts,
|
|
504
|
+
returnResponse,
|
|
505
|
+
remoteBoundSessionTarget,
|
|
506
|
+
fallbackActorRef
|
|
507
|
+
})
|
|
508
|
+
);
|
|
509
|
+
}
|
|
510
|
+
|
|
499
511
|
private async replayActorBacklog(
|
|
500
512
|
actor: ZLinkActor,
|
|
501
513
|
backlog: readonly ZLinkActorHandoffPacket[]
|
|
@@ -2,9 +2,11 @@ import type {
|
|
|
2
2
|
Type,
|
|
3
3
|
ZLinkActor,
|
|
4
4
|
ZLinkEntrySpot,
|
|
5
|
+
ZLinkInstanceSpot,
|
|
5
6
|
ZLinkInstanceSpotHandlerRegistry,
|
|
6
7
|
ZLinkSpot,
|
|
7
|
-
ZLinkSpotHandlerRegistry
|
|
8
|
+
ZLinkSpotHandlerRegistry,
|
|
9
|
+
ZLinkSpotTimerHandler
|
|
8
10
|
} from '../../contracts';
|
|
9
11
|
import type {
|
|
10
12
|
ZLinkEntrySpotActorRequestHandlerRegistration,
|
|
@@ -16,12 +18,17 @@ import type {
|
|
|
16
18
|
ZLinkSpotPacketHandlerRegistration,
|
|
17
19
|
ZLinkSpotSubscriptionHandlerRegistration
|
|
18
20
|
} from '../../contracts/Configuration/RegistrationTypes';
|
|
19
|
-
import {
|
|
21
|
+
import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
|
|
22
|
+
import { prepareHandlerInstance } from '../handlers/handler-instance-scope';
|
|
23
|
+
import {
|
|
24
|
+
ZLinkFrameworkInternalErrorKind,
|
|
25
|
+
createInternalFrameworkException
|
|
26
|
+
} from '../framework-errors-internal';
|
|
20
27
|
import { ZLinkActorPacketKind, ZLinkSpotActorHandlerRegistryRuntime } from '../actors';
|
|
21
28
|
import { readZLinkDecoratorMetadata } from '../../contracts/Handlers/Attributes';
|
|
22
29
|
|
|
23
30
|
export interface ZLinkSpotHandlerRegistration {
|
|
24
|
-
readonly kind: 'packet' | 'subscribe' | 'actorSend' | 'actorRequest' | '
|
|
31
|
+
readonly kind: 'packet' | 'subscribe' | 'actorSend' | 'actorRequest' | 'timer';
|
|
25
32
|
readonly handlerType: Type;
|
|
26
33
|
readonly packetName?: string;
|
|
27
34
|
readonly channelName?: string;
|
|
@@ -34,7 +41,10 @@ export class DefaultZLinkSpotHandlerRegistry<
|
|
|
34
41
|
> implements ZLinkSpotHandlerRegistry {
|
|
35
42
|
private readonly entries: ZLinkSpotHandlerRegistration[] = [];
|
|
36
43
|
|
|
37
|
-
constructor(
|
|
44
|
+
constructor(
|
|
45
|
+
private readonly actorHandlers?: ZLinkSpotActorHandlerRegistryRuntime,
|
|
46
|
+
private readonly providerResolver?: ZLinkProviderResolver
|
|
47
|
+
) {}
|
|
38
48
|
|
|
39
49
|
addHandler<THandler>(handlerType: Type<THandler>, packetName?: string): this {
|
|
40
50
|
const metadata = readZLinkDecoratorMetadata(handlerType).find(
|
|
@@ -42,7 +52,8 @@ export class DefaultZLinkSpotHandlerRegistry<
|
|
|
42
52
|
);
|
|
43
53
|
const resolvedPacketName = packetName ?? metadata?.packetName;
|
|
44
54
|
if (metadata === undefined || resolvedPacketName === undefined) {
|
|
45
|
-
throw
|
|
55
|
+
throw createInternalFrameworkException(
|
|
56
|
+
ZLinkFrameworkInternalErrorKind.InvalidOperation,
|
|
46
57
|
`Actor packet handler '${handlerType.name}' must declare a packet name.`
|
|
47
58
|
);
|
|
48
59
|
}
|
|
@@ -62,7 +73,8 @@ export class DefaultZLinkSpotHandlerRegistry<
|
|
|
62
73
|
(entry) => entry.kind === 'spotActorSend' || entry.kind === 'spotActorRequest'
|
|
63
74
|
);
|
|
64
75
|
if (metadata?.packetName === undefined) {
|
|
65
|
-
throw
|
|
76
|
+
throw createInternalFrameworkException(
|
|
77
|
+
ZLinkFrameworkInternalErrorKind.InvalidOperation,
|
|
66
78
|
`Actor packet handler '${handlerType.name}' must declare a packet name.`
|
|
67
79
|
);
|
|
68
80
|
}
|
|
@@ -78,10 +90,21 @@ export class DefaultZLinkSpotHandlerRegistry<
|
|
|
78
90
|
const declared = readZLinkDecoratorMetadata(handlerType).find(
|
|
79
91
|
(entry) => entry.kind === 'packet'
|
|
80
92
|
)?.packetName;
|
|
93
|
+
prepareHandlerInstance(this.providerResolver, handlerType);
|
|
94
|
+
const resolvedPacketName = packetName ?? declared ?? handlerType.name;
|
|
95
|
+
if (
|
|
96
|
+
this.entries.some(
|
|
97
|
+
(entry) => entry.kind === 'packet' && entry.packetName === resolvedPacketName
|
|
98
|
+
)
|
|
99
|
+
)
|
|
100
|
+
throw createInternalFrameworkException(
|
|
101
|
+
ZLinkFrameworkInternalErrorKind.InvalidOperation,
|
|
102
|
+
`SPOT packet '${resolvedPacketName}' is already registered.`
|
|
103
|
+
);
|
|
81
104
|
this.entries.push({
|
|
82
105
|
kind: 'packet',
|
|
83
106
|
handlerType,
|
|
84
|
-
packetName:
|
|
107
|
+
packetName: resolvedPacketName
|
|
85
108
|
});
|
|
86
109
|
return this;
|
|
87
110
|
}
|
|
@@ -96,6 +119,7 @@ export class DefaultZLinkSpotHandlerRegistry<
|
|
|
96
119
|
actorType: Type<TActor>,
|
|
97
120
|
packetName: string
|
|
98
121
|
): this {
|
|
122
|
+
prepareHandlerInstance(this.providerResolver, handlerType);
|
|
99
123
|
this.entries.push({
|
|
100
124
|
kind: kind === ZLinkActorPacketKind.Send ? 'actorSend' : 'actorRequest',
|
|
101
125
|
handlerType,
|
|
@@ -139,10 +163,16 @@ export class DefaultZLinkSpotHandlerRegistry<
|
|
|
139
163
|
|
|
140
164
|
addSubscribe(handlerType: Type, channelName: string, topic: string): this {
|
|
141
165
|
if (channelName.trim().length === 0) {
|
|
142
|
-
throw
|
|
166
|
+
throw createInternalFrameworkException(
|
|
167
|
+
ZLinkFrameworkInternalErrorKind.InvalidOperation,
|
|
168
|
+
'SPOT subscribe channel name must not be empty.'
|
|
169
|
+
);
|
|
143
170
|
}
|
|
144
171
|
if (topic.trim().length === 0) {
|
|
145
|
-
throw
|
|
172
|
+
throw createInternalFrameworkException(
|
|
173
|
+
ZLinkFrameworkInternalErrorKind.InvalidOperation,
|
|
174
|
+
'SPOT subscribe topic must not be empty.'
|
|
175
|
+
);
|
|
146
176
|
}
|
|
147
177
|
if (
|
|
148
178
|
this.entries.some(
|
|
@@ -153,8 +183,12 @@ export class DefaultZLinkSpotHandlerRegistry<
|
|
|
153
183
|
entry.topic === topic
|
|
154
184
|
)
|
|
155
185
|
) {
|
|
156
|
-
|
|
186
|
+
throw createInternalFrameworkException(
|
|
187
|
+
ZLinkFrameworkInternalErrorKind.InvalidOperation,
|
|
188
|
+
`SPOT subscription '${channelName}/${topic}' is already registered.`
|
|
189
|
+
);
|
|
157
190
|
}
|
|
191
|
+
prepareHandlerInstance(this.providerResolver, handlerType);
|
|
158
192
|
this.entries.push({ kind: 'subscribe', handlerType, channelName, topic });
|
|
159
193
|
return this;
|
|
160
194
|
}
|
|
@@ -163,8 +197,11 @@ export class DefaultZLinkSpotHandlerRegistry<
|
|
|
163
197
|
return this.addSubscribe(handlerType, channelName, topic);
|
|
164
198
|
}
|
|
165
199
|
|
|
166
|
-
|
|
167
|
-
|
|
200
|
+
addTimerHandler<THandler extends ZLinkSpotTimerHandler<ZLinkSpot>>(
|
|
201
|
+
handlerType: Type<THandler>
|
|
202
|
+
): this {
|
|
203
|
+
prepareHandlerInstance(this.providerResolver, handlerType);
|
|
204
|
+
this.entries.push({ kind: 'timer', handlerType });
|
|
168
205
|
return this;
|
|
169
206
|
}
|
|
170
207
|
|
|
@@ -185,6 +222,13 @@ export class DefaultZLinkInstanceSpotHandlerRegistry implements ZLinkInstanceSpo
|
|
|
185
222
|
return this;
|
|
186
223
|
}
|
|
187
224
|
|
|
225
|
+
addTimerHandler<THandler extends ZLinkSpotTimerHandler<ZLinkInstanceSpot>>(
|
|
226
|
+
handlerType: Type<THandler>
|
|
227
|
+
): this {
|
|
228
|
+
this.registrations.addTimerHandler(handlerType as never);
|
|
229
|
+
return this;
|
|
230
|
+
}
|
|
231
|
+
|
|
188
232
|
snapshot(): readonly ZLinkSpotHandlerRegistration[] {
|
|
189
233
|
return this.registrations.snapshot();
|
|
190
234
|
}
|
|
@@ -196,7 +196,7 @@ export class ZLinkPublicSpotManager implements ZLinkSpotManager {
|
|
|
196
196
|
yield: (signal) => {
|
|
197
197
|
const yieldTurn = requireZLinkYieldTurn(turn);
|
|
198
198
|
const pending = this.submit(spotId, stableType, generatedIdentity, state, signal);
|
|
199
|
-
return yieldTurn.
|
|
199
|
+
return yieldTurn.yieldFrameworkPromise(pending);
|
|
200
200
|
}
|
|
201
201
|
};
|
|
202
202
|
return call;
|
|
@@ -264,7 +264,7 @@ export class ZLinkPublicSpotManager implements ZLinkSpotManager {
|
|
|
264
264
|
}
|
|
265
265
|
};
|
|
266
266
|
} catch (error) {
|
|
267
|
-
this.options.local.abortUserSpotPublication(target.meshName, spotId);
|
|
267
|
+
await this.options.local.abortUserSpotPublication(target.meshName, spotId);
|
|
268
268
|
throw error;
|
|
269
269
|
}
|
|
270
270
|
},
|