@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/client/options.d.ts
CHANGED
|
@@ -1,43 +1,31 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* and the
|
|
4
|
-
*
|
|
5
|
-
* Extracted from `Ablo.ts` so the option types can be referenced without
|
|
6
|
-
* pulling in the factory's runtime graph. This module is type-only — ZERO
|
|
7
|
-
* runtime imports — so importing it can never create a cycle. `Ablo.ts`
|
|
8
|
-
* re-exports everything here, so existing import paths keep resolving.
|
|
2
|
+
* The option types for the {@link Ablo} client: the public {@link AbloOptions}
|
|
3
|
+
* bag callers pass, and the fuller {@link InternalAbloOptions} construction
|
|
4
|
+
* surface. This module holds only types and has no runtime imports.
|
|
9
5
|
*/
|
|
10
6
|
import type { Schema, SchemaRecord } from '../schema/schema.js';
|
|
11
7
|
import type { SyncEngineConfig, SyncLogger, MutationExecutor, SyncObservabilityProvider, SyncAnalytics, SessionErrorDetector, OnlineStatusProvider } from '../interfaces/index.js';
|
|
12
8
|
import type { AbloPersistence } from './persistence.js';
|
|
13
9
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* `@anthropic-ai/sdk` works here.
|
|
19
|
-
*
|
|
20
|
-
* Re-exported from `./auth` so existing import paths (`@abloatai/ablo`)
|
|
21
|
-
* keep resolving; the canonical definition lives there alongside the
|
|
22
|
-
* resolvers that consume it.
|
|
10
|
+
* An async function that resolves an apiKey at request time. Use it for credential
|
|
11
|
+
* rotation — read from a vault, refresh from session storage, or pull from an
|
|
12
|
+
* existing auth session. The canonical definition lives in `./auth`; it is
|
|
13
|
+
* re-exported here for convenience.
|
|
23
14
|
*/
|
|
24
15
|
export type { ApiKeySetter } from './auth.js';
|
|
25
16
|
import type { ApiKeySetter } from './auth.js';
|
|
26
17
|
/**
|
|
27
|
-
* Options for
|
|
18
|
+
* Options for the {@link Ablo} client.
|
|
28
19
|
*
|
|
29
|
-
* The only required field is `schema`.
|
|
20
|
+
* The only required field is `schema`. Because `apiKey` defaults to the
|
|
21
|
+
* `ABLO_API_KEY` environment variable, most server setups need nothing more:
|
|
30
22
|
*
|
|
31
23
|
* ```ts
|
|
32
24
|
* const ablo = Ablo({ schema, apiKey: process.env.ABLO_API_KEY });
|
|
33
25
|
* ```
|
|
34
26
|
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
* optional tuning (timeouts, retries, custom fetch, persistence) —
|
|
38
|
-
* if you're not sure whether you need one, you don't. Reach for them
|
|
39
|
-
* the way you'd reach for the equivalent option on the Stripe / OpenAI
|
|
40
|
-
* / Anthropic clients: rarely, and deliberately.
|
|
27
|
+
* Every other field is optional tuning — timeouts, retries, a custom fetch,
|
|
28
|
+
* persistence. If you are unsure whether you need one, you do not.
|
|
41
29
|
*
|
|
42
30
|
* @see https://docs.abloatai.com — full option reference
|
|
43
31
|
*/
|
|
@@ -49,70 +37,68 @@ export interface AbloOptions<S extends SchemaRecord = SchemaRecord> {
|
|
|
49
37
|
*/
|
|
50
38
|
schema: Schema<S>;
|
|
51
39
|
/**
|
|
52
|
-
* API key —
|
|
40
|
+
* The API key — the auth field most apps set. It accepts three shapes:
|
|
53
41
|
*
|
|
54
|
-
* - **A key string** (server): your secret `sk_`
|
|
55
|
-
* `
|
|
42
|
+
* - **A key string** (server): your secret `sk_` key. Defaults to the
|
|
43
|
+
* `ABLO_API_KEY` environment variable, so you usually pass nothing. A
|
|
56
44
|
* long-lived key needs no refresh; the client uses it as-is.
|
|
57
45
|
*
|
|
58
|
-
* - **An endpoint path
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
* ABSOLUTE URL: it enables pre-expiry renewal on windowless hosts too.
|
|
46
|
+
* - **An endpoint path or URL** — for example `apiKey: '/api/ablo-session'`.
|
|
47
|
+
* The client owns the whole exchange: it POSTs the endpoint (same-origin,
|
|
48
|
+
* cookies included), reads the minted short-lived token, and keeps it fresh
|
|
49
|
+
* with a refresh timer ahead of expiry, a re-mint after the machine wakes
|
|
50
|
+
* from sleep, and a re-mint when the server reports the token stale. You
|
|
51
|
+
* never call a refresh method yourself. The shape is detected by prefix (`/`,
|
|
52
|
+
* `http://`, or `https://`); key strings start with `sk_`/`ek_`/`rk_`, so the
|
|
53
|
+
* two cannot be confused. A long-lived server client should pass an absolute
|
|
54
|
+
* URL, which also enables pre-expiry renewal on hosts that never sleep.
|
|
68
55
|
*
|
|
69
|
-
* - **An async resolver** `() => Promise<string | null>` — the escape
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
* machinery as the endpoint form.
|
|
56
|
+
* - **An async resolver** `() => Promise<string | null>` — the escape hatch for
|
|
57
|
+
* when the exchange needs custom headers, a request body, or a non-HTTP mint
|
|
58
|
+
* (vault rotation, a cloud token service, an existing auth session). It uses
|
|
59
|
+
* the same renewal machinery as the endpoint form.
|
|
73
60
|
*
|
|
74
|
-
*
|
|
75
|
-
* itself is gone (terminal
|
|
76
|
-
* `session_expired`); or
|
|
77
|
-
*
|
|
78
|
-
* signed out, any other failure
|
|
61
|
+
* The endpoint and resolver forms share one contract: return a token; return
|
|
62
|
+
* `null` when the login itself is gone (terminal — the client signs out and
|
|
63
|
+
* fails `ready()` with `session_expired`); or throw on a transient failure, which
|
|
64
|
+
* backs off and retries without signing out. The endpoint form maps HTTP onto
|
|
65
|
+
* this for you: 401 and 403 mean signed out, any other failure is transient.
|
|
79
66
|
*/
|
|
80
67
|
apiKey?: string | ApiKeySetter | null | undefined;
|
|
81
68
|
/**
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
* short-lived token (`ablo init` scaffolds `/api/ablo-session`):
|
|
69
|
+
* The session-mint endpoint — the browser-side auth field, and the named
|
|
70
|
+
* counterpart to the endpoint-string form of {@link AbloOptions.apiKey}. Point it
|
|
71
|
+
* at the route that mints the signed-in user's short-lived token:
|
|
86
72
|
*
|
|
87
73
|
* ```ts
|
|
88
74
|
* const ablo = Ablo({ schema, authEndpoint: '/api/ablo-session' });
|
|
89
75
|
* ```
|
|
90
76
|
*
|
|
91
|
-
* The
|
|
92
|
-
* included), reads `{ token }`, keeps it fresh ahead of expiry, re-mints
|
|
93
|
-
*
|
|
94
|
-
* any other failure is retried
|
|
95
|
-
* resolver `() => Promise<string | null>` when the exchange
|
|
96
|
-
* headers or a body
|
|
77
|
+
* The client owns the whole exchange: it POSTs the route (same-origin, cookies
|
|
78
|
+
* included), reads `{ token }`, keeps it fresh ahead of expiry, and re-mints when
|
|
79
|
+
* the server reports the token stale. A 401 or 403 from the route means signed
|
|
80
|
+
* out; any other failure is retried rather than treated as a sign-out. It also
|
|
81
|
+
* accepts an async resolver `() => Promise<string | null>` when the exchange
|
|
82
|
+
* needs custom headers or a body — the same contract as the resolver form of
|
|
83
|
+
* `apiKey`.
|
|
97
84
|
*
|
|
98
|
-
* Mutually exclusive with `apiKey
|
|
99
|
-
*
|
|
85
|
+
* Mutually exclusive with `apiKey`: a server holds a key, a browser holds a mint
|
|
86
|
+
* route, and passing both is a validation error.
|
|
100
87
|
*/
|
|
101
88
|
authEndpoint?: string | ApiKeySetter | null | undefined;
|
|
102
89
|
/**
|
|
103
|
-
* @deprecated The direct connector lets Ablo dial
|
|
104
|
-
* it
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
* log in your infra too, self-host the engine. See
|
|
110
|
-
* docs/plans/stripe-shaped-storage-posture.md.
|
|
90
|
+
* @deprecated The direct connector lets Ablo dial into your Postgres and write to
|
|
91
|
+
* it directly. Prefer the signed data-source endpoint: keep your `DATABASE_URL`
|
|
92
|
+
* in your own app, expose `dataSource(...)`, and let your server own the write
|
|
93
|
+
* while Ablo coordinates the sync stream. Ablo hosts only the ordered
|
|
94
|
+
* `sync_deltas` log and coordination, never your rows. To keep the log in your own
|
|
95
|
+
* infrastructure as well, self-host the engine.
|
|
111
96
|
*
|
|
112
|
-
* Still honored at runtime for
|
|
113
|
-
* it is never sent from the browser
|
|
114
|
-
* `dangerouslyAllowBrowser` throws. If you
|
|
115
|
-
*
|
|
97
|
+
* Still honored at runtime for backward compatibility. It is server-only: because
|
|
98
|
+
* it carries credentials it is never sent from the browser, and constructing a
|
|
99
|
+
* client with both `databaseUrl` and `dangerouslyAllowBrowser` throws. If you do
|
|
100
|
+
* use it, supply a role that is neither a superuser nor `BYPASSRLS`; the connector
|
|
101
|
+
* rejects privileged roles that cannot enforce row-level security.
|
|
116
102
|
*/
|
|
117
103
|
databaseUrl?: string | null | undefined;
|
|
118
104
|
/**
|
|
@@ -123,35 +109,37 @@ export interface AbloOptions<S extends SchemaRecord = SchemaRecord> {
|
|
|
123
109
|
*/
|
|
124
110
|
persistence?: AbloPersistence;
|
|
125
111
|
/**
|
|
126
|
-
*
|
|
127
|
-
* persistent socket, local synced
|
|
128
|
-
* returns the
|
|
129
|
-
* serverless
|
|
130
|
-
* call is
|
|
131
|
-
* socket is
|
|
132
|
-
*
|
|
133
|
-
* `onChange`
|
|
112
|
+
* Selects the transport. `'websocket'` (the default) is the live client: a
|
|
113
|
+
* persistent socket, a local synced cache, and `onChange` subscriptions. `'http'`
|
|
114
|
+
* returns the stateless client for server-side actors — agents, workers, and
|
|
115
|
+
* serverless handlers. It offers the same `ablo.<model>` surface and coordination
|
|
116
|
+
* plane, but every call is a single HTTP round-trip, identity rides the bearer
|
|
117
|
+
* credential, and no socket is opened. With `'http'` the return type narrows to
|
|
118
|
+
* {@link AbloHttpClient}, so stateful-only capabilities such as `get`, `getAll`,
|
|
119
|
+
* and `onChange` become compile errors instead of runtime gaps.
|
|
134
120
|
*
|
|
135
|
-
* Note: session
|
|
136
|
-
*
|
|
121
|
+
* Note: session minting through `sessions.create` runs on the default WebSocket
|
|
122
|
+
* client, not the HTTP client.
|
|
137
123
|
*
|
|
138
124
|
* @default 'websocket'
|
|
139
125
|
*/
|
|
140
126
|
transport?: 'websocket' | 'http' | undefined;
|
|
141
127
|
/**
|
|
142
|
-
*
|
|
143
|
-
* coordination trace — claims requested
|
|
144
|
-
* handovers, connection state — so you can
|
|
145
|
-
*
|
|
146
|
-
* warnings
|
|
147
|
-
* `ABLO_LOG_LEVEL
|
|
128
|
+
* Turns Ablo's diagnostic logging on or off. `true` surfaces the `[Ablo]`
|
|
129
|
+
* coordination trace — claims requested, queued, granted, and released, agent
|
|
130
|
+
* handovers, and connection state — so you can watch the coordination between
|
|
131
|
+
* humans and agents while debugging. Omitting it, or `false`, keeps the quiet
|
|
132
|
+
* default of warnings and errors only. For a middle ground use {@link logLevel}.
|
|
133
|
+
* The `ABLO_LOG_LEVEL` environment variable overrides it, and a custom logger
|
|
134
|
+
* takes precedence.
|
|
148
135
|
*/
|
|
149
136
|
debug?: boolean | undefined;
|
|
150
137
|
/**
|
|
151
|
-
*
|
|
152
|
-
* {@link debug}
|
|
153
|
-
* per-model registration
|
|
154
|
-
*
|
|
138
|
+
* The log threshold for the default `[Ablo]` logger; takes precedence over
|
|
139
|
+
* {@link debug}. `'info'` shows coordination and connection events without the
|
|
140
|
+
* per-model registration detail, `'debug'` shows everything, `'warn'` (the
|
|
141
|
+
* default) shows warnings and errors only, and `'silent'` shows nothing. The
|
|
142
|
+
* `ABLO_LOG_LEVEL` environment variable overrides it.
|
|
155
143
|
*/
|
|
156
144
|
logLevel?: 'debug' | 'info' | 'warn' | 'error' | 'silent' | undefined;
|
|
157
145
|
/**
|
|
@@ -178,18 +166,15 @@ export interface AbloOptions<S extends SchemaRecord = SchemaRecord> {
|
|
|
178
166
|
}
|
|
179
167
|
export interface InternalAbloOptions<S extends SchemaRecord = SchemaRecord> {
|
|
180
168
|
/**
|
|
181
|
-
* API key used for authentication.
|
|
169
|
+
* The API key used for authentication.
|
|
182
170
|
*
|
|
183
|
-
* Accepts a static string (`sk_live_...`) or an async function that
|
|
184
|
-
*
|
|
171
|
+
* Accepts a static string (`sk_live_...`) or an async function that resolves to
|
|
172
|
+
* one. Defaults to the `ABLO_API_KEY` environment variable.
|
|
185
173
|
*
|
|
186
|
-
* When a function is provided, it
|
|
187
|
-
*
|
|
188
|
-
*
|
|
189
|
-
*
|
|
190
|
-
* original available as `cause`.
|
|
191
|
-
*
|
|
192
|
-
* Mirrors Anthropic / OpenAI / Stripe SDK shape exactly.
|
|
174
|
+
* When a function is provided, it is invoked before each request, so you can
|
|
175
|
+
* rotate or refresh credentials at runtime. It must return a non-empty string, or
|
|
176
|
+
* an `AbloAuthenticationError` is thrown; if it throws, the error is wrapped with
|
|
177
|
+
* the original available as `cause`.
|
|
193
178
|
*/
|
|
194
179
|
apiKey?: string | ApiKeySetter | null | undefined;
|
|
195
180
|
/**
|
|
@@ -198,12 +183,11 @@ export interface InternalAbloOptions<S extends SchemaRecord = SchemaRecord> {
|
|
|
198
183
|
*/
|
|
199
184
|
authEndpoint?: string | ApiKeySetter | null | undefined;
|
|
200
185
|
/**
|
|
201
|
-
*
|
|
202
|
-
* every request.
|
|
186
|
+
* A bearer auth token, sent as `Authorization: Bearer <token>` on every request.
|
|
203
187
|
*
|
|
204
|
-
* Use
|
|
205
|
-
*
|
|
206
|
-
*
|
|
188
|
+
* Use it for self-hosted deployments where your own auth layer mints capability
|
|
189
|
+
* tokens directly. Hosted-cloud consumers pass `apiKey` instead and let the
|
|
190
|
+
* server mint the capability token.
|
|
207
191
|
*/
|
|
208
192
|
authToken?: string | null | undefined;
|
|
209
193
|
/**
|
|
@@ -244,57 +228,56 @@ export interface InternalAbloOptions<S extends SchemaRecord = SchemaRecord> {
|
|
|
244
228
|
*/
|
|
245
229
|
schema: Schema<S>;
|
|
246
230
|
/**
|
|
247
|
-
* @deprecated
|
|
248
|
-
*
|
|
249
|
-
* server-internal cap-mint flow lands.
|
|
231
|
+
* @deprecated The server derives the participant kind from the apiKey's scope.
|
|
232
|
+
* Pass `apiKey` only.
|
|
250
233
|
*/
|
|
251
234
|
kind?: 'user' | 'agent' | 'system';
|
|
252
235
|
/**
|
|
253
|
-
* @deprecated
|
|
254
|
-
*
|
|
255
|
-
*
|
|
236
|
+
* @deprecated The server derives user identity from the apiKey's scope, or from
|
|
237
|
+
* the `Ablo-Acting-User` request header for multi-tenant setups. Pass `apiKey`
|
|
238
|
+
* only.
|
|
256
239
|
*/
|
|
257
240
|
user?: {
|
|
258
241
|
id: string;
|
|
259
242
|
teamIds?: string[];
|
|
260
243
|
};
|
|
261
244
|
/**
|
|
262
|
-
* @deprecated
|
|
263
|
-
*
|
|
245
|
+
* @deprecated The server derives agent identity from the apiKey's scope. Pass
|
|
246
|
+
* `apiKey` only.
|
|
264
247
|
*/
|
|
265
248
|
agentId?: string;
|
|
266
249
|
/**
|
|
267
|
-
* @deprecated
|
|
268
|
-
* `apiKey` only; the server handles capability issuance.
|
|
250
|
+
* @deprecated Pass `apiKey` only; the server issues the capability token.
|
|
269
251
|
*/
|
|
270
252
|
capabilityToken?: string;
|
|
271
253
|
/** Custom logger (default: console). Supplying one bypasses {@link debug}/{@link logLevel}. */
|
|
272
254
|
logger?: SyncLogger;
|
|
273
255
|
/**
|
|
274
|
-
*
|
|
275
|
-
* coordination trace — claims acquired
|
|
276
|
-
* handovers, connection state —
|
|
277
|
-
*
|
|
278
|
-
*
|
|
279
|
-
*
|
|
256
|
+
* Turns Ablo's diagnostic logging on or off. `true` surfaces the `[Ablo]`
|
|
257
|
+
* coordination trace — claims acquired, queued, granted, and released, agent
|
|
258
|
+
* handovers, and connection state — along with internal lifecycle events, so you
|
|
259
|
+
* can watch the coordination between humans and agents. Omitting it, or `false`,
|
|
260
|
+
* keeps the quiet default of warnings and errors only. For a middle ground use
|
|
261
|
+
* {@link logLevel}. The `ABLO_LOG_LEVEL` environment variable overrides it, and a
|
|
262
|
+
* custom {@link logger} takes precedence.
|
|
280
263
|
*/
|
|
281
264
|
debug?: boolean;
|
|
282
265
|
/**
|
|
283
|
-
*
|
|
284
|
-
* {@link debug}
|
|
285
|
-
* per-model registration
|
|
286
|
-
*
|
|
266
|
+
* The log threshold for the default `[Ablo]` logger; takes precedence over
|
|
267
|
+
* {@link debug}. `'info'` shows coordination and connection events without the
|
|
268
|
+
* per-model registration detail, `'debug'` shows everything, `'warn'` (the
|
|
269
|
+
* default) shows warnings and errors only, and `'silent'` shows nothing. The
|
|
270
|
+
* `ABLO_LOG_LEVEL` environment variable overrides it.
|
|
287
271
|
*/
|
|
288
272
|
logLevel?: 'debug' | 'info' | 'warn' | 'error' | 'silent';
|
|
289
|
-
/**
|
|
273
|
+
/** InstanceCache size limit (default: 10000) */
|
|
290
274
|
maxPoolSize?: number;
|
|
291
275
|
/**
|
|
292
|
-
* Local persistence mode. Defaults to `memory
|
|
293
|
-
*
|
|
294
|
-
* durability onto every browser consumer.
|
|
276
|
+
* Local persistence mode. Defaults to `memory`, keeping the local cache in
|
|
277
|
+
* process rather than adding IndexedDB durability to every browser consumer.
|
|
295
278
|
*
|
|
296
|
-
* Pass `persistence: 'indexeddb'` only when you want offline queueing
|
|
297
|
-
*
|
|
279
|
+
* Pass `persistence: 'indexeddb'` only when you want offline queueing and a
|
|
280
|
+
* reload-surviving local cache in a browser.
|
|
298
281
|
*/
|
|
299
282
|
persistence?: AbloPersistence;
|
|
300
283
|
/** @deprecated Use `persistence: 'indexeddb'` for durable browser storage. */
|
|
@@ -306,26 +289,23 @@ export interface InternalAbloOptions<S extends SchemaRecord = SchemaRecord> {
|
|
|
306
289
|
*/
|
|
307
290
|
inMemory?: boolean;
|
|
308
291
|
/**
|
|
309
|
-
*
|
|
310
|
-
*
|
|
311
|
-
*
|
|
312
|
-
* If false (default), the consumer MUST call `await sync.ready()` before
|
|
313
|
-
* using the engine — any query before that returns empty results.
|
|
292
|
+
* When `true`, initialization starts immediately in the background, so reads work
|
|
293
|
+
* once `await ready()` resolves.
|
|
314
294
|
*
|
|
315
|
-
*
|
|
295
|
+
* When `false` (the default), you must call `await ready()` before using the
|
|
296
|
+
* engine; any query before that returns empty results. The explicit default
|
|
297
|
+
* guards against silent initialization failures.
|
|
316
298
|
*/
|
|
317
299
|
autoStart?: boolean;
|
|
318
300
|
/**
|
|
319
|
-
* How
|
|
320
|
-
* startup.
|
|
301
|
+
* How much baseline state this client pulls at startup.
|
|
321
302
|
*
|
|
322
|
-
* - `'full'`: pull every delta in the configured sync groups before
|
|
323
|
-
*
|
|
324
|
-
* - `'none'`: open the
|
|
325
|
-
* fetch. Reads round-trip
|
|
326
|
-
*
|
|
327
|
-
*
|
|
328
|
-
* need (or want) a local replica of the org's tenant plane.
|
|
303
|
+
* - `'full'`: pull every delta in the configured sync groups before `ready()`
|
|
304
|
+
* resolves. The default for user clients.
|
|
305
|
+
* - `'none'`: open the socket and process live deltas only, with no baseline
|
|
306
|
+
* fetch. Reads round-trip through `retrieve`, and subscriptions fill the local
|
|
307
|
+
* cache lazily. The default for agent clients, which do not need a local
|
|
308
|
+
* replica of the organization's data.
|
|
329
309
|
*/
|
|
330
310
|
bootstrapMode?: 'full' | 'none';
|
|
331
311
|
/**
|
|
@@ -366,13 +346,10 @@ export interface InternalAbloOptions<S extends SchemaRecord = SchemaRecord> {
|
|
|
366
346
|
*/
|
|
367
347
|
configOverrides?: Partial<SyncEngineConfig>;
|
|
368
348
|
/**
|
|
369
|
-
*
|
|
370
|
-
*
|
|
371
|
-
*
|
|
372
|
-
*
|
|
373
|
-
* syncGroups` warning and a zero-fan-out client). Keep passing it explicitly
|
|
374
|
-
* until the server-derived path ships in Phase 3, at which point it becomes a
|
|
375
|
-
* true no-op and is removed. Build values with `syncGroup(kind, id)` from
|
|
349
|
+
* The sync groups (entity scopes) this client subscribes to. Normally the server
|
|
350
|
+
* derives these from the apiKey's scope; pass them explicitly when the key does
|
|
351
|
+
* not resolve them, otherwise the client fans out nothing and logs a `degenerate
|
|
352
|
+
* syncGroups` warning. Build values with `syncGroup(kind, id)` from
|
|
376
353
|
* `@abloatai/ablo/schema`.
|
|
377
354
|
*/
|
|
378
355
|
syncGroups?: string[];
|
|
@@ -380,7 +357,7 @@ export interface InternalAbloOptions<S extends SchemaRecord = SchemaRecord> {
|
|
|
380
357
|
* Override the bootstrap endpoint base URL. Use this when your sync
|
|
381
358
|
* server's HTTP API lives on a different host than the WebSocket URL.
|
|
382
359
|
*
|
|
383
|
-
* Must include the `/api` prefix — `
|
|
360
|
+
* Must include the `/api` prefix — `BootstrapFetcher` appends
|
|
384
361
|
* `/sync/bootstrap` directly. Example:
|
|
385
362
|
* `'http://api.example.com/api'` → `http://api.example.com/api/sync/bootstrap`.
|
|
386
363
|
*
|
|
@@ -388,9 +365,9 @@ export interface InternalAbloOptions<S extends SchemaRecord = SchemaRecord> {
|
|
|
388
365
|
*/
|
|
389
366
|
bootstrapBaseUrl?: string;
|
|
390
367
|
/**
|
|
391
|
-
*
|
|
392
|
-
*
|
|
393
|
-
*
|
|
368
|
+
* The account scope. Supply it together with a user or agent id to resolve
|
|
369
|
+
* identity locally without a server round-trip; without it, the client resolves
|
|
370
|
+
* identity from the token through the identity endpoint instead.
|
|
394
371
|
*/
|
|
395
372
|
organizationId?: string;
|
|
396
373
|
}
|
package/dist/client/options.js
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* and the
|
|
4
|
-
*
|
|
5
|
-
* Extracted from `Ablo.ts` so the option types can be referenced without
|
|
6
|
-
* pulling in the factory's runtime graph. This module is type-only — ZERO
|
|
7
|
-
* runtime imports — so importing it can never create a cycle. `Ablo.ts`
|
|
8
|
-
* re-exports everything here, so existing import paths keep resolving.
|
|
2
|
+
* The option types for the {@link Ablo} client: the public {@link AbloOptions}
|
|
3
|
+
* bag callers pass, and the fuller {@link InternalAbloOptions} construction
|
|
4
|
+
* surface. This module holds only types and has no runtime imports.
|
|
9
5
|
*/
|
|
10
6
|
export {};
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
export interface RegisterDataSourceInput {
|
|
2
|
-
/** HTTP API base,
|
|
2
|
+
/** The HTTP API base, for example `https://api.abloatai.com/api`. */
|
|
3
3
|
readonly baseUrl: string;
|
|
4
|
-
/**
|
|
4
|
+
/** The secret key (`sk_…`) used to authenticate the call and derive the organization. */
|
|
5
5
|
readonly apiKey: string | null;
|
|
6
|
-
/** Postgres connection string
|
|
6
|
+
/** The Postgres connection string to register. */
|
|
7
7
|
readonly databaseUrl: string;
|
|
8
|
-
/**
|
|
8
|
+
/** An optional Postgres schema; the server defaults to `public`. */
|
|
9
9
|
readonly schema?: string;
|
|
10
|
-
/**
|
|
10
|
+
/** A custom fetch implementation for tests, proxies, or unusual runtimes. */
|
|
11
11
|
readonly fetchImpl?: typeof fetch;
|
|
12
12
|
}
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* with `datasource_registration_failed
|
|
17
|
-
* instead of
|
|
14
|
+
* Posts the connection string to the data-source registration route. Resolves once
|
|
15
|
+
* the organization's data plane points at this database; otherwise throws an
|
|
16
|
+
* {@link AbloError} with code `datasource_registration_failed`, so `ready()`
|
|
17
|
+
* surfaces the failure instead of quietly bootstrapping against the wrong store.
|
|
18
18
|
*/
|
|
19
19
|
export declare function registerDataSource(input: RegisterDataSourceInput): Promise<void>;
|
|
@@ -1,25 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Registers a direct database connection as an organization's data source.
|
|
3
3
|
*
|
|
4
|
-
* When a client is constructed with `databaseUrl`, the SDK
|
|
5
|
-
*
|
|
6
|
-
* to that direct connection.
|
|
4
|
+
* When a client is constructed with `databaseUrl`, the SDK calls this before
|
|
5
|
+
* bootstrap so the server points the organization's data plane at that connection.
|
|
7
6
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
7
|
+
* It posts to `POST /v1/datasources`, falling back to the older
|
|
8
|
+
* `POST /v1/datasource` route on a 404 so registration still works against an
|
|
9
|
+
* earlier server.
|
|
11
10
|
*
|
|
12
|
-
* The
|
|
13
|
-
* organization id. The connection string is sent once over TLS and is
|
|
14
|
-
* echoed back
|
|
15
|
-
*
|
|
11
|
+
* The organization is derived on the server from the API key; the caller never
|
|
12
|
+
* sends an organization id. The connection string is sent once over TLS and is
|
|
13
|
+
* never echoed back — the server stores it as a secret and returns only a safe
|
|
14
|
+
* projection of the data source (host, database, schema).
|
|
16
15
|
*/
|
|
17
16
|
import { AbloError } from '../errors.js';
|
|
18
17
|
/**
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* with `datasource_registration_failed
|
|
22
|
-
* instead of
|
|
18
|
+
* Posts the connection string to the data-source registration route. Resolves once
|
|
19
|
+
* the organization's data plane points at this database; otherwise throws an
|
|
20
|
+
* {@link AbloError} with code `datasource_registration_failed`, so `ready()`
|
|
21
|
+
* surfaces the failure instead of quietly bootstrapping against the wrong store.
|
|
23
22
|
*/
|
|
24
23
|
export async function registerDataSource(input) {
|
|
25
24
|
if (!input.apiKey) {
|
|
@@ -51,7 +50,7 @@ export async function registerDataSource(input) {
|
|
|
51
50
|
};
|
|
52
51
|
let response = await post(`${base}/v1/datasources`);
|
|
53
52
|
if (response.status === 404) {
|
|
54
|
-
//
|
|
53
|
+
// The newer route is absent on an older server; use the earlier one.
|
|
55
54
|
response = await post(`${base}/v1/datasource`);
|
|
56
55
|
}
|
|
57
56
|
if (!response.ok) {
|