@abloatai/ablo 0.36.0 → 0.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +2 -2
- package/CHANGELOG.md +71 -2013
- package/NOTICE +2 -2
- package/README.md +25 -71
- 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
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The IndexedDB-backed object store: durable, per-model record storage for
|
|
3
|
-
* the browser. See {@link ObjectStore}.
|
|
4
|
-
*/
|
|
5
|
-
import type { ModelMetadata } from '../transaction/types/index.js';
|
|
6
|
-
import type { ObjectStoreContract } from './ObjectStoreContract.js';
|
|
7
|
-
/**
|
|
8
|
-
* IDB transaction options type (TypeScript's lib.dom.d.ts may be outdated)
|
|
9
|
-
* durability: 'relaxed' provides ~16x write performance improvement
|
|
10
|
-
* by not requiring fsync on each transaction commit.
|
|
11
|
-
* Safe for optimistic sync engines that can recover from server state.
|
|
12
|
-
*/
|
|
13
|
-
interface IDBTransactionOptionsWithDurability {
|
|
14
|
-
durability?: 'default' | 'relaxed' | 'strict';
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* An IndexedDB-backed store holding the records of a single model.
|
|
18
|
-
*
|
|
19
|
-
* It implements {@link ObjectStoreContract}, the shared surface that
|
|
20
|
-
* {@link InMemoryObjectStore} also satisfies, so callers can hold either
|
|
21
|
-
* implementation behind one type. Because both are checked against the same
|
|
22
|
-
* interface, any drift between them surfaces as a typecheck error rather
|
|
23
|
-
* than a runtime surprise.
|
|
24
|
-
*
|
|
25
|
-
* The store talks to the native IndexedDB API directly and uses relaxed
|
|
26
|
-
* transaction durability on writes.
|
|
27
|
-
*/
|
|
28
|
-
export declare class ObjectStore implements ObjectStoreContract {
|
|
29
|
-
protected db: IDBDatabase;
|
|
30
|
-
protected modelName: string;
|
|
31
|
-
protected storeName: string;
|
|
32
|
-
protected metadata: ModelMetadata;
|
|
33
|
-
private readonly writeDurability;
|
|
34
|
-
private isClosing;
|
|
35
|
-
constructor(db: IDBDatabase, modelName: string, storeName: string, metadata: ModelMetadata, writeDurability?: NonNullable<IDBTransactionOptionsWithDurability['durability']>);
|
|
36
|
-
/** Insert without replacing an existing key (used by the commit outbox). */
|
|
37
|
-
add(data: Record<string, unknown>): Promise<void>;
|
|
38
|
-
/**
|
|
39
|
-
* Mark this store as closing to prevent new operations
|
|
40
|
-
*/
|
|
41
|
-
markAsClosing(): void;
|
|
42
|
-
/**
|
|
43
|
-
* Check if database is available for operations
|
|
44
|
-
*/
|
|
45
|
-
private checkDatabaseAvailable;
|
|
46
|
-
/**
|
|
47
|
-
* Store a model in IndexedDB.
|
|
48
|
-
* Matches the {@link InMemoryObjectStore.put} signature so both
|
|
49
|
-
* stores satisfy the same caller-visible contract.
|
|
50
|
-
*/
|
|
51
|
-
put(data: Record<string, unknown>): Promise<void>;
|
|
52
|
-
/**
|
|
53
|
-
* Get a model by ID
|
|
54
|
-
*/
|
|
55
|
-
get(id: string): Promise<Record<string, unknown> | undefined>;
|
|
56
|
-
/**
|
|
57
|
-
* Batch get multiple models by IDs in a single IDB transaction.
|
|
58
|
-
* Much faster than N sequential get() calls (1 transaction vs N).
|
|
59
|
-
*/
|
|
60
|
-
getMany(ids: string[]): Promise<Map<string, Record<string, unknown>>>;
|
|
61
|
-
/**
|
|
62
|
-
* Get all models
|
|
63
|
-
*/
|
|
64
|
-
getAll(): Promise<Record<string, unknown>[]>;
|
|
65
|
-
/**
|
|
66
|
-
* Delete a model by ID
|
|
67
|
-
*/
|
|
68
|
-
delete(id: string): Promise<void>;
|
|
69
|
-
/**
|
|
70
|
-
* Check if store is ready (has data)
|
|
71
|
-
*/
|
|
72
|
-
checkIsReady(): Promise<boolean>;
|
|
73
|
-
/**
|
|
74
|
-
* Clear all data in store
|
|
75
|
-
*/
|
|
76
|
-
clear(): Promise<void>;
|
|
77
|
-
/**
|
|
78
|
-
* Get count of models in store
|
|
79
|
-
*/
|
|
80
|
-
count(): Promise<number>;
|
|
81
|
-
/**
|
|
82
|
-
* Get models by indexed property
|
|
83
|
-
*/
|
|
84
|
-
getAllFromIndex(indexName: string, value: IDBValidKey): Promise<Record<string, unknown>[]>;
|
|
85
|
-
/**
|
|
86
|
-
* Get models by indexed key (supports compound keys)
|
|
87
|
-
*/
|
|
88
|
-
getAllForIndexedKey(indexedKey: string, keyValue: IDBValidKey): Promise<Record<string, unknown>[]>;
|
|
89
|
-
/**
|
|
90
|
-
* Get first model matching index
|
|
91
|
-
*/
|
|
92
|
-
getFromIndex(indexName: string, value: IDBValidKey): Promise<Record<string, unknown> | undefined>;
|
|
93
|
-
/**
|
|
94
|
-
* Get count from index
|
|
95
|
-
*/
|
|
96
|
-
countFromIndex(indexName: string, value: IDBValidKey): Promise<number>;
|
|
97
|
-
/**
|
|
98
|
-
* Check if any models exist for index value
|
|
99
|
-
*/
|
|
100
|
-
hasModelsForIndex(indexName: string, value: IDBValidKey): Promise<boolean>;
|
|
101
|
-
/**
|
|
102
|
-
* Get store statistics
|
|
103
|
-
*/
|
|
104
|
-
getStats(): Promise<{
|
|
105
|
-
count: number;
|
|
106
|
-
ready: boolean;
|
|
107
|
-
loadStrategy: string;
|
|
108
|
-
indexes: string[];
|
|
109
|
-
}>;
|
|
110
|
-
/**
|
|
111
|
-
* Perform maintenance (override in subclasses for specific needs)
|
|
112
|
-
*/
|
|
113
|
-
performMaintenance(): Promise<void>;
|
|
114
|
-
}
|
|
115
|
-
export {};
|
|
@@ -1,393 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The IndexedDB-backed object store: durable, per-model record storage for
|
|
3
|
-
* the browser. See {@link ObjectStore}.
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* An IndexedDB-backed store holding the records of a single model.
|
|
7
|
-
*
|
|
8
|
-
* It implements {@link ObjectStoreContract}, the shared surface that
|
|
9
|
-
* {@link InMemoryObjectStore} also satisfies, so callers can hold either
|
|
10
|
-
* implementation behind one type. Because both are checked against the same
|
|
11
|
-
* interface, any drift between them surfaces as a typecheck error rather
|
|
12
|
-
* than a runtime surprise.
|
|
13
|
-
*
|
|
14
|
-
* The store talks to the native IndexedDB API directly and uses relaxed
|
|
15
|
-
* transaction durability on writes.
|
|
16
|
-
*/
|
|
17
|
-
export class ObjectStore {
|
|
18
|
-
db;
|
|
19
|
-
modelName;
|
|
20
|
-
storeName;
|
|
21
|
-
metadata;
|
|
22
|
-
writeDurability;
|
|
23
|
-
isClosing = false;
|
|
24
|
-
constructor(db, modelName, storeName, metadata, writeDurability = 'relaxed') {
|
|
25
|
-
this.db = db;
|
|
26
|
-
this.modelName = modelName;
|
|
27
|
-
this.storeName = storeName;
|
|
28
|
-
this.metadata = metadata;
|
|
29
|
-
this.writeDurability = writeDurability;
|
|
30
|
-
}
|
|
31
|
-
/** Insert without replacing an existing key (used by the commit outbox). */
|
|
32
|
-
async add(data) {
|
|
33
|
-
if (!this.checkDatabaseAvailable()) {
|
|
34
|
-
return Promise.reject(new Error('IndexedDB not available (closing or invalid)'));
|
|
35
|
-
}
|
|
36
|
-
return new Promise((resolve, reject) => {
|
|
37
|
-
try {
|
|
38
|
-
const tx = this.db.transaction([this.storeName], 'readwrite', {
|
|
39
|
-
durability: this.writeDurability,
|
|
40
|
-
});
|
|
41
|
-
const store = tx.objectStore(this.storeName);
|
|
42
|
-
const request = store.add(data);
|
|
43
|
-
tx.oncomplete = () => { resolve(); };
|
|
44
|
-
tx.onerror = () => { reject(tx.error ?? new Error('IndexedDB transaction error')); };
|
|
45
|
-
request.onerror = () => { reject(request.error ?? new Error('IndexedDB request error')); };
|
|
46
|
-
}
|
|
47
|
-
catch (error) {
|
|
48
|
-
reject(error instanceof Error ? error : new Error(String(error)));
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Mark this store as closing to prevent new operations
|
|
54
|
-
*/
|
|
55
|
-
markAsClosing() {
|
|
56
|
-
this.isClosing = true;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Check if database is available for operations
|
|
60
|
-
*/
|
|
61
|
-
checkDatabaseAvailable() {
|
|
62
|
-
if (this.isClosing) {
|
|
63
|
-
return false;
|
|
64
|
-
}
|
|
65
|
-
// Check if the database connection is still open
|
|
66
|
-
// In IndexedDB, there's no direct way to check if a connection is open,
|
|
67
|
-
// but we can check if the database object is still valid
|
|
68
|
-
try {
|
|
69
|
-
// Accessing objectStoreNames will throw if the database is closed
|
|
70
|
-
void this.db.objectStoreNames;
|
|
71
|
-
return true;
|
|
72
|
-
}
|
|
73
|
-
catch (error) {
|
|
74
|
-
return false;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Store a model in IndexedDB.
|
|
79
|
-
* Matches the {@link InMemoryObjectStore.put} signature so both
|
|
80
|
-
* stores satisfy the same caller-visible contract.
|
|
81
|
-
*/
|
|
82
|
-
async put(data) {
|
|
83
|
-
if (!this.checkDatabaseAvailable()) {
|
|
84
|
-
// Surface an explicit error so upstream does not assume success
|
|
85
|
-
return Promise.reject(new Error('IndexedDB not available (closing or invalid)'));
|
|
86
|
-
}
|
|
87
|
-
return new Promise((resolve, reject) => {
|
|
88
|
-
try {
|
|
89
|
-
// Use relaxed durability for ~16x write performance (safe with optimistic sync)
|
|
90
|
-
const tx = this.db.transaction([this.storeName], 'readwrite', {
|
|
91
|
-
durability: this.writeDurability,
|
|
92
|
-
});
|
|
93
|
-
const store = tx.objectStore(this.storeName);
|
|
94
|
-
const request = store.put(data);
|
|
95
|
-
tx.oncomplete = () => { resolve(); };
|
|
96
|
-
tx.onerror = () => { reject(tx.error ?? new Error('IndexedDB transaction error')); };
|
|
97
|
-
request.onerror = () => { reject(request.error ?? new Error('IndexedDB request error')); };
|
|
98
|
-
}
|
|
99
|
-
catch (error) {
|
|
100
|
-
// Propagate failure so callers do not continue with inconsistent state
|
|
101
|
-
reject(error instanceof Error ? error : new Error(String(error)));
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Get a model by ID
|
|
107
|
-
*/
|
|
108
|
-
async get(id) {
|
|
109
|
-
if (!this.checkDatabaseAvailable()) {
|
|
110
|
-
return Promise.resolve(undefined);
|
|
111
|
-
}
|
|
112
|
-
return new Promise((resolve, reject) => {
|
|
113
|
-
try {
|
|
114
|
-
const tx = this.db.transaction([this.storeName], 'readonly');
|
|
115
|
-
const store = tx.objectStore(this.storeName);
|
|
116
|
-
const request = store.get(id);
|
|
117
|
-
request.onsuccess = () => { resolve(request.result); };
|
|
118
|
-
request.onerror = () => { reject(request.error); };
|
|
119
|
-
}
|
|
120
|
-
catch (error) {
|
|
121
|
-
resolve(undefined);
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Batch get multiple models by IDs in a single IDB transaction.
|
|
127
|
-
* Much faster than N sequential get() calls (1 transaction vs N).
|
|
128
|
-
*/
|
|
129
|
-
async getMany(ids) {
|
|
130
|
-
const results = new Map();
|
|
131
|
-
if (ids.length === 0 || !this.checkDatabaseAvailable()) {
|
|
132
|
-
return results;
|
|
133
|
-
}
|
|
134
|
-
return new Promise((resolve, reject) => {
|
|
135
|
-
try {
|
|
136
|
-
const tx = this.db.transaction([this.storeName], 'readonly');
|
|
137
|
-
const store = tx.objectStore(this.storeName);
|
|
138
|
-
let completed = 0;
|
|
139
|
-
for (const id of ids) {
|
|
140
|
-
const request = store.get(id);
|
|
141
|
-
request.onsuccess = () => {
|
|
142
|
-
if (request.result) {
|
|
143
|
-
results.set(id, request.result);
|
|
144
|
-
}
|
|
145
|
-
completed++;
|
|
146
|
-
if (completed === ids.length) {
|
|
147
|
-
resolve(results);
|
|
148
|
-
}
|
|
149
|
-
};
|
|
150
|
-
request.onerror = () => {
|
|
151
|
-
completed++;
|
|
152
|
-
if (completed === ids.length) {
|
|
153
|
-
resolve(results);
|
|
154
|
-
}
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
tx.onerror = () => { reject(tx.error); };
|
|
158
|
-
}
|
|
159
|
-
catch (error) {
|
|
160
|
-
resolve(results);
|
|
161
|
-
}
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
/**
|
|
165
|
-
* Get all models
|
|
166
|
-
*/
|
|
167
|
-
async getAll() {
|
|
168
|
-
if (!this.checkDatabaseAvailable()) {
|
|
169
|
-
return Promise.resolve([]);
|
|
170
|
-
}
|
|
171
|
-
return new Promise((resolve, reject) => {
|
|
172
|
-
try {
|
|
173
|
-
const tx = this.db.transaction([this.storeName], 'readonly');
|
|
174
|
-
const store = tx.objectStore(this.storeName);
|
|
175
|
-
const request = store.getAll();
|
|
176
|
-
request.onsuccess = () => { resolve(request.result || []); };
|
|
177
|
-
request.onerror = () => { reject(request.error); };
|
|
178
|
-
}
|
|
179
|
-
catch (error) {
|
|
180
|
-
resolve([]);
|
|
181
|
-
}
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Delete a model by ID
|
|
186
|
-
*/
|
|
187
|
-
async delete(id) {
|
|
188
|
-
if (!this.checkDatabaseAvailable()) {
|
|
189
|
-
return Promise.reject(new Error('IndexedDB not available (closing or invalid)'));
|
|
190
|
-
}
|
|
191
|
-
return new Promise((resolve, reject) => {
|
|
192
|
-
try {
|
|
193
|
-
// Use relaxed durability for ~16x write performance (safe with optimistic sync)
|
|
194
|
-
const tx = this.db.transaction([this.storeName], 'readwrite', {
|
|
195
|
-
durability: this.writeDurability,
|
|
196
|
-
});
|
|
197
|
-
const store = tx.objectStore(this.storeName);
|
|
198
|
-
const request = store.delete(id);
|
|
199
|
-
tx.oncomplete = () => { resolve(); };
|
|
200
|
-
tx.onerror = () => { reject(tx.error ?? new Error('IndexedDB transaction error')); };
|
|
201
|
-
request.onerror = () => { reject(request.error ?? new Error('IndexedDB request error')); };
|
|
202
|
-
}
|
|
203
|
-
catch (error) {
|
|
204
|
-
reject(error instanceof Error ? error : new Error(String(error)));
|
|
205
|
-
}
|
|
206
|
-
});
|
|
207
|
-
}
|
|
208
|
-
/**
|
|
209
|
-
* Check if store is ready (has data)
|
|
210
|
-
*/
|
|
211
|
-
async checkIsReady() {
|
|
212
|
-
try {
|
|
213
|
-
await this.count();
|
|
214
|
-
return true;
|
|
215
|
-
}
|
|
216
|
-
catch {
|
|
217
|
-
return false;
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* Clear all data in store
|
|
222
|
-
*/
|
|
223
|
-
async clear() {
|
|
224
|
-
if (!this.checkDatabaseAvailable()) {
|
|
225
|
-
return Promise.reject(new Error('IndexedDB not available (closing or invalid)'));
|
|
226
|
-
}
|
|
227
|
-
return new Promise((resolve, reject) => {
|
|
228
|
-
try {
|
|
229
|
-
// Use relaxed durability for ~16x write performance (safe with optimistic sync)
|
|
230
|
-
const tx = this.db.transaction([this.storeName], 'readwrite', {
|
|
231
|
-
durability: this.writeDurability,
|
|
232
|
-
});
|
|
233
|
-
const store = tx.objectStore(this.storeName);
|
|
234
|
-
const request = store.clear();
|
|
235
|
-
tx.oncomplete = () => { resolve(); };
|
|
236
|
-
tx.onerror = () => { reject(tx.error ?? new Error('IndexedDB transaction error')); };
|
|
237
|
-
request.onerror = () => { reject(request.error ?? new Error('IndexedDB request error')); };
|
|
238
|
-
}
|
|
239
|
-
catch (error) {
|
|
240
|
-
reject(error instanceof Error ? error : new Error(String(error)));
|
|
241
|
-
}
|
|
242
|
-
});
|
|
243
|
-
}
|
|
244
|
-
/**
|
|
245
|
-
* Get count of models in store
|
|
246
|
-
*/
|
|
247
|
-
async count() {
|
|
248
|
-
if (!this.checkDatabaseAvailable()) {
|
|
249
|
-
return Promise.resolve(0);
|
|
250
|
-
}
|
|
251
|
-
return new Promise((resolve, reject) => {
|
|
252
|
-
try {
|
|
253
|
-
const tx = this.db.transaction([this.storeName], 'readonly');
|
|
254
|
-
const store = tx.objectStore(this.storeName);
|
|
255
|
-
const request = store.count();
|
|
256
|
-
request.onsuccess = () => { resolve(request.result); };
|
|
257
|
-
request.onerror = () => { reject(request.error); };
|
|
258
|
-
}
|
|
259
|
-
catch (error) {
|
|
260
|
-
resolve(0);
|
|
261
|
-
}
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
/**
|
|
265
|
-
* Get models by indexed property
|
|
266
|
-
*/
|
|
267
|
-
async getAllFromIndex(indexName, value) {
|
|
268
|
-
if (!this.checkDatabaseAvailable()) {
|
|
269
|
-
return Promise.resolve([]);
|
|
270
|
-
}
|
|
271
|
-
return new Promise((resolve, reject) => {
|
|
272
|
-
try {
|
|
273
|
-
const tx = this.db.transaction([this.storeName], 'readonly');
|
|
274
|
-
const store = tx.objectStore(this.storeName);
|
|
275
|
-
const index = store.index(indexName);
|
|
276
|
-
const request = index.getAll(value);
|
|
277
|
-
request.onsuccess = () => { resolve(request.result); };
|
|
278
|
-
request.onerror = () => { reject(request.error); };
|
|
279
|
-
}
|
|
280
|
-
catch (error) {
|
|
281
|
-
resolve([]);
|
|
282
|
-
}
|
|
283
|
-
});
|
|
284
|
-
}
|
|
285
|
-
/**
|
|
286
|
-
* Get models by indexed key (supports compound keys)
|
|
287
|
-
*/
|
|
288
|
-
async getAllForIndexedKey(indexedKey, keyValue) {
|
|
289
|
-
if (!this.checkDatabaseAvailable()) {
|
|
290
|
-
return Promise.resolve([]);
|
|
291
|
-
}
|
|
292
|
-
// For simple index
|
|
293
|
-
if (!indexedKey.includes('.')) {
|
|
294
|
-
return this.getAllFromIndex(indexedKey, keyValue);
|
|
295
|
-
}
|
|
296
|
-
// For compound index (e.g., "teamId.status")
|
|
297
|
-
return new Promise((resolve, reject) => {
|
|
298
|
-
try {
|
|
299
|
-
const tx = this.db.transaction([this.storeName], 'readonly');
|
|
300
|
-
const store = tx.objectStore(this.storeName);
|
|
301
|
-
const request = store.getAll();
|
|
302
|
-
request.onsuccess = () => {
|
|
303
|
-
const allRecords = request.result;
|
|
304
|
-
// Filter in memory for compound keys
|
|
305
|
-
const keyParts = indexedKey.split('.');
|
|
306
|
-
const filtered = allRecords.filter((record) => {
|
|
307
|
-
let value = record;
|
|
308
|
-
for (const part of keyParts) {
|
|
309
|
-
value = value?.[part];
|
|
310
|
-
if (value === undefined)
|
|
311
|
-
return false;
|
|
312
|
-
}
|
|
313
|
-
return value === keyValue;
|
|
314
|
-
});
|
|
315
|
-
resolve(filtered);
|
|
316
|
-
};
|
|
317
|
-
request.onerror = () => { reject(request.error); };
|
|
318
|
-
}
|
|
319
|
-
catch (error) {
|
|
320
|
-
resolve([]);
|
|
321
|
-
}
|
|
322
|
-
});
|
|
323
|
-
}
|
|
324
|
-
/**
|
|
325
|
-
* Get first model matching index
|
|
326
|
-
*/
|
|
327
|
-
async getFromIndex(indexName, value) {
|
|
328
|
-
if (!this.checkDatabaseAvailable()) {
|
|
329
|
-
return Promise.resolve(undefined);
|
|
330
|
-
}
|
|
331
|
-
return new Promise((resolve, reject) => {
|
|
332
|
-
try {
|
|
333
|
-
const tx = this.db.transaction([this.storeName], 'readonly');
|
|
334
|
-
const store = tx.objectStore(this.storeName);
|
|
335
|
-
const index = store.index(indexName);
|
|
336
|
-
const request = index.get(value);
|
|
337
|
-
request.onsuccess = () => { resolve(request.result); };
|
|
338
|
-
request.onerror = () => { reject(request.error); };
|
|
339
|
-
}
|
|
340
|
-
catch (error) {
|
|
341
|
-
resolve(undefined);
|
|
342
|
-
}
|
|
343
|
-
});
|
|
344
|
-
}
|
|
345
|
-
/**
|
|
346
|
-
* Get count from index
|
|
347
|
-
*/
|
|
348
|
-
async countFromIndex(indexName, value) {
|
|
349
|
-
if (!this.checkDatabaseAvailable()) {
|
|
350
|
-
return Promise.resolve(0);
|
|
351
|
-
}
|
|
352
|
-
return new Promise((resolve, reject) => {
|
|
353
|
-
try {
|
|
354
|
-
const tx = this.db.transaction([this.storeName], 'readonly');
|
|
355
|
-
const store = tx.objectStore(this.storeName);
|
|
356
|
-
const index = store.index(indexName);
|
|
357
|
-
const request = index.count(value);
|
|
358
|
-
request.onsuccess = () => { resolve(request.result); };
|
|
359
|
-
request.onerror = () => { reject(request.error); };
|
|
360
|
-
}
|
|
361
|
-
catch (error) {
|
|
362
|
-
resolve(0);
|
|
363
|
-
}
|
|
364
|
-
});
|
|
365
|
-
}
|
|
366
|
-
/**
|
|
367
|
-
* Check if any models exist for index value
|
|
368
|
-
*/
|
|
369
|
-
async hasModelsForIndex(indexName, value) {
|
|
370
|
-
const count = await this.countFromIndex(indexName, value);
|
|
371
|
-
return count > 0;
|
|
372
|
-
}
|
|
373
|
-
/**
|
|
374
|
-
* Get store statistics
|
|
375
|
-
*/
|
|
376
|
-
async getStats() {
|
|
377
|
-
const tx = this.db.transaction([this.storeName], 'readonly');
|
|
378
|
-
const store = tx.objectStore(this.storeName);
|
|
379
|
-
return {
|
|
380
|
-
count: await this.count(),
|
|
381
|
-
ready: await this.checkIsReady(),
|
|
382
|
-
loadStrategy: this.metadata.loadStrategy,
|
|
383
|
-
indexes: store.indexNames ? Array.from(store.indexNames) : [],
|
|
384
|
-
};
|
|
385
|
-
}
|
|
386
|
-
/**
|
|
387
|
-
* Perform maintenance (override in subclasses for specific needs)
|
|
388
|
-
*/
|
|
389
|
-
async performMaintenance() {
|
|
390
|
-
// Default: no maintenance needed
|
|
391
|
-
// Subclasses can override for compaction, cleanup, etc.
|
|
392
|
-
}
|
|
393
|
-
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The shared interface for record-shaped object stores. Two implementations
|
|
3
|
-
* satisfy it:
|
|
4
|
-
*
|
|
5
|
-
* - {@link ObjectStore} — backed by IndexedDB, for durable persistence in
|
|
6
|
-
* the browser.
|
|
7
|
-
* - {@link InMemoryObjectStore} — backed by a Map, for tests and
|
|
8
|
-
* environments without IndexedDB.
|
|
9
|
-
*
|
|
10
|
-
* Both expose the same asynchronous surface — `put`, `get`, `getAll`,
|
|
11
|
-
* `delete`, `getAllFromIndex`, `clear`, and `markAsClosing` — so callers
|
|
12
|
-
* work against this interface and never branch on which concrete store they
|
|
13
|
-
* hold. Because both implementations are checked against one interface, any
|
|
14
|
-
* drift between them surfaces as a typecheck error at the store rather than
|
|
15
|
-
* a silent failure in a caller.
|
|
16
|
-
*/
|
|
17
|
-
export interface ObjectStoreContract {
|
|
18
|
-
/** Insert a record only when its key is absent. */
|
|
19
|
-
add(data: Record<string, unknown>): Promise<void>;
|
|
20
|
-
/** Insert or update a record. The record must carry an `id` field. */
|
|
21
|
-
put(data: Record<string, unknown>): Promise<void>;
|
|
22
|
-
/** Look up a record by id. */
|
|
23
|
-
get(id: string): Promise<Record<string, unknown> | undefined>;
|
|
24
|
-
/** Read every record currently in the store. */
|
|
25
|
-
getAll(): Promise<Record<string, unknown>[]>;
|
|
26
|
-
/** Delete a record by id. No-op if absent. */
|
|
27
|
-
delete(id: string): Promise<void>;
|
|
28
|
-
/** Read every record matching an indexed value. */
|
|
29
|
-
getAllFromIndex(indexName: string, value: IDBValidKey): Promise<Record<string, unknown>[]>;
|
|
30
|
-
/** Remove every record. */
|
|
31
|
-
clear(): Promise<void>;
|
|
32
|
-
/**
|
|
33
|
-
* Mark the store as closing so subsequent `put`/`get` calls
|
|
34
|
-
* short-circuit to a rejection rather than racing the underlying
|
|
35
|
-
* IDB connection close. No-op for in-memory stores.
|
|
36
|
-
*/
|
|
37
|
-
markAsClosing(): void;
|
|
38
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Manages the {@link ObjectStore} instances the sync engine keeps in the
|
|
3
|
-
* browser — one per registered model — alongside the single
|
|
4
|
-
* {@link SyncActionStore} for pending changes. It creates each store from the
|
|
5
|
-
* model's metadata, tracks readiness, and provisions the underlying IndexedDB
|
|
6
|
-
* object stores. A model's load strategy — instant or lazy — decides how and
|
|
7
|
-
* when its data is loaded.
|
|
8
|
-
*/
|
|
9
|
-
import { ModelRegistry } from '../ModelRegistry.js';
|
|
10
|
-
import { ObjectStore } from './ObjectStore.js';
|
|
11
|
-
import { SyncActionStore } from './SyncActionStore.js';
|
|
12
|
-
import { LoadStrategy } from '../transaction/types/index.js';
|
|
13
|
-
/**
|
|
14
|
-
* StoreManager - Central manager for all ObjectStore instances
|
|
15
|
-
*
|
|
16
|
-
* Key responsibilities:
|
|
17
|
-
* - Creates ObjectStore instances for each registered model
|
|
18
|
-
* - Manages store lifecycle and readiness
|
|
19
|
-
* - Provides unified interface for database operations
|
|
20
|
-
* - Handles store-specific optimizations based on load strategies
|
|
21
|
-
*/
|
|
22
|
-
export declare class StoreManager {
|
|
23
|
-
private readonly runtime;
|
|
24
|
-
private stores;
|
|
25
|
-
/** Strict-durability wrapper for the client write journal and commit outbox. */
|
|
26
|
-
private transactionStore;
|
|
27
|
-
private syncactionStore;
|
|
28
|
-
private db;
|
|
29
|
-
private isInitialized;
|
|
30
|
-
private modelRegistry;
|
|
31
|
-
constructor(modelRegistry: ModelRegistry, runtime?: RuntimeContext);
|
|
32
|
-
/**
|
|
33
|
-
* Initialize all stores for registered models
|
|
34
|
-
*/
|
|
35
|
-
initializeStores(db: IDBDatabase): Promise<void>;
|
|
36
|
-
/**
|
|
37
|
-
* Create ObjectStore for a specific model
|
|
38
|
-
*/
|
|
39
|
-
private createStoreForModel;
|
|
40
|
-
/**
|
|
41
|
-
* Create stores (tables) in IndexedDB
|
|
42
|
-
*/
|
|
43
|
-
createStores(db: IDBDatabase): Promise<void>;
|
|
44
|
-
/**
|
|
45
|
-
* Create special tables (sync_action_table, model_table, model_table_partial, __meta, __transactions)
|
|
46
|
-
*/
|
|
47
|
-
private createSpecialTables;
|
|
48
|
-
/**
|
|
49
|
-
* Get ObjectStore for a model
|
|
50
|
-
*/
|
|
51
|
-
getStore(modelName: string): ObjectStore | undefined;
|
|
52
|
-
/**
|
|
53
|
-
* Get SyncactionStore instance
|
|
54
|
-
*/
|
|
55
|
-
getSyncactionStore(): SyncActionStore | null;
|
|
56
|
-
/**
|
|
57
|
-
* Get all stores
|
|
58
|
-
*/
|
|
59
|
-
getAllStores(): Map<string, ObjectStore>;
|
|
60
|
-
/**
|
|
61
|
-
* Check readiness of all stores
|
|
62
|
-
*/
|
|
63
|
-
checkReadinessOfStores(): Promise<{
|
|
64
|
-
ready: boolean;
|
|
65
|
-
readyStores: string[];
|
|
66
|
-
notReadyStores: string[];
|
|
67
|
-
totalStores: number;
|
|
68
|
-
}>;
|
|
69
|
-
/**
|
|
70
|
-
* Reports whether any data store holds at least one record. This is a
|
|
71
|
-
* cache-validity check: if the stores are empty, the sync cursor
|
|
72
|
-
* (`lastSyncId`) is meaningless no matter what the metadata says, because the
|
|
73
|
-
* cursor and the data must travel together — no data means no cursor, which
|
|
74
|
-
* forces a full bootstrap. To stay cheap it samples up to three stores rather
|
|
75
|
-
* than scanning them all, and returns true as soon as one has records.
|
|
76
|
-
*/
|
|
77
|
-
hasAnyData(): Promise<boolean>;
|
|
78
|
-
/**
|
|
79
|
-
* Get stores by load strategy
|
|
80
|
-
*/
|
|
81
|
-
getStoresByStrategy(strategy: LoadStrategy): ObjectStore[];
|
|
82
|
-
/**
|
|
83
|
-
* Perform maintenance on all stores
|
|
84
|
-
*/
|
|
85
|
-
performMaintenance(): Promise<void>;
|
|
86
|
-
/**
|
|
87
|
-
* Clear all stores
|
|
88
|
-
*/
|
|
89
|
-
clearAllStores(): Promise<void>;
|
|
90
|
-
/**
|
|
91
|
-
* Mark all stores as closing to prevent new operations
|
|
92
|
-
* Called before database connection is closed
|
|
93
|
-
*/
|
|
94
|
-
markAllStoresAsClosing(): void;
|
|
95
|
-
/**
|
|
96
|
-
* Get comprehensive statistics
|
|
97
|
-
*/
|
|
98
|
-
getComprehensiveStats(): Promise<{
|
|
99
|
-
totalStores: number;
|
|
100
|
-
readiness: {
|
|
101
|
-
ready: number;
|
|
102
|
-
notReady: number;
|
|
103
|
-
};
|
|
104
|
-
totalRecords: number;
|
|
105
|
-
storeDetails: {
|
|
106
|
-
modelName: string;
|
|
107
|
-
storeName: string;
|
|
108
|
-
strategy: LoadStrategy;
|
|
109
|
-
ready: boolean;
|
|
110
|
-
count: number;
|
|
111
|
-
}[];
|
|
112
|
-
}>;
|
|
113
|
-
}
|
|
114
|
-
import type { RuntimeContext } from '../RuntimeContext.js';
|