@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
|
@@ -1,107 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* - {@link syncDeltaCoreSchema} — the sync-protocol slice: everything a client
|
|
7
|
-
* needs to reconstruct the change, plus the tenant key. This is a portable
|
|
8
|
-
* payload shape; it is not a statement that the row is physically stored in
|
|
9
|
-
* the customer's database.
|
|
10
|
-
* - {@link deltaAttributionSchema} — who made the change, and on whose authority.
|
|
11
|
-
* - {@link deltaProvenanceSchema} — which AI task, if any, produced it.
|
|
12
|
-
*
|
|
13
|
-
* {@link syncDeltaRowSchema} composes all three into the full stored row.
|
|
14
|
-
* {@link DELTA_DATA_CLASSIFICATION} states which slices contain customer data,
|
|
15
|
-
* while {@link DELTA_PHYSICAL_STORAGE} states where the runtime persists them.
|
|
16
|
-
* Keeping those axes separate prevents a portable schema slice from being cited
|
|
17
|
-
* incorrectly as a physical-residency guarantee.
|
|
18
|
-
*
|
|
19
|
-
* This is the stored shape. The delta broadcast to clients is a narrower projection
|
|
20
|
-
* of it — see {@link import('../wire/delta.js').syncDeltaWireCoreSchema} — and
|
|
21
|
-
* the field names here mirror those on that wire delta.
|
|
2
|
+
* Compatibility entry point for the durable `sync_deltas` row contract, which
|
|
3
|
+
* is owned by the transaction layer. The schema barrel continues to re-export
|
|
4
|
+
* this path so existing `@abloatai/ablo/schema` consumers do not change.
|
|
22
5
|
*/
|
|
23
|
-
|
|
24
|
-
import { participantKindSchema, confirmationStateSchema } from '../wire/delta.js';
|
|
25
|
-
// ── Enumerations that mirror the corresponding Postgres enum types ────────────
|
|
26
|
-
// `participant_kind` and `confirmation_state` are shared with the wire delta and
|
|
27
|
-
// live at the wire layer (see `../wire/delta.js`); they are re-exported here so
|
|
28
|
-
// code that imports them from `schema` keeps resolving.
|
|
29
|
-
export { participantKindSchema, confirmationStateSchema } from '../wire/delta.js';
|
|
30
|
-
/** `backfill_provenance` */
|
|
31
|
-
export const backfillProvenanceSchema = z.enum(['exact', 'inferred', 'unknown']);
|
|
32
|
-
/** A delta payload: the full post-mutation row (or null for deletes). */
|
|
33
|
-
const deltaDataSchema = z.record(z.string(), z.unknown()).nullable();
|
|
34
|
-
// ── Core — the sync-protocol slice ────────────────────────────────────────────
|
|
35
|
-
/**
|
|
36
|
-
* Everything a client needs to materialize the change, plus the tenant key. This
|
|
37
|
-
* is the portable shape an authoritative WAL change or endpoint event carries.
|
|
38
|
-
* The runtime persists the resulting full row in Ablo's tenant-scoped ordered
|
|
39
|
-
* sync log; it is not written atomically with a direct application-row mutation.
|
|
40
|
-
* `id`, `createdAt`, and `syncGroups` are assigned when the source change is
|
|
41
|
-
* appended, so they are optional at the ingestion boundary.
|
|
42
|
-
*/
|
|
43
|
-
export const syncDeltaCoreSchema = z.object({
|
|
44
|
-
/** Monotonically increasing sync id, assigned by the server when the delta is appended; absent on an outbox marker. */
|
|
45
|
-
id: z.union([z.bigint(), z.number()]).optional(),
|
|
46
|
-
/** The `action_type` column: a single character, `I` (insert), `U` (update), or `D` (delete). */
|
|
47
|
-
actionType: z.string().min(1).max(1),
|
|
48
|
-
modelName: z.string().min(1),
|
|
49
|
-
modelId: z.string().min(1),
|
|
50
|
-
data: deltaDataSchema,
|
|
51
|
-
previousData: deltaDataSchema.optional(),
|
|
52
|
-
/** Routing keys that decide which subscribers receive this delta; computed by the server at append time. */
|
|
53
|
-
syncGroups: z.array(z.string()).optional(),
|
|
54
|
-
/** The committing organization id — the coarse-grained tenant-isolation boundary. */
|
|
55
|
-
organizationId: z.string().nullable(),
|
|
56
|
-
/** ISO 8601 timestamp, assigned by the server when the delta is appended. */
|
|
57
|
-
createdAt: z.string().optional(),
|
|
58
|
-
transactionId: z.string().nullable(),
|
|
59
|
-
/**
|
|
60
|
-
* Stable identity of the authoritative WAL row or endpoint event. It is
|
|
61
|
-
* nullable for hosted/legacy rows and is never exposed as the optimistic
|
|
62
|
-
* client transaction id.
|
|
63
|
-
*/
|
|
64
|
-
sourceChangeId: z.string().min(1).nullable().optional(),
|
|
65
|
-
});
|
|
66
|
-
// ── Attribution — who made the change, and on whose authority ─────────────────
|
|
67
|
-
export const deltaAttributionSchema = z.object({
|
|
68
|
-
/** The acting participant, recorded as a single column for compatibility; the structured pair below is the richer form. */
|
|
69
|
-
createdBy: z.string().nullable(),
|
|
70
|
-
actorId: z.string().nullable(),
|
|
71
|
-
actorKind: participantKindSchema.nullable(),
|
|
72
|
-
onBehalfOfId: z.string().nullable(),
|
|
73
|
-
onBehalfOfKind: participantKindSchema.nullable(),
|
|
74
|
-
capabilityId: z.string().nullable(),
|
|
75
|
-
delegationChainRootUserId: z.string().nullable().optional(),
|
|
76
|
-
confirmationState: confirmationStateSchema.nullable(),
|
|
77
|
-
backfillProvenance: backfillProvenanceSchema.nullable(),
|
|
78
|
-
});
|
|
79
|
-
// ── Provenance — which AI task produced the change ────────────────────────────
|
|
80
|
-
export const deltaProvenanceSchema = z.object({
|
|
81
|
-
/** Foreign key to the task record for the AI turn that produced this commit; null when no task applies. */
|
|
82
|
-
causedByTaskId: z.string().nullable(),
|
|
83
|
-
});
|
|
84
|
-
// ── Full stored row, classification, and physical storage ─────────────────────
|
|
85
|
-
/** The complete `sync_deltas` row: core, attribution, and provenance combined. */
|
|
86
|
-
export const syncDeltaRowSchema = syncDeltaCoreSchema
|
|
87
|
-
.extend(deltaAttributionSchema.shape)
|
|
88
|
-
.extend(deltaProvenanceSchema.shape);
|
|
89
|
-
/** Which slices contain retained customer row data versus control metadata. */
|
|
90
|
-
export const DELTA_DATA_CLASSIFICATION = {
|
|
91
|
-
core: 'customer-data',
|
|
92
|
-
attribution: 'control-metadata',
|
|
93
|
-
provenance: 'control-metadata',
|
|
94
|
-
};
|
|
95
|
-
/**
|
|
96
|
-
* Where the current runtime physically persists each slice. All three live in
|
|
97
|
-
* Ablo's tenant-scoped `sync_deltas` log. `core` contains full post-change row
|
|
98
|
-
* payloads (and optional previous payloads), so `control` here must not be read
|
|
99
|
-
* as "metadata only."
|
|
100
|
-
*/
|
|
101
|
-
export const DELTA_PHYSICAL_STORAGE = {
|
|
102
|
-
core: 'control',
|
|
103
|
-
attribution: 'control',
|
|
104
|
-
provenance: 'control',
|
|
105
|
-
};
|
|
106
|
-
/** @deprecated Use `DELTA_PHYSICAL_STORAGE`; classification is a separate axis. */
|
|
107
|
-
export const DELTA_RESIDENCY = DELTA_PHYSICAL_STORAGE;
|
|
6
|
+
export * from '../transaction/log/syncDeltaRow.js';
|
package/dist/server/adapter.d.ts
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* database row that the rest of the engine reads and writes.
|
|
17
17
|
*/
|
|
18
18
|
import type { SourceListQuery, SourceOperation, SourceRequestContext } from '../source/index.js';
|
|
19
|
-
import type { ServerSyncDelta } from '../wire/delta.js';
|
|
19
|
+
import type { ServerSyncDelta } from '../transaction/wire/delta.js';
|
|
20
20
|
import type { BootstrapModel } from './readConfig.js';
|
|
21
21
|
import type { CommitContext, CommitResult } from './commit.js';
|
|
22
22
|
import type { StorageMode } from './storageMode.js';
|
|
@@ -41,6 +41,12 @@ export type ReadResult = {
|
|
|
41
41
|
readonly models: Record<string, Row[]>;
|
|
42
42
|
/** Models whose read failed (partial success), if any. */
|
|
43
43
|
readonly failedModels?: string[];
|
|
44
|
+
/**
|
|
45
|
+
* Present when a paged read (`ReadRequest.page`) stopped at its row
|
|
46
|
+
* limit with rows remaining: pass it back as the next page's cursor.
|
|
47
|
+
* Absent on the final page and on unpaged reads.
|
|
48
|
+
*/
|
|
49
|
+
readonly nextCursor?: string;
|
|
44
50
|
} | {
|
|
45
51
|
readonly kind: 'query';
|
|
46
52
|
readonly rows: readonly Row[];
|
|
@@ -93,6 +99,17 @@ export type ReadRequest = {
|
|
|
93
99
|
readonly models: readonly BootstrapModel[];
|
|
94
100
|
readonly requestedModels?: readonly string[];
|
|
95
101
|
readonly scope?: SourceRequestContext;
|
|
102
|
+
/**
|
|
103
|
+
* Keyset pagination for a SINGLE-model read (`requestedModels` names
|
|
104
|
+
* exactly one model): return at most `limit` rows, starting after the
|
|
105
|
+
* row whose id equals `cursor`. The result carries `nextCursor` while
|
|
106
|
+
* rows remain. Ignored for multi-model reads and by adapters whose
|
|
107
|
+
* backend pages upstream on its own.
|
|
108
|
+
*/
|
|
109
|
+
readonly page?: {
|
|
110
|
+
readonly cursor?: string;
|
|
111
|
+
readonly limit: number;
|
|
112
|
+
};
|
|
96
113
|
} | {
|
|
97
114
|
readonly kind: 'query';
|
|
98
115
|
readonly model: string;
|
package/dist/server/commit.d.ts
CHANGED
|
@@ -14,10 +14,10 @@
|
|
|
14
14
|
* rather than being kept in step by hand.
|
|
15
15
|
*/
|
|
16
16
|
import type { ParticipantKind, ConfirmationState } from '../schema/syncDeltaRow.js';
|
|
17
|
-
import type { ParticipantRef } from '../wire/delta.js';
|
|
18
|
-
import type { CommitExecutionResultInput } from '../wire/commit.js';
|
|
19
|
-
import type { Environment } from '../environment.js';
|
|
20
|
-
import type { ReadDependency, TrackDependency } from '../coordination/schema.js';
|
|
17
|
+
import type { ParticipantRef } from '../transaction/wire/delta.js';
|
|
18
|
+
import type { CommitExecutionResultInput } from '../transaction/wire/commit.js';
|
|
19
|
+
import type { Environment } from '../transaction/environment.js';
|
|
20
|
+
import type { ReadDependency, TrackDependency } from '../transaction/coordination/schema.js';
|
|
21
21
|
export interface CommitContext {
|
|
22
22
|
participantId: string;
|
|
23
23
|
/**
|
|
@@ -45,7 +45,7 @@ export interface CommitContext {
|
|
|
45
45
|
* The sync groups this participant subscribes to, taken from the connection
|
|
46
46
|
* upgrade or the capability token. Each is appended to every delta's `sync_groups`
|
|
47
47
|
* so that writes fan out to subscribers of entity-level groups (such as
|
|
48
|
-
* `
|
|
48
|
+
* `report:abc`), not only the default `org:X` and `user:Y` groups. When omitted, the
|
|
49
49
|
* commit fans out to just the organization and user groups.
|
|
50
50
|
*/
|
|
51
51
|
syncGroups?: readonly string[];
|
|
@@ -84,13 +84,7 @@ export interface CommitContext {
|
|
|
84
84
|
*/
|
|
85
85
|
confirmationState?: ConfirmationState;
|
|
86
86
|
/**
|
|
87
|
-
*
|
|
88
|
-
* `caused_by_task_id` column when present. Validated when set; clients typically
|
|
89
|
-
* leave it null and let attribution ride on the actor and capability instead.
|
|
90
|
-
*/
|
|
91
|
-
causedByTaskId?: string | null;
|
|
92
|
-
/**
|
|
93
|
-
* Read dependencies for the whole batch. The committer declares the rows or groups
|
|
87
|
+
* The premise for the whole batch. The committer declares the rows or groups
|
|
94
88
|
* it read to form this batch; the engine checks that none of them changed since
|
|
95
89
|
* each entry's `readAt` timestamp and applies that entry's `onStale` disposition
|
|
96
90
|
* across the batch. This differs from the per-operation `readAt` guard, which
|
|
@@ -98,10 +92,10 @@ export interface CommitContext {
|
|
|
98
92
|
*/
|
|
99
93
|
reads?: ReadDependency[] | null;
|
|
100
94
|
/**
|
|
101
|
-
* Durable
|
|
102
|
-
*
|
|
103
|
-
* later match opens a `StaleNotification` delivered out of band. Distinct
|
|
104
|
-
* `reads`, which is checked once here and discarded.
|
|
95
|
+
* Durable premises to persist for this commit's participant. Each entry is
|
|
96
|
+
* kept in `track_dependencies` and re-checked against every future delta; a
|
|
97
|
+
* later match opens a `StaleNotification` delivered out of band. Distinct
|
|
98
|
+
* from `reads`, which is checked once here and discarded.
|
|
105
99
|
*/
|
|
106
100
|
track?: TrackDependency[] | null;
|
|
107
101
|
}
|
package/dist/server/index.d.ts
CHANGED
|
@@ -9,6 +9,6 @@
|
|
|
9
9
|
*/
|
|
10
10
|
export type { Row, ReadResult, SyncCursor, DataAdapterCapabilities, ProposalResult, ReadRequest, ChangeSet, SyncResult, DataAdapter, ProposableDataAdapter, AdapterResolver, } from './adapter.js';
|
|
11
11
|
export type { CommitContext, CommitResult } from './commit.js';
|
|
12
|
-
export { commitExecutionResultSchema } from '../wire/commit.js';
|
|
12
|
+
export { commitExecutionResultSchema } from '../transaction/wire/commit.js';
|
|
13
13
|
export { storageModeSchema, type StorageMode } from './storageMode.js';
|
|
14
14
|
export type { ColumnOverride, BootstrapModel } from './readConfig.js';
|
package/dist/server/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { commitExecutionResultSchema } from '../wire/commit.js';
|
|
1
|
+
export { commitExecutionResultSchema } from '../transaction/wire/commit.js';
|
|
2
2
|
export { storageModeSchema } from './storageMode.js';
|
|
@@ -23,7 +23,7 @@ export interface BootstrapModel {
|
|
|
23
23
|
/**
|
|
24
24
|
* The schema key used by source endpoints. `name` stays the wire and result model
|
|
25
25
|
* name (usually the typename), while source handlers are keyed by the developer's
|
|
26
|
-
* schema key, such as `files` or `
|
|
26
|
+
* schema key, such as `files` or `blocks`.
|
|
27
27
|
*/
|
|
28
28
|
sourceModel?: string;
|
|
29
29
|
table: string;
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
*/
|
|
36
36
|
import { type SQL } from 'drizzle-orm';
|
|
37
37
|
import type { DataSourceAdapter, Row } from '../adapter.js';
|
|
38
|
-
import type { Schema, SchemaRecord } from '../../schema/schema.js';
|
|
38
|
+
import type { Schema, SchemaRecord } from '../../transaction/schema/schema.js';
|
|
39
39
|
/** The subset of a Drizzle database/transaction handle the adapter calls. */
|
|
40
40
|
export interface DrizzleLike {
|
|
41
41
|
execute(query: SQL): Promise<DrizzleExecuteResult>;
|
|
@@ -33,14 +33,14 @@
|
|
|
33
33
|
* which keeps the adapter one small, fully typed unit with no per-driver builder
|
|
34
34
|
* generics.
|
|
35
35
|
*/
|
|
36
|
-
import { AbloValidationError } from '../../errors.js';
|
|
36
|
+
import { AbloValidationError } from '../../transaction/errors.js';
|
|
37
37
|
import { sql } from 'drizzle-orm';
|
|
38
38
|
import { outboxEventSchema } from '../contract.js';
|
|
39
39
|
import { adapterTableMigrations } from '../migrations.js';
|
|
40
40
|
import { assertSourceIdempotencyIntent, assertSourceIdempotencyRetention, SOURCE_IDEMPOTENCY_RETENTION, sourceChangeIntentHash, } from '../idempotency.js';
|
|
41
41
|
import { toSchemaJSON } from '../../schema/serialize.js';
|
|
42
42
|
import { camelToSnake, snakeToCamel } from '../../schema/ddl.js';
|
|
43
|
-
import { tenancyColumn } from '../../schema/tenancy.js';
|
|
43
|
+
import { tenancyColumn } from '../../transaction/schema/tenancy.js';
|
|
44
44
|
import { ABLO_POSTGRES_COMMIT_ECHO_PREFIX } from '../types.js';
|
|
45
45
|
function rowsOf(result) {
|
|
46
46
|
return Array.isArray(result) ? result : result.rows;
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* If the owner rolls back, the waiter acquires the reservation and performs the
|
|
17
17
|
* mutation. This gives same-key concurrency one database arbiter and one effect.
|
|
18
18
|
*/
|
|
19
|
-
import type { Schema, SchemaRecord } from '../../schema/schema.js';
|
|
19
|
+
import type { Schema, SchemaRecord } from '../../transaction/schema/schema.js';
|
|
20
20
|
import type { DataSourceAdapter, MutationAdapter } from '../adapter.js';
|
|
21
21
|
import { type KyselyLike, type KyselyMutationCore } from './kyselyMutationCore.js';
|
|
22
22
|
export { createKyselyMutationCore, kyselyOperationRowId, type KyselyCompiledQuery, type KyselyDeleteBuilder, type KyselyInsertBuilder, type KyselyInsertValuesBuilder, type KyselyLike, type KyselyMutationCore, type KyselyReturningExecutable, type KyselySelectBuilder, type KyselyTransactionBuilder, type KyselyUpdateBuilder, type KyselyUpdateSetBuilder, } from './kyselyMutationCore.js';
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* If the owner rolls back, the waiter acquires the reservation and performs the
|
|
17
17
|
* mutation. This gives same-key concurrency one database arbiter and one effect.
|
|
18
18
|
*/
|
|
19
|
-
import { AbloValidationError } from '../../errors.js';
|
|
19
|
+
import { AbloValidationError } from '../../transaction/errors.js';
|
|
20
20
|
import { changeSetSchema, outboxEventSchema, sourceCommitEchoMarkerSchema, } from '../contract.js';
|
|
21
21
|
import { assertSourceIdempotencyIntent, assertSourceIdempotencyRetention, sourceChangeIntentHash, SOURCE_IDEMPOTENCY_RETENTION, } from '../idempotency.js';
|
|
22
22
|
import { adapterTableMigrations, idempotencyLedgerMigrations, } from '../migrations.js';
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* the same `applyOperation` implementation, so direct and endpoint DML cannot
|
|
8
8
|
* drift into separate hand-written mappers.
|
|
9
9
|
*/
|
|
10
|
-
import type { Schema, SchemaRecord } from '../../schema/schema.js';
|
|
10
|
+
import type { Schema, SchemaRecord } from '../../transaction/schema/schema.js';
|
|
11
11
|
import type { AdapterReadRequest, Row } from '../adapter.js';
|
|
12
12
|
import type { Operation } from '../contract.js';
|
|
13
13
|
/** The subset of a Kysely instance, or transaction handle, used by the core. */
|
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
* the same `applyOperation` implementation, so direct and endpoint DML cannot
|
|
8
8
|
* drift into separate hand-written mappers.
|
|
9
9
|
*/
|
|
10
|
-
import { AbloValidationError } from '../../errors.js';
|
|
10
|
+
import { AbloValidationError } from '../../transaction/errors.js';
|
|
11
11
|
import { toSchemaJSON } from '../../schema/serialize.js';
|
|
12
12
|
import { camelToSnake, snakeToCamel } from '../../schema/ddl.js';
|
|
13
|
-
import { tenancyColumn } from '../../schema/tenancy.js';
|
|
13
|
+
import { tenancyColumn } from '../../transaction/schema/tenancy.js';
|
|
14
14
|
function buildColumnMaps(schema) {
|
|
15
15
|
const json = toSchemaJSON(schema);
|
|
16
16
|
const out = new Map();
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* idempotency ledger keyed by scoped correlation, and an append-only outbox with a
|
|
10
10
|
* monotonic cursor.
|
|
11
11
|
*/
|
|
12
|
-
import { AbloValidationError } from '../../errors.js';
|
|
12
|
+
import { AbloValidationError } from '../../transaction/errors.js';
|
|
13
13
|
import { assertSourceIdempotencyIntent, sourceChangeIntentHash, } from '../idempotency.js';
|
|
14
14
|
function rowId(op) {
|
|
15
15
|
const id = op.id ?? op.input?.id;
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* call site.
|
|
15
15
|
*/
|
|
16
16
|
import type { DataSourceAdapter, Row } from '../adapter.js';
|
|
17
|
-
import type { SchemaRecord, Schema } from '../../schema/schema.js';
|
|
17
|
+
import type { SchemaRecord, Schema } from '../../transaction/schema/schema.js';
|
|
18
18
|
/** A Prisma model delegate — the subset of its methods the adapter calls. */
|
|
19
19
|
export interface PrismaDelegate {
|
|
20
20
|
findUnique(args: {
|
|
@@ -47,9 +47,14 @@ export interface PrismaRaw {
|
|
|
47
47
|
$executeRawUnsafe(query: string, ...values: unknown[]): Promise<number>;
|
|
48
48
|
$queryRawUnsafe<T = unknown>(query: string, ...values: unknown[]): Promise<T>;
|
|
49
49
|
}
|
|
50
|
-
/**
|
|
50
|
+
/**
|
|
51
|
+
* A Prisma client as a structural shape that needs no `@prisma/client` import.
|
|
52
|
+
* The interactive-transaction callback receives only {@link PrismaRaw}: Prisma's
|
|
53
|
+
* own tx client strips `$transaction` (no nesting), so requiring it there made
|
|
54
|
+
* a real `PrismaClient` unassignable to this shape.
|
|
55
|
+
*/
|
|
51
56
|
export interface PrismaLike extends PrismaRaw {
|
|
52
|
-
$transaction<T>(fn: (tx:
|
|
57
|
+
$transaction<T>(fn: (tx: PrismaRaw) => Promise<T>): Promise<T>;
|
|
53
58
|
}
|
|
54
59
|
export interface PrismaDataSourceOptions {
|
|
55
60
|
/** Map a schema model name → its Prisma delegate name. Default: lower-first-letter. */
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* be tested with a fake, while a real `PrismaClient` satisfies the shape at the
|
|
14
14
|
* call site.
|
|
15
15
|
*/
|
|
16
|
-
import { AbloValidationError } from '../../errors.js';
|
|
16
|
+
import { AbloValidationError } from '../../transaction/errors.js';
|
|
17
17
|
import { outboxEventSchema } from '../contract.js';
|
|
18
18
|
import { adapterTableMigrations } from '../migrations.js';
|
|
19
19
|
import { assertSourceIdempotencyIntent, assertSourceIdempotencyRetention, SOURCE_IDEMPOTENCY_RETENTION, sourceChangeIntentHash, } from '../idempotency.js';
|
package/dist/source/connector.js
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
* the trust model does not.
|
|
25
25
|
*/
|
|
26
26
|
import { SOURCE_CONNECTOR_PROTOCOL_VERSION, SOURCE_CONNECTOR_WS_PATH, sourceConnectorSubprotocols, encodeFrame, decodeFrame, ConnectorProtocolError, } from './connectorProtocol.js';
|
|
27
|
-
import { ABLO_HOSTED_HTTP_BASE_URL } from '../
|
|
27
|
+
import { ABLO_HOSTED_HTTP_BASE_URL } from '../transaction/auth/hostedEndpoints.js';
|
|
28
28
|
/**
|
|
29
29
|
* The default Ablo base URL the connector dials, to which it appends
|
|
30
30
|
* `SOURCE_CONNECTOR_WS_PATH`.
|
|
@@ -64,10 +64,7 @@ export declare const readyFrameSchema: z.ZodObject<{
|
|
|
64
64
|
protocolVersion: z.ZodNumber;
|
|
65
65
|
sourceId: z.ZodOptional<z.ZodString>;
|
|
66
66
|
organizationId: z.ZodOptional<z.ZodString>;
|
|
67
|
-
environment: z.ZodOptional<z.
|
|
68
|
-
production: "production";
|
|
69
|
-
sandbox: "sandbox";
|
|
70
|
-
}>>;
|
|
67
|
+
environment: z.ZodOptional<z.ZodString>;
|
|
71
68
|
}, z.core.$strip>;
|
|
72
69
|
export type ReadyFrame = z.infer<typeof readyFrameSchema>;
|
|
73
70
|
/**
|
|
@@ -120,10 +117,7 @@ export declare const connectorFrameSchema: z.ZodDiscriminatedUnion<[z.ZodObject<
|
|
|
120
117
|
protocolVersion: z.ZodNumber;
|
|
121
118
|
sourceId: z.ZodOptional<z.ZodString>;
|
|
122
119
|
organizationId: z.ZodOptional<z.ZodString>;
|
|
123
|
-
environment: z.ZodOptional<z.
|
|
124
|
-
production: "production";
|
|
125
|
-
sandbox: "sandbox";
|
|
126
|
-
}>>;
|
|
120
|
+
environment: z.ZodOptional<z.ZodString>;
|
|
127
121
|
}, z.core.$strip>, z.ZodObject<{
|
|
128
122
|
type: z.ZodLiteral<"request">;
|
|
129
123
|
id: z.ZodString;
|
|
@@ -20,7 +20,8 @@
|
|
|
20
20
|
* sides infer every wire type from one schema so they cannot silently drift.
|
|
21
21
|
*/
|
|
22
22
|
import { z } from 'zod';
|
|
23
|
-
import {
|
|
23
|
+
import { environmentSchema } from '../transaction/environment.js';
|
|
24
|
+
import { WS_BEARER_SUBPROTOCOL_PREFIX } from '../transaction/auth/credentialSource.js';
|
|
24
25
|
/**
|
|
25
26
|
* The wire-protocol version. It increases on any breaking change to a frame's
|
|
26
27
|
* shape, so a connector and server on mismatched versions fail fast during
|
|
@@ -71,7 +72,7 @@ export const readyFrameSchema = z.object({
|
|
|
71
72
|
protocolVersion: z.number().int(),
|
|
72
73
|
sourceId: z.string().optional(),
|
|
73
74
|
organizationId: z.string().optional(),
|
|
74
|
-
environment:
|
|
75
|
+
environment: environmentSchema.optional(),
|
|
75
76
|
});
|
|
76
77
|
/**
|
|
77
78
|
* A single load, list, or commit request the server forwards to the connector.
|
|
@@ -6,14 +6,20 @@
|
|
|
6
6
|
* one schema that validates it.
|
|
7
7
|
*
|
|
8
8
|
* These schemas describe the adapter's own contract: the change set it commits,
|
|
9
|
-
* the outbox row it stores, and the table migrations it ships.
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
9
|
+
* the outbox row it stores, and the table migrations it ships. The operation
|
|
10
|
+
* vocabulary is not restated here — `operationSchema` is projected from the
|
|
11
|
+
* core's `commitOperationSchema`, so an action or field added to the commit
|
|
12
|
+
* contract reaches a data source by construction. The assertion at the end of
|
|
13
|
+
* this file then pins the published `SourceOperation` interface to that
|
|
14
|
+
* projection, which is what keeps the interface tied to the core rather than
|
|
15
|
+
* merely tied to a second local copy of it.
|
|
14
16
|
*/
|
|
15
17
|
import { z } from 'zod';
|
|
16
|
-
/**
|
|
18
|
+
/**
|
|
19
|
+
* Served, not mirrored. The commit vocabulary is declared once in the core; a
|
|
20
|
+
* data source speaks the same five actions, so it re-exports them rather than
|
|
21
|
+
* listing them again under a second name.
|
|
22
|
+
*/
|
|
17
23
|
export declare const operationTypeSchema: z.ZodEnum<{
|
|
18
24
|
CREATE: "CREATE";
|
|
19
25
|
UPDATE: "UPDATE";
|
|
@@ -23,9 +29,15 @@ export declare const operationTypeSchema: z.ZodEnum<{
|
|
|
23
29
|
}>;
|
|
24
30
|
export type OperationType = z.infer<typeof operationTypeSchema>;
|
|
25
31
|
/**
|
|
26
|
-
* A single operation within a change set, and the runtime validator for it.
|
|
27
|
-
*
|
|
28
|
-
*
|
|
32
|
+
* A single operation within a change set, and the runtime validator for it.
|
|
33
|
+
*
|
|
34
|
+
* The field set is projected from `commitOperationSchema` — an operation
|
|
35
|
+
* reaching a data source is a commit operation minus the two fields the core
|
|
36
|
+
* settles internally (`bypass`, `fenceToken`). The two `min(1)` overrides are
|
|
37
|
+
* deliberate and local: this is a customer-implemented boundary, so an empty
|
|
38
|
+
* model name or row id is rejected here rather than forwarded. Stating them as
|
|
39
|
+
* an extension keeps the tightening visible as a choice instead of hiding it
|
|
40
|
+
* inside a second copy of the shape.
|
|
29
41
|
*/
|
|
30
42
|
export declare const operationSchema: z.ZodObject<{
|
|
31
43
|
type: z.ZodEnum<{
|
|
@@ -35,16 +47,16 @@ export declare const operationSchema: z.ZodObject<{
|
|
|
35
47
|
ARCHIVE: "ARCHIVE";
|
|
36
48
|
UNARCHIVE: "UNARCHIVE";
|
|
37
49
|
}>;
|
|
38
|
-
model: z.ZodString;
|
|
39
|
-
id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
40
|
-
input: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
41
|
-
transactionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
42
50
|
readAt: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
43
51
|
onStale: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
44
52
|
reject: "reject";
|
|
45
53
|
overwrite: "overwrite";
|
|
46
54
|
notify: "notify";
|
|
47
55
|
}>>>;
|
|
56
|
+
transactionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
57
|
+
model: z.ZodString;
|
|
58
|
+
id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
59
|
+
input: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
48
60
|
}, z.core.$strip>;
|
|
49
61
|
export type Operation = z.infer<typeof operationSchema>;
|
|
50
62
|
/** The supported customer-transaction echo mechanism. */
|
|
@@ -92,16 +104,16 @@ export declare const changeSetSchema: z.ZodObject<{
|
|
|
92
104
|
ARCHIVE: "ARCHIVE";
|
|
93
105
|
UNARCHIVE: "UNARCHIVE";
|
|
94
106
|
}>;
|
|
95
|
-
model: z.ZodString;
|
|
96
|
-
id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
97
|
-
input: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
98
|
-
transactionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
99
107
|
readAt: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
100
108
|
onStale: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
101
109
|
reject: "reject";
|
|
102
110
|
overwrite: "overwrite";
|
|
103
111
|
notify: "notify";
|
|
104
112
|
}>>>;
|
|
113
|
+
transactionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
114
|
+
model: z.ZodString;
|
|
115
|
+
id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
116
|
+
input: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
105
117
|
}, z.core.$strip>>;
|
|
106
118
|
correlationId: z.ZodString;
|
|
107
119
|
intentHash: z.ZodOptional<z.ZodString>;
|
package/dist/source/contract.js
CHANGED
|
@@ -6,37 +6,42 @@
|
|
|
6
6
|
* one schema that validates it.
|
|
7
7
|
*
|
|
8
8
|
* These schemas describe the adapter's own contract: the change set it commits,
|
|
9
|
-
* the outbox row it stores, and the table migrations it ships.
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
9
|
+
* the outbox row it stores, and the table migrations it ships. The operation
|
|
10
|
+
* vocabulary is not restated here — `operationSchema` is projected from the
|
|
11
|
+
* core's `commitOperationSchema`, so an action or field added to the commit
|
|
12
|
+
* contract reaches a data source by construction. The assertion at the end of
|
|
13
|
+
* this file then pins the published `SourceOperation` interface to that
|
|
14
|
+
* projection, which is what keeps the interface tied to the core rather than
|
|
15
|
+
* merely tied to a second local copy of it.
|
|
14
16
|
*/
|
|
15
17
|
import { z } from 'zod';
|
|
16
|
-
import { correlationIdSchema } from '../wire/commit.js';
|
|
18
|
+
import { correlationIdSchema } from '../transaction/wire/commit.js';
|
|
19
|
+
import { commitOperationSchema, commitOperationTypeSchema, } from '../transaction/coordination/schema.js';
|
|
17
20
|
import { ABLO_SOURCE_CLIENT_TX_ID_MAX_LENGTH, ABLO_SOURCE_ECHO_MAX_OPERATIONS, ABLO_SOURCE_ECHO_MAX_PAYLOAD_BYTES, } from './types.js';
|
|
18
21
|
const jsonObject = z.record(z.string(), z.unknown());
|
|
19
|
-
/** Mirrors `SourceOperation['type']`. */
|
|
20
|
-
export const operationTypeSchema = z.enum([
|
|
21
|
-
'CREATE',
|
|
22
|
-
'UPDATE',
|
|
23
|
-
'DELETE',
|
|
24
|
-
'ARCHIVE',
|
|
25
|
-
'UNARCHIVE',
|
|
26
|
-
]);
|
|
27
22
|
/**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
23
|
+
* Served, not mirrored. The commit vocabulary is declared once in the core; a
|
|
24
|
+
* data source speaks the same five actions, so it re-exports them rather than
|
|
25
|
+
* listing them again under a second name.
|
|
31
26
|
*/
|
|
32
|
-
export const
|
|
33
|
-
|
|
27
|
+
export const operationTypeSchema = commitOperationTypeSchema;
|
|
28
|
+
/**
|
|
29
|
+
* A single operation within a change set, and the runtime validator for it.
|
|
30
|
+
*
|
|
31
|
+
* The field set is projected from `commitOperationSchema` — an operation
|
|
32
|
+
* reaching a data source is a commit operation minus the two fields the core
|
|
33
|
+
* settles internally (`bypass`, `fenceToken`). The two `min(1)` overrides are
|
|
34
|
+
* deliberate and local: this is a customer-implemented boundary, so an empty
|
|
35
|
+
* model name or row id is rejected here rather than forwarded. Stating them as
|
|
36
|
+
* an extension keeps the tightening visible as a choice instead of hiding it
|
|
37
|
+
* inside a second copy of the shape.
|
|
38
|
+
*/
|
|
39
|
+
export const operationSchema = commitOperationSchema
|
|
40
|
+
.omit({ bypass: true, fenceToken: true })
|
|
41
|
+
.extend({
|
|
34
42
|
model: z.string().min(1),
|
|
35
43
|
id: z.string().min(1).nullish(),
|
|
36
44
|
input: jsonObject.nullish(),
|
|
37
|
-
transactionId: z.string().nullish(),
|
|
38
|
-
readAt: z.number().nullish(),
|
|
39
|
-
onStale: z.enum(['reject', 'overwrite', 'notify']).nullish(),
|
|
40
45
|
});
|
|
41
46
|
/** The supported customer-transaction echo mechanism. */
|
|
42
47
|
export const sourceCommitEchoSchema = z.object({
|
package/dist/source/factory.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* enforces the per-key scopes, and routes the four wire operations (`load`,
|
|
6
6
|
* `list`, `commit`, and `events`) to whichever handlers you configured.
|
|
7
7
|
*/
|
|
8
|
-
import type { Schema, SchemaRecord, InferCreate } from '../schema/schema.js';
|
|
8
|
+
import type { Schema, SchemaRecord, InferCreate } from '../transaction/schema/schema.js';
|
|
9
9
|
import type { DataSourceAdapter } from './adapter.js';
|
|
10
10
|
import type { SourceApiKey, SourceAuthorizeContext, SourceCommitHandler, SourceEventsHandler, SourceModelHandlers, SourceRequest, SourceScope } from './types.js';
|
|
11
11
|
type SourceModels<S extends SchemaRecord, TAuth> = Partial<{
|