@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
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
Context,
|
|
3
|
-
CoreHwmBudgetSnapshot,
|
|
4
|
-
TopicMessage
|
|
5
|
-
} from '@zlink-systems/zlink';
|
|
1
|
+
import type { Context, CoreHwmBudgetSnapshot, TopicMessage } from '@zlink-systems/zlink';
|
|
6
2
|
import type { ZLinkCoreHwmOptions } from '../../../contracts/Configuration';
|
|
7
3
|
import type {
|
|
8
4
|
ZLinkBackendAdapterFactory,
|
|
@@ -81,7 +77,9 @@ class ZLinkNodeChannelBackendAdapter implements ZLinkChannelBackendAdapter {
|
|
|
81
77
|
}
|
|
82
78
|
|
|
83
79
|
createPublisherSocket(context: ZLinkBackendContext): ZLinkBackendPublisherSocket {
|
|
84
|
-
return wrapSocket(
|
|
80
|
+
return wrapSocket(
|
|
81
|
+
zlink.createPubSocket(asNodeContext(context))
|
|
82
|
+
) as unknown as ZLinkBackendPublisherSocket;
|
|
85
83
|
}
|
|
86
84
|
|
|
87
85
|
createSubscriberSocket(context: ZLinkBackendContext): ZLinkBackendSubscriberSocket {
|
|
@@ -115,7 +113,9 @@ class ZLinkNodeStreamBackendAdapter implements ZLinkStreamBackendAdapter {
|
|
|
115
113
|
class ZLinkNodeMonitoringBackendAdapter implements ZLinkMonitoringBackendAdapter {
|
|
116
114
|
openSocketMonitor(socket: ZLinkBackendSocket): ZLinkBackendSocketMonitor {
|
|
117
115
|
const nativeSocket = socket.nativeInstance as {
|
|
118
|
-
monitorOpen(): ReturnType<ZLinkBindingModule['createDealerSocket']>['monitorOpen'] extends (
|
|
116
|
+
monitorOpen(): ReturnType<ZLinkBindingModule['createDealerSocket']>['monitorOpen'] extends (
|
|
117
|
+
...args: never[]
|
|
118
|
+
) => infer T
|
|
119
119
|
? T
|
|
120
120
|
: never;
|
|
121
121
|
};
|
|
@@ -133,8 +133,10 @@ class ZLinkNodeBackendContext implements ZLinkBackendContext {
|
|
|
133
133
|
configureCoreHwm(options: ZLinkCoreHwmOptions | undefined): void {
|
|
134
134
|
if (options === undefined) return;
|
|
135
135
|
if (options.profile !== undefined) this.nativeInstance.options.coreHwmProfile = options.profile;
|
|
136
|
-
if (options.memoryLimitBytes !== undefined)
|
|
137
|
-
|
|
136
|
+
if (options.memoryLimitBytes !== undefined)
|
|
137
|
+
this.nativeInstance.options.coreHwmMemoryLimitBytes = options.memoryLimitBytes;
|
|
138
|
+
if (options.budgetBytes !== undefined)
|
|
139
|
+
this.nativeInstance.options.coreHwmBudgetBytes = options.budgetBytes;
|
|
138
140
|
}
|
|
139
141
|
|
|
140
142
|
getCoreHwmBudgetSnapshot(): CoreHwmBudgetSnapshot {
|
|
@@ -170,18 +172,20 @@ function asNodeContext(context: ZLinkBackendContext): Context {
|
|
|
170
172
|
return context.nativeInstance as Context;
|
|
171
173
|
}
|
|
172
174
|
|
|
173
|
-
function createNodeReadablePoller(
|
|
174
|
-
|
|
175
|
-
): ZLinkBackendReadablePoller {
|
|
175
|
+
function createNodeReadablePoller(socket: {
|
|
176
|
+
readonly nativeInstance: unknown;
|
|
177
|
+
}): ZLinkBackendReadablePoller {
|
|
176
178
|
const eventLoopPoller = nodeEventLoopPollerOf(socket);
|
|
177
179
|
let disposed = false;
|
|
178
180
|
let readable = false;
|
|
179
|
-
let pending:
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
181
|
+
let pending:
|
|
182
|
+
| {
|
|
183
|
+
readonly promise: Promise<boolean>;
|
|
184
|
+
readonly resolve: (readable: boolean) => void;
|
|
185
|
+
readonly signal?: AbortSignal;
|
|
186
|
+
readonly onAbort?: () => void;
|
|
187
|
+
}
|
|
188
|
+
| undefined;
|
|
185
189
|
|
|
186
190
|
const settlePending = (value: boolean): void => {
|
|
187
191
|
const current = pending;
|
|
@@ -212,9 +216,7 @@ function createNodeReadablePoller(
|
|
|
212
216
|
const promise = new Promise<boolean>((resolve) => {
|
|
213
217
|
resolvePending = resolve;
|
|
214
218
|
});
|
|
215
|
-
const onAbort = signal === undefined
|
|
216
|
-
? undefined
|
|
217
|
-
: (): void => settlePending(false);
|
|
219
|
+
const onAbort = signal === undefined ? undefined : (): void => settlePending(false);
|
|
218
220
|
pending = { promise, resolve: resolvePending, signal, onAbort };
|
|
219
221
|
if (signal !== undefined && onAbort !== undefined) {
|
|
220
222
|
signal.addEventListener('abort', onAbort, { once: true });
|
|
@@ -54,10 +54,13 @@ function isNonBlockingRecvEmpty(error: unknown): boolean {
|
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
export function isRouteRecvRetryable(error: unknown): boolean {
|
|
57
|
-
return
|
|
57
|
+
return (
|
|
58
|
+
isNonBlockingRecvEmpty(error) ||
|
|
58
59
|
(error instanceof zlink.RecvError &&
|
|
59
|
-
(error.result === zlink.RecvResult.InternalError ||
|
|
60
|
-
|
|
60
|
+
(error.result === zlink.RecvResult.InternalError ||
|
|
61
|
+
error.result === zlink.RecvResult.InvalidHandle) &&
|
|
62
|
+
isNativeBadAddress(error))
|
|
63
|
+
);
|
|
61
64
|
}
|
|
62
65
|
|
|
63
66
|
export function isPollerInterruptedError(error: unknown): boolean {
|
|
@@ -82,10 +85,12 @@ export function submitBindingPublish(
|
|
|
82
85
|
current!.submit();
|
|
83
86
|
} catch (error) {
|
|
84
87
|
const translated = translateBindingResultError(error);
|
|
85
|
-
if (
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
88
|
+
if (
|
|
89
|
+
translated instanceof ZLinkBackendResultError &&
|
|
90
|
+
translated.operation === 'submit' &&
|
|
91
|
+
(translated.result === SubmitResult.Backpressured ||
|
|
92
|
+
translated.result === SubmitResult.NotAdmitted)
|
|
93
|
+
) {
|
|
89
94
|
requireOneWayCompletion(
|
|
90
95
|
{ status: ZLinkSubmitStatus.Backpressured },
|
|
91
96
|
'Classic fanout publish'
|
|
@@ -95,10 +100,7 @@ export function submitBindingPublish(
|
|
|
95
100
|
}
|
|
96
101
|
}
|
|
97
102
|
|
|
98
|
-
export function submitBindingReply(
|
|
99
|
-
operation: ZLinkBindingReplyOperation,
|
|
100
|
-
payload: unknown
|
|
101
|
-
): void {
|
|
103
|
+
export function submitBindingReply(operation: ZLinkBindingReplyOperation, payload: unknown): void {
|
|
102
104
|
try {
|
|
103
105
|
let current: ZLinkBindingReplySubmitOperation | undefined;
|
|
104
106
|
const parts = Array.isArray(payload) ? payload : [payload];
|
|
@@ -158,7 +160,8 @@ export async function submitBindingRequest(
|
|
|
158
160
|
if (Array.isArray(payload)) {
|
|
159
161
|
for (const part of payload) {
|
|
160
162
|
const nativePart = toNativeMessageLike(part);
|
|
161
|
-
current =
|
|
163
|
+
current =
|
|
164
|
+
current === undefined ? operation.message(nativePart) : current.message(nativePart);
|
|
162
165
|
}
|
|
163
166
|
} else {
|
|
164
167
|
current = operation.message(toNativeMessageLike(payload));
|
|
@@ -187,19 +190,26 @@ export async function closeWithBusyRetry(target: { close(): void }): Promise<voi
|
|
|
187
190
|
throw error;
|
|
188
191
|
}
|
|
189
192
|
lastError = error;
|
|
190
|
-
await new Promise<void>(resolve => setImmediate(resolve));
|
|
193
|
+
await new Promise<void>((resolve) => setImmediate(resolve));
|
|
191
194
|
}
|
|
192
195
|
}
|
|
193
196
|
throw lastError;
|
|
194
197
|
}
|
|
195
198
|
|
|
196
199
|
function isBusyCloseError(error: unknown): boolean {
|
|
197
|
-
return
|
|
200
|
+
return (
|
|
201
|
+
error instanceof Error &&
|
|
202
|
+
'code' in error &&
|
|
203
|
+
[401, 404].includes((error as { code: number }).code)
|
|
204
|
+
);
|
|
198
205
|
}
|
|
199
206
|
|
|
200
207
|
function isSuccessfulOrAlreadyShutdownCloseError(error: unknown): boolean {
|
|
201
|
-
return
|
|
202
|
-
|
|
208
|
+
return (
|
|
209
|
+
isContextTerminatedError(error) ||
|
|
210
|
+
(error instanceof Error &&
|
|
211
|
+
'code' in error &&
|
|
212
|
+
[0, 402, 403].includes((error as { code: number }).code))
|
|
203
213
|
);
|
|
204
214
|
}
|
|
205
215
|
|
|
@@ -229,14 +239,16 @@ export function disableSocketLinger(target: unknown): void {
|
|
|
229
239
|
export function toNativeRoutingId(routingId: unknown): unknown {
|
|
230
240
|
if (typeof routingId === 'string') return zlink.RoutingId.from(routingId);
|
|
231
241
|
const toHex = (routingId as { readonly toHex?: unknown } | null)?.toHex;
|
|
232
|
-
return typeof toHex === 'function'
|
|
233
|
-
? zlink.RoutingId.fromHex(toHex.call(routingId))
|
|
234
|
-
: routingId;
|
|
242
|
+
return typeof toHex === 'function' ? zlink.RoutingId.fromHex(toHex.call(routingId)) : routingId;
|
|
235
243
|
}
|
|
236
244
|
|
|
237
245
|
function toNativeMessageLike(message: unknown): unknown {
|
|
238
|
-
if (
|
|
239
|
-
|
|
246
|
+
if (
|
|
247
|
+
message instanceof zlink.Message ||
|
|
248
|
+
Buffer.isBuffer(message) ||
|
|
249
|
+
message instanceof Uint8Array ||
|
|
250
|
+
typeof message === 'string'
|
|
251
|
+
) {
|
|
240
252
|
return message;
|
|
241
253
|
}
|
|
242
254
|
const data = (message as { readonly data?: unknown } | null)?.data;
|
|
@@ -252,7 +264,9 @@ export function translateBindingResultError(error: unknown): unknown {
|
|
|
252
264
|
return new ZLinkBackendResultError('submit', error.result, error.nativeErrno, { cause: error });
|
|
253
265
|
}
|
|
254
266
|
if (error instanceof zlink.RequestError) {
|
|
255
|
-
return new ZLinkBackendResultError('request', error.result, error.nativeErrno, {
|
|
267
|
+
return new ZLinkBackendResultError('request', error.result, error.nativeErrno, {
|
|
268
|
+
cause: error
|
|
269
|
+
});
|
|
256
270
|
}
|
|
257
271
|
return error;
|
|
258
272
|
}
|
|
@@ -1,23 +1,13 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
DealerSocket,
|
|
3
|
-
Message,
|
|
4
|
-
PubSocket
|
|
5
|
-
} from '@zlink-systems/zlink';
|
|
1
|
+
import type { DealerSocket, Message, PubSocket } from '@zlink-systems/zlink';
|
|
6
2
|
import { ZLinkConfigurationException } from '../../configuration';
|
|
7
|
-
import {
|
|
8
|
-
ZLinkSubmitStatus,
|
|
9
|
-
type ZLinkSubmitResult
|
|
10
|
-
} from '../../messaging/submission-result';
|
|
3
|
+
import { ZLinkSubmitStatus, type ZLinkSubmitResult } from '../../messaging/submission-result';
|
|
11
4
|
import {
|
|
12
5
|
decodeChannelReply,
|
|
13
6
|
encodeChannelEnvelopeParts,
|
|
14
7
|
ZLinkChannelMessageKind
|
|
15
8
|
} from '../../channels/channel-envelope';
|
|
16
9
|
import { throwIfAborted } from '../../abort';
|
|
17
|
-
import {
|
|
18
|
-
appendParts,
|
|
19
|
-
submitRequestOperation
|
|
20
|
-
} from '../../channels/channel-multipart';
|
|
10
|
+
import { appendParts, submitRequestOperation } from '../../channels/channel-multipart';
|
|
21
11
|
import type { ZLinkChannelClientTransport } from '../../channels/channel-transports';
|
|
22
12
|
import { runWithOutboundFlow } from '../../diagnostics/flow-context';
|
|
23
13
|
|
|
@@ -40,21 +30,25 @@ export class ZLinkDealerChannelClientTransport implements ZLinkChannelClientTran
|
|
|
40
30
|
throwIfAborted(signal);
|
|
41
31
|
// Call-scoped flow (spec 27 §4): the envelope flow pair does not outlive
|
|
42
32
|
// this outbound call.
|
|
43
|
-
await runWithOutboundFlow(
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
33
|
+
await runWithOutboundFlow(
|
|
34
|
+
true,
|
|
35
|
+
() =>
|
|
36
|
+
appendParts(
|
|
37
|
+
this.dealer.send(),
|
|
38
|
+
encodeChannelEnvelopeParts(
|
|
39
|
+
ZLinkChannelMessageKind.Command,
|
|
40
|
+
channelName,
|
|
41
|
+
packetName,
|
|
42
|
+
message,
|
|
43
|
+
undefined,
|
|
44
|
+
undefined,
|
|
45
|
+
undefined,
|
|
46
|
+
undefined,
|
|
47
|
+
true,
|
|
48
|
+
metadata
|
|
49
|
+
)
|
|
50
|
+
).submit().admitted
|
|
51
|
+
);
|
|
58
52
|
return { status: ZLinkSubmitStatus.Submitted };
|
|
59
53
|
}
|
|
60
54
|
|
|
@@ -67,23 +61,28 @@ export class ZLinkDealerChannelClientTransport implements ZLinkChannelClientTran
|
|
|
67
61
|
metadata: ReadonlyMap<string, string> = EMPTY_METADATA
|
|
68
62
|
): Promise<TReply> {
|
|
69
63
|
throwIfAborted(signal);
|
|
70
|
-
const operation = runWithOutboundFlow(true, () =>
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
64
|
+
const operation = runWithOutboundFlow(true, () =>
|
|
65
|
+
appendParts(
|
|
66
|
+
this.dealer.request(),
|
|
67
|
+
encodeChannelEnvelopeParts(
|
|
68
|
+
ZLinkChannelMessageKind.Request,
|
|
69
|
+
channelName,
|
|
70
|
+
packetName,
|
|
71
|
+
request,
|
|
72
|
+
timeoutMs,
|
|
73
|
+
undefined,
|
|
74
|
+
undefined,
|
|
75
|
+
undefined,
|
|
76
|
+
true,
|
|
77
|
+
metadata
|
|
78
|
+
)
|
|
83
79
|
)
|
|
84
|
-
)
|
|
80
|
+
);
|
|
85
81
|
if (timeoutMs !== undefined) operation.timeout(timeoutMs);
|
|
86
|
-
const reply = await submitRequestOperation(
|
|
82
|
+
const reply = await submitRequestOperation(
|
|
83
|
+
{ submit: () => operation.submit().reply },
|
|
84
|
+
'channel request'
|
|
85
|
+
);
|
|
87
86
|
try {
|
|
88
87
|
return decodeChannelReply<TReply>(reply);
|
|
89
88
|
} finally {
|
|
@@ -101,21 +100,23 @@ export class ZLinkDealerChannelClientTransport implements ZLinkChannelClientTran
|
|
|
101
100
|
if (this.publisher === undefined) {
|
|
102
101
|
throw new ZLinkConfigurationException('Channel publisher runtime is not started.');
|
|
103
102
|
}
|
|
104
|
-
runWithOutboundFlow(true, () =>
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
103
|
+
runWithOutboundFlow(true, () =>
|
|
104
|
+
appendParts(
|
|
105
|
+
this.publisher!.publish(topic),
|
|
106
|
+
encodeChannelEnvelopeParts(
|
|
107
|
+
ZLinkChannelMessageKind.Publish,
|
|
108
|
+
channelName,
|
|
109
|
+
packetName,
|
|
110
|
+
event,
|
|
111
|
+
undefined,
|
|
112
|
+
topic,
|
|
113
|
+
undefined,
|
|
114
|
+
undefined,
|
|
115
|
+
true,
|
|
116
|
+
metadata
|
|
117
|
+
)
|
|
118
|
+
).submit()
|
|
119
|
+
);
|
|
119
120
|
return { status: ZLinkSubmitStatus.Submitted };
|
|
120
121
|
}
|
|
121
122
|
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
BaseSocket,
|
|
3
|
-
PollEventFlagValue,
|
|
4
|
-
Socket
|
|
5
|
-
} from '@zlink-systems/zlink';
|
|
1
|
+
import type { BaseSocket, PollEventFlagValue, Socket } from '@zlink-systems/zlink';
|
|
6
2
|
import { zlink } from './node-backend-adapter-support';
|
|
7
3
|
|
|
8
4
|
/**
|
|
@@ -16,11 +12,7 @@ export class ZLinkNodeEventLoopPoller {
|
|
|
16
12
|
private readableHandler: () => void;
|
|
17
13
|
private disposed = false;
|
|
18
14
|
|
|
19
|
-
constructor(
|
|
20
|
-
socket: Socket,
|
|
21
|
-
pollCompletion: boolean,
|
|
22
|
-
readableHandler: () => void
|
|
23
|
-
) {
|
|
15
|
+
constructor(socket: Socket, pollCompletion: boolean, readableHandler: () => void) {
|
|
24
16
|
this.readableHandler = readableHandler;
|
|
25
17
|
try {
|
|
26
18
|
const pollEvents: PollEventFlagValue[] = [zlink.PollEventFlag.PollIn];
|
|
@@ -21,11 +21,15 @@ export class ZLinkNodeMeshBackendAdapter implements ZLinkMeshBackendAdapter {
|
|
|
21
21
|
}
|
|
22
22
|
): ZLinkBackendMeshNode {
|
|
23
23
|
if (options.trustProfile !== undefined) {
|
|
24
|
-
throw new Error(
|
|
24
|
+
throw new Error(
|
|
25
|
+
'M6A raw MeshNode trust profiles require the service admission security runtime.'
|
|
26
|
+
);
|
|
25
27
|
}
|
|
26
28
|
const bindingContext = context.nativeInstance;
|
|
27
29
|
if (!isBindingContext(bindingContext)) {
|
|
28
|
-
throw new TypeError(
|
|
30
|
+
throw new TypeError(
|
|
31
|
+
'Node MeshNode creation requires the Node binding Context owned by the host.'
|
|
32
|
+
);
|
|
29
33
|
}
|
|
30
34
|
return new ZLinkNodeRawMeshBackend(
|
|
31
35
|
options.meshName,
|
|
@@ -39,7 +43,10 @@ export class ZLinkNodeMeshBackendAdapter implements ZLinkMeshBackendAdapter {
|
|
|
39
43
|
}
|
|
40
44
|
|
|
41
45
|
function isBindingContext(value: unknown): value is Context {
|
|
42
|
-
return
|
|
43
|
-
|
|
44
|
-
|
|
46
|
+
return (
|
|
47
|
+
typeof value === 'object' &&
|
|
48
|
+
value !== null &&
|
|
49
|
+
typeof (value as { shutdown?: unknown }).shutdown === 'function' &&
|
|
50
|
+
typeof (value as { close?: unknown }).close === 'function'
|
|
51
|
+
);
|
|
45
52
|
}
|
|
@@ -2,9 +2,10 @@ import type { MonitorEvent } from '@zlink-systems/zlink';
|
|
|
2
2
|
import type { ZLinkBackendSocketMonitor, ZLinkBackendSocketMonitorEvent } from '../contracts';
|
|
3
3
|
import { zlink } from './node-backend-adapter-support';
|
|
4
4
|
|
|
5
|
-
export function wrapMonitorSocket(
|
|
6
|
-
|
|
7
|
-
):
|
|
5
|
+
export function wrapMonitorSocket(nativeInstance: {
|
|
6
|
+
close(): void;
|
|
7
|
+
recv(flags?: number): MonitorEvent | null;
|
|
8
|
+
}): ZLinkBackendSocketMonitor {
|
|
8
9
|
const handlers = new Set<(event: ZLinkBackendSocketMonitorEvent) => void>();
|
|
9
10
|
return {
|
|
10
11
|
nativeInstance,
|
|
@@ -73,10 +73,9 @@ class NodeRawHostPort implements ZLinkRawHostPort {
|
|
|
73
73
|
|
|
74
74
|
createRouter(): ZLinkRawRouterPort {
|
|
75
75
|
this.requireOpen();
|
|
76
|
-
return this.own(
|
|
77
|
-
createRouterSocket(this.context),
|
|
78
|
-
|
|
79
|
-
));
|
|
76
|
+
return this.own(
|
|
77
|
+
new NodeRawRouterPort(createRouterSocket(this.context), this.routerReceiveTimeoutMs)
|
|
78
|
+
);
|
|
80
79
|
}
|
|
81
80
|
|
|
82
81
|
createDealer(): ZLinkRawDealerPort {
|
|
@@ -133,11 +132,7 @@ abstract class NodeRawSocketPort<TSocket extends Socket> implements ZLinkRawSock
|
|
|
133
132
|
private closed = false;
|
|
134
133
|
|
|
135
134
|
protected constructor(protected readonly socket: TSocket) {
|
|
136
|
-
this.eventLoopPoller = new ZLinkNodeEventLoopPoller(
|
|
137
|
-
socket,
|
|
138
|
-
true,
|
|
139
|
-
() => {}
|
|
140
|
-
);
|
|
135
|
+
this.eventLoopPoller = new ZLinkNodeEventLoopPoller(socket, true, () => {});
|
|
141
136
|
}
|
|
142
137
|
|
|
143
138
|
setReadableHandler(handler: () => void): void {
|
|
@@ -233,9 +228,11 @@ class NodeRawRouterPort extends NodeRawSocketPort<RouterSocket> implements ZLink
|
|
|
233
228
|
private nextIncomingRequestSequence = 1n;
|
|
234
229
|
disconnectRid(routingId: string): void {
|
|
235
230
|
this.requireOpen();
|
|
236
|
-
(
|
|
237
|
-
|
|
238
|
-
|
|
231
|
+
(
|
|
232
|
+
this.socket as RouterSocket & {
|
|
233
|
+
disconnectRid(value: BindingRoutingId): void;
|
|
234
|
+
}
|
|
235
|
+
).disconnectRid(bindingRoutingId(routingId));
|
|
239
236
|
}
|
|
240
237
|
|
|
241
238
|
constructor(socket: RouterSocket, receiveTimeoutMs?: number) {
|
|
@@ -282,7 +279,10 @@ class NodeRawRouterPort extends NodeRawSocketPort<RouterSocket> implements ZLink
|
|
|
282
279
|
): Promise<readonly Buffer[]> {
|
|
283
280
|
this.requireOpen();
|
|
284
281
|
try {
|
|
285
|
-
const replies = await appendRequestParts(
|
|
282
|
+
const replies = await appendRequestParts(
|
|
283
|
+
this.socket.request(bindingRoutingId(targetRid)),
|
|
284
|
+
parts
|
|
285
|
+
)
|
|
286
286
|
.timeout(timeoutMs)
|
|
287
287
|
.submit().reply;
|
|
288
288
|
return copyAndClose(replies);
|
|
@@ -298,9 +298,8 @@ class NodeRawRouterPort extends NodeRawSocketPort<RouterSocket> implements ZLink
|
|
|
298
298
|
dontWait,
|
|
299
299
|
() => {
|
|
300
300
|
const current = this.nextIncomingRequestSequence;
|
|
301
|
-
this.nextIncomingRequestSequence =
|
|
302
|
-
? 1n
|
|
303
|
-
: current + 1n;
|
|
301
|
+
this.nextIncomingRequestSequence =
|
|
302
|
+
current === BigInt(Number.MAX_SAFE_INTEGER) ? 1n : current + 1n;
|
|
304
303
|
return current;
|
|
305
304
|
},
|
|
306
305
|
(targetRid, replyToken, parts) => {
|
|
@@ -333,7 +332,9 @@ class NodeRawDealerPort extends NodeRawSocketPort<DealerSocket> implements ZLink
|
|
|
333
332
|
|
|
334
333
|
async request(parts: readonly Uint8Array[], timeoutMs: number): Promise<readonly Buffer[]> {
|
|
335
334
|
this.requireOpen();
|
|
336
|
-
const replies = await appendRequestParts(this.socket.request(), parts)
|
|
335
|
+
const replies = await appendRequestParts(this.socket.request(), parts)
|
|
336
|
+
.timeout(timeoutMs)
|
|
337
|
+
.submit().reply;
|
|
337
338
|
return copyAndClose(replies);
|
|
338
339
|
}
|
|
339
340
|
|
|
@@ -412,7 +413,8 @@ function appendReplyParts(
|
|
|
412
413
|
}
|
|
413
414
|
|
|
414
415
|
function requireParts(parts: readonly Uint8Array[]): [Uint8Array, ...Uint8Array[]] {
|
|
415
|
-
if (parts.length === 0)
|
|
416
|
+
if (parts.length === 0)
|
|
417
|
+
throw new TypeError('Raw multipart operation requires at least one part.');
|
|
416
418
|
return parts as [Uint8Array, ...Uint8Array[]];
|
|
417
419
|
}
|
|
418
420
|
|
|
@@ -429,10 +431,7 @@ function receiveRecord(
|
|
|
429
431
|
reply?: RawReceivedReply
|
|
430
432
|
): ZLinkRawReceivedRecord | undefined {
|
|
431
433
|
const received = new Received();
|
|
432
|
-
if (!socket.recv(
|
|
433
|
-
received,
|
|
434
|
-
dontWait ? RecvFlags.DontWait : RecvFlags.None
|
|
435
|
-
)) {
|
|
434
|
+
if (!socket.recv(received, dontWait ? RecvFlags.DontWait : RecvFlags.None)) {
|
|
436
435
|
received.close();
|
|
437
436
|
return undefined;
|
|
438
437
|
}
|
|
@@ -442,11 +441,12 @@ function receiveRecord(
|
|
|
442
441
|
const sourceRoute = received.routingId?.toBytes() ?? Buffer.alloc(0);
|
|
443
442
|
const requestSeq = received.replyToken === null ? undefined : nextRequestSequence?.();
|
|
444
443
|
const replyToken = received.replyToken;
|
|
445
|
-
const receivedReply =
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
444
|
+
const receivedReply =
|
|
445
|
+
replyToken === null
|
|
446
|
+
? undefined
|
|
447
|
+
: reply === undefined
|
|
448
|
+
? received.reply()
|
|
449
|
+
: (parts: readonly Uint8Array[]) => reply(sourceRoute, replyToken, parts);
|
|
450
450
|
return {
|
|
451
451
|
sourceRid,
|
|
452
452
|
sourceRoute,
|
|
@@ -462,7 +462,7 @@ function receiveRecord(
|
|
|
462
462
|
appendReplyParts(receivedReply, parts).submit();
|
|
463
463
|
}
|
|
464
464
|
}),
|
|
465
|
-
parts: received.parts.map(part => part.toBytes()),
|
|
465
|
+
parts: received.parts.map((part) => part.toBytes()),
|
|
466
466
|
close: () => {
|
|
467
467
|
if (closed) return;
|
|
468
468
|
closed = true;
|
|
@@ -477,7 +477,7 @@ function receiveRecord(
|
|
|
477
477
|
|
|
478
478
|
function copyAndClose(messages: readonly Message[]): readonly Buffer[] {
|
|
479
479
|
try {
|
|
480
|
-
return messages.map(message => message.toBytes());
|
|
480
|
+
return messages.map((message) => message.toBytes());
|
|
481
481
|
} finally {
|
|
482
482
|
for (const message of messages) message.close();
|
|
483
483
|
}
|