@abloatai/ablo 0.34.1 → 0.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +2 -1
- package/CHANGELOG.md +758 -5
- package/README.md +56 -502
- package/bin/ablo.cjs +39 -0
- package/dist/BaseSyncedStore.d.ts +176 -48
- package/dist/BaseSyncedStore.js +346 -214
- package/dist/Database.d.ts +17 -44
- package/dist/Database.js +96 -79
- package/dist/InstanceCache.d.ts +31 -6
- package/dist/InstanceCache.js +65 -30
- package/dist/LazyReferenceCollection.d.ts +3 -3
- package/dist/LazyReferenceCollection.js +4 -4
- package/dist/Model.d.ts +23 -13
- package/dist/Model.js +27 -17
- package/dist/ModelRegistry.d.ts +8 -4
- package/dist/ModelRegistry.js +20 -18
- package/dist/NetworkMonitor.d.ts +3 -1
- package/dist/NetworkMonitor.js +7 -5
- package/dist/{SyncEngineContext.d.ts → RuntimeContext.d.ts} +20 -13
- package/dist/{SyncEngineContext.js → RuntimeContext.js} +11 -12
- package/dist/SyncClient.d.ts +47 -47
- package/dist/SyncClient.js +215 -156
- package/dist/ai-sdk/coordinatedTool.d.ts +2 -2
- package/dist/ai-sdk/coordinatedTool.js +1 -1
- package/dist/ai-sdk/coordinationContext.d.ts +2 -2
- package/dist/ai-sdk/coordinationContext.js +1 -1
- package/dist/ai-sdk/wrap.d.ts +3 -3
- package/dist/ai-sdk/wrap.js +2 -2
- package/dist/auth/index.d.ts +1 -156
- package/dist/auth/index.js +8 -301
- package/dist/client/Ablo.d.ts +42 -287
- package/dist/client/Ablo.js +129 -963
- package/dist/client/abloClient.d.ts +309 -0
- package/dist/client/abloClient.js +13 -0
- package/dist/client/clientPrelude.d.ts +52 -0
- package/dist/client/clientPrelude.js +60 -0
- package/dist/client/consoleLogger.d.ts +2 -2
- package/dist/client/coreClient.d.ts +60 -0
- package/dist/client/coreClient.js +118 -0
- package/dist/client/createInternalComponents.d.ts +8 -4
- package/dist/client/createInternalComponents.js +17 -10
- package/dist/client/createModelProxy.d.ts +98 -373
- package/dist/client/createModelProxy.js +233 -139
- package/dist/client/humans.d.ts +69 -0
- package/dist/client/humans.js +78 -0
- package/dist/client/modelRegistration.d.ts +1 -1
- package/dist/client/modelRegistration.js +9 -9
- package/dist/client/options.d.ts +73 -17
- package/dist/client/reactiveEngine.d.ts +53 -0
- package/dist/client/reactiveEngine.js +688 -0
- package/dist/client/resourceTypes.d.ts +9 -250
- package/dist/client/resourceTypes.js +8 -5
- package/dist/client/schemaConfig.d.ts +4 -4
- package/dist/client/schemaConfig.js +6 -2
- package/dist/client/storeCluster.d.ts +47 -0
- package/dist/client/storeCluster.js +118 -0
- package/dist/client/storeLifecycle.d.ts +61 -0
- package/dist/client/storeLifecycle.js +231 -0
- package/dist/client/validateAbloOptions.d.ts +3 -2
- package/dist/client/validateAbloOptions.js +1 -1
- package/dist/client/wsMutationExecutor.d.ts +3 -3
- package/dist/client/wsMutationExecutor.js +3 -3
- package/dist/context.d.ts +22 -9
- package/dist/context.js +33 -9
- package/dist/coordination/ClaimLog.d.ts +26 -0
- package/dist/coordination/ClaimLog.js +32 -0
- package/dist/coordination/index.d.ts +1 -15
- package/dist/coordination/index.js +8 -31
- package/dist/core/index.d.ts +3 -3
- package/dist/core/index.js +2 -2
- package/dist/docs/catalog.d.ts +72 -0
- package/dist/docs/catalog.js +230 -0
- package/dist/docs/index.d.ts +10 -0
- package/dist/docs/index.js +10 -0
- package/dist/environment.d.ts +1 -40
- package/dist/environment.js +8 -37
- package/dist/index.d.ts +44 -36
- package/dist/index.js +30 -22
- package/dist/interfaces/index.d.ts +44 -134
- package/dist/keys/index.d.ts +1 -77
- package/dist/keys/index.js +8 -190
- package/dist/mutators/{RecordingTransaction.d.ts → RecordingMutation.d.ts} +4 -4
- package/dist/mutators/{RecordingTransaction.js → RecordingMutation.js} +2 -2
- package/dist/mutators/Transaction.d.ts +1 -1
- package/dist/mutators/Transaction.js +1 -1
- package/dist/mutators/UndoManager.d.ts +6 -6
- package/dist/mutators/UndoManager.js +5 -5
- package/dist/mutators/defineMutators.d.ts +3 -3
- package/dist/mutators/defineMutators.js +1 -1
- package/dist/mutators/inverseOp.js +2 -2
- package/dist/mutators/mutateActions.d.ts +3 -3
- package/dist/mutators/mutateActions.js +1 -1
- package/dist/mutators/readerActions.d.ts +1 -1
- package/dist/mutators/undoApply.d.ts +1 -1
- package/dist/mutators/undoApply.js +1 -1
- package/dist/policy/index.d.ts +2 -2
- package/dist/policy/index.js +1 -1
- package/dist/query/client.d.ts +5 -2
- package/dist/query/client.js +10 -9
- package/dist/query/types.d.ts +6 -41
- package/dist/query/types.js +2 -2
- package/dist/react/AbloProvider.d.ts +18 -8
- package/dist/react/AbloProvider.js +10 -9
- package/dist/react/context.d.ts +3 -3
- package/dist/react/context.js +1 -1
- package/dist/react/createAbloReact.d.ts +56 -0
- package/dist/react/createAbloReact.js +51 -0
- package/dist/react/index.d.ts +6 -5
- package/dist/react/index.js +6 -3
- package/dist/react/internalContext.d.ts +1 -1
- package/dist/react/useAblo.d.ts +12 -5
- package/dist/react/useAblo.js +26 -8
- package/dist/react/useCurrentUserId.js +1 -1
- package/dist/react/useErrorListener.js +1 -1
- package/dist/react/useMutationFailureListener.d.ts +2 -2
- package/dist/react/useMutationFailureListener.js +1 -1
- package/dist/react/useMutators.d.ts +3 -3
- package/dist/react/useMutators.js +3 -3
- package/dist/react/useUndoScope.d.ts +5 -5
- package/dist/react/useUndoScope.js +1 -1
- package/dist/schema/coordination.d.ts +69 -10
- package/dist/schema/coordination.js +90 -9
- package/dist/schema/ddl.js +2 -2
- package/dist/schema/diff.d.ts +1 -1
- package/dist/schema/generate.js +1 -1
- package/dist/schema/index.d.ts +11 -10
- package/dist/schema/index.js +22 -18
- package/dist/schema/queries.d.ts +27 -27
- package/dist/schema/queries.js +23 -23
- package/dist/schema/select.d.ts +3 -3
- package/dist/schema/select.js +6 -3
- package/dist/schema/serialize.d.ts +15 -6
- package/dist/schema/serialize.js +20 -3
- package/dist/schema/sugar.d.ts +6 -7
- package/dist/schema/sugar.js +9 -12
- package/dist/schema/syncDeltaRow.d.ts +4 -152
- package/dist/schema/syncDeltaRow.js +4 -105
- package/dist/server/adapter.d.ts +18 -1
- package/dist/server/commit.d.ts +10 -16
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/readConfig.d.ts +1 -1
- package/dist/source/adapter.d.ts +7 -5
- package/dist/source/adapter.js +7 -5
- package/dist/source/adapters/drizzle.d.ts +1 -1
- package/dist/source/adapters/drizzle.js +2 -2
- package/dist/source/adapters/kysely.d.ts +1 -1
- package/dist/source/adapters/kysely.js +1 -1
- package/dist/source/adapters/kyselyMutationCore.d.ts +1 -1
- package/dist/source/adapters/kyselyMutationCore.js +2 -2
- package/dist/source/adapters/memory.js +1 -1
- package/dist/source/adapters/prisma.d.ts +8 -3
- package/dist/source/adapters/prisma.js +1 -1
- package/dist/source/connector.js +1 -1
- package/dist/source/connectorProtocol.d.ts +2 -8
- package/dist/source/connectorProtocol.js +3 -2
- package/dist/source/contract.d.ts +29 -17
- package/dist/source/contract.js +27 -22
- package/dist/source/factory.d.ts +1 -1
- package/dist/source/idempotency.js +2 -2
- package/dist/source/index.d.ts +1 -0
- package/dist/source/index.js +3 -0
- package/dist/source/next.d.ts +1 -1
- package/dist/source/signing.d.ts +9 -2
- package/dist/source/signing.js +4 -1
- package/dist/source/types.d.ts +6 -4
- package/dist/source/types.js +1 -1
- package/dist/{core/storeContract.d.ts → storeContract.d.ts} +6 -6
- package/dist/{core → stores}/DatabaseManager.d.ts +3 -1
- package/dist/{core → stores}/DatabaseManager.js +14 -13
- package/dist/stores/ObjectStore.d.ts +1 -1
- package/dist/{core → stores}/StoreManager.d.ts +9 -26
- package/dist/{core → stores}/StoreManager.js +29 -77
- package/dist/stores/SyncActionStore.d.ts +4 -2
- package/dist/stores/SyncActionStore.js +11 -17
- package/dist/stores/syncAction.d.ts +26 -0
- package/dist/stores/syncAction.js +16 -0
- package/dist/surface.d.ts +3 -3
- package/dist/surface.js +6 -4
- package/dist/sync/BootstrapFetcher.d.ts +127 -6
- package/dist/sync/BootstrapFetcher.js +511 -83
- package/dist/sync/ConnectionManager.d.ts +6 -198
- package/dist/sync/ConnectionManager.js +6 -677
- package/dist/sync/OnDemandLoader.d.ts +5 -2
- package/dist/sync/OnDemandLoader.js +61 -21
- package/dist/sync/SubscriptionManager.d.ts +13 -2
- package/dist/sync/SubscriptionManager.js +23 -5
- package/dist/sync/SyncWebSocket.d.ts +27 -510
- package/dist/sync/SyncWebSocket.js +76 -954
- package/dist/sync/awaitClaimGrant.d.ts +4 -44
- package/dist/sync/awaitClaimGrant.js +4 -109
- package/dist/sync/bootstrapApply.d.ts +3 -0
- package/dist/sync/bootstrapApply.js +2 -2
- package/dist/sync/commitFrames.d.ts +6 -40
- package/dist/sync/commitFrames.js +6 -97
- package/dist/sync/contextPorts.d.ts +18 -0
- package/dist/sync/contextPorts.js +31 -0
- package/dist/sync/createClaimStream.d.ts +5 -49
- package/dist/sync/createClaimStream.js +5 -469
- package/dist/sync/createPresenceStream.d.ts +26 -4
- package/dist/sync/createPresenceStream.js +28 -20
- package/dist/sync/createSnapshot.d.ts +2 -2
- package/dist/sync/createSnapshot.js +1 -1
- package/dist/sync/credentialLifecycle.d.ts +5 -173
- package/dist/sync/credentialLifecycle.js +5 -320
- package/dist/sync/deltaPipeline.d.ts +13 -12
- package/dist/sync/deltaPipeline.js +21 -4
- package/dist/sync/groupChange.d.ts +3 -0
- package/dist/sync/groupChange.js +16 -14
- package/dist/sync/participants.d.ts +24 -6
- package/dist/sync/participants.js +32 -23
- package/dist/sync/schemaDrift.d.ts +55 -0
- package/dist/sync/schemaDrift.js +53 -0
- package/dist/sync/schemas.d.ts +23 -33
- package/dist/sync/schemas.js +29 -20
- package/dist/sync/syncPlan.d.ts +3 -3
- package/dist/sync/wsFrameHandlers.d.ts +6 -114
- package/dist/sync/wsFrameHandlers.js +6 -392
- package/dist/syncLog/contract.d.ts +20 -0
- package/dist/syncLog/contract.js +19 -0
- package/dist/syncLog/index.d.ts +1 -0
- package/dist/syncLog/index.js +1 -0
- package/dist/transaction/ablo.d.ts +88 -0
- package/dist/transaction/ablo.js +33 -0
- package/dist/{client/auth.d.ts → transaction/auth/apiKey.d.ts} +43 -8
- package/dist/{client/auth.js → transaction/auth/apiKey.js} +19 -0
- package/dist/transaction/auth/bootstrapScope.d.ts +15 -0
- package/dist/transaction/auth/bootstrapScope.js +1 -0
- package/dist/transaction/auth/capability.d.ts +212 -0
- package/dist/transaction/auth/capability.js +224 -0
- package/dist/{auth → transaction/auth}/credentialSource.d.ts +8 -1
- package/dist/{client → transaction/auth}/identity.d.ts +8 -7
- package/dist/{client → transaction/auth}/identity.js +1 -1
- package/dist/transaction/auth/index.d.ts +162 -0
- package/dist/transaction/auth/index.js +304 -0
- package/dist/{auth → transaction/auth}/schemas.d.ts +1 -1
- package/dist/{auth → transaction/auth}/schemas.js +13 -13
- package/dist/{client → transaction/auth}/sessionMint.d.ts +8 -8
- package/dist/{client → transaction/auth}/sessionMint.js +4 -7
- package/dist/transaction/coordination/awaitClaimGrant.d.ts +56 -0
- package/dist/transaction/coordination/awaitClaimGrant.js +124 -0
- package/dist/{client → transaction/coordination}/claimHeartbeatLoop.d.ts +34 -0
- package/dist/{client → transaction/coordination}/claimHeartbeatLoop.js +20 -0
- package/dist/transaction/coordination/claimMeta.d.ts +49 -0
- package/dist/transaction/coordination/claimMeta.js +52 -0
- package/dist/transaction/coordination/createClaimStream.d.ts +64 -0
- package/dist/transaction/coordination/createClaimStream.js +475 -0
- package/dist/transaction/coordination/events.d.ts +74 -0
- package/dist/transaction/coordination/events.js +7 -0
- package/dist/transaction/coordination/index.d.ts +19 -0
- package/dist/transaction/coordination/index.js +45 -0
- package/dist/transaction/coordination/locator.d.ts +104 -0
- package/dist/transaction/coordination/locator.js +102 -0
- package/dist/transaction/coordination/schema.d.ts +1536 -0
- package/dist/transaction/coordination/schema.js +1177 -0
- package/dist/transaction/coordination/targetConflict.d.ts +2 -0
- package/dist/transaction/coordination/targetConflict.js +107 -0
- package/dist/{coordination → transaction/coordination}/trace.d.ts +7 -18
- package/dist/{coordination → transaction/coordination}/trace.js +18 -25
- package/dist/transaction/durableWrites.d.ts +62 -0
- package/dist/{client → transaction}/durableWrites.js +28 -3
- package/dist/transaction/environment.d.ts +105 -0
- package/dist/transaction/environment.js +108 -0
- package/dist/{errorCodes.d.ts → transaction/errorCodes.d.ts} +12 -12
- package/dist/{errorCodes.js → transaction/errorCodes.js} +45 -18
- package/dist/{errors.d.ts → transaction/errors.d.ts} +37 -13
- package/dist/{errors.js → transaction/errors.js} +85 -16
- package/dist/transaction/footprint.d.ts +111 -0
- package/dist/transaction/footprint.js +0 -0
- package/dist/transaction/index.d.ts +20 -0
- package/dist/transaction/index.js +20 -0
- package/dist/transaction/keys/index.d.ts +87 -0
- package/dist/transaction/keys/index.js +207 -0
- package/dist/transaction/log/syncDeltaRow.d.ts +158 -0
- package/dist/transaction/log/syncDeltaRow.js +95 -0
- package/dist/{sync/syncPosition.d.ts → transaction/logPosition.d.ts} +22 -8
- package/dist/{sync/syncPosition.js → transaction/logPosition.js} +15 -6
- package/dist/transaction/logger.d.ts +16 -0
- package/dist/transaction/logger.js +7 -0
- package/dist/transaction/observability.d.ts +53 -0
- package/dist/transaction/observability.js +19 -0
- package/dist/transaction/plugin.d.ts +285 -0
- package/dist/transaction/plugin.js +106 -0
- package/dist/{policy → transaction/policy}/types.d.ts +3 -3
- package/dist/{policy → transaction/policy}/types.js +2 -0
- package/dist/transaction/resources/httpResources.d.ts +321 -0
- package/dist/transaction/resources/httpResources.js +7 -0
- package/dist/transaction/resources/modelOperations.d.ts +427 -0
- package/dist/transaction/resources/modelOperations.js +12 -0
- package/dist/transaction/resources/mutationOptions.d.ts +66 -0
- package/dist/transaction/resources/mutationOptions.js +9 -0
- package/dist/transaction/resources/where.d.ts +101 -0
- package/dist/transaction/resources/where.js +115 -0
- package/dist/{client → transaction/resources}/writeOptionsSchema.d.ts +2 -6
- package/dist/{client → transaction/resources}/writeOptionsSchema.js +9 -5
- package/dist/{schema → transaction/schema}/field.d.ts +17 -23
- package/dist/{schema → transaction/schema}/field.js +5 -5
- package/dist/transaction/schema/fieldRef.d.ts +38 -0
- package/dist/transaction/schema/fieldRef.js +11 -0
- package/dist/transaction/schema/loadStrategy.d.ts +45 -0
- package/dist/transaction/schema/loadStrategy.js +46 -0
- package/dist/{schema → transaction/schema}/model.d.ts +50 -35
- package/dist/{schema → transaction/schema}/model.js +30 -20
- package/dist/transaction/schema/openapi.d.ts +58 -0
- package/dist/transaction/schema/openapi.js +501 -0
- package/dist/{schema → transaction/schema}/relation.d.ts +21 -16
- package/dist/{schema → transaction/schema}/relation.js +7 -7
- package/dist/{schema → transaction/schema}/residency.d.ts +0 -9
- package/dist/{schema → transaction/schema}/residency.js +0 -5
- package/dist/{schema → transaction/schema}/roles.d.ts +5 -5
- package/dist/{schema → transaction/schema}/roles.js +5 -5
- package/dist/{schema → transaction/schema}/schema.d.ts +39 -10
- package/dist/{schema → transaction/schema}/schema.js +24 -3
- package/dist/{schema → transaction/schema}/tenancy.d.ts +1 -1
- package/dist/{schema → transaction/schema}/tenancy.js +7 -4
- package/dist/transaction/transactionLayer.d.ts +82 -0
- package/dist/transaction/transactionLayer.js +24 -0
- package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.d.ts +5 -6
- package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.js +9 -13
- package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.d.ts +9 -2
- package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.js +5 -9
- package/dist/{transactions/durableWriteStore.d.ts → transaction/transactions/settlement/pendingWrite.d.ts} +11 -37
- package/dist/transaction/transactions/settlement/pendingWrite.js +20 -0
- package/dist/transaction/transport/commitFrames.d.ts +90 -0
- package/dist/transaction/transport/commitFrames.js +134 -0
- package/dist/transaction/transport/connectionManager.d.ts +215 -0
- package/dist/transaction/transport/connectionManager.js +673 -0
- package/dist/transaction/transport/credentialLifecycle.d.ts +177 -0
- package/dist/transaction/transport/credentialLifecycle.js +324 -0
- package/dist/{sync → transaction/transport}/heartbeat.d.ts +3 -1
- package/dist/{sync → transaction/transport}/heartbeat.js +6 -4
- package/dist/transaction/transport/httpClient.d.ts +131 -0
- package/dist/{client → transaction/transport}/httpClient.js +6 -5
- package/dist/transaction/transport/httpOptions.d.ts +33 -0
- package/dist/transaction/transport/httpOptions.js +12 -0
- package/dist/{client → transaction/transport}/httpTransport.js +295 -97
- package/dist/{sync/NetworkProbe.d.ts → transaction/transport/networkProbe.d.ts} +7 -4
- package/dist/{sync/NetworkProbe.js → transaction/transport/networkProbe.js} +14 -13
- package/dist/transaction/transport/wsFrameHandlers.d.ts +128 -0
- package/dist/transaction/transport/wsFrameHandlers.js +429 -0
- package/dist/transaction/transport/wsTransport.d.ts +574 -0
- package/dist/transaction/transport/wsTransport.js +1023 -0
- package/dist/transaction/types/assertExact.d.ts +17 -0
- package/dist/transaction/types/assertExact.js +1 -0
- package/dist/{types → transaction/types}/global.d.ts +17 -2
- package/dist/{types → transaction/types}/global.js +2 -1
- package/dist/{types → transaction/types}/index.d.ts +14 -46
- package/dist/{types → transaction/types}/index.js +7 -16
- package/dist/{types → transaction/types}/streams.d.ts +73 -45
- package/dist/transaction/utils/duration.d.ts +50 -0
- package/dist/{utils → transaction/utils}/duration.js +32 -0
- package/dist/{utils → transaction/utils}/json.d.ts +18 -0
- package/dist/transaction/utils/json.js +276 -0
- package/dist/transaction/wire/accountResponses.d.ts +420 -0
- package/dist/transaction/wire/accountResponses.js +290 -0
- package/dist/transaction/wire/auth.d.ts +56 -0
- package/dist/transaction/wire/auth.js +63 -0
- package/dist/transaction/wire/claimEvent.d.ts +76 -0
- package/dist/transaction/wire/claimEvent.js +73 -0
- package/dist/transaction/wire/claims.d.ts +530 -0
- package/dist/transaction/wire/claims.js +327 -0
- package/dist/{wire → transaction/wire}/commit.d.ts +125 -193
- package/dist/{wire → transaction/wire}/commit.js +68 -47
- package/dist/{wire → transaction/wire}/delta.d.ts +66 -17
- package/dist/{wire → transaction/wire}/delta.js +37 -13
- package/dist/transaction/wire/errorEnvelope.d.ts +72 -0
- package/dist/{wire → transaction/wire}/errorEnvelope.js +36 -5
- package/dist/transaction/wire/feedCursor.d.ts +60 -0
- package/dist/transaction/wire/feedCursor.js +82 -0
- package/dist/transaction/wire/feedEvent.d.ts +204 -0
- package/dist/transaction/wire/feedEvent.js +65 -0
- package/dist/transaction/wire/frames.d.ts +194 -0
- package/dist/transaction/wire/frames.js +50 -0
- package/dist/transaction/wire/inboundFrames.d.ts +562 -0
- package/dist/transaction/wire/inboundFrames.js +116 -0
- package/dist/transaction/wire/index.d.ts +54 -0
- package/dist/transaction/wire/index.js +83 -0
- package/dist/{wire → transaction/wire}/listEnvelope.d.ts +13 -14
- package/dist/transaction/wire/listEnvelope.js +42 -0
- package/dist/transaction/wire/modelMutations.d.ts +31 -0
- package/dist/transaction/wire/modelMutations.js +52 -0
- package/dist/transaction/wire/modelResponses.d.ts +85 -0
- package/dist/transaction/wire/modelResponses.js +43 -0
- package/dist/transaction/wire/modelShape.d.ts +78 -0
- package/dist/transaction/wire/modelShape.js +74 -0
- package/dist/transactions/{TransactionQueue.d.ts → mutations/MutationQueue.d.ts} +85 -38
- package/dist/transactions/{TransactionQueue.js → mutations/MutationQueue.js} +141 -80
- package/dist/transactions/{TransactionStore.d.ts → mutations/MutationStore.d.ts} +8 -8
- package/dist/transactions/{TransactionStore.js → mutations/MutationStore.js} +2 -2
- package/dist/transactions/{coalesceRules.d.ts → mutations/coalesceRules.d.ts} +10 -10
- package/dist/transactions/{coalesceRules.js → mutations/coalesceRules.js} +1 -1
- package/dist/transactions/mutations/commitLatency.d.ts +52 -0
- package/dist/transactions/mutations/commitLatency.js +130 -0
- package/dist/transactions/{commitOutboxStore.d.ts → mutations/commitOutboxStore.d.ts} +1 -5
- package/dist/transactions/{commitOutboxStore.js → mutations/commitOutboxStore.js} +1 -1
- package/dist/transactions/{commitPayload.d.ts → mutations/commitPayload.d.ts} +18 -16
- package/dist/transactions/{commitPayload.js → mutations/commitPayload.js} +15 -15
- package/dist/transactions/{deltaConfirmation.d.ts → mutations/deltaConfirmation.d.ts} +15 -11
- package/dist/transactions/{deltaConfirmation.js → mutations/deltaConfirmation.js} +14 -12
- package/dist/transactions/mutations/durableWriteStore.d.ts +14 -0
- package/dist/transactions/mutations/durableWriteStore.js +12 -0
- package/dist/transactions/{optimisticApply.d.ts → mutations/optimisticApply.d.ts} +7 -7
- package/dist/transactions/{replayValidation.d.ts → mutations/replayValidation.d.ts} +4 -3
- package/dist/transactions/{replayValidation.js → mutations/replayValidation.js} +7 -5
- package/dist/utils/mobxSetup.d.ts +1 -1
- package/dist/utils/mobxSetup.js +5 -2
- package/dist/{core → views}/QueryView.d.ts +2 -2
- package/dist/{core → views}/QueryView.js +2 -2
- package/dist/{core → views}/ViewRegistry.d.ts +1 -1
- package/dist/{core/queryUtils.d.ts → views/incrementalView.d.ts} +6 -6
- package/dist/{core/queryUtils.js → views/incrementalView.js} +6 -6
- package/dist/webhooks/events.d.ts +2 -2
- package/dist/wire/index.d.ts +1 -34
- package/dist/wire/index.js +8 -49
- package/docs/agent-messaging.md +3 -3
- package/docs/agents.md +20 -13
- package/docs/api-keys.md +14 -10
- package/docs/api.md +27 -61
- package/docs/audit.md +6 -3
- package/docs/cli.md +41 -13
- package/docs/client-behavior.md +11 -9
- package/docs/concurrency-convention.md +49 -57
- package/docs/coordination.md +283 -121
- package/docs/data-sources.md +7 -5
- package/docs/debugging.md +39 -15
- package/docs/deployment.md +267 -0
- package/docs/examples/agent-human.md +49 -42
- package/docs/examples/ai-sdk-tool.md +69 -44
- package/docs/examples/existing-python-backend.md +8 -6
- package/docs/examples/nextjs.md +129 -47
- package/docs/examples/scoped-agent.md +46 -45
- package/docs/examples/server-agent.md +46 -26
- package/docs/groups.md +87 -30
- package/docs/guarantees.md +41 -12
- package/docs/how-it-works.md +38 -12
- package/docs/idempotency.md +126 -0
- package/docs/identity.md +77 -74
- package/docs/index.md +172 -86
- package/docs/integration-guide.md +31 -19
- package/docs/mcp.md +46 -21
- package/docs/migration.md +95 -18
- package/docs/operating-on-your-database.md +3 -1
- package/docs/projects.md +3 -1
- package/docs/quickstart.md +22 -5
- package/docs/react.md +31 -18
- package/docs/schema-contract.md +5 -3
- package/docs/session-settings.md +108 -0
- package/docs/sessions.md +4 -2
- package/docs/webhooks.md +12 -10
- package/llms.txt +48 -18
- package/package.json +21 -26
- package/dist/agent/Agent.d.ts +0 -366
- package/dist/agent/Agent.js +0 -514
- package/dist/agent/index.d.ts +0 -115
- package/dist/agent/index.js +0 -128
- package/dist/agent/session.d.ts +0 -93
- package/dist/agent/session.js +0 -149
- package/dist/agent/types.d.ts +0 -68
- package/dist/agent/types.js +0 -9
- package/dist/cli.cjs +0 -286329
- package/dist/client/durableWrites.d.ts +0 -21
- package/dist/client/httpClient.d.ts +0 -80
- package/dist/coordination/schema.d.ts +0 -722
- package/dist/coordination/schema.js +0 -578
- package/dist/schema/openapi.d.ts +0 -29
- package/dist/schema/openapi.js +0 -124
- package/dist/testing/fixtures/bootstrap.d.ts +0 -49
- package/dist/testing/fixtures/bootstrap.js +0 -59
- package/dist/testing/fixtures/deltas.d.ts +0 -83
- package/dist/testing/fixtures/deltas.js +0 -136
- package/dist/testing/fixtures/models.d.ts +0 -83
- package/dist/testing/fixtures/models.js +0 -272
- package/dist/testing/helpers/reactWrapper.d.ts +0 -69
- package/dist/testing/helpers/reactWrapper.js +0 -67
- package/dist/testing/helpers/syncEngineHarness.d.ts +0 -54
- package/dist/testing/helpers/syncEngineHarness.js +0 -73
- package/dist/testing/helpers/wait.d.ts +0 -30
- package/dist/testing/helpers/wait.js +0 -49
- package/dist/testing/index.d.ts +0 -23
- package/dist/testing/index.js +0 -33
- package/dist/testing/mocks/FakeDatabase.d.ts +0 -18
- package/dist/testing/mocks/FakeDatabase.js +0 -10
- package/dist/testing/mocks/MockMutationExecutor.d.ts +0 -87
- package/dist/testing/mocks/MockMutationExecutor.js +0 -192
- package/dist/testing/mocks/MockNetworkMonitor.d.ts +0 -20
- package/dist/testing/mocks/MockNetworkMonitor.js +0 -46
- package/dist/testing/mocks/MockSyncContext.d.ts +0 -51
- package/dist/testing/mocks/MockSyncContext.js +0 -71
- package/dist/testing/mocks/MockSyncStore.d.ts +0 -88
- package/dist/testing/mocks/MockSyncStore.js +0 -171
- package/dist/testing/mocks/MockWebSocket.d.ts +0 -71
- package/dist/testing/mocks/MockWebSocket.js +0 -118
- package/dist/transactions/durableWriteStore.js +0 -30
- package/dist/utils/duration.d.ts +0 -25
- package/dist/utils/json.js +0 -88
- package/dist/wire/errorEnvelope.d.ts +0 -55
- package/dist/wire/frames.d.ts +0 -197
- package/dist/wire/frames.js +0 -49
- package/dist/wire/listEnvelope.js +0 -18
- package/docs/interaction-model.md +0 -97
- /package/dist/{core → query}/QueryProcessor.d.ts +0 -0
- /package/dist/{core → query}/QueryProcessor.js +0 -0
- /package/dist/{core/storeContract.js → storeContract.js} +0 -0
- /package/dist/{core → stores}/openIDBWithTimeout.d.ts +0 -0
- /package/dist/{core → stores}/openIDBWithTimeout.js +0 -0
- /package/dist/{client → transaction/auth}/credentialEndpoint.d.ts +0 -0
- /package/dist/{client → transaction/auth}/credentialEndpoint.js +0 -0
- /package/dist/{auth → transaction/auth}/credentialPolicy.d.ts +0 -0
- /package/dist/{auth → transaction/auth}/credentialPolicy.js +0 -0
- /package/dist/{auth → transaction/auth}/credentialSource.js +0 -0
- /package/dist/{client → transaction/auth}/hostedEndpoints.d.ts +0 -0
- /package/dist/{client → transaction/auth}/hostedEndpoints.js +0 -0
- /package/dist/{client → transaction}/persistence.d.ts +0 -0
- /package/dist/{client → transaction}/persistence.js +0 -0
- /package/dist/{client → transaction/resources}/functionalUpdate.d.ts +0 -0
- /package/dist/{client → transaction/resources}/functionalUpdate.js +0 -0
- /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.d.ts +0 -0
- /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.js +0 -0
- /package/dist/{client → transaction/transport}/httpTransport.d.ts +0 -0
- /package/dist/{types → transaction/types}/modelData.d.ts +0 -0
- /package/dist/{types → transaction/types}/modelData.js +0 -0
- /package/dist/{types → transaction/types}/participant.d.ts +0 -0
- /package/dist/{types → transaction/types}/participant.js +0 -0
- /package/dist/{types → transaction/types}/streams.js +0 -0
- /package/dist/{utils → transaction/utils}/asyncIterator.d.ts +0 -0
- /package/dist/{utils → transaction/utils}/asyncIterator.js +0 -0
- /package/dist/{wire → transaction/wire}/bootstrapReason.d.ts +0 -0
- /package/dist/{wire → transaction/wire}/bootstrapReason.js +0 -0
- /package/dist/{wire → transaction/wire}/protocol.d.ts +0 -0
- /package/dist/{wire → transaction/wire}/protocol.js +0 -0
- /package/dist/{wire → transaction/wire}/protocolVersion.d.ts +0 -0
- /package/dist/{wire → transaction/wire}/protocolVersion.js +0 -0
- /package/dist/transactions/{UnconfirmedWrites.d.ts → mutations/UnconfirmedWrites.d.ts} +0 -0
- /package/dist/transactions/{UnconfirmedWrites.js → mutations/UnconfirmedWrites.js} +0 -0
- /package/dist/transactions/{optimisticApply.js → mutations/optimisticApply.js} +0 -0
- /package/dist/{core → views}/ViewRegistry.js +0 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether two claims on the same entity collide — the single most consequential
|
|
3
|
+
* predicate in the claim protocol, and the one rule that decides whether a
|
|
4
|
+
* second writer is granted a lease or made to wait.
|
|
5
|
+
*
|
|
6
|
+
* It lived in two files for as long as there were two claim authorities: the
|
|
7
|
+
* Redis lease store, which is authoritative wherever Redis is wired, and the
|
|
8
|
+
* in-process presence store, which answers when it is not. Both spelled the
|
|
9
|
+
* rule out in full, byte for byte, so a change to the granularity semantics had
|
|
10
|
+
* two places to land and no way to notice when it landed in one. It is one
|
|
11
|
+
* definition here, and both authorities import it.
|
|
12
|
+
*
|
|
13
|
+
* It lives in the settlement core rather than the server because it is the rule
|
|
14
|
+
* itself, not a deployment of it: a claim authority running against a
|
|
15
|
+
* developer's own database has to answer this question exactly the same way,
|
|
16
|
+
* and a client that wants to predict a refusal before paying for the round trip
|
|
17
|
+
* reads the same predicate. Nothing about it needs a socket, a store, or a
|
|
18
|
+
* screen.
|
|
19
|
+
*
|
|
20
|
+
* Entity identity is NOT part of this comparison. Callers reach this predicate
|
|
21
|
+
* having already narrowed to a single `(organization, environment, entityType,
|
|
22
|
+
* entityId)` bucket — the lease store through its key, the presence store
|
|
23
|
+
* through its per-entity scan — so what remains to decide is only whether the
|
|
24
|
+
* two sub-targets within that entity overlap.
|
|
25
|
+
*
|
|
26
|
+
* **The bias is deliberate: when in doubt, conflict.** A false conflict costs a
|
|
27
|
+
* writer a wait. A missed conflict hands two writers the same target and loses
|
|
28
|
+
* one of their updates with no error anywhere, which is the failure this
|
|
29
|
+
* predicate exists to prevent.
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* The named parts a claim covers, as one set.
|
|
33
|
+
*
|
|
34
|
+
* `field` and `fields` are the same idea at two cardinalities, so the rule
|
|
35
|
+
* reads both through here and never has to ask which one a caller used. Names
|
|
36
|
+
* are lowercased for the same reason the single-field comparison always
|
|
37
|
+
* lowercased them.
|
|
38
|
+
*/
|
|
39
|
+
function fieldSet(target) {
|
|
40
|
+
const named = [
|
|
41
|
+
...(target?.field !== undefined ? [target.field] : []),
|
|
42
|
+
...(target?.fields ?? []),
|
|
43
|
+
];
|
|
44
|
+
// A path names a part too: `/content/3` addresses a position inside the
|
|
45
|
+
// `content` field, so a claim on it covers that field and nothing else.
|
|
46
|
+
//
|
|
47
|
+
// Deriving it here is what stops a path from reading as EVERY field. A
|
|
48
|
+
// target that named no field left this set empty, and an empty set means
|
|
49
|
+
// "all of them" — so a claim on one paragraph blocked a write to `status`
|
|
50
|
+
// on the same row. It also makes the exclusion honest in the other
|
|
51
|
+
// direction: a write of the whole `content` field does conflict with a
|
|
52
|
+
// claim on part of it, because nothing can write only that part.
|
|
53
|
+
//
|
|
54
|
+
// Only when no field was named outright — an explicit `field`/`fields`
|
|
55
|
+
// beside a path is the caller being specific, and is not second-guessed.
|
|
56
|
+
// A bare `range` derives nothing: it names a span without saying of what,
|
|
57
|
+
// so it stays the conservative whole-row answer.
|
|
58
|
+
const rootOfPath = named.length === 0 && target?.path !== undefined
|
|
59
|
+
? target.path.split('/').filter(Boolean)[0]
|
|
60
|
+
: undefined;
|
|
61
|
+
const names = rootOfPath !== undefined ? [...named, rootOfPath] : named;
|
|
62
|
+
return new Set(names.map((n) => n.toLowerCase()));
|
|
63
|
+
}
|
|
64
|
+
/** Whether a claim narrows below the whole entity at all. */
|
|
65
|
+
function hasSubtarget(target) {
|
|
66
|
+
return Boolean(target?.path ||
|
|
67
|
+
target?.field ||
|
|
68
|
+
(target?.fields && target.fields.length > 0) ||
|
|
69
|
+
target?.range);
|
|
70
|
+
}
|
|
71
|
+
function rangesOverlap(a, b) {
|
|
72
|
+
// Line-level overlap is the stable default. Columns can be layered
|
|
73
|
+
// in by policy later, but line ranges are what code/editor agents
|
|
74
|
+
// can reliably produce across tools.
|
|
75
|
+
return a.startLine <= b.endLine && b.startLine <= a.endLine;
|
|
76
|
+
}
|
|
77
|
+
export function targetsConflict(held, incoming) {
|
|
78
|
+
// Whole-entity claims are conservative: they conflict with any
|
|
79
|
+
// narrower path/field/range claim under the same entity.
|
|
80
|
+
if (!hasSubtarget(held) || !hasSubtarget(incoming))
|
|
81
|
+
return true;
|
|
82
|
+
// A claim is only as fine as the smallest thing the write path can address,
|
|
83
|
+
// and today that is a field: nothing writes part of a value. So two paths
|
|
84
|
+
// into the SAME field contend, and this rule used to grant them both — by
|
|
85
|
+
// comparing paths for containment and answering "disjoint" for `/content/3`
|
|
86
|
+
// against `/content/7`. Both holders were then blocked at their first write,
|
|
87
|
+
// each by the other, which is a wait dressed as concurrency and resolves
|
|
88
|
+
// only when someone releases.
|
|
89
|
+
//
|
|
90
|
+
// Both are answered below instead, through the field a path names: same
|
|
91
|
+
// field, conflict; different fields, disjoint. Path containment returns when
|
|
92
|
+
// a field can declare a smaller write unit than its whole value — an
|
|
93
|
+
// operation rather than a value — because that is what makes two positions
|
|
94
|
+
// inside one field separately writable and the disjointness real.
|
|
95
|
+
// A claim that names no field covers every field, so it conflicts with any
|
|
96
|
+
// claim under the same path. Two that both name fields conflict only where
|
|
97
|
+
// their sets intersect.
|
|
98
|
+
const heldFields = fieldSet(held);
|
|
99
|
+
const incomingFields = fieldSet(incoming);
|
|
100
|
+
const fieldConflicts = heldFields.size === 0 ||
|
|
101
|
+
incomingFields.size === 0 ||
|
|
102
|
+
[...heldFields].some((name) => incomingFields.has(name));
|
|
103
|
+
const rangeConflicts = !held.range ||
|
|
104
|
+
!incoming?.range ||
|
|
105
|
+
rangesOverlap(held.range, incoming.range);
|
|
106
|
+
return fieldConflicts && rangeConflicts;
|
|
107
|
+
}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* as `Ablo({ observability })`, run your scenario, then read back an ordered
|
|
10
10
|
* list — print it to eyeball what happened, or call `collisions()` to assert on it.
|
|
11
11
|
*/
|
|
12
|
-
import type {
|
|
12
|
+
import type { ClaimEvent, ConflictEvent, CoordinationObserver } from './events.js';
|
|
13
13
|
/** A claim state change as one quiet, greppable line. */
|
|
14
14
|
export declare function formatClaim(e: ClaimEvent): string;
|
|
15
15
|
/** A notify-instead-of-abort stale write as one readable line. */
|
|
@@ -37,11 +37,13 @@ export interface ClaimLogEntry {
|
|
|
37
37
|
* expect(log.collisions()).toHaveLength(0); // assert no one stepped on anyone
|
|
38
38
|
* ```
|
|
39
39
|
*
|
|
40
|
-
* Implements the
|
|
41
|
-
*
|
|
42
|
-
*
|
|
40
|
+
* Implements the transaction layer's narrow {@link CoordinationObserver}.
|
|
41
|
+
* The sync engine re-serves a compatibility subclass that fills its broader
|
|
42
|
+
* lifecycle-observability contract, so the public `Ablo({ observability })`
|
|
43
|
+
* usage remains unchanged without teaching this core class about bootstrap,
|
|
44
|
+
* IndexedDB, or WebSockets.
|
|
43
45
|
*/
|
|
44
|
-
export declare class ClaimLog implements
|
|
46
|
+
export declare class ClaimLog implements CoordinationObserver {
|
|
45
47
|
private readonly max;
|
|
46
48
|
private rows;
|
|
47
49
|
private seq;
|
|
@@ -73,17 +75,4 @@ export declare class ClaimLog implements SyncObservabilityProvider {
|
|
|
73
75
|
toString(): string;
|
|
74
76
|
private add;
|
|
75
77
|
private notify;
|
|
76
|
-
setContext(): void;
|
|
77
|
-
setConnectionState(): void;
|
|
78
|
-
breadcrumb(): void;
|
|
79
|
-
captureRollback(): void;
|
|
80
|
-
captureTransactionFailure(): void;
|
|
81
|
-
captureBootstrapFailure(): void;
|
|
82
|
-
captureReconciliation(): void;
|
|
83
|
-
captureDeltaRetryExhausted(): void;
|
|
84
|
-
captureWebSocketError(): void;
|
|
85
|
-
captureSelfHealing(): void;
|
|
86
|
-
captureCommitZeroSyncId(): void;
|
|
87
|
-
startSpan<T>(_name: string, _op: string, fn: () => T): T;
|
|
88
|
-
startSpanAsync<T>(_name: string, _op: string, fn: () => Promise<T>): Promise<T>;
|
|
89
78
|
}
|
|
@@ -18,16 +18,25 @@ export function formatClaim(e) {
|
|
|
18
18
|
const target = e.model && e.id ? `${e.model}/${e.id}` : e.claimId ?? 'unknown target';
|
|
19
19
|
const scope = e.field ? `#${e.field}` : '';
|
|
20
20
|
const pos = e.position !== undefined ? ` [pos ${e.position}]` : '';
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
// The kind belongs to the counterparty, which is the only participant an
|
|
22
|
+
// event names: on an acquisition the participant is us.
|
|
23
|
+
const kind = e.heldBy?.participantKind;
|
|
24
|
+
const actor = e.actor ? `${e.actor}${kind ? ` (${kind})` : ''}` : '';
|
|
24
25
|
// `rejected`/`lost` name the blocking holder; the rest name us (or no one).
|
|
25
26
|
const by = actor
|
|
26
27
|
? e.phase === 'rejected' || e.phase === 'lost'
|
|
27
28
|
? ` — held by ${actor}`
|
|
28
29
|
: ` — by ${actor}`
|
|
29
30
|
: '';
|
|
30
|
-
|
|
31
|
+
// The cause when there is one, in the policy's own words when a policy
|
|
32
|
+
// decided; otherwise what the holder said they were doing. A line never
|
|
33
|
+
// shows both, because a claim that ended has a cause and a claim that is
|
|
34
|
+
// simply alive has only its description.
|
|
35
|
+
const why = e.reason
|
|
36
|
+
? `: ${e.policyReason ?? e.reason}`
|
|
37
|
+
: e.description
|
|
38
|
+
? `: ${e.description}`
|
|
39
|
+
: '';
|
|
31
40
|
return `claim ${e.phase}: ${target}${scope}${pos}${by}${why}`;
|
|
32
41
|
}
|
|
33
42
|
/** A notify-instead-of-abort stale write as one readable line. */
|
|
@@ -47,9 +56,11 @@ export function formatConflict(e) {
|
|
|
47
56
|
* expect(log.collisions()).toHaveLength(0); // assert no one stepped on anyone
|
|
48
57
|
* ```
|
|
49
58
|
*
|
|
50
|
-
* Implements the
|
|
51
|
-
*
|
|
52
|
-
*
|
|
59
|
+
* Implements the transaction layer's narrow {@link CoordinationObserver}.
|
|
60
|
+
* The sync engine re-serves a compatibility subclass that fills its broader
|
|
61
|
+
* lifecycle-observability contract, so the public `Ablo({ observability })`
|
|
62
|
+
* usage remains unchanged without teaching this core class about bootstrap,
|
|
63
|
+
* IndexedDB, or WebSockets.
|
|
53
64
|
*/
|
|
54
65
|
export class ClaimLog {
|
|
55
66
|
max;
|
|
@@ -124,22 +135,4 @@ export class ClaimLog {
|
|
|
124
135
|
for (const listener of this.listeners)
|
|
125
136
|
listener();
|
|
126
137
|
}
|
|
127
|
-
// —— inert provider surface (this log only cares about claims) ——
|
|
128
|
-
setContext() { }
|
|
129
|
-
setConnectionState() { }
|
|
130
|
-
breadcrumb() { }
|
|
131
|
-
captureRollback() { }
|
|
132
|
-
captureTransactionFailure() { }
|
|
133
|
-
captureBootstrapFailure() { }
|
|
134
|
-
captureReconciliation() { }
|
|
135
|
-
captureDeltaRetryExhausted() { }
|
|
136
|
-
captureWebSocketError() { }
|
|
137
|
-
captureSelfHealing() { }
|
|
138
|
-
captureCommitZeroSyncId() { }
|
|
139
|
-
startSpan(_name, _op, fn) {
|
|
140
|
-
return fn();
|
|
141
|
-
}
|
|
142
|
-
startSpanAsync(_name, _op, fn) {
|
|
143
|
-
return fn();
|
|
144
|
-
}
|
|
145
138
|
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The durable-write port and the option that installs it.
|
|
3
|
+
*
|
|
4
|
+
* Owns the persistence contract behind `Ablo({ durableWrites })` — a behavior
|
|
5
|
+
* contract of methods, not a serialized shape, which is why it lives here
|
|
6
|
+
* rather than in `transactions/settlement/`. The records that cross this port
|
|
7
|
+
* are owned by `pendingWriteSchema` there; this module never redescribes them.
|
|
8
|
+
*
|
|
9
|
+
* The engine consumes the port through `commitOutboxStore`, and the HTTP client
|
|
10
|
+
* accepts the same option through `transport/httpOptions`.
|
|
11
|
+
*/
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
import type { CommitOutboxScope } from './transactions/settlement/commitEnvelope.js';
|
|
14
|
+
import type { PendingWrite } from './transactions/settlement/pendingWrite.js';
|
|
15
|
+
/**
|
|
16
|
+
* Persistence port used by `Ablo({ durableWrites })`.
|
|
17
|
+
*
|
|
18
|
+
* `seal` is the durability boundary: it must atomically persist the exact write
|
|
19
|
+
* and consume the staged records that write supersedes. Resolving this promise
|
|
20
|
+
* authorizes Ablo to dispatch the request, so adapters must never report success
|
|
21
|
+
* before the data is durable.
|
|
22
|
+
*/
|
|
23
|
+
export interface DurableWriteStore {
|
|
24
|
+
/**
|
|
25
|
+
* Atomically reserve a pending write and consume the staged records it owns.
|
|
26
|
+
* The same id + same request is idempotent; the same id + a different request
|
|
27
|
+
* must be rejected. For a source-accepted envelope, a re-seal may add the
|
|
28
|
+
* monotonic `acceptedAt`/`correlationId` evidence and the store must preserve
|
|
29
|
+
* that upgrade atomically rather than ignoring it.
|
|
30
|
+
*/
|
|
31
|
+
seal(write: PendingWrite, consumedRecordIds: readonly string[]): Promise<void>;
|
|
32
|
+
/** Load all unacknowledged writes. Stored data is treated as untrusted. */
|
|
33
|
+
list(): Promise<readonly unknown[]>;
|
|
34
|
+
/** Remove one write only after its outcome is definitive. */
|
|
35
|
+
remove(writeId: string): Promise<void>;
|
|
36
|
+
}
|
|
37
|
+
/** Runtime validation for injected adapters, including JavaScript consumers. */
|
|
38
|
+
export declare const durableWriteStoreSchema: z.ZodCustom<DurableWriteStore, DurableWriteStore>;
|
|
39
|
+
/** Options for crash-durable `create`, `update`, and `delete` calls. */
|
|
40
|
+
export declare const durableWritesConfigSchema: z.ZodObject<{
|
|
41
|
+
store: z.ZodCustom<DurableWriteStore, DurableWriteStore>;
|
|
42
|
+
namespace: z.ZodOptional<z.ZodString>;
|
|
43
|
+
}, z.core.$strict>;
|
|
44
|
+
export type DurableWritesConfig = z.infer<typeof durableWritesConfigSchema>;
|
|
45
|
+
interface DurableWriteOptionInput {
|
|
46
|
+
readonly durableWrites?: DurableWritesConfig;
|
|
47
|
+
/** Compatibility input for pre-`durableWrites` clients. */
|
|
48
|
+
readonly commitOutbox?: DurableWriteStore;
|
|
49
|
+
/** Compatibility input and internal child-client identity seam. */
|
|
50
|
+
readonly commitOutboxScope?: CommitOutboxScope;
|
|
51
|
+
}
|
|
52
|
+
export interface ResolvedDurableWrites {
|
|
53
|
+
readonly store?: DurableWriteStore;
|
|
54
|
+
readonly namespace?: string;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Resolves one canonical store configuration for both HTTP and WebSocket
|
|
58
|
+
* clients. Mixed old/new configuration fails loudly so Ablo never persists to
|
|
59
|
+
* one adapter while the caller believes another adapter is authoritative.
|
|
60
|
+
*/
|
|
61
|
+
export declare function resolveDurableWrites(options: DurableWriteOptionInput): ResolvedDurableWrites;
|
|
62
|
+
export {};
|
|
@@ -1,6 +1,31 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/**
|
|
2
|
+
* The durable-write port and the option that installs it.
|
|
3
|
+
*
|
|
4
|
+
* Owns the persistence contract behind `Ablo({ durableWrites })` — a behavior
|
|
5
|
+
* contract of methods, not a serialized shape, which is why it lives here
|
|
6
|
+
* rather than in `transactions/settlement/`. The records that cross this port
|
|
7
|
+
* are owned by `pendingWriteSchema` there; this module never redescribes them.
|
|
8
|
+
*
|
|
9
|
+
* The engine consumes the port through `commitOutboxStore`, and the HTTP client
|
|
10
|
+
* accepts the same option through `transport/httpOptions`.
|
|
11
|
+
*/
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
import { AbloValidationError } from './errors.js';
|
|
14
|
+
/** Runtime validation for injected adapters, including JavaScript consumers. */
|
|
15
|
+
export const durableWriteStoreSchema = z.custom((value) => {
|
|
16
|
+
if (typeof value !== 'object' || value === null)
|
|
17
|
+
return false;
|
|
18
|
+
const candidate = value;
|
|
19
|
+
return (typeof candidate.seal === 'function' &&
|
|
20
|
+
typeof candidate.list === 'function' &&
|
|
21
|
+
typeof candidate.remove === 'function');
|
|
22
|
+
}, { message: 'store must implement seal(), list(), and remove()' });
|
|
23
|
+
/** Options for crash-durable `create`, `update`, and `delete` calls. */
|
|
24
|
+
export const durableWritesConfigSchema = z.strictObject({
|
|
25
|
+
store: durableWriteStoreSchema,
|
|
26
|
+
/** Separates deployments or workflow lanes that share an authenticated actor. */
|
|
27
|
+
namespace: z.string().trim().min(1).optional(),
|
|
28
|
+
});
|
|
4
29
|
function invalidDurableWrites(message) {
|
|
5
30
|
return new AbloValidationError(`Ablo: invalid \`durableWrites\` option — ${message}.`, {
|
|
6
31
|
code: 'invalid_options',
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Two axes live in this module, and they are NOT the same axis. They stay
|
|
4
|
+
* together because they convert into each other; they stay distinct because
|
|
5
|
+
* conflating them is how credentials acquire a mode nobody chose.
|
|
6
|
+
*
|
|
7
|
+
* - The PLANE axis ({@link Environment}) — which isolated plane a row, schema
|
|
8
|
+
* artifact, or data source belongs to. Open-ended: `production` is the root
|
|
9
|
+
* plane and any number of others may exist beside it.
|
|
10
|
+
* - The CREDENTIAL axis ({@link KeyEnvironment}) — the mode a key was minted
|
|
11
|
+
* in. Binary, and fixed by the key format: a prefix spells exactly one of
|
|
12
|
+
* `live` or `test`, so a third value is not representable in a key at all.
|
|
13
|
+
*
|
|
14
|
+
* These were one type until this split, which is the shape behind two
|
|
15
|
+
* incidents: an `sk_test_` exchange that minted an `ek_live_` and landed
|
|
16
|
+
* sandbox commits in another tenant's tables, and a rotation that handed back
|
|
17
|
+
* an `rk_live_` in place of an `rk_test_`. Widening the plane axis while the
|
|
18
|
+
* credential axis aliased it would reopen that door one plane name wider, so
|
|
19
|
+
* the split comes first and the conversions below are deliberately narrow.
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* The plane names every deployment has: the root, plus the plane every project
|
|
23
|
+
* starts with beside it. This is the well-known set, not the permitted set —
|
|
24
|
+
* {@link environmentSchema} decides what is valid.
|
|
25
|
+
*/
|
|
26
|
+
export declare const ENVIRONMENTS: readonly ["production", "sandbox"];
|
|
27
|
+
/** The root plane — the one every other plane is defined relative to. */
|
|
28
|
+
export declare const ROOT_ENVIRONMENT = "production";
|
|
29
|
+
/**
|
|
30
|
+
* The modes a credential can be minted in. Deliberately its own list rather
|
|
31
|
+
* than a view of {@link ENVIRONMENTS}: this one is fixed by the key format,
|
|
32
|
+
* which has exactly two prefix spellings, and must not grow when planes do.
|
|
33
|
+
*/
|
|
34
|
+
export declare const KEY_ENVIRONMENTS: readonly ["production", "sandbox"];
|
|
35
|
+
/**
|
|
36
|
+
* How a credential's mode is spelled inside an API-key prefix: a `live` key
|
|
37
|
+
* acts on production and a `test` key acts on the sandbox. Convert between this
|
|
38
|
+
* spelling and {@link KeyEnvironment} with {@link environmentFromKeyPrefix} and
|
|
39
|
+
* {@link environmentToKeyPrefix}.
|
|
40
|
+
*/
|
|
41
|
+
export declare const KEY_PREFIX_ENVIRONMENTS: readonly ["live", "test"];
|
|
42
|
+
export type KeyPrefixEnvironment = (typeof KEY_PREFIX_ENVIRONMENTS)[number];
|
|
43
|
+
/**
|
|
44
|
+
* Validates a value as a plane name — a lowercase slug that may not lead or
|
|
45
|
+
* trail with a hyphen.
|
|
46
|
+
*
|
|
47
|
+
* The character set is load-bearing rather than cosmetic. A plane name is
|
|
48
|
+
* interpolated into two delimited identifiers: the sync-group prefix
|
|
49
|
+
* (`sandbox:<org>:<slug>`, colon separated) and the tenant secret scope
|
|
50
|
+
* (`<org>/<env>/<project>/<sandbox>`, slash separated). Admitting `:` or `/`
|
|
51
|
+
* would let one plane's name parse as two segments and so collide with a
|
|
52
|
+
* different plane's identity, which is why the pattern excludes every delimiter
|
|
53
|
+
* either format relies on.
|
|
54
|
+
*/
|
|
55
|
+
export declare const environmentSchema: z.ZodString;
|
|
56
|
+
/** A plane name. `production` is the root; any other slug is a plane beside it. */
|
|
57
|
+
export type Environment = z.infer<typeof environmentSchema>;
|
|
58
|
+
/** Validates a value as one of the {@link KEY_ENVIRONMENTS}. */
|
|
59
|
+
export declare const keyEnvironmentSchema: z.ZodEnum<{
|
|
60
|
+
production: "production";
|
|
61
|
+
sandbox: "sandbox";
|
|
62
|
+
}>;
|
|
63
|
+
/**
|
|
64
|
+
* The mode a credential was minted in — `'production'` or `'sandbox'`, never
|
|
65
|
+
* anything else. Not an alias of {@link Environment}: a key's mode is a trust
|
|
66
|
+
* boundary, and a plane name must never be able to answer it.
|
|
67
|
+
*/
|
|
68
|
+
export type KeyEnvironment = z.infer<typeof keyEnvironmentSchema>;
|
|
69
|
+
/**
|
|
70
|
+
* Coerces an untrusted value into a valid {@link Environment}, returning
|
|
71
|
+
* `fallback` (which defaults to the root plane) when the value is not a
|
|
72
|
+
* well-formed plane name. Use it when reading a plane from configuration or off
|
|
73
|
+
* the wire.
|
|
74
|
+
*/
|
|
75
|
+
export declare function normalizeEnvironment(value: unknown, fallback?: Environment): Environment;
|
|
76
|
+
/** True when the given plane is the root plane. */
|
|
77
|
+
export declare function isRootEnvironment(value: Environment): boolean;
|
|
78
|
+
/**
|
|
79
|
+
* The mode a credential acting on the given plane must be minted in.
|
|
80
|
+
*
|
|
81
|
+
* This is the ONE narrowing from the open plane axis to the binary credential
|
|
82
|
+
* axis, and it is deliberately asymmetric: only the root plane yields a
|
|
83
|
+
* production-mode key, and every other plane — named, numbered, or newly forked
|
|
84
|
+
* — yields a sandbox-mode one. A plane cannot acquire live authority by being
|
|
85
|
+
* spelled a particular way, which is the property that keeps adding planes from
|
|
86
|
+
* widening what any credential is allowed to touch.
|
|
87
|
+
*/
|
|
88
|
+
export declare function keyEnvironmentForPlane(value: Environment): KeyEnvironment;
|
|
89
|
+
/**
|
|
90
|
+
* Maps an API-key prefix spelling to the mode it denotes: a `'test'` key was
|
|
91
|
+
* minted in the sandbox, and anything else in production.
|
|
92
|
+
*/
|
|
93
|
+
export declare function environmentFromKeyPrefix(value: KeyPrefixEnvironment): KeyEnvironment;
|
|
94
|
+
/**
|
|
95
|
+
* Maps a credential's mode to the spelling used in its key prefix.
|
|
96
|
+
*
|
|
97
|
+
* Takes a {@link KeyEnvironment} rather than an {@link Environment} on purpose.
|
|
98
|
+
* Planes outside the well-known two have no prefix spelling, and a signature
|
|
99
|
+
* that accepted one would silently answer `'live'` for them — minting a
|
|
100
|
+
* production-mode credential for a plane that is not production. That is the
|
|
101
|
+
* 2026-06-10 incident with a new cause, so the type refuses the input instead.
|
|
102
|
+
*/
|
|
103
|
+
export declare function environmentToKeyPrefix(value: KeyEnvironment): KeyPrefixEnvironment;
|
|
104
|
+
/** Returns true when the given environment is the sandbox. */
|
|
105
|
+
export declare function isSandboxEnvironment(value: Environment): boolean;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Two axes live in this module, and they are NOT the same axis. They stay
|
|
4
|
+
* together because they convert into each other; they stay distinct because
|
|
5
|
+
* conflating them is how credentials acquire a mode nobody chose.
|
|
6
|
+
*
|
|
7
|
+
* - The PLANE axis ({@link Environment}) — which isolated plane a row, schema
|
|
8
|
+
* artifact, or data source belongs to. Open-ended: `production` is the root
|
|
9
|
+
* plane and any number of others may exist beside it.
|
|
10
|
+
* - The CREDENTIAL axis ({@link KeyEnvironment}) — the mode a key was minted
|
|
11
|
+
* in. Binary, and fixed by the key format: a prefix spells exactly one of
|
|
12
|
+
* `live` or `test`, so a third value is not representable in a key at all.
|
|
13
|
+
*
|
|
14
|
+
* These were one type until this split, which is the shape behind two
|
|
15
|
+
* incidents: an `sk_test_` exchange that minted an `ek_live_` and landed
|
|
16
|
+
* sandbox commits in another tenant's tables, and a rotation that handed back
|
|
17
|
+
* an `rk_live_` in place of an `rk_test_`. Widening the plane axis while the
|
|
18
|
+
* credential axis aliased it would reopen that door one plane name wider, so
|
|
19
|
+
* the split comes first and the conversions below are deliberately narrow.
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* The plane names every deployment has: the root, plus the plane every project
|
|
23
|
+
* starts with beside it. This is the well-known set, not the permitted set —
|
|
24
|
+
* {@link environmentSchema} decides what is valid.
|
|
25
|
+
*/
|
|
26
|
+
export const ENVIRONMENTS = ['production', 'sandbox'];
|
|
27
|
+
/** The root plane — the one every other plane is defined relative to. */
|
|
28
|
+
export const ROOT_ENVIRONMENT = 'production';
|
|
29
|
+
/**
|
|
30
|
+
* The modes a credential can be minted in. Deliberately its own list rather
|
|
31
|
+
* than a view of {@link ENVIRONMENTS}: this one is fixed by the key format,
|
|
32
|
+
* which has exactly two prefix spellings, and must not grow when planes do.
|
|
33
|
+
*/
|
|
34
|
+
export const KEY_ENVIRONMENTS = ['production', 'sandbox'];
|
|
35
|
+
/**
|
|
36
|
+
* How a credential's mode is spelled inside an API-key prefix: a `live` key
|
|
37
|
+
* acts on production and a `test` key acts on the sandbox. Convert between this
|
|
38
|
+
* spelling and {@link KeyEnvironment} with {@link environmentFromKeyPrefix} and
|
|
39
|
+
* {@link environmentToKeyPrefix}.
|
|
40
|
+
*/
|
|
41
|
+
export const KEY_PREFIX_ENVIRONMENTS = ['live', 'test'];
|
|
42
|
+
/**
|
|
43
|
+
* Validates a value as a plane name — a lowercase slug that may not lead or
|
|
44
|
+
* trail with a hyphen.
|
|
45
|
+
*
|
|
46
|
+
* The character set is load-bearing rather than cosmetic. A plane name is
|
|
47
|
+
* interpolated into two delimited identifiers: the sync-group prefix
|
|
48
|
+
* (`sandbox:<org>:<slug>`, colon separated) and the tenant secret scope
|
|
49
|
+
* (`<org>/<env>/<project>/<sandbox>`, slash separated). Admitting `:` or `/`
|
|
50
|
+
* would let one plane's name parse as two segments and so collide with a
|
|
51
|
+
* different plane's identity, which is why the pattern excludes every delimiter
|
|
52
|
+
* either format relies on.
|
|
53
|
+
*/
|
|
54
|
+
export const environmentSchema = z
|
|
55
|
+
.string()
|
|
56
|
+
.regex(/^[a-z0-9](?:[a-z0-9-]{0,38}[a-z0-9])?$/, 'must be a lowercase slug');
|
|
57
|
+
/** Validates a value as one of the {@link KEY_ENVIRONMENTS}. */
|
|
58
|
+
export const keyEnvironmentSchema = z.enum(KEY_ENVIRONMENTS);
|
|
59
|
+
/**
|
|
60
|
+
* Coerces an untrusted value into a valid {@link Environment}, returning
|
|
61
|
+
* `fallback` (which defaults to the root plane) when the value is not a
|
|
62
|
+
* well-formed plane name. Use it when reading a plane from configuration or off
|
|
63
|
+
* the wire.
|
|
64
|
+
*/
|
|
65
|
+
export function normalizeEnvironment(value, fallback = ROOT_ENVIRONMENT) {
|
|
66
|
+
const parsed = environmentSchema.safeParse(value);
|
|
67
|
+
return parsed.success ? parsed.data : fallback;
|
|
68
|
+
}
|
|
69
|
+
/** True when the given plane is the root plane. */
|
|
70
|
+
export function isRootEnvironment(value) {
|
|
71
|
+
return value === ROOT_ENVIRONMENT;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* The mode a credential acting on the given plane must be minted in.
|
|
75
|
+
*
|
|
76
|
+
* This is the ONE narrowing from the open plane axis to the binary credential
|
|
77
|
+
* axis, and it is deliberately asymmetric: only the root plane yields a
|
|
78
|
+
* production-mode key, and every other plane — named, numbered, or newly forked
|
|
79
|
+
* — yields a sandbox-mode one. A plane cannot acquire live authority by being
|
|
80
|
+
* spelled a particular way, which is the property that keeps adding planes from
|
|
81
|
+
* widening what any credential is allowed to touch.
|
|
82
|
+
*/
|
|
83
|
+
export function keyEnvironmentForPlane(value) {
|
|
84
|
+
return isRootEnvironment(value) ? 'production' : 'sandbox';
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Maps an API-key prefix spelling to the mode it denotes: a `'test'` key was
|
|
88
|
+
* minted in the sandbox, and anything else in production.
|
|
89
|
+
*/
|
|
90
|
+
export function environmentFromKeyPrefix(value) {
|
|
91
|
+
return value === 'test' ? 'sandbox' : 'production';
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Maps a credential's mode to the spelling used in its key prefix.
|
|
95
|
+
*
|
|
96
|
+
* Takes a {@link KeyEnvironment} rather than an {@link Environment} on purpose.
|
|
97
|
+
* Planes outside the well-known two have no prefix spelling, and a signature
|
|
98
|
+
* that accepted one would silently answer `'live'` for them — minting a
|
|
99
|
+
* production-mode credential for a plane that is not production. That is the
|
|
100
|
+
* 2026-06-10 incident with a new cause, so the type refuses the input instead.
|
|
101
|
+
*/
|
|
102
|
+
export function environmentToKeyPrefix(value) {
|
|
103
|
+
return value === 'sandbox' ? 'test' : 'live';
|
|
104
|
+
}
|
|
105
|
+
/** Returns true when the given environment is the sandbox. */
|
|
106
|
+
export function isSandboxEnvironment(value) {
|
|
107
|
+
return value === 'sandbox';
|
|
108
|
+
}
|
|
@@ -37,7 +37,7 @@ import { z } from 'zod';
|
|
|
37
37
|
* error documentation and returned on the `Ablo-Version` response header, so a
|
|
38
38
|
* consumer can detect when its expected contract has drifted from the server's.
|
|
39
39
|
*/
|
|
40
|
-
export declare const ERROR_CONTRACT_VERSION = "2026-07-
|
|
40
|
+
export declare const ERROR_CONTRACT_VERSION = "2026-07-23";
|
|
41
41
|
/** A coarse grouping of error codes, used to organize metrics and documentation. */
|
|
42
42
|
export type ErrorCategory = 'auth' | 'permission' | 'capability' | 'claim' | 'conflict' | 'validation' | 'not_found' | 'tenant' | 'schema' | 'bootstrap' | 'transport' | 'rate_limit' | 'server' | 'client';
|
|
43
43
|
/**
|
|
@@ -148,6 +148,7 @@ export declare const ERROR_CODES: {
|
|
|
148
148
|
readonly database_role_unreadable: ErrorCodeSpec;
|
|
149
149
|
readonly database_tables_unforced_rls: ErrorCodeSpec;
|
|
150
150
|
readonly database_host_not_allowed: ErrorCodeSpec;
|
|
151
|
+
readonly connected_database_unreachable: ErrorCodeSpec;
|
|
151
152
|
readonly byo_role_cannot_enforce_rls: ErrorCodeSpec;
|
|
152
153
|
readonly byo_role_unreadable: ErrorCodeSpec;
|
|
153
154
|
readonly byo_tenant_tables_unforced_rls: ErrorCodeSpec;
|
|
@@ -158,6 +159,7 @@ export declare const ERROR_CODES: {
|
|
|
158
159
|
readonly entity_claimed: ErrorCodeSpec;
|
|
159
160
|
readonly malformed_claim: ErrorCodeSpec;
|
|
160
161
|
readonly malformed_subscription: ErrorCodeSpec;
|
|
162
|
+
readonly malformed_response: ErrorCodeSpec;
|
|
161
163
|
readonly model_claimed: ErrorCodeSpec;
|
|
162
164
|
readonly model_claimed_timeout: ErrorCodeSpec;
|
|
163
165
|
readonly model_claim_not_configured: ErrorCodeSpec;
|
|
@@ -170,13 +172,13 @@ export declare const ERROR_CODES: {
|
|
|
170
172
|
readonly source_transport_pinned: ErrorCodeSpec;
|
|
171
173
|
readonly idempotency_key_too_long: ErrorCodeSpec;
|
|
172
174
|
readonly write_options_invalid: ErrorCodeSpec;
|
|
175
|
+
readonly write_payload_invalid: ErrorCodeSpec;
|
|
173
176
|
readonly source_operation_id_required: ErrorCodeSpec;
|
|
174
177
|
readonly source_adapter_misconfigured: ErrorCodeSpec;
|
|
175
178
|
readonly source_event_invalid: ErrorCodeSpec;
|
|
176
179
|
readonly duration_invalid: ErrorCodeSpec;
|
|
177
180
|
readonly schema_definition_invalid: ErrorCodeSpec;
|
|
178
181
|
readonly cli_invalid_arguments: ErrorCodeSpec;
|
|
179
|
-
readonly turn_validation_failed: ErrorCodeSpec;
|
|
180
182
|
readonly commit_operation_required: ErrorCodeSpec;
|
|
181
183
|
readonly commit_operation_invalid: ErrorCodeSpec;
|
|
182
184
|
readonly commit_operation_model_required: ErrorCodeSpec;
|
|
@@ -225,11 +227,9 @@ export declare const ERROR_CODES: {
|
|
|
225
227
|
readonly claim_not_wired: ErrorCodeSpec;
|
|
226
228
|
readonly claim_queued: ErrorCodeSpec;
|
|
227
229
|
readonly claim_wait_aborted: ErrorCodeSpec;
|
|
228
|
-
readonly claim_wait_poll_interval_required: ErrorCodeSpec;
|
|
229
230
|
readonly grant_timeout: ErrorCodeSpec;
|
|
230
|
-
readonly slide_intent_missing_deck_id: ErrorCodeSpec;
|
|
231
|
-
readonly slide_intent_unknown_sibling: ErrorCodeSpec;
|
|
232
231
|
readonly bootstrap_fetch_timeout: ErrorCodeSpec;
|
|
232
|
+
readonly bootstrap_cancelled: ErrorCodeSpec;
|
|
233
233
|
readonly bootstrap_offline: ErrorCodeSpec;
|
|
234
234
|
readonly bootstrap_offline_no_cache: ErrorCodeSpec;
|
|
235
235
|
readonly bootstrap_response_invalid: ErrorCodeSpec;
|
|
@@ -258,8 +258,6 @@ export declare const ERROR_CODES: {
|
|
|
258
258
|
readonly internal_error: ErrorCodeSpec;
|
|
259
259
|
readonly quota_lookup_failed: ErrorCodeSpec;
|
|
260
260
|
readonly rate_limiter_unavailable: ErrorCodeSpec;
|
|
261
|
-
readonly turn_open_failed: ErrorCodeSpec;
|
|
262
|
-
readonly turn_close_failed: ErrorCodeSpec;
|
|
263
261
|
readonly invalid_options: ErrorCodeSpec;
|
|
264
262
|
readonly no_ablo_provider: ErrorCodeSpec;
|
|
265
263
|
readonly no_sync_group_provider: ErrorCodeSpec;
|
|
@@ -307,12 +305,14 @@ export declare const ERROR_CODES: {
|
|
|
307
305
|
readonly forbidden: ErrorCodeSpec;
|
|
308
306
|
readonly source_api_key_unresolved: ErrorCodeSpec;
|
|
309
307
|
readonly capability_auth_disabled: ErrorCodeSpec;
|
|
308
|
+
readonly capability_rotation_unavailable: ErrorCodeSpec;
|
|
310
309
|
readonly provisioner_unavailable: ErrorCodeSpec;
|
|
311
310
|
readonly invalid_model: ErrorCodeSpec;
|
|
312
311
|
readonly invalid_id: ErrorCodeSpec;
|
|
313
312
|
readonly unknown_model: ErrorCodeSpec;
|
|
314
313
|
readonly model_not_tenant_scoped: ErrorCodeSpec;
|
|
315
314
|
readonly source_tenancy_not_enforced: ErrorCodeSpec;
|
|
315
|
+
readonly user_scope_not_enforced: ErrorCodeSpec;
|
|
316
316
|
readonly model_not_provisioned: ErrorCodeSpec;
|
|
317
317
|
readonly schema_table_invalid: ErrorCodeSpec;
|
|
318
318
|
readonly schema_scope_invalid: ErrorCodeSpec;
|
|
@@ -329,6 +329,7 @@ export declare const ERROR_CODES: {
|
|
|
329
329
|
readonly protocol_version_unsupported: ErrorCodeSpec;
|
|
330
330
|
readonly database_unreachable: ErrorCodeSpec;
|
|
331
331
|
readonly database_not_replication_ready: ErrorCodeSpec;
|
|
332
|
+
readonly database_already_connected: ErrorCodeSpec;
|
|
332
333
|
readonly replication_publication_drift: ErrorCodeSpec;
|
|
333
334
|
readonly query_unknown_relation: ErrorCodeSpec;
|
|
334
335
|
readonly query_relation_target_unknown: ErrorCodeSpec;
|
|
@@ -346,20 +347,19 @@ export declare const ERROR_CODES: {
|
|
|
346
347
|
readonly usage_invalid: ErrorCodeSpec;
|
|
347
348
|
readonly invalid_request: ErrorCodeSpec;
|
|
348
349
|
readonly capability_not_found: ErrorCodeSpec;
|
|
350
|
+
readonly claim_not_found: ErrorCodeSpec;
|
|
349
351
|
readonly invalid_participant_kind: ErrorCodeSpec;
|
|
350
352
|
readonly invalid_sync_group: ErrorCodeSpec;
|
|
351
353
|
readonly narrow_scope_required: ErrorCodeSpec;
|
|
352
354
|
readonly wide_scope_forbidden: ErrorCodeSpec;
|
|
353
355
|
readonly capability_required: ErrorCodeSpec;
|
|
354
|
-
readonly
|
|
355
|
-
readonly
|
|
356
|
-
readonly turn_not_found: ErrorCodeSpec;
|
|
357
|
-
readonly turn_foreign_agent: ErrorCodeSpec;
|
|
358
|
-
readonly invalid_intent: ErrorCodeSpec;
|
|
356
|
+
readonly position_missing_parent: ErrorCodeSpec;
|
|
357
|
+
readonly position_unknown_sibling: ErrorCodeSpec;
|
|
359
358
|
readonly schema_too_large: ErrorCodeSpec;
|
|
360
359
|
readonly request_too_large: ErrorCodeSpec;
|
|
361
360
|
readonly invalid_schema: ErrorCodeSpec;
|
|
362
361
|
readonly incompatible_change: ErrorCodeSpec;
|
|
362
|
+
readonly replication_reset_required: ErrorCodeSpec;
|
|
363
363
|
};
|
|
364
364
|
/**
|
|
365
365
|
* The type of a valid error code: any key registered in {@link ERROR_CODES},
|