@abloatai/ablo 0.34.0 → 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 +4 -1
- package/CHANGELOG.md +684 -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 +3459 -1126
- 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 -84
- 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 +111 -0
- 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
package/dist/schema/openapi.d.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generates an OpenAPI 3.1 specification from a pushed schema, so the API reference
|
|
3
|
-
* describes your own models rather than a fixed set. The API surface is the schema:
|
|
4
|
-
* defining a `task` model is what makes `/v1/models/task` exist. This walks each
|
|
5
|
-
* model's `fields` (the introspectable {@link FieldMeta}) and emits, per model, the
|
|
6
|
-
* CRUD and coordination routes the API serves:
|
|
7
|
-
* GET/POST /v1/models/{model}
|
|
8
|
-
* GET/PATCH/DELETE /v1/models/{model}/{id}
|
|
9
|
-
* POST/DELETE /v1/models/{model}/{id}/claim
|
|
10
|
-
* POST /v1/models/{model}/{id}/claim/heartbeat
|
|
11
|
-
* POST /v1/models/{model}/{id}/claim/reorder
|
|
12
|
-
* plus POST /v1/commits. Authentication is a single Bearer scheme, your API key.
|
|
13
|
-
*
|
|
14
|
-
* Feed it into codegen (for example `ablo openapi > openapi.json`) or serve it
|
|
15
|
-
* directly; the return value is a plain JSON-serializable object.
|
|
16
|
-
*/
|
|
17
|
-
import type { Schema, SchemaRecord } from './schema.js';
|
|
18
|
-
/** Options for {@link schemaToOpenApi} — the metadata stamped into the generated spec. */
|
|
19
|
-
export interface SchemaToOpenApiOptions {
|
|
20
|
-
/** Spec title. Default `"Ablo API"`. */
|
|
21
|
-
readonly title?: string;
|
|
22
|
-
/** Spec version. Default `"1.0.0"`. */
|
|
23
|
-
readonly version?: string;
|
|
24
|
-
/** API base URL. Default `"https://api.abloatai.com/api"`. */
|
|
25
|
-
readonly serverUrl?: string;
|
|
26
|
-
}
|
|
27
|
-
type Json = Record<string, unknown>;
|
|
28
|
-
export declare function schemaToOpenApi<S extends SchemaRecord>(schema: Schema<S>, options?: SchemaToOpenApiOptions): Json;
|
|
29
|
-
export {};
|
package/dist/schema/openapi.js
DELETED
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
// Pulled from the endpoints module to keep this schema file free of the client's
|
|
2
|
-
// error-handling and credential dependencies.
|
|
3
|
-
import { ABLO_HOSTED_HTTP_BASE_URL } from '../client/hostedEndpoints.js';
|
|
4
|
-
function fieldSchema(f) {
|
|
5
|
-
switch (f.type) {
|
|
6
|
-
case 'number':
|
|
7
|
-
return { type: 'number' };
|
|
8
|
-
case 'boolean':
|
|
9
|
-
return { type: 'boolean' };
|
|
10
|
-
case 'date':
|
|
11
|
-
return { type: 'string', format: 'date-time' };
|
|
12
|
-
case 'enum':
|
|
13
|
-
return f.enumValues ? { type: 'string', enum: [...f.enumValues] } : { type: 'string' };
|
|
14
|
-
case 'json':
|
|
15
|
-
return { type: 'object', additionalProperties: true };
|
|
16
|
-
case 'string':
|
|
17
|
-
default:
|
|
18
|
-
return { type: 'string' };
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
const pascal = (s) => s.charAt(0).toUpperCase() + s.slice(1);
|
|
22
|
-
const idParam = () => ({ name: 'id', in: 'path', required: true, schema: { type: 'string' } });
|
|
23
|
-
const jsonBody = (schema) => ({
|
|
24
|
-
required: true,
|
|
25
|
-
content: { 'application/json': { schema } },
|
|
26
|
-
});
|
|
27
|
-
const jsonResp = (description, schema) => ({
|
|
28
|
-
description,
|
|
29
|
-
content: { 'application/json': { schema } },
|
|
30
|
-
});
|
|
31
|
-
const commitReceipt = () => jsonResp('Commit receipt', {
|
|
32
|
-
type: 'object',
|
|
33
|
-
properties: {
|
|
34
|
-
object: { type: 'string', enum: ['commit_receipt'] },
|
|
35
|
-
clientTxId: { type: 'string' },
|
|
36
|
-
serverTxId: { type: 'string' },
|
|
37
|
-
success: { type: 'boolean' },
|
|
38
|
-
lastSyncId: { type: 'integer' },
|
|
39
|
-
},
|
|
40
|
-
});
|
|
41
|
-
export function schemaToOpenApi(schema, options = {}) {
|
|
42
|
-
const models = schema.models;
|
|
43
|
-
const paths = {};
|
|
44
|
-
const schemas = {};
|
|
45
|
-
for (const [key, def] of Object.entries(models)) {
|
|
46
|
-
const ref = { $ref: `#/components/schemas/${pascal(key)}` };
|
|
47
|
-
const properties = { id: { type: 'string' } };
|
|
48
|
-
const required = ['id'];
|
|
49
|
-
const createProps = {};
|
|
50
|
-
for (const [fname, fmeta] of Object.entries(def.fields)) {
|
|
51
|
-
const fs = fieldSchema(fmeta);
|
|
52
|
-
properties[fname] = fs;
|
|
53
|
-
createProps[fname] = fs;
|
|
54
|
-
if (!fmeta.isOptional)
|
|
55
|
-
required.push(fname);
|
|
56
|
-
}
|
|
57
|
-
schemas[pascal(key)] = { type: 'object', properties, required };
|
|
58
|
-
const createBody = jsonBody({ type: 'object', properties: createProps });
|
|
59
|
-
paths[`/v1/models/${key}`] = {
|
|
60
|
-
get: {
|
|
61
|
-
tags: [key],
|
|
62
|
-
summary: `List ${key}`,
|
|
63
|
-
parameters: [
|
|
64
|
-
{ name: 'limit', in: 'query', schema: { type: 'integer' } },
|
|
65
|
-
{ name: 'order_by', in: 'query', schema: { type: 'string' } },
|
|
66
|
-
{ name: 'order', in: 'query', schema: { type: 'string', enum: ['asc', 'desc'] } },
|
|
67
|
-
],
|
|
68
|
-
responses: {
|
|
69
|
-
'200': jsonResp('List of rows', {
|
|
70
|
-
type: 'object',
|
|
71
|
-
properties: { object: { type: 'string', enum: ['list'] }, data: { type: 'array', items: ref } },
|
|
72
|
-
}),
|
|
73
|
-
},
|
|
74
|
-
},
|
|
75
|
-
post: { tags: [key], summary: `Create a ${key}`, requestBody: createBody, responses: { '200': commitReceipt() } },
|
|
76
|
-
};
|
|
77
|
-
paths[`/v1/models/${key}/{id}`] = {
|
|
78
|
-
get: {
|
|
79
|
-
tags: [key],
|
|
80
|
-
summary: `Retrieve a ${key}`,
|
|
81
|
-
parameters: [idParam()],
|
|
82
|
-
responses: {
|
|
83
|
-
'200': jsonResp('The row', {
|
|
84
|
-
type: 'object',
|
|
85
|
-
properties: { data: ref, stamp: { type: 'integer' } },
|
|
86
|
-
}),
|
|
87
|
-
},
|
|
88
|
-
},
|
|
89
|
-
patch: { tags: [key], summary: `Update a ${key}`, parameters: [idParam()], requestBody: createBody, responses: { '200': commitReceipt() } },
|
|
90
|
-
delete: { tags: [key], summary: `Delete a ${key}`, parameters: [idParam()], responses: { '200': commitReceipt() } },
|
|
91
|
-
};
|
|
92
|
-
paths[`/v1/models/${key}/{id}/claim`] = {
|
|
93
|
-
post: { tags: [key], summary: `Claim a ${key} (acquire lease)`, parameters: [idParam()], responses: { '200': jsonResp('Claim acquired', { type: 'object' }) } },
|
|
94
|
-
delete: { tags: [key], summary: `Release a ${key} claim`, parameters: [idParam()], responses: { '200': jsonResp('Released', { type: 'object' }) } },
|
|
95
|
-
};
|
|
96
|
-
paths[`/v1/models/${key}/{id}/claim/heartbeat`] = {
|
|
97
|
-
post: { tags: [key], summary: `Heartbeat a held ${key} claim (extend the lease for long-running work)`, parameters: [idParam()], responses: { '200': jsonResp('Lease extended (or queued slot refreshed)', { type: 'object', properties: { object: { type: 'string', enum: ['claim_heartbeat'] }, claimId: { type: 'string' }, status: { type: 'string', enum: ['held', 'queued'] }, expiresAt: { type: 'integer' }, position: { type: 'integer' } } }) } },
|
|
98
|
-
};
|
|
99
|
-
paths[`/v1/models/${key}/{id}/claim/reorder`] = {
|
|
100
|
-
post: { tags: [key], summary: `Reorder the ${key} wait-line (privileged)`, parameters: [idParam()], responses: { '200': jsonResp('Reordered', { type: 'object' }) } },
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
paths['/v1/commits'] = {
|
|
104
|
-
post: { tags: ['commits'], summary: 'Commit a batch of operations atomically', responses: { '200': commitReceipt() } },
|
|
105
|
-
};
|
|
106
|
-
return {
|
|
107
|
-
openapi: '3.1.0',
|
|
108
|
-
info: {
|
|
109
|
-
title: options.title ?? 'Ablo API',
|
|
110
|
-
version: options.version ?? '1.0.0',
|
|
111
|
-
description: 'Generated from your pushed Ablo schema — these routes are your models. ' +
|
|
112
|
-
'Authenticate every request with your API key as a Bearer token.',
|
|
113
|
-
},
|
|
114
|
-
servers: [{ url: options.serverUrl ?? `${ABLO_HOSTED_HTTP_BASE_URL}/api` }],
|
|
115
|
-
security: [{ bearerAuth: [] }],
|
|
116
|
-
components: {
|
|
117
|
-
securitySchemes: {
|
|
118
|
-
bearerAuth: { type: 'http', scheme: 'bearer', description: 'Your Ablo API key (sk_… / rk_…).' },
|
|
119
|
-
},
|
|
120
|
-
schemas,
|
|
121
|
-
},
|
|
122
|
-
paths,
|
|
123
|
-
};
|
|
124
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Product-facing persistence contract for writes that must survive a process
|
|
3
|
-
* restart or an ambiguous network response.
|
|
4
|
-
*
|
|
5
|
-
* The engine implements this contract with a transactional outbox internally,
|
|
6
|
-
* but callers should only need to think in terms of pending durable writes.
|
|
7
|
-
*/
|
|
8
|
-
import { z } from 'zod';
|
|
9
|
-
import { durableCommitEnvelopeSchema } from './commitEnvelope.js';
|
|
10
|
-
import { durableHttpCommitEnvelopeSchema } from './httpCommitEnvelope.js';
|
|
11
|
-
/** Every write shape that Ablo may ask an injected store to persist. */
|
|
12
|
-
export const pendingWriteSchema = z.union([
|
|
13
|
-
durableCommitEnvelopeSchema,
|
|
14
|
-
durableHttpCommitEnvelopeSchema,
|
|
15
|
-
]);
|
|
16
|
-
/** Runtime validation for injected adapters, including JavaScript consumers. */
|
|
17
|
-
export const durableWriteStoreSchema = z.custom((value) => {
|
|
18
|
-
if (typeof value !== 'object' || value === null)
|
|
19
|
-
return false;
|
|
20
|
-
const candidate = value;
|
|
21
|
-
return (typeof candidate.seal === 'function' &&
|
|
22
|
-
typeof candidate.list === 'function' &&
|
|
23
|
-
typeof candidate.remove === 'function');
|
|
24
|
-
}, { message: 'store must implement seal(), list(), and remove()' });
|
|
25
|
-
/** Options for crash-durable `create`, `update`, and `delete` calls. */
|
|
26
|
-
export const durableWritesConfigSchema = z.strictObject({
|
|
27
|
-
store: durableWriteStoreSchema,
|
|
28
|
-
/** Separates deployments or workflow lanes that share an authenticated actor. */
|
|
29
|
-
namespace: z.string().trim().min(1).optional(),
|
|
30
|
-
});
|
package/dist/utils/json.js
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* json.ts — key-order-insensitive comparison helpers for JSON-shaped values.
|
|
3
|
-
*
|
|
4
|
-
* Why this exists as a first-class, exported util:
|
|
5
|
-
*
|
|
6
|
-
* A `field.json()` value may be backed by a Postgres `jsonb` column, and **jsonb
|
|
7
|
-
* does not preserve object key order** (it reorders keys by length, then
|
|
8
|
-
* bytewise, and drops insignificant whitespace — see
|
|
9
|
-
* https://www.postgresql.org/docs/current/datatype-json.html). So a document an
|
|
10
|
-
* app wrote as `{type,text}` streams back in a delta as `{text,type}`: the same
|
|
11
|
-
* value, a different serialization.
|
|
12
|
-
*
|
|
13
|
-
* That bites any app that reconciles an Ablo row against an *external* state
|
|
14
|
-
* container it doesn't control — a rich-text editor (Tiptap/ProseMirror/Slate),
|
|
15
|
-
* a `useState`, a form buffer. The natural guard, `JSON.stringify(remote) ===
|
|
16
|
-
* JSON.stringify(local)`, is silently wrong because the two sides serialize keys
|
|
17
|
-
* in different orders, so it never matches — and the app re-applies the remote
|
|
18
|
-
* value on every render, clobbering in-flight edits and fighting the cursor.
|
|
19
|
-
*
|
|
20
|
-
* The fix is to compare order-insensitively. `deepEqual` does structural
|
|
21
|
-
* equality directly; `stableStringify` produces a canonical string (recursively
|
|
22
|
-
* sorted keys) for when you need a stable cache key / dependency value. The SDK
|
|
23
|
-
* already uses `deepEqual` internally for store-level echo detection; this
|
|
24
|
-
* module makes the same guarantee available to app authors so they don't each
|
|
25
|
-
* reinvent it.
|
|
26
|
-
*
|
|
27
|
-
* (If you need byte-exact key order preserved end-to-end, store the field in a
|
|
28
|
-
* `text` column instead of `jsonb` — Ablo's adaptive codec serializes verbatim
|
|
29
|
-
* there, matching Postgres's `json` type behavior.)
|
|
30
|
-
*/
|
|
31
|
-
/** Structural equality for JSON-shaped values (scalars, arrays, plain objects); key order is ignored. */
|
|
32
|
-
export function deepEqual(a, b) {
|
|
33
|
-
if (a === b)
|
|
34
|
-
return true;
|
|
35
|
-
if (a === null || b === null || typeof a !== 'object' || typeof b !== 'object') {
|
|
36
|
-
return false;
|
|
37
|
-
}
|
|
38
|
-
const aArr = Array.isArray(a);
|
|
39
|
-
if (aArr !== Array.isArray(b))
|
|
40
|
-
return false;
|
|
41
|
-
if (aArr) {
|
|
42
|
-
const av = a;
|
|
43
|
-
const bv = b;
|
|
44
|
-
if (av.length !== bv.length)
|
|
45
|
-
return false;
|
|
46
|
-
for (let i = 0; i < av.length; i++) {
|
|
47
|
-
if (!deepEqual(av[i], bv[i]))
|
|
48
|
-
return false;
|
|
49
|
-
}
|
|
50
|
-
return true;
|
|
51
|
-
}
|
|
52
|
-
const ao = a;
|
|
53
|
-
const bo = b;
|
|
54
|
-
const ak = Object.keys(ao);
|
|
55
|
-
const bk = Object.keys(bo);
|
|
56
|
-
if (ak.length !== bk.length)
|
|
57
|
-
return false;
|
|
58
|
-
for (const k of ak) {
|
|
59
|
-
if (!Object.prototype.hasOwnProperty.call(bo, k))
|
|
60
|
-
return false;
|
|
61
|
-
if (!deepEqual(ao[k], bo[k]))
|
|
62
|
-
return false;
|
|
63
|
-
}
|
|
64
|
-
return true;
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Canonical JSON serialization: recursively sorts object keys so two values that
|
|
68
|
-
* differ only in key order (e.g. a jsonb round-trip) produce the same string.
|
|
69
|
-
* Use this when you need a comparable/cacheable string rather than a boolean —
|
|
70
|
-
* e.g. an echo guard or a `useEffect`/`useMemo` dependency.
|
|
71
|
-
*/
|
|
72
|
-
export function stableStringify(value) {
|
|
73
|
-
return JSON.stringify(sortKeysDeep(value));
|
|
74
|
-
}
|
|
75
|
-
function sortKeysDeep(value) {
|
|
76
|
-
if (Array.isArray(value))
|
|
77
|
-
return value.map(sortKeysDeep);
|
|
78
|
-
if (value && typeof value === 'object') {
|
|
79
|
-
const source = value;
|
|
80
|
-
return Object.keys(source)
|
|
81
|
-
.sort()
|
|
82
|
-
.reduce((acc, key) => {
|
|
83
|
-
acc[key] = sortKeysDeep(source[key]);
|
|
84
|
-
return acc;
|
|
85
|
-
}, {});
|
|
86
|
-
}
|
|
87
|
-
return value;
|
|
88
|
-
}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The fixed, public-facing message returned for an unclassified 500. A raw
|
|
3
|
-
* `err.message` can carry driver text, connection strings, or stack fragments,
|
|
4
|
-
* so it is never placed on the wire; a caller that needs those details logs the
|
|
5
|
-
* original error server-side before formatting the response.
|
|
6
|
-
*/
|
|
7
|
-
export declare const INTERNAL_ERROR_PUBLIC_MESSAGE = "An internal error occurred.";
|
|
8
|
-
/** The canonical error envelope. Every HTTP error response and every structured
|
|
9
|
-
* frame error carries this exact set of keys, regardless of which route or
|
|
10
|
-
* transport produced it. */
|
|
11
|
-
export interface ErrorEnvelope {
|
|
12
|
-
readonly type: string;
|
|
13
|
-
readonly code?: string;
|
|
14
|
-
readonly param?: string;
|
|
15
|
-
readonly message: string;
|
|
16
|
-
readonly doc_url?: string;
|
|
17
|
-
readonly request_id?: string;
|
|
18
|
-
/** Field-level failures collected together, so a single 4xx can report every
|
|
19
|
-
* invalid input at once — for example a schema push, a batch commit, or CLI
|
|
20
|
-
* argument validation — instead of failing on the first. Use `param` for the
|
|
21
|
-
* single-field case. */
|
|
22
|
-
readonly errors?: readonly {
|
|
23
|
-
readonly code?: string;
|
|
24
|
-
readonly message: string;
|
|
25
|
-
readonly param?: string;
|
|
26
|
-
}[];
|
|
27
|
-
/** Additional typed details. {@link AbloError} serialization spreads its
|
|
28
|
-
* `details` — such as `missingIds`, `conflicts`, or `retryAfterSeconds` — as
|
|
29
|
-
* top-level members here. Ignore any member you do not recognize, so new ones
|
|
30
|
-
* can be added without breaking you. */
|
|
31
|
-
readonly [key: string]: unknown;
|
|
32
|
-
}
|
|
33
|
-
/** Maps an {@link AbloError} subclass name to its default HTTP status. Each
|
|
34
|
-
* subclass is chosen to match the status — a validation error is a 400, a
|
|
35
|
-
* permission error a 403 — so a throw site picks the right class and code and
|
|
36
|
-
* the status follows. An explicit `httpStatus` is supplied only when it
|
|
37
|
-
* diverges, such as a 404 on the base class or a 503 on a server error. */
|
|
38
|
-
export declare function statusForType(type: string): number;
|
|
39
|
-
/**
|
|
40
|
-
* Converts any thrown value into the canonical {@link ErrorEnvelope} and an HTTP
|
|
41
|
-
* status. A typed {@link AbloError} is serialized through its own `toJSON`, so
|
|
42
|
-
* its code, param, doc_url, and structured details survive, and its status comes
|
|
43
|
-
* from an explicit `httpStatus` or, failing that, {@link statusForType}.
|
|
44
|
-
* Anything else becomes a 500 `internal_error` envelope — never a bare framework
|
|
45
|
-
* "Internal Server Error" body, and never a raw error string leaked onto the
|
|
46
|
-
* wire as an unregistered code.
|
|
47
|
-
*
|
|
48
|
-
* When `requestId` is supplied and the error does not already carry one, it is
|
|
49
|
-
* stamped into the body so the response and the `x-request-id` header agree for
|
|
50
|
-
* support correlation.
|
|
51
|
-
*/
|
|
52
|
-
export declare function errorEnvelope(err: unknown, requestId?: string): {
|
|
53
|
-
body: ErrorEnvelope;
|
|
54
|
-
status: number;
|
|
55
|
-
};
|
package/dist/wire/frames.d.ts
DELETED
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The write-path message shapes for the sync protocol. These cover the frames
|
|
3
|
-
* a client sends to commit work — {@link CommitMessage}, a batch of raw
|
|
4
|
-
* operations — and the server's {@link MutationResultMessage}
|
|
5
|
-
* acknowledgement. The same frames flow over a WebSocket connection and over
|
|
6
|
-
* the HTTP commit endpoint.
|
|
7
|
-
*
|
|
8
|
-
* Both the client and the server import these definitions from here, so the two
|
|
9
|
-
* sides cannot drift. Each interface is paired with a Zod validator
|
|
10
|
-
* ({@link commitOperationSchema}, {@link commitPayloadSchema}) pinned to it at
|
|
11
|
-
* compile time, so the runtime check and the type stay in lockstep. Changing
|
|
12
|
-
* any shape in this file changes the wire contract and requires the client and
|
|
13
|
-
* server to update together.
|
|
14
|
-
*/
|
|
15
|
-
import { z } from 'zod';
|
|
16
|
-
import type { OnStaleMode, ReadDependency, TrackDependency } from '../coordination/index.js';
|
|
17
|
-
import type { MutationResultMessageWire } from './commit.js';
|
|
18
|
-
/**
|
|
19
|
-
* A single operation within a {@link CommitMessage} batch. Each operation is
|
|
20
|
-
* the smallest unit the server applies atomically — one create, update,
|
|
21
|
-
* delete, archive, or unarchive against one model row.
|
|
22
|
-
*/
|
|
23
|
-
export interface CommitOperation {
|
|
24
|
-
type: 'CREATE' | 'UPDATE' | 'DELETE' | 'ARCHIVE' | 'UNARCHIVE';
|
|
25
|
-
model: string;
|
|
26
|
-
id?: string | null;
|
|
27
|
-
input?: Record<string, unknown> | null;
|
|
28
|
-
/**
|
|
29
|
-
* A client-generated transaction id for this one operation. The server
|
|
30
|
-
* stamps it onto the `sync_deltas.transaction_id` column so the originating
|
|
31
|
-
* client can recognize the resulting broadcast as an echo of its own
|
|
32
|
-
* optimistic write. This is distinct from the batch-level `clientTxId` on
|
|
33
|
-
* {@link CommitMessage}, which the server uses to deduplicate retried batches.
|
|
34
|
-
*/
|
|
35
|
-
transactionId?: string | null;
|
|
36
|
-
/**
|
|
37
|
-
* A read watermark captured when the client last read this row. The server
|
|
38
|
-
* checks whether the target has changed since this point; if it has, the
|
|
39
|
-
* operation's {@link CommitOperation.onStale} mode decides what happens.
|
|
40
|
-
*/
|
|
41
|
-
readAt?: number | null;
|
|
42
|
-
/**
|
|
43
|
-
* What to do when the server detects the row changed since
|
|
44
|
-
* {@link CommitOperation.readAt}. `'reject'` (the default) fails the
|
|
45
|
-
* operation with a stale-context error; `'overwrite'` applies the write
|
|
46
|
-
* regardless; `'notify'` holds the write and returns a
|
|
47
|
-
* {@link StaleNotification} for the caller to resolve.
|
|
48
|
-
*/
|
|
49
|
-
onStale?: OnStaleMode | null;
|
|
50
|
-
/**
|
|
51
|
-
* Write even when another participant holds a claim on this row. The default
|
|
52
|
-
* (`false`) rejects the operation with a claimed-entity error while a claim
|
|
53
|
-
* is held. Setting `bypass` overrides that, and the override is recorded. It
|
|
54
|
-
* is honored only for participants the claim guard trusts, such as human and
|
|
55
|
-
* framework identities; a bypass requested by an agent is ignored.
|
|
56
|
-
*/
|
|
57
|
-
bypass?: boolean | null;
|
|
58
|
-
/**
|
|
59
|
-
* The monotonic fencing token of the held claim this write was issued under
|
|
60
|
-
* ({@link https://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html Kleppmann fencing}).
|
|
61
|
-
* The server rejects the write if a later holder already advanced this
|
|
62
|
-
* entity's persisted high-water past the token — closing the "lapsed holder
|
|
63
|
-
* resumes after its successor came and went" residual that the live-lease
|
|
64
|
-
* claim guard cannot see. Absent on every unclaimed write.
|
|
65
|
-
*/
|
|
66
|
-
fenceToken?: number | null;
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Runtime validator for {@link CommitOperation}. Both commit transports — the
|
|
70
|
-
* WebSocket `commit` frame and the HTTP `/v1/commits` endpoint — run this check
|
|
71
|
-
* on every operation before it is applied, so a malformed operation is rejected
|
|
72
|
-
* at the edge. It builds on the shared coordination schema, widening `bypass`
|
|
73
|
-
* to also accept `null` so the validator and the interface match exactly. Note
|
|
74
|
-
* that `readAt` must be a number: it feeds the server's stale-check comparison,
|
|
75
|
-
* so a non-numeric watermark is refused here.
|
|
76
|
-
*/
|
|
77
|
-
export declare const commitOperationSchema: z.ZodObject<{
|
|
78
|
-
readAt: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
79
|
-
onStale: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
80
|
-
reject: "reject";
|
|
81
|
-
overwrite: "overwrite";
|
|
82
|
-
notify: "notify";
|
|
83
|
-
}>>>;
|
|
84
|
-
type: z.ZodEnum<{
|
|
85
|
-
CREATE: "CREATE";
|
|
86
|
-
UPDATE: "UPDATE";
|
|
87
|
-
DELETE: "DELETE";
|
|
88
|
-
ARCHIVE: "ARCHIVE";
|
|
89
|
-
UNARCHIVE: "UNARCHIVE";
|
|
90
|
-
}>;
|
|
91
|
-
model: z.ZodString;
|
|
92
|
-
id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
93
|
-
input: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
94
|
-
transactionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
95
|
-
fenceToken: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
96
|
-
bypass: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
97
|
-
}, z.core.$strip>;
|
|
98
|
-
/**
|
|
99
|
-
* A client-to-server frame that asks the server to commit a batch of operations
|
|
100
|
-
* atomically. It carries a list of {@link CommitOperation} entries plus the
|
|
101
|
-
* batch metadata below.
|
|
102
|
-
*/
|
|
103
|
-
export interface CommitMessage {
|
|
104
|
-
type: 'commit';
|
|
105
|
-
payload: {
|
|
106
|
-
operations: CommitOperation[];
|
|
107
|
-
clientTxId: string;
|
|
108
|
-
/**
|
|
109
|
-
* Optional lineage id linking this batch to the task that caused it. When
|
|
110
|
-
* present, the server validates it and records it on the delta's
|
|
111
|
-
* `caused_by_task_id` column for audit trails; when omitted or `null`, the
|
|
112
|
-
* batch simply carries no task attribution.
|
|
113
|
-
*/
|
|
114
|
-
causedByTaskId?: string | null;
|
|
115
|
-
/**
|
|
116
|
-
* The reads this batch's writes were premised on. Each entry names either a
|
|
117
|
-
* specific row (`{ model, id, readAt, fields? }`) or a sync group
|
|
118
|
-
* (`{ group, readAt }`) that must not have changed since its `readAt`
|
|
119
|
-
* watermark. The server checks every entry and applies its `onStale`
|
|
120
|
-
* disposition to the whole batch if one moved. When omitted, only the rows
|
|
121
|
-
* being written are checked for staleness.
|
|
122
|
-
*/
|
|
123
|
-
reads?: ReadDependency[] | null;
|
|
124
|
-
/**
|
|
125
|
-
* Durable read-dependencies to register for this batch's participant. Each
|
|
126
|
-
* entry — a row (`{ model, id }`) or a sync group (`{ group }`) — is persisted
|
|
127
|
-
* and re-checked against every future delta; a later match surfaces a
|
|
128
|
-
* `StaleNotification` on the participant's next commit. Distinct from `reads`,
|
|
129
|
-
* which is checked once here and discarded.
|
|
130
|
-
*/
|
|
131
|
-
track?: TrackDependency[] | null;
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Runtime validator for the payload of {@link CommitMessage}. It checks every
|
|
136
|
-
* field the server acts on — `operations`, `clientTxId`, `causedByTaskId`, and
|
|
137
|
-
* `reads` — validating each operation with {@link commitOperationSchema} and
|
|
138
|
-
* each read dependency with the shared read-dependency schema.
|
|
139
|
-
*/
|
|
140
|
-
export declare const commitPayloadSchema: z.ZodObject<{
|
|
141
|
-
operations: z.ZodArray<z.ZodObject<{
|
|
142
|
-
readAt: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
143
|
-
onStale: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
144
|
-
reject: "reject";
|
|
145
|
-
overwrite: "overwrite";
|
|
146
|
-
notify: "notify";
|
|
147
|
-
}>>>;
|
|
148
|
-
type: z.ZodEnum<{
|
|
149
|
-
CREATE: "CREATE";
|
|
150
|
-
UPDATE: "UPDATE";
|
|
151
|
-
DELETE: "DELETE";
|
|
152
|
-
ARCHIVE: "ARCHIVE";
|
|
153
|
-
UNARCHIVE: "UNARCHIVE";
|
|
154
|
-
}>;
|
|
155
|
-
model: z.ZodString;
|
|
156
|
-
id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
157
|
-
input: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
158
|
-
transactionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
159
|
-
fenceToken: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
160
|
-
bypass: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
161
|
-
}, z.core.$strip>>;
|
|
162
|
-
clientTxId: z.ZodString;
|
|
163
|
-
causedByTaskId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
164
|
-
reads: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
|
|
165
|
-
model: z.ZodString;
|
|
166
|
-
id: z.ZodString;
|
|
167
|
-
readAt: z.ZodNumber;
|
|
168
|
-
fields: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
169
|
-
onStale: z.ZodOptional<z.ZodEnum<{
|
|
170
|
-
reject: "reject";
|
|
171
|
-
overwrite: "overwrite";
|
|
172
|
-
notify: "notify";
|
|
173
|
-
}>>;
|
|
174
|
-
}, z.core.$strip>, z.ZodObject<{
|
|
175
|
-
group: z.ZodString;
|
|
176
|
-
readAt: z.ZodNumber;
|
|
177
|
-
onStale: z.ZodOptional<z.ZodEnum<{
|
|
178
|
-
reject: "reject";
|
|
179
|
-
overwrite: "overwrite";
|
|
180
|
-
notify: "notify";
|
|
181
|
-
}>>;
|
|
182
|
-
}, z.core.$strip>]>>>>;
|
|
183
|
-
track: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
|
|
184
|
-
model: z.ZodString;
|
|
185
|
-
id: z.ZodString;
|
|
186
|
-
readAt: z.ZodOptional<z.ZodNumber>;
|
|
187
|
-
}, z.core.$strip>, z.ZodObject<{
|
|
188
|
-
group: z.ZodString;
|
|
189
|
-
readAt: z.ZodOptional<z.ZodNumber>;
|
|
190
|
-
}, z.core.$strip>]>>>>;
|
|
191
|
-
}, z.core.$strip>;
|
|
192
|
-
/**
|
|
193
|
-
* The server's acknowledgement of a {@link CommitMessage}. Runtime shape and
|
|
194
|
-
* TypeScript type are both owned by `wire/commit.ts`; HTTP, WebSocket, and
|
|
195
|
-
* cached replay no longer maintain parallel receipt declarations.
|
|
196
|
-
*/
|
|
197
|
-
export type MutationResultMessage = MutationResultMessageWire;
|
package/dist/wire/frames.js
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The write-path message shapes for the sync protocol. These cover the frames
|
|
3
|
-
* a client sends to commit work — {@link CommitMessage}, a batch of raw
|
|
4
|
-
* operations — and the server's {@link MutationResultMessage}
|
|
5
|
-
* acknowledgement. The same frames flow over a WebSocket connection and over
|
|
6
|
-
* the HTTP commit endpoint.
|
|
7
|
-
*
|
|
8
|
-
* Both the client and the server import these definitions from here, so the two
|
|
9
|
-
* sides cannot drift. Each interface is paired with a Zod validator
|
|
10
|
-
* ({@link commitOperationSchema}, {@link commitPayloadSchema}) pinned to it at
|
|
11
|
-
* compile time, so the runtime check and the type stay in lockstep. Changing
|
|
12
|
-
* any shape in this file changes the wire contract and requires the client and
|
|
13
|
-
* server to update together.
|
|
14
|
-
*/
|
|
15
|
-
import { z } from 'zod';
|
|
16
|
-
// The runtime schema primitives are imported straight from the coordination
|
|
17
|
-
// schema module to keep this file's runtime dependencies limited to Zod.
|
|
18
|
-
import { commitOperationSchema as coordinationCommitOperationSchema, readDependencySchema, trackDependencySchema, } from '../coordination/schema.js';
|
|
19
|
-
/**
|
|
20
|
-
* Runtime validator for {@link CommitOperation}. Both commit transports — the
|
|
21
|
-
* WebSocket `commit` frame and the HTTP `/v1/commits` endpoint — run this check
|
|
22
|
-
* on every operation before it is applied, so a malformed operation is rejected
|
|
23
|
-
* at the edge. It builds on the shared coordination schema, widening `bypass`
|
|
24
|
-
* to also accept `null` so the validator and the interface match exactly. Note
|
|
25
|
-
* that `readAt` must be a number: it feeds the server's stale-check comparison,
|
|
26
|
-
* so a non-numeric watermark is refused here.
|
|
27
|
-
*/
|
|
28
|
-
export const commitOperationSchema = coordinationCommitOperationSchema.extend({
|
|
29
|
-
bypass: z.boolean().nullish(),
|
|
30
|
-
});
|
|
31
|
-
// Pins the schema to the interface: this fails to compile if either side drifts.
|
|
32
|
-
const _commitOperationContract = true;
|
|
33
|
-
void _commitOperationContract;
|
|
34
|
-
/**
|
|
35
|
-
* Runtime validator for the payload of {@link CommitMessage}. It checks every
|
|
36
|
-
* field the server acts on — `operations`, `clientTxId`, `causedByTaskId`, and
|
|
37
|
-
* `reads` — validating each operation with {@link commitOperationSchema} and
|
|
38
|
-
* each read dependency with the shared read-dependency schema.
|
|
39
|
-
*/
|
|
40
|
-
export const commitPayloadSchema = z.object({
|
|
41
|
-
operations: z.array(commitOperationSchema),
|
|
42
|
-
clientTxId: z.string(),
|
|
43
|
-
causedByTaskId: z.string().nullish(),
|
|
44
|
-
reads: z.array(readDependencySchema).nullish(),
|
|
45
|
-
track: z.array(trackDependencySchema).nullish(),
|
|
46
|
-
});
|
|
47
|
-
// Pins the schema to the payload type: fails to compile if either side drifts.
|
|
48
|
-
const _commitPayloadContract = true;
|
|
49
|
-
void _commitPayloadContract;
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Wraps an already-fetched page of rows in the uniform {@link ListEnvelope}.
|
|
3
|
-
*
|
|
4
|
-
* Pagination stays the caller's job — fetch one more row than the limit to
|
|
5
|
-
* decide `hasMore`, and derive the cursor from the last row's sort key. This
|
|
6
|
-
* helper only applies the envelope so no endpoint has to build the shape by
|
|
7
|
-
* hand. The defaults describe a small, unpaginated collection
|
|
8
|
-
* (`has_more: false`, `next_cursor: null`); a paginated endpoint passes both
|
|
9
|
-
* explicitly.
|
|
10
|
-
*/
|
|
11
|
-
export function listEnvelope(data, opts = {}) {
|
|
12
|
-
return {
|
|
13
|
-
object: 'list',
|
|
14
|
-
data,
|
|
15
|
-
has_more: opts.hasMore ?? false,
|
|
16
|
-
next_cursor: opts.nextCursor ?? null,
|
|
17
|
-
};
|
|
18
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|