@abloatai/ablo 0.26.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/README.md +101 -85
- package/dist/BaseSyncedStore.d.ts +85 -88
- package/dist/BaseSyncedStore.js +131 -147
- package/dist/Database.d.ts +54 -68
- package/dist/Database.js +97 -113
- package/dist/{ObjectPool.d.ts → InstanceCache.d.ts} +10 -13
- package/dist/{ObjectPool.js → InstanceCache.js} +85 -83
- package/dist/LazyReferenceCollection.d.ts +11 -15
- package/dist/LazyReferenceCollection.js +12 -16
- package/dist/Model.d.ts +37 -52
- package/dist/Model.js +46 -61
- package/dist/ModelRegistry.d.ts +21 -19
- package/dist/ModelRegistry.js +23 -27
- package/dist/NetworkMonitor.d.ts +5 -6
- package/dist/NetworkMonitor.js +5 -6
- package/dist/SyncClient.d.ts +112 -112
- package/dist/SyncClient.js +165 -172
- package/dist/adapters/alwaysOnline.d.ts +6 -8
- package/dist/adapters/alwaysOnline.js +6 -8
- package/dist/adapters/inMemoryStorage.d.ts +9 -9
- package/dist/adapters/inMemoryStorage.js +9 -9
- package/dist/agent/Agent.d.ts +27 -32
- package/dist/agent/Agent.js +18 -19
- package/dist/agent/index.d.ts +4 -4
- package/dist/agent/index.js +5 -5
- package/dist/agent/session.d.ts +47 -44
- package/dist/agent/session.js +37 -48
- package/dist/agent/types.d.ts +26 -31
- package/dist/agent/types.js +6 -7
- package/dist/ai-sdk/coordinatedTool.d.ts +108 -0
- package/dist/ai-sdk/{coordinated-tool.js → coordinatedTool.js} +44 -38
- package/dist/ai-sdk/coordinationContext.d.ts +46 -0
- package/dist/ai-sdk/{coordination-context.js → coordinationContext.js} +26 -33
- package/dist/ai-sdk/index.d.ts +25 -22
- package/dist/ai-sdk/index.js +25 -22
- package/dist/ai-sdk/wrap.d.ts +6 -7
- package/dist/ai-sdk/wrap.js +1 -1
- package/dist/auth/credentialPolicy.d.ts +69 -74
- package/dist/auth/credentialPolicy.js +51 -56
- package/dist/auth/credentialSource.d.ts +6 -5
- package/dist/auth/credentialSource.js +9 -10
- package/dist/auth/index.d.ts +59 -58
- package/dist/auth/index.js +31 -37
- package/dist/auth/schemas.d.ts +5 -4
- package/dist/auth/schemas.js +5 -4
- package/dist/batching/index.d.ts +19 -21
- package/dist/batching/index.js +14 -17
- package/dist/cli.cjs +167 -119
- package/dist/client/Ablo.d.ts +73 -73
- package/dist/client/Ablo.js +125 -160
- package/dist/client/ApiClient.d.ts +30 -19
- package/dist/client/ApiClient.js +133 -38
- package/dist/client/auth.d.ts +47 -47
- package/dist/client/auth.js +108 -117
- package/dist/client/claimHeartbeatLoop.d.ts +50 -0
- package/dist/client/claimHeartbeatLoop.js +88 -0
- package/dist/client/consoleLogger.d.ts +5 -6
- package/dist/client/consoleLogger.js +5 -6
- package/dist/client/createInternalComponents.d.ts +14 -17
- package/dist/client/createInternalComponents.js +25 -30
- package/dist/client/createModelProxy.d.ts +130 -120
- package/dist/client/createModelProxy.js +152 -122
- package/dist/client/credentialEndpoint.d.ts +40 -42
- package/dist/client/credentialEndpoint.js +35 -36
- package/dist/client/functionalUpdate.d.ts +29 -27
- package/dist/client/functionalUpdate.js +21 -21
- package/dist/client/hostedEndpoints.d.ts +9 -12
- package/dist/client/hostedEndpoints.js +9 -12
- package/dist/client/httpClient.d.ts +57 -53
- package/dist/client/httpClient.js +29 -31
- package/dist/client/identity.d.ts +15 -20
- package/dist/client/identity.js +47 -58
- package/dist/client/modelRegistration.d.ts +5 -9
- package/dist/client/modelRegistration.js +67 -87
- package/dist/client/options.d.ts +134 -157
- package/dist/client/options.js +3 -7
- package/dist/client/registerDataSource.d.ts +9 -9
- package/dist/client/registerDataSource.js +15 -16
- package/dist/client/resourceTypes.d.ts +64 -75
- package/dist/client/resourceTypes.js +4 -10
- package/dist/client/schemaConfig.d.ts +31 -43
- package/dist/client/schemaConfig.js +38 -50
- package/dist/client/sessionMint.d.ts +16 -12
- package/dist/client/sessionMint.js +26 -31
- package/dist/client/validateAbloOptions.d.ts +12 -14
- package/dist/client/validateAbloOptions.js +8 -9
- package/dist/client/writeOptionsSchema.d.ts +18 -16
- package/dist/client/writeOptionsSchema.js +23 -20
- package/dist/client/wsMutationExecutor.d.ts +15 -20
- package/dist/client/wsMutationExecutor.js +17 -23
- package/dist/context.d.ts +6 -4
- package/dist/context.js +6 -4
- package/dist/coordination/index.d.ts +10 -8
- package/dist/coordination/index.js +14 -12
- package/dist/coordination/schema.d.ts +176 -128
- package/dist/coordination/schema.js +197 -133
- package/dist/coordination/trace.d.ts +9 -10
- package/dist/coordination/trace.js +13 -14
- package/dist/core/DatabaseManager.d.ts +5 -7
- package/dist/core/DatabaseManager.js +15 -19
- package/dist/core/QueryProcessor.d.ts +7 -9
- package/dist/core/QueryProcessor.js +22 -28
- package/dist/core/QueryView.d.ts +8 -8
- package/dist/core/QueryView.js +2 -2
- package/dist/core/StoreManager.d.ts +12 -14
- package/dist/core/StoreManager.js +21 -24
- package/dist/core/ViewRegistry.d.ts +5 -5
- package/dist/core/ViewRegistry.js +4 -4
- package/dist/core/index.d.ts +17 -12
- package/dist/core/index.js +32 -26
- package/dist/core/openIDBWithTimeout.d.ts +38 -36
- package/dist/core/openIDBWithTimeout.js +42 -43
- package/dist/core/queryUtils.d.ts +45 -0
- package/dist/core/queryUtils.js +69 -0
- package/dist/core/storeContract.d.ts +63 -61
- package/dist/core/storeContract.js +8 -12
- package/dist/environment.d.ts +28 -0
- package/dist/environment.js +21 -0
- package/dist/errorCodes.d.ts +107 -99
- package/dist/errorCodes.js +131 -132
- package/dist/errors.d.ts +160 -166
- package/dist/errors.js +155 -158
- package/dist/index.d.ts +30 -27
- package/dist/index.js +89 -86
- package/dist/interfaces/index.d.ts +102 -113
- package/dist/interfaces/index.js +5 -4
- package/dist/keys/index.d.ts +27 -29
- package/dist/keys/index.js +41 -40
- package/dist/mutators/RecordingTransaction.d.ts +16 -16
- package/dist/mutators/RecordingTransaction.js +31 -37
- package/dist/mutators/Transaction.d.ts +18 -26
- package/dist/mutators/Transaction.js +14 -20
- package/dist/mutators/UndoManager.d.ts +122 -131
- package/dist/mutators/UndoManager.js +145 -156
- package/dist/mutators/defineMutators.d.ts +23 -34
- package/dist/mutators/defineMutators.js +14 -20
- package/dist/mutators/inverseOp.d.ts +12 -15
- package/dist/mutators/inverseOp.js +12 -15
- package/dist/mutators/mutateActions.d.ts +10 -9
- package/dist/mutators/mutateActions.js +1 -1
- package/dist/mutators/readerActions.d.ts +9 -8
- package/dist/mutators/readerActions.js +2 -2
- package/dist/mutators/undoApply.d.ts +31 -27
- package/dist/mutators/undoApply.js +26 -24
- package/dist/policy/index.d.ts +5 -3
- package/dist/policy/index.js +5 -3
- package/dist/policy/types.d.ts +104 -100
- package/dist/policy/types.js +67 -66
- package/dist/query/client.d.ts +28 -23
- package/dist/query/client.js +45 -43
- package/dist/query/types.d.ts +37 -60
- package/dist/query/types.js +13 -33
- package/dist/react/AbloProvider.d.ts +1 -1
- package/dist/react/AbloProvider.js +2 -2
- package/dist/react/context.d.ts +25 -28
- package/dist/react/context.js +9 -10
- package/dist/react/index.d.ts +41 -42
- package/dist/react/index.js +37 -38
- package/dist/react/internalContext.d.ts +17 -19
- package/dist/react/useAblo.d.ts +23 -22
- package/dist/react/useAblo.js +16 -14
- package/dist/react/useCurrentUserId.d.ts +8 -7
- package/dist/react/useCurrentUserId.js +8 -7
- package/dist/react/useErrorListener.d.ts +7 -7
- package/dist/react/useErrorListener.js +10 -11
- package/dist/react/useMutationFailureListener.d.ts +8 -8
- package/dist/react/useMutationFailureListener.js +8 -8
- package/dist/react/useMutators.d.ts +11 -11
- package/dist/react/useMutators.js +3 -3
- package/dist/react/useReactive.js +2 -2
- package/dist/react/useSyncStatus.d.ts +4 -6
- package/dist/react/useUndoScope.d.ts +7 -9
- package/dist/react/useUndoScope.js +1 -1
- package/dist/schema/coordination.d.ts +21 -25
- package/dist/schema/coordination.js +21 -25
- package/dist/schema/ddl.d.ts +43 -39
- package/dist/schema/ddl.js +75 -68
- package/dist/schema/ddlLock.d.ts +20 -24
- package/dist/schema/ddlLock.js +18 -23
- package/dist/schema/diff.d.ts +99 -61
- package/dist/schema/diff.js +43 -34
- package/dist/schema/field.d.ts +37 -42
- package/dist/schema/field.js +35 -48
- package/dist/schema/generate.d.ts +12 -12
- package/dist/schema/generate.js +12 -12
- package/dist/schema/index.d.ts +2 -2
- package/dist/schema/index.js +21 -23
- package/dist/schema/model.d.ts +118 -143
- package/dist/schema/model.js +22 -33
- package/dist/schema/openapi.d.ts +10 -9
- package/dist/schema/openapi.js +5 -3
- package/dist/schema/queries.d.ts +29 -31
- package/dist/schema/queries.js +23 -25
- package/dist/schema/relation.d.ts +89 -99
- package/dist/schema/relation.js +13 -13
- package/dist/schema/residency.d.ts +16 -13
- package/dist/schema/residency.js +16 -13
- package/dist/schema/roles.d.ts +36 -43
- package/dist/schema/roles.js +31 -37
- package/dist/schema/schema.d.ts +33 -42
- package/dist/schema/schema.js +31 -32
- package/dist/schema/select.d.ts +13 -13
- package/dist/schema/select.js +13 -13
- package/dist/schema/serialize.d.ts +28 -31
- package/dist/schema/serialize.js +27 -31
- package/dist/schema/sugar.d.ts +17 -32
- package/dist/schema/sugar.js +14 -29
- package/dist/schema/{sync-delta-row.d.ts → syncDeltaRow.d.ts} +26 -49
- package/dist/schema/syncDeltaRow.js +89 -0
- package/dist/schema/tenancy.d.ts +44 -46
- package/dist/schema/tenancy.js +46 -48
- package/dist/server/adapter.d.ts +58 -58
- package/dist/server/adapter.js +13 -14
- package/dist/server/commit.d.ts +60 -64
- package/dist/server/index.d.ts +9 -10
- package/dist/server/index.js +1 -1
- package/dist/server/readConfig.d.ts +70 -0
- package/dist/server/readConfig.js +8 -0
- package/dist/server/storageMode.d.ts +23 -0
- package/dist/server/storageMode.js +17 -0
- package/dist/source/adapter.d.ts +30 -25
- package/dist/source/adapter.js +10 -10
- package/dist/source/adapters/drizzle.d.ts +28 -23
- package/dist/source/adapters/drizzle.js +30 -25
- package/dist/source/adapters/kysely.d.ts +27 -25
- package/dist/source/adapters/kysely.js +24 -23
- package/dist/source/adapters/memory.d.ts +8 -7
- package/dist/source/adapters/memory.js +9 -8
- package/dist/source/adapters/prisma.d.ts +13 -12
- package/dist/source/adapters/prisma.js +22 -25
- package/dist/source/conformance.d.ts +18 -11
- package/dist/source/conformance.js +17 -11
- package/dist/source/connector.d.ts +31 -32
- package/dist/source/connector.js +28 -28
- package/dist/source/connectorProtocol.d.ts +160 -0
- package/dist/source/connectorProtocol.js +162 -0
- package/dist/source/contract.d.ts +26 -27
- package/dist/source/contract.js +28 -29
- package/dist/source/factory.d.ts +46 -58
- package/dist/source/factory.js +22 -27
- package/dist/source/index.d.ts +7 -9
- package/dist/source/index.js +12 -14
- package/dist/source/migrations.d.ts +9 -9
- package/dist/source/migrations.js +9 -9
- package/dist/source/next.d.ts +9 -10
- package/dist/source/next.js +6 -7
- package/dist/source/pushQueue.d.ts +69 -47
- package/dist/source/pushQueue.js +32 -28
- package/dist/source/signing.d.ts +46 -17
- package/dist/source/signing.js +28 -11
- package/dist/source/types.d.ts +121 -104
- package/dist/source/types.js +13 -14
- package/dist/stores/ObjectStore.d.ts +10 -11
- package/dist/stores/ObjectStore.js +11 -12
- package/dist/stores/ObjectStoreContract.d.ts +12 -15
- package/dist/stores/SyncActionStore.d.ts +7 -11
- package/dist/stores/SyncActionStore.js +13 -17
- package/dist/surface.d.ts +27 -20
- package/dist/surface.js +27 -20
- package/dist/sync/{BootstrapHelper.d.ts → BootstrapFetcher.d.ts} +36 -42
- package/dist/sync/{BootstrapHelper.js → BootstrapFetcher.js} +76 -76
- package/dist/sync/ConnectionManager.d.ts +39 -50
- package/dist/sync/ConnectionManager.js +55 -66
- package/dist/sync/NetworkProbe.d.ts +24 -29
- package/dist/sync/NetworkProbe.js +63 -69
- package/dist/sync/{HydrationCoordinator.d.ts → OnDemandLoader.d.ts} +42 -41
- package/dist/sync/{HydrationCoordinator.js → OnDemandLoader.js} +59 -54
- package/dist/sync/{AreaOfInterestManager.d.ts → SubscriptionManager.d.ts} +43 -57
- package/dist/sync/{AreaOfInterestManager.js → SubscriptionManager.js} +43 -51
- package/dist/sync/SyncWebSocket.d.ts +139 -165
- package/dist/sync/SyncWebSocket.js +191 -223
- package/dist/sync/awaitClaimGrant.d.ts +18 -18
- package/dist/sync/awaitClaimGrant.js +11 -11
- package/dist/sync/bootstrapApply.d.ts +34 -24
- package/dist/sync/bootstrapApply.js +27 -19
- package/dist/sync/commitFrames.d.ts +21 -20
- package/dist/sync/commitFrames.js +18 -18
- package/dist/sync/createClaimStream.d.ts +23 -22
- package/dist/sync/createClaimStream.js +105 -23
- package/dist/sync/createPresenceStream.d.ts +19 -18
- package/dist/sync/createPresenceStream.js +25 -26
- package/dist/sync/createSnapshot.d.ts +12 -14
- package/dist/sync/createSnapshot.js +20 -26
- package/dist/sync/credentialLifecycle.d.ts +104 -104
- package/dist/sync/credentialLifecycle.js +140 -147
- package/dist/sync/deltaPipeline.d.ts +36 -34
- package/dist/sync/deltaPipeline.js +64 -65
- package/dist/sync/groupChange.d.ts +63 -61
- package/dist/sync/groupChange.js +74 -78
- package/dist/sync/heartbeat.d.ts +34 -33
- package/dist/sync/heartbeat.js +31 -31
- package/dist/sync/participants.d.ts +19 -19
- package/dist/sync/schemas.d.ts +3 -2
- package/dist/sync/schemas.js +14 -10
- package/dist/sync/syncCursor.d.ts +17 -21
- package/dist/sync/syncCursor.js +17 -21
- package/dist/sync/syncPlan.d.ts +28 -36
- package/dist/sync/syncPlan.js +18 -19
- package/dist/sync/syncPosition.d.ts +54 -49
- package/dist/sync/syncPosition.js +57 -52
- package/dist/sync/wsFrameHandlers.d.ts +35 -36
- package/dist/sync/wsFrameHandlers.js +63 -67
- package/dist/testing/fixtures/bootstrap.d.ts +12 -6
- package/dist/testing/fixtures/bootstrap.js +12 -6
- package/dist/testing/fixtures/deltas.d.ts +30 -33
- package/dist/testing/fixtures/deltas.js +30 -33
- package/dist/testing/fixtures/models.d.ts +11 -10
- package/dist/testing/fixtures/models.js +11 -10
- package/dist/testing/helpers/{react-wrapper.d.ts → reactWrapper.d.ts} +13 -10
- package/dist/testing/helpers/{react-wrapper.js → reactWrapper.js} +15 -12
- package/dist/testing/helpers/{sync-engine-harness.d.ts → syncEngineHarness.d.ts} +17 -15
- package/dist/testing/helpers/{sync-engine-harness.js → syncEngineHarness.js} +12 -10
- package/dist/testing/helpers/wait.d.ts +13 -8
- package/dist/testing/helpers/wait.js +13 -8
- package/dist/testing/index.d.ts +3 -3
- package/dist/testing/index.js +2 -2
- package/dist/testing/mocks/MockMutationExecutor.d.ts +18 -17
- package/dist/testing/mocks/MockMutationExecutor.js +15 -14
- package/dist/testing/mocks/MockNetworkMonitor.d.ts +8 -8
- package/dist/testing/mocks/MockNetworkMonitor.js +8 -8
- package/dist/testing/mocks/MockSyncContext.d.ts +20 -17
- package/dist/testing/mocks/MockSyncContext.js +15 -13
- package/dist/testing/mocks/MockSyncStore.d.ts +10 -10
- package/dist/testing/mocks/MockSyncStore.js +11 -11
- package/dist/testing/mocks/MockWebSocket.d.ts +26 -22
- package/dist/testing/mocks/MockWebSocket.js +22 -21
- package/dist/transactions/TransactionQueue.d.ts +181 -176
- package/dist/transactions/TransactionQueue.js +338 -350
- package/dist/transactions/TransactionStore.d.ts +6 -4
- package/dist/transactions/TransactionStore.js +6 -4
- package/dist/transactions/UnconfirmedWrites.d.ts +82 -0
- package/dist/transactions/UnconfirmedWrites.js +104 -0
- package/dist/transactions/coalesceRules.d.ts +41 -17
- package/dist/transactions/coalesceRules.js +40 -17
- package/dist/transactions/commitPayload.d.ts +48 -52
- package/dist/transactions/commitPayload.js +48 -57
- package/dist/transactions/deltaConfirmation.d.ts +20 -22
- package/dist/transactions/deltaConfirmation.js +37 -45
- package/dist/transactions/optimisticApply.d.ts +49 -0
- package/dist/transactions/optimisticApply.js +65 -0
- package/dist/transactions/{persistedReplay.d.ts → replayValidation.d.ts} +28 -22
- package/dist/transactions/{persistedReplay.js → replayValidation.js} +33 -27
- package/dist/types/global.d.ts +46 -41
- package/dist/types/global.js +20 -19
- package/dist/types/index.d.ts +71 -77
- package/dist/types/index.js +22 -22
- package/dist/types/modelData.d.ts +6 -8
- package/dist/types/modelData.js +5 -7
- package/dist/types/participant.d.ts +10 -11
- package/dist/types/participant.js +6 -8
- package/dist/types/streams.d.ts +208 -195
- package/dist/types/streams.js +7 -7
- package/dist/utils/asyncIterator.d.ts +25 -32
- package/dist/utils/asyncIterator.js +25 -32
- package/dist/utils/duration.d.ts +12 -15
- package/dist/utils/duration.js +12 -15
- package/dist/utils/mobxSetup.d.ts +53 -0
- package/dist/utils/{mobx-setup.js → mobxSetup.js} +42 -98
- package/dist/webhooks/events.d.ts +21 -16
- package/dist/webhooks/events.js +10 -8
- package/dist/webhooks/index.d.ts +5 -7
- package/dist/webhooks/index.js +5 -7
- package/dist/{schema/sync-delta-wire.d.ts → wire/delta.d.ts} +58 -41
- package/dist/wire/delta.js +114 -0
- package/dist/wire/errorEnvelope.d.ts +30 -31
- package/dist/wire/errorEnvelope.js +34 -40
- package/dist/wire/frames.d.ts +79 -86
- package/dist/wire/frames.js +26 -33
- package/dist/wire/index.d.ts +14 -12
- package/dist/wire/index.js +30 -26
- package/dist/wire/listEnvelope.d.ts +16 -23
- package/dist/wire/listEnvelope.js +7 -6
- package/dist/wire/protocol.d.ts +25 -32
- package/dist/wire/protocol.js +25 -32
- package/dist/wire/protocolVersion.d.ts +44 -40
- package/dist/wire/protocolVersion.js +44 -40
- package/docs/coordination.md +59 -0
- package/package.json +11 -10
- package/dist/ai-sdk/coordinated-tool.d.ts +0 -101
- package/dist/ai-sdk/coordination-context.d.ts +0 -52
- package/dist/core/query-utils.d.ts +0 -34
- package/dist/core/query-utils.js +0 -59
- package/dist/schema/sync-delta-row.js +0 -103
- package/dist/schema/sync-delta-wire.js +0 -102
- package/dist/server/read-config.d.ts +0 -67
- package/dist/server/read-config.js +0 -8
- package/dist/server/storage-mode.d.ts +0 -8
- package/dist/server/storage-mode.js +0 -28
- package/dist/source/connector-protocol.d.ts +0 -159
- package/dist/source/connector-protocol.js +0 -161
- package/dist/transactions/OptimisticEchoTracker.d.ts +0 -82
- package/dist/transactions/OptimisticEchoTracker.js +0 -104
- package/dist/transactions/mutation-error-handler.d.ts +0 -5
- package/dist/transactions/mutation-error-handler.js +0 -39
- package/dist/transactions/optimistic.d.ts +0 -24
- package/dist/transactions/optimistic.js +0 -45
- package/dist/utils/mobx-setup.d.ts +0 -42
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* TransactionQueue
|
|
2
|
+
* TransactionQueue manages the lifecycle of local writes on their way to the
|
|
3
|
+
* server: it applies each change optimistically, batches the writes made in one
|
|
4
|
+
* event-loop tick into a single commit, retries transient failures, and rolls
|
|
5
|
+
* back on permanent rejection.
|
|
3
6
|
*
|
|
4
|
-
* Key
|
|
5
|
-
* - Optimistic updates with rollback
|
|
6
|
-
* -
|
|
7
|
-
* -
|
|
8
|
-
*
|
|
7
|
+
* Key behaviours:
|
|
8
|
+
* - Optimistic updates with rollback on failure.
|
|
9
|
+
* - Configurable conflict resolution.
|
|
10
|
+
* - Microtask batching: transactions created in the same event-loop tick share
|
|
11
|
+
* a batch id and commit together in one round trip.
|
|
12
|
+
* - A dependency-injected executor, so several queues can coexist.
|
|
9
13
|
*/
|
|
10
14
|
import { EventEmitter } from 'events';
|
|
11
15
|
import type { Database } from '../Database.js';
|
|
@@ -16,14 +20,13 @@ import type { StaleNotification, ReadDependency } from '../coordination/schema.j
|
|
|
16
20
|
import { type MutationInput, type Transaction, type UserContext } from './commitPayload.js';
|
|
17
21
|
export type { Transaction, UserContext } from './commitPayload.js';
|
|
18
22
|
/**
|
|
19
|
-
* A
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* batch path, so reconnect-retry behavior is identical.
|
|
23
|
+
* A pre-built, multi-operation commit submitted through
|
|
24
|
+
* `ablo.commits.create()`. Unlike the per-model {@link Transaction} (see
|
|
25
|
+
* `./commitPayload.js`), the caller supplies the operations and the whole
|
|
26
|
+
* envelope commits atomically: the queue does not coalesce it, reorder its
|
|
27
|
+
* operations for foreign keys, or apply it optimistically. It runs through the
|
|
28
|
+
* same `mutationExecutor.commit()` as the model batch path, so its
|
|
29
|
+
* retry-on-reconnect behaviour is identical.
|
|
27
30
|
*/
|
|
28
31
|
interface CommitTransaction {
|
|
29
32
|
id: string;
|
|
@@ -38,7 +41,7 @@ interface CommitTransaction {
|
|
|
38
41
|
onStale?: 'reject' | 'overwrite' | 'notify' | null;
|
|
39
42
|
}[];
|
|
40
43
|
causedByTaskId?: string | null;
|
|
41
|
-
/**
|
|
44
|
+
/** Read dependencies for the whole batch, forwarded to the executor so the server can detect stale-context writes. */
|
|
42
45
|
reads?: ReadDependency[] | null;
|
|
43
46
|
status: 'pending' | 'executing' | 'completed' | 'failed';
|
|
44
47
|
createdAt: number;
|
|
@@ -72,17 +75,16 @@ interface TransactionQueueConfig {
|
|
|
72
75
|
capMs: number;
|
|
73
76
|
};
|
|
74
77
|
/**
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
* jitter
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
* batch workers (e.g. 60s for agent-worker).
|
|
78
|
+
* How long, in milliseconds, to wait after the connection drops before
|
|
79
|
+
* failing any in-flight commit-lane transaction with an
|
|
80
|
+
* {@link AbloConnectionError}. Brief disconnects, such as a server restart
|
|
81
|
+
* or mobile network jitter, are absorbed transparently; only a disconnect
|
|
82
|
+
* that outlasts this window surfaces as a failure. Set it lower for
|
|
83
|
+
* interactive use (for example 10 seconds for chat) and higher for
|
|
84
|
+
* background batch work. Defaults to 30 seconds.
|
|
83
85
|
*
|
|
84
|
-
* Without this deadline, `commits.create({wait:'confirmed'})`
|
|
85
|
-
* forever
|
|
86
|
+
* Without this deadline, `commits.create({ wait: 'confirmed' })` would wait
|
|
87
|
+
* forever if the connection died while a commit was in flight.
|
|
86
88
|
*/
|
|
87
89
|
commitOfflineGraceMs: number;
|
|
88
90
|
}
|
|
@@ -121,11 +123,11 @@ export declare class TransactionQueue extends EventEmitter {
|
|
|
121
123
|
private isConnectedFn;
|
|
122
124
|
private commitOfflineGraceTimer;
|
|
123
125
|
/**
|
|
124
|
-
*
|
|
125
|
-
*
|
|
126
|
-
* queue advances `acked`
|
|
127
|
-
* `applied
|
|
128
|
-
*
|
|
126
|
+
* This client's place in the global order of sync deltas. The instance is
|
|
127
|
+
* shared: the client injects one, and a standalone queue creates its own. The
|
|
128
|
+
* queue advances the `acked` cursor as commit responses arrive, the store
|
|
129
|
+
* advances `applied` and `persisted`, and snapshots and claims read
|
|
130
|
+
* `readFloor`. See `../sync/syncPosition.js` for the full contract.
|
|
129
131
|
*/
|
|
130
132
|
readonly position: SyncPosition;
|
|
131
133
|
/** Applied-cursor alias, kept so the many internal read sites stay legible. */
|
|
@@ -142,99 +144,104 @@ export declare class TransactionQueue extends EventEmitter {
|
|
|
142
144
|
private confirmationResolvers;
|
|
143
145
|
constructor(config?: Partial<TransactionQueueConfig>);
|
|
144
146
|
/**
|
|
145
|
-
*
|
|
146
|
-
*
|
|
147
|
-
*
|
|
148
|
-
*
|
|
149
|
-
* outcomes for the routing-helper grace-window use case).
|
|
150
|
-
*
|
|
151
|
-
* Looks across `pending`, `executing`, and `awaiting_delta` — these
|
|
152
|
-
* are the three non-terminal statuses where rollback is still
|
|
153
|
-
* possible. Skips `completed` (already settled) and `failed` /
|
|
154
|
-
* `rolled_back` (already rejected; the call site missed the
|
|
155
|
-
* `confirmation` window and should rely on `onMutationFailure` toast
|
|
156
|
-
* instead).
|
|
147
|
+
* Returns the in-flight confirmation promise for a given model and id. When
|
|
148
|
+
* several transactions match, it returns the most recent one's promise; when
|
|
149
|
+
* none is open it resolves immediately, which covers both "already confirmed"
|
|
150
|
+
* and "never staged".
|
|
157
151
|
*
|
|
158
|
-
*
|
|
159
|
-
*
|
|
160
|
-
* `
|
|
152
|
+
* It considers the three non-terminal statuses in which the write can still
|
|
153
|
+
* be rolled back — `pending`, `executing`, and `awaiting_delta` — and ignores
|
|
154
|
+
* `completed` (already settled) and `failed`/`rolled_back` (already
|
|
155
|
+
* rejected). This complements the `confirmation` promise carried on a known
|
|
156
|
+
* {@link Transaction}: use this method at call sites that hold a model
|
|
157
|
+
* returned by `ablo.<model>.create()` but never see the underlying
|
|
158
|
+
* transaction.
|
|
161
159
|
*/
|
|
162
160
|
confirmationFor(modelName: string, modelId: string): Promise<void>;
|
|
163
161
|
/**
|
|
164
|
-
*
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
*
|
|
162
|
+
* Attaches a `confirmation` promise to a newly created transaction. Call this
|
|
163
|
+
* before the transaction is staged so a caller can `await tx.confirmation`
|
|
164
|
+
* immediately after a create, update, or delete returns. It is idempotent and
|
|
165
|
+
* returns early if one is already attached.
|
|
168
166
|
*
|
|
169
|
-
*
|
|
170
|
-
*
|
|
171
|
-
* rejection.
|
|
172
|
-
* `.then`/`.catch
|
|
167
|
+
* It also attaches a no-op rejection handler. Most callers never await the
|
|
168
|
+
* confirmation, and without this the runtime would report an unhandled
|
|
169
|
+
* rejection when a write fails. Callers that do want to observe failure simply
|
|
170
|
+
* attach their own `.then`/`.catch`.
|
|
173
171
|
*/
|
|
174
172
|
private attachConfirmation;
|
|
175
173
|
/**
|
|
176
|
-
*
|
|
177
|
-
*
|
|
174
|
+
* Registers a predicate the queue uses to check whether it is connected.
|
|
175
|
+
* While disconnected, confirmation timeouts re-schedule themselves instead of
|
|
176
|
+
* escalating, so a transaction is never rolled back merely because the client
|
|
177
|
+
* was briefly offline.
|
|
178
178
|
*/
|
|
179
179
|
setConnectionChecker(fn: () => boolean): void;
|
|
180
180
|
/**
|
|
181
|
-
*
|
|
182
|
-
*
|
|
183
|
-
* On `'disconnected'`: start a one-shot timer of
|
|
184
|
-
* `config.commitOfflineGraceMs`. If the timer fires (disconnect
|
|
185
|
-
* persisted past grace), iterate every commit-lane transaction with
|
|
186
|
-
* `status ∈ {'pending', 'executing'}` and emit
|
|
187
|
-
* `transaction:failed:${id}` with an `AbloConnectionError`. That
|
|
188
|
-
* lets `waitForCommitReceipt` reject in seconds instead of hanging
|
|
189
|
-
* forever — which is what wedged the 2026-05-15 subagent run.
|
|
181
|
+
* Drives the offline-grace timer for in-flight commit-lane transactions.
|
|
190
182
|
*
|
|
191
|
-
* On `'
|
|
192
|
-
*
|
|
193
|
-
*
|
|
183
|
+
* On `'disconnected'` it starts a one-shot timer of
|
|
184
|
+
* `config.commitOfflineGraceMs`. If that timer fires — meaning the disconnect
|
|
185
|
+
* outlasted the grace window — every commit-lane transaction still `pending`
|
|
186
|
+
* or `executing` is failed with an {@link AbloConnectionError}, so
|
|
187
|
+
* {@link waitForCommitReceipt} rejects within seconds instead of hanging.
|
|
194
188
|
*
|
|
195
|
-
*
|
|
196
|
-
*
|
|
189
|
+
* On `'connected'` it clears any pending grace timer. Brief disconnects are
|
|
190
|
+
* absorbed transparently; {@link processCommitLane} and
|
|
191
|
+
* {@link flushOfflineQueue} resume the work on reconnect.
|
|
197
192
|
*/
|
|
198
193
|
setConnectionState(state: 'connected' | 'disconnected'): void;
|
|
199
194
|
private failInFlightCommitsOnOffline;
|
|
200
195
|
/**
|
|
201
|
-
*
|
|
202
|
-
* right after
|
|
203
|
-
*
|
|
204
|
-
*
|
|
196
|
+
* Binds the mutation executor for this queue instance. The owning client
|
|
197
|
+
* calls this right after construction, so commits made here always dispatch
|
|
198
|
+
* through this instance's connection even when several client instances exist
|
|
199
|
+
* in the same process.
|
|
205
200
|
*/
|
|
206
201
|
setMutationExecutor(executor: import('../interfaces/index.js').MutationExecutor): void;
|
|
207
202
|
/**
|
|
208
|
-
*
|
|
209
|
-
*
|
|
203
|
+
* Stages a transaction for commit. Transactions staged within the same
|
|
204
|
+
* event-loop tick are committed together.
|
|
210
205
|
*/
|
|
211
206
|
private stageTransaction;
|
|
212
207
|
/**
|
|
213
|
-
*
|
|
214
|
-
*
|
|
208
|
+
* Schedules the staged transactions to commit on a microtask, so all
|
|
209
|
+
* transactions created synchronously within one tick are batched together.
|
|
215
210
|
*/
|
|
216
211
|
private scheduleCommit;
|
|
217
212
|
/**
|
|
218
|
-
*
|
|
219
|
-
*
|
|
213
|
+
* Moves all staged transactions onto the execution queue, assigning them a
|
|
214
|
+
* single shared batch index so they commit together.
|
|
220
215
|
*/
|
|
221
216
|
private commitCreatedTransactions;
|
|
217
|
+
/**
|
|
218
|
+
* Flushes every pending transaction in one commit, the fast path taken on
|
|
219
|
+
* reconnect. If the batch fails, each transaction falls back to normal,
|
|
220
|
+
* one-by-one processing.
|
|
221
|
+
*/
|
|
222
222
|
flushOfflineQueue(): Promise<void>;
|
|
223
223
|
/**
|
|
224
|
-
*
|
|
224
|
+
* Records a create and applies it optimistically, then stages it for the next
|
|
225
|
+
* batched commit. Returns the {@link Transaction}, whose `confirmation`
|
|
226
|
+
* promise settles once the server confirms the write.
|
|
225
227
|
*/
|
|
226
228
|
create(model: Model, context: UserContext, writeOptions?: WriteOptions): Promise<Transaction>;
|
|
227
229
|
/**
|
|
228
|
-
*
|
|
229
|
-
*
|
|
230
|
+
* Records an update and applies it optimistically, then stages it for the next
|
|
231
|
+
* batched commit. Rapid updates to the same entity coalesce into a single wire
|
|
232
|
+
* operation.
|
|
233
|
+
* @param precomputedChanges - Optional pre-captured changes, used instead of re-reading them from the model.
|
|
230
234
|
*/
|
|
231
235
|
update(model: Model, context: UserContext, precomputedChanges?: Record<string, unknown>, writeOptions?: WriteOptions): Promise<Transaction>;
|
|
232
236
|
/**
|
|
233
|
-
*
|
|
237
|
+
* Records a delete and applies it optimistically. If the row's own create has
|
|
238
|
+
* not yet been sent, both are cancelled locally rather than sending a create
|
|
239
|
+
* followed by a delete; if the create is already in flight, the delete waits
|
|
240
|
+
* until it settles so the server never sees a delete before the create.
|
|
234
241
|
*/
|
|
235
242
|
delete(model: Model, context: UserContext, writeOptions?: WriteOptions): Promise<Transaction>;
|
|
236
243
|
/**
|
|
237
|
-
*
|
|
244
|
+
* Uploads a single attachment, delegating to the mutation executor.
|
|
238
245
|
*/
|
|
239
246
|
uploadAttachment(_file: File, options: {
|
|
240
247
|
id: string;
|
|
@@ -243,7 +250,7 @@ export declare class TransactionQueue extends EventEmitter {
|
|
|
243
250
|
url: string;
|
|
244
251
|
} | null>;
|
|
245
252
|
/**
|
|
246
|
-
*
|
|
253
|
+
* Uploads several attachments in one call, delegating to the mutation executor.
|
|
247
254
|
*/
|
|
248
255
|
batchUploadAttachments(_files: File[], items: {
|
|
249
256
|
id: string;
|
|
@@ -253,66 +260,69 @@ export declare class TransactionQueue extends EventEmitter {
|
|
|
253
260
|
url: string;
|
|
254
261
|
}[]>;
|
|
255
262
|
/**
|
|
256
|
-
*
|
|
263
|
+
* Records an archive and applies it optimistically, then stages it for the
|
|
264
|
+
* next batched commit.
|
|
257
265
|
*/
|
|
258
266
|
archive(model: Model, context: UserContext, writeOptions?: WriteOptions): Promise<Transaction>;
|
|
259
267
|
/**
|
|
260
|
-
*
|
|
268
|
+
* Records an unarchive and applies it optimistically, then stages it for the
|
|
269
|
+
* next batched commit.
|
|
261
270
|
*/
|
|
262
271
|
unarchive(model: Model, context: UserContext): Promise<Transaction>;
|
|
263
272
|
/**
|
|
264
|
-
*
|
|
273
|
+
* Places a transaction on the execution queue, coalescing it into an existing
|
|
274
|
+
* same-entity update where possible so redundant writes collapse.
|
|
265
275
|
*/
|
|
266
276
|
private enqueue;
|
|
267
277
|
private scheduleProcessing;
|
|
268
278
|
/**
|
|
269
|
-
*
|
|
270
|
-
*
|
|
271
|
-
*
|
|
272
|
-
*
|
|
273
|
-
*
|
|
274
|
-
*
|
|
275
|
-
* This reduces N round-trips to 1, dramatically improving batch latency.
|
|
279
|
+
* Processes one batch of transactions in a single commit. Rather than calling
|
|
280
|
+
* the server once per operation type or model, it collects every batchable
|
|
281
|
+
* operation and sends them together; the server applies the mixed operations
|
|
282
|
+
* atomically within one transaction. This turns many round trips into one and
|
|
283
|
+
* greatly reduces batch latency.
|
|
276
284
|
*/
|
|
277
285
|
private processBatch;
|
|
278
286
|
/**
|
|
279
|
-
*
|
|
280
|
-
*
|
|
281
|
-
*
|
|
282
|
-
* @param syncId - The sync
|
|
287
|
+
* Confirms every awaiting transaction whose sync-id threshold this delta meets
|
|
288
|
+
* or exceeds. The confirmation policy and timeout tracking live in
|
|
289
|
+
* {@link DeltaConfirmationTracker} (`./deltaConfirmation.js`).
|
|
290
|
+
* @param syncId - The sync id of the received delta.
|
|
283
291
|
*/
|
|
284
292
|
onDeltaReceived(syncId: number): void;
|
|
285
293
|
private scheduleDeltaConfirmationTimeout;
|
|
286
294
|
/**
|
|
287
|
-
*
|
|
288
|
-
*
|
|
295
|
+
* Resolves once the given transaction is confirmed and rejects if it fails.
|
|
296
|
+
* The confirming delta's timeout is handled by
|
|
297
|
+
* {@link scheduleDeltaConfirmationTimeout}.
|
|
289
298
|
*/
|
|
290
299
|
waitForConfirmation(transactionId: string): Promise<void>;
|
|
291
300
|
hasClientMutationId(id: string): boolean;
|
|
292
301
|
/**
|
|
293
|
-
*
|
|
294
|
-
* path
|
|
295
|
-
*
|
|
296
|
-
*
|
|
297
|
-
*
|
|
298
|
-
*
|
|
302
|
+
* Enqueues a pre-built, multi-operation atomic commit — the
|
|
303
|
+
* `ablo.commits.create()` path. The caller supplies the operations; the queue
|
|
304
|
+
* only retries on reconnect and de-duplicates, and does not apply the change
|
|
305
|
+
* optimistically or reorder for foreign keys. A duplicate `clientTxId`
|
|
306
|
+
* already in flight is ignored: the server's `mutation_log` de-duplicates
|
|
307
|
+
* across sessions, and this guard covers a double-enqueue within one session.
|
|
299
308
|
*/
|
|
300
309
|
enqueueCommit(clientTxId: string, operations: CommitTransaction['operations'], options?: {
|
|
301
310
|
causedByTaskId?: string | null;
|
|
302
311
|
reads?: ReadDependency[] | null;
|
|
303
312
|
}): void;
|
|
304
313
|
/**
|
|
305
|
-
*
|
|
306
|
-
*
|
|
307
|
-
*
|
|
308
|
-
*
|
|
314
|
+
* Drains the pending commit-lane envelopes one at a time. A transient
|
|
315
|
+
* failure, such as a network error, leaves the envelope at the head of the
|
|
316
|
+
* lane in `pending` and stops; reconnect re-kicks it through
|
|
317
|
+
* {@link flushOfflineQueue}. A permanent failure emits
|
|
318
|
+
* `transaction:failed:<id>` and drops the envelope.
|
|
309
319
|
*/
|
|
310
320
|
private processCommitLane;
|
|
311
321
|
/**
|
|
312
|
-
*
|
|
313
|
-
*
|
|
314
|
-
*
|
|
315
|
-
*
|
|
322
|
+
* Resolves once a commit-lane transaction is confirmed, returning the server's
|
|
323
|
+
* `lastSyncId` and any stale-context notifications; rejects on permanent
|
|
324
|
+
* failure. This backs the `wait: 'confirmed'` semantics of
|
|
325
|
+
* `ablo.commits.create()`.
|
|
316
326
|
*/
|
|
317
327
|
waitForCommitReceipt(clientTxId: string): Promise<{
|
|
318
328
|
lastSyncId: number;
|
|
@@ -320,88 +330,84 @@ export declare class TransactionQueue extends EventEmitter {
|
|
|
320
330
|
}>;
|
|
321
331
|
private isReorderPayload;
|
|
322
332
|
/**
|
|
323
|
-
*
|
|
333
|
+
* Classifies an error as transient (worth retrying) or permanent. The
|
|
334
|
+
* approach is deliberately conservative: only known-transient errors are
|
|
335
|
+
* retried, and anything unrecognized is treated as permanent so a failing
|
|
336
|
+
* write cannot loop forever.
|
|
324
337
|
*
|
|
325
|
-
*
|
|
326
|
-
*
|
|
338
|
+
* Transient (retried):
|
|
339
|
+
* - Network failures, connection errors, and timeouts.
|
|
340
|
+
* - Server errors (HTTP 5xx).
|
|
341
|
+
* - Rate limiting (HTTP 429).
|
|
327
342
|
*
|
|
328
|
-
*
|
|
329
|
-
* -
|
|
330
|
-
* -
|
|
331
|
-
* -
|
|
332
|
-
*
|
|
333
|
-
* Permanent errors (won't retry - includes but not limited to):
|
|
334
|
-
* - Validation errors, constraint violations
|
|
335
|
-
* - Not found, unauthorized, forbidden
|
|
336
|
-
* - Any other business logic error from the server
|
|
343
|
+
* Permanent (not retried), among others:
|
|
344
|
+
* - Validation errors and constraint violations.
|
|
345
|
+
* - Not found, unauthorized, and forbidden.
|
|
346
|
+
* - Any other business-logic error from the server.
|
|
337
347
|
*/
|
|
338
348
|
private isPermanentError;
|
|
339
349
|
/**
|
|
340
|
-
*
|
|
350
|
+
* Handles a failed transaction: retries transient failures with backoff and
|
|
351
|
+
* rolls back permanent ones, settling the transaction's confirmation promise
|
|
352
|
+
* either way.
|
|
341
353
|
*/
|
|
342
354
|
private handleFailure;
|
|
343
355
|
/**
|
|
344
|
-
*
|
|
356
|
+
* Resolves a conflict against server data using the configured strategy:
|
|
357
|
+
* last-write-wins rolls the local change back, merge and reject re-enqueue it,
|
|
358
|
+
* and custom applies the caller's resolver.
|
|
345
359
|
*/
|
|
346
360
|
handleConflict(transaction: Transaction, serverData: MutationInput): Promise<void>;
|
|
347
361
|
/**
|
|
348
|
-
* Optimistic updates
|
|
349
|
-
* these
|
|
362
|
+
* Optimistic updates. The apply and rollback rules live in `./optimisticApply.js`;
|
|
363
|
+
* these methods bind them to the queue's own tracking map and event emitter.
|
|
350
364
|
*/
|
|
351
365
|
private applyOptimisticCreate;
|
|
352
366
|
private applyOptimisticUpdate;
|
|
353
367
|
private applyOptimisticDelete;
|
|
354
368
|
private rollbackOptimistic;
|
|
355
369
|
/**
|
|
356
|
-
*
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
/**
|
|
360
|
-
* Persistence
|
|
370
|
+
* Loads transactions persisted from a previous session and re-enqueues them,
|
|
371
|
+
* so writes made while offline survive a restart. Does nothing when
|
|
372
|
+
* persistence is disabled.
|
|
361
373
|
*/
|
|
362
374
|
loadPersistedTransactions(database: Database): Promise<void>;
|
|
363
375
|
/**
|
|
364
|
-
*
|
|
365
|
-
*
|
|
366
|
-
*
|
|
367
|
-
*
|
|
368
|
-
* DROPPED with an observability capture instead of replayed as commits.
|
|
376
|
+
* Validates and rehydrates one persisted row. Rows written to the same store
|
|
377
|
+
* by other subsystems are skipped, and rows that fail the persisted
|
|
378
|
+
* transaction schema — from an older version or corruption — are dropped and
|
|
379
|
+
* reported rather than replayed as commits.
|
|
369
380
|
*/
|
|
370
381
|
private deserializeTransaction;
|
|
371
382
|
/**
|
|
372
|
-
*
|
|
383
|
+
* Cancels every pending or executing transaction for a given model id,
|
|
384
|
+
* optionally limited to one operation type, rolling back their optimistic
|
|
385
|
+
* state. Returns the cancelled transactions.
|
|
373
386
|
*/
|
|
374
387
|
cancelTransactionsForModel(modelId: string, transactionType?: string): Transaction[];
|
|
375
388
|
/**
|
|
376
|
-
*
|
|
377
|
-
*
|
|
378
|
-
*
|
|
379
|
-
* This keeps FK relationship knowledge in ModelRegistry/SyncedStore,
|
|
380
|
-
* while TransactionQueue just handles the cancellation mechanics.
|
|
389
|
+
* Cancels pending transactions for child rows that reference a deleted parent,
|
|
390
|
+
* used to cascade a parent deletion. The caller supplies the foreign-key
|
|
391
|
+
* relationship; this method performs the cancellation.
|
|
381
392
|
*
|
|
382
|
-
* @param childModelName - The child model type (
|
|
383
|
-
* @param foreignKey - The
|
|
384
|
-
* @param parentId - The deleted parent's
|
|
385
|
-
* @returns
|
|
393
|
+
* @param childModelName - The child model type (for example 'SlideLayer').
|
|
394
|
+
* @param foreignKey - The foreign-key property name (for example 'slideId').
|
|
395
|
+
* @param parentId - The deleted parent's id.
|
|
396
|
+
* @returns The number of transactions cancelled.
|
|
386
397
|
*/
|
|
387
398
|
cancelTransactionsByForeignKey(childModelName: string, foreignKey: string, parentId: string): number;
|
|
388
399
|
/**
|
|
389
|
-
*
|
|
400
|
+
* Returns the number of transactions still pending or executing.
|
|
390
401
|
*/
|
|
391
402
|
getOutstandingTransactionCount(): number;
|
|
392
|
-
/**
|
|
393
|
-
* Utilities
|
|
394
|
-
*/
|
|
403
|
+
/** Generates a unique local transaction id. */
|
|
395
404
|
private generateId;
|
|
396
405
|
private mergeData;
|
|
397
406
|
private extractCreateData;
|
|
398
407
|
private mapChangesToInput;
|
|
399
408
|
private extractUpdateData;
|
|
400
|
-
private buildUpdateInput;
|
|
401
409
|
private extractPreviousData;
|
|
402
|
-
/**
|
|
403
|
-
* Public API
|
|
404
|
-
*/
|
|
410
|
+
/** Returns a snapshot of queue counts and the current configuration. */
|
|
405
411
|
getStats(): {
|
|
406
412
|
pending: number;
|
|
407
413
|
executing: number;
|
|
@@ -432,24 +438,23 @@ export declare class TransactionQueue extends EventEmitter {
|
|
|
432
438
|
capMs: number;
|
|
433
439
|
};
|
|
434
440
|
/**
|
|
435
|
-
*
|
|
436
|
-
*
|
|
437
|
-
*
|
|
438
|
-
* jitter
|
|
439
|
-
*
|
|
440
|
-
*
|
|
441
|
-
*
|
|
442
|
-
* batch workers (e.g. 60s for agent-worker).
|
|
441
|
+
* How long, in milliseconds, to wait after the connection drops before
|
|
442
|
+
* failing any in-flight commit-lane transaction with an
|
|
443
|
+
* {@link AbloConnectionError}. Brief disconnects, such as a server restart
|
|
444
|
+
* or mobile network jitter, are absorbed transparently; only a disconnect
|
|
445
|
+
* that outlasts this window surfaces as a failure. Set it lower for
|
|
446
|
+
* interactive use (for example 10 seconds for chat) and higher for
|
|
447
|
+
* background batch work. Defaults to 30 seconds.
|
|
443
448
|
*
|
|
444
|
-
* Without this deadline, `commits.create({wait:'confirmed'})`
|
|
445
|
-
* forever
|
|
449
|
+
* Without this deadline, `commits.create({ wait: 'confirmed' })` would wait
|
|
450
|
+
* forever if the connection died while a commit was in flight.
|
|
446
451
|
*/
|
|
447
452
|
commitOfflineGraceMs: number;
|
|
448
453
|
};
|
|
449
454
|
};
|
|
450
455
|
/**
|
|
451
|
-
*
|
|
452
|
-
*
|
|
456
|
+
* Returns detailed internal state — pending, executing, and awaiting-delta
|
|
457
|
+
* transactions — to help diagnose delta-confirmation issues.
|
|
453
458
|
*/
|
|
454
459
|
getDebugInfo(): {
|
|
455
460
|
lastSeenSyncId: number;
|
|
@@ -476,12 +481,11 @@ export declare class TransactionQueue extends EventEmitter {
|
|
|
476
481
|
modelId: string;
|
|
477
482
|
}[];
|
|
478
483
|
};
|
|
479
|
-
/**
|
|
480
|
-
* Set configuration
|
|
481
|
-
*/
|
|
484
|
+
/** Merges the given options into the queue's configuration. */
|
|
482
485
|
setConfig(config: Partial<TransactionQueueConfig>): void;
|
|
483
486
|
/**
|
|
484
|
-
*
|
|
487
|
+
* Re-emits an incoming sync delta on the `sync:delta` event for the store to
|
|
488
|
+
* apply. Because rows use stable ids, no id reconciliation is needed here.
|
|
485
489
|
*/
|
|
486
490
|
handleSyncDelta(delta: {
|
|
487
491
|
id: string;
|
|
@@ -490,7 +494,8 @@ export declare class TransactionQueue extends EventEmitter {
|
|
|
490
494
|
data: any;
|
|
491
495
|
}): boolean;
|
|
492
496
|
/**
|
|
493
|
-
*
|
|
497
|
+
* Releases the queue's resources: rolls back outstanding optimistic updates,
|
|
498
|
+
* clears all timers and stored transactions, and removes event listeners.
|
|
494
499
|
*/
|
|
495
500
|
dispose(): void;
|
|
496
501
|
}
|