@zlink-systems/framework 0.21.0 → 0.22.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/Common/ZLinkMessage.js +5 -5
- package/dist/contracts/Configuration/CodecContentType.js +5 -7
- package/dist/contracts/Configuration/DiagnosticsValidation.js +1 -6
- package/dist/contracts/Configuration/EndpointNotation.js +4 -8
- package/dist/contracts/Configuration/Registration.js +14 -11
- package/dist/contracts/Configuration/RegistrationBuilders.js +32 -25
- package/dist/contracts/Configuration/RegistrationNormalizers.js +25 -26
- package/dist/contracts/Configuration/RegistrationValidators.js +36 -38
- package/dist/contracts/Configuration/SendTimeoutValidation.js +4 -4
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +7 -7
- package/dist/contracts/Handlers/JsonContract.js +23 -11
- package/dist/contracts/Spots/SpotKind.js +16 -8
- package/dist/location-store-integration.js +16 -16
- package/dist/nest-integration.js +17 -11
- package/dist/runtime/abort.js +9 -5
- package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
- package/dist/runtime/actors/actor-authority-publication.js +18 -17
- package/dist/runtime/actors/actor-client.js +83 -63
- package/dist/runtime/actors/actor-context.js +24 -18
- package/dist/runtime/actors/actor-creation.js +4 -3
- package/dist/runtime/actors/actor-handoff.js +89 -92
- package/dist/runtime/actors/actor-local-native-join.js +18 -19
- package/dist/runtime/actors/actor-mailbox.js +1 -1
- package/dist/runtime/actors/actor-message-follow-context.js +24 -21
- package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
- package/dist/runtime/actors/actor-remote-joiner.js +20 -17
- package/dist/runtime/actors/actor-remote-wire.js +6 -7
- package/dist/runtime/actors/actor-runtime-state.js +87 -81
- package/dist/runtime/actors/actor-transfer-registry.js +3 -5
- package/dist/runtime/actors/bound-session-wire.js +14 -9
- package/dist/runtime/actors/deferred-join-accepted-journal.js +158 -124
- package/dist/runtime/actors/index.js +2 -5
- package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
- package/dist/runtime/actors/post-commit-actor-location.js +1 -1
- package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
- package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
- package/dist/runtime/admission.js +2 -6
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
- package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
- package/dist/runtime/backend/mesh-completion-table.js +1 -3
- package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
- package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
- package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
- package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +116 -113
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
- package/dist/runtime/backend/runtime-message.js +3 -3
- package/dist/runtime/backend/runtime-values.d.ts +2 -2
- package/dist/runtime/backend/runtime-values.js +4 -5
- package/dist/runtime/channels/channel-clients.js +27 -24
- package/dist/runtime/channels/channel-dispatch-pipeline.js +10 -18
- package/dist/runtime/channels/channel-dispatch-services.js +7 -4
- package/dist/runtime/channels/channel-dispatchers.js +9 -9
- package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
- package/dist/runtime/channels/channel-envelope.js +83 -47
- package/dist/runtime/channels/channel-outbound-operations.js +8 -8
- package/dist/runtime/channels/channel-receive-loops.js +20 -22
- package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
- package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
- package/dist/runtime/channels/channel-runtime-manager.js +18 -9
- package/dist/runtime/channels/channel-socket-registry.js +126 -123
- package/dist/runtime/channels/channel-transports.js +43 -33
- package/dist/runtime/channels/client-server-location-runtime.js +32 -40
- package/dist/runtime/channels/client-server-service-wire.js +29 -22
- package/dist/runtime/channels/dispatch-error-reporter.js +9 -7
- package/dist/runtime/channels/fanout-location-runtime.js +34 -47
- package/dist/runtime/channels/fanout-service-wire.js +3 -5
- package/dist/runtime/channels/local-spot-route-transport.js +7 -1
- package/dist/runtime/channels/route-member-snapshot.js +3 -3
- package/dist/runtime/channels/source-spot-router.js +6 -2
- package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
- package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
- package/dist/runtime/diagnostics/index.js +38 -10
- package/dist/runtime/diagnostics/message-flow.js +47 -39
- package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
- package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
- package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
- package/dist/runtime/execution/index.js +7 -6
- package/dist/runtime/execution/serial-execution-queue.js +12 -18
- package/dist/runtime/execution/state-lane.js +2 -2
- package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -23
- package/dist/runtime/foundation/event-loop-resources.js +4 -4
- package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +136 -136
- package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
- package/dist/runtime/foundation/runtime-state-projections.js +22 -11
- package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
- package/dist/runtime/foundation/service-discovery-registry.js +35 -33
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
- package/dist/runtime/foundation/service-liveness-registry.js +16 -12
- package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
- package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
- package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
- package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
- package/dist/runtime/foundation/service-stateful-registry.js +24 -23
- package/dist/runtime/foundation/service-stateful-runtime.js +416 -438
- package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
- package/dist/runtime/foundation/service-topology-registry.js +96 -95
- package/dist/runtime/foundation/service-weighted-selection.js +6 -11
- package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
- package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
- package/dist/runtime/framework-errors-internal.js +7 -10
- package/dist/runtime/handlers/handler-instance-scope.js +4 -5
- package/dist/runtime/handlers/index.js +3 -1
- package/dist/runtime/host/actor-packet-relay.js +74 -70
- package/dist/runtime/host/actor-placement-coordinator.js +29 -31
- package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
- package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
- package/dist/runtime/host/actor-transfer-runtime.js +176 -153
- package/dist/runtime/host/application-job-queue.js +18 -22
- package/dist/runtime/host/bound-session-relay.js +3 -1
- package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
- package/dist/runtime/host/host-capacity-status.js +8 -4
- package/dist/runtime/host/index.js +244 -227
- package/dist/runtime/host/instance-activation-authority.js +93 -96
- package/dist/runtime/host/location-runtime-owner.js +16 -14
- package/dist/runtime/host/mesh-router-resolver.js +11 -13
- package/dist/runtime/host/relocation-direct-transfer.js +10 -9
- package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
- package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
- package/dist/runtime/host/remote-bound-session-relay.js +97 -73
- package/dist/runtime/host/route-mesh-runtime.js +64 -69
- package/dist/runtime/host/runtime-shutdown.js +1 -2
- package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
- package/dist/runtime/host/spot-address-transport.js +69 -71
- package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
- package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
- package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
- package/dist/runtime/locations/actor-location-claims.js +26 -20
- package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
- package/dist/runtime/locations/authority-key-codec.js +7 -7
- package/dist/runtime/locations/auto-connect-loop.js +3 -3
- package/dist/runtime/locations/auto-connect-planner.js +25 -19
- package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
- package/dist/runtime/locations/in-memory-authority-store.js +128 -118
- package/dist/runtime/locations/in-memory-location-store.js +195 -168
- package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
- package/dist/runtime/locations/key-codec.js +1 -1
- package/dist/runtime/locations/lease-tracker.js +23 -21
- package/dist/runtime/locations/lifecycle.js +4 -5
- package/dist/runtime/locations/location-store-repository.js +368 -324
- package/dist/runtime/locations/opaque-record-key.js +2 -2
- package/dist/runtime/locations/resolvers.js +73 -82
- package/dist/runtime/locations/runtime.js +68 -63
- package/dist/runtime/locations/spot-location-claims.js +39 -35
- package/dist/runtime/messaging/framework-json-v1.js +7 -7
- package/dist/runtime/messaging/packet-name.js +7 -6
- package/dist/runtime/messaging/payload-codec.js +21 -18
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
- package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
- package/dist/runtime/routing-id.js +3 -5
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
- package/dist/runtime/spots/index.js +208 -219
- package/dist/runtime/spots/spot-activation-registry.js +15 -14
- package/dist/runtime/spots/spot-activation-state.js +17 -15
- package/dist/runtime/spots/spot-activation.js +33 -16
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
- package/dist/runtime/spots/spot-actor-membership.js +1 -3
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +23 -20
- package/dist/runtime/spots/spot-actor-packet-drain.js +12 -10
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
- package/dist/runtime/spots/spot-closing.js +3 -7
- package/dist/runtime/spots/spot-context.js +2 -2
- package/dist/runtime/spots/spot-entry-activation.js +13 -14
- package/dist/runtime/spots/spot-handle.js +6 -3
- package/dist/runtime/spots/spot-handler-registry.js +12 -12
- package/dist/runtime/spots/spot-manager-public.js +5 -6
- package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
- package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
- package/dist/runtime/spots/spot-node-runtime-manager.js +74 -85
- package/dist/runtime/spots/spot-outbound.js +10 -14
- package/dist/runtime/spots/spot-remote-codec.js +22 -26
- package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
- package/dist/runtime/spots/spot-route-packet-dispatch.js +16 -14
- package/dist/runtime/spots/spot-route-replies.js +4 -6
- package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
- package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +1 -2
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
- package/dist/runtime/spots/spot-serial-executor.js +5 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
- package/dist/runtime/spots/spot-subscription-dispatch.js +5 -5
- package/dist/runtime/spots/spot-timer.js +25 -29
- package/dist/runtime/streams/actor-session-binding-registry.js +98 -107
- package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +18 -16
- package/dist/runtime/streams/bound-session-service.js +8 -9
- package/dist/runtime/streams/index.js +20 -19
- package/dist/runtime/streams/managed-stream.js +32 -30
- package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
- package/dist/runtime/streams/protocol.js +29 -18
- package/dist/runtime/streams/session-actor-coordinator.js +34 -37
- package/dist/runtime/streams/session-context.js +30 -28
- package/dist/runtime/streams/session-provider.js +2 -2
- package/dist/runtime/streams/session-serial-executor.js +1 -2
- package/dist/runtime/streams/stream-frame-factory.js +11 -5
- package/dist/runtime/streams/stream-session-runtime.js +70 -66
- package/dist/runtime/workers/index.js +15 -4
- package/package.json +2 -2
- package/src/contracts/Channels/RouteCalls.ts +6 -1
- package/src/contracts/Common/ZLinkMessage.ts +5 -5
- package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
- package/src/contracts/Configuration/Builders.ts +14 -14
- package/src/contracts/Configuration/CodecContentType.ts +8 -10
- package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
- package/src/contracts/Configuration/EndpointNotation.ts +11 -11
- package/src/contracts/Configuration/ObjectRoles.ts +1 -3
- package/src/contracts/Configuration/Registration.ts +46 -17
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
- package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
- package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
- package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
- package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
- package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
- package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
- package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
- package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -6
- package/src/contracts/Errors/index.ts +1 -4
- package/src/contracts/Handlers/Attributes.ts +15 -9
- package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
- package/src/contracts/Handlers/JsonContract.ts +53 -19
- package/src/contracts/Locations/ActorTransfer.ts +1 -5
- package/src/contracts/Locations/Authority.ts +4 -11
- package/src/contracts/Locations/Keys.ts +6 -1
- package/src/contracts/Locations/Options.ts +3 -2
- package/src/contracts/Locations/RelocationStore.ts +1 -4
- package/src/contracts/Locations/Resolvers.ts +5 -5
- package/src/contracts/Locations/RuntimeQuery.ts +6 -2
- package/src/contracts/Locations/Stores.ts +1 -2
- package/src/contracts/Locations/index.ts +2 -8
- package/src/contracts/RouteMesh/Contracts.ts +1 -7
- package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
- package/src/contracts/Spots/Contracts.ts +2 -8
- package/src/contracts/Spots/SpotKind.ts +16 -8
- package/src/contracts/Spots/ZLinkSpot.ts +8 -11
- package/src/contracts/Streams/IZLinkSession.ts +0 -1
- package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
- package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
- package/src/internal.ts +5 -4
- package/src/location-store-integration.ts +24 -16
- package/src/nest-integration.ts +40 -25
- package/src/runtime/abort.ts +10 -4
- package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
- package/src/runtime/actors/actor-authority-publication.ts +92 -77
- package/src/runtime/actors/actor-client.ts +162 -133
- package/src/runtime/actors/actor-context.ts +138 -130
- package/src/runtime/actors/actor-creation.ts +47 -44
- package/src/runtime/actors/actor-execution-context.ts +6 -4
- package/src/runtime/actors/actor-handoff.ts +269 -293
- package/src/runtime/actors/actor-join-deferred-scope.ts +5 -4
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
- package/src/runtime/actors/actor-local-native-join.ts +131 -159
- package/src/runtime/actors/actor-mailbox.ts +16 -19
- package/src/runtime/actors/actor-message-follow-context.ts +46 -36
- package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
- package/src/runtime/actors/actor-remote-joiner.ts +50 -54
- package/src/runtime/actors/actor-remote-wire.ts +9 -13
- package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
- package/src/runtime/actors/actor-runtime-state.ts +127 -124
- package/src/runtime/actors/actor-transfer-registry.ts +9 -14
- package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
- package/src/runtime/actors/bound-session-wire.ts +37 -17
- package/src/runtime/actors/deferred-join-accepted-journal.ts +351 -320
- package/src/runtime/actors/index.ts +43 -86
- package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
- package/src/runtime/actors/post-commit-actor-location.ts +30 -23
- package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
- package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
- package/src/runtime/admission.ts +9 -9
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
- package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
- package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
- package/src/runtime/backend/contracts/index.ts +73 -52
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
- package/src/runtime/backend/mesh-completion-table.ts +6 -9
- package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
- package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
- package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
- package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
- package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +335 -383
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
- package/src/runtime/backend/runtime-message.ts +5 -3
- package/src/runtime/backend/runtime-values.ts +10 -7
- package/src/runtime/channels/channel-autoconnect.ts +1 -4
- package/src/runtime/channels/channel-clients.ts +93 -73
- package/src/runtime/channels/channel-dispatch-pipeline.ts +40 -42
- package/src/runtime/channels/channel-dispatch-services.ts +51 -49
- package/src/runtime/channels/channel-dispatchers.ts +152 -96
- package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
- package/src/runtime/channels/channel-envelope.ts +256 -150
- package/src/runtime/channels/channel-multipart.ts +13 -5
- package/src/runtime/channels/channel-outbound-operations.ts +37 -41
- package/src/runtime/channels/channel-receive-loops.ts +102 -98
- package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
- package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
- package/src/runtime/channels/channel-runtime-manager.ts +63 -37
- package/src/runtime/channels/channel-socket-options.ts +3 -10
- package/src/runtime/channels/channel-socket-registry.ts +331 -273
- package/src/runtime/channels/channel-transports.ts +215 -197
- package/src/runtime/channels/client-server-location-runtime.ts +116 -100
- package/src/runtime/channels/client-server-service-wire.ts +37 -36
- package/src/runtime/channels/dispatch-error-reporter.ts +11 -8
- package/src/runtime/channels/fanout-location-runtime.ts +91 -94
- package/src/runtime/channels/fanout-service-wire.ts +5 -12
- package/src/runtime/channels/handler-filter-scope.ts +1 -4
- package/src/runtime/channels/index.ts +1 -4
- package/src/runtime/channels/local-spot-route-transport.ts +20 -5
- package/src/runtime/channels/route-member-snapshot.ts +11 -5
- package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
- package/src/runtime/channels/source-spot-router.ts +26 -22
- package/src/runtime/channels/spot-direct-envelope.ts +10 -8
- package/src/runtime/channels/spot-node-route-transport.ts +13 -16
- package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
- package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
- package/src/runtime/codecs/index.ts +3 -2
- package/src/runtime/diagnostics/flow-context.ts +12 -3
- package/src/runtime/diagnostics/index.ts +96 -61
- package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
- package/src/runtime/diagnostics/message-flow.ts +95 -76
- package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
- package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
- package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
- package/src/runtime/execution/index.ts +18 -26
- package/src/runtime/execution/serial-execution-queue.ts +31 -40
- package/src/runtime/execution/state-lane.ts +2 -2
- package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -51
- package/src/runtime/foundation/event-loop-resources.ts +8 -4
- package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
- package/src/runtime/foundation/operation-identity.ts +1 -2
- package/src/runtime/foundation/operation-registry.ts +8 -2
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +312 -385
- package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
- package/src/runtime/foundation/runtime-state-projections.ts +24 -23
- package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
- package/src/runtime/foundation/service-discovery-registry.ts +67 -59
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
- package/src/runtime/foundation/service-liveness-registry.ts +18 -13
- package/src/runtime/foundation/service-mailbox.ts +14 -14
- package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
- package/src/runtime/foundation/service-metadata-codec.ts +2 -9
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
- package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
- package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
- package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
- package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +1 -4
- package/src/runtime/foundation/service-stateful-registry.ts +69 -59
- package/src/runtime/foundation/service-stateful-runtime.ts +1174 -1112
- package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
- package/src/runtime/foundation/service-topology-registry.ts +157 -159
- package/src/runtime/foundation/service-weighted-selection.ts +9 -15
- package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
- package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
- package/src/runtime/framework-errors-internal.ts +31 -30
- package/src/runtime/handlers/handler-instance-scope.ts +18 -29
- package/src/runtime/handlers/index.ts +18 -8
- package/src/runtime/host/actor-packet-relay.ts +290 -261
- package/src/runtime/host/actor-placement-coordinator.ts +165 -150
- package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
- package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
- package/src/runtime/host/actor-transfer-runtime.ts +391 -395
- package/src/runtime/host/application-job-queue.ts +32 -48
- package/src/runtime/host/bound-session-relay.ts +7 -9
- package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
- package/src/runtime/host/host-capacity-status.ts +10 -9
- package/src/runtime/host/index.ts +861 -789
- package/src/runtime/host/instance-activation-authority.ts +125 -143
- package/src/runtime/host/location-runtime-owner.ts +38 -26
- package/src/runtime/host/mesh-router-resolver.ts +30 -23
- package/src/runtime/host/relocation-direct-transfer.ts +15 -15
- package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
- package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
- package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
- package/src/runtime/host/remote-bound-session-relay.ts +274 -247
- package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
- package/src/runtime/host/route-mesh-runtime.ts +227 -181
- package/src/runtime/host/runtime-shutdown.ts +4 -3
- package/src/runtime/host/service-relocation-control.ts +14 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
- package/src/runtime/host/spot-address-transport.ts +284 -237
- package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
- package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
- package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
- package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
- package/src/runtime/locations/actor-location-claims.ts +61 -49
- package/src/runtime/locations/actor-session-route-claims.ts +1 -4
- package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
- package/src/runtime/locations/authority-key-codec.ts +13 -10
- package/src/runtime/locations/auto-connect-loop.ts +14 -11
- package/src/runtime/locations/auto-connect-planner.ts +42 -31
- package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
- package/src/runtime/locations/canonical-codec.ts +3 -1
- package/src/runtime/locations/creation-operation-id.ts +4 -3
- package/src/runtime/locations/domain-store-contract.ts +13 -7
- package/src/runtime/locations/in-memory-authority-store.ts +232 -199
- package/src/runtime/locations/in-memory-location-store.ts +432 -250
- package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
- package/src/runtime/locations/internal-store-contracts.ts +95 -38
- package/src/runtime/locations/key-codec.ts +3 -4
- package/src/runtime/locations/lease-tracker.ts +36 -27
- package/src/runtime/locations/lifecycle-runtime.ts +15 -3
- package/src/runtime/locations/lifecycle.ts +33 -28
- package/src/runtime/locations/location-store-repository.ts +1329 -1185
- package/src/runtime/locations/opaque-record-key.ts +4 -9
- package/src/runtime/locations/resolvers.ts +201 -178
- package/src/runtime/locations/runtime.ts +251 -159
- package/src/runtime/locations/spot-location-claims.ts +110 -112
- package/src/runtime/messaging/creation-payload-codec.ts +4 -1
- package/src/runtime/messaging/framework-json-v1.ts +34 -15
- package/src/runtime/messaging/packet-name.ts +8 -6
- package/src/runtime/messaging/payload-codec.ts +70 -50
- package/src/runtime/messaging/submission-result.ts +6 -9
- package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/routing-id.ts +10 -7
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
- package/src/runtime/spots/index.ts +593 -563
- package/src/runtime/spots/spot-activation-registry.ts +38 -34
- package/src/runtime/spots/spot-activation-state.ts +43 -51
- package/src/runtime/spots/spot-activation.ts +179 -116
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
- package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
- package/src/runtime/spots/spot-actor-membership.ts +25 -27
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +184 -153
- package/src/runtime/spots/spot-actor-packet-drain.ts +54 -42
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
- package/src/runtime/spots/spot-closing.ts +11 -12
- package/src/runtime/spots/spot-context.ts +46 -26
- package/src/runtime/spots/spot-entry-activation.ts +84 -65
- package/src/runtime/spots/spot-handle.ts +17 -15
- package/src/runtime/spots/spot-handler-registry.ts +44 -31
- package/src/runtime/spots/spot-location-claim.ts +5 -4
- package/src/runtime/spots/spot-manager-public.ts +62 -82
- package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
- package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
- package/src/runtime/spots/spot-node-runtime-manager.ts +230 -221
- package/src/runtime/spots/spot-outbound.ts +47 -59
- package/src/runtime/spots/spot-publisher-transport.ts +5 -4
- package/src/runtime/spots/spot-remote-codec.ts +66 -65
- package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
- package/src/runtime/spots/spot-route-packet-dispatch.ts +128 -95
- package/src/runtime/spots/spot-route-replies.ts +23 -24
- package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
- package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
- package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +11 -17
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
- package/src/runtime/spots/spot-routing-internal.ts +1 -4
- package/src/runtime/spots/spot-runtime-ports.ts +5 -5
- package/src/runtime/spots/spot-serial-executor.ts +5 -9
- package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
- package/src/runtime/spots/spot-subscription-dispatch.ts +56 -46
- package/src/runtime/spots/spot-timer.ts +98 -91
- package/src/runtime/streams/actor-session-binding-registry.ts +277 -235
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +7 -4
- package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
- package/src/runtime/streams/bound-actor-relay-sender.ts +53 -51
- package/src/runtime/streams/bound-session-response-target.ts +29 -8
- package/src/runtime/streams/bound-session-service.ts +39 -39
- package/src/runtime/streams/index.ts +176 -100
- package/src/runtime/streams/managed-stream.ts +98 -87
- package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
- package/src/runtime/streams/protocol.ts +73 -43
- package/src/runtime/streams/session-actor-coordinator.ts +97 -89
- package/src/runtime/streams/session-calls.ts +2 -8
- package/src/runtime/streams/session-context.ts +66 -48
- package/src/runtime/streams/session-provider.ts +5 -7
- package/src/runtime/streams/session-serial-executor.ts +7 -6
- package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
- package/src/runtime/streams/stream-frame-factory.ts +55 -38
- package/src/runtime/streams/stream-session-runtime.ts +268 -210
- package/src/runtime/workers/index.ts +68 -29
|
@@ -60,7 +60,11 @@ export function encodeNodeRequestHeader(correlation: bigint): Buffer {
|
|
|
60
60
|
|
|
61
61
|
export function decodeNodeRequestHeader(frame: Uint8Array): bigint {
|
|
62
62
|
const header = decodeHeader(frame);
|
|
63
|
-
if (
|
|
63
|
+
if (
|
|
64
|
+
header.command !== M6aServiceWireCommand.nodeRequest ||
|
|
65
|
+
header.flags !== 0 ||
|
|
66
|
+
frame.byteLength !== 13
|
|
67
|
+
) {
|
|
64
68
|
fail('Invalid nodeRequest header.');
|
|
65
69
|
}
|
|
66
70
|
return readNonZeroU64(asBuffer(frame), PREFIX_SIZE, 'correlation');
|
|
@@ -88,9 +92,10 @@ export function encodeChannelRequestHeader(correlation: bigint, channelName: str
|
|
|
88
92
|
);
|
|
89
93
|
}
|
|
90
94
|
|
|
91
|
-
export function decodeChannelRequestHeader(
|
|
92
|
-
|
|
93
|
-
|
|
95
|
+
export function decodeChannelRequestHeader(frame: Uint8Array): {
|
|
96
|
+
readonly correlation: bigint;
|
|
97
|
+
readonly channelName: string;
|
|
98
|
+
} {
|
|
94
99
|
const header = decodeHeader(frame);
|
|
95
100
|
if (header.command !== M6aServiceWireCommand.channelRequest || header.flags !== 0) {
|
|
96
101
|
fail('Invalid channelRequest header.');
|
|
@@ -126,7 +131,11 @@ export function encodeReplyHeader(
|
|
|
126
131
|
|
|
127
132
|
export function decodeReplyHeader(frame: Uint8Array): ServiceReplyHeader {
|
|
128
133
|
const header = decodeHeader(frame);
|
|
129
|
-
if (
|
|
134
|
+
if (
|
|
135
|
+
header.command !== M6aServiceWireCommand.reply ||
|
|
136
|
+
header.flags !== 0 ||
|
|
137
|
+
frame.byteLength < 21
|
|
138
|
+
) {
|
|
130
139
|
fail('Invalid reply header.');
|
|
131
140
|
}
|
|
132
141
|
const bytes = asBuffer(frame);
|
|
@@ -147,10 +156,8 @@ export function encodeApplicationPayload(payload: ServiceApplicationPayload): Bu
|
|
|
147
156
|
const packetName = encodeText8(payload.packetName, 'packetName');
|
|
148
157
|
const contentType = encodeText8(payload.contentType, 'contentType');
|
|
149
158
|
if (payload.payload.byteLength > MAX_U32) fail('Application payload exceeds u32.');
|
|
150
|
-
const bodyLength =
|
|
151
|
-
+ contentType.byteLength
|
|
152
|
-
+ 4
|
|
153
|
-
+ payload.payload.byteLength;
|
|
159
|
+
const bodyLength =
|
|
160
|
+
packetName.byteLength + contentType.byteLength + 4 + payload.payload.byteLength;
|
|
154
161
|
if (bodyLength > MAX_U32) fail('Application payload body exceeds u32.');
|
|
155
162
|
const result = Buffer.alloc(5 + bodyLength);
|
|
156
163
|
result[0] = 1;
|
|
@@ -160,11 +167,10 @@ export function encodeApplicationPayload(payload: ServiceApplicationPayload): Bu
|
|
|
160
167
|
offset += contentType.copy(result, offset);
|
|
161
168
|
result.writeUInt32BE(payload.payload.byteLength, offset);
|
|
162
169
|
offset += 4;
|
|
163
|
-
Buffer.from(
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
).copy(result, offset);
|
|
170
|
+
Buffer.from(payload.payload.buffer, payload.payload.byteOffset, payload.payload.byteLength).copy(
|
|
171
|
+
result,
|
|
172
|
+
offset
|
|
173
|
+
);
|
|
168
174
|
return result;
|
|
169
175
|
}
|
|
170
176
|
|
|
@@ -188,10 +194,7 @@ export function encodeMultipartApplicationPayload(
|
|
|
188
194
|
multipartLength += 4 + part.byteLength;
|
|
189
195
|
if (multipartLength > MAX_U32) fail('Multipart payload exceeds u32.');
|
|
190
196
|
}
|
|
191
|
-
const bodyLength = packetNameBytes.byteLength
|
|
192
|
-
+ contentTypeBytes.byteLength
|
|
193
|
-
+ 4
|
|
194
|
-
+ multipartLength;
|
|
197
|
+
const bodyLength = packetNameBytes.byteLength + contentTypeBytes.byteLength + 4 + multipartLength;
|
|
195
198
|
if (bodyLength > MAX_U32) fail('Application payload body exceeds u32.');
|
|
196
199
|
const result = Buffer.alloc(5 + bodyLength);
|
|
197
200
|
result[0] = 1;
|
|
@@ -277,10 +280,13 @@ export function encodeRouteMeshAdmission(
|
|
|
277
280
|
const extension = concat(
|
|
278
281
|
tlv(1, Buffer.of(stateToWire(descriptor.state))),
|
|
279
282
|
tlv(2, encodeU64(descriptor.applicationVersion)),
|
|
280
|
-
tlv(
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
283
|
+
tlv(
|
|
284
|
+
6,
|
|
285
|
+
concat(
|
|
286
|
+
encodeU16(descriptor.protocolCapabilities.length),
|
|
287
|
+
...descriptor.protocolCapabilities.map((value) => encodeText8(value, 'protocolCapability'))
|
|
288
|
+
)
|
|
289
|
+
),
|
|
284
290
|
tlv(7, Buffer.of(roleToWire(descriptor.objectRole))),
|
|
285
291
|
tlv(8, encodeU32(descriptor.placementWeight)),
|
|
286
292
|
tlv(9, encodeU32(descriptor.activeCapacityLimit)),
|
|
@@ -302,7 +308,8 @@ export function decodeRouteMeshAdmission(
|
|
|
302
308
|
): ServiceNodeDescriptor {
|
|
303
309
|
validateAdmissionCommand(expectedCommand);
|
|
304
310
|
const header = decodeHeader(frame);
|
|
305
|
-
if (header.command !== expectedCommand || header.flags !== 0)
|
|
311
|
+
if (header.command !== expectedCommand || header.flags !== 0)
|
|
312
|
+
fail('Unexpected admission header.');
|
|
306
313
|
const reader = new Reader(frame, PREFIX_SIZE);
|
|
307
314
|
if (reader.u8('topologyKind') !== 1) fail('Admission is not RouteMesh topology.');
|
|
308
315
|
const routeLength = reader.u32('routeLength');
|
|
@@ -370,11 +377,11 @@ export function decodeRouteMeshAdmission(
|
|
|
370
377
|
}
|
|
371
378
|
reader.end();
|
|
372
379
|
if (
|
|
373
|
-
state === undefined
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
380
|
+
state === undefined ||
|
|
381
|
+
applicationVersion === undefined ||
|
|
382
|
+
protocolCapabilities === undefined ||
|
|
383
|
+
objectRole === undefined ||
|
|
384
|
+
![8, 9, 10, 11, 12].every((id) => capacities.has(id))
|
|
378
385
|
) {
|
|
379
386
|
fail('Descriptor extension omits a required field.');
|
|
380
387
|
}
|
|
@@ -408,7 +415,11 @@ export function encodeReject(reason: number): Buffer {
|
|
|
408
415
|
|
|
409
416
|
export function decodeReject(frame: Uint8Array): number {
|
|
410
417
|
const header = decodeHeader(frame);
|
|
411
|
-
if (
|
|
418
|
+
if (
|
|
419
|
+
header.command !== M6aServiceWireCommand.reject ||
|
|
420
|
+
header.flags !== 0 ||
|
|
421
|
+
frame.byteLength !== 9
|
|
422
|
+
) {
|
|
412
423
|
fail('Invalid reject record.');
|
|
413
424
|
}
|
|
414
425
|
const reason = asBuffer(frame).readUInt32BE(PREFIX_SIZE);
|
|
@@ -476,7 +487,7 @@ function tlv(id: number, value: Buffer): Buffer {
|
|
|
476
487
|
}
|
|
477
488
|
|
|
478
489
|
function concat(...parts: readonly Uint8Array[]): Buffer {
|
|
479
|
-
return Buffer.concat(parts.map(part => Buffer.from(part)));
|
|
490
|
+
return Buffer.concat(parts.map((part) => Buffer.from(part)));
|
|
480
491
|
}
|
|
481
492
|
|
|
482
493
|
function readNonZeroU64(bytes: Buffer, offset: number, field: string): bigint {
|
|
@@ -491,9 +502,9 @@ function asBuffer(value: Uint8Array): Buffer {
|
|
|
491
502
|
|
|
492
503
|
function validateAdmissionCommand(command: number): void {
|
|
493
504
|
if (
|
|
494
|
-
command !== M6aServiceWireCommand.hello
|
|
495
|
-
|
|
496
|
-
|
|
505
|
+
command !== M6aServiceWireCommand.hello &&
|
|
506
|
+
command !== M6aServiceWireCommand.admit &&
|
|
507
|
+
command !== M6aServiceWireCommand.update
|
|
497
508
|
) {
|
|
498
509
|
fail('Command is not an admission record.');
|
|
499
510
|
}
|
|
@@ -507,9 +518,9 @@ function validateReplyFields(correlation: bigint, terminal: number, failure: num
|
|
|
507
518
|
// generated predicate replaces the old broad-category check, which
|
|
508
519
|
// accepted any typed pairing and wrongly rejected defined codes 33/34.
|
|
509
520
|
if (
|
|
510
|
-
correlation <= 0n
|
|
511
|
-
|
|
512
|
-
|
|
521
|
+
correlation <= 0n ||
|
|
522
|
+
correlation > MAX_U64 ||
|
|
523
|
+
!isValidServiceWireTerminalFailure(terminal, failure)
|
|
513
524
|
) {
|
|
514
525
|
fail('Invalid reply terminal fields.');
|
|
515
526
|
}
|
|
@@ -520,23 +531,34 @@ function stateToWire(value: ServiceNodeState): number {
|
|
|
520
531
|
// is a host-internal transition and has the same remote admission meaning
|
|
521
532
|
// as `draining`; the service wire does not expose a separate retiring value.
|
|
522
533
|
switch (value) {
|
|
523
|
-
case 'preparing':
|
|
524
|
-
|
|
534
|
+
case 'preparing':
|
|
535
|
+
return 0;
|
|
536
|
+
case 'serving':
|
|
537
|
+
return 1;
|
|
525
538
|
case 'retiring':
|
|
526
|
-
case 'draining':
|
|
527
|
-
|
|
528
|
-
case '
|
|
539
|
+
case 'draining':
|
|
540
|
+
return 2;
|
|
541
|
+
case 'stopped':
|
|
542
|
+
return 3;
|
|
543
|
+
case 'error':
|
|
544
|
+
return 4;
|
|
529
545
|
}
|
|
530
546
|
}
|
|
531
547
|
|
|
532
548
|
function stateFromWire(value: number): ServiceNodeState {
|
|
533
549
|
switch (value) {
|
|
534
|
-
case 0:
|
|
535
|
-
|
|
536
|
-
case
|
|
537
|
-
|
|
538
|
-
case
|
|
539
|
-
|
|
550
|
+
case 0:
|
|
551
|
+
return 'preparing';
|
|
552
|
+
case 1:
|
|
553
|
+
return 'serving';
|
|
554
|
+
case 2:
|
|
555
|
+
return 'draining';
|
|
556
|
+
case 3:
|
|
557
|
+
return 'stopped';
|
|
558
|
+
case 4:
|
|
559
|
+
return 'error';
|
|
560
|
+
default:
|
|
561
|
+
fail('Invalid runtime state.');
|
|
540
562
|
}
|
|
541
563
|
}
|
|
542
564
|
|
|
@@ -51,7 +51,9 @@ export enum ZLinkFrameworkInternalErrorKind {
|
|
|
51
51
|
ActorRouteUnavailable = 'actorRouteUnavailable'
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
const INTERNAL_TO_PUBLIC: Readonly<
|
|
54
|
+
const INTERNAL_TO_PUBLIC: Readonly<
|
|
55
|
+
Record<ZLinkFrameworkInternalErrorKind, ZLinkFrameworkErrorKind>
|
|
56
|
+
> = Object.freeze({
|
|
55
57
|
[ZLinkFrameworkInternalErrorKind.ActorRouteNotFound]: ZLinkFrameworkErrorKind.NotFound,
|
|
56
58
|
[ZLinkFrameworkInternalErrorKind.ActorCreateFailed]: ZLinkFrameworkErrorKind.InternalFailure,
|
|
57
59
|
[ZLinkFrameworkInternalErrorKind.ActorAlreadyExists]: ZLinkFrameworkErrorKind.AlreadyExists,
|
|
@@ -74,7 +76,8 @@ const INTERNAL_TO_PUBLIC: Readonly<Record<ZLinkFrameworkInternalErrorKind, ZLink
|
|
|
74
76
|
[ZLinkFrameworkInternalErrorKind.WorkerFailed]: ZLinkFrameworkErrorKind.InternalFailure,
|
|
75
77
|
[ZLinkFrameworkInternalErrorKind.ActorLocationStale]: ZLinkFrameworkErrorKind.Unavailable,
|
|
76
78
|
[ZLinkFrameworkInternalErrorKind.ActorCreateRejected]: ZLinkFrameworkErrorKind.Rejected,
|
|
77
|
-
[ZLinkFrameworkInternalErrorKind.ObjectClientNotConfigured]:
|
|
79
|
+
[ZLinkFrameworkInternalErrorKind.ObjectClientNotConfigured]:
|
|
80
|
+
ZLinkFrameworkErrorKind.NotConfigured,
|
|
78
81
|
[ZLinkFrameworkInternalErrorKind.MeshSelectionRequired]: ZLinkFrameworkErrorKind.NotConfigured,
|
|
79
82
|
[ZLinkFrameworkInternalErrorKind.MeshNotFound]: ZLinkFrameworkErrorKind.NotFound,
|
|
80
83
|
[ZLinkFrameworkInternalErrorKind.InvalidConfiguration]: ZLinkFrameworkErrorKind.NotConfigured,
|
|
@@ -90,13 +93,16 @@ const INTERNAL_TO_PUBLIC: Readonly<Record<ZLinkFrameworkInternalErrorKind, ZLink
|
|
|
90
93
|
[ZLinkFrameworkInternalErrorKind.SpotIdConflict]: ZLinkFrameworkErrorKind.AlreadyExists,
|
|
91
94
|
[ZLinkFrameworkInternalErrorKind.RuntimeShutdown]: ZLinkFrameworkErrorKind.ShuttingDown,
|
|
92
95
|
[ZLinkFrameworkInternalErrorKind.RelocationDisabled]: ZLinkFrameworkErrorKind.Rejected,
|
|
93
|
-
[ZLinkFrameworkInternalErrorKind.RelocationTargetUnavailable]:
|
|
96
|
+
[ZLinkFrameworkInternalErrorKind.RelocationTargetUnavailable]:
|
|
97
|
+
ZLinkFrameworkErrorKind.Unavailable,
|
|
94
98
|
[ZLinkFrameworkInternalErrorKind.RelocationFailed]: ZLinkFrameworkErrorKind.InternalFailure,
|
|
95
99
|
[ZLinkFrameworkInternalErrorKind.InvalidOperation]: ZLinkFrameworkErrorKind.InvalidOperation,
|
|
96
100
|
[ZLinkFrameworkInternalErrorKind.ActorRouteUnavailable]: ZLinkFrameworkErrorKind.Unavailable
|
|
97
101
|
});
|
|
98
102
|
|
|
99
|
-
export const ZLINK_FRAMEWORK_INTERNAL_ERROR_KIND_VALUES: Readonly<
|
|
103
|
+
export const ZLINK_FRAMEWORK_INTERNAL_ERROR_KIND_VALUES: Readonly<
|
|
104
|
+
Record<ZLinkFrameworkInternalErrorKind, number>
|
|
105
|
+
> = Object.freeze({
|
|
100
106
|
[ZLinkFrameworkInternalErrorKind.ActorRouteNotFound]: 0,
|
|
101
107
|
[ZLinkFrameworkInternalErrorKind.ActorCreateFailed]: 1,
|
|
102
108
|
[ZLinkFrameworkInternalErrorKind.ActorAlreadyExists]: 2,
|
|
@@ -141,20 +147,22 @@ export const ZLINK_FRAMEWORK_INTERNAL_ERROR_KIND_VALUES: Readonly<Record<ZLinkFr
|
|
|
141
147
|
[ZLinkFrameworkInternalErrorKind.ActorRouteUnavailable]: 41
|
|
142
148
|
});
|
|
143
149
|
|
|
144
|
-
const INTERNAL_KIND_BY_WIRE_FAILURE_CODE: ReadonlyMap<number, ZLinkFrameworkInternalErrorKind> =
|
|
145
|
-
|
|
146
|
-
.map(
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
150
|
+
const INTERNAL_KIND_BY_WIRE_FAILURE_CODE: ReadonlyMap<number, ZLinkFrameworkInternalErrorKind> =
|
|
151
|
+
new Map<number, ZLinkFrameworkInternalErrorKind>([
|
|
152
|
+
...Object.entries(ZLINK_FRAMEWORK_INTERNAL_ERROR_KIND_VALUES).map(
|
|
153
|
+
([kind, code]) => [code + 1, kind as ZLinkFrameworkInternalErrorKind] as const
|
|
154
|
+
),
|
|
155
|
+
// Spec 32-framework-error-model:99-103 — a workerQueueFull(18) received in a
|
|
156
|
+
// remote reply is the target's queue state and maps to Unavailable.
|
|
157
|
+
[18, ZLinkFrameworkInternalErrorKind.RouteNotConnected]
|
|
158
|
+
]);
|
|
151
159
|
|
|
152
160
|
const WIRE_TERMINAL_RESULT_BY_FAILURE_CODE: ReadonlyMap<number, number> = new Map([
|
|
153
|
-
...[1, 6, 8, 9, 10, 11, 14].map(code => [code, 102] as const),
|
|
154
|
-
...[2, 5, 13, 17, 19, 20, 35, 42].map(code => [code, 105] as const),
|
|
155
|
-
...[3, 4, 7, 21, 33, 34].map(code => [code, 107] as const),
|
|
156
|
-
...[12, 16].map(code => [code, 104] as const),
|
|
157
|
-
...[15, 18, 22].map(code => [code, 106] as const)
|
|
161
|
+
...[1, 6, 8, 9, 10, 11, 14].map((code) => [code, 102] as const),
|
|
162
|
+
...[2, 5, 13, 17, 19, 20, 35, 42].map((code) => [code, 105] as const),
|
|
163
|
+
...[3, 4, 7, 21, 33, 34].map((code) => [code, 107] as const),
|
|
164
|
+
...[12, 16].map((code) => [code, 104] as const),
|
|
165
|
+
...[15, 18, 22].map((code) => [code, 106] as const)
|
|
158
166
|
]);
|
|
159
167
|
|
|
160
168
|
const INTERNAL_KIND = new WeakMap<ZLinkFrameworkException, ZLinkFrameworkInternalErrorKind>();
|
|
@@ -249,10 +257,7 @@ export function wireReplyFailureException(
|
|
|
249
257
|
message
|
|
250
258
|
);
|
|
251
259
|
}
|
|
252
|
-
return new ZLinkFrameworkException(
|
|
253
|
-
requestResultToPublicErrorKind(terminalResult),
|
|
254
|
-
message
|
|
255
|
-
);
|
|
260
|
+
return new ZLinkFrameworkException(requestResultToPublicErrorKind(terminalResult), message);
|
|
256
261
|
}
|
|
257
262
|
|
|
258
263
|
/**
|
|
@@ -280,9 +285,10 @@ export function internalFrameworkErrorCode(error: ZLinkFrameworkException): numb
|
|
|
280
285
|
}
|
|
281
286
|
|
|
282
287
|
/** Produces the canonical stateful wire terminal without leaking internal kinds. */
|
|
283
|
-
export function internalFrameworkWireReply(
|
|
284
|
-
|
|
285
|
-
|
|
288
|
+
export function internalFrameworkWireReply(error: ZLinkFrameworkException): {
|
|
289
|
+
readonly terminalResult: number;
|
|
290
|
+
readonly failureCode: number;
|
|
291
|
+
} {
|
|
286
292
|
const kind = INTERNAL_KIND.get(error);
|
|
287
293
|
if (kind === ZLinkFrameworkInternalErrorKind.DeadlineExceeded) {
|
|
288
294
|
return { terminalResult: 101, failureCode: 0 };
|
|
@@ -321,15 +327,10 @@ export function internalFrameworkErrorKindFromWireReply(
|
|
|
321
327
|
return expectedTerminalResult === terminalResult ? kind : undefined;
|
|
322
328
|
}
|
|
323
329
|
|
|
324
|
-
const BOUNDARY_WIRE_TERMINAL_RESULTS = new Set([
|
|
325
|
-
101, 103, 108, 109, 110, 111, 112, 113
|
|
326
|
-
]);
|
|
330
|
+
const BOUNDARY_WIRE_TERMINAL_RESULTS = new Set([101, 103, 108, 109, 110, 111, 112, 113]);
|
|
327
331
|
|
|
328
332
|
/** Checks the terminal and failure-code pair before a transport maps it. */
|
|
329
|
-
export function isCanonicalWireReplyTerminal(
|
|
330
|
-
terminalResult: number,
|
|
331
|
-
failureCode: number
|
|
332
|
-
): boolean {
|
|
333
|
+
export function isCanonicalWireReplyTerminal(terminalResult: number, failureCode: number): boolean {
|
|
333
334
|
if (terminalResult === 0) return failureCode === 0;
|
|
334
335
|
if (BOUNDARY_WIRE_TERMINAL_RESULTS.has(terminalResult)) return failureCode === 0;
|
|
335
336
|
return internalFrameworkErrorKindFromWireReply(terminalResult, failureCode) !== undefined;
|
|
@@ -38,12 +38,9 @@ interface LifecycleScopeDisposal {
|
|
|
38
38
|
readonly idle: Promise<void> | undefined;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
const HANDLER_SCOPE_FACTORY = Symbol.for(
|
|
42
|
-
'@zlink-systems/framework.handler-instance-scope-factory'
|
|
43
|
-
);
|
|
41
|
+
const HANDLER_SCOPE_FACTORY = Symbol.for('@zlink-systems/framework.handler-instance-scope-factory');
|
|
44
42
|
const activeHandlerScope = new AsyncLocalStorage<ActiveHandlerScope>();
|
|
45
|
-
const activeLifecycleScope =
|
|
46
|
-
new AsyncLocalStorage<LifecycleHandlerInstanceScope>();
|
|
43
|
+
const activeLifecycleScope = new AsyncLocalStorage<LifecycleHandlerInstanceScope>();
|
|
47
44
|
const detachedStateLaneResource = new AsyncResource('zlink:handler-instance-scope');
|
|
48
45
|
const dispatchScopes = new WeakMap<object, ZLinkHandlerInstanceScope>();
|
|
49
46
|
const lifecycleScopes = new WeakMap<object, Promise<LifecycleHandlerInstanceScope>>();
|
|
@@ -69,10 +66,7 @@ export async function runInHandlerInstanceScope<T>(
|
|
|
69
66
|
dispatchScopes.set(context, scope);
|
|
70
67
|
}
|
|
71
68
|
try {
|
|
72
|
-
return await activeHandlerScope.run(
|
|
73
|
-
{ scope },
|
|
74
|
-
() => callback(scope)
|
|
75
|
-
);
|
|
69
|
+
return await activeHandlerScope.run({ scope }, () => callback(scope));
|
|
76
70
|
} finally {
|
|
77
71
|
if (context !== undefined && dispatchScopes.get(context) === scope) {
|
|
78
72
|
dispatchScopes.delete(context);
|
|
@@ -89,9 +83,7 @@ export async function resolveLifecycleHandler<T>(
|
|
|
89
83
|
let scope = lifecycleScopes.get(owner);
|
|
90
84
|
if (scope === undefined) {
|
|
91
85
|
scope = Promise.resolve(
|
|
92
|
-
new LifecycleHandlerInstanceScope(
|
|
93
|
-
createHandlerInstanceScope(providerResolver)
|
|
94
|
-
)
|
|
86
|
+
new LifecycleHandlerInstanceScope(createHandlerInstanceScope(providerResolver))
|
|
95
87
|
);
|
|
96
88
|
lifecycleScopes.set(owner, scope);
|
|
97
89
|
}
|
|
@@ -107,9 +99,7 @@ export async function runWithLifecycleHandler<THandler, TResult>(
|
|
|
107
99
|
let scope = lifecycleScopes.get(owner);
|
|
108
100
|
if (scope === undefined) {
|
|
109
101
|
scope = Promise.resolve(
|
|
110
|
-
new LifecycleHandlerInstanceScope(
|
|
111
|
-
createHandlerInstanceScope(providerResolver)
|
|
112
|
-
)
|
|
102
|
+
new LifecycleHandlerInstanceScope(createHandlerInstanceScope(providerResolver))
|
|
113
103
|
);
|
|
114
104
|
lifecycleScopes.set(owner, scope);
|
|
115
105
|
}
|
|
@@ -129,21 +119,22 @@ function createHandlerInstanceScope(
|
|
|
129
119
|
providerResolver?: ZLinkProviderResolver,
|
|
130
120
|
context?: ZLinkMessageContext
|
|
131
121
|
): ZLinkHandlerInstanceScope {
|
|
132
|
-
const factory =
|
|
133
|
-
|
|
134
|
-
|
|
122
|
+
const factory =
|
|
123
|
+
providerResolver === undefined
|
|
124
|
+
? undefined
|
|
125
|
+
: (providerResolver as unknown as Record<PropertyKey, unknown>)[HANDLER_SCOPE_FACTORY];
|
|
135
126
|
if (isHandlerInstanceScopeFactory(factory)) {
|
|
136
127
|
return factory.create(context);
|
|
137
128
|
}
|
|
138
129
|
return new DefaultHandlerInstanceScope(providerResolver);
|
|
139
130
|
}
|
|
140
131
|
|
|
141
|
-
function isHandlerInstanceScopeFactory(
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
132
|
+
function isHandlerInstanceScopeFactory(value: unknown): value is ZLinkHandlerInstanceScopeFactory {
|
|
133
|
+
return (
|
|
134
|
+
typeof value === 'object' &&
|
|
135
|
+
value !== null &&
|
|
136
|
+
typeof (value as { create?: unknown }).create === 'function'
|
|
137
|
+
);
|
|
147
138
|
}
|
|
148
139
|
|
|
149
140
|
class DefaultHandlerInstanceScope implements ZLinkHandlerInstanceScope {
|
|
@@ -205,8 +196,7 @@ class DefaultHandlerInstanceScope implements ZLinkHandlerInstanceScope {
|
|
|
205
196
|
private async activate<T>(type: Type<T>, activation: Deferred<unknown>): Promise<void> {
|
|
206
197
|
let instance: T;
|
|
207
198
|
try {
|
|
208
|
-
instance = await this.providerResolver?.create?.(type)
|
|
209
|
-
?? new type();
|
|
199
|
+
instance = (await this.providerResolver?.create?.(type)) ?? new type();
|
|
210
200
|
} catch (error) {
|
|
211
201
|
activation.reject(error);
|
|
212
202
|
return;
|
|
@@ -258,9 +248,8 @@ class LifecycleHandlerInstanceScope {
|
|
|
258
248
|
): Promise<TResult> {
|
|
259
249
|
await this.lane.run(() => this.beginInvocationCore());
|
|
260
250
|
try {
|
|
261
|
-
return await activeLifecycleScope.run(
|
|
262
|
-
this
|
|
263
|
-
async () => callback(await this.instances.resolve(type))
|
|
251
|
+
return await activeLifecycleScope.run(this, async () =>
|
|
252
|
+
callback(await this.instances.resolve(type))
|
|
264
253
|
);
|
|
265
254
|
} finally {
|
|
266
255
|
await this.lane.run(() => this.completeInvocationCore());
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
ZLinkFrameworkInternalErrorKind,
|
|
3
|
+
createInternalFrameworkException
|
|
4
|
+
} from '../framework-errors-internal';
|
|
2
5
|
import {
|
|
3
6
|
type Type,
|
|
4
7
|
type ZLinkHandlerFilterNext,
|
|
5
8
|
type ZLinkHandlerFilter,
|
|
6
|
-
type ZLinkHandlerFilterContext
|
|
9
|
+
type ZLinkHandlerFilterContext
|
|
7
10
|
} from '../../contracts';
|
|
8
11
|
import {
|
|
9
12
|
readZLinkDecoratorMetadata,
|
|
@@ -20,7 +23,9 @@ export interface ZLinkHandlerExposurePolicy {
|
|
|
20
23
|
readonly explicitHandlers?: readonly Type[];
|
|
21
24
|
}
|
|
22
25
|
|
|
23
|
-
export function scanZLinkHandlerTypes(
|
|
26
|
+
export function scanZLinkHandlerTypes(
|
|
27
|
+
handlerTypes: readonly Type[]
|
|
28
|
+
): readonly ZLinkHandlerDescriptor[] {
|
|
24
29
|
return handlerTypes.flatMap((handlerType) =>
|
|
25
30
|
readZLinkDecoratorMetadata(handlerType)
|
|
26
31
|
.filter((metadata) => metadata.kind !== 'handlerGroup' && metadata.kind !== 'packet')
|
|
@@ -43,7 +48,10 @@ export function exposeZLinkHandlers(
|
|
|
43
48
|
return false;
|
|
44
49
|
}
|
|
45
50
|
return readZLinkDecoratorMetadata(descriptor.handlerType).some(
|
|
46
|
-
(metadata) =>
|
|
51
|
+
(metadata) =>
|
|
52
|
+
metadata.kind === 'handlerGroup' &&
|
|
53
|
+
metadata.groupName !== undefined &&
|
|
54
|
+
groups.has(metadata.groupName)
|
|
47
55
|
);
|
|
48
56
|
});
|
|
49
57
|
}
|
|
@@ -82,10 +90,12 @@ function invokeAtMostOnce(next: ZLinkHandlerFilterNext): ZLinkHandlerFilterNext
|
|
|
82
90
|
let invoked = false;
|
|
83
91
|
return () => {
|
|
84
92
|
if (invoked) {
|
|
85
|
-
return Promise.reject(
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
93
|
+
return Promise.reject(
|
|
94
|
+
createInternalFrameworkException(
|
|
95
|
+
ZLinkFrameworkInternalErrorKind.InvalidOperation,
|
|
96
|
+
'A handler filter cannot invoke next more than once.'
|
|
97
|
+
)
|
|
98
|
+
);
|
|
89
99
|
}
|
|
90
100
|
invoked = true;
|
|
91
101
|
return next();
|