@abloatai/ablo 0.25.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +5 -3
- package/CHANGELOG.md +34 -0
- package/README.md +104 -88
- package/dist/BaseSyncedStore.d.ts +140 -266
- package/dist/BaseSyncedStore.js +338 -739
- package/dist/Database.d.ts +62 -77
- package/dist/Database.js +106 -127
- package/dist/{ObjectPool.d.ts → InstanceCache.d.ts} +10 -13
- package/dist/{ObjectPool.js → InstanceCache.js} +91 -83
- package/dist/LazyReferenceCollection.d.ts +11 -15
- package/dist/LazyReferenceCollection.js +16 -15
- package/dist/Model.d.ts +37 -52
- package/dist/Model.js +52 -69
- package/dist/ModelRegistry.d.ts +46 -25
- package/dist/ModelRegistry.js +32 -30
- package/dist/NetworkMonitor.d.ts +5 -6
- package/dist/NetworkMonitor.js +6 -7
- package/dist/SyncClient.d.ts +119 -109
- package/dist/SyncClient.js +303 -224
- package/dist/SyncEngineContext.d.ts +1 -3
- package/dist/SyncEngineContext.js +1 -2
- package/dist/adapters/alwaysOnline.d.ts +6 -8
- package/dist/adapters/alwaysOnline.js +6 -8
- package/dist/adapters/inMemoryStorage.d.ts +9 -9
- package/dist/adapters/inMemoryStorage.js +9 -9
- package/dist/agent/Agent.d.ts +39 -31
- package/dist/agent/Agent.js +35 -23
- package/dist/agent/index.d.ts +4 -4
- package/dist/agent/index.js +5 -5
- package/dist/agent/session.d.ts +47 -44
- package/dist/agent/session.js +37 -48
- package/dist/agent/types.d.ts +26 -31
- package/dist/agent/types.js +6 -7
- package/dist/ai-sdk/coordinatedTool.d.ts +108 -0
- package/dist/ai-sdk/{coordinated-tool.js → coordinatedTool.js} +44 -38
- package/dist/ai-sdk/coordinationContext.d.ts +46 -0
- package/dist/ai-sdk/{coordination-context.js → coordinationContext.js} +30 -31
- package/dist/ai-sdk/index.d.ts +25 -22
- package/dist/ai-sdk/index.js +25 -22
- package/dist/ai-sdk/wrap.d.ts +7 -8
- package/dist/ai-sdk/wrap.js +2 -2
- package/dist/auth/credentialPolicy.d.ts +74 -71
- package/dist/auth/credentialPolicy.js +51 -56
- package/dist/auth/credentialSource.d.ts +7 -18
- package/dist/auth/credentialSource.js +10 -18
- package/dist/auth/index.d.ts +59 -58
- package/dist/auth/index.js +34 -40
- package/dist/auth/schemas.d.ts +5 -4
- package/dist/auth/schemas.js +5 -4
- package/dist/batching/index.d.ts +19 -21
- package/dist/batching/index.js +14 -17
- package/dist/cli.cjs +483 -369
- package/dist/client/Ablo.d.ts +107 -836
- package/dist/client/Ablo.js +174 -833
- package/dist/client/ApiClient.d.ts +44 -20
- package/dist/client/ApiClient.js +193 -44
- package/dist/client/auth.d.ts +51 -60
- package/dist/client/auth.js +137 -110
- package/dist/client/claimHeartbeatLoop.d.ts +50 -0
- package/dist/client/claimHeartbeatLoop.js +88 -0
- package/dist/client/consoleLogger.d.ts +35 -0
- package/dist/client/consoleLogger.js +44 -0
- package/dist/client/createInternalComponents.d.ts +14 -17
- package/dist/client/createInternalComponents.js +26 -31
- package/dist/client/createModelProxy.d.ts +130 -120
- package/dist/client/createModelProxy.js +158 -124
- package/dist/client/credentialEndpoint.d.ts +61 -0
- package/dist/client/credentialEndpoint.js +86 -0
- package/dist/client/functionalUpdate.d.ts +29 -27
- package/dist/client/functionalUpdate.js +21 -21
- package/dist/client/hostedEndpoints.d.ts +21 -0
- package/dist/client/hostedEndpoints.js +21 -0
- package/dist/client/httpClient.d.ts +58 -54
- package/dist/client/httpClient.js +29 -31
- package/dist/client/identity.d.ts +15 -20
- package/dist/client/identity.js +49 -59
- package/dist/client/modelRegistration.d.ts +10 -0
- package/dist/client/modelRegistration.js +301 -0
- package/dist/client/options.d.ts +373 -0
- package/dist/client/options.js +6 -0
- package/dist/client/registerDataSource.d.ts +9 -9
- package/dist/client/registerDataSource.js +15 -16
- package/dist/client/resourceTypes.d.ts +333 -0
- package/dist/client/resourceTypes.js +7 -0
- package/dist/client/schemaConfig.d.ts +44 -0
- package/dist/client/schemaConfig.js +176 -0
- package/dist/client/sessionMint.d.ts +17 -13
- package/dist/client/sessionMint.js +26 -31
- package/dist/client/validateAbloOptions.d.ts +12 -14
- package/dist/client/validateAbloOptions.js +9 -10
- package/dist/client/writeOptionsSchema.d.ts +18 -16
- package/dist/client/writeOptionsSchema.js +23 -20
- package/dist/client/wsMutationExecutor.d.ts +28 -0
- package/dist/client/wsMutationExecutor.js +71 -0
- package/dist/context.d.ts +6 -4
- package/dist/context.js +6 -7
- package/dist/coordination/index.d.ts +13 -4
- package/dist/coordination/index.js +29 -4
- package/dist/coordination/schema.d.ts +176 -128
- package/dist/coordination/schema.js +197 -133
- package/dist/coordination/trace.d.ts +9 -11
- package/dist/coordination/trace.js +13 -15
- package/dist/core/DatabaseManager.d.ts +5 -8
- package/dist/core/DatabaseManager.js +38 -40
- package/dist/core/QueryProcessor.d.ts +7 -9
- package/dist/core/QueryProcessor.js +27 -34
- package/dist/core/QueryView.d.ts +17 -5
- package/dist/core/QueryView.js +6 -7
- package/dist/core/StoreManager.d.ts +14 -16
- package/dist/core/StoreManager.js +26 -25
- package/dist/core/ViewRegistry.d.ts +5 -5
- package/dist/core/ViewRegistry.js +4 -4
- package/dist/core/index.d.ts +18 -13
- package/dist/core/index.js +32 -26
- package/dist/core/openIDBWithTimeout.d.ts +38 -36
- package/dist/core/openIDBWithTimeout.js +57 -54
- package/dist/core/queryUtils.d.ts +45 -0
- package/dist/core/queryUtils.js +69 -0
- package/dist/core/storeContract.d.ts +145 -0
- package/dist/core/storeContract.js +12 -0
- package/dist/environment.d.ts +28 -0
- package/dist/environment.js +21 -0
- package/dist/errorCodes.d.ts +118 -101
- package/dist/errorCodes.js +277 -260
- package/dist/errors.d.ts +170 -165
- package/dist/errors.js +161 -151
- package/dist/index.d.ts +30 -27
- package/dist/index.js +90 -82
- package/dist/interfaces/index.d.ts +108 -133
- package/dist/interfaces/index.js +5 -4
- package/dist/keys/index.d.ts +27 -29
- package/dist/keys/index.js +59 -49
- package/dist/mutators/RecordingTransaction.d.ts +16 -16
- package/dist/mutators/RecordingTransaction.js +31 -37
- package/dist/mutators/Transaction.d.ts +18 -26
- package/dist/mutators/Transaction.js +14 -20
- package/dist/mutators/UndoManager.d.ts +122 -131
- package/dist/mutators/UndoManager.js +149 -155
- package/dist/mutators/defineMutators.d.ts +24 -37
- package/dist/mutators/defineMutators.js +14 -20
- package/dist/mutators/inverseOp.d.ts +12 -15
- package/dist/mutators/inverseOp.js +12 -15
- package/dist/mutators/mutateActions.d.ts +10 -9
- package/dist/mutators/mutateActions.js +1 -1
- package/dist/mutators/readerActions.d.ts +9 -8
- package/dist/mutators/readerActions.js +2 -2
- package/dist/mutators/undoApply.d.ts +31 -27
- package/dist/mutators/undoApply.js +26 -24
- package/dist/policy/index.d.ts +5 -3
- package/dist/policy/index.js +5 -3
- package/dist/policy/types.d.ts +105 -101
- package/dist/policy/types.js +67 -66
- package/dist/query/client.d.ts +32 -16
- package/dist/query/client.js +103 -72
- package/dist/query/types.d.ts +37 -60
- package/dist/query/types.js +13 -33
- package/dist/react/AbloProvider.d.ts +7 -11
- package/dist/react/AbloProvider.js +24 -17
- package/dist/react/context.d.ts +27 -146
- package/dist/react/context.js +9 -10
- package/dist/react/index.d.ts +41 -42
- package/dist/react/index.js +37 -38
- package/dist/react/internalContext.d.ts +17 -19
- package/dist/react/useAblo.d.ts +23 -22
- package/dist/react/useAblo.js +17 -15
- package/dist/react/useCurrentUserId.d.ts +8 -7
- package/dist/react/useCurrentUserId.js +8 -7
- package/dist/react/useErrorListener.d.ts +7 -7
- package/dist/react/useErrorListener.js +11 -12
- package/dist/react/useMutationFailureListener.d.ts +8 -8
- package/dist/react/useMutationFailureListener.js +9 -9
- package/dist/react/useMutators.d.ts +11 -11
- package/dist/react/useMutators.js +10 -4
- package/dist/react/useReactive.js +2 -3
- package/dist/react/useSyncStatus.d.ts +4 -6
- package/dist/react/useUndoScope.d.ts +7 -9
- package/dist/react/useUndoScope.js +3 -3
- package/dist/schema/coordination.d.ts +21 -25
- package/dist/schema/coordination.js +21 -25
- package/dist/schema/ddl.d.ts +43 -39
- package/dist/schema/ddl.js +75 -68
- package/dist/schema/ddlLock.d.ts +35 -0
- package/dist/schema/ddlLock.js +46 -0
- package/dist/schema/diff.d.ts +99 -61
- package/dist/schema/diff.js +43 -34
- package/dist/schema/field.d.ts +37 -42
- package/dist/schema/field.js +36 -49
- package/dist/schema/generate.d.ts +12 -12
- package/dist/schema/generate.js +12 -12
- package/dist/schema/index.d.ts +5 -4
- package/dist/schema/index.js +29 -21
- package/dist/schema/model.d.ts +121 -146
- package/dist/schema/model.js +24 -35
- package/dist/schema/openapi.d.ts +10 -9
- package/dist/schema/openapi.js +7 -1
- package/dist/schema/queries.d.ts +30 -32
- package/dist/schema/queries.js +24 -25
- package/dist/schema/relation.d.ts +89 -99
- package/dist/schema/relation.js +13 -13
- package/dist/schema/residency.d.ts +38 -0
- package/dist/schema/residency.js +30 -0
- package/dist/schema/roles.d.ts +45 -27
- package/dist/schema/roles.js +52 -21
- package/dist/schema/schema.d.ts +36 -45
- package/dist/schema/schema.js +42 -39
- package/dist/schema/select.d.ts +13 -13
- package/dist/schema/select.js +13 -13
- package/dist/schema/serialize.d.ts +36 -39
- package/dist/schema/serialize.js +27 -31
- package/dist/schema/sugar.d.ts +17 -32
- package/dist/schema/sugar.js +14 -29
- package/dist/schema/{sync-delta-row.d.ts → syncDeltaRow.d.ts} +27 -50
- package/dist/schema/syncDeltaRow.js +89 -0
- package/dist/schema/tenancy.d.ts +44 -46
- package/dist/schema/tenancy.js +46 -48
- package/dist/server/adapter.d.ts +58 -58
- package/dist/server/adapter.js +13 -14
- package/dist/server/commit.d.ts +60 -64
- package/dist/server/index.d.ts +9 -10
- package/dist/server/index.js +1 -1
- package/dist/server/readConfig.d.ts +70 -0
- package/dist/server/readConfig.js +8 -0
- package/dist/server/storageMode.d.ts +23 -0
- package/dist/server/storageMode.js +17 -0
- package/dist/source/adapter.d.ts +31 -26
- package/dist/source/adapter.js +10 -10
- package/dist/source/adapters/drizzle.d.ts +28 -23
- package/dist/source/adapters/drizzle.js +34 -28
- package/dist/source/adapters/kysely.d.ts +27 -25
- package/dist/source/adapters/kysely.js +28 -26
- package/dist/source/adapters/memory.d.ts +8 -7
- package/dist/source/adapters/memory.js +10 -9
- package/dist/source/adapters/prisma.d.ts +13 -12
- package/dist/source/adapters/prisma.js +27 -29
- package/dist/source/conformance.d.ts +18 -11
- package/dist/source/conformance.js +27 -19
- package/dist/source/connector.d.ts +31 -32
- package/dist/source/connector.js +30 -28
- package/dist/source/connectorProtocol.d.ts +160 -0
- package/dist/source/connectorProtocol.js +162 -0
- package/dist/source/contract.d.ts +26 -27
- package/dist/source/contract.js +28 -29
- package/dist/source/factory.d.ts +94 -0
- package/dist/source/factory.js +268 -0
- package/dist/source/index.d.ts +10 -462
- package/dist/source/index.js +17 -421
- package/dist/source/migrations.d.ts +9 -9
- package/dist/source/migrations.js +9 -9
- package/dist/source/next.d.ts +10 -11
- package/dist/source/next.js +7 -8
- package/dist/source/pushQueue.d.ts +70 -48
- package/dist/source/pushQueue.js +36 -29
- package/dist/source/signing.d.ts +88 -0
- package/dist/source/signing.js +159 -0
- package/dist/source/types.d.ts +351 -0
- package/dist/source/types.js +43 -0
- package/dist/stores/ObjectStore.d.ts +11 -12
- package/dist/stores/ObjectStore.js +34 -35
- package/dist/stores/ObjectStoreContract.d.ts +12 -15
- package/dist/stores/SyncActionStore.d.ts +8 -12
- package/dist/stores/SyncActionStore.js +77 -46
- package/dist/surface.d.ts +28 -21
- package/dist/surface.js +28 -20
- package/dist/sync/{BootstrapHelper.d.ts → BootstrapFetcher.d.ts} +37 -45
- package/dist/sync/{BootstrapHelper.js → BootstrapFetcher.js} +101 -80
- package/dist/sync/ConnectionManager.d.ts +47 -50
- package/dist/sync/ConnectionManager.js +74 -70
- package/dist/sync/NetworkProbe.d.ts +27 -31
- package/dist/sync/NetworkProbe.js +67 -72
- package/dist/sync/{HydrationCoordinator.d.ts → OnDemandLoader.d.ts} +49 -36
- package/dist/sync/{HydrationCoordinator.js → OnDemandLoader.js} +79 -54
- package/dist/sync/{AreaOfInterestManager.d.ts → SubscriptionManager.d.ts} +45 -59
- package/dist/sync/{AreaOfInterestManager.js → SubscriptionManager.js} +44 -52
- package/dist/sync/SyncWebSocket.d.ts +175 -250
- package/dist/sync/SyncWebSocket.js +431 -769
- package/dist/sync/awaitClaimGrant.d.ts +18 -18
- package/dist/sync/awaitClaimGrant.js +38 -30
- package/dist/sync/bootstrapApply.d.ts +70 -0
- package/dist/sync/bootstrapApply.js +73 -0
- package/dist/sync/commitFrames.d.ts +44 -0
- package/dist/sync/commitFrames.js +94 -0
- package/dist/sync/createClaimStream.d.ts +23 -22
- package/dist/sync/createClaimStream.js +108 -25
- package/dist/sync/createPresenceStream.d.ts +19 -18
- package/dist/sync/createPresenceStream.js +25 -26
- package/dist/sync/createSnapshot.d.ts +13 -17
- package/dist/sync/createSnapshot.js +20 -26
- package/dist/sync/credentialLifecycle.d.ts +175 -0
- package/dist/sync/credentialLifecycle.js +322 -0
- package/dist/sync/deltaPipeline.d.ts +113 -0
- package/dist/sync/deltaPipeline.js +261 -0
- package/dist/sync/groupChange.d.ts +113 -0
- package/dist/sync/groupChange.js +242 -0
- package/dist/sync/heartbeat.d.ts +63 -0
- package/dist/sync/heartbeat.js +91 -0
- package/dist/sync/participants.d.ts +27 -27
- package/dist/sync/schemas.d.ts +3 -2
- package/dist/sync/schemas.js +14 -10
- package/dist/sync/syncCursor.d.ts +40 -0
- package/dist/sync/syncCursor.js +55 -0
- package/dist/sync/syncPlan.d.ts +54 -0
- package/dist/sync/syncPlan.js +50 -0
- package/dist/sync/syncPosition.d.ts +54 -49
- package/dist/sync/syncPosition.js +57 -52
- package/dist/sync/wsFrameHandlers.d.ts +116 -0
- package/dist/sync/wsFrameHandlers.js +374 -0
- package/dist/testing/fixtures/bootstrap.d.ts +21 -17
- package/dist/testing/fixtures/bootstrap.js +12 -6
- package/dist/testing/fixtures/deltas.d.ts +31 -34
- package/dist/testing/fixtures/deltas.js +30 -33
- package/dist/testing/fixtures/models.d.ts +11 -10
- package/dist/testing/fixtures/models.js +12 -10
- package/dist/testing/helpers/{react-wrapper.d.ts → reactWrapper.d.ts} +13 -10
- package/dist/testing/helpers/{react-wrapper.js → reactWrapper.js} +15 -12
- package/dist/testing/helpers/{sync-engine-harness.d.ts → syncEngineHarness.d.ts} +17 -18
- package/dist/testing/helpers/{sync-engine-harness.js → syncEngineHarness.js} +14 -11
- package/dist/testing/helpers/wait.d.ts +13 -8
- package/dist/testing/helpers/wait.js +13 -8
- package/dist/testing/index.d.ts +4 -4
- package/dist/testing/index.js +3 -3
- package/dist/testing/mocks/MockMutationExecutor.d.ts +18 -17
- package/dist/testing/mocks/MockMutationExecutor.js +15 -14
- package/dist/testing/mocks/MockNetworkMonitor.d.ts +8 -8
- package/dist/testing/mocks/MockNetworkMonitor.js +8 -8
- package/dist/testing/mocks/MockSyncContext.d.ts +21 -34
- package/dist/testing/mocks/MockSyncContext.js +16 -45
- package/dist/testing/mocks/MockSyncStore.d.ts +14 -14
- package/dist/testing/mocks/MockSyncStore.js +11 -11
- package/dist/testing/mocks/MockWebSocket.d.ts +28 -24
- package/dist/testing/mocks/MockWebSocket.js +22 -21
- package/dist/transactions/TransactionQueue.d.ts +190 -221
- package/dist/transactions/TransactionQueue.js +424 -822
- package/dist/transactions/TransactionStore.d.ts +20 -0
- package/dist/transactions/TransactionStore.js +53 -0
- package/dist/transactions/UnconfirmedWrites.d.ts +82 -0
- package/dist/transactions/UnconfirmedWrites.js +104 -0
- package/dist/transactions/coalesceRules.d.ts +58 -0
- package/dist/transactions/coalesceRules.js +140 -0
- package/dist/transactions/commitPayload.d.ts +130 -0
- package/dist/transactions/commitPayload.js +143 -0
- package/dist/transactions/deltaConfirmation.d.ts +58 -0
- package/dist/transactions/deltaConfirmation.js +215 -0
- package/dist/transactions/optimisticApply.d.ts +49 -0
- package/dist/transactions/optimisticApply.js +65 -0
- package/dist/transactions/replayValidation.d.ts +99 -0
- package/dist/transactions/replayValidation.js +111 -0
- package/dist/types/global.d.ts +46 -41
- package/dist/types/global.js +20 -19
- package/dist/types/index.d.ts +74 -80
- package/dist/types/index.js +22 -27
- package/dist/types/modelData.d.ts +10 -0
- package/dist/types/modelData.js +9 -0
- package/dist/types/participant.d.ts +20 -0
- package/dist/types/participant.js +10 -0
- package/dist/types/streams.d.ts +216 -209
- package/dist/types/streams.js +7 -7
- package/dist/utils/asyncIterator.d.ts +25 -32
- package/dist/utils/asyncIterator.js +25 -32
- package/dist/utils/duration.d.ts +12 -15
- package/dist/utils/duration.js +12 -15
- package/dist/utils/mobxSetup.d.ts +53 -0
- package/dist/utils/{mobx-setup.js → mobxSetup.js} +44 -100
- package/dist/webhooks/events.d.ts +21 -16
- package/dist/webhooks/events.js +10 -8
- package/dist/webhooks/index.d.ts +5 -7
- package/dist/webhooks/index.js +5 -7
- package/dist/{schema/sync-delta-wire.d.ts → wire/delta.d.ts} +58 -41
- package/dist/wire/delta.js +114 -0
- package/dist/wire/errorEnvelope.d.ts +35 -27
- package/dist/wire/errorEnvelope.js +38 -32
- package/dist/wire/frames.d.ts +150 -67
- package/dist/wire/frames.js +48 -1
- package/dist/wire/index.d.ts +18 -13
- package/dist/wire/index.js +36 -13
- package/dist/wire/listEnvelope.d.ts +16 -23
- package/dist/wire/listEnvelope.js +7 -6
- package/dist/wire/protocol.d.ts +38 -0
- package/dist/wire/protocol.js +38 -0
- package/dist/wire/protocolVersion.d.ts +60 -0
- package/dist/wire/protocolVersion.js +67 -0
- package/docs/api-keys.md +4 -3
- package/docs/coordination.md +59 -0
- package/docs/examples/existing-python-backend.md +3 -3
- package/docs/identity.md +4 -4
- package/docs/integration-guide.md +1 -1
- package/docs/react.md +1 -1
- package/docs/sessions.md +5 -7
- package/package.json +24 -21
- package/dist/ai-sdk/coordinated-tool.d.ts +0 -101
- package/dist/ai-sdk/coordination-context.d.ts +0 -52
- package/dist/client/index.d.ts +0 -36
- package/dist/client/index.js +0 -33
- package/dist/config/index.d.ts +0 -10
- package/dist/config/index.js +0 -12
- package/dist/core/query-utils.d.ts +0 -34
- package/dist/core/query-utils.js +0 -59
- package/dist/interfaces/headless.d.ts +0 -95
- package/dist/interfaces/headless.js +0 -41
- package/dist/query/index.d.ts +0 -6
- package/dist/query/index.js +0 -5
- package/dist/realtime/index.d.ts +0 -10
- package/dist/realtime/index.js +0 -9
- package/dist/schema/plane.d.ts +0 -23
- package/dist/schema/plane.js +0 -19
- package/dist/schema/sync-delta-row.js +0 -103
- package/dist/schema/sync-delta-wire.js +0 -102
- package/dist/server/next.d.ts +0 -51
- package/dist/server/next.js +0 -47
- package/dist/server/read-config.d.ts +0 -67
- package/dist/server/read-config.js +0 -8
- package/dist/server/storage-mode.d.ts +0 -1
- package/dist/server/storage-mode.js +0 -18
- package/dist/source/connector-protocol.d.ts +0 -159
- package/dist/source/connector-protocol.js +0 -161
- package/dist/sync/OfflineFlush.d.ts +0 -9
- package/dist/sync/OfflineFlush.js +0 -22
- package/dist/sync/OfflineTransactionStore.d.ts +0 -37
- package/dist/sync/OfflineTransactionStore.js +0 -263
- package/dist/transactions/OptimisticEchoTracker.d.ts +0 -82
- package/dist/transactions/OptimisticEchoTracker.js +0 -104
- package/dist/transactions/index.d.ts +0 -16
- package/dist/transactions/index.js +0 -7
- package/dist/transactions/mutation-error-handler.d.ts +0 -5
- package/dist/transactions/mutation-error-handler.js +0 -39
- package/dist/utils/mobx-setup.d.ts +0 -42
package/dist/Database.d.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* The local persistence layer for synced models. It stores rows in the
|
|
3
|
+
* browser's IndexedDB (or in-memory maps when run headlessly), applies inbound
|
|
4
|
+
* deltas to that store, and fetches the bootstrap snapshot from your sync
|
|
5
|
+
* server. {@link BaseSyncedStore} drives it, and {@link InstanceCache} holds the
|
|
6
|
+
* in-memory mirror of what this class persists.
|
|
4
7
|
*/
|
|
5
8
|
import { type DatabaseInfo, type WorkspaceMetadata } from './core/DatabaseManager.js';
|
|
6
9
|
import { ModelRegistry } from './ModelRegistry.js';
|
|
7
10
|
import { LoadStrategy } from './types/index.js';
|
|
8
|
-
import type {
|
|
11
|
+
import type { BootstrapFetcher, BootstrapData } from './sync/BootstrapFetcher.js';
|
|
9
12
|
import { InMemoryObjectStore } from './adapters/inMemoryStorage.js';
|
|
10
13
|
/** Generic record type for model data */
|
|
11
14
|
type ModelData = Record<string, unknown>;
|
|
@@ -43,19 +46,17 @@ interface PersistedTransaction {
|
|
|
43
46
|
[key: string]: unknown;
|
|
44
47
|
}
|
|
45
48
|
/**
|
|
46
|
-
*
|
|
49
|
+
* How a session establishes its baseline state at startup.
|
|
47
50
|
*
|
|
48
|
-
* 'full'
|
|
49
|
-
*
|
|
50
|
-
* - Clear IndexedDB
|
|
51
|
-
* - Load snapshot data
|
|
52
|
-
* - Use snapshot's lastSyncId
|
|
51
|
+
* 'full' — Fetch a complete snapshot from the server, clear the local store,
|
|
52
|
+
* load the snapshot, and adopt its `lastSyncId`.
|
|
53
53
|
*
|
|
54
|
-
* '
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
54
|
+
* 'partial' — Fetch only the deltas since the stored `lastSyncId` and apply
|
|
55
|
+
* them on top of the existing local data.
|
|
56
|
+
*
|
|
57
|
+
* 'local' — Skip the server entirely: hydrate the {@link InstanceCache} from the
|
|
58
|
+
* local store, connect the WebSocket with the stored `lastSyncId`, and
|
|
59
|
+
* receive deltas from there onward. Used when offline with valid local data.
|
|
59
60
|
*/
|
|
60
61
|
export type BootstrapType = 'full' | 'partial' | 'local';
|
|
61
62
|
export interface BootstrapRequirements {
|
|
@@ -67,7 +68,7 @@ export interface BootstrapRequirements {
|
|
|
67
68
|
export interface BootstrapResult {
|
|
68
69
|
modelsLoaded: number;
|
|
69
70
|
modelsStored: number;
|
|
70
|
-
/** The raw bootstrap response — callers can apply models directly to
|
|
71
|
+
/** The raw bootstrap response — callers can apply models directly to InstanceCache */
|
|
71
72
|
bootstrapData: BootstrapData;
|
|
72
73
|
/**
|
|
73
74
|
* Results of applying partial-bootstrap deltas to IDB. Present only when
|
|
@@ -77,12 +78,12 @@ export interface BootstrapResult {
|
|
|
77
78
|
* was disconnected — without this, DELETE deltas persist to IDB but
|
|
78
79
|
* ghost entities linger in the pool until a full reload.
|
|
79
80
|
*/
|
|
80
|
-
deltaResults?:
|
|
81
|
+
deltaResults?: {
|
|
81
82
|
action: 'add' | 'update' | 'remove' | 'archive' | 'verify';
|
|
82
83
|
modelName: string;
|
|
83
84
|
modelId: string;
|
|
84
85
|
data?: ModelData | null;
|
|
85
|
-
}
|
|
86
|
+
}[];
|
|
86
87
|
}
|
|
87
88
|
export declare class Database {
|
|
88
89
|
private databaseManager;
|
|
@@ -90,13 +91,13 @@ export declare class Database {
|
|
|
90
91
|
private modelRegistry;
|
|
91
92
|
private bootstrapHelper;
|
|
92
93
|
/** The pre-configured query helper for lazy-loading data from the sync server. */
|
|
93
|
-
get helper():
|
|
94
|
+
get helper(): BootstrapFetcher;
|
|
94
95
|
/**
|
|
95
|
-
*
|
|
96
|
-
*
|
|
96
|
+
* Fetch the current rows of the given sync groups as a side-effect-free
|
|
97
|
+
* snapshot, used to hydrate a scope as the user enters it. Unlike
|
|
97
98
|
* {@link bootstrapFromServer}, it does not persist to IndexedDB and does not
|
|
98
|
-
*
|
|
99
|
-
*
|
|
99
|
+
* change the connection's subscribed sync groups. The caller applies the
|
|
100
|
+
* result to the pool through the scoped apply path.
|
|
100
101
|
*/
|
|
101
102
|
fetchScopedBootstrapData(syncGroups: readonly string[]): Promise<BootstrapData>;
|
|
102
103
|
private currentDbInfo;
|
|
@@ -128,7 +129,7 @@ export declare class Database {
|
|
|
128
129
|
private inMemoryStores;
|
|
129
130
|
/** In-memory workspace metadata when inMemory=true. */
|
|
130
131
|
private inMemoryMetadata;
|
|
131
|
-
constructor(modelRegistry: ModelRegistry, bootstrapHelper:
|
|
132
|
+
constructor(modelRegistry: ModelRegistry, bootstrapHelper: BootstrapFetcher, options?: {
|
|
132
133
|
inMemory?: boolean;
|
|
133
134
|
});
|
|
134
135
|
/**
|
|
@@ -150,17 +151,14 @@ export declare class Database {
|
|
|
150
151
|
private logPreservedFields;
|
|
151
152
|
open(userId: string, organizationId: string, version?: number): Promise<void>;
|
|
152
153
|
/**
|
|
153
|
-
*
|
|
154
|
-
*
|
|
155
|
-
*
|
|
156
|
-
*
|
|
157
|
-
*
|
|
158
|
-
* ARCHITECTURE: By design, this method receives plain objects, not MobX observables:
|
|
159
|
-
* - WebSocket deltas: Already JSON-parsed (SyncedStore.ts:889)
|
|
160
|
-
* - Optimistic updates: Models call toJSON() which uses toJS() (SlideLayer.ts:224)
|
|
161
|
-
* - Bootstrap data: Plain JSON from server
|
|
154
|
+
* Shrink a record before persisting it. Drops `undefined` fields, empty
|
|
155
|
+
* arrays, empty objects, and the redundant markers `__typename`, `__class`,
|
|
156
|
+
* `clientId`, and `syncStatus`. Explicit `null` values are preserved, since
|
|
157
|
+
* a null is a meaningful "clear this field" in a nullable column.
|
|
162
158
|
*
|
|
163
|
-
*
|
|
159
|
+
* By design this receives plain objects, never live observables: WebSocket
|
|
160
|
+
* deltas arrive already parsed, optimistic updates come through `toJSON()`,
|
|
161
|
+
* and bootstrap data is plain JSON from the server.
|
|
164
162
|
*/
|
|
165
163
|
private compactRecord;
|
|
166
164
|
/**
|
|
@@ -174,7 +172,9 @@ export declare class Database {
|
|
|
174
172
|
*/
|
|
175
173
|
requiredBootstrap(): Promise<BootstrapRequirements>;
|
|
176
174
|
/**
|
|
177
|
-
*
|
|
175
|
+
* Fetch a bootstrap snapshot (or delta batch) from the sync server and load
|
|
176
|
+
* it into the local store, then return a {@link BootstrapResult} the caller
|
|
177
|
+
* applies to the {@link InstanceCache}.
|
|
178
178
|
*/
|
|
179
179
|
bootstrapFromServer(requirements: BootstrapRequirements,
|
|
180
180
|
/** Full sync-group subscription list — what the WS subscribes to
|
|
@@ -183,17 +183,16 @@ export declare class Database {
|
|
|
183
183
|
* team-derived groups. */
|
|
184
184
|
syncGroups: readonly string[], onProgress?: (loaded: number) => void): Promise<BootstrapResult>;
|
|
185
185
|
/**
|
|
186
|
-
*
|
|
186
|
+
* Apply a single inbound delta from the WebSocket to the local store.
|
|
187
187
|
*
|
|
188
|
-
*
|
|
189
|
-
*
|
|
190
|
-
*
|
|
188
|
+
* This handles one delta at a time. To apply several, prefer
|
|
189
|
+
* {@link processDeltaBatch}, which commits them in one IndexedDB transaction
|
|
190
|
+
* rather than two transactions per delta.
|
|
191
191
|
*
|
|
192
|
-
*
|
|
193
|
-
*
|
|
194
|
-
*
|
|
195
|
-
*
|
|
196
|
-
* - Explicit null values ARE preserved: {position: null} clears the field
|
|
192
|
+
* Update deltas carry only the changed fields, so they are merged onto the
|
|
193
|
+
* existing record rather than replacing it. That preserves fields the delta
|
|
194
|
+
* omits (such as deckId or title), and an explicit null is kept as a value,
|
|
195
|
+
* clearing that field.
|
|
197
196
|
*/
|
|
198
197
|
processDelta(delta: {
|
|
199
198
|
syncId?: number;
|
|
@@ -214,29 +213,22 @@ export declare class Database {
|
|
|
214
213
|
data?: ModelData | null;
|
|
215
214
|
}>;
|
|
216
215
|
/**
|
|
217
|
-
*
|
|
218
|
-
*
|
|
219
|
-
*
|
|
220
|
-
*
|
|
221
|
-
* 2. Opening a single transaction per store for all writes
|
|
222
|
-
* 3. Merging UPDATE deltas with existing data to preserve unmodified fields
|
|
223
|
-
* 4. Updating metadata only once at the end with highest syncId
|
|
224
|
-
*
|
|
225
|
-
* Performance impact: 186 deltas goes from ~372 transactions to just 1 transaction
|
|
216
|
+
* Apply many deltas to the local store in as few IndexedDB transactions as
|
|
217
|
+
* possible. Deltas are grouped by store, and each store's writes commit in a
|
|
218
|
+
* single transaction, so a batch of 186 deltas becomes roughly one
|
|
219
|
+
* transaction per store instead of two per delta.
|
|
226
220
|
*
|
|
227
|
-
*
|
|
228
|
-
*
|
|
229
|
-
*
|
|
230
|
-
*
|
|
231
|
-
* - Handles explicit null: {field: null} clears the field correctly
|
|
221
|
+
* The method reads the existing records for update deltas up front, then
|
|
222
|
+
* merges each update onto its existing record so fields the delta omits are
|
|
223
|
+
* preserved and an explicit null still clears its field. It advances the
|
|
224
|
+
* persisted sync cursor once, to the highest committed sync id.
|
|
232
225
|
*
|
|
233
|
-
*
|
|
234
|
-
*
|
|
235
|
-
*
|
|
236
|
-
*
|
|
237
|
-
* - Prevents 404 errors from fetching already-deleted entities
|
|
226
|
+
* Conflict resolution follows a delete-wins rule: it first indexes the
|
|
227
|
+
* delete deltas by entity, then skips any insert or update whose sync id is
|
|
228
|
+
* at or below a delete for the same entity. This avoids resurrecting a
|
|
229
|
+
* deleted entity and avoids fetching one that no longer exists.
|
|
238
230
|
*/
|
|
239
|
-
processDeltaBatch(deltas:
|
|
231
|
+
processDeltaBatch(deltas: {
|
|
240
232
|
syncId?: number;
|
|
241
233
|
/**
|
|
242
234
|
* Includes 'G' and 'S' defensively — they're routed upstream and
|
|
@@ -257,18 +249,18 @@ export declare class Database {
|
|
|
257
249
|
* have a client transaction.
|
|
258
250
|
*/
|
|
259
251
|
transactionId?: string;
|
|
260
|
-
}
|
|
261
|
-
results:
|
|
252
|
+
}[]): Promise<{
|
|
253
|
+
results: {
|
|
262
254
|
action: 'add' | 'update' | 'remove' | 'archive' | 'verify';
|
|
263
255
|
modelName: string;
|
|
264
256
|
modelId: string;
|
|
265
257
|
data?: ModelData | null;
|
|
266
258
|
transactionId?: string;
|
|
267
|
-
}
|
|
259
|
+
}[];
|
|
268
260
|
/**
|
|
269
261
|
* Highest syncId whose IDB store transaction actually committed in this
|
|
270
262
|
* batch. The runtime delta cursor (WS `lastSyncId`, server-side
|
|
271
|
-
* `lastAckedSyncId`) must only advance to
|
|
263
|
+
* `lastAckedSyncId`) must only advance to this value — not the input
|
|
272
264
|
* batch's range max — or it diverges from the persisted view and the
|
|
273
265
|
* next catch-up request skips the un-persisted gap forever. Mirrors
|
|
274
266
|
* the metadata-cursor invariant at `updateWorkspaceMetadata` below.
|
|
@@ -283,16 +275,9 @@ export declare class Database {
|
|
|
283
275
|
/** Get data by index. `value` is an IDB key — string, number, Date,
|
|
284
276
|
* BufferSource, or array thereof. */
|
|
285
277
|
getDataByIndex(modelName: string, indexName: string, value: IDBValidKey): Promise<ModelData[]>;
|
|
286
|
-
/**
|
|
287
|
-
* Update workspace metadata
|
|
288
|
-
*/
|
|
289
|
-
/**
|
|
290
|
-
* Get the last sync ID from workspace metadata
|
|
291
|
-
*/
|
|
292
|
-
/** Read workspace metadata from IDB (returns null if db not open). */
|
|
278
|
+
/** Read workspace metadata from IndexedDB. Returns null when the database is not open. */
|
|
293
279
|
getWorkspaceMetadata(): Promise<WorkspaceMetadata | null>;
|
|
294
280
|
getLastSyncId(): Promise<number>;
|
|
295
|
-
getVersionVector(): Promise<Record<string, number> | null>;
|
|
296
281
|
updateWorkspaceMetadata(metadata: Partial<WorkspaceMetadata>): Promise<void>;
|
|
297
282
|
/** Transaction persistence for offline/retry support.
|
|
298
283
|
* Returns either the IDB-backed ObjectStore or its in-memory twin
|
|
@@ -332,13 +317,13 @@ export declare class Database {
|
|
|
332
317
|
notReady: number;
|
|
333
318
|
};
|
|
334
319
|
totalRecords: number;
|
|
335
|
-
storeDetails:
|
|
320
|
+
storeDetails: {
|
|
336
321
|
modelName: string;
|
|
337
322
|
storeName: string;
|
|
338
323
|
strategy: LoadStrategy;
|
|
339
324
|
ready: boolean;
|
|
340
325
|
count: number;
|
|
341
|
-
}
|
|
326
|
+
}[];
|
|
342
327
|
};
|
|
343
328
|
metadata: WorkspaceMetadata | null;
|
|
344
329
|
}>;
|