@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
|
@@ -5,7 +5,7 @@ import { Ablo } from '../client/Ablo.js';
|
|
|
5
5
|
import { createParticipantClaimId, parseParticipantTtlSeconds, resolveParticipantSyncGroups, } from '../sync/participants.js';
|
|
6
6
|
import { SyncContext } from './context.js';
|
|
7
7
|
import { AbloInternalContext } from './internalContext.js';
|
|
8
|
-
import { AbloValidationError } from '../errors.js';
|
|
8
|
+
import { AbloValidationError } from '../transaction/errors.js';
|
|
9
9
|
import { useSyncStatus } from './useSyncStatus.js';
|
|
10
10
|
import { DefaultFallback } from './DefaultFallback.js';
|
|
11
11
|
// ── Implementation ───────────────────────────────────────────────────
|
|
@@ -224,8 +224,8 @@ export function useJoin(opts) {
|
|
|
224
224
|
const ctx = useContext(AbloInternalContext);
|
|
225
225
|
const engine = ctx?.engine ?? null;
|
|
226
226
|
const { paused = false } = opts;
|
|
227
|
-
// Resolve the model-form scope ({
|
|
228
|
-
// model's declared `scope` kind is honored (typename `
|
|
227
|
+
// Resolve the model-form scope ({ reports: id } / refs) THROUGH the schema, so a
|
|
228
|
+
// model's declared `scope` kind is honored (typename `Report` → `report:<id>`,
|
|
229
229
|
// not the `type:id` string fallback). Schema appears once the engine is ready;
|
|
230
230
|
// until then refs resolve by convention, then re-resolve when it arrives.
|
|
231
231
|
const scopeKey = JSON.stringify(resolveParticipantSyncGroups(opts.scope, engine?.schema).sort());
|
|
@@ -298,8 +298,6 @@ export function useJoin(opts) {
|
|
|
298
298
|
if (syncStatus.name !== 'connected')
|
|
299
299
|
return;
|
|
300
300
|
const ws = engine._ws;
|
|
301
|
-
if (!ws)
|
|
302
|
-
return;
|
|
303
301
|
const store = engine._store;
|
|
304
302
|
let cancelled = false;
|
|
305
303
|
const claimId = createParticipantClaimId();
|
|
@@ -370,7 +368,7 @@ export function useJoin(opts) {
|
|
|
370
368
|
* subscription on unmount).
|
|
371
369
|
*
|
|
372
370
|
* ```ts
|
|
373
|
-
* const peers = usePeers({
|
|
371
|
+
* const peers = usePeers({ reports: reportId });
|
|
374
372
|
* const alone = !peers.some((p) => p.participantKind === 'user');
|
|
375
373
|
* ```
|
|
376
374
|
*/
|
|
@@ -408,7 +406,7 @@ export function usePeers(scope) {
|
|
|
408
406
|
*
|
|
409
407
|
* The generic parameter narrows the return type to your schema's
|
|
410
408
|
* model record so call sites get typed `sync.tasks.findMany()` /
|
|
411
|
-
* `sync.
|
|
409
|
+
* `sync.sections.create(...)` without a cast at the call site:
|
|
412
410
|
*
|
|
413
411
|
* ```ts
|
|
414
412
|
* const sync = useSync<(typeof schema)['models']>();
|
package/dist/react/context.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ReactNode } from 'react';
|
|
2
|
-
import type { Schema } from '../schema/schema.js';
|
|
2
|
+
import type { Schema } from '../transaction/schema/schema.js';
|
|
3
3
|
import type { SyncStoreContract } from '../core/storeContract.js';
|
|
4
4
|
export type { SyncStoreContract, LocalMutation } from '../core/storeContract.js';
|
|
5
5
|
export interface SyncReactContext {
|
package/dist/react/context.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { createContext, createElement, useContext } from 'react';
|
|
3
|
-
import { AbloValidationError } from '../errors.js';
|
|
3
|
+
import { AbloValidationError } from '../transaction/errors.js';
|
|
4
4
|
export const SyncContext = createContext(null);
|
|
5
5
|
/**
|
|
6
6
|
* Reads the sync store context from inside a provider subtree, throwing a clear
|
package/dist/react/index.d.ts
CHANGED
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
*
|
|
22
22
|
* # Data hooks
|
|
23
23
|
*
|
|
24
|
-
* useAblo((ablo) => ablo.tasks.
|
|
24
|
+
* useAblo((ablo) => ablo.tasks.local.retrieve(id)) — subscribe to a local snapshot (the main read API)
|
|
25
25
|
* useAblo() — the typed client, for callbacks and effects:
|
|
26
|
-
* synchronous local reads (`ablo.<model>.
|
|
26
|
+
* synchronous local reads (`ablo.<model>.local.retrieve`/`local.list`),
|
|
27
27
|
* async server reads (`retrieve`/`list`),
|
|
28
28
|
* and writes (`create`/`update`/`delete`)
|
|
29
29
|
* useMutators(defs, opts?) — define custom mutators
|
|
@@ -43,8 +43,8 @@
|
|
|
43
43
|
* useAblo((ablo) => ablo.<model>.claim.state(...)) — reactive coordination reads
|
|
44
44
|
* useJoin({ scope }) — join a scope to get its peers and claims
|
|
45
45
|
*/
|
|
46
|
-
export type { DefaultSyncShape, ResolveSchema, ResolveUserMeta, ResolveModelKey, } from '../types/global.js';
|
|
47
|
-
export { AbloProvider, useJoin, usePeers, useSync, useSyncStore, type AbloProviderProps, type ParticipantScope, type ParticipantStatus, type UseJoinOptions, type UseJoinReturn,
|
|
46
|
+
export type { DefaultSyncShape, ResolveSchema, ResolveUserMeta, ResolveClaimMeta, ResolveModelKey, } from '../transaction/types/global.js';
|
|
47
|
+
export { AbloProvider, useJoin, usePeers, useSync, useSyncStore, type AbloProviderProps, type ParticipantScope, type ParticipantStatus, type UseJoinOptions, type UseJoinReturn, } from './AbloProvider.js';
|
|
48
48
|
export { ClientSideSuspense, type ClientSideSuspenseProps, } from './ClientSideSuspense.js';
|
|
49
49
|
export { DefaultFallback } from './DefaultFallback.js';
|
|
50
50
|
export type { SyncStoreContract } from './context.js';
|
|
@@ -58,4 +58,4 @@ export type { ReaderActions, ReaderFindOptions } from '../mutators/readerActions
|
|
|
58
58
|
export { useMutators, type MutatorInvokers, type InvokerFor, type UseMutatorsOptions, } from './useMutators.js';
|
|
59
59
|
export { useUndoScope, type UseUndoScopeResult } from './useUndoScope.js';
|
|
60
60
|
export { useAblo, type UseAbloHydratedModelResult, type UseAbloModelOptions, type UseAbloModelResult, } from './useAblo.js';
|
|
61
|
-
export { ModelScope } from '../types/index.js';
|
|
61
|
+
export { ModelScope } from '../transaction/types/index.js';
|
package/dist/react/index.js
CHANGED
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
*
|
|
22
22
|
* # Data hooks
|
|
23
23
|
*
|
|
24
|
-
* useAblo((ablo) => ablo.tasks.
|
|
24
|
+
* useAblo((ablo) => ablo.tasks.local.retrieve(id)) — subscribe to a local snapshot (the main read API)
|
|
25
25
|
* useAblo() — the typed client, for callbacks and effects:
|
|
26
|
-
* synchronous local reads (`ablo.<model>.
|
|
26
|
+
* synchronous local reads (`ablo.<model>.local.retrieve`/`local.list`),
|
|
27
27
|
* async server reads (`retrieve`/`list`),
|
|
28
28
|
* and writes (`create`/`update`/`delete`)
|
|
29
29
|
* useMutators(defs, opts?) — define custom mutators
|
|
@@ -63,4 +63,4 @@ export { useMutators, } from './useMutators.js';
|
|
|
63
63
|
export { useUndoScope } from './useUndoScope.js';
|
|
64
64
|
export { useAblo, } from './useAblo.js';
|
|
65
65
|
// ── ModelScope re-export ───────────────────────────────────────────
|
|
66
|
-
export { ModelScope } from '../types/index.js';
|
|
66
|
+
export { ModelScope } from '../transaction/types/index.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Ablo } from '../client/Ablo.js';
|
|
2
|
-
import type { SchemaRecord } from '../schema/schema.js';
|
|
2
|
+
import type { SchemaRecord } from '../transaction/schema/schema.js';
|
|
3
3
|
/**
|
|
4
4
|
* The context that `<AbloProvider>` populates for its own hooks. It is kept
|
|
5
5
|
* separate from the data-hook context, which carries the store and schema,
|
package/dist/react/useAblo.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Ablo, AbloReads, ModelClaim } from '../client/Ablo.js';
|
|
2
2
|
import type { ModelOperations } from '../client/createModelProxy.js';
|
|
3
|
-
import type { SchemaRecord } from '../schema/schema.js';
|
|
4
|
-
import type { ResolveSchema } from '../types/global.js';
|
|
3
|
+
import type { SchemaRecord } from '../transaction/schema/schema.js';
|
|
4
|
+
import type { ResolveSchema } from '../transaction/types/global.js';
|
|
5
5
|
/**
|
|
6
6
|
* The app's resolved schema-record type. It reads your `Register` module
|
|
7
7
|
* augmentation when you declare one and falls back to the loose
|
|
@@ -51,7 +51,7 @@ export type UseAbloHydratedModelResult<T> = Omit<UseAbloModelResult<T>, 'data'>
|
|
|
51
51
|
* // Reactive selector (a synchronous local snapshot). The selector's reads
|
|
52
52
|
* // are typed as snapshot rows — data fields + computeds, no relation
|
|
53
53
|
* // accessors — matching what the hook actually returns:
|
|
54
|
-
* const doc = useAblo((ablo) => ablo.documents.
|
|
54
|
+
* const doc = useAblo((ablo) => ablo.documents.local.retrieve(id)) ?? serverDoc;
|
|
55
55
|
* const active = useAblo((ablo) => ablo.documents.claim.state({ id }));
|
|
56
56
|
*
|
|
57
57
|
* // Without the augmentation, pass the schema as a type argument:
|
package/dist/react/useAblo.js
CHANGED
|
@@ -27,7 +27,7 @@ function readModelResult(engine, modelClient, id, initial) {
|
|
|
27
27
|
if (!modelClient || id === undefined) {
|
|
28
28
|
return { data: initial, claims: EMPTY_CLAIMS, claimed: false };
|
|
29
29
|
}
|
|
30
|
-
const data = snapshotValue(modelClient.
|
|
30
|
+
const data = snapshotValue(modelClient.local.retrieve(id) ?? initial);
|
|
31
31
|
const meta = getModelClientMeta(modelClient);
|
|
32
32
|
const claims = meta && engine
|
|
33
33
|
? engine.claims.list({ model: meta.key, id })
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { useContext } from 'react';
|
|
3
3
|
import { AbloInternalContext } from './internalContext.js';
|
|
4
|
-
import { AbloValidationError } from '../errors.js';
|
|
4
|
+
import { AbloValidationError } from '../transaction/errors.js';
|
|
5
5
|
/**
|
|
6
6
|
* Returns the application user id passed to the nearest `<AbloProvider>`, or
|
|
7
7
|
* `null` when your app did not provide one.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { useContext, useEffect, useRef } from 'react';
|
|
3
3
|
import { AbloInternalContext } from './internalContext.js';
|
|
4
|
-
import { AbloValidationError } from '../errors.js';
|
|
4
|
+
import { AbloValidationError } from '../transaction/errors.js';
|
|
5
5
|
/**
|
|
6
6
|
* Registers a callback that runs whenever the provider surfaces an error. This
|
|
7
7
|
* covers engine errors such as bootstrap failures and mutation rejections,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { QueuedMutation } from '../transactions/mutations/MutationQueue.js';
|
|
2
2
|
export interface MutationFailurePayload {
|
|
3
|
-
transaction:
|
|
3
|
+
transaction: QueuedMutation;
|
|
4
4
|
error: Error;
|
|
5
5
|
permanent?: boolean;
|
|
6
6
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { useContext, useEffect, useRef } from 'react';
|
|
3
3
|
import { AbloInternalContext } from './internalContext.js';
|
|
4
|
-
import { AbloValidationError } from '../errors.js';
|
|
4
|
+
import { AbloValidationError } from '../transaction/errors.js';
|
|
5
5
|
/**
|
|
6
6
|
* Subscribes a listener to mutation failures. The callback fires whenever the
|
|
7
7
|
* transaction queue rolls back an optimistic write — both permanent rejections
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { Schema } from '../schema/schema.js';
|
|
1
|
+
import type { Schema } from '../transaction/schema/schema.js';
|
|
2
2
|
import type { MutatorDefs } from '../mutators/defineMutators.js';
|
|
3
3
|
import type { UndoScope } from '../mutators/UndoManager.js';
|
|
4
|
-
import type { ResolveSchema } from '../types/global.js';
|
|
4
|
+
import type { ResolveSchema } from '../transaction/types/global.js';
|
|
5
5
|
/**
|
|
6
6
|
* Turns a mutator tree built with `defineMutators` into callable invokers. The
|
|
7
7
|
* returned object mirrors that tree one-to-one, but each leaf becomes an
|
|
@@ -41,7 +41,7 @@ export type MutatorInvokers<M> = {
|
|
|
41
41
|
};
|
|
42
42
|
/**
|
|
43
43
|
* Options passed to `useMutators`. When `undoScope` is set, every mutator
|
|
44
|
-
* invocation is wrapped in a `
|
|
44
|
+
* invocation is wrapped in a `RecordingMutation` and its inverses are
|
|
45
45
|
* pushed to the scope as one undo entry.
|
|
46
46
|
*/
|
|
47
47
|
export interface UseMutatorsOptions<S extends Schema> {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { useMemo } from 'react';
|
|
3
3
|
import { createTransaction } from '../mutators/Transaction.js';
|
|
4
|
-
import {
|
|
4
|
+
import { createRecordingMutation } from '../mutators/RecordingMutation.js';
|
|
5
5
|
import { useSyncContext } from './context.js';
|
|
6
|
-
import { AbloValidationError } from '../errors.js';
|
|
6
|
+
import { AbloValidationError } from '../transaction/errors.js';
|
|
7
7
|
import { getContext } from '../context.js';
|
|
8
8
|
export function useMutators(schemaOrMutators, mutatorsOrOptions, maybeOptions) {
|
|
9
9
|
const { store, organizationId, schema: ctxSchema } = useSyncContext();
|
|
@@ -48,7 +48,7 @@ export function useMutators(schemaOrMutators, mutatorsOrOptions, maybeOptions) {
|
|
|
48
48
|
// interleave their shared-model snapshots. See UndoScope.runRecorded.
|
|
49
49
|
if (undoScope) {
|
|
50
50
|
return undoScope.runRecorded(async () => {
|
|
51
|
-
const recording =
|
|
51
|
+
const recording = createRecordingMutation(schema, store, organizationId);
|
|
52
52
|
try {
|
|
53
53
|
const result = await fn({ tx: recording.tx, args });
|
|
54
54
|
const entry = recording.getEntry(label);
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { Schema } from '../schema/schema.js';
|
|
1
|
+
import type { Schema } from '../transaction/schema/schema.js';
|
|
2
2
|
import type { UndoScope, UndoScopeOptions } from '../mutators/UndoManager.js';
|
|
3
|
-
import type { ResolveSchema } from '../types/global.js';
|
|
3
|
+
import type { ResolveSchema } from '../transaction/types/global.js';
|
|
4
4
|
/**
|
|
5
5
|
* Provides per-surface undo and redo for mutator invocations. Each named scope
|
|
6
|
-
* owns an independent undo/redo stack, so different parts of your app — a
|
|
6
|
+
* owns an independent undo/redo stack, so different parts of your app — a main
|
|
7
7
|
* editor, a sidebar form — can undo separately without stepping on each other.
|
|
8
8
|
*
|
|
9
9
|
* Wire the returned `scope` into `useMutators(schema, mutators, { undoScope:
|
|
@@ -12,8 +12,8 @@ import type { ResolveSchema } from '../types/global.js';
|
|
|
12
12
|
* themselves; the manager moves the entry between the two stacks explicitly.
|
|
13
13
|
*
|
|
14
14
|
* @example
|
|
15
|
-
* const { undo, redo, canUndo, canRedo, scope } = useUndoScope('
|
|
16
|
-
* const mutate = useMutators(schema,
|
|
15
|
+
* const { undo, redo, canUndo, canRedo, scope } = useUndoScope('report-editor');
|
|
16
|
+
* const mutate = useMutators(schema, reportMutators, { undoScope: scope });
|
|
17
17
|
*
|
|
18
18
|
* // Cmd+Z handler
|
|
19
19
|
* useHotkey('mod+z', () => { if (canUndo) void undo(); });
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { useEffect, useMemo, useState } from 'react';
|
|
3
3
|
import { UndoManager } from '../mutators/UndoManager.js';
|
|
4
4
|
import { useSyncContext } from './context.js';
|
|
5
|
-
import { AbloValidationError } from '../errors.js';
|
|
5
|
+
import { AbloValidationError } from '../transaction/errors.js';
|
|
6
6
|
// Module-level weak registry: `SyncStoreContract` → `UndoManager`.
|
|
7
7
|
// A single app wiring through one SyncProvider shares one manager across
|
|
8
8
|
// every useUndoScope call, so scopes with the same name are identity-equal.
|
|
@@ -1,23 +1,33 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Authoring helpers for a model's `conflict` axis — the setting that decides
|
|
3
3
|
* what happens when two writers touch the same row. Instead of writing a raw
|
|
4
|
-
* disposition map, you
|
|
5
|
-
*
|
|
4
|
+
* disposition map, you name the rules the way the rest of the schema DSL reads
|
|
5
|
+
* (`relation.belongsTo()`, `field.string()`), and chain them the way a field
|
|
6
|
+
* chains its own modifiers:
|
|
6
7
|
*
|
|
7
8
|
* ```ts
|
|
8
|
-
* import { coordination
|
|
9
|
+
* import { coordination } from '@abloatai/ablo/schema';
|
|
9
10
|
*
|
|
10
|
-
* conflict: coordination
|
|
11
|
+
* conflict: coordination.humansOverwrite().agentsReject()
|
|
11
12
|
* // → { user: 'overwrite', agent: 'reject' } (a human's write wins, an agent's yields)
|
|
12
13
|
* ```
|
|
13
14
|
*
|
|
14
|
-
* Each
|
|
15
|
+
* Each rule is named for the disposition it applies — drawn from the same
|
|
15
16
|
* `overwrite | reject | notify` vocabulary the write guards use (`onStale`) —
|
|
16
|
-
* and
|
|
17
|
-
*
|
|
18
|
-
*
|
|
17
|
+
* and every one of them is also available as a standalone function, which
|
|
18
|
+
* {@link coordination} merges when the rules are assembled dynamically rather
|
|
19
|
+
* than written out:
|
|
20
|
+
*
|
|
21
|
+
* ```ts
|
|
22
|
+
* conflict: coordination(humansOverwrite(), agentsReject())
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* Either way the result is plain, serializable data that the engine reads at
|
|
26
|
+
* commit time. The `humans`/`agents` wording belongs to the author; the `user`/
|
|
27
|
+
* `agent`/`system` keys belong to the wire, and this module is the one place
|
|
28
|
+
* the two are mapped to each other.
|
|
19
29
|
*/
|
|
20
|
-
import type { ConflictAxis } from '../policy/types.js';
|
|
30
|
+
import type { ConflictAxis } from '../transaction/policy/types.js';
|
|
21
31
|
/**
|
|
22
32
|
* One coordination rule: a partial {@link ConflictAxis} produced by a
|
|
23
33
|
* disposition helper below. Compose with {@link coordination}.
|
|
@@ -41,6 +51,34 @@ export declare const systemOverwrite: () => ConflictRule;
|
|
|
41
51
|
export declare const systemReject: () => ConflictRule;
|
|
42
52
|
/** A system or automation stale write triggers a notification: it re-reads and re-applies. */
|
|
43
53
|
export declare const systemNotify: () => ConflictRule;
|
|
54
|
+
/**
|
|
55
|
+
* A conflict axis that is still open to more rules. Every method applies one
|
|
56
|
+
* disposition and hands back a new axis, so a model's whole stance reads as a
|
|
57
|
+
* single sentence and the reader never has to hold a merge in their head.
|
|
58
|
+
*
|
|
59
|
+
* Each method delegates to the standalone rule of the same name, so a
|
|
60
|
+
* disposition map like `{ user: 'overwrite' }` is written in exactly one place
|
|
61
|
+
* no matter which authoring style a schema uses. Dispositions are own
|
|
62
|
+
* enumerable properties and the methods live on the prototype, so an axis
|
|
63
|
+
* serializes to the same plain object the server has always received.
|
|
64
|
+
*/
|
|
65
|
+
declare class CoordinationAxis implements ConflictAxis {
|
|
66
|
+
readonly user?: ConflictAxis['user'];
|
|
67
|
+
readonly agent?: ConflictAxis['agent'];
|
|
68
|
+
readonly system?: ConflictAxis['system'];
|
|
69
|
+
constructor(axis: ConflictAxis);
|
|
70
|
+
/** Apply one more rule, later winning on a repeated kind. */
|
|
71
|
+
private and;
|
|
72
|
+
humansOverwrite(): CoordinationAxis;
|
|
73
|
+
humansReject(): CoordinationAxis;
|
|
74
|
+
humansNotify(): CoordinationAxis;
|
|
75
|
+
agentsOverwrite(): CoordinationAxis;
|
|
76
|
+
agentsReject(): CoordinationAxis;
|
|
77
|
+
agentsNotify(): CoordinationAxis;
|
|
78
|
+
systemOverwrite(): CoordinationAxis;
|
|
79
|
+
systemReject(): CoordinationAxis;
|
|
80
|
+
systemNotify(): CoordinationAxis;
|
|
81
|
+
}
|
|
44
82
|
/**
|
|
45
83
|
* Merges coordination rules into a single {@link ConflictAxis}. Later rules win
|
|
46
84
|
* on key collisions, and a committer kind you leave out falls through to the
|
|
@@ -50,4 +88,25 @@ export declare const systemNotify: () => ConflictRule;
|
|
|
50
88
|
* coordination(humansOverwrite(), agentsReject()) // → { user: 'overwrite', agent: 'reject' }
|
|
51
89
|
* ```
|
|
52
90
|
*/
|
|
53
|
-
|
|
91
|
+
declare function mergeRules(...rules: readonly ConflictRule[]): ConflictAxis;
|
|
92
|
+
/**
|
|
93
|
+
* The coordination vocabulary, reachable through one name. Call it to merge
|
|
94
|
+
* rules you have assembled; reach through it to start a chain.
|
|
95
|
+
*
|
|
96
|
+
* ```ts
|
|
97
|
+
* conflict: coordination.humansOverwrite().agentsReject()
|
|
98
|
+
* conflict: coordination(humansOverwrite(), agentsReject())
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
export declare const coordination: typeof mergeRules & {
|
|
102
|
+
humansOverwrite: () => CoordinationAxis;
|
|
103
|
+
humansReject: () => CoordinationAxis;
|
|
104
|
+
humansNotify: () => CoordinationAxis;
|
|
105
|
+
agentsOverwrite: () => CoordinationAxis;
|
|
106
|
+
agentsReject: () => CoordinationAxis;
|
|
107
|
+
agentsNotify: () => CoordinationAxis;
|
|
108
|
+
systemOverwrite: () => CoordinationAxis;
|
|
109
|
+
systemReject: () => CoordinationAxis;
|
|
110
|
+
systemNotify: () => CoordinationAxis;
|
|
111
|
+
};
|
|
112
|
+
export {};
|
|
@@ -1,21 +1,31 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Authoring helpers for a model's `conflict` axis — the setting that decides
|
|
3
3
|
* what happens when two writers touch the same row. Instead of writing a raw
|
|
4
|
-
* disposition map, you
|
|
5
|
-
*
|
|
4
|
+
* disposition map, you name the rules the way the rest of the schema DSL reads
|
|
5
|
+
* (`relation.belongsTo()`, `field.string()`), and chain them the way a field
|
|
6
|
+
* chains its own modifiers:
|
|
6
7
|
*
|
|
7
8
|
* ```ts
|
|
8
|
-
* import { coordination
|
|
9
|
+
* import { coordination } from '@abloatai/ablo/schema';
|
|
9
10
|
*
|
|
10
|
-
* conflict: coordination
|
|
11
|
+
* conflict: coordination.humansOverwrite().agentsReject()
|
|
11
12
|
* // → { user: 'overwrite', agent: 'reject' } (a human's write wins, an agent's yields)
|
|
12
13
|
* ```
|
|
13
14
|
*
|
|
14
|
-
* Each
|
|
15
|
+
* Each rule is named for the disposition it applies — drawn from the same
|
|
15
16
|
* `overwrite | reject | notify` vocabulary the write guards use (`onStale`) —
|
|
16
|
-
* and
|
|
17
|
-
*
|
|
18
|
-
*
|
|
17
|
+
* and every one of them is also available as a standalone function, which
|
|
18
|
+
* {@link coordination} merges when the rules are assembled dynamically rather
|
|
19
|
+
* than written out:
|
|
20
|
+
*
|
|
21
|
+
* ```ts
|
|
22
|
+
* conflict: coordination(humansOverwrite(), agentsReject())
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* Either way the result is plain, serializable data that the engine reads at
|
|
26
|
+
* commit time. The `humans`/`agents` wording belongs to the author; the `user`/
|
|
27
|
+
* `agent`/`system` keys belong to the wire, and this module is the one place
|
|
28
|
+
* the two are mapped to each other.
|
|
19
29
|
*/
|
|
20
30
|
// ── Humans (user sessions) ──────────────────────────────────────────────
|
|
21
31
|
/** A human's conflicting write wins and overwrites the other; it is never blocked. Among humans this gives last-write-wins. */
|
|
@@ -38,6 +48,53 @@ export const systemOverwrite = () => ({ system: 'overwrite' });
|
|
|
38
48
|
export const systemReject = () => ({ system: 'reject' });
|
|
39
49
|
/** A system or automation stale write triggers a notification: it re-reads and re-applies. */
|
|
40
50
|
export const systemNotify = () => ({ system: 'notify' });
|
|
51
|
+
/**
|
|
52
|
+
* A conflict axis that is still open to more rules. Every method applies one
|
|
53
|
+
* disposition and hands back a new axis, so a model's whole stance reads as a
|
|
54
|
+
* single sentence and the reader never has to hold a merge in their head.
|
|
55
|
+
*
|
|
56
|
+
* Each method delegates to the standalone rule of the same name, so a
|
|
57
|
+
* disposition map like `{ user: 'overwrite' }` is written in exactly one place
|
|
58
|
+
* no matter which authoring style a schema uses. Dispositions are own
|
|
59
|
+
* enumerable properties and the methods live on the prototype, so an axis
|
|
60
|
+
* serializes to the same plain object the server has always received.
|
|
61
|
+
*/
|
|
62
|
+
class CoordinationAxis {
|
|
63
|
+
constructor(axis) {
|
|
64
|
+
Object.assign(this, Object.fromEntries(Object.entries(axis).filter(([, mode]) => mode !== undefined)));
|
|
65
|
+
}
|
|
66
|
+
/** Apply one more rule, later winning on a repeated kind. */
|
|
67
|
+
and(rule) {
|
|
68
|
+
return new CoordinationAxis({ ...this, ...rule });
|
|
69
|
+
}
|
|
70
|
+
humansOverwrite() {
|
|
71
|
+
return this.and(humansOverwrite());
|
|
72
|
+
}
|
|
73
|
+
humansReject() {
|
|
74
|
+
return this.and(humansReject());
|
|
75
|
+
}
|
|
76
|
+
humansNotify() {
|
|
77
|
+
return this.and(humansNotify());
|
|
78
|
+
}
|
|
79
|
+
agentsOverwrite() {
|
|
80
|
+
return this.and(agentsOverwrite());
|
|
81
|
+
}
|
|
82
|
+
agentsReject() {
|
|
83
|
+
return this.and(agentsReject());
|
|
84
|
+
}
|
|
85
|
+
agentsNotify() {
|
|
86
|
+
return this.and(agentsNotify());
|
|
87
|
+
}
|
|
88
|
+
systemOverwrite() {
|
|
89
|
+
return this.and(systemOverwrite());
|
|
90
|
+
}
|
|
91
|
+
systemReject() {
|
|
92
|
+
return this.and(systemReject());
|
|
93
|
+
}
|
|
94
|
+
systemNotify() {
|
|
95
|
+
return this.and(systemNotify());
|
|
96
|
+
}
|
|
97
|
+
}
|
|
41
98
|
/**
|
|
42
99
|
* Merges coordination rules into a single {@link ConflictAxis}. Later rules win
|
|
43
100
|
* on key collisions, and a committer kind you leave out falls through to the
|
|
@@ -47,6 +104,26 @@ export const systemNotify = () => ({ system: 'notify' });
|
|
|
47
104
|
* coordination(humansOverwrite(), agentsReject()) // → { user: 'overwrite', agent: 'reject' }
|
|
48
105
|
* ```
|
|
49
106
|
*/
|
|
50
|
-
|
|
107
|
+
function mergeRules(...rules) {
|
|
51
108
|
return Object.assign({}, ...rules);
|
|
52
109
|
}
|
|
110
|
+
/**
|
|
111
|
+
* The coordination vocabulary, reachable through one name. Call it to merge
|
|
112
|
+
* rules you have assembled; reach through it to start a chain.
|
|
113
|
+
*
|
|
114
|
+
* ```ts
|
|
115
|
+
* conflict: coordination.humansOverwrite().agentsReject()
|
|
116
|
+
* conflict: coordination(humansOverwrite(), agentsReject())
|
|
117
|
+
* ```
|
|
118
|
+
*/
|
|
119
|
+
export const coordination = Object.assign(mergeRules, {
|
|
120
|
+
humansOverwrite: () => new CoordinationAxis(humansOverwrite()),
|
|
121
|
+
humansReject: () => new CoordinationAxis(humansReject()),
|
|
122
|
+
humansNotify: () => new CoordinationAxis(humansNotify()),
|
|
123
|
+
agentsOverwrite: () => new CoordinationAxis(agentsOverwrite()),
|
|
124
|
+
agentsReject: () => new CoordinationAxis(agentsReject()),
|
|
125
|
+
agentsNotify: () => new CoordinationAxis(agentsNotify()),
|
|
126
|
+
systemOverwrite: () => new CoordinationAxis(systemOverwrite()),
|
|
127
|
+
systemReject: () => new CoordinationAxis(systemReject()),
|
|
128
|
+
systemNotify: () => new CoordinationAxis(systemNotify()),
|
|
129
|
+
});
|
package/dist/schema/ddl.js
CHANGED
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
* by a {@link diffSchema} step list: drops, renames, type casts, and
|
|
22
22
|
* backfills.
|
|
23
23
|
*/
|
|
24
|
-
import { AbloValidationError } from '../errors.js';
|
|
25
|
-
import { resolveTenancy, tenancyColumn } from '
|
|
24
|
+
import { AbloValidationError } from '../transaction/errors.js';
|
|
25
|
+
import { resolveTenancy, tenancyColumn } from '../transaction/schema/tenancy.js';
|
|
26
26
|
// ── Identifier safety ────────────────────────────────────────────────────────
|
|
27
27
|
/** Postgres unquoted-identifier-safe slug: lowercase `[a-z0-9_]`, ≤50 chars. */
|
|
28
28
|
function slug(raw) {
|
package/dist/schema/diff.d.ts
CHANGED
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
* drop models. A newly added column is never created `NOT NULL`; making a column
|
|
29
29
|
* required is a separate nullability change that a backfill must run before.
|
|
30
30
|
*/
|
|
31
|
-
import type { FieldMeta } from '
|
|
31
|
+
import type { FieldMeta } from '../transaction/schema/field.js';
|
|
32
32
|
import type { SchemaJSON } from './serialize.js';
|
|
33
33
|
export type FieldType = FieldMeta['type'];
|
|
34
34
|
/** Whether a Postgres `ALTER COLUMN … TYPE` can preserve the existing data. */
|
package/dist/schema/generate.js
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* enums emitted as string-literal unions. Relations are not expanded here — the
|
|
15
15
|
* runtime SDK resolves those through its typed accessors.
|
|
16
16
|
*/
|
|
17
|
-
import { BASE_FIELDS } from '
|
|
17
|
+
import { BASE_FIELDS } from '../transaction/schema/schema.js';
|
|
18
18
|
function tsType(meta) {
|
|
19
19
|
switch (meta.type) {
|
|
20
20
|
case 'string':
|
package/dist/schema/index.d.ts
CHANGED
|
@@ -21,21 +21,21 @@
|
|
|
21
21
|
* ```
|
|
22
22
|
*/
|
|
23
23
|
export { z } from 'zod';
|
|
24
|
-
export { field, indexed, getFieldMeta, type FieldBuilder, type FieldMeta } from '
|
|
25
|
-
export { relation, type RelationDef, type RelationType } from '
|
|
26
|
-
export { tenancySchema, scopedViaRefSchema, policyInputSchema, resolvePolicy, resolveTenancy, tenancyColumn, DEFAULT_ORG_COLUMN, type Tenancy, type ScopedViaRef, type PolicyInput, } from '
|
|
27
|
-
export { residencySchema, DEFAULT_RESIDENCY, type ModelResidency,
|
|
28
|
-
export { syncDeltaCoreSchema, deltaAttributionSchema,
|
|
29
|
-
export { syncDeltaActionSchema, wireDeltaDataSchema, participantRefSchema, syncDeltaWireCoreSchema, clientSyncDeltaSchema, serverSyncDeltaSchema, type SyncDeltaAction, type WireDeltaData, type ParticipantRef, type SyncDeltaWireCore, type ClientSyncDelta, type ServerSyncDelta, } from '../wire/delta.js';
|
|
30
|
-
export { model, scopeKindOf,
|
|
24
|
+
export { field, indexed, getFieldMeta, type FieldBuilder, type FieldMeta } from '../transaction/schema/field.js';
|
|
25
|
+
export { relation, type RelationDef, type RelationType } from '../transaction/schema/relation.js';
|
|
26
|
+
export { tenancySchema, scopedViaRefSchema, policyInputSchema, resolvePolicy, resolveTenancy, tenancyColumn, DEFAULT_ORG_COLUMN, type Tenancy, type ScopedViaRef, type PolicyInput, } from '../transaction/schema/tenancy.js';
|
|
27
|
+
export { residencySchema, DEFAULT_RESIDENCY, type ModelResidency, } from '../transaction/schema/residency.js';
|
|
28
|
+
export { syncDeltaCoreSchema, deltaAttributionSchema, syncDeltaRowSchema, participantKindSchema, confirmationStateSchema, backfillProvenanceSchema, DELTA_DATA_CLASSIFICATION, DELTA_PHYSICAL_STORAGE, type SyncDeltaCore, type DeltaAttribution, type SyncDeltaRow, type ParticipantKind, type ConfirmationState, type BackfillProvenance, } from './syncDeltaRow.js';
|
|
29
|
+
export { syncDeltaActionSchema, wireDeltaDataSchema, participantRefSchema, syncDeltaWireCoreSchema, clientSyncDeltaSchema, serverSyncDeltaSchema, type SyncDeltaAction, type WireDeltaData, type ParticipantRef, type SyncDeltaWireCore, type ClientSyncDelta, type ServerSyncDelta, } from '../transaction/wire/delta.js';
|
|
30
|
+
export { model, scopeKindOf, LoadStrategy, DEFAULT_LOAD_STRATEGY, loadsAtBootstrap, type ModelDef, type ModelOptions, type PersistOptions, type RelationRecord, type GrantsRef, type ConflictAxis, } from '../transaction/schema/model.js';
|
|
31
31
|
export { coordination, humansOverwrite, humansReject, humansNotify, agentsOverwrite, agentsReject, agentsNotify, systemOverwrite, systemReject, systemNotify, type ConflictRule, } from './coordination.js';
|
|
32
32
|
export { mutable, readOnly, type SugarOptions } from './sugar.js';
|
|
33
|
-
export { defineSchema, composeIdentitySyncGroups, type Schema, type SchemaRecord, type Model, type Row, type
|
|
34
|
-
export { serializeSchema, parseSchema, toSchemaJSON, fromSchemaJSON, schemaHash, type SchemaJSON, type ModelJSON, type RelationJSON, } from './serialize.js';
|
|
33
|
+
export { defineSchema, composeIdentitySyncGroups, type Schema, type SchemaRecord, type Model, type Row, type InferCreate, type InferRow, type InferModelNames, type BaseModelFields, type InsertValue, type UpsertValue, type UpdateValue, type DeleteId, type DefineSchemaOptions, type Casing, type CasingConvention, type CasingFn, composeEntitySyncGroups, intersectRequestedWithAllowed, type IdentityRole, type IdentityContext, type IdentityRoleSource, type EntityRole, type EntityContext, type EntityRoleSource, type RoleSource, type RoleContext, type SyncGroup, type SyncGroupInput, identityRole, entityRole, extractIdentityIds, extractEntityIds, syncGroup, syncGroupSchema, syncGroupInputSchema, isSyncGroupInput, identityRoleSchema, entityRoleSchema, roleSchema, roleSourceSchema, scopeSchema, grantsRefSchema, groupsInputSchema, type GroupsInput, type SessionSettings, type SessionSettingSource, RESERVED_SESSION_SETTINGS, } from '../transaction/schema/schema.js';
|
|
34
|
+
export { serializeSchema, parseSchema, toSchemaJSON, fromSchemaJSON, schemaHash, modelHash, type SchemaJSON, type ModelJSON, type RelationJSON, } from './serialize.js';
|
|
35
35
|
export { selectModels, omitModels } from './select.js';
|
|
36
36
|
export { generateProvisionPlan, generateMigrationPlan, appSchemaName, camelToSnake, snakeToCamel, q, sqlType, type ProvisionPlan, type MigrationPlan, } from './ddl.js';
|
|
37
37
|
export { PG_LOCK_NOT_AVAILABLE, resolveDdlLockTimeout, resolveDdlMaxLockAttempts, ddlLockRetryBackoffMs, type DdlLockEnv, } from './ddlLock.js';
|
|
38
38
|
export { diffSchema, classifyMigration, classifyCast, isAutoApplicable, isBlockerResolved, unresolvedBlockers, type BackfillValue, type MigrationStep, type FieldChanges, type FieldColumnChange, type FieldTypeChange, type NullabilityChange, type EnumValuesChange, type IndexChange, type CastSafety, type FieldType, type RenameHints, type MigrationSignal, type MigrationClassification, type WarningCode, type BlockerCode, } from './diff.js';
|
|
39
39
|
export { generateTypes } from './generate.js';
|
|
40
40
|
export { query, defineQueries, type QueryDef, type QueryRecord, type Queries, type InferQueryInput, type InferQueryResult, } from './queries.js';
|
|
41
|
-
export { schemaToOpenApi, type SchemaToOpenApiOptions } from '
|
|
41
|
+
export { abloOpenApi, schemaToOpenApi, type SchemaToOpenApiOptions } from '../transaction/schema/openapi.js';
|