@zlink-systems/framework 0.10.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/LICENSE +105 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/contracts/Actors/ZLinkActor.d.ts +7 -0
- package/dist/contracts/Actors/ZLinkActor.js +2 -0
- package/dist/contracts/Actors/ZLinkActorClient.d.ts +15 -0
- package/dist/contracts/Actors/ZLinkActorClient.js +2 -0
- package/dist/contracts/Actors/ZLinkActorContext.d.ts +14 -0
- package/dist/contracts/Actors/ZLinkActorContext.js +2 -0
- package/dist/contracts/Actors/ZLinkActorFactory.d.ts +34 -0
- package/dist/contracts/Actors/ZLinkActorFactory.js +2 -0
- package/dist/contracts/Actors/ZLinkActorManager.d.ts +34 -0
- package/dist/contracts/Actors/ZLinkActorManager.js +2 -0
- package/dist/contracts/Actors/index.d.ts +5 -0
- package/dist/contracts/Actors/index.js +21 -0
- package/dist/contracts/Channels/Calls.d.ts +28 -0
- package/dist/contracts/Channels/Calls.js +2 -0
- package/dist/contracts/Channels/IZLinkChannelClient.d.ts +5 -0
- package/dist/contracts/Channels/IZLinkChannelClient.js +2 -0
- package/dist/contracts/Channels/IZLinkFanoutClient.d.ts +11 -0
- package/dist/contracts/Channels/IZLinkFanoutClient.js +2 -0
- package/dist/contracts/Channels/RouteCalls.d.ts +11 -0
- package/dist/contracts/Channels/RouteCalls.js +2 -0
- package/dist/contracts/Channels/index.d.ts +4 -0
- package/dist/contracts/Channels/index.js +20 -0
- package/dist/contracts/Codecs/IZLinkCodecRegistryBuilder.d.ts +14 -0
- package/dist/contracts/Codecs/IZLinkCodecRegistryBuilder.js +2 -0
- package/dist/contracts/Codecs/ZLinkMessageSerializer.d.ts +5 -0
- package/dist/contracts/Codecs/ZLinkMessageSerializer.js +2 -0
- package/dist/contracts/Codecs/index.d.ts +2 -0
- package/dist/contracts/Codecs/index.js +18 -0
- package/dist/contracts/Common/ActorRef.d.ts +7 -0
- package/dist/contracts/Common/ActorRef.js +2 -0
- package/dist/contracts/Common/CoreTypes.d.ts +6 -0
- package/dist/contracts/Common/CoreTypes.js +2 -0
- package/dist/contracts/Common/Message.d.ts +9 -0
- package/dist/contracts/Common/Message.js +2 -0
- package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +12 -0
- package/dist/contracts/Common/ZLinkEncodedPayload.js +41 -0
- package/dist/contracts/Common/ZLinkMessage.d.ts +25 -0
- package/dist/contracts/Common/ZLinkMessage.js +127 -0
- package/dist/contracts/Common/ZLinkMessageMetadata.d.ts +10 -0
- package/dist/contracts/Common/ZLinkMessageMetadata.js +49 -0
- package/dist/contracts/Common/ZLinkProviderResolver.d.ts +5 -0
- package/dist/contracts/Common/ZLinkProviderResolver.js +2 -0
- package/dist/contracts/Common/encoded-payload-storage.d.ts +3 -0
- package/dist/contracts/Common/encoded-payload-storage.js +18 -0
- package/dist/contracts/Common/index.d.ts +5 -0
- package/dist/contracts/Common/index.js +24 -0
- package/dist/contracts/Configuration/Builders.d.ts +153 -0
- package/dist/contracts/Configuration/Builders.js +2 -0
- package/dist/contracts/Configuration/CodecContentType.d.ts +2 -0
- package/dist/contracts/Configuration/CodecContentType.js +68 -0
- package/dist/contracts/Configuration/CodecSerializerSelection.d.ts +9 -0
- package/dist/contracts/Configuration/CodecSerializerSelection.js +15 -0
- package/dist/contracts/Configuration/Configs.d.ts +23 -0
- package/dist/contracts/Configuration/Configs.js +2 -0
- package/dist/contracts/Configuration/ConfigurationException.d.ts +3 -0
- package/dist/contracts/Configuration/ConfigurationException.js +10 -0
- package/dist/contracts/Configuration/Connections.d.ts +5 -0
- package/dist/contracts/Configuration/Connections.js +2 -0
- package/dist/contracts/Configuration/DiagnosticsValidation.d.ts +3 -0
- package/dist/contracts/Configuration/DiagnosticsValidation.js +23 -0
- package/dist/contracts/Configuration/EndpointNotation.d.ts +77 -0
- package/dist/contracts/Configuration/EndpointNotation.js +218 -0
- package/dist/contracts/Configuration/InternalDefaults.d.ts +7 -0
- package/dist/contracts/Configuration/InternalDefaults.js +47 -0
- package/dist/contracts/Configuration/ObjectRoles.d.ts +38 -0
- package/dist/contracts/Configuration/ObjectRoles.js +13 -0
- package/dist/contracts/Configuration/Registration.d.ts +11 -0
- package/dist/contracts/Configuration/Registration.js +162 -0
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +14 -0
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +61 -0
- package/dist/contracts/Configuration/RegistrationBuilders.d.ts +61 -0
- package/dist/contracts/Configuration/RegistrationBuilders.js +1181 -0
- package/dist/contracts/Configuration/RegistrationCodecRegistry.d.ts +19 -0
- package/dist/contracts/Configuration/RegistrationCodecRegistry.js +79 -0
- package/dist/contracts/Configuration/RegistrationNormalizers.d.ts +23 -0
- package/dist/contracts/Configuration/RegistrationNormalizers.js +319 -0
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +414 -0
- package/dist/contracts/Configuration/RegistrationTypes.js +2 -0
- package/dist/contracts/Configuration/RegistrationValidators.d.ts +2 -0
- package/dist/contracts/Configuration/RegistrationValidators.js +461 -0
- package/dist/contracts/Configuration/RouteChannelInternalState.d.ts +10 -0
- package/dist/contracts/Configuration/RouteChannelInternalState.js +39 -0
- package/dist/contracts/Configuration/RuntimeEndpointConnections.d.ts +9 -0
- package/dist/contracts/Configuration/RuntimeEndpointConnections.js +80 -0
- package/dist/contracts/Configuration/SendTimeoutValidation.d.ts +2 -0
- package/dist/contracts/Configuration/SendTimeoutValidation.js +16 -0
- package/dist/contracts/Configuration/TimerRegistrationValidator.d.ts +2 -0
- package/dist/contracts/Configuration/TimerRegistrationValidator.js +24 -0
- package/dist/contracts/Configuration/index.d.ts +5 -0
- package/dist/contracts/Configuration/index.js +18 -0
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +181 -0
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.js +89 -0
- package/dist/contracts/Dispatch/ZLinkFlowOrigin.d.ts +1 -0
- package/dist/contracts/Dispatch/ZLinkFlowOrigin.js +2 -0
- package/dist/contracts/Dispatch/index.d.ts +2 -0
- package/dist/contracts/Dispatch/index.js +18 -0
- package/dist/contracts/Errors/ZLinkFrameworkException.d.ts +20 -0
- package/dist/contracts/Errors/ZLinkFrameworkException.js +29 -0
- package/dist/contracts/Errors/index.d.ts +1 -0
- package/dist/contracts/Errors/index.js +6 -0
- package/dist/contracts/Eventing/Metrics.d.ts +29 -0
- package/dist/contracts/Eventing/Metrics.js +4 -0
- package/dist/contracts/Eventing/index.d.ts +1 -0
- package/dist/contracts/Eventing/index.js +17 -0
- package/dist/contracts/Handlers/Attributes.d.ts +24 -0
- package/dist/contracts/Handlers/Attributes.js +84 -0
- package/dist/contracts/Handlers/Contexts.d.ts +18 -0
- package/dist/contracts/Handlers/Contexts.js +2 -0
- package/dist/contracts/Handlers/IZLinkChannelHandlers.d.ts +43 -0
- package/dist/contracts/Handlers/IZLinkChannelHandlers.js +2 -0
- package/dist/contracts/Handlers/IZLinkHandlerFilter.d.ts +15 -0
- package/dist/contracts/Handlers/IZLinkHandlerFilter.js +11 -0
- package/dist/contracts/Handlers/JsonContract.d.ts +46 -0
- package/dist/contracts/Handlers/JsonContract.js +137 -0
- package/dist/contracts/Handlers/ZLinkHandlerFilterNext.d.ts +1 -0
- package/dist/contracts/Handlers/ZLinkHandlerFilterNext.js +2 -0
- package/dist/contracts/Handlers/index.d.ts +5 -0
- package/dist/contracts/Handlers/index.js +33 -0
- package/dist/contracts/Locations/ActorTransfer.d.ts +41 -0
- package/dist/contracts/Locations/ActorTransfer.js +2 -0
- package/dist/contracts/Locations/Authority.d.ts +296 -0
- package/dist/contracts/Locations/Authority.js +17 -0
- package/dist/contracts/Locations/Diagnostics.d.ts +42 -0
- package/dist/contracts/Locations/Diagnostics.js +12 -0
- package/dist/contracts/Locations/Keys.d.ts +86 -0
- package/dist/contracts/Locations/Keys.js +2 -0
- package/dist/contracts/Locations/Models.d.ts +7 -0
- package/dist/contracts/Locations/Models.js +23 -0
- package/dist/contracts/Locations/Options.d.ts +23 -0
- package/dist/contracts/Locations/Options.js +20 -0
- package/dist/contracts/Locations/Readiness.d.ts +5 -0
- package/dist/contracts/Locations/Readiness.js +2 -0
- package/dist/contracts/Locations/RelocationStore.d.ts +38 -0
- package/dist/contracts/Locations/RelocationStore.js +2 -0
- package/dist/contracts/Locations/Resolvers.d.ts +4 -0
- package/dist/contracts/Locations/Resolvers.js +2 -0
- package/dist/contracts/Locations/Rows.d.ts +152 -0
- package/dist/contracts/Locations/Rows.js +19 -0
- package/dist/contracts/Locations/RuntimeQuery.d.ts +25 -0
- package/dist/contracts/Locations/RuntimeQuery.js +2 -0
- package/dist/contracts/Locations/Stores.d.ts +88 -0
- package/dist/contracts/Locations/Stores.js +2 -0
- package/dist/contracts/Locations/Values.d.ts +27 -0
- package/dist/contracts/Locations/Values.js +36 -0
- package/dist/contracts/Locations/Watch.d.ts +14 -0
- package/dist/contracts/Locations/Watch.js +12 -0
- package/dist/contracts/Locations/Writes.d.ts +48 -0
- package/dist/contracts/Locations/Writes.js +15 -0
- package/dist/contracts/Locations/index.d.ts +12 -0
- package/dist/contracts/Locations/index.js +30 -0
- package/dist/contracts/RouteMesh/Contracts.d.ts +102 -0
- package/dist/contracts/RouteMesh/Contracts.js +39 -0
- package/dist/contracts/RouteMesh/RuntimeTopology.d.ts +165 -0
- package/dist/contracts/RouteMesh/RuntimeTopology.js +38 -0
- package/dist/contracts/RouteMesh/index.d.ts +2 -0
- package/dist/contracts/RouteMesh/index.js +18 -0
- package/dist/contracts/Spots/Builders.d.ts +10 -0
- package/dist/contracts/Spots/Builders.js +2 -0
- package/dist/contracts/Spots/Contracts.d.ts +110 -0
- package/dist/contracts/Spots/Contracts.js +9 -0
- package/dist/contracts/Spots/SpotKind.d.ts +8 -0
- package/dist/contracts/Spots/SpotKind.js +28 -0
- package/dist/contracts/Spots/ZLinkSpot.d.ts +62 -0
- package/dist/contracts/Spots/ZLinkSpot.js +15 -0
- package/dist/contracts/Spots/index.d.ts +3 -0
- package/dist/contracts/Spots/index.js +19 -0
- package/dist/contracts/Streams/BoundSessionContracts.d.ts +8 -0
- package/dist/contracts/Streams/BoundSessionContracts.js +2 -0
- package/dist/contracts/Streams/IZLinkSession.d.ts +44 -0
- package/dist/contracts/Streams/IZLinkSession.js +2 -0
- package/dist/contracts/Streams/IZLinkSessionActor.d.ts +15 -0
- package/dist/contracts/Streams/IZLinkSessionActor.js +2 -0
- package/dist/contracts/Streams/IZLinkSessionPacketHandler.d.ts +9 -0
- package/dist/contracts/Streams/IZLinkSessionPacketHandler.js +2 -0
- package/dist/contracts/Streams/IZLinkStream.d.ts +9 -0
- package/dist/contracts/Streams/IZLinkStream.js +2 -0
- package/dist/contracts/Streams/ZLinkMessageMetadata.d.ts +1 -0
- package/dist/contracts/Streams/ZLinkMessageMetadata.js +2 -0
- package/dist/contracts/Streams/ZLinkStreamCompression.d.ts +8 -0
- package/dist/contracts/Streams/ZLinkStreamCompression.js +2 -0
- package/dist/contracts/Streams/ZLinkStreamError.d.ts +8 -0
- package/dist/contracts/Streams/ZLinkStreamError.js +8 -0
- package/dist/contracts/Streams/index.d.ts +8 -0
- package/dist/contracts/Streams/index.js +24 -0
- package/dist/contracts/Timers/IZLinkTimer.d.ts +5 -0
- package/dist/contracts/Timers/IZLinkTimer.js +2 -0
- package/dist/contracts/Timers/ZLinkTimerOptions.d.ts +10 -0
- package/dist/contracts/Timers/ZLinkTimerOptions.js +9 -0
- package/dist/contracts/Timers/ZLinkTimerTick.d.ts +12 -0
- package/dist/contracts/Timers/ZLinkTimerTick.js +2 -0
- package/dist/contracts/Timers/index.d.ts +3 -0
- package/dist/contracts/Timers/index.js +19 -0
- package/dist/contracts/index.d.ts +25 -0
- package/dist/contracts/index.js +45 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +17 -0
- package/dist/internal.d.ts +26 -0
- package/dist/internal.js +48 -0
- package/dist/location-store-integration.d.ts +5 -0
- package/dist/location-store-integration.js +31 -0
- package/dist/nest-integration.d.ts +49 -0
- package/dist/nest-integration.js +143 -0
- package/dist/runtime/abort.d.ts +13 -0
- package/dist/runtime/abort.js +71 -0
- package/dist/runtime/actors/actor-authority-payload-codec.d.ts +33 -0
- package/dist/runtime/actors/actor-authority-payload-codec.js +366 -0
- package/dist/runtime/actors/actor-authority-publication.d.ts +28 -0
- package/dist/runtime/actors/actor-authority-publication.js +207 -0
- package/dist/runtime/actors/actor-client.d.ts +36 -0
- package/dist/runtime/actors/actor-client.js +612 -0
- package/dist/runtime/actors/actor-context.d.ts +26 -0
- package/dist/runtime/actors/actor-context.js +433 -0
- package/dist/runtime/actors/actor-creation.d.ts +19 -0
- package/dist/runtime/actors/actor-creation.js +158 -0
- package/dist/runtime/actors/actor-execution-context.d.ts +6 -0
- package/dist/runtime/actors/actor-execution-context.js +27 -0
- package/dist/runtime/actors/actor-handoff.d.ts +191 -0
- package/dist/runtime/actors/actor-handoff.js +1252 -0
- package/dist/runtime/actors/actor-join-deferred-scope.d.ts +11 -0
- package/dist/runtime/actors/actor-join-deferred-scope.js +144 -0
- package/dist/runtime/actors/actor-join-relocation.d.ts +38 -0
- package/dist/runtime/actors/actor-join-relocation.js +2 -0
- package/dist/runtime/actors/actor-lifecycle-snapshot.d.ts +21 -0
- package/dist/runtime/actors/actor-lifecycle-snapshot.js +58 -0
- package/dist/runtime/actors/actor-local-native-join.d.ts +27 -0
- package/dist/runtime/actors/actor-local-native-join.js +409 -0
- package/dist/runtime/actors/actor-mailbox.d.ts +10 -0
- package/dist/runtime/actors/actor-mailbox.js +53 -0
- package/dist/runtime/actors/actor-message-follow-context.d.ts +46 -0
- package/dist/runtime/actors/actor-message-follow-context.js +257 -0
- package/dist/runtime/actors/actor-native-lookup.d.ts +4 -0
- package/dist/runtime/actors/actor-native-lookup.js +30 -0
- package/dist/runtime/actors/actor-packet-relay-wire.d.ts +73 -0
- package/dist/runtime/actors/actor-packet-relay-wire.js +144 -0
- package/dist/runtime/actors/actor-remote-joiner.d.ts +37 -0
- package/dist/runtime/actors/actor-remote-joiner.js +122 -0
- package/dist/runtime/actors/actor-remote-wire.d.ts +73 -0
- package/dist/runtime/actors/actor-remote-wire.js +84 -0
- package/dist/runtime/actors/actor-retry-delay.d.ts +5 -0
- package/dist/runtime/actors/actor-retry-delay.js +40 -0
- package/dist/runtime/actors/actor-routed-join-transport.d.ts +33 -0
- package/dist/runtime/actors/actor-routed-join-transport.js +2 -0
- package/dist/runtime/actors/actor-routed-json-request.d.ts +11 -0
- package/dist/runtime/actors/actor-routed-json-request.js +39 -0
- package/dist/runtime/actors/actor-runtime-contracts.d.ts +63 -0
- package/dist/runtime/actors/actor-runtime-contracts.js +2 -0
- package/dist/runtime/actors/actor-runtime-state.d.ts +152 -0
- package/dist/runtime/actors/actor-runtime-state.js +545 -0
- package/dist/runtime/actors/actor-source-transfer.d.ts +27 -0
- package/dist/runtime/actors/actor-source-transfer.js +2 -0
- package/dist/runtime/actors/actor-transfer-registry.d.ts +18 -0
- package/dist/runtime/actors/actor-transfer-registry.js +71 -0
- package/dist/runtime/actors/actor-transport-delivery-gate.d.ts +6 -0
- package/dist/runtime/actors/actor-transport-delivery-gate.js +4 -0
- package/dist/runtime/actors/bound-session-wire.d.ts +81 -0
- package/dist/runtime/actors/bound-session-wire.js +184 -0
- package/dist/runtime/actors/deferred-join-accepted-journal.d.ts +47 -0
- package/dist/runtime/actors/deferred-join-accepted-journal.js +962 -0
- package/dist/runtime/actors/index.d.ts +79 -0
- package/dist/runtime/actors/index.js +639 -0
- package/dist/runtime/actors/post-commit-actor-binder.d.ts +18 -0
- package/dist/runtime/actors/post-commit-actor-binder.js +68 -0
- package/dist/runtime/actors/post-commit-actor-location.d.ts +19 -0
- package/dist/runtime/actors/post-commit-actor-location.js +72 -0
- package/dist/runtime/actors/spot-actor-dispatch.d.ts +59 -0
- package/dist/runtime/actors/spot-actor-dispatch.js +179 -0
- package/dist/runtime/actors/transferred-actor-rollback.d.ts +16 -0
- package/dist/runtime/actors/transferred-actor-rollback.js +91 -0
- package/dist/runtime/admission.d.ts +20 -0
- package/dist/runtime/admission.js +166 -0
- package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +57 -0
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +185 -0
- package/dist/runtime/application-jobs/application-job-queue-handler-start-gate.d.ts +8 -0
- package/dist/runtime/application-jobs/application-job-queue-handler-start-gate.js +8 -0
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +17 -0
- package/dist/runtime/application-jobs/application-job-queue-scope.js +57 -0
- package/dist/runtime/application-jobs/contracts.d.ts +19 -0
- package/dist/runtime/application-jobs/contracts.js +2 -0
- package/dist/runtime/application-jobs/receive-flow-controller.d.ts +32 -0
- package/dist/runtime/application-jobs/receive-flow-controller.js +165 -0
- package/dist/runtime/backend/contracts/index.d.ts +487 -0
- package/dist/runtime/backend/contracts/index.js +29 -0
- package/dist/runtime/backend/index.d.ts +9 -0
- package/dist/runtime/backend/index.js +25 -0
- package/dist/runtime/backend/mesh-actor-session-node-adapter.d.ts +3 -0
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +51 -0
- package/dist/runtime/backend/mesh-completion-table.d.ts +34 -0
- package/dist/runtime/backend/mesh-completion-table.js +124 -0
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +48 -0
- package/dist/runtime/backend/mesh-dispatch-pump.js +322 -0
- package/dist/runtime/backend/mesh-record-dispatcher.d.ts +19 -0
- package/dist/runtime/backend/mesh-record-dispatcher.js +53 -0
- package/dist/runtime/backend/node/index.d.ts +4 -0
- package/dist/runtime/backend/node/index.js +22 -0
- package/dist/runtime/backend/node/node-backend-adapter-factory.d.ts +12 -0
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +161 -0
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +52 -0
- package/dist/runtime/backend/node/node-backend-adapter-support.js +203 -0
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +13 -0
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +52 -0
- package/dist/runtime/backend/node/node-mesh-backend-adapter.d.ts +11 -0
- package/dist/runtime/backend/node/node-mesh-backend-adapter.js +23 -0
- package/dist/runtime/backend/node/node-monitor-backend-adapter.d.ts +6 -0
- package/dist/runtime/backend/node/node-monitor-backend-adapter.js +38 -0
- package/dist/runtime/backend/node/node-raw-binding-port.d.ts +8 -0
- package/dist/runtime/backend/node/node-raw-binding-port.js +411 -0
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +266 -0
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +1707 -0
- package/dist/runtime/backend/node/node-socket-backend-adapter.d.ts +9 -0
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +286 -0
- package/dist/runtime/backend/node-backend-adapter.d.ts +9 -0
- package/dist/runtime/backend/node-backend-adapter.js +12 -0
- package/dist/runtime/backend/raw-binding-port.d.ts +58 -0
- package/dist/runtime/backend/raw-binding-port.js +2 -0
- package/dist/runtime/backend/runtime-message.d.ts +14 -0
- package/dist/runtime/backend/runtime-message.js +44 -0
- package/dist/runtime/backend/runtime-values.d.ts +78 -0
- package/dist/runtime/backend/runtime-values.js +66 -0
- package/dist/runtime/channels/channel-autoconnect.d.ts +14 -0
- package/dist/runtime/channels/channel-autoconnect.js +23 -0
- package/dist/runtime/channels/channel-clients.d.ts +50 -0
- package/dist/runtime/channels/channel-clients.js +329 -0
- package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +76 -0
- package/dist/runtime/channels/channel-dispatch-pipeline.js +237 -0
- package/dist/runtime/channels/channel-dispatch-services.d.ts +52 -0
- package/dist/runtime/channels/channel-dispatch-services.js +132 -0
- package/dist/runtime/channels/channel-dispatchers.d.ts +125 -0
- package/dist/runtime/channels/channel-dispatchers.js +575 -0
- package/dist/runtime/channels/channel-envelope-inspection.d.ts +25 -0
- package/dist/runtime/channels/channel-envelope-inspection.js +96 -0
- package/dist/runtime/channels/channel-envelope.d.ts +73 -0
- package/dist/runtime/channels/channel-envelope.js +546 -0
- package/dist/runtime/channels/channel-framework-packets.d.ts +2 -0
- package/dist/runtime/channels/channel-framework-packets.js +6 -0
- package/dist/runtime/channels/channel-multipart.d.ts +16 -0
- package/dist/runtime/channels/channel-multipart.js +31 -0
- package/dist/runtime/channels/channel-outbound-operations.d.ts +33 -0
- package/dist/runtime/channels/channel-outbound-operations.js +343 -0
- package/dist/runtime/channels/channel-receive-loops.d.ts +151 -0
- package/dist/runtime/channels/channel-receive-loops.js +728 -0
- package/dist/runtime/channels/channel-receive-task-tracker.d.ts +14 -0
- package/dist/runtime/channels/channel-receive-task-tracker.js +37 -0
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +77 -0
- package/dist/runtime/channels/channel-runtime-lifecycle.js +630 -0
- package/dist/runtime/channels/channel-runtime-manager.d.ts +84 -0
- package/dist/runtime/channels/channel-runtime-manager.js +193 -0
- package/dist/runtime/channels/channel-socket-options.d.ts +18 -0
- package/dist/runtime/channels/channel-socket-options.js +119 -0
- package/dist/runtime/channels/channel-socket-registry.d.ts +157 -0
- package/dist/runtime/channels/channel-socket-registry.js +1428 -0
- package/dist/runtime/channels/channel-transports.d.ts +126 -0
- package/dist/runtime/channels/channel-transports.js +448 -0
- package/dist/runtime/channels/client-server-location-runtime.d.ts +41 -0
- package/dist/runtime/channels/client-server-location-runtime.js +465 -0
- package/dist/runtime/channels/client-server-service-wire.d.ts +48 -0
- package/dist/runtime/channels/client-server-service-wire.js +306 -0
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +22 -0
- package/dist/runtime/channels/dispatch-error-reporter.js +133 -0
- package/dist/runtime/channels/fanout-location-runtime.d.ts +38 -0
- package/dist/runtime/channels/fanout-location-runtime.js +356 -0
- package/dist/runtime/channels/fanout-service-wire.d.ts +12 -0
- package/dist/runtime/channels/fanout-service-wire.js +29 -0
- package/dist/runtime/channels/handler-filter-scope.d.ts +8 -0
- package/dist/runtime/channels/handler-filter-scope.js +11 -0
- package/dist/runtime/channels/index.d.ts +9 -0
- package/dist/runtime/channels/index.js +30 -0
- package/dist/runtime/channels/local-spot-route-transport.d.ts +9 -0
- package/dist/runtime/channels/local-spot-route-transport.js +40 -0
- package/dist/runtime/channels/route-disconnected-error.d.ts +3 -0
- package/dist/runtime/channels/route-disconnected-error.js +10 -0
- package/dist/runtime/channels/route-member-snapshot.d.ts +10 -0
- package/dist/runtime/channels/route-member-snapshot.js +55 -0
- package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +12 -0
- package/dist/runtime/channels/router-socket-spot-route-transport.js +43 -0
- package/dist/runtime/channels/source-spot-router.d.ts +10 -0
- package/dist/runtime/channels/source-spot-router.js +46 -0
- package/dist/runtime/channels/spot-direct-envelope.d.ts +5 -0
- package/dist/runtime/channels/spot-direct-envelope.js +29 -0
- package/dist/runtime/channels/spot-node-route-transport.d.ts +13 -0
- package/dist/runtime/channels/spot-node-route-transport.js +60 -0
- package/dist/runtime/channels/spot-route-bridge-transport.d.ts +14 -0
- package/dist/runtime/channels/spot-route-bridge-transport.js +58 -0
- package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +50 -0
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +128 -0
- package/dist/runtime/channels/spot-route-target-resolver.d.ts +16 -0
- package/dist/runtime/channels/spot-route-target-resolver.js +92 -0
- package/dist/runtime/codecs/index.d.ts +14 -0
- package/dist/runtime/codecs/index.js +44 -0
- package/dist/runtime/configuration/index.d.ts +1 -0
- package/dist/runtime/configuration/index.js +17 -0
- package/dist/runtime/diagnostics/dispatch-error-port.d.ts +8 -0
- package/dist/runtime/diagnostics/dispatch-error-port.js +2 -0
- package/dist/runtime/diagnostics/flow-context.d.ts +21 -0
- package/dist/runtime/diagnostics/flow-context.js +68 -0
- package/dist/runtime/diagnostics/index.d.ts +82 -0
- package/dist/runtime/diagnostics/index.js +335 -0
- package/dist/runtime/diagnostics/internal-event-contracts.d.ts +139 -0
- package/dist/runtime/diagnostics/internal-event-contracts.js +68 -0
- package/dist/runtime/diagnostics/message-flow.d.ts +55 -0
- package/dist/runtime/diagnostics/message-flow.js +420 -0
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +123 -0
- package/dist/runtime/diagnostics/runtime-metrics.js +454 -0
- package/dist/runtime/diagnostics/runtime-observation-queue.d.ts +58 -0
- package/dist/runtime/diagnostics/runtime-observation-queue.js +324 -0
- package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +33 -0
- package/dist/runtime/diagnostics/topology-runtime-projections.js +255 -0
- package/dist/runtime/execution/index.d.ts +114 -0
- package/dist/runtime/execution/index.js +363 -0
- package/dist/runtime/execution/serial-execution-queue.d.ts +94 -0
- package/dist/runtime/execution/serial-execution-queue.js +411 -0
- package/dist/runtime/execution/serial-work-size.d.ts +4 -0
- package/dist/runtime/execution/serial-work-size.js +28 -0
- package/dist/runtime/execution/state-lane.d.ts +28 -0
- package/dist/runtime/execution/state-lane.js +105 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +72 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +333 -0
- package/dist/runtime/foundation/event-loop-resources.d.ts +37 -0
- package/dist/runtime/foundation/event-loop-resources.js +163 -0
- package/dist/runtime/foundation/index.d.ts +18 -0
- package/dist/runtime/foundation/index.js +34 -0
- package/dist/runtime/foundation/message-follow-suppression-registry.d.ts +38 -0
- package/dist/runtime/foundation/message-follow-suppression-registry.js +89 -0
- package/dist/runtime/foundation/operation-identity.d.ts +12 -0
- package/dist/runtime/foundation/operation-identity.js +33 -0
- package/dist/runtime/foundation/operation-registry.d.ts +42 -0
- package/dist/runtime/foundation/operation-registry.js +146 -0
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +143 -0
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +1349 -0
- package/dist/runtime/foundation/route-mesh-connection-policy.d.ts +3 -0
- package/dist/runtime/foundation/route-mesh-connection-policy.js +13 -0
- package/dist/runtime/foundation/runtime-state-projections.d.ts +13 -0
- package/dist/runtime/foundation/runtime-state-projections.js +44 -0
- package/dist/runtime/foundation/service-authority-payload-codec.d.ts +56 -0
- package/dist/runtime/foundation/service-authority-payload-codec.js +411 -0
- package/dist/runtime/foundation/service-discovery-registry.d.ts +42 -0
- package/dist/runtime/foundation/service-discovery-registry.js +175 -0
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.d.ts +19 -0
- package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +287 -0
- package/dist/runtime/foundation/service-liveness-registry.d.ts +28 -0
- package/dist/runtime/foundation/service-liveness-registry.js +109 -0
- package/dist/runtime/foundation/service-mailbox.d.ts +60 -0
- package/dist/runtime/foundation/service-mailbox.js +283 -0
- package/dist/runtime/foundation/service-maintenance-runtime.d.ts +45 -0
- package/dist/runtime/foundation/service-maintenance-runtime.js +198 -0
- package/dist/runtime/foundation/service-metadata-codec.d.ts +2 -0
- package/dist/runtime/foundation/service-metadata-codec.js +69 -0
- package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +35 -0
- package/dist/runtime/foundation/service-relocation-aggregate-committer.js +139 -0
- package/dist/runtime/foundation/service-relocation-coordinator.d.ts +19 -0
- package/dist/runtime/foundation/service-relocation-coordinator.js +16 -0
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +71 -0
- package/dist/runtime/foundation/service-relocation-object-owner.js +242 -0
- package/dist/runtime/foundation/service-relocation-runtime.d.ts +143 -0
- package/dist/runtime/foundation/service-relocation-runtime.js +1080 -0
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +332 -0
- package/dist/runtime/foundation/service-runtime-contracts.js +66 -0
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +23 -0
- package/dist/runtime/foundation/service-session-binding-ingress-port.js +11 -0
- package/dist/runtime/foundation/service-stateful-registry.d.ts +142 -0
- package/dist/runtime/foundation/service-stateful-registry.js +465 -0
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +393 -0
- package/dist/runtime/foundation/service-stateful-runtime.js +3898 -0
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +597 -0
- package/dist/runtime/foundation/service-stateful-wire-codec.js +2006 -0
- package/dist/runtime/foundation/service-topology-registry.d.ts +68 -0
- package/dist/runtime/foundation/service-topology-registry.js +393 -0
- package/dist/runtime/foundation/service-weighted-selection.d.ts +14 -0
- package/dist/runtime/foundation/service-weighted-selection.js +128 -0
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +10 -0
- package/dist/runtime/foundation/service-wire-binary-primitives.js +53 -0
- package/dist/runtime/foundation/service-wire-codec.d.ts +22 -0
- package/dist/runtime/foundation/service-wire-codec.js +67 -0
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +110 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +132 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +102 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.js +568 -0
- package/dist/runtime/framework-errors-internal.d.ts +95 -0
- package/dist/runtime/framework-errors-internal.js +301 -0
- package/dist/runtime/handlers/handler-instance-scope.d.ts +11 -0
- package/dist/runtime/handlers/handler-instance-scope.js +284 -0
- package/dist/runtime/handlers/index.d.ts +13 -0
- package/dist/runtime/handlers/index.js +57 -0
- package/dist/runtime/host/actor-packet-relay.d.ts +60 -0
- package/dist/runtime/host/actor-packet-relay.js +664 -0
- package/dist/runtime/host/actor-placement-coordinator.d.ts +32 -0
- package/dist/runtime/host/actor-placement-coordinator.js +386 -0
- package/dist/runtime/host/actor-runtime-options-factory.d.ts +65 -0
- package/dist/runtime/host/actor-runtime-options-factory.js +160 -0
- package/dist/runtime/host/actor-transfer-authority-runtime.d.ts +26 -0
- package/dist/runtime/host/actor-transfer-authority-runtime.js +138 -0
- package/dist/runtime/host/actor-transfer-runtime.d.ts +149 -0
- package/dist/runtime/host/actor-transfer-runtime.js +1245 -0
- package/dist/runtime/host/application-job-queue.d.ts +99 -0
- package/dist/runtime/host/application-job-queue.js +409 -0
- package/dist/runtime/host/bound-session-relay.d.ts +41 -0
- package/dist/runtime/host/bound-session-relay.js +52 -0
- package/dist/runtime/host/bounded-replay-map.d.ts +12 -0
- package/dist/runtime/host/bounded-replay-map.js +42 -0
- package/dist/runtime/host/channel-runtime-options-factory.d.ts +22 -0
- package/dist/runtime/host/channel-runtime-options-factory.js +76 -0
- package/dist/runtime/host/entry-actor-runtime.d.ts +30 -0
- package/dist/runtime/host/entry-actor-runtime.js +80 -0
- package/dist/runtime/host/host-capacity-status.d.ts +11 -0
- package/dist/runtime/host/host-capacity-status.js +85 -0
- package/dist/runtime/host/index.d.ts +188 -0
- package/dist/runtime/host/index.js +2552 -0
- package/dist/runtime/host/instance-activation-authority.d.ts +33 -0
- package/dist/runtime/host/instance-activation-authority.js +496 -0
- package/dist/runtime/host/location-runtime-owner.d.ts +48 -0
- package/dist/runtime/host/location-runtime-owner.js +227 -0
- package/dist/runtime/host/mesh-router-resolver.d.ts +16 -0
- package/dist/runtime/host/mesh-router-resolver.js +108 -0
- package/dist/runtime/host/relocation-direct-transfer.d.ts +81 -0
- package/dist/runtime/host/relocation-direct-transfer.js +240 -0
- package/dist/runtime/host/relocation-integrity-fault-gate.d.ts +6 -0
- package/dist/runtime/host/relocation-integrity-fault-gate.js +5 -0
- package/dist/runtime/host/relocation-state-adapter.d.ts +8 -0
- package/dist/runtime/host/relocation-state-adapter.js +13 -0
- package/dist/runtime/host/remote-actor-join-receiver.d.ts +47 -0
- package/dist/runtime/host/remote-actor-join-receiver.js +161 -0
- package/dist/runtime/host/remote-actor-packet-target-store.d.ts +29 -0
- package/dist/runtime/host/remote-actor-packet-target-store.js +185 -0
- package/dist/runtime/host/remote-bound-session-relay.d.ts +58 -0
- package/dist/runtime/host/remote-bound-session-relay.js +540 -0
- package/dist/runtime/host/route-mesh-runtime-options.d.ts +9 -0
- package/dist/runtime/host/route-mesh-runtime-options.js +41 -0
- package/dist/runtime/host/route-mesh-runtime.d.ts +76 -0
- package/dist/runtime/host/route-mesh-runtime.js +746 -0
- package/dist/runtime/host/runtime-shutdown.d.ts +33 -0
- package/dist/runtime/host/runtime-shutdown.js +68 -0
- package/dist/runtime/host/service-relocation-control.d.ts +7 -0
- package/dist/runtime/host/service-relocation-control.js +24 -0
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +241 -0
- package/dist/runtime/host/service-relocation-host-runtime.js +4113 -0
- package/dist/runtime/host/spot-address-transport.d.ts +47 -0
- package/dist/runtime/host/spot-address-transport.js +601 -0
- package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +38 -0
- package/dist/runtime/host/spot-node-runtime-options-factory.js +36 -0
- package/dist/runtime/host/spot-runtime-options-factory.d.ts +48 -0
- package/dist/runtime/host/spot-runtime-options-factory.js +169 -0
- package/dist/runtime/host/stateful-authority-route-runtime.d.ts +34 -0
- package/dist/runtime/host/stateful-authority-route-runtime.js +440 -0
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +69 -0
- package/dist/runtime/host/user-spot-creation-coordinator.js +759 -0
- package/dist/runtime/locations/actor-location-claims.d.ts +43 -0
- package/dist/runtime/locations/actor-location-claims.js +319 -0
- package/dist/runtime/locations/actor-session-route-claims.d.ts +10 -0
- package/dist/runtime/locations/actor-session-route-claims.js +51 -0
- package/dist/runtime/locations/aggregate-inventory-store.d.ts +18 -0
- package/dist/runtime/locations/aggregate-inventory-store.js +399 -0
- package/dist/runtime/locations/authority-key-codec.d.ts +6 -0
- package/dist/runtime/locations/authority-key-codec.js +78 -0
- package/dist/runtime/locations/auto-connect-loop.d.ts +37 -0
- package/dist/runtime/locations/auto-connect-loop.js +112 -0
- package/dist/runtime/locations/auto-connect-planner.d.ts +9 -0
- package/dist/runtime/locations/auto-connect-planner.js +137 -0
- package/dist/runtime/locations/auto-connect-reconciler.d.ts +57 -0
- package/dist/runtime/locations/auto-connect-reconciler.js +358 -0
- package/dist/runtime/locations/auto-connect-types.d.ts +42 -0
- package/dist/runtime/locations/auto-connect-types.js +2 -0
- package/dist/runtime/locations/auto-connect.d.ts +4 -0
- package/dist/runtime/locations/auto-connect.js +20 -0
- package/dist/runtime/locations/canonical-codec.d.ts +7 -0
- package/dist/runtime/locations/canonical-codec.js +48 -0
- package/dist/runtime/locations/domain-store-contract.d.ts +34 -0
- package/dist/runtime/locations/domain-store-contract.js +2 -0
- package/dist/runtime/locations/in-memory-authority-store.d.ts +51 -0
- package/dist/runtime/locations/in-memory-authority-store.js +895 -0
- package/dist/runtime/locations/in-memory-location-store.d.ts +78 -0
- package/dist/runtime/locations/in-memory-location-store.js +1008 -0
- package/dist/runtime/locations/in-memory-provider-location-store.d.ts +19 -0
- package/dist/runtime/locations/in-memory-provider-location-store.js +183 -0
- package/dist/runtime/locations/index.d.ts +11 -0
- package/dist/runtime/locations/index.js +27 -0
- package/dist/runtime/locations/internal-location-contracts.d.ts +7 -0
- package/dist/runtime/locations/internal-location-contracts.js +21 -0
- package/dist/runtime/locations/internal-store-contracts.d.ts +35 -0
- package/dist/runtime/locations/internal-store-contracts.js +2 -0
- package/dist/runtime/locations/key-codec.d.ts +13 -0
- package/dist/runtime/locations/key-codec.js +41 -0
- package/dist/runtime/locations/lease-tracker.d.ts +36 -0
- package/dist/runtime/locations/lease-tracker.js +155 -0
- package/dist/runtime/locations/lifecycle-runtime.d.ts +19 -0
- package/dist/runtime/locations/lifecycle-runtime.js +2 -0
- package/dist/runtime/locations/lifecycle.d.ts +40 -0
- package/dist/runtime/locations/lifecycle.js +120 -0
- package/dist/runtime/locations/location-store-repository.d.ts +72 -0
- package/dist/runtime/locations/location-store-repository.js +3198 -0
- package/dist/runtime/locations/relocation-blob.d.ts +7 -0
- package/dist/runtime/locations/relocation-blob.js +24 -0
- package/dist/runtime/locations/resolvers.d.ts +145 -0
- package/dist/runtime/locations/resolvers.js +693 -0
- package/dist/runtime/locations/runtime.d.ts +144 -0
- package/dist/runtime/locations/runtime.js +792 -0
- package/dist/runtime/locations/spot-location-claims.d.ts +36 -0
- package/dist/runtime/locations/spot-location-claims.js +305 -0
- package/dist/runtime/messaging/creation-payload-codec.d.ts +4 -0
- package/dist/runtime/messaging/creation-payload-codec.js +40 -0
- package/dist/runtime/messaging/framework-json-v1.d.ts +7 -0
- package/dist/runtime/messaging/framework-json-v1.js +296 -0
- package/dist/runtime/messaging/index.d.ts +1 -0
- package/dist/runtime/messaging/index.js +2 -0
- package/dist/runtime/messaging/packet-name.d.ts +4 -0
- package/dist/runtime/messaging/packet-name.js +79 -0
- package/dist/runtime/messaging/payload-codec.d.ts +25 -0
- package/dist/runtime/messaging/payload-codec.js +255 -0
- package/dist/runtime/messaging/submission-result.d.ts +15 -0
- package/dist/runtime/messaging/submission-result.js +37 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +395 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +645 -0
- package/dist/runtime/routing-id.d.ts +8 -0
- package/dist/runtime/routing-id.js +112 -0
- package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +124 -0
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +269 -0
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +33 -0
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +94 -0
- package/dist/runtime/spots/index.d.ts +247 -0
- package/dist/runtime/spots/index.js +2090 -0
- package/dist/runtime/spots/spot-activation-registry.d.ts +47 -0
- package/dist/runtime/spots/spot-activation-registry.js +272 -0
- package/dist/runtime/spots/spot-activation-state.d.ts +104 -0
- package/dist/runtime/spots/spot-activation-state.js +288 -0
- package/dist/runtime/spots/spot-activation.d.ts +89 -0
- package/dist/runtime/spots/spot-activation.js +601 -0
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +20 -0
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +194 -0
- package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +83 -0
- package/dist/runtime/spots/spot-actor-join-dispatch.js +185 -0
- package/dist/runtime/spots/spot-actor-lifecycle-drain.d.ts +22 -0
- package/dist/runtime/spots/spot-actor-lifecycle-drain.js +51 -0
- package/dist/runtime/spots/spot-actor-membership.d.ts +39 -0
- package/dist/runtime/spots/spot-actor-membership.js +179 -0
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +91 -0
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +315 -0
- package/dist/runtime/spots/spot-actor-packet-drain.d.ts +40 -0
- package/dist/runtime/spots/spot-actor-packet-drain.js +235 -0
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +18 -0
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +110 -0
- package/dist/runtime/spots/spot-closing.d.ts +2 -0
- package/dist/runtime/spots/spot-closing.js +30 -0
- package/dist/runtime/spots/spot-context.d.ts +46 -0
- package/dist/runtime/spots/spot-context.js +113 -0
- package/dist/runtime/spots/spot-entry-activation.d.ts +107 -0
- package/dist/runtime/spots/spot-entry-activation.js +342 -0
- package/dist/runtime/spots/spot-handle.d.ts +28 -0
- package/dist/runtime/spots/spot-handle.js +38 -0
- package/dist/runtime/spots/spot-handler-registry.d.ts +52 -0
- package/dist/runtime/spots/spot-handler-registry.js +155 -0
- package/dist/runtime/spots/spot-lifecycle-metrics.d.ts +8 -0
- package/dist/runtime/spots/spot-lifecycle-metrics.js +16 -0
- package/dist/runtime/spots/spot-location-claim.d.ts +25 -0
- package/dist/runtime/spots/spot-location-claim.js +55 -0
- package/dist/runtime/spots/spot-manager-internal-contracts.d.ts +10 -0
- package/dist/runtime/spots/spot-manager-internal-contracts.js +2 -0
- package/dist/runtime/spots/spot-manager-public.d.ts +32 -0
- package/dist/runtime/spots/spot-manager-public.js +219 -0
- package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +26 -0
- package/dist/runtime/spots/spot-native-actor-join-admission.js +105 -0
- package/dist/runtime/spots/spot-native-flags.d.ts +2 -0
- package/dist/runtime/spots/spot-native-flags.js +5 -0
- package/dist/runtime/spots/spot-node-autoconnect.d.ts +23 -0
- package/dist/runtime/spots/spot-node-autoconnect.js +246 -0
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +137 -0
- package/dist/runtime/spots/spot-node-runtime-manager.js +1111 -0
- package/dist/runtime/spots/spot-outbound.d.ts +78 -0
- package/dist/runtime/spots/spot-outbound.js +460 -0
- package/dist/runtime/spots/spot-provider.d.ts +4 -0
- package/dist/runtime/spots/spot-provider.js +28 -0
- package/dist/runtime/spots/spot-publisher-transport.d.ts +14 -0
- package/dist/runtime/spots/spot-publisher-transport.js +28 -0
- package/dist/runtime/spots/spot-remote-codec.d.ts +50 -0
- package/dist/runtime/spots/spot-remote-codec.js +190 -0
- package/dist/runtime/spots/spot-remote-route-codec.d.ts +47 -0
- package/dist/runtime/spots/spot-remote-route-codec.js +168 -0
- package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +25 -0
- package/dist/runtime/spots/spot-route-packet-dispatch.js +238 -0
- package/dist/runtime/spots/spot-route-replies.d.ts +17 -0
- package/dist/runtime/spots/spot-route-replies.js +76 -0
- package/dist/runtime/spots/spot-route-reply-wire.d.ts +10 -0
- package/dist/runtime/spots/spot-route-reply-wire.js +6 -0
- package/dist/runtime/spots/spot-routed-actor-admission.d.ts +36 -0
- package/dist/runtime/spots/spot-routed-actor-admission.js +240 -0
- package/dist/runtime/spots/spot-routed-bound-session-dispatch.d.ts +19 -0
- package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +46 -0
- package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +54 -0
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +162 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +43 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +152 -0
- package/dist/runtime/spots/spot-routing-internal.d.ts +28 -0
- package/dist/runtime/spots/spot-routing-internal.js +2 -0
- package/dist/runtime/spots/spot-runtime-ports.d.ts +64 -0
- package/dist/runtime/spots/spot-runtime-ports.js +2 -0
- package/dist/runtime/spots/spot-serial-executor.d.ts +38 -0
- package/dist/runtime/spots/spot-serial-executor.js +133 -0
- package/dist/runtime/spots/spot-serial-turn-executor.d.ts +54 -0
- package/dist/runtime/spots/spot-serial-turn-executor.js +219 -0
- package/dist/runtime/spots/spot-subscription-dispatch.d.ts +32 -0
- package/dist/runtime/spots/spot-subscription-dispatch.js +194 -0
- package/dist/runtime/spots/spot-timer.d.ts +110 -0
- package/dist/runtime/spots/spot-timer.js +419 -0
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +193 -0
- package/dist/runtime/streams/actor-session-binding-registry.js +1127 -0
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +20 -0
- package/dist/runtime/streams/actor-session-binding-runtime-owner.js +19 -0
- package/dist/runtime/streams/actor-session-lifecycle-coordinator.d.ts +4 -0
- package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +24 -0
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +29 -0
- package/dist/runtime/streams/bound-actor-relay-sender.js +181 -0
- package/dist/runtime/streams/bound-session-response-target.d.ts +25 -0
- package/dist/runtime/streams/bound-session-response-target.js +54 -0
- package/dist/runtime/streams/bound-session-service.d.ts +48 -0
- package/dist/runtime/streams/bound-session-service.js +201 -0
- package/dist/runtime/streams/index.d.ts +152 -0
- package/dist/runtime/streams/index.js +338 -0
- package/dist/runtime/streams/managed-stream.d.ts +53 -0
- package/dist/runtime/streams/managed-stream.js +329 -0
- package/dist/runtime/streams/native-fallback-bound-session.d.ts +24 -0
- package/dist/runtime/streams/native-fallback-bound-session.js +201 -0
- package/dist/runtime/streams/protocol.d.ts +67 -0
- package/dist/runtime/streams/protocol.js +244 -0
- package/dist/runtime/streams/session-actor-coordinator.d.ts +56 -0
- package/dist/runtime/streams/session-actor-coordinator.js +371 -0
- package/dist/runtime/streams/session-calls.d.ts +59 -0
- package/dist/runtime/streams/session-calls.js +123 -0
- package/dist/runtime/streams/session-context.d.ts +108 -0
- package/dist/runtime/streams/session-context.js +377 -0
- package/dist/runtime/streams/session-local-actors.d.ts +10 -0
- package/dist/runtime/streams/session-local-actors.js +26 -0
- package/dist/runtime/streams/session-provider.d.ts +4 -0
- package/dist/runtime/streams/session-provider.js +30 -0
- package/dist/runtime/streams/session-requests.d.ts +25 -0
- package/dist/runtime/streams/session-requests.js +100 -0
- package/dist/runtime/streams/session-serial-executor.d.ts +12 -0
- package/dist/runtime/streams/session-serial-executor.js +58 -0
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +62 -0
- package/dist/runtime/streams/stream-binding-runtime-ports.js +2 -0
- package/dist/runtime/streams/stream-frame-factory.d.ts +44 -0
- package/dist/runtime/streams/stream-frame-factory.js +149 -0
- package/dist/runtime/streams/stream-message-utils.d.ts +5 -0
- package/dist/runtime/streams/stream-message-utils.js +74 -0
- package/dist/runtime/streams/stream-session-runtime.d.ts +166 -0
- package/dist/runtime/streams/stream-session-runtime.js +1144 -0
- package/dist/runtime/workers/index.d.ts +38 -0
- package/dist/runtime/workers/index.js +474 -0
- package/package.json +19 -0
- package/src/contracts/Actors/ZLinkActor.ts +8 -0
- package/src/contracts/Actors/ZLinkActorClient.ts +18 -0
- package/src/contracts/Actors/ZLinkActorContext.ts +15 -0
- package/src/contracts/Actors/ZLinkActorFactory.ts +41 -0
- package/src/contracts/Actors/ZLinkActorManager.ts +31 -0
- package/src/contracts/Actors/index.ts +5 -0
- package/src/contracts/Channels/Calls.ts +33 -0
- package/src/contracts/Channels/IZLinkChannelClient.ts +6 -0
- package/src/contracts/Channels/IZLinkFanoutClient.ts +13 -0
- package/src/contracts/Channels/RouteCalls.ts +13 -0
- package/src/contracts/Channels/index.ts +4 -0
- package/src/contracts/Codecs/IZLinkCodecRegistryBuilder.ts +22 -0
- package/src/contracts/Codecs/ZLinkMessageSerializer.ts +6 -0
- package/src/contracts/Codecs/index.ts +2 -0
- package/src/contracts/Common/ActorRef.ts +8 -0
- package/src/contracts/Common/CoreTypes.ts +6 -0
- package/src/contracts/Common/Message.ts +9 -0
- package/src/contracts/Common/ZLinkEncodedPayload.ts +47 -0
- package/src/contracts/Common/ZLinkMessage.ts +135 -0
- package/src/contracts/Common/ZLinkMessageMetadata.ts +77 -0
- package/src/contracts/Common/ZLinkProviderResolver.ts +6 -0
- package/src/contracts/Common/encoded-payload-storage.ts +16 -0
- package/src/contracts/Common/index.ts +5 -0
- package/src/contracts/Configuration/Builders.ts +200 -0
- package/src/contracts/Configuration/CodecContentType.ts +68 -0
- package/src/contracts/Configuration/CodecSerializerSelection.ts +28 -0
- package/src/contracts/Configuration/Configs.ts +27 -0
- package/src/contracts/Configuration/ConfigurationException.ts +6 -0
- package/src/contracts/Configuration/Connections.ts +5 -0
- package/src/contracts/Configuration/DiagnosticsValidation.ts +25 -0
- package/src/contracts/Configuration/EndpointNotation.ts +232 -0
- package/src/contracts/Configuration/InternalDefaults.ts +13 -0
- package/src/contracts/Configuration/ObjectRoles.ts +47 -0
- package/src/contracts/Configuration/Registration.ts +191 -0
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +76 -0
- package/src/contracts/Configuration/RegistrationBuilders.ts +1705 -0
- package/src/contracts/Configuration/RegistrationCodecRegistry.ts +118 -0
- package/src/contracts/Configuration/RegistrationNormalizers.ts +404 -0
- package/src/contracts/Configuration/RegistrationTypes.ts +499 -0
- package/src/contracts/Configuration/RegistrationValidators.ts +698 -0
- package/src/contracts/Configuration/RouteChannelInternalState.ts +50 -0
- package/src/contracts/Configuration/RuntimeEndpointConnections.ts +91 -0
- package/src/contracts/Configuration/SendTimeoutValidation.ts +15 -0
- package/src/contracts/Configuration/TimerRegistrationValidator.ts +37 -0
- package/src/contracts/Configuration/index.ts +35 -0
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +222 -0
- package/src/contracts/Dispatch/ZLinkFlowOrigin.ts +1 -0
- package/src/contracts/Dispatch/index.ts +2 -0
- package/src/contracts/Errors/ZLinkFrameworkException.ts +27 -0
- package/src/contracts/Errors/index.ts +4 -0
- package/src/contracts/Eventing/Metrics.ts +27 -0
- package/src/contracts/Eventing/index.ts +1 -0
- package/src/contracts/Handlers/Attributes.ts +111 -0
- package/src/contracts/Handlers/Contexts.ts +21 -0
- package/src/contracts/Handlers/IZLinkChannelHandlers.ts +69 -0
- package/src/contracts/Handlers/IZLinkHandlerFilter.ts +22 -0
- package/src/contracts/Handlers/JsonContract.ts +172 -0
- package/src/contracts/Handlers/ZLinkHandlerFilterNext.ts +1 -0
- package/src/contracts/Handlers/index.ts +17 -0
- package/src/contracts/Locations/ActorTransfer.ts +84 -0
- package/src/contracts/Locations/Authority.ts +308 -0
- package/src/contracts/Locations/Diagnostics.ts +48 -0
- package/src/contracts/Locations/Keys.ts +93 -0
- package/src/contracts/Locations/Models.ts +7 -0
- package/src/contracts/Locations/Options.ts +42 -0
- package/src/contracts/Locations/Readiness.ts +11 -0
- package/src/contracts/Locations/RelocationStore.ts +51 -0
- package/src/contracts/Locations/Resolvers.ts +8 -0
- package/src/contracts/Locations/Rows.ts +164 -0
- package/src/contracts/Locations/RuntimeQuery.ts +56 -0
- package/src/contracts/Locations/Stores.ts +92 -0
- package/src/contracts/Locations/Values.ts +32 -0
- package/src/contracts/Locations/Watch.ts +16 -0
- package/src/contracts/Locations/Writes.ts +56 -0
- package/src/contracts/Locations/index.ts +48 -0
- package/src/contracts/RouteMesh/Contracts.ts +145 -0
- package/src/contracts/RouteMesh/RuntimeTopology.ts +201 -0
- package/src/contracts/RouteMesh/index.ts +2 -0
- package/src/contracts/Spots/Builders.ts +11 -0
- package/src/contracts/Spots/Contracts.ts +150 -0
- package/src/contracts/Spots/SpotKind.ts +24 -0
- package/src/contracts/Spots/ZLinkSpot.ts +88 -0
- package/src/contracts/Spots/index.ts +3 -0
- package/src/contracts/Streams/BoundSessionContracts.ts +9 -0
- package/src/contracts/Streams/IZLinkSession.ts +52 -0
- package/src/contracts/Streams/IZLinkSessionActor.ts +17 -0
- package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +11 -0
- package/src/contracts/Streams/IZLinkStream.ts +10 -0
- package/src/contracts/Streams/ZLinkMessageMetadata.ts +1 -0
- package/src/contracts/Streams/ZLinkStreamCompression.ts +9 -0
- package/src/contracts/Streams/ZLinkStreamError.ts +9 -0
- package/src/contracts/Streams/index.ts +8 -0
- package/src/contracts/Timers/IZLinkTimer.ts +5 -0
- package/src/contracts/Timers/ZLinkTimerOptions.ts +11 -0
- package/src/contracts/Timers/ZLinkTimerTick.ts +12 -0
- package/src/contracts/Timers/index.ts +3 -0
- package/src/contracts/index.ts +71 -0
- package/src/index.ts +1 -0
- package/src/internal.ts +29 -0
- package/src/location-store-integration.ts +51 -0
- package/src/nest-integration.ts +251 -0
- package/src/runtime/abort.ts +70 -0
- package/src/runtime/actors/actor-authority-payload-codec.ts +454 -0
- package/src/runtime/actors/actor-authority-publication.ts +277 -0
- package/src/runtime/actors/actor-client.ts +1018 -0
- package/src/runtime/actors/actor-context.ts +583 -0
- package/src/runtime/actors/actor-creation.ts +254 -0
- package/src/runtime/actors/actor-execution-context.ts +38 -0
- package/src/runtime/actors/actor-handoff.ts +1911 -0
- package/src/runtime/actors/actor-join-deferred-scope.ts +183 -0
- package/src/runtime/actors/actor-join-relocation.ts +39 -0
- package/src/runtime/actors/actor-lifecycle-snapshot.ts +90 -0
- package/src/runtime/actors/actor-local-native-join.ts +725 -0
- package/src/runtime/actors/actor-mailbox.ts +92 -0
- package/src/runtime/actors/actor-message-follow-context.ts +347 -0
- package/src/runtime/actors/actor-native-lookup.ts +38 -0
- package/src/runtime/actors/actor-packet-relay-wire.ts +223 -0
- package/src/runtime/actors/actor-remote-joiner.ts +238 -0
- package/src/runtime/actors/actor-remote-wire.ts +169 -0
- package/src/runtime/actors/actor-retry-delay.ts +37 -0
- package/src/runtime/actors/actor-routed-join-transport.ts +58 -0
- package/src/runtime/actors/actor-routed-json-request.ts +44 -0
- package/src/runtime/actors/actor-runtime-contracts.ts +126 -0
- package/src/runtime/actors/actor-runtime-state.ts +805 -0
- package/src/runtime/actors/actor-source-transfer.ts +62 -0
- package/src/runtime/actors/actor-transfer-registry.ts +112 -0
- package/src/runtime/actors/actor-transport-delivery-gate.ts +17 -0
- package/src/runtime/actors/bound-session-wire.ts +257 -0
- package/src/runtime/actors/deferred-join-accepted-journal.ts +1319 -0
- package/src/runtime/actors/index.ts +972 -0
- package/src/runtime/actors/post-commit-actor-binder.ts +70 -0
- package/src/runtime/actors/post-commit-actor-location.ts +114 -0
- package/src/runtime/actors/spot-actor-dispatch.ts +362 -0
- package/src/runtime/actors/transferred-actor-rollback.ts +123 -0
- package/src/runtime/admission.ts +192 -0
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +216 -0
- package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +10 -0
- package/src/runtime/application-jobs/application-job-queue-scope.ts +64 -0
- package/src/runtime/application-jobs/contracts.ts +26 -0
- package/src/runtime/application-jobs/receive-flow-controller.ts +188 -0
- package/src/runtime/backend/contracts/index.ts +765 -0
- package/src/runtime/backend/index.ts +9 -0
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +73 -0
- package/src/runtime/backend/mesh-completion-table.ts +165 -0
- package/src/runtime/backend/mesh-dispatch-pump.ts +363 -0
- package/src/runtime/backend/mesh-record-dispatcher.ts +65 -0
- package/src/runtime/backend/node/index.ts +4 -0
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +204 -0
- package/src/runtime/backend/node/node-backend-adapter-support.ts +257 -0
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +133 -0
- package/src/runtime/backend/node/node-mesh-backend-adapter.ts +44 -0
- package/src/runtime/backend/node/node-monitor-backend-adapter.ts +39 -0
- package/src/runtime/backend/node/node-raw-binding-port.contract.ts +21 -0
- package/src/runtime/backend/node/node-raw-binding-port.ts +518 -0
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +2669 -0
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +372 -0
- package/src/runtime/backend/node-backend-adapter.ts +19 -0
- package/src/runtime/backend/raw-binding-port.ts +69 -0
- package/src/runtime/backend/runtime-message.ts +51 -0
- package/src/runtime/backend/runtime-values.ts +107 -0
- package/src/runtime/channels/channel-autoconnect.ts +46 -0
- package/src/runtime/channels/channel-clients.ts +527 -0
- package/src/runtime/channels/channel-dispatch-pipeline.ts +408 -0
- package/src/runtime/channels/channel-dispatch-services.ts +234 -0
- package/src/runtime/channels/channel-dispatchers.ts +790 -0
- package/src/runtime/channels/channel-envelope-inspection.ts +125 -0
- package/src/runtime/channels/channel-envelope.ts +743 -0
- package/src/runtime/channels/channel-framework-packets.ts +8 -0
- package/src/runtime/channels/channel-multipart.ts +61 -0
- package/src/runtime/channels/channel-outbound-operations.ts +584 -0
- package/src/runtime/channels/channel-receive-loops.ts +901 -0
- package/src/runtime/channels/channel-receive-task-tracker.ts +39 -0
- package/src/runtime/channels/channel-runtime-lifecycle.ts +969 -0
- package/src/runtime/channels/channel-runtime-manager.ts +444 -0
- package/src/runtime/channels/channel-socket-options.ts +153 -0
- package/src/runtime/channels/channel-socket-registry.ts +1837 -0
- package/src/runtime/channels/channel-transports.ts +1154 -0
- package/src/runtime/channels/client-server-location-runtime.ts +576 -0
- package/src/runtime/channels/client-server-service-wire.ts +390 -0
- package/src/runtime/channels/dispatch-error-reporter.ts +165 -0
- package/src/runtime/channels/fanout-location-runtime.ts +459 -0
- package/src/runtime/channels/fanout-service-wire.ts +43 -0
- package/src/runtime/channels/handler-filter-scope.ts +29 -0
- package/src/runtime/channels/index.ts +45 -0
- package/src/runtime/channels/local-spot-route-transport.ts +59 -0
- package/src/runtime/channels/route-disconnected-error.ts +6 -0
- package/src/runtime/channels/route-member-snapshot.ts +55 -0
- package/src/runtime/channels/router-socket-spot-route-transport.ts +77 -0
- package/src/runtime/channels/source-spot-router.ts +89 -0
- package/src/runtime/channels/spot-direct-envelope.ts +44 -0
- package/src/runtime/channels/spot-node-route-transport.ts +92 -0
- package/src/runtime/channels/spot-route-bridge-transport.ts +75 -0
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +329 -0
- package/src/runtime/channels/spot-route-target-resolver.ts +101 -0
- package/src/runtime/codecs/index.ts +69 -0
- package/src/runtime/configuration/index.ts +1 -0
- package/src/runtime/diagnostics/dispatch-error-port.ts +8 -0
- package/src/runtime/diagnostics/flow-context.ts +84 -0
- package/src/runtime/diagnostics/index.ts +441 -0
- package/src/runtime/diagnostics/internal-event-contracts.ts +135 -0
- package/src/runtime/diagnostics/message-flow.ts +560 -0
- package/src/runtime/diagnostics/runtime-metrics.ts +601 -0
- package/src/runtime/diagnostics/runtime-observation-queue.ts +362 -0
- package/src/runtime/diagnostics/topology-runtime-projections.ts +298 -0
- package/src/runtime/execution/index.ts +466 -0
- package/src/runtime/execution/serial-execution-queue.ts +534 -0
- package/src/runtime/execution/serial-work-size.ts +31 -0
- package/src/runtime/execution/state-lane.ts +116 -0
- package/src/runtime/foundation/actor-join-recovery-codec.ts +465 -0
- package/src/runtime/foundation/event-loop-resources.ts +162 -0
- package/src/runtime/foundation/index.ts +18 -0
- package/src/runtime/foundation/message-follow-suppression-registry.ts +130 -0
- package/src/runtime/foundation/operation-identity.ts +49 -0
- package/src/runtime/foundation/operation-registry.ts +162 -0
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +1771 -0
- package/src/runtime/foundation/route-mesh-connection-policy.ts +28 -0
- package/src/runtime/foundation/runtime-state-projections.ts +68 -0
- package/src/runtime/foundation/service-authority-payload-codec.ts +566 -0
- package/src/runtime/foundation/service-discovery-registry.ts +263 -0
- package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +329 -0
- package/src/runtime/foundation/service-liveness-registry.ts +144 -0
- package/src/runtime/foundation/service-mailbox.ts +369 -0
- package/src/runtime/foundation/service-maintenance-runtime.ts +242 -0
- package/src/runtime/foundation/service-metadata-codec.ts +75 -0
- package/src/runtime/foundation/service-relocation-aggregate-committer.ts +218 -0
- package/src/runtime/foundation/service-relocation-coordinator.ts +37 -0
- package/src/runtime/foundation/service-relocation-object-owner.ts +428 -0
- package/src/runtime/foundation/service-relocation-runtime.ts +1407 -0
- package/src/runtime/foundation/service-runtime-contracts.ts +423 -0
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +45 -0
- package/src/runtime/foundation/service-stateful-registry.ts +664 -0
- package/src/runtime/foundation/service-stateful-runtime.ts +5753 -0
- package/src/runtime/foundation/service-stateful-wire-codec.ts +3008 -0
- package/src/runtime/foundation/service-topology-registry.ts +599 -0
- package/src/runtime/foundation/service-weighted-selection.ts +166 -0
- package/src/runtime/foundation/service-wire-binary-primitives.ts +80 -0
- package/src/runtime/foundation/service-wire-codec.ts +91 -0
- package/src/runtime/foundation/service-wire-constants.generated.ts +131 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +647 -0
- package/src/runtime/framework-errors-internal.ts +338 -0
- package/src/runtime/handlers/handler-instance-scope.ts +372 -0
- package/src/runtime/handlers/index.ts +93 -0
- package/src/runtime/host/actor-packet-relay.ts +1070 -0
- package/src/runtime/host/actor-placement-coordinator.ts +573 -0
- package/src/runtime/host/actor-runtime-options-factory.ts +282 -0
- package/src/runtime/host/actor-transfer-authority-runtime.ts +225 -0
- package/src/runtime/host/actor-transfer-runtime.ts +1958 -0
- package/src/runtime/host/application-job-queue.ts +518 -0
- package/src/runtime/host/bound-session-relay.ts +94 -0
- package/src/runtime/host/bounded-replay-map.ts +42 -0
- package/src/runtime/host/channel-runtime-options-factory.ts +104 -0
- package/src/runtime/host/entry-actor-runtime.ts +115 -0
- package/src/runtime/host/host-capacity-status.ts +103 -0
- package/src/runtime/host/index.ts +3492 -0
- package/src/runtime/host/instance-activation-authority.ts +658 -0
- package/src/runtime/host/location-runtime-owner.ts +313 -0
- package/src/runtime/host/mesh-router-resolver.ts +114 -0
- package/src/runtime/host/relocation-direct-transfer.ts +273 -0
- package/src/runtime/host/relocation-integrity-fault-gate.ts +8 -0
- package/src/runtime/host/relocation-state-adapter.ts +24 -0
- package/src/runtime/host/remote-actor-join-receiver.ts +264 -0
- package/src/runtime/host/remote-actor-packet-target-store.ts +244 -0
- package/src/runtime/host/remote-bound-session-relay.ts +900 -0
- package/src/runtime/host/route-mesh-runtime-options.ts +46 -0
- package/src/runtime/host/route-mesh-runtime.ts +891 -0
- package/src/runtime/host/runtime-shutdown.ts +101 -0
- package/src/runtime/host/service-relocation-control.ts +28 -0
- package/src/runtime/host/service-relocation-host-runtime.ts +5817 -0
- package/src/runtime/host/spot-address-transport.ts +997 -0
- package/src/runtime/host/spot-node-runtime-options-factory.ts +82 -0
- package/src/runtime/host/spot-runtime-options-factory.ts +286 -0
- package/src/runtime/host/stateful-authority-route-runtime.ts +662 -0
- package/src/runtime/host/user-spot-creation-coordinator.ts +1176 -0
- package/src/runtime/locations/actor-location-claims.ts +426 -0
- package/src/runtime/locations/actor-session-route-claims.ts +64 -0
- package/src/runtime/locations/aggregate-inventory-store.ts +581 -0
- package/src/runtime/locations/authority-key-codec.ts +80 -0
- package/src/runtime/locations/auto-connect-loop.ts +131 -0
- package/src/runtime/locations/auto-connect-planner.ts +178 -0
- package/src/runtime/locations/auto-connect-reconciler.ts +425 -0
- package/src/runtime/locations/auto-connect-types.ts +62 -0
- package/src/runtime/locations/auto-connect.ts +4 -0
- package/src/runtime/locations/canonical-codec.ts +54 -0
- package/src/runtime/locations/domain-store-contract.ts +149 -0
- package/src/runtime/locations/in-memory-authority-store.ts +1172 -0
- package/src/runtime/locations/in-memory-location-store.ts +1467 -0
- package/src/runtime/locations/in-memory-provider-location-store.ts +213 -0
- package/src/runtime/locations/index.ts +11 -0
- package/src/runtime/locations/internal-location-contracts.ts +22 -0
- package/src/runtime/locations/internal-store-contracts.ts +90 -0
- package/src/runtime/locations/key-codec.ts +61 -0
- package/src/runtime/locations/lease-tracker.ts +221 -0
- package/src/runtime/locations/lifecycle-runtime.ts +44 -0
- package/src/runtime/locations/lifecycle.ts +272 -0
- package/src/runtime/locations/location-store-repository.ts +4211 -0
- package/src/runtime/locations/relocation-blob.ts +36 -0
- package/src/runtime/locations/resolvers.ts +1054 -0
- package/src/runtime/locations/runtime.ts +1126 -0
- package/src/runtime/locations/spot-location-claims.ts +435 -0
- package/src/runtime/messaging/creation-payload-codec.ts +59 -0
- package/src/runtime/messaging/framework-json-v1.ts +307 -0
- package/src/runtime/messaging/index.ts +1 -0
- package/src/runtime/messaging/packet-name.ts +94 -0
- package/src/runtime/messaging/payload-codec.ts +418 -0
- package/src/runtime/messaging/submission-result.ts +61 -0
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +189 -0
- package/src/runtime/routing-id.ts +125 -0
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +418 -0
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +147 -0
- package/src/runtime/spots/index.ts +3303 -0
- package/src/runtime/spots/spot-activation-registry.ts +335 -0
- package/src/runtime/spots/spot-activation-state.ts +414 -0
- package/src/runtime/spots/spot-activation.ts +1027 -0
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +354 -0
- package/src/runtime/spots/spot-actor-join-dispatch.ts +303 -0
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +79 -0
- package/src/runtime/spots/spot-actor-membership.ts +266 -0
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +593 -0
- package/src/runtime/spots/spot-actor-packet-drain.ts +328 -0
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +162 -0
- package/src/runtime/spots/spot-closing.ts +34 -0
- package/src/runtime/spots/spot-context.ts +259 -0
- package/src/runtime/spots/spot-entry-activation.ts +551 -0
- package/src/runtime/spots/spot-handle.ts +101 -0
- package/src/runtime/spots/spot-handler-registry.ts +273 -0
- package/src/runtime/spots/spot-lifecycle-metrics.ts +15 -0
- package/src/runtime/spots/spot-location-claim.ts +86 -0
- package/src/runtime/spots/spot-manager-internal-contracts.ts +11 -0
- package/src/runtime/spots/spot-manager-public.ts +361 -0
- package/src/runtime/spots/spot-native-actor-join-admission.ts +151 -0
- package/src/runtime/spots/spot-native-flags.ts +4 -0
- package/src/runtime/spots/spot-node-autoconnect.ts +325 -0
- package/src/runtime/spots/spot-node-runtime-manager.ts +1573 -0
- package/src/runtime/spots/spot-outbound.ts +761 -0
- package/src/runtime/spots/spot-provider.ts +36 -0
- package/src/runtime/spots/spot-publisher-transport.ts +69 -0
- package/src/runtime/spots/spot-remote-codec.ts +308 -0
- package/src/runtime/spots/spot-remote-route-codec.ts +284 -0
- package/src/runtime/spots/spot-route-packet-dispatch.ts +359 -0
- package/src/runtime/spots/spot-route-replies.ts +126 -0
- package/src/runtime/spots/spot-route-reply-wire.ts +15 -0
- package/src/runtime/spots/spot-routed-actor-admission.ts +351 -0
- package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +132 -0
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +250 -0
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +254 -0
- package/src/runtime/spots/spot-routing-internal.ts +33 -0
- package/src/runtime/spots/spot-runtime-ports.ts +196 -0
- package/src/runtime/spots/spot-serial-executor.ts +170 -0
- package/src/runtime/spots/spot-serial-turn-executor.ts +319 -0
- package/src/runtime/spots/spot-subscription-dispatch.ts +252 -0
- package/src/runtime/spots/spot-timer.ts +609 -0
- package/src/runtime/streams/actor-session-binding-registry.ts +1691 -0
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +78 -0
- package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +20 -0
- package/src/runtime/streams/bound-actor-relay-sender.ts +275 -0
- package/src/runtime/streams/bound-session-response-target.ts +91 -0
- package/src/runtime/streams/bound-session-service.ts +500 -0
- package/src/runtime/streams/index.ts +706 -0
- package/src/runtime/streams/managed-stream.ts +509 -0
- package/src/runtime/streams/native-fallback-bound-session.ts +321 -0
- package/src/runtime/streams/protocol.ts +291 -0
- package/src/runtime/streams/session-actor-coordinator.ts +605 -0
- package/src/runtime/streams/session-calls.ts +221 -0
- package/src/runtime/streams/session-context.ts +609 -0
- package/src/runtime/streams/session-local-actors.ts +30 -0
- package/src/runtime/streams/session-provider.ts +50 -0
- package/src/runtime/streams/session-requests.ts +109 -0
- package/src/runtime/streams/session-serial-executor.ts +97 -0
- package/src/runtime/streams/stream-binding-runtime-ports.ts +106 -0
- package/src/runtime/streams/stream-frame-factory.ts +255 -0
- package/src/runtime/streams/stream-message-utils.ts +89 -0
- package/src/runtime/streams/stream-session-runtime.ts +1420 -0
- package/src/runtime/workers/index.ts +580 -0
- package/tsconfig.json +17 -0
|
@@ -0,0 +1,1407 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import type { ZLinkPlacementObjectKind, ZLinkAuthorityKey } from '../locations/internal-location-contracts';
|
|
3
|
+
import { decodeAuthorityKey } from '../locations/authority-key-codec';
|
|
4
|
+
import {
|
|
5
|
+
decodeRelocationEnvelopeV1 as decodeGeneratedRelocationEnvelopeV1,
|
|
6
|
+
encodeRelocationEnvelopeV1 as encodeGeneratedRelocationEnvelopeV1,
|
|
7
|
+
type RelocationEnvelopeV1 as GeneratedRelocationEnvelopeV1,
|
|
8
|
+
type RelocationObjectIdentity as GeneratedRelocationObjectIdentity
|
|
9
|
+
} from '../protocol/service_wire_pilot_codec.generated';
|
|
10
|
+
|
|
11
|
+
export interface ServiceRelocationParticipant {
|
|
12
|
+
/** Wire-local participant ordinal; identity is projected from Location Store. */
|
|
13
|
+
readonly participantId?: bigint;
|
|
14
|
+
/** Root projection carried by relocation-envelope-v1, never a participant identity vector. */
|
|
15
|
+
readonly rootSpotId?: string;
|
|
16
|
+
readonly rootSpotGeneration?: bigint;
|
|
17
|
+
readonly rootOwnerGeneration?: bigint;
|
|
18
|
+
readonly rootObjectKind?: ZLinkPlacementObjectKind;
|
|
19
|
+
readonly rootStableType?: string;
|
|
20
|
+
readonly key: string;
|
|
21
|
+
readonly objectKind: ZLinkPlacementObjectKind;
|
|
22
|
+
readonly stableType: string;
|
|
23
|
+
readonly objectGeneration: bigint;
|
|
24
|
+
readonly authorityOwnerGeneration: bigint;
|
|
25
|
+
/** Preserves relocation-envelope-v1's absent-state projection on decode. */
|
|
26
|
+
readonly applicationStatePresent?: boolean;
|
|
27
|
+
readonly applicationState: Uint8Array;
|
|
28
|
+
readonly boundSessionState: Uint8Array;
|
|
29
|
+
readonly queuedMessages: readonly ServiceRelocationQueuedMessage[];
|
|
30
|
+
readonly timers: readonly ServiceRelocationTimer[];
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface ServiceRelocationQueuedMessage {
|
|
34
|
+
readonly sequence: bigint;
|
|
35
|
+
readonly payload: Uint8Array;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface ServiceRelocationTimer {
|
|
39
|
+
readonly timerId: string;
|
|
40
|
+
readonly handlerType: string;
|
|
41
|
+
readonly startedAtUnixMs: number;
|
|
42
|
+
readonly dueAtUnixMs: number;
|
|
43
|
+
readonly intervalMs: number;
|
|
44
|
+
readonly deliveryIndex: bigint;
|
|
45
|
+
readonly lastScheduledIndex: bigint;
|
|
46
|
+
readonly overrunPolicy: string;
|
|
47
|
+
readonly maxCatchUpTicks: number;
|
|
48
|
+
readonly stopOnUnhandledException: boolean;
|
|
49
|
+
readonly pendingTicks: readonly ServiceRelocationPendingTimerTick[];
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export interface ServiceRelocationPendingTimerTick {
|
|
53
|
+
/** Wire order retained on decode; local capture assigns it when omitted. */
|
|
54
|
+
readonly order?: bigint;
|
|
55
|
+
readonly deliveryIndex: bigint;
|
|
56
|
+
readonly scheduledIndex: bigint;
|
|
57
|
+
readonly scheduledAtUnixMs: number;
|
|
58
|
+
readonly skippedTicks: bigint;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export interface ServiceRelocationMembership {
|
|
62
|
+
readonly actorKey: string;
|
|
63
|
+
readonly spotKey: string;
|
|
64
|
+
readonly spotObjectGeneration: bigint;
|
|
65
|
+
readonly membershipEpoch: bigint;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export interface ServiceRelocationEnvelope {
|
|
69
|
+
readonly aggregateId: string;
|
|
70
|
+
readonly aggregateGeneration: bigint;
|
|
71
|
+
/** Deployment ordinal carried by relocation-envelope-v1, distinct from staging identity. */
|
|
72
|
+
readonly applicationVersion?: bigint;
|
|
73
|
+
readonly participants: readonly ServiceRelocationParticipant[];
|
|
74
|
+
readonly memberships: readonly ServiceRelocationMembership[];
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export interface ServiceRelocationPublication {
|
|
78
|
+
readonly reference: string;
|
|
79
|
+
readonly checksumCrc32c: number;
|
|
80
|
+
readonly aggregateId: string;
|
|
81
|
+
readonly aggregateGeneration: bigint;
|
|
82
|
+
readonly inventoryDigest: string;
|
|
83
|
+
readonly targetOwnerId: string;
|
|
84
|
+
readonly targetOwnerLeaseGeneration: bigint;
|
|
85
|
+
/** Canonical authority-slot fields retained when a publication is replaced. */
|
|
86
|
+
readonly targetAttemptGeneration?: bigint;
|
|
87
|
+
readonly sourceNodeRid?: string;
|
|
88
|
+
readonly sourceNodeGeneration?: bigint;
|
|
89
|
+
readonly sourceOwnerId?: string;
|
|
90
|
+
readonly sourceOwnerLeaseGeneration?: bigint;
|
|
91
|
+
readonly targetNodeRid?: string;
|
|
92
|
+
readonly targetNodeGeneration?: bigint;
|
|
93
|
+
readonly coordinatorOwnerId?: string;
|
|
94
|
+
readonly coordinatorLeaseGeneration?: bigint;
|
|
95
|
+
readonly coordinatorNodeRid?: string;
|
|
96
|
+
readonly coordinatorNodeGeneration?: bigint;
|
|
97
|
+
readonly coordinatorExpectedStoreVersion?: string;
|
|
98
|
+
readonly canonicalPhase?: number;
|
|
99
|
+
readonly canonicalSourceCleanupState?: number;
|
|
100
|
+
/** True when the publication lives in the canonical ZLAU relocation slot. */
|
|
101
|
+
readonly canonical?: boolean;
|
|
102
|
+
readonly applicationVersion?: bigint;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export interface ServiceRelocationAuthorityCodec {
|
|
106
|
+
publish(
|
|
107
|
+
currentPayload: Uint8Array,
|
|
108
|
+
publication: ServiceRelocationPublication
|
|
109
|
+
): Uint8Array;
|
|
110
|
+
read(payload: Uint8Array): ServiceRelocationPublication | undefined;
|
|
111
|
+
clear(currentPayload: Uint8Array, expectedReference: string): Uint8Array;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
interface ServiceRelocationAuthorityEnvelope {
|
|
115
|
+
readonly base: Buffer;
|
|
116
|
+
readonly publication: ServiceRelocationPublication;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
interface CanonicalAuthorityLayout {
|
|
120
|
+
readonly flags: number;
|
|
121
|
+
readonly body: Buffer;
|
|
122
|
+
readonly slotStart: number;
|
|
123
|
+
readonly slotEnd: number;
|
|
124
|
+
readonly slot: Buffer;
|
|
125
|
+
readonly ownerId: string;
|
|
126
|
+
readonly ownerLeaseGeneration: bigint;
|
|
127
|
+
readonly nodeRid: string;
|
|
128
|
+
readonly nodeGeneration: bigint;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export interface CanonicalRelocationSlot {
|
|
132
|
+
readonly aggregateId: string;
|
|
133
|
+
readonly aggregateGeneration: bigint;
|
|
134
|
+
readonly targetAttemptGeneration: bigint;
|
|
135
|
+
readonly reference: string;
|
|
136
|
+
readonly checksumCrc32c: number;
|
|
137
|
+
readonly sourceNodeRid: string;
|
|
138
|
+
readonly sourceNodeGeneration: bigint;
|
|
139
|
+
readonly sourceOwnerId: string;
|
|
140
|
+
readonly sourceOwnerLeaseGeneration: bigint;
|
|
141
|
+
readonly targetNodeRid: string;
|
|
142
|
+
readonly targetNodeGeneration: bigint;
|
|
143
|
+
readonly applicationVersion: bigint;
|
|
144
|
+
readonly targetOwnerId: string;
|
|
145
|
+
readonly targetOwnerLeaseGeneration: bigint;
|
|
146
|
+
readonly coordinatorOwnerId: string;
|
|
147
|
+
readonly coordinatorLeaseGeneration: bigint;
|
|
148
|
+
readonly coordinatorNodeRid: string;
|
|
149
|
+
readonly coordinatorNodeGeneration: bigint;
|
|
150
|
+
readonly coordinatorExpectedStoreVersion: string;
|
|
151
|
+
readonly phase: number;
|
|
152
|
+
readonly sourceCleanupState: number;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/** Deterministic Location authority wrapper for one immutable relocation root. */
|
|
156
|
+
export class ServiceRelocationAuthorityPayloadCodec
|
|
157
|
+
implements ServiceRelocationAuthorityCodec {
|
|
158
|
+
publish(
|
|
159
|
+
currentPayload: Uint8Array,
|
|
160
|
+
publication: ServiceRelocationPublication
|
|
161
|
+
): Uint8Array {
|
|
162
|
+
if (this.read(currentPayload) !== undefined) {
|
|
163
|
+
throw new TypeError('Location authority already contains a relocation publication.');
|
|
164
|
+
}
|
|
165
|
+
const canonical = decodeCanonicalAuthorityLayout(currentPayload);
|
|
166
|
+
if (canonical !== undefined) {
|
|
167
|
+
return replaceCanonicalRelocationSlot(
|
|
168
|
+
canonical,
|
|
169
|
+
encodeCanonicalRelocationPublicationSlot(canonical, publication)
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
return encodeAuthorityEnvelope(Buffer.from(currentPayload), publication);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
read(payload: Uint8Array): ServiceRelocationPublication | undefined {
|
|
176
|
+
return decodeCanonicalAuthorityPublication(payload)
|
|
177
|
+
?? decodeAuthorityEnvelope(payload)?.publication;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
clear(currentPayload: Uint8Array, expectedReference: string): Uint8Array {
|
|
181
|
+
const canonical = decodeCanonicalAuthorityLayout(currentPayload);
|
|
182
|
+
const canonicalPublication = canonical === undefined
|
|
183
|
+
? undefined
|
|
184
|
+
: decodeCanonicalRelocationSlot(canonical.slot);
|
|
185
|
+
if (canonical !== undefined && canonicalPublication?.reference !== undefined) {
|
|
186
|
+
if (canonicalPublication.reference !== requireText(
|
|
187
|
+
expectedReference,
|
|
188
|
+
'relocation reference'
|
|
189
|
+
)) {
|
|
190
|
+
throw new TypeError('Location authority relocation reference changed.');
|
|
191
|
+
}
|
|
192
|
+
return replaceCanonicalRelocationSlot(canonical, Buffer.alloc(0));
|
|
193
|
+
}
|
|
194
|
+
const current = decodeAuthorityEnvelope(currentPayload);
|
|
195
|
+
if (
|
|
196
|
+
current === undefined
|
|
197
|
+
|| current.publication.reference !== requireText(
|
|
198
|
+
expectedReference,
|
|
199
|
+
'relocation reference'
|
|
200
|
+
)
|
|
201
|
+
) {
|
|
202
|
+
throw new TypeError('Location authority relocation reference changed.');
|
|
203
|
+
}
|
|
204
|
+
return Buffer.from(current.base);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/** Returns the application authority payload hidden by relocation metadata. */
|
|
209
|
+
export function serviceRelocationAuthorityApplicationPayload(
|
|
210
|
+
payload: Uint8Array
|
|
211
|
+
): Buffer {
|
|
212
|
+
const canonical = decodeCanonicalAuthorityLayout(payload);
|
|
213
|
+
if (canonical !== undefined && canonical.slot.byteLength !== 0) {
|
|
214
|
+
if (decodeCanonicalRelocationSlot(canonical.slot) === undefined) {
|
|
215
|
+
throw new TypeError('Canonical authority relocation slot is invalid.');
|
|
216
|
+
}
|
|
217
|
+
return replaceCanonicalRelocationSlot(canonical, Buffer.alloc(0));
|
|
218
|
+
}
|
|
219
|
+
return Buffer.from(decodeAuthorityEnvelope(payload)?.base ?? payload);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/** Reads the canonical relocation identity even before its root pointer exists. */
|
|
223
|
+
export function serviceRelocationAuthoritySlotIdentity(
|
|
224
|
+
payload: Uint8Array
|
|
225
|
+
): Pick<
|
|
226
|
+
ServiceRelocationPublication,
|
|
227
|
+
'aggregateId' | 'aggregateGeneration' | 'applicationVersion'
|
|
228
|
+
> | undefined {
|
|
229
|
+
const layout = decodeCanonicalAuthorityLayout(payload);
|
|
230
|
+
const slot = layout === undefined || layout.slot.byteLength === 0
|
|
231
|
+
? undefined
|
|
232
|
+
: decodeCanonicalRelocationSlot(layout.slot);
|
|
233
|
+
return slot === undefined
|
|
234
|
+
? undefined
|
|
235
|
+
: {
|
|
236
|
+
aggregateId: slot.aggregateId,
|
|
237
|
+
aggregateGeneration: slot.aggregateGeneration,
|
|
238
|
+
applicationVersion: slot.applicationVersion
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/** Replaces the application payload without changing relocation metadata. */
|
|
243
|
+
export function replaceServiceRelocationAuthorityApplicationPayload(
|
|
244
|
+
payload: Uint8Array,
|
|
245
|
+
applicationPayload: Uint8Array
|
|
246
|
+
): Buffer {
|
|
247
|
+
const canonical = decodeCanonicalAuthorityLayout(payload);
|
|
248
|
+
if (canonical !== undefined && canonical.slot.byteLength !== 0) {
|
|
249
|
+
const replacement = decodeCanonicalAuthorityLayout(applicationPayload);
|
|
250
|
+
if (replacement === undefined || replacement.slot.byteLength !== 0) {
|
|
251
|
+
throw new TypeError('Canonical authority application replacement is not steady ZLAU.');
|
|
252
|
+
}
|
|
253
|
+
return replaceCanonicalRelocationSlot(replacement, canonical.slot);
|
|
254
|
+
}
|
|
255
|
+
const current = decodeAuthorityEnvelope(payload);
|
|
256
|
+
return current === undefined
|
|
257
|
+
? Buffer.from(applicationPayload)
|
|
258
|
+
: encodeAuthorityEnvelope(Buffer.from(applicationPayload), current.publication);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/** Projects an embedded canonical relocation slot to the exact target-ready fence. */
|
|
262
|
+
export function projectServiceRelocationAuthorityTargetReady(
|
|
263
|
+
payload: Uint8Array,
|
|
264
|
+
target: {
|
|
265
|
+
readonly targetAttemptGeneration: bigint;
|
|
266
|
+
readonly nodeRid: string;
|
|
267
|
+
readonly nodeGeneration: bigint;
|
|
268
|
+
readonly ownerId: string;
|
|
269
|
+
readonly ownerLeaseGeneration: bigint;
|
|
270
|
+
readonly coordinatorExpectedStoreVersion: string;
|
|
271
|
+
}
|
|
272
|
+
): Buffer {
|
|
273
|
+
const layout = decodeCanonicalAuthorityLayout(payload);
|
|
274
|
+
if (layout === undefined || layout.slot.byteLength === 0) {
|
|
275
|
+
throw new TypeError('Canonical authority relocation slot is missing.');
|
|
276
|
+
}
|
|
277
|
+
const current = decodeCanonicalRelocationSlot(layout.slot);
|
|
278
|
+
if (current === undefined) {
|
|
279
|
+
throw new TypeError('Canonical authority relocation slot is invalid.');
|
|
280
|
+
}
|
|
281
|
+
const slot = encodeCanonicalRelocationSlot({
|
|
282
|
+
...current,
|
|
283
|
+
targetAttemptGeneration: target.targetAttemptGeneration,
|
|
284
|
+
targetNodeRid: target.nodeRid,
|
|
285
|
+
targetNodeGeneration: target.nodeGeneration,
|
|
286
|
+
targetOwnerId: target.ownerId,
|
|
287
|
+
targetOwnerLeaseGeneration: target.ownerLeaseGeneration,
|
|
288
|
+
coordinatorOwnerId: target.ownerId,
|
|
289
|
+
coordinatorLeaseGeneration: target.ownerLeaseGeneration,
|
|
290
|
+
coordinatorNodeRid: target.nodeRid,
|
|
291
|
+
coordinatorNodeGeneration: target.nodeGeneration,
|
|
292
|
+
coordinatorExpectedStoreVersion: target.coordinatorExpectedStoreVersion,
|
|
293
|
+
phase: 5,
|
|
294
|
+
sourceCleanupState: 0
|
|
295
|
+
});
|
|
296
|
+
return replaceCanonicalRelocationSlot(layout, slot);
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
function decodeCanonicalAuthorityPublication(
|
|
300
|
+
payload: Uint8Array
|
|
301
|
+
): ServiceRelocationPublication | undefined {
|
|
302
|
+
const layout = decodeCanonicalAuthorityLayout(payload);
|
|
303
|
+
if (layout === undefined || layout.slot.byteLength === 0) return undefined;
|
|
304
|
+
const slot = decodeCanonicalRelocationSlot(layout.slot);
|
|
305
|
+
if (slot === undefined) return undefined;
|
|
306
|
+
return {
|
|
307
|
+
reference: slot.reference,
|
|
308
|
+
checksumCrc32c: slot.checksumCrc32c,
|
|
309
|
+
aggregateId: slot.aggregateId,
|
|
310
|
+
aggregateGeneration: slot.aggregateGeneration,
|
|
311
|
+
inventoryDigest: '0'.repeat(64),
|
|
312
|
+
targetOwnerId: slot.targetOwnerId,
|
|
313
|
+
targetOwnerLeaseGeneration: slot.targetOwnerLeaseGeneration,
|
|
314
|
+
targetAttemptGeneration: slot.targetAttemptGeneration,
|
|
315
|
+
sourceNodeRid: slot.sourceNodeRid,
|
|
316
|
+
sourceNodeGeneration: slot.sourceNodeGeneration,
|
|
317
|
+
sourceOwnerId: slot.sourceOwnerId,
|
|
318
|
+
sourceOwnerLeaseGeneration: slot.sourceOwnerLeaseGeneration,
|
|
319
|
+
targetNodeRid: slot.targetNodeRid,
|
|
320
|
+
targetNodeGeneration: slot.targetNodeGeneration,
|
|
321
|
+
coordinatorOwnerId: slot.coordinatorOwnerId,
|
|
322
|
+
coordinatorLeaseGeneration: slot.coordinatorLeaseGeneration,
|
|
323
|
+
coordinatorNodeRid: slot.coordinatorNodeRid,
|
|
324
|
+
coordinatorNodeGeneration: slot.coordinatorNodeGeneration,
|
|
325
|
+
coordinatorExpectedStoreVersion: slot.coordinatorExpectedStoreVersion,
|
|
326
|
+
canonicalPhase: slot.phase,
|
|
327
|
+
canonicalSourceCleanupState: slot.sourceCleanupState,
|
|
328
|
+
canonical: true,
|
|
329
|
+
applicationVersion: slot.applicationVersion
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
function decodeCanonicalAuthorityLayout(
|
|
334
|
+
payload: Uint8Array
|
|
335
|
+
): CanonicalAuthorityLayout | undefined {
|
|
336
|
+
try {
|
|
337
|
+
const bytes = Buffer.from(payload);
|
|
338
|
+
if (bytes.byteLength < 20 || bytes.byteLength > 1024 * 1024) return undefined;
|
|
339
|
+
const reader = new CanonicalReader(bytes);
|
|
340
|
+
reader.expect(Buffer.from('ZLAU'));
|
|
341
|
+
if (reader.u8() !== 1) return undefined;
|
|
342
|
+
const flags = reader.u16();
|
|
343
|
+
const body = reader.take(reader.u32());
|
|
344
|
+
const checksumOffset = reader.offset;
|
|
345
|
+
if (reader.u32() !== crc32c(bytes.subarray(0, checksumOffset)) || !reader.done) {
|
|
346
|
+
return undefined;
|
|
347
|
+
}
|
|
348
|
+
const bodyReader = new CanonicalReader(body);
|
|
349
|
+
bodyReader.u8();
|
|
350
|
+
bodyReader.u8();
|
|
351
|
+
bodyReader.take(bodyReader.u16());
|
|
352
|
+
const ownerId = bodyReader.text8(false);
|
|
353
|
+
const ownerLeaseGeneration = bodyReader.u64();
|
|
354
|
+
bodyReader.text8(false);
|
|
355
|
+
const nodeRid = bodyReader.text8(false);
|
|
356
|
+
const nodeGeneration = bodyReader.u64();
|
|
357
|
+
const slotStart = bodyReader.offset;
|
|
358
|
+
const presence = bodyReader.u8();
|
|
359
|
+
if (presence > 1) return undefined;
|
|
360
|
+
const slot = bodyReader.take(bodyReader.u32());
|
|
361
|
+
const slotEnd = bodyReader.offset;
|
|
362
|
+
if ((presence === 0) !== (slot.byteLength === 0)) return undefined;
|
|
363
|
+
return {
|
|
364
|
+
flags,
|
|
365
|
+
body: Buffer.from(body),
|
|
366
|
+
slotStart,
|
|
367
|
+
slotEnd,
|
|
368
|
+
slot: Buffer.from(slot),
|
|
369
|
+
ownerId,
|
|
370
|
+
ownerLeaseGeneration,
|
|
371
|
+
nodeRid,
|
|
372
|
+
nodeGeneration
|
|
373
|
+
};
|
|
374
|
+
} catch {
|
|
375
|
+
return undefined;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
export function decodeCanonicalRelocationSlot(
|
|
380
|
+
payload: Uint8Array,
|
|
381
|
+
rootAggregateGeneration?: bigint
|
|
382
|
+
): CanonicalRelocationSlot | undefined {
|
|
383
|
+
try {
|
|
384
|
+
const reader = new CanonicalReader(payload);
|
|
385
|
+
const aggregateId = uuid(reader.u64(), reader.u64());
|
|
386
|
+
if (aggregateId === undefined) return undefined;
|
|
387
|
+
const aggregateGeneration = reader.u64();
|
|
388
|
+
const targetAttemptGeneration = reader.u64();
|
|
389
|
+
const reference = reader.text16();
|
|
390
|
+
const checksumCrc32c = reader.u32();
|
|
391
|
+
const sourceNodeRid = reader.text8(false);
|
|
392
|
+
const sourceNodeGeneration = reader.u64();
|
|
393
|
+
const sourceOwnerId = reader.text8(false);
|
|
394
|
+
const sourceOwnerLeaseGeneration = reader.u64();
|
|
395
|
+
const targetNodeRid = reader.text8(true);
|
|
396
|
+
const targetNodeGeneration = reader.u64();
|
|
397
|
+
const targetOwnerId = reader.text8(true);
|
|
398
|
+
const targetOwnerLeaseGeneration = reader.u64();
|
|
399
|
+
const coordinatorOwnerId = reader.text8(false);
|
|
400
|
+
const coordinatorLeaseGeneration = reader.u64();
|
|
401
|
+
const coordinatorNodeRid = reader.text8(false);
|
|
402
|
+
const coordinatorNodeGeneration = reader.u64();
|
|
403
|
+
const coordinatorExpectedStoreVersion = reader.text8(true);
|
|
404
|
+
const phase = reader.u8();
|
|
405
|
+
const applicationVersion = reader.i64();
|
|
406
|
+
const sourceCleanupState = reader.u8();
|
|
407
|
+
if (!reader.done
|
|
408
|
+
|| aggregateGeneration > 0x7fff_ffff_ffff_fffen
|
|
409
|
+
|| (aggregateGeneration === 0n && phase !== 1)
|
|
410
|
+
|| (rootAggregateGeneration !== undefined
|
|
411
|
+
&& aggregateGeneration !== rootAggregateGeneration)
|
|
412
|
+
|| targetAttemptGeneration > 0x7fff_ffff_ffff_ffffn
|
|
413
|
+
|| sourceNodeGeneration === 0n
|
|
414
|
+
|| sourceNodeGeneration > 0x7fff_ffff_ffff_ffffn
|
|
415
|
+
|| sourceOwnerLeaseGeneration === 0n
|
|
416
|
+
|| sourceOwnerLeaseGeneration > 0x7fff_ffff_ffff_ffffn
|
|
417
|
+
|| targetNodeGeneration > 0x7fff_ffff_ffff_ffffn
|
|
418
|
+
|| targetOwnerLeaseGeneration > 0x7fff_ffff_ffff_ffffn
|
|
419
|
+
|| coordinatorLeaseGeneration === 0n
|
|
420
|
+
|| coordinatorLeaseGeneration > 0x7fff_ffff_ffff_ffffn
|
|
421
|
+
|| coordinatorNodeGeneration === 0n
|
|
422
|
+
|| coordinatorNodeGeneration > 0x7fff_ffff_ffff_ffffn
|
|
423
|
+
|| phase < 1 || phase > 9
|
|
424
|
+
|| applicationVersion < 0n
|
|
425
|
+
|| sourceCleanupState > 2) return undefined;
|
|
426
|
+
return {
|
|
427
|
+
aggregateId,
|
|
428
|
+
aggregateGeneration,
|
|
429
|
+
targetAttemptGeneration,
|
|
430
|
+
reference,
|
|
431
|
+
checksumCrc32c,
|
|
432
|
+
sourceNodeRid,
|
|
433
|
+
sourceNodeGeneration,
|
|
434
|
+
sourceOwnerId,
|
|
435
|
+
sourceOwnerLeaseGeneration,
|
|
436
|
+
targetNodeRid,
|
|
437
|
+
targetNodeGeneration,
|
|
438
|
+
applicationVersion,
|
|
439
|
+
targetOwnerId,
|
|
440
|
+
targetOwnerLeaseGeneration,
|
|
441
|
+
coordinatorOwnerId,
|
|
442
|
+
coordinatorLeaseGeneration,
|
|
443
|
+
coordinatorNodeRid,
|
|
444
|
+
coordinatorNodeGeneration,
|
|
445
|
+
coordinatorExpectedStoreVersion,
|
|
446
|
+
phase,
|
|
447
|
+
sourceCleanupState
|
|
448
|
+
};
|
|
449
|
+
} catch {
|
|
450
|
+
return undefined;
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
export function encodeCanonicalRelocationSlot(value: CanonicalRelocationSlot): Buffer {
|
|
455
|
+
const id = relocationId(canonicalUuid(value.aggregateId, 'aggregate id'));
|
|
456
|
+
const aggregateGeneration = nonNegativeBigInt(
|
|
457
|
+
value.aggregateGeneration,
|
|
458
|
+
'aggregate generation'
|
|
459
|
+
);
|
|
460
|
+
const targetAttemptGeneration = nonNegativeBigInt(
|
|
461
|
+
value.targetAttemptGeneration,
|
|
462
|
+
'target attempt generation'
|
|
463
|
+
);
|
|
464
|
+
if (aggregateGeneration > 0x7fff_ffff_ffff_fffen) {
|
|
465
|
+
throw new TypeError('Aggregate generation exceeds the issued range.');
|
|
466
|
+
}
|
|
467
|
+
if (aggregateGeneration === 0n && value.phase !== 1) {
|
|
468
|
+
throw new TypeError('Zero aggregate generation is only valid while preparing.');
|
|
469
|
+
}
|
|
470
|
+
if (targetAttemptGeneration > 0x7fff_ffff_ffff_ffffn) {
|
|
471
|
+
throw new TypeError('Target attempt generation exceeds the ordinal range.');
|
|
472
|
+
}
|
|
473
|
+
const sourceNodeGeneration = canonicalNonZeroOrdinal(
|
|
474
|
+
value.sourceNodeGeneration,
|
|
475
|
+
'source node generation'
|
|
476
|
+
);
|
|
477
|
+
const sourceOwnerLeaseGeneration = canonicalNonZeroOrdinal(
|
|
478
|
+
value.sourceOwnerLeaseGeneration,
|
|
479
|
+
'source owner lease generation'
|
|
480
|
+
);
|
|
481
|
+
const targetNodeGeneration = canonicalOrdinal(
|
|
482
|
+
value.targetNodeGeneration,
|
|
483
|
+
'target node generation'
|
|
484
|
+
);
|
|
485
|
+
const targetOwnerLeaseGeneration = canonicalOrdinal(
|
|
486
|
+
value.targetOwnerLeaseGeneration,
|
|
487
|
+
'target owner lease generation'
|
|
488
|
+
);
|
|
489
|
+
const coordinatorLeaseGeneration = canonicalNonZeroOrdinal(
|
|
490
|
+
value.coordinatorLeaseGeneration,
|
|
491
|
+
'coordinator lease generation'
|
|
492
|
+
);
|
|
493
|
+
const coordinatorNodeGeneration = canonicalNonZeroOrdinal(
|
|
494
|
+
value.coordinatorNodeGeneration,
|
|
495
|
+
'coordinator node generation'
|
|
496
|
+
);
|
|
497
|
+
if (!Number.isInteger(value.phase) || value.phase < 1 || value.phase > 9) {
|
|
498
|
+
throw new TypeError('Canonical relocation phase is invalid.');
|
|
499
|
+
}
|
|
500
|
+
if (!Number.isInteger(value.sourceCleanupState)
|
|
501
|
+
|| value.sourceCleanupState < 0
|
|
502
|
+
|| value.sourceCleanupState > 2) {
|
|
503
|
+
throw new TypeError('Canonical source cleanup state is invalid.');
|
|
504
|
+
}
|
|
505
|
+
return Buffer.concat([
|
|
506
|
+
canonicalU64(id.high), canonicalU64(id.low),
|
|
507
|
+
canonicalU64(aggregateGeneration), canonicalU64(targetAttemptGeneration),
|
|
508
|
+
canonicalText16(value.reference), canonicalU32(value.checksumCrc32c),
|
|
509
|
+
canonicalText8(value.sourceNodeRid), canonicalU64(sourceNodeGeneration),
|
|
510
|
+
canonicalText8(value.sourceOwnerId), canonicalU64(sourceOwnerLeaseGeneration),
|
|
511
|
+
canonicalOptionalText8(value.targetNodeRid), canonicalU64(targetNodeGeneration),
|
|
512
|
+
canonicalOptionalText8(value.targetOwnerId), canonicalU64(targetOwnerLeaseGeneration),
|
|
513
|
+
canonicalText8(value.coordinatorOwnerId), canonicalU64(coordinatorLeaseGeneration),
|
|
514
|
+
canonicalText8(value.coordinatorNodeRid), canonicalU64(coordinatorNodeGeneration),
|
|
515
|
+
canonicalOptionalText8(value.coordinatorExpectedStoreVersion),
|
|
516
|
+
Buffer.of(value.phase), canonicalI64(value.applicationVersion),
|
|
517
|
+
Buffer.of(value.sourceCleanupState)
|
|
518
|
+
]);
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
function encodeCanonicalRelocationPublicationSlot(
|
|
522
|
+
layout: CanonicalAuthorityLayout,
|
|
523
|
+
publication: ServiceRelocationPublication
|
|
524
|
+
): Buffer {
|
|
525
|
+
validatePublication(publication);
|
|
526
|
+
if (layout.slot.byteLength !== 0) {
|
|
527
|
+
throw new TypeError('Canonical authority relocation slot is already published.');
|
|
528
|
+
}
|
|
529
|
+
const nodeRid = requireText(layout.nodeRid, 'canonical authority node rid');
|
|
530
|
+
const ownerId = requireText(layout.ownerId, 'canonical authority owner id');
|
|
531
|
+
const applicationVersion = nonNegativeBigInt(
|
|
532
|
+
publication.applicationVersion ?? 0n,
|
|
533
|
+
'application version'
|
|
534
|
+
);
|
|
535
|
+
return encodeCanonicalRelocationSlot({
|
|
536
|
+
aggregateId: publication.aggregateId,
|
|
537
|
+
aggregateGeneration: publication.aggregateGeneration,
|
|
538
|
+
targetAttemptGeneration: publication.targetAttemptGeneration ?? 0n,
|
|
539
|
+
reference: publication.reference,
|
|
540
|
+
checksumCrc32c: publication.checksumCrc32c,
|
|
541
|
+
sourceNodeRid: publication.sourceNodeRid ?? nodeRid,
|
|
542
|
+
sourceNodeGeneration: publication.sourceNodeGeneration ?? layout.nodeGeneration,
|
|
543
|
+
sourceOwnerId: publication.sourceOwnerId ?? ownerId,
|
|
544
|
+
sourceOwnerLeaseGeneration:
|
|
545
|
+
publication.sourceOwnerLeaseGeneration ?? layout.ownerLeaseGeneration,
|
|
546
|
+
targetNodeRid: publication.targetNodeRid ?? nodeRid,
|
|
547
|
+
targetNodeGeneration: publication.targetNodeGeneration ?? layout.nodeGeneration,
|
|
548
|
+
targetOwnerId: publication.targetOwnerId,
|
|
549
|
+
targetOwnerLeaseGeneration: publication.targetOwnerLeaseGeneration,
|
|
550
|
+
coordinatorOwnerId: publication.coordinatorOwnerId ?? ownerId,
|
|
551
|
+
coordinatorLeaseGeneration:
|
|
552
|
+
publication.coordinatorLeaseGeneration ?? layout.ownerLeaseGeneration,
|
|
553
|
+
coordinatorNodeRid: publication.coordinatorNodeRid ?? nodeRid,
|
|
554
|
+
coordinatorNodeGeneration:
|
|
555
|
+
publication.coordinatorNodeGeneration ?? layout.nodeGeneration,
|
|
556
|
+
coordinatorExpectedStoreVersion:
|
|
557
|
+
publication.coordinatorExpectedStoreVersion ?? '',
|
|
558
|
+
phase: publication.canonicalPhase ?? 8,
|
|
559
|
+
applicationVersion,
|
|
560
|
+
sourceCleanupState: publication.canonicalSourceCleanupState ?? 0
|
|
561
|
+
});
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
function replaceCanonicalRelocationSlot(
|
|
565
|
+
layout: CanonicalAuthorityLayout,
|
|
566
|
+
slot: Uint8Array
|
|
567
|
+
): Buffer {
|
|
568
|
+
const encodedSlot = Buffer.from(slot);
|
|
569
|
+
const body = Buffer.concat([
|
|
570
|
+
layout.body.subarray(0, layout.slotStart),
|
|
571
|
+
Buffer.of(encodedSlot.byteLength === 0 ? 0 : 1),
|
|
572
|
+
canonicalU32(encodedSlot.byteLength),
|
|
573
|
+
encodedSlot,
|
|
574
|
+
layout.body.subarray(layout.slotEnd)
|
|
575
|
+
]);
|
|
576
|
+
const envelope = Buffer.concat([
|
|
577
|
+
Buffer.from('ZLAU'), Buffer.of(1), canonicalU16(layout.flags),
|
|
578
|
+
canonicalU32(body.byteLength), body
|
|
579
|
+
]);
|
|
580
|
+
const result = Buffer.concat([envelope, canonicalU32(crc32c(envelope))]);
|
|
581
|
+
if (result.byteLength > 1024 * 1024) {
|
|
582
|
+
throw new TypeError('Canonical authority payload exceeds 1 MiB.');
|
|
583
|
+
}
|
|
584
|
+
return result;
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
function validatePublication(publication: ServiceRelocationPublication): void {
|
|
588
|
+
requireText(publication.reference, 'relocation reference');
|
|
589
|
+
canonicalUuid(publication.aggregateId, 'aggregate id');
|
|
590
|
+
const checksum = safeInteger(publication.checksumCrc32c, 'relocation checksum');
|
|
591
|
+
if (checksum < 0 || checksum > 0xffff_ffff) {
|
|
592
|
+
throw new TypeError('Relocation checksum must be an unsigned 32-bit integer.');
|
|
593
|
+
}
|
|
594
|
+
positiveBigInt(publication.aggregateGeneration, 'aggregate generation');
|
|
595
|
+
requireText(publication.targetOwnerId, 'target owner id');
|
|
596
|
+
positiveBigInt(publication.targetOwnerLeaseGeneration, 'target owner lease generation');
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
export function encodeServiceRelocationEnvelope(
|
|
600
|
+
envelope: ServiceRelocationEnvelope,
|
|
601
|
+
applicationVersion: bigint
|
|
602
|
+
): Buffer {
|
|
603
|
+
const aggregate = relocationId(canonicalUuid(envelope.aggregateId, 'aggregate id'));
|
|
604
|
+
const encodedApplicationVersion = nonNegativeBigInt(
|
|
605
|
+
applicationVersion,
|
|
606
|
+
'application version'
|
|
607
|
+
);
|
|
608
|
+
const participants = canonicalParticipants(envelope.participants);
|
|
609
|
+
const root = participants.find(value => value.rootSpotId !== undefined)
|
|
610
|
+
?? participants.find(value => value.objectKind !== 'actor')
|
|
611
|
+
?? participants[0]!;
|
|
612
|
+
const rootObjectKind = root.rootObjectKind ?? root.objectKind;
|
|
613
|
+
if (rootObjectKind === 'actor' && participants.length !== 1) {
|
|
614
|
+
throw new TypeError('Standalone Actor relocation requires one participant.');
|
|
615
|
+
}
|
|
616
|
+
const applicationStates = participants.map((participant, index) => {
|
|
617
|
+
const hasState = participant.applicationStatePresent !== false;
|
|
618
|
+
if (!hasState && participant.applicationState.byteLength !== 0) {
|
|
619
|
+
throw new TypeError('Absent relocation application state must have an empty payload.');
|
|
620
|
+
}
|
|
621
|
+
return {
|
|
622
|
+
participantId: BigInt(index + 1),
|
|
623
|
+
hasState,
|
|
624
|
+
payload: Buffer.from(participant.applicationState)
|
|
625
|
+
};
|
|
626
|
+
});
|
|
627
|
+
const saved = participants.flatMap((participant, index) => participant.queuedMessages.map(message => ({
|
|
628
|
+
participantId: BigInt(index + 1),
|
|
629
|
+
order: positiveBigInt(message.sequence, 'queue sequence'),
|
|
630
|
+
frozenRecord: Buffer.from(message.payload)
|
|
631
|
+
}))).sort(compareParticipantOrder);
|
|
632
|
+
if (saved.some((value, index) => index > 0
|
|
633
|
+
&& compareParticipantOrder(saved[index - 1]!, value) === 0)) {
|
|
634
|
+
throw new TypeError('Relocation queue sequences must be unique per participant.');
|
|
635
|
+
}
|
|
636
|
+
const timers = participants.flatMap((participant, index) => participant.timers.map(timer => ({
|
|
637
|
+
participantId: BigInt(index + 1), timer
|
|
638
|
+
}))).sort((a, b) => a.participantId === b.participantId
|
|
639
|
+
? Buffer.compare(Buffer.from(a.timer.timerId), Buffer.from(b.timer.timerId))
|
|
640
|
+
: a.participantId < b.participantId ? -1 : 1);
|
|
641
|
+
if (timers.some((value, index) => index > 0
|
|
642
|
+
&& timers[index - 1]!.participantId === value.participantId
|
|
643
|
+
&& timers[index - 1]!.timer.timerId === value.timer.timerId)) {
|
|
644
|
+
throw new TypeError('Relocation timer ids must be unique per participant.');
|
|
645
|
+
}
|
|
646
|
+
const nextOrder = new Map<bigint, bigint>();
|
|
647
|
+
for (const value of saved) {
|
|
648
|
+
const current = nextOrder.get(value.participantId) ?? 0n;
|
|
649
|
+
if (value.order > current) nextOrder.set(value.participantId, value.order);
|
|
650
|
+
}
|
|
651
|
+
const pending = timers.flatMap(({ participantId, timer }) => timer.pendingTicks.map(tick => {
|
|
652
|
+
const current = nextOrder.get(participantId) ?? 0n;
|
|
653
|
+
const order = tick.order === undefined
|
|
654
|
+
? current + 1n
|
|
655
|
+
: positiveBigInt(tick.order, 'pending timer order');
|
|
656
|
+
if (order > current) nextOrder.set(participantId, order);
|
|
657
|
+
return { participantId, order, timerName: timer.timerId, tick };
|
|
658
|
+
})).sort(compareParticipantOrder);
|
|
659
|
+
return Buffer.from(encodeGeneratedRelocationEnvelopeV1({
|
|
660
|
+
relocationHigh: aggregate.high,
|
|
661
|
+
relocationLow: aggregate.low,
|
|
662
|
+
object: toGeneratedRelocationObject(root, rootObjectKind),
|
|
663
|
+
applicationVersion: encodedApplicationVersion,
|
|
664
|
+
applicationStates,
|
|
665
|
+
savedWork: saved,
|
|
666
|
+
timerRegistrations: timers.map(({ participantId, timer }) => ({
|
|
667
|
+
participantId,
|
|
668
|
+
name: timer.timerId,
|
|
669
|
+
handlerType: timer.handlerType,
|
|
670
|
+
periodMilliseconds: BigInt(positiveInteger(timer.intervalMs, 'timer interval')),
|
|
671
|
+
overrunPolicy: timerPolicy(timer.overrunPolicy),
|
|
672
|
+
maxCatchUpTicks: BigInt(positiveInteger(timer.maxCatchUpTicks, 'timer catch-up limit')),
|
|
673
|
+
stopOnUnhandledException: requireBoolean(timer.stopOnUnhandledException, 'timer stop-on-error flag'),
|
|
674
|
+
lastCompletedDeliveryIndex: nonNegativeBigInt(timer.deliveryIndex, 'timer delivery index'),
|
|
675
|
+
lastCompletedScheduledIndex: nonNegativeBigInt(timer.lastScheduledIndex, 'timer scheduled index'),
|
|
676
|
+
nextScheduledAtUnixMilliseconds: nonNegativeUnixMilliseconds(timer.dueAtUnixMs, 'timer due time')
|
|
677
|
+
})),
|
|
678
|
+
pendingTimerTicks: pending.map(value => ({
|
|
679
|
+
participantId: value.participantId,
|
|
680
|
+
order: value.order,
|
|
681
|
+
timerName: value.timerName,
|
|
682
|
+
deliveryIndex: nonNegativeBigInt(value.tick.deliveryIndex, 'pending timer delivery index'),
|
|
683
|
+
scheduledIndex: nonNegativeBigInt(value.tick.scheduledIndex, 'pending timer scheduled index'),
|
|
684
|
+
scheduledAtUnixMilliseconds: nonNegativeUnixMilliseconds(value.tick.scheduledAtUnixMs, 'pending timer scheduled time'),
|
|
685
|
+
skippedTicks: nonNegativeBigInt(value.tick.skippedTicks, 'pending timer skipped ticks')
|
|
686
|
+
}))
|
|
687
|
+
}));
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
export function decodeServiceRelocationEnvelope(
|
|
691
|
+
payload: Uint8Array,
|
|
692
|
+
aggregateGeneration: bigint
|
|
693
|
+
): ServiceRelocationEnvelope {
|
|
694
|
+
let generated: GeneratedRelocationEnvelopeV1;
|
|
695
|
+
try {
|
|
696
|
+
generated = decodeGeneratedRelocationEnvelopeV1([payload]);
|
|
697
|
+
} catch (cause) {
|
|
698
|
+
const message = cause instanceof Error ? cause.message : '';
|
|
699
|
+
if (message === 'object kind') {
|
|
700
|
+
throw new TypeError('relocation-envelope-v1 root object kind is invalid.', { cause });
|
|
701
|
+
}
|
|
702
|
+
if (message === 'relocation envelope trailing') {
|
|
703
|
+
throw new TypeError('Trailing relocation envelope bytes.', { cause });
|
|
704
|
+
}
|
|
705
|
+
throw new TypeError('Invalid relocation envelope.', { cause });
|
|
706
|
+
}
|
|
707
|
+
const aggregateId = uuid(generated.relocationHigh, generated.relocationLow);
|
|
708
|
+
if (aggregateId === undefined) throw new TypeError('Invalid relocation identity.');
|
|
709
|
+
positiveBigInt(aggregateGeneration, 'aggregate generation');
|
|
710
|
+
const participants = generated.applicationStates.map((state, index) => {
|
|
711
|
+
if (state.participantId !== BigInt(index + 1)) {
|
|
712
|
+
throw new TypeError('Application state participant order is invalid.');
|
|
713
|
+
}
|
|
714
|
+
return wireParticipant(state.participantId, state.hasState, Buffer.from(state.payload));
|
|
715
|
+
});
|
|
716
|
+
const byId = new Map(participants.map(value => [value.participantId!, value]));
|
|
717
|
+
for (const work of generated.savedWork) {
|
|
718
|
+
byId.get(work.participantId)!.queuedMessages.push({
|
|
719
|
+
sequence: work.order,
|
|
720
|
+
payload: Buffer.from(work.frozenRecord)
|
|
721
|
+
});
|
|
722
|
+
}
|
|
723
|
+
for (const timer of generated.timerRegistrations) {
|
|
724
|
+
byId.get(timer.participantId)!.timers.push({
|
|
725
|
+
timerId: timer.name,
|
|
726
|
+
handlerType: timer.handlerType,
|
|
727
|
+
startedAtUnixMs: 0,
|
|
728
|
+
dueAtUnixMs: unixMilliseconds(timer.nextScheduledAtUnixMilliseconds),
|
|
729
|
+
intervalMs: unixMilliseconds(timer.periodMilliseconds),
|
|
730
|
+
overrunPolicy: timerPolicyName(timer.overrunPolicy),
|
|
731
|
+
maxCatchUpTicks: unixMilliseconds(timer.maxCatchUpTicks),
|
|
732
|
+
stopOnUnhandledException: timer.stopOnUnhandledException,
|
|
733
|
+
deliveryIndex: timer.lastCompletedDeliveryIndex,
|
|
734
|
+
lastScheduledIndex: timer.lastCompletedScheduledIndex,
|
|
735
|
+
pendingTicks: []
|
|
736
|
+
});
|
|
737
|
+
}
|
|
738
|
+
for (const tick of generated.pendingTimerTicks) {
|
|
739
|
+
const timer = byId.get(tick.participantId)!.timers.find(value => value.timerId === tick.timerName)!;
|
|
740
|
+
(timer.pendingTicks as ServiceRelocationPendingTimerTick[]).push({
|
|
741
|
+
order: tick.order,
|
|
742
|
+
deliveryIndex: tick.deliveryIndex,
|
|
743
|
+
scheduledIndex: tick.scheduledIndex,
|
|
744
|
+
scheduledAtUnixMs: unixMilliseconds(tick.scheduledAtUnixMilliseconds),
|
|
745
|
+
skippedTicks: tick.skippedTicks
|
|
746
|
+
});
|
|
747
|
+
}
|
|
748
|
+
const rootParticipant = participants[0]!;
|
|
749
|
+
const rootProjection = fromGeneratedRelocationObject(generated.object);
|
|
750
|
+
return {
|
|
751
|
+
aggregateId,
|
|
752
|
+
aggregateGeneration,
|
|
753
|
+
applicationVersion: generated.applicationVersion,
|
|
754
|
+
participants: participants.map(value => value === rootParticipant
|
|
755
|
+
? { ...value, ...rootProjection }
|
|
756
|
+
: value),
|
|
757
|
+
memberships: []
|
|
758
|
+
};
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
function toGeneratedRelocationObject(
|
|
762
|
+
root: ServiceRelocationParticipant,
|
|
763
|
+
objectKind: ZLinkPlacementObjectKind
|
|
764
|
+
): GeneratedRelocationObjectIdentity {
|
|
765
|
+
const objectId = root.rootSpotId ?? authorityGlobalId(root.key);
|
|
766
|
+
const objectGeneration = root.rootSpotGeneration ?? root.objectGeneration;
|
|
767
|
+
if (objectKind === 'actor') {
|
|
768
|
+
return {
|
|
769
|
+
objectKind: 'actor',
|
|
770
|
+
actorId: objectId,
|
|
771
|
+
objectGeneration,
|
|
772
|
+
expectedAuthorityOwnerGeneration:
|
|
773
|
+
root.rootOwnerGeneration ?? root.authorityOwnerGeneration
|
|
774
|
+
};
|
|
775
|
+
}
|
|
776
|
+
if (objectKind === 'user_spot') {
|
|
777
|
+
return {
|
|
778
|
+
objectKind: 'userSpot',
|
|
779
|
+
spotId: objectId,
|
|
780
|
+
objectGeneration,
|
|
781
|
+
expectedAuthorityOwnerGeneration:
|
|
782
|
+
root.rootOwnerGeneration ?? root.authorityOwnerGeneration
|
|
783
|
+
};
|
|
784
|
+
}
|
|
785
|
+
return {
|
|
786
|
+
objectKind: 'instanceSpot',
|
|
787
|
+
instanceType: root.rootStableType ?? root.stableType,
|
|
788
|
+
spotId: objectId,
|
|
789
|
+
objectGeneration
|
|
790
|
+
};
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
function fromGeneratedRelocationObject(
|
|
794
|
+
object: GeneratedRelocationObjectIdentity
|
|
795
|
+
): Pick<
|
|
796
|
+
ServiceRelocationParticipant,
|
|
797
|
+
'rootSpotId' | 'rootSpotGeneration' | 'rootOwnerGeneration'
|
|
798
|
+
| 'rootObjectKind' | 'rootStableType'
|
|
799
|
+
> {
|
|
800
|
+
if (object.objectKind === 'actor') {
|
|
801
|
+
return {
|
|
802
|
+
rootSpotId: object.actorId,
|
|
803
|
+
rootSpotGeneration: object.objectGeneration,
|
|
804
|
+
rootOwnerGeneration: object.expectedAuthorityOwnerGeneration,
|
|
805
|
+
rootObjectKind: 'actor'
|
|
806
|
+
};
|
|
807
|
+
}
|
|
808
|
+
if (object.objectKind === 'userSpot') {
|
|
809
|
+
return {
|
|
810
|
+
rootSpotId: object.spotId,
|
|
811
|
+
rootSpotGeneration: object.objectGeneration,
|
|
812
|
+
rootOwnerGeneration: object.expectedAuthorityOwnerGeneration,
|
|
813
|
+
rootObjectKind: 'user_spot'
|
|
814
|
+
};
|
|
815
|
+
}
|
|
816
|
+
return {
|
|
817
|
+
rootSpotId: object.spotId,
|
|
818
|
+
rootSpotGeneration: object.objectGeneration,
|
|
819
|
+
rootObjectKind: 'instance_spot',
|
|
820
|
+
rootStableType: object.instanceType
|
|
821
|
+
};
|
|
822
|
+
}
|
|
823
|
+
|
|
824
|
+
function canonicalParticipants(values: readonly ServiceRelocationParticipant[]): readonly ServiceRelocationParticipant[] {
|
|
825
|
+
if (values.length === 0) throw new TypeError('Relocation participant count is outside its bound.');
|
|
826
|
+
const participants = [...values].sort((a, b) => Buffer.compare(Buffer.from(a.key), Buffer.from(b.key)));
|
|
827
|
+
if (new Set(participants.map(value => value.key)).size !== participants.length) {
|
|
828
|
+
throw new TypeError('Relocation participants must have unique keys.');
|
|
829
|
+
}
|
|
830
|
+
return participants;
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
function authorityGlobalId(key: string): string {
|
|
834
|
+
try {
|
|
835
|
+
return decodeAuthorityKey({ value: key } as ZLinkAuthorityKey).globalId;
|
|
836
|
+
} catch {
|
|
837
|
+
const marker = key.indexOf(':');
|
|
838
|
+
return marker < 0 ? requireText(key, 'participant key') : requireText(key.slice(marker + 1), 'participant key');
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
function relocationId(value: string): { readonly high: bigint; readonly low: bigint } {
|
|
843
|
+
const hex = value.replaceAll('-', '');
|
|
844
|
+
return { high: BigInt(`0x${hex.slice(0, 16)}`), low: BigInt(`0x${hex.slice(16)}`) };
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
function uuid(high: bigint, low: bigint): string | undefined {
|
|
848
|
+
if (high === 0n && low === 0n) return undefined;
|
|
849
|
+
const hex = high.toString(16).padStart(16, '0') + low.toString(16).padStart(16, '0');
|
|
850
|
+
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
851
|
+
}
|
|
852
|
+
|
|
853
|
+
function compareParticipantOrder<T extends { readonly participantId: bigint; readonly order: bigint }>(a: T, b: T): number {
|
|
854
|
+
return a.participantId === b.participantId
|
|
855
|
+
? a.order < b.order ? -1 : a.order > b.order ? 1 : 0
|
|
856
|
+
: a.participantId < b.participantId ? -1 : 1;
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
function timerPolicy(value: string): 1 | 2 | 3 {
|
|
860
|
+
if (value === 'skipLateTicks') return 1;
|
|
861
|
+
if (value === 'catchUpBounded') return 2;
|
|
862
|
+
if (value === 'delayNextTick') return 3;
|
|
863
|
+
throw new TypeError('Timer overrun policy is invalid.');
|
|
864
|
+
}
|
|
865
|
+
|
|
866
|
+
function timerPolicyName(value: number): string {
|
|
867
|
+
if (value === 1) return 'skipLateTicks';
|
|
868
|
+
if (value === 2) return 'catchUpBounded';
|
|
869
|
+
if (value === 3) return 'delayNextTick';
|
|
870
|
+
throw new TypeError('Timer overrun policy is invalid.');
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
function nonNegativeUnixMilliseconds(value: number, label: string): bigint {
|
|
874
|
+
const parsed = safeInteger(value, label);
|
|
875
|
+
if (parsed < 0) throw new TypeError(`${label} must not be negative.`);
|
|
876
|
+
return BigInt(parsed);
|
|
877
|
+
}
|
|
878
|
+
|
|
879
|
+
function unixMilliseconds(value: bigint): number {
|
|
880
|
+
if (value > BigInt(Number.MAX_SAFE_INTEGER)) throw new TypeError('Unix milliseconds exceed Node safe integer range.');
|
|
881
|
+
return Number(value);
|
|
882
|
+
}
|
|
883
|
+
|
|
884
|
+
function wireParticipant(participantId: bigint, applicationStatePresent: boolean, applicationState: Buffer): ServiceRelocationParticipant & {
|
|
885
|
+
queuedMessages: ServiceRelocationQueuedMessage[];
|
|
886
|
+
timers: ServiceRelocationTimer[];
|
|
887
|
+
} {
|
|
888
|
+
return {
|
|
889
|
+
participantId,
|
|
890
|
+
key: `wire:${participantId}`,
|
|
891
|
+
objectKind: 'actor',
|
|
892
|
+
stableType: 'wire',
|
|
893
|
+
objectGeneration: 1n,
|
|
894
|
+
authorityOwnerGeneration: 1n,
|
|
895
|
+
applicationStatePresent,
|
|
896
|
+
applicationState,
|
|
897
|
+
boundSessionState: Buffer.alloc(0),
|
|
898
|
+
queuedMessages: [],
|
|
899
|
+
timers: []
|
|
900
|
+
};
|
|
901
|
+
}
|
|
902
|
+
|
|
903
|
+
function objectKind(value: unknown): ZLinkPlacementObjectKind {
|
|
904
|
+
if (value !== 'actor' && value !== 'user_spot' && value !== 'instance_spot') {
|
|
905
|
+
throw new TypeError('Relocation object kind is invalid.');
|
|
906
|
+
}
|
|
907
|
+
return value;
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
export function inventoryDigest(
|
|
911
|
+
participants: readonly ServiceRelocationParticipant[],
|
|
912
|
+
memberships: readonly ServiceRelocationMembership[] = []
|
|
913
|
+
): string {
|
|
914
|
+
const identities = participants.map(participant => ({
|
|
915
|
+
key: requireText(participant.key, 'participant key'),
|
|
916
|
+
objectKind: objectKind(participant.objectKind),
|
|
917
|
+
stableType: requireText(participant.stableType, 'participant stable type'),
|
|
918
|
+
objectGeneration: positiveBigInt(
|
|
919
|
+
participant.objectGeneration,
|
|
920
|
+
'object generation'
|
|
921
|
+
).toString(),
|
|
922
|
+
authorityOwnerGeneration: positiveBigInt(
|
|
923
|
+
participant.authorityOwnerGeneration,
|
|
924
|
+
'authority owner generation'
|
|
925
|
+
).toString()
|
|
926
|
+
})).sort((left, right) => left.key.localeCompare(right.key));
|
|
927
|
+
if (new Set(identities.map(({ key }) => key)).size !== identities.length) {
|
|
928
|
+
throw new TypeError('Relocation participants must have unique keys.');
|
|
929
|
+
}
|
|
930
|
+
const canonicalMemberships = encodeMemberships(memberships, participants);
|
|
931
|
+
return createHash('sha256').update(JSON.stringify({
|
|
932
|
+
participants: identities,
|
|
933
|
+
memberships: canonicalMemberships
|
|
934
|
+
}), 'utf8').digest('hex');
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
function encodeAuthorityEnvelope(
|
|
938
|
+
base: Uint8Array,
|
|
939
|
+
publication: ServiceRelocationPublication
|
|
940
|
+
): Buffer {
|
|
941
|
+
const checksum = safeInteger(publication.checksumCrc32c, 'relocation checksum');
|
|
942
|
+
if (checksum < 0 || checksum > 0xffff_ffff) {
|
|
943
|
+
throw new TypeError('Relocation checksum must be an unsigned 32-bit integer.');
|
|
944
|
+
}
|
|
945
|
+
if (!/^[a-f0-9]{64}$/u.test(publication.inventoryDigest)) {
|
|
946
|
+
throw new TypeError('Relocation inventory digest must be lowercase SHA-256.');
|
|
947
|
+
}
|
|
948
|
+
const aggregateGeneration = positiveBigInt(
|
|
949
|
+
publication.aggregateGeneration,
|
|
950
|
+
'aggregate generation'
|
|
951
|
+
);
|
|
952
|
+
const targetOwnerLeaseGeneration = positiveBigInt(
|
|
953
|
+
publication.targetOwnerLeaseGeneration,
|
|
954
|
+
'target owner lease generation'
|
|
955
|
+
);
|
|
956
|
+
if (
|
|
957
|
+
aggregateGeneration > 0x7fff_ffff_ffff_ffffn
|
|
958
|
+
|| targetOwnerLeaseGeneration > 0x7fff_ffff_ffff_ffffn
|
|
959
|
+
) {
|
|
960
|
+
throw new TypeError('Relocation publication generations must fit signed 64-bit storage.');
|
|
961
|
+
}
|
|
962
|
+
const payload = Buffer.concat([
|
|
963
|
+
// BinaryWriter.Write(0x5a4c4152u) is little-endian in the .NET reference codec.
|
|
964
|
+
Buffer.from([0x52, 0x41, 0x4c, 0x5a]),
|
|
965
|
+
u16le(1),
|
|
966
|
+
text16le(requireText(publication.reference, 'relocation reference')),
|
|
967
|
+
u32le(checksum),
|
|
968
|
+
dotnetGuidBytes(canonicalUuid(publication.aggregateId, 'aggregate id')),
|
|
969
|
+
u64le(aggregateGeneration),
|
|
970
|
+
bytes32le(Buffer.from(publication.inventoryDigest, 'hex')),
|
|
971
|
+
text16le(requireText(publication.targetOwnerId, 'target owner id')),
|
|
972
|
+
i64le(targetOwnerLeaseGeneration),
|
|
973
|
+
bytes32le(base)
|
|
974
|
+
]);
|
|
975
|
+
if (payload.byteLength > 1024 * 1024) {
|
|
976
|
+
throw new TypeError('Location authority relocation payload exceeds 1 MiB.');
|
|
977
|
+
}
|
|
978
|
+
return payload;
|
|
979
|
+
}
|
|
980
|
+
|
|
981
|
+
function decodeAuthorityEnvelope(
|
|
982
|
+
payload: Uint8Array
|
|
983
|
+
): ServiceRelocationAuthorityEnvelope | undefined {
|
|
984
|
+
try {
|
|
985
|
+
const reader = new DotnetBinaryReader(payload);
|
|
986
|
+
reader.expect(Buffer.from([0x52, 0x41, 0x4c, 0x5a]));
|
|
987
|
+
if (reader.u16() !== 1) return undefined;
|
|
988
|
+
const reference = requireText(reader.text16(), 'relocation reference');
|
|
989
|
+
const checksumCrc32c = reader.u32();
|
|
990
|
+
const aggregateId = canonicalUuid(
|
|
991
|
+
canonicalUuidFromDotnetBytes(reader.take(16)),
|
|
992
|
+
'aggregate id'
|
|
993
|
+
);
|
|
994
|
+
const aggregateGeneration = reader.u64();
|
|
995
|
+
const inventoryDigestBytes = reader.bytes32();
|
|
996
|
+
const targetOwnerId = requireText(reader.text16(), 'target owner id');
|
|
997
|
+
const targetOwnerLeaseGeneration = reader.i64();
|
|
998
|
+
const base = reader.bytes32();
|
|
999
|
+
if (
|
|
1000
|
+
!reader.done
|
|
1001
|
+
|| aggregateGeneration === 0n
|
|
1002
|
+
|| aggregateGeneration > 0x7fff_ffff_ffff_ffffn
|
|
1003
|
+
|| inventoryDigestBytes.byteLength !== 32
|
|
1004
|
+
|| targetOwnerLeaseGeneration <= 0n
|
|
1005
|
+
) {
|
|
1006
|
+
return undefined;
|
|
1007
|
+
}
|
|
1008
|
+
return {
|
|
1009
|
+
base,
|
|
1010
|
+
publication: {
|
|
1011
|
+
reference,
|
|
1012
|
+
checksumCrc32c,
|
|
1013
|
+
aggregateId,
|
|
1014
|
+
aggregateGeneration,
|
|
1015
|
+
inventoryDigest: inventoryDigestBytes.toString('hex'),
|
|
1016
|
+
targetOwnerId,
|
|
1017
|
+
targetOwnerLeaseGeneration
|
|
1018
|
+
}
|
|
1019
|
+
};
|
|
1020
|
+
} catch {
|
|
1021
|
+
return undefined;
|
|
1022
|
+
}
|
|
1023
|
+
}
|
|
1024
|
+
|
|
1025
|
+
function encodeMemberships(
|
|
1026
|
+
memberships: readonly ServiceRelocationMembership[],
|
|
1027
|
+
participants: readonly ServiceRelocationParticipant[]
|
|
1028
|
+
) {
|
|
1029
|
+
validateMemberships(memberships, participants);
|
|
1030
|
+
return memberships.map(membership => ({
|
|
1031
|
+
actorKey: requireText(membership.actorKey, 'membership actor key'),
|
|
1032
|
+
spotKey: requireText(membership.spotKey, 'membership spot key'),
|
|
1033
|
+
spotObjectGeneration: positiveBigInt(
|
|
1034
|
+
membership.spotObjectGeneration,
|
|
1035
|
+
'membership Spot generation'
|
|
1036
|
+
).toString(),
|
|
1037
|
+
membershipEpoch: positiveBigInt(
|
|
1038
|
+
membership.membershipEpoch,
|
|
1039
|
+
'membership epoch'
|
|
1040
|
+
).toString()
|
|
1041
|
+
})).sort((left, right) => left.actorKey.localeCompare(right.actorKey));
|
|
1042
|
+
}
|
|
1043
|
+
|
|
1044
|
+
function validateMemberships(
|
|
1045
|
+
memberships: readonly ServiceRelocationMembership[],
|
|
1046
|
+
participants: readonly ServiceRelocationParticipant[]
|
|
1047
|
+
): void {
|
|
1048
|
+
const byKey = new Map(participants.map(participant => [participant.key, participant]));
|
|
1049
|
+
const actorKeys = new Set<string>();
|
|
1050
|
+
for (const membership of memberships) {
|
|
1051
|
+
const actorKey = requireText(membership.actorKey, 'membership actor key');
|
|
1052
|
+
if (actorKeys.has(actorKey)) {
|
|
1053
|
+
throw new TypeError('Relocation membership Actor keys must be unique.');
|
|
1054
|
+
}
|
|
1055
|
+
actorKeys.add(actorKey);
|
|
1056
|
+
const actor = byKey.get(actorKey);
|
|
1057
|
+
if (actor?.objectKind !== 'actor') {
|
|
1058
|
+
throw new TypeError('Relocation membership must reference an Actor participant.');
|
|
1059
|
+
}
|
|
1060
|
+
const spot = byKey.get(requireText(membership.spotKey, 'membership spot key'));
|
|
1061
|
+
if (
|
|
1062
|
+
spot !== undefined
|
|
1063
|
+
&& (
|
|
1064
|
+
spot.objectKind !== 'user_spot'
|
|
1065
|
+
|| spot.objectGeneration !== positiveBigInt(
|
|
1066
|
+
membership.spotObjectGeneration,
|
|
1067
|
+
'membership Spot generation'
|
|
1068
|
+
)
|
|
1069
|
+
)
|
|
1070
|
+
) {
|
|
1071
|
+
throw new TypeError('Relocation membership Spot fence does not match its participant.');
|
|
1072
|
+
}
|
|
1073
|
+
positiveBigInt(membership.membershipEpoch, 'membership epoch');
|
|
1074
|
+
}
|
|
1075
|
+
}
|
|
1076
|
+
|
|
1077
|
+
|
|
1078
|
+
const CRC32C_TABLE = Uint32Array.from({ length: 256 }, (_, value) => {
|
|
1079
|
+
let crc = value;
|
|
1080
|
+
for (let bit = 0; bit < 8; bit++) {
|
|
1081
|
+
crc = (crc >>> 1) ^ ((crc & 1) === 0 ? 0 : 0x82f6_3b78);
|
|
1082
|
+
}
|
|
1083
|
+
return crc >>> 0;
|
|
1084
|
+
});
|
|
1085
|
+
|
|
1086
|
+
export function crc32c(payload: Uint8Array): number {
|
|
1087
|
+
let crc = 0xffff_ffff;
|
|
1088
|
+
for (const byte of payload) {
|
|
1089
|
+
crc = CRC32C_TABLE[(crc ^ byte) & 0xff]! ^ (crc >>> 8);
|
|
1090
|
+
}
|
|
1091
|
+
return (crc ^ 0xffff_ffff) >>> 0;
|
|
1092
|
+
}
|
|
1093
|
+
|
|
1094
|
+
function requireText(value: unknown, label: string): string {
|
|
1095
|
+
if (typeof value !== 'string' || value.length === 0 || value.includes('\0')) {
|
|
1096
|
+
throw new TypeError(`${label} must be non-empty text without NUL.`);
|
|
1097
|
+
}
|
|
1098
|
+
return value;
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1101
|
+
function canonicalUuid(value: unknown, label: string): string {
|
|
1102
|
+
const text = requireText(value, label);
|
|
1103
|
+
if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/u.test(text)
|
|
1104
|
+
|| /^0{8}-0{4}-0{4}-0{4}-0{12}$/u.test(text)) {
|
|
1105
|
+
throw new TypeError(`${label} must be a lowercase non-zero 128-bit identity.`);
|
|
1106
|
+
}
|
|
1107
|
+
return text;
|
|
1108
|
+
}
|
|
1109
|
+
|
|
1110
|
+
function text16le(value: string): Buffer {
|
|
1111
|
+
const bytes = Buffer.from(value, 'utf8');
|
|
1112
|
+
if (bytes.byteLength < 1 || bytes.byteLength > 0xffff) {
|
|
1113
|
+
throw new TypeError('Relocation text must contain 1..65535 UTF-8 bytes.');
|
|
1114
|
+
}
|
|
1115
|
+
return Buffer.concat([u16le(bytes.byteLength), bytes]);
|
|
1116
|
+
}
|
|
1117
|
+
|
|
1118
|
+
function bytes32le(value: Uint8Array): Buffer {
|
|
1119
|
+
const bytes = Buffer.from(value);
|
|
1120
|
+
if (bytes.byteLength > 1024 * 1024) {
|
|
1121
|
+
throw new TypeError('Relocation byte field exceeds 1 MiB.');
|
|
1122
|
+
}
|
|
1123
|
+
const length = Buffer.alloc(4);
|
|
1124
|
+
length.writeInt32LE(bytes.byteLength);
|
|
1125
|
+
return Buffer.concat([length, bytes]);
|
|
1126
|
+
}
|
|
1127
|
+
|
|
1128
|
+
function u16le(value: number): Buffer {
|
|
1129
|
+
const result = Buffer.alloc(2);
|
|
1130
|
+
result.writeUInt16LE(value);
|
|
1131
|
+
return result;
|
|
1132
|
+
}
|
|
1133
|
+
|
|
1134
|
+
function u32le(value: number): Buffer {
|
|
1135
|
+
const result = Buffer.alloc(4);
|
|
1136
|
+
result.writeUInt32LE(value);
|
|
1137
|
+
return result;
|
|
1138
|
+
}
|
|
1139
|
+
|
|
1140
|
+
function u64le(value: bigint): Buffer {
|
|
1141
|
+
const result = Buffer.alloc(8);
|
|
1142
|
+
result.writeBigUInt64LE(value);
|
|
1143
|
+
return result;
|
|
1144
|
+
}
|
|
1145
|
+
|
|
1146
|
+
function i64le(value: bigint): Buffer {
|
|
1147
|
+
const result = Buffer.alloc(8);
|
|
1148
|
+
result.writeBigInt64LE(value);
|
|
1149
|
+
return result;
|
|
1150
|
+
}
|
|
1151
|
+
|
|
1152
|
+
function dotnetGuidBytes(value: string): Buffer {
|
|
1153
|
+
const canonical = Buffer.from(value.replaceAll('-', ''), 'hex');
|
|
1154
|
+
return Buffer.from([
|
|
1155
|
+
canonical[3]!, canonical[2]!, canonical[1]!, canonical[0]!,
|
|
1156
|
+
canonical[5]!, canonical[4]!,
|
|
1157
|
+
canonical[7]!, canonical[6]!,
|
|
1158
|
+
...canonical.subarray(8)
|
|
1159
|
+
]);
|
|
1160
|
+
}
|
|
1161
|
+
|
|
1162
|
+
function canonicalUuidFromDotnetBytes(value: Uint8Array): string {
|
|
1163
|
+
const bytes = Buffer.from(value);
|
|
1164
|
+
if (bytes.byteLength !== 16) throw new TypeError('Relocation aggregate id is invalid.');
|
|
1165
|
+
const canonical = Buffer.from([
|
|
1166
|
+
bytes[3]!, bytes[2]!, bytes[1]!, bytes[0]!,
|
|
1167
|
+
bytes[5]!, bytes[4]!,
|
|
1168
|
+
bytes[7]!, bytes[6]!,
|
|
1169
|
+
...bytes.subarray(8)
|
|
1170
|
+
]).toString('hex');
|
|
1171
|
+
return `${canonical.slice(0, 8)}-${canonical.slice(8, 12)}-${canonical.slice(12, 16)}`
|
|
1172
|
+
+ `-${canonical.slice(16, 20)}-${canonical.slice(20)}`;
|
|
1173
|
+
}
|
|
1174
|
+
|
|
1175
|
+
class CanonicalReader {
|
|
1176
|
+
readonly bytes: Buffer;
|
|
1177
|
+
offset = 0;
|
|
1178
|
+
|
|
1179
|
+
constructor(payload: Uint8Array) {
|
|
1180
|
+
this.bytes = Buffer.from(payload);
|
|
1181
|
+
}
|
|
1182
|
+
|
|
1183
|
+
get done(): boolean {
|
|
1184
|
+
return this.offset === this.bytes.byteLength;
|
|
1185
|
+
}
|
|
1186
|
+
|
|
1187
|
+
expect(expected: Uint8Array): void {
|
|
1188
|
+
if (!this.take(expected.byteLength).equals(Buffer.from(expected))) {
|
|
1189
|
+
throw new TypeError('Canonical authority magic is invalid.');
|
|
1190
|
+
}
|
|
1191
|
+
}
|
|
1192
|
+
|
|
1193
|
+
u8(): number {
|
|
1194
|
+
return this.take(1)[0]!;
|
|
1195
|
+
}
|
|
1196
|
+
|
|
1197
|
+
u16(): number {
|
|
1198
|
+
return this.take(2).readUInt16BE(0);
|
|
1199
|
+
}
|
|
1200
|
+
|
|
1201
|
+
u32(): number {
|
|
1202
|
+
return this.take(4).readUInt32BE(0);
|
|
1203
|
+
}
|
|
1204
|
+
|
|
1205
|
+
u64(): bigint {
|
|
1206
|
+
return this.take(8).readBigUInt64BE(0);
|
|
1207
|
+
}
|
|
1208
|
+
|
|
1209
|
+
i64(): bigint {
|
|
1210
|
+
return this.take(8).readBigInt64BE(0);
|
|
1211
|
+
}
|
|
1212
|
+
|
|
1213
|
+
text8(optional: boolean): string {
|
|
1214
|
+
const length = this.u8();
|
|
1215
|
+
if (length === 0) {
|
|
1216
|
+
if (optional) return '';
|
|
1217
|
+
throw new TypeError('Canonical authority text is empty.');
|
|
1218
|
+
}
|
|
1219
|
+
return canonicalText(this.take(length));
|
|
1220
|
+
}
|
|
1221
|
+
|
|
1222
|
+
text16(): string {
|
|
1223
|
+
const length = this.u16();
|
|
1224
|
+
if (length === 0) throw new TypeError('Canonical authority text is empty.');
|
|
1225
|
+
return canonicalText(this.take(length));
|
|
1226
|
+
}
|
|
1227
|
+
|
|
1228
|
+
take(length: number): Buffer {
|
|
1229
|
+
if (length < 0 || this.offset + length > this.bytes.byteLength) {
|
|
1230
|
+
throw new TypeError('Canonical authority payload is truncated.');
|
|
1231
|
+
}
|
|
1232
|
+
const result = this.bytes.subarray(this.offset, this.offset + length);
|
|
1233
|
+
this.offset += length;
|
|
1234
|
+
return result;
|
|
1235
|
+
}
|
|
1236
|
+
}
|
|
1237
|
+
|
|
1238
|
+
function canonicalText(value: Uint8Array): string {
|
|
1239
|
+
const bytes = Buffer.from(value);
|
|
1240
|
+
if (bytes.includes(0)) throw new TypeError('Canonical authority text contains NUL.');
|
|
1241
|
+
return new TextDecoder('utf-8', { fatal: true }).decode(bytes);
|
|
1242
|
+
}
|
|
1243
|
+
|
|
1244
|
+
function canonicalText8(value: string): Buffer {
|
|
1245
|
+
const bytes = Buffer.from(requireText(value, 'canonical authority text'), 'utf8');
|
|
1246
|
+
if (bytes.byteLength > 0xff) throw new TypeError('Canonical authority text8 is too long.');
|
|
1247
|
+
return Buffer.concat([Buffer.of(bytes.byteLength), bytes]);
|
|
1248
|
+
}
|
|
1249
|
+
|
|
1250
|
+
function canonicalOptionalText8(value: string): Buffer {
|
|
1251
|
+
if (value.length === 0) return Buffer.of(0);
|
|
1252
|
+
return canonicalText8(value);
|
|
1253
|
+
}
|
|
1254
|
+
|
|
1255
|
+
function canonicalText16(value: string): Buffer {
|
|
1256
|
+
const bytes = Buffer.from(requireText(value, 'canonical authority text'), 'utf8');
|
|
1257
|
+
if (bytes.byteLength > 4096) throw new TypeError('Canonical authority text16 is too long.');
|
|
1258
|
+
return Buffer.concat([canonicalU16(bytes.byteLength), bytes]);
|
|
1259
|
+
}
|
|
1260
|
+
|
|
1261
|
+
function canonicalU16(value: number): Buffer {
|
|
1262
|
+
const result = Buffer.alloc(2);
|
|
1263
|
+
result.writeUInt16BE(value);
|
|
1264
|
+
return result;
|
|
1265
|
+
}
|
|
1266
|
+
|
|
1267
|
+
function canonicalU32(value: number): Buffer {
|
|
1268
|
+
if (!Number.isInteger(value) || value < 0 || value > 0xffff_ffff) {
|
|
1269
|
+
throw new TypeError('Canonical authority u32 is invalid.');
|
|
1270
|
+
}
|
|
1271
|
+
const result = Buffer.alloc(4);
|
|
1272
|
+
result.writeUInt32BE(value);
|
|
1273
|
+
return result;
|
|
1274
|
+
}
|
|
1275
|
+
|
|
1276
|
+
function canonicalU64(value: bigint): Buffer {
|
|
1277
|
+
if (value < 0n || value > 0xffff_ffff_ffff_ffffn) {
|
|
1278
|
+
throw new TypeError('Canonical authority u64 is invalid.');
|
|
1279
|
+
}
|
|
1280
|
+
const result = Buffer.alloc(8);
|
|
1281
|
+
result.writeBigUInt64BE(value);
|
|
1282
|
+
return result;
|
|
1283
|
+
}
|
|
1284
|
+
|
|
1285
|
+
function canonicalOrdinal(value: bigint, name: string): bigint {
|
|
1286
|
+
const ordinal = nonNegativeBigInt(value, name);
|
|
1287
|
+
if (ordinal > 0x7fff_ffff_ffff_ffffn) {
|
|
1288
|
+
throw new TypeError(`${name} exceeds the ordinal range.`);
|
|
1289
|
+
}
|
|
1290
|
+
return ordinal;
|
|
1291
|
+
}
|
|
1292
|
+
|
|
1293
|
+
function canonicalNonZeroOrdinal(value: bigint, name: string): bigint {
|
|
1294
|
+
const ordinal = canonicalOrdinal(value, name);
|
|
1295
|
+
if (ordinal === 0n) throw new TypeError(`${name} must be positive.`);
|
|
1296
|
+
return ordinal;
|
|
1297
|
+
}
|
|
1298
|
+
|
|
1299
|
+
function canonicalI64(value: bigint): Buffer {
|
|
1300
|
+
if (value < 0n || value > 0x7fff_ffff_ffff_ffffn) {
|
|
1301
|
+
throw new TypeError('Canonical authority i64 is invalid.');
|
|
1302
|
+
}
|
|
1303
|
+
const result = Buffer.alloc(8);
|
|
1304
|
+
result.writeBigInt64BE(value);
|
|
1305
|
+
return result;
|
|
1306
|
+
}
|
|
1307
|
+
|
|
1308
|
+
class DotnetBinaryReader {
|
|
1309
|
+
readonly bytes: Buffer;
|
|
1310
|
+
offset = 0;
|
|
1311
|
+
|
|
1312
|
+
constructor(payload: Uint8Array) {
|
|
1313
|
+
this.bytes = Buffer.from(payload);
|
|
1314
|
+
if (this.bytes.byteLength > 1024 * 1024) {
|
|
1315
|
+
throw new TypeError('Location authority relocation payload exceeds 1 MiB.');
|
|
1316
|
+
}
|
|
1317
|
+
}
|
|
1318
|
+
|
|
1319
|
+
get done(): boolean {
|
|
1320
|
+
return this.offset === this.bytes.byteLength;
|
|
1321
|
+
}
|
|
1322
|
+
|
|
1323
|
+
expect(expected: Uint8Array): void {
|
|
1324
|
+
if (!this.take(expected.byteLength).equals(Buffer.from(expected))) {
|
|
1325
|
+
throw new TypeError('Location authority relocation magic is invalid.');
|
|
1326
|
+
}
|
|
1327
|
+
}
|
|
1328
|
+
|
|
1329
|
+
u16(): number {
|
|
1330
|
+
return this.take(2).readUInt16LE(0);
|
|
1331
|
+
}
|
|
1332
|
+
|
|
1333
|
+
u32(): number {
|
|
1334
|
+
return this.take(4).readUInt32LE(0);
|
|
1335
|
+
}
|
|
1336
|
+
|
|
1337
|
+
u64(): bigint {
|
|
1338
|
+
return this.take(8).readBigUInt64LE(0);
|
|
1339
|
+
}
|
|
1340
|
+
|
|
1341
|
+
i64(): bigint {
|
|
1342
|
+
return this.take(8).readBigInt64LE(0);
|
|
1343
|
+
}
|
|
1344
|
+
|
|
1345
|
+
text16(): string {
|
|
1346
|
+
const length = this.u16();
|
|
1347
|
+
if (length === 0) throw new TypeError('Location authority relocation text is empty.');
|
|
1348
|
+
return this.take(length).toString('utf8');
|
|
1349
|
+
}
|
|
1350
|
+
|
|
1351
|
+
bytes32(): Buffer {
|
|
1352
|
+
const length = this.take(4).readInt32LE(0);
|
|
1353
|
+
if (length < 0 || length > 1024 * 1024) {
|
|
1354
|
+
throw new TypeError('Location authority relocation byte field is invalid.');
|
|
1355
|
+
}
|
|
1356
|
+
return Buffer.from(this.take(length));
|
|
1357
|
+
}
|
|
1358
|
+
|
|
1359
|
+
take(length: number): Buffer {
|
|
1360
|
+
if (length < 0 || this.offset + length > this.bytes.byteLength) {
|
|
1361
|
+
throw new TypeError('Location authority relocation payload is truncated.');
|
|
1362
|
+
}
|
|
1363
|
+
const result = this.bytes.subarray(this.offset, this.offset + length);
|
|
1364
|
+
this.offset += length;
|
|
1365
|
+
return result;
|
|
1366
|
+
}
|
|
1367
|
+
}
|
|
1368
|
+
|
|
1369
|
+
function positiveBigInt(value: unknown, label: string): bigint {
|
|
1370
|
+
let parsed: bigint;
|
|
1371
|
+
try {
|
|
1372
|
+
parsed = typeof value === 'bigint' ? value : BigInt(requireText(value, label));
|
|
1373
|
+
} catch {
|
|
1374
|
+
throw new TypeError(`${label} must be a positive integer.`);
|
|
1375
|
+
}
|
|
1376
|
+
if (parsed <= 0n) throw new TypeError(`${label} must be a positive integer.`);
|
|
1377
|
+
return parsed;
|
|
1378
|
+
}
|
|
1379
|
+
|
|
1380
|
+
function nonNegativeBigInt(value: unknown, label: string): bigint {
|
|
1381
|
+
let parsed: bigint;
|
|
1382
|
+
try {
|
|
1383
|
+
parsed = typeof value === 'bigint' ? value : BigInt(requireText(value, label));
|
|
1384
|
+
} catch {
|
|
1385
|
+
throw new TypeError(`${label} must be a non-negative integer.`);
|
|
1386
|
+
}
|
|
1387
|
+
if (parsed < 0n) throw new TypeError(`${label} must be a non-negative integer.`);
|
|
1388
|
+
return parsed;
|
|
1389
|
+
}
|
|
1390
|
+
|
|
1391
|
+
function safeInteger(value: unknown, label: string): number {
|
|
1392
|
+
if (typeof value !== 'number' || !Number.isSafeInteger(value)) {
|
|
1393
|
+
throw new TypeError(`${label} must be a safe integer.`);
|
|
1394
|
+
}
|
|
1395
|
+
return value;
|
|
1396
|
+
}
|
|
1397
|
+
|
|
1398
|
+
function positiveInteger(value: unknown, label: string): number {
|
|
1399
|
+
const parsed = safeInteger(value, label);
|
|
1400
|
+
if (parsed <= 0) throw new TypeError(`${label} must be positive.`);
|
|
1401
|
+
return parsed;
|
|
1402
|
+
}
|
|
1403
|
+
|
|
1404
|
+
function requireBoolean(value: unknown, label: string): boolean {
|
|
1405
|
+
if (typeof value !== 'boolean') throw new TypeError(`${label} must be boolean.`);
|
|
1406
|
+
return value;
|
|
1407
|
+
}
|