@abloatai/ablo 0.26.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/CHANGELOG.md +14 -0
- package/README.md +101 -85
- package/dist/BaseSyncedStore.d.ts +85 -88
- package/dist/BaseSyncedStore.js +131 -147
- package/dist/Database.d.ts +54 -68
- package/dist/Database.js +97 -113
- package/dist/{ObjectPool.d.ts → InstanceCache.d.ts} +10 -13
- package/dist/{ObjectPool.js → InstanceCache.js} +85 -83
- package/dist/LazyReferenceCollection.d.ts +11 -15
- package/dist/LazyReferenceCollection.js +12 -16
- package/dist/Model.d.ts +37 -52
- package/dist/Model.js +46 -61
- package/dist/ModelRegistry.d.ts +21 -19
- package/dist/ModelRegistry.js +23 -27
- package/dist/NetworkMonitor.d.ts +5 -6
- package/dist/NetworkMonitor.js +5 -6
- package/dist/SyncClient.d.ts +112 -112
- package/dist/SyncClient.js +165 -172
- 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 +27 -32
- package/dist/agent/Agent.js +18 -19
- 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} +26 -33
- package/dist/ai-sdk/index.d.ts +25 -22
- package/dist/ai-sdk/index.js +25 -22
- package/dist/ai-sdk/wrap.d.ts +6 -7
- package/dist/ai-sdk/wrap.js +1 -1
- package/dist/auth/credentialPolicy.d.ts +69 -74
- package/dist/auth/credentialPolicy.js +51 -56
- package/dist/auth/credentialSource.d.ts +6 -5
- package/dist/auth/credentialSource.js +9 -10
- package/dist/auth/index.d.ts +59 -58
- package/dist/auth/index.js +31 -37
- 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 +167 -119
- package/dist/client/Ablo.d.ts +73 -73
- package/dist/client/Ablo.js +125 -160
- package/dist/client/ApiClient.d.ts +30 -19
- package/dist/client/ApiClient.js +133 -38
- package/dist/client/auth.d.ts +47 -47
- package/dist/client/auth.js +108 -117
- package/dist/client/claimHeartbeatLoop.d.ts +50 -0
- package/dist/client/claimHeartbeatLoop.js +88 -0
- package/dist/client/consoleLogger.d.ts +5 -6
- package/dist/client/consoleLogger.js +5 -6
- package/dist/client/createInternalComponents.d.ts +14 -17
- package/dist/client/createInternalComponents.js +25 -30
- package/dist/client/createModelProxy.d.ts +130 -120
- package/dist/client/createModelProxy.js +152 -122
- package/dist/client/credentialEndpoint.d.ts +40 -42
- package/dist/client/credentialEndpoint.js +35 -36
- package/dist/client/functionalUpdate.d.ts +29 -27
- package/dist/client/functionalUpdate.js +21 -21
- package/dist/client/hostedEndpoints.d.ts +9 -12
- package/dist/client/hostedEndpoints.js +9 -12
- package/dist/client/httpClient.d.ts +57 -53
- package/dist/client/httpClient.js +29 -31
- package/dist/client/identity.d.ts +15 -20
- package/dist/client/identity.js +47 -58
- package/dist/client/modelRegistration.d.ts +5 -9
- package/dist/client/modelRegistration.js +67 -87
- package/dist/client/options.d.ts +134 -157
- package/dist/client/options.js +3 -7
- package/dist/client/registerDataSource.d.ts +9 -9
- package/dist/client/registerDataSource.js +15 -16
- package/dist/client/resourceTypes.d.ts +64 -75
- package/dist/client/resourceTypes.js +4 -10
- package/dist/client/schemaConfig.d.ts +31 -43
- package/dist/client/schemaConfig.js +38 -50
- package/dist/client/sessionMint.d.ts +16 -12
- package/dist/client/sessionMint.js +26 -31
- package/dist/client/validateAbloOptions.d.ts +12 -14
- package/dist/client/validateAbloOptions.js +8 -9
- package/dist/client/writeOptionsSchema.d.ts +18 -16
- package/dist/client/writeOptionsSchema.js +23 -20
- package/dist/client/wsMutationExecutor.d.ts +15 -20
- package/dist/client/wsMutationExecutor.js +17 -23
- package/dist/context.d.ts +6 -4
- package/dist/context.js +6 -4
- package/dist/coordination/index.d.ts +10 -8
- package/dist/coordination/index.js +14 -12
- package/dist/coordination/schema.d.ts +176 -128
- package/dist/coordination/schema.js +197 -133
- package/dist/coordination/trace.d.ts +9 -10
- package/dist/coordination/trace.js +13 -14
- package/dist/core/DatabaseManager.d.ts +5 -7
- package/dist/core/DatabaseManager.js +15 -19
- package/dist/core/QueryProcessor.d.ts +7 -9
- package/dist/core/QueryProcessor.js +22 -28
- package/dist/core/QueryView.d.ts +8 -8
- package/dist/core/QueryView.js +2 -2
- package/dist/core/StoreManager.d.ts +12 -14
- package/dist/core/StoreManager.js +21 -24
- package/dist/core/ViewRegistry.d.ts +5 -5
- package/dist/core/ViewRegistry.js +4 -4
- package/dist/core/index.d.ts +17 -12
- package/dist/core/index.js +32 -26
- package/dist/core/openIDBWithTimeout.d.ts +38 -36
- package/dist/core/openIDBWithTimeout.js +42 -43
- package/dist/core/queryUtils.d.ts +45 -0
- package/dist/core/queryUtils.js +69 -0
- package/dist/core/storeContract.d.ts +63 -61
- package/dist/core/storeContract.js +8 -12
- package/dist/environment.d.ts +28 -0
- package/dist/environment.js +21 -0
- package/dist/errorCodes.d.ts +107 -99
- package/dist/errorCodes.js +131 -132
- package/dist/errors.d.ts +160 -166
- package/dist/errors.js +155 -158
- package/dist/index.d.ts +30 -27
- package/dist/index.js +89 -86
- package/dist/interfaces/index.d.ts +102 -113
- package/dist/interfaces/index.js +5 -4
- package/dist/keys/index.d.ts +27 -29
- package/dist/keys/index.js +41 -40
- 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 +145 -156
- package/dist/mutators/defineMutators.d.ts +23 -34
- 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 +104 -100
- package/dist/policy/types.js +67 -66
- package/dist/query/client.d.ts +28 -23
- package/dist/query/client.js +45 -43
- package/dist/query/types.d.ts +37 -60
- package/dist/query/types.js +13 -33
- package/dist/react/AbloProvider.d.ts +1 -1
- package/dist/react/AbloProvider.js +2 -2
- package/dist/react/context.d.ts +25 -28
- 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 +16 -14
- 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 +10 -11
- package/dist/react/useMutationFailureListener.d.ts +8 -8
- package/dist/react/useMutationFailureListener.js +8 -8
- package/dist/react/useMutators.d.ts +11 -11
- package/dist/react/useMutators.js +3 -3
- package/dist/react/useReactive.js +2 -2
- package/dist/react/useSyncStatus.d.ts +4 -6
- package/dist/react/useUndoScope.d.ts +7 -9
- package/dist/react/useUndoScope.js +1 -1
- 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 +20 -24
- package/dist/schema/ddlLock.js +18 -23
- 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 +35 -48
- package/dist/schema/generate.d.ts +12 -12
- package/dist/schema/generate.js +12 -12
- package/dist/schema/index.d.ts +2 -2
- package/dist/schema/index.js +21 -23
- package/dist/schema/model.d.ts +118 -143
- package/dist/schema/model.js +22 -33
- package/dist/schema/openapi.d.ts +10 -9
- package/dist/schema/openapi.js +5 -3
- package/dist/schema/queries.d.ts +29 -31
- package/dist/schema/queries.js +23 -25
- package/dist/schema/relation.d.ts +89 -99
- package/dist/schema/relation.js +13 -13
- package/dist/schema/residency.d.ts +16 -13
- package/dist/schema/residency.js +16 -13
- package/dist/schema/roles.d.ts +36 -43
- package/dist/schema/roles.js +31 -37
- package/dist/schema/schema.d.ts +33 -42
- package/dist/schema/schema.js +31 -32
- package/dist/schema/select.d.ts +13 -13
- package/dist/schema/select.js +13 -13
- package/dist/schema/serialize.d.ts +28 -31
- 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} +26 -49
- 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 +30 -25
- package/dist/source/adapter.js +10 -10
- package/dist/source/adapters/drizzle.d.ts +28 -23
- package/dist/source/adapters/drizzle.js +30 -25
- package/dist/source/adapters/kysely.d.ts +27 -25
- package/dist/source/adapters/kysely.js +24 -23
- package/dist/source/adapters/memory.d.ts +8 -7
- package/dist/source/adapters/memory.js +9 -8
- package/dist/source/adapters/prisma.d.ts +13 -12
- package/dist/source/adapters/prisma.js +22 -25
- package/dist/source/conformance.d.ts +18 -11
- package/dist/source/conformance.js +17 -11
- package/dist/source/connector.d.ts +31 -32
- package/dist/source/connector.js +28 -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 +46 -58
- package/dist/source/factory.js +22 -27
- package/dist/source/index.d.ts +7 -9
- package/dist/source/index.js +12 -14
- package/dist/source/migrations.d.ts +9 -9
- package/dist/source/migrations.js +9 -9
- package/dist/source/next.d.ts +9 -10
- package/dist/source/next.js +6 -7
- package/dist/source/pushQueue.d.ts +69 -47
- package/dist/source/pushQueue.js +32 -28
- package/dist/source/signing.d.ts +46 -17
- package/dist/source/signing.js +28 -11
- package/dist/source/types.d.ts +121 -104
- package/dist/source/types.js +13 -14
- package/dist/stores/ObjectStore.d.ts +10 -11
- package/dist/stores/ObjectStore.js +11 -12
- package/dist/stores/ObjectStoreContract.d.ts +12 -15
- package/dist/stores/SyncActionStore.d.ts +7 -11
- package/dist/stores/SyncActionStore.js +13 -17
- package/dist/surface.d.ts +27 -20
- package/dist/surface.js +27 -20
- package/dist/sync/{BootstrapHelper.d.ts → BootstrapFetcher.d.ts} +36 -42
- package/dist/sync/{BootstrapHelper.js → BootstrapFetcher.js} +76 -76
- package/dist/sync/ConnectionManager.d.ts +39 -50
- package/dist/sync/ConnectionManager.js +55 -66
- package/dist/sync/NetworkProbe.d.ts +24 -29
- package/dist/sync/NetworkProbe.js +63 -69
- package/dist/sync/{HydrationCoordinator.d.ts → OnDemandLoader.d.ts} +42 -41
- package/dist/sync/{HydrationCoordinator.js → OnDemandLoader.js} +59 -54
- package/dist/sync/{AreaOfInterestManager.d.ts → SubscriptionManager.d.ts} +43 -57
- package/dist/sync/{AreaOfInterestManager.js → SubscriptionManager.js} +43 -51
- package/dist/sync/SyncWebSocket.d.ts +139 -165
- package/dist/sync/SyncWebSocket.js +191 -223
- package/dist/sync/awaitClaimGrant.d.ts +18 -18
- package/dist/sync/awaitClaimGrant.js +11 -11
- package/dist/sync/bootstrapApply.d.ts +34 -24
- package/dist/sync/bootstrapApply.js +27 -19
- package/dist/sync/commitFrames.d.ts +21 -20
- package/dist/sync/commitFrames.js +18 -18
- package/dist/sync/createClaimStream.d.ts +23 -22
- package/dist/sync/createClaimStream.js +105 -23
- package/dist/sync/createPresenceStream.d.ts +19 -18
- package/dist/sync/createPresenceStream.js +25 -26
- package/dist/sync/createSnapshot.d.ts +12 -14
- package/dist/sync/createSnapshot.js +20 -26
- package/dist/sync/credentialLifecycle.d.ts +104 -104
- package/dist/sync/credentialLifecycle.js +140 -147
- package/dist/sync/deltaPipeline.d.ts +36 -34
- package/dist/sync/deltaPipeline.js +64 -65
- package/dist/sync/groupChange.d.ts +63 -61
- package/dist/sync/groupChange.js +74 -78
- package/dist/sync/heartbeat.d.ts +34 -33
- package/dist/sync/heartbeat.js +31 -31
- package/dist/sync/participants.d.ts +19 -19
- package/dist/sync/schemas.d.ts +3 -2
- package/dist/sync/schemas.js +14 -10
- package/dist/sync/syncCursor.d.ts +17 -21
- package/dist/sync/syncCursor.js +17 -21
- package/dist/sync/syncPlan.d.ts +28 -36
- package/dist/sync/syncPlan.js +18 -19
- package/dist/sync/syncPosition.d.ts +54 -49
- package/dist/sync/syncPosition.js +57 -52
- package/dist/sync/wsFrameHandlers.d.ts +35 -36
- package/dist/sync/wsFrameHandlers.js +63 -67
- package/dist/testing/fixtures/bootstrap.d.ts +12 -6
- package/dist/testing/fixtures/bootstrap.js +12 -6
- package/dist/testing/fixtures/deltas.d.ts +30 -33
- package/dist/testing/fixtures/deltas.js +30 -33
- package/dist/testing/fixtures/models.d.ts +11 -10
- package/dist/testing/fixtures/models.js +11 -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 -15
- package/dist/testing/helpers/{sync-engine-harness.js → syncEngineHarness.js} +12 -10
- package/dist/testing/helpers/wait.d.ts +13 -8
- package/dist/testing/helpers/wait.js +13 -8
- package/dist/testing/index.d.ts +3 -3
- package/dist/testing/index.js +2 -2
- 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 +20 -17
- package/dist/testing/mocks/MockSyncContext.js +15 -13
- package/dist/testing/mocks/MockSyncStore.d.ts +10 -10
- package/dist/testing/mocks/MockSyncStore.js +11 -11
- package/dist/testing/mocks/MockWebSocket.d.ts +26 -22
- package/dist/testing/mocks/MockWebSocket.js +22 -21
- package/dist/transactions/TransactionQueue.d.ts +181 -176
- package/dist/transactions/TransactionQueue.js +338 -350
- package/dist/transactions/TransactionStore.d.ts +6 -4
- package/dist/transactions/TransactionStore.js +6 -4
- package/dist/transactions/UnconfirmedWrites.d.ts +82 -0
- package/dist/transactions/UnconfirmedWrites.js +104 -0
- package/dist/transactions/coalesceRules.d.ts +41 -17
- package/dist/transactions/coalesceRules.js +40 -17
- package/dist/transactions/commitPayload.d.ts +48 -52
- package/dist/transactions/commitPayload.js +48 -57
- package/dist/transactions/deltaConfirmation.d.ts +20 -22
- package/dist/transactions/deltaConfirmation.js +37 -45
- package/dist/transactions/optimisticApply.d.ts +49 -0
- package/dist/transactions/optimisticApply.js +65 -0
- package/dist/transactions/{persistedReplay.d.ts → replayValidation.d.ts} +28 -22
- package/dist/transactions/{persistedReplay.js → replayValidation.js} +33 -27
- package/dist/types/global.d.ts +46 -41
- package/dist/types/global.js +20 -19
- package/dist/types/index.d.ts +71 -77
- package/dist/types/index.js +22 -22
- package/dist/types/modelData.d.ts +6 -8
- package/dist/types/modelData.js +5 -7
- package/dist/types/participant.d.ts +10 -11
- package/dist/types/participant.js +6 -8
- package/dist/types/streams.d.ts +208 -195
- 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} +42 -98
- 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 +30 -31
- package/dist/wire/errorEnvelope.js +34 -40
- package/dist/wire/frames.d.ts +79 -86
- package/dist/wire/frames.js +26 -33
- package/dist/wire/index.d.ts +14 -12
- package/dist/wire/index.js +30 -26
- package/dist/wire/listEnvelope.d.ts +16 -23
- package/dist/wire/listEnvelope.js +7 -6
- package/dist/wire/protocol.d.ts +25 -32
- package/dist/wire/protocol.js +25 -32
- package/dist/wire/protocolVersion.d.ts +44 -40
- package/dist/wire/protocolVersion.js +44 -40
- package/docs/coordination.md +59 -0
- package/package.json +11 -10
- package/dist/ai-sdk/coordinated-tool.d.ts +0 -101
- package/dist/ai-sdk/coordination-context.d.ts +0 -52
- package/dist/core/query-utils.d.ts +0 -34
- package/dist/core/query-utils.js +0 -59
- package/dist/schema/sync-delta-row.js +0 -103
- package/dist/schema/sync-delta-wire.js +0 -102
- 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 -8
- package/dist/server/storage-mode.js +0 -28
- package/dist/source/connector-protocol.d.ts +0 -159
- package/dist/source/connector-protocol.js +0 -161
- package/dist/transactions/OptimisticEchoTracker.d.ts +0 -82
- package/dist/transactions/OptimisticEchoTracker.js +0 -104
- package/dist/transactions/mutation-error-handler.d.ts +0 -5
- package/dist/transactions/mutation-error-handler.js +0 -39
- package/dist/transactions/optimistic.d.ts +0 -24
- package/dist/transactions/optimistic.js +0 -45
- package/dist/utils/mobx-setup.d.ts +0 -42
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
40
|
export declare const ERROR_CONTRACT_VERSION = "2026-07-03";
|
|
41
|
-
/**
|
|
41
|
+
/** A coarse grouping of error codes, used to organize metrics and documentation. */
|
|
42
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;
|
|
@@ -317,6 +323,7 @@ export declare const ERROR_CODES: {
|
|
|
317
323
|
readonly protocol_version_unsupported: ErrorCodeSpec;
|
|
318
324
|
readonly database_unreachable: ErrorCodeSpec;
|
|
319
325
|
readonly database_not_replication_ready: ErrorCodeSpec;
|
|
326
|
+
readonly replication_publication_drift: ErrorCodeSpec;
|
|
320
327
|
readonly query_unknown_relation: ErrorCodeSpec;
|
|
321
328
|
readonly query_relation_target_unknown: ErrorCodeSpec;
|
|
322
329
|
readonly query_invalid_identifier: ErrorCodeSpec;
|
|
@@ -349,41 +356,42 @@ export declare const ERROR_CODES: {
|
|
|
349
356
|
readonly incompatible_change: ErrorCodeSpec;
|
|
350
357
|
};
|
|
351
358
|
/**
|
|
352
|
-
* The
|
|
353
|
-
*
|
|
354
|
-
*
|
|
355
|
-
*
|
|
356
|
-
*
|
|
357
|
-
*
|
|
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.
|
|
358
365
|
*/
|
|
359
366
|
export type ErrorCode = keyof typeof ERROR_CODES | `policy:${string}`;
|
|
360
|
-
/** The subset of
|
|
361
|
-
*
|
|
362
|
-
*
|
|
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. */
|
|
363
370
|
export type WireErrorCode = {
|
|
364
371
|
[K in keyof typeof ERROR_CODES]: (typeof ERROR_CODES)[K]['surface'] extends 'wire' ? K : never;
|
|
365
372
|
}[keyof typeof ERROR_CODES];
|
|
366
|
-
/**
|
|
367
|
-
* `policy:*` family and for any
|
|
368
|
-
*
|
|
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. */
|
|
369
376
|
export declare function errorCodeSpec(code: string): ErrorCodeSpec | undefined;
|
|
370
|
-
/**
|
|
371
|
-
* 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. */
|
|
372
380
|
export declare function isRetryableCode(code: string): boolean;
|
|
373
381
|
/**
|
|
374
|
-
*
|
|
375
|
-
*
|
|
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.
|
|
376
384
|
*
|
|
377
|
-
* The registry
|
|
378
|
-
*
|
|
379
|
-
*
|
|
380
|
-
* - retryable
|
|
381
|
-
* - 403
|
|
382
|
-
* -
|
|
383
|
-
* -
|
|
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`
|
|
384
392
|
*
|
|
385
|
-
*
|
|
386
|
-
*
|
|
387
|
-
*
|
|
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.
|
|
388
396
|
*/
|
|
389
397
|
export declare function classifyRecovery(code: string): RecoveryClass;
|