@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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Channels/IZLinkFanoutClient.d.ts +0 -6
- package/dist/contracts/Common/CoreTypes.d.ts +6 -0
- package/dist/contracts/Common/CoreTypes.js +7 -0
- package/dist/contracts/Common/index.d.ts +1 -1
- package/dist/contracts/Common/index.js +0 -1
- package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
- package/dist/contracts/Configuration/InternalDefaults.js +9 -1
- package/dist/contracts/Configuration/Registration.d.ts +13 -2
- package/dist/contracts/Configuration/Registration.js +58 -36
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
- package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
- package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
- package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
- package/dist/contracts/Handlers/JsonContract.js +10 -4
- package/dist/contracts/Locations/Authority.d.ts +1 -1
- package/dist/contracts/Locations/Authority.js +3 -2
- package/dist/contracts/Locations/Options.js +1 -1
- package/dist/contracts/Locations/Stores.d.ts +12 -0
- package/dist/contracts/Locations/Stores.js +9 -0
- package/dist/contracts/RouteMesh/RuntimeTopology.d.ts +8 -0
- package/dist/contracts/Spots/Contracts.d.ts +1 -1
- package/dist/internal.d.ts +5 -0
- package/dist/internal.js +16 -1
- package/dist/nest-integration.d.ts +4 -2
- package/dist/nest-integration.js +14 -4
- package/dist/runtime/abort.d.ts +1 -0
- package/dist/runtime/abort.js +8 -5
- package/dist/runtime/activation-admission.d.ts +28 -0
- package/dist/runtime/activation-admission.js +57 -0
- package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
- package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
- package/dist/runtime/actors/actor-client.d.ts +2 -2
- package/dist/runtime/actors/actor-client.js +42 -143
- package/dist/runtime/actors/actor-context.d.ts +3 -5
- package/dist/runtime/actors/actor-context.js +19 -17
- package/dist/runtime/actors/actor-handoff.d.ts +13 -7
- package/dist/runtime/actors/actor-handoff.js +36 -25
- package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
- package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
- package/dist/runtime/actors/actor-local-native-join.js +85 -123
- package/dist/runtime/actors/actor-native-lookup.js +2 -8
- package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
- package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
- package/dist/runtime/actors/actor-remote-joiner.d.ts +3 -3
- package/dist/runtime/actors/actor-remote-joiner.js +11 -17
- package/dist/runtime/actors/actor-remote-wire.js +5 -3
- package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
- package/dist/runtime/actors/actor-request-deadline.js +31 -0
- package/dist/runtime/actors/actor-retry-delay.js +2 -1
- package/dist/runtime/actors/actor-runtime-contracts.d.ts +4 -2
- package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
- package/dist/runtime/actors/actor-runtime-state.js +70 -187
- package/dist/runtime/actors/actor-source-transfer.d.ts +5 -5
- package/dist/runtime/actors/bound-session-wire.js +2 -7
- package/dist/runtime/actors/deferred-join-completion.d.ts +19 -0
- package/dist/runtime/actors/deferred-join-completion.js +21 -0
- package/dist/runtime/actors/index.d.ts +10 -8
- package/dist/runtime/actors/index.js +101 -73
- package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
- package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
- package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
- package/dist/runtime/admission.d.ts +7 -1
- package/dist/runtime/admission.js +11 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
- package/dist/runtime/backend/contracts/index.d.ts +8 -33
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +3 -26
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
- package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
- package/dist/runtime/backend/node/node-backend-adapter-factory.d.ts +1 -2
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +4 -18
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +7 -4
- package/dist/runtime/backend/node/node-backend-adapter-support.js +28 -34
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +11 -6
- package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
- package/dist/runtime/backend/node/node-raw-binding-port.d.ts +1 -1
- package/dist/runtime/backend/node/node-raw-binding-port.js +51 -19
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +21 -19
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +171 -111
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
- package/dist/runtime/backend/raw-binding-port.d.ts +13 -1
- package/dist/runtime/backend/runtime-values.d.ts +4 -1
- package/dist/runtime/backend/runtime-values.js +2 -0
- package/dist/runtime/channels/channel-clients.d.ts +20 -9
- package/dist/runtime/channels/channel-clients.js +68 -60
- package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
- package/dist/runtime/channels/channel-envelope.js +47 -29
- package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
- package/dist/runtime/channels/channel-outbound-operations.js +9 -18
- package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
- package/dist/runtime/channels/channel-receive-loops.js +27 -6
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
- package/dist/runtime/channels/channel-runtime-manager.d.ts +2 -5
- package/dist/runtime/channels/channel-runtime-manager.js +4 -12
- package/dist/runtime/channels/channel-socket-options.js +3 -2
- package/dist/runtime/channels/channel-socket-registry.d.ts +30 -32
- package/dist/runtime/channels/channel-socket-registry.js +296 -235
- package/dist/runtime/channels/channel-transports.d.ts +11 -20
- package/dist/runtime/channels/channel-transports.js +68 -47
- package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/client-server-location-runtime.js +10 -11
- package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
- package/dist/runtime/channels/client-server-service-wire.js +32 -11
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
- package/dist/runtime/channels/fanout-location-runtime.js +133 -81
- package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
- package/dist/runtime/channels/spot-direct-envelope.js +4 -3
- package/dist/runtime/channels/spot-node-route-transport.js +3 -2
- package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
- package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
- package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
- package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
- package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
- package/dist/runtime/diagnostics/flow-context.js +16 -2
- package/dist/runtime/diagnostics/index.d.ts +4 -2
- package/dist/runtime/diagnostics/index.js +14 -4
- package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
- package/dist/runtime/diagnostics/message-flow.js +10 -19
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
- package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
- package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
- package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
- package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
- package/dist/runtime/disposal.d.ts +5 -0
- package/dist/runtime/disposal.js +22 -0
- package/dist/runtime/execution/index.d.ts +22 -9
- package/dist/runtime/execution/index.js +107 -37
- package/dist/runtime/execution/serial-execution-queue.d.ts +12 -7
- package/dist/runtime/execution/serial-execution-queue.js +99 -26
- package/dist/runtime/execution/state-lane.d.ts +8 -1
- package/dist/runtime/execution/state-lane.js +118 -3
- package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
- package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
- package/dist/runtime/foundation/event-loop-resources.js +6 -119
- package/dist/runtime/foundation/listener-records.d.ts +11 -0
- package/dist/runtime/foundation/listener-records.js +20 -0
- package/dist/runtime/foundation/operation-identity.d.ts +2 -0
- package/dist/runtime/foundation/operation-identity.js +9 -5
- package/dist/runtime/foundation/operation-registry.d.ts +5 -7
- package/dist/runtime/foundation/operation-registry.js +34 -44
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +18 -26
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +122 -469
- package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
- package/dist/runtime/foundation/runtime-state-projections.js +8 -0
- package/dist/runtime/foundation/service-authority-payload-codec.d.ts +1 -0
- package/dist/runtime/foundation/service-authority-payload-codec.js +30 -12
- package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
- package/dist/runtime/foundation/service-discovery-registry.js +22 -3
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
- package/dist/runtime/foundation/service-liveness-registry.js +2 -1
- package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
- package/dist/runtime/foundation/service-maintenance-runtime.js +23 -8
- package/dist/runtime/foundation/service-metadata-codec.js +3 -3
- package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
- package/dist/runtime/foundation/service-relocation-coordinator.d.ts +9 -0
- package/dist/runtime/foundation/service-relocation-coordinator.js +14 -1
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +8 -0
- package/dist/runtime/foundation/service-relocation-object-owner.js +19 -6
- package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
- package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -19
- package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
- package/dist/runtime/foundation/service-stateful-registry.js +10 -2
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +28 -24
- package/dist/runtime/foundation/service-stateful-runtime.js +297 -244
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +12 -7
- package/dist/runtime/foundation/service-stateful-wire-codec.js +240 -143
- package/dist/runtime/foundation/service-topology-registry.d.ts +1 -3
- package/dist/runtime/foundation/service-topology-registry.js +22 -61
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
- package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
- package/dist/runtime/foundation/service-wire-codec.js +10 -8
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
- package/dist/runtime/framework-errors-internal.d.ts +2 -1
- package/dist/runtime/framework-errors-internal.js +343 -122
- package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
- package/dist/runtime/handlers/handler-instance-scope.js +61 -74
- package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
- package/dist/runtime/host/actor-packet-relay.js +48 -91
- package/dist/runtime/host/actor-placement-coordinator.js +7 -5
- package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
- package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
- package/dist/runtime/host/actor-transfer-runtime.d.ts +28 -28
- package/dist/runtime/host/actor-transfer-runtime.js +210 -256
- package/dist/runtime/host/application-job-queue.js +16 -33
- package/dist/runtime/host/bound-session-relay.js +1 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
- package/dist/runtime/host/index.d.ts +19 -14
- package/dist/runtime/host/index.js +234 -175
- package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
- package/dist/runtime/host/instance-activation-authority.js +17 -45
- package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
- package/dist/runtime/host/location-runtime-owner.js +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
- package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
- package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
- package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
- package/dist/runtime/host/remote-bound-session-relay.js +11 -23
- package/dist/runtime/host/route-mesh-runtime.d.ts +14 -10
- package/dist/runtime/host/route-mesh-runtime.js +178 -257
- package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
- package/dist/runtime/host/runtime-shutdown.js +18 -21
- package/dist/runtime/host/service-relocation-control.js +6 -1
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +71 -38
- package/dist/runtime/host/service-relocation-host-runtime.js +816 -651
- package/dist/runtime/host/spot-address-transport.d.ts +2 -3
- package/dist/runtime/host/spot-address-transport.js +34 -136
- package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
- package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -7
- package/dist/runtime/host/spot-runtime-options-factory.js +53 -21
- package/dist/runtime/host/stateful-authority-route-runtime.js +6 -2
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +14 -6
- package/dist/runtime/host/user-spot-creation-coordinator.js +96 -95
- package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
- package/dist/runtime/locations/authority-key-codec.js +4 -3
- package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
- package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
- package/dist/runtime/locations/creation-operation-id.js +6 -4
- package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
- package/dist/runtime/locations/in-memory-authority-store.js +31 -15
- package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
- package/dist/runtime/locations/in-memory-location-store.js +17 -14
- package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
- package/dist/runtime/locations/in-memory-provider-location-store.js +79 -27
- package/dist/runtime/locations/key-codec.js +3 -2
- package/dist/runtime/locations/lease-tracker.d.ts +3 -5
- package/dist/runtime/locations/lease-tracker.js +7 -11
- package/dist/runtime/locations/lifecycle.d.ts +5 -10
- package/dist/runtime/locations/lifecycle.js +4 -33
- package/dist/runtime/locations/location-store-failure.d.ts +2 -0
- package/dist/runtime/locations/location-store-failure.js +7 -0
- package/dist/runtime/locations/location-store-pages.d.ts +3 -0
- package/dist/runtime/locations/location-store-pages.js +13 -0
- package/dist/runtime/locations/location-store-repository.d.ts +5 -7
- package/dist/runtime/locations/location-store-repository.js +303 -332
- package/dist/runtime/locations/relocation-blob.js +18 -5
- package/dist/runtime/locations/resolvers.d.ts +5 -5
- package/dist/runtime/locations/resolvers.js +44 -30
- package/dist/runtime/locations/runtime.d.ts +5 -4
- package/dist/runtime/locations/runtime.js +123 -92
- package/dist/runtime/locations/spot-location-claims.d.ts +8 -2
- package/dist/runtime/locations/spot-location-claims.js +40 -23
- package/dist/runtime/messaging/payload-codec.js +26 -20
- package/dist/runtime/messaging/submission-result.d.ts +3 -0
- package/dist/runtime/messaging/submission-result.js +48 -0
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +2 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +17 -8
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +1 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +3 -2
- package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +3 -3
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +4 -4
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +6 -3
- package/dist/runtime/spots/index.d.ts +29 -29
- package/dist/runtime/spots/index.js +441 -313
- package/dist/runtime/spots/spot-activation-registry.d.ts +4 -4
- package/dist/runtime/spots/spot-activation-registry.js +27 -60
- package/dist/runtime/spots/spot-activation-state.d.ts +2 -11
- package/dist/runtime/spots/spot-activation-state.js +4 -17
- package/dist/runtime/spots/spot-activation.d.ts +10 -9
- package/dist/runtime/spots/spot-activation.js +103 -81
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
- package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
- package/dist/runtime/spots/spot-actor-join-dispatch.js +5 -55
- package/dist/runtime/spots/spot-actor-lifecycle-drain.js +2 -2
- package/dist/runtime/spots/spot-actor-membership.d.ts +7 -5
- package/dist/runtime/spots/spot-actor-membership.js +44 -53
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
- package/dist/runtime/spots/spot-context.d.ts +2 -2
- package/dist/runtime/spots/spot-entry-activation.d.ts +3 -4
- package/dist/runtime/spots/spot-entry-activation.js +9 -21
- package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
- package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
- package/dist/runtime/spots/spot-manager-public.js +6 -5
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +22 -21
- package/dist/runtime/spots/spot-node-runtime-manager.js +73 -82
- package/dist/runtime/spots/spot-outbound.d.ts +4 -3
- package/dist/runtime/spots/spot-outbound.js +10 -37
- package/dist/runtime/spots/spot-remote-codec.js +5 -3
- package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
- package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
- package/dist/runtime/spots/spot-route-replies.js +3 -1
- package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -2
- package/dist/runtime/spots/spot-routed-actor-admission.js +3 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +2 -7
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +1 -70
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
- package/dist/runtime/spots/spot-runtime-ports.d.ts +4 -20
- package/dist/runtime/spots/spot-serial-executor.d.ts +5 -0
- package/dist/runtime/spots/spot-serial-executor.js +9 -2
- package/dist/runtime/spots/spot-serial-turn-executor.d.ts +29 -6
- package/dist/runtime/spots/spot-serial-turn-executor.js +89 -13
- package/dist/runtime/spots/spot-timer.d.ts +3 -2
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +17 -32
- package/dist/runtime/streams/actor-session-binding-registry.js +145 -367
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +2 -6
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
- package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
- package/dist/runtime/streams/bound-session-service.d.ts +7 -0
- package/dist/runtime/streams/bound-session-service.js +12 -19
- package/dist/runtime/streams/index.d.ts +15 -14
- package/dist/runtime/streams/index.js +38 -39
- package/dist/runtime/streams/managed-stream.d.ts +3 -0
- package/dist/runtime/streams/managed-stream.js +17 -8
- package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
- package/dist/runtime/streams/protocol.d.ts +6 -33
- package/dist/runtime/streams/protocol.js +38 -110
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
- package/dist/runtime/streams/session-actor-coordinator.js +12 -4
- package/dist/runtime/streams/session-calls.d.ts +1 -1
- package/dist/runtime/streams/session-calls.js +5 -4
- package/dist/runtime/streams/session-context.d.ts +6 -6
- package/dist/runtime/streams/session-context.js +22 -4
- package/dist/runtime/streams/session-requests.js +2 -1
- package/dist/runtime/streams/session-serial-executor.js +2 -2
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
- package/dist/runtime/streams/stream-frame-factory.js +2 -2
- package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
- package/dist/runtime/streams/stream-session-runtime.js +25 -33
- package/dist/runtime/workers/index.d.ts +2 -2
- package/dist/runtime/workers/index.js +5 -4
- package/package.json +3 -3
- package/src/contracts/Channels/IZLinkFanoutClient.ts +0 -7
- package/src/contracts/Common/CoreTypes.ts +7 -0
- package/src/contracts/Common/index.ts +1 -1
- package/src/contracts/Configuration/InternalDefaults.ts +12 -0
- package/src/contracts/Configuration/Registration.ts +92 -48
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
- package/src/contracts/Handlers/JsonContract.ts +14 -4
- package/src/contracts/Locations/Authority.ts +7 -3
- package/src/contracts/Locations/Options.ts +1 -1
- package/src/contracts/Locations/Stores.ts +14 -0
- package/src/contracts/RouteMesh/RuntimeTopology.ts +10 -0
- package/src/contracts/Spots/Contracts.ts +1 -1
- package/src/internal.ts +15 -0
- package/src/nest-integration.ts +28 -10
- package/src/runtime/abort.ts +6 -5
- package/src/runtime/activation-admission.ts +72 -0
- package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
- package/src/runtime/actors/actor-client.ts +77 -204
- package/src/runtime/actors/actor-context.ts +45 -39
- package/src/runtime/actors/actor-handoff.ts +55 -45
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
- package/src/runtime/actors/actor-local-native-join.ts +174 -215
- package/src/runtime/actors/actor-native-lookup.ts +2 -9
- package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
- package/src/runtime/actors/actor-remote-joiner.ts +15 -36
- package/src/runtime/actors/actor-remote-wire.ts +5 -3
- package/src/runtime/actors/actor-request-deadline.ts +49 -0
- package/src/runtime/actors/actor-retry-delay.ts +2 -1
- package/src/runtime/actors/actor-runtime-contracts.ts +4 -10
- package/src/runtime/actors/actor-runtime-state.ts +85 -247
- package/src/runtime/actors/actor-source-transfer.ts +5 -18
- package/src/runtime/actors/bound-session-wire.ts +2 -8
- package/src/runtime/actors/deferred-join-completion.ts +44 -0
- package/src/runtime/actors/index.ts +122 -88
- package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
- package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
- package/src/runtime/admission.ts +13 -2
- package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
- package/src/runtime/backend/contracts/index.ts +15 -42
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -28
- package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +5 -25
- package/src/runtime/backend/node/node-backend-adapter-support.ts +32 -35
- package/src/runtime/backend/node/node-event-loop-poller.ts +16 -8
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
- package/src/runtime/backend/node/node-raw-binding-port.ts +58 -23
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +252 -162
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +5 -4
- package/src/runtime/backend/raw-binding-port.ts +14 -1
- package/src/runtime/backend/runtime-values.ts +4 -1
- package/src/runtime/channels/channel-clients.ts +132 -96
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
- package/src/runtime/channels/channel-envelope.ts +58 -29
- package/src/runtime/channels/channel-outbound-operations.ts +10 -31
- package/src/runtime/channels/channel-receive-loops.ts +39 -7
- package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
- package/src/runtime/channels/channel-runtime-manager.ts +8 -15
- package/src/runtime/channels/channel-socket-options.ts +8 -2
- package/src/runtime/channels/channel-socket-registry.ts +369 -262
- package/src/runtime/channels/channel-transports.ts +161 -115
- package/src/runtime/channels/client-server-location-runtime.ts +17 -17
- package/src/runtime/channels/client-server-service-wire.ts +40 -12
- package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
- package/src/runtime/channels/fanout-location-runtime.ts +175 -106
- package/src/runtime/channels/spot-direct-envelope.ts +1 -1
- package/src/runtime/channels/spot-node-route-transport.ts +5 -2
- package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
- package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
- package/src/runtime/diagnostics/flow-context.ts +16 -2
- package/src/runtime/diagnostics/index.ts +27 -17
- package/src/runtime/diagnostics/message-flow.ts +15 -25
- package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
- package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
- package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
- package/src/runtime/disposal.ts +19 -0
- package/src/runtime/execution/index.ts +116 -38
- package/src/runtime/execution/serial-execution-queue.ts +179 -34
- package/src/runtime/execution/state-lane.ts +142 -4
- package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
- package/src/runtime/foundation/event-loop-resources.ts +5 -122
- package/src/runtime/foundation/listener-records.ts +21 -0
- package/src/runtime/foundation/operation-identity.ts +11 -5
- package/src/runtime/foundation/operation-registry.ts +33 -50
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +170 -571
- package/src/runtime/foundation/runtime-state-projections.ts +9 -1
- package/src/runtime/foundation/service-authority-payload-codec.ts +41 -13
- package/src/runtime/foundation/service-discovery-registry.ts +32 -3
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
- package/src/runtime/foundation/service-liveness-registry.ts +2 -1
- package/src/runtime/foundation/service-maintenance-runtime.ts +30 -19
- package/src/runtime/foundation/service-metadata-codec.ts +2 -2
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
- package/src/runtime/foundation/service-relocation-coordinator.ts +13 -0
- package/src/runtime/foundation/service-relocation-object-owner.ts +23 -7
- package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
- package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -25
- package/src/runtime/foundation/service-stateful-registry.ts +14 -2
- package/src/runtime/foundation/service-stateful-runtime.ts +435 -327
- package/src/runtime/foundation/service-stateful-wire-codec.ts +329 -199
- package/src/runtime/foundation/service-topology-registry.ts +30 -79
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
- package/src/runtime/foundation/service-wire-codec.ts +15 -8
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
- package/src/runtime/framework-errors-internal.ts +380 -134
- package/src/runtime/handlers/handler-instance-scope.ts +68 -95
- package/src/runtime/host/actor-packet-relay.ts +57 -147
- package/src/runtime/host/actor-placement-coordinator.ts +8 -5
- package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
- package/src/runtime/host/actor-transfer-runtime.ts +266 -418
- package/src/runtime/host/application-job-queue.ts +28 -34
- package/src/runtime/host/bound-session-relay.ts +1 -2
- package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
- package/src/runtime/host/index.ts +408 -312
- package/src/runtime/host/instance-activation-authority.ts +89 -109
- package/src/runtime/host/location-runtime-owner.ts +4 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
- package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
- package/src/runtime/host/remote-bound-session-relay.ts +12 -44
- package/src/runtime/host/route-mesh-runtime.ts +236 -275
- package/src/runtime/host/runtime-shutdown.ts +17 -21
- package/src/runtime/host/service-relocation-control.ts +14 -1
- package/src/runtime/host/service-relocation-host-runtime.ts +1161 -904
- package/src/runtime/host/spot-address-transport.ts +73 -195
- package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
- package/src/runtime/host/spot-runtime-options-factory.ts +92 -30
- package/src/runtime/host/stateful-authority-route-runtime.ts +8 -4
- package/src/runtime/host/user-spot-creation-coordinator.ts +182 -163
- package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
- package/src/runtime/locations/authority-key-codec.ts +7 -3
- package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
- package/src/runtime/locations/creation-operation-id.ts +6 -3
- package/src/runtime/locations/domain-store-contract.ts +12 -3
- package/src/runtime/locations/in-memory-authority-store.ts +44 -15
- package/src/runtime/locations/in-memory-location-store.ts +50 -39
- package/src/runtime/locations/in-memory-provider-location-store.ts +110 -31
- package/src/runtime/locations/key-codec.ts +3 -2
- package/src/runtime/locations/lease-tracker.ts +8 -14
- package/src/runtime/locations/lifecycle.ts +16 -45
- package/src/runtime/locations/location-store-failure.ts +4 -0
- package/src/runtime/locations/location-store-pages.ts +18 -0
- package/src/runtime/locations/location-store-repository.ts +450 -478
- package/src/runtime/locations/relocation-blob.ts +17 -6
- package/src/runtime/locations/resolvers.ts +90 -58
- package/src/runtime/locations/runtime.ts +220 -110
- package/src/runtime/locations/spot-location-claims.ts +54 -26
- package/src/runtime/messaging/payload-codec.ts +35 -24
- package/src/runtime/messaging/submission-result.ts +57 -1
- package/src/runtime/protocol/service_wire_codec.generated.ts +27 -10
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +4 -4
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +6 -6
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +6 -3
- package/src/runtime/spots/index.ts +687 -437
- package/src/runtime/spots/spot-activation-registry.ts +42 -71
- package/src/runtime/spots/spot-activation-state.ts +4 -16
- package/src/runtime/spots/spot-activation.ts +167 -115
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
- package/src/runtime/spots/spot-actor-join-dispatch.ts +25 -79
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +20 -18
- package/src/runtime/spots/spot-actor-membership.ts +107 -75
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
- package/src/runtime/spots/spot-context.ts +3 -3
- package/src/runtime/spots/spot-entry-activation.ts +13 -33
- package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
- package/src/runtime/spots/spot-manager-public.ts +29 -21
- package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
- package/src/runtime/spots/spot-node-runtime-manager.ts +145 -140
- package/src/runtime/spots/spot-outbound.ts +47 -68
- package/src/runtime/spots/spot-remote-codec.ts +7 -3
- package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
- package/src/runtime/spots/spot-route-replies.ts +6 -4
- package/src/runtime/spots/spot-routed-actor-admission.ts +13 -6
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +6 -77
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
- package/src/runtime/spots/spot-runtime-ports.ts +10 -43
- package/src/runtime/spots/spot-serial-executor.ts +10 -2
- package/src/runtime/spots/spot-serial-turn-executor.ts +120 -13
- package/src/runtime/spots/spot-timer.ts +3 -2
- package/src/runtime/streams/actor-session-binding-registry.ts +182 -560
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +1 -19
- package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
- package/src/runtime/streams/bound-session-service.ts +23 -37
- package/src/runtime/streams/index.ts +102 -88
- package/src/runtime/streams/managed-stream.ts +29 -10
- package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
- package/src/runtime/streams/protocol.ts +34 -88
- package/src/runtime/streams/session-actor-coordinator.ts +17 -5
- package/src/runtime/streams/session-calls.ts +6 -5
- package/src/runtime/streams/session-context.ts +54 -10
- package/src/runtime/streams/session-requests.ts +2 -1
- package/src/runtime/streams/session-serial-executor.ts +2 -2
- package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
- package/src/runtime/streams/stream-frame-factory.ts +2 -3
- package/src/runtime/streams/stream-session-runtime.ts +57 -59
- package/src/runtime/workers/index.ts +13 -12
- package/dist/runtime/actors/deferred-join-accepted-journal.d.ts +0 -47
- package/dist/runtime/actors/deferred-join-accepted-journal.js +0 -992
- package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
- package/dist/runtime/actors/post-commit-actor-location.js +0 -72
- package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
- package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
- package/src/runtime/actors/deferred-join-accepted-journal.ts +0 -1346
- package/src/runtime/actors/post-commit-actor-location.ts +0 -121
- package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
|
@@ -126,7 +126,8 @@ export class ZLinkSpotLocationClaims {
|
|
|
126
126
|
|
|
127
127
|
async beginInstanceClosing(
|
|
128
128
|
meshName: string,
|
|
129
|
-
spotId: RoutingId
|
|
129
|
+
spotId: RoutingId,
|
|
130
|
+
onCommitted: () => void
|
|
130
131
|
): Promise<ZLinkInstanceClosingAuthority | undefined> {
|
|
131
132
|
const canonical = ZLinkLocationKeyCodec.encodeSpotKey({ meshName, spotId });
|
|
132
133
|
const tracked = this.spots.get(canonical);
|
|
@@ -166,38 +167,60 @@ export class ZLinkSpotLocationClaims {
|
|
|
166
167
|
return undefined;
|
|
167
168
|
}
|
|
168
169
|
tracked.storeVersion = result.storeVersion.value;
|
|
169
|
-
|
|
170
|
-
let restored = false;
|
|
170
|
+
onCommitted();
|
|
171
171
|
return {
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
const
|
|
172
|
+
release: () => this.release(meshName, spotId),
|
|
173
|
+
reincarnate: async (initialize) => {
|
|
174
|
+
const reincarnated = await store.compareExchangeAuthority(key, result.storeVersion, {
|
|
175
175
|
kind: 'put',
|
|
176
|
-
generationTransition: '
|
|
176
|
+
generationTransition: 'reincarnate',
|
|
177
177
|
payload: replaceServiceRelocationAuthorityApplicationPayload(
|
|
178
|
-
|
|
179
|
-
encodeServiceInstanceAuthorityPayload({
|
|
180
|
-
state: 'ready',
|
|
181
|
-
stableType: decoded.stableType,
|
|
182
|
-
spotId: decoded.spotId,
|
|
183
|
-
ownerId: decoded.ownerId,
|
|
184
|
-
ownerLeaseGeneration: decoded.ownerLeaseGeneration,
|
|
185
|
-
ownerMeshName: decoded.ownerMeshName,
|
|
186
|
-
ownerNodeRid: decoded.ownerNodeRid,
|
|
187
|
-
ownerNodeGeneration: decoded.ownerNodeGeneration
|
|
188
|
-
})
|
|
178
|
+
result.payload,
|
|
179
|
+
encodeServiceInstanceAuthorityPayload({ ...decoded, state: 'coldActivating' })
|
|
189
180
|
)
|
|
190
181
|
});
|
|
191
|
-
if (
|
|
182
|
+
if (reincarnated.kind !== 'stored') {
|
|
192
183
|
throw createInternalFrameworkException(
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
184
|
+
reincarnated.kind === 'generationExhausted'
|
|
185
|
+
? ZLinkFrameworkInternalErrorKind.InvalidOperation
|
|
186
|
+
: ZLinkFrameworkInternalErrorKind.SpotMoving,
|
|
187
|
+
`Instance Spot '${String(spotId)}' Closing authority changed before reincarnation.`
|
|
196
188
|
);
|
|
197
189
|
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
190
|
+
this.trackInstanceAuthority({
|
|
191
|
+
...tracked,
|
|
192
|
+
objectGeneration: reincarnated.objectGeneration,
|
|
193
|
+
authorityOwnerGeneration: reincarnated.authorityOwnerGeneration,
|
|
194
|
+
storeVersion: reincarnated.storeVersion.value
|
|
195
|
+
});
|
|
196
|
+
this.invalidateSpotRoute?.(spotId);
|
|
197
|
+
try {
|
|
198
|
+
await initialize({ ...reincarnated, kind: 'snapshot', stableType: tracked.stableType });
|
|
199
|
+
const ready = await store.compareExchangeAuthority(key, reincarnated.storeVersion, {
|
|
200
|
+
kind: 'put',
|
|
201
|
+
generationTransition: 'preserve',
|
|
202
|
+
payload: replaceServiceRelocationAuthorityApplicationPayload(
|
|
203
|
+
reincarnated.payload,
|
|
204
|
+
encodeServiceInstanceAuthorityPayload({ ...decoded, state: 'ready' })
|
|
205
|
+
)
|
|
206
|
+
});
|
|
207
|
+
if (ready.kind !== 'stored') {
|
|
208
|
+
throw createInternalFrameworkException(
|
|
209
|
+
ready.kind === 'generationExhausted'
|
|
210
|
+
? ZLinkFrameworkInternalErrorKind.InvalidOperation
|
|
211
|
+
: ZLinkFrameworkInternalErrorKind.SpotMoving,
|
|
212
|
+
`Instance Spot '${String(spotId)}' reincarnation authority changed before initialization completed.`
|
|
213
|
+
);
|
|
214
|
+
}
|
|
215
|
+
const latest = this.spots.get(canonical);
|
|
216
|
+
if (latest?.kind === 'authority' && latest.objectGeneration === ready.objectGeneration) {
|
|
217
|
+
latest.storeVersion = ready.storeVersion.value;
|
|
218
|
+
}
|
|
219
|
+
return { ...ready, kind: 'snapshot', stableType: tracked.stableType };
|
|
220
|
+
} catch (error) {
|
|
221
|
+
await this.release(meshName, spotId, reincarnated.objectGeneration);
|
|
222
|
+
throw error;
|
|
223
|
+
}
|
|
201
224
|
}
|
|
202
225
|
};
|
|
203
226
|
}
|
|
@@ -382,7 +405,12 @@ export interface ZLinkTrackedInstanceAuthority {
|
|
|
382
405
|
}
|
|
383
406
|
|
|
384
407
|
export interface ZLinkInstanceClosingAuthority {
|
|
385
|
-
|
|
408
|
+
release(): Promise<void>;
|
|
409
|
+
reincarnate?(
|
|
410
|
+
initialize: (
|
|
411
|
+
authority: ZLinkAuthoritySnapshot & { readonly stableType: string }
|
|
412
|
+
) => Promise<void>
|
|
413
|
+
): Promise<ZLinkAuthoritySnapshot & { readonly stableType: string }>;
|
|
386
414
|
}
|
|
387
415
|
|
|
388
416
|
interface TrackedLegacySpot {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ZlinkStreamContentType } from '@zlink-systems/stream-wire';
|
|
1
2
|
import {
|
|
2
3
|
ZLinkFrameworkInternalErrorKind,
|
|
3
4
|
createInternalFrameworkException
|
|
@@ -31,6 +32,8 @@ import {
|
|
|
31
32
|
matchEveryDeclaredMessageType
|
|
32
33
|
} from '../../contracts/Configuration/CodecSerializerSelection';
|
|
33
34
|
|
|
35
|
+
const MAX_DECLARED_TYPE_SELECTIONS = 1024;
|
|
36
|
+
|
|
34
37
|
export interface ZLinkSerializerRegistryLike {
|
|
35
38
|
readonly serializers: ReadonlyMap<string, ZLinkMessageSerializer>;
|
|
36
39
|
}
|
|
@@ -49,7 +52,12 @@ interface ZLinkSerializerSelectionPlan {
|
|
|
49
52
|
}
|
|
50
53
|
|
|
51
54
|
const noSerializer = Symbol('noSerializer');
|
|
52
|
-
const JSON_CONTENT_TYPE =
|
|
55
|
+
const JSON_CONTENT_TYPE = ZlinkStreamContentType.Json;
|
|
56
|
+
const frameworkJsonReceiveCodec = Symbol('frameworkJsonReceiveCodec');
|
|
57
|
+
const defaultReceiveCodecs: ReadonlyMap<string, typeof frameworkJsonReceiveCodec> = new Map<
|
|
58
|
+
string,
|
|
59
|
+
typeof frameworkJsonReceiveCodec
|
|
60
|
+
>([[JSON_CONTENT_TYPE, frameworkJsonReceiveCodec]]);
|
|
53
61
|
|
|
54
62
|
// Registration maps are created during host configuration and are immutable
|
|
55
63
|
// for the runtime lifetime. Compile the candidate list and reverse content
|
|
@@ -84,9 +92,9 @@ export function encodeFrameworkPayload(
|
|
|
84
92
|
return {
|
|
85
93
|
message: rememberContentType(
|
|
86
94
|
toRuntimeMessage(payload.toEncodedPayload()),
|
|
87
|
-
|
|
95
|
+
ZlinkStreamContentType.Raw
|
|
88
96
|
),
|
|
89
|
-
contentType:
|
|
97
|
+
contentType: ZlinkStreamContentType.Raw
|
|
90
98
|
};
|
|
91
99
|
}
|
|
92
100
|
declaredType = readZLinkMessageDeclaredType(payload);
|
|
@@ -141,7 +149,7 @@ export function decodeFrameworkPayloadMessage<T>(
|
|
|
141
149
|
message: Message,
|
|
142
150
|
registry?: ZLinkSerializerRegistryLike | ReadonlyMap<string, ZLinkMessageSerializer>,
|
|
143
151
|
type?: Type<T>,
|
|
144
|
-
contentType = JSON_CONTENT_TYPE,
|
|
152
|
+
contentType: string = JSON_CONTENT_TYPE,
|
|
145
153
|
packetName?: string,
|
|
146
154
|
contractPart: 'payload' | 'reply' = 'payload'
|
|
147
155
|
): T {
|
|
@@ -152,7 +160,7 @@ export function decodeFrameworkTypedPayloadMessage<T>(
|
|
|
152
160
|
message: Message,
|
|
153
161
|
registry?: ZLinkSerializerRegistryLike | ReadonlyMap<string, ZLinkMessageSerializer>,
|
|
154
162
|
type?: Type<T>,
|
|
155
|
-
contentType = JSON_CONTENT_TYPE,
|
|
163
|
+
contentType: string = JSON_CONTENT_TYPE,
|
|
156
164
|
packetName?: string,
|
|
157
165
|
contractPart: 'payload' | 'reply' = 'payload'
|
|
158
166
|
): T {
|
|
@@ -167,17 +175,10 @@ function decodeFrameworkPayload<T>(
|
|
|
167
175
|
packetName: string | undefined,
|
|
168
176
|
contractPart: 'payload' | 'reply'
|
|
169
177
|
): T {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
}
|
|
173
|
-
if (contentType !== JSON_CONTENT_TYPE) {
|
|
174
|
-
const serializer = serializerMapOf(registry)?.get(contentType);
|
|
175
|
-
if (serializer === undefined) throw unsupportedContentType(contentType);
|
|
178
|
+
const codec = receiveCodecFor(contentType, registry);
|
|
179
|
+
if (codec !== frameworkJsonReceiveCodec) {
|
|
176
180
|
if (message.isEmpty()) return undefined as T;
|
|
177
|
-
return
|
|
178
|
-
encodedPayloadFromOwned(message.data()),
|
|
179
|
-
(type ?? Object) as Type<T>
|
|
180
|
-
);
|
|
181
|
+
return codec.deserialize(encodedPayloadFromOwned(message.data()), (type ?? Object) as Type<T>);
|
|
181
182
|
}
|
|
182
183
|
|
|
183
184
|
if (message.isEmpty()) return undefined as T;
|
|
@@ -197,7 +198,7 @@ function decodeFrameworkPayload<T>(
|
|
|
197
198
|
export function wrapFrameworkPayloadMessage(
|
|
198
199
|
message: Message,
|
|
199
200
|
registry?: ZLinkSerializerRegistryLike | ReadonlyMap<string, ZLinkMessageSerializer>,
|
|
200
|
-
contentType = JSON_CONTENT_TYPE,
|
|
201
|
+
contentType: string = JSON_CONTENT_TYPE,
|
|
201
202
|
packetName?: string,
|
|
202
203
|
contractPart: 'payload' | 'reply' = 'payload'
|
|
203
204
|
): ZLinkMessage {
|
|
@@ -215,14 +216,10 @@ function decodeFrameworkEncodedPayload<T>(
|
|
|
215
216
|
packetName: string | undefined,
|
|
216
217
|
contractPart: 'payload' | 'reply'
|
|
217
218
|
): T {
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
}
|
|
221
|
-
if (contentType !== JSON_CONTENT_TYPE) {
|
|
222
|
-
const serializer = serializerMapOf(registry)?.get(contentType);
|
|
223
|
-
if (serializer === undefined) throw unsupportedContentType(contentType);
|
|
219
|
+
const codec = receiveCodecFor(contentType, registry);
|
|
220
|
+
if (codec !== frameworkJsonReceiveCodec) {
|
|
224
221
|
if (payload.isEmpty()) return undefined as T;
|
|
225
|
-
return
|
|
222
|
+
return codec.deserialize(payload, (type ?? Object) as Type<T>);
|
|
226
223
|
}
|
|
227
224
|
if (payload.isEmpty()) return undefined as T;
|
|
228
225
|
const text = payload.getString('utf8');
|
|
@@ -241,6 +238,20 @@ function decodeFrameworkEncodedPayload<T>(
|
|
|
241
238
|
}
|
|
242
239
|
}
|
|
243
240
|
|
|
241
|
+
function receiveCodecFor(
|
|
242
|
+
contentType: string,
|
|
243
|
+
registry: ZLinkSerializerRegistryLike | ReadonlyMap<string, ZLinkMessageSerializer> | undefined
|
|
244
|
+
): ZLinkMessageSerializer | typeof frameworkJsonReceiveCodec {
|
|
245
|
+
if (!isCanonicalCodecContentType(contentType)) {
|
|
246
|
+
throw unsupportedContentType(contentType);
|
|
247
|
+
}
|
|
248
|
+
const registeredCodec = serializerMapOf(registry)?.get(contentType);
|
|
249
|
+
if (registeredCodec !== undefined) return registeredCodec;
|
|
250
|
+
const defaultCodec = defaultReceiveCodecs.get(contentType);
|
|
251
|
+
if (defaultCodec !== undefined) return defaultCodec;
|
|
252
|
+
throw unsupportedContentType(contentType);
|
|
253
|
+
}
|
|
254
|
+
|
|
244
255
|
function schemaForDecode(
|
|
245
256
|
type: Type<unknown> | undefined,
|
|
246
257
|
packetName: string | undefined,
|
|
@@ -316,7 +327,7 @@ function serializerSelectionPlanOf(
|
|
|
316
327
|
return cached === noSerializer ? undefined : cached;
|
|
317
328
|
}
|
|
318
329
|
const selected = selectSerializerFromEntries(frozenEntries, declaredType);
|
|
319
|
-
if (cachedBusinessTypeCount <
|
|
330
|
+
if (cachedBusinessTypeCount < MAX_DECLARED_TYPE_SELECTIONS) {
|
|
320
331
|
outboundByBusinessType.set(declaredType, selected ?? noSerializer);
|
|
321
332
|
cachedBusinessTypeCount += 1;
|
|
322
333
|
}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ZLinkFrameworkInternalErrorKind,
|
|
3
|
-
createInternalFrameworkException
|
|
3
|
+
createInternalFrameworkException,
|
|
4
|
+
requestResultToPublicErrorKind
|
|
4
5
|
} from '../framework-errors-internal';
|
|
6
|
+
import { ZLinkFrameworkException } from '../../contracts';
|
|
7
|
+
import { RequestResult, SubmitResult } from '../backend/runtime-values';
|
|
5
8
|
export enum ZLinkSubmitStatus {
|
|
6
9
|
Submitted = 'submitted',
|
|
7
10
|
Backpressured = 'backpressured',
|
|
@@ -15,6 +18,59 @@ export interface ZLinkSubmitResult {
|
|
|
15
18
|
readonly status: ZLinkSubmitStatus;
|
|
16
19
|
}
|
|
17
20
|
|
|
21
|
+
/** Projects the Core submit result once; phase only determines capacity refusal meaning. */
|
|
22
|
+
export function submitToRequestResult(result: number, phase: 'submit' | 'completion'): number {
|
|
23
|
+
switch (result) {
|
|
24
|
+
case SubmitResult.Ok:
|
|
25
|
+
return RequestResult.Ok;
|
|
26
|
+
case SubmitResult.Backpressured:
|
|
27
|
+
return phase === 'submit' ? RequestResult.NotConnected : RequestResult.TimedOut;
|
|
28
|
+
case SubmitResult.NotConnected:
|
|
29
|
+
return RequestResult.NotConnected;
|
|
30
|
+
case SubmitResult.NotFound:
|
|
31
|
+
return RequestResult.NotFound;
|
|
32
|
+
case SubmitResult.NotAdmitted:
|
|
33
|
+
return RequestResult.Rejected;
|
|
34
|
+
case SubmitResult.InvalidHandle:
|
|
35
|
+
case SubmitResult.InvalidArgument:
|
|
36
|
+
case SubmitResult.ThreadViolation:
|
|
37
|
+
return RequestResult.InvalidArgument;
|
|
38
|
+
case SubmitResult.InvalidState:
|
|
39
|
+
return RequestResult.InvalidState;
|
|
40
|
+
case SubmitResult.NotSupported:
|
|
41
|
+
return RequestResult.NotSupported;
|
|
42
|
+
case SubmitResult.Terminated:
|
|
43
|
+
return RequestResult.Terminated;
|
|
44
|
+
default:
|
|
45
|
+
return RequestResult.InternalError;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function classifySubmitResult(
|
|
50
|
+
result: number,
|
|
51
|
+
operation: string,
|
|
52
|
+
phase: 'submit' | 'completion' = 'completion'
|
|
53
|
+
): ZLinkSubmitResult {
|
|
54
|
+
const terminal = submitToRequestResult(result, phase);
|
|
55
|
+
switch (terminal) {
|
|
56
|
+
case RequestResult.Ok:
|
|
57
|
+
return { status: ZLinkSubmitStatus.Submitted };
|
|
58
|
+
case RequestResult.TimedOut:
|
|
59
|
+
return { status: ZLinkSubmitStatus.TimedOut };
|
|
60
|
+
case RequestResult.NotFound:
|
|
61
|
+
return { status: ZLinkSubmitStatus.TargetNotFound };
|
|
62
|
+
case RequestResult.NotConnected:
|
|
63
|
+
return { status: ZLinkSubmitStatus.RouteNotConnected };
|
|
64
|
+
case RequestResult.Terminated:
|
|
65
|
+
return { status: ZLinkSubmitStatus.Shutdown };
|
|
66
|
+
default:
|
|
67
|
+
throw new ZLinkFrameworkException(
|
|
68
|
+
requestResultToPublicErrorKind(terminal),
|
|
69
|
+
`${operation} failed with submit result ${result}.`
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
18
74
|
export function requireOneWayCompletion(
|
|
19
75
|
result: ZLinkSubmitResult,
|
|
20
76
|
operation: string,
|
|
@@ -2260,7 +2260,7 @@ function writeRetiredBoundSessionRouteFence(input: RetiredBoundSessionRouteFence
|
|
|
2260
2260
|
export function decodeRetiredBoundSessionRouteFence(bytes: Uint8Array, context: ServiceWireDecoderContext): RetiredBoundSessionRouteFence { const reader = new Reader(bytes); const value = readRetiredBoundSessionRouteFence(reader, context, {}, 0); reader.done("retired-bound-session-route-fence"); return value; }
|
|
2261
2261
|
export function encodeRetiredBoundSessionRouteFence(value: RetiredBoundSessionRouteFence, context: ServiceWireDecoderContext): Uint8Array { const writer = new Writer(); writeRetiredBoundSessionRouteFence(value, writer, context, {}, 0); return writer.result(); }
|
|
2262
2262
|
|
|
2263
|
-
export type SessionRelocationRouteUpdate = { readonly action: "commit"; readonly previousAuthorityOwnerGeneration: NonzeroU64; readonly targetAuthorityOwnerGeneration: NonzeroU64; readonly targetNodeRid: Rid; readonly targetNodeGeneration: NonzeroU64 } | { readonly action: "abort"; readonly currentAuthorityOwnerGeneration: NonzeroU64 };
|
|
2263
|
+
export type SessionRelocationRouteUpdate = { readonly action: "commit"; readonly previousAuthorityOwnerGeneration: NonzeroU64; readonly targetAuthorityOwnerGeneration: NonzeroU64; readonly targetNodeRid: Rid; readonly targetNodeGeneration: NonzeroU64; readonly targetOwnerLeaseGeneration: NonzeroU64 } | { readonly action: "abort"; readonly currentAuthorityOwnerGeneration: NonzeroU64 };
|
|
2264
2264
|
|
|
2265
2265
|
function readSessionRelocationRouteUpdate(reader: Reader, context: ServiceWireDecoderContext, enclosing: any, flags: number): SessionRelocationRouteUpdate {
|
|
2266
2266
|
void context; void enclosing; void flags;
|
|
@@ -2280,6 +2280,9 @@ function readSessionRelocationRouteUpdate(reader: Reader, context: ServiceWireDe
|
|
|
2280
2280
|
value["targetNodeGeneration"] = readNonzeroU64(body, context, value, flags);
|
|
2281
2281
|
|
|
2282
2282
|
|
|
2283
|
+
value["targetOwnerLeaseGeneration"] = readNonzeroU64(body, context, value, flags);
|
|
2284
|
+
|
|
2285
|
+
|
|
2283
2286
|
} else if (same(value["action"], "abort")) {
|
|
2284
2287
|
value["currentAuthorityOwnerGeneration"] = readNonzeroU64(body, context, value, flags);
|
|
2285
2288
|
|
|
@@ -2313,8 +2316,12 @@ function writeSessionRelocationRouteUpdate(input: SessionRelocationRouteUpdate,
|
|
|
2313
2316
|
|
|
2314
2317
|
|
|
2315
2318
|
writeNonzeroU64(numeric(value["targetNodeGeneration"]), body, context, value, flags);
|
|
2319
|
+
if (value["targetOwnerLeaseGeneration"] === undefined) fail("targetOwnerLeaseGeneration required");
|
|
2320
|
+
|
|
2321
|
+
|
|
2322
|
+
writeNonzeroU64(numeric(value["targetOwnerLeaseGeneration"]), body, context, value, flags);
|
|
2316
2323
|
} else if (same(value["action"], "abort")) {
|
|
2317
|
-
if (value["previousAuthorityOwnerGeneration"] !== undefined || value["targetAuthorityOwnerGeneration"] !== undefined || value["targetNodeRid"] !== undefined || value["targetNodeGeneration"] !== undefined) fail("session-relocation-route-update discriminator agreement");
|
|
2324
|
+
if (value["previousAuthorityOwnerGeneration"] !== undefined || value["targetAuthorityOwnerGeneration"] !== undefined || value["targetNodeRid"] !== undefined || value["targetNodeGeneration"] !== undefined || value["targetOwnerLeaseGeneration"] !== undefined) fail("session-relocation-route-update discriminator agreement");
|
|
2318
2325
|
if (value["currentAuthorityOwnerGeneration"] === undefined) fail("currentAuthorityOwnerGeneration required");
|
|
2319
2326
|
|
|
2320
2327
|
|
|
@@ -4250,7 +4257,7 @@ function readChannelEntry(reader: Reader, context: ServiceWireDecoderContext, en
|
|
|
4250
4257
|
|
|
4251
4258
|
|
|
4252
4259
|
value["weight"] = readU32(reader, context, value, flags);
|
|
4253
|
-
if (numeric(value["weight"]) < 0n || numeric(value["weight"]) >
|
|
4260
|
+
if (numeric(value["weight"]) < 0n || numeric(value["weight"]) > 10000n) fail("weight constraint");
|
|
4254
4261
|
|
|
4255
4262
|
|
|
4256
4263
|
|
|
@@ -4266,7 +4273,7 @@ function writeChannelEntry(input: ChannelEntry, writer: Writer, context: Service
|
|
|
4266
4273
|
|
|
4267
4274
|
writeText8(value["channelName"], writer, context, value, flags);
|
|
4268
4275
|
if (value["weight"] === undefined) fail("weight required");
|
|
4269
|
-
if (numeric(value["weight"]) < 0n || numeric(value["weight"]) >
|
|
4276
|
+
if (numeric(value["weight"]) < 0n || numeric(value["weight"]) > 10000n) fail("weight constraint");
|
|
4270
4277
|
|
|
4271
4278
|
writeU32(value["weight"], writer, context, value, flags);
|
|
4272
4279
|
}
|
|
@@ -4444,7 +4451,7 @@ function readDescriptorExtension(reader: Reader, context: ServiceWireDecoderCont
|
|
|
4444
4451
|
item.done("objectRole"); break;
|
|
4445
4452
|
case 8:
|
|
4446
4453
|
if (value["placementWeight"] !== undefined) fail("descriptor-extension duplicate"); value["placementWeight"] = readU32(item, context, value, flags);
|
|
4447
|
-
if (numeric(value["placementWeight"]) < 0n || numeric(value["placementWeight"]) >
|
|
4454
|
+
if (numeric(value["placementWeight"]) < 0n || numeric(value["placementWeight"]) > 10000n) fail("placementWeight constraint");
|
|
4448
4455
|
|
|
4449
4456
|
item.done("placementWeight"); break;
|
|
4450
4457
|
case 9:
|
|
@@ -4519,7 +4526,7 @@ function writeDescriptorExtension(input: DescriptorExtension, writer: Writer, co
|
|
|
4519
4526
|
const item = new Writer(); writeObjectRole(value["objectRole"], item, context, value, flags); const itemBytes = item.result(); writeU8(7, body, context, value, flags); writeU32(itemBytes.length, body, context, value, flags); body.put(itemBytes);
|
|
4520
4527
|
}
|
|
4521
4528
|
if (value["placementWeight"] !== undefined) {
|
|
4522
|
-
if (numeric(value["placementWeight"]) < 0n || numeric(value["placementWeight"]) >
|
|
4529
|
+
if (numeric(value["placementWeight"]) < 0n || numeric(value["placementWeight"]) > 10000n) fail("placementWeight constraint");
|
|
4523
4530
|
|
|
4524
4531
|
const item = new Writer(); writeU32(value["placementWeight"], item, context, value, flags); const itemBytes = item.result(); writeU8(8, body, context, value, flags); writeU32(itemBytes.length, body, context, value, flags); body.put(itemBytes);
|
|
4525
4532
|
}
|
|
@@ -4653,7 +4660,7 @@ function readClientServerAdmission(reader: Reader, context: ServiceWireDecoderCo
|
|
|
4653
4660
|
|
|
4654
4661
|
|
|
4655
4662
|
value["weight"] = readU32(body, context, value, flags);
|
|
4656
|
-
if (numeric(value["weight"]) < 0n || numeric(value["weight"]) >
|
|
4663
|
+
if (numeric(value["weight"]) < 0n || numeric(value["weight"]) > 10000n) fail("weight constraint");
|
|
4657
4664
|
|
|
4658
4665
|
value["runtimeState"] = readRuntimeState(body, context, value, flags);
|
|
4659
4666
|
|
|
@@ -4719,7 +4726,7 @@ function writeClientServerAdmission(input: ClientServerAdmission, writer: Writer
|
|
|
4719
4726
|
|
|
4720
4727
|
writeNonzeroU64(numeric(value["descriptorRevision"]), body, context, value, flags);
|
|
4721
4728
|
if (value["weight"] === undefined) fail("weight required");
|
|
4722
|
-
if (numeric(value["weight"]) < 0n || numeric(value["weight"]) >
|
|
4729
|
+
if (numeric(value["weight"]) < 0n || numeric(value["weight"]) > 10000n) fail("weight constraint");
|
|
4723
4730
|
|
|
4724
4731
|
writeU32(value["weight"], body, context, value, flags);
|
|
4725
4732
|
if (value["runtimeState"] === undefined) fail("runtimeState required");
|
|
@@ -6369,7 +6376,7 @@ function writeFrozenRecord(input: FrozenRecord, writer: Writer, context: Service
|
|
|
6369
6376
|
export function decodeFrozenRecord(bytes: Uint8Array, context: ServiceWireDecoderContext): FrozenRecord { const reader = new Reader(bytes); const value = readFrozenRecord(reader, context, {}, 0); reader.done("frozen-record"); return value; }
|
|
6370
6377
|
export function encodeFrozenRecord(value: FrozenRecord, context: ServiceWireDecoderContext): Uint8Array { const writer = new Writer(); writeFrozenRecord(value, writer, context, {}, 0); return writer.result(); }
|
|
6371
6378
|
|
|
6372
|
-
export type InstanceRouteV1 = { readonly routeKind: "ready"; readonly targetNodeRid: Rid; readonly targetNodeGeneration: NonzeroU64; readonly targetSpotId: Text8; readonly authority: AuthorityGenerationFence } | { readonly routeKind: "coldActivation"; readonly targetNodeRid: Rid; readonly targetNodeGeneration: NonzeroU64; readonly targetSpotId: Text8; readonly targetMeshName: Text8; readonly stableType: Text8; readonly targetDescriptorVersion: Text8; readonly deadlineUnixMs: NonzeroU64 };
|
|
6379
|
+
export type InstanceRouteV1 = { readonly routeKind: "ready"; readonly targetNodeRid: Rid; readonly targetNodeGeneration: NonzeroU64; readonly targetSpotId: Text8; readonly authority: AuthorityGenerationFence; readonly instanceIntent: Bool8 } | { readonly routeKind: "coldActivation"; readonly targetNodeRid: Rid; readonly targetNodeGeneration: NonzeroU64; readonly targetSpotId: Text8; readonly targetMeshName: Text8; readonly stableType: Text8; readonly targetDescriptorVersion: Text8; readonly deadlineUnixMs: NonzeroU64 };
|
|
6373
6380
|
|
|
6374
6381
|
function readInstanceRouteV1(reader: Reader, context: ServiceWireDecoderContext, enclosing: any, flags: number): InstanceRouteV1 {
|
|
6375
6382
|
void context; void enclosing; void flags;
|
|
@@ -6389,6 +6396,9 @@ function readInstanceRouteV1(reader: Reader, context: ServiceWireDecoderContext,
|
|
|
6389
6396
|
value["authority"] = readAuthorityGenerationFence(body, context, value, flags);
|
|
6390
6397
|
|
|
6391
6398
|
|
|
6399
|
+
value["instanceIntent"] = readBool8(body, context, value, flags);
|
|
6400
|
+
|
|
6401
|
+
|
|
6392
6402
|
} else if (same(value["routeKind"], "coldActivation")) {
|
|
6393
6403
|
value["targetNodeRid"] = readRid(body, context, value, flags);
|
|
6394
6404
|
|
|
@@ -6434,6 +6444,9 @@ function* readIncrementalInstanceRouteV1(reader: IncrementalInput, context: Serv
|
|
|
6434
6444
|
value["authority"] = yield* readIncrementalAuthorityGenerationFence(body, context, value, flags);
|
|
6435
6445
|
|
|
6436
6446
|
|
|
6447
|
+
value["instanceIntent"] = yield* readIncrementalBool8(body, context, value, flags);
|
|
6448
|
+
|
|
6449
|
+
|
|
6437
6450
|
} else if (same(value["routeKind"], "coldActivation")) {
|
|
6438
6451
|
value["targetNodeRid"] = yield* readIncrementalRid(body, context, value, flags);
|
|
6439
6452
|
|
|
@@ -6484,8 +6497,12 @@ function writeInstanceRouteV1(input: InstanceRouteV1, writer: Writer, context: S
|
|
|
6484
6497
|
|
|
6485
6498
|
|
|
6486
6499
|
writeAuthorityGenerationFence(value["authority"], body, context, value, flags);
|
|
6500
|
+
if (value["instanceIntent"] === undefined) fail("instanceIntent required");
|
|
6501
|
+
|
|
6502
|
+
|
|
6503
|
+
writeBool8(value["instanceIntent"], body, context, value, flags);
|
|
6487
6504
|
} else if (same(value["routeKind"], "coldActivation")) {
|
|
6488
|
-
if (value["authority"] !== undefined) fail("instance-route-v1 discriminator agreement");
|
|
6505
|
+
if (value["authority"] !== undefined || value["instanceIntent"] !== undefined) fail("instance-route-v1 discriminator agreement");
|
|
6489
6506
|
if (value["targetNodeRid"] === undefined) fail("targetNodeRid required");
|
|
6490
6507
|
|
|
6491
6508
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// <auto-generated> DO NOT EDIT. schema-sha256:
|
|
1
|
+
// <auto-generated> DO NOT EDIT. schema-sha256: 77748ba8f585cb70ad337fa3203b5f9b9aa7a89e7f95f7fdc20159c30987be0f
|
|
2
2
|
export interface ServiceWireRouteFence { readonly id: string; readonly generation: bigint; readonly targetNodeRid: Uint8Array; readonly targetNodeGeneration: bigint; readonly expectedAuthorityOwnerGeneration: bigint; readonly expectedOwnerLeaseGeneration: bigint; }
|
|
3
3
|
export interface ApplicationPayloadEnvelopeV1 { readonly packetName: string; readonly contentType: string; readonly payload: Uint8Array; }
|
|
4
4
|
export interface ActorJoin28 { readonly correlation: bigint; readonly actor: ServiceWireRouteFence; readonly entry: boolean; readonly targetSpot: ServiceWireRouteFence; readonly payload?: ApplicationPayloadEnvelopeV1; }
|
|
@@ -96,7 +96,7 @@ export interface ServiceWireRequestSourceFence { readonly sourceOwnerId:string;r
|
|
|
96
96
|
export interface ServiceWireAuthorityFence { readonly objectGeneration:bigint;readonly ownerId:string;readonly authorityOwnerGeneration:bigint;readonly leaseGeneration:bigint;readonly storeVersion:string; }
|
|
97
97
|
export type ServiceWireRelocationRole="source"|"target"|"coordinator";
|
|
98
98
|
export type ServiceWireReplyRelayContext={readonly contextKind:"coldActivation";readonly completionKind:"readyBarrier"|"activationFailure";readonly authority:ServiceWireAuthorityFence}|{readonly contextKind:"maintenanceRelocation";readonly relocation:ServiceWireRelocationId;readonly targetAttemptGeneration:bigint;readonly coordinator:ServiceWireCoordinatorFence;readonly participantId:bigint;readonly sequence:bigint};
|
|
99
|
-
export type ServiceWireSessionRouteUpdate={readonly action:"commit";readonly previousAuthorityOwnerGeneration:bigint;readonly targetAuthorityOwnerGeneration:bigint;readonly targetNodeRid:Uint8Array;readonly targetNodeGeneration:bigint}|{readonly action:"abort";readonly currentAuthorityOwnerGeneration:bigint};
|
|
99
|
+
export type ServiceWireSessionRouteUpdate={readonly action:"commit";readonly previousAuthorityOwnerGeneration:bigint;readonly targetAuthorityOwnerGeneration:bigint;readonly targetNodeRid:Uint8Array;readonly targetNodeGeneration:bigint;readonly targetOwnerLeaseGeneration:bigint}|{readonly action:"abort";readonly currentAuthorityOwnerGeneration:bigint};
|
|
100
100
|
export interface ReplyRelay33 {readonly operation:ServiceWireOperationId;readonly replyRouteId:bigint;readonly context:ServiceWireReplyRelayContext;readonly terminalResult:number;readonly failureCode:number;readonly payload?:ApplicationPayloadEnvelopeV1;}
|
|
101
101
|
export interface ReplyRelayAck46 {readonly relocation:ServiceWireRelocationId;readonly coordinator:ServiceWireCoordinatorFence;readonly operation:ServiceWireOperationId;readonly replyRouteId:bigint;readonly requestSource:ServiceWireRequestSourceFence;readonly status:"terminalReceived"|"alreadyTerminal";}
|
|
102
102
|
export interface RelocationReady30 {readonly relocation:ServiceWireRelocationId;readonly targetAttemptGeneration:bigint;readonly coordinator:ServiceWireCoordinatorFence;readonly target:ServiceWireTargetFence;readonly object:RelocationObjectIdentity;readonly senderRole:ServiceWireRelocationRole;}
|
|
@@ -128,8 +128,8 @@ function b3WriteContext(out:number[],v:ServiceWireReplyRelayContext):void{out.pu
|
|
|
128
128
|
function b3ReadContext(bytes:Uint8Array,at:{value:number}):ServiceWireReplyRelayContext{const kind=read8(bytes,at),end=boundedEnd(bytes,at,read16(bytes,at),"reply context");let value:ServiceWireReplyRelayContext;if(kind===1){const completion=read8(bytes,at),inner=boundedEnd(bytes,at,read16(bytes,at),"cold activation");if(completion<1||completion>2)throw new RangeError("completion kind");const authority=b3ReadAuthority(bytes,at);exactEnd(at,inner,"cold activation");value={contextKind:"coldActivation",completionKind:completion===1?"readyBarrier":"activationFailure",authority};}else if(kind===2)value={contextKind:"maintenanceRelocation",relocation:b3ReadId(bytes,at,"relocation"),targetAttemptGeneration:nonzero64(bytes,at,"target attempt"),coordinator:b3ReadCoordinator(bytes,at),participantId:nonzero64(bytes,at,"participant"),sequence:nonzero64(bytes,at,"sequence")};else throw new RangeError("reply context kind");exactEnd(at,end,"reply context");return value;}
|
|
129
129
|
const b3FailureResults=new Map<number,number>([[1,102],[2,105],[3,107],[4,107],[5,105],[6,102],[7,107],[8,102],[9,102],[10,102],[11,102],[12,104],[13,105],[14,102],[15,106],[16,104],[17,105],[18,106],[19,105],[20,105],[21,107],[22,106],[33,107],[34,107],[35,105]]);
|
|
130
130
|
function b3ValidTerminal(result:number,failure:number,payload:boolean):void{const boundary=[101,103,108,109,110,111,112,113];if(result===0){if(failure!==0)throw new RangeError("terminal failure");return;}if(payload)throw new RangeError("failure payload");if(boundary.includes(result)){if(failure!==0)throw new RangeError("boundary failure");return;}if(b3FailureResults.get(failure)!==result)throw new RangeError("typed failure");}
|
|
131
|
-
function b3WriteRoute(out:number[],v:ServiceWireSessionRouteUpdate):void{out.push(v.action==="commit"?1:2);body16(out,b=>{if(v.action==="commit"){if(v.previousAuthorityOwnerGeneration===0n||v.targetAuthorityOwnerGeneration===0n||v.targetNodeGeneration===0n)throw new RangeError("route commit");u64(b,v.previousAuthorityOwnerGeneration);u64(b,v.targetAuthorityOwnerGeneration);rid(b,v.targetNodeRid);u64(b,v.targetNodeGeneration);}else{if(v.currentAuthorityOwnerGeneration===0n)throw new RangeError("route abort");u64(b,v.currentAuthorityOwnerGeneration);}});}
|
|
132
|
-
function b3ReadRoute(bytes:Uint8Array,at:{value:number}):ServiceWireSessionRouteUpdate{const action=read8(bytes,at),end=boundedEnd(bytes,at,read16(bytes,at),"session route");let value:ServiceWireSessionRouteUpdate;if(action===1)value={action:"commit",previousAuthorityOwnerGeneration:nonzero64(bytes,at,"previous authority"),targetAuthorityOwnerGeneration:nonzero64(bytes,at,"target authority"),targetNodeRid:readRid(bytes,at),targetNodeGeneration:nonzero64(bytes,at,"target node")};else if(action===2)value={action:"abort",currentAuthorityOwnerGeneration:nonzero64(bytes,at,"current authority")};else throw new RangeError("route action");exactEnd(at,end,"session route");return value;}
|
|
131
|
+
function b3WriteRoute(out:number[],v:ServiceWireSessionRouteUpdate):void{out.push(v.action==="commit"?1:2);body16(out,b=>{if(v.action==="commit"){if(v.previousAuthorityOwnerGeneration===0n||v.targetAuthorityOwnerGeneration===0n||v.targetNodeGeneration===0n||v.targetOwnerLeaseGeneration===0n)throw new RangeError("route commit");u64(b,v.previousAuthorityOwnerGeneration);u64(b,v.targetAuthorityOwnerGeneration);rid(b,v.targetNodeRid);u64(b,v.targetNodeGeneration);u64(b,v.targetOwnerLeaseGeneration);}else{if(v.currentAuthorityOwnerGeneration===0n)throw new RangeError("route abort");u64(b,v.currentAuthorityOwnerGeneration);}});}
|
|
132
|
+
function b3ReadRoute(bytes:Uint8Array,at:{value:number}):ServiceWireSessionRouteUpdate{const action=read8(bytes,at),end=boundedEnd(bytes,at,read16(bytes,at),"session route");let value:ServiceWireSessionRouteUpdate;if(action===1)value={action:"commit",previousAuthorityOwnerGeneration:nonzero64(bytes,at,"previous authority"),targetAuthorityOwnerGeneration:nonzero64(bytes,at,"target authority"),targetNodeRid:readRid(bytes,at),targetNodeGeneration:nonzero64(bytes,at,"target node"),targetOwnerLeaseGeneration:nonzero64(bytes,at,"target lease")};else if(action===2)value={action:"abort",currentAuthorityOwnerGeneration:nonzero64(bytes,at,"current authority")};else throw new RangeError("route action");exactEnd(at,end,"session route");return value;}
|
|
133
133
|
function b3WriteSession(out:number[],v:{readonly sessionOwnerNodeRid:Uint8Array;readonly sessionOwnerNodeGeneration:bigint;readonly sessionOwnerId:string;readonly sessionOwnerLeaseGeneration:bigint;readonly sessionRid:Uint8Array;readonly bindingGeneration:bigint}):void{rid(out,v.sessionOwnerNodeRid);if(v.sessionOwnerNodeGeneration===0n||v.sessionOwnerLeaseGeneration===0n||v.bindingGeneration===0n)throw new RangeError("session");u64(out,v.sessionOwnerNodeGeneration);text8(out,v.sessionOwnerId);u64(out,v.sessionOwnerLeaseGeneration);rid(out,v.sessionRid);u64(out,v.bindingGeneration);}
|
|
134
134
|
function b3ReadSession(bytes:Uint8Array,at:{value:number}){return{sessionOwnerNodeRid:readRid(bytes,at),sessionOwnerNodeGeneration:nonzero64(bytes,at,"session owner node"),sessionOwnerId:readText8(bytes,at),sessionOwnerLeaseGeneration:nonzero64(bytes,at,"session owner lease"),sessionRid:readRid(bytes,at),bindingGeneration:nonzero64(bytes,at,"binding generation")};}
|
|
135
135
|
function b3Finish(at:{value:number},bytes:Uint8Array,name:string):void{exactEnd(at,bytes.length,name);}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ActorRef, RoutingId, ZLinkActor, ZLinkActorJoinOperationId } from '../../contracts';
|
|
2
2
|
import type { ZLinkRemoteBoundSessionTarget } from '../actors/actor-runtime-state';
|
|
3
|
-
import type {
|
|
3
|
+
import type { ZLinkDeferredJoinCompletion } from '../actors/deferred-join-completion';
|
|
4
4
|
import type { ZLinkActorRequestTerminal } from './spot-actor-packet-dispatch';
|
|
5
5
|
|
|
6
6
|
const ADMISSION_RETENTION_MS = 30_000;
|
|
@@ -57,7 +57,7 @@ export interface ZLinkFormalRemoteActorAdmissionOutcome {
|
|
|
57
57
|
readonly actorRef: ActorRef;
|
|
58
58
|
readonly reply?: Buffer;
|
|
59
59
|
readonly replyContentType?: string;
|
|
60
|
-
readonly
|
|
60
|
+
readonly deferredJoinCompletion?: ZLinkDeferredJoinCompletion;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
export interface ZLinkFormalRemoteActorAdmissionFailure {
|
|
@@ -282,9 +282,9 @@ export class ZLinkFormalRemoteActorAdmissionRegistry {
|
|
|
282
282
|
...(outcome.replyContentType === undefined
|
|
283
283
|
? {}
|
|
284
284
|
: { replyContentType: outcome.replyContentType }),
|
|
285
|
-
...(outcome.
|
|
285
|
+
...(outcome.deferredJoinCompletion === undefined
|
|
286
286
|
? {}
|
|
287
|
-
: {
|
|
287
|
+
: { deferredJoinCompletion: outcome.deferredJoinCompletion })
|
|
288
288
|
};
|
|
289
289
|
entry.resolveResult(entry.result);
|
|
290
290
|
if (!outcome.accepted) {
|
|
@@ -314,7 +314,7 @@ export class ZLinkFormalRemoteActorAdmissionRegistry {
|
|
|
314
314
|
entry.actor = actor;
|
|
315
315
|
}
|
|
316
316
|
|
|
317
|
-
|
|
317
|
+
attachDeferredJoinCompletion(transferId: string, root: ZLinkDeferredJoinCompletion): void {
|
|
318
318
|
const entry = this.admissions.get(transferId);
|
|
319
319
|
if (
|
|
320
320
|
entry === undefined ||
|
|
@@ -325,7 +325,7 @@ export class ZLinkFormalRemoteActorAdmissionRegistry {
|
|
|
325
325
|
) {
|
|
326
326
|
throw new Error(`Remote actor admission '${transferId}' cannot attach deferred recovery.`);
|
|
327
327
|
}
|
|
328
|
-
entry.result = { ...entry.result,
|
|
328
|
+
entry.result = { ...entry.result, deferredJoinCompletion: root };
|
|
329
329
|
}
|
|
330
330
|
|
|
331
331
|
abort(transferId: string): void {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { RoutingId, ZLinkActor } from '../../contracts';
|
|
2
|
-
import type {
|
|
2
|
+
import type { ZLinkDeferredJoinCompletion, ZLinkRemoteBoundSessionTarget } from '../actors';
|
|
3
3
|
import type { ZLinkActorHandoffPacket } from '../actors/actor-handoff';
|
|
4
4
|
import { ZLinkStateLane } from '../execution/state-lane';
|
|
5
5
|
|
|
@@ -8,7 +8,9 @@ export interface ZLinkFormalRemoteActorTransfer {
|
|
|
8
8
|
readonly spotId: RoutingId;
|
|
9
9
|
readonly transferId: string;
|
|
10
10
|
readonly handoffBacklog: readonly ZLinkActorHandoffPacket[];
|
|
11
|
-
readonly
|
|
11
|
+
readonly deferredJoinCompletion?: ZLinkDeferredJoinCompletion;
|
|
12
|
+
/** The Session seal this relocation carries until it publishes command 44. */
|
|
13
|
+
readonly sealedSession?: ZLinkRemoteBoundSessionTarget;
|
|
12
14
|
readonly targetLifecycleCompleted: Promise<void>;
|
|
13
15
|
readonly sourceLeaveSubmitted: Promise<boolean>;
|
|
14
16
|
}
|
|
@@ -43,7 +45,8 @@ export class ZLinkFormalRemoteActorTransferRegistry {
|
|
|
43
45
|
readonly spotId: RoutingId;
|
|
44
46
|
readonly transferId: string;
|
|
45
47
|
readonly handoffBacklog: readonly ZLinkActorHandoffPacket[];
|
|
46
|
-
readonly
|
|
48
|
+
readonly deferredJoinCompletion?: ZLinkDeferredJoinCompletion;
|
|
49
|
+
readonly sealedSession?: ZLinkRemoteBoundSessionTarget;
|
|
47
50
|
}): ZLinkFormalRemoteActorTransfer {
|
|
48
51
|
const existingByActor = this.transfers.get(input.actor.context.actorId)?.transfer;
|
|
49
52
|
if (existingByActor !== undefined) {
|