@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
|
@@ -26,12 +26,12 @@
|
|
|
26
26
|
* - exact Zod refinements, which are rebuilt as permissive validators from
|
|
27
27
|
* {@link FieldMeta}; the server does no field-shape validation
|
|
28
28
|
*/
|
|
29
|
-
import type { FieldMeta } from '
|
|
30
|
-
import type { Tenancy } from '
|
|
31
|
-
import type { ModelResidency } from '
|
|
32
|
-
import type { GrantsRef, LoadStrategy, PersistOptions, AutoFillRule, ConflictAxis } from '
|
|
33
|
-
import type { RelationType } from '
|
|
34
|
-
import { type Schema, type IdentityRole, type EntityRole, type SessionSettings } from '
|
|
29
|
+
import type { FieldMeta } from '../transaction/schema/field.js';
|
|
30
|
+
import type { Tenancy } from '../transaction/schema/tenancy.js';
|
|
31
|
+
import type { ModelResidency } from '../transaction/schema/residency.js';
|
|
32
|
+
import type { GrantsRef, LoadStrategy, PersistOptions, AutoFillRule, ConflictAxis } from '../transaction/schema/model.js';
|
|
33
|
+
import type { RelationType } from '../transaction/schema/relation.js';
|
|
34
|
+
import { type Schema, type IdentityRole, type EntityRole, type SessionSettings } from '../transaction/schema/schema.js';
|
|
35
35
|
/** Current schema-JSON envelope version. Bump this on a breaking change to the
|
|
36
36
|
* JSON shape itself — not to a user's schema. */
|
|
37
37
|
declare const SCHEMA_JSON_VERSION: 3;
|
|
@@ -103,4 +103,13 @@ export declare function parseSchema(json: string): Schema;
|
|
|
103
103
|
* active schema hash. Not a security primitive.
|
|
104
104
|
*/
|
|
105
105
|
export declare function schemaHash(schema: Schema): string;
|
|
106
|
+
/**
|
|
107
|
+
* Content hash of ONE serialized model — the unit of the semantic drift check.
|
|
108
|
+
* Two schemas agree on a model exactly when these match, which is what lets a
|
|
109
|
+
* client compare only the models it declares instead of welding itself to the
|
|
110
|
+
* whole-schema hash (where any additive push reads as drift). Computed over the
|
|
111
|
+
* model's `SchemaJSON` entry with the same canonicalization and hash as
|
|
112
|
+
* {@link schemaHash}, on both the client and the server's `GET /api/schema`.
|
|
113
|
+
*/
|
|
114
|
+
export declare function modelHash(modelJson: unknown): string;
|
|
106
115
|
export {};
|
package/dist/schema/serialize.js
CHANGED
|
@@ -27,8 +27,9 @@
|
|
|
27
27
|
* {@link FieldMeta}; the server does no field-shape validation
|
|
28
28
|
*/
|
|
29
29
|
import { z } from 'zod';
|
|
30
|
-
import { AbloValidationError } from '../errors.js';
|
|
31
|
-
import {
|
|
30
|
+
import { AbloValidationError } from '../transaction/errors.js';
|
|
31
|
+
import { buildFieldRefs } from '../transaction/schema/schema.js';
|
|
32
|
+
import { baseFieldsSchema, } from '../transaction/schema/schema.js';
|
|
32
33
|
/** Current schema-JSON envelope version. Bump this on a breaking change to the
|
|
33
34
|
* JSON shape itself — not to a user's schema. */
|
|
34
35
|
const SCHEMA_JSON_VERSION = 3;
|
|
@@ -205,6 +206,8 @@ export function fromSchemaJSON(json) {
|
|
|
205
206
|
}
|
|
206
207
|
return {
|
|
207
208
|
models: models,
|
|
209
|
+
// A schema rebuilt from JSON carries references too — the shapes are here.
|
|
210
|
+
fields: buildFieldRefs(models),
|
|
208
211
|
validators: validators,
|
|
209
212
|
identityRoles: json.identityRoles,
|
|
210
213
|
sessionSettings: json.sessionSettings ?? {},
|
|
@@ -227,7 +230,21 @@ export function parseSchema(json) {
|
|
|
227
230
|
* active schema hash. Not a security primitive.
|
|
228
231
|
*/
|
|
229
232
|
export function schemaHash(schema) {
|
|
230
|
-
|
|
233
|
+
return fnv1a(canonicalJson(toSchemaJSON(schema)));
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Content hash of ONE serialized model — the unit of the semantic drift check.
|
|
237
|
+
* Two schemas agree on a model exactly when these match, which is what lets a
|
|
238
|
+
* client compare only the models it declares instead of welding itself to the
|
|
239
|
+
* whole-schema hash (where any additive push reads as drift). Computed over the
|
|
240
|
+
* model's `SchemaJSON` entry with the same canonicalization and hash as
|
|
241
|
+
* {@link schemaHash}, on both the client and the server's `GET /api/schema`.
|
|
242
|
+
*/
|
|
243
|
+
export function modelHash(modelJson) {
|
|
244
|
+
return fnv1a(canonicalJson(modelJson));
|
|
245
|
+
}
|
|
246
|
+
/** FNV-1a over an already-canonical string — shared by both hashes above. */
|
|
247
|
+
function fnv1a(canonical) {
|
|
231
248
|
let h = 0x811c9dc5;
|
|
232
249
|
for (let i = 0; i < canonical.length; i++) {
|
|
233
250
|
h ^= canonical.charCodeAt(i);
|
package/dist/schema/sugar.d.ts
CHANGED
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
* ```
|
|
24
24
|
*/
|
|
25
25
|
import type { z } from 'zod';
|
|
26
|
-
import { type ModelDef, type ModelOptions, type ComputedRecord, type RelationRecord } from '
|
|
26
|
+
import { type ModelDef, type ModelOptions, type ComputedRecord, type RelationRecord } from '../transaction/schema/model.js';
|
|
27
27
|
/**
|
|
28
28
|
* Options accepted by every sugar verb. A strict subset of
|
|
29
29
|
* {@link ModelOptions} — anything the verb infers (`mutable`, `load`,
|
|
@@ -79,13 +79,11 @@ export interface SugarOptions<R extends RelationRecord = RelationRecord, C exten
|
|
|
79
79
|
* Pick the load suffix by data-access pattern:
|
|
80
80
|
* - `.instant` — small, always-needed (Theme, Layout, StatusGroup)
|
|
81
81
|
* - `.lazy` — large collections fetched on first query
|
|
82
|
-
* (
|
|
83
|
-
* - `.manual` — never auto-loaded; explicit queries only
|
|
82
|
+
* (Block, Message, Task)
|
|
84
83
|
*/
|
|
85
84
|
export declare const mutable: {
|
|
86
85
|
instant: <Shape extends z.ZodRawShape, R extends RelationRecord = Record<string, never>, C extends ComputedRecord = Record<string, never>>(shape: Shape, opts?: SugarOptions<R, C>) => ModelDef<Shape, R, C>;
|
|
87
86
|
lazy: <Shape extends z.ZodRawShape, R extends RelationRecord = Record<string, never>, C extends ComputedRecord = Record<string, never>>(shape: Shape, opts?: SugarOptions<R, C>) => ModelDef<Shape, R, C>;
|
|
88
|
-
manual: <Shape extends z.ZodRawShape, R extends RelationRecord = Record<string, never>, C extends ComputedRecord = Record<string, never>>(shape: Shape, opts?: SugarOptions<R, C>) => ModelDef<Shape, R, C>;
|
|
89
87
|
};
|
|
90
88
|
/**
|
|
91
89
|
* Server-managed entities. `readOnly.*` means clients subscribe to
|
|
@@ -102,9 +100,10 @@ export declare const readOnly: {
|
|
|
102
100
|
instant: <Shape extends z.ZodRawShape, R extends RelationRecord = Record<string, never>, C extends ComputedRecord = Record<string, never>>(shape: Shape, opts?: SugarOptions<R, C>) => ModelDef<Shape, R, C>;
|
|
103
101
|
lazy: <Shape extends z.ZodRawShape, R extends RelationRecord = Record<string, never>, C extends ComputedRecord = Record<string, never>>(shape: Shape, opts?: SugarOptions<R, C>) => ModelDef<Shape, R, C>;
|
|
104
102
|
/**
|
|
105
|
-
* Internal-only:
|
|
106
|
-
* strongest safety posture — use for tables the SDK must know about
|
|
107
|
-
*
|
|
103
|
+
* Internal-only: kept out of bootstrap and never written by clients. The
|
|
104
|
+
* strongest safety posture — use for tables the SDK must know about (for type
|
|
105
|
+
* inference) but that no client should be able to write. Rows still reach a
|
|
106
|
+
* client that reads the model, so this is a write boundary, not a read one.
|
|
108
107
|
*/
|
|
109
108
|
internal: <Shape extends z.ZodRawShape, R extends RelationRecord = Record<string, never>, C extends ComputedRecord = Record<string, never>>(shape: Shape, opts?: SugarOptions<R, C>) => ModelDef<Shape, R, C>;
|
|
110
109
|
};
|
package/dist/schema/sugar.js
CHANGED
|
@@ -22,11 +22,10 @@
|
|
|
22
22
|
* }),
|
|
23
23
|
* ```
|
|
24
24
|
*/
|
|
25
|
-
import { model, } from '
|
|
25
|
+
import { model, } from '../transaction/schema/model.js';
|
|
26
26
|
/** Internal helper — builds a ModelDef with baseline safety+load flags applied. */
|
|
27
27
|
function build(shape, opts, baseline) {
|
|
28
|
-
return model(shape, (opts?.relations ?? {}),
|
|
29
|
-
mutable: baseline.mutable,
|
|
28
|
+
return model(shape, { relations: (opts?.relations ?? {}), mutable: baseline.mutable,
|
|
30
29
|
load: baseline.load,
|
|
31
30
|
lazyObservable: opts?.lazyObservable ?? baseline.lazyObservable,
|
|
32
31
|
typename: opts?.typename,
|
|
@@ -36,8 +35,7 @@ function build(shape, opts, baseline) {
|
|
|
36
35
|
bootstrapLimit: opts?.bootstrapLimit,
|
|
37
36
|
bootstrapOrderBy: opts?.bootstrapOrderBy,
|
|
38
37
|
persist: opts?.persist,
|
|
39
|
-
computed: opts?.computed,
|
|
40
|
-
});
|
|
38
|
+
computed: opts?.computed, });
|
|
41
39
|
}
|
|
42
40
|
/**
|
|
43
41
|
* Client-writable entities. `mutable.*` is the opt-in signal for wire
|
|
@@ -47,8 +45,7 @@ function build(shape, opts, baseline) {
|
|
|
47
45
|
* Pick the load suffix by data-access pattern:
|
|
48
46
|
* - `.instant` — small, always-needed (Theme, Layout, StatusGroup)
|
|
49
47
|
* - `.lazy` — large collections fetched on first query
|
|
50
|
-
* (
|
|
51
|
-
* - `.manual` — never auto-loaded; explicit queries only
|
|
48
|
+
* (Block, Message, Task)
|
|
52
49
|
*/
|
|
53
50
|
export const mutable = {
|
|
54
51
|
instant: (shape, opts) =>
|
|
@@ -56,7 +53,6 @@ export const mutable = {
|
|
|
56
53
|
// `lazyObservable: false` only for very large read-only list models.
|
|
57
54
|
build(shape, opts, { mutable: true, load: 'instant', lazyObservable: true }),
|
|
58
55
|
lazy: (shape, opts) => build(shape, opts, { mutable: true, load: 'lazy', lazyObservable: true }),
|
|
59
|
-
manual: (shape, opts) => build(shape, opts, { mutable: true, load: 'manual', lazyObservable: true }),
|
|
60
56
|
};
|
|
61
57
|
/**
|
|
62
58
|
* Server-managed entities. `readOnly.*` means clients subscribe to
|
|
@@ -78,9 +74,10 @@ export const readOnly = {
|
|
|
78
74
|
build(shape, opts, { mutable: false, load: 'instant', lazyObservable: true }),
|
|
79
75
|
lazy: (shape, opts) => build(shape, opts, { mutable: false, load: 'lazy', lazyObservable: true }),
|
|
80
76
|
/**
|
|
81
|
-
* Internal-only:
|
|
82
|
-
* strongest safety posture — use for tables the SDK must know about
|
|
83
|
-
*
|
|
77
|
+
* Internal-only: kept out of bootstrap and never written by clients. The
|
|
78
|
+
* strongest safety posture — use for tables the SDK must know about (for type
|
|
79
|
+
* inference) but that no client should be able to write. Rows still reach a
|
|
80
|
+
* client that reads the model, so this is a write boundary, not a read one.
|
|
84
81
|
*/
|
|
85
|
-
internal: (shape, opts) => build(shape, opts, { mutable: false, load: '
|
|
82
|
+
internal: (shape, opts) => build(shape, opts, { mutable: false, load: 'lazy', lazyObservable: true }),
|
|
86
83
|
};
|
|
@@ -1,154 +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
|
-
export { participantKindSchema, confirmationStateSchema } from '../wire/delta.js';
|
|
25
|
-
export type { ParticipantKind, ConfirmationState } from '../wire/delta.js';
|
|
26
|
-
/** `backfill_provenance` */
|
|
27
|
-
export declare const backfillProvenanceSchema: z.ZodEnum<{
|
|
28
|
-
unknown: "unknown";
|
|
29
|
-
exact: "exact";
|
|
30
|
-
inferred: "inferred";
|
|
31
|
-
}>;
|
|
32
|
-
export type BackfillProvenance = z.infer<typeof backfillProvenanceSchema>;
|
|
33
|
-
/**
|
|
34
|
-
* Everything a client needs to materialize the change, plus the tenant key. This
|
|
35
|
-
* is the portable shape an authoritative WAL change or endpoint event carries.
|
|
36
|
-
* The runtime persists the resulting full row in Ablo's tenant-scoped ordered
|
|
37
|
-
* sync log; it is not written atomically with a direct application-row mutation.
|
|
38
|
-
* `id`, `createdAt`, and `syncGroups` are assigned when the source change is
|
|
39
|
-
* appended, so they are optional at the ingestion boundary.
|
|
40
|
-
*/
|
|
41
|
-
export declare const syncDeltaCoreSchema: z.ZodObject<{
|
|
42
|
-
id: z.ZodOptional<z.ZodUnion<readonly [z.ZodBigInt, z.ZodNumber]>>;
|
|
43
|
-
actionType: z.ZodString;
|
|
44
|
-
modelName: z.ZodString;
|
|
45
|
-
modelId: z.ZodString;
|
|
46
|
-
data: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
47
|
-
previousData: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
48
|
-
syncGroups: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
49
|
-
organizationId: z.ZodNullable<z.ZodString>;
|
|
50
|
-
createdAt: z.ZodOptional<z.ZodString>;
|
|
51
|
-
transactionId: z.ZodNullable<z.ZodString>;
|
|
52
|
-
sourceChangeId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
53
|
-
}, z.core.$strip>;
|
|
54
|
-
export type SyncDeltaCore = z.infer<typeof syncDeltaCoreSchema>;
|
|
55
|
-
export declare const deltaAttributionSchema: z.ZodObject<{
|
|
56
|
-
createdBy: z.ZodNullable<z.ZodString>;
|
|
57
|
-
actorId: z.ZodNullable<z.ZodString>;
|
|
58
|
-
actorKind: z.ZodNullable<z.ZodEnum<{
|
|
59
|
-
user: "user";
|
|
60
|
-
agent: "agent";
|
|
61
|
-
system: "system";
|
|
62
|
-
}>>;
|
|
63
|
-
onBehalfOfId: z.ZodNullable<z.ZodString>;
|
|
64
|
-
onBehalfOfKind: z.ZodNullable<z.ZodEnum<{
|
|
65
|
-
user: "user";
|
|
66
|
-
agent: "agent";
|
|
67
|
-
system: "system";
|
|
68
|
-
}>>;
|
|
69
|
-
capabilityId: z.ZodNullable<z.ZodString>;
|
|
70
|
-
delegationChainRootUserId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
71
|
-
confirmationState: z.ZodNullable<z.ZodEnum<{
|
|
72
|
-
auto: "auto";
|
|
73
|
-
previewed: "previewed";
|
|
74
|
-
approved: "approved";
|
|
75
|
-
required_human_approval: "required_human_approval";
|
|
76
|
-
auto_historical: "auto_historical";
|
|
77
|
-
}>>;
|
|
78
|
-
backfillProvenance: z.ZodNullable<z.ZodEnum<{
|
|
79
|
-
unknown: "unknown";
|
|
80
|
-
exact: "exact";
|
|
81
|
-
inferred: "inferred";
|
|
82
|
-
}>>;
|
|
83
|
-
}, z.core.$strip>;
|
|
84
|
-
export type DeltaAttribution = z.infer<typeof deltaAttributionSchema>;
|
|
85
|
-
export declare const deltaProvenanceSchema: z.ZodObject<{
|
|
86
|
-
causedByTaskId: z.ZodNullable<z.ZodString>;
|
|
87
|
-
}, z.core.$strip>;
|
|
88
|
-
export type DeltaProvenance = z.infer<typeof deltaProvenanceSchema>;
|
|
89
|
-
/** The complete `sync_deltas` row: core, attribution, and provenance combined. */
|
|
90
|
-
export declare const syncDeltaRowSchema: z.ZodObject<{
|
|
91
|
-
id: z.ZodOptional<z.ZodUnion<readonly [z.ZodBigInt, z.ZodNumber]>>;
|
|
92
|
-
actionType: z.ZodString;
|
|
93
|
-
modelName: z.ZodString;
|
|
94
|
-
modelId: z.ZodString;
|
|
95
|
-
data: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
96
|
-
previousData: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
97
|
-
syncGroups: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
98
|
-
organizationId: z.ZodNullable<z.ZodString>;
|
|
99
|
-
createdAt: z.ZodOptional<z.ZodString>;
|
|
100
|
-
transactionId: z.ZodNullable<z.ZodString>;
|
|
101
|
-
sourceChangeId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
102
|
-
createdBy: z.ZodNullable<z.ZodString>;
|
|
103
|
-
actorId: z.ZodNullable<z.ZodString>;
|
|
104
|
-
actorKind: z.ZodNullable<z.ZodEnum<{
|
|
105
|
-
user: "user";
|
|
106
|
-
agent: "agent";
|
|
107
|
-
system: "system";
|
|
108
|
-
}>>;
|
|
109
|
-
onBehalfOfId: z.ZodNullable<z.ZodString>;
|
|
110
|
-
onBehalfOfKind: z.ZodNullable<z.ZodEnum<{
|
|
111
|
-
user: "user";
|
|
112
|
-
agent: "agent";
|
|
113
|
-
system: "system";
|
|
114
|
-
}>>;
|
|
115
|
-
capabilityId: z.ZodNullable<z.ZodString>;
|
|
116
|
-
delegationChainRootUserId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
117
|
-
confirmationState: z.ZodNullable<z.ZodEnum<{
|
|
118
|
-
auto: "auto";
|
|
119
|
-
previewed: "previewed";
|
|
120
|
-
approved: "approved";
|
|
121
|
-
required_human_approval: "required_human_approval";
|
|
122
|
-
auto_historical: "auto_historical";
|
|
123
|
-
}>>;
|
|
124
|
-
backfillProvenance: z.ZodNullable<z.ZodEnum<{
|
|
125
|
-
unknown: "unknown";
|
|
126
|
-
exact: "exact";
|
|
127
|
-
inferred: "inferred";
|
|
128
|
-
}>>;
|
|
129
|
-
causedByTaskId: z.ZodNullable<z.ZodString>;
|
|
130
|
-
}, z.core.$strip>;
|
|
131
|
-
export type SyncDeltaRow = z.infer<typeof syncDeltaRowSchema>;
|
|
132
|
-
/** Which slices contain retained customer row data versus control metadata. */
|
|
133
|
-
export declare const DELTA_DATA_CLASSIFICATION: {
|
|
134
|
-
readonly core: "customer-data";
|
|
135
|
-
readonly attribution: "control-metadata";
|
|
136
|
-
readonly provenance: "control-metadata";
|
|
137
|
-
};
|
|
138
|
-
/**
|
|
139
|
-
* Where the current runtime physically persists each slice. All three live in
|
|
140
|
-
* Ablo's tenant-scoped `sync_deltas` log. `core` contains full post-change row
|
|
141
|
-
* payloads (and optional previous payloads), so `control` here must not be read
|
|
142
|
-
* as "metadata only."
|
|
143
|
-
*/
|
|
144
|
-
export declare const DELTA_PHYSICAL_STORAGE: {
|
|
145
|
-
readonly core: "control";
|
|
146
|
-
readonly attribution: "control";
|
|
147
|
-
readonly provenance: "control";
|
|
148
|
-
};
|
|
149
|
-
/** @deprecated Use `DELTA_PHYSICAL_STORAGE`; classification is a separate axis. */
|
|
150
|
-
export declare const DELTA_RESIDENCY: {
|
|
151
|
-
readonly core: "control";
|
|
152
|
-
readonly attribution: "control";
|
|
153
|
-
readonly provenance: "control";
|
|
154
|
-
};
|
|
6
|
+
export * from '../transaction/log/syncDeltaRow.js';
|
|
@@ -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;
|
package/dist/source/adapter.d.ts
CHANGED
|
@@ -8,16 +8,18 @@
|
|
|
8
8
|
* write your own.
|
|
9
9
|
*
|
|
10
10
|
* An endpoint adapter reads and writes your database, and it owns the transactional
|
|
11
|
-
* outbox and idempotency bookkeeping as well, so you never write those by hand
|
|
11
|
+
* outbox and idempotency bookkeeping as well, so you never write those by hand.
|
|
12
|
+
* Hand it to the handler in one slot:
|
|
12
13
|
*
|
|
13
14
|
* export const POST = dataSource({
|
|
14
15
|
* schema, apiKey: process.env.ABLO_API_KEY!,
|
|
15
|
-
*
|
|
16
|
+
* adapter: prismaDataSource(prisma, schema),
|
|
16
17
|
* });
|
|
17
18
|
*
|
|
18
|
-
*
|
|
19
|
-
* handler's `commit`, `events`,
|
|
20
|
-
*
|
|
19
|
+
* That is the path to teach. {@link sourceHandlersFromAdapter} is the lower-level
|
|
20
|
+
* bridge behind it — it expands one adapter into the handler's `commit`, `events`,
|
|
21
|
+
* and per-model `load` and `list` operations, and is worth reaching for only when
|
|
22
|
+
* you want to override one of those while the adapter serves the rest.
|
|
21
23
|
*/
|
|
22
24
|
import type { SourceListQuery, SourceRequestContext } from './types.js';
|
|
23
25
|
import type { AdapterCapabilities, ChangeSet, EventsPage, Migration } from './contract.js';
|
package/dist/source/adapter.js
CHANGED
|
@@ -8,15 +8,17 @@
|
|
|
8
8
|
* write your own.
|
|
9
9
|
*
|
|
10
10
|
* An endpoint adapter reads and writes your database, and it owns the transactional
|
|
11
|
-
* outbox and idempotency bookkeeping as well, so you never write those by hand
|
|
11
|
+
* outbox and idempotency bookkeeping as well, so you never write those by hand.
|
|
12
|
+
* Hand it to the handler in one slot:
|
|
12
13
|
*
|
|
13
14
|
* export const POST = dataSource({
|
|
14
15
|
* schema, apiKey: process.env.ABLO_API_KEY!,
|
|
15
|
-
*
|
|
16
|
+
* adapter: prismaDataSource(prisma, schema),
|
|
16
17
|
* });
|
|
17
18
|
*
|
|
18
|
-
*
|
|
19
|
-
* handler's `commit`, `events`,
|
|
20
|
-
*
|
|
19
|
+
* That is the path to teach. {@link sourceHandlersFromAdapter} is the lower-level
|
|
20
|
+
* bridge behind it — it expands one adapter into the handler's `commit`, `events`,
|
|
21
|
+
* and per-model `load` and `list` operations, and is worth reaching for only when
|
|
22
|
+
* you want to override one of those while the adapter serves the rest.
|
|
21
23
|
*/
|
|
22
24
|
export {};
|
|
@@ -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;
|