@abloatai/ablo 0.36.0 → 0.37.1
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 -2
- package/CHANGELOG.md +55 -2014
- package/NOTICE +2 -2
- package/README.md +45 -63
- package/assets/banner.png +0 -0
- package/dist/auth.d.ts +2 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +2 -0
- package/dist/auth.js.map +1 -0
- package/dist/client.d.ts +3 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +3 -0
- package/dist/client.js.map +1 -0
- package/dist/coordination.d.ts +2 -0
- package/dist/coordination.d.ts.map +1 -0
- package/dist/coordination.js +2 -0
- package/dist/coordination.js.map +1 -0
- package/dist/index.d.ts +3 -114
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -163
- package/dist/index.js.map +1 -0
- package/dist/react.d.ts +4 -0
- package/dist/react.d.ts.map +1 -0
- package/dist/react.js +3 -0
- package/dist/react.js.map +1 -0
- package/dist/schema.d.ts +2 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +2 -0
- package/dist/schema.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +2 -0
- package/dist/server.js.map +1 -0
- package/dist/source-conformance.d.ts +2 -0
- package/dist/source-conformance.d.ts.map +1 -0
- package/dist/source-conformance.js +2 -0
- package/dist/source-conformance.js.map +1 -0
- package/dist/source-drizzle.d.ts +2 -0
- package/dist/source-drizzle.d.ts.map +1 -0
- package/dist/source-drizzle.js +2 -0
- package/dist/source-drizzle.js.map +1 -0
- package/dist/source-kysely.d.ts +2 -0
- package/dist/source-kysely.d.ts.map +1 -0
- package/dist/source-kysely.js +2 -0
- package/dist/source-kysely.js.map +1 -0
- package/dist/source-next.d.ts +2 -0
- package/dist/source-next.d.ts.map +1 -0
- package/dist/source-next.js +2 -0
- package/dist/source-next.js.map +1 -0
- package/dist/source.d.ts +2 -0
- package/dist/source.d.ts.map +1 -0
- package/dist/source.js +2 -0
- package/dist/source.js.map +1 -0
- package/dist/wire.d.ts +2 -0
- package/dist/wire.d.ts.map +1 -0
- package/dist/wire.js +2 -0
- package/dist/wire.js.map +1 -0
- package/docs/agents.md +1 -1
- package/docs/api-keys.md +7 -6
- package/docs/api.md +10 -10
- package/docs/client-behavior.md +5 -5
- package/docs/coordination.md +52 -62
- package/docs/data-sources.md +1 -1
- package/docs/examples/agent-human.md +4 -4
- package/docs/examples/ai-sdk-tool.md +1 -1
- package/docs/examples/existing-python-backend.md +15 -4
- package/docs/examples/nextjs.md +27 -6
- package/docs/examples/server-agent.md +2 -2
- package/docs/how-it-works.md +4 -4
- package/docs/identity.md +2 -1
- package/docs/integration-guide.md +24 -13
- package/docs/internal/README.md +18 -0
- package/docs/internal/agent-fleet-coordination-design.md +171 -0
- package/docs/internal/agent-orchestration.md +58 -0
- package/docs/internal/commit-identifiers.md +91 -0
- package/docs/internal/concurrency-open-decisions.md +37 -0
- package/docs/internal/data-source-reverse-channel.md +150 -0
- package/docs/internal/per-field-conflict-detection.md +165 -0
- package/docs/internal/postgres-replication.md +64 -0
- package/docs/internal/serializable-schema.md +119 -0
- package/docs/internal/structure.md +32 -0
- package/docs/mcp.md +2 -2
- package/docs/migration.md +3 -3
- package/docs/quickstart.md +2 -2
- package/docs/react.md +5 -5
- package/docs/schema-contract.md +3 -3
- package/docs/sessions.md +91 -37
- package/examples/README.md +2 -2
- package/examples/data-source/README.md +1 -1
- package/examples/data-source/ablo-driver.ts +1 -1
- package/examples/data-source/customer-server.ts +1 -1
- package/examples/data-source/run.ts +1 -1
- package/examples/data-source/schema.ts +1 -1
- package/examples/quickstart.ts +2 -2
- package/llms.txt +8 -8
- package/package.json +63 -166
- package/bin/ablo.cjs +0 -39
- package/dist/BaseSyncedStore.d.ts +0 -843
- package/dist/BaseSyncedStore.js +0 -1971
- package/dist/Database.d.ts +0 -323
- package/dist/Database.js +0 -1502
- package/dist/InstanceCache.d.ts +0 -237
- package/dist/InstanceCache.js +0 -1166
- package/dist/LazyReferenceCollection.d.ts +0 -177
- package/dist/LazyReferenceCollection.js +0 -461
- package/dist/Model.d.ts +0 -454
- package/dist/Model.js +0 -919
- package/dist/ModelRegistry.d.ts +0 -225
- package/dist/ModelRegistry.js +0 -539
- package/dist/NetworkMonitor.d.ts +0 -28
- package/dist/NetworkMonitor.js +0 -79
- package/dist/RuntimeContext.d.ts +0 -52
- package/dist/RuntimeContext.js +0 -80
- package/dist/SyncClient.d.ts +0 -541
- package/dist/SyncClient.js +0 -2202
- package/dist/adapters/alwaysOnline.d.ts +0 -14
- package/dist/adapters/alwaysOnline.js +0 -17
- package/dist/adapters/inMemoryStorage.d.ts +0 -31
- package/dist/adapters/inMemoryStorage.js +0 -110
- package/dist/ai-sdk/coordinatedTool.d.ts +0 -120
- package/dist/ai-sdk/coordinatedTool.js +0 -134
- package/dist/ai-sdk/coordinationContext.d.ts +0 -46
- package/dist/ai-sdk/coordinationContext.js +0 -106
- package/dist/ai-sdk/index.d.ts +0 -121
- package/dist/ai-sdk/index.js +0 -121
- package/dist/ai-sdk/wrap.d.ts +0 -65
- package/dist/ai-sdk/wrap.js +0 -39
- package/dist/auth/index.d.ts +0 -1
- package/dist/auth/index.js +0 -8
- package/dist/batching/index.d.ts +0 -55
- package/dist/batching/index.js +0 -147
- package/dist/client/Ablo.d.ts +0 -231
- package/dist/client/Ablo.js +0 -160
- package/dist/client/abloClient.d.ts +0 -309
- package/dist/client/abloClient.js +0 -13
- package/dist/client/clientPrelude.d.ts +0 -52
- package/dist/client/clientPrelude.js +0 -60
- package/dist/client/consoleLogger.d.ts +0 -35
- package/dist/client/consoleLogger.js +0 -44
- package/dist/client/coreClient.d.ts +0 -60
- package/dist/client/coreClient.js +0 -118
- package/dist/client/createInternalComponents.d.ts +0 -50
- package/dist/client/createInternalComponents.js +0 -98
- package/dist/client/createModelProxy.d.ts +0 -248
- package/dist/client/createModelProxy.js +0 -884
- package/dist/client/humans.d.ts +0 -69
- package/dist/client/humans.js +0 -78
- package/dist/client/modelRegistration.d.ts +0 -10
- package/dist/client/modelRegistration.js +0 -312
- package/dist/client/options.d.ts +0 -461
- package/dist/client/options.js +0 -7
- package/dist/client/reactiveEngine.d.ts +0 -53
- package/dist/client/reactiveEngine.js +0 -688
- package/dist/client/resourceTypes.d.ts +0 -12
- package/dist/client/resourceTypes.js +0 -10
- package/dist/client/schemaConfig.d.ts +0 -44
- package/dist/client/schemaConfig.js +0 -185
- package/dist/client/storeCluster.d.ts +0 -47
- package/dist/client/storeCluster.js +0 -118
- package/dist/client/storeLifecycle.d.ts +0 -61
- package/dist/client/storeLifecycle.js +0 -231
- package/dist/client/validateAbloOptions.d.ts +0 -42
- package/dist/client/validateAbloOptions.js +0 -43
- package/dist/client/wsMutationExecutor.d.ts +0 -27
- package/dist/client/wsMutationExecutor.js +0 -72
- package/dist/context.d.ts +0 -42
- package/dist/context.js +0 -81
- package/dist/coordination/ClaimLog.d.ts +0 -26
- package/dist/coordination/ClaimLog.js +0 -32
- package/dist/coordination/index.d.ts +0 -1
- package/dist/coordination/index.js +0 -8
- package/dist/core/index.d.ts +0 -33
- package/dist/core/index.js +0 -48
- package/dist/docs/catalog.d.ts +0 -72
- package/dist/docs/catalog.js +0 -230
- package/dist/docs/index.d.ts +0 -10
- package/dist/docs/index.js +0 -10
- package/dist/environment.d.ts +0 -1
- package/dist/environment.js +0 -8
- package/dist/interfaces/index.d.ts +0 -311
- package/dist/interfaces/index.js +0 -9
- package/dist/keys/index.d.ts +0 -1
- package/dist/keys/index.js +0 -8
- package/dist/mutators/RecordingMutation.d.ts +0 -36
- package/dist/mutators/RecordingMutation.js +0 -182
- package/dist/mutators/Transaction.d.ts +0 -40
- package/dist/mutators/Transaction.js +0 -58
- package/dist/mutators/UndoManager.d.ts +0 -258
- package/dist/mutators/UndoManager.js +0 -658
- package/dist/mutators/defineMutators.d.ts +0 -60
- package/dist/mutators/defineMutators.js +0 -18
- package/dist/mutators/inverseOp.d.ts +0 -126
- package/dist/mutators/inverseOp.js +0 -71
- package/dist/mutators/mutateActions.d.ts +0 -45
- package/dist/mutators/mutateActions.js +0 -105
- package/dist/mutators/readerActions.d.ts +0 -33
- package/dist/mutators/readerActions.js +0 -57
- package/dist/mutators/undoApply.d.ts +0 -51
- package/dist/mutators/undoApply.js +0 -117
- package/dist/policy/index.d.ts +0 -21
- package/dist/policy/index.js +0 -20
- package/dist/query/QueryProcessor.d.ts +0 -75
- package/dist/query/QueryProcessor.js +0 -255
- package/dist/query/client.d.ts +0 -64
- package/dist/query/client.js +0 -138
- package/dist/query/types.d.ts +0 -85
- package/dist/query/types.js +0 -16
- package/dist/react/AbloProvider.d.ts +0 -242
- package/dist/react/AbloProvider.js +0 -458
- package/dist/react/ClientSideSuspense.d.ts +0 -36
- package/dist/react/ClientSideSuspense.js +0 -17
- package/dist/react/DefaultFallback.d.ts +0 -24
- package/dist/react/DefaultFallback.js +0 -43
- package/dist/react/context.d.ts +0 -55
- package/dist/react/context.js +0 -29
- package/dist/react/createAbloReact.d.ts +0 -56
- package/dist/react/createAbloReact.js +0 -51
- package/dist/react/index.d.ts +0 -62
- package/dist/react/index.js +0 -69
- package/dist/react/internalContext.d.ts +0 -33
- package/dist/react/internalContext.js +0 -3
- package/dist/react/useAblo.d.ts +0 -82
- package/dist/react/useAblo.js +0 -120
- package/dist/react/useCurrentUserId.d.ts +0 -22
- package/dist/react/useCurrentUserId.js +0 -34
- package/dist/react/useErrorListener.d.ts +0 -20
- package/dist/react/useErrorListener.js +0 -38
- package/dist/react/useMutationFailureListener.d.ts +0 -26
- package/dist/react/useMutationFailureListener.js +0 -38
- package/dist/react/useMutators.d.ts +0 -56
- package/dist/react/useMutators.js +0 -84
- package/dist/react/useReactive.d.ts +0 -35
- package/dist/react/useReactive.js +0 -123
- package/dist/react/useSyncStatus.d.ts +0 -59
- package/dist/react/useSyncStatus.js +0 -76
- package/dist/react/useUndoScope.d.ts +0 -34
- package/dist/react/useUndoScope.js +0 -81
- package/dist/schema/coordination.d.ts +0 -112
- package/dist/schema/coordination.js +0 -133
- package/dist/schema/ddl.d.ts +0 -97
- package/dist/schema/ddl.js +0 -491
- package/dist/schema/ddlLock.d.ts +0 -35
- package/dist/schema/ddlLock.js +0 -46
- package/dist/schema/diff.d.ts +0 -225
- package/dist/schema/diff.js +0 -289
- package/dist/schema/generate.d.ts +0 -19
- package/dist/schema/generate.js +0 -86
- package/dist/schema/index.d.ts +0 -42
- package/dist/schema/index.js +0 -80
- package/dist/schema/queries.d.ts +0 -201
- package/dist/schema/queries.js +0 -144
- package/dist/schema/select.d.ts +0 -40
- package/dist/schema/select.js +0 -90
- package/dist/schema/serialize.d.ts +0 -115
- package/dist/schema/serialize.js +0 -265
- package/dist/schema/sugar.d.ts +0 -109
- package/dist/schema/sugar.js +0 -83
- package/dist/schema/syncDeltaRow.d.ts +0 -6
- package/dist/schema/syncDeltaRow.js +0 -6
- package/dist/server/adapter.d.ts +0 -173
- package/dist/server/adapter.js +0 -18
- package/dist/server/commit.d.ts +0 -107
- package/dist/server/commit.js +0 -1
- package/dist/server/index.d.ts +0 -14
- package/dist/server/index.js +0 -2
- package/dist/server/readConfig.d.ts +0 -80
- package/dist/server/readConfig.js +0 -8
- package/dist/server/storageMode.d.ts +0 -23
- package/dist/server/storageMode.js +0 -17
- package/dist/source/adapter.d.ts +0 -83
- package/dist/source/adapter.js +0 -24
- package/dist/source/adapters/drizzle.d.ts +0 -48
- package/dist/source/adapters/drizzle.js +0 -219
- package/dist/source/adapters/kysely.d.ts +0 -42
- package/dist/source/adapters/kysely.js +0 -205
- package/dist/source/adapters/kyselyMutationCore.d.ts +0 -76
- package/dist/source/adapters/kyselyMutationCore.js +0 -125
- package/dist/source/adapters/memory.d.ts +0 -13
- package/dist/source/adapters/memory.js +0 -130
- package/dist/source/adapters/prisma.d.ts +0 -63
- package/dist/source/adapters/prisma.js +0 -202
- package/dist/source/conformance.d.ts +0 -37
- package/dist/source/conformance.js +0 -215
- package/dist/source/connector.d.ts +0 -95
- package/dist/source/connector.js +0 -266
- package/dist/source/connectorProtocol.d.ts +0 -154
- package/dist/source/connectorProtocol.js +0 -163
- package/dist/source/contract.d.ts +0 -195
- package/dist/source/contract.js +0 -164
- package/dist/source/factory.d.ts +0 -92
- package/dist/source/factory.js +0 -286
- package/dist/source/idempotency.d.ts +0 -61
- package/dist/source/idempotency.js +0 -144
- package/dist/source/index.d.ts +0 -23
- package/dist/source/index.js +0 -30
- package/dist/source/migrations.d.ts +0 -21
- package/dist/source/migrations.js +0 -103
- package/dist/source/next.d.ts +0 -32
- package/dist/source/next.js +0 -25
- package/dist/source/pushQueue.d.ts +0 -134
- package/dist/source/pushQueue.js +0 -256
- package/dist/source/signing.d.ts +0 -92
- package/dist/source/signing.js +0 -162
- package/dist/source/types.d.ts +0 -401
- package/dist/source/types.js +0 -59
- package/dist/storeContract.d.ts +0 -145
- package/dist/storeContract.js +0 -12
- package/dist/stores/DatabaseManager.d.ts +0 -107
- package/dist/stores/DatabaseManager.js +0 -388
- package/dist/stores/ObjectStore.d.ts +0 -115
- package/dist/stores/ObjectStore.js +0 -393
- package/dist/stores/ObjectStoreContract.d.ts +0 -38
- package/dist/stores/ObjectStoreContract.js +0 -1
- package/dist/stores/StoreManager.d.ts +0 -114
- package/dist/stores/StoreManager.js +0 -304
- package/dist/stores/SyncActionStore.d.ts +0 -99
- package/dist/stores/SyncActionStore.js +0 -506
- package/dist/stores/openIDBWithTimeout.d.ts +0 -65
- package/dist/stores/openIDBWithTimeout.js +0 -153
- package/dist/stores/syncAction.d.ts +0 -26
- package/dist/stores/syncAction.js +0 -16
- package/dist/surface.d.ts +0 -36
- package/dist/surface.js +0 -75
- package/dist/sync/BootstrapFetcher.d.ts +0 -284
- package/dist/sync/BootstrapFetcher.js +0 -964
- package/dist/sync/ConnectionManager.d.ts +0 -8
- package/dist/sync/ConnectionManager.js +0 -8
- package/dist/sync/OnDemandLoader.d.ts +0 -231
- package/dist/sync/OnDemandLoader.js +0 -743
- package/dist/sync/SubscriptionManager.d.ts +0 -159
- package/dist/sync/SubscriptionManager.js +0 -243
- package/dist/sync/SyncWebSocket.d.ts +0 -173
- package/dist/sync/SyncWebSocket.js +0 -438
- package/dist/sync/awaitClaimGrant.d.ts +0 -6
- package/dist/sync/awaitClaimGrant.js +0 -6
- package/dist/sync/bootstrapApply.d.ts +0 -73
- package/dist/sync/bootstrapApply.js +0 -73
- package/dist/sync/commitFrames.d.ts +0 -8
- package/dist/sync/commitFrames.js +0 -8
- package/dist/sync/contextPorts.d.ts +0 -18
- package/dist/sync/contextPorts.js +0 -31
- package/dist/sync/createClaimStream.d.ts +0 -7
- package/dist/sync/createClaimStream.js +0 -7
- package/dist/sync/createPresenceStream.d.ts +0 -69
- package/dist/sync/createPresenceStream.js +0 -200
- package/dist/sync/createSnapshot.d.ts +0 -29
- package/dist/sync/createSnapshot.js +0 -118
- package/dist/sync/credentialLifecycle.d.ts +0 -7
- package/dist/sync/credentialLifecycle.js +0 -7
- package/dist/sync/deltaPipeline.d.ts +0 -114
- package/dist/sync/deltaPipeline.js +0 -278
- package/dist/sync/groupChange.d.ts +0 -116
- package/dist/sync/groupChange.js +0 -244
- package/dist/sync/participants.d.ts +0 -132
- package/dist/sync/participants.js +0 -346
- package/dist/sync/persistedPrefix.d.ts +0 -12
- package/dist/sync/persistedPrefix.js +0 -22
- package/dist/sync/schemaDrift.d.ts +0 -55
- package/dist/sync/schemaDrift.js +0 -53
- package/dist/sync/schemas.d.ts +0 -71
- package/dist/sync/schemas.js +0 -94
- package/dist/sync/syncCursor.d.ts +0 -40
- package/dist/sync/syncCursor.js +0 -55
- package/dist/sync/syncPlan.d.ts +0 -54
- package/dist/sync/syncPlan.js +0 -50
- package/dist/sync/wsFrameHandlers.d.ts +0 -8
- package/dist/sync/wsFrameHandlers.js +0 -8
- package/dist/syncLog/contract.d.ts +0 -20
- package/dist/syncLog/contract.js +0 -19
- package/dist/syncLog/index.d.ts +0 -1
- package/dist/syncLog/index.js +0 -1
- package/dist/transaction/ablo.d.ts +0 -88
- package/dist/transaction/ablo.js +0 -33
- package/dist/transaction/auth/apiKey.d.ts +0 -152
- package/dist/transaction/auth/apiKey.js +0 -419
- package/dist/transaction/auth/bootstrapScope.d.ts +0 -15
- package/dist/transaction/auth/bootstrapScope.js +0 -1
- package/dist/transaction/auth/capability.d.ts +0 -212
- package/dist/transaction/auth/capability.js +0 -224
- package/dist/transaction/auth/credentialEndpoint.d.ts +0 -61
- package/dist/transaction/auth/credentialEndpoint.js +0 -86
- package/dist/transaction/auth/credentialPolicy.d.ts +0 -148
- package/dist/transaction/auth/credentialPolicy.js +0 -125
- package/dist/transaction/auth/credentialSource.d.ts +0 -30
- package/dist/transaction/auth/credentialSource.js +0 -55
- package/dist/transaction/auth/hostedEndpoints.d.ts +0 -21
- package/dist/transaction/auth/hostedEndpoints.js +0 -21
- package/dist/transaction/auth/identity.d.ts +0 -55
- package/dist/transaction/auth/identity.js +0 -210
- package/dist/transaction/auth/index.d.ts +0 -162
- package/dist/transaction/auth/index.js +0 -304
- package/dist/transaction/auth/schemas.d.ts +0 -59
- package/dist/transaction/auth/schemas.js +0 -85
- package/dist/transaction/auth/sessionMint.d.ts +0 -28
- package/dist/transaction/auth/sessionMint.js +0 -85
- package/dist/transaction/coordination/awaitClaimGrant.d.ts +0 -56
- package/dist/transaction/coordination/awaitClaimGrant.js +0 -124
- package/dist/transaction/coordination/claimHeartbeatLoop.d.ts +0 -84
- package/dist/transaction/coordination/claimHeartbeatLoop.js +0 -108
- package/dist/transaction/coordination/claimMeta.d.ts +0 -49
- package/dist/transaction/coordination/claimMeta.js +0 -52
- package/dist/transaction/coordination/createClaimStream.d.ts +0 -64
- package/dist/transaction/coordination/createClaimStream.js +0 -475
- package/dist/transaction/coordination/events.d.ts +0 -74
- package/dist/transaction/coordination/events.js +0 -7
- package/dist/transaction/coordination/index.d.ts +0 -19
- package/dist/transaction/coordination/index.js +0 -45
- package/dist/transaction/coordination/locator.d.ts +0 -104
- package/dist/transaction/coordination/locator.js +0 -102
- package/dist/transaction/coordination/schema.d.ts +0 -1536
- package/dist/transaction/coordination/schema.js +0 -1177
- package/dist/transaction/coordination/targetConflict.d.ts +0 -2
- package/dist/transaction/coordination/targetConflict.js +0 -107
- package/dist/transaction/coordination/trace.d.ts +0 -78
- package/dist/transaction/coordination/trace.js +0 -138
- package/dist/transaction/durableWrites.d.ts +0 -62
- package/dist/transaction/durableWrites.js +0 -71
- package/dist/transaction/environment.d.ts +0 -105
- package/dist/transaction/environment.js +0 -108
- package/dist/transaction/errorCodes.d.ts +0 -403
- package/dist/transaction/errorCodes.js +0 -484
- package/dist/transaction/errors.d.ts +0 -428
- package/dist/transaction/errors.js +0 -686
- package/dist/transaction/footprint.d.ts +0 -111
- package/dist/transaction/footprint.js +0 -0
- package/dist/transaction/index.d.ts +0 -20
- package/dist/transaction/index.js +0 -20
- package/dist/transaction/keys/index.d.ts +0 -87
- package/dist/transaction/keys/index.js +0 -207
- package/dist/transaction/log/syncDeltaRow.d.ts +0 -158
- package/dist/transaction/log/syncDeltaRow.js +0 -95
- package/dist/transaction/logPosition.d.ts +0 -97
- package/dist/transaction/logPosition.js +0 -125
- package/dist/transaction/logger.d.ts +0 -16
- package/dist/transaction/logger.js +0 -7
- package/dist/transaction/observability.d.ts +0 -53
- package/dist/transaction/observability.js +0 -19
- package/dist/transaction/persistence.d.ts +0 -12
- package/dist/transaction/persistence.js +0 -11
- package/dist/transaction/plugin.d.ts +0 -285
- package/dist/transaction/plugin.js +0 -106
- package/dist/transaction/policy/types.d.ts +0 -217
- package/dist/transaction/policy/types.js +0 -126
- package/dist/transaction/resources/functionalUpdate.d.ts +0 -79
- package/dist/transaction/resources/functionalUpdate.js +0 -87
- package/dist/transaction/resources/httpResources.d.ts +0 -321
- package/dist/transaction/resources/httpResources.js +0 -7
- package/dist/transaction/resources/modelOperations.d.ts +0 -427
- package/dist/transaction/resources/modelOperations.js +0 -12
- package/dist/transaction/resources/mutationOptions.d.ts +0 -66
- package/dist/transaction/resources/mutationOptions.js +0 -9
- package/dist/transaction/resources/where.d.ts +0 -101
- package/dist/transaction/resources/where.js +0 -115
- package/dist/transaction/resources/writeOptionsSchema.d.ts +0 -47
- package/dist/transaction/resources/writeOptionsSchema.js +0 -73
- package/dist/transaction/schema/field.d.ts +0 -120
- package/dist/transaction/schema/field.js +0 -265
- package/dist/transaction/schema/fieldRef.d.ts +0 -38
- package/dist/transaction/schema/fieldRef.js +0 -11
- package/dist/transaction/schema/loadStrategy.d.ts +0 -45
- package/dist/transaction/schema/loadStrategy.js +0 -46
- package/dist/transaction/schema/model.d.ts +0 -379
- package/dist/transaction/schema/model.js +0 -123
- package/dist/transaction/schema/openapi.d.ts +0 -58
- package/dist/transaction/schema/openapi.js +0 -501
- package/dist/transaction/schema/relation.d.ts +0 -204
- package/dist/transaction/schema/relation.js +0 -104
- package/dist/transaction/schema/residency.d.ts +0 -29
- package/dist/transaction/schema/residency.js +0 -25
- package/dist/transaction/schema/roles.d.ts +0 -249
- package/dist/transaction/schema/roles.js +0 -230
- package/dist/transaction/schema/schema.d.ts +0 -351
- package/dist/transaction/schema/schema.js +0 -325
- package/dist/transaction/schema/tenancy.d.ts +0 -139
- package/dist/transaction/schema/tenancy.js +0 -190
- package/dist/transaction/transactionLayer.d.ts +0 -82
- package/dist/transaction/transactionLayer.js +0 -24
- package/dist/transaction/transactions/settlement/commitEnvelope.d.ts +0 -143
- package/dist/transaction/transactions/settlement/commitEnvelope.js +0 -161
- package/dist/transaction/transactions/settlement/httpCommitEnvelope.d.ts +0 -53
- package/dist/transaction/transactions/settlement/httpCommitEnvelope.js +0 -207
- package/dist/transaction/transactions/settlement/idempotencyKey.d.ts +0 -10
- package/dist/transaction/transactions/settlement/idempotencyKey.js +0 -9
- package/dist/transaction/transactions/settlement/pendingWrite.d.ts +0 -112
- package/dist/transaction/transactions/settlement/pendingWrite.js +0 -20
- package/dist/transaction/transport/commitFrames.d.ts +0 -90
- package/dist/transaction/transport/commitFrames.js +0 -134
- package/dist/transaction/transport/connectionManager.d.ts +0 -215
- package/dist/transaction/transport/connectionManager.js +0 -673
- package/dist/transaction/transport/credentialLifecycle.d.ts +0 -177
- package/dist/transaction/transport/credentialLifecycle.js +0 -324
- package/dist/transaction/transport/heartbeat.d.ts +0 -65
- package/dist/transaction/transport/heartbeat.js +0 -93
- package/dist/transaction/transport/httpClient.d.ts +0 -131
- package/dist/transaction/transport/httpClient.js +0 -146
- package/dist/transaction/transport/httpOptions.d.ts +0 -33
- package/dist/transaction/transport/httpOptions.js +0 -12
- package/dist/transaction/transport/httpTransport.d.ts +0 -8
- package/dist/transaction/transport/httpTransport.js +0 -1388
- package/dist/transaction/transport/networkProbe.d.ts +0 -84
- package/dist/transaction/transport/networkProbe.js +0 -207
- package/dist/transaction/transport/wsFrameHandlers.d.ts +0 -128
- package/dist/transaction/transport/wsFrameHandlers.js +0 -429
- package/dist/transaction/transport/wsTransport.d.ts +0 -574
- package/dist/transaction/transport/wsTransport.js +0 -1023
- package/dist/transaction/types/assertExact.d.ts +0 -17
- package/dist/transaction/types/assertExact.js +0 -1
- package/dist/transaction/types/global.d.ts +0 -107
- package/dist/transaction/types/global.js +0 -40
- package/dist/transaction/types/index.d.ts +0 -205
- package/dist/transaction/types/index.js +0 -56
- package/dist/transaction/types/modelData.d.ts +0 -10
- package/dist/transaction/types/modelData.js +0 -9
- package/dist/transaction/types/participant.d.ts +0 -20
- package/dist/transaction/types/participant.js +0 -10
- package/dist/transaction/types/streams.d.ts +0 -550
- package/dist/transaction/types/streams.js +0 -11
- package/dist/transaction/utils/asyncIterator.d.ts +0 -34
- package/dist/transaction/utils/asyncIterator.js +0 -135
- package/dist/transaction/utils/duration.d.ts +0 -50
- package/dist/transaction/utils/duration.js +0 -77
- package/dist/transaction/utils/json.d.ts +0 -57
- package/dist/transaction/utils/json.js +0 -276
- package/dist/transaction/wire/accountResponses.d.ts +0 -420
- package/dist/transaction/wire/accountResponses.js +0 -290
- package/dist/transaction/wire/auth.d.ts +0 -56
- package/dist/transaction/wire/auth.js +0 -63
- package/dist/transaction/wire/bootstrapReason.d.ts +0 -9
- package/dist/transaction/wire/bootstrapReason.js +0 -8
- package/dist/transaction/wire/claimEvent.d.ts +0 -76
- package/dist/transaction/wire/claimEvent.js +0 -73
- package/dist/transaction/wire/claims.d.ts +0 -530
- package/dist/transaction/wire/claims.js +0 -327
- package/dist/transaction/wire/commit.d.ts +0 -603
- package/dist/transaction/wire/commit.js +0 -321
- package/dist/transaction/wire/delta.d.ts +0 -250
- package/dist/transaction/wire/delta.js +0 -147
- package/dist/transaction/wire/errorEnvelope.d.ts +0 -72
- package/dist/transaction/wire/errorEnvelope.js +0 -123
- package/dist/transaction/wire/feedCursor.d.ts +0 -60
- package/dist/transaction/wire/feedCursor.js +0 -82
- package/dist/transaction/wire/feedEvent.d.ts +0 -204
- package/dist/transaction/wire/feedEvent.js +0 -65
- package/dist/transaction/wire/frames.d.ts +0 -194
- package/dist/transaction/wire/frames.js +0 -50
- package/dist/transaction/wire/inboundFrames.d.ts +0 -562
- package/dist/transaction/wire/inboundFrames.js +0 -116
- package/dist/transaction/wire/index.d.ts +0 -54
- package/dist/transaction/wire/index.js +0 -83
- package/dist/transaction/wire/listEnvelope.d.ts +0 -37
- package/dist/transaction/wire/listEnvelope.js +0 -42
- package/dist/transaction/wire/modelMutations.d.ts +0 -31
- package/dist/transaction/wire/modelMutations.js +0 -52
- package/dist/transaction/wire/modelResponses.d.ts +0 -85
- package/dist/transaction/wire/modelResponses.js +0 -43
- package/dist/transaction/wire/modelShape.d.ts +0 -78
- package/dist/transaction/wire/modelShape.js +0 -74
- package/dist/transaction/wire/protocol.d.ts +0 -38
- package/dist/transaction/wire/protocol.js +0 -38
- package/dist/transaction/wire/protocolVersion.d.ts +0 -73
- package/dist/transaction/wire/protocolVersion.js +0 -83
- package/dist/transactions/mutations/MutationQueue.d.ts +0 -661
- package/dist/transactions/mutations/MutationQueue.js +0 -2807
- package/dist/transactions/mutations/MutationStore.d.ts +0 -20
- package/dist/transactions/mutations/MutationStore.js +0 -53
- package/dist/transactions/mutations/UnconfirmedWrites.d.ts +0 -82
- package/dist/transactions/mutations/UnconfirmedWrites.js +0 -104
- package/dist/transactions/mutations/coalesceRules.d.ts +0 -58
- package/dist/transactions/mutations/coalesceRules.js +0 -140
- package/dist/transactions/mutations/commitLatency.d.ts +0 -52
- package/dist/transactions/mutations/commitLatency.js +0 -130
- package/dist/transactions/mutations/commitOutboxStore.d.ts +0 -28
- package/dist/transactions/mutations/commitOutboxStore.js +0 -26
- package/dist/transactions/mutations/commitPayload.d.ts +0 -165
- package/dist/transactions/mutations/commitPayload.js +0 -152
- package/dist/transactions/mutations/deltaConfirmation.d.ts +0 -63
- package/dist/transactions/mutations/deltaConfirmation.js +0 -235
- package/dist/transactions/mutations/durableWriteStore.d.ts +0 -14
- package/dist/transactions/mutations/durableWriteStore.js +0 -12
- package/dist/transactions/mutations/optimisticApply.d.ts +0 -49
- package/dist/transactions/mutations/optimisticApply.js +0 -65
- package/dist/transactions/mutations/replayValidation.d.ts +0 -187
- package/dist/transactions/mutations/replayValidation.js +0 -164
- package/dist/utils/mobxSetup.d.ts +0 -53
- package/dist/utils/mobxSetup.js +0 -330
- package/dist/views/QueryView.d.ts +0 -79
- package/dist/views/QueryView.js +0 -218
- package/dist/views/ViewRegistry.d.ts +0 -20
- package/dist/views/ViewRegistry.js +0 -55
- package/dist/views/incrementalView.d.ts +0 -45
- package/dist/views/incrementalView.js +0 -69
- package/dist/webhooks/events.d.ts +0 -43
- package/dist/webhooks/events.js +0 -42
- package/dist/webhooks/index.d.ts +0 -8
- package/dist/webhooks/index.js +0 -8
- package/dist/wire/index.d.ts +0 -1
- package/dist/wire/index.js +0 -8
package/dist/RuntimeContext.d.ts
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* RuntimeContext — Runtime dependency container
|
|
3
|
-
*
|
|
4
|
-
* All SDK classes receive this context at construction time.
|
|
5
|
-
* It bundles every injectable dependency so constructors stay clean.
|
|
6
|
-
*/
|
|
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 {
|
|
10
|
-
/** Structured logger */
|
|
11
|
-
logger: Logger;
|
|
12
|
-
/** Error tracking & performance monitoring */
|
|
13
|
-
observability: ObservabilityProvider;
|
|
14
|
-
/** Product analytics (optional) */
|
|
15
|
-
analytics?: Analytics;
|
|
16
|
-
/** Session error detection for auth redirect decisions */
|
|
17
|
-
sessionErrorDetector: SessionErrorDetector;
|
|
18
|
-
/** Network connectivity detection */
|
|
19
|
-
onlineStatus: OnlineStatusProvider;
|
|
20
|
-
/** Model operation debug logging (optional, dev-only) */
|
|
21
|
-
modelDebugLogger?: ModelDebugLoggerContract;
|
|
22
|
-
/** Backend mutation transport (GraphQL, REST, etc.) */
|
|
23
|
-
mutationExecutor: MutationExecutor;
|
|
24
|
-
/** Application-specific sync configuration */
|
|
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;
|
|
33
|
-
}
|
|
34
|
-
export { noopLogger } from './transaction/logger.js';
|
|
35
|
-
/** No-op observability — silently discards all observability calls */
|
|
36
|
-
export declare const noopObservability: ObservabilityProvider;
|
|
37
|
-
/** No-op analytics — silently discards all analytics calls */
|
|
38
|
-
export declare const noopAnalytics: Analytics;
|
|
39
|
-
/** Browser-native online status provider */
|
|
40
|
-
export declare const browserOnlineStatus: OnlineStatusProvider;
|
|
41
|
-
/** Session error detector — delegates to AbloSessionError so detection is
|
|
42
|
-
* code-aware (only genuine session/JWT expiry counts), not a blunt 401/403. */
|
|
43
|
-
export declare const defaultSessionErrorDetector: SessionErrorDetector;
|
|
44
|
-
/**
|
|
45
|
-
* Fallback config used when the context is read before
|
|
46
|
-
* `createSyncEngine(...)` has initialized it (tests, early-boot code
|
|
47
|
-
* paths). An empty `modelCreatePriority` means every model falls through
|
|
48
|
-
* to `defaultCreatePriority`, so ordering is flat — fine for tests that
|
|
49
|
-
* never exercise FK ordering; consumers who do rely on it should finish
|
|
50
|
-
* wiring the engine before the first `create()` fires.
|
|
51
|
-
*/
|
|
52
|
-
export declare const emptyConfig: RuntimeConfig;
|
package/dist/RuntimeContext.js
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* RuntimeContext — Runtime dependency container
|
|
3
|
-
*
|
|
4
|
-
* All SDK classes receive this context at construction time.
|
|
5
|
-
* It bundles every injectable dependency so constructors stay clean.
|
|
6
|
-
*/
|
|
7
|
-
import { AbloSessionError } from './transaction/errors.js';
|
|
8
|
-
// ─────────────────────────────────────────────
|
|
9
|
-
// No-op defaults for optional dependencies
|
|
10
|
-
// ─────────────────────────────────────────────
|
|
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';
|
|
17
|
-
/** No-op observability — silently discards all observability calls */
|
|
18
|
-
export const noopObservability = {
|
|
19
|
-
setContext() { },
|
|
20
|
-
setConnectionState() { },
|
|
21
|
-
breadcrumb() { },
|
|
22
|
-
captureRollback() { },
|
|
23
|
-
captureMutationFailure() { },
|
|
24
|
-
captureBootstrapFailure() { },
|
|
25
|
-
captureReconciliation() { },
|
|
26
|
-
captureDeltaRetryExhausted() { },
|
|
27
|
-
captureWebSocketError() { },
|
|
28
|
-
captureSelfHealing() { },
|
|
29
|
-
captureClaim() { },
|
|
30
|
-
captureConflict() { },
|
|
31
|
-
captureCommitZeroSyncId() { },
|
|
32
|
-
startSpan(_name, _op, fn, _attributes) {
|
|
33
|
-
return fn();
|
|
34
|
-
},
|
|
35
|
-
async startSpanAsync(_name, _op, fn, _attributes) {
|
|
36
|
-
return fn();
|
|
37
|
-
},
|
|
38
|
-
};
|
|
39
|
-
/** No-op analytics — silently discards all analytics calls */
|
|
40
|
-
export const noopAnalytics = {
|
|
41
|
-
capture() { },
|
|
42
|
-
};
|
|
43
|
-
/** Browser-native online status provider */
|
|
44
|
-
export const browserOnlineStatus = {
|
|
45
|
-
isOnline() {
|
|
46
|
-
// Only `navigator.onLine === false` is the MDN-reliable "definitely offline"
|
|
47
|
-
// signal. Don't use `!navigator.onLine`: Node 18+ exposes a global
|
|
48
|
-
// `navigator` whose `onLine` is `undefined`, which `!` would read as offline —
|
|
49
|
-
// wedging every Node/server client (agents, worker, MCP) into a false offline.
|
|
50
|
-
return !(typeof navigator !== 'undefined' && navigator.onLine === false);
|
|
51
|
-
},
|
|
52
|
-
};
|
|
53
|
-
/** Session error detector — delegates to AbloSessionError so detection is
|
|
54
|
-
* code-aware (only genuine session/JWT expiry counts), not a blunt 401/403. */
|
|
55
|
-
export const defaultSessionErrorDetector = {
|
|
56
|
-
isSessionError(error) {
|
|
57
|
-
if (error && typeof error === 'object' && 'isSessionError' in error) {
|
|
58
|
-
return error.isSessionError;
|
|
59
|
-
}
|
|
60
|
-
return false;
|
|
61
|
-
},
|
|
62
|
-
isSessionErrorResponse(status, body) {
|
|
63
|
-
return AbloSessionError.isSessionErrorResponse(status, body);
|
|
64
|
-
},
|
|
65
|
-
};
|
|
66
|
-
/**
|
|
67
|
-
* Fallback config used when the context is read before
|
|
68
|
-
* `createSyncEngine(...)` has initialized it (tests, early-boot code
|
|
69
|
-
* paths). An empty `modelCreatePriority` means every model falls through
|
|
70
|
-
* to `defaultCreatePriority`, so ordering is flat — fine for tests that
|
|
71
|
-
* never exercise FK ordering; consumers who do rely on it should finish
|
|
72
|
-
* wiring the engine before the first `create()` fires.
|
|
73
|
-
*/
|
|
74
|
-
export const emptyConfig = {
|
|
75
|
-
modelCreatePriority: new Map(),
|
|
76
|
-
defaultCreatePriority: 40,
|
|
77
|
-
defaultNonCreatePriority: 50,
|
|
78
|
-
essentialFields: {},
|
|
79
|
-
classNameFallbackMap: {},
|
|
80
|
-
};
|
package/dist/SyncClient.d.ts
DELETED
|
@@ -1,541 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Applies model mutations and manages the offline write queue. The
|
|
3
|
-
* SyncClient turns local create, update, delete, and archive calls into
|
|
4
|
-
* optimistic changes, holds them while the client is offline, sends them to
|
|
5
|
-
* the server when connectivity returns, and resolves conflicts when the
|
|
6
|
-
* server's version of a row disagrees with the local one. It sits between the
|
|
7
|
-
* reactive object pool and the {@link MutationQueue} that delivers writes
|
|
8
|
-
* over the network.
|
|
9
|
-
*/
|
|
10
|
-
import { InstanceCache } from './InstanceCache.js';
|
|
11
|
-
import { Model } from './Model.js';
|
|
12
|
-
import type { AppliedChange } from './transaction/plugin.js';
|
|
13
|
-
import type { RuntimeContext } from './RuntimeContext.js';
|
|
14
|
-
import { EventEmitter } from 'events';
|
|
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';
|
|
18
|
-
import type { Database } from './Database.js';
|
|
19
|
-
import type { WriteOptions } from './interfaces/index.js';
|
|
20
|
-
import { LogPosition } from './transaction/logPosition.js';
|
|
21
|
-
import type { DurableWriteStore } from './transactions/mutations/durableWriteStore.js';
|
|
22
|
-
interface SyncObserver {
|
|
23
|
-
onSync?: (event: SyncEvent) => void;
|
|
24
|
-
}
|
|
25
|
-
interface SyncEvent {
|
|
26
|
-
type: 'create' | 'update' | 'delete' | 'archive' | 'rollback';
|
|
27
|
-
modelType: string;
|
|
28
|
-
model?: Model;
|
|
29
|
-
modelId?: string;
|
|
30
|
-
transactionType?: string;
|
|
31
|
-
}
|
|
32
|
-
interface SyncState {
|
|
33
|
-
connectionState: 'connected' | 'disconnected' | 'connecting';
|
|
34
|
-
pendingMutations: number;
|
|
35
|
-
lastSyncAt?: Date;
|
|
36
|
-
error?: Error;
|
|
37
|
-
}
|
|
38
|
-
export interface RehydrationStats {
|
|
39
|
-
added: number;
|
|
40
|
-
updated: number;
|
|
41
|
-
removed: number;
|
|
42
|
-
skipped: number;
|
|
43
|
-
healed: number;
|
|
44
|
-
elapsedMs: number;
|
|
45
|
-
}
|
|
46
|
-
export declare class SyncClient extends EventEmitter {
|
|
47
|
-
private readonly runtime;
|
|
48
|
-
private objectPool;
|
|
49
|
-
private database;
|
|
50
|
-
private get mutationExecutor();
|
|
51
|
-
private networkMonitor;
|
|
52
|
-
private observers;
|
|
53
|
-
private userId;
|
|
54
|
-
private organizationId;
|
|
55
|
-
private pendingMutations;
|
|
56
|
-
private readonly stagedMutationIds;
|
|
57
|
-
private pendingJournalBatch;
|
|
58
|
-
private journalFlushScheduled;
|
|
59
|
-
private readonly commitOutboxNamespace;
|
|
60
|
-
/**
|
|
61
|
-
* Tracks the ids of transactions the client has applied optimistically but
|
|
62
|
-
* the server has not yet confirmed. When a delta arrives, the receive path
|
|
63
|
-
* consults this set to recognize the echo of the client's own mutation and
|
|
64
|
-
* skip the now-redundant pool update; the IndexedDB write still runs,
|
|
65
|
-
* because the delta is the authoritative version of the row. Without this
|
|
66
|
-
* discriminator, an optimistically applied delete followed by a
|
|
67
|
-
* server-confirmed create echo would resurrect the row for the window
|
|
68
|
-
* between the two confirmations.
|
|
69
|
-
*
|
|
70
|
-
* The set is bounded with first-in-first-out eviction, and
|
|
71
|
-
* {@link SyncClient.getEchoMetrics} exposes its counters.
|
|
72
|
-
*/
|
|
73
|
-
private readonly echoTracker;
|
|
74
|
-
private connectionState;
|
|
75
|
-
private isDisposed;
|
|
76
|
-
/**
|
|
77
|
-
* The client's position in the global delta order, held as the single
|
|
78
|
-
* canonical {@link LogPosition} instance. The store advances `applied` and
|
|
79
|
-
* `persisted` as deltas land, the queue advances `acked` on commit
|
|
80
|
-
* responses, and snapshots and claims read `readFloor`.
|
|
81
|
-
*/
|
|
82
|
-
readonly position: LogPosition;
|
|
83
|
-
constructor(objectPool: InstanceCache, database: Database, commitOutbox?: DurableWriteStore, commitOutboxNamespace?: string, runtime?: RuntimeContext);
|
|
84
|
-
/**
|
|
85
|
-
* Setup network monitoring handlers
|
|
86
|
-
*/
|
|
87
|
-
private setupNetworkMonitoring;
|
|
88
|
-
/**
|
|
89
|
-
* Handle transaction rollback. Two distinct shapes flow through this
|
|
90
|
-
* event:
|
|
91
|
-
*
|
|
92
|
-
* 1. **Server-rejected rollback** (`reason === 'permanent_error'`,
|
|
93
|
-
* `'max_retries_exhausted'`, `'conflict_server_wins'`) — the
|
|
94
|
-
* optimistic state is wrong, the row exists, restore previous
|
|
95
|
-
* state and notify the UI.
|
|
96
|
-
*
|
|
97
|
-
* 2. **Local-cancellation cleanup** (`reason === 'model_cancelled'`,
|
|
98
|
-
* `'cascade_parent_deleted'`) — the user deleted this model (or
|
|
99
|
-
* its parent), so a pending UPDATE on it gets cancelled. There's
|
|
100
|
-
* nothing to restore (the model is doomed) and no UI notification
|
|
101
|
-
* needed (the delete itself already triggered re-renders). Just
|
|
102
|
-
* discard the optimistic state silently.
|
|
103
|
-
*
|
|
104
|
-
* Treating both paths the same caused the deletion-flicker bug: every
|
|
105
|
-
* cancelled update on a multi-child record fired a per-model observer
|
|
106
|
-
* event and a `[SyncClient.rollback]` warn, producing N renders and N
|
|
107
|
-
* spam log lines for one user-initiated delete.
|
|
108
|
-
*/
|
|
109
|
-
private setupTransactionRollbackHandling;
|
|
110
|
-
/**
|
|
111
|
-
* Forward reconciliation requests from the {@link MutationQueue} to the
|
|
112
|
-
* sync layer. When delta confirmation times out, the queue emits
|
|
113
|
-
* `reconciliation:needed` instead of rolling back, so optimistic state the
|
|
114
|
-
* server may already have committed is never destroyed.
|
|
115
|
-
*/
|
|
116
|
-
private setupReconciliationForwarding;
|
|
117
|
-
/**
|
|
118
|
-
* Persist unconfirmed transactions to IndexedDB. When delta-confirmation
|
|
119
|
-
* retries are exhausted, the transaction is cached so it survives a tab
|
|
120
|
-
* close. On the next session, a WebSocket reconnect and delta catch-up
|
|
121
|
-
* deliver the missing deltas and confirm the transaction.
|
|
122
|
-
*/
|
|
123
|
-
private setupAwaitingTransactionPersistence;
|
|
124
|
-
/** Persist an unconfirmed transaction to IndexedDB (never rejects — failures are captured). */
|
|
125
|
-
private persistAwaitingTransaction;
|
|
126
|
-
/** Drop the persisted awaiting-row once confirmed (never rejects). */
|
|
127
|
-
private removeAwaitingTransaction;
|
|
128
|
-
/**
|
|
129
|
-
* Initialize sync client with authentication
|
|
130
|
-
*/
|
|
131
|
-
initialize(userId: string, organizationId: string): Promise<void>;
|
|
132
|
-
/**
|
|
133
|
-
* The organization this client writes under (set by `initialize`).
|
|
134
|
-
* Read by the model proxy so `create()` defaults `organizationId` the
|
|
135
|
-
* same way the mutator path does — `null` until identity is wired.
|
|
136
|
-
*/
|
|
137
|
-
getOrganizationId(): string | null;
|
|
138
|
-
/**
|
|
139
|
-
* Self-healing helper for individual model records.
|
|
140
|
-
*
|
|
141
|
-
* Two registry-driven repair passes run on every row hydrated from
|
|
142
|
-
* IndexedDB or merged from a delta:
|
|
143
|
-
*
|
|
144
|
-
* 1. **Auto-fill** — for each `autoFill` rule the consumer's schema
|
|
145
|
-
* declares on this model, copy the corresponding identity value
|
|
146
|
-
* (`organizationId` / `userId`) onto the row when it's missing.
|
|
147
|
-
* Repairs rows from a past version that didn't write the field.
|
|
148
|
-
*
|
|
149
|
-
* 2. **Required-field gate** — if the row is missing any field listed
|
|
150
|
-
* in the model's `requiredFields`, return `null` so the caller
|
|
151
|
-
* skips this record. Used for FK columns whose absence renders the
|
|
152
|
-
* row unrecoverable (e.g. a Block with no sectionId).
|
|
153
|
-
*
|
|
154
|
-
* The engine itself is product-neutral: model identity (which fields
|
|
155
|
-
* to back-fill, which absences are fatal) lives entirely in the
|
|
156
|
-
* consumer schema.
|
|
157
|
-
*/
|
|
158
|
-
healModelRecord(modelType: string, data: Record<string, unknown>): {
|
|
159
|
-
data: Record<string, unknown>;
|
|
160
|
-
healed: boolean;
|
|
161
|
-
} | null;
|
|
162
|
-
/**
|
|
163
|
-
* Hydrate InstanceCache with data from Database
|
|
164
|
-
* Called after bootstrap is complete
|
|
165
|
-
*/
|
|
166
|
-
hydrateFromDatabase(): Promise<void>;
|
|
167
|
-
/**
|
|
168
|
-
* Re-hydrate InstanceCache from IndexedDB when the pool already has data.
|
|
169
|
-
*
|
|
170
|
-
* Unlike hydrateFromDatabase() (which uses addBatch and skips existing IDs),
|
|
171
|
-
* this method properly:
|
|
172
|
-
* 1. Upserts models — updates existing models in-place, adds new ones
|
|
173
|
-
* 2. Removes ghosts — deletes models from the pool that no longer exist in IndexedDB
|
|
174
|
-
*
|
|
175
|
-
* Used by background bootstrap, network recovery, and server-triggered re-bootstrap.
|
|
176
|
-
*/
|
|
177
|
-
rehydrateFromDatabase(): Promise<RehydrationStats>;
|
|
178
|
-
/**
|
|
179
|
-
* Apply a mutation to a model optimistically and queue it for server sync.
|
|
180
|
-
* IndexedDB is updated only once the server confirms the change with a delta
|
|
181
|
-
* packet.
|
|
182
|
-
*
|
|
183
|
-
* A model's changes are captured before the pool action runs, because a pool
|
|
184
|
-
* operation such as an upsert can clear the model's local change set;
|
|
185
|
-
* capturing first ensures those changes are never lost. The captured set is
|
|
186
|
-
* frozen and handed to {@link queueMutation}.
|
|
187
|
-
*/
|
|
188
|
-
private mutate;
|
|
189
|
-
private pendingChangedTypes;
|
|
190
|
-
private markModelChanged;
|
|
191
|
-
/**
|
|
192
|
-
* Capture model changes immutably BEFORE any pool operations
|
|
193
|
-
* This prevents the fragile pattern of reading changes after state modification
|
|
194
|
-
*/
|
|
195
|
-
private captureModelChanges;
|
|
196
|
-
/** Add new model (CREATE) - works offline */
|
|
197
|
-
add(model: Model, options?: WriteOptions): void;
|
|
198
|
-
/** Update existing model (UPDATE) - works offline */
|
|
199
|
-
update(model: Model, options?: WriteOptions): void;
|
|
200
|
-
/**
|
|
201
|
-
* Update existing model with pre-computed changes.
|
|
202
|
-
* Used by saveManyOptimized when incoming models have empty change-tracking
|
|
203
|
-
* (e.g. freshly constructed cell models from a bulk document decomposition).
|
|
204
|
-
*/
|
|
205
|
-
updateWithChanges(model: Model, changes?: Record<string, unknown>): void;
|
|
206
|
-
/** Expose the GraphQL client for atomic mutations (e.g., createSectionWithBlocks).
|
|
207
|
-
* Used by SyncedStore for operations that bypass the transaction queue
|
|
208
|
-
* but still need optimistic pool updates at the sync layer. */
|
|
209
|
-
get gql(): import("./interfaces/index.js").MutationExecutor;
|
|
210
|
-
/** Delete model (DELETE) - works offline */
|
|
211
|
-
delete(model: Model, options?: WriteOptions): void;
|
|
212
|
-
/**
|
|
213
|
-
* Clear all pending mutations for a specific model
|
|
214
|
-
* Called before deletion to prevent "record not found" errors on the server
|
|
215
|
-
*/
|
|
216
|
-
private clearPendingMutationsForModel;
|
|
217
|
-
/**
|
|
218
|
-
* Upload a file and create its attachment record. The upload runs through
|
|
219
|
-
* the {@link MutationQueue}, and a model is built from the server's
|
|
220
|
-
* response and added to the pool.
|
|
221
|
-
*/
|
|
222
|
-
uploadFile(file: File, options: {
|
|
223
|
-
id: string;
|
|
224
|
-
attachableType: string;
|
|
225
|
-
attachableId: string;
|
|
226
|
-
metadata?: Record<string, unknown>;
|
|
227
|
-
}): Promise<Model | null>;
|
|
228
|
-
/**
|
|
229
|
-
* Batch upload files — single GraphQL call + parallel S3 PUTs.
|
|
230
|
-
*
|
|
231
|
-
* Returns the raw `Model[]` built by the object pool (typename is
|
|
232
|
-
* determined by the payload the server returns — currently always
|
|
233
|
-
* `Attachment`). The SDK has no knowledge of app-specific model classes,
|
|
234
|
-
* so it cannot honestly claim a narrower return type; consumers that
|
|
235
|
-
* need an `Attachment[]` project through their own typed accessor
|
|
236
|
-
* (e.g. `store.query.attachments.findMany({ where: { id: IN ids } })`)
|
|
237
|
-
* after the upload resolves.
|
|
238
|
-
*/
|
|
239
|
-
batchUploadFiles(files: File[], options: {
|
|
240
|
-
ids: string[];
|
|
241
|
-
attachableType: string;
|
|
242
|
-
attachableId: string;
|
|
243
|
-
metadata?: Record<string, unknown>;
|
|
244
|
-
}): Promise<Model[]>;
|
|
245
|
-
/** Archive model (ARCHIVE) - works offline */
|
|
246
|
-
archive(model: Model): void;
|
|
247
|
-
/**
|
|
248
|
-
* Append a mutation to the pending queue and schedule its sync work.
|
|
249
|
-
*
|
|
250
|
-
* IndexedDB persistence and the server push are deferred to a microtask, so
|
|
251
|
-
* many pushes within the same tick collapse into a single serialization and
|
|
252
|
-
* a single process call. Without the deferral, queueing a hundred mutations
|
|
253
|
-
* at once — a large paste, a document import, bulk row creation — would
|
|
254
|
-
* reserialize the whole growing queue a hundred times, an O(N²) cost in
|
|
255
|
-
* `model.toJSON()`.
|
|
256
|
-
*
|
|
257
|
-
* @param mutation.capturedChanges - Pre-captured, frozen changes, used to
|
|
258
|
-
* avoid re-reading a model after pool operations that might clear them.
|
|
259
|
-
*/
|
|
260
|
-
private queueMutation;
|
|
261
|
-
private scheduleJournalFlush;
|
|
262
|
-
private flushPendingMutationJournal;
|
|
263
|
-
private syncScheduled;
|
|
264
|
-
private scheduleSync;
|
|
265
|
-
private pendingMutationRecord;
|
|
266
|
-
private persistPendingMutation;
|
|
267
|
-
/**
|
|
268
|
-
* Restore the mutation queue from IndexedDB.
|
|
269
|
-
*
|
|
270
|
-
* The persisted record was written by an earlier session, possibly by an
|
|
271
|
-
* older build of the SDK, so each entry is validated as it is replayed:
|
|
272
|
-
* corrupt entries are dropped and logged at debug level, and a failure is
|
|
273
|
-
* never swallowed silently, because the survival of offline writes must be
|
|
274
|
-
* observable.
|
|
275
|
-
*/
|
|
276
|
-
private restoreMutationQueue;
|
|
277
|
-
/**
|
|
278
|
-
* Process pending mutations - can be called by SyncedStore when online
|
|
279
|
-
*
|
|
280
|
-
* Best Practice: Only sync models that still exist locally (local-first principle)
|
|
281
|
-
* - If a model was deleted locally → skip any pending updates/creates for it
|
|
282
|
-
* - This prevents "record not found" errors from fast copy-paste-delete workflows
|
|
283
|
-
*/
|
|
284
|
-
processPendingMutations(): Promise<void>;
|
|
285
|
-
/**
|
|
286
|
-
* Stage mutation to MutationQueue - mutations in same tick are batched via microtask
|
|
287
|
-
*
|
|
288
|
-
* @param mutation.capturedChanges - Pre-captured changes to use instead of re-reading from model
|
|
289
|
-
*/
|
|
290
|
-
private stageMutation;
|
|
291
|
-
/**
|
|
292
|
-
* Resolve a conflict between the local model and incoming server data,
|
|
293
|
-
* called while processing deltas from the WebSocket. Certain server states,
|
|
294
|
-
* such as deletions and deactivations, always take precedence even when the
|
|
295
|
-
* local model has unsynced changes, so the two sides stay consistent.
|
|
296
|
-
*/
|
|
297
|
-
resolveConflicts(localModel: Model, serverData: Record<string, unknown>): Model;
|
|
298
|
-
/**
|
|
299
|
-
* Extract the critical state fields from server data. These are the states
|
|
300
|
-
* that must be honored even when the local model has unsynced changes. The
|
|
301
|
-
* conflict resolver reads exactly these fields and no others.
|
|
302
|
-
*/
|
|
303
|
-
private extractCriticalState;
|
|
304
|
-
/**
|
|
305
|
-
* Check if critical state changes exist that require forcing server state
|
|
306
|
-
*/
|
|
307
|
-
private hasCriticalStateChange;
|
|
308
|
-
/**
|
|
309
|
-
* Handle network reconnection
|
|
310
|
-
*/
|
|
311
|
-
private handleReconnection;
|
|
312
|
-
/**
|
|
313
|
-
* Handle network disconnection
|
|
314
|
-
*/
|
|
315
|
-
private handleDisconnection;
|
|
316
|
-
/**
|
|
317
|
-
* Get current sync state
|
|
318
|
-
*/
|
|
319
|
-
getState(): SyncState;
|
|
320
|
-
/**
|
|
321
|
-
* Set connection state
|
|
322
|
-
*/
|
|
323
|
-
private setConnectionState;
|
|
324
|
-
/**
|
|
325
|
-
* Subscribe to events with disposer pattern
|
|
326
|
-
*/
|
|
327
|
-
subscribe(event: string, handler: (data?: unknown) => void): () => void;
|
|
328
|
-
/**
|
|
329
|
-
* Add observer for sync events
|
|
330
|
-
*/
|
|
331
|
-
addObserver(observer: SyncObserver): void;
|
|
332
|
-
/**
|
|
333
|
-
* Remove observer
|
|
334
|
-
*/
|
|
335
|
-
removeObserver(observer: SyncObserver): void;
|
|
336
|
-
/**
|
|
337
|
-
* Notify all observers
|
|
338
|
-
*/
|
|
339
|
-
private notifyObservers;
|
|
340
|
-
/**
|
|
341
|
-
* Disconnect from sync
|
|
342
|
-
*/
|
|
343
|
-
disconnect(): void;
|
|
344
|
-
/**
|
|
345
|
-
* Mark the sync client as connected
|
|
346
|
-
* Called when WebSocket successfully connects (can happen independently of browser online/offline)
|
|
347
|
-
*/
|
|
348
|
-
markConnected(): void;
|
|
349
|
-
/**
|
|
350
|
-
* Dispose and cleanup
|
|
351
|
-
*/
|
|
352
|
-
dispose(): void;
|
|
353
|
-
/**
|
|
354
|
-
* Notify the {@link MutationQueue} of an incoming delta so it can confirm
|
|
355
|
-
* hosted writes by sync-id threshold and queued forwards by their echoed
|
|
356
|
-
* source-batch correlation id.
|
|
357
|
-
* @param syncId - The sync id of the received delta.
|
|
358
|
-
* @param transactionId - Optional server echo of the originating local write.
|
|
359
|
-
* @param correlationId - Opaque batch identity decoded from a source WAL echo.
|
|
360
|
-
*/
|
|
361
|
-
onDeltaReceived(syncId: number, transactionId?: string, correlationId?: string): void;
|
|
362
|
-
/**
|
|
363
|
-
* Cancel pending transactions for child entities orphaned by a parent's
|
|
364
|
-
* deletion. The store calls this when a delete delta arrives for a parent,
|
|
365
|
-
* cancelling any queued writes on children that reference it.
|
|
366
|
-
*
|
|
367
|
-
* @param childModelName - The child model type (for example, `Block`).
|
|
368
|
-
* @param foreignKey - The foreign-key property name (for example, `sectionId`).
|
|
369
|
-
* @param parentId - The id of the deleted parent.
|
|
370
|
-
* @returns The number of transactions cancelled.
|
|
371
|
-
*/
|
|
372
|
-
cancelTransactionsByForeignKey(childModelName: string, foreignKey: string, parentId: string): number;
|
|
373
|
-
/**
|
|
374
|
-
* Wait for a transaction to be confirmed by its delta echo. Delegates to the
|
|
375
|
-
* {@link MutationQueue}, which handles the confirmation timeout.
|
|
376
|
-
*/
|
|
377
|
-
waitForDeltaConfirmation(transactionId: string): Promise<void>;
|
|
378
|
-
/**
|
|
379
|
-
* Force sync now - process pending mutations
|
|
380
|
-
*/
|
|
381
|
-
syncNow(): Promise<void>;
|
|
382
|
-
/**
|
|
383
|
-
* Get sync statistics. Return type is inferred from the literal so
|
|
384
|
-
* the call site sees the actual shape — `connectionState` narrowed
|
|
385
|
-
* to its three states, `objectPoolStats` typed by `InstanceCache.getStats`.
|
|
386
|
-
*/
|
|
387
|
-
getSyncStats(): {
|
|
388
|
-
connectionState: 'connected' | 'disconnected' | 'connecting';
|
|
389
|
-
pendingMutations: number;
|
|
390
|
-
objectPoolStats: ReturnType<InstanceCache['getStats']>;
|
|
391
|
-
};
|
|
392
|
-
/**
|
|
393
|
-
* Get pending transaction count from MutationQueue
|
|
394
|
-
* Used by SyncedStore to compute hasUnsyncedChanges
|
|
395
|
-
*/
|
|
396
|
-
getPendingTransactionCount(): number;
|
|
397
|
-
/**
|
|
398
|
-
* Subscribe to transaction events for sync status tracking
|
|
399
|
-
* Returns unsubscribe function
|
|
400
|
-
*/
|
|
401
|
-
onTransactionEvent(event: 'created' | 'completed' | 'failed', callback: () => void): () => void;
|
|
402
|
-
/**
|
|
403
|
-
* Subscribe to mutation failures with the full payload. Mirrors the
|
|
404
|
-
* underlying MutationQueue 'transaction:failed' shape so consumers
|
|
405
|
-
* can render typed UI (toast keyed by `AbloError.type`, route-level
|
|
406
|
-
* "this entity reverted" boundaries, telemetry).
|
|
407
|
-
*
|
|
408
|
-
* Distinct from `onTransactionEvent('failed', cb)`, which serves the
|
|
409
|
-
* parameterless `pendingChanges` counter and intentionally drops the
|
|
410
|
-
* payload. The two coexist: the counter callback stays lightweight, while
|
|
411
|
-
* this typed listener drives user-visible surfaces.
|
|
412
|
-
*/
|
|
413
|
-
onMutationFailure(listener: (payload: {
|
|
414
|
-
transaction: import('./transactions/mutations/MutationQueue.js').QueuedMutation;
|
|
415
|
-
error: Error;
|
|
416
|
-
permanent?: boolean;
|
|
417
|
-
}) => void): () => void;
|
|
418
|
-
/**
|
|
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}
|
|
429
|
-
* payload (`type`, `modelName`, `modelId`, `data`, `previousData`). This is
|
|
430
|
-
* the feed the store's local-mutation subscription taps for undo recording.
|
|
431
|
-
*
|
|
432
|
-
* It subscribes to the {@link MutationQueue}'s emitter directly, since
|
|
433
|
-
* that is the only emitter that fires `transaction:created`. The SyncClient's
|
|
434
|
-
* own emitter (reached through {@link subscribe}) never rebroadcasts that
|
|
435
|
-
* event, so routing undo through `subscribe('transaction:created')` would
|
|
436
|
-
* record nothing. {@link onMutationFailure} taps the queue for the same
|
|
437
|
-
* reason.
|
|
438
|
-
*/
|
|
439
|
-
onLocalTransaction(listener: (tx: import('./transactions/mutations/MutationQueue.js').QueuedMutation) => void): () => void;
|
|
440
|
-
/**
|
|
441
|
-
* Wait for the latest in-flight transaction for (modelName, modelId)
|
|
442
|
-
* to be confirmed by the server, or reject if it's rolled back.
|
|
443
|
-
* Resolves immediately when no transaction is in flight — see
|
|
444
|
-
* `MutationQueue.confirmationFor` for the lookup contract.
|
|
445
|
-
*
|
|
446
|
-
* Distinct from `waitForDeltaConfirmation(transactionId)` which keys
|
|
447
|
-
* off a known tx id; this variant is for call sites that hold a
|
|
448
|
-
* Model reference but never see the underlying transaction.
|
|
449
|
-
*/
|
|
450
|
-
waitForConfirmation(modelName: string, modelId: string): Promise<void>;
|
|
451
|
-
/**
|
|
452
|
-
* Get detailed debug info for the sync debug page
|
|
453
|
-
*/
|
|
454
|
-
getDebugInfo(): {
|
|
455
|
-
connectionState: "connected" | "disconnected" | "connecting";
|
|
456
|
-
pendingMutationsCount: number;
|
|
457
|
-
mutationQueue: {
|
|
458
|
-
lastSeenSyncId: number;
|
|
459
|
-
awaitingDeltaCount: number;
|
|
460
|
-
awaitingDeltaTransactions: {
|
|
461
|
-
id: string;
|
|
462
|
-
type: "update" | "create" | "delete" | "archive" | "unarchive";
|
|
463
|
-
modelName: string;
|
|
464
|
-
modelId: string;
|
|
465
|
-
syncIdNeeded: number | undefined;
|
|
466
|
-
createdAt: number;
|
|
467
|
-
age: number;
|
|
468
|
-
}[];
|
|
469
|
-
pendingTransactions: {
|
|
470
|
-
id: string;
|
|
471
|
-
type: "update" | "create" | "delete" | "archive" | "unarchive";
|
|
472
|
-
modelName: string;
|
|
473
|
-
modelId: string;
|
|
474
|
-
}[];
|
|
475
|
-
executingTransactions: {
|
|
476
|
-
id: string;
|
|
477
|
-
type: "update" | "create" | "delete" | "archive" | "unarchive";
|
|
478
|
-
modelName: string;
|
|
479
|
-
modelId: string;
|
|
480
|
-
}[];
|
|
481
|
-
};
|
|
482
|
-
};
|
|
483
|
-
unassignEntity(entityType: string, entityId: string): Promise<void>;
|
|
484
|
-
reassignEntity(entityType: string, entityId: string, assigneeType: string, assigneeId: string, id?: string): Promise<void>;
|
|
485
|
-
/**
|
|
486
|
-
* Apply a batch of delta results from Database to the InstanceCache.
|
|
487
|
-
* Owns: model creation, upsert, remove, archive, conflict resolution.
|
|
488
|
-
* Returns: nothing — InstanceCache is updated in place.
|
|
489
|
-
*/
|
|
490
|
-
/**
|
|
491
|
-
* Mark a local transaction as optimistically applied. The matching
|
|
492
|
-
* server delta (when it arrives with the same `transactionId`) will
|
|
493
|
-
* be recognized as an echo and skip the pool mutation. Called
|
|
494
|
-
* automatically by `MutationQueue` when a transaction is staged;
|
|
495
|
-
* exposed publicly so tests can drive the API directly.
|
|
496
|
-
*/
|
|
497
|
-
markTransactionPending(transactionId: string): void;
|
|
498
|
-
/**
|
|
499
|
-
* Read echo-detection counters: hits, rollbacks, evictions, and the
|
|
500
|
-
* current pending-set size. Surfaced for production observability
|
|
501
|
-
* — a sustained `evictions > 0` rate or `rollbacks` spike is a
|
|
502
|
-
* health signal worth alerting on.
|
|
503
|
-
*/
|
|
504
|
-
getEchoMetrics(): Readonly<UnconfirmedWritesMetrics>;
|
|
505
|
-
/**
|
|
506
|
-
* Package-internal accessor for the {@link MutationQueue}. Used by
|
|
507
|
-
* `Ablo.commits.create()` to route raw multi-operation envelopes through the
|
|
508
|
-
* same retry-on-reconnect lane as the model proxy path, and by tests to
|
|
509
|
-
* exercise the queue's interaction with {@link markTransactionPending} on the
|
|
510
|
-
* real instance the SyncClient subscribes to. It is not re-exported to SDK
|
|
511
|
-
* consumers; `Ablo` is the public surface.
|
|
512
|
-
*/
|
|
513
|
-
getMutationQueue(): MutationQueue;
|
|
514
|
-
applyDeltaBatchToPool(dbResults: readonly AppliedChange[], enrichRelations: (modelName: string, data: Record<string, unknown>) => Record<string, unknown>): void;
|
|
515
|
-
/**
|
|
516
|
-
* Apply bootstrap data to the InstanceCache with ghost removal.
|
|
517
|
-
* Owns: model creation, batch upsert, ghost detection + removal.
|
|
518
|
-
*/
|
|
519
|
-
applyBootstrapDataToPool(bootstrapData: {
|
|
520
|
-
models?: Record<string, unknown[]>;
|
|
521
|
-
failedModels?: string[];
|
|
522
|
-
}, protectedIds?: ReadonlySet<string>, options?: {
|
|
523
|
-
/**
|
|
524
|
-
* Scoped backfill for the hydrate-on-enter path: the snapshot covers only
|
|
525
|
-
* the groups just entered, not the whole model type. Two behaviors change
|
|
526
|
-
* so the subset cannot corrupt the pool. First, the upsert is
|
|
527
|
-
* version-guarded ({@link InstanceCache.upsertIfNewer}) so a concurrent live
|
|
528
|
-
* delta is not clobbered back to the snapshot version. Second, ghost
|
|
529
|
-
* removal is skipped, because a subset snapshot must never evict rows of
|
|
530
|
-
* the same type that belong to other, unhydrated groups.
|
|
531
|
-
*/
|
|
532
|
-
scoped?: boolean;
|
|
533
|
-
}): {
|
|
534
|
-
added: number;
|
|
535
|
-
updated: number;
|
|
536
|
-
removed: number;
|
|
537
|
-
skipped: number;
|
|
538
|
-
healed: number;
|
|
539
|
-
};
|
|
540
|
-
}
|
|
541
|
-
export {};
|