@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
|
@@ -25,9 +25,9 @@ class ServiceTopologyRegistry {
|
|
|
25
25
|
}
|
|
26
26
|
publishLocal(descriptor) {
|
|
27
27
|
validateDescriptor(descriptor);
|
|
28
|
-
if (descriptor.meshName !== this.local.meshName
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
if (descriptor.meshName !== this.local.meshName ||
|
|
29
|
+
descriptor.nodeRoutingId !== this.local.nodeRoutingId ||
|
|
30
|
+
descriptor.lifecycleGeneration !== this.local.lifecycleGeneration) {
|
|
31
31
|
throw new TypeError('Published descriptor changes the local node identity.');
|
|
32
32
|
}
|
|
33
33
|
if (descriptor.descriptorRevision <= this.local.descriptorRevision) {
|
|
@@ -54,12 +54,11 @@ class ServiceTopologyRegistry {
|
|
|
54
54
|
return 'meshMismatch';
|
|
55
55
|
if (descriptor.nodeRoutingId === this.local.nodeRoutingId)
|
|
56
56
|
return 'invalidDescriptor';
|
|
57
|
-
if ((expected?.endpoint !== undefined
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
&& descriptor.lifecycleGeneration !== expected.lifecycleGeneration)) {
|
|
57
|
+
if ((expected?.endpoint !== undefined && descriptor.advertisedEndpoint !== expected.endpoint) ||
|
|
58
|
+
(expected?.securityIdentity !== undefined &&
|
|
59
|
+
descriptor.securityIdentity !== expected.securityIdentity) ||
|
|
60
|
+
(expected?.lifecycleGeneration !== undefined &&
|
|
61
|
+
descriptor.lifecycleGeneration !== expected.lifecycleGeneration)) {
|
|
63
62
|
return 'invalidDescriptor';
|
|
64
63
|
}
|
|
65
64
|
if ((0, route_mesh_connection_policy_1.descriptorConnectionNotRequired)(this.local, descriptor)) {
|
|
@@ -71,30 +70,29 @@ class ServiceTopologyRegistry {
|
|
|
71
70
|
}
|
|
72
71
|
this.notRequiredByRid.delete(descriptor.nodeRoutingId);
|
|
73
72
|
const current = this.peersByRid.get(descriptor.nodeRoutingId);
|
|
74
|
-
if (current !== undefined
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
73
|
+
if (current !== undefined &&
|
|
74
|
+
current.descriptor.lifecycleGeneration === descriptor.lifecycleGeneration &&
|
|
75
|
+
descriptor.descriptorRevision > current.descriptor.descriptorRevision &&
|
|
76
|
+
!sameImmutableDescriptor(current.descriptor, descriptor)) {
|
|
78
77
|
return 'invalidDescriptor';
|
|
79
78
|
}
|
|
80
|
-
if (current !== undefined
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
79
|
+
if (current !== undefined &&
|
|
80
|
+
current.descriptor.lifecycleGeneration === descriptor.lifecycleGeneration &&
|
|
81
|
+
(current.descriptor.descriptorRevision > descriptor.descriptorRevision ||
|
|
82
|
+
(current.descriptor.descriptorRevision === descriptor.descriptorRevision &&
|
|
83
|
+
!sameServiceNodeDescriptor(current.descriptor, descriptor)))) {
|
|
85
84
|
return 'staleDescriptor';
|
|
86
85
|
}
|
|
87
|
-
if (current !== undefined
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
86
|
+
if (current !== undefined &&
|
|
87
|
+
current.descriptor.lifecycleGeneration === descriptor.lifecycleGeneration &&
|
|
88
|
+
current.descriptor.descriptorRevision === descriptor.descriptorRevision &&
|
|
89
|
+
sameServiceNodeDescriptor(current.descriptor, descriptor) &&
|
|
90
|
+
current.connectionId !== connectionId &&
|
|
92
91
|
// A fallback candidate is only a logical placeholder. Once the
|
|
93
92
|
// monitor reports the physical connection, its evidence supersedes
|
|
94
93
|
// candidate ordering so the request path uses the native route.
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
&& compareConnectionCandidate(current.connectionDiscriminator, current.connectionId, connectionDiscriminator, connectionId) <= 0) {
|
|
94
|
+
!(isUnmonitoredConnectionId(current.connectionId) && !isUnmonitoredConnectionId(connectionId)) &&
|
|
95
|
+
compareConnectionCandidate(current.connectionDiscriminator, current.connectionId, connectionDiscriminator, connectionId) <= 0) {
|
|
98
96
|
// Both manual directions can reach admission. The same comparison on
|
|
99
97
|
// every retry keeps one physical candidate instead of replacing it in
|
|
100
98
|
// arrival order.
|
|
@@ -138,9 +136,9 @@ class ServiceTopologyRegistry {
|
|
|
138
136
|
const next = new Map();
|
|
139
137
|
for (const descriptor of descriptors) {
|
|
140
138
|
validateDescriptor(descriptor);
|
|
141
|
-
if (descriptor.meshName === this.local.meshName
|
|
142
|
-
|
|
143
|
-
|
|
139
|
+
if (descriptor.meshName === this.local.meshName &&
|
|
140
|
+
descriptor.nodeRoutingId !== this.local.nodeRoutingId &&
|
|
141
|
+
(0, route_mesh_connection_policy_1.descriptorConnectionNotRequired)(this.local, descriptor)) {
|
|
144
142
|
next.set(descriptor.nodeRoutingId, cloneDescriptor(descriptor));
|
|
145
143
|
}
|
|
146
144
|
}
|
|
@@ -153,9 +151,9 @@ class ServiceTopologyRegistry {
|
|
|
153
151
|
}
|
|
154
152
|
markNotRequired(descriptor) {
|
|
155
153
|
validateDescriptor(descriptor);
|
|
156
|
-
if (descriptor.meshName !== this.local.meshName
|
|
157
|
-
|
|
158
|
-
|
|
154
|
+
if (descriptor.meshName !== this.local.meshName ||
|
|
155
|
+
descriptor.nodeRoutingId === this.local.nodeRoutingId ||
|
|
156
|
+
!(0, route_mesh_connection_policy_1.descriptorConnectionNotRequired)(this.local, descriptor)) {
|
|
159
157
|
return;
|
|
160
158
|
}
|
|
161
159
|
this.peersByRid.delete(descriptor.nodeRoutingId);
|
|
@@ -169,17 +167,15 @@ class ServiceTopologyRegistry {
|
|
|
169
167
|
}
|
|
170
168
|
knownDescriptor(nodeRoutingId) {
|
|
171
169
|
const admitted = this.peersByRid.get(nodeRoutingId)?.descriptor;
|
|
172
|
-
const descriptor = admitted
|
|
173
|
-
?? this.notRequiredByRid.get(nodeRoutingId)
|
|
174
|
-
?? this.knownByRid.get(nodeRoutingId);
|
|
170
|
+
const descriptor = admitted ?? this.notRequiredByRid.get(nodeRoutingId) ?? this.knownByRid.get(nodeRoutingId);
|
|
175
171
|
return descriptor === undefined ? undefined : cloneDescriptor(descriptor);
|
|
176
172
|
}
|
|
177
173
|
remember(descriptor) {
|
|
178
174
|
const current = this.knownByRid.get(descriptor.nodeRoutingId);
|
|
179
|
-
if (current === undefined
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
175
|
+
if (current === undefined ||
|
|
176
|
+
descriptor.lifecycleGeneration !== current.lifecycleGeneration ||
|
|
177
|
+
(descriptor.lifecycleGeneration === current.lifecycleGeneration &&
|
|
178
|
+
descriptor.descriptorRevision >= current.descriptorRevision)) {
|
|
183
179
|
this.knownByRid.set(descriptor.nodeRoutingId, cloneDescriptor(descriptor));
|
|
184
180
|
}
|
|
185
181
|
}
|
|
@@ -191,73 +187,79 @@ class ServiceTopologyRegistry {
|
|
|
191
187
|
connectionId: 'local',
|
|
192
188
|
connectionDiscriminator: 'local'
|
|
193
189
|
};
|
|
194
|
-
return [local, ...this.peersByRid.values()]
|
|
190
|
+
return [local, ...this.peersByRid.values()]
|
|
191
|
+
.map((peer) => ({
|
|
195
192
|
peer: clonePeer(peer),
|
|
196
193
|
channel: findChannel(peer.descriptor, channelName)
|
|
197
|
-
}))
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
194
|
+
}))
|
|
195
|
+
.filter((value) => value.channel !== undefined &&
|
|
196
|
+
value.peer.descriptor.state === 'serving' &&
|
|
197
|
+
value.channel.weight > 0);
|
|
198
|
+
}, (value) => value.channel.weight, (value) => value.peer.descriptor.nodeRoutingId, (left, right) => compareOrdinal(left.peer.descriptor.nodeRoutingId, right.peer.descriptor.nodeRoutingId), (value) => isReady(value.peer))?.peer;
|
|
201
199
|
}
|
|
202
200
|
selectPlacement(isReady = () => true) {
|
|
203
|
-
return this.selectWeightedCycle('placement', () => [...this.peersByRid.values()]
|
|
201
|
+
return this.selectWeightedCycle('placement', () => [...this.peersByRid.values()]
|
|
202
|
+
.filter((peer) => {
|
|
204
203
|
const descriptor = peer.descriptor;
|
|
205
|
-
return descriptor.state === 'serving'
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
})
|
|
204
|
+
return (descriptor.state === 'serving' &&
|
|
205
|
+
descriptor.objectRole === 'server' &&
|
|
206
|
+
descriptor.placementWeight > 0 &&
|
|
207
|
+
descriptor.activeCapacityUsed < descriptor.activeCapacityLimit &&
|
|
208
|
+
descriptor.pendingCapacityUsed < descriptor.pendingCapacityLimit);
|
|
209
|
+
})
|
|
210
|
+
.map(clonePeer), (peer) => peer.descriptor.placementWeight, (peer) => peer.descriptor.nodeRoutingId, (left, right) => compareOrdinal(left.descriptor.nodeRoutingId, right.descriptor.nodeRoutingId), isReady);
|
|
211
211
|
}
|
|
212
212
|
selectObjectPlacement(stableType, isReady = () => true) {
|
|
213
213
|
requireText(stableType, 'stableType');
|
|
214
214
|
return this.selectWeightedCycle(`object:${stableType}`, () => {
|
|
215
215
|
const capability = `object-type:${stableType}`;
|
|
216
|
-
return [this.local, ...this.peersByRid.values()]
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
216
|
+
return [this.local, ...this.peersByRid.values()]
|
|
217
|
+
.map((value) => ('descriptor' in value ? value.descriptor : value))
|
|
218
|
+
.filter((descriptor) => descriptor.state === 'serving' &&
|
|
219
|
+
descriptor.objectRole === 'server' &&
|
|
220
|
+
descriptor.placementWeight > 0 &&
|
|
221
|
+
descriptor.activeCapacityUsed < descriptor.activeCapacityLimit &&
|
|
222
|
+
descriptor.pendingCapacityUsed < descriptor.pendingCapacityLimit &&
|
|
223
|
+
descriptor.protocolCapabilities.includes(capability))
|
|
224
|
+
.map(cloneDescriptor);
|
|
225
|
+
}, (descriptor) => descriptor.placementWeight, (descriptor) => descriptor.nodeRoutingId, (left, right) => compareOrdinal(left.nodeRoutingId, right.nodeRoutingId), isReady);
|
|
223
226
|
}
|
|
224
227
|
objectPlacementStatus(stableType, isReady = () => true) {
|
|
225
228
|
requireText(stableType, 'stableType');
|
|
226
229
|
const capability = `object-type:${stableType}`;
|
|
227
|
-
const supported = [
|
|
228
|
-
.
|
|
229
|
-
|
|
230
|
-
|
|
230
|
+
const supported = [
|
|
231
|
+
this.local,
|
|
232
|
+
...[...this.peersByRid.values()].map((peer) => peer.descriptor)
|
|
233
|
+
].filter((descriptor) => descriptor.state === 'serving' &&
|
|
234
|
+
descriptor.objectRole === 'server' &&
|
|
235
|
+
descriptor.protocolCapabilities.includes(capability));
|
|
231
236
|
if (supported.length === 0)
|
|
232
237
|
return 'unsupported';
|
|
233
|
-
const withCapacity = supported.filter(descriptor => descriptor.activeCapacityUsed < descriptor.activeCapacityLimit
|
|
234
|
-
|
|
238
|
+
const withCapacity = supported.filter((descriptor) => descriptor.activeCapacityUsed < descriptor.activeCapacityLimit &&
|
|
239
|
+
descriptor.pendingCapacityUsed < descriptor.pendingCapacityLimit);
|
|
235
240
|
if (withCapacity.length === 0)
|
|
236
241
|
return 'capacity';
|
|
237
|
-
const weighted = withCapacity.filter(descriptor => descriptor.placementWeight > 0);
|
|
242
|
+
const weighted = withCapacity.filter((descriptor) => descriptor.placementWeight > 0);
|
|
238
243
|
if (weighted.length === 0)
|
|
239
244
|
return 'unsupported';
|
|
240
245
|
return weighted.some(isReady) ? 'available' : 'unavailable';
|
|
241
246
|
}
|
|
242
247
|
instanceSpotPlacementTypes() {
|
|
243
248
|
const prefix = 'instance-spot-type:';
|
|
244
|
-
return [
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
.filter(
|
|
249
|
-
|
|
250
|
-
.
|
|
251
|
-
|
|
252
|
-
.map(capability => capability.slice(prefix.length))
|
|
253
|
-
.filter(stableType => stableType.length > 0))]
|
|
254
|
-
.sort();
|
|
249
|
+
return [
|
|
250
|
+
...new Set([this.local, ...this.peersCore().map((peer) => peer.descriptor)]
|
|
251
|
+
.filter((descriptor) => descriptor.state === 'serving' && descriptor.objectRole === 'server')
|
|
252
|
+
.flatMap((descriptor) => descriptor.protocolCapabilities)
|
|
253
|
+
.filter((capability) => capability.startsWith(prefix))
|
|
254
|
+
.map((capability) => capability.slice(prefix.length))
|
|
255
|
+
.filter((stableType) => stableType.length > 0))
|
|
256
|
+
].sort();
|
|
255
257
|
}
|
|
256
258
|
selectWeightedCycle(key, eligible, weight, identity, compare, accept = () => true) {
|
|
257
259
|
let entry = this.selections.get(key);
|
|
258
260
|
if (entry === undefined) {
|
|
259
261
|
const selection = new service_weighted_selection_1.SmoothWeightedSelection(() => eligible()
|
|
260
|
-
.map(value => ({
|
|
262
|
+
.map((value) => ({
|
|
261
263
|
value,
|
|
262
264
|
id: identity(value),
|
|
263
265
|
weight: weight(value)
|
|
@@ -266,7 +268,7 @@ class ServiceTopologyRegistry {
|
|
|
266
268
|
entry = { selection };
|
|
267
269
|
this.selections.set(key, entry);
|
|
268
270
|
}
|
|
269
|
-
return entry.selection.select(value => accept(value));
|
|
271
|
+
return entry.selection.select((value) => accept(value));
|
|
270
272
|
}
|
|
271
273
|
rebuildSelections() {
|
|
272
274
|
for (const entry of this.selections.values())
|
|
@@ -296,16 +298,16 @@ function validateDescriptor(descriptor) {
|
|
|
296
298
|
validateCapacity(descriptor.pendingCapacityLimit, true, 'pendingCapacityLimit');
|
|
297
299
|
validateCapacity(descriptor.activeCapacityUsed, true, 'activeCapacityUsed');
|
|
298
300
|
validateCapacity(descriptor.pendingCapacityUsed, true, 'pendingCapacityUsed');
|
|
299
|
-
if (descriptor.activeCapacityUsed > descriptor.activeCapacityLimit
|
|
300
|
-
|
|
301
|
+
if (descriptor.activeCapacityUsed > descriptor.activeCapacityLimit ||
|
|
302
|
+
descriptor.pendingCapacityUsed > descriptor.pendingCapacityLimit) {
|
|
301
303
|
throw new RangeError('Descriptor capacity use exceeds its limit.');
|
|
302
304
|
}
|
|
303
|
-
validateSortedUnique(descriptor.channels, channel => {
|
|
305
|
+
validateSortedUnique(descriptor.channels, (channel) => {
|
|
304
306
|
requireText(channel.name, 'channel.name');
|
|
305
307
|
validatePublicWeight(channel.weight, 'channel.weight');
|
|
306
308
|
return channel.name;
|
|
307
309
|
}, 'channels');
|
|
308
|
-
validateSortedUnique(descriptor.protocolCapabilities, capability => {
|
|
310
|
+
validateSortedUnique(descriptor.protocolCapabilities, (capability) => {
|
|
309
311
|
requireText(capability, 'protocol capability');
|
|
310
312
|
return capability;
|
|
311
313
|
}, 'protocolCapabilities');
|
|
@@ -334,7 +336,7 @@ function validateSortedUnique(values, key, field) {
|
|
|
334
336
|
}
|
|
335
337
|
}
|
|
336
338
|
function findChannel(descriptor, channelName) {
|
|
337
|
-
return descriptor.channels.find(channel => channel.name === channelName);
|
|
339
|
+
return descriptor.channels.find((channel) => channel.name === channelName);
|
|
338
340
|
}
|
|
339
341
|
function requireText(value, field) {
|
|
340
342
|
if (value.length === 0 || value.includes('\0')) {
|
|
@@ -344,7 +346,7 @@ function requireText(value, field) {
|
|
|
344
346
|
function cloneDescriptor(descriptor) {
|
|
345
347
|
return {
|
|
346
348
|
...descriptor,
|
|
347
|
-
channels: descriptor.channels.map(channel => ({ ...channel })),
|
|
349
|
+
channels: descriptor.channels.map((channel) => ({ ...channel })),
|
|
348
350
|
protocolCapabilities: [...descriptor.protocolCapabilities]
|
|
349
351
|
};
|
|
350
352
|
}
|
|
@@ -359,19 +361,18 @@ function sameServiceNodeDescriptor(left, right) {
|
|
|
359
361
|
return JSON.stringify(toComparable(left)) === JSON.stringify(toComparable(right));
|
|
360
362
|
}
|
|
361
363
|
function sameImmutableDescriptor(left, right) {
|
|
362
|
-
return left.advertisedEndpoint === right.advertisedEndpoint
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
364
|
+
return (left.advertisedEndpoint === right.advertisedEndpoint &&
|
|
365
|
+
left.securityIdentity === right.securityIdentity &&
|
|
366
|
+
left.applicationVersion === right.applicationVersion &&
|
|
367
|
+
arraysEqual(left.protocolCapabilities, right.protocolCapabilities) &&
|
|
368
|
+
left.objectRole === right.objectRole &&
|
|
369
|
+
left.activeCapacityLimit === right.activeCapacityLimit &&
|
|
370
|
+
left.pendingCapacityLimit === right.pendingCapacityLimit &&
|
|
371
|
+
left.channels.length === right.channels.length &&
|
|
372
|
+
left.channels.every((channel, index) => channel.name === right.channels[index]?.name));
|
|
371
373
|
}
|
|
372
374
|
function arraysEqual(left, right) {
|
|
373
|
-
return left.length === right.length
|
|
374
|
-
&& left.every((value, index) => value === right[index]);
|
|
375
|
+
return left.length === right.length && left.every((value, index) => value === right[index]);
|
|
375
376
|
}
|
|
376
377
|
function isUnmonitoredConnectionId(connectionId) {
|
|
377
378
|
return connectionId.startsWith('unmonitored:');
|
|
@@ -33,9 +33,7 @@ class SmoothWeightedSelection {
|
|
|
33
33
|
for (let attempts = 0; attempts < this.plan.values.length; attempts += 1) {
|
|
34
34
|
const cursor = this.plan.cursor;
|
|
35
35
|
const selected = this.plan.values[cursor];
|
|
36
|
-
const nextCursor = cursor + 1 < this.plan.values.length
|
|
37
|
-
? cursor + 1
|
|
38
|
-
: this.plan.cycleStart;
|
|
36
|
+
const nextCursor = cursor + 1 < this.plan.values.length ? cursor + 1 : this.plan.cycleStart;
|
|
39
37
|
this.plan.cursor = nextCursor;
|
|
40
38
|
if (accept(selected))
|
|
41
39
|
return selected;
|
|
@@ -45,15 +43,12 @@ class SmoothWeightedSelection {
|
|
|
45
43
|
}
|
|
46
44
|
exports.SmoothWeightedSelection = SmoothWeightedSelection;
|
|
47
45
|
function buildSelectionPlan(eligible, current) {
|
|
48
|
-
const candidates = eligible.map(candidate => ({
|
|
46
|
+
const candidates = eligible.map((candidate) => ({
|
|
49
47
|
...candidate,
|
|
50
48
|
weight: BigInt(candidate.weight)
|
|
51
49
|
}));
|
|
52
50
|
const total = candidates.reduce((sum, candidate) => sum + candidate.weight, 0n);
|
|
53
|
-
replaceState(current, new Map(candidates.map(candidate => [
|
|
54
|
-
candidate.id,
|
|
55
|
-
current.get(candidate.id) ?? 0n
|
|
56
|
-
])));
|
|
51
|
+
replaceState(current, new Map(candidates.map((candidate) => [candidate.id, current.get(candidate.id) ?? 0n])));
|
|
57
52
|
if (total === 0n)
|
|
58
53
|
return emptyCycle();
|
|
59
54
|
const values = [];
|
|
@@ -62,12 +57,12 @@ function buildSelectionPlan(eligible, current) {
|
|
|
62
57
|
const working = new Map(current);
|
|
63
58
|
const startedAt = performance.now();
|
|
64
59
|
for (;;) {
|
|
65
|
-
if (values.length >= MAX_CYCLE_SEARCH_STEPS
|
|
66
|
-
|
|
60
|
+
if (values.length >= MAX_CYCLE_SEARCH_STEPS ||
|
|
61
|
+
performance.now() - startedAt >= MAX_CYCLE_SEARCH_MS) {
|
|
67
62
|
return { kind: 'direct', candidates };
|
|
68
63
|
}
|
|
69
64
|
const stateKey = candidates
|
|
70
|
-
.map(candidate => `${candidate.id}\u0000${working.get(candidate.id) ?? 0n}`)
|
|
65
|
+
.map((candidate) => `${candidate.id}\u0000${working.get(candidate.id) ?? 0n}`)
|
|
71
66
|
.join('\u0001');
|
|
72
67
|
const cycleStart = seen.get(stateKey);
|
|
73
68
|
if (cycleStart !== undefined) {
|
|
@@ -8,10 +8,10 @@ const routing_id_1 = require("../routing-id");
|
|
|
8
8
|
/** Encodes text without silently replacing an unpaired UTF-16 surrogate. */
|
|
9
9
|
function encodeCanonicalServiceWireText(value, field, maximumBytes, invalid) {
|
|
10
10
|
const bytes = Buffer.from(value, 'utf8');
|
|
11
|
-
if (bytes.byteLength < 1
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
if (bytes.byteLength < 1 ||
|
|
12
|
+
bytes.byteLength > maximumBytes ||
|
|
13
|
+
value.includes('\0') ||
|
|
14
|
+
bytes.toString('utf8') !== value) {
|
|
15
15
|
invalid(`${field} must be 1..${maximumBytes} canonical UTF-8 bytes without NUL.`);
|
|
16
16
|
}
|
|
17
17
|
return bytes;
|
|
@@ -20,8 +20,7 @@ function encodeCanonicalServiceWireText(value, field, maximumBytes, invalid) {
|
|
|
20
20
|
function decodeCanonicalServiceWireText(bytes, field, invalid) {
|
|
21
21
|
const encoded = Buffer.from(bytes);
|
|
22
22
|
const value = encoded.toString('utf8');
|
|
23
|
-
if (value.includes('\0')
|
|
24
|
-
|| !Buffer.from(value, 'utf8').equals(encoded)) {
|
|
23
|
+
if (value.includes('\0') || !Buffer.from(value, 'utf8').equals(encoded)) {
|
|
25
24
|
invalid(`${field} is not canonical UTF-8 without NUL.`);
|
|
26
25
|
}
|
|
27
26
|
return value;
|
|
@@ -46,7 +46,9 @@ function encodeNodeRequestHeader(correlation) {
|
|
|
46
46
|
}
|
|
47
47
|
function decodeNodeRequestHeader(frame) {
|
|
48
48
|
const header = decodeHeader(frame);
|
|
49
|
-
if (header.command !== exports.M6aServiceWireCommand.nodeRequest ||
|
|
49
|
+
if (header.command !== exports.M6aServiceWireCommand.nodeRequest ||
|
|
50
|
+
header.flags !== 0 ||
|
|
51
|
+
frame.byteLength !== 13) {
|
|
50
52
|
fail('Invalid nodeRequest header.');
|
|
51
53
|
}
|
|
52
54
|
return readNonZeroU64(asBuffer(frame), PREFIX_SIZE, 'correlation');
|
|
@@ -96,7 +98,9 @@ function encodeReplyHeader(correlation, terminalResult = 0, failureCode = 0, tai
|
|
|
96
98
|
}
|
|
97
99
|
function decodeReplyHeader(frame) {
|
|
98
100
|
const header = decodeHeader(frame);
|
|
99
|
-
if (header.command !== exports.M6aServiceWireCommand.reply ||
|
|
101
|
+
if (header.command !== exports.M6aServiceWireCommand.reply ||
|
|
102
|
+
header.flags !== 0 ||
|
|
103
|
+
frame.byteLength < 21) {
|
|
100
104
|
fail('Invalid reply header.');
|
|
101
105
|
}
|
|
102
106
|
const bytes = asBuffer(frame);
|
|
@@ -117,10 +121,7 @@ function encodeApplicationPayload(payload) {
|
|
|
117
121
|
const contentType = encodeText8(payload.contentType, 'contentType');
|
|
118
122
|
if (payload.payload.byteLength > MAX_U32)
|
|
119
123
|
fail('Application payload exceeds u32.');
|
|
120
|
-
const bodyLength = packetName.byteLength
|
|
121
|
-
+ contentType.byteLength
|
|
122
|
-
+ 4
|
|
123
|
-
+ payload.payload.byteLength;
|
|
124
|
+
const bodyLength = packetName.byteLength + contentType.byteLength + 4 + payload.payload.byteLength;
|
|
124
125
|
if (bodyLength > MAX_U32)
|
|
125
126
|
fail('Application payload body exceeds u32.');
|
|
126
127
|
const result = Buffer.alloc(5 + bodyLength);
|
|
@@ -154,10 +155,7 @@ function encodeMultipartApplicationPayload(parts, packetName, contentType) {
|
|
|
154
155
|
if (multipartLength > MAX_U32)
|
|
155
156
|
fail('Multipart payload exceeds u32.');
|
|
156
157
|
}
|
|
157
|
-
const bodyLength = packetNameBytes.byteLength
|
|
158
|
-
+ contentTypeBytes.byteLength
|
|
159
|
-
+ 4
|
|
160
|
-
+ multipartLength;
|
|
158
|
+
const bodyLength = packetNameBytes.byteLength + contentTypeBytes.byteLength + 4 + multipartLength;
|
|
161
159
|
if (bodyLength > MAX_U32)
|
|
162
160
|
fail('Application payload body exceeds u32.');
|
|
163
161
|
const result = Buffer.alloc(5 + bodyLength);
|
|
@@ -239,7 +237,7 @@ function encodeRouteMeshAdmission(command, descriptor) {
|
|
|
239
237
|
for (const channel of descriptor.channels) {
|
|
240
238
|
routeParts.push(encodeText8(channel.name, 'channelName'), encodeU32(channel.weight));
|
|
241
239
|
}
|
|
242
|
-
const extension = concat(tlv(1, Buffer.of(stateToWire(descriptor.state))), tlv(2, encodeU64(descriptor.applicationVersion)), tlv(6, concat(encodeU16(descriptor.protocolCapabilities.length), ...descriptor.protocolCapabilities.map(value => encodeText8(value, 'protocolCapability')))), tlv(7, Buffer.of(roleToWire(descriptor.objectRole))), tlv(8, encodeU32(descriptor.placementWeight)), tlv(9, encodeU32(descriptor.activeCapacityLimit)), tlv(10, encodeU32(descriptor.pendingCapacityLimit)), tlv(11, encodeU32(descriptor.activeCapacityUsed)), tlv(12, encodeU32(descriptor.pendingCapacityUsed)), ...(descriptor.maintenanceWave === undefined
|
|
240
|
+
const extension = concat(tlv(1, Buffer.of(stateToWire(descriptor.state))), tlv(2, encodeU64(descriptor.applicationVersion)), tlv(6, concat(encodeU16(descriptor.protocolCapabilities.length), ...descriptor.protocolCapabilities.map((value) => encodeText8(value, 'protocolCapability')))), tlv(7, Buffer.of(roleToWire(descriptor.objectRole))), tlv(8, encodeU32(descriptor.placementWeight)), tlv(9, encodeU32(descriptor.activeCapacityLimit)), tlv(10, encodeU32(descriptor.pendingCapacityLimit)), tlv(11, encodeU32(descriptor.activeCapacityUsed)), tlv(12, encodeU32(descriptor.pendingCapacityUsed)), ...(descriptor.maintenanceWave === undefined
|
|
243
241
|
? []
|
|
244
242
|
: [tlv(13, encodeText8(descriptor.maintenanceWave, 'maintenanceWave'))]));
|
|
245
243
|
const route = concat(...routeParts, encodeU32(extension.byteLength), extension);
|
|
@@ -319,11 +317,11 @@ function decodeRouteMeshAdmission(frame, expectedCommand, sourceRoutingId) {
|
|
|
319
317
|
value.end();
|
|
320
318
|
}
|
|
321
319
|
reader.end();
|
|
322
|
-
if (state === undefined
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
320
|
+
if (state === undefined ||
|
|
321
|
+
applicationVersion === undefined ||
|
|
322
|
+
protocolCapabilities === undefined ||
|
|
323
|
+
objectRole === undefined ||
|
|
324
|
+
![8, 9, 10, 11, 12].every((id) => capacities.has(id))) {
|
|
327
325
|
fail('Descriptor extension omits a required field.');
|
|
328
326
|
}
|
|
329
327
|
const descriptor = {
|
|
@@ -355,7 +353,9 @@ function encodeReject(reason) {
|
|
|
355
353
|
}
|
|
356
354
|
function decodeReject(frame) {
|
|
357
355
|
const header = decodeHeader(frame);
|
|
358
|
-
if (header.command !== exports.M6aServiceWireCommand.reject ||
|
|
356
|
+
if (header.command !== exports.M6aServiceWireCommand.reject ||
|
|
357
|
+
header.flags !== 0 ||
|
|
358
|
+
frame.byteLength !== 9) {
|
|
359
359
|
fail('Invalid reject record.');
|
|
360
360
|
}
|
|
361
361
|
const reason = asBuffer(frame).readUInt32BE(PREFIX_SIZE);
|
|
@@ -420,7 +420,7 @@ function tlv(id, value) {
|
|
|
420
420
|
return concat(Buffer.of(id), encodeU32(value.byteLength), value);
|
|
421
421
|
}
|
|
422
422
|
function concat(...parts) {
|
|
423
|
-
return Buffer.concat(parts.map(part => Buffer.from(part)));
|
|
423
|
+
return Buffer.concat(parts.map((part) => Buffer.from(part)));
|
|
424
424
|
}
|
|
425
425
|
function readNonZeroU64(bytes, offset, field) {
|
|
426
426
|
const result = bytes.readBigUInt64BE(offset);
|
|
@@ -432,9 +432,9 @@ function asBuffer(value) {
|
|
|
432
432
|
return Buffer.from(value.buffer, value.byteOffset, value.byteLength);
|
|
433
433
|
}
|
|
434
434
|
function validateAdmissionCommand(command) {
|
|
435
|
-
if (command !== exports.M6aServiceWireCommand.hello
|
|
436
|
-
|
|
437
|
-
|
|
435
|
+
if (command !== exports.M6aServiceWireCommand.hello &&
|
|
436
|
+
command !== exports.M6aServiceWireCommand.admit &&
|
|
437
|
+
command !== exports.M6aServiceWireCommand.update) {
|
|
438
438
|
fail('Command is not an admission record.');
|
|
439
439
|
}
|
|
440
440
|
}
|
|
@@ -445,9 +445,9 @@ function validateReplyFields(correlation, terminal, failure) {
|
|
|
445
445
|
// an unknown or mismatched pair is a protocol error before dispatch. The
|
|
446
446
|
// generated predicate replaces the old broad-category check, which
|
|
447
447
|
// accepted any typed pairing and wrongly rejected defined codes 33/34.
|
|
448
|
-
if (correlation <= 0n
|
|
449
|
-
|
|
450
|
-
|
|
448
|
+
if (correlation <= 0n ||
|
|
449
|
+
correlation > MAX_U64 ||
|
|
450
|
+
!(0, service_wire_constants_generated_1.isValidServiceWireTerminalFailure)(terminal, failure)) {
|
|
451
451
|
fail('Invalid reply terminal fields.');
|
|
452
452
|
}
|
|
453
453
|
}
|
|
@@ -456,22 +456,33 @@ function stateToWire(value) {
|
|
|
456
456
|
// is a host-internal transition and has the same remote admission meaning
|
|
457
457
|
// as `draining`; the service wire does not expose a separate retiring value.
|
|
458
458
|
switch (value) {
|
|
459
|
-
case 'preparing':
|
|
460
|
-
|
|
459
|
+
case 'preparing':
|
|
460
|
+
return 0;
|
|
461
|
+
case 'serving':
|
|
462
|
+
return 1;
|
|
461
463
|
case 'retiring':
|
|
462
|
-
case 'draining':
|
|
463
|
-
|
|
464
|
-
case '
|
|
464
|
+
case 'draining':
|
|
465
|
+
return 2;
|
|
466
|
+
case 'stopped':
|
|
467
|
+
return 3;
|
|
468
|
+
case 'error':
|
|
469
|
+
return 4;
|
|
465
470
|
}
|
|
466
471
|
}
|
|
467
472
|
function stateFromWire(value) {
|
|
468
473
|
switch (value) {
|
|
469
|
-
case 0:
|
|
470
|
-
|
|
471
|
-
case
|
|
472
|
-
|
|
473
|
-
case
|
|
474
|
-
|
|
474
|
+
case 0:
|
|
475
|
+
return 'preparing';
|
|
476
|
+
case 1:
|
|
477
|
+
return 'serving';
|
|
478
|
+
case 2:
|
|
479
|
+
return 'draining';
|
|
480
|
+
case 3:
|
|
481
|
+
return 'stopped';
|
|
482
|
+
case 4:
|
|
483
|
+
return 'error';
|
|
484
|
+
default:
|
|
485
|
+
fail('Invalid runtime state.');
|
|
475
486
|
}
|
|
476
487
|
}
|
|
477
488
|
function roleToWire(value) {
|
|
@@ -149,18 +149,17 @@ exports.ZLINK_FRAMEWORK_INTERNAL_ERROR_KIND_VALUES = Object.freeze({
|
|
|
149
149
|
[ZLinkFrameworkInternalErrorKind.ActorRouteUnavailable]: 41
|
|
150
150
|
});
|
|
151
151
|
const INTERNAL_KIND_BY_WIRE_FAILURE_CODE = new Map([
|
|
152
|
-
...Object.entries(exports.ZLINK_FRAMEWORK_INTERNAL_ERROR_KIND_VALUES)
|
|
153
|
-
.map(([kind, code]) => [code + 1, kind]),
|
|
152
|
+
...Object.entries(exports.ZLINK_FRAMEWORK_INTERNAL_ERROR_KIND_VALUES).map(([kind, code]) => [code + 1, kind]),
|
|
154
153
|
// Spec 32-framework-error-model:99-103 — a workerQueueFull(18) received in a
|
|
155
154
|
// remote reply is the target's queue state and maps to Unavailable.
|
|
156
155
|
[18, ZLinkFrameworkInternalErrorKind.RouteNotConnected]
|
|
157
156
|
]);
|
|
158
157
|
const WIRE_TERMINAL_RESULT_BY_FAILURE_CODE = new Map([
|
|
159
|
-
...[1, 6, 8, 9, 10, 11, 14].map(code => [code, 102]),
|
|
160
|
-
...[2, 5, 13, 17, 19, 20, 35, 42].map(code => [code, 105]),
|
|
161
|
-
...[3, 4, 7, 21, 33, 34].map(code => [code, 107]),
|
|
162
|
-
...[12, 16].map(code => [code, 104]),
|
|
163
|
-
...[15, 18, 22].map(code => [code, 106])
|
|
158
|
+
...[1, 6, 8, 9, 10, 11, 14].map((code) => [code, 102]),
|
|
159
|
+
...[2, 5, 13, 17, 19, 20, 35, 42].map((code) => [code, 105]),
|
|
160
|
+
...[3, 4, 7, 21, 33, 34].map((code) => [code, 107]),
|
|
161
|
+
...[12, 16].map((code) => [code, 104]),
|
|
162
|
+
...[15, 18, 22].map((code) => [code, 106])
|
|
164
163
|
]);
|
|
165
164
|
const INTERNAL_KIND = new WeakMap();
|
|
166
165
|
function createInternalFrameworkException(kind, message, causeOrRetry, cause) {
|
|
@@ -286,9 +285,7 @@ function internalFrameworkErrorKindFromWireReply(terminalResult, failureCode) {
|
|
|
286
285
|
const expectedTerminalResult = WIRE_TERMINAL_RESULT_BY_FAILURE_CODE.get(failureCode);
|
|
287
286
|
return expectedTerminalResult === terminalResult ? kind : undefined;
|
|
288
287
|
}
|
|
289
|
-
const BOUNDARY_WIRE_TERMINAL_RESULTS = new Set([
|
|
290
|
-
101, 103, 108, 109, 110, 111, 112, 113
|
|
291
|
-
]);
|
|
288
|
+
const BOUNDARY_WIRE_TERMINAL_RESULTS = new Set([101, 103, 108, 109, 110, 111, 112, 113]);
|
|
292
289
|
/** Checks the terminal and failure-code pair before a transport maps it. */
|
|
293
290
|
function isCanonicalWireReplyTerminal(terminalResult, failureCode) {
|
|
294
291
|
if (terminalResult === 0)
|
|
@@ -73,9 +73,9 @@ function createHandlerInstanceScope(providerResolver, context) {
|
|
|
73
73
|
return new DefaultHandlerInstanceScope(providerResolver);
|
|
74
74
|
}
|
|
75
75
|
function isHandlerInstanceScopeFactory(value) {
|
|
76
|
-
return typeof value === 'object'
|
|
77
|
-
|
|
78
|
-
|
|
76
|
+
return (typeof value === 'object' &&
|
|
77
|
+
value !== null &&
|
|
78
|
+
typeof value.create === 'function');
|
|
79
79
|
}
|
|
80
80
|
class DefaultHandlerInstanceScope {
|
|
81
81
|
providerResolver;
|
|
@@ -133,8 +133,7 @@ class DefaultHandlerInstanceScope {
|
|
|
133
133
|
async activate(type, activation) {
|
|
134
134
|
let instance;
|
|
135
135
|
try {
|
|
136
|
-
instance = await this.providerResolver?.create?.(type)
|
|
137
|
-
?? new type();
|
|
136
|
+
instance = (await this.providerResolver?.create?.(type)) ?? new type();
|
|
138
137
|
}
|
|
139
138
|
catch (error) {
|
|
140
139
|
activation.reject(error);
|
|
@@ -20,7 +20,9 @@ function exposeZLinkHandlers(handlerTypes, policy) {
|
|
|
20
20
|
if (groups.size === 0) {
|
|
21
21
|
return false;
|
|
22
22
|
}
|
|
23
|
-
return (0, Attributes_1.readZLinkDecoratorMetadata)(descriptor.handlerType).some((metadata) => metadata.kind === 'handlerGroup' &&
|
|
23
|
+
return (0, Attributes_1.readZLinkDecoratorMetadata)(descriptor.handlerType).some((metadata) => metadata.kind === 'handlerGroup' &&
|
|
24
|
+
metadata.groupName !== undefined &&
|
|
25
|
+
groups.has(metadata.groupName));
|
|
24
26
|
});
|
|
25
27
|
}
|
|
26
28
|
async function invokeZLinkHandlerFilters(filters, context, terminal, signal) {
|