@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,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The wire contract for the sync protocol: the HTTP envelope shapes and the
|
|
3
|
+
* write-path frames, with no dependency on the client runtime. A server — a
|
|
4
|
+
* route handler, an edge function — can import the envelope producers here
|
|
5
|
+
* without pulling in the full sync client.
|
|
6
|
+
*
|
|
7
|
+
* It has two halves, used across every endpoint:
|
|
8
|
+
* - Error responses — {@link errorEnvelope}, {@link ErrorEnvelope}, and
|
|
9
|
+
* {@link statusForType} turn any thrown value into the uniform
|
|
10
|
+
* `{ type, code, param, message, doc_url, request_id }` body.
|
|
11
|
+
* - List responses — {@link listEnvelope} and {@link ListEnvelope} stamp the
|
|
12
|
+
* uniform `{ object: 'list', data, has_more, next_cursor }` collection.
|
|
13
|
+
*
|
|
14
|
+
* The {@link AbloError} hierarchy, {@link docUrlForCode}, and the wire-parsing
|
|
15
|
+
* helpers are re-exported too, so a single import lets a route throw the right
|
|
16
|
+
* typed error and serialize it back out.
|
|
17
|
+
*/
|
|
18
|
+
export { errorEnvelopeSchema, errorEnvelope, statusForType, INTERNAL_ERROR_PUBLIC_MESSAGE, } from './errorEnvelope.js';
|
|
19
|
+
export type { ErrorEnvelope } from './errorEnvelope.js';
|
|
20
|
+
export { listEnvelopeSchema, listEnvelope } from './listEnvelope.js';
|
|
21
|
+
export type { ListEnvelope } from './listEnvelope.js';
|
|
22
|
+
export { claimEventSchema } from './claimEvent.js';
|
|
23
|
+
export type { ClaimEvent } from './claimEvent.js';
|
|
24
|
+
export { feedEventSchema, logListResponseSchema } from './feedEvent.js';
|
|
25
|
+
export type { FeedEvent, LogListResponse } from './feedEvent.js';
|
|
26
|
+
export { feedCursorSchema, parseFeedCursor, formatFeedCursor, feedCursorAdvanced, FEED_CURSOR_START, FEED_CURSOR_FORMAT, FEED_CURSOR_EXAMPLE, } from './feedCursor.js';
|
|
27
|
+
export type { FeedCursor } from './feedCursor.js';
|
|
28
|
+
export { bootstrapReasonSchema } from './bootstrapReason.js';
|
|
29
|
+
export type { BootstrapReason } from './bootstrapReason.js';
|
|
30
|
+
export { commitOperationSchema, wireCommitOperationSchema, commitPayloadSchema, commitMessageSchema, } from './frames.js';
|
|
31
|
+
export { PROTOCOL_VERSION, MIN_SUPPORTED_PROTOCOL_VERSION, DEFAULT_PROTOCOL_VERSION, SUPPORTED_PROTOCOL_VERSIONS, WS_CLOSE_PROTOCOL_VERSION, PROTOCOL_VERSION_HEADER, protocolVersionProblem, resolveProtocolVersion, } from './protocolVersion.js';
|
|
32
|
+
export type { SupportedProtocolVersion, ProtocolVersionProblem, } from './protocolVersion.js';
|
|
33
|
+
export type { CommitOperation, WireCommitOperation, CommitMessage, MutationResultMessage, } from './frames.js';
|
|
34
|
+
export { COMMIT_CORRELATION_ID_MAX_LENGTH, correlationIdSchema, commitStatusSchema, commitWaitSchema, commitSettlementSchema, commitReceiptSchema, rejectedCommitReceiptSchema, mutationResultPayloadSchema, mutationResultMessageSchema, commitAckSchema, mutationCommitResultSchema, commitOperationControlShape, commitOperationBodySchema, commitRequestSchema, } from './commit.js';
|
|
35
|
+
export type { CommitOperationBody, CommitRequest, CorrelationId, CommitStatus, CommitWait, CommitSettlement, CommitReceiptWire, RejectedCommitReceiptWire, MutationResultPayload, MutationResultMessageWire, CommitAck, MutationCommitResultInput, MutationCommitResult, } from './commit.js';
|
|
36
|
+
export { participantKindSchema, confirmationStateSchema, syncDeltaActionSchema, wireDeltaDataSchema, participantRefSchema, syncDeltaWireCoreSchema, clientSyncDeltaSchema, serverSyncDeltaSchema, deltaSchema, } from './delta.js';
|
|
37
|
+
export type { ParticipantKind, ConfirmationState, SyncDeltaAction, WireDeltaData, ParticipantRef, SyncDeltaWireCore, ClientSyncDelta, ServerSyncDelta, Delta, } from './delta.js';
|
|
38
|
+
export { AbloError, AbloAuthenticationError, AbloPermissionError, AbloValidationError, AbloRateLimitError, AbloIdempotencyError, AbloConnectionError, AbloNotFoundError, AbloServerError, AbloStaleContextError, AbloContentionError, AbloClaimedError, CapabilityError, AbloSessionError, SyncSessionError, docUrlForCode, translateHttpError, errorFromWire, toAbloError, ERROR_CONTRACT_VERSION, errorCodeSpec, } from '../errors.js';
|
|
39
|
+
export type { ErrorCode, WireErrorCode, RequiredCapability } from '../errors.js';
|
|
40
|
+
export { PING_INTERVAL_MS, LEASE_TTL_MS, WS_BEARER_SUBPROTOCOL_PREFIX, WS_SYNC_SUBPROTOCOL, } from './protocol.js';
|
|
41
|
+
export { claimTargetSchema, claimRequestSchema, claimHeartbeatRequestSchema, listQuerySchema, claimListQuerySchema, claimStateSchema, claimAcquiredResponseSchema, claimQueuedResponseSchema, claimAcquireResponseSchema, claimHeartbeatReplySchema, claimHeartbeatBatchReplySchema, claimListResponseSchema, } from './claims.js';
|
|
42
|
+
export type { ClaimTargetBody, ClaimRequest, ClaimHeartbeatRequest, ListQuery, ClaimListQuery, ClaimState, ClaimAcquiredResponse, ClaimQueuedResponse, ClaimAcquireResponse, ClaimHeartbeatReply, ClaimHeartbeatBatchReply, ClaimListResponse, } from './claims.js';
|
|
43
|
+
export { modelReadResponseSchema, modelListResponseSchema, } from './modelResponses.js';
|
|
44
|
+
export type { ModelReadResponse, ModelListResponse } from './modelResponses.js';
|
|
45
|
+
export { projectResponseSchema, projectListResponseSchema, provisionedKeySchema, provisionKeyResponseSchema, conflictAxisWireSchema, schemaModelResponseSchema, schemaReadResponseSchema, logOpSchema, LOG_OP_BY_ACTION, logEventSchema, usageBucketSchema, usageReportResponseSchema, controlKeySchema, controlKeyListResponseSchema, keyMintedResponseSchema, keyRevokedResponseSchema, } from './accountResponses.js';
|
|
46
|
+
export type { ProjectResponse, ProjectListResponse, ProvisionedKey, ProvisionKeyResponse, SchemaModelResponse, SchemaReadResponse, LogOp, LogEvent, UsageBucket, UsageReportResponse, ControlKey, ControlKeyListResponse, KeyMintedResponse, KeyRevokedResponse, } from './accountResponses.js';
|
|
47
|
+
export { WS_INBOUND_FRAMES, wsInboundEnvelopeSchema, isKnownInboundFrame, isSchemaValidatedFrame, } from './inboundFrames.js';
|
|
48
|
+
export type { InboundFrameContract, InboundFrameType, InboundFramePayload, SchemaValidatedFrameType, WsInboundEnvelope, } from './inboundFrames.js';
|
|
49
|
+
export { ephemeralKeyUserSchema, ephemeralKeyRequestSchema, capabilityRequestSchema, } from './auth.js';
|
|
50
|
+
export type { EphemeralKeyUser, EphemeralKeyRequest, CapabilityRequest, } from './auth.js';
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The wire contract for the sync protocol: the HTTP envelope shapes and the
|
|
3
|
+
* write-path frames, with no dependency on the client runtime. A server — a
|
|
4
|
+
* route handler, an edge function — can import the envelope producers here
|
|
5
|
+
* without pulling in the full sync client.
|
|
6
|
+
*
|
|
7
|
+
* It has two halves, used across every endpoint:
|
|
8
|
+
* - Error responses — {@link errorEnvelope}, {@link ErrorEnvelope}, and
|
|
9
|
+
* {@link statusForType} turn any thrown value into the uniform
|
|
10
|
+
* `{ type, code, param, message, doc_url, request_id }` body.
|
|
11
|
+
* - List responses — {@link listEnvelope} and {@link ListEnvelope} stamp the
|
|
12
|
+
* uniform `{ object: 'list', data, has_more, next_cursor }` collection.
|
|
13
|
+
*
|
|
14
|
+
* The {@link AbloError} hierarchy, {@link docUrlForCode}, and the wire-parsing
|
|
15
|
+
* helpers are re-exported too, so a single import lets a route throw the right
|
|
16
|
+
* typed error and serialize it back out.
|
|
17
|
+
*/
|
|
18
|
+
export { errorEnvelopeSchema, errorEnvelope, statusForType, INTERNAL_ERROR_PUBLIC_MESSAGE, } from './errorEnvelope.js';
|
|
19
|
+
export { listEnvelopeSchema, listEnvelope } from './listEnvelope.js';
|
|
20
|
+
// The `GET /v1/logs` feed — the two arms, their envelope, and the cursor that
|
|
21
|
+
// carries a position in each.
|
|
22
|
+
export { claimEventSchema } from './claimEvent.js';
|
|
23
|
+
export { feedEventSchema, logListResponseSchema } from './feedEvent.js';
|
|
24
|
+
export { feedCursorSchema, parseFeedCursor, formatFeedCursor, feedCursorAdvanced, FEED_CURSOR_START, FEED_CURSOR_FORMAT, FEED_CURSOR_EXAMPLE, } from './feedCursor.js';
|
|
25
|
+
export { bootstrapReasonSchema } from './bootstrapReason.js';
|
|
26
|
+
// The write-path frame contract: the message shapes shared by the client and
|
|
27
|
+
// the server. The runtime Zod validators sit beside the interfaces and are
|
|
28
|
+
// pinned to them, and they gate every operation and payload on both commit
|
|
29
|
+
// transports.
|
|
30
|
+
export { commitOperationSchema, wireCommitOperationSchema, commitPayloadSchema, commitMessageSchema, } from './frames.js';
|
|
31
|
+
// Protocol versioning: the single integer the client and server compare to
|
|
32
|
+
// confirm they can speak to each other, plus the WebSocket close code used to
|
|
33
|
+
// reject a mismatch. See protocolVersion.ts for the changelog and deploy rules.
|
|
34
|
+
export { PROTOCOL_VERSION, MIN_SUPPORTED_PROTOCOL_VERSION, DEFAULT_PROTOCOL_VERSION, SUPPORTED_PROTOCOL_VERSIONS, WS_CLOSE_PROTOCOL_VERSION, PROTOCOL_VERSION_HEADER, protocolVersionProblem, resolveProtocolVersion, } from './protocolVersion.js';
|
|
35
|
+
// Commit settlement backbone. The transport receipt, server execution cache,
|
|
36
|
+
// and normalized client acknowledgement are different envelopes composed from
|
|
37
|
+
// this one discriminated settlement vocabulary.
|
|
38
|
+
export { COMMIT_CORRELATION_ID_MAX_LENGTH, correlationIdSchema, commitStatusSchema, commitWaitSchema, commitSettlementSchema, commitReceiptSchema, rejectedCommitReceiptSchema, mutationResultPayloadSchema, mutationResultMessageSchema, commitAckSchema, mutationCommitResultSchema,
|
|
39
|
+
// The request side of the same boundary — one definition, which the published
|
|
40
|
+
// OpenAPI reference derives from rather than describing separately.
|
|
41
|
+
commitOperationControlShape, commitOperationBodySchema, commitRequestSchema, } from './commit.js';
|
|
42
|
+
// The read-path delta contract: the shape the server broadcasts to clients as the
|
|
43
|
+
// payload of a `delta` or `sync_response` frame, together with the shared
|
|
44
|
+
// participant vocabulary it carries. Both ends derive their delta type from these
|
|
45
|
+
// schemas, so the client and server cannot drift apart.
|
|
46
|
+
export { participantKindSchema, confirmationStateSchema, syncDeltaActionSchema, wireDeltaDataSchema, participantRefSchema, syncDeltaWireCoreSchema, clientSyncDeltaSchema, serverSyncDeltaSchema, deltaSchema, } from './delta.js';
|
|
47
|
+
// The error surface a wire consumer needs to throw, classify, and serialize.
|
|
48
|
+
export { AbloError, AbloAuthenticationError, AbloPermissionError, AbloValidationError, AbloRateLimitError, AbloIdempotencyError, AbloConnectionError, AbloNotFoundError, AbloServerError, AbloStaleContextError, AbloContentionError, AbloClaimedError, CapabilityError, AbloSessionError, SyncSessionError, docUrlForCode, translateHttpError, errorFromWire, toAbloError, ERROR_CONTRACT_VERSION,
|
|
49
|
+
// The table mapping each error code to its HTTP status and retryable flag —
|
|
50
|
+
// plain data a server can use to resolve a code's canonical status the same
|
|
51
|
+
// way the client's error serializer does.
|
|
52
|
+
errorCodeSpec, } from '../errors.js';
|
|
53
|
+
// Protocol timing constants — the 30-second ping cadence and the lease window
|
|
54
|
+
// derived from it, shared by the client heartbeat and the server keepalive,
|
|
55
|
+
// claim leasing, and presence expiry (see protocol.ts) — plus the WebSocket
|
|
56
|
+
// subprotocols used during the authenticated handshake.
|
|
57
|
+
export { PING_INTERVAL_MS, LEASE_TTL_MS, WS_BEARER_SUBPROTOCOL_PREFIX, WS_SYNC_SUBPROTOCOL, } from './protocol.js';
|
|
58
|
+
// The claim routes' half of the boundary — requests and responses both, beside
|
|
59
|
+
// the commit body for the same reason: the server answers in these shapes, the
|
|
60
|
+
// client reads them back through the same schemas, and the OpenAPI reference
|
|
61
|
+
// derives from them rather than describing them from memory.
|
|
62
|
+
export { claimTargetSchema, claimRequestSchema, claimHeartbeatRequestSchema, listQuerySchema, claimListQuerySchema, claimStateSchema, claimAcquiredResponseSchema, claimQueuedResponseSchema, claimAcquireResponseSchema, claimHeartbeatReplySchema, claimHeartbeatBatchReplySchema, claimListResponseSchema, } from './claims.js';
|
|
63
|
+
// The model read routes' responses — the envelope around a row, which is
|
|
64
|
+
// protocol, around `data`, which is the caller's schema.
|
|
65
|
+
export { modelReadResponseSchema, modelListResponseSchema, } from './modelResponses.js';
|
|
66
|
+
// The account routes' responses — projects, the deployed schema, the commit
|
|
67
|
+
// log, usage. What the server, the CLI, and the MCP server agree on.
|
|
68
|
+
export { projectResponseSchema, projectListResponseSchema, provisionedKeySchema, provisionKeyResponseSchema, conflictAxisWireSchema, schemaModelResponseSchema, schemaReadResponseSchema, logOpSchema, LOG_OP_BY_ACTION, logEventSchema, usageBucketSchema, usageReportResponseSchema, controlKeySchema, controlKeyListResponseSchema, keyMintedResponseSchema, keyRevokedResponseSchema, } from './accountResponses.js';
|
|
69
|
+
// The inbound socket surface: every frame the server can send, and how each
|
|
70
|
+
// one's payload is validated.
|
|
71
|
+
export { WS_INBOUND_FRAMES, wsInboundEnvelopeSchema, isKnownInboundFrame, isSchemaValidatedFrame, } from './inboundFrames.js';
|
|
72
|
+
// Credential minting — the first call any caller makes, so the contract cannot
|
|
73
|
+
// omit it. Response side lives in `auth/schemas.ts`.
|
|
74
|
+
export { ephemeralKeyUserSchema, ephemeralKeyRequestSchema, capabilityRequestSchema, } from './auth.js';
|
|
@@ -8,20 +8,19 @@
|
|
|
8
8
|
* produces it, so every list across the API reads from one definition. The
|
|
9
9
|
* generic type parameter carries the row type of `data`.
|
|
10
10
|
*/
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
11
|
+
import { z } from 'zod';
|
|
12
|
+
/**
|
|
13
|
+
* Builds the authoritative list-envelope schema for a row schema. Keeping the
|
|
14
|
+
* item validator generic lets every endpoint share the same envelope contract
|
|
15
|
+
* without weakening `data` to `unknown[]`.
|
|
16
|
+
*/
|
|
17
|
+
export declare function listEnvelopeSchema<T>(itemSchema: z.ZodType<T>): z.ZodObject<{
|
|
18
|
+
object: z.ZodLiteral<"list">;
|
|
19
|
+
data: z.ZodReadonly<z.ZodArray<z.ZodType<T, unknown, z.core.$ZodTypeInternals<T, unknown>>>>;
|
|
20
|
+
has_more: z.ZodBoolean;
|
|
21
|
+
next_cursor: z.ZodNullable<z.ZodString>;
|
|
22
|
+
}, z.core.$strip>;
|
|
23
|
+
export type ListEnvelope<T> = Readonly<z.infer<ReturnType<typeof listEnvelopeSchema<T>>>>;
|
|
25
24
|
/**
|
|
26
25
|
* Wraps an already-fetched page of rows in the uniform {@link ListEnvelope}.
|
|
27
26
|
*
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The envelope every endpoint that returns a collection wraps its results in.
|
|
3
|
+
* Because the shape is always the same — `{ object: 'list', data, has_more,
|
|
4
|
+
* next_cursor }` — a consumer can detect and paginate any list the same way,
|
|
5
|
+
* instead of learning a different payload key for each endpoint.
|
|
6
|
+
*
|
|
7
|
+
* The list endpoints emit this shape and the {@link listEnvelope} helper
|
|
8
|
+
* produces it, so every list across the API reads from one definition. The
|
|
9
|
+
* generic type parameter carries the row type of `data`.
|
|
10
|
+
*/
|
|
11
|
+
import { z } from 'zod';
|
|
12
|
+
/**
|
|
13
|
+
* Builds the authoritative list-envelope schema for a row schema. Keeping the
|
|
14
|
+
* item validator generic lets every endpoint share the same envelope contract
|
|
15
|
+
* without weakening `data` to `unknown[]`.
|
|
16
|
+
*/
|
|
17
|
+
export function listEnvelopeSchema(itemSchema) {
|
|
18
|
+
return z.object({
|
|
19
|
+
object: z.literal('list'),
|
|
20
|
+
data: z.array(itemSchema).readonly(),
|
|
21
|
+
has_more: z.boolean(),
|
|
22
|
+
next_cursor: z.string().nullable(),
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Wraps an already-fetched page of rows in the uniform {@link ListEnvelope}.
|
|
27
|
+
*
|
|
28
|
+
* Pagination stays the caller's job — fetch one more row than the limit to
|
|
29
|
+
* decide `hasMore`, and derive the cursor from the last row's sort key. This
|
|
30
|
+
* helper only applies the envelope so no endpoint has to build the shape by
|
|
31
|
+
* hand. The defaults describe a small, unpaginated collection
|
|
32
|
+
* (`has_more: false`, `next_cursor: null`); a paginated endpoint passes both
|
|
33
|
+
* explicitly.
|
|
34
|
+
*/
|
|
35
|
+
export function listEnvelope(data, opts = {}) {
|
|
36
|
+
return {
|
|
37
|
+
object: 'list',
|
|
38
|
+
data,
|
|
39
|
+
has_more: opts.hasMore ?? false,
|
|
40
|
+
next_cursor: opts.nextCursor ?? null,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the model read routes answer with — `GET /v1/models/{model}/{id}` and
|
|
3
|
+
* `GET /v1/models/{model}`.
|
|
4
|
+
*
|
|
5
|
+
* `data` is `unknown` here on purpose. The transport that reads these responses
|
|
6
|
+
* is schema-agnostic: it moves rows for whatever schema the caller declared, so
|
|
7
|
+
* it validates the envelope around a row and leaves the row itself to the typed
|
|
8
|
+
* surface above it. Everything outside `data` — the watermark, the claims, the
|
|
9
|
+
* pagination — is protocol, and protocol is validated here.
|
|
10
|
+
*/
|
|
11
|
+
import { z } from 'zod';
|
|
12
|
+
/**
|
|
13
|
+
* `GET /v1/models/{model}/{id}`.
|
|
14
|
+
*
|
|
15
|
+
* `stamp` is the row's watermark: the log position the read reflects. A write
|
|
16
|
+
* that guards on this premise (`readAt`) is rejected if the row moved on in
|
|
17
|
+
* between, which is what makes a read→decide→write sequence safe without a
|
|
18
|
+
* lock. A missing row answers 404, so `data` is always present here.
|
|
19
|
+
*/
|
|
20
|
+
export declare const modelReadResponseSchema: z.ZodObject<{
|
|
21
|
+
object: z.ZodLiteral<"model">;
|
|
22
|
+
model: z.ZodString;
|
|
23
|
+
id: z.ZodString;
|
|
24
|
+
data: z.ZodUnknown;
|
|
25
|
+
stamp: z.ZodNumber;
|
|
26
|
+
claims: z.ZodReadonly<z.ZodArray<z.ZodReadonly<z.ZodObject<{
|
|
27
|
+
id: z.ZodString;
|
|
28
|
+
actor: z.ZodString;
|
|
29
|
+
participantKind: z.ZodPreprocess<z.ZodEnum<{
|
|
30
|
+
user: "user";
|
|
31
|
+
agent: "agent";
|
|
32
|
+
system: "system";
|
|
33
|
+
}>>;
|
|
34
|
+
onBehalfOfId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
35
|
+
onBehalfOfKind: z.ZodOptional<z.ZodNullable<z.ZodPreprocess<z.ZodEnum<{
|
|
36
|
+
user: "user";
|
|
37
|
+
agent: "agent";
|
|
38
|
+
system: "system";
|
|
39
|
+
}>>>>;
|
|
40
|
+
capabilityId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
41
|
+
description: z.ZodOptional<z.ZodString>;
|
|
42
|
+
status: z.ZodOptional<z.ZodEnum<{
|
|
43
|
+
active: "active";
|
|
44
|
+
queued: "queued";
|
|
45
|
+
}>>;
|
|
46
|
+
position: z.ZodOptional<z.ZodNumber>;
|
|
47
|
+
expiresAt: z.ZodNumber;
|
|
48
|
+
fenceToken: z.ZodOptional<z.ZodNumber>;
|
|
49
|
+
target: z.ZodReadonly<z.ZodObject<{
|
|
50
|
+
model: z.ZodString;
|
|
51
|
+
id: z.ZodString;
|
|
52
|
+
path: z.ZodOptional<z.ZodString>;
|
|
53
|
+
range: z.ZodOptional<z.ZodObject<{
|
|
54
|
+
startLine: z.ZodNumber;
|
|
55
|
+
endLine: z.ZodNumber;
|
|
56
|
+
startColumn: z.ZodOptional<z.ZodNumber>;
|
|
57
|
+
endColumn: z.ZodOptional<z.ZodNumber>;
|
|
58
|
+
}, z.core.$strip>>;
|
|
59
|
+
field: z.ZodOptional<z.ZodString>;
|
|
60
|
+
fields: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
|
|
61
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
62
|
+
}, z.core.$strip>>;
|
|
63
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
64
|
+
field: z.ZodOptional<z.ZodString>;
|
|
65
|
+
}, z.core.$strip>>>>;
|
|
66
|
+
}, z.core.$strip>;
|
|
67
|
+
export type ModelReadResponse = z.infer<typeof modelReadResponseSchema>;
|
|
68
|
+
/**
|
|
69
|
+
* `GET /v1/models/{model}` — the list envelope, with the two fields the model
|
|
70
|
+
* routes add to it: the model's name and the org-wide watermark the page was
|
|
71
|
+
* read at.
|
|
72
|
+
*
|
|
73
|
+
* The envelope is derived, not restated. A schema-agnostic row is `z.unknown()`,
|
|
74
|
+
* which the generic helper accepts like any other item schema, so there is no
|
|
75
|
+
* layer at which the shared fields have to be spelled a second time.
|
|
76
|
+
*/
|
|
77
|
+
export declare const modelListResponseSchema: z.ZodObject<{
|
|
78
|
+
object: z.ZodLiteral<"list">;
|
|
79
|
+
data: z.ZodReadonly<z.ZodArray<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>>;
|
|
80
|
+
has_more: z.ZodBoolean;
|
|
81
|
+
next_cursor: z.ZodNullable<z.ZodString>;
|
|
82
|
+
model: z.ZodString;
|
|
83
|
+
stamp: z.ZodNumber;
|
|
84
|
+
}, z.core.$strip>;
|
|
85
|
+
export type ModelListResponse = z.infer<typeof modelListResponseSchema>;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the model read routes answer with — `GET /v1/models/{model}/{id}` and
|
|
3
|
+
* `GET /v1/models/{model}`.
|
|
4
|
+
*
|
|
5
|
+
* `data` is `unknown` here on purpose. The transport that reads these responses
|
|
6
|
+
* is schema-agnostic: it moves rows for whatever schema the caller declared, so
|
|
7
|
+
* it validates the envelope around a row and leaves the row itself to the typed
|
|
8
|
+
* surface above it. Everything outside `data` — the watermark, the claims, the
|
|
9
|
+
* pagination — is protocol, and protocol is validated here.
|
|
10
|
+
*/
|
|
11
|
+
import { z } from 'zod';
|
|
12
|
+
import { modelClaimSchema } from '../coordination/schema.js';
|
|
13
|
+
import { listEnvelopeSchema } from './listEnvelope.js';
|
|
14
|
+
/**
|
|
15
|
+
* `GET /v1/models/{model}/{id}`.
|
|
16
|
+
*
|
|
17
|
+
* `stamp` is the row's watermark: the log position the read reflects. A write
|
|
18
|
+
* that guards on this premise (`readAt`) is rejected if the row moved on in
|
|
19
|
+
* between, which is what makes a read→decide→write sequence safe without a
|
|
20
|
+
* lock. A missing row answers 404, so `data` is always present here.
|
|
21
|
+
*/
|
|
22
|
+
export const modelReadResponseSchema = z.object({
|
|
23
|
+
object: z.literal('model'),
|
|
24
|
+
model: z.string(),
|
|
25
|
+
id: z.string(),
|
|
26
|
+
data: z.unknown(),
|
|
27
|
+
stamp: z.number(),
|
|
28
|
+
/** Who holds this row right now — empty when no claim store is configured. */
|
|
29
|
+
claims: z.array(modelClaimSchema).readonly(),
|
|
30
|
+
});
|
|
31
|
+
/**
|
|
32
|
+
* `GET /v1/models/{model}` — the list envelope, with the two fields the model
|
|
33
|
+
* routes add to it: the model's name and the org-wide watermark the page was
|
|
34
|
+
* read at.
|
|
35
|
+
*
|
|
36
|
+
* The envelope is derived, not restated. A schema-agnostic row is `z.unknown()`,
|
|
37
|
+
* which the generic helper accepts like any other item schema, so there is no
|
|
38
|
+
* layer at which the shared fields have to be spelled a second time.
|
|
39
|
+
*/
|
|
40
|
+
export const modelListResponseSchema = listEnvelopeSchema(z.unknown()).extend({
|
|
41
|
+
model: z.string(),
|
|
42
|
+
stamp: z.number(),
|
|
43
|
+
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* MutationQueue manages the lifecycle of local writes on their way to the
|
|
3
3
|
* server: it applies each change optimistically, batches the writes made in one
|
|
4
4
|
* event-loop tick into a single commit, retries transient failures, and rolls
|
|
5
5
|
* back on permanent rejection.
|
|
@@ -12,18 +12,18 @@
|
|
|
12
12
|
* - A dependency-injected executor, so several queues can coexist.
|
|
13
13
|
*/
|
|
14
14
|
import { EventEmitter } from 'events';
|
|
15
|
-
import type { Database } from '
|
|
16
|
-
import { Model } from '
|
|
17
|
-
import {
|
|
18
|
-
import type { WriteOptions } from '
|
|
19
|
-
import type { StaleNotification, ReadDependency, TrackDependency } from '
|
|
20
|
-
import { type MutationInput, type
|
|
21
|
-
import { type DurableCommitEnvelope, type DurableCommitOperation, type CommitOutboxScope } from '
|
|
15
|
+
import type { Database } from '../../Database.js';
|
|
16
|
+
import { Model } from '../../Model.js';
|
|
17
|
+
import { LogPosition } from '../../transaction/logPosition.js';
|
|
18
|
+
import type { WriteOptions } from '../../interfaces/index.js';
|
|
19
|
+
import type { OnStaleMode, StaleNotification, ReadDependency, TrackDependency } from '../../transaction/coordination/schema.js';
|
|
20
|
+
import { type MutationInput, type QueuedMutation, type UserContext } from './commitPayload.js';
|
|
21
|
+
import { type DurableCommitEnvelope, type DurableCommitOperation, type CommitOutboxScope } from '../../transaction/transactions/settlement/commitEnvelope.js';
|
|
22
22
|
import type { DurableWriteStore } from './durableWriteStore.js';
|
|
23
|
-
export type {
|
|
23
|
+
export type { QueuedMutation, UserContext } from './commitPayload.js';
|
|
24
24
|
/**
|
|
25
25
|
* A pre-built, multi-operation commit submitted through
|
|
26
|
-
* `ablo.commits.create()`. Unlike the per-model {@link
|
|
26
|
+
* `ablo.commits.create()`. Unlike the per-model {@link QueuedMutation} (see
|
|
27
27
|
* `./commitPayload.js`), the caller supplies the operations and the whole
|
|
28
28
|
* envelope commits atomically: the queue does not coalesce it, reorder its
|
|
29
29
|
* operations for foreign keys, or apply it optimistically. It runs through the
|
|
@@ -40,16 +40,22 @@ interface CommitTransaction {
|
|
|
40
40
|
input?: Record<string, unknown>;
|
|
41
41
|
transactionId?: string;
|
|
42
42
|
readAt?: number | null;
|
|
43
|
-
onStale?:
|
|
43
|
+
onStale?: OnStaleMode | null;
|
|
44
44
|
}[];
|
|
45
|
-
|
|
46
|
-
/** Read dependencies for the whole batch, forwarded to the executor so the server can detect stale-context writes. */
|
|
45
|
+
/** The premise for the whole batch, forwarded to the executor so the server can detect stale-context writes. */
|
|
47
46
|
reads?: ReadDependency[] | null;
|
|
48
|
-
/** Durable
|
|
47
|
+
/** Durable premises (`track`) to register for the batch's participant, forwarded to the executor. */
|
|
49
48
|
track?: TrackDependency[] | null;
|
|
50
49
|
status: 'pending' | 'executing' | 'awaiting_delta' | 'completed' | 'failed';
|
|
51
50
|
createdAt: number;
|
|
52
51
|
attempts: number;
|
|
52
|
+
/**
|
|
53
|
+
* Transient failures that were NOT the transport being down. Waiting out a
|
|
54
|
+
* dropped connection is unbounded on purpose — that is what lets a commit
|
|
55
|
+
* survive a reconnect — so connection errors are deliberately not counted
|
|
56
|
+
* here, and only a server that keeps rejecting can exhaust the lane.
|
|
57
|
+
*/
|
|
58
|
+
transientAttempts?: number;
|
|
53
59
|
lastSyncId?: number;
|
|
54
60
|
/** Opaque customer-side batch ledger key returned by a queued receipt. */
|
|
55
61
|
correlationId?: string;
|
|
@@ -65,9 +71,9 @@ interface ConflictResolution {
|
|
|
65
71
|
strategy: 'last-write-wins' | 'merge' | 'reject' | 'custom';
|
|
66
72
|
resolver?: (local: MutationInput | undefined, remote: MutationInput) => MutationInput;
|
|
67
73
|
}
|
|
68
|
-
interface
|
|
69
|
-
/** Shared client position (see
|
|
70
|
-
position?:
|
|
74
|
+
interface MutationQueueConfig {
|
|
75
|
+
/** Shared client position (see logPosition.ts). One per client. */
|
|
76
|
+
position?: LogPosition;
|
|
71
77
|
maxBatchSize: number;
|
|
72
78
|
batchDelay: number;
|
|
73
79
|
maxRetries: number;
|
|
@@ -99,8 +105,20 @@ interface TransactionQueueConfig {
|
|
|
99
105
|
* forever if the connection died while a commit was in flight.
|
|
100
106
|
*/
|
|
101
107
|
commitOfflineGraceMs: number;
|
|
108
|
+
/**
|
|
109
|
+
* How long, in milliseconds, to wait for the transport to acknowledge a
|
|
110
|
+
* dispatched commit before treating the silence as a retryable no-receipt
|
|
111
|
+
* failure. A transport that never answers — a half-open socket, a dropped
|
|
112
|
+
* response frame — would otherwise hold the commit in flight forever, and
|
|
113
|
+
* with it the client's staged-batch lock: every later write in the session
|
|
114
|
+
* queues silently behind the unanswered one. The envelope's idempotency key
|
|
115
|
+
* is stable across retries, so a commit the server DID apply before the
|
|
116
|
+
* timeout is deduplicated on the retry rather than double-applied.
|
|
117
|
+
* Defaults to 30 seconds. Set `0` to disable the bound.
|
|
118
|
+
*/
|
|
119
|
+
commitDispatchTimeoutMs: number;
|
|
102
120
|
}
|
|
103
|
-
export declare class
|
|
121
|
+
export declare class MutationQueue extends EventEmitter {
|
|
104
122
|
private static readonly DURABLE_REPLAY_WINDOW_MS;
|
|
105
123
|
private store;
|
|
106
124
|
private lastPermanentErrorSig?;
|
|
@@ -177,9 +195,9 @@ export declare class TransactionQueue extends EventEmitter {
|
|
|
177
195
|
* shared: the client injects one, and a standalone queue creates its own. The
|
|
178
196
|
* queue advances the `acked` cursor as commit responses arrive, the store
|
|
179
197
|
* advances `applied` and `persisted`, and snapshots and claims read
|
|
180
|
-
* `readFloor`. See `../
|
|
198
|
+
* `readFloor`. See `../logPosition.js` for the full contract.
|
|
181
199
|
*/
|
|
182
|
-
readonly position:
|
|
200
|
+
readonly position: LogPosition;
|
|
183
201
|
/** Applied-cursor alias, kept so the many internal read sites stay legible. */
|
|
184
202
|
private get lastSeenSyncId();
|
|
185
203
|
private noteAck;
|
|
@@ -213,6 +231,18 @@ export declare class TransactionQueue extends EventEmitter {
|
|
|
213
231
|
private persistDurableCommitAcceptance;
|
|
214
232
|
/** Parse an untrusted/custom executor receipt without making ambiguity fatal. */
|
|
215
233
|
private parseMutationCommitResult;
|
|
234
|
+
/**
|
|
235
|
+
* Dispatch a sealed envelope to the transport, bounded by
|
|
236
|
+
* `commitDispatchTimeoutMs`. Every executor call site routes through here:
|
|
237
|
+
* a transport that never answers must become a retryable no-receipt failure
|
|
238
|
+
* (the same class as a malformed receipt) instead of an eternally in-flight
|
|
239
|
+
* commit, because an unanswered commit holds the staged-batch lock and
|
|
240
|
+
* silently stalls every later write in the session. The abandoned commit's
|
|
241
|
+
* eventual result, if it ever arrives, is discarded; the retry re-sends the
|
|
242
|
+
* identical idempotency key, so the server deduplicates an already-applied
|
|
243
|
+
* write.
|
|
244
|
+
*/
|
|
245
|
+
private dispatchCommitBounded;
|
|
216
246
|
private clearReplicationLagState;
|
|
217
247
|
/**
|
|
218
248
|
* Bounds the public `wait: 'confirmed'` promise without changing the
|
|
@@ -237,11 +267,11 @@ export declare class TransactionQueue extends EventEmitter {
|
|
|
237
267
|
* Resolvers for per-transaction `confirmation` promises. Populated in
|
|
238
268
|
* `attachConfirmation` at staging time, consumed by the constructor-time
|
|
239
269
|
* listeners on `transaction:completed` / `transaction:failed`. Kept off
|
|
240
|
-
* the
|
|
270
|
+
* the QueuedMutation row so the store's iteration order stays plain-data
|
|
241
271
|
* and serialization-friendly.
|
|
242
272
|
*/
|
|
243
273
|
private confirmationResolvers;
|
|
244
|
-
constructor(config?: Partial<
|
|
274
|
+
constructor(config?: Partial<MutationQueueConfig>);
|
|
245
275
|
/**
|
|
246
276
|
* Returns the in-flight confirmation promise for a given model and id. When
|
|
247
277
|
* several transactions match, it returns the most recent one's promise; when
|
|
@@ -252,7 +282,7 @@ export declare class TransactionQueue extends EventEmitter {
|
|
|
252
282
|
* be rolled back — `pending`, `executing`, and `awaiting_delta` — and ignores
|
|
253
283
|
* `completed` (already settled) and `failed`/`rolled_back` (already
|
|
254
284
|
* rejected). This complements the `confirmation` promise carried on a known
|
|
255
|
-
* {@link
|
|
285
|
+
* {@link QueuedMutation}: use this method at call sites that hold a model
|
|
256
286
|
* returned by `ablo.<model>.create()` but never see the underlying
|
|
257
287
|
* transaction.
|
|
258
288
|
*/
|
|
@@ -297,7 +327,7 @@ export declare class TransactionQueue extends EventEmitter {
|
|
|
297
327
|
* through this instance's connection even when several client instances exist
|
|
298
328
|
* in the same process.
|
|
299
329
|
*/
|
|
300
|
-
setMutationExecutor(executor: import('
|
|
330
|
+
setMutationExecutor(executor: import('../../interfaces/index.js').MutationExecutor): void;
|
|
301
331
|
/**
|
|
302
332
|
* Stages a transaction for commit. Transactions staged within the same
|
|
303
333
|
* event-loop tick are committed together.
|
|
@@ -321,24 +351,24 @@ export declare class TransactionQueue extends EventEmitter {
|
|
|
321
351
|
flushOfflineQueue(): Promise<void>;
|
|
322
352
|
/**
|
|
323
353
|
* Records a create and applies it optimistically, then stages it for the next
|
|
324
|
-
* batched commit. Returns the {@link
|
|
354
|
+
* batched commit. Returns the {@link QueuedMutation}, whose `confirmation`
|
|
325
355
|
* promise settles once the server confirms the write.
|
|
326
356
|
*/
|
|
327
|
-
create(model: Model, context: UserContext, writeOptions?: WriteOptions, sourceMutationId?: string): Promise<
|
|
357
|
+
create(model: Model, context: UserContext, writeOptions?: WriteOptions, sourceMutationId?: string): Promise<QueuedMutation>;
|
|
328
358
|
/**
|
|
329
359
|
* Records an update and applies it optimistically, then stages it for the next
|
|
330
360
|
* batched commit. Rapid updates to the same entity coalesce into a single wire
|
|
331
361
|
* operation.
|
|
332
362
|
* @param precomputedChanges - Optional pre-captured changes, used instead of re-reading them from the model.
|
|
333
363
|
*/
|
|
334
|
-
update(model: Model, context: UserContext, precomputedChanges?: Record<string, unknown>, writeOptions?: WriteOptions, sourceMutationId?: string): Promise<
|
|
364
|
+
update(model: Model, context: UserContext, precomputedChanges?: Record<string, unknown>, writeOptions?: WriteOptions, sourceMutationId?: string): Promise<QueuedMutation>;
|
|
335
365
|
/**
|
|
336
366
|
* Records a delete and applies it optimistically. If the row's own create has
|
|
337
367
|
* not yet been sent, both are cancelled locally rather than sending a create
|
|
338
368
|
* followed by a delete; if the create is already in flight, the delete waits
|
|
339
369
|
* until it settles so the server never sees a delete before the create.
|
|
340
370
|
*/
|
|
341
|
-
delete(model: Model, context: UserContext, writeOptions?: WriteOptions, sourceMutationId?: string): Promise<
|
|
371
|
+
delete(model: Model, context: UserContext, writeOptions?: WriteOptions, sourceMutationId?: string): Promise<QueuedMutation>;
|
|
342
372
|
/**
|
|
343
373
|
* Uploads a single attachment, delegating to the mutation executor.
|
|
344
374
|
*/
|
|
@@ -362,12 +392,12 @@ export declare class TransactionQueue extends EventEmitter {
|
|
|
362
392
|
* Records an archive and applies it optimistically, then stages it for the
|
|
363
393
|
* next batched commit.
|
|
364
394
|
*/
|
|
365
|
-
archive(model: Model, context: UserContext, writeOptions?: WriteOptions, sourceMutationId?: string): Promise<
|
|
395
|
+
archive(model: Model, context: UserContext, writeOptions?: WriteOptions, sourceMutationId?: string): Promise<QueuedMutation>;
|
|
366
396
|
/**
|
|
367
397
|
* Records an unarchive and applies it optimistically, then stages it for the
|
|
368
398
|
* next batched commit.
|
|
369
399
|
*/
|
|
370
|
-
unarchive(model: Model, context: UserContext): Promise<
|
|
400
|
+
unarchive(model: Model, context: UserContext): Promise<QueuedMutation>;
|
|
371
401
|
/**
|
|
372
402
|
* Places a transaction on the execution queue, coalescing it into an existing
|
|
373
403
|
* same-entity update where possible so redundant writes collapse.
|
|
@@ -410,7 +440,6 @@ export declare class TransactionQueue extends EventEmitter {
|
|
|
410
440
|
* `mutation_log` still prevents a second logical write.
|
|
411
441
|
*/
|
|
412
442
|
enqueueCommit(clientTxId: string, operations: CommitTransaction['operations'], options?: {
|
|
413
|
-
causedByTaskId?: string | null;
|
|
414
443
|
reads?: ReadDependency[] | null;
|
|
415
444
|
track?: TrackDependency[] | null;
|
|
416
445
|
}): Promise<void>;
|
|
@@ -464,7 +493,7 @@ export declare class TransactionQueue extends EventEmitter {
|
|
|
464
493
|
* last-write-wins rolls the local change back, merge and reject re-enqueue it,
|
|
465
494
|
* and custom applies the caller's resolver.
|
|
466
495
|
*/
|
|
467
|
-
handleConflict(transaction:
|
|
496
|
+
handleConflict(transaction: QueuedMutation, serverData: MutationInput): Promise<void>;
|
|
468
497
|
/**
|
|
469
498
|
* Optimistic updates. The apply and rollback rules live in `./optimisticApply.js`;
|
|
470
499
|
* these methods bind them to the queue's own tracking map and event emitter.
|
|
@@ -497,14 +526,14 @@ export declare class TransactionQueue extends EventEmitter {
|
|
|
497
526
|
* optionally limited to one operation type, rolling back their optimistic
|
|
498
527
|
* state. Returns the cancelled transactions.
|
|
499
528
|
*/
|
|
500
|
-
cancelTransactionsForModel(modelId: string, transactionType?: string):
|
|
529
|
+
cancelTransactionsForModel(modelId: string, transactionType?: string): QueuedMutation[];
|
|
501
530
|
/**
|
|
502
531
|
* Cancels pending transactions for child rows that reference a deleted parent,
|
|
503
532
|
* used to cascade a parent deletion. The caller supplies the foreign-key
|
|
504
533
|
* relationship; this method performs the cancellation.
|
|
505
534
|
*
|
|
506
|
-
* @param childModelName - The child model type (for example '
|
|
507
|
-
* @param foreignKey - The foreign-key property name (for example '
|
|
535
|
+
* @param childModelName - The child model type (for example 'Block').
|
|
536
|
+
* @param foreignKey - The foreign-key property name (for example 'sectionId').
|
|
508
537
|
* @param parentId - The deleted parent's id.
|
|
509
538
|
* @returns The number of transactions cancelled.
|
|
510
539
|
*/
|
|
@@ -530,8 +559,8 @@ export declare class TransactionQueue extends EventEmitter {
|
|
|
530
559
|
totalTransactions: number;
|
|
531
560
|
batchIndex: number;
|
|
532
561
|
config: {
|
|
533
|
-
/** Shared client position (see
|
|
534
|
-
position?:
|
|
562
|
+
/** Shared client position (see logPosition.ts). One per client. */
|
|
563
|
+
position?: LogPosition;
|
|
535
564
|
maxBatchSize: number;
|
|
536
565
|
batchDelay: number;
|
|
537
566
|
maxRetries: number;
|
|
@@ -563,6 +592,18 @@ export declare class TransactionQueue extends EventEmitter {
|
|
|
563
592
|
* forever if the connection died while a commit was in flight.
|
|
564
593
|
*/
|
|
565
594
|
commitOfflineGraceMs: number;
|
|
595
|
+
/**
|
|
596
|
+
* How long, in milliseconds, to wait for the transport to acknowledge a
|
|
597
|
+
* dispatched commit before treating the silence as a retryable no-receipt
|
|
598
|
+
* failure. A transport that never answers — a half-open socket, a dropped
|
|
599
|
+
* response frame — would otherwise hold the commit in flight forever, and
|
|
600
|
+
* with it the client's staged-batch lock: every later write in the session
|
|
601
|
+
* queues silently behind the unanswered one. The envelope's idempotency key
|
|
602
|
+
* is stable across retries, so a commit the server DID apply before the
|
|
603
|
+
* timeout is deduplicated on the retry rather than double-applied.
|
|
604
|
+
* Defaults to 30 seconds. Set `0` to disable the bound.
|
|
605
|
+
*/
|
|
606
|
+
commitDispatchTimeoutMs: number;
|
|
566
607
|
};
|
|
567
608
|
};
|
|
568
609
|
/**
|
|
@@ -595,7 +636,7 @@ export declare class TransactionQueue extends EventEmitter {
|
|
|
595
636
|
}[];
|
|
596
637
|
};
|
|
597
638
|
/** Merges the given options into the queue's configuration. */
|
|
598
|
-
setConfig(config: Partial<
|
|
639
|
+
setConfig(config: Partial<MutationQueueConfig>): void;
|
|
599
640
|
/**
|
|
600
641
|
* Re-emits an incoming sync delta on the `sync:delta` event for the store to
|
|
601
642
|
* apply. Because rows use stable ids, no id reconciliation is needed here.
|