@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
|
@@ -1,10 +1,29 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import {
|
|
3
|
+
type RoutingId,
|
|
4
|
+
type SpotRef,
|
|
5
|
+
type ZLinkSpotCreateResult,
|
|
6
|
+
ZLinkFrameworkException,
|
|
7
|
+
ZLinkSpotCreateState
|
|
8
|
+
} from '../../contracts';
|
|
9
|
+
|
|
10
|
+
import {
|
|
11
|
+
decodeServiceClosingSpotAuthority,
|
|
12
|
+
decodeServiceReadySpotAuthority,
|
|
13
|
+
encodeServiceUserSpotAuthorityPayload
|
|
14
|
+
} from '../foundation/service-authority-payload-codec';
|
|
15
|
+
import type { ServiceUserSpotOperationResult } from '../foundation/service-stateful-runtime';
|
|
16
|
+
import type {
|
|
17
|
+
ServiceDirectSpotRouteFence,
|
|
18
|
+
ServiceUserSpotCloseRecord,
|
|
19
|
+
ServiceUserSpotCreateRecord
|
|
20
|
+
} from '../foundation/service-stateful-wire-codec';
|
|
1
21
|
import {
|
|
2
22
|
ZLinkFrameworkInternalErrorKind,
|
|
3
23
|
createInternalFrameworkException,
|
|
4
24
|
wireReplyFailureException
|
|
5
25
|
} from '../framework-errors-internal';
|
|
6
|
-
import {
|
|
7
|
-
import type { RoutingId, SpotRef, ZLinkSpotCreateResult } from '../../contracts';
|
|
26
|
+
import { encodeAuthorityKey } from '../locations/authority-key-codec';
|
|
8
27
|
import type {
|
|
9
28
|
ZLinkAuthoritySnapshot,
|
|
10
29
|
ZLinkLocationOwnerToken,
|
|
@@ -14,19 +33,9 @@ import type {
|
|
|
14
33
|
ZLinkAuthorityStore,
|
|
15
34
|
ZLinkObjectCreationStore
|
|
16
35
|
} from '../locations/internal-store-contracts';
|
|
17
|
-
import { ZLinkFrameworkException, ZLinkSpotCreateState } from '../../contracts';
|
|
18
|
-
import {
|
|
19
|
-
decodeServiceReadySpotAuthority,
|
|
20
|
-
encodeServiceUserSpotAuthorityPayload
|
|
21
|
-
} from '../foundation/service-authority-payload-codec';
|
|
22
|
-
import { encodeAuthorityKey } from '../locations/authority-key-codec';
|
|
23
36
|
import type { ZLinkLocalSpotCreateResult } from '../spots/spot-manager-internal-contracts';
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
ServiceUserSpotCloseRecord,
|
|
27
|
-
ServiceUserSpotCreateRecord,
|
|
28
|
-
ServiceDirectSpotRouteFence
|
|
29
|
-
} from '../foundation/service-stateful-wire-codec';
|
|
37
|
+
const DEFAULT_USER_SPOT_CLEANUP_TIMEOUT_MS = 1_000;
|
|
38
|
+
const DEFAULT_USER_SPOT_POLL_INTERVAL_MS = 10;
|
|
30
39
|
|
|
31
40
|
export interface ZLinkUserSpotCreationCoordinatorOptions {
|
|
32
41
|
readonly store: ZLinkObjectCreationStore & ZLinkAuthorityStore;
|
|
@@ -108,9 +117,10 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
108
117
|
) => Promise<ZLinkLocalSpotCreateResult>,
|
|
109
118
|
discard?: (signal?: AbortSignal) => Promise<void>
|
|
110
119
|
): Promise<ZLinkUserSpotCreationResult> {
|
|
111
|
-
const deadline = createDeadline(request.timeoutMs, request.signal);
|
|
112
|
-
const deadlineMs = performance.now() + request.timeoutMs;
|
|
113
120
|
const deadlineUnixMs = Date.now() + request.timeoutMs;
|
|
121
|
+
const remainingMs = Math.max(0, deadlineUnixMs - Date.now());
|
|
122
|
+
const deadline = createDeadline(remainingMs, request.signal);
|
|
123
|
+
const deadlineMs = performance.now() + remainingMs;
|
|
114
124
|
const signal = deadline.signal;
|
|
115
125
|
signal.throwIfAborted();
|
|
116
126
|
const sha256 = createHash('sha256').update(request.requestPayload).digest();
|
|
@@ -186,7 +196,8 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
186
196
|
}
|
|
187
197
|
}
|
|
188
198
|
},
|
|
189
|
-
signal
|
|
199
|
+
signal,
|
|
200
|
+
BigInt(deadlineUnixMs)
|
|
190
201
|
);
|
|
191
202
|
} catch (error) {
|
|
192
203
|
deadline.close();
|
|
@@ -332,55 +343,34 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
332
343
|
|
|
333
344
|
async close(
|
|
334
345
|
spot: SpotRef,
|
|
335
|
-
closeOwner: (
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
346
|
+
closeOwner: (
|
|
347
|
+
current: SpotRef,
|
|
348
|
+
beginAuthority: (onCommitted: () => void) => Promise<{ release(): Promise<void> }>
|
|
349
|
+
) => Promise<boolean>,
|
|
350
|
+
signal?: AbortSignal
|
|
339
351
|
): Promise<boolean> {
|
|
340
352
|
const resolved = await this.resolveCloseTarget(spot, signal);
|
|
341
353
|
if (resolved === undefined) return false;
|
|
342
354
|
const { spot: currentRef, snapshot: current } = resolved;
|
|
343
355
|
const key = encodeAuthorityKey('user_spot', String(spot.spotId));
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
ZLinkFrameworkInternalErrorKind.SpotMoving,
|
|
347
|
-
`User Spot '${String(spot.spotId)}' is missing from its authority owner.`,
|
|
348
|
-
true
|
|
349
|
-
);
|
|
350
|
-
}
|
|
351
|
-
if (ownerCanClose?.(currentRef) === false) return false;
|
|
352
|
-
const closing = await this.beginClosing(key, current, String(spot.spotId), signal);
|
|
353
|
-
let closed: boolean;
|
|
354
|
-
try {
|
|
355
|
-
closed = await closeOwner(currentRef, closing);
|
|
356
|
-
} catch (error) {
|
|
357
|
-
await this.restoreReady(key, closing, String(spot.spotId), signal);
|
|
358
|
-
throw error;
|
|
359
|
-
}
|
|
360
|
-
if (!closed) {
|
|
361
|
-
await this.restoreReady(key, closing, String(spot.spotId), signal);
|
|
362
|
-
return false;
|
|
363
|
-
}
|
|
364
|
-
const deleted = await this.options.store.compareExchangeAuthority(
|
|
365
|
-
key,
|
|
366
|
-
closing.storeVersion,
|
|
367
|
-
{ kind: 'delete' },
|
|
368
|
-
signal
|
|
356
|
+
return await closeOwner(currentRef, async (onCommitted) =>
|
|
357
|
+
this.commitCloseAuthority(key, current, String(spot.spotId), onCommitted)
|
|
369
358
|
);
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/** Commits Closing for the owner's own incarnation when its context requests Close. */
|
|
362
|
+
async beginOwnerClose(
|
|
363
|
+
spot: SpotRef,
|
|
364
|
+
onCommitted: () => void
|
|
365
|
+
): Promise<{ release(): Promise<void> } | undefined> {
|
|
366
|
+
const resolved = await this.resolveCloseTarget(spot);
|
|
367
|
+
if (resolved === undefined) return undefined;
|
|
368
|
+
const spotId = String(spot.spotId);
|
|
369
|
+
return await this.commitCloseAuthority(
|
|
370
|
+
encodeAuthorityKey('user_spot', spotId),
|
|
371
|
+
resolved.snapshot,
|
|
372
|
+
spotId,
|
|
373
|
+
onCommitted
|
|
384
374
|
);
|
|
385
375
|
}
|
|
386
376
|
|
|
@@ -391,29 +381,14 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
391
381
|
const key = encodeAuthorityKey('user_spot', String(spot.spotId));
|
|
392
382
|
const current = await this.options.store.readAuthority(key, signal);
|
|
393
383
|
if (current.kind === 'missing') return undefined;
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
spotId: spot.spotId,
|
|
403
|
-
stableType: current.allocation.stableType,
|
|
404
|
-
requestPayload: Buffer.alloc(0),
|
|
405
|
-
timeoutMs: 1
|
|
406
|
-
});
|
|
407
|
-
if (
|
|
408
|
-
String(current.allocation.descriptor.rid) !== String(spot.nodeRid) ||
|
|
409
|
-
current.allocation.descriptor.meshName !== spot.meshName
|
|
410
|
-
) {
|
|
411
|
-
throw createInternalFrameworkException(
|
|
412
|
-
ZLinkFrameworkInternalErrorKind.SpotGenerationStale,
|
|
413
|
-
`User Spot '${String(spot.spotId)}' owner route is stale.`
|
|
414
|
-
);
|
|
415
|
-
}
|
|
416
|
-
return { spot: currentRef, snapshot: current };
|
|
384
|
+
return {
|
|
385
|
+
spot: requireCloseTarget(current, String(spot.spotId), {
|
|
386
|
+
objectGeneration: spot.objectGeneration,
|
|
387
|
+
nodeRid: String(spot.nodeRid),
|
|
388
|
+
meshName: spot.meshName
|
|
389
|
+
}),
|
|
390
|
+
snapshot: current
|
|
391
|
+
};
|
|
417
392
|
}
|
|
418
393
|
|
|
419
394
|
async handleRemoteCreate(
|
|
@@ -565,7 +540,8 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
565
540
|
}
|
|
566
541
|
}
|
|
567
542
|
},
|
|
568
|
-
signal
|
|
543
|
+
signal,
|
|
544
|
+
record.deadlineUnixMs
|
|
569
545
|
);
|
|
570
546
|
await discard?.(signal);
|
|
571
547
|
return {
|
|
@@ -600,7 +576,8 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
600
576
|
ownerNodeGeneration: current.allocation.descriptorLifecycleGeneration
|
|
601
577
|
})
|
|
602
578
|
},
|
|
603
|
-
signal
|
|
579
|
+
signal,
|
|
580
|
+
record.deadlineUnixMs
|
|
604
581
|
);
|
|
605
582
|
} catch (error) {
|
|
606
583
|
throw createInternalFrameworkException(
|
|
@@ -631,7 +608,9 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
631
608
|
};
|
|
632
609
|
} catch (error) {
|
|
633
610
|
local?.publication?.abort();
|
|
634
|
-
const cleanupDeadline = createDeadline(
|
|
611
|
+
const cleanupDeadline = createDeadline(
|
|
612
|
+
this.options.cleanupTimeoutMs ?? DEFAULT_USER_SPOT_CLEANUP_TIMEOUT_MS
|
|
613
|
+
);
|
|
635
614
|
const cleanupSignal = cleanupDeadline.signal;
|
|
636
615
|
const cleanup = await Promise.allSettled([
|
|
637
616
|
waitForAbort(
|
|
@@ -672,65 +651,71 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
672
651
|
|
|
673
652
|
async handleRemoteClose(
|
|
674
653
|
record: ServiceUserSpotCloseRecord,
|
|
675
|
-
closeOwner: (
|
|
676
|
-
|
|
654
|
+
closeOwner: (
|
|
655
|
+
spot: SpotRef,
|
|
656
|
+
beginAuthority: (onCommitted: () => void) => Promise<{ release(): Promise<void> }>,
|
|
657
|
+
signal?: AbortSignal
|
|
658
|
+
) => Promise<boolean>,
|
|
659
|
+
signal?: AbortSignal,
|
|
660
|
+
canResume?: (spot: SpotRef) => boolean
|
|
677
661
|
): Promise<boolean> {
|
|
678
662
|
const key = encodeAuthorityKey('user_spot', record.target.spotId);
|
|
679
663
|
const current = await this.options.store.readAuthority(key, signal);
|
|
680
664
|
if (current.kind === 'missing') return false;
|
|
681
|
-
|
|
682
|
-
throw createInternalFrameworkException(
|
|
683
|
-
ZLinkFrameworkInternalErrorKind.SpotGenerationStale,
|
|
684
|
-
`User Spot '${record.target.spotId}' generation is stale.`
|
|
685
|
-
);
|
|
686
|
-
}
|
|
687
|
-
if (
|
|
688
|
-
current.authorityOwnerGeneration !== record.target.authorityOwnerGeneration ||
|
|
689
|
-
current.storeVersion.value !== record.target.expectedStoreVersion ||
|
|
690
|
-
String(current.allocation.descriptor.rid) !== record.target.targetNodeRid ||
|
|
691
|
-
current.allocation.descriptorLifecycleGeneration !== record.target.targetNodeGeneration ||
|
|
692
|
-
current.allocation.objectKind !== 'user_spot' ||
|
|
693
|
-
current.allocation.state !== 'active'
|
|
694
|
-
) {
|
|
695
|
-
throw createInternalFrameworkException(
|
|
696
|
-
ZLinkFrameworkInternalErrorKind.SpotMoving,
|
|
697
|
-
`User Spot '${record.target.spotId}' close authority is moving.`,
|
|
698
|
-
true
|
|
699
|
-
);
|
|
700
|
-
}
|
|
701
|
-
const spot: SpotRef = {
|
|
665
|
+
const candidate: SpotRef = {
|
|
702
666
|
spotId: record.target.spotId as RoutingId,
|
|
703
667
|
objectGeneration: current.objectGeneration,
|
|
704
668
|
meshName: current.allocation.descriptor.meshName,
|
|
705
669
|
nodeRid: current.allocation.descriptor.rid
|
|
706
670
|
};
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
}
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
671
|
+
// A Closing committed by this owner is resumed, so its store version has
|
|
672
|
+
// advanced past the one the source observed.
|
|
673
|
+
const resuming =
|
|
674
|
+
canResume?.(candidate) === true &&
|
|
675
|
+
decodeServiceClosingSpotAuthority(current.payload)?.kind === 'user_spot';
|
|
676
|
+
const spot = requireCloseTarget(current, record.target.spotId, {
|
|
677
|
+
objectGeneration: record.target.objectGeneration,
|
|
678
|
+
nodeRid: record.target.targetNodeRid,
|
|
679
|
+
nodeGeneration: record.target.targetNodeGeneration,
|
|
680
|
+
authorityOwnerGeneration: record.target.authorityOwnerGeneration,
|
|
681
|
+
storeVersion: resuming ? undefined : record.target.expectedStoreVersion
|
|
682
|
+
});
|
|
683
|
+
return await closeOwner(
|
|
684
|
+
spot,
|
|
685
|
+
async (onCommitted) =>
|
|
686
|
+
this.commitCloseAuthority(key, current, record.target.spotId, onCommitted),
|
|
723
687
|
signal
|
|
724
688
|
);
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
);
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
private async commitCloseAuthority(
|
|
692
|
+
key: ReturnType<typeof encodeAuthorityKey>,
|
|
693
|
+
current: ZLinkAuthoritySnapshot,
|
|
694
|
+
spotId: string,
|
|
695
|
+
onCommitted: () => void
|
|
696
|
+
): Promise<{ release(): Promise<void> }> {
|
|
697
|
+
const closing = await this.beginClosing(key, current, spotId);
|
|
698
|
+
const authority = {
|
|
699
|
+
release: async () => {
|
|
700
|
+
this.forgetReadyRoute(spotId as RoutingId, current);
|
|
701
|
+
const deleted = await this.options.store.compareExchangeAuthority(
|
|
702
|
+
key,
|
|
703
|
+
closing.storeVersion,
|
|
704
|
+
{
|
|
705
|
+
kind: 'delete'
|
|
706
|
+
}
|
|
707
|
+
);
|
|
708
|
+
if (deleted.kind !== 'deleted') {
|
|
709
|
+
throw createInternalFrameworkException(
|
|
710
|
+
ZLinkFrameworkInternalErrorKind.SpotMoving,
|
|
711
|
+
`User Spot '${spotId}' authority changed while closing.`,
|
|
712
|
+
true
|
|
713
|
+
);
|
|
714
|
+
}
|
|
715
|
+
}
|
|
716
|
+
};
|
|
717
|
+
onCommitted();
|
|
718
|
+
return authority;
|
|
734
719
|
}
|
|
735
720
|
|
|
736
721
|
forgetReadyRoute(spotId: RoutingId, snapshot: ZLinkAuthoritySnapshot): void {
|
|
@@ -743,8 +728,7 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
743
728
|
private async beginClosing(
|
|
744
729
|
key: ReturnType<typeof encodeAuthorityKey>,
|
|
745
730
|
current: ZLinkAuthoritySnapshot,
|
|
746
|
-
spotId: string
|
|
747
|
-
signal?: AbortSignal
|
|
731
|
+
spotId: string
|
|
748
732
|
): Promise<ZLinkAuthoritySnapshot> {
|
|
749
733
|
const ready = decodeServiceReadySpotAuthority(current.payload);
|
|
750
734
|
if (
|
|
@@ -766,7 +750,7 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
766
750
|
payload: userSpotAuthorityPayload(current, spotId, 'closing'),
|
|
767
751
|
generationTransition: 'preserve'
|
|
768
752
|
},
|
|
769
|
-
|
|
753
|
+
undefined
|
|
770
754
|
);
|
|
771
755
|
if (closing.kind === 'stored') {
|
|
772
756
|
const { kind: _kind, ...snapshot } = closing;
|
|
@@ -779,31 +763,6 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
779
763
|
);
|
|
780
764
|
}
|
|
781
765
|
|
|
782
|
-
private async restoreReady(
|
|
783
|
-
key: ReturnType<typeof encodeAuthorityKey>,
|
|
784
|
-
closing: ZLinkAuthoritySnapshot,
|
|
785
|
-
spotId: string,
|
|
786
|
-
signal?: AbortSignal
|
|
787
|
-
): Promise<void> {
|
|
788
|
-
const restored = await this.options.store.compareExchangeAuthority(
|
|
789
|
-
key,
|
|
790
|
-
closing.storeVersion,
|
|
791
|
-
{
|
|
792
|
-
kind: 'put',
|
|
793
|
-
payload: userSpotAuthorityPayload(closing, spotId, 'ready'),
|
|
794
|
-
generationTransition: 'preserve'
|
|
795
|
-
},
|
|
796
|
-
signal
|
|
797
|
-
);
|
|
798
|
-
if (restored.kind !== 'stored') {
|
|
799
|
-
throw createInternalFrameworkException(
|
|
800
|
-
ZLinkFrameworkInternalErrorKind.SpotMoving,
|
|
801
|
-
'User Spot Ready authority could not be restored after close was declined.',
|
|
802
|
-
true
|
|
803
|
-
);
|
|
804
|
-
}
|
|
805
|
-
}
|
|
806
|
-
|
|
807
766
|
private async awaitReady(
|
|
808
767
|
request: ZLinkUserSpotCreationRequest,
|
|
809
768
|
signal: AbortSignal
|
|
@@ -815,7 +774,7 @@ export class ZLinkUserSpotCreationCoordinator {
|
|
|
815
774
|
if (current.kind === 'snapshot' && current.allocation.state === 'active') {
|
|
816
775
|
return spotRef(current, request);
|
|
817
776
|
}
|
|
818
|
-
await wait(this.options.pollIntervalMs ??
|
|
777
|
+
await wait(this.options.pollIntervalMs ?? DEFAULT_USER_SPOT_POLL_INTERVAL_MS, signal);
|
|
819
778
|
}
|
|
820
779
|
}
|
|
821
780
|
|
|
@@ -926,6 +885,66 @@ function readySpotRoute(
|
|
|
926
885
|
};
|
|
927
886
|
}
|
|
928
887
|
|
|
888
|
+
/** The Close fence a caller observed; omitted parts are not part of that caller's fence. */
|
|
889
|
+
interface ZLinkUserSpotCloseFence {
|
|
890
|
+
readonly objectGeneration: bigint;
|
|
891
|
+
readonly nodeRid: string;
|
|
892
|
+
readonly meshName?: string;
|
|
893
|
+
readonly nodeGeneration?: bigint;
|
|
894
|
+
readonly authorityOwnerGeneration?: bigint;
|
|
895
|
+
readonly storeVersion?: string;
|
|
896
|
+
}
|
|
897
|
+
|
|
898
|
+
/**
|
|
899
|
+
* The single classifier of a Close target (§7, §9): another ObjectGeneration is
|
|
900
|
+
* SpotGenerationStale; any owner fence difference or an authority that is not
|
|
901
|
+
* in a Framework-owned Ready or Closing state is SpotMoving.
|
|
902
|
+
*/
|
|
903
|
+
function requireCloseTarget(
|
|
904
|
+
current: ZLinkAuthoritySnapshot,
|
|
905
|
+
spotId: string,
|
|
906
|
+
fence: ZLinkUserSpotCloseFence
|
|
907
|
+
): SpotRef {
|
|
908
|
+
if (current.objectGeneration !== fence.objectGeneration) {
|
|
909
|
+
throw createInternalFrameworkException(
|
|
910
|
+
ZLinkFrameworkInternalErrorKind.SpotGenerationStale,
|
|
911
|
+
`User Spot '${spotId}' generation is stale.`
|
|
912
|
+
);
|
|
913
|
+
}
|
|
914
|
+
// A committed Closing stays the close target: its owner resumes that Close.
|
|
915
|
+
const decoded =
|
|
916
|
+
decodeServiceReadySpotAuthority(current.payload) ??
|
|
917
|
+
decodeServiceClosingSpotAuthority(current.payload);
|
|
918
|
+
const allocation = current.allocation;
|
|
919
|
+
if (
|
|
920
|
+
decoded?.kind !== 'user_spot' ||
|
|
921
|
+
decoded.spotId !== spotId ||
|
|
922
|
+
decoded.ownerId !== current.ownerId ||
|
|
923
|
+
decoded.ownerLeaseGeneration !== current.ownerLeaseGeneration ||
|
|
924
|
+
allocation.objectKind !== 'user_spot' ||
|
|
925
|
+
allocation.state !== 'active' ||
|
|
926
|
+
String(allocation.descriptor.rid) !== fence.nodeRid ||
|
|
927
|
+
(fence.meshName !== undefined && allocation.descriptor.meshName !== fence.meshName) ||
|
|
928
|
+
(fence.nodeGeneration !== undefined &&
|
|
929
|
+
allocation.descriptorLifecycleGeneration !== fence.nodeGeneration) ||
|
|
930
|
+
(fence.authorityOwnerGeneration !== undefined &&
|
|
931
|
+
current.authorityOwnerGeneration !== fence.authorityOwnerGeneration) ||
|
|
932
|
+
(fence.storeVersion !== undefined && current.storeVersion.value !== fence.storeVersion)
|
|
933
|
+
) {
|
|
934
|
+
throw createInternalFrameworkException(
|
|
935
|
+
ZLinkFrameworkInternalErrorKind.SpotMoving,
|
|
936
|
+
`User Spot '${spotId}' owner fence changed or the Spot is moving.`,
|
|
937
|
+
true
|
|
938
|
+
);
|
|
939
|
+
}
|
|
940
|
+
return {
|
|
941
|
+
spotId: spotId as RoutingId,
|
|
942
|
+
objectGeneration: current.objectGeneration,
|
|
943
|
+
meshName: allocation.descriptor.meshName,
|
|
944
|
+
nodeRid: allocation.descriptor.rid
|
|
945
|
+
};
|
|
946
|
+
}
|
|
947
|
+
|
|
929
948
|
function spotRef(
|
|
930
949
|
snapshot: ZLinkAuthoritySnapshot,
|
|
931
950
|
request: ZLinkUserSpotCreationRequest,
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { createHash, timingSafeEqual } from 'node:crypto';
|
|
2
2
|
import type { ZLinkLocationStore, ZLinkStoreKey, ZLinkStoreReadResult } from '../../contracts';
|
|
3
|
+
import { SHA256_DIGEST_BYTES } from '../foundation/actor-join-recovery-codec';
|
|
4
|
+
import { PROVIDER_STORAGE_NAMESPACE_PREFIX, storeKey } from './in-memory-provider-location-store';
|
|
3
5
|
import type {
|
|
4
6
|
ZLinkAggregateFence,
|
|
5
7
|
ZLinkAggregatePrepareRequest
|
|
6
8
|
} from './internal-location-contracts';
|
|
7
|
-
import { storeKey } from './in-memory-provider-location-store';
|
|
8
9
|
|
|
9
|
-
const
|
|
10
|
+
const INVENTORY_PAGE_KIND = 'aggregate-inventory-page-v1';
|
|
11
|
+
const INVENTORY_ROOT_KIND = 'aggregate-inventory-root-v1';
|
|
12
|
+
const PREFIX = `${PROVIDER_STORAGE_NAMESPACE_PREFIX}aggregate-inventory:`;
|
|
10
13
|
const MAX_PAGE_ENTRIES = 1_024;
|
|
11
14
|
const MAX_PAGE_BYTES = 1_024 * 1_024;
|
|
12
15
|
const MAX_TREE_LEVELS = 32;
|
|
@@ -30,7 +33,7 @@ interface InventoryReference {
|
|
|
30
33
|
}
|
|
31
34
|
|
|
32
35
|
interface InventoryPage {
|
|
33
|
-
readonly kind:
|
|
36
|
+
readonly kind: typeof INVENTORY_PAGE_KIND;
|
|
34
37
|
readonly level: number;
|
|
35
38
|
readonly index: number;
|
|
36
39
|
readonly startIndex: number;
|
|
@@ -40,7 +43,7 @@ interface InventoryPage {
|
|
|
40
43
|
}
|
|
41
44
|
|
|
42
45
|
interface InventoryRoot {
|
|
43
|
-
readonly kind:
|
|
46
|
+
readonly kind: typeof INVENTORY_ROOT_KIND;
|
|
44
47
|
readonly totalCount: number;
|
|
45
48
|
readonly digest: string;
|
|
46
49
|
readonly declaredDigest: string;
|
|
@@ -209,8 +212,8 @@ function buildTree(request: ZLinkAggregatePrepareRequest): InventoryTree {
|
|
|
209
212
|
if (request.participants.length < 1) {
|
|
210
213
|
throw new RangeError('Aggregate inventory requires at least one participant.');
|
|
211
214
|
}
|
|
212
|
-
if (request.inventoryDigest.byteLength !==
|
|
213
|
-
throw new TypeError(
|
|
215
|
+
if (request.inventoryDigest.byteLength !== SHA256_DIGEST_BYTES) {
|
|
216
|
+
throw new TypeError(`Aggregate inventory digest must contain ${SHA256_DIGEST_BYTES} bytes.`);
|
|
214
217
|
}
|
|
215
218
|
const entries = request.participants.map((participant, index): InventoryEntry => ({
|
|
216
219
|
index,
|
|
@@ -240,7 +243,7 @@ function buildTree(request: ZLinkAggregatePrepareRequest): InventoryTree {
|
|
|
240
243
|
) {
|
|
241
244
|
level++;
|
|
242
245
|
if (level >= MAX_TREE_LEVELS) {
|
|
243
|
-
throw new RangeError(
|
|
246
|
+
throw new RangeError(`Aggregate inventory tree exceeds ${MAX_TREE_LEVELS} levels.`);
|
|
244
247
|
}
|
|
245
248
|
references = packIndexPages(level, references, pages);
|
|
246
249
|
}
|
|
@@ -269,7 +272,7 @@ function packLeafPages(
|
|
|
269
272
|
let bytes: Uint8Array;
|
|
270
273
|
do {
|
|
271
274
|
page = {
|
|
272
|
-
kind:
|
|
275
|
+
kind: INVENTORY_PAGE_KIND,
|
|
273
276
|
level: 0,
|
|
274
277
|
index: references.length,
|
|
275
278
|
startIndex: offset,
|
|
@@ -304,7 +307,7 @@ function packIndexPages(
|
|
|
304
307
|
do {
|
|
305
308
|
const selected = children.slice(offset, offset + count);
|
|
306
309
|
page = {
|
|
307
|
-
kind:
|
|
310
|
+
kind: INVENTORY_PAGE_KIND,
|
|
308
311
|
level,
|
|
309
312
|
index: references.length,
|
|
310
313
|
startIndex: selected[0]!.startIndex,
|
|
@@ -339,7 +342,7 @@ function rootCandidate(
|
|
|
339
342
|
if (page.level <= topLevel) pageCountsByLevel[page.level]!++;
|
|
340
343
|
}
|
|
341
344
|
return {
|
|
342
|
-
kind:
|
|
345
|
+
kind: INVENTORY_ROOT_KIND,
|
|
343
346
|
totalCount,
|
|
344
347
|
digest,
|
|
345
348
|
declaredDigest,
|
|
@@ -456,7 +459,7 @@ function decodeRoot(bytes: Uint8Array): InventoryRoot {
|
|
|
456
459
|
value === null ||
|
|
457
460
|
typeof value !== 'object' ||
|
|
458
461
|
!('kind' in value) ||
|
|
459
|
-
value.kind !==
|
|
462
|
+
value.kind !== INVENTORY_ROOT_KIND
|
|
460
463
|
) {
|
|
461
464
|
throw new Error('Invalid inventory root.');
|
|
462
465
|
}
|
|
@@ -469,7 +472,7 @@ function decodePage(bytes: Uint8Array): InventoryPage {
|
|
|
469
472
|
value === null ||
|
|
470
473
|
typeof value !== 'object' ||
|
|
471
474
|
!('kind' in value) ||
|
|
472
|
-
value.kind !==
|
|
475
|
+
value.kind !== INVENTORY_PAGE_KIND ||
|
|
473
476
|
!('entries' in value) ||
|
|
474
477
|
!Array.isArray(value.entries) ||
|
|
475
478
|
!('children' in value) ||
|
|
@@ -524,7 +527,7 @@ function isSha256(value: unknown): value is string {
|
|
|
524
527
|
function sameHash(expected: string, actual: Uint8Array): boolean {
|
|
525
528
|
return (
|
|
526
529
|
isSha256(expected) &&
|
|
527
|
-
actual.byteLength ===
|
|
530
|
+
actual.byteLength === SHA256_DIGEST_BYTES &&
|
|
528
531
|
timingSafeEqual(Buffer.from(expected, 'hex'), Buffer.from(actual))
|
|
529
532
|
);
|
|
530
533
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ZLINK_MAX_IDENTITY_TEXT_BYTES } from '../../contracts/Common/CoreTypes';
|
|
1
2
|
import type {
|
|
2
3
|
ZLinkAuthorityKey,
|
|
3
4
|
ZLinkPlacementObjectKind
|
|
@@ -8,8 +9,10 @@ export function encodeAuthorityKey(
|
|
|
8
9
|
globalId: string
|
|
9
10
|
): ZLinkAuthorityKey {
|
|
10
11
|
const bytes = Buffer.from(globalId);
|
|
11
|
-
if (bytes.byteLength < 1 || bytes.byteLength >
|
|
12
|
-
throw new RangeError(
|
|
12
|
+
if (bytes.byteLength < 1 || bytes.byteLength > ZLINK_MAX_IDENTITY_TEXT_BYTES) {
|
|
13
|
+
throw new RangeError(
|
|
14
|
+
`Authority identity must contain 1..${ZLINK_MAX_IDENTITY_TEXT_BYTES} UTF-8 bytes.`
|
|
15
|
+
);
|
|
13
16
|
}
|
|
14
17
|
const discriminator = kind === 'actor' ? 'a' : 's';
|
|
15
18
|
return {
|
|
@@ -27,7 +30,8 @@ export function decodeAuthorityKey(key: ZLinkAuthorityKey): {
|
|
|
27
30
|
const match = /^zla1:([as]):([1-9][0-9]{0,2}):(.*)$/.exec(key.value);
|
|
28
31
|
if (match === null) throw new TypeError('Authority key is not canonical.');
|
|
29
32
|
const declaredLength = Number(match[2]);
|
|
30
|
-
if (declaredLength >
|
|
33
|
+
if (declaredLength > ZLINK_MAX_IDENTITY_TEXT_BYTES)
|
|
34
|
+
throw new TypeError('Authority key identity exceeds the byte limit.');
|
|
31
35
|
const encoded = match[3]!;
|
|
32
36
|
const bytes: number[] = [];
|
|
33
37
|
for (let index = 0; index < encoded.length;) {
|