@abloatai/ablo 0.34.1 → 0.35.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 +674 -5
- package/README.md +39 -22
- package/dist/BaseSyncedStore.d.ts +152 -44
- package/dist/BaseSyncedStore.js +300 -184
- package/dist/Database.d.ts +9 -24
- package/dist/Database.js +37 -22
- package/dist/InstanceCache.d.ts +25 -4
- package/dist/InstanceCache.js +48 -15
- package/dist/LazyReferenceCollection.d.ts +3 -3
- package/dist/LazyReferenceCollection.js +4 -4
- package/dist/Model.d.ts +6 -6
- package/dist/Model.js +10 -10
- package/dist/ModelRegistry.d.ts +4 -4
- package/dist/ModelRegistry.js +3 -3
- package/dist/{SyncEngineContext.d.ts → RuntimeContext.d.ts} +20 -13
- package/dist/{SyncEngineContext.js → RuntimeContext.js} +11 -12
- package/dist/SyncClient.d.ts +42 -32
- package/dist/SyncClient.js +166 -110
- 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/cli.cjs +3344 -1073
- package/dist/client/Ablo.d.ts +42 -287
- package/dist/client/Ablo.js +118 -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 +4 -4
- package/dist/client/createInternalComponents.js +9 -8
- package/dist/client/createModelProxy.d.ts +78 -373
- package/dist/client/createModelProxy.js +114 -86
- package/dist/client/humans.d.ts +48 -0
- package/dist/client/humans.js +52 -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 +48 -0
- package/dist/client/reactiveEngine.js +910 -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/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 +9 -9
- package/dist/context.js +10 -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/DatabaseManager.js +1 -1
- package/dist/core/QueryView.d.ts +1 -1
- package/dist/core/QueryView.js +1 -1
- package/dist/core/StoreManager.d.ts +4 -23
- package/dist/core/StoreManager.js +5 -55
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.js +2 -2
- package/dist/core/storeContract.d.ts +2 -2
- package/dist/docs/catalog.d.ts +72 -0
- package/dist/docs/catalog.js +227 -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 +40 -34
- package/dist/index.js +26 -20
- 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 +2 -2
- package/dist/query/client.js +4 -4
- package/dist/query/types.d.ts +6 -41
- package/dist/query/types.js +2 -2
- package/dist/react/AbloProvider.d.ts +6 -8
- package/dist/react/AbloProvider.js +5 -7
- package/dist/react/context.d.ts +1 -1
- package/dist/react/context.js +1 -1
- package/dist/react/index.d.ts +5 -5
- package/dist/react/index.js +3 -3
- package/dist/react/internalContext.d.ts +1 -1
- package/dist/react/useAblo.d.ts +3 -3
- package/dist/react/useAblo.js +1 -1
- 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 +86 -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 +10 -10
- package/dist/schema/index.js +18 -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 +3 -3
- package/dist/schema/serialize.d.ts +15 -6
- package/dist/schema/serialize.js +17 -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/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/footprint.d.ts +111 -0
- package/dist/source/footprint.js +0 -0
- 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/stores/ObjectStore.d.ts +1 -1
- package/dist/stores/SyncActionStore.d.ts +1 -1
- package/dist/stores/SyncActionStore.js +2 -10
- 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 +123 -6
- package/dist/sync/BootstrapFetcher.js +492 -66
- package/dist/sync/ConnectionManager.d.ts +6 -198
- package/dist/sync/ConnectionManager.js +6 -677
- package/dist/sync/OnDemandLoader.d.ts +2 -2
- package/dist/sync/OnDemandLoader.js +60 -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/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 +1 -1
- package/dist/sync/participants.d.ts +5 -4
- package/dist/sync/participants.js +29 -22
- package/dist/sync/schemaDrift.d.ts +55 -0
- package/dist/sync/schemaDrift.js +53 -0
- package/dist/sync/schemas.d.ts +21 -32
- package/dist/sync/schemas.js +26 -17
- 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/testing/fixtures/bootstrap.d.ts +1 -1
- package/dist/testing/fixtures/deltas.d.ts +1 -1
- package/dist/testing/fixtures/httpResponses.d.ts +70 -0
- package/dist/testing/fixtures/httpResponses.js +90 -0
- package/dist/testing/fixtures/models.js +1 -1
- package/dist/testing/helpers/wait.js +1 -1
- package/dist/testing/mocks/MockMutationExecutor.d.ts +2 -2
- package/dist/testing/mocks/MockMutationExecutor.js +8 -14
- package/dist/testing/mocks/MockSyncContext.d.ts +11 -11
- package/dist/testing/mocks/MockSyncContext.js +10 -9
- package/dist/testing/mocks/MockSyncStore.js +1 -1
- package/dist/testing/mocks/MockWebSocket.d.ts +2 -2
- 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 +177 -0
- package/dist/transaction/auth/capability.js +199 -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 +49 -0
- package/dist/transaction/coordination/awaitClaimGrant.js +112 -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 +44 -0
- package/dist/transaction/coordination/locator.d.ts +83 -0
- package/dist/transaction/coordination/locator.js +82 -0
- package/dist/transaction/coordination/schema.d.ts +1473 -0
- package/dist/{coordination → transaction/coordination}/schema.js +490 -55
- package/dist/transaction/coordination/targetConflict.d.ts +2 -0
- package/dist/transaction/coordination/targetConflict.js +103 -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} +11 -11
- package/dist/{errorCodes.js → transaction/errorCodes.js} +35 -12
- package/dist/{errors.d.ts → transaction/errors.d.ts} +37 -13
- package/dist/{errors.js → transaction/errors.js} +85 -16
- 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 +192 -0
- package/dist/transaction/plugin.js +87 -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 +266 -0
- package/dist/transaction/resources/httpResources.js +7 -0
- package/dist/transaction/resources/modelOperations.d.ts +319 -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 +85 -0
- package/dist/transaction/resources/where.js +70 -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 +5 -5
- package/dist/{schema → transaction/schema}/field.js +5 -5
- 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 +57 -0
- package/dist/transaction/schema/openapi.js +340 -0
- package/dist/{schema → transaction/schema}/relation.d.ts +14 -14
- 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 +12 -10
- package/dist/{schema → transaction/schema}/schema.js +4 -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 +4 -5
- 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} +10 -36
- 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/{client → transaction/transport}/httpClient.d.ts +59 -16
- package/dist/{client → transaction/transport}/httpClient.js +5 -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 +171 -85
- 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 +576 -0
- package/dist/transaction/transport/wsTransport.js +1017 -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 +63 -45
- 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 +351 -0
- package/dist/transaction/wire/accountResponses.js +255 -0
- package/dist/transaction/wire/auth.d.ts +49 -0
- package/dist/transaction/wire/auth.js +57 -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 +463 -0
- package/dist/transaction/wire/claims.js +229 -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 +177 -0
- package/dist/transaction/wire/feedEvent.js +39 -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 +552 -0
- package/dist/transaction/wire/inboundFrames.js +116 -0
- package/dist/transaction/wire/index.d.ts +50 -0
- package/dist/transaction/wire/index.js +74 -0
- package/dist/{wire → transaction/wire}/listEnvelope.d.ts +13 -14
- package/dist/transaction/wire/listEnvelope.js +42 -0
- package/dist/transaction/wire/modelResponses.d.ts +85 -0
- package/dist/transaction/wire/modelResponses.js +43 -0
- package/dist/transactions/{TransactionQueue.d.ts → mutations/MutationQueue.d.ts} +79 -38
- package/dist/transactions/{TransactionQueue.js → mutations/MutationQueue.js} +110 -59
- 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} +16 -15
- package/dist/transactions/{commitPayload.js → mutations/commitPayload.js} +12 -12
- package/dist/transactions/{deltaConfirmation.d.ts → mutations/deltaConfirmation.d.ts} +11 -11
- package/dist/transactions/{deltaConfirmation.js → mutations/deltaConfirmation.js} +7 -7
- 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} +3 -3
- package/dist/transactions/{replayValidation.js → mutations/replayValidation.js} +4 -3
- package/dist/utils/mobxSetup.d.ts +1 -1
- package/dist/utils/mobxSetup.js +5 -2
- 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 +19 -12
- package/docs/api-keys.md +8 -4
- package/docs/api.md +22 -18
- package/docs/audit.md +2 -0
- package/docs/cli.md +31 -3
- package/docs/client-behavior.md +8 -6
- package/docs/concurrency-convention.md +30 -24
- package/docs/coordination.md +48 -38
- package/docs/data-sources.md +3 -1
- package/docs/debugging.md +5 -3
- 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 +45 -44
- package/docs/examples/server-agent.md +46 -26
- package/docs/groups.md +32 -29
- package/docs/guarantees.md +4 -2
- package/docs/how-it-works.md +9 -7
- package/docs/idempotency.md +126 -0
- package/docs/identity.md +58 -54
- package/docs/index.md +172 -86
- package/docs/integration-guide.md +17 -16
- package/docs/interaction-model.md +6 -4
- package/docs/mcp.md +41 -16
- package/docs/migration.md +63 -5
- package/docs/operating-on-your-database.md +3 -1
- package/docs/projects.md +2 -0
- package/docs/quickstart.md +22 -5
- package/docs/react.md +12 -10
- package/docs/schema-contract.md +5 -3
- package/docs/session-settings.md +108 -0
- package/docs/sessions.md +3 -1
- package/docs/webhooks.md +3 -1
- package/llms.txt +47 -17
- package/package.json +10 -8
- 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/client/durableWrites.d.ts +0 -21
- package/dist/coordination/schema.d.ts +0 -722
- package/dist/schema/openapi.d.ts +0 -29
- package/dist/schema/openapi.js +0 -124
- package/dist/transactions/durableWriteStore.js +0 -30
- 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/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/coordination}/claimHeartbeatLoop.d.ts +0 -0
- /package/dist/{client → transaction/coordination}/claimHeartbeatLoop.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/{utils → transaction/utils}/duration.d.ts +0 -0
- /package/dist/{utils → transaction/utils}/duration.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
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The semantic schema-drift classifier — the question that matters is not
|
|
3
|
+
* "did the schema change at all?" (one whole-schema hash answers that, and
|
|
4
|
+
* welds every client to every push) but "does THIS client use anything that
|
|
5
|
+
* changed?". This module compares only the models the client declares against
|
|
6
|
+
* the server's per-model surface (`GET /api/schema`), so:
|
|
7
|
+
*
|
|
8
|
+
* - a purely additive server change (models this build never references) is
|
|
9
|
+
* SILENCE — deployed clients don't care what they don't use;
|
|
10
|
+
* - a model this build declares that the server doesn't have is named, with
|
|
11
|
+
* the push as the fix;
|
|
12
|
+
* - a shared model whose content differs is named, so "which field moved"
|
|
13
|
+
* is one `ablo status` away instead of a hash-guessing game.
|
|
14
|
+
*
|
|
15
|
+
* Pure and transport-free; the BootstrapFetcher owns fetching the surface.
|
|
16
|
+
*/
|
|
17
|
+
/** One model as the server's schema read-back reports it. */
|
|
18
|
+
export interface ServerSchemaModel {
|
|
19
|
+
readonly key: string;
|
|
20
|
+
/** Per-model content hash; absent on servers older than this check. */
|
|
21
|
+
readonly hash?: string;
|
|
22
|
+
}
|
|
23
|
+
export type SchemaDriftFinding =
|
|
24
|
+
/** Every model this client declares exists server-side with matching content
|
|
25
|
+
* (the server may know more — that's an additive lead, not drift). */
|
|
26
|
+
{
|
|
27
|
+
readonly kind: 'aligned';
|
|
28
|
+
}
|
|
29
|
+
/** Models this build declares that the server has no idea about — writes to
|
|
30
|
+
* them will be declined until the schema is pushed. */
|
|
31
|
+
| {
|
|
32
|
+
readonly kind: 'unpushed';
|
|
33
|
+
readonly models: readonly string[];
|
|
34
|
+
}
|
|
35
|
+
/** Shared models whose content differs between this build and the server
|
|
36
|
+
* (may also carry unpushed models found alongside). */
|
|
37
|
+
| {
|
|
38
|
+
readonly kind: 'changed';
|
|
39
|
+
readonly models: readonly string[];
|
|
40
|
+
readonly unpushed: readonly string[];
|
|
41
|
+
}
|
|
42
|
+
/** The server surface carries no per-model hashes (older server) — the
|
|
43
|
+
* caller falls back to the whole-hash comparison. */
|
|
44
|
+
| {
|
|
45
|
+
readonly kind: 'unknown';
|
|
46
|
+
};
|
|
47
|
+
export declare function classifySchemaDrift(clientModels: Readonly<Record<string, string>>, serverModels: readonly ServerSchemaModel[]): SchemaDriftFinding;
|
|
48
|
+
/**
|
|
49
|
+
* The warning for a real, named divergence. Calm and specific: which models,
|
|
50
|
+
* what that means for this client, and the one next step. Never speaks about
|
|
51
|
+
* hashes — the point of the semantic check is that nobody has to compare hex.
|
|
52
|
+
*/
|
|
53
|
+
export declare function describeSchemaDrift(finding: Extract<SchemaDriftFinding, {
|
|
54
|
+
kind: 'unpushed' | 'changed';
|
|
55
|
+
}>, serverLabel: string): string;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The semantic schema-drift classifier — the question that matters is not
|
|
3
|
+
* "did the schema change at all?" (one whole-schema hash answers that, and
|
|
4
|
+
* welds every client to every push) but "does THIS client use anything that
|
|
5
|
+
* changed?". This module compares only the models the client declares against
|
|
6
|
+
* the server's per-model surface (`GET /api/schema`), so:
|
|
7
|
+
*
|
|
8
|
+
* - a purely additive server change (models this build never references) is
|
|
9
|
+
* SILENCE — deployed clients don't care what they don't use;
|
|
10
|
+
* - a model this build declares that the server doesn't have is named, with
|
|
11
|
+
* the push as the fix;
|
|
12
|
+
* - a shared model whose content differs is named, so "which field moved"
|
|
13
|
+
* is one `ablo status` away instead of a hash-guessing game.
|
|
14
|
+
*
|
|
15
|
+
* Pure and transport-free; the BootstrapFetcher owns fetching the surface.
|
|
16
|
+
*/
|
|
17
|
+
export function classifySchemaDrift(clientModels, serverModels) {
|
|
18
|
+
if (serverModels.length > 0 && serverModels.every((m) => !m.hash)) {
|
|
19
|
+
return { kind: 'unknown' };
|
|
20
|
+
}
|
|
21
|
+
const server = new Map(serverModels.map((m) => [m.key, m.hash]));
|
|
22
|
+
const unpushed = [];
|
|
23
|
+
const changed = [];
|
|
24
|
+
for (const [key, hash] of Object.entries(clientModels)) {
|
|
25
|
+
const serverHash = server.get(key);
|
|
26
|
+
if (serverHash === undefined)
|
|
27
|
+
unpushed.push(key);
|
|
28
|
+
else if (serverHash !== hash)
|
|
29
|
+
changed.push(key);
|
|
30
|
+
}
|
|
31
|
+
if (changed.length > 0)
|
|
32
|
+
return { kind: 'changed', models: changed, unpushed };
|
|
33
|
+
if (unpushed.length > 0)
|
|
34
|
+
return { kind: 'unpushed', models: unpushed };
|
|
35
|
+
return { kind: 'aligned' };
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* The warning for a real, named divergence. Calm and specific: which models,
|
|
39
|
+
* what that means for this client, and the one next step. Never speaks about
|
|
40
|
+
* hashes — the point of the semantic check is that nobody has to compare hex.
|
|
41
|
+
*/
|
|
42
|
+
export function describeSchemaDrift(finding, serverLabel) {
|
|
43
|
+
if (finding.kind === 'unpushed') {
|
|
44
|
+
return (`Ablo: This build declares models the server at ${serverLabel} doesn't have yet ` +
|
|
45
|
+
`(${finding.models.join(', ')}). Writes to them will be declined until the schema is ` +
|
|
46
|
+
`pushed — run \`ablo push\` (and \`ablo status\` to confirm it targets this server).`);
|
|
47
|
+
}
|
|
48
|
+
const alsoUnpushed = finding.unpushed.length > 0 ? ` (${finding.unpushed.join(', ')} not pushed yet)` : '';
|
|
49
|
+
return (`Ablo: These models differ between this build and the server at ${serverLabel}: ` +
|
|
50
|
+
`${finding.models.join(', ')}${alsoUnpushed}. Reads and writes touching what changed may be ` +
|
|
51
|
+
`declined — \`ablo status\` shows the deployed shape; pushing your schema or deploying a ` +
|
|
52
|
+
`current build aligns them.`);
|
|
53
|
+
}
|
package/dist/sync/schemas.d.ts
CHANGED
|
@@ -2,22 +2,23 @@
|
|
|
2
2
|
* Zod validation schemas for sync engine server responses.
|
|
3
3
|
*
|
|
4
4
|
* Validates data at the fetch boundary before it enters the sync engine.
|
|
5
|
-
*
|
|
5
|
+
* Unknown keys are kept, so a server that adds a field does not break a client
|
|
6
|
+
* that predates it.
|
|
6
7
|
*/
|
|
7
8
|
import { z } from 'zod';
|
|
9
|
+
/**
|
|
10
|
+
* A delta as it arrives in a bootstrap payload.
|
|
11
|
+
*
|
|
12
|
+
* The bootstrap routes return the same rows the broadcast path does, so the
|
|
13
|
+
* fields are taken from {@link syncDeltaWireCoreSchema} rather than restated
|
|
14
|
+
* here — a delta is one shape, and this is the reader for it, not a second
|
|
15
|
+
* definition of it. Unknown keys are kept, because the server sends its own
|
|
16
|
+
* wider projection (attribution, `projectId`) that later stages may read.
|
|
17
|
+
*/
|
|
8
18
|
export declare const ServerDeltaSchema: z.ZodObject<{
|
|
9
19
|
id: z.ZodNumber;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
U: "U";
|
|
13
|
-
D: "D";
|
|
14
|
-
A: "A";
|
|
15
|
-
V: "V";
|
|
16
|
-
C: "C";
|
|
17
|
-
G: "G";
|
|
18
|
-
S: "S";
|
|
19
|
-
}>>;
|
|
20
|
-
action: z.ZodOptional<z.ZodEnum<{
|
|
20
|
+
data: z.ZodNullable<z.ZodUnion<readonly [z.ZodRecord<z.ZodString, z.ZodUnknown>, z.ZodString]>>;
|
|
21
|
+
actionType: z.ZodEnum<{
|
|
21
22
|
I: "I";
|
|
22
23
|
U: "U";
|
|
23
24
|
D: "D";
|
|
@@ -26,33 +27,22 @@ export declare const ServerDeltaSchema: z.ZodObject<{
|
|
|
26
27
|
C: "C";
|
|
27
28
|
G: "G";
|
|
28
29
|
S: "S";
|
|
29
|
-
}
|
|
30
|
+
}>;
|
|
30
31
|
modelName: z.ZodString;
|
|
31
|
-
|
|
32
|
-
modelId: z.ZodOptional<z.ZodString>;
|
|
33
|
-
data: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
32
|
+
modelId: z.ZodString;
|
|
34
33
|
}, z.core.$loose>;
|
|
35
34
|
export type ValidatedServerDelta = z.infer<typeof ServerDeltaSchema>;
|
|
36
35
|
export declare const BootstrapResponseSchema: z.ZodObject<{
|
|
37
36
|
type: z.ZodEnum<{
|
|
38
|
-
partial: "partial";
|
|
39
37
|
full: "full";
|
|
38
|
+
partial: "partial";
|
|
40
39
|
}>;
|
|
41
40
|
lastSyncId: z.ZodNumber;
|
|
42
41
|
models: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodPipe<z.ZodUnion<readonly [z.ZodArray<z.ZodUnknown>, z.ZodString, z.ZodNull]>, z.ZodTransform<unknown[], string | unknown[] | null>>>>;
|
|
43
42
|
deltas: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
44
43
|
id: z.ZodNumber;
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
U: "U";
|
|
48
|
-
D: "D";
|
|
49
|
-
A: "A";
|
|
50
|
-
V: "V";
|
|
51
|
-
C: "C";
|
|
52
|
-
G: "G";
|
|
53
|
-
S: "S";
|
|
54
|
-
}>>;
|
|
55
|
-
action: z.ZodOptional<z.ZodEnum<{
|
|
44
|
+
data: z.ZodNullable<z.ZodUnion<readonly [z.ZodRecord<z.ZodString, z.ZodUnknown>, z.ZodString]>>;
|
|
45
|
+
actionType: z.ZodEnum<{
|
|
56
46
|
I: "I";
|
|
57
47
|
U: "U";
|
|
58
48
|
D: "D";
|
|
@@ -61,16 +51,15 @@ export declare const BootstrapResponseSchema: z.ZodObject<{
|
|
|
61
51
|
C: "C";
|
|
62
52
|
G: "G";
|
|
63
53
|
S: "S";
|
|
64
|
-
}
|
|
54
|
+
}>;
|
|
65
55
|
modelName: z.ZodString;
|
|
66
|
-
|
|
67
|
-
modelId: z.ZodOptional<z.ZodString>;
|
|
68
|
-
data: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
56
|
+
modelId: z.ZodString;
|
|
69
57
|
}, z.core.$loose>>>;
|
|
70
58
|
deltaCount: z.ZodOptional<z.ZodNumber>;
|
|
71
59
|
failedModels: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
72
60
|
timestamp: z.ZodDefault<z.ZodNumber>;
|
|
73
61
|
schemaHash: z.ZodOptional<z.ZodString>;
|
|
62
|
+
nextCursor: z.ZodOptional<z.ZodString>;
|
|
74
63
|
}, z.core.$loose>;
|
|
75
64
|
export type ValidatedBootstrapResponse = z.infer<typeof BootstrapResponseSchema>;
|
|
76
65
|
/**
|
package/dist/sync/schemas.js
CHANGED
|
@@ -2,27 +2,32 @@
|
|
|
2
2
|
* Zod validation schemas for sync engine server responses.
|
|
3
3
|
*
|
|
4
4
|
* Validates data at the fetch boundary before it enters the sync engine.
|
|
5
|
-
*
|
|
5
|
+
* Unknown keys are kept, so a server that adds a field does not break a client
|
|
6
|
+
* that predates it.
|
|
6
7
|
*/
|
|
7
8
|
import { z } from 'zod';
|
|
8
9
|
import { getContext } from "../context.js";
|
|
9
|
-
import { AbloValidationError } from "../errors.js";
|
|
10
|
-
|
|
11
|
-
// The action codes a server delta can carry, matching the wire protocol's
|
|
12
|
-
// action-type set.
|
|
13
|
-
const SYNC_ACTION_VALUES = ['I', 'U', 'D', 'A', 'C', 'G', 'S', 'V'];
|
|
10
|
+
import { AbloValidationError } from "../transaction/errors.js";
|
|
11
|
+
import { syncDeltaWireCoreSchema } from '../transaction/wire/delta.js';
|
|
14
12
|
// ─── Server Delta Schema ─────────────────────────────────────────────────────
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
13
|
+
/**
|
|
14
|
+
* A delta as it arrives in a bootstrap payload.
|
|
15
|
+
*
|
|
16
|
+
* The bootstrap routes return the same rows the broadcast path does, so the
|
|
17
|
+
* fields are taken from {@link syncDeltaWireCoreSchema} rather than restated
|
|
18
|
+
* here — a delta is one shape, and this is the reader for it, not a second
|
|
19
|
+
* definition of it. Unknown keys are kept, because the server sends its own
|
|
20
|
+
* wider projection (attribution, `projectId`) that later stages may read.
|
|
21
|
+
*/
|
|
22
|
+
export const ServerDeltaSchema = syncDeltaWireCoreSchema
|
|
23
|
+
.pick({
|
|
24
|
+
id: true,
|
|
25
|
+
actionType: true,
|
|
26
|
+
modelName: true,
|
|
27
|
+
modelId: true,
|
|
28
|
+
data: true,
|
|
24
29
|
})
|
|
25
|
-
.
|
|
30
|
+
.loose();
|
|
26
31
|
// ─── Model Value Schema ─────────────────────────────────────────────────────
|
|
27
32
|
// A model's values can arrive in more than one shape depending on how the
|
|
28
33
|
// server serialized them:
|
|
@@ -60,8 +65,12 @@ export const BootstrapResponseSchema = z
|
|
|
60
65
|
// absent when the server predates this field or the tenant has never
|
|
61
66
|
// pushed a schema.
|
|
62
67
|
schemaHash: z.string().optional(),
|
|
68
|
+
// Present when a paged single-model request stopped at its row limit
|
|
69
|
+
// with rows remaining: pass it back as the next page's cursor. Absent
|
|
70
|
+
// on the final page, on unpaged responses, and from older servers.
|
|
71
|
+
nextCursor: z.string().optional(),
|
|
63
72
|
})
|
|
64
|
-
.
|
|
73
|
+
.loose();
|
|
65
74
|
// ─── Parse Helpers ───────────────────────────────────────────────────────────
|
|
66
75
|
/**
|
|
67
76
|
* Validates a raw bootstrap response from the server and returns the typed
|
package/dist/sync/syncPlan.d.ts
CHANGED
|
@@ -5,17 +5,17 @@
|
|
|
5
5
|
* object pool, and the enrichment rules that attach related parents to
|
|
6
6
|
* incoming rows. See {@link deriveSyncPlanFromSchema}.
|
|
7
7
|
*/
|
|
8
|
-
import type { Schema } from '../schema/schema.js';
|
|
8
|
+
import type { Schema } from '../transaction/schema/schema.js';
|
|
9
9
|
/** A foreign-key index to register on the in-memory object pool when the store is constructed. */
|
|
10
10
|
export interface ForeignKeyIndexSpec {
|
|
11
11
|
/**
|
|
12
12
|
* The name of the child model, where the foreign-key field lives, and the
|
|
13
13
|
* name the object pool indexes by. Use the wire type-name casing (for
|
|
14
|
-
* example `'
|
|
14
|
+
* example `'Block'`, not `'block'`), since that is the value
|
|
15
15
|
* stamped onto reconstructed models and the key the pool looks up.
|
|
16
16
|
*/
|
|
17
17
|
readonly modelName: string;
|
|
18
|
-
/** The foreign-key field name on the child model, for example `'
|
|
18
|
+
/** The foreign-key field name on the child model, for example `'sectionId'`. */
|
|
19
19
|
readonly fieldName: string;
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
@@ -1,116 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* point; every parsed frame then passes through {@link dispatchWsFrame}.
|
|
2
|
+
* Moved to the settlement core with the duplex transport (ADR 0016): the
|
|
3
|
+
* inbound frame dispatch is the receiving half of the wire protocol, and the
|
|
4
|
+
* handlers already worked against the minimal `WsSession` port rather than
|
|
5
|
+
* the transport object. This path re-exports it so existing importers stay
|
|
6
|
+
* unchanged.
|
|
8
7
|
*/
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* In-flight `commit` request record, keyed by clientTxId in the session.
|
|
12
|
-
* Resolved when a matching `mutation_result` frame arrives from the
|
|
13
|
-
* server, or rejected on timeout / disconnect.
|
|
14
|
-
*/
|
|
15
|
-
export interface PendingCommit {
|
|
16
|
-
resolve: (value: CommitAck) => void;
|
|
17
|
-
reject: (err: Error) => void;
|
|
18
|
-
timeout: ReturnType<typeof setTimeout>;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* In-flight `claim` request record, keyed by claimId. Resolved when the
|
|
22
|
-
* matching `claim_ack` arrives, or rejected on timeout/disconnect.
|
|
23
|
-
*/
|
|
24
|
-
export interface PendingClaim {
|
|
25
|
-
resolve: (value: {
|
|
26
|
-
syncGroups: string[];
|
|
27
|
-
ttlSeconds?: number;
|
|
28
|
-
}) => void;
|
|
29
|
-
reject: (err: Error) => void;
|
|
30
|
-
timeout: ReturnType<typeof setTimeout>;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* An in-flight `update_subscription` request awaiting its
|
|
34
|
-
* `subscription_ack`. The wire carries no correlation id, so requests are
|
|
35
|
-
* matched to their acknowledgements in first-in, first-out order, the same
|
|
36
|
-
* order the server applies them.
|
|
37
|
-
*/
|
|
38
|
-
export interface PendingSubscription {
|
|
39
|
-
resolve: (value: {
|
|
40
|
-
syncGroups: string[];
|
|
41
|
-
}) => void;
|
|
42
|
-
reject: (err: Error) => void;
|
|
43
|
-
timeout: ReturnType<typeof setTimeout>;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* A parsed inbound wire frame, straight from `JSON.parse`. The data is
|
|
47
|
-
* untrusted: every payload is loosely typed, and each handler narrows it
|
|
48
|
-
* defensively before use.
|
|
49
|
-
*/
|
|
50
|
-
export interface WsInboundFrame {
|
|
51
|
-
type?: string;
|
|
52
|
-
payload?: unknown;
|
|
53
|
-
/** Some delta frames carry their delta fields at the top level rather than under `payload`. */
|
|
54
|
-
actionType?: unknown;
|
|
55
|
-
modelName?: unknown;
|
|
56
|
-
[key: string]: unknown;
|
|
57
|
-
}
|
|
58
|
-
/** Narrow arbitrary wire data to a plain string-keyed record. */
|
|
59
|
-
export declare function isRecord(value: unknown): value is Record<string, unknown>;
|
|
60
|
-
/**
|
|
61
|
-
* A type guard for the parsed result of an inbound message. A frame is any
|
|
62
|
-
* plain object whose `type`, when present, is a string. Validating the
|
|
63
|
-
* payload itself is left to each handler; delta payloads, for example, are
|
|
64
|
-
* checked against the canonical delta schema before they are applied.
|
|
65
|
-
*/
|
|
66
|
-
export declare function isWsInboundFrame(value: unknown): value is WsInboundFrame;
|
|
67
|
-
/**
|
|
68
|
-
* The subset of the sync WebSocket that the frame handlers need. The
|
|
69
|
-
* transport builds a single object exposing these members over its own
|
|
70
|
-
* private state. Handlers read the fields live rather than capturing them,
|
|
71
|
-
* so resetting a field elsewhere — such as clearing pending subscriptions
|
|
72
|
-
* on close — never leaves a handler holding a stale value.
|
|
73
|
-
*/
|
|
74
|
-
export interface WsSession {
|
|
75
|
-
/** EventEmitter surface — handlers emit the typed transport events. */
|
|
76
|
-
emit(event: string, ...args: unknown[]): boolean;
|
|
77
|
-
/** In-flight commit acks keyed by clientTxId. */
|
|
78
|
-
pendingMutations: Map<string, PendingCommit>;
|
|
79
|
-
/** In-flight claim acks keyed by claimId. */
|
|
80
|
-
pendingClaims: Map<string, PendingClaim>;
|
|
81
|
-
/** Removes and returns the oldest in-flight `update_subscription` request. */
|
|
82
|
-
shiftPendingSubscription(): PendingSubscription | undefined;
|
|
83
|
-
/** Connection options subset the handlers write back (acked sync groups). */
|
|
84
|
-
options: {
|
|
85
|
-
syncGroups: string[];
|
|
86
|
-
};
|
|
87
|
-
/** Registered collaboration event keys (colon format). */
|
|
88
|
-
collaborationEventTypes: ReadonlySet<string>;
|
|
89
|
-
/**
|
|
90
|
-
* Processes one inbound delta. The argument is untrusted wire data; the
|
|
91
|
-
* transport validates it against the canonical delta schema and drops
|
|
92
|
-
* anything malformed, so handlers here never cast.
|
|
93
|
-
*/
|
|
94
|
-
handleDelta(delta: unknown): void;
|
|
95
|
-
handleSyncResponse(payload: unknown): void;
|
|
96
|
-
handleBootstrapResponse(payload: unknown): void;
|
|
97
|
-
handlePresenceUpdate(message: {
|
|
98
|
-
payload?: unknown;
|
|
99
|
-
[k: string]: unknown;
|
|
100
|
-
}): void;
|
|
101
|
-
}
|
|
102
|
-
export type WsFrameHandler = (session: WsSession, message: WsInboundFrame) => void;
|
|
103
|
-
/**
|
|
104
|
-
* Maps each frame type to its handler. Every named server frame this
|
|
105
|
-
* package understands is dispatched from this table; anything else falls
|
|
106
|
-
* through to the collaboration-event and unknown-type path in
|
|
107
|
-
* {@link dispatchWsFrame}.
|
|
108
|
-
*/
|
|
109
|
-
export declare const wsFrameHandlers: Record<string, WsFrameHandler>;
|
|
110
|
-
/**
|
|
111
|
-
* Routes one parsed inbound frame to its handler. Keepalive frames are
|
|
112
|
-
* ignored, a missing `type` is treated as a bare delta, and any unknown
|
|
113
|
-
* type falls through to the collaboration-event map, whose wire names use
|
|
114
|
-
* underscores and whose event keys use colons.
|
|
115
|
-
*/
|
|
116
|
-
export declare function dispatchWsFrame(session: WsSession, message: WsInboundFrame): void;
|
|
8
|
+
export { isRecord, readWsInboundFrame, wsFrameHandlers, dispatchWsFrame, type PendingCommit, type PendingClaim, type PendingSubscription, type WsInboundFrame, type WsSession, type WsFrameHandler, } from '../transaction/transport/wsFrameHandlers.js';
|