@abloatai/humans 0.37.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/README.md +52 -0
- package/dist/Ablo.d.ts +208 -0
- package/dist/Ablo.js +120 -0
- package/dist/client.d.ts +317 -0
- package/dist/client.js +13 -0
- package/dist/core.d.ts +35 -0
- package/dist/core.js +48 -0
- package/dist/humans.d.ts +28 -0
- package/dist/humans.js +34 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +6 -0
- package/dist/local/BaseSyncedStore.d.ts +807 -0
- package/dist/local/BaseSyncedStore.js +1516 -0
- package/dist/local/Database.d.ts +322 -0
- package/dist/local/Database.js +1589 -0
- package/dist/local/InstanceCache.d.ts +255 -0
- package/dist/local/InstanceCache.js +1263 -0
- package/dist/local/LazyReferenceCollection.d.ts +177 -0
- package/dist/local/LazyReferenceCollection.js +461 -0
- package/dist/local/Model.d.ts +475 -0
- package/dist/local/Model.js +950 -0
- package/dist/local/ModelRegistry.d.ts +225 -0
- package/dist/local/ModelRegistry.js +539 -0
- package/dist/local/NetworkMonitor.d.ts +28 -0
- package/dist/local/NetworkMonitor.js +79 -0
- package/dist/local/RuntimeContext.d.ts +52 -0
- package/dist/local/RuntimeContext.js +80 -0
- package/dist/local/SyncClient.d.ts +516 -0
- package/dist/local/SyncClient.js +1754 -0
- package/dist/local/adapters/alwaysOnline.d.ts +14 -0
- package/dist/local/adapters/alwaysOnline.js +17 -0
- package/dist/local/adapters/inMemoryStorage.d.ts +37 -0
- package/dist/local/adapters/inMemoryStorage.js +122 -0
- package/dist/local/client/clientPrelude.d.ts +52 -0
- package/dist/local/client/clientPrelude.js +60 -0
- package/dist/local/client/consoleLogger.d.ts +35 -0
- package/dist/local/client/consoleLogger.js +44 -0
- package/dist/local/client/createInternalComponents.d.ts +50 -0
- package/dist/local/client/createInternalComponents.js +98 -0
- package/dist/local/client/createModelProxy.d.ts +248 -0
- package/dist/local/client/createModelProxy.js +880 -0
- package/dist/local/client/modelRegistration.d.ts +10 -0
- package/dist/local/client/modelRegistration.js +316 -0
- package/dist/local/client/options.d.ts +440 -0
- package/dist/local/client/options.js +7 -0
- package/dist/local/client/reactiveEngine.d.ts +53 -0
- package/dist/local/client/reactiveEngine.js +705 -0
- package/dist/local/client/resourceTypes.d.ts +12 -0
- package/dist/local/client/resourceTypes.js +10 -0
- package/dist/local/client/schemaConfig.d.ts +44 -0
- package/dist/local/client/schemaConfig.js +185 -0
- package/dist/local/client/storeCluster.d.ts +46 -0
- package/dist/local/client/storeCluster.js +133 -0
- package/dist/local/client/storeLifecycle.d.ts +61 -0
- package/dist/local/client/storeLifecycle.js +236 -0
- package/dist/local/client/validateAbloOptions.d.ts +42 -0
- package/dist/local/client/validateAbloOptions.js +43 -0
- package/dist/local/client/wsMutationExecutor.d.ts +27 -0
- package/dist/local/client/wsMutationExecutor.js +72 -0
- package/dist/local/context.d.ts +42 -0
- package/dist/local/context.js +81 -0
- package/dist/local/coordination/ClaimLog.d.ts +26 -0
- package/dist/local/coordination/ClaimLog.js +32 -0
- package/dist/local/interfaces/index.d.ts +311 -0
- package/dist/local/interfaces/index.js +9 -0
- package/dist/local/localModelContract.d.ts +14 -0
- package/dist/local/localModelContract.js +1 -0
- package/dist/local/logPosition.d.ts +31 -0
- package/dist/local/logPosition.js +53 -0
- package/dist/local/mutationPersistence.d.ts +6 -0
- package/dist/local/mutationPersistence.js +1 -0
- package/dist/local/mutators/RecordingMutation.d.ts +36 -0
- package/dist/local/mutators/RecordingMutation.js +182 -0
- package/dist/local/mutators/Transaction.d.ts +40 -0
- package/dist/local/mutators/Transaction.js +58 -0
- package/dist/local/mutators/UndoManager.d.ts +258 -0
- package/dist/local/mutators/UndoManager.js +665 -0
- package/dist/local/mutators/defineMutators.d.ts +60 -0
- package/dist/local/mutators/defineMutators.js +18 -0
- package/dist/local/mutators/inverseOp.d.ts +126 -0
- package/dist/local/mutators/inverseOp.js +71 -0
- package/dist/local/mutators/mutateActions.d.ts +45 -0
- package/dist/local/mutators/mutateActions.js +105 -0
- package/dist/local/mutators/readerActions.d.ts +33 -0
- package/dist/local/mutators/readerActions.js +57 -0
- package/dist/local/mutators/undoApply.d.ts +51 -0
- package/dist/local/mutators/undoApply.js +117 -0
- package/dist/local/persistence.d.ts +7 -0
- package/dist/local/persistence.js +9 -0
- package/dist/local/query/QueryProcessor.d.ts +75 -0
- package/dist/local/query/QueryProcessor.js +255 -0
- package/dist/local/query/client.d.ts +64 -0
- package/dist/local/query/client.js +138 -0
- package/dist/local/query/types.d.ts +85 -0
- package/dist/local/query/types.js +16 -0
- package/dist/local/schema/serialize.d.ts +1 -0
- package/dist/local/schema/serialize.js +1 -0
- package/dist/local/store/queryApi.d.ts +13 -0
- package/dist/local/store/queryApi.js +35 -0
- package/dist/local/storeContract.d.ts +145 -0
- package/dist/local/storeContract.js +12 -0
- package/dist/local/stores/DatabaseManager.d.ts +112 -0
- package/dist/local/stores/DatabaseManager.js +400 -0
- package/dist/local/stores/ObjectStore.d.ts +115 -0
- package/dist/local/stores/ObjectStore.js +393 -0
- package/dist/local/stores/ObjectStoreContract.d.ts +38 -0
- package/dist/local/stores/ObjectStoreContract.js +1 -0
- package/dist/local/stores/StoreManager.d.ts +114 -0
- package/dist/local/stores/StoreManager.js +304 -0
- package/dist/local/stores/SyncActionStore.d.ts +99 -0
- package/dist/local/stores/SyncActionStore.js +506 -0
- package/dist/local/stores/openIDBWithTimeout.d.ts +65 -0
- package/dist/local/stores/openIDBWithTimeout.js +153 -0
- package/dist/local/stores/persistenceCleanup.d.ts +7 -0
- package/dist/local/stores/persistenceCleanup.js +26 -0
- package/dist/local/stores/persistenceIdentity.d.ts +27 -0
- package/dist/local/stores/persistenceIdentity.js +38 -0
- package/dist/local/stores/syncAction.d.ts +26 -0
- package/dist/local/stores/syncAction.js +16 -0
- package/dist/local/stores/v1PersistenceDeletion.d.ts +8 -0
- package/dist/local/stores/v1PersistenceDeletion.js +16 -0
- package/dist/local/sync/BootstrapFetcher.d.ts +284 -0
- package/dist/local/sync/BootstrapFetcher.js +964 -0
- package/dist/local/sync/ConnectionManager.d.ts +8 -0
- package/dist/local/sync/ConnectionManager.js +8 -0
- package/dist/local/sync/OnDemandLoader.d.ts +231 -0
- package/dist/local/sync/OnDemandLoader.js +743 -0
- package/dist/local/sync/SubscriptionManager.d.ts +159 -0
- package/dist/local/sync/SubscriptionManager.js +243 -0
- package/dist/local/sync/SyncWebSocket.d.ts +173 -0
- package/dist/local/sync/SyncWebSocket.js +438 -0
- package/dist/local/sync/bootstrapApply.d.ts +73 -0
- package/dist/local/sync/bootstrapApply.js +73 -0
- package/dist/local/sync/commitFrames.d.ts +8 -0
- package/dist/local/sync/commitFrames.js +8 -0
- package/dist/local/sync/connectionManagerLifecycle.d.ts +23 -0
- package/dist/local/sync/connectionManagerLifecycle.js +126 -0
- package/dist/local/sync/contextPorts.d.ts +18 -0
- package/dist/local/sync/contextPorts.js +31 -0
- package/dist/local/sync/createClaimStream.d.ts +64 -0
- package/dist/local/sync/createClaimStream.js +475 -0
- package/dist/local/sync/createSnapshot.d.ts +29 -0
- package/dist/local/sync/createSnapshot.js +116 -0
- package/dist/local/sync/credentialLifecycle.d.ts +7 -0
- package/dist/local/sync/credentialLifecycle.js +7 -0
- package/dist/local/sync/deltaPipeline.d.ts +116 -0
- package/dist/local/sync/deltaPipeline.js +357 -0
- package/dist/local/sync/groupChange.d.ts +116 -0
- package/dist/local/sync/groupChange.js +244 -0
- package/dist/local/sync/initialize.d.ts +27 -0
- package/dist/local/sync/initialize.js +137 -0
- package/dist/local/sync/participants.d.ts +132 -0
- package/dist/local/sync/participants.js +342 -0
- package/dist/local/sync/persistedPrefix.d.ts +12 -0
- package/dist/local/sync/persistedPrefix.js +22 -0
- package/dist/local/sync/reconnect.d.ts +23 -0
- package/dist/local/sync/reconnect.js +55 -0
- package/dist/local/sync/schemaDrift.d.ts +55 -0
- package/dist/local/sync/schemaDrift.js +53 -0
- package/dist/local/sync/schemas.d.ts +71 -0
- package/dist/local/sync/schemas.js +94 -0
- package/dist/local/sync/socketEventWiring.d.ts +31 -0
- package/dist/local/sync/socketEventWiring.js +130 -0
- package/dist/local/sync/syncCursor.d.ts +40 -0
- package/dist/local/sync/syncCursor.js +55 -0
- package/dist/local/sync/syncPlan.d.ts +54 -0
- package/dist/local/sync/syncPlan.js +50 -0
- package/dist/local/sync/terminalSessionLifecycle.d.ts +20 -0
- package/dist/local/sync/terminalSessionLifecycle.js +50 -0
- package/dist/local/sync/wsFrameHandlers.d.ts +8 -0
- package/dist/local/sync/wsFrameHandlers.js +8 -0
- package/dist/local/transactions/databaseCommitOutbox.d.ts +15 -0
- package/dist/local/transactions/databaseCommitOutbox.js +16 -0
- package/dist/local/transactions/localMutation.d.ts +10 -0
- package/dist/local/transactions/localMutation.js +37 -0
- package/dist/local/transactions/mutations/MutationQueue.d.ts +511 -0
- package/dist/local/transactions/mutations/MutationQueue.js +1498 -0
- package/dist/local/transactions/mutations/MutationStore.d.ts +20 -0
- package/dist/local/transactions/mutations/MutationStore.js +53 -0
- package/dist/local/transactions/mutations/UnconfirmedWrites.d.ts +82 -0
- package/dist/local/transactions/mutations/UnconfirmedWrites.js +104 -0
- package/dist/local/transactions/mutations/batchProcessing.d.ts +64 -0
- package/dist/local/transactions/mutations/batchProcessing.js +349 -0
- package/dist/local/transactions/mutations/coalesceRules.d.ts +58 -0
- package/dist/local/transactions/mutations/coalesceRules.js +140 -0
- package/dist/local/transactions/mutations/commitApi.d.ts +19 -0
- package/dist/local/transactions/mutations/commitApi.js +74 -0
- package/dist/local/transactions/mutations/commitLane.d.ts +70 -0
- package/dist/local/transactions/mutations/commitLane.js +140 -0
- package/dist/local/transactions/mutations/commitLatency.d.ts +52 -0
- package/dist/local/transactions/mutations/commitLatency.js +130 -0
- package/dist/local/transactions/mutations/commitPayload.d.ts +165 -0
- package/dist/local/transactions/mutations/commitPayload.js +152 -0
- package/dist/local/transactions/mutations/commitTransport.d.ts +36 -0
- package/dist/local/transactions/mutations/commitTransport.js +104 -0
- package/dist/local/transactions/mutations/deltaConfirmation.d.ts +63 -0
- package/dist/local/transactions/mutations/deltaConfirmation.js +235 -0
- package/dist/local/transactions/mutations/durableCommitRestore.d.ts +17 -0
- package/dist/local/transactions/mutations/durableCommitRestore.js +95 -0
- package/dist/local/transactions/mutations/durableWriteStore.d.ts +14 -0
- package/dist/local/transactions/mutations/durableWriteStore.js +12 -0
- package/dist/local/transactions/mutations/executionSelection.d.ts +6 -0
- package/dist/local/transactions/mutations/executionSelection.js +42 -0
- package/dist/local/transactions/mutations/failureHandling.d.ts +16 -0
- package/dist/local/transactions/mutations/failureHandling.js +130 -0
- package/dist/local/transactions/mutations/failurePolicy.d.ts +13 -0
- package/dist/local/transactions/mutations/failurePolicy.js +48 -0
- package/dist/local/transactions/mutations/localMutation.d.ts +58 -0
- package/dist/local/transactions/mutations/localMutation.js +75 -0
- package/dist/local/transactions/mutations/modelOperations.d.ts +44 -0
- package/dist/local/transactions/mutations/modelOperations.js +144 -0
- package/dist/local/transactions/mutations/mutationPersistence.d.ts +25 -0
- package/dist/local/transactions/mutations/mutationPersistence.js +188 -0
- package/dist/local/transactions/mutations/pendingDrain.d.ts +33 -0
- package/dist/local/transactions/mutations/pendingDrain.js +112 -0
- package/dist/local/transactions/mutations/processingScheduler.d.ts +14 -0
- package/dist/local/transactions/mutations/processingScheduler.js +24 -0
- package/dist/local/transactions/mutations/queueCoalescing.d.ts +13 -0
- package/dist/local/transactions/mutations/queueCoalescing.js +35 -0
- package/dist/local/transactions/mutations/replayValidation.d.ts +187 -0
- package/dist/local/transactions/mutations/replayValidation.js +164 -0
- package/dist/local/transactions/reconnectDrain.d.ts +11 -0
- package/dist/local/transactions/reconnectDrain.js +13 -0
- package/dist/local/utils/mobxSetup.d.ts +53 -0
- package/dist/local/utils/mobxSetup.js +330 -0
- package/dist/local/views/QueryView.d.ts +79 -0
- package/dist/local/views/QueryView.js +218 -0
- package/dist/local/views/ViewRegistry.d.ts +20 -0
- package/dist/local/views/ViewRegistry.js +57 -0
- package/dist/local/views/incrementalView.d.ts +45 -0
- package/dist/local/views/incrementalView.js +69 -0
- package/dist/plugin.d.ts +285 -0
- package/dist/plugin.js +106 -0
- package/dist/presenceStream.d.ts +69 -0
- package/dist/presenceStream.js +200 -0
- package/dist/react/AbloProvider.d.ts +242 -0
- package/dist/react/AbloProvider.js +456 -0
- package/dist/react/ClientSideSuspense.d.ts +36 -0
- package/dist/react/ClientSideSuspense.js +17 -0
- package/dist/react/DefaultFallback.d.ts +24 -0
- package/dist/react/DefaultFallback.js +43 -0
- package/dist/react/context.d.ts +55 -0
- package/dist/react/context.js +29 -0
- package/dist/react/createAbloReact.d.ts +50 -0
- package/dist/react/createAbloReact.js +48 -0
- package/dist/react/internalContext.d.ts +33 -0
- package/dist/react/internalContext.js +3 -0
- package/dist/react/useAblo.d.ts +96 -0
- package/dist/react/useAblo.js +120 -0
- package/dist/react/useCurrentUserId.d.ts +2 -0
- package/dist/react/useCurrentUserId.js +12 -0
- package/dist/react/useErrorListener.d.ts +2 -0
- package/dist/react/useErrorListener.js +14 -0
- package/dist/react/useMutationFailureListener.d.ts +8 -0
- package/dist/react/useMutationFailureListener.js +19 -0
- package/dist/react/useMutators.d.ts +56 -0
- package/dist/react/useMutators.js +84 -0
- package/dist/react/useSyncStatus.d.ts +19 -0
- package/dist/react/useSyncStatus.js +37 -0
- package/dist/react/useUndoScope.d.ts +34 -0
- package/dist/react/useUndoScope.js +73 -0
- package/dist/react.d.ts +18 -0
- package/dist/react.js +14 -0
- package/dist/reactRuntime.d.ts +4 -0
- package/dist/reactRuntime.js +2 -0
- package/dist/surface.d.ts +36 -0
- package/dist/surface.js +77 -0
- package/dist/useReactive.d.ts +6 -0
- package/dist/useReactive.js +43 -0
- package/package.json +119 -0
- package/src/Ablo.ts +456 -0
- package/src/client.ts +374 -0
- package/src/core.ts +104 -0
- package/src/humans.ts +61 -0
- package/src/index.ts +40 -0
- package/src/local/BaseSyncedStore.ts +1991 -0
- package/src/local/Database.ts +2052 -0
- package/src/local/InstanceCache.ts +1503 -0
- package/src/local/LazyReferenceCollection.ts +563 -0
- package/src/local/Model.ts +1124 -0
- package/src/local/ModelRegistry.ts +762 -0
- package/src/local/NetworkMonitor.ts +88 -0
- package/src/local/RuntimeContext.ts +141 -0
- package/src/local/SyncClient.ts +2131 -0
- package/src/local/adapters/alwaysOnline.ts +20 -0
- package/src/local/adapters/inMemoryStorage.ts +141 -0
- package/src/local/client/clientPrelude.ts +112 -0
- package/src/local/client/consoleLogger.ts +60 -0
- package/src/local/client/createInternalComponents.ts +163 -0
- package/src/local/client/createModelProxy.ts +1390 -0
- package/src/local/client/modelRegistration.ts +350 -0
- package/src/local/client/options.ts +526 -0
- package/src/local/client/reactiveEngine.ts +935 -0
- package/src/local/client/resourceTypes.ts +37 -0
- package/src/local/client/schemaConfig.ts +194 -0
- package/src/local/client/storeCluster.ts +172 -0
- package/src/local/client/storeLifecycle.ts +343 -0
- package/src/local/client/validateAbloOptions.ts +95 -0
- package/src/local/client/wsMutationExecutor.ts +110 -0
- package/src/local/context.ts +96 -0
- package/src/local/coordination/ClaimLog.ts +39 -0
- package/src/local/interfaces/index.ts +468 -0
- package/src/local/localModelContract.ts +15 -0
- package/src/local/logPosition.ts +84 -0
- package/src/local/mutationPersistence.ts +7 -0
- package/src/local/mutators/RecordingMutation.ts +222 -0
- package/src/local/mutators/Transaction.ts +97 -0
- package/src/local/mutators/UndoManager.ts +741 -0
- package/src/local/mutators/defineMutators.ts +76 -0
- package/src/local/mutators/inverseOp.ts +83 -0
- package/src/local/mutators/mutateActions.ts +167 -0
- package/src/local/mutators/readerActions.ts +99 -0
- package/src/local/mutators/undoApply.ts +141 -0
- package/src/local/persistence.ts +16 -0
- package/src/local/query/QueryProcessor.ts +347 -0
- package/src/local/query/client.ts +197 -0
- package/src/local/query/types.ts +102 -0
- package/src/local/schema/serialize.ts +1 -0
- package/src/local/store/queryApi.ts +56 -0
- package/src/local/storeContract.ts +146 -0
- package/src/local/stores/DatabaseManager.ts +507 -0
- package/src/local/stores/ObjectStore.ts +449 -0
- package/src/local/stores/ObjectStoreContract.ts +48 -0
- package/src/local/stores/StoreManager.ts +388 -0
- package/src/local/stores/SyncActionStore.ts +579 -0
- package/src/local/stores/openIDBWithTimeout.ts +195 -0
- package/src/local/stores/persistenceCleanup.ts +43 -0
- package/src/local/stores/persistenceIdentity.ts +83 -0
- package/src/local/stores/syncAction.ts +21 -0
- package/src/local/stores/v1PersistenceDeletion.ts +21 -0
- package/src/local/sync/BootstrapFetcher.ts +1224 -0
- package/src/local/sync/ConnectionManager.ts +15 -0
- package/src/local/sync/OnDemandLoader.ts +927 -0
- package/src/local/sync/SubscriptionManager.ts +300 -0
- package/src/local/sync/SyncWebSocket.ts +584 -0
- package/src/local/sync/bootstrapApply.ts +130 -0
- package/src/local/sync/commitFrames.ts +16 -0
- package/src/local/sync/connectionManagerLifecycle.ts +158 -0
- package/src/local/sync/contextPorts.ts +37 -0
- package/src/local/sync/createClaimStream.ts +668 -0
- package/src/local/sync/createSnapshot.ts +160 -0
- package/src/local/sync/credentialLifecycle.ts +18 -0
- package/src/local/sync/deltaPipeline.ts +473 -0
- package/src/local/sync/groupChange.ts +343 -0
- package/src/local/sync/initialize.ts +205 -0
- package/src/local/sync/participants.ts +564 -0
- package/src/local/sync/persistedPrefix.ts +27 -0
- package/src/local/sync/reconnect.ts +88 -0
- package/src/local/sync/schemaDrift.ts +86 -0
- package/src/local/sync/schemas.ts +118 -0
- package/src/local/sync/socketEventWiring.ts +196 -0
- package/src/local/sync/syncCursor.ts +62 -0
- package/src/local/sync/syncPlan.ts +89 -0
- package/src/local/sync/terminalSessionLifecycle.ts +66 -0
- package/src/local/sync/wsFrameHandlers.ts +20 -0
- package/src/local/transactions/databaseCommitOutbox.ts +33 -0
- package/src/local/transactions/localMutation.ts +58 -0
- package/src/local/transactions/mutations/MutationQueue.ts +1998 -0
- package/src/local/transactions/mutations/MutationStore.ts +65 -0
- package/src/local/transactions/mutations/UnconfirmedWrites.ts +133 -0
- package/src/local/transactions/mutations/batchProcessing.ts +469 -0
- package/src/local/transactions/mutations/coalesceRules.ts +192 -0
- package/src/local/transactions/mutations/commitApi.ts +97 -0
- package/src/local/transactions/mutations/commitLane.ts +191 -0
- package/src/local/transactions/mutations/commitLatency.ts +164 -0
- package/src/local/transactions/mutations/commitPayload.ts +281 -0
- package/src/local/transactions/mutations/commitTransport.ts +174 -0
- package/src/local/transactions/mutations/deltaConfirmation.ts +298 -0
- package/src/local/transactions/mutations/durableCommitRestore.ts +128 -0
- package/src/local/transactions/mutations/durableWriteStore.ts +21 -0
- package/src/local/transactions/mutations/executionSelection.ts +42 -0
- package/src/local/transactions/mutations/failureHandling.ts +154 -0
- package/src/local/transactions/mutations/failurePolicy.ts +61 -0
- package/src/local/transactions/mutations/localMutation.ts +135 -0
- package/src/local/transactions/mutations/modelOperations.ts +210 -0
- package/src/local/transactions/mutations/mutationPersistence.ts +231 -0
- package/src/local/transactions/mutations/pendingDrain.ts +160 -0
- package/src/local/transactions/mutations/processingScheduler.ts +35 -0
- package/src/local/transactions/mutations/queueCoalescing.ts +45 -0
- package/src/local/transactions/mutations/replayValidation.ts +192 -0
- package/src/local/transactions/reconnectDrain.ts +24 -0
- package/src/local/utils/mobxSetup.ts +388 -0
- package/src/local/views/QueryView.ts +311 -0
- package/src/local/views/ViewRegistry.ts +61 -0
- package/src/local/views/incrementalView.ts +92 -0
- package/src/plugin.ts +396 -0
- package/src/presenceStream.ts +279 -0
- package/src/react/AbloProvider.tsx +744 -0
- package/src/react/ClientSideSuspense.tsx +57 -0
- package/src/react/DefaultFallback.tsx +60 -0
- package/src/react/context.ts +89 -0
- package/src/react/createAbloReact.ts +116 -0
- package/src/react/internalContext.ts +38 -0
- package/src/react/useAblo.ts +280 -0
- package/src/react/useCurrentUserId.ts +17 -0
- package/src/react/useErrorListener.ts +22 -0
- package/src/react/useMutationFailureListener.ts +34 -0
- package/src/react/useMutators.ts +184 -0
- package/src/react/useSyncStatus.ts +42 -0
- package/src/react/useUndoScope.ts +143 -0
- package/src/react.ts +69 -0
- package/src/reactRuntime.ts +10 -0
- package/src/surface.ts +106 -0
- package/src/useReactive.ts +51 -0
|
@@ -0,0 +1,511 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MutationQueue 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.
|
|
6
|
+
*
|
|
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.
|
|
13
|
+
*/
|
|
14
|
+
import { EventEmitter } from 'events';
|
|
15
|
+
import type { LocalModel } from '../../localModelContract.js';
|
|
16
|
+
import type { MutationPersistencePort } from '../../mutationPersistence.js';
|
|
17
|
+
import type { RuntimeContext } from '../../RuntimeContext.js';
|
|
18
|
+
import { type LogPositionPort } from '../../logPosition.js';
|
|
19
|
+
import type { WriteOptions } from '../../interfaces/index.js';
|
|
20
|
+
import type { StaleNotification, ReadDependency, TrackDependency } from '@abloatai/transaction/coordination/schema';
|
|
21
|
+
import { type MutationInput, type QueuedMutation, type UserContext } from './commitPayload.js';
|
|
22
|
+
import { type CommitOutboxScope } from '@abloatai/transaction/transactions/settlement/commitEnvelope';
|
|
23
|
+
import type { DurableWriteStore } from './durableWriteStore.js';
|
|
24
|
+
import { type LocalMutationPort } from './localMutation.js';
|
|
25
|
+
import { type CommitTransaction } from './commitLane.js';
|
|
26
|
+
export type { QueuedMutation, UserContext } from './commitPayload.js';
|
|
27
|
+
/**
|
|
28
|
+
* A pre-built, multi-operation commit submitted through
|
|
29
|
+
* `ablo.commits.create()`. Unlike the per-model {@link QueuedMutation} (see
|
|
30
|
+
* `./commitPayload.js`), the caller supplies the operations and the whole
|
|
31
|
+
* envelope commits atomically: the queue does not coalesce it, reorder its
|
|
32
|
+
* operations for foreign keys, or apply it optimistically. It runs through the
|
|
33
|
+
* same `mutationExecutor.commit()` as the model batch path, so its
|
|
34
|
+
* retry-on-reconnect behaviour is identical.
|
|
35
|
+
*/
|
|
36
|
+
interface ConflictResolution {
|
|
37
|
+
strategy: 'last-write-wins' | 'merge' | 'reject' | 'custom';
|
|
38
|
+
resolver?: (local: MutationInput | undefined, remote: MutationInput) => MutationInput;
|
|
39
|
+
}
|
|
40
|
+
export interface MutationQueueConfig {
|
|
41
|
+
/** Shared client position (see logPosition.ts). One per client. */
|
|
42
|
+
position?: LogPositionPort;
|
|
43
|
+
/** The owning client's runtime. Defaults to the module-global bridge. */
|
|
44
|
+
runtime?: RuntimeContext;
|
|
45
|
+
maxBatchSize: number;
|
|
46
|
+
batchDelay: number;
|
|
47
|
+
maxRetries: number;
|
|
48
|
+
conflictResolution: ConflictResolution;
|
|
49
|
+
enablePersistence: boolean;
|
|
50
|
+
enableOptimistic: boolean;
|
|
51
|
+
/** Local adapter for applying and rolling back local writes. */
|
|
52
|
+
localMutationPort?: LocalMutationPort;
|
|
53
|
+
maxExecutingTransactions: number;
|
|
54
|
+
deltaConfirmationTimeout: number;
|
|
55
|
+
/**
|
|
56
|
+
* Exponential backoff for retryable server responses (HTTP 429/503).
|
|
57
|
+
* `baseMs` is the first retry delay; each subsequent attempt doubles
|
|
58
|
+
* up to `capMs`. Final delay = min(capMs, baseMs * 2^(attempt-1)) +
|
|
59
|
+
* up to 100ms of jitter. Defaults: 200ms / 1500ms.
|
|
60
|
+
*/
|
|
61
|
+
retryBackoff: {
|
|
62
|
+
baseMs: number;
|
|
63
|
+
capMs: number;
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* How long, in milliseconds, to wait after the connection drops before
|
|
67
|
+
* failing any in-flight commit-lane transaction with an
|
|
68
|
+
* {@link AbloConnectionError}. Brief disconnects, such as a server restart
|
|
69
|
+
* or mobile network jitter, are absorbed transparently; only a disconnect
|
|
70
|
+
* that outlasts this window surfaces as a failure. Set it lower for
|
|
71
|
+
* interactive use (for example 10 seconds for chat) and higher for
|
|
72
|
+
* background batch work. Defaults to 30 seconds.
|
|
73
|
+
*
|
|
74
|
+
* Without this deadline, `commits.create({ wait: 'confirmed' })` would wait
|
|
75
|
+
* forever if the connection died while a commit was in flight.
|
|
76
|
+
*/
|
|
77
|
+
commitOfflineGraceMs: number;
|
|
78
|
+
/**
|
|
79
|
+
* How long, in milliseconds, to wait for the transport to acknowledge a
|
|
80
|
+
* dispatched commit before treating the silence as a retryable no-receipt
|
|
81
|
+
* failure. A transport that never answers — a half-open socket, a dropped
|
|
82
|
+
* response frame — would otherwise hold the commit in flight forever, and
|
|
83
|
+
* with it the client's staged-batch lock: every later write in the session
|
|
84
|
+
* queues silently behind the unanswered one. The envelope's idempotency key
|
|
85
|
+
* is stable across retries, so a commit the server DID apply before the
|
|
86
|
+
* timeout is deduplicated on the retry rather than double-applied.
|
|
87
|
+
* Defaults to 30 seconds. Set `0` to disable the bound.
|
|
88
|
+
*/
|
|
89
|
+
commitDispatchTimeoutMs: number;
|
|
90
|
+
}
|
|
91
|
+
export declare class MutationQueue extends EventEmitter {
|
|
92
|
+
private static readonly DURABLE_REPLAY_WINDOW_MS;
|
|
93
|
+
private store;
|
|
94
|
+
private lastPermanentErrorSig?;
|
|
95
|
+
private _mutationExecutor;
|
|
96
|
+
private get mutationExecutor();
|
|
97
|
+
private readonly runtime;
|
|
98
|
+
/** Durable transaction journal owned by this queue, before commit sealing. */
|
|
99
|
+
private persistence;
|
|
100
|
+
private deferredMutations;
|
|
101
|
+
private pendingPersistenceStages;
|
|
102
|
+
private persistenceStageScheduled;
|
|
103
|
+
private pendingDrainPromise;
|
|
104
|
+
private executionQueue;
|
|
105
|
+
private isProcessing;
|
|
106
|
+
private processTimer?;
|
|
107
|
+
private processScheduled;
|
|
108
|
+
private createdTransactions;
|
|
109
|
+
private commitScheduled;
|
|
110
|
+
private inFlightByModel;
|
|
111
|
+
private pendingMergeByModel;
|
|
112
|
+
private deferredDeletesByCreate;
|
|
113
|
+
private commitLane;
|
|
114
|
+
private commitStore;
|
|
115
|
+
/**
|
|
116
|
+
* Small race buffer for authoritative echoes that arrive before the queued
|
|
117
|
+
* mutation receipt. The forward and WAL stream are independent channels, so
|
|
118
|
+
* either can win without changing the settlement result.
|
|
119
|
+
*/
|
|
120
|
+
private recentDeltaCorrelations;
|
|
121
|
+
/**
|
|
122
|
+
* Client-facing confirmation deadlines for source-forwarded writes. These
|
|
123
|
+
* timers settle only the caller waiting for `confirmed`; the accepted write
|
|
124
|
+
* remains in `awaiting_delta`, with its durable envelope intact, until the
|
|
125
|
+
* authoritative WAL echo arrives.
|
|
126
|
+
*/
|
|
127
|
+
private replicationLagTimeouts;
|
|
128
|
+
private replicationLagErrors;
|
|
129
|
+
private commitProcessing;
|
|
130
|
+
private lastCommitSequence;
|
|
131
|
+
private durableReplayBlock;
|
|
132
|
+
/** Browser-backed strict outbox; absent for standalone/in-memory consumers. */
|
|
133
|
+
private commitOutbox;
|
|
134
|
+
private commitOutboxScope;
|
|
135
|
+
private get commitTransportContext();
|
|
136
|
+
private get commitLaneContext();
|
|
137
|
+
private get commitReceiptContext();
|
|
138
|
+
private get commitApiContext();
|
|
139
|
+
private get modelMutationContext();
|
|
140
|
+
private get queueCoalescingContext();
|
|
141
|
+
private get batchProcessingContext();
|
|
142
|
+
private get failureHandlingContext();
|
|
143
|
+
private get conflictPolicyContext();
|
|
144
|
+
private get processingSchedulerContext();
|
|
145
|
+
private get pendingDrainContext();
|
|
146
|
+
private get durableCommitRestoreContext();
|
|
147
|
+
private get persistenceContext();
|
|
148
|
+
private nextCommitSequence;
|
|
149
|
+
private emitCommitLifecycle;
|
|
150
|
+
private assertDurableReplayOpen;
|
|
151
|
+
private assertEnvelopeInsideReplayWindow;
|
|
152
|
+
private computePriorityScore;
|
|
153
|
+
private ensureDerivedFields;
|
|
154
|
+
private entityKey;
|
|
155
|
+
/** Collision-safe receipt target identity across models sharing a row id. */
|
|
156
|
+
private receiptTargetKey;
|
|
157
|
+
/**
|
|
158
|
+
* Relates stale notifications back to write targets without assuming the
|
|
159
|
+
* server's canonical model name uses the same spelling as the public schema
|
|
160
|
+
* key (`Task` versus `tasks`). Exact `(model,id)` wins; a globally unique id
|
|
161
|
+
* is the compatibility fallback. An ambiguous same-id cross-model mismatch
|
|
162
|
+
* is deliberately left unclassified, so it cannot falsely settle a queued
|
|
163
|
+
* write. A notification with no write-target id (or an explicit group) is a
|
|
164
|
+
* declared-read conflict and holds the whole batch.
|
|
165
|
+
*/
|
|
166
|
+
private classifyReceiptNotifications;
|
|
167
|
+
private resolveConfirmation;
|
|
168
|
+
private takeUnsentCreateForModel;
|
|
169
|
+
private cancelUnsentCreateForDelete;
|
|
170
|
+
private findCreateBarrierForDelete;
|
|
171
|
+
private completeLocalDelete;
|
|
172
|
+
private deferDeleteUntilCreateSettles;
|
|
173
|
+
private releaseDeferredDeletesForCreate;
|
|
174
|
+
private config;
|
|
175
|
+
private executingCount;
|
|
176
|
+
private readonly localMutationPort;
|
|
177
|
+
private commitNotifications;
|
|
178
|
+
/** Zero-row targets returned on a successful atomic commit receipt. */
|
|
179
|
+
private commitMissingIds;
|
|
180
|
+
private readonly deltaConfirmation;
|
|
181
|
+
private isConnectedFn;
|
|
182
|
+
private commitOfflineGraceTimer;
|
|
183
|
+
/**
|
|
184
|
+
* This client's place in the global order of sync deltas. The instance is
|
|
185
|
+
* shared: the client injects one, and a standalone queue creates its own. The
|
|
186
|
+
* queue advances the `acked` cursor as commit responses arrive, the store
|
|
187
|
+
* advances `applied` and `persisted`, and snapshots and claims read
|
|
188
|
+
* `readFloor`. See `../logPosition.js` for the full contract.
|
|
189
|
+
*/
|
|
190
|
+
readonly position: LogPositionPort;
|
|
191
|
+
/** Applied-cursor alias, kept so the many internal read sites stay legible. */
|
|
192
|
+
private get lastSeenSyncId();
|
|
193
|
+
private noteAck;
|
|
194
|
+
private batchIndex;
|
|
195
|
+
/** Mints the request identity once; retry paths only read the stored value. */
|
|
196
|
+
private generateCommitIdempotencyKey;
|
|
197
|
+
/**
|
|
198
|
+
* Binds an ordered transaction batch to one wire-level idempotency key.
|
|
199
|
+
* Existing envelopes are validated and restored to their original order;
|
|
200
|
+
* they are never extended with newly queued work.
|
|
201
|
+
*/
|
|
202
|
+
private ensureCommitEnvelope;
|
|
203
|
+
/** Bind the strict local outbox used before any mutation reaches the wire. */
|
|
204
|
+
setCommitOutbox(outbox: DurableWriteStore): void;
|
|
205
|
+
setCommitOutboxScope(scope: CommitOutboxScope): Promise<void>;
|
|
206
|
+
deferMutation(type: 'create' | 'update' | 'delete' | 'archive', model: LocalModel, capturedChanges?: Record<string, unknown>, writeOptions?: WriteOptions): void;
|
|
207
|
+
enqueueModelMutation(type: 'create' | 'update' | 'delete' | 'archive', model: LocalModel, context: UserContext, capturedChanges?: Record<string, unknown>, writeOptions?: WriteOptions): Promise<QueuedMutation>;
|
|
208
|
+
/** Attach the durable journal supplied by the local/materializer layer. */
|
|
209
|
+
setPersistence(persistence: MutationPersistencePort): void;
|
|
210
|
+
private persistQueuedTransaction;
|
|
211
|
+
private persistAndStage;
|
|
212
|
+
private removePersistedTransaction;
|
|
213
|
+
private settlePersistedFailure;
|
|
214
|
+
private sourceMutationIdsFor;
|
|
215
|
+
/** Atomically seals a commit before it is allowed onto the dispatch lane. */
|
|
216
|
+
private sealDurableCommit;
|
|
217
|
+
private removeDurableCommit;
|
|
218
|
+
private persistDurableCommitAcceptance;
|
|
219
|
+
private parseMutationCommitResult;
|
|
220
|
+
private dispatchCommitBounded;
|
|
221
|
+
private clearReplicationLagState;
|
|
222
|
+
/**
|
|
223
|
+
* Bounds the public `wait: 'confirmed'` promise without changing the
|
|
224
|
+
* accepted write's lifecycle. A lag timeout is not a rejection from the
|
|
225
|
+
* source database, so it must never emit `transaction:failed`, roll back
|
|
226
|
+
* optimistic state, or remove the durable replay envelope.
|
|
227
|
+
*/
|
|
228
|
+
private scheduleReplicationLagTimeout;
|
|
229
|
+
private takeNextExecutionBatch;
|
|
230
|
+
private takePendingDrainBatch;
|
|
231
|
+
/**
|
|
232
|
+
* Resolvers for per-transaction `confirmation` promises. Populated in
|
|
233
|
+
* `attachConfirmation` at staging time, consumed by the constructor-time
|
|
234
|
+
* listeners on `transaction:completed` / `transaction:failed`. Kept off
|
|
235
|
+
* the QueuedMutation row so the store's iteration order stays plain-data
|
|
236
|
+
* and serialization-friendly.
|
|
237
|
+
*/
|
|
238
|
+
private confirmationResolvers;
|
|
239
|
+
constructor(config?: Partial<MutationQueueConfig>);
|
|
240
|
+
/**
|
|
241
|
+
* Returns the in-flight confirmation promise for a given model and id. When
|
|
242
|
+
* several transactions match, it returns the most recent one's promise; when
|
|
243
|
+
* none is open it resolves immediately, which covers both "already confirmed"
|
|
244
|
+
* and "never staged".
|
|
245
|
+
*
|
|
246
|
+
* It considers the three non-terminal statuses in which the write can still
|
|
247
|
+
* be rolled back — `pending`, `executing`, and `awaiting_delta` — and ignores
|
|
248
|
+
* `completed` (already settled) and `failed`/`rolled_back` (already
|
|
249
|
+
* rejected). This complements the `confirmation` promise carried on a known
|
|
250
|
+
* {@link QueuedMutation}: use this method at call sites that hold a model
|
|
251
|
+
* returned by `ablo.<model>.create()` but never see the underlying
|
|
252
|
+
* transaction.
|
|
253
|
+
*/
|
|
254
|
+
confirmationFor(modelName: string, modelId: string): Promise<void>;
|
|
255
|
+
/**
|
|
256
|
+
* Attaches a `confirmation` promise to a newly created transaction. Call this
|
|
257
|
+
* before the transaction is staged so a caller can `await tx.confirmation`
|
|
258
|
+
* immediately after a create, update, or delete returns. It is idempotent and
|
|
259
|
+
* returns early if one is already attached.
|
|
260
|
+
*
|
|
261
|
+
* It also attaches a no-op rejection handler. Most callers never await the
|
|
262
|
+
* confirmation, and without this the runtime would report an unhandled
|
|
263
|
+
* rejection when a write fails. Callers that do want to observe failure simply
|
|
264
|
+
* attach their own `.then`/`.catch`.
|
|
265
|
+
*/
|
|
266
|
+
private attachConfirmation;
|
|
267
|
+
/**
|
|
268
|
+
* Registers a predicate the queue uses to check whether it is connected.
|
|
269
|
+
* While disconnected, confirmation timeouts re-schedule themselves instead of
|
|
270
|
+
* escalating, so a transaction is never rolled back merely because the client
|
|
271
|
+
* was briefly offline.
|
|
272
|
+
*/
|
|
273
|
+
setConnectionChecker(fn: () => boolean): void;
|
|
274
|
+
/**
|
|
275
|
+
* Drives the offline-grace timer for in-flight commit-lane transactions.
|
|
276
|
+
*
|
|
277
|
+
* On `'disconnected'` it starts a one-shot timer of
|
|
278
|
+
* `config.commitOfflineGraceMs`. If that timer fires — meaning the disconnect
|
|
279
|
+
* outlasted the grace window — every commit-lane transaction still `pending`
|
|
280
|
+
* or `executing` is failed with an {@link AbloConnectionError}, so
|
|
281
|
+
* {@link waitForCommitReceipt} rejects within seconds instead of hanging.
|
|
282
|
+
*
|
|
283
|
+
* On `'connected'` it clears any pending grace timer. Brief disconnects are
|
|
284
|
+
* absorbed transparently; {@link processCommitLane} and
|
|
285
|
+
* {@link drainPending} resumes the work when the owner decides to drain.
|
|
286
|
+
*/
|
|
287
|
+
setConnectionState(state: 'connected' | 'disconnected'): void;
|
|
288
|
+
private failInFlightCommitsOnOffline;
|
|
289
|
+
/**
|
|
290
|
+
* Binds the mutation executor for this queue instance. The owning client
|
|
291
|
+
* calls this right after construction, so commits made here always dispatch
|
|
292
|
+
* through this instance's connection even when several client instances exist
|
|
293
|
+
* in the same process.
|
|
294
|
+
*/
|
|
295
|
+
setMutationExecutor(executor: import('../../interfaces/index.js').MutationExecutor): void;
|
|
296
|
+
/**
|
|
297
|
+
* Stages a transaction for commit. Transactions staged within the same
|
|
298
|
+
* event-loop tick are committed together.
|
|
299
|
+
*/
|
|
300
|
+
private stageTransaction;
|
|
301
|
+
/**
|
|
302
|
+
* Schedules the staged transactions to commit on a microtask, so all
|
|
303
|
+
* transactions created synchronously within one tick are batched together.
|
|
304
|
+
*/
|
|
305
|
+
private scheduleCommit;
|
|
306
|
+
/**
|
|
307
|
+
* Moves all staged transactions onto the execution queue, assigning them a
|
|
308
|
+
* single shared batch index so they commit together.
|
|
309
|
+
*/
|
|
310
|
+
private commitCreatedTransactions;
|
|
311
|
+
/**
|
|
312
|
+
* Flushes every pending transaction in one commit, the fast path taken on
|
|
313
|
+
* reconnect. If transport fails, the transactions retain this exact commit
|
|
314
|
+
* envelope when they fall back to normal queue processing.
|
|
315
|
+
*/
|
|
316
|
+
drainPending(): Promise<void>;
|
|
317
|
+
private drainPendingInternal;
|
|
318
|
+
create(model: LocalModel, context: UserContext, writeOptions?: WriteOptions, sourceMutationId?: string): Promise<QueuedMutation>;
|
|
319
|
+
update(model: LocalModel, context: UserContext, precomputedChanges?: Record<string, unknown>, writeOptions?: WriteOptions, sourceMutationId?: string): Promise<QueuedMutation>;
|
|
320
|
+
delete(model: LocalModel, context: UserContext, writeOptions?: WriteOptions, sourceMutationId?: string): Promise<QueuedMutation>;
|
|
321
|
+
uploadAttachment(_file: File, options: {
|
|
322
|
+
id: string;
|
|
323
|
+
[key: string]: unknown;
|
|
324
|
+
}, _context: UserContext): Promise<{
|
|
325
|
+
url: string;
|
|
326
|
+
} | null>;
|
|
327
|
+
batchUploadAttachments(_files: File[], items: {
|
|
328
|
+
id: string;
|
|
329
|
+
[key: string]: unknown;
|
|
330
|
+
}[], _context: UserContext): Promise<{
|
|
331
|
+
id: string;
|
|
332
|
+
url: string;
|
|
333
|
+
}[]>;
|
|
334
|
+
archive(model: LocalModel, context: UserContext, writeOptions?: WriteOptions, sourceMutationId?: string): Promise<QueuedMutation>;
|
|
335
|
+
unarchive(model: LocalModel, context: UserContext): Promise<QueuedMutation>;
|
|
336
|
+
private enqueue;
|
|
337
|
+
private scheduleProcessing;
|
|
338
|
+
private processBatch;
|
|
339
|
+
private rememberDeltaCorrelation;
|
|
340
|
+
private queuedCommitEchoSyncId;
|
|
341
|
+
private queuedCommitMatchesCorrelation;
|
|
342
|
+
private completeQueuedCommit;
|
|
343
|
+
/**
|
|
344
|
+
* Confirms awaiting writes. Hosted/anomaly receipts keep their sync-id
|
|
345
|
+
* threshold semantics; queued forwards require the exact server correlation.
|
|
346
|
+
*/
|
|
347
|
+
onDeltaReceived(syncId: number, _transactionId?: string, correlationId?: string): void;
|
|
348
|
+
private scheduleDeltaConfirmationTimeout;
|
|
349
|
+
/**
|
|
350
|
+
* Resolves once the given transaction is confirmed and rejects if it fails.
|
|
351
|
+
* The confirming delta's timeout is handled by
|
|
352
|
+
* {@link scheduleDeltaConfirmationTimeout}.
|
|
353
|
+
*/
|
|
354
|
+
waitForConfirmation(transactionId: string): Promise<void>;
|
|
355
|
+
hasClientMutationId(id: string): boolean;
|
|
356
|
+
/** Enqueues a pre-built atomic commit through the commit API coordinator. */
|
|
357
|
+
enqueueCommit(clientTxId: string, operations: CommitTransaction['operations'], options?: {
|
|
358
|
+
reads?: ReadDependency[] | null;
|
|
359
|
+
track?: TrackDependency[] | null;
|
|
360
|
+
}): Promise<void>;
|
|
361
|
+
private processCommitLane;
|
|
362
|
+
waitForCommitReceipt(clientTxId: string): Promise<{
|
|
363
|
+
lastSyncId: number;
|
|
364
|
+
notifications?: StaleNotification[];
|
|
365
|
+
missingIds?: string[];
|
|
366
|
+
}>;
|
|
367
|
+
private isReorderPayload;
|
|
368
|
+
private isPermanentError;
|
|
369
|
+
private isDefinitiveRejection;
|
|
370
|
+
private handleFailure;
|
|
371
|
+
handleConflict(transaction: QueuedMutation, serverData: MutationInput): Promise<void>;
|
|
372
|
+
private applyOptimisticCreate;
|
|
373
|
+
private applyOptimisticUpdate;
|
|
374
|
+
private applyOptimisticDelete;
|
|
375
|
+
private rollbackOptimistic;
|
|
376
|
+
private deserializeLegacyPendingMutation;
|
|
377
|
+
loadPersistedTransactions(persistence: MutationPersistencePort, sealedMutationIds?: ReadonlySet<string>): Promise<void>;
|
|
378
|
+
restoreDurableCommits(): Promise<Set<string>>;
|
|
379
|
+
private deserializeTransaction;
|
|
380
|
+
cancelTransactionsForModel(modelId: string, transactionType?: string): QueuedMutation[];
|
|
381
|
+
/**
|
|
382
|
+
* Cancels pending transactions for child rows that reference a deleted parent,
|
|
383
|
+
* used to cascade a parent deletion. The caller supplies the foreign-key
|
|
384
|
+
* relationship; this method performs the cancellation.
|
|
385
|
+
*
|
|
386
|
+
* @param childModelName - The child model type (for example 'Block').
|
|
387
|
+
* @param foreignKey - The foreign-key property name (for example 'sectionId').
|
|
388
|
+
* @param parentId - The deleted parent's id.
|
|
389
|
+
* @returns The number of transactions cancelled.
|
|
390
|
+
*/
|
|
391
|
+
cancelTransactionsByForeignKey(childModelName: string, foreignKey: string, parentId: string): number;
|
|
392
|
+
/**
|
|
393
|
+
* Returns the number of transactions still pending or executing.
|
|
394
|
+
*/
|
|
395
|
+
getOutstandingTransactionCount(): number;
|
|
396
|
+
getOutstandingTransactions(): readonly QueuedMutation[];
|
|
397
|
+
/** Generates a unique local transaction id. */
|
|
398
|
+
private generateId;
|
|
399
|
+
private mergeData;
|
|
400
|
+
private extractCreateData;
|
|
401
|
+
private mapChangesToInput;
|
|
402
|
+
private extractUpdateData;
|
|
403
|
+
private extractPreviousData;
|
|
404
|
+
/** Returns a snapshot of queue counts and the current configuration. */
|
|
405
|
+
getStats(): {
|
|
406
|
+
pending: number;
|
|
407
|
+
executing: number;
|
|
408
|
+
completed: number;
|
|
409
|
+
failed: number;
|
|
410
|
+
optimistic: number;
|
|
411
|
+
totalTransactions: number;
|
|
412
|
+
batchIndex: number;
|
|
413
|
+
config: {
|
|
414
|
+
/** Shared client position (see logPosition.ts). One per client. */
|
|
415
|
+
position?: LogPositionPort;
|
|
416
|
+
/** The owning client's runtime. Defaults to the module-global bridge. */
|
|
417
|
+
runtime?: RuntimeContext;
|
|
418
|
+
maxBatchSize: number;
|
|
419
|
+
batchDelay: number;
|
|
420
|
+
maxRetries: number;
|
|
421
|
+
conflictResolution: ConflictResolution;
|
|
422
|
+
enablePersistence: boolean;
|
|
423
|
+
enableOptimistic: boolean;
|
|
424
|
+
/** Local adapter for applying and rolling back local writes. */
|
|
425
|
+
localMutationPort?: LocalMutationPort;
|
|
426
|
+
maxExecutingTransactions: number;
|
|
427
|
+
deltaConfirmationTimeout: number;
|
|
428
|
+
/**
|
|
429
|
+
* Exponential backoff for retryable server responses (HTTP 429/503).
|
|
430
|
+
* `baseMs` is the first retry delay; each subsequent attempt doubles
|
|
431
|
+
* up to `capMs`. Final delay = min(capMs, baseMs * 2^(attempt-1)) +
|
|
432
|
+
* up to 100ms of jitter. Defaults: 200ms / 1500ms.
|
|
433
|
+
*/
|
|
434
|
+
retryBackoff: {
|
|
435
|
+
baseMs: number;
|
|
436
|
+
capMs: number;
|
|
437
|
+
};
|
|
438
|
+
/**
|
|
439
|
+
* How long, in milliseconds, to wait after the connection drops before
|
|
440
|
+
* failing any in-flight commit-lane transaction with an
|
|
441
|
+
* {@link AbloConnectionError}. Brief disconnects, such as a server restart
|
|
442
|
+
* or mobile network jitter, are absorbed transparently; only a disconnect
|
|
443
|
+
* that outlasts this window surfaces as a failure. Set it lower for
|
|
444
|
+
* interactive use (for example 10 seconds for chat) and higher for
|
|
445
|
+
* background batch work. Defaults to 30 seconds.
|
|
446
|
+
*
|
|
447
|
+
* Without this deadline, `commits.create({ wait: 'confirmed' })` would wait
|
|
448
|
+
* forever if the connection died while a commit was in flight.
|
|
449
|
+
*/
|
|
450
|
+
commitOfflineGraceMs: number;
|
|
451
|
+
/**
|
|
452
|
+
* How long, in milliseconds, to wait for the transport to acknowledge a
|
|
453
|
+
* dispatched commit before treating the silence as a retryable no-receipt
|
|
454
|
+
* failure. A transport that never answers — a half-open socket, a dropped
|
|
455
|
+
* response frame — would otherwise hold the commit in flight forever, and
|
|
456
|
+
* with it the client's staged-batch lock: every later write in the session
|
|
457
|
+
* queues silently behind the unanswered one. The envelope's idempotency key
|
|
458
|
+
* is stable across retries, so a commit the server DID apply before the
|
|
459
|
+
* timeout is deduplicated on the retry rather than double-applied.
|
|
460
|
+
* Defaults to 30 seconds. Set `0` to disable the bound.
|
|
461
|
+
*/
|
|
462
|
+
commitDispatchTimeoutMs: number;
|
|
463
|
+
};
|
|
464
|
+
};
|
|
465
|
+
/**
|
|
466
|
+
* Returns detailed internal state — pending, executing, and awaiting-delta
|
|
467
|
+
* transactions — to help diagnose delta-confirmation issues.
|
|
468
|
+
*/
|
|
469
|
+
getDebugInfo(): {
|
|
470
|
+
lastSeenSyncId: number;
|
|
471
|
+
awaitingDeltaCount: number;
|
|
472
|
+
awaitingDeltaTransactions: {
|
|
473
|
+
id: string;
|
|
474
|
+
type: "update" | "create" | "delete" | "archive" | "unarchive";
|
|
475
|
+
modelName: string;
|
|
476
|
+
modelId: string;
|
|
477
|
+
syncIdNeeded: number | undefined;
|
|
478
|
+
createdAt: number;
|
|
479
|
+
age: number;
|
|
480
|
+
}[];
|
|
481
|
+
pendingTransactions: {
|
|
482
|
+
id: string;
|
|
483
|
+
type: "update" | "create" | "delete" | "archive" | "unarchive";
|
|
484
|
+
modelName: string;
|
|
485
|
+
modelId: string;
|
|
486
|
+
}[];
|
|
487
|
+
executingTransactions: {
|
|
488
|
+
id: string;
|
|
489
|
+
type: "update" | "create" | "delete" | "archive" | "unarchive";
|
|
490
|
+
modelName: string;
|
|
491
|
+
modelId: string;
|
|
492
|
+
}[];
|
|
493
|
+
};
|
|
494
|
+
/** Merges the given options into the queue's configuration. */
|
|
495
|
+
setConfig(config: Partial<MutationQueueConfig>): void;
|
|
496
|
+
/**
|
|
497
|
+
* Re-emits an incoming sync delta on the `sync:delta` event for the store to
|
|
498
|
+
* apply. Because rows use stable ids, no id reconciliation is needed here.
|
|
499
|
+
*/
|
|
500
|
+
handleSyncDelta(delta: {
|
|
501
|
+
id: string;
|
|
502
|
+
modelName: string;
|
|
503
|
+
action: string;
|
|
504
|
+
data: any;
|
|
505
|
+
}): boolean;
|
|
506
|
+
/**
|
|
507
|
+
* Releases the queue's resources: rolls back outstanding optimistic updates,
|
|
508
|
+
* clears all timers and stored transactions, and removes event listeners.
|
|
509
|
+
*/
|
|
510
|
+
dispose(): void;
|
|
511
|
+
}
|