@abloatai/ablo 0.34.1 → 0.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +2 -1
- package/CHANGELOG.md +758 -5
- package/README.md +56 -502
- package/bin/ablo.cjs +39 -0
- package/dist/BaseSyncedStore.d.ts +176 -48
- package/dist/BaseSyncedStore.js +346 -214
- package/dist/Database.d.ts +17 -44
- package/dist/Database.js +96 -79
- package/dist/InstanceCache.d.ts +31 -6
- package/dist/InstanceCache.js +65 -30
- package/dist/LazyReferenceCollection.d.ts +3 -3
- package/dist/LazyReferenceCollection.js +4 -4
- package/dist/Model.d.ts +23 -13
- package/dist/Model.js +27 -17
- package/dist/ModelRegistry.d.ts +8 -4
- package/dist/ModelRegistry.js +20 -18
- package/dist/NetworkMonitor.d.ts +3 -1
- package/dist/NetworkMonitor.js +7 -5
- package/dist/{SyncEngineContext.d.ts → RuntimeContext.d.ts} +20 -13
- package/dist/{SyncEngineContext.js → RuntimeContext.js} +11 -12
- package/dist/SyncClient.d.ts +47 -47
- package/dist/SyncClient.js +215 -156
- package/dist/ai-sdk/coordinatedTool.d.ts +2 -2
- package/dist/ai-sdk/coordinatedTool.js +1 -1
- package/dist/ai-sdk/coordinationContext.d.ts +2 -2
- package/dist/ai-sdk/coordinationContext.js +1 -1
- package/dist/ai-sdk/wrap.d.ts +3 -3
- package/dist/ai-sdk/wrap.js +2 -2
- package/dist/auth/index.d.ts +1 -156
- package/dist/auth/index.js +8 -301
- package/dist/client/Ablo.d.ts +42 -287
- package/dist/client/Ablo.js +129 -963
- package/dist/client/abloClient.d.ts +309 -0
- package/dist/client/abloClient.js +13 -0
- package/dist/client/clientPrelude.d.ts +52 -0
- package/dist/client/clientPrelude.js +60 -0
- package/dist/client/consoleLogger.d.ts +2 -2
- package/dist/client/coreClient.d.ts +60 -0
- package/dist/client/coreClient.js +118 -0
- package/dist/client/createInternalComponents.d.ts +8 -4
- package/dist/client/createInternalComponents.js +17 -10
- package/dist/client/createModelProxy.d.ts +98 -373
- package/dist/client/createModelProxy.js +233 -139
- package/dist/client/humans.d.ts +69 -0
- package/dist/client/humans.js +78 -0
- package/dist/client/modelRegistration.d.ts +1 -1
- package/dist/client/modelRegistration.js +9 -9
- package/dist/client/options.d.ts +73 -17
- package/dist/client/reactiveEngine.d.ts +53 -0
- package/dist/client/reactiveEngine.js +688 -0
- package/dist/client/resourceTypes.d.ts +9 -250
- package/dist/client/resourceTypes.js +8 -5
- package/dist/client/schemaConfig.d.ts +4 -4
- package/dist/client/schemaConfig.js +6 -2
- package/dist/client/storeCluster.d.ts +47 -0
- package/dist/client/storeCluster.js +118 -0
- package/dist/client/storeLifecycle.d.ts +61 -0
- package/dist/client/storeLifecycle.js +231 -0
- package/dist/client/validateAbloOptions.d.ts +3 -2
- package/dist/client/validateAbloOptions.js +1 -1
- package/dist/client/wsMutationExecutor.d.ts +3 -3
- package/dist/client/wsMutationExecutor.js +3 -3
- package/dist/context.d.ts +22 -9
- package/dist/context.js +33 -9
- package/dist/coordination/ClaimLog.d.ts +26 -0
- package/dist/coordination/ClaimLog.js +32 -0
- package/dist/coordination/index.d.ts +1 -15
- package/dist/coordination/index.js +8 -31
- package/dist/core/index.d.ts +3 -3
- package/dist/core/index.js +2 -2
- package/dist/docs/catalog.d.ts +72 -0
- package/dist/docs/catalog.js +230 -0
- package/dist/docs/index.d.ts +10 -0
- package/dist/docs/index.js +10 -0
- package/dist/environment.d.ts +1 -40
- package/dist/environment.js +8 -37
- package/dist/index.d.ts +44 -36
- package/dist/index.js +30 -22
- package/dist/interfaces/index.d.ts +44 -134
- package/dist/keys/index.d.ts +1 -77
- package/dist/keys/index.js +8 -190
- package/dist/mutators/{RecordingTransaction.d.ts → RecordingMutation.d.ts} +4 -4
- package/dist/mutators/{RecordingTransaction.js → RecordingMutation.js} +2 -2
- package/dist/mutators/Transaction.d.ts +1 -1
- package/dist/mutators/Transaction.js +1 -1
- package/dist/mutators/UndoManager.d.ts +6 -6
- package/dist/mutators/UndoManager.js +5 -5
- package/dist/mutators/defineMutators.d.ts +3 -3
- package/dist/mutators/defineMutators.js +1 -1
- package/dist/mutators/inverseOp.js +2 -2
- package/dist/mutators/mutateActions.d.ts +3 -3
- package/dist/mutators/mutateActions.js +1 -1
- package/dist/mutators/readerActions.d.ts +1 -1
- package/dist/mutators/undoApply.d.ts +1 -1
- package/dist/mutators/undoApply.js +1 -1
- package/dist/policy/index.d.ts +2 -2
- package/dist/policy/index.js +1 -1
- package/dist/query/client.d.ts +5 -2
- package/dist/query/client.js +10 -9
- package/dist/query/types.d.ts +6 -41
- package/dist/query/types.js +2 -2
- package/dist/react/AbloProvider.d.ts +18 -8
- package/dist/react/AbloProvider.js +10 -9
- package/dist/react/context.d.ts +3 -3
- package/dist/react/context.js +1 -1
- package/dist/react/createAbloReact.d.ts +56 -0
- package/dist/react/createAbloReact.js +51 -0
- package/dist/react/index.d.ts +6 -5
- package/dist/react/index.js +6 -3
- package/dist/react/internalContext.d.ts +1 -1
- package/dist/react/useAblo.d.ts +12 -5
- package/dist/react/useAblo.js +26 -8
- package/dist/react/useCurrentUserId.js +1 -1
- package/dist/react/useErrorListener.js +1 -1
- package/dist/react/useMutationFailureListener.d.ts +2 -2
- package/dist/react/useMutationFailureListener.js +1 -1
- package/dist/react/useMutators.d.ts +3 -3
- package/dist/react/useMutators.js +3 -3
- package/dist/react/useUndoScope.d.ts +5 -5
- package/dist/react/useUndoScope.js +1 -1
- package/dist/schema/coordination.d.ts +69 -10
- package/dist/schema/coordination.js +90 -9
- package/dist/schema/ddl.js +2 -2
- package/dist/schema/diff.d.ts +1 -1
- package/dist/schema/generate.js +1 -1
- package/dist/schema/index.d.ts +11 -10
- package/dist/schema/index.js +22 -18
- package/dist/schema/queries.d.ts +27 -27
- package/dist/schema/queries.js +23 -23
- package/dist/schema/select.d.ts +3 -3
- package/dist/schema/select.js +6 -3
- package/dist/schema/serialize.d.ts +15 -6
- package/dist/schema/serialize.js +20 -3
- package/dist/schema/sugar.d.ts +6 -7
- package/dist/schema/sugar.js +9 -12
- package/dist/schema/syncDeltaRow.d.ts +4 -152
- package/dist/schema/syncDeltaRow.js +4 -105
- package/dist/server/adapter.d.ts +18 -1
- package/dist/server/commit.d.ts +10 -16
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/readConfig.d.ts +1 -1
- package/dist/source/adapter.d.ts +7 -5
- package/dist/source/adapter.js +7 -5
- package/dist/source/adapters/drizzle.d.ts +1 -1
- package/dist/source/adapters/drizzle.js +2 -2
- package/dist/source/adapters/kysely.d.ts +1 -1
- package/dist/source/adapters/kysely.js +1 -1
- package/dist/source/adapters/kyselyMutationCore.d.ts +1 -1
- package/dist/source/adapters/kyselyMutationCore.js +2 -2
- package/dist/source/adapters/memory.js +1 -1
- package/dist/source/adapters/prisma.d.ts +8 -3
- package/dist/source/adapters/prisma.js +1 -1
- package/dist/source/connector.js +1 -1
- package/dist/source/connectorProtocol.d.ts +2 -8
- package/dist/source/connectorProtocol.js +3 -2
- package/dist/source/contract.d.ts +29 -17
- package/dist/source/contract.js +27 -22
- package/dist/source/factory.d.ts +1 -1
- package/dist/source/idempotency.js +2 -2
- package/dist/source/index.d.ts +1 -0
- package/dist/source/index.js +3 -0
- package/dist/source/next.d.ts +1 -1
- package/dist/source/signing.d.ts +9 -2
- package/dist/source/signing.js +4 -1
- package/dist/source/types.d.ts +6 -4
- package/dist/source/types.js +1 -1
- package/dist/{core/storeContract.d.ts → storeContract.d.ts} +6 -6
- package/dist/{core → stores}/DatabaseManager.d.ts +3 -1
- package/dist/{core → stores}/DatabaseManager.js +14 -13
- package/dist/stores/ObjectStore.d.ts +1 -1
- package/dist/{core → stores}/StoreManager.d.ts +9 -26
- package/dist/{core → stores}/StoreManager.js +29 -77
- package/dist/stores/SyncActionStore.d.ts +4 -2
- package/dist/stores/SyncActionStore.js +11 -17
- package/dist/stores/syncAction.d.ts +26 -0
- package/dist/stores/syncAction.js +16 -0
- package/dist/surface.d.ts +3 -3
- package/dist/surface.js +6 -4
- package/dist/sync/BootstrapFetcher.d.ts +127 -6
- package/dist/sync/BootstrapFetcher.js +511 -83
- package/dist/sync/ConnectionManager.d.ts +6 -198
- package/dist/sync/ConnectionManager.js +6 -677
- package/dist/sync/OnDemandLoader.d.ts +5 -2
- package/dist/sync/OnDemandLoader.js +61 -21
- package/dist/sync/SubscriptionManager.d.ts +13 -2
- package/dist/sync/SubscriptionManager.js +23 -5
- package/dist/sync/SyncWebSocket.d.ts +27 -510
- package/dist/sync/SyncWebSocket.js +76 -954
- package/dist/sync/awaitClaimGrant.d.ts +4 -44
- package/dist/sync/awaitClaimGrant.js +4 -109
- package/dist/sync/bootstrapApply.d.ts +3 -0
- package/dist/sync/bootstrapApply.js +2 -2
- package/dist/sync/commitFrames.d.ts +6 -40
- package/dist/sync/commitFrames.js +6 -97
- package/dist/sync/contextPorts.d.ts +18 -0
- package/dist/sync/contextPorts.js +31 -0
- package/dist/sync/createClaimStream.d.ts +5 -49
- package/dist/sync/createClaimStream.js +5 -469
- package/dist/sync/createPresenceStream.d.ts +26 -4
- package/dist/sync/createPresenceStream.js +28 -20
- package/dist/sync/createSnapshot.d.ts +2 -2
- package/dist/sync/createSnapshot.js +1 -1
- package/dist/sync/credentialLifecycle.d.ts +5 -173
- package/dist/sync/credentialLifecycle.js +5 -320
- package/dist/sync/deltaPipeline.d.ts +13 -12
- package/dist/sync/deltaPipeline.js +21 -4
- package/dist/sync/groupChange.d.ts +3 -0
- package/dist/sync/groupChange.js +16 -14
- package/dist/sync/participants.d.ts +24 -6
- package/dist/sync/participants.js +32 -23
- package/dist/sync/schemaDrift.d.ts +55 -0
- package/dist/sync/schemaDrift.js +53 -0
- package/dist/sync/schemas.d.ts +23 -33
- package/dist/sync/schemas.js +29 -20
- package/dist/sync/syncPlan.d.ts +3 -3
- package/dist/sync/wsFrameHandlers.d.ts +6 -114
- package/dist/sync/wsFrameHandlers.js +6 -392
- package/dist/syncLog/contract.d.ts +20 -0
- package/dist/syncLog/contract.js +19 -0
- package/dist/syncLog/index.d.ts +1 -0
- package/dist/syncLog/index.js +1 -0
- package/dist/transaction/ablo.d.ts +88 -0
- package/dist/transaction/ablo.js +33 -0
- package/dist/{client/auth.d.ts → transaction/auth/apiKey.d.ts} +43 -8
- package/dist/{client/auth.js → transaction/auth/apiKey.js} +19 -0
- package/dist/transaction/auth/bootstrapScope.d.ts +15 -0
- package/dist/transaction/auth/bootstrapScope.js +1 -0
- package/dist/transaction/auth/capability.d.ts +212 -0
- package/dist/transaction/auth/capability.js +224 -0
- package/dist/{auth → transaction/auth}/credentialSource.d.ts +8 -1
- package/dist/{client → transaction/auth}/identity.d.ts +8 -7
- package/dist/{client → transaction/auth}/identity.js +1 -1
- package/dist/transaction/auth/index.d.ts +162 -0
- package/dist/transaction/auth/index.js +304 -0
- package/dist/{auth → transaction/auth}/schemas.d.ts +1 -1
- package/dist/{auth → transaction/auth}/schemas.js +13 -13
- package/dist/{client → transaction/auth}/sessionMint.d.ts +8 -8
- package/dist/{client → transaction/auth}/sessionMint.js +4 -7
- package/dist/transaction/coordination/awaitClaimGrant.d.ts +56 -0
- package/dist/transaction/coordination/awaitClaimGrant.js +124 -0
- package/dist/{client → transaction/coordination}/claimHeartbeatLoop.d.ts +34 -0
- package/dist/{client → transaction/coordination}/claimHeartbeatLoop.js +20 -0
- package/dist/transaction/coordination/claimMeta.d.ts +49 -0
- package/dist/transaction/coordination/claimMeta.js +52 -0
- package/dist/transaction/coordination/createClaimStream.d.ts +64 -0
- package/dist/transaction/coordination/createClaimStream.js +475 -0
- package/dist/transaction/coordination/events.d.ts +74 -0
- package/dist/transaction/coordination/events.js +7 -0
- package/dist/transaction/coordination/index.d.ts +19 -0
- package/dist/transaction/coordination/index.js +45 -0
- package/dist/transaction/coordination/locator.d.ts +104 -0
- package/dist/transaction/coordination/locator.js +102 -0
- package/dist/transaction/coordination/schema.d.ts +1536 -0
- package/dist/transaction/coordination/schema.js +1177 -0
- package/dist/transaction/coordination/targetConflict.d.ts +2 -0
- package/dist/transaction/coordination/targetConflict.js +107 -0
- package/dist/{coordination → transaction/coordination}/trace.d.ts +7 -18
- package/dist/{coordination → transaction/coordination}/trace.js +18 -25
- package/dist/transaction/durableWrites.d.ts +62 -0
- package/dist/{client → transaction}/durableWrites.js +28 -3
- package/dist/transaction/environment.d.ts +105 -0
- package/dist/transaction/environment.js +108 -0
- package/dist/{errorCodes.d.ts → transaction/errorCodes.d.ts} +12 -12
- package/dist/{errorCodes.js → transaction/errorCodes.js} +45 -18
- package/dist/{errors.d.ts → transaction/errors.d.ts} +37 -13
- package/dist/{errors.js → transaction/errors.js} +85 -16
- package/dist/transaction/footprint.d.ts +111 -0
- package/dist/transaction/footprint.js +0 -0
- package/dist/transaction/index.d.ts +20 -0
- package/dist/transaction/index.js +20 -0
- package/dist/transaction/keys/index.d.ts +87 -0
- package/dist/transaction/keys/index.js +207 -0
- package/dist/transaction/log/syncDeltaRow.d.ts +158 -0
- package/dist/transaction/log/syncDeltaRow.js +95 -0
- package/dist/{sync/syncPosition.d.ts → transaction/logPosition.d.ts} +22 -8
- package/dist/{sync/syncPosition.js → transaction/logPosition.js} +15 -6
- package/dist/transaction/logger.d.ts +16 -0
- package/dist/transaction/logger.js +7 -0
- package/dist/transaction/observability.d.ts +53 -0
- package/dist/transaction/observability.js +19 -0
- package/dist/transaction/plugin.d.ts +285 -0
- package/dist/transaction/plugin.js +106 -0
- package/dist/{policy → transaction/policy}/types.d.ts +3 -3
- package/dist/{policy → transaction/policy}/types.js +2 -0
- package/dist/transaction/resources/httpResources.d.ts +321 -0
- package/dist/transaction/resources/httpResources.js +7 -0
- package/dist/transaction/resources/modelOperations.d.ts +427 -0
- package/dist/transaction/resources/modelOperations.js +12 -0
- package/dist/transaction/resources/mutationOptions.d.ts +66 -0
- package/dist/transaction/resources/mutationOptions.js +9 -0
- package/dist/transaction/resources/where.d.ts +101 -0
- package/dist/transaction/resources/where.js +115 -0
- package/dist/{client → transaction/resources}/writeOptionsSchema.d.ts +2 -6
- package/dist/{client → transaction/resources}/writeOptionsSchema.js +9 -5
- package/dist/{schema → transaction/schema}/field.d.ts +17 -23
- package/dist/{schema → transaction/schema}/field.js +5 -5
- package/dist/transaction/schema/fieldRef.d.ts +38 -0
- package/dist/transaction/schema/fieldRef.js +11 -0
- package/dist/transaction/schema/loadStrategy.d.ts +45 -0
- package/dist/transaction/schema/loadStrategy.js +46 -0
- package/dist/{schema → transaction/schema}/model.d.ts +50 -35
- package/dist/{schema → transaction/schema}/model.js +30 -20
- package/dist/transaction/schema/openapi.d.ts +58 -0
- package/dist/transaction/schema/openapi.js +501 -0
- package/dist/{schema → transaction/schema}/relation.d.ts +21 -16
- package/dist/{schema → transaction/schema}/relation.js +7 -7
- package/dist/{schema → transaction/schema}/residency.d.ts +0 -9
- package/dist/{schema → transaction/schema}/residency.js +0 -5
- package/dist/{schema → transaction/schema}/roles.d.ts +5 -5
- package/dist/{schema → transaction/schema}/roles.js +5 -5
- package/dist/{schema → transaction/schema}/schema.d.ts +39 -10
- package/dist/{schema → transaction/schema}/schema.js +24 -3
- package/dist/{schema → transaction/schema}/tenancy.d.ts +1 -1
- package/dist/{schema → transaction/schema}/tenancy.js +7 -4
- package/dist/transaction/transactionLayer.d.ts +82 -0
- package/dist/transaction/transactionLayer.js +24 -0
- package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.d.ts +5 -6
- package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.js +9 -13
- package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.d.ts +9 -2
- package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.js +5 -9
- package/dist/{transactions/durableWriteStore.d.ts → transaction/transactions/settlement/pendingWrite.d.ts} +11 -37
- package/dist/transaction/transactions/settlement/pendingWrite.js +20 -0
- package/dist/transaction/transport/commitFrames.d.ts +90 -0
- package/dist/transaction/transport/commitFrames.js +134 -0
- package/dist/transaction/transport/connectionManager.d.ts +215 -0
- package/dist/transaction/transport/connectionManager.js +673 -0
- package/dist/transaction/transport/credentialLifecycle.d.ts +177 -0
- package/dist/transaction/transport/credentialLifecycle.js +324 -0
- package/dist/{sync → transaction/transport}/heartbeat.d.ts +3 -1
- package/dist/{sync → transaction/transport}/heartbeat.js +6 -4
- package/dist/transaction/transport/httpClient.d.ts +131 -0
- package/dist/{client → transaction/transport}/httpClient.js +6 -5
- package/dist/transaction/transport/httpOptions.d.ts +33 -0
- package/dist/transaction/transport/httpOptions.js +12 -0
- package/dist/{client → transaction/transport}/httpTransport.js +295 -97
- package/dist/{sync/NetworkProbe.d.ts → transaction/transport/networkProbe.d.ts} +7 -4
- package/dist/{sync/NetworkProbe.js → transaction/transport/networkProbe.js} +14 -13
- package/dist/transaction/transport/wsFrameHandlers.d.ts +128 -0
- package/dist/transaction/transport/wsFrameHandlers.js +429 -0
- package/dist/transaction/transport/wsTransport.d.ts +574 -0
- package/dist/transaction/transport/wsTransport.js +1023 -0
- package/dist/transaction/types/assertExact.d.ts +17 -0
- package/dist/transaction/types/assertExact.js +1 -0
- package/dist/{types → transaction/types}/global.d.ts +17 -2
- package/dist/{types → transaction/types}/global.js +2 -1
- package/dist/{types → transaction/types}/index.d.ts +14 -46
- package/dist/{types → transaction/types}/index.js +7 -16
- package/dist/{types → transaction/types}/streams.d.ts +73 -45
- package/dist/transaction/utils/duration.d.ts +50 -0
- package/dist/{utils → transaction/utils}/duration.js +32 -0
- package/dist/{utils → transaction/utils}/json.d.ts +18 -0
- package/dist/transaction/utils/json.js +276 -0
- package/dist/transaction/wire/accountResponses.d.ts +420 -0
- package/dist/transaction/wire/accountResponses.js +290 -0
- package/dist/transaction/wire/auth.d.ts +56 -0
- package/dist/transaction/wire/auth.js +63 -0
- package/dist/transaction/wire/claimEvent.d.ts +76 -0
- package/dist/transaction/wire/claimEvent.js +73 -0
- package/dist/transaction/wire/claims.d.ts +530 -0
- package/dist/transaction/wire/claims.js +327 -0
- package/dist/{wire → transaction/wire}/commit.d.ts +125 -193
- package/dist/{wire → transaction/wire}/commit.js +68 -47
- package/dist/{wire → transaction/wire}/delta.d.ts +66 -17
- package/dist/{wire → transaction/wire}/delta.js +37 -13
- package/dist/transaction/wire/errorEnvelope.d.ts +72 -0
- package/dist/{wire → transaction/wire}/errorEnvelope.js +36 -5
- package/dist/transaction/wire/feedCursor.d.ts +60 -0
- package/dist/transaction/wire/feedCursor.js +82 -0
- package/dist/transaction/wire/feedEvent.d.ts +204 -0
- package/dist/transaction/wire/feedEvent.js +65 -0
- package/dist/transaction/wire/frames.d.ts +194 -0
- package/dist/transaction/wire/frames.js +50 -0
- package/dist/transaction/wire/inboundFrames.d.ts +562 -0
- package/dist/transaction/wire/inboundFrames.js +116 -0
- package/dist/transaction/wire/index.d.ts +54 -0
- package/dist/transaction/wire/index.js +83 -0
- package/dist/{wire → transaction/wire}/listEnvelope.d.ts +13 -14
- package/dist/transaction/wire/listEnvelope.js +42 -0
- package/dist/transaction/wire/modelMutations.d.ts +31 -0
- package/dist/transaction/wire/modelMutations.js +52 -0
- package/dist/transaction/wire/modelResponses.d.ts +85 -0
- package/dist/transaction/wire/modelResponses.js +43 -0
- package/dist/transaction/wire/modelShape.d.ts +78 -0
- package/dist/transaction/wire/modelShape.js +74 -0
- package/dist/transactions/{TransactionQueue.d.ts → mutations/MutationQueue.d.ts} +85 -38
- package/dist/transactions/{TransactionQueue.js → mutations/MutationQueue.js} +141 -80
- package/dist/transactions/{TransactionStore.d.ts → mutations/MutationStore.d.ts} +8 -8
- package/dist/transactions/{TransactionStore.js → mutations/MutationStore.js} +2 -2
- package/dist/transactions/{coalesceRules.d.ts → mutations/coalesceRules.d.ts} +10 -10
- package/dist/transactions/{coalesceRules.js → mutations/coalesceRules.js} +1 -1
- package/dist/transactions/mutations/commitLatency.d.ts +52 -0
- package/dist/transactions/mutations/commitLatency.js +130 -0
- package/dist/transactions/{commitOutboxStore.d.ts → mutations/commitOutboxStore.d.ts} +1 -5
- package/dist/transactions/{commitOutboxStore.js → mutations/commitOutboxStore.js} +1 -1
- package/dist/transactions/{commitPayload.d.ts → mutations/commitPayload.d.ts} +18 -16
- package/dist/transactions/{commitPayload.js → mutations/commitPayload.js} +15 -15
- package/dist/transactions/{deltaConfirmation.d.ts → mutations/deltaConfirmation.d.ts} +15 -11
- package/dist/transactions/{deltaConfirmation.js → mutations/deltaConfirmation.js} +14 -12
- package/dist/transactions/mutations/durableWriteStore.d.ts +14 -0
- package/dist/transactions/mutations/durableWriteStore.js +12 -0
- package/dist/transactions/{optimisticApply.d.ts → mutations/optimisticApply.d.ts} +7 -7
- package/dist/transactions/{replayValidation.d.ts → mutations/replayValidation.d.ts} +4 -3
- package/dist/transactions/{replayValidation.js → mutations/replayValidation.js} +7 -5
- package/dist/utils/mobxSetup.d.ts +1 -1
- package/dist/utils/mobxSetup.js +5 -2
- package/dist/{core → views}/QueryView.d.ts +2 -2
- package/dist/{core → views}/QueryView.js +2 -2
- package/dist/{core → views}/ViewRegistry.d.ts +1 -1
- package/dist/{core/queryUtils.d.ts → views/incrementalView.d.ts} +6 -6
- package/dist/{core/queryUtils.js → views/incrementalView.js} +6 -6
- package/dist/webhooks/events.d.ts +2 -2
- package/dist/wire/index.d.ts +1 -34
- package/dist/wire/index.js +8 -49
- package/docs/agent-messaging.md +3 -3
- package/docs/agents.md +20 -13
- package/docs/api-keys.md +14 -10
- package/docs/api.md +27 -61
- package/docs/audit.md +6 -3
- package/docs/cli.md +41 -13
- package/docs/client-behavior.md +11 -9
- package/docs/concurrency-convention.md +49 -57
- package/docs/coordination.md +283 -121
- package/docs/data-sources.md +7 -5
- package/docs/debugging.md +39 -15
- package/docs/deployment.md +267 -0
- package/docs/examples/agent-human.md +49 -42
- package/docs/examples/ai-sdk-tool.md +69 -44
- package/docs/examples/existing-python-backend.md +8 -6
- package/docs/examples/nextjs.md +129 -47
- package/docs/examples/scoped-agent.md +46 -45
- package/docs/examples/server-agent.md +46 -26
- package/docs/groups.md +87 -30
- package/docs/guarantees.md +41 -12
- package/docs/how-it-works.md +38 -12
- package/docs/idempotency.md +126 -0
- package/docs/identity.md +77 -74
- package/docs/index.md +172 -86
- package/docs/integration-guide.md +31 -19
- package/docs/mcp.md +46 -21
- package/docs/migration.md +95 -18
- package/docs/operating-on-your-database.md +3 -1
- package/docs/projects.md +3 -1
- package/docs/quickstart.md +22 -5
- package/docs/react.md +31 -18
- package/docs/schema-contract.md +5 -3
- package/docs/session-settings.md +108 -0
- package/docs/sessions.md +4 -2
- package/docs/webhooks.md +12 -10
- package/llms.txt +48 -18
- package/package.json +21 -26
- package/dist/agent/Agent.d.ts +0 -366
- package/dist/agent/Agent.js +0 -514
- package/dist/agent/index.d.ts +0 -115
- package/dist/agent/index.js +0 -128
- package/dist/agent/session.d.ts +0 -93
- package/dist/agent/session.js +0 -149
- package/dist/agent/types.d.ts +0 -68
- package/dist/agent/types.js +0 -9
- package/dist/cli.cjs +0 -286329
- package/dist/client/durableWrites.d.ts +0 -21
- package/dist/client/httpClient.d.ts +0 -80
- package/dist/coordination/schema.d.ts +0 -722
- package/dist/coordination/schema.js +0 -578
- package/dist/schema/openapi.d.ts +0 -29
- package/dist/schema/openapi.js +0 -124
- package/dist/testing/fixtures/bootstrap.d.ts +0 -49
- package/dist/testing/fixtures/bootstrap.js +0 -59
- package/dist/testing/fixtures/deltas.d.ts +0 -83
- package/dist/testing/fixtures/deltas.js +0 -136
- package/dist/testing/fixtures/models.d.ts +0 -83
- package/dist/testing/fixtures/models.js +0 -272
- package/dist/testing/helpers/reactWrapper.d.ts +0 -69
- package/dist/testing/helpers/reactWrapper.js +0 -67
- package/dist/testing/helpers/syncEngineHarness.d.ts +0 -54
- package/dist/testing/helpers/syncEngineHarness.js +0 -73
- package/dist/testing/helpers/wait.d.ts +0 -30
- package/dist/testing/helpers/wait.js +0 -49
- package/dist/testing/index.d.ts +0 -23
- package/dist/testing/index.js +0 -33
- package/dist/testing/mocks/FakeDatabase.d.ts +0 -18
- package/dist/testing/mocks/FakeDatabase.js +0 -10
- package/dist/testing/mocks/MockMutationExecutor.d.ts +0 -87
- package/dist/testing/mocks/MockMutationExecutor.js +0 -192
- package/dist/testing/mocks/MockNetworkMonitor.d.ts +0 -20
- package/dist/testing/mocks/MockNetworkMonitor.js +0 -46
- package/dist/testing/mocks/MockSyncContext.d.ts +0 -51
- package/dist/testing/mocks/MockSyncContext.js +0 -71
- package/dist/testing/mocks/MockSyncStore.d.ts +0 -88
- package/dist/testing/mocks/MockSyncStore.js +0 -171
- package/dist/testing/mocks/MockWebSocket.d.ts +0 -71
- package/dist/testing/mocks/MockWebSocket.js +0 -118
- package/dist/transactions/durableWriteStore.js +0 -30
- package/dist/utils/duration.d.ts +0 -25
- package/dist/utils/json.js +0 -88
- package/dist/wire/errorEnvelope.d.ts +0 -55
- package/dist/wire/frames.d.ts +0 -197
- package/dist/wire/frames.js +0 -49
- package/dist/wire/listEnvelope.js +0 -18
- package/docs/interaction-model.md +0 -97
- /package/dist/{core → query}/QueryProcessor.d.ts +0 -0
- /package/dist/{core → query}/QueryProcessor.js +0 -0
- /package/dist/{core/storeContract.js → storeContract.js} +0 -0
- /package/dist/{core → stores}/openIDBWithTimeout.d.ts +0 -0
- /package/dist/{core → stores}/openIDBWithTimeout.js +0 -0
- /package/dist/{client → transaction/auth}/credentialEndpoint.d.ts +0 -0
- /package/dist/{client → transaction/auth}/credentialEndpoint.js +0 -0
- /package/dist/{auth → transaction/auth}/credentialPolicy.d.ts +0 -0
- /package/dist/{auth → transaction/auth}/credentialPolicy.js +0 -0
- /package/dist/{auth → transaction/auth}/credentialSource.js +0 -0
- /package/dist/{client → transaction/auth}/hostedEndpoints.d.ts +0 -0
- /package/dist/{client → transaction/auth}/hostedEndpoints.js +0 -0
- /package/dist/{client → transaction}/persistence.d.ts +0 -0
- /package/dist/{client → transaction}/persistence.js +0 -0
- /package/dist/{client → transaction/resources}/functionalUpdate.d.ts +0 -0
- /package/dist/{client → transaction/resources}/functionalUpdate.js +0 -0
- /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.d.ts +0 -0
- /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.js +0 -0
- /package/dist/{client → transaction/transport}/httpTransport.d.ts +0 -0
- /package/dist/{types → transaction/types}/modelData.d.ts +0 -0
- /package/dist/{types → transaction/types}/modelData.js +0 -0
- /package/dist/{types → transaction/types}/participant.d.ts +0 -0
- /package/dist/{types → transaction/types}/participant.js +0 -0
- /package/dist/{types → transaction/types}/streams.js +0 -0
- /package/dist/{utils → transaction/utils}/asyncIterator.d.ts +0 -0
- /package/dist/{utils → transaction/utils}/asyncIterator.js +0 -0
- /package/dist/{wire → transaction/wire}/bootstrapReason.d.ts +0 -0
- /package/dist/{wire → transaction/wire}/bootstrapReason.js +0 -0
- /package/dist/{wire → transaction/wire}/protocol.d.ts +0 -0
- /package/dist/{wire → transaction/wire}/protocol.js +0 -0
- /package/dist/{wire → transaction/wire}/protocolVersion.d.ts +0 -0
- /package/dist/{wire → transaction/wire}/protocolVersion.js +0 -0
- /package/dist/transactions/{UnconfirmedWrites.d.ts → mutations/UnconfirmedWrites.d.ts} +0 -0
- /package/dist/transactions/{UnconfirmedWrites.js → mutations/UnconfirmedWrites.js} +0 -0
- /package/dist/transactions/{optimisticApply.js → mutations/optimisticApply.js} +0 -0
- /package/dist/{core → views}/ViewRegistry.js +0 -0
package/dist/NetworkMonitor.d.ts
CHANGED
|
@@ -6,10 +6,12 @@
|
|
|
6
6
|
* firing, so returning to the tab emits a recovery signal the store can act on.
|
|
7
7
|
*/
|
|
8
8
|
import { EventEmitter } from 'events';
|
|
9
|
+
import type { RuntimeContext } from './RuntimeContext.js';
|
|
9
10
|
export declare class NetworkMonitor extends EventEmitter {
|
|
11
|
+
private readonly runtime;
|
|
10
12
|
private isOnline;
|
|
11
13
|
private lastOnlineCheck;
|
|
12
|
-
constructor();
|
|
14
|
+
constructor(runtime?: RuntimeContext);
|
|
13
15
|
private handleOnline;
|
|
14
16
|
private handleOffline;
|
|
15
17
|
/**
|
package/dist/NetworkMonitor.js
CHANGED
|
@@ -6,15 +6,17 @@
|
|
|
6
6
|
* firing, so returning to the tab emits a recovery signal the store can act on.
|
|
7
7
|
*/
|
|
8
8
|
import { EventEmitter } from 'events';
|
|
9
|
-
import {
|
|
9
|
+
import { globalRuntime } from './context.js';
|
|
10
10
|
export class NetworkMonitor extends EventEmitter {
|
|
11
|
+
runtime;
|
|
11
12
|
// Only `navigator.onLine === false` means offline. Node 18+ exposes a global
|
|
12
13
|
// `navigator` with `onLine === undefined`, so the naive `navigator.onLine`
|
|
13
14
|
// would seed `false` (offline) on every server client — start optimistic.
|
|
14
15
|
isOnline = !(typeof navigator !== 'undefined' && navigator.onLine === false);
|
|
15
16
|
lastOnlineCheck = new Date();
|
|
16
|
-
constructor() {
|
|
17
|
+
constructor(runtime = globalRuntime) {
|
|
17
18
|
super();
|
|
19
|
+
this.runtime = runtime;
|
|
18
20
|
this.setupListeners();
|
|
19
21
|
}
|
|
20
22
|
handleOnline = () => {
|
|
@@ -22,7 +24,7 @@ export class NetworkMonitor extends EventEmitter {
|
|
|
22
24
|
this.isOnline = true;
|
|
23
25
|
this.lastOnlineCheck = new Date();
|
|
24
26
|
if (wasOffline) {
|
|
25
|
-
|
|
27
|
+
this.runtime.logger.info('Network connection restored');
|
|
26
28
|
this.emit('online');
|
|
27
29
|
}
|
|
28
30
|
};
|
|
@@ -32,7 +34,7 @@ export class NetworkMonitor extends EventEmitter {
|
|
|
32
34
|
if (wasOnline) {
|
|
33
35
|
// Symmetric with 'Network connection restored' (info) — expected,
|
|
34
36
|
// transient connectivity state, not an actionable warning.
|
|
35
|
-
|
|
37
|
+
this.runtime.logger.info('Network connection lost');
|
|
36
38
|
this.emit('offline');
|
|
37
39
|
}
|
|
38
40
|
};
|
|
@@ -49,7 +51,7 @@ export class NetworkMonitor extends EventEmitter {
|
|
|
49
51
|
this.isOnline = navigator.onLine;
|
|
50
52
|
this.lastOnlineCheck = new Date();
|
|
51
53
|
if (this.isOnline) {
|
|
52
|
-
|
|
54
|
+
this.runtime.logger.info('Tab became visible with network available — emitting visibility_online');
|
|
53
55
|
this.emit('visibility_online');
|
|
54
56
|
}
|
|
55
57
|
};
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* RuntimeContext — Runtime dependency container
|
|
3
3
|
*
|
|
4
4
|
* All SDK classes receive this context at construction time.
|
|
5
5
|
* It bundles every injectable dependency so constructors stay clean.
|
|
6
6
|
*/
|
|
7
|
-
import type {
|
|
8
|
-
|
|
7
|
+
import type { Logger, ObservabilityProvider, Analytics, SessionErrorDetector, OnlineStatusProvider, ModelDebugLoggerContract, MutationExecutor, RuntimeConfig } from './interfaces/index.js';
|
|
8
|
+
import type { ModelMetadata } from './transaction/types/index.js';
|
|
9
|
+
export interface RuntimeContext {
|
|
9
10
|
/** Structured logger */
|
|
10
|
-
logger:
|
|
11
|
+
logger: Logger;
|
|
11
12
|
/** Error tracking & performance monitoring */
|
|
12
|
-
observability:
|
|
13
|
+
observability: ObservabilityProvider;
|
|
13
14
|
/** Product analytics (optional) */
|
|
14
|
-
analytics?:
|
|
15
|
+
analytics?: Analytics;
|
|
15
16
|
/** Session error detection for auth redirect decisions */
|
|
16
17
|
sessionErrorDetector: SessionErrorDetector;
|
|
17
18
|
/** Network connectivity detection */
|
|
@@ -21,17 +22,23 @@ export interface SyncEngineContext {
|
|
|
21
22
|
/** Backend mutation transport (GraphQL, REST, etc.) */
|
|
22
23
|
mutationExecutor: MutationExecutor;
|
|
23
24
|
/** Application-specific sync configuration */
|
|
24
|
-
config:
|
|
25
|
+
config: RuntimeConfig;
|
|
26
|
+
/**
|
|
27
|
+
* Model metadata lookup. Injected by the client (it wires this from its
|
|
28
|
+
* `ModelRegistry`) so the settlement core can resolve a model's metadata
|
|
29
|
+
* without importing the registry — the dependency inversion that keeps the
|
|
30
|
+
* core free of the client's `Model` layer (ADR 0013).
|
|
31
|
+
*/
|
|
32
|
+
getModelMetadata: (name: string) => ModelMetadata | undefined;
|
|
25
33
|
}
|
|
26
|
-
|
|
27
|
-
export declare const noopLogger: SyncLogger;
|
|
34
|
+
export { noopLogger } from './transaction/logger.js';
|
|
28
35
|
/** No-op observability — silently discards all observability calls */
|
|
29
|
-
export declare const noopObservability:
|
|
36
|
+
export declare const noopObservability: ObservabilityProvider;
|
|
30
37
|
/** No-op analytics — silently discards all analytics calls */
|
|
31
|
-
export declare const noopAnalytics:
|
|
38
|
+
export declare const noopAnalytics: Analytics;
|
|
32
39
|
/** Browser-native online status provider */
|
|
33
40
|
export declare const browserOnlineStatus: OnlineStatusProvider;
|
|
34
|
-
/** Session error detector — delegates to
|
|
41
|
+
/** Session error detector — delegates to AbloSessionError so detection is
|
|
35
42
|
* code-aware (only genuine session/JWT expiry counts), not a blunt 401/403. */
|
|
36
43
|
export declare const defaultSessionErrorDetector: SessionErrorDetector;
|
|
37
44
|
/**
|
|
@@ -42,4 +49,4 @@ export declare const defaultSessionErrorDetector: SessionErrorDetector;
|
|
|
42
49
|
* never exercise FK ordering; consumers who do rely on it should finish
|
|
43
50
|
* wiring the engine before the first `create()` fires.
|
|
44
51
|
*/
|
|
45
|
-
export declare const emptyConfig:
|
|
52
|
+
export declare const emptyConfig: RuntimeConfig;
|
|
@@ -1,27 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* RuntimeContext — Runtime dependency container
|
|
3
3
|
*
|
|
4
4
|
* All SDK classes receive this context at construction time.
|
|
5
5
|
* It bundles every injectable dependency so constructors stay clean.
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
7
|
+
import { AbloSessionError } from './transaction/errors.js';
|
|
8
8
|
// ─────────────────────────────────────────────
|
|
9
9
|
// No-op defaults for optional dependencies
|
|
10
10
|
// ─────────────────────────────────────────────
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
};
|
|
11
|
+
// Re-exported, not redeclared. `@ablo/transaction/logger` owns the no-op that
|
|
12
|
+
// sits beside the `Logger` port. This package held a second, behaviourally
|
|
13
|
+
// identical copy, and half of it imported the canonical one while the other
|
|
14
|
+
// half imported this — so any change of semantics there would have reached
|
|
15
|
+
// only one side, invisibly, because the identifier reads the same at both.
|
|
16
|
+
export { noopLogger } from './transaction/logger.js';
|
|
18
17
|
/** No-op observability — silently discards all observability calls */
|
|
19
18
|
export const noopObservability = {
|
|
20
19
|
setContext() { },
|
|
21
20
|
setConnectionState() { },
|
|
22
21
|
breadcrumb() { },
|
|
23
22
|
captureRollback() { },
|
|
24
|
-
|
|
23
|
+
captureMutationFailure() { },
|
|
25
24
|
captureBootstrapFailure() { },
|
|
26
25
|
captureReconciliation() { },
|
|
27
26
|
captureDeltaRetryExhausted() { },
|
|
@@ -51,7 +50,7 @@ export const browserOnlineStatus = {
|
|
|
51
50
|
return !(typeof navigator !== 'undefined' && navigator.onLine === false);
|
|
52
51
|
},
|
|
53
52
|
};
|
|
54
|
-
/** Session error detector — delegates to
|
|
53
|
+
/** Session error detector — delegates to AbloSessionError so detection is
|
|
55
54
|
* code-aware (only genuine session/JWT expiry counts), not a blunt 401/403. */
|
|
56
55
|
export const defaultSessionErrorDetector = {
|
|
57
56
|
isSessionError(error) {
|
|
@@ -61,7 +60,7 @@ export const defaultSessionErrorDetector = {
|
|
|
61
60
|
return false;
|
|
62
61
|
},
|
|
63
62
|
isSessionErrorResponse(status, body) {
|
|
64
|
-
return
|
|
63
|
+
return AbloSessionError.isSessionErrorResponse(status, body);
|
|
65
64
|
},
|
|
66
65
|
};
|
|
67
66
|
/**
|
package/dist/SyncClient.d.ts
CHANGED
|
@@ -4,18 +4,21 @@
|
|
|
4
4
|
* optimistic changes, holds them while the client is offline, sends them to
|
|
5
5
|
* the server when connectivity returns, and resolves conflicts when the
|
|
6
6
|
* server's version of a row disagrees with the local one. It sits between the
|
|
7
|
-
* reactive object pool and the {@link
|
|
7
|
+
* reactive object pool and the {@link MutationQueue} that delivers writes
|
|
8
8
|
* over the network.
|
|
9
9
|
*/
|
|
10
10
|
import { InstanceCache } from './InstanceCache.js';
|
|
11
11
|
import { Model } from './Model.js';
|
|
12
|
+
import type { AppliedChange } from './transaction/plugin.js';
|
|
13
|
+
import type { RuntimeContext } from './RuntimeContext.js';
|
|
12
14
|
import { EventEmitter } from 'events';
|
|
13
|
-
import {
|
|
14
|
-
import { type
|
|
15
|
+
import { MutationQueue } from './transactions/mutations/MutationQueue.js';
|
|
16
|
+
import { type CommitLatencySample } from './transactions/mutations/commitLatency.js';
|
|
17
|
+
import { type UnconfirmedWritesMetrics } from './transactions/mutations/UnconfirmedWrites.js';
|
|
15
18
|
import type { Database } from './Database.js';
|
|
16
19
|
import type { WriteOptions } from './interfaces/index.js';
|
|
17
|
-
import {
|
|
18
|
-
import type { DurableWriteStore } from './transactions/durableWriteStore.js';
|
|
20
|
+
import { LogPosition } from './transaction/logPosition.js';
|
|
21
|
+
import type { DurableWriteStore } from './transactions/mutations/durableWriteStore.js';
|
|
19
22
|
interface SyncObserver {
|
|
20
23
|
onSync?: (event: SyncEvent) => void;
|
|
21
24
|
}
|
|
@@ -41,6 +44,7 @@ export interface RehydrationStats {
|
|
|
41
44
|
elapsedMs: number;
|
|
42
45
|
}
|
|
43
46
|
export declare class SyncClient extends EventEmitter {
|
|
47
|
+
private readonly runtime;
|
|
44
48
|
private objectPool;
|
|
45
49
|
private database;
|
|
46
50
|
private get mutationExecutor();
|
|
@@ -71,12 +75,12 @@ export declare class SyncClient extends EventEmitter {
|
|
|
71
75
|
private isDisposed;
|
|
72
76
|
/**
|
|
73
77
|
* The client's position in the global delta order, held as the single
|
|
74
|
-
* canonical {@link
|
|
78
|
+
* canonical {@link LogPosition} instance. The store advances `applied` and
|
|
75
79
|
* `persisted` as deltas land, the queue advances `acked` on commit
|
|
76
80
|
* responses, and snapshots and claims read `readFloor`.
|
|
77
81
|
*/
|
|
78
|
-
readonly position:
|
|
79
|
-
constructor(objectPool: InstanceCache, database: Database, commitOutbox?: DurableWriteStore, commitOutboxNamespace?: string);
|
|
82
|
+
readonly position: LogPosition;
|
|
83
|
+
constructor(objectPool: InstanceCache, database: Database, commitOutbox?: DurableWriteStore, commitOutboxNamespace?: string, runtime?: RuntimeContext);
|
|
80
84
|
/**
|
|
81
85
|
* Setup network monitoring handlers
|
|
82
86
|
*/
|
|
@@ -98,13 +102,13 @@ export declare class SyncClient extends EventEmitter {
|
|
|
98
102
|
* discard the optimistic state silently.
|
|
99
103
|
*
|
|
100
104
|
* Treating both paths the same caused the deletion-flicker bug: every
|
|
101
|
-
* cancelled update on a multi-
|
|
105
|
+
* cancelled update on a multi-child record fired a per-model observer
|
|
102
106
|
* event and a `[SyncClient.rollback]` warn, producing N renders and N
|
|
103
107
|
* spam log lines for one user-initiated delete.
|
|
104
108
|
*/
|
|
105
109
|
private setupTransactionRollbackHandling;
|
|
106
110
|
/**
|
|
107
|
-
* Forward reconciliation requests from the {@link
|
|
111
|
+
* Forward reconciliation requests from the {@link MutationQueue} to the
|
|
108
112
|
* sync layer. When delta confirmation times out, the queue emits
|
|
109
113
|
* `reconciliation:needed` instead of rolling back, so optimistic state the
|
|
110
114
|
* server may already have committed is never destroyed.
|
|
@@ -145,7 +149,7 @@ export declare class SyncClient extends EventEmitter {
|
|
|
145
149
|
* 2. **Required-field gate** — if the row is missing any field listed
|
|
146
150
|
* in the model's `requiredFields`, return `null` so the caller
|
|
147
151
|
* skips this record. Used for FK columns whose absence renders the
|
|
148
|
-
* row unrecoverable (e.g. a
|
|
152
|
+
* row unrecoverable (e.g. a Block with no sectionId).
|
|
149
153
|
*
|
|
150
154
|
* The engine itself is product-neutral: model identity (which fields
|
|
151
155
|
* to back-fill, which absences are fatal) lives entirely in the
|
|
@@ -196,10 +200,10 @@ export declare class SyncClient extends EventEmitter {
|
|
|
196
200
|
/**
|
|
197
201
|
* Update existing model with pre-computed changes.
|
|
198
202
|
* Used by saveManyOptimized when incoming models have empty change-tracking
|
|
199
|
-
* (e.g. freshly constructed
|
|
203
|
+
* (e.g. freshly constructed cell models from a bulk document decomposition).
|
|
200
204
|
*/
|
|
201
205
|
updateWithChanges(model: Model, changes?: Record<string, unknown>): void;
|
|
202
|
-
/** Expose the GraphQL client for atomic mutations (e.g.,
|
|
206
|
+
/** Expose the GraphQL client for atomic mutations (e.g., createSectionWithBlocks).
|
|
203
207
|
* Used by SyncedStore for operations that bypass the transaction queue
|
|
204
208
|
* but still need optimistic pool updates at the sync layer. */
|
|
205
209
|
get gql(): import("./interfaces/index.js").MutationExecutor;
|
|
@@ -207,12 +211,12 @@ export declare class SyncClient extends EventEmitter {
|
|
|
207
211
|
delete(model: Model, options?: WriteOptions): void;
|
|
208
212
|
/**
|
|
209
213
|
* Clear all pending mutations for a specific model
|
|
210
|
-
* Called before deletion to prevent "
|
|
214
|
+
* Called before deletion to prevent "record not found" errors on the server
|
|
211
215
|
*/
|
|
212
216
|
private clearPendingMutationsForModel;
|
|
213
217
|
/**
|
|
214
218
|
* Upload a file and create its attachment record. The upload runs through
|
|
215
|
-
* the {@link
|
|
219
|
+
* the {@link MutationQueue}, and a model is built from the server's
|
|
216
220
|
* response and added to the pool.
|
|
217
221
|
*/
|
|
218
222
|
uploadFile(file: File, options: {
|
|
@@ -246,7 +250,7 @@ export declare class SyncClient extends EventEmitter {
|
|
|
246
250
|
* IndexedDB persistence and the server push are deferred to a microtask, so
|
|
247
251
|
* many pushes within the same tick collapse into a single serialization and
|
|
248
252
|
* a single process call. Without the deferral, queueing a hundred mutations
|
|
249
|
-
* at once — a large paste, a document import, bulk
|
|
253
|
+
* at once — a large paste, a document import, bulk row creation — would
|
|
250
254
|
* reserialize the whole growing queue a hundred times, an O(N²) cost in
|
|
251
255
|
* `model.toJSON()`.
|
|
252
256
|
*
|
|
@@ -275,11 +279,11 @@ export declare class SyncClient extends EventEmitter {
|
|
|
275
279
|
*
|
|
276
280
|
* Best Practice: Only sync models that still exist locally (local-first principle)
|
|
277
281
|
* - If a model was deleted locally → skip any pending updates/creates for it
|
|
278
|
-
* - This prevents "
|
|
282
|
+
* - This prevents "record not found" errors from fast copy-paste-delete workflows
|
|
279
283
|
*/
|
|
280
284
|
processPendingMutations(): Promise<void>;
|
|
281
285
|
/**
|
|
282
|
-
* Stage mutation to
|
|
286
|
+
* Stage mutation to MutationQueue - mutations in same tick are batched via microtask
|
|
283
287
|
*
|
|
284
288
|
* @param mutation.capturedChanges - Pre-captured changes to use instead of re-reading from model
|
|
285
289
|
*/
|
|
@@ -347,7 +351,7 @@ export declare class SyncClient extends EventEmitter {
|
|
|
347
351
|
*/
|
|
348
352
|
dispose(): void;
|
|
349
353
|
/**
|
|
350
|
-
* Notify the {@link
|
|
354
|
+
* Notify the {@link MutationQueue} of an incoming delta so it can confirm
|
|
351
355
|
* hosted writes by sync-id threshold and queued forwards by their echoed
|
|
352
356
|
* source-batch correlation id.
|
|
353
357
|
* @param syncId - The sync id of the received delta.
|
|
@@ -360,15 +364,15 @@ export declare class SyncClient extends EventEmitter {
|
|
|
360
364
|
* deletion. The store calls this when a delete delta arrives for a parent,
|
|
361
365
|
* cancelling any queued writes on children that reference it.
|
|
362
366
|
*
|
|
363
|
-
* @param childModelName - The child model type (for example, `
|
|
364
|
-
* @param foreignKey - The foreign-key property name (for example, `
|
|
367
|
+
* @param childModelName - The child model type (for example, `Block`).
|
|
368
|
+
* @param foreignKey - The foreign-key property name (for example, `sectionId`).
|
|
365
369
|
* @param parentId - The id of the deleted parent.
|
|
366
370
|
* @returns The number of transactions cancelled.
|
|
367
371
|
*/
|
|
368
372
|
cancelTransactionsByForeignKey(childModelName: string, foreignKey: string, parentId: string): number;
|
|
369
373
|
/**
|
|
370
374
|
* Wait for a transaction to be confirmed by its delta echo. Delegates to the
|
|
371
|
-
* {@link
|
|
375
|
+
* {@link MutationQueue}, which handles the confirmation timeout.
|
|
372
376
|
*/
|
|
373
377
|
waitForDeltaConfirmation(transactionId: string): Promise<void>;
|
|
374
378
|
/**
|
|
@@ -386,7 +390,7 @@ export declare class SyncClient extends EventEmitter {
|
|
|
386
390
|
objectPoolStats: ReturnType<InstanceCache['getStats']>;
|
|
387
391
|
};
|
|
388
392
|
/**
|
|
389
|
-
* Get pending transaction count from
|
|
393
|
+
* Get pending transaction count from MutationQueue
|
|
390
394
|
* Used by SyncedStore to compute hasUnsyncedChanges
|
|
391
395
|
*/
|
|
392
396
|
getPendingTransactionCount(): number;
|
|
@@ -397,7 +401,7 @@ export declare class SyncClient extends EventEmitter {
|
|
|
397
401
|
onTransactionEvent(event: 'created' | 'completed' | 'failed', callback: () => void): () => void;
|
|
398
402
|
/**
|
|
399
403
|
* Subscribe to mutation failures with the full payload. Mirrors the
|
|
400
|
-
* underlying
|
|
404
|
+
* underlying MutationQueue 'transaction:failed' shape so consumers
|
|
401
405
|
* can render typed UI (toast keyed by `AbloError.type`, route-level
|
|
402
406
|
* "this entity reverted" boundaries, telemetry).
|
|
403
407
|
*
|
|
@@ -407,28 +411,37 @@ export declare class SyncClient extends EventEmitter {
|
|
|
407
411
|
* this typed listener drives user-visible surfaces.
|
|
408
412
|
*/
|
|
409
413
|
onMutationFailure(listener: (payload: {
|
|
410
|
-
transaction: import('./transactions/
|
|
414
|
+
transaction: import('./transactions/mutations/MutationQueue.js').QueuedMutation;
|
|
411
415
|
error: Error;
|
|
412
416
|
permanent?: boolean;
|
|
413
417
|
}) => void): () => void;
|
|
414
418
|
/**
|
|
415
|
-
* Subscribe to
|
|
419
|
+
* Subscribe to commit round-trip latency, split into the local seal and the
|
|
420
|
+
* remote acknowledgement. Fires once per completed commit.
|
|
421
|
+
*
|
|
422
|
+
* Taps the {@link MutationQueue} emitter for the same reason
|
|
423
|
+
* {@link onMutationFailure} does: the commit lifecycle events originate
|
|
424
|
+
* there and the SyncClient's own emitter never rebroadcasts them.
|
|
425
|
+
*/
|
|
426
|
+
onCommitLatency(listener: (sample: CommitLatencySample) => void): () => void;
|
|
427
|
+
/**
|
|
428
|
+
* Subscribe to local transaction creation with the full {@link QueuedMutation}
|
|
416
429
|
* payload (`type`, `modelName`, `modelId`, `data`, `previousData`). This is
|
|
417
430
|
* the feed the store's local-mutation subscription taps for undo recording.
|
|
418
431
|
*
|
|
419
|
-
* It subscribes to the {@link
|
|
432
|
+
* It subscribes to the {@link MutationQueue}'s emitter directly, since
|
|
420
433
|
* that is the only emitter that fires `transaction:created`. The SyncClient's
|
|
421
434
|
* own emitter (reached through {@link subscribe}) never rebroadcasts that
|
|
422
435
|
* event, so routing undo through `subscribe('transaction:created')` would
|
|
423
436
|
* record nothing. {@link onMutationFailure} taps the queue for the same
|
|
424
437
|
* reason.
|
|
425
438
|
*/
|
|
426
|
-
onLocalTransaction(listener: (tx: import('./transactions/
|
|
439
|
+
onLocalTransaction(listener: (tx: import('./transactions/mutations/MutationQueue.js').QueuedMutation) => void): () => void;
|
|
427
440
|
/**
|
|
428
441
|
* Wait for the latest in-flight transaction for (modelName, modelId)
|
|
429
442
|
* to be confirmed by the server, or reject if it's rolled back.
|
|
430
443
|
* Resolves immediately when no transaction is in flight — see
|
|
431
|
-
* `
|
|
444
|
+
* `MutationQueue.confirmationFor` for the lookup contract.
|
|
432
445
|
*
|
|
433
446
|
* Distinct from `waitForDeltaConfirmation(transactionId)` which keys
|
|
434
447
|
* off a known tx id; this variant is for call sites that hold a
|
|
@@ -441,7 +454,7 @@ export declare class SyncClient extends EventEmitter {
|
|
|
441
454
|
getDebugInfo(): {
|
|
442
455
|
connectionState: "connected" | "disconnected" | "connecting";
|
|
443
456
|
pendingMutationsCount: number;
|
|
444
|
-
|
|
457
|
+
mutationQueue: {
|
|
445
458
|
lastSeenSyncId: number;
|
|
446
459
|
awaitingDeltaCount: number;
|
|
447
460
|
awaitingDeltaTransactions: {
|
|
@@ -478,7 +491,7 @@ export declare class SyncClient extends EventEmitter {
|
|
|
478
491
|
* Mark a local transaction as optimistically applied. The matching
|
|
479
492
|
* server delta (when it arrives with the same `transactionId`) will
|
|
480
493
|
* be recognized as an echo and skip the pool mutation. Called
|
|
481
|
-
* automatically by `
|
|
494
|
+
* automatically by `MutationQueue` when a transaction is staged;
|
|
482
495
|
* exposed publicly so tests can drive the API directly.
|
|
483
496
|
*/
|
|
484
497
|
markTransactionPending(transactionId: string): void;
|
|
@@ -490,28 +503,15 @@ export declare class SyncClient extends EventEmitter {
|
|
|
490
503
|
*/
|
|
491
504
|
getEchoMetrics(): Readonly<UnconfirmedWritesMetrics>;
|
|
492
505
|
/**
|
|
493
|
-
* Package-internal accessor for the {@link
|
|
506
|
+
* Package-internal accessor for the {@link MutationQueue}. Used by
|
|
494
507
|
* `Ablo.commits.create()` to route raw multi-operation envelopes through the
|
|
495
508
|
* same retry-on-reconnect lane as the model proxy path, and by tests to
|
|
496
509
|
* exercise the queue's interaction with {@link markTransactionPending} on the
|
|
497
510
|
* real instance the SyncClient subscribes to. It is not re-exported to SDK
|
|
498
511
|
* consumers; `Ablo` is the public surface.
|
|
499
512
|
*/
|
|
500
|
-
|
|
501
|
-
applyDeltaBatchToPool(dbResults:
|
|
502
|
-
action: string;
|
|
503
|
-
modelName: string;
|
|
504
|
-
modelId: string;
|
|
505
|
-
data?: Record<string, unknown> | null;
|
|
506
|
-
/**
|
|
507
|
-
* Server-stamped transaction id, echoing the client's commit op
|
|
508
|
-
* id. Used by echo detection to recognize "this is the
|
|
509
|
-
* confirmation of a mutation I've already applied locally."
|
|
510
|
-
* Optional because system-emitted deltas (sync_group changes,
|
|
511
|
-
* schema-derived deltas, etc.) don't have a client transaction.
|
|
512
|
-
*/
|
|
513
|
-
transactionId?: string;
|
|
514
|
-
}[], enrichRelations: (modelName: string, data: Record<string, unknown>) => Record<string, unknown>): void;
|
|
513
|
+
getMutationQueue(): MutationQueue;
|
|
514
|
+
applyDeltaBatchToPool(dbResults: readonly AppliedChange[], enrichRelations: (modelName: string, data: Record<string, unknown>) => Record<string, unknown>): void;
|
|
515
515
|
/**
|
|
516
516
|
* Apply bootstrap data to the InstanceCache with ghost removal.
|
|
517
517
|
* Owns: model creation, batch upsert, ghost detection + removal.
|