@abloatai/ablo 0.26.0 → 0.28.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 +42 -2
- package/README.md +102 -86
- package/dist/BaseSyncedStore.d.ts +85 -88
- package/dist/BaseSyncedStore.js +134 -151
- package/dist/Database.d.ts +68 -69
- package/dist/Database.js +316 -135
- 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 +54 -52
- package/dist/Model.js +78 -62
- 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 +122 -118
- package/dist/SyncClient.js +541 -245
- package/dist/adapters/alwaysOnline.d.ts +6 -8
- package/dist/adapters/alwaysOnline.js +6 -8
- package/dist/adapters/inMemoryStorage.d.ts +10 -9
- package/dist/adapters/inMemoryStorage.js +21 -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 +173 -121
- package/dist/client/Ablo.d.ts +97 -74
- package/dist/client/Ablo.js +129 -163
- package/dist/client/ApiClient.d.ts +30 -19
- package/dist/client/ApiClient.js +442 -81
- 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 +16 -17
- package/dist/client/createInternalComponents.js +26 -31
- 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 +59 -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 +78 -87
- package/dist/client/options.d.ts +157 -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 +16 -20
- package/dist/client/wsMutationExecutor.js +18 -23
- package/dist/commit/contract.d.ts +493 -0
- package/dist/commit/contract.js +187 -0
- package/dist/commit/index.d.ts +6 -0
- package/dist/commit/index.js +5 -0
- 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 +14 -14
- package/dist/core/StoreManager.js +33 -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 +137 -134
- package/dist/errors.d.ts +160 -166
- package/dist/errors.js +155 -158
- package/dist/index.d.ts +36 -27
- package/dist/index.js +91 -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 +124 -131
- package/dist/mutators/UndoManager.js +177 -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 +28 -25
- package/dist/react/useAblo.js +41 -17
- 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 +3 -3
- 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 +64 -43
- 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 +24 -12
- package/dist/stores/ObjectStore.js +38 -16
- package/dist/stores/ObjectStoreContract.d.ts +14 -15
- package/dist/stores/SyncActionStore.d.ts +7 -11
- package/dist/stores/SyncActionStore.js +13 -17
- package/dist/surface.d.ts +28 -21
- package/dist/surface.js +29 -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 +141 -166
- 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/persistedPrefix.d.ts +12 -0
- package/dist/sync/persistedPrefix.js +22 -0
- 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 +5 -3
- package/dist/testing/index.js +3 -2
- package/dist/testing/mocks/FakeDatabase.d.ts +18 -0
- package/dist/testing/mocks/FakeDatabase.js +10 -0
- 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 +28 -23
- package/dist/testing/mocks/MockWebSocket.js +22 -21
- package/dist/transactions/TransactionQueue.d.ts +244 -181
- package/dist/transactions/TransactionQueue.js +929 -423
- 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/commitEnvelope.d.ts +132 -0
- package/dist/transactions/commitEnvelope.js +139 -0
- package/dist/transactions/commitOutboxStore.d.ts +32 -0
- package/dist/transactions/commitOutboxStore.js +26 -0
- package/dist/transactions/commitPayload.d.ts +63 -52
- package/dist/transactions/commitPayload.js +54 -57
- package/dist/transactions/deltaConfirmation.d.ts +20 -22
- package/dist/transactions/deltaConfirmation.js +37 -45
- package/dist/transactions/httpCommitEnvelope.d.ts +43 -0
- package/dist/transactions/httpCommitEnvelope.js +179 -0
- package/dist/transactions/optimisticApply.d.ts +49 -0
- package/dist/transactions/optimisticApply.js +65 -0
- package/dist/transactions/replayValidation.d.ts +182 -0
- package/dist/transactions/replayValidation.js +156 -0
- 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/wire/bootstrapReason.d.ts +9 -0
- package/dist/wire/bootstrapReason.js +8 -0
- 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 +315 -86
- package/dist/wire/frames.js +47 -33
- package/dist/wire/index.d.ts +18 -14
- package/dist/wire/index.js +32 -27
- 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/api.md +10 -10
- package/docs/coordination.md +59 -0
- package/docs/mcp.md +1 -1
- package/package.json +17 -11
- 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/transactions/persistedReplay.d.ts +0 -93
- package/dist/transactions/persistedReplay.js +0 -105
- package/dist/utils/mobx-setup.d.ts +0 -42
package/dist/client/options.d.ts
CHANGED
|
@@ -1,43 +1,33 @@
|
|
|
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';
|
|
9
|
+
import type { CommitOutboxStore } from '../transactions/commitOutboxStore.js';
|
|
10
|
+
import type { CommitOutboxScope } from '../transactions/commitEnvelope.js';
|
|
13
11
|
/**
|
|
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.
|
|
12
|
+
* An async function that resolves an apiKey at request time. Use it for credential
|
|
13
|
+
* rotation — read from a vault, refresh from session storage, or pull from an
|
|
14
|
+
* existing auth session. The canonical definition lives in `./auth`; it is
|
|
15
|
+
* re-exported here for convenience.
|
|
23
16
|
*/
|
|
24
17
|
export type { ApiKeySetter } from './auth.js';
|
|
25
18
|
import type { ApiKeySetter } from './auth.js';
|
|
26
19
|
/**
|
|
27
|
-
* Options for
|
|
20
|
+
* Options for the {@link Ablo} client.
|
|
28
21
|
*
|
|
29
|
-
* The only required field is `schema`.
|
|
22
|
+
* The only required field is `schema`. Because `apiKey` defaults to the
|
|
23
|
+
* `ABLO_API_KEY` environment variable, most server setups need nothing more:
|
|
30
24
|
*
|
|
31
25
|
* ```ts
|
|
32
26
|
* const ablo = Ablo({ schema, apiKey: process.env.ABLO_API_KEY });
|
|
33
27
|
* ```
|
|
34
28
|
*
|
|
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.
|
|
29
|
+
* Every other field is optional tuning — timeouts, retries, a custom fetch,
|
|
30
|
+
* persistence. If you are unsure whether you need one, you do not.
|
|
41
31
|
*
|
|
42
32
|
* @see https://docs.abloatai.com — full option reference
|
|
43
33
|
*/
|
|
@@ -49,70 +39,68 @@ export interface AbloOptions<S extends SchemaRecord = SchemaRecord> {
|
|
|
49
39
|
*/
|
|
50
40
|
schema: Schema<S>;
|
|
51
41
|
/**
|
|
52
|
-
* API key —
|
|
42
|
+
* The API key — the auth field most apps set. It accepts three shapes:
|
|
53
43
|
*
|
|
54
|
-
* - **A key string** (server): your secret `sk_`
|
|
55
|
-
* `
|
|
44
|
+
* - **A key string** (server): your secret `sk_` key. Defaults to the
|
|
45
|
+
* `ABLO_API_KEY` environment variable, so you usually pass nothing. A
|
|
56
46
|
* long-lived key needs no refresh; the client uses it as-is.
|
|
57
47
|
*
|
|
58
|
-
* - **An endpoint path
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
* ABSOLUTE URL: it enables pre-expiry renewal on windowless hosts too.
|
|
48
|
+
* - **An endpoint path or URL** — for example `apiKey: '/api/ablo-session'`.
|
|
49
|
+
* The client owns the whole exchange: it POSTs the endpoint (same-origin,
|
|
50
|
+
* cookies included), reads the minted short-lived token, and keeps it fresh
|
|
51
|
+
* with a refresh timer ahead of expiry, a re-mint after the machine wakes
|
|
52
|
+
* from sleep, and a re-mint when the server reports the token stale. You
|
|
53
|
+
* never call a refresh method yourself. The shape is detected by prefix (`/`,
|
|
54
|
+
* `http://`, or `https://`); key strings start with `sk_`/`ek_`/`rk_`, so the
|
|
55
|
+
* two cannot be confused. A long-lived server client should pass an absolute
|
|
56
|
+
* URL, which also enables pre-expiry renewal on hosts that never sleep.
|
|
68
57
|
*
|
|
69
|
-
* - **An async resolver** `() => Promise<string | null>` — the escape
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
* machinery as the endpoint form.
|
|
58
|
+
* - **An async resolver** `() => Promise<string | null>` — the escape hatch for
|
|
59
|
+
* when the exchange needs custom headers, a request body, or a non-HTTP mint
|
|
60
|
+
* (vault rotation, a cloud token service, an existing auth session). It uses
|
|
61
|
+
* the same renewal machinery as the endpoint form.
|
|
73
62
|
*
|
|
74
|
-
*
|
|
75
|
-
* itself is gone (terminal
|
|
76
|
-
* `session_expired`); or
|
|
77
|
-
*
|
|
78
|
-
* signed out, any other failure
|
|
63
|
+
* The endpoint and resolver forms share one contract: return a token; return
|
|
64
|
+
* `null` when the login itself is gone (terminal — the client signs out and
|
|
65
|
+
* fails `ready()` with `session_expired`); or throw on a transient failure, which
|
|
66
|
+
* backs off and retries without signing out. The endpoint form maps HTTP onto
|
|
67
|
+
* this for you: 401 and 403 mean signed out, any other failure is transient.
|
|
79
68
|
*/
|
|
80
69
|
apiKey?: string | ApiKeySetter | null | undefined;
|
|
81
70
|
/**
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
* short-lived token (`ablo init` scaffolds `/api/ablo-session`):
|
|
71
|
+
* The session-mint endpoint — the browser-side auth field, and the named
|
|
72
|
+
* counterpart to the endpoint-string form of {@link AbloOptions.apiKey}. Point it
|
|
73
|
+
* at the route that mints the signed-in user's short-lived token:
|
|
86
74
|
*
|
|
87
75
|
* ```ts
|
|
88
76
|
* const ablo = Ablo({ schema, authEndpoint: '/api/ablo-session' });
|
|
89
77
|
* ```
|
|
90
78
|
*
|
|
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
|
|
79
|
+
* The client owns the whole exchange: it POSTs the route (same-origin, cookies
|
|
80
|
+
* included), reads `{ token }`, keeps it fresh ahead of expiry, and re-mints when
|
|
81
|
+
* the server reports the token stale. A 401 or 403 from the route means signed
|
|
82
|
+
* out; any other failure is retried rather than treated as a sign-out. It also
|
|
83
|
+
* accepts an async resolver `() => Promise<string | null>` when the exchange
|
|
84
|
+
* needs custom headers or a body — the same contract as the resolver form of
|
|
85
|
+
* `apiKey`.
|
|
97
86
|
*
|
|
98
|
-
* Mutually exclusive with `apiKey
|
|
99
|
-
*
|
|
87
|
+
* Mutually exclusive with `apiKey`: a server holds a key, a browser holds a mint
|
|
88
|
+
* route, and passing both is a validation error.
|
|
100
89
|
*/
|
|
101
90
|
authEndpoint?: string | ApiKeySetter | null | undefined;
|
|
102
91
|
/**
|
|
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.
|
|
92
|
+
* @deprecated The direct connector lets Ablo dial into your Postgres and write to
|
|
93
|
+
* it directly. Prefer the signed data-source endpoint: keep your `DATABASE_URL`
|
|
94
|
+
* in your own app, expose `dataSource(...)`, and let your server own the write
|
|
95
|
+
* while Ablo coordinates the sync stream. Ablo hosts only the ordered
|
|
96
|
+
* `sync_deltas` log and coordination, never your rows. To keep the log in your own
|
|
97
|
+
* infrastructure as well, self-host the engine.
|
|
111
98
|
*
|
|
112
|
-
* Still honored at runtime for
|
|
113
|
-
* it is never sent from the browser
|
|
114
|
-
* `dangerouslyAllowBrowser` throws. If you
|
|
115
|
-
*
|
|
99
|
+
* Still honored at runtime for backward compatibility. It is server-only: because
|
|
100
|
+
* it carries credentials it is never sent from the browser, and constructing a
|
|
101
|
+
* client with both `databaseUrl` and `dangerouslyAllowBrowser` throws. If you do
|
|
102
|
+
* use it, supply a role that is neither a superuser nor `BYPASSRLS`; the connector
|
|
103
|
+
* rejects privileged roles that cannot enforce row-level security.
|
|
116
104
|
*/
|
|
117
105
|
databaseUrl?: string | null | undefined;
|
|
118
106
|
/**
|
|
@@ -123,35 +111,54 @@ export interface AbloOptions<S extends SchemaRecord = SchemaRecord> {
|
|
|
123
111
|
*/
|
|
124
112
|
persistence?: AbloPersistence;
|
|
125
113
|
/**
|
|
126
|
-
*
|
|
127
|
-
*
|
|
128
|
-
*
|
|
129
|
-
*
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
|
|
133
|
-
|
|
114
|
+
* Durable commit-envelope storage for server-side agents and workers.
|
|
115
|
+
* The stateful browser client uses its strict IndexedDB transaction store;
|
|
116
|
+
* the stateless HTTP client has no implicit filesystem and therefore needs a
|
|
117
|
+
* workflow-, SQLite-, or filesystem-backed implementation to survive a
|
|
118
|
+
* process restart. One store may serve several actors because every record
|
|
119
|
+
* is checked against its authenticated scope before replay.
|
|
120
|
+
*/
|
|
121
|
+
commitOutbox?: CommitOutboxStore;
|
|
122
|
+
/**
|
|
123
|
+
* Stable actor/server scope for an injected HTTP {@link commitOutbox}.
|
|
124
|
+
* Omit it to resolve `organizationId` and `participantId` from the authenticated
|
|
125
|
+
* `/auth/identity` endpoint. Supplying it avoids that one setup request in
|
|
126
|
+
* trusted worker environments; `namespace` distinguishes deployments or
|
|
127
|
+
* workflow lanes that share the same actor identity.
|
|
128
|
+
*/
|
|
129
|
+
commitOutboxScope?: CommitOutboxScope;
|
|
130
|
+
/**
|
|
131
|
+
* Selects the transport. `'websocket'` (the default) is the live client: a
|
|
132
|
+
* persistent socket, a local synced cache, and `onChange` subscriptions. `'http'`
|
|
133
|
+
* returns the stateless client for server-side actors — agents, workers, and
|
|
134
|
+
* serverless handlers. It offers the same `ablo.<model>` surface and coordination
|
|
135
|
+
* plane, but every call is a single HTTP round-trip, identity rides the bearer
|
|
136
|
+
* credential, and no socket is opened. With `'http'` the return type narrows to
|
|
137
|
+
* {@link AbloHttpClient}, so stateful-only capabilities such as `get`, `getAll`,
|
|
138
|
+
* and `onChange` become compile errors instead of runtime gaps.
|
|
134
139
|
*
|
|
135
|
-
* Note: session
|
|
136
|
-
*
|
|
140
|
+
* Note: session minting through `sessions.create` runs on the default WebSocket
|
|
141
|
+
* client, not the HTTP client.
|
|
137
142
|
*
|
|
138
143
|
* @default 'websocket'
|
|
139
144
|
*/
|
|
140
145
|
transport?: 'websocket' | 'http' | undefined;
|
|
141
146
|
/**
|
|
142
|
-
*
|
|
143
|
-
* coordination trace — claims requested
|
|
144
|
-
* handovers, connection state — so you can
|
|
145
|
-
*
|
|
146
|
-
* warnings
|
|
147
|
-
* `ABLO_LOG_LEVEL
|
|
147
|
+
* Turns Ablo's diagnostic logging on or off. `true` surfaces the `[Ablo]`
|
|
148
|
+
* coordination trace — claims requested, queued, granted, and released, agent
|
|
149
|
+
* handovers, and connection state — so you can watch the coordination between
|
|
150
|
+
* humans and agents while debugging. Omitting it, or `false`, keeps the quiet
|
|
151
|
+
* default of warnings and errors only. For a middle ground use {@link logLevel}.
|
|
152
|
+
* The `ABLO_LOG_LEVEL` environment variable overrides it, and a custom logger
|
|
153
|
+
* takes precedence.
|
|
148
154
|
*/
|
|
149
155
|
debug?: boolean | undefined;
|
|
150
156
|
/**
|
|
151
|
-
*
|
|
152
|
-
* {@link debug}
|
|
153
|
-
* per-model registration
|
|
154
|
-
*
|
|
157
|
+
* The log threshold for the default `[Ablo]` logger; takes precedence over
|
|
158
|
+
* {@link debug}. `'info'` shows coordination and connection events without the
|
|
159
|
+
* per-model registration detail, `'debug'` shows everything, `'warn'` (the
|
|
160
|
+
* default) shows warnings and errors only, and `'silent'` shows nothing. The
|
|
161
|
+
* `ABLO_LOG_LEVEL` environment variable overrides it.
|
|
155
162
|
*/
|
|
156
163
|
logLevel?: 'debug' | 'info' | 'warn' | 'error' | 'silent' | undefined;
|
|
157
164
|
/**
|
|
@@ -178,18 +185,15 @@ export interface AbloOptions<S extends SchemaRecord = SchemaRecord> {
|
|
|
178
185
|
}
|
|
179
186
|
export interface InternalAbloOptions<S extends SchemaRecord = SchemaRecord> {
|
|
180
187
|
/**
|
|
181
|
-
* API key used for authentication.
|
|
188
|
+
* The API key used for authentication.
|
|
182
189
|
*
|
|
183
|
-
* Accepts a static string (`sk_live_...`) or an async function that
|
|
184
|
-
*
|
|
190
|
+
* Accepts a static string (`sk_live_...`) or an async function that resolves to
|
|
191
|
+
* one. Defaults to the `ABLO_API_KEY` environment variable.
|
|
185
192
|
*
|
|
186
|
-
* When a function is provided, it
|
|
187
|
-
*
|
|
188
|
-
*
|
|
189
|
-
*
|
|
190
|
-
* original available as `cause`.
|
|
191
|
-
*
|
|
192
|
-
* Mirrors Anthropic / OpenAI / Stripe SDK shape exactly.
|
|
193
|
+
* When a function is provided, it is invoked before each request, so you can
|
|
194
|
+
* rotate or refresh credentials at runtime. It must return a non-empty string, or
|
|
195
|
+
* an `AbloAuthenticationError` is thrown; if it throws, the error is wrapped with
|
|
196
|
+
* the original available as `cause`.
|
|
193
197
|
*/
|
|
194
198
|
apiKey?: string | ApiKeySetter | null | undefined;
|
|
195
199
|
/**
|
|
@@ -198,12 +202,11 @@ export interface InternalAbloOptions<S extends SchemaRecord = SchemaRecord> {
|
|
|
198
202
|
*/
|
|
199
203
|
authEndpoint?: string | ApiKeySetter | null | undefined;
|
|
200
204
|
/**
|
|
201
|
-
*
|
|
202
|
-
* every request.
|
|
205
|
+
* A bearer auth token, sent as `Authorization: Bearer <token>` on every request.
|
|
203
206
|
*
|
|
204
|
-
* Use
|
|
205
|
-
*
|
|
206
|
-
*
|
|
207
|
+
* Use it for self-hosted deployments where your own auth layer mints capability
|
|
208
|
+
* tokens directly. Hosted-cloud consumers pass `apiKey` instead and let the
|
|
209
|
+
* server mint the capability token.
|
|
207
210
|
*/
|
|
208
211
|
authToken?: string | null | undefined;
|
|
209
212
|
/**
|
|
@@ -244,59 +247,62 @@ export interface InternalAbloOptions<S extends SchemaRecord = SchemaRecord> {
|
|
|
244
247
|
*/
|
|
245
248
|
schema: Schema<S>;
|
|
246
249
|
/**
|
|
247
|
-
* @deprecated
|
|
248
|
-
*
|
|
249
|
-
* server-internal cap-mint flow lands.
|
|
250
|
+
* @deprecated The server derives the participant kind from the apiKey's scope.
|
|
251
|
+
* Pass `apiKey` only.
|
|
250
252
|
*/
|
|
251
253
|
kind?: 'user' | 'agent' | 'system';
|
|
252
254
|
/**
|
|
253
|
-
* @deprecated
|
|
254
|
-
*
|
|
255
|
-
*
|
|
255
|
+
* @deprecated The server derives user identity from the apiKey's scope, or from
|
|
256
|
+
* the `Ablo-Acting-User` request header for multi-tenant setups. Pass `apiKey`
|
|
257
|
+
* only.
|
|
256
258
|
*/
|
|
257
259
|
user?: {
|
|
258
260
|
id: string;
|
|
259
261
|
teamIds?: string[];
|
|
260
262
|
};
|
|
261
263
|
/**
|
|
262
|
-
* @deprecated
|
|
263
|
-
*
|
|
264
|
+
* @deprecated The server derives agent identity from the apiKey's scope. Pass
|
|
265
|
+
* `apiKey` only.
|
|
264
266
|
*/
|
|
265
267
|
agentId?: string;
|
|
266
268
|
/**
|
|
267
|
-
* @deprecated
|
|
268
|
-
* `apiKey` only; the server handles capability issuance.
|
|
269
|
+
* @deprecated Pass `apiKey` only; the server issues the capability token.
|
|
269
270
|
*/
|
|
270
271
|
capabilityToken?: string;
|
|
271
272
|
/** Custom logger (default: console). Supplying one bypasses {@link debug}/{@link logLevel}. */
|
|
272
273
|
logger?: SyncLogger;
|
|
273
274
|
/**
|
|
274
|
-
*
|
|
275
|
-
* coordination trace — claims acquired
|
|
276
|
-
* handovers, connection state —
|
|
277
|
-
*
|
|
278
|
-
*
|
|
279
|
-
*
|
|
275
|
+
* Turns Ablo's diagnostic logging on or off. `true` surfaces the `[Ablo]`
|
|
276
|
+
* coordination trace — claims acquired, queued, granted, and released, agent
|
|
277
|
+
* handovers, and connection state — along with internal lifecycle events, so you
|
|
278
|
+
* can watch the coordination between humans and agents. Omitting it, or `false`,
|
|
279
|
+
* keeps the quiet default of warnings and errors only. For a middle ground use
|
|
280
|
+
* {@link logLevel}. The `ABLO_LOG_LEVEL` environment variable overrides it, and a
|
|
281
|
+
* custom {@link logger} takes precedence.
|
|
280
282
|
*/
|
|
281
283
|
debug?: boolean;
|
|
282
284
|
/**
|
|
283
|
-
*
|
|
284
|
-
* {@link debug}
|
|
285
|
-
* per-model registration
|
|
286
|
-
*
|
|
285
|
+
* The log threshold for the default `[Ablo]` logger; takes precedence over
|
|
286
|
+
* {@link debug}. `'info'` shows coordination and connection events without the
|
|
287
|
+
* per-model registration detail, `'debug'` shows everything, `'warn'` (the
|
|
288
|
+
* default) shows warnings and errors only, and `'silent'` shows nothing. The
|
|
289
|
+
* `ABLO_LOG_LEVEL` environment variable overrides it.
|
|
287
290
|
*/
|
|
288
291
|
logLevel?: 'debug' | 'info' | 'warn' | 'error' | 'silent';
|
|
289
|
-
/**
|
|
292
|
+
/** InstanceCache size limit (default: 10000) */
|
|
290
293
|
maxPoolSize?: number;
|
|
291
294
|
/**
|
|
292
|
-
* Local persistence mode. Defaults to `memory
|
|
293
|
-
*
|
|
294
|
-
* durability onto every browser consumer.
|
|
295
|
+
* Local persistence mode. Defaults to `memory`, keeping the local cache in
|
|
296
|
+
* process rather than adding IndexedDB durability to every browser consumer.
|
|
295
297
|
*
|
|
296
|
-
* Pass `persistence: 'indexeddb'` only when you want offline queueing
|
|
297
|
-
*
|
|
298
|
+
* Pass `persistence: 'indexeddb'` only when you want offline queueing and a
|
|
299
|
+
* reload-surviving local cache in a browser.
|
|
298
300
|
*/
|
|
299
301
|
persistence?: AbloPersistence;
|
|
302
|
+
/** Internal mirror of {@link AbloOptions.commitOutbox}. */
|
|
303
|
+
commitOutbox?: CommitOutboxStore;
|
|
304
|
+
/** Internal mirror of {@link AbloOptions.commitOutboxScope}. */
|
|
305
|
+
commitOutboxScope?: CommitOutboxScope;
|
|
300
306
|
/** @deprecated Use `persistence: 'indexeddb'` for durable browser storage. */
|
|
301
307
|
offline?: boolean;
|
|
302
308
|
/**
|
|
@@ -306,26 +312,23 @@ export interface InternalAbloOptions<S extends SchemaRecord = SchemaRecord> {
|
|
|
306
312
|
*/
|
|
307
313
|
inMemory?: boolean;
|
|
308
314
|
/**
|
|
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.
|
|
315
|
+
* When `true`, initialization starts immediately in the background, so reads work
|
|
316
|
+
* once `await ready()` resolves.
|
|
314
317
|
*
|
|
315
|
-
*
|
|
318
|
+
* When `false` (the default), you must call `await ready()` before using the
|
|
319
|
+
* engine; any query before that returns empty results. The explicit default
|
|
320
|
+
* guards against silent initialization failures.
|
|
316
321
|
*/
|
|
317
322
|
autoStart?: boolean;
|
|
318
323
|
/**
|
|
319
|
-
* How
|
|
320
|
-
* startup.
|
|
324
|
+
* How much baseline state this client pulls at startup.
|
|
321
325
|
*
|
|
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.
|
|
326
|
+
* - `'full'`: pull every delta in the configured sync groups before `ready()`
|
|
327
|
+
* resolves. The default for user clients.
|
|
328
|
+
* - `'none'`: open the socket and process live deltas only, with no baseline
|
|
329
|
+
* fetch. Reads round-trip through `retrieve`, and subscriptions fill the local
|
|
330
|
+
* cache lazily. The default for agent clients, which do not need a local
|
|
331
|
+
* replica of the organization's data.
|
|
329
332
|
*/
|
|
330
333
|
bootstrapMode?: 'full' | 'none';
|
|
331
334
|
/**
|
|
@@ -366,13 +369,10 @@ export interface InternalAbloOptions<S extends SchemaRecord = SchemaRecord> {
|
|
|
366
369
|
*/
|
|
367
370
|
configOverrides?: Partial<SyncEngineConfig>;
|
|
368
371
|
/**
|
|
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
|
|
372
|
+
* The sync groups (entity scopes) this client subscribes to. Normally the server
|
|
373
|
+
* derives these from the apiKey's scope; pass them explicitly when the key does
|
|
374
|
+
* not resolve them, otherwise the client fans out nothing and logs a `degenerate
|
|
375
|
+
* syncGroups` warning. Build values with `syncGroup(kind, id)` from
|
|
376
376
|
* `@abloatai/ablo/schema`.
|
|
377
377
|
*/
|
|
378
378
|
syncGroups?: string[];
|
|
@@ -380,7 +380,7 @@ export interface InternalAbloOptions<S extends SchemaRecord = SchemaRecord> {
|
|
|
380
380
|
* Override the bootstrap endpoint base URL. Use this when your sync
|
|
381
381
|
* server's HTTP API lives on a different host than the WebSocket URL.
|
|
382
382
|
*
|
|
383
|
-
* Must include the `/api` prefix — `
|
|
383
|
+
* Must include the `/api` prefix — `BootstrapFetcher` appends
|
|
384
384
|
* `/sync/bootstrap` directly. Example:
|
|
385
385
|
* `'http://api.example.com/api'` → `http://api.example.com/api/sync/bootstrap`.
|
|
386
386
|
*
|
|
@@ -388,9 +388,9 @@ export interface InternalAbloOptions<S extends SchemaRecord = SchemaRecord> {
|
|
|
388
388
|
*/
|
|
389
389
|
bootstrapBaseUrl?: string;
|
|
390
390
|
/**
|
|
391
|
-
*
|
|
392
|
-
*
|
|
393
|
-
*
|
|
391
|
+
* The account scope. Supply it together with a user or agent id to resolve
|
|
392
|
+
* identity locally without a server round-trip; without it, the client resolves
|
|
393
|
+
* identity from the token through the identity endpoint instead.
|
|
394
394
|
*/
|
|
395
395
|
organizationId?: string;
|
|
396
396
|
}
|
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) {
|