@abloatai/ablo 0.34.1 → 0.36.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/AGENTS.md +2 -1
- package/CHANGELOG.md +758 -5
- package/README.md +56 -502
- package/bin/ablo.cjs +39 -0
- package/dist/BaseSyncedStore.d.ts +176 -48
- package/dist/BaseSyncedStore.js +346 -214
- package/dist/Database.d.ts +17 -44
- package/dist/Database.js +96 -79
- package/dist/InstanceCache.d.ts +31 -6
- package/dist/InstanceCache.js +65 -30
- package/dist/LazyReferenceCollection.d.ts +3 -3
- package/dist/LazyReferenceCollection.js +4 -4
- package/dist/Model.d.ts +23 -13
- package/dist/Model.js +27 -17
- package/dist/ModelRegistry.d.ts +8 -4
- package/dist/ModelRegistry.js +20 -18
- package/dist/NetworkMonitor.d.ts +3 -1
- package/dist/NetworkMonitor.js +7 -5
- package/dist/{SyncEngineContext.d.ts → RuntimeContext.d.ts} +20 -13
- package/dist/{SyncEngineContext.js → RuntimeContext.js} +11 -12
- package/dist/SyncClient.d.ts +47 -47
- package/dist/SyncClient.js +215 -156
- package/dist/ai-sdk/coordinatedTool.d.ts +2 -2
- package/dist/ai-sdk/coordinatedTool.js +1 -1
- package/dist/ai-sdk/coordinationContext.d.ts +2 -2
- package/dist/ai-sdk/coordinationContext.js +1 -1
- package/dist/ai-sdk/wrap.d.ts +3 -3
- package/dist/ai-sdk/wrap.js +2 -2
- package/dist/auth/index.d.ts +1 -156
- package/dist/auth/index.js +8 -301
- package/dist/client/Ablo.d.ts +42 -287
- package/dist/client/Ablo.js +129 -963
- package/dist/client/abloClient.d.ts +309 -0
- package/dist/client/abloClient.js +13 -0
- package/dist/client/clientPrelude.d.ts +52 -0
- package/dist/client/clientPrelude.js +60 -0
- package/dist/client/consoleLogger.d.ts +2 -2
- package/dist/client/coreClient.d.ts +60 -0
- package/dist/client/coreClient.js +118 -0
- package/dist/client/createInternalComponents.d.ts +8 -4
- package/dist/client/createInternalComponents.js +17 -10
- package/dist/client/createModelProxy.d.ts +98 -373
- package/dist/client/createModelProxy.js +233 -139
- package/dist/client/humans.d.ts +69 -0
- package/dist/client/humans.js +78 -0
- package/dist/client/modelRegistration.d.ts +1 -1
- package/dist/client/modelRegistration.js +9 -9
- package/dist/client/options.d.ts +73 -17
- package/dist/client/reactiveEngine.d.ts +53 -0
- package/dist/client/reactiveEngine.js +688 -0
- package/dist/client/resourceTypes.d.ts +9 -250
- package/dist/client/resourceTypes.js +8 -5
- package/dist/client/schemaConfig.d.ts +4 -4
- package/dist/client/schemaConfig.js +6 -2
- package/dist/client/storeCluster.d.ts +47 -0
- package/dist/client/storeCluster.js +118 -0
- package/dist/client/storeLifecycle.d.ts +61 -0
- package/dist/client/storeLifecycle.js +231 -0
- package/dist/client/validateAbloOptions.d.ts +3 -2
- package/dist/client/validateAbloOptions.js +1 -1
- package/dist/client/wsMutationExecutor.d.ts +3 -3
- package/dist/client/wsMutationExecutor.js +3 -3
- package/dist/context.d.ts +22 -9
- package/dist/context.js +33 -9
- package/dist/coordination/ClaimLog.d.ts +26 -0
- package/dist/coordination/ClaimLog.js +32 -0
- package/dist/coordination/index.d.ts +1 -15
- package/dist/coordination/index.js +8 -31
- package/dist/core/index.d.ts +3 -3
- package/dist/core/index.js +2 -2
- package/dist/docs/catalog.d.ts +72 -0
- package/dist/docs/catalog.js +230 -0
- package/dist/docs/index.d.ts +10 -0
- package/dist/docs/index.js +10 -0
- package/dist/environment.d.ts +1 -40
- package/dist/environment.js +8 -37
- package/dist/index.d.ts +44 -36
- package/dist/index.js +30 -22
- package/dist/interfaces/index.d.ts +44 -134
- package/dist/keys/index.d.ts +1 -77
- package/dist/keys/index.js +8 -190
- package/dist/mutators/{RecordingTransaction.d.ts → RecordingMutation.d.ts} +4 -4
- package/dist/mutators/{RecordingTransaction.js → RecordingMutation.js} +2 -2
- package/dist/mutators/Transaction.d.ts +1 -1
- package/dist/mutators/Transaction.js +1 -1
- package/dist/mutators/UndoManager.d.ts +6 -6
- package/dist/mutators/UndoManager.js +5 -5
- package/dist/mutators/defineMutators.d.ts +3 -3
- package/dist/mutators/defineMutators.js +1 -1
- package/dist/mutators/inverseOp.js +2 -2
- package/dist/mutators/mutateActions.d.ts +3 -3
- package/dist/mutators/mutateActions.js +1 -1
- package/dist/mutators/readerActions.d.ts +1 -1
- package/dist/mutators/undoApply.d.ts +1 -1
- package/dist/mutators/undoApply.js +1 -1
- package/dist/policy/index.d.ts +2 -2
- package/dist/policy/index.js +1 -1
- package/dist/query/client.d.ts +5 -2
- package/dist/query/client.js +10 -9
- package/dist/query/types.d.ts +6 -41
- package/dist/query/types.js +2 -2
- package/dist/react/AbloProvider.d.ts +18 -8
- package/dist/react/AbloProvider.js +10 -9
- package/dist/react/context.d.ts +3 -3
- package/dist/react/context.js +1 -1
- package/dist/react/createAbloReact.d.ts +56 -0
- package/dist/react/createAbloReact.js +51 -0
- package/dist/react/index.d.ts +6 -5
- package/dist/react/index.js +6 -3
- package/dist/react/internalContext.d.ts +1 -1
- package/dist/react/useAblo.d.ts +12 -5
- package/dist/react/useAblo.js +26 -8
- package/dist/react/useCurrentUserId.js +1 -1
- package/dist/react/useErrorListener.js +1 -1
- package/dist/react/useMutationFailureListener.d.ts +2 -2
- package/dist/react/useMutationFailureListener.js +1 -1
- package/dist/react/useMutators.d.ts +3 -3
- package/dist/react/useMutators.js +3 -3
- package/dist/react/useUndoScope.d.ts +5 -5
- package/dist/react/useUndoScope.js +1 -1
- package/dist/schema/coordination.d.ts +69 -10
- package/dist/schema/coordination.js +90 -9
- package/dist/schema/ddl.js +2 -2
- package/dist/schema/diff.d.ts +1 -1
- package/dist/schema/generate.js +1 -1
- package/dist/schema/index.d.ts +11 -10
- package/dist/schema/index.js +22 -18
- package/dist/schema/queries.d.ts +27 -27
- package/dist/schema/queries.js +23 -23
- package/dist/schema/select.d.ts +3 -3
- package/dist/schema/select.js +6 -3
- package/dist/schema/serialize.d.ts +15 -6
- package/dist/schema/serialize.js +20 -3
- package/dist/schema/sugar.d.ts +6 -7
- package/dist/schema/sugar.js +9 -12
- package/dist/schema/syncDeltaRow.d.ts +4 -152
- package/dist/schema/syncDeltaRow.js +4 -105
- package/dist/server/adapter.d.ts +18 -1
- package/dist/server/commit.d.ts +10 -16
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/readConfig.d.ts +1 -1
- package/dist/source/adapter.d.ts +7 -5
- package/dist/source/adapter.js +7 -5
- package/dist/source/adapters/drizzle.d.ts +1 -1
- package/dist/source/adapters/drizzle.js +2 -2
- package/dist/source/adapters/kysely.d.ts +1 -1
- package/dist/source/adapters/kysely.js +1 -1
- package/dist/source/adapters/kyselyMutationCore.d.ts +1 -1
- package/dist/source/adapters/kyselyMutationCore.js +2 -2
- package/dist/source/adapters/memory.js +1 -1
- package/dist/source/adapters/prisma.d.ts +8 -3
- package/dist/source/adapters/prisma.js +1 -1
- package/dist/source/connector.js +1 -1
- package/dist/source/connectorProtocol.d.ts +2 -8
- package/dist/source/connectorProtocol.js +3 -2
- package/dist/source/contract.d.ts +29 -17
- package/dist/source/contract.js +27 -22
- package/dist/source/factory.d.ts +1 -1
- package/dist/source/idempotency.js +2 -2
- package/dist/source/index.d.ts +1 -0
- package/dist/source/index.js +3 -0
- package/dist/source/next.d.ts +1 -1
- package/dist/source/signing.d.ts +9 -2
- package/dist/source/signing.js +4 -1
- package/dist/source/types.d.ts +6 -4
- package/dist/source/types.js +1 -1
- package/dist/{core/storeContract.d.ts → storeContract.d.ts} +6 -6
- package/dist/{core → stores}/DatabaseManager.d.ts +3 -1
- package/dist/{core → stores}/DatabaseManager.js +14 -13
- package/dist/stores/ObjectStore.d.ts +1 -1
- package/dist/{core → stores}/StoreManager.d.ts +9 -26
- package/dist/{core → stores}/StoreManager.js +29 -77
- package/dist/stores/SyncActionStore.d.ts +4 -2
- package/dist/stores/SyncActionStore.js +11 -17
- package/dist/stores/syncAction.d.ts +26 -0
- package/dist/stores/syncAction.js +16 -0
- package/dist/surface.d.ts +3 -3
- package/dist/surface.js +6 -4
- package/dist/sync/BootstrapFetcher.d.ts +127 -6
- package/dist/sync/BootstrapFetcher.js +511 -83
- package/dist/sync/ConnectionManager.d.ts +6 -198
- package/dist/sync/ConnectionManager.js +6 -677
- package/dist/sync/OnDemandLoader.d.ts +5 -2
- package/dist/sync/OnDemandLoader.js +61 -21
- package/dist/sync/SubscriptionManager.d.ts +13 -2
- package/dist/sync/SubscriptionManager.js +23 -5
- package/dist/sync/SyncWebSocket.d.ts +27 -510
- package/dist/sync/SyncWebSocket.js +76 -954
- package/dist/sync/awaitClaimGrant.d.ts +4 -44
- package/dist/sync/awaitClaimGrant.js +4 -109
- package/dist/sync/bootstrapApply.d.ts +3 -0
- package/dist/sync/bootstrapApply.js +2 -2
- package/dist/sync/commitFrames.d.ts +6 -40
- package/dist/sync/commitFrames.js +6 -97
- package/dist/sync/contextPorts.d.ts +18 -0
- package/dist/sync/contextPorts.js +31 -0
- package/dist/sync/createClaimStream.d.ts +5 -49
- package/dist/sync/createClaimStream.js +5 -469
- package/dist/sync/createPresenceStream.d.ts +26 -4
- package/dist/sync/createPresenceStream.js +28 -20
- package/dist/sync/createSnapshot.d.ts +2 -2
- package/dist/sync/createSnapshot.js +1 -1
- package/dist/sync/credentialLifecycle.d.ts +5 -173
- package/dist/sync/credentialLifecycle.js +5 -320
- package/dist/sync/deltaPipeline.d.ts +13 -12
- package/dist/sync/deltaPipeline.js +21 -4
- package/dist/sync/groupChange.d.ts +3 -0
- package/dist/sync/groupChange.js +16 -14
- package/dist/sync/participants.d.ts +24 -6
- package/dist/sync/participants.js +32 -23
- package/dist/sync/schemaDrift.d.ts +55 -0
- package/dist/sync/schemaDrift.js +53 -0
- package/dist/sync/schemas.d.ts +23 -33
- package/dist/sync/schemas.js +29 -20
- package/dist/sync/syncPlan.d.ts +3 -3
- package/dist/sync/wsFrameHandlers.d.ts +6 -114
- package/dist/sync/wsFrameHandlers.js +6 -392
- package/dist/syncLog/contract.d.ts +20 -0
- package/dist/syncLog/contract.js +19 -0
- package/dist/syncLog/index.d.ts +1 -0
- package/dist/syncLog/index.js +1 -0
- package/dist/transaction/ablo.d.ts +88 -0
- package/dist/transaction/ablo.js +33 -0
- package/dist/{client/auth.d.ts → transaction/auth/apiKey.d.ts} +43 -8
- package/dist/{client/auth.js → transaction/auth/apiKey.js} +19 -0
- package/dist/transaction/auth/bootstrapScope.d.ts +15 -0
- package/dist/transaction/auth/bootstrapScope.js +1 -0
- package/dist/transaction/auth/capability.d.ts +212 -0
- package/dist/transaction/auth/capability.js +224 -0
- package/dist/{auth → transaction/auth}/credentialSource.d.ts +8 -1
- package/dist/{client → transaction/auth}/identity.d.ts +8 -7
- package/dist/{client → transaction/auth}/identity.js +1 -1
- package/dist/transaction/auth/index.d.ts +162 -0
- package/dist/transaction/auth/index.js +304 -0
- package/dist/{auth → transaction/auth}/schemas.d.ts +1 -1
- package/dist/{auth → transaction/auth}/schemas.js +13 -13
- package/dist/{client → transaction/auth}/sessionMint.d.ts +8 -8
- package/dist/{client → transaction/auth}/sessionMint.js +4 -7
- package/dist/transaction/coordination/awaitClaimGrant.d.ts +56 -0
- package/dist/transaction/coordination/awaitClaimGrant.js +124 -0
- package/dist/{client → transaction/coordination}/claimHeartbeatLoop.d.ts +34 -0
- package/dist/{client → transaction/coordination}/claimHeartbeatLoop.js +20 -0
- package/dist/transaction/coordination/claimMeta.d.ts +49 -0
- package/dist/transaction/coordination/claimMeta.js +52 -0
- package/dist/transaction/coordination/createClaimStream.d.ts +64 -0
- package/dist/transaction/coordination/createClaimStream.js +475 -0
- package/dist/transaction/coordination/events.d.ts +74 -0
- package/dist/transaction/coordination/events.js +7 -0
- package/dist/transaction/coordination/index.d.ts +19 -0
- package/dist/transaction/coordination/index.js +45 -0
- package/dist/transaction/coordination/locator.d.ts +104 -0
- package/dist/transaction/coordination/locator.js +102 -0
- package/dist/transaction/coordination/schema.d.ts +1536 -0
- package/dist/transaction/coordination/schema.js +1177 -0
- package/dist/transaction/coordination/targetConflict.d.ts +2 -0
- package/dist/transaction/coordination/targetConflict.js +107 -0
- package/dist/{coordination → transaction/coordination}/trace.d.ts +7 -18
- package/dist/{coordination → transaction/coordination}/trace.js +18 -25
- package/dist/transaction/durableWrites.d.ts +62 -0
- package/dist/{client → transaction}/durableWrites.js +28 -3
- package/dist/transaction/environment.d.ts +105 -0
- package/dist/transaction/environment.js +108 -0
- package/dist/{errorCodes.d.ts → transaction/errorCodes.d.ts} +12 -12
- package/dist/{errorCodes.js → transaction/errorCodes.js} +45 -18
- package/dist/{errors.d.ts → transaction/errors.d.ts} +37 -13
- package/dist/{errors.js → transaction/errors.js} +85 -16
- package/dist/transaction/footprint.d.ts +111 -0
- package/dist/transaction/footprint.js +0 -0
- package/dist/transaction/index.d.ts +20 -0
- package/dist/transaction/index.js +20 -0
- package/dist/transaction/keys/index.d.ts +87 -0
- package/dist/transaction/keys/index.js +207 -0
- package/dist/transaction/log/syncDeltaRow.d.ts +158 -0
- package/dist/transaction/log/syncDeltaRow.js +95 -0
- package/dist/{sync/syncPosition.d.ts → transaction/logPosition.d.ts} +22 -8
- package/dist/{sync/syncPosition.js → transaction/logPosition.js} +15 -6
- package/dist/transaction/logger.d.ts +16 -0
- package/dist/transaction/logger.js +7 -0
- package/dist/transaction/observability.d.ts +53 -0
- package/dist/transaction/observability.js +19 -0
- package/dist/transaction/plugin.d.ts +285 -0
- package/dist/transaction/plugin.js +106 -0
- package/dist/{policy → transaction/policy}/types.d.ts +3 -3
- package/dist/{policy → transaction/policy}/types.js +2 -0
- package/dist/transaction/resources/httpResources.d.ts +321 -0
- package/dist/transaction/resources/httpResources.js +7 -0
- package/dist/transaction/resources/modelOperations.d.ts +427 -0
- package/dist/transaction/resources/modelOperations.js +12 -0
- package/dist/transaction/resources/mutationOptions.d.ts +66 -0
- package/dist/transaction/resources/mutationOptions.js +9 -0
- package/dist/transaction/resources/where.d.ts +101 -0
- package/dist/transaction/resources/where.js +115 -0
- package/dist/{client → transaction/resources}/writeOptionsSchema.d.ts +2 -6
- package/dist/{client → transaction/resources}/writeOptionsSchema.js +9 -5
- package/dist/{schema → transaction/schema}/field.d.ts +17 -23
- package/dist/{schema → transaction/schema}/field.js +5 -5
- package/dist/transaction/schema/fieldRef.d.ts +38 -0
- package/dist/transaction/schema/fieldRef.js +11 -0
- package/dist/transaction/schema/loadStrategy.d.ts +45 -0
- package/dist/transaction/schema/loadStrategy.js +46 -0
- package/dist/{schema → transaction/schema}/model.d.ts +50 -35
- package/dist/{schema → transaction/schema}/model.js +30 -20
- package/dist/transaction/schema/openapi.d.ts +58 -0
- package/dist/transaction/schema/openapi.js +501 -0
- package/dist/{schema → transaction/schema}/relation.d.ts +21 -16
- package/dist/{schema → transaction/schema}/relation.js +7 -7
- package/dist/{schema → transaction/schema}/residency.d.ts +0 -9
- package/dist/{schema → transaction/schema}/residency.js +0 -5
- package/dist/{schema → transaction/schema}/roles.d.ts +5 -5
- package/dist/{schema → transaction/schema}/roles.js +5 -5
- package/dist/{schema → transaction/schema}/schema.d.ts +39 -10
- package/dist/{schema → transaction/schema}/schema.js +24 -3
- package/dist/{schema → transaction/schema}/tenancy.d.ts +1 -1
- package/dist/{schema → transaction/schema}/tenancy.js +7 -4
- package/dist/transaction/transactionLayer.d.ts +82 -0
- package/dist/transaction/transactionLayer.js +24 -0
- package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.d.ts +5 -6
- package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.js +9 -13
- package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.d.ts +9 -2
- package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.js +5 -9
- package/dist/{transactions/durableWriteStore.d.ts → transaction/transactions/settlement/pendingWrite.d.ts} +11 -37
- package/dist/transaction/transactions/settlement/pendingWrite.js +20 -0
- package/dist/transaction/transport/commitFrames.d.ts +90 -0
- package/dist/transaction/transport/commitFrames.js +134 -0
- package/dist/transaction/transport/connectionManager.d.ts +215 -0
- package/dist/transaction/transport/connectionManager.js +673 -0
- package/dist/transaction/transport/credentialLifecycle.d.ts +177 -0
- package/dist/transaction/transport/credentialLifecycle.js +324 -0
- package/dist/{sync → transaction/transport}/heartbeat.d.ts +3 -1
- package/dist/{sync → transaction/transport}/heartbeat.js +6 -4
- package/dist/transaction/transport/httpClient.d.ts +131 -0
- package/dist/{client → transaction/transport}/httpClient.js +6 -5
- package/dist/transaction/transport/httpOptions.d.ts +33 -0
- package/dist/transaction/transport/httpOptions.js +12 -0
- package/dist/{client → transaction/transport}/httpTransport.js +295 -97
- package/dist/{sync/NetworkProbe.d.ts → transaction/transport/networkProbe.d.ts} +7 -4
- package/dist/{sync/NetworkProbe.js → transaction/transport/networkProbe.js} +14 -13
- package/dist/transaction/transport/wsFrameHandlers.d.ts +128 -0
- package/dist/transaction/transport/wsFrameHandlers.js +429 -0
- package/dist/transaction/transport/wsTransport.d.ts +574 -0
- package/dist/transaction/transport/wsTransport.js +1023 -0
- package/dist/transaction/types/assertExact.d.ts +17 -0
- package/dist/transaction/types/assertExact.js +1 -0
- package/dist/{types → transaction/types}/global.d.ts +17 -2
- package/dist/{types → transaction/types}/global.js +2 -1
- package/dist/{types → transaction/types}/index.d.ts +14 -46
- package/dist/{types → transaction/types}/index.js +7 -16
- package/dist/{types → transaction/types}/streams.d.ts +73 -45
- package/dist/transaction/utils/duration.d.ts +50 -0
- package/dist/{utils → transaction/utils}/duration.js +32 -0
- package/dist/{utils → transaction/utils}/json.d.ts +18 -0
- package/dist/transaction/utils/json.js +276 -0
- package/dist/transaction/wire/accountResponses.d.ts +420 -0
- package/dist/transaction/wire/accountResponses.js +290 -0
- package/dist/transaction/wire/auth.d.ts +56 -0
- package/dist/transaction/wire/auth.js +63 -0
- package/dist/transaction/wire/claimEvent.d.ts +76 -0
- package/dist/transaction/wire/claimEvent.js +73 -0
- package/dist/transaction/wire/claims.d.ts +530 -0
- package/dist/transaction/wire/claims.js +327 -0
- package/dist/{wire → transaction/wire}/commit.d.ts +125 -193
- package/dist/{wire → transaction/wire}/commit.js +68 -47
- package/dist/{wire → transaction/wire}/delta.d.ts +66 -17
- package/dist/{wire → transaction/wire}/delta.js +37 -13
- package/dist/transaction/wire/errorEnvelope.d.ts +72 -0
- package/dist/{wire → transaction/wire}/errorEnvelope.js +36 -5
- package/dist/transaction/wire/feedCursor.d.ts +60 -0
- package/dist/transaction/wire/feedCursor.js +82 -0
- package/dist/transaction/wire/feedEvent.d.ts +204 -0
- package/dist/transaction/wire/feedEvent.js +65 -0
- package/dist/transaction/wire/frames.d.ts +194 -0
- package/dist/transaction/wire/frames.js +50 -0
- package/dist/transaction/wire/inboundFrames.d.ts +562 -0
- package/dist/transaction/wire/inboundFrames.js +116 -0
- package/dist/transaction/wire/index.d.ts +54 -0
- package/dist/transaction/wire/index.js +83 -0
- package/dist/{wire → transaction/wire}/listEnvelope.d.ts +13 -14
- package/dist/transaction/wire/listEnvelope.js +42 -0
- package/dist/transaction/wire/modelMutations.d.ts +31 -0
- package/dist/transaction/wire/modelMutations.js +52 -0
- package/dist/transaction/wire/modelResponses.d.ts +85 -0
- package/dist/transaction/wire/modelResponses.js +43 -0
- package/dist/transaction/wire/modelShape.d.ts +78 -0
- package/dist/transaction/wire/modelShape.js +74 -0
- package/dist/transactions/{TransactionQueue.d.ts → mutations/MutationQueue.d.ts} +85 -38
- package/dist/transactions/{TransactionQueue.js → mutations/MutationQueue.js} +141 -80
- package/dist/transactions/{TransactionStore.d.ts → mutations/MutationStore.d.ts} +8 -8
- package/dist/transactions/{TransactionStore.js → mutations/MutationStore.js} +2 -2
- package/dist/transactions/{coalesceRules.d.ts → mutations/coalesceRules.d.ts} +10 -10
- package/dist/transactions/{coalesceRules.js → mutations/coalesceRules.js} +1 -1
- package/dist/transactions/mutations/commitLatency.d.ts +52 -0
- package/dist/transactions/mutations/commitLatency.js +130 -0
- package/dist/transactions/{commitOutboxStore.d.ts → mutations/commitOutboxStore.d.ts} +1 -5
- package/dist/transactions/{commitOutboxStore.js → mutations/commitOutboxStore.js} +1 -1
- package/dist/transactions/{commitPayload.d.ts → mutations/commitPayload.d.ts} +18 -16
- package/dist/transactions/{commitPayload.js → mutations/commitPayload.js} +15 -15
- package/dist/transactions/{deltaConfirmation.d.ts → mutations/deltaConfirmation.d.ts} +15 -11
- package/dist/transactions/{deltaConfirmation.js → mutations/deltaConfirmation.js} +14 -12
- package/dist/transactions/mutations/durableWriteStore.d.ts +14 -0
- package/dist/transactions/mutations/durableWriteStore.js +12 -0
- package/dist/transactions/{optimisticApply.d.ts → mutations/optimisticApply.d.ts} +7 -7
- package/dist/transactions/{replayValidation.d.ts → mutations/replayValidation.d.ts} +4 -3
- package/dist/transactions/{replayValidation.js → mutations/replayValidation.js} +7 -5
- package/dist/utils/mobxSetup.d.ts +1 -1
- package/dist/utils/mobxSetup.js +5 -2
- package/dist/{core → views}/QueryView.d.ts +2 -2
- package/dist/{core → views}/QueryView.js +2 -2
- package/dist/{core → views}/ViewRegistry.d.ts +1 -1
- package/dist/{core/queryUtils.d.ts → views/incrementalView.d.ts} +6 -6
- package/dist/{core/queryUtils.js → views/incrementalView.js} +6 -6
- package/dist/webhooks/events.d.ts +2 -2
- package/dist/wire/index.d.ts +1 -34
- package/dist/wire/index.js +8 -49
- package/docs/agent-messaging.md +3 -3
- package/docs/agents.md +20 -13
- package/docs/api-keys.md +14 -10
- package/docs/api.md +27 -61
- package/docs/audit.md +6 -3
- package/docs/cli.md +41 -13
- package/docs/client-behavior.md +11 -9
- package/docs/concurrency-convention.md +49 -57
- package/docs/coordination.md +283 -121
- package/docs/data-sources.md +7 -5
- package/docs/debugging.md +39 -15
- package/docs/deployment.md +267 -0
- package/docs/examples/agent-human.md +49 -42
- package/docs/examples/ai-sdk-tool.md +69 -44
- package/docs/examples/existing-python-backend.md +8 -6
- package/docs/examples/nextjs.md +129 -47
- package/docs/examples/scoped-agent.md +46 -45
- package/docs/examples/server-agent.md +46 -26
- package/docs/groups.md +87 -30
- package/docs/guarantees.md +41 -12
- package/docs/how-it-works.md +38 -12
- package/docs/idempotency.md +126 -0
- package/docs/identity.md +77 -74
- package/docs/index.md +172 -86
- package/docs/integration-guide.md +31 -19
- package/docs/mcp.md +46 -21
- package/docs/migration.md +95 -18
- package/docs/operating-on-your-database.md +3 -1
- package/docs/projects.md +3 -1
- package/docs/quickstart.md +22 -5
- package/docs/react.md +31 -18
- package/docs/schema-contract.md +5 -3
- package/docs/session-settings.md +108 -0
- package/docs/sessions.md +4 -2
- package/docs/webhooks.md +12 -10
- package/llms.txt +48 -18
- package/package.json +21 -26
- package/dist/agent/Agent.d.ts +0 -366
- package/dist/agent/Agent.js +0 -514
- package/dist/agent/index.d.ts +0 -115
- package/dist/agent/index.js +0 -128
- package/dist/agent/session.d.ts +0 -93
- package/dist/agent/session.js +0 -149
- package/dist/agent/types.d.ts +0 -68
- package/dist/agent/types.js +0 -9
- package/dist/cli.cjs +0 -286329
- package/dist/client/durableWrites.d.ts +0 -21
- package/dist/client/httpClient.d.ts +0 -80
- package/dist/coordination/schema.d.ts +0 -722
- package/dist/coordination/schema.js +0 -578
- package/dist/schema/openapi.d.ts +0 -29
- package/dist/schema/openapi.js +0 -124
- package/dist/testing/fixtures/bootstrap.d.ts +0 -49
- package/dist/testing/fixtures/bootstrap.js +0 -59
- package/dist/testing/fixtures/deltas.d.ts +0 -83
- package/dist/testing/fixtures/deltas.js +0 -136
- package/dist/testing/fixtures/models.d.ts +0 -83
- package/dist/testing/fixtures/models.js +0 -272
- package/dist/testing/helpers/reactWrapper.d.ts +0 -69
- package/dist/testing/helpers/reactWrapper.js +0 -67
- package/dist/testing/helpers/syncEngineHarness.d.ts +0 -54
- package/dist/testing/helpers/syncEngineHarness.js +0 -73
- package/dist/testing/helpers/wait.d.ts +0 -30
- package/dist/testing/helpers/wait.js +0 -49
- package/dist/testing/index.d.ts +0 -23
- package/dist/testing/index.js +0 -33
- package/dist/testing/mocks/FakeDatabase.d.ts +0 -18
- package/dist/testing/mocks/FakeDatabase.js +0 -10
- package/dist/testing/mocks/MockMutationExecutor.d.ts +0 -87
- package/dist/testing/mocks/MockMutationExecutor.js +0 -192
- package/dist/testing/mocks/MockNetworkMonitor.d.ts +0 -20
- package/dist/testing/mocks/MockNetworkMonitor.js +0 -46
- package/dist/testing/mocks/MockSyncContext.d.ts +0 -51
- package/dist/testing/mocks/MockSyncContext.js +0 -71
- package/dist/testing/mocks/MockSyncStore.d.ts +0 -88
- package/dist/testing/mocks/MockSyncStore.js +0 -171
- package/dist/testing/mocks/MockWebSocket.d.ts +0 -71
- package/dist/testing/mocks/MockWebSocket.js +0 -118
- package/dist/transactions/durableWriteStore.js +0 -30
- package/dist/utils/duration.d.ts +0 -25
- package/dist/utils/json.js +0 -88
- package/dist/wire/errorEnvelope.d.ts +0 -55
- package/dist/wire/frames.d.ts +0 -197
- package/dist/wire/frames.js +0 -49
- package/dist/wire/listEnvelope.js +0 -18
- package/docs/interaction-model.md +0 -97
- /package/dist/{core → query}/QueryProcessor.d.ts +0 -0
- /package/dist/{core → query}/QueryProcessor.js +0 -0
- /package/dist/{core/storeContract.js → storeContract.js} +0 -0
- /package/dist/{core → stores}/openIDBWithTimeout.d.ts +0 -0
- /package/dist/{core → stores}/openIDBWithTimeout.js +0 -0
- /package/dist/{client → transaction/auth}/credentialEndpoint.d.ts +0 -0
- /package/dist/{client → transaction/auth}/credentialEndpoint.js +0 -0
- /package/dist/{auth → transaction/auth}/credentialPolicy.d.ts +0 -0
- /package/dist/{auth → transaction/auth}/credentialPolicy.js +0 -0
- /package/dist/{auth → transaction/auth}/credentialSource.js +0 -0
- /package/dist/{client → transaction/auth}/hostedEndpoints.d.ts +0 -0
- /package/dist/{client → transaction/auth}/hostedEndpoints.js +0 -0
- /package/dist/{client → transaction}/persistence.d.ts +0 -0
- /package/dist/{client → transaction}/persistence.js +0 -0
- /package/dist/{client → transaction/resources}/functionalUpdate.d.ts +0 -0
- /package/dist/{client → transaction/resources}/functionalUpdate.js +0 -0
- /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.d.ts +0 -0
- /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.js +0 -0
- /package/dist/{client → transaction/transport}/httpTransport.d.ts +0 -0
- /package/dist/{types → transaction/types}/modelData.d.ts +0 -0
- /package/dist/{types → transaction/types}/modelData.js +0 -0
- /package/dist/{types → transaction/types}/participant.d.ts +0 -0
- /package/dist/{types → transaction/types}/participant.js +0 -0
- /package/dist/{types → transaction/types}/streams.js +0 -0
- /package/dist/{utils → transaction/utils}/asyncIterator.d.ts +0 -0
- /package/dist/{utils → transaction/utils}/asyncIterator.js +0 -0
- /package/dist/{wire → transaction/wire}/bootstrapReason.d.ts +0 -0
- /package/dist/{wire → transaction/wire}/bootstrapReason.js +0 -0
- /package/dist/{wire → transaction/wire}/protocol.d.ts +0 -0
- /package/dist/{wire → transaction/wire}/protocol.js +0 -0
- /package/dist/{wire → transaction/wire}/protocolVersion.d.ts +0 -0
- /package/dist/{wire → transaction/wire}/protocolVersion.js +0 -0
- /package/dist/transactions/{UnconfirmedWrites.d.ts → mutations/UnconfirmedWrites.d.ts} +0 -0
- /package/dist/transactions/{UnconfirmedWrites.js → mutations/UnconfirmedWrites.js} +0 -0
- /package/dist/transactions/{optimisticApply.js → mutations/optimisticApply.js} +0 -0
- /package/dist/{core → views}/ViewRegistry.js +0 -0
|
@@ -0,0 +1,562 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every frame the server can send, in one list.
|
|
3
|
+
*
|
|
4
|
+
* Before this existed, "what frames are there" was answerable only by reading
|
|
5
|
+
* the dispatch table, the transport's event map, and each handler's defensive
|
|
6
|
+
* narrowing together — three places that agreed by convention. This registry is
|
|
7
|
+
* the single answer, and it carries how each frame's payload is validated.
|
|
8
|
+
*
|
|
9
|
+
* A frame is validated one of two ways. Most carry a `payload` schema and are
|
|
10
|
+
* parsed here, before the handler runs, so a handler receives a value whose
|
|
11
|
+
* shape is already proven. The rest are marked `handler` because their
|
|
12
|
+
* validation is genuinely load-bearing elsewhere — a delta is checked once
|
|
13
|
+
* downstream against the schema the materialiser holds, and a commit receipt
|
|
14
|
+
* has to tolerate an older server's spelling before it can be parsed. Each of
|
|
15
|
+
* those says where its check lives, so `handler` is a citation and never an
|
|
16
|
+
* excuse.
|
|
17
|
+
*
|
|
18
|
+
* A frame type absent from this registry is rejected. That is deliberate: the
|
|
19
|
+
* server and this package ship from one repository, so an unrecognised frame
|
|
20
|
+
* means the two have drifted, and failing loudly beats materialising a change
|
|
21
|
+
* nobody validated. Application-level collaboration events are the exception —
|
|
22
|
+
* they are registered by the consumer at construction time, not by the
|
|
23
|
+
* protocol, and are dispatched separately.
|
|
24
|
+
*/
|
|
25
|
+
import { z } from 'zod';
|
|
26
|
+
/**
|
|
27
|
+
* The envelope itself: a type and a payload. `catchall` keeps the extra keys,
|
|
28
|
+
* because the oldest delta form puts a delta's own fields at the top level
|
|
29
|
+
* instead of under `payload`, and the dispatcher still has to recognise it.
|
|
30
|
+
*/
|
|
31
|
+
export declare const wsInboundEnvelopeSchema: z.ZodObject<{
|
|
32
|
+
type: z.ZodOptional<z.ZodString>;
|
|
33
|
+
payload: z.ZodOptional<z.ZodUnknown>;
|
|
34
|
+
}, z.core.$catchall<z.ZodUnknown>>;
|
|
35
|
+
export type WsInboundEnvelope = z.infer<typeof wsInboundEnvelopeSchema>;
|
|
36
|
+
/** How one frame's payload is checked. */
|
|
37
|
+
export type InboundFrameContract =
|
|
38
|
+
/** Parsed against `payload` before the handler runs. */
|
|
39
|
+
{
|
|
40
|
+
readonly validation: 'schema';
|
|
41
|
+
readonly payload: z.ZodType;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Checked inside the handler. `where` says which handler, and `checkedBy`
|
|
45
|
+
* names the schema it parses with — as the schema itself, not its name in
|
|
46
|
+
* prose, so renaming or deleting it fails the build here instead of leaving
|
|
47
|
+
* a citation pointing at nothing. Frames whose check is a hand-narrowing or
|
|
48
|
+
* lives in another package have no symbol to point at and carry only `where`.
|
|
49
|
+
*/
|
|
50
|
+
| {
|
|
51
|
+
readonly validation: 'handler';
|
|
52
|
+
readonly where: string;
|
|
53
|
+
readonly checkedBy?: z.ZodType;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* The protocol's inbound surface. Adding a frame to the server means adding it
|
|
57
|
+
* here, which is the point — the compiler cannot enforce that, but the throw on
|
|
58
|
+
* an unrecognised type does.
|
|
59
|
+
*/
|
|
60
|
+
export declare const WS_INBOUND_FRAMES: {
|
|
61
|
+
readonly ping: {
|
|
62
|
+
readonly validation: "handler";
|
|
63
|
+
readonly where: "dispatchWsFrame — ignored, no payload";
|
|
64
|
+
};
|
|
65
|
+
readonly pong: {
|
|
66
|
+
readonly validation: "handler";
|
|
67
|
+
readonly where: "dispatchWsFrame — ignored, no payload";
|
|
68
|
+
};
|
|
69
|
+
readonly delta: {
|
|
70
|
+
readonly validation: "handler";
|
|
71
|
+
readonly where: "the materialiser parses each delta as it applies it";
|
|
72
|
+
readonly checkedBy: z.ZodObject<{
|
|
73
|
+
id: z.ZodNumber;
|
|
74
|
+
actionType: z.ZodEnum<{
|
|
75
|
+
I: "I";
|
|
76
|
+
U: "U";
|
|
77
|
+
D: "D";
|
|
78
|
+
A: "A";
|
|
79
|
+
V: "V";
|
|
80
|
+
C: "C";
|
|
81
|
+
G: "G";
|
|
82
|
+
S: "S";
|
|
83
|
+
}>;
|
|
84
|
+
modelName: z.ZodString;
|
|
85
|
+
modelId: z.ZodString;
|
|
86
|
+
data: z.ZodNullable<z.ZodUnion<readonly [z.ZodRecord<z.ZodString, z.ZodUnknown>, z.ZodString]>>;
|
|
87
|
+
previousData: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodRecord<z.ZodString, z.ZodUnknown>, z.ZodString]>>>;
|
|
88
|
+
syncGroups: z.ZodArray<z.ZodString>;
|
|
89
|
+
transactionId: z.ZodOptional<z.ZodString>;
|
|
90
|
+
correlationId: z.ZodOptional<z.ZodString>;
|
|
91
|
+
createdAt: z.ZodString;
|
|
92
|
+
createdBy: z.ZodOptional<z.ZodString>;
|
|
93
|
+
metadata: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodRecord<z.ZodString, z.ZodUnknown>, z.ZodString]>>>;
|
|
94
|
+
clientMutationId: z.ZodOptional<z.ZodString>;
|
|
95
|
+
}, z.core.$strip>;
|
|
96
|
+
};
|
|
97
|
+
readonly sync_response: {
|
|
98
|
+
readonly validation: "handler";
|
|
99
|
+
readonly where: "the reactive engine validates it while advancing its resume cursor";
|
|
100
|
+
};
|
|
101
|
+
readonly bootstrap_response: {
|
|
102
|
+
readonly validation: "handler";
|
|
103
|
+
readonly where: "the reactive engine validates the bootstrap payload as it applies it";
|
|
104
|
+
};
|
|
105
|
+
readonly mutation_result: {
|
|
106
|
+
readonly validation: "handler";
|
|
107
|
+
readonly where: "handleMutationResult — it lifts the frame's notifications and missingIds alongside the payload before this can parse";
|
|
108
|
+
readonly checkedBy: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
109
|
+
status: z.ZodLiteral<"queued">;
|
|
110
|
+
correlationId: z.ZodString;
|
|
111
|
+
object: z.ZodLiteral<"commit_receipt">;
|
|
112
|
+
id: z.ZodOptional<z.ZodString>;
|
|
113
|
+
clientTxId: z.ZodString;
|
|
114
|
+
serverTxId: z.ZodString;
|
|
115
|
+
success: z.ZodLiteral<true>;
|
|
116
|
+
lastSyncId: z.ZodNumber;
|
|
117
|
+
ops: z.ZodNumber;
|
|
118
|
+
notifications: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
119
|
+
object: z.ZodOptional<z.ZodLiteral<"stale_notification">>;
|
|
120
|
+
model: z.ZodString;
|
|
121
|
+
id: z.ZodString;
|
|
122
|
+
readAt: z.ZodNumber;
|
|
123
|
+
observedSyncId: z.ZodNumber;
|
|
124
|
+
conflictingFields: z.ZodArray<z.ZodString>;
|
|
125
|
+
currentValues: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
126
|
+
writtenBy: z.ZodObject<{
|
|
127
|
+
kind: z.ZodEnum<{
|
|
128
|
+
user: "user";
|
|
129
|
+
agent: "agent";
|
|
130
|
+
system: "system";
|
|
131
|
+
}>;
|
|
132
|
+
id: z.ZodString;
|
|
133
|
+
}, z.core.$strip>;
|
|
134
|
+
group: z.ZodOptional<z.ZodString>;
|
|
135
|
+
}, z.core.$strip>>>;
|
|
136
|
+
missingIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
137
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
138
|
+
status: z.ZodLiteral<"confirmed">;
|
|
139
|
+
correlationId: z.ZodOptional<z.ZodString>;
|
|
140
|
+
object: z.ZodLiteral<"commit_receipt">;
|
|
141
|
+
id: z.ZodOptional<z.ZodString>;
|
|
142
|
+
clientTxId: z.ZodString;
|
|
143
|
+
serverTxId: z.ZodString;
|
|
144
|
+
success: z.ZodLiteral<true>;
|
|
145
|
+
lastSyncId: z.ZodNumber;
|
|
146
|
+
ops: z.ZodNumber;
|
|
147
|
+
notifications: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
148
|
+
object: z.ZodOptional<z.ZodLiteral<"stale_notification">>;
|
|
149
|
+
model: z.ZodString;
|
|
150
|
+
id: z.ZodString;
|
|
151
|
+
readAt: z.ZodNumber;
|
|
152
|
+
observedSyncId: z.ZodNumber;
|
|
153
|
+
conflictingFields: z.ZodArray<z.ZodString>;
|
|
154
|
+
currentValues: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
155
|
+
writtenBy: z.ZodObject<{
|
|
156
|
+
kind: z.ZodEnum<{
|
|
157
|
+
user: "user";
|
|
158
|
+
agent: "agent";
|
|
159
|
+
system: "system";
|
|
160
|
+
}>;
|
|
161
|
+
id: z.ZodString;
|
|
162
|
+
}, z.core.$strip>;
|
|
163
|
+
group: z.ZodOptional<z.ZodString>;
|
|
164
|
+
}, z.core.$strip>>>;
|
|
165
|
+
missingIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
166
|
+
}, z.core.$strip>], "status">;
|
|
167
|
+
};
|
|
168
|
+
readonly claim_ack: {
|
|
169
|
+
readonly validation: "handler";
|
|
170
|
+
readonly where: "handleClaimAck narrows field by field, because a rejection carries a typed capability error it has to re-raise as CapabilityError";
|
|
171
|
+
};
|
|
172
|
+
readonly subscription_ack: {
|
|
173
|
+
readonly validation: "handler";
|
|
174
|
+
readonly where: "handleSubscriptionAck";
|
|
175
|
+
readonly checkedBy: z.ZodObject<{
|
|
176
|
+
success: z.ZodBoolean;
|
|
177
|
+
syncGroups: z.ZodArray<z.ZodString>;
|
|
178
|
+
error: z.ZodOptional<z.ZodObject<{
|
|
179
|
+
code: z.ZodString;
|
|
180
|
+
message: z.ZodString;
|
|
181
|
+
}, z.core.$strip>>;
|
|
182
|
+
}, z.core.$strip>;
|
|
183
|
+
};
|
|
184
|
+
readonly presence_update: {
|
|
185
|
+
readonly validation: "schema";
|
|
186
|
+
readonly payload: z.ZodObject<{
|
|
187
|
+
kind: z.ZodEnum<{
|
|
188
|
+
enter: "enter";
|
|
189
|
+
update: "update";
|
|
190
|
+
leave: "leave";
|
|
191
|
+
}>;
|
|
192
|
+
userId: z.ZodString;
|
|
193
|
+
syncGroups: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
194
|
+
timestamp: z.ZodOptional<z.ZodNumber>;
|
|
195
|
+
status: z.ZodString;
|
|
196
|
+
timezone: z.ZodOptional<z.ZodString>;
|
|
197
|
+
customStatus: z.ZodOptional<z.ZodString>;
|
|
198
|
+
activity: z.ZodOptional<z.ZodObject<{
|
|
199
|
+
entityType: z.ZodString;
|
|
200
|
+
entityId: z.ZodString;
|
|
201
|
+
path: z.ZodOptional<z.ZodString>;
|
|
202
|
+
range: z.ZodOptional<z.ZodObject<{
|
|
203
|
+
startLine: z.ZodNumber;
|
|
204
|
+
endLine: z.ZodNumber;
|
|
205
|
+
startColumn: z.ZodOptional<z.ZodNumber>;
|
|
206
|
+
endColumn: z.ZodOptional<z.ZodNumber>;
|
|
207
|
+
}, z.core.$strip>>;
|
|
208
|
+
field: z.ZodOptional<z.ZodString>;
|
|
209
|
+
fields: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
|
|
210
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
211
|
+
action: z.ZodString;
|
|
212
|
+
detail: z.ZodOptional<z.ZodString>;
|
|
213
|
+
loadFactor: z.ZodOptional<z.ZodNumber>;
|
|
214
|
+
acceptingNewWork: z.ZodOptional<z.ZodBoolean>;
|
|
215
|
+
}, z.core.$strip>>;
|
|
216
|
+
isAgent: z.ZodOptional<z.ZodBoolean>;
|
|
217
|
+
participantKind: z.ZodOptional<z.ZodPreprocess<z.ZodEnum<{
|
|
218
|
+
user: "user";
|
|
219
|
+
agent: "agent";
|
|
220
|
+
system: "system";
|
|
221
|
+
}>>>;
|
|
222
|
+
activeClaims: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
223
|
+
entityType: z.ZodString;
|
|
224
|
+
entityId: z.ZodString;
|
|
225
|
+
path: z.ZodOptional<z.ZodString>;
|
|
226
|
+
range: z.ZodOptional<z.ZodObject<{
|
|
227
|
+
startLine: z.ZodNumber;
|
|
228
|
+
endLine: z.ZodNumber;
|
|
229
|
+
startColumn: z.ZodOptional<z.ZodNumber>;
|
|
230
|
+
endColumn: z.ZodOptional<z.ZodNumber>;
|
|
231
|
+
}, z.core.$strip>>;
|
|
232
|
+
field: z.ZodOptional<z.ZodString>;
|
|
233
|
+
fields: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
|
|
234
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
235
|
+
claimId: z.ZodString;
|
|
236
|
+
description: z.ZodOptional<z.ZodString>;
|
|
237
|
+
declaredAt: z.ZodNumber;
|
|
238
|
+
expiresAt: z.ZodNumber;
|
|
239
|
+
onBehalfOfId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
240
|
+
onBehalfOfKind: z.ZodOptional<z.ZodNullable<z.ZodPreprocess<z.ZodEnum<{
|
|
241
|
+
user: "user";
|
|
242
|
+
agent: "agent";
|
|
243
|
+
system: "system";
|
|
244
|
+
}>>>>;
|
|
245
|
+
capabilityId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
246
|
+
fenceToken: z.ZodOptional<z.ZodNumber>;
|
|
247
|
+
acquiredAt: z.ZodOptional<z.ZodNumber>;
|
|
248
|
+
status: z.ZodOptional<z.ZodEnum<{
|
|
249
|
+
active: "active";
|
|
250
|
+
committed: "committed";
|
|
251
|
+
expired: "expired";
|
|
252
|
+
canceled: "canceled";
|
|
253
|
+
}>>;
|
|
254
|
+
error: z.ZodOptional<z.ZodObject<{
|
|
255
|
+
code: z.ZodString;
|
|
256
|
+
message: z.ZodOptional<z.ZodString>;
|
|
257
|
+
heldBy: z.ZodOptional<z.ZodString>;
|
|
258
|
+
heldByClaimId: z.ZodOptional<z.ZodString>;
|
|
259
|
+
heldByExpiresAt: z.ZodOptional<z.ZodNumber>;
|
|
260
|
+
heldByClaim: z.ZodOptional<z.ZodObject<{
|
|
261
|
+
entityType: z.ZodString;
|
|
262
|
+
entityId: z.ZodString;
|
|
263
|
+
path: z.ZodOptional<z.ZodString>;
|
|
264
|
+
range: z.ZodOptional<z.ZodObject<{
|
|
265
|
+
startLine: z.ZodNumber;
|
|
266
|
+
endLine: z.ZodNumber;
|
|
267
|
+
startColumn: z.ZodOptional<z.ZodNumber>;
|
|
268
|
+
endColumn: z.ZodOptional<z.ZodNumber>;
|
|
269
|
+
}, z.core.$strip>>;
|
|
270
|
+
field: z.ZodOptional<z.ZodString>;
|
|
271
|
+
fields: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
|
|
272
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
273
|
+
claimId: z.ZodString;
|
|
274
|
+
description: z.ZodOptional<z.ZodString>;
|
|
275
|
+
declaredAt: z.ZodNumber;
|
|
276
|
+
expiresAt: z.ZodNumber;
|
|
277
|
+
onBehalfOfId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
278
|
+
onBehalfOfKind: z.ZodOptional<z.ZodNullable<z.ZodPreprocess<z.ZodEnum<{
|
|
279
|
+
user: "user";
|
|
280
|
+
agent: "agent";
|
|
281
|
+
system: "system";
|
|
282
|
+
}>>>>;
|
|
283
|
+
capabilityId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
284
|
+
}, z.core.$strip>>;
|
|
285
|
+
policyReason: z.ZodOptional<z.ZodString>;
|
|
286
|
+
}, z.core.$strip>>;
|
|
287
|
+
}, z.core.$strip>>>;
|
|
288
|
+
delegatedFrom: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
289
|
+
}, z.core.$catchall<z.ZodUnknown>>;
|
|
290
|
+
};
|
|
291
|
+
readonly claim_expired: {
|
|
292
|
+
readonly validation: "schema";
|
|
293
|
+
readonly payload: z.ZodObject<{
|
|
294
|
+
claimId: z.ZodString;
|
|
295
|
+
}, z.core.$strip>;
|
|
296
|
+
};
|
|
297
|
+
readonly claim_rejected: {
|
|
298
|
+
readonly validation: "schema";
|
|
299
|
+
readonly payload: z.ZodObject<{
|
|
300
|
+
claimId: z.ZodString;
|
|
301
|
+
reason: z.ZodPreprocess<z.ZodOptional<z.ZodEnum<{
|
|
302
|
+
conflict: "conflict";
|
|
303
|
+
expired: "expired";
|
|
304
|
+
coordination_unavailable: "coordination_unavailable";
|
|
305
|
+
preempted: "preempted";
|
|
306
|
+
}>>>;
|
|
307
|
+
target: z.ZodOptional<z.ZodObject<{
|
|
308
|
+
entityType: z.ZodString;
|
|
309
|
+
entityId: z.ZodString;
|
|
310
|
+
path: z.ZodOptional<z.ZodString>;
|
|
311
|
+
range: z.ZodOptional<z.ZodObject<{
|
|
312
|
+
startLine: z.ZodNumber;
|
|
313
|
+
endLine: z.ZodNumber;
|
|
314
|
+
startColumn: z.ZodOptional<z.ZodNumber>;
|
|
315
|
+
endColumn: z.ZodOptional<z.ZodNumber>;
|
|
316
|
+
}, z.core.$strip>>;
|
|
317
|
+
field: z.ZodOptional<z.ZodString>;
|
|
318
|
+
fields: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
|
|
319
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
320
|
+
}, z.core.$strip>>;
|
|
321
|
+
heldBy: z.ZodOptional<z.ZodString>;
|
|
322
|
+
heldByKind: z.ZodOptional<z.ZodPreprocess<z.ZodEnum<{
|
|
323
|
+
user: "user";
|
|
324
|
+
agent: "agent";
|
|
325
|
+
system: "system";
|
|
326
|
+
}>>>;
|
|
327
|
+
heldByClaimId: z.ZodOptional<z.ZodString>;
|
|
328
|
+
heldByExpiresAt: z.ZodOptional<z.ZodNumber>;
|
|
329
|
+
heldByClaim: z.ZodOptional<z.ZodObject<{
|
|
330
|
+
entityType: z.ZodString;
|
|
331
|
+
entityId: z.ZodString;
|
|
332
|
+
path: z.ZodOptional<z.ZodString>;
|
|
333
|
+
range: z.ZodOptional<z.ZodObject<{
|
|
334
|
+
startLine: z.ZodNumber;
|
|
335
|
+
endLine: z.ZodNumber;
|
|
336
|
+
startColumn: z.ZodOptional<z.ZodNumber>;
|
|
337
|
+
endColumn: z.ZodOptional<z.ZodNumber>;
|
|
338
|
+
}, z.core.$strip>>;
|
|
339
|
+
field: z.ZodOptional<z.ZodString>;
|
|
340
|
+
fields: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
|
|
341
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
342
|
+
claimId: z.ZodString;
|
|
343
|
+
description: z.ZodOptional<z.ZodString>;
|
|
344
|
+
declaredAt: z.ZodNumber;
|
|
345
|
+
expiresAt: z.ZodNumber;
|
|
346
|
+
onBehalfOfId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
347
|
+
onBehalfOfKind: z.ZodOptional<z.ZodNullable<z.ZodPreprocess<z.ZodEnum<{
|
|
348
|
+
user: "user";
|
|
349
|
+
agent: "agent";
|
|
350
|
+
system: "system";
|
|
351
|
+
}>>>>;
|
|
352
|
+
capabilityId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
353
|
+
}, z.core.$strip>>;
|
|
354
|
+
policyReason: z.ZodOptional<z.ZodString>;
|
|
355
|
+
}, z.core.$strip>;
|
|
356
|
+
};
|
|
357
|
+
readonly claim_acquired: {
|
|
358
|
+
readonly validation: "schema";
|
|
359
|
+
readonly payload: z.ZodObject<{
|
|
360
|
+
claimId: z.ZodString;
|
|
361
|
+
fenceToken: z.ZodOptional<z.ZodNumber>;
|
|
362
|
+
target: z.ZodObject<{
|
|
363
|
+
entityType: z.ZodString;
|
|
364
|
+
entityId: z.ZodString;
|
|
365
|
+
path: z.ZodOptional<z.ZodString>;
|
|
366
|
+
range: z.ZodOptional<z.ZodObject<{
|
|
367
|
+
startLine: z.ZodNumber;
|
|
368
|
+
endLine: z.ZodNumber;
|
|
369
|
+
startColumn: z.ZodOptional<z.ZodNumber>;
|
|
370
|
+
endColumn: z.ZodOptional<z.ZodNumber>;
|
|
371
|
+
}, z.core.$strip>>;
|
|
372
|
+
field: z.ZodOptional<z.ZodString>;
|
|
373
|
+
fields: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
|
|
374
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
375
|
+
}, z.core.$strip>;
|
|
376
|
+
}, z.core.$strip>;
|
|
377
|
+
};
|
|
378
|
+
readonly claim_queued: {
|
|
379
|
+
readonly validation: "schema";
|
|
380
|
+
readonly payload: z.ZodObject<{
|
|
381
|
+
claimId: z.ZodString;
|
|
382
|
+
target: z.ZodOptional<z.ZodObject<{
|
|
383
|
+
entityType: z.ZodString;
|
|
384
|
+
entityId: z.ZodString;
|
|
385
|
+
path: z.ZodOptional<z.ZodString>;
|
|
386
|
+
range: z.ZodOptional<z.ZodObject<{
|
|
387
|
+
startLine: z.ZodNumber;
|
|
388
|
+
endLine: z.ZodNumber;
|
|
389
|
+
startColumn: z.ZodOptional<z.ZodNumber>;
|
|
390
|
+
endColumn: z.ZodOptional<z.ZodNumber>;
|
|
391
|
+
}, z.core.$strip>>;
|
|
392
|
+
field: z.ZodOptional<z.ZodString>;
|
|
393
|
+
fields: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
|
|
394
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
395
|
+
}, z.core.$strip>>;
|
|
396
|
+
heldBy: z.ZodOptional<z.ZodString>;
|
|
397
|
+
heldByKind: z.ZodOptional<z.ZodPreprocess<z.ZodEnum<{
|
|
398
|
+
user: "user";
|
|
399
|
+
agent: "agent";
|
|
400
|
+
system: "system";
|
|
401
|
+
}>>>;
|
|
402
|
+
heldByClaimId: z.ZodOptional<z.ZodString>;
|
|
403
|
+
heldByExpiresAt: z.ZodOptional<z.ZodNumber>;
|
|
404
|
+
heldByClaim: z.ZodOptional<z.ZodObject<{
|
|
405
|
+
entityType: z.ZodString;
|
|
406
|
+
entityId: z.ZodString;
|
|
407
|
+
path: z.ZodOptional<z.ZodString>;
|
|
408
|
+
range: z.ZodOptional<z.ZodObject<{
|
|
409
|
+
startLine: z.ZodNumber;
|
|
410
|
+
endLine: z.ZodNumber;
|
|
411
|
+
startColumn: z.ZodOptional<z.ZodNumber>;
|
|
412
|
+
endColumn: z.ZodOptional<z.ZodNumber>;
|
|
413
|
+
}, z.core.$strip>>;
|
|
414
|
+
field: z.ZodOptional<z.ZodString>;
|
|
415
|
+
fields: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
|
|
416
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
417
|
+
claimId: z.ZodString;
|
|
418
|
+
description: z.ZodOptional<z.ZodString>;
|
|
419
|
+
declaredAt: z.ZodNumber;
|
|
420
|
+
expiresAt: z.ZodNumber;
|
|
421
|
+
onBehalfOfId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
422
|
+
onBehalfOfKind: z.ZodOptional<z.ZodNullable<z.ZodPreprocess<z.ZodEnum<{
|
|
423
|
+
user: "user";
|
|
424
|
+
agent: "agent";
|
|
425
|
+
system: "system";
|
|
426
|
+
}>>>>;
|
|
427
|
+
capabilityId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
428
|
+
}, z.core.$strip>>;
|
|
429
|
+
policyReason: z.ZodOptional<z.ZodString>;
|
|
430
|
+
position: z.ZodNumber;
|
|
431
|
+
reason: z.ZodOptional<z.ZodPreprocess<z.ZodOptional<z.ZodEnum<{
|
|
432
|
+
conflict: "conflict";
|
|
433
|
+
expired: "expired";
|
|
434
|
+
coordination_unavailable: "coordination_unavailable";
|
|
435
|
+
preempted: "preempted";
|
|
436
|
+
}>>>>;
|
|
437
|
+
}, z.core.$strip>;
|
|
438
|
+
};
|
|
439
|
+
readonly claim_granted: {
|
|
440
|
+
readonly validation: "schema";
|
|
441
|
+
readonly payload: z.ZodObject<{
|
|
442
|
+
claimId: z.ZodString;
|
|
443
|
+
fenceToken: z.ZodOptional<z.ZodNumber>;
|
|
444
|
+
target: z.ZodObject<{
|
|
445
|
+
entityType: z.ZodString;
|
|
446
|
+
entityId: z.ZodString;
|
|
447
|
+
path: z.ZodOptional<z.ZodString>;
|
|
448
|
+
range: z.ZodOptional<z.ZodObject<{
|
|
449
|
+
startLine: z.ZodNumber;
|
|
450
|
+
endLine: z.ZodNumber;
|
|
451
|
+
startColumn: z.ZodOptional<z.ZodNumber>;
|
|
452
|
+
endColumn: z.ZodOptional<z.ZodNumber>;
|
|
453
|
+
}, z.core.$strip>>;
|
|
454
|
+
field: z.ZodOptional<z.ZodString>;
|
|
455
|
+
fields: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
|
|
456
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
457
|
+
}, z.core.$strip>;
|
|
458
|
+
}, z.core.$strip>;
|
|
459
|
+
};
|
|
460
|
+
readonly claim_lost: {
|
|
461
|
+
readonly validation: "schema";
|
|
462
|
+
readonly payload: z.ZodObject<{
|
|
463
|
+
claimId: z.ZodString;
|
|
464
|
+
reason: z.ZodEnum<{
|
|
465
|
+
expired: "expired";
|
|
466
|
+
preempted: "preempted";
|
|
467
|
+
}>;
|
|
468
|
+
target: z.ZodObject<{
|
|
469
|
+
entityType: z.ZodString;
|
|
470
|
+
entityId: z.ZodString;
|
|
471
|
+
path: z.ZodOptional<z.ZodString>;
|
|
472
|
+
range: z.ZodOptional<z.ZodObject<{
|
|
473
|
+
startLine: z.ZodNumber;
|
|
474
|
+
endLine: z.ZodNumber;
|
|
475
|
+
startColumn: z.ZodOptional<z.ZodNumber>;
|
|
476
|
+
endColumn: z.ZodOptional<z.ZodNumber>;
|
|
477
|
+
}, z.core.$strip>>;
|
|
478
|
+
field: z.ZodOptional<z.ZodString>;
|
|
479
|
+
fields: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
|
|
480
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
481
|
+
}, z.core.$strip>;
|
|
482
|
+
}, z.core.$strip>;
|
|
483
|
+
};
|
|
484
|
+
readonly claim_queue: {
|
|
485
|
+
readonly validation: "schema";
|
|
486
|
+
readonly payload: z.ZodObject<{
|
|
487
|
+
target: z.ZodObject<{
|
|
488
|
+
type: z.ZodString;
|
|
489
|
+
id: z.ZodString;
|
|
490
|
+
}, z.core.$strip>;
|
|
491
|
+
queue: z.ZodArray<z.ZodObject<{
|
|
492
|
+
object: z.ZodLiteral<"claim">;
|
|
493
|
+
id: z.ZodString;
|
|
494
|
+
status: z.ZodLiteral<"queued">;
|
|
495
|
+
target: z.ZodObject<{
|
|
496
|
+
field: z.ZodOptional<z.ZodString>;
|
|
497
|
+
path: z.ZodOptional<z.ZodString>;
|
|
498
|
+
range: z.ZodOptional<z.ZodObject<{
|
|
499
|
+
startLine: z.ZodNumber;
|
|
500
|
+
endLine: z.ZodNumber;
|
|
501
|
+
startColumn: z.ZodOptional<z.ZodNumber>;
|
|
502
|
+
endColumn: z.ZodOptional<z.ZodNumber>;
|
|
503
|
+
}, z.core.$strip>>;
|
|
504
|
+
fields: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
|
|
505
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
506
|
+
type: z.ZodString;
|
|
507
|
+
id: z.ZodString;
|
|
508
|
+
}, z.core.$strip>;
|
|
509
|
+
description: z.ZodDefault<z.ZodString>;
|
|
510
|
+
heldBy: z.ZodOptional<z.ZodString>;
|
|
511
|
+
participantKind: z.ZodOptional<z.ZodPreprocess<z.ZodEnum<{
|
|
512
|
+
user: "user";
|
|
513
|
+
agent: "agent";
|
|
514
|
+
system: "system";
|
|
515
|
+
}>>>;
|
|
516
|
+
position: z.ZodNumber;
|
|
517
|
+
expiresAt: z.ZodNumber;
|
|
518
|
+
}, z.core.$strip>>;
|
|
519
|
+
}, z.core.$strip>;
|
|
520
|
+
};
|
|
521
|
+
readonly claim_heartbeat_ack: {
|
|
522
|
+
readonly validation: "schema";
|
|
523
|
+
readonly payload: z.ZodObject<{
|
|
524
|
+
claimId: z.ZodString;
|
|
525
|
+
status: z.ZodEnum<{
|
|
526
|
+
queued: "queued";
|
|
527
|
+
held: "held";
|
|
528
|
+
lost: "lost";
|
|
529
|
+
}>;
|
|
530
|
+
expiresAt: z.ZodOptional<z.ZodNumber>;
|
|
531
|
+
position: z.ZodOptional<z.ZodNumber>;
|
|
532
|
+
queueDepth: z.ZodOptional<z.ZodNumber>;
|
|
533
|
+
}, z.core.$strip>;
|
|
534
|
+
};
|
|
535
|
+
};
|
|
536
|
+
/** Every frame type the protocol declares. */
|
|
537
|
+
export type InboundFrameType = keyof typeof WS_INBOUND_FRAMES;
|
|
538
|
+
/**
|
|
539
|
+
* The validated payload type of each schema-checked frame, read straight off
|
|
540
|
+
* the registry. A handler that takes one of these gets the shape the
|
|
541
|
+
* dispatcher proved, with no second declaration to keep in step and no cast at
|
|
542
|
+
* the point of use.
|
|
543
|
+
*/
|
|
544
|
+
export type InboundFramePayload = {
|
|
545
|
+
[K in InboundFrameType]: (typeof WS_INBOUND_FRAMES)[K] extends {
|
|
546
|
+
readonly payload: infer P extends z.ZodType;
|
|
547
|
+
} ? z.infer<P> : never;
|
|
548
|
+
};
|
|
549
|
+
/** The frame types the dispatcher parses before calling a handler. */
|
|
550
|
+
export type SchemaValidatedFrameType = {
|
|
551
|
+
[K in InboundFrameType]: (typeof WS_INBOUND_FRAMES)[K] extends {
|
|
552
|
+
readonly validation: 'schema';
|
|
553
|
+
} ? K : never;
|
|
554
|
+
}[InboundFrameType];
|
|
555
|
+
/** Whether the protocol declares this frame type at all. */
|
|
556
|
+
export declare function isKnownInboundFrame(type: string): type is InboundFrameType;
|
|
557
|
+
/**
|
|
558
|
+
* Whether this frame's payload is parsed before dispatch. Declared as a
|
|
559
|
+
* predicate, and declared here, because the fact it asserts is a fact about the
|
|
560
|
+
* registry directly above it: the two cannot be edited apart.
|
|
561
|
+
*/
|
|
562
|
+
export declare function isSchemaValidatedFrame(type: InboundFrameType): type is SchemaValidatedFrameType;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every frame the server can send, in one list.
|
|
3
|
+
*
|
|
4
|
+
* Before this existed, "what frames are there" was answerable only by reading
|
|
5
|
+
* the dispatch table, the transport's event map, and each handler's defensive
|
|
6
|
+
* narrowing together — three places that agreed by convention. This registry is
|
|
7
|
+
* the single answer, and it carries how each frame's payload is validated.
|
|
8
|
+
*
|
|
9
|
+
* A frame is validated one of two ways. Most carry a `payload` schema and are
|
|
10
|
+
* parsed here, before the handler runs, so a handler receives a value whose
|
|
11
|
+
* shape is already proven. The rest are marked `handler` because their
|
|
12
|
+
* validation is genuinely load-bearing elsewhere — a delta is checked once
|
|
13
|
+
* downstream against the schema the materialiser holds, and a commit receipt
|
|
14
|
+
* has to tolerate an older server's spelling before it can be parsed. Each of
|
|
15
|
+
* those says where its check lives, so `handler` is a citation and never an
|
|
16
|
+
* excuse.
|
|
17
|
+
*
|
|
18
|
+
* A frame type absent from this registry is rejected. That is deliberate: the
|
|
19
|
+
* server and this package ship from one repository, so an unrecognised frame
|
|
20
|
+
* means the two have drifted, and failing loudly beats materialising a change
|
|
21
|
+
* nobody validated. Application-level collaboration events are the exception —
|
|
22
|
+
* they are registered by the consumer at construction time, not by the
|
|
23
|
+
* protocol, and are dispatched separately.
|
|
24
|
+
*/
|
|
25
|
+
import { z } from 'zod';
|
|
26
|
+
import { commitReceiptSchema } from './commit.js';
|
|
27
|
+
import { clientSyncDeltaSchema } from './delta.js';
|
|
28
|
+
import { claimAcquiredSchema, claimExpiredSchema, claimGrantedSchema, claimHeartbeatAckPayloadSchema, claimLostSchema, claimQueuedSchema, claimQueueSchema, claimRejectionSchema, presenceUpdateSchema, subscriptionAckPayloadSchema, } from '../coordination/schema.js';
|
|
29
|
+
/**
|
|
30
|
+
* The envelope itself: a type and a payload. `catchall` keeps the extra keys,
|
|
31
|
+
* because the oldest delta form puts a delta's own fields at the top level
|
|
32
|
+
* instead of under `payload`, and the dispatcher still has to recognise it.
|
|
33
|
+
*/
|
|
34
|
+
export const wsInboundEnvelopeSchema = z
|
|
35
|
+
.object({
|
|
36
|
+
type: z.string().optional(),
|
|
37
|
+
payload: z.unknown().optional(),
|
|
38
|
+
})
|
|
39
|
+
.catchall(z.unknown());
|
|
40
|
+
/**
|
|
41
|
+
* The protocol's inbound surface. Adding a frame to the server means adding it
|
|
42
|
+
* here, which is the point — the compiler cannot enforce that, but the throw on
|
|
43
|
+
* an unrecognised type does.
|
|
44
|
+
*/
|
|
45
|
+
export const WS_INBOUND_FRAMES = {
|
|
46
|
+
// ── Keepalive ──────────────────────────────────────────────────────────
|
|
47
|
+
ping: { validation: 'handler', where: 'dispatchWsFrame — ignored, no payload' },
|
|
48
|
+
pong: { validation: 'handler', where: 'dispatchWsFrame — ignored, no payload' },
|
|
49
|
+
// ── Materialisation ────────────────────────────────────────────────────
|
|
50
|
+
delta: {
|
|
51
|
+
validation: 'handler',
|
|
52
|
+
// Not parsed at dispatch because a delta frame carries a batch: each entry
|
|
53
|
+
// is validated on its own so one malformed delta is dropped rather than
|
|
54
|
+
// sinking the batch around it.
|
|
55
|
+
where: 'the materialiser parses each delta as it applies it',
|
|
56
|
+
checkedBy: clientSyncDeltaSchema,
|
|
57
|
+
},
|
|
58
|
+
sync_response: {
|
|
59
|
+
validation: 'handler',
|
|
60
|
+
// No `checkedBy`: the schema lives in the reactive engine
|
|
61
|
+
// (`sync/schemas.ts`), which consumes this package. The core cannot name a
|
|
62
|
+
// symbol from its own consumer, and inverting the dependency to make this
|
|
63
|
+
// citation checkable would put materialisation vocabulary in the core —
|
|
64
|
+
// the exact thing the seam exists to keep out.
|
|
65
|
+
where: 'the reactive engine validates it while advancing its resume cursor',
|
|
66
|
+
},
|
|
67
|
+
bootstrap_response: {
|
|
68
|
+
validation: 'handler',
|
|
69
|
+
// No `checkedBy`, for the same reason as `sync_response` above.
|
|
70
|
+
where: 'the reactive engine validates the bootstrap payload as it applies it',
|
|
71
|
+
},
|
|
72
|
+
// ── Commit ─────────────────────────────────────────────────────────────
|
|
73
|
+
mutation_result: {
|
|
74
|
+
validation: 'handler',
|
|
75
|
+
where: 'handleMutationResult — it lifts the frame\'s notifications and missingIds alongside the payload before this can parse',
|
|
76
|
+
checkedBy: commitReceiptSchema,
|
|
77
|
+
},
|
|
78
|
+
// ── Requests we made ───────────────────────────────────────────────────
|
|
79
|
+
claim_ack: {
|
|
80
|
+
validation: 'handler',
|
|
81
|
+
where: 'handleClaimAck narrows field by field, because a rejection carries a typed capability error it has to re-raise as CapabilityError',
|
|
82
|
+
},
|
|
83
|
+
subscription_ack: {
|
|
84
|
+
validation: 'handler',
|
|
85
|
+
// Not parsed at dispatch because the handler must first claim the oldest
|
|
86
|
+
// pending request: a payload that failed here would otherwise leave that
|
|
87
|
+
// request hanging until its timeout instead of being rejected with a cause.
|
|
88
|
+
where: 'handleSubscriptionAck',
|
|
89
|
+
checkedBy: subscriptionAckPayloadSchema,
|
|
90
|
+
},
|
|
91
|
+
// ── Coordination ───────────────────────────────────────────────────────
|
|
92
|
+
presence_update: { validation: 'schema', payload: presenceUpdateSchema },
|
|
93
|
+
claim_expired: { validation: 'schema', payload: claimExpiredSchema },
|
|
94
|
+
claim_rejected: { validation: 'schema', payload: claimRejectionSchema },
|
|
95
|
+
claim_acquired: { validation: 'schema', payload: claimAcquiredSchema },
|
|
96
|
+
claim_queued: { validation: 'schema', payload: claimQueuedSchema },
|
|
97
|
+
claim_granted: { validation: 'schema', payload: claimGrantedSchema },
|
|
98
|
+
claim_lost: { validation: 'schema', payload: claimLostSchema },
|
|
99
|
+
claim_queue: { validation: 'schema', payload: claimQueueSchema },
|
|
100
|
+
claim_heartbeat_ack: {
|
|
101
|
+
validation: 'schema',
|
|
102
|
+
payload: claimHeartbeatAckPayloadSchema,
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
/** Whether the protocol declares this frame type at all. */
|
|
106
|
+
export function isKnownInboundFrame(type) {
|
|
107
|
+
return Object.prototype.hasOwnProperty.call(WS_INBOUND_FRAMES, type);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Whether this frame's payload is parsed before dispatch. Declared as a
|
|
111
|
+
* predicate, and declared here, because the fact it asserts is a fact about the
|
|
112
|
+
* registry directly above it: the two cannot be edited apart.
|
|
113
|
+
*/
|
|
114
|
+
export function isSchemaValidatedFrame(type) {
|
|
115
|
+
return WS_INBOUND_FRAMES[type].validation === 'schema';
|
|
116
|
+
}
|