@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,373 @@
|
|
|
1
|
+
/**
|
|
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.
|
|
5
|
+
*/
|
|
6
|
+
import type { Schema, SchemaRecord } from '../schema/schema.js';
|
|
7
|
+
import type { SyncEngineConfig, SyncLogger, MutationExecutor, SyncObservabilityProvider, SyncAnalytics, SessionErrorDetector, OnlineStatusProvider } from '../interfaces/index.js';
|
|
8
|
+
import type { AbloPersistence } from './persistence.js';
|
|
9
|
+
/**
|
|
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.
|
|
14
|
+
*/
|
|
15
|
+
export type { ApiKeySetter } from './auth.js';
|
|
16
|
+
import type { ApiKeySetter } from './auth.js';
|
|
17
|
+
/**
|
|
18
|
+
* Options for the {@link Ablo} client.
|
|
19
|
+
*
|
|
20
|
+
* The only required field is `schema`. Because `apiKey` defaults to the
|
|
21
|
+
* `ABLO_API_KEY` environment variable, most server setups need nothing more:
|
|
22
|
+
*
|
|
23
|
+
* ```ts
|
|
24
|
+
* const ablo = Ablo({ schema, apiKey: process.env.ABLO_API_KEY });
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
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.
|
|
29
|
+
*
|
|
30
|
+
* @see https://docs.abloatai.com — full option reference
|
|
31
|
+
*/
|
|
32
|
+
export interface AbloOptions<S extends SchemaRecord = SchemaRecord> {
|
|
33
|
+
/**
|
|
34
|
+
* TypeScript schema defined with `defineSchema()`. Required — it's what
|
|
35
|
+
* makes `ablo.weatherReports.update(...)` typed. This is the one field you must
|
|
36
|
+
* pass; start here.
|
|
37
|
+
*/
|
|
38
|
+
schema: Schema<S>;
|
|
39
|
+
/**
|
|
40
|
+
* The API key — the auth field most apps set. It accepts three shapes:
|
|
41
|
+
*
|
|
42
|
+
* - **A key string** (server): your secret `sk_` key. Defaults to the
|
|
43
|
+
* `ABLO_API_KEY` environment variable, so you usually pass nothing. A
|
|
44
|
+
* long-lived key needs no refresh; the client uses it as-is.
|
|
45
|
+
*
|
|
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.
|
|
55
|
+
*
|
|
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.
|
|
60
|
+
*
|
|
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.
|
|
66
|
+
*/
|
|
67
|
+
apiKey?: string | ApiKeySetter | null | undefined;
|
|
68
|
+
/**
|
|
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:
|
|
72
|
+
*
|
|
73
|
+
* ```ts
|
|
74
|
+
* const ablo = Ablo({ schema, authEndpoint: '/api/ablo-session' });
|
|
75
|
+
* ```
|
|
76
|
+
*
|
|
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`.
|
|
84
|
+
*
|
|
85
|
+
* Mutually exclusive with `apiKey`: a server holds a key, a browser holds a mint
|
|
86
|
+
* route, and passing both is a validation error.
|
|
87
|
+
*/
|
|
88
|
+
authEndpoint?: string | ApiKeySetter | null | undefined;
|
|
89
|
+
/**
|
|
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.
|
|
96
|
+
*
|
|
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.
|
|
102
|
+
*/
|
|
103
|
+
databaseUrl?: string | null | undefined;
|
|
104
|
+
/**
|
|
105
|
+
* Local persistence mode. Pass `indexeddb` only when you want offline
|
|
106
|
+
* queueing and a reload-surviving browser cache.
|
|
107
|
+
*
|
|
108
|
+
* @default 'memory'
|
|
109
|
+
*/
|
|
110
|
+
persistence?: AbloPersistence;
|
|
111
|
+
/**
|
|
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.
|
|
120
|
+
*
|
|
121
|
+
* Note: session minting through `sessions.create` runs on the default WebSocket
|
|
122
|
+
* client, not the HTTP client.
|
|
123
|
+
*
|
|
124
|
+
* @default 'websocket'
|
|
125
|
+
*/
|
|
126
|
+
transport?: 'websocket' | 'http' | undefined;
|
|
127
|
+
/**
|
|
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.
|
|
135
|
+
*/
|
|
136
|
+
debug?: boolean | undefined;
|
|
137
|
+
/**
|
|
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.
|
|
143
|
+
*/
|
|
144
|
+
logLevel?: 'debug' | 'info' | 'warn' | 'error' | 'silent' | undefined;
|
|
145
|
+
/**
|
|
146
|
+
* Bearer auth token. Hosted-cloud consumers pass `apiKey`; self-hosted
|
|
147
|
+
* deployments may pass a bearer token minted by their own auth layer.
|
|
148
|
+
*/
|
|
149
|
+
authToken?: string | null | undefined;
|
|
150
|
+
/**
|
|
151
|
+
* Override the Ablo API base URL. Defaults to hosted production.
|
|
152
|
+
*/
|
|
153
|
+
baseURL?: string | null | undefined;
|
|
154
|
+
/** Custom fetch implementation for tests, proxies, or non-standard runtimes. */
|
|
155
|
+
fetch?: typeof fetch | undefined;
|
|
156
|
+
/** Default headers sent with every API request. */
|
|
157
|
+
defaultHeaders?: Record<string, string | null | undefined> | undefined;
|
|
158
|
+
/** Default query parameters sent with every API request. */
|
|
159
|
+
defaultQuery?: Record<string, string | undefined> | undefined;
|
|
160
|
+
/**
|
|
161
|
+
* Client-side use is disabled by default because private API keys should
|
|
162
|
+
* not ship to browsers. Set this only when the browser holds a minted
|
|
163
|
+
* session token (`ek_`/`rk_`) or you route through a controlled server proxy.
|
|
164
|
+
*/
|
|
165
|
+
dangerouslyAllowBrowser?: boolean | undefined;
|
|
166
|
+
}
|
|
167
|
+
export interface InternalAbloOptions<S extends SchemaRecord = SchemaRecord> {
|
|
168
|
+
/**
|
|
169
|
+
* The API key used for authentication.
|
|
170
|
+
*
|
|
171
|
+
* Accepts a static string (`sk_live_...`) or an async function that resolves to
|
|
172
|
+
* one. Defaults to the `ABLO_API_KEY` environment variable.
|
|
173
|
+
*
|
|
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`.
|
|
178
|
+
*/
|
|
179
|
+
apiKey?: string | ApiKeySetter | null | undefined;
|
|
180
|
+
/**
|
|
181
|
+
* Session-mint endpoint (string or async resolver) — see
|
|
182
|
+
* {@link AbloOptions.authEndpoint}. Mutually exclusive with `apiKey`.
|
|
183
|
+
*/
|
|
184
|
+
authEndpoint?: string | ApiKeySetter | null | undefined;
|
|
185
|
+
/**
|
|
186
|
+
* A bearer auth token, sent as `Authorization: Bearer <token>` on every request.
|
|
187
|
+
*
|
|
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.
|
|
191
|
+
*/
|
|
192
|
+
authToken?: string | null | undefined;
|
|
193
|
+
/**
|
|
194
|
+
* Override the default base URL. Defaults to
|
|
195
|
+
* `wss://api.abloatai.com` for hosted production; pass an explicit
|
|
196
|
+
* URL for self-hosted or private deployments.
|
|
197
|
+
*/
|
|
198
|
+
baseURL?: string | null | undefined;
|
|
199
|
+
/**
|
|
200
|
+
* Custom `fetch` implementation. Defaults to `globalThis.fetch`.
|
|
201
|
+
* Override for testing, custom transports, or runtime shims.
|
|
202
|
+
*/
|
|
203
|
+
fetch?: typeof fetch | undefined;
|
|
204
|
+
/**
|
|
205
|
+
* Default headers to include with every request to the API.
|
|
206
|
+
* Removed per-request by setting the header to `null` in request
|
|
207
|
+
* options.
|
|
208
|
+
*/
|
|
209
|
+
defaultHeaders?: Record<string, string | null | undefined> | undefined;
|
|
210
|
+
/**
|
|
211
|
+
* Default query parameters to include with every request.
|
|
212
|
+
* Removed per-request by setting the param to `undefined`.
|
|
213
|
+
*/
|
|
214
|
+
defaultQuery?: Record<string, string | undefined> | undefined;
|
|
215
|
+
/**
|
|
216
|
+
* Client-side use of this SDK is disabled by default — your apiKey
|
|
217
|
+
* would ship to every visitor's network tab. Only set this to
|
|
218
|
+
* `true` if you've understood the risk and have appropriate
|
|
219
|
+
* mitigations (a minted session token, a server-side proxy, etc).
|
|
220
|
+
*/
|
|
221
|
+
dangerouslyAllowBrowser?: boolean | undefined;
|
|
222
|
+
/**
|
|
223
|
+
* TypeScript schema defined with `defineSchema()`.
|
|
224
|
+
*
|
|
225
|
+
* The root `Ablo(...)` client is schema-first so consumers get typed
|
|
226
|
+
* model clients such as `ablo.weatherReports.update(...)`. Omit `schema`
|
|
227
|
+
* only for the advanced Model / Claim / Commit client.
|
|
228
|
+
*/
|
|
229
|
+
schema: Schema<S>;
|
|
230
|
+
/**
|
|
231
|
+
* @deprecated The server derives the participant kind from the apiKey's scope.
|
|
232
|
+
* Pass `apiKey` only.
|
|
233
|
+
*/
|
|
234
|
+
kind?: 'user' | 'agent' | 'system';
|
|
235
|
+
/**
|
|
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.
|
|
239
|
+
*/
|
|
240
|
+
user?: {
|
|
241
|
+
id: string;
|
|
242
|
+
teamIds?: string[];
|
|
243
|
+
};
|
|
244
|
+
/**
|
|
245
|
+
* @deprecated The server derives agent identity from the apiKey's scope. Pass
|
|
246
|
+
* `apiKey` only.
|
|
247
|
+
*/
|
|
248
|
+
agentId?: string;
|
|
249
|
+
/**
|
|
250
|
+
* @deprecated Pass `apiKey` only; the server issues the capability token.
|
|
251
|
+
*/
|
|
252
|
+
capabilityToken?: string;
|
|
253
|
+
/** Custom logger (default: console). Supplying one bypasses {@link debug}/{@link logLevel}. */
|
|
254
|
+
logger?: SyncLogger;
|
|
255
|
+
/**
|
|
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.
|
|
263
|
+
*/
|
|
264
|
+
debug?: boolean;
|
|
265
|
+
/**
|
|
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.
|
|
271
|
+
*/
|
|
272
|
+
logLevel?: 'debug' | 'info' | 'warn' | 'error' | 'silent';
|
|
273
|
+
/** InstanceCache size limit (default: 10000) */
|
|
274
|
+
maxPoolSize?: number;
|
|
275
|
+
/**
|
|
276
|
+
* Local persistence mode. Defaults to `memory`, keeping the local cache in
|
|
277
|
+
* process rather than adding IndexedDB durability to every browser consumer.
|
|
278
|
+
*
|
|
279
|
+
* Pass `persistence: 'indexeddb'` only when you want offline queueing and a
|
|
280
|
+
* reload-surviving local cache in a browser.
|
|
281
|
+
*/
|
|
282
|
+
persistence?: AbloPersistence;
|
|
283
|
+
/** @deprecated Use `persistence: 'indexeddb'` for durable browser storage. */
|
|
284
|
+
offline?: boolean;
|
|
285
|
+
/**
|
|
286
|
+
* @deprecated Internal/testing escape hatch. Use `persistence` in
|
|
287
|
+
* production code. `true` maps to `memory`; `false` maps to
|
|
288
|
+
* `indexeddb` in browsers.
|
|
289
|
+
*/
|
|
290
|
+
inMemory?: boolean;
|
|
291
|
+
/**
|
|
292
|
+
* When `true`, initialization starts immediately in the background, so reads work
|
|
293
|
+
* once `await ready()` resolves.
|
|
294
|
+
*
|
|
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.
|
|
298
|
+
*/
|
|
299
|
+
autoStart?: boolean;
|
|
300
|
+
/**
|
|
301
|
+
* How much baseline state this client pulls at startup.
|
|
302
|
+
*
|
|
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.
|
|
309
|
+
*/
|
|
310
|
+
bootstrapMode?: 'full' | 'none';
|
|
311
|
+
/**
|
|
312
|
+
* Custom observability provider (Sentry, Honeycomb, OTel, etc.).
|
|
313
|
+
* Default: a noop implementation that drops all breadcrumbs and spans.
|
|
314
|
+
*/
|
|
315
|
+
observability?: SyncObservabilityProvider;
|
|
316
|
+
/**
|
|
317
|
+
* Custom analytics provider (PostHog, Amplitude, Segment, etc.).
|
|
318
|
+
* Default: a noop implementation that drops all events.
|
|
319
|
+
*/
|
|
320
|
+
analytics?: SyncAnalytics;
|
|
321
|
+
/**
|
|
322
|
+
* Detect whether an error from a mutation/bootstrap response means the
|
|
323
|
+
* user's session has expired. Used to surface re-auth prompts. Default:
|
|
324
|
+
* heuristic that matches `401 Unauthorized` and a few common error shapes.
|
|
325
|
+
*/
|
|
326
|
+
sessionErrorDetector?: SessionErrorDetector;
|
|
327
|
+
/**
|
|
328
|
+
* Detect whether the browser is currently online. Default: reads
|
|
329
|
+
* `navigator.onLine` and listens to the `online`/`offline` events.
|
|
330
|
+
*/
|
|
331
|
+
onlineStatus?: OnlineStatusProvider;
|
|
332
|
+
/**
|
|
333
|
+
* Replace the built-in `MutationExecutor` (which posts a hardcoded
|
|
334
|
+
* `commit` method against `${url}/graphql`) with one that uses your own
|
|
335
|
+
* GraphQL client, auth headers, retry policy, and observability hooks.
|
|
336
|
+
*
|
|
337
|
+
* Default: a fetch-based executor that targets `${url}/graphql` and sends
|
|
338
|
+
* the configured bearer (`apiKey` / backend-minted token) as `Authorization`.
|
|
339
|
+
*/
|
|
340
|
+
mutationExecutor?: MutationExecutor;
|
|
341
|
+
/**
|
|
342
|
+
* Partial overrides for the auto-derived `SyncEngineConfig`. Merged on
|
|
343
|
+
* top of `deriveConfigFromSchema(schema)`. Use this when you need
|
|
344
|
+
* specific `modelCreatePriority`, `batchableModels`, or
|
|
345
|
+
* `essentialFields` settings that the schema cannot express.
|
|
346
|
+
*/
|
|
347
|
+
configOverrides?: Partial<SyncEngineConfig>;
|
|
348
|
+
/**
|
|
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
|
|
353
|
+
* `@abloatai/ablo/schema`.
|
|
354
|
+
*/
|
|
355
|
+
syncGroups?: string[];
|
|
356
|
+
/**
|
|
357
|
+
* Override the bootstrap endpoint base URL. Use this when your sync
|
|
358
|
+
* server's HTTP API lives on a different host than the WebSocket URL.
|
|
359
|
+
*
|
|
360
|
+
* Must include the `/api` prefix — `BootstrapFetcher` appends
|
|
361
|
+
* `/sync/bootstrap` directly. Example:
|
|
362
|
+
* `'http://api.example.com/api'` → `http://api.example.com/api/sync/bootstrap`.
|
|
363
|
+
*
|
|
364
|
+
* Default: `${url.replace(/^ws/, 'http')}/api`.
|
|
365
|
+
*/
|
|
366
|
+
bootstrapBaseUrl?: string;
|
|
367
|
+
/**
|
|
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.
|
|
371
|
+
*/
|
|
372
|
+
organizationId?: string;
|
|
373
|
+
}
|
|
@@ -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) {
|