@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
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* The interfaces you implement to plug the SDK into your own environment.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* The SDK depends on these contracts rather than any specific framework, so you
|
|
5
|
+
* provide the concrete implementations — logging, observability, analytics,
|
|
6
|
+
* session-error detection, online-status checks, and the transport that carries
|
|
7
|
+
* mutations to your backend. The SDK ships sensible no-op defaults where it can.
|
|
7
8
|
*/
|
|
8
9
|
import type { StaleNotification, ReadDependency, ParticipantKind } from '../coordination/schema.js';
|
|
9
10
|
export interface SyncLogger {
|
|
@@ -68,14 +69,12 @@ export interface CommitZeroSyncIdDetails {
|
|
|
68
69
|
operationCount: number;
|
|
69
70
|
operations: string[];
|
|
70
71
|
}
|
|
71
|
-
export interface OfflineFlushFailureDetails {
|
|
72
|
-
error: string;
|
|
73
|
-
}
|
|
74
72
|
/**
|
|
75
|
-
*
|
|
76
|
-
* entered
|
|
77
|
-
* who asked, who waited behind whom, who
|
|
78
|
-
* Each phase
|
|
73
|
+
* A single event in the life of a claim. `phase` is the state the claim has just
|
|
74
|
+
* entered, and the sequence of phases is the trail you follow to see how two
|
|
75
|
+
* participants collided on a row — who asked for it, who waited behind whom, who
|
|
76
|
+
* was turned away, and whose lease lapsed. Each phase corresponds to a `claim_*`
|
|
77
|
+
* frame on the wire.
|
|
79
78
|
*/
|
|
80
79
|
export interface ClaimEvent {
|
|
81
80
|
phase: 'acquired' | 'queued' | 'granted' | 'lost' | 'rejected' | 'expired';
|
|
@@ -94,29 +93,28 @@ export interface ClaimEvent {
|
|
|
94
93
|
reason?: string;
|
|
95
94
|
}
|
|
96
95
|
/**
|
|
97
|
-
* A committed `onStale: 'notify'` write whose premise moved
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
96
|
+
* A committed `onStale: 'notify'` write whose premise had moved. The commit
|
|
97
|
+
* succeeded, but the guarded operations were not written because the row had
|
|
98
|
+
* changed since the caller's `readAt`, and the engine returned the current value
|
|
99
|
+
* so the caller can reconcile. Records which rows and fields collided.
|
|
101
100
|
*/
|
|
102
101
|
export interface ConflictEvent {
|
|
103
102
|
/** The client idempotency key whose write was notified. */
|
|
104
103
|
clientTxId: string;
|
|
105
104
|
/** The conflicted rows + the fields that collided. */
|
|
106
|
-
rows:
|
|
105
|
+
rows: readonly {
|
|
107
106
|
model: string;
|
|
108
107
|
id: string;
|
|
109
108
|
fields: readonly string[];
|
|
110
109
|
writtenBy?: ParticipantKind;
|
|
111
|
-
}
|
|
110
|
+
}[];
|
|
112
111
|
}
|
|
113
112
|
/** Span attributes for performance monitoring */
|
|
114
|
-
export
|
|
115
|
-
[key: string]: string | number | boolean | undefined;
|
|
116
|
-
}
|
|
113
|
+
export type SpanAttributes = Record<string, string | number | boolean | undefined>;
|
|
117
114
|
/**
|
|
118
|
-
*
|
|
119
|
-
*
|
|
115
|
+
* The observability hooks the SDK calls to report its own lifecycle. The SDK
|
|
116
|
+
* ships a no-op default; provide your own to forward these events to a monitoring
|
|
117
|
+
* tool such as Sentry, Datadog, or OpenTelemetry.
|
|
120
118
|
*/
|
|
121
119
|
export interface SyncObservabilityProvider {
|
|
122
120
|
/** Set user/org context for error grouping */
|
|
@@ -137,8 +135,6 @@ export interface SyncObservabilityProvider {
|
|
|
137
135
|
captureDeltaRetryExhausted(details: DeltaRetryExhaustedDetails): void;
|
|
138
136
|
/** Capture WebSocket error */
|
|
139
137
|
captureWebSocketError(details: WebSocketErrorDetails): void;
|
|
140
|
-
/** Capture offline flush failure */
|
|
141
|
-
captureOfflineFlushFailure(details: OfflineFlushFailureDetails): void;
|
|
142
138
|
/** Capture self-healing event */
|
|
143
139
|
captureSelfHealing(details: SelfHealingDetails): void;
|
|
144
140
|
/** Capture a claim state change (acquired / queued / granted / lost / rejected / expired) */
|
|
@@ -185,30 +181,29 @@ export interface ModelDebugLoggerContract {
|
|
|
185
181
|
export interface CommitResult {
|
|
186
182
|
lastSyncId: number;
|
|
187
183
|
/**
|
|
188
|
-
* Stale-context notifications
|
|
189
|
-
*
|
|
190
|
-
*
|
|
191
|
-
*
|
|
184
|
+
* Stale-context notifications. Present only when a write guarded with
|
|
185
|
+
* `onStale: 'notify'` collided with a concurrent change: rather than throwing
|
|
186
|
+
* an `AbloStaleContextError`, the commit succeeds and reports the collision
|
|
187
|
+
* here so the caller can reconcile. See {@link StaleNotification}.
|
|
192
188
|
*/
|
|
193
189
|
notifications?: StaleNotification[];
|
|
194
190
|
/**
|
|
195
|
-
* Ids of
|
|
196
|
-
*
|
|
191
|
+
* Ids of update or delete targets that matched no rows. Present, and non-empty,
|
|
192
|
+
* only when a write missed the row it addressed.
|
|
197
193
|
*/
|
|
198
194
|
missingIds?: string[];
|
|
199
195
|
}
|
|
200
196
|
/**
|
|
201
|
-
* Per-call
|
|
202
|
-
*
|
|
203
|
-
* everywhere; omitted fields fall back to sensible defaults.
|
|
197
|
+
* Per-call options accepted by any mutation, passed as the last argument.
|
|
198
|
+
* Every field is optional; omitted fields fall back to sensible defaults.
|
|
204
199
|
*
|
|
205
|
-
* - `idempotencyKey` — when set, the server caches the response for
|
|
206
|
-
*
|
|
207
|
-
*
|
|
208
|
-
*
|
|
209
|
-
*
|
|
210
|
-
* - `label` — human-readable
|
|
211
|
-
*
|
|
200
|
+
* - `idempotencyKey` — when set, the server caches the response for 24 hours and
|
|
201
|
+
* returns the cached result on any retry using the same key. When omitted, the
|
|
202
|
+
* SDK generates a fresh UUID per mutation, so every call is retry-safe by
|
|
203
|
+
* default. Pass `{ idempotencyKey: null }` for the rare case where you want a
|
|
204
|
+
* write that is not retry-safe.
|
|
205
|
+
* - `label` — a human-readable tag recorded with the mutation for debugging, such
|
|
206
|
+
* as "nightly cleanup" or "user click".
|
|
212
207
|
*/
|
|
213
208
|
export interface MutationOptions {
|
|
214
209
|
idempotencyKey?: string | null;
|
|
@@ -216,86 +211,76 @@ export interface MutationOptions {
|
|
|
216
211
|
wait?: 'queued' | 'confirmed';
|
|
217
212
|
readAt?: number | null;
|
|
218
213
|
onStale?: 'reject' | 'overwrite' | 'notify' | null;
|
|
219
|
-
/**
|
|
220
|
-
*
|
|
221
|
-
*
|
|
222
|
-
*
|
|
214
|
+
/** The id (or `{ id }`) of the claim this write belongs to. This is the
|
|
215
|
+
* low-level reference the commit carries so the write is attributed to a claim
|
|
216
|
+
* and can pass the holder's own lock. It is distinct from the `claim` handle on
|
|
217
|
+
* the model write parameters, which is the higher-level object you usually pass. */
|
|
223
218
|
claimRef?: string | {
|
|
224
219
|
readonly id: string;
|
|
225
220
|
} | null;
|
|
226
221
|
/**
|
|
227
|
-
*
|
|
228
|
-
* `
|
|
229
|
-
* populates this anymore (write attribution rides on the claim
|
|
230
|
-
* id). Kept optional for wire-compat; always `null` from the client.
|
|
222
|
+
* Reserved lineage field, forwarded on the wire as `causedByTaskId`. The client
|
|
223
|
+
* always sends `null`; write attribution now travels on the claim id instead.
|
|
231
224
|
*/
|
|
232
225
|
causedByTaskId?: string | null;
|
|
233
226
|
/**
|
|
234
|
-
* Batch-level read dependencies
|
|
235
|
-
*
|
|
236
|
-
* (`{group,readAt}`) this write was premised on
|
|
237
|
-
* moved since `readAt` and
|
|
238
|
-
*
|
|
227
|
+
* Batch-level read dependencies — the answer to "did anything I looked at
|
|
228
|
+
* change?" Each entry is a row (`{ model, id, readAt, fields? }`) or a sync
|
|
229
|
+
* group (`{ group, readAt }`) that this write was premised on. The server
|
|
230
|
+
* checks that none of them moved since their `readAt` and applies the entry's
|
|
231
|
+
* `onStale` behavior to the whole batch. This is distinct from the per-operation
|
|
232
|
+
* `readAt`, which guards only the row being written.
|
|
239
233
|
*/
|
|
240
234
|
reads?: ReadDependency[] | null;
|
|
241
235
|
}
|
|
242
236
|
/**
|
|
243
|
-
* The
|
|
244
|
-
*
|
|
245
|
-
*
|
|
246
|
-
*
|
|
247
|
-
*
|
|
248
|
-
* (`wait` at the proxy's confirmation await, `claim` server-side via
|
|
249
|
-
* the active lease on the entity).
|
|
237
|
+
* The subset of {@link MutationOptions} that travels with each write as it is
|
|
238
|
+
* queued offline and sent on the wire. A single shared type keeps the public
|
|
239
|
+
* parameters, the offline queue, and the wire format from diverging. `wait` and
|
|
240
|
+
* `claim` are deliberately absent: both are resolved on the client before a write
|
|
241
|
+
* is staged, so neither reaches this layer.
|
|
250
242
|
*/
|
|
251
243
|
export type WriteOptions = Pick<MutationOptions, 'readAt' | 'onStale' | 'idempotencyKey' | 'label'>;
|
|
252
|
-
/** A single mutation
|
|
253
|
-
*
|
|
244
|
+
/** A single mutation within a batch. Its `options` travel with it so the server
|
|
245
|
+
* can cache and replay the operation for idempotent retries. */
|
|
254
246
|
export interface MutationOperation {
|
|
255
247
|
type: string;
|
|
256
248
|
model: string;
|
|
257
249
|
id: string;
|
|
258
250
|
input?: Record<string, unknown>;
|
|
259
251
|
/**
|
|
260
|
-
*
|
|
261
|
-
*
|
|
262
|
-
*
|
|
263
|
-
* optimistic
|
|
264
|
-
* the matching id via `OptimisticEchoTracker` and skips the pool
|
|
265
|
-
* mutation — see `SyncClient.applyDeltaBatchToPool`).
|
|
252
|
+
* A client-side id for this single operation. The server stamps it onto the
|
|
253
|
+
* resulting `sync_deltas.transaction_id`, so when the confirming delta arrives
|
|
254
|
+
* back over the sync stream the client can recognize it as an echo of its own
|
|
255
|
+
* optimistic write and skip re-applying it locally.
|
|
266
256
|
*
|
|
267
|
-
*
|
|
268
|
-
*
|
|
269
|
-
*
|
|
270
|
-
*
|
|
271
|
-
* for echo matching). Both can coexist on the wire.
|
|
257
|
+
* This is distinct from the batch-level `client_tx_id` that idempotency uses:
|
|
258
|
+
* that key de-duplicates a retried batch (a request-level cache), whereas this
|
|
259
|
+
* id identifies one row within a batch (for echo matching). Both can appear on
|
|
260
|
+
* the wire at once.
|
|
272
261
|
*/
|
|
273
262
|
transactionId?: string;
|
|
274
263
|
readAt?: number | null;
|
|
275
264
|
onStale?: 'reject' | 'overwrite' | 'notify' | null;
|
|
276
265
|
/**
|
|
277
|
-
* Per-
|
|
278
|
-
* the
|
|
279
|
-
*
|
|
280
|
-
* fields carried over the wire.
|
|
266
|
+
* Per-operation idempotency and audit metadata. `idempotencyKey` is also the
|
|
267
|
+
* cache key the server uses to de-duplicate retries; `label` is stored for
|
|
268
|
+
* debugging. These are the only {@link MutationOptions} fields sent on the wire.
|
|
281
269
|
*/
|
|
282
270
|
options?: Pick<MutationOptions, 'idempotencyKey' | 'label'>;
|
|
283
271
|
}
|
|
284
272
|
/**
|
|
285
|
-
*
|
|
286
|
-
*
|
|
287
|
-
*
|
|
273
|
+
* The transport that carries mutations to your backend. The SDK calls the
|
|
274
|
+
* methods on this interface; you implement them over whatever transport you use —
|
|
275
|
+
* an HTTP API, a WebSocket, or something else.
|
|
288
276
|
*/
|
|
289
277
|
export interface MutationExecutor {
|
|
290
278
|
/**
|
|
291
|
-
*
|
|
292
|
-
* `options`
|
|
293
|
-
* idempotencyKey
|
|
294
|
-
*
|
|
295
|
-
*
|
|
296
|
-
* universal mental model for atomic writes (DB transactions, git,
|
|
297
|
-
* Firestore). Replaces the older `batchAck` name from the retired
|
|
298
|
-
* GraphQL path.
|
|
279
|
+
* Commits a batch of mutations atomically and returns the sync
|
|
280
|
+
* acknowledgement. The `options` argument applies to the whole batch, while
|
|
281
|
+
* per-operation `idempotencyKey` and `label` live on each
|
|
282
|
+
* {@link MutationOperation}. The method name matches the `{ type: 'commit' }`
|
|
283
|
+
* frame on the wire.
|
|
299
284
|
*/
|
|
300
285
|
commit(operations: MutationOperation[], options?: MutationOptions): Promise<CommitResult>;
|
|
301
286
|
/** Execute a create mutation for a specific model */
|
|
@@ -313,13 +298,13 @@ export interface MutationExecutor {
|
|
|
313
298
|
url: string;
|
|
314
299
|
}>;
|
|
315
300
|
/** Batch upload attachments (optional) */
|
|
316
|
-
batchUploadAttachments?(items:
|
|
301
|
+
batchUploadAttachments?(items: {
|
|
317
302
|
id: string;
|
|
318
303
|
input: Record<string, unknown>;
|
|
319
|
-
}
|
|
304
|
+
}[]): Promise<{
|
|
320
305
|
id: string;
|
|
321
306
|
url: string;
|
|
322
|
-
}
|
|
307
|
+
}[]>;
|
|
323
308
|
/** Delete a subscription entity */
|
|
324
309
|
deleteSubscription?(entityType: string, entityId: string, txId: string): Promise<void>;
|
|
325
310
|
/** Delete a favorite entity */
|
|
@@ -328,70 +313,60 @@ export interface MutationExecutor {
|
|
|
328
313
|
onSessionExpired?(callback: () => void): void;
|
|
329
314
|
}
|
|
330
315
|
/**
|
|
331
|
-
*
|
|
332
|
-
*
|
|
333
|
-
*/
|
|
334
|
-
export interface MutationDispatcher {
|
|
335
|
-
dispatch(operationName: string, variables: Record<string, unknown>): Promise<void>;
|
|
336
|
-
}
|
|
337
|
-
/**
|
|
338
|
-
* Application-specific configuration for the sync engine.
|
|
339
|
-
* Replaces the 6 hardcoded config maps that were previously
|
|
340
|
-
* embedded in TransactionQueue, Database, and Model.
|
|
316
|
+
* Application-specific configuration for the sync engine, describing how your
|
|
317
|
+
* models relate so the engine can order and merge writes correctly.
|
|
341
318
|
*/
|
|
342
319
|
export interface SyncEngineConfig {
|
|
343
320
|
/**
|
|
344
|
-
*
|
|
345
|
-
*
|
|
346
|
-
*
|
|
347
|
-
*
|
|
348
|
-
*
|
|
349
|
-
*
|
|
350
|
-
*
|
|
351
|
-
*
|
|
352
|
-
* for consumer overrides). Apps rarely need to touch this — override
|
|
353
|
-
* through `configOverrides.modelCreatePriority` only when the schema's
|
|
354
|
-
* declared relations don't reflect an operational constraint (e.g. a
|
|
355
|
-
* polymorphic FK the SDK can't see).
|
|
321
|
+
* The order in which to create models, so a row is never inserted before the
|
|
322
|
+
* parent row its foreign key points at. Keyed by each model's type name, with
|
|
323
|
+
* lower numbers created first, so parents precede children. The engine fills
|
|
324
|
+
* this in automatically by walking the schema's `belongsTo` relations — a model
|
|
325
|
+
* with no parents gets 10, its children 20, their children 30, and so on,
|
|
326
|
+
* stepping by 10 to leave room for overrides. You rarely set this by hand;
|
|
327
|
+
* override it only when a relation the schema can't see (such as a polymorphic
|
|
328
|
+
* foreign key) imposes an ordering the engine wouldn't otherwise know about.
|
|
356
329
|
*/
|
|
357
330
|
modelCreatePriority: ReadonlyMap<string, number>;
|
|
358
331
|
/**
|
|
359
|
-
*
|
|
360
|
-
*
|
|
361
|
-
*
|
|
362
|
-
* parents but earlier than declared grandchildren — a safe middle.
|
|
332
|
+
* The create priority for a model not listed in {@link modelCreatePriority}.
|
|
333
|
+
* It sits in the middle of the range, so an unlisted model is created after
|
|
334
|
+
* declared parents but before declared grandchildren — a safe default.
|
|
363
335
|
*/
|
|
364
336
|
defaultCreatePriority: number;
|
|
365
337
|
/**
|
|
366
|
-
*
|
|
367
|
-
* ordering
|
|
368
|
-
* than any
|
|
338
|
+
* The priority for update, delete, archive, and unarchive operations. These
|
|
339
|
+
* need no ordering among themselves — the row already exists when they run —
|
|
340
|
+
* so this is set higher than any create priority to ensure creates go first.
|
|
369
341
|
*/
|
|
370
342
|
defaultNonCreatePriority: number;
|
|
371
343
|
/**
|
|
372
|
-
*
|
|
373
|
-
*
|
|
374
|
-
*
|
|
344
|
+
* Fields to preserve when merging a partial update into the local store. A
|
|
345
|
+
* change usually carries only the fields that changed; listing a model's
|
|
346
|
+
* essential fields here keeps them from being dropped during that merge.
|
|
347
|
+
* For example: `{ Task: ['title', 'projectId'], Slide: ['deckId', 'order'] }`.
|
|
375
348
|
*/
|
|
376
349
|
essentialFields: Readonly<Record<string, readonly string[]>>;
|
|
377
350
|
/**
|
|
378
|
-
*
|
|
379
|
-
*
|
|
380
|
-
*
|
|
351
|
+
* A fallback map from class name to model name, used to resolve a model's name
|
|
352
|
+
* when the usual lookup fails — for instance, when a bundler has minified the
|
|
353
|
+
* class names. For example: `{ TaskModel: 'Task', ProjectModel: 'Project' }`.
|
|
381
354
|
*/
|
|
382
355
|
classNameFallbackMap: Readonly<Record<string, string>>;
|
|
383
356
|
/**
|
|
384
|
-
*
|
|
385
|
-
* `
|
|
386
|
-
* schema drift:
|
|
387
|
-
* the SDK warns
|
|
388
|
-
*
|
|
357
|
+
* The content hash of the schema this client was built against — the same hash
|
|
358
|
+
* the `ablo push` command and the server compute. It exists only to detect
|
|
359
|
+
* schema drift: if the server reports a different active hash when the client
|
|
360
|
+
* connects, the SDK warns you to run `ablo push`, so drift surfaces as a clear
|
|
361
|
+
* message rather than a confusing database error later. It is advisory, not
|
|
362
|
+
* enforced.
|
|
389
363
|
*/
|
|
390
364
|
expectedSchemaHash?: string;
|
|
391
365
|
}
|
|
392
366
|
/**
|
|
393
|
-
*
|
|
394
|
-
*
|
|
367
|
+
* Extends the WebSocket event map with your own collaboration events, such as
|
|
368
|
+
* cursor positions or selections, beyond the core delta, presence, and
|
|
369
|
+
* bootstrap events.
|
|
395
370
|
*/
|
|
396
371
|
export interface WebSocketEventConfig {
|
|
397
372
|
/** Additional event type names beyond the core delta/presence/bootstrap events */
|
package/dist/interfaces/index.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* The interfaces you implement to plug the SDK into your own environment.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* The SDK depends on these contracts rather than any specific framework, so you
|
|
5
|
+
* provide the concrete implementations — logging, observability, analytics,
|
|
6
|
+
* session-error detection, online-status checks, and the transport that carries
|
|
7
|
+
* mutations to your backend. The SDK ships sensible no-op defaults where it can.
|
|
7
8
|
*/
|
|
8
9
|
export {};
|
package/dist/keys/index.d.ts
CHANGED
|
@@ -1,21 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* and the web control-plane (`generate-key.ts`) consume THIS module, so the
|
|
5
|
-
* format can no longer drift between the two mint sites (it used to live as
|
|
6
|
-
* a hand-copied twin kept in sync by a comment).
|
|
2
|
+
* The Ablo API-key format: how keys are minted, hashed, and validated, in one
|
|
3
|
+
* place so every component that issues or checks a key agrees on the format.
|
|
7
4
|
*
|
|
8
|
-
*
|
|
9
|
-
* subpath and
|
|
10
|
-
*
|
|
5
|
+
* This module uses `node:crypto` and is therefore Node-only. It is published on
|
|
6
|
+
* the `@abloatai/ablo/keys` subpath and kept off the main browser-facing entry
|
|
7
|
+
* so a browser bundle never pulls in `node:crypto`.
|
|
11
8
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* (
|
|
18
|
-
*
|
|
9
|
+
* A key looks like `<sk|rk|ek|pk>_<live|test>_<30 base62 chars><6-char base62
|
|
10
|
+
* CRC32 checksum>`. The middle segment is the stable environment prefix, mapped
|
|
11
|
+
* on parse to `production` or `sandbox`. The recognizable prefix lets secret
|
|
12
|
+
* scanners spot a leaked key, and the trailing checksum lets the format reject a
|
|
13
|
+
* mistyped or forged key locally, without a database round-trip. Older keys
|
|
14
|
+
* (roughly a 43-character base64url body with no checksum) still validate by hash
|
|
15
|
+
* and parse here with `checksummed: false`.
|
|
19
16
|
*/
|
|
20
17
|
import { z } from 'zod';
|
|
21
18
|
import { type Environment } from '../environment.js';
|
|
@@ -35,10 +32,10 @@ export interface ParsedApiKey {
|
|
|
35
32
|
checksummed: boolean;
|
|
36
33
|
}
|
|
37
34
|
/**
|
|
38
|
-
*
|
|
39
|
-
* {@link ParsedApiKey}
|
|
40
|
-
* rejected
|
|
41
|
-
* `checksummed: false` and
|
|
35
|
+
* The Zod schema for an Ablo API key. `parse` and `safeParse` return a typed
|
|
36
|
+
* {@link ParsedApiKey}. A checksummed-format key whose checksum does not match is
|
|
37
|
+
* rejected without any network call; an older key with no checksum parses with
|
|
38
|
+
* `checksummed: false` and is left for the server to validate by hash.
|
|
42
39
|
*/
|
|
43
40
|
export declare const apiKeySchema: z.ZodPipe<z.ZodString, z.ZodTransform<ParsedApiKey, string>>;
|
|
44
41
|
/** Parse + fully validate (incl. checksum). Returns null when invalid. */
|
|
@@ -57,21 +54,22 @@ export declare function generateApiKey(env?: ApiKeyEnv, kind?: ApiKeyKind): {
|
|
|
57
54
|
prefix: string;
|
|
58
55
|
};
|
|
59
56
|
/**
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
57
|
+
* The stable SHA-256 hex digest of a plaintext key, computed both when a key is
|
|
58
|
+
* minted and when one is looked up. A fast hash is the right choice here rather
|
|
59
|
+
* than a password hash like bcrypt: API keys are long random strings, so there is
|
|
60
|
+
* no dictionary of guesses to slow down.
|
|
63
61
|
*/
|
|
64
62
|
export declare function hashApiKey(plaintext: string): string;
|
|
65
63
|
/** `whsec_` label prefix per the Standard Webhooks spec (not part of the key material). */
|
|
66
64
|
export declare const WEBHOOK_SECRET_PREFIX = "whsec_";
|
|
67
65
|
/**
|
|
68
|
-
*
|
|
69
|
-
* (https://www.standardwebhooks.com): a base64-encoded random key
|
|
70
|
-
* labelled with the `whsec_` prefix.
|
|
71
|
-
* inside
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
* creation, and never
|
|
66
|
+
* Mints a webhook signing secret following the Standard Webhooks specification
|
|
67
|
+
* (https://www.standardwebhooks.com): a base64-encoded random key of 24–64 bytes,
|
|
68
|
+
* labelled with the `whsec_` prefix. This uses 32 bytes (256 bits), comfortably
|
|
69
|
+
* inside that range. Unlike an API key, a signing secret is not hashed at rest,
|
|
70
|
+
* because signing a request with {@link signAbloSourceRequest} needs the live
|
|
71
|
+
* value. It is therefore kept in a secret store, returned to the customer once at
|
|
72
|
+
* creation, and never shown again.
|
|
75
73
|
*/
|
|
76
74
|
export declare function generateWebhookSecret(): {
|
|
77
75
|
plaintext: string;
|