@abloatai/ablo 0.25.0 → 0.27.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 +5 -3
- package/CHANGELOG.md +34 -0
- package/README.md +104 -88
- package/dist/BaseSyncedStore.d.ts +140 -266
- package/dist/BaseSyncedStore.js +338 -739
- package/dist/Database.d.ts +62 -77
- package/dist/Database.js +106 -127
- package/dist/{ObjectPool.d.ts → InstanceCache.d.ts} +10 -13
- package/dist/{ObjectPool.js → InstanceCache.js} +91 -83
- package/dist/LazyReferenceCollection.d.ts +11 -15
- package/dist/LazyReferenceCollection.js +16 -15
- package/dist/Model.d.ts +37 -52
- package/dist/Model.js +52 -69
- package/dist/ModelRegistry.d.ts +46 -25
- package/dist/ModelRegistry.js +32 -30
- package/dist/NetworkMonitor.d.ts +5 -6
- package/dist/NetworkMonitor.js +6 -7
- package/dist/SyncClient.d.ts +119 -109
- package/dist/SyncClient.js +303 -224
- package/dist/SyncEngineContext.d.ts +1 -3
- package/dist/SyncEngineContext.js +1 -2
- package/dist/adapters/alwaysOnline.d.ts +6 -8
- package/dist/adapters/alwaysOnline.js +6 -8
- package/dist/adapters/inMemoryStorage.d.ts +9 -9
- package/dist/adapters/inMemoryStorage.js +9 -9
- package/dist/agent/Agent.d.ts +39 -31
- package/dist/agent/Agent.js +35 -23
- package/dist/agent/index.d.ts +4 -4
- package/dist/agent/index.js +5 -5
- package/dist/agent/session.d.ts +47 -44
- package/dist/agent/session.js +37 -48
- package/dist/agent/types.d.ts +26 -31
- package/dist/agent/types.js +6 -7
- package/dist/ai-sdk/coordinatedTool.d.ts +108 -0
- package/dist/ai-sdk/{coordinated-tool.js → coordinatedTool.js} +44 -38
- package/dist/ai-sdk/coordinationContext.d.ts +46 -0
- package/dist/ai-sdk/{coordination-context.js → coordinationContext.js} +30 -31
- package/dist/ai-sdk/index.d.ts +25 -22
- package/dist/ai-sdk/index.js +25 -22
- package/dist/ai-sdk/wrap.d.ts +7 -8
- package/dist/ai-sdk/wrap.js +2 -2
- package/dist/auth/credentialPolicy.d.ts +74 -71
- package/dist/auth/credentialPolicy.js +51 -56
- package/dist/auth/credentialSource.d.ts +7 -18
- package/dist/auth/credentialSource.js +10 -18
- package/dist/auth/index.d.ts +59 -58
- package/dist/auth/index.js +34 -40
- package/dist/auth/schemas.d.ts +5 -4
- package/dist/auth/schemas.js +5 -4
- package/dist/batching/index.d.ts +19 -21
- package/dist/batching/index.js +14 -17
- package/dist/cli.cjs +483 -369
- package/dist/client/Ablo.d.ts +107 -836
- package/dist/client/Ablo.js +174 -833
- package/dist/client/ApiClient.d.ts +44 -20
- package/dist/client/ApiClient.js +193 -44
- package/dist/client/auth.d.ts +51 -60
- package/dist/client/auth.js +137 -110
- package/dist/client/claimHeartbeatLoop.d.ts +50 -0
- package/dist/client/claimHeartbeatLoop.js +88 -0
- package/dist/client/consoleLogger.d.ts +35 -0
- package/dist/client/consoleLogger.js +44 -0
- package/dist/client/createInternalComponents.d.ts +14 -17
- package/dist/client/createInternalComponents.js +26 -31
- package/dist/client/createModelProxy.d.ts +130 -120
- package/dist/client/createModelProxy.js +158 -124
- package/dist/client/credentialEndpoint.d.ts +61 -0
- package/dist/client/credentialEndpoint.js +86 -0
- package/dist/client/functionalUpdate.d.ts +29 -27
- package/dist/client/functionalUpdate.js +21 -21
- package/dist/client/hostedEndpoints.d.ts +21 -0
- package/dist/client/hostedEndpoints.js +21 -0
- package/dist/client/httpClient.d.ts +58 -54
- package/dist/client/httpClient.js +29 -31
- package/dist/client/identity.d.ts +15 -20
- package/dist/client/identity.js +49 -59
- package/dist/client/modelRegistration.d.ts +10 -0
- package/dist/client/modelRegistration.js +301 -0
- package/dist/client/options.d.ts +373 -0
- package/dist/client/options.js +6 -0
- package/dist/client/registerDataSource.d.ts +9 -9
- package/dist/client/registerDataSource.js +15 -16
- package/dist/client/resourceTypes.d.ts +333 -0
- package/dist/client/resourceTypes.js +7 -0
- package/dist/client/schemaConfig.d.ts +44 -0
- package/dist/client/schemaConfig.js +176 -0
- package/dist/client/sessionMint.d.ts +17 -13
- package/dist/client/sessionMint.js +26 -31
- package/dist/client/validateAbloOptions.d.ts +12 -14
- package/dist/client/validateAbloOptions.js +9 -10
- package/dist/client/writeOptionsSchema.d.ts +18 -16
- package/dist/client/writeOptionsSchema.js +23 -20
- package/dist/client/wsMutationExecutor.d.ts +28 -0
- package/dist/client/wsMutationExecutor.js +71 -0
- package/dist/context.d.ts +6 -4
- package/dist/context.js +6 -7
- package/dist/coordination/index.d.ts +13 -4
- package/dist/coordination/index.js +29 -4
- package/dist/coordination/schema.d.ts +176 -128
- package/dist/coordination/schema.js +197 -133
- package/dist/coordination/trace.d.ts +9 -11
- package/dist/coordination/trace.js +13 -15
- package/dist/core/DatabaseManager.d.ts +5 -8
- package/dist/core/DatabaseManager.js +38 -40
- package/dist/core/QueryProcessor.d.ts +7 -9
- package/dist/core/QueryProcessor.js +27 -34
- package/dist/core/QueryView.d.ts +17 -5
- package/dist/core/QueryView.js +6 -7
- package/dist/core/StoreManager.d.ts +14 -16
- package/dist/core/StoreManager.js +26 -25
- package/dist/core/ViewRegistry.d.ts +5 -5
- package/dist/core/ViewRegistry.js +4 -4
- package/dist/core/index.d.ts +18 -13
- package/dist/core/index.js +32 -26
- package/dist/core/openIDBWithTimeout.d.ts +38 -36
- package/dist/core/openIDBWithTimeout.js +57 -54
- package/dist/core/queryUtils.d.ts +45 -0
- package/dist/core/queryUtils.js +69 -0
- package/dist/core/storeContract.d.ts +145 -0
- package/dist/core/storeContract.js +12 -0
- package/dist/environment.d.ts +28 -0
- package/dist/environment.js +21 -0
- package/dist/errorCodes.d.ts +118 -101
- package/dist/errorCodes.js +277 -260
- package/dist/errors.d.ts +170 -165
- package/dist/errors.js +161 -151
- package/dist/index.d.ts +30 -27
- package/dist/index.js +90 -82
- package/dist/interfaces/index.d.ts +108 -133
- package/dist/interfaces/index.js +5 -4
- package/dist/keys/index.d.ts +27 -29
- package/dist/keys/index.js +59 -49
- package/dist/mutators/RecordingTransaction.d.ts +16 -16
- package/dist/mutators/RecordingTransaction.js +31 -37
- package/dist/mutators/Transaction.d.ts +18 -26
- package/dist/mutators/Transaction.js +14 -20
- package/dist/mutators/UndoManager.d.ts +122 -131
- package/dist/mutators/UndoManager.js +149 -155
- package/dist/mutators/defineMutators.d.ts +24 -37
- package/dist/mutators/defineMutators.js +14 -20
- package/dist/mutators/inverseOp.d.ts +12 -15
- package/dist/mutators/inverseOp.js +12 -15
- package/dist/mutators/mutateActions.d.ts +10 -9
- package/dist/mutators/mutateActions.js +1 -1
- package/dist/mutators/readerActions.d.ts +9 -8
- package/dist/mutators/readerActions.js +2 -2
- package/dist/mutators/undoApply.d.ts +31 -27
- package/dist/mutators/undoApply.js +26 -24
- package/dist/policy/index.d.ts +5 -3
- package/dist/policy/index.js +5 -3
- package/dist/policy/types.d.ts +105 -101
- package/dist/policy/types.js +67 -66
- package/dist/query/client.d.ts +32 -16
- package/dist/query/client.js +103 -72
- package/dist/query/types.d.ts +37 -60
- package/dist/query/types.js +13 -33
- package/dist/react/AbloProvider.d.ts +7 -11
- package/dist/react/AbloProvider.js +24 -17
- package/dist/react/context.d.ts +27 -146
- package/dist/react/context.js +9 -10
- package/dist/react/index.d.ts +41 -42
- package/dist/react/index.js +37 -38
- package/dist/react/internalContext.d.ts +17 -19
- package/dist/react/useAblo.d.ts +23 -22
- package/dist/react/useAblo.js +17 -15
- package/dist/react/useCurrentUserId.d.ts +8 -7
- package/dist/react/useCurrentUserId.js +8 -7
- package/dist/react/useErrorListener.d.ts +7 -7
- package/dist/react/useErrorListener.js +11 -12
- package/dist/react/useMutationFailureListener.d.ts +8 -8
- package/dist/react/useMutationFailureListener.js +9 -9
- package/dist/react/useMutators.d.ts +11 -11
- package/dist/react/useMutators.js +10 -4
- package/dist/react/useReactive.js +2 -3
- package/dist/react/useSyncStatus.d.ts +4 -6
- package/dist/react/useUndoScope.d.ts +7 -9
- package/dist/react/useUndoScope.js +3 -3
- package/dist/schema/coordination.d.ts +21 -25
- package/dist/schema/coordination.js +21 -25
- package/dist/schema/ddl.d.ts +43 -39
- package/dist/schema/ddl.js +75 -68
- package/dist/schema/ddlLock.d.ts +35 -0
- package/dist/schema/ddlLock.js +46 -0
- package/dist/schema/diff.d.ts +99 -61
- package/dist/schema/diff.js +43 -34
- package/dist/schema/field.d.ts +37 -42
- package/dist/schema/field.js +36 -49
- package/dist/schema/generate.d.ts +12 -12
- package/dist/schema/generate.js +12 -12
- package/dist/schema/index.d.ts +5 -4
- package/dist/schema/index.js +29 -21
- package/dist/schema/model.d.ts +121 -146
- package/dist/schema/model.js +24 -35
- package/dist/schema/openapi.d.ts +10 -9
- package/dist/schema/openapi.js +7 -1
- package/dist/schema/queries.d.ts +30 -32
- package/dist/schema/queries.js +24 -25
- package/dist/schema/relation.d.ts +89 -99
- package/dist/schema/relation.js +13 -13
- package/dist/schema/residency.d.ts +38 -0
- package/dist/schema/residency.js +30 -0
- package/dist/schema/roles.d.ts +45 -27
- package/dist/schema/roles.js +52 -21
- package/dist/schema/schema.d.ts +36 -45
- package/dist/schema/schema.js +42 -39
- package/dist/schema/select.d.ts +13 -13
- package/dist/schema/select.js +13 -13
- package/dist/schema/serialize.d.ts +36 -39
- package/dist/schema/serialize.js +27 -31
- package/dist/schema/sugar.d.ts +17 -32
- package/dist/schema/sugar.js +14 -29
- package/dist/schema/{sync-delta-row.d.ts → syncDeltaRow.d.ts} +27 -50
- package/dist/schema/syncDeltaRow.js +89 -0
- package/dist/schema/tenancy.d.ts +44 -46
- package/dist/schema/tenancy.js +46 -48
- package/dist/server/adapter.d.ts +58 -58
- package/dist/server/adapter.js +13 -14
- package/dist/server/commit.d.ts +60 -64
- package/dist/server/index.d.ts +9 -10
- package/dist/server/index.js +1 -1
- package/dist/server/readConfig.d.ts +70 -0
- package/dist/server/readConfig.js +8 -0
- package/dist/server/storageMode.d.ts +23 -0
- package/dist/server/storageMode.js +17 -0
- package/dist/source/adapter.d.ts +31 -26
- package/dist/source/adapter.js +10 -10
- package/dist/source/adapters/drizzle.d.ts +28 -23
- package/dist/source/adapters/drizzle.js +34 -28
- package/dist/source/adapters/kysely.d.ts +27 -25
- package/dist/source/adapters/kysely.js +28 -26
- package/dist/source/adapters/memory.d.ts +8 -7
- package/dist/source/adapters/memory.js +10 -9
- package/dist/source/adapters/prisma.d.ts +13 -12
- package/dist/source/adapters/prisma.js +27 -29
- package/dist/source/conformance.d.ts +18 -11
- package/dist/source/conformance.js +27 -19
- package/dist/source/connector.d.ts +31 -32
- package/dist/source/connector.js +30 -28
- package/dist/source/connectorProtocol.d.ts +160 -0
- package/dist/source/connectorProtocol.js +162 -0
- package/dist/source/contract.d.ts +26 -27
- package/dist/source/contract.js +28 -29
- package/dist/source/factory.d.ts +94 -0
- package/dist/source/factory.js +268 -0
- package/dist/source/index.d.ts +10 -462
- package/dist/source/index.js +17 -421
- package/dist/source/migrations.d.ts +9 -9
- package/dist/source/migrations.js +9 -9
- package/dist/source/next.d.ts +10 -11
- package/dist/source/next.js +7 -8
- package/dist/source/pushQueue.d.ts +70 -48
- package/dist/source/pushQueue.js +36 -29
- package/dist/source/signing.d.ts +88 -0
- package/dist/source/signing.js +159 -0
- package/dist/source/types.d.ts +351 -0
- package/dist/source/types.js +43 -0
- package/dist/stores/ObjectStore.d.ts +11 -12
- package/dist/stores/ObjectStore.js +34 -35
- package/dist/stores/ObjectStoreContract.d.ts +12 -15
- package/dist/stores/SyncActionStore.d.ts +8 -12
- package/dist/stores/SyncActionStore.js +77 -46
- package/dist/surface.d.ts +28 -21
- package/dist/surface.js +28 -20
- package/dist/sync/{BootstrapHelper.d.ts → BootstrapFetcher.d.ts} +37 -45
- package/dist/sync/{BootstrapHelper.js → BootstrapFetcher.js} +101 -80
- package/dist/sync/ConnectionManager.d.ts +47 -50
- package/dist/sync/ConnectionManager.js +74 -70
- package/dist/sync/NetworkProbe.d.ts +27 -31
- package/dist/sync/NetworkProbe.js +67 -72
- package/dist/sync/{HydrationCoordinator.d.ts → OnDemandLoader.d.ts} +49 -36
- package/dist/sync/{HydrationCoordinator.js → OnDemandLoader.js} +79 -54
- package/dist/sync/{AreaOfInterestManager.d.ts → SubscriptionManager.d.ts} +45 -59
- package/dist/sync/{AreaOfInterestManager.js → SubscriptionManager.js} +44 -52
- package/dist/sync/SyncWebSocket.d.ts +175 -250
- package/dist/sync/SyncWebSocket.js +431 -769
- package/dist/sync/awaitClaimGrant.d.ts +18 -18
- package/dist/sync/awaitClaimGrant.js +38 -30
- package/dist/sync/bootstrapApply.d.ts +70 -0
- package/dist/sync/bootstrapApply.js +73 -0
- package/dist/sync/commitFrames.d.ts +44 -0
- package/dist/sync/commitFrames.js +94 -0
- package/dist/sync/createClaimStream.d.ts +23 -22
- package/dist/sync/createClaimStream.js +108 -25
- package/dist/sync/createPresenceStream.d.ts +19 -18
- package/dist/sync/createPresenceStream.js +25 -26
- package/dist/sync/createSnapshot.d.ts +13 -17
- package/dist/sync/createSnapshot.js +20 -26
- package/dist/sync/credentialLifecycle.d.ts +175 -0
- package/dist/sync/credentialLifecycle.js +322 -0
- package/dist/sync/deltaPipeline.d.ts +113 -0
- package/dist/sync/deltaPipeline.js +261 -0
- package/dist/sync/groupChange.d.ts +113 -0
- package/dist/sync/groupChange.js +242 -0
- package/dist/sync/heartbeat.d.ts +63 -0
- package/dist/sync/heartbeat.js +91 -0
- package/dist/sync/participants.d.ts +27 -27
- package/dist/sync/schemas.d.ts +3 -2
- package/dist/sync/schemas.js +14 -10
- package/dist/sync/syncCursor.d.ts +40 -0
- package/dist/sync/syncCursor.js +55 -0
- package/dist/sync/syncPlan.d.ts +54 -0
- package/dist/sync/syncPlan.js +50 -0
- package/dist/sync/syncPosition.d.ts +54 -49
- package/dist/sync/syncPosition.js +57 -52
- package/dist/sync/wsFrameHandlers.d.ts +116 -0
- package/dist/sync/wsFrameHandlers.js +374 -0
- package/dist/testing/fixtures/bootstrap.d.ts +21 -17
- package/dist/testing/fixtures/bootstrap.js +12 -6
- package/dist/testing/fixtures/deltas.d.ts +31 -34
- package/dist/testing/fixtures/deltas.js +30 -33
- package/dist/testing/fixtures/models.d.ts +11 -10
- package/dist/testing/fixtures/models.js +12 -10
- package/dist/testing/helpers/{react-wrapper.d.ts → reactWrapper.d.ts} +13 -10
- package/dist/testing/helpers/{react-wrapper.js → reactWrapper.js} +15 -12
- package/dist/testing/helpers/{sync-engine-harness.d.ts → syncEngineHarness.d.ts} +17 -18
- package/dist/testing/helpers/{sync-engine-harness.js → syncEngineHarness.js} +14 -11
- package/dist/testing/helpers/wait.d.ts +13 -8
- package/dist/testing/helpers/wait.js +13 -8
- package/dist/testing/index.d.ts +4 -4
- package/dist/testing/index.js +3 -3
- package/dist/testing/mocks/MockMutationExecutor.d.ts +18 -17
- package/dist/testing/mocks/MockMutationExecutor.js +15 -14
- package/dist/testing/mocks/MockNetworkMonitor.d.ts +8 -8
- package/dist/testing/mocks/MockNetworkMonitor.js +8 -8
- package/dist/testing/mocks/MockSyncContext.d.ts +21 -34
- package/dist/testing/mocks/MockSyncContext.js +16 -45
- package/dist/testing/mocks/MockSyncStore.d.ts +14 -14
- package/dist/testing/mocks/MockSyncStore.js +11 -11
- package/dist/testing/mocks/MockWebSocket.d.ts +28 -24
- package/dist/testing/mocks/MockWebSocket.js +22 -21
- package/dist/transactions/TransactionQueue.d.ts +190 -221
- package/dist/transactions/TransactionQueue.js +424 -822
- package/dist/transactions/TransactionStore.d.ts +20 -0
- package/dist/transactions/TransactionStore.js +53 -0
- package/dist/transactions/UnconfirmedWrites.d.ts +82 -0
- package/dist/transactions/UnconfirmedWrites.js +104 -0
- package/dist/transactions/coalesceRules.d.ts +58 -0
- package/dist/transactions/coalesceRules.js +140 -0
- package/dist/transactions/commitPayload.d.ts +130 -0
- package/dist/transactions/commitPayload.js +143 -0
- package/dist/transactions/deltaConfirmation.d.ts +58 -0
- package/dist/transactions/deltaConfirmation.js +215 -0
- package/dist/transactions/optimisticApply.d.ts +49 -0
- package/dist/transactions/optimisticApply.js +65 -0
- package/dist/transactions/replayValidation.d.ts +99 -0
- package/dist/transactions/replayValidation.js +111 -0
- package/dist/types/global.d.ts +46 -41
- package/dist/types/global.js +20 -19
- package/dist/types/index.d.ts +74 -80
- package/dist/types/index.js +22 -27
- package/dist/types/modelData.d.ts +10 -0
- package/dist/types/modelData.js +9 -0
- package/dist/types/participant.d.ts +20 -0
- package/dist/types/participant.js +10 -0
- package/dist/types/streams.d.ts +216 -209
- package/dist/types/streams.js +7 -7
- package/dist/utils/asyncIterator.d.ts +25 -32
- package/dist/utils/asyncIterator.js +25 -32
- package/dist/utils/duration.d.ts +12 -15
- package/dist/utils/duration.js +12 -15
- package/dist/utils/mobxSetup.d.ts +53 -0
- package/dist/utils/{mobx-setup.js → mobxSetup.js} +44 -100
- package/dist/webhooks/events.d.ts +21 -16
- package/dist/webhooks/events.js +10 -8
- package/dist/webhooks/index.d.ts +5 -7
- package/dist/webhooks/index.js +5 -7
- package/dist/{schema/sync-delta-wire.d.ts → wire/delta.d.ts} +58 -41
- package/dist/wire/delta.js +114 -0
- package/dist/wire/errorEnvelope.d.ts +35 -27
- package/dist/wire/errorEnvelope.js +38 -32
- package/dist/wire/frames.d.ts +150 -67
- package/dist/wire/frames.js +48 -1
- package/dist/wire/index.d.ts +18 -13
- package/dist/wire/index.js +36 -13
- package/dist/wire/listEnvelope.d.ts +16 -23
- package/dist/wire/listEnvelope.js +7 -6
- package/dist/wire/protocol.d.ts +38 -0
- package/dist/wire/protocol.js +38 -0
- package/dist/wire/protocolVersion.d.ts +60 -0
- package/dist/wire/protocolVersion.js +67 -0
- package/docs/api-keys.md +4 -3
- package/docs/coordination.md +59 -0
- package/docs/examples/existing-python-backend.md +3 -3
- package/docs/identity.md +4 -4
- package/docs/integration-guide.md +1 -1
- package/docs/react.md +1 -1
- package/docs/sessions.md +5 -7
- package/package.json +24 -21
- package/dist/ai-sdk/coordinated-tool.d.ts +0 -101
- package/dist/ai-sdk/coordination-context.d.ts +0 -52
- package/dist/client/index.d.ts +0 -36
- package/dist/client/index.js +0 -33
- package/dist/config/index.d.ts +0 -10
- package/dist/config/index.js +0 -12
- package/dist/core/query-utils.d.ts +0 -34
- package/dist/core/query-utils.js +0 -59
- package/dist/interfaces/headless.d.ts +0 -95
- package/dist/interfaces/headless.js +0 -41
- package/dist/query/index.d.ts +0 -6
- package/dist/query/index.js +0 -5
- package/dist/realtime/index.d.ts +0 -10
- package/dist/realtime/index.js +0 -9
- package/dist/schema/plane.d.ts +0 -23
- package/dist/schema/plane.js +0 -19
- package/dist/schema/sync-delta-row.js +0 -103
- package/dist/schema/sync-delta-wire.js +0 -102
- package/dist/server/next.d.ts +0 -51
- package/dist/server/next.js +0 -47
- package/dist/server/read-config.d.ts +0 -67
- package/dist/server/read-config.js +0 -8
- package/dist/server/storage-mode.d.ts +0 -1
- package/dist/server/storage-mode.js +0 -18
- package/dist/source/connector-protocol.d.ts +0 -159
- package/dist/source/connector-protocol.js +0 -161
- package/dist/sync/OfflineFlush.d.ts +0 -9
- package/dist/sync/OfflineFlush.js +0 -22
- package/dist/sync/OfflineTransactionStore.d.ts +0 -37
- package/dist/sync/OfflineTransactionStore.js +0 -263
- package/dist/transactions/OptimisticEchoTracker.d.ts +0 -82
- package/dist/transactions/OptimisticEchoTracker.js +0 -104
- package/dist/transactions/index.d.ts +0 -16
- package/dist/transactions/index.js +0 -7
- package/dist/transactions/mutation-error-handler.d.ts +0 -5
- package/dist/transactions/mutation-error-handler.js +0 -39
- package/dist/utils/mobx-setup.d.ts +0 -42
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The framework-neutral store contract. {@link SyncStoreContract} is the minimal
|
|
3
|
+
* store interface the SDK's hooks and mutators are written against, and
|
|
4
|
+
* {@link BaseSyncedStore} is the concrete class that implements it. Framework
|
|
5
|
+
* integrations, such as the React bindings, re-export these types, so a hook can
|
|
6
|
+
* accept any store that satisfies the contract without depending on a particular
|
|
7
|
+
* UI framework.
|
|
8
|
+
*
|
|
9
|
+
* This module is type-only: it has no runtime imports and contributes nothing to
|
|
10
|
+
* the runtime bundle beyond the erased interface declarations.
|
|
11
|
+
*/
|
|
12
|
+
import type { Model } from '../Model.js';
|
|
13
|
+
import type { ModelScope } from '../types/index.js';
|
|
14
|
+
import type { QueryView, QueryViewOptions } from './QueryView.js';
|
|
15
|
+
import type { ViewRegistry } from './ViewRegistry.js';
|
|
16
|
+
import type { ParticipantScope } from '../sync/participants.js';
|
|
17
|
+
/**
|
|
18
|
+
* A snapshot of the client's synchronization state, shaped for binding to UI.
|
|
19
|
+
* {@link SyncStoreContract.syncStatus} exposes a reactive instance of this, and
|
|
20
|
+
* the `useSyncStatus()` hook reads its fields to render connection and progress
|
|
21
|
+
* indicators.
|
|
22
|
+
*/
|
|
23
|
+
export interface SyncStatus {
|
|
24
|
+
state: 'idle' | 'syncing' | 'error' | 'offline' | 'reconnecting';
|
|
25
|
+
progress: number;
|
|
26
|
+
error?: Error;
|
|
27
|
+
/** When true, the error is a session/auth error requiring re-authentication. */
|
|
28
|
+
isSessionError: boolean;
|
|
29
|
+
lastSyncAt?: Date;
|
|
30
|
+
pendingChanges: number;
|
|
31
|
+
offlineSince?: Date;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* A single locally-originated mutation, observed as it flows through the commit
|
|
35
|
+
* stream. The undo system records these to build its inverse operations: one is
|
|
36
|
+
* emitted per local create, update, delete, or archive. Changes arriving from
|
|
37
|
+
* other participants do not appear here — they apply through a separate path
|
|
38
|
+
* that does not queue mutations. Because `previousData` captures the field
|
|
39
|
+
* values as they were before the edit, each event carries everything needed to
|
|
40
|
+
* derive its inverse, with no separate snapshot step. A store exposes this
|
|
41
|
+
* stream through {@link SyncStoreContract.subscribeLocalMutations}.
|
|
42
|
+
*/
|
|
43
|
+
export interface LocalMutation {
|
|
44
|
+
type: 'create' | 'update' | 'delete' | 'archive' | 'unarchive';
|
|
45
|
+
/** The registered name of the mutated model, for example `'SlideLayer'`. */
|
|
46
|
+
modelName: string;
|
|
47
|
+
modelId: string;
|
|
48
|
+
/** The new field values, for a create or an update. */
|
|
49
|
+
data?: Record<string, unknown> | null;
|
|
50
|
+
/** The field values as they were before the edit. For an update these form
|
|
51
|
+
* the inverse patch; for a delete they hold the full row needed to recreate
|
|
52
|
+
* it. */
|
|
53
|
+
previousData?: Record<string, unknown> | null;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* The minimal store interface the SDK's hooks and mutators depend on. Provide a
|
|
57
|
+
* concrete store that implements it — {@link BaseSyncedStore} is the built-in
|
|
58
|
+
* implementation — and the hooks work against your store without knowing its
|
|
59
|
+
* exact type. Optional members exist so lightweight test doubles can implement
|
|
60
|
+
* only the parts they exercise.
|
|
61
|
+
*/
|
|
62
|
+
export interface SyncStoreContract {
|
|
63
|
+
/**
|
|
64
|
+
* Subscribes to the stream of local mutations for undo recording, delivering
|
|
65
|
+
* each optimistic write before it is acknowledged by the server. See
|
|
66
|
+
* {@link LocalMutation}. Returns a function that removes the subscription.
|
|
67
|
+
* This is optional: when a store does not implement it, undo scopes simply
|
|
68
|
+
* record nothing.
|
|
69
|
+
*/
|
|
70
|
+
subscribeLocalMutations?(handler: (mutation: LocalMutation) => void): () => void;
|
|
71
|
+
retrieve(modelClass: abstract new (...args: never[]) => Model, id: string): Model | undefined;
|
|
72
|
+
queryByClass(modelClass: abstract new (...args: never[]) => Model, options?: {
|
|
73
|
+
predicate?: (model: Model) => boolean;
|
|
74
|
+
scope?: ModelScope;
|
|
75
|
+
orderBy?: keyof Model;
|
|
76
|
+
order?: 'asc' | 'desc';
|
|
77
|
+
limit?: number;
|
|
78
|
+
offset?: number;
|
|
79
|
+
}): {
|
|
80
|
+
data: Model[];
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* Saves one entity, creating it if new or updating it if it already exists.
|
|
84
|
+
* Calling `save` repeatedly within the same tick is efficient: the writes are
|
|
85
|
+
* coalesced and persisted, then sent to the server, as a single commit. There
|
|
86
|
+
* is deliberately no bulk method — issue one `save` per row and let the tick
|
|
87
|
+
* boundary batch them.
|
|
88
|
+
*
|
|
89
|
+
* Pass `skipValidation` on trusted, high-volume paths — bulk import or
|
|
90
|
+
* hydration, where the data has already been validated — to skip the per-row
|
|
91
|
+
* schema check, which is a measurable cost at that volume.
|
|
92
|
+
*/
|
|
93
|
+
save(model: Model, options?: {
|
|
94
|
+
skipValidation?: boolean;
|
|
95
|
+
}): Promise<void>;
|
|
96
|
+
delete(model: Model): Promise<void>;
|
|
97
|
+
archive(model: Model): Promise<void>;
|
|
98
|
+
unarchive(model: Model): Promise<void>;
|
|
99
|
+
/** The in-memory object pool: look up individual entities or collections by
|
|
100
|
+
* id or model name, create views, and resolve foreign-key relationships. */
|
|
101
|
+
pool: {
|
|
102
|
+
get(id: string): Model | undefined;
|
|
103
|
+
getByTypeName(typename: string, scope?: ModelScope): Model[];
|
|
104
|
+
getByForeignKey(modelName: string, fieldName: string, fieldValue: string): Model[];
|
|
105
|
+
createFromData(data: Record<string, unknown>): Model | null;
|
|
106
|
+
hasForeignKeyIndex(typename: string, fieldName: string): boolean;
|
|
107
|
+
createView<T extends Record<string, unknown>>(typename: string, options?: QueryViewOptions<T>): QueryView<T>;
|
|
108
|
+
viewRegistry: ViewRegistry;
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* Reactive getters for the current sync state. In the built-in store these
|
|
112
|
+
* are backed by observable computeds, so reading them inside a reactive
|
|
113
|
+
* context — an observer component or a reaction — re-runs that context when
|
|
114
|
+
* the state changes. Code that prefers not to work with the reactivity system
|
|
115
|
+
* directly can read the same values through the `useSyncStatus()` hook.
|
|
116
|
+
*/
|
|
117
|
+
readonly isReady: boolean;
|
|
118
|
+
readonly isSyncing: boolean;
|
|
119
|
+
readonly isOffline: boolean;
|
|
120
|
+
readonly isReconnecting: boolean;
|
|
121
|
+
readonly isError: boolean;
|
|
122
|
+
readonly hasUnsyncedChanges: boolean;
|
|
123
|
+
/**
|
|
124
|
+
* Manages the connection's area of interest — the dynamic set of data it
|
|
125
|
+
* subscribes to. Call `enterScope` and `leaveScope` to move that interest as
|
|
126
|
+
* the user navigates between documents, and `pinScope` and `unpinScope` to
|
|
127
|
+
* keep a scope subscribed while it stays important, such as while a claim is
|
|
128
|
+
* held. Every scope resolves through the same resolver the claim path uses, so
|
|
129
|
+
* read subscriptions and write claims always agree on which group they refer
|
|
130
|
+
* to. These are optional and do nothing until the connection is open.
|
|
131
|
+
*/
|
|
132
|
+
enterScope?(scope: ParticipantScope, opts?: {
|
|
133
|
+
hydrate?: boolean;
|
|
134
|
+
}): Promise<void>;
|
|
135
|
+
leaveScope?(scope: ParticipantScope): Promise<void>;
|
|
136
|
+
pinScope?(scope: ParticipantScope): Promise<void>;
|
|
137
|
+
unpinScope?(scope: ParticipantScope): Promise<void>;
|
|
138
|
+
/**
|
|
139
|
+
* The full reactive {@link SyncStatus} record. The `useSyncStatus()` hook
|
|
140
|
+
* reads its fields — `state`, `progress`, `pendingChanges`, `isSessionError`,
|
|
141
|
+
* and `error` — to present the current sync state. It is part of the contract
|
|
142
|
+
* so hooks and test doubles can read or set it directly.
|
|
143
|
+
*/
|
|
144
|
+
readonly syncStatus: SyncStatus;
|
|
145
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The framework-neutral store contract. {@link SyncStoreContract} is the minimal
|
|
3
|
+
* store interface the SDK's hooks and mutators are written against, and
|
|
4
|
+
* {@link BaseSyncedStore} is the concrete class that implements it. Framework
|
|
5
|
+
* integrations, such as the React bindings, re-export these types, so a hook can
|
|
6
|
+
* accept any store that satisfies the contract without depending on a particular
|
|
7
|
+
* UI framework.
|
|
8
|
+
*
|
|
9
|
+
* This module is type-only: it has no runtime imports and contributes nothing to
|
|
10
|
+
* the runtime bundle beyond the erased interface declarations.
|
|
11
|
+
*/
|
|
12
|
+
export {};
|
package/dist/environment.d.ts
CHANGED
|
@@ -1,12 +1,40 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* The two environments an Ablo project runs in: `production` for live data and
|
|
4
|
+
* `sandbox` for isolated test data. Every credential and every stored row
|
|
5
|
+
* belongs to exactly one of them.
|
|
6
|
+
*/
|
|
2
7
|
export declare const ENVIRONMENTS: readonly ["production", "sandbox"];
|
|
8
|
+
/**
|
|
9
|
+
* How an environment is spelled inside an API-key prefix: a `live` key acts on
|
|
10
|
+
* the production environment and a `test` key acts on the sandbox. Convert
|
|
11
|
+
* between this spelling and {@link Environment} with
|
|
12
|
+
* {@link environmentFromKeyPrefix} and {@link environmentToKeyPrefix}.
|
|
13
|
+
*/
|
|
3
14
|
export type KeyPrefixEnvironment = 'live' | 'test';
|
|
15
|
+
/** A Zod schema that validates a value as one of the {@link ENVIRONMENTS}. */
|
|
4
16
|
export declare const environmentSchema: z.ZodEnum<{
|
|
5
17
|
production: "production";
|
|
6
18
|
sandbox: "sandbox";
|
|
7
19
|
}>;
|
|
20
|
+
/** One of the {@link ENVIRONMENTS} — either `'production'` or `'sandbox'`. */
|
|
8
21
|
export type Environment = z.infer<typeof environmentSchema>;
|
|
22
|
+
/**
|
|
23
|
+
* Coerces an untrusted value into a valid {@link Environment}, returning
|
|
24
|
+
* `fallback` (which defaults to `'production'`) when the value is not a
|
|
25
|
+
* recognized environment. Use it when reading an environment from configuration
|
|
26
|
+
* or off the wire.
|
|
27
|
+
*/
|
|
9
28
|
export declare function normalizeEnvironment(value: unknown, fallback?: Environment): Environment;
|
|
29
|
+
/**
|
|
30
|
+
* Maps an API-key prefix spelling to its {@link Environment}: a `'test'` key
|
|
31
|
+
* operates on the sandbox, and anything else on production.
|
|
32
|
+
*/
|
|
10
33
|
export declare function environmentFromKeyPrefix(value: KeyPrefixEnvironment): Environment;
|
|
34
|
+
/**
|
|
35
|
+
* Maps an {@link Environment} to the spelling used in an API-key prefix: the
|
|
36
|
+
* sandbox is `'test'` and production is `'live'`.
|
|
37
|
+
*/
|
|
11
38
|
export declare function environmentToKeyPrefix(value: Environment): KeyPrefixEnvironment;
|
|
39
|
+
/** Returns true when the given environment is the sandbox. */
|
|
12
40
|
export declare function isSandboxEnvironment(value: Environment): boolean;
|
package/dist/environment.js
CHANGED
|
@@ -1,16 +1,37 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* The two environments an Ablo project runs in: `production` for live data and
|
|
4
|
+
* `sandbox` for isolated test data. Every credential and every stored row
|
|
5
|
+
* belongs to exactly one of them.
|
|
6
|
+
*/
|
|
2
7
|
export const ENVIRONMENTS = ['production', 'sandbox'];
|
|
8
|
+
/** A Zod schema that validates a value as one of the {@link ENVIRONMENTS}. */
|
|
3
9
|
export const environmentSchema = z.enum(ENVIRONMENTS);
|
|
10
|
+
/**
|
|
11
|
+
* Coerces an untrusted value into a valid {@link Environment}, returning
|
|
12
|
+
* `fallback` (which defaults to `'production'`) when the value is not a
|
|
13
|
+
* recognized environment. Use it when reading an environment from configuration
|
|
14
|
+
* or off the wire.
|
|
15
|
+
*/
|
|
4
16
|
export function normalizeEnvironment(value, fallback = 'production') {
|
|
5
17
|
const parsed = environmentSchema.safeParse(value);
|
|
6
18
|
return parsed.success ? parsed.data : fallback;
|
|
7
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Maps an API-key prefix spelling to its {@link Environment}: a `'test'` key
|
|
22
|
+
* operates on the sandbox, and anything else on production.
|
|
23
|
+
*/
|
|
8
24
|
export function environmentFromKeyPrefix(value) {
|
|
9
25
|
return value === 'test' ? 'sandbox' : 'production';
|
|
10
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Maps an {@link Environment} to the spelling used in an API-key prefix: the
|
|
29
|
+
* sandbox is `'test'` and production is `'live'`.
|
|
30
|
+
*/
|
|
11
31
|
export function environmentToKeyPrefix(value) {
|
|
12
32
|
return value === 'sandbox' ? 'test' : 'live';
|
|
13
33
|
}
|
|
34
|
+
/** Returns true when the given environment is the sandbox. */
|
|
14
35
|
export function isSandboxEnvironment(value) {
|
|
15
36
|
return value === 'sandbox';
|
|
16
37
|
}
|
package/dist/errorCodes.d.ts
CHANGED
|
@@ -1,74 +1,76 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The
|
|
3
|
-
*
|
|
2
|
+
* The registry of every stable error code Ablo can produce. Error handling has
|
|
3
|
+
* two levels, and this file defines the finer one.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
5
|
+
* - The `type` is the coarse category, and each one corresponds to an
|
|
6
|
+
* {@link AbloError} subclass such as `AbloPermissionError` or
|
|
7
|
+
* `AbloValidationError`. Catching by `instanceof` is equivalent to switching
|
|
8
|
+
* on `error.type`.
|
|
9
|
+
* - The `code` is the fine-grained, machine-readable identifier defined here,
|
|
10
|
+
* written in `snake_case` (for example `entity_claimed` or `queue_too_deep`).
|
|
11
|
+
* This is what you switch on to handle a specific situation, and what the
|
|
12
|
+
* documentation link for an error is built from.
|
|
6
13
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* - **`code`** — the fine-grained, machine-readable identifier in this
|
|
11
|
-
* file. `snake_case`, ordered noun→state (`entity_claimed`) or
|
|
12
|
-
* condition→constraint (`queue_too_deep`). This is what callers
|
|
13
|
-
* `switch` on for specific handling, and what `doc_url` is derived from.
|
|
14
|
+
* The client, the server, and the tool-calling boundary all speak this same
|
|
15
|
+
* vocabulary, which makes the registry part of the API contract. Two things
|
|
16
|
+
* follow from that:
|
|
14
17
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* 'client'` codes are local SDK invariants (you forgot to open the DB,
|
|
28
|
-
* a model isn't registered) — never sent over the network, so they
|
|
29
|
-
* carry no `httpStatus`, exactly as Stripe omits client-side
|
|
30
|
-
* programmer errors from its published code list.
|
|
18
|
+
* 1. {@link ErrorCode} is a closed set — plus the dynamic `policy:${string}`
|
|
19
|
+
* family — so producing a code that is not registered here is a
|
|
20
|
+
* compile-time error. The {@link AbloError} constructor accepts only a
|
|
21
|
+
* registered code. The one place an arbitrary string is accepted as a code
|
|
22
|
+
* is where an incoming response is parsed, which lets an older client
|
|
23
|
+
* tolerate a code from a newer server it does not yet recognize.
|
|
24
|
+
* 2. The codes marked `surface: 'wire'` are the ones that cross the network
|
|
25
|
+
* and are mapped at the HTTP and tool-calling boundaries; the public error
|
|
26
|
+
* documentation is generated from them. Codes marked `surface: 'client'`
|
|
27
|
+
* describe local mistakes — accessing the database before opening it, or
|
|
28
|
+
* writing to a model that was never registered — and are never sent over
|
|
29
|
+
* the network, so they carry no HTTP status.
|
|
31
30
|
*/
|
|
32
31
|
import { z } from 'zod';
|
|
33
32
|
/**
|
|
34
|
-
*
|
|
35
|
-
* their
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* and on the `Ablo-Version` response header so a
|
|
33
|
+
* The version of the error contract: the envelope shape together with the set of
|
|
34
|
+
* codes and their meanings. It is date-based, and changes only when the contract
|
|
35
|
+
* changes in a way a consumer can observe — a code added or removed, an HTTP
|
|
36
|
+
* status changed, or an envelope field changed. It is emitted in the generated
|
|
37
|
+
* error documentation and returned on the `Ablo-Version` response header, so a
|
|
38
|
+
* consumer can detect when its expected contract has drifted from the server's.
|
|
39
39
|
*/
|
|
40
|
-
export declare const ERROR_CONTRACT_VERSION = "2026-
|
|
41
|
-
/**
|
|
42
|
-
export type ErrorCategory = 'auth' | 'permission' | 'capability' | 'claim' | 'conflict' | 'validation' | 'not_found' | 'tenant' | 'schema' | '
|
|
40
|
+
export declare const ERROR_CONTRACT_VERSION = "2026-07-03";
|
|
41
|
+
/** A coarse grouping of error codes, used to organize metrics and documentation. */
|
|
42
|
+
export type ErrorCategory = 'auth' | 'permission' | 'capability' | 'claim' | 'conflict' | 'validation' | 'not_found' | 'tenant' | 'schema' | 'bootstrap' | 'transport' | 'rate_limit' | 'server' | 'client';
|
|
43
43
|
/**
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
* compile-time completeness instead of ad-hoc `if (!isRetryableCode(...))`
|
|
51
|
-
* chains.
|
|
44
|
+
* A closed classification of how a failure can be recovered from — a level above
|
|
45
|
+
* the raw {@link ErrorCode}. Where a code says what went wrong, a recovery class
|
|
46
|
+
* says what a client should do about it, which is exactly the distinction the
|
|
47
|
+
* connection layer needs to decide between retrying, re-minting a credential, and
|
|
48
|
+
* signing the user out. Every code maps to one of these, and the set is
|
|
49
|
+
* validated at runtime.
|
|
52
50
|
*
|
|
53
|
-
* - `access_credential_expiry` — the
|
|
54
|
-
*
|
|
55
|
-
* is
|
|
56
|
-
* and retry the same request. This
|
|
57
|
-
*
|
|
58
|
-
* is routine
|
|
59
|
-
* - `session_expiry` — the
|
|
51
|
+
* - `access_credential_expiry` — the short-lived access credential the client
|
|
52
|
+
* presents (its ephemeral `ek_` or `rk_` key) has expired, while the
|
|
53
|
+
* underlying login is still valid. The remedy is to mint a fresh key from the
|
|
54
|
+
* session and retry the same request. This does not sign the user out; a
|
|
55
|
+
* short-lived key expiring — for example after a laptop resumes from sleep —
|
|
56
|
+
* is routine.
|
|
57
|
+
* - `session_expiry` — the long-lived login itself is gone. This is terminal:
|
|
60
58
|
* sign out and route to re-authentication.
|
|
61
|
-
* - `auth_blocked` — reachable
|
|
62
|
-
* (wrong key
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
* - `
|
|
66
|
-
*
|
|
67
|
-
*
|
|
59
|
+
* - `auth_blocked` — the server was reachable but rejected the kind or
|
|
60
|
+
* configuration of the credential (wrong key type, untrusted issuer, no
|
|
61
|
+
* organization). Re-authenticating would present the same rejected credential
|
|
62
|
+
* and loop, so the client should stop rather than reconnect or sign out.
|
|
63
|
+
* - `permission` — an authorization denial (403) based on scope, role, or
|
|
64
|
+
* membership.
|
|
65
|
+
* - `transient` — a temporary failure, such as a server error or lease
|
|
66
|
+
* contention, that may succeed if the same request is retried unchanged.
|
|
67
|
+
* - `none` — not a recoverable authentication condition: validation errors,
|
|
68
|
+
* not-found, local invariants, and any code an older client does not
|
|
69
|
+
* recognize.
|
|
68
70
|
*/
|
|
69
71
|
export declare const RECOVERY_CLASSES: readonly ["access_credential_expiry", "session_expiry", "auth_blocked", "permission", "transient", "none"];
|
|
70
|
-
/** Zod enum
|
|
71
|
-
*
|
|
72
|
+
/** A Zod enum over {@link RECOVERY_CLASSES}, for validating a recovery class at
|
|
73
|
+
* runtime. */
|
|
72
74
|
export declare const recoveryClassSchema: z.ZodEnum<{
|
|
73
75
|
permission: "permission";
|
|
74
76
|
access_credential_expiry: "access_credential_expiry";
|
|
@@ -77,36 +79,40 @@ export declare const recoveryClassSchema: z.ZodEnum<{
|
|
|
77
79
|
transient: "transient";
|
|
78
80
|
none: "none";
|
|
79
81
|
}>;
|
|
80
|
-
/**
|
|
82
|
+
/** The recovery classification of a failure. See {@link RECOVERY_CLASSES}. */
|
|
81
83
|
export type RecoveryClass = z.infer<typeof recoveryClassSchema>;
|
|
82
|
-
/** One registry
|
|
83
|
-
*
|
|
84
|
-
*
|
|
84
|
+
/** One entry in the registry: everything known about a single error code.
|
|
85
|
+
* `httpStatus` is present only for codes that cross the network, since an HTTP
|
|
86
|
+
* status is a property of the wire boundary rather than of a purely local
|
|
87
|
+
* error. */
|
|
85
88
|
export interface ErrorCodeSpec {
|
|
86
89
|
readonly category: ErrorCategory;
|
|
87
|
-
/** `'wire'`
|
|
88
|
-
* `'client'`
|
|
90
|
+
/** `'wire'` for a code that crosses the network and is part of the API
|
|
91
|
+
* contract; `'client'` for a local error that is never serialized. */
|
|
89
92
|
readonly surface: 'wire' | 'client';
|
|
90
93
|
/** Canonical HTTP status for the wire boundary. Omitted for client codes. */
|
|
91
94
|
readonly httpStatus?: number;
|
|
92
|
-
/** Whether the same request can succeed on a later retry without the
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
+
/** Whether the same request can succeed on a later retry without the caller
|
|
96
|
+
* changing anything. `false` for permission, validation, and not-found;
|
|
97
|
+
* `true` for transient transport failures and lease contention. */
|
|
95
98
|
readonly retryable: boolean;
|
|
96
|
-
/**
|
|
99
|
+
/** A one-line, human-readable description of the error — also the source text
|
|
100
|
+
* for its documentation page. */
|
|
97
101
|
readonly message: string;
|
|
98
102
|
/**
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
* whose remedy
|
|
102
|
-
*
|
|
103
|
-
* {@link classifyRecovery}, so
|
|
103
|
+
* An explicit {@link RecoveryClass}, set only where it differs from what the
|
|
104
|
+
* category, HTTP status, and `retryable` flag already imply — mainly the few
|
|
105
|
+
* authentication codes whose remedy the status alone cannot reveal, such as
|
|
106
|
+
* telling a session expiry apart from an access-credential expiry. For every
|
|
107
|
+
* other code the recovery class is derived by {@link classifyRecovery}, so
|
|
108
|
+
* this field can be left unset.
|
|
104
109
|
*/
|
|
105
110
|
readonly recovery?: RecoveryClass;
|
|
106
111
|
}
|
|
107
112
|
/**
|
|
108
|
-
* The
|
|
109
|
-
*
|
|
113
|
+
* The complete set of stable error codes, keyed by code. A code must be added
|
|
114
|
+
* here before it can be thrown, since the {@link AbloError} constructor accepts
|
|
115
|
+
* only codes from this set.
|
|
110
116
|
*/
|
|
111
117
|
export declare const ERROR_CODES: {
|
|
112
118
|
readonly apikey_invalid: ErrorCodeSpec;
|
|
@@ -172,6 +178,7 @@ export declare const ERROR_CODES: {
|
|
|
172
178
|
readonly cli_invalid_arguments: ErrorCodeSpec;
|
|
173
179
|
readonly turn_validation_failed: ErrorCodeSpec;
|
|
174
180
|
readonly commit_operation_required: ErrorCodeSpec;
|
|
181
|
+
readonly commit_operation_invalid: ErrorCodeSpec;
|
|
175
182
|
readonly commit_operation_model_required: ErrorCodeSpec;
|
|
176
183
|
readonly commit_operations_ambiguous: ErrorCodeSpec;
|
|
177
184
|
readonly commit_too_many_operations: ErrorCodeSpec;
|
|
@@ -307,9 +314,16 @@ export declare const ERROR_CODES: {
|
|
|
307
314
|
readonly events_required: ErrorCodeSpec;
|
|
308
315
|
readonly ingest_failed: ErrorCodeSpec;
|
|
309
316
|
readonly migration_failed: ErrorCodeSpec;
|
|
317
|
+
readonly schema_provisioning_forbidden: ErrorCodeSpec;
|
|
310
318
|
readonly model_query_failed: ErrorCodeSpec;
|
|
311
319
|
readonly queries_required: ErrorCodeSpec;
|
|
312
320
|
readonly query_unsupported_operator: ErrorCodeSpec;
|
|
321
|
+
readonly query_invalid_like_pattern: ErrorCodeSpec;
|
|
322
|
+
readonly query_invalid_boolean: ErrorCodeSpec;
|
|
323
|
+
readonly protocol_version_unsupported: ErrorCodeSpec;
|
|
324
|
+
readonly database_unreachable: ErrorCodeSpec;
|
|
325
|
+
readonly database_not_replication_ready: ErrorCodeSpec;
|
|
326
|
+
readonly replication_publication_drift: ErrorCodeSpec;
|
|
313
327
|
readonly query_unknown_relation: ErrorCodeSpec;
|
|
314
328
|
readonly query_relation_target_unknown: ErrorCodeSpec;
|
|
315
329
|
readonly query_invalid_identifier: ErrorCodeSpec;
|
|
@@ -318,6 +332,7 @@ export declare const ERROR_CODES: {
|
|
|
318
332
|
readonly upload_fields_required: ErrorCodeSpec;
|
|
319
333
|
readonly upload_items_required: ErrorCodeSpec;
|
|
320
334
|
readonly presigned_url_failed: ErrorCodeSpec;
|
|
335
|
+
readonly upload_not_configured: ErrorCodeSpec;
|
|
321
336
|
readonly task_id_required: ErrorCodeSpec;
|
|
322
337
|
readonly claim_id_required: ErrorCodeSpec;
|
|
323
338
|
readonly commit_operation_action_required: ErrorCodeSpec;
|
|
@@ -336,45 +351,47 @@ export declare const ERROR_CODES: {
|
|
|
336
351
|
readonly turn_foreign_agent: ErrorCodeSpec;
|
|
337
352
|
readonly invalid_intent: ErrorCodeSpec;
|
|
338
353
|
readonly schema_too_large: ErrorCodeSpec;
|
|
354
|
+
readonly request_too_large: ErrorCodeSpec;
|
|
339
355
|
readonly invalid_schema: ErrorCodeSpec;
|
|
340
356
|
readonly incompatible_change: ErrorCodeSpec;
|
|
341
357
|
};
|
|
342
358
|
/**
|
|
343
|
-
* The
|
|
344
|
-
*
|
|
345
|
-
*
|
|
346
|
-
*
|
|
347
|
-
*
|
|
348
|
-
*
|
|
359
|
+
* The type of a valid error code: any key registered in {@link ERROR_CODES},
|
|
360
|
+
* plus the dynamic `policy:${reason}` family, where a conflict-policy rejection
|
|
361
|
+
* names its reason inline. The {@link AbloError} constructor accepts only this
|
|
362
|
+
* type, so a typo or an unregistered code is a compile-time error. Only the
|
|
363
|
+
* boundary that parses an incoming response casts an arbitrary string to this
|
|
364
|
+
* type, which preserves forward compatibility with a newer server.
|
|
349
365
|
*/
|
|
350
366
|
export type ErrorCode = keyof typeof ERROR_CODES | `policy:${string}`;
|
|
351
|
-
/** The subset of
|
|
352
|
-
*
|
|
353
|
-
*
|
|
367
|
+
/** The subset of {@link ErrorCode} values that cross the network — the codes
|
|
368
|
+
* that make up the API contract, from which the HTTP and tool-calling
|
|
369
|
+
* boundaries map and the public documentation is generated. */
|
|
354
370
|
export type WireErrorCode = {
|
|
355
371
|
[K in keyof typeof ERROR_CODES]: (typeof ERROR_CODES)[K]['surface'] extends 'wire' ? K : never;
|
|
356
372
|
}[keyof typeof ERROR_CODES];
|
|
357
|
-
/**
|
|
358
|
-
* `policy:*` family and for any
|
|
359
|
-
*
|
|
373
|
+
/** Looks up the {@link ErrorCodeSpec} for a code. Returns `undefined` for the
|
|
374
|
+
* dynamic `policy:*` family and for any newer code this client does not yet
|
|
375
|
+
* recognize. */
|
|
360
376
|
export declare function errorCodeSpec(code: string): ErrorCodeSpec | undefined;
|
|
361
|
-
/**
|
|
362
|
-
* default to non-retryable
|
|
377
|
+
/** Reports whether a code is marked retryable. Unknown and dynamic codes
|
|
378
|
+
* default to non-retryable, so an unrecognized failure is never retried
|
|
379
|
+
* automatically. */
|
|
363
380
|
export declare function isRetryableCode(code: string): boolean;
|
|
364
381
|
/**
|
|
365
|
-
*
|
|
366
|
-
*
|
|
382
|
+
* Classifies a code into its {@link RecoveryClass} — the single value the
|
|
383
|
+
* connection layer and the network probe branch on to decide how to recover.
|
|
367
384
|
*
|
|
368
|
-
* The registry
|
|
369
|
-
*
|
|
370
|
-
*
|
|
371
|
-
* - retryable
|
|
372
|
-
* - 403
|
|
373
|
-
* -
|
|
374
|
-
* -
|
|
385
|
+
* The registry is the source of truth. An explicit `recovery` on the code's spec
|
|
386
|
+
* wins; it is set only on the few authentication codes whose remedy the HTTP
|
|
387
|
+
* status cannot reveal. Every other code is derived from its spec:
|
|
388
|
+
* - retryable → `transient`
|
|
389
|
+
* - HTTP 403 → `permission`
|
|
390
|
+
* - remaining `auth` category → `auth_blocked` (the credential-type 401s)
|
|
391
|
+
* - anything else, or unknown → `none`
|
|
375
392
|
*
|
|
376
|
-
*
|
|
377
|
-
*
|
|
378
|
-
*
|
|
393
|
+
* An unknown code, a dynamic `policy:*` code, or a code this client predates
|
|
394
|
+
* (no spec) defaults to `none`, the same safe default as {@link isRetryableCode}:
|
|
395
|
+
* an unrecognized code is never treated as a credential expiry or a sign-out.
|
|
379
396
|
*/
|
|
380
397
|
export declare function classifyRecovery(code: string): RecoveryClass;
|