@abloatai/ablo 0.34.1 → 0.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +2 -1
- package/CHANGELOG.md +758 -5
- package/README.md +56 -502
- package/bin/ablo.cjs +39 -0
- package/dist/BaseSyncedStore.d.ts +176 -48
- package/dist/BaseSyncedStore.js +346 -214
- package/dist/Database.d.ts +17 -44
- package/dist/Database.js +96 -79
- package/dist/InstanceCache.d.ts +31 -6
- package/dist/InstanceCache.js +65 -30
- package/dist/LazyReferenceCollection.d.ts +3 -3
- package/dist/LazyReferenceCollection.js +4 -4
- package/dist/Model.d.ts +23 -13
- package/dist/Model.js +27 -17
- package/dist/ModelRegistry.d.ts +8 -4
- package/dist/ModelRegistry.js +20 -18
- package/dist/NetworkMonitor.d.ts +3 -1
- package/dist/NetworkMonitor.js +7 -5
- package/dist/{SyncEngineContext.d.ts → RuntimeContext.d.ts} +20 -13
- package/dist/{SyncEngineContext.js → RuntimeContext.js} +11 -12
- package/dist/SyncClient.d.ts +47 -47
- package/dist/SyncClient.js +215 -156
- package/dist/ai-sdk/coordinatedTool.d.ts +2 -2
- package/dist/ai-sdk/coordinatedTool.js +1 -1
- package/dist/ai-sdk/coordinationContext.d.ts +2 -2
- package/dist/ai-sdk/coordinationContext.js +1 -1
- package/dist/ai-sdk/wrap.d.ts +3 -3
- package/dist/ai-sdk/wrap.js +2 -2
- package/dist/auth/index.d.ts +1 -156
- package/dist/auth/index.js +8 -301
- package/dist/client/Ablo.d.ts +42 -287
- package/dist/client/Ablo.js +129 -963
- package/dist/client/abloClient.d.ts +309 -0
- package/dist/client/abloClient.js +13 -0
- package/dist/client/clientPrelude.d.ts +52 -0
- package/dist/client/clientPrelude.js +60 -0
- package/dist/client/consoleLogger.d.ts +2 -2
- package/dist/client/coreClient.d.ts +60 -0
- package/dist/client/coreClient.js +118 -0
- package/dist/client/createInternalComponents.d.ts +8 -4
- package/dist/client/createInternalComponents.js +17 -10
- package/dist/client/createModelProxy.d.ts +98 -373
- package/dist/client/createModelProxy.js +233 -139
- package/dist/client/humans.d.ts +69 -0
- package/dist/client/humans.js +78 -0
- package/dist/client/modelRegistration.d.ts +1 -1
- package/dist/client/modelRegistration.js +9 -9
- package/dist/client/options.d.ts +73 -17
- package/dist/client/reactiveEngine.d.ts +53 -0
- package/dist/client/reactiveEngine.js +688 -0
- package/dist/client/resourceTypes.d.ts +9 -250
- package/dist/client/resourceTypes.js +8 -5
- package/dist/client/schemaConfig.d.ts +4 -4
- package/dist/client/schemaConfig.js +6 -2
- package/dist/client/storeCluster.d.ts +47 -0
- package/dist/client/storeCluster.js +118 -0
- package/dist/client/storeLifecycle.d.ts +61 -0
- package/dist/client/storeLifecycle.js +231 -0
- package/dist/client/validateAbloOptions.d.ts +3 -2
- package/dist/client/validateAbloOptions.js +1 -1
- package/dist/client/wsMutationExecutor.d.ts +3 -3
- package/dist/client/wsMutationExecutor.js +3 -3
- package/dist/context.d.ts +22 -9
- package/dist/context.js +33 -9
- package/dist/coordination/ClaimLog.d.ts +26 -0
- package/dist/coordination/ClaimLog.js +32 -0
- package/dist/coordination/index.d.ts +1 -15
- package/dist/coordination/index.js +8 -31
- package/dist/core/index.d.ts +3 -3
- package/dist/core/index.js +2 -2
- package/dist/docs/catalog.d.ts +72 -0
- package/dist/docs/catalog.js +230 -0
- package/dist/docs/index.d.ts +10 -0
- package/dist/docs/index.js +10 -0
- package/dist/environment.d.ts +1 -40
- package/dist/environment.js +8 -37
- package/dist/index.d.ts +44 -36
- package/dist/index.js +30 -22
- package/dist/interfaces/index.d.ts +44 -134
- package/dist/keys/index.d.ts +1 -77
- package/dist/keys/index.js +8 -190
- package/dist/mutators/{RecordingTransaction.d.ts → RecordingMutation.d.ts} +4 -4
- package/dist/mutators/{RecordingTransaction.js → RecordingMutation.js} +2 -2
- package/dist/mutators/Transaction.d.ts +1 -1
- package/dist/mutators/Transaction.js +1 -1
- package/dist/mutators/UndoManager.d.ts +6 -6
- package/dist/mutators/UndoManager.js +5 -5
- package/dist/mutators/defineMutators.d.ts +3 -3
- package/dist/mutators/defineMutators.js +1 -1
- package/dist/mutators/inverseOp.js +2 -2
- package/dist/mutators/mutateActions.d.ts +3 -3
- package/dist/mutators/mutateActions.js +1 -1
- package/dist/mutators/readerActions.d.ts +1 -1
- package/dist/mutators/undoApply.d.ts +1 -1
- package/dist/mutators/undoApply.js +1 -1
- package/dist/policy/index.d.ts +2 -2
- package/dist/policy/index.js +1 -1
- package/dist/query/client.d.ts +5 -2
- package/dist/query/client.js +10 -9
- package/dist/query/types.d.ts +6 -41
- package/dist/query/types.js +2 -2
- package/dist/react/AbloProvider.d.ts +18 -8
- package/dist/react/AbloProvider.js +10 -9
- package/dist/react/context.d.ts +3 -3
- package/dist/react/context.js +1 -1
- package/dist/react/createAbloReact.d.ts +56 -0
- package/dist/react/createAbloReact.js +51 -0
- package/dist/react/index.d.ts +6 -5
- package/dist/react/index.js +6 -3
- package/dist/react/internalContext.d.ts +1 -1
- package/dist/react/useAblo.d.ts +12 -5
- package/dist/react/useAblo.js +26 -8
- package/dist/react/useCurrentUserId.js +1 -1
- package/dist/react/useErrorListener.js +1 -1
- package/dist/react/useMutationFailureListener.d.ts +2 -2
- package/dist/react/useMutationFailureListener.js +1 -1
- package/dist/react/useMutators.d.ts +3 -3
- package/dist/react/useMutators.js +3 -3
- package/dist/react/useUndoScope.d.ts +5 -5
- package/dist/react/useUndoScope.js +1 -1
- package/dist/schema/coordination.d.ts +69 -10
- package/dist/schema/coordination.js +90 -9
- package/dist/schema/ddl.js +2 -2
- package/dist/schema/diff.d.ts +1 -1
- package/dist/schema/generate.js +1 -1
- package/dist/schema/index.d.ts +11 -10
- package/dist/schema/index.js +22 -18
- package/dist/schema/queries.d.ts +27 -27
- package/dist/schema/queries.js +23 -23
- package/dist/schema/select.d.ts +3 -3
- package/dist/schema/select.js +6 -3
- package/dist/schema/serialize.d.ts +15 -6
- package/dist/schema/serialize.js +20 -3
- package/dist/schema/sugar.d.ts +6 -7
- package/dist/schema/sugar.js +9 -12
- package/dist/schema/syncDeltaRow.d.ts +4 -152
- package/dist/schema/syncDeltaRow.js +4 -105
- package/dist/server/adapter.d.ts +18 -1
- package/dist/server/commit.d.ts +10 -16
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/readConfig.d.ts +1 -1
- package/dist/source/adapter.d.ts +7 -5
- package/dist/source/adapter.js +7 -5
- package/dist/source/adapters/drizzle.d.ts +1 -1
- package/dist/source/adapters/drizzle.js +2 -2
- package/dist/source/adapters/kysely.d.ts +1 -1
- package/dist/source/adapters/kysely.js +1 -1
- package/dist/source/adapters/kyselyMutationCore.d.ts +1 -1
- package/dist/source/adapters/kyselyMutationCore.js +2 -2
- package/dist/source/adapters/memory.js +1 -1
- package/dist/source/adapters/prisma.d.ts +8 -3
- package/dist/source/adapters/prisma.js +1 -1
- package/dist/source/connector.js +1 -1
- package/dist/source/connectorProtocol.d.ts +2 -8
- package/dist/source/connectorProtocol.js +3 -2
- package/dist/source/contract.d.ts +29 -17
- package/dist/source/contract.js +27 -22
- package/dist/source/factory.d.ts +1 -1
- package/dist/source/idempotency.js +2 -2
- package/dist/source/index.d.ts +1 -0
- package/dist/source/index.js +3 -0
- package/dist/source/next.d.ts +1 -1
- package/dist/source/signing.d.ts +9 -2
- package/dist/source/signing.js +4 -1
- package/dist/source/types.d.ts +6 -4
- package/dist/source/types.js +1 -1
- package/dist/{core/storeContract.d.ts → storeContract.d.ts} +6 -6
- package/dist/{core → stores}/DatabaseManager.d.ts +3 -1
- package/dist/{core → stores}/DatabaseManager.js +14 -13
- package/dist/stores/ObjectStore.d.ts +1 -1
- package/dist/{core → stores}/StoreManager.d.ts +9 -26
- package/dist/{core → stores}/StoreManager.js +29 -77
- package/dist/stores/SyncActionStore.d.ts +4 -2
- package/dist/stores/SyncActionStore.js +11 -17
- package/dist/stores/syncAction.d.ts +26 -0
- package/dist/stores/syncAction.js +16 -0
- package/dist/surface.d.ts +3 -3
- package/dist/surface.js +6 -4
- package/dist/sync/BootstrapFetcher.d.ts +127 -6
- package/dist/sync/BootstrapFetcher.js +511 -83
- package/dist/sync/ConnectionManager.d.ts +6 -198
- package/dist/sync/ConnectionManager.js +6 -677
- package/dist/sync/OnDemandLoader.d.ts +5 -2
- package/dist/sync/OnDemandLoader.js +61 -21
- package/dist/sync/SubscriptionManager.d.ts +13 -2
- package/dist/sync/SubscriptionManager.js +23 -5
- package/dist/sync/SyncWebSocket.d.ts +27 -510
- package/dist/sync/SyncWebSocket.js +76 -954
- package/dist/sync/awaitClaimGrant.d.ts +4 -44
- package/dist/sync/awaitClaimGrant.js +4 -109
- package/dist/sync/bootstrapApply.d.ts +3 -0
- package/dist/sync/bootstrapApply.js +2 -2
- package/dist/sync/commitFrames.d.ts +6 -40
- package/dist/sync/commitFrames.js +6 -97
- package/dist/sync/contextPorts.d.ts +18 -0
- package/dist/sync/contextPorts.js +31 -0
- package/dist/sync/createClaimStream.d.ts +5 -49
- package/dist/sync/createClaimStream.js +5 -469
- package/dist/sync/createPresenceStream.d.ts +26 -4
- package/dist/sync/createPresenceStream.js +28 -20
- package/dist/sync/createSnapshot.d.ts +2 -2
- package/dist/sync/createSnapshot.js +1 -1
- package/dist/sync/credentialLifecycle.d.ts +5 -173
- package/dist/sync/credentialLifecycle.js +5 -320
- package/dist/sync/deltaPipeline.d.ts +13 -12
- package/dist/sync/deltaPipeline.js +21 -4
- package/dist/sync/groupChange.d.ts +3 -0
- package/dist/sync/groupChange.js +16 -14
- package/dist/sync/participants.d.ts +24 -6
- package/dist/sync/participants.js +32 -23
- package/dist/sync/schemaDrift.d.ts +55 -0
- package/dist/sync/schemaDrift.js +53 -0
- package/dist/sync/schemas.d.ts +23 -33
- package/dist/sync/schemas.js +29 -20
- package/dist/sync/syncPlan.d.ts +3 -3
- package/dist/sync/wsFrameHandlers.d.ts +6 -114
- package/dist/sync/wsFrameHandlers.js +6 -392
- package/dist/syncLog/contract.d.ts +20 -0
- package/dist/syncLog/contract.js +19 -0
- package/dist/syncLog/index.d.ts +1 -0
- package/dist/syncLog/index.js +1 -0
- package/dist/transaction/ablo.d.ts +88 -0
- package/dist/transaction/ablo.js +33 -0
- package/dist/{client/auth.d.ts → transaction/auth/apiKey.d.ts} +43 -8
- package/dist/{client/auth.js → transaction/auth/apiKey.js} +19 -0
- package/dist/transaction/auth/bootstrapScope.d.ts +15 -0
- package/dist/transaction/auth/bootstrapScope.js +1 -0
- package/dist/transaction/auth/capability.d.ts +212 -0
- package/dist/transaction/auth/capability.js +224 -0
- package/dist/{auth → transaction/auth}/credentialSource.d.ts +8 -1
- package/dist/{client → transaction/auth}/identity.d.ts +8 -7
- package/dist/{client → transaction/auth}/identity.js +1 -1
- package/dist/transaction/auth/index.d.ts +162 -0
- package/dist/transaction/auth/index.js +304 -0
- package/dist/{auth → transaction/auth}/schemas.d.ts +1 -1
- package/dist/{auth → transaction/auth}/schemas.js +13 -13
- package/dist/{client → transaction/auth}/sessionMint.d.ts +8 -8
- package/dist/{client → transaction/auth}/sessionMint.js +4 -7
- package/dist/transaction/coordination/awaitClaimGrant.d.ts +56 -0
- package/dist/transaction/coordination/awaitClaimGrant.js +124 -0
- package/dist/{client → transaction/coordination}/claimHeartbeatLoop.d.ts +34 -0
- package/dist/{client → transaction/coordination}/claimHeartbeatLoop.js +20 -0
- package/dist/transaction/coordination/claimMeta.d.ts +49 -0
- package/dist/transaction/coordination/claimMeta.js +52 -0
- package/dist/transaction/coordination/createClaimStream.d.ts +64 -0
- package/dist/transaction/coordination/createClaimStream.js +475 -0
- package/dist/transaction/coordination/events.d.ts +74 -0
- package/dist/transaction/coordination/events.js +7 -0
- package/dist/transaction/coordination/index.d.ts +19 -0
- package/dist/transaction/coordination/index.js +45 -0
- package/dist/transaction/coordination/locator.d.ts +104 -0
- package/dist/transaction/coordination/locator.js +102 -0
- package/dist/transaction/coordination/schema.d.ts +1536 -0
- package/dist/transaction/coordination/schema.js +1177 -0
- package/dist/transaction/coordination/targetConflict.d.ts +2 -0
- package/dist/transaction/coordination/targetConflict.js +107 -0
- package/dist/{coordination → transaction/coordination}/trace.d.ts +7 -18
- package/dist/{coordination → transaction/coordination}/trace.js +18 -25
- package/dist/transaction/durableWrites.d.ts +62 -0
- package/dist/{client → transaction}/durableWrites.js +28 -3
- package/dist/transaction/environment.d.ts +105 -0
- package/dist/transaction/environment.js +108 -0
- package/dist/{errorCodes.d.ts → transaction/errorCodes.d.ts} +12 -12
- package/dist/{errorCodes.js → transaction/errorCodes.js} +45 -18
- package/dist/{errors.d.ts → transaction/errors.d.ts} +37 -13
- package/dist/{errors.js → transaction/errors.js} +85 -16
- package/dist/transaction/footprint.d.ts +111 -0
- package/dist/transaction/footprint.js +0 -0
- package/dist/transaction/index.d.ts +20 -0
- package/dist/transaction/index.js +20 -0
- package/dist/transaction/keys/index.d.ts +87 -0
- package/dist/transaction/keys/index.js +207 -0
- package/dist/transaction/log/syncDeltaRow.d.ts +158 -0
- package/dist/transaction/log/syncDeltaRow.js +95 -0
- package/dist/{sync/syncPosition.d.ts → transaction/logPosition.d.ts} +22 -8
- package/dist/{sync/syncPosition.js → transaction/logPosition.js} +15 -6
- package/dist/transaction/logger.d.ts +16 -0
- package/dist/transaction/logger.js +7 -0
- package/dist/transaction/observability.d.ts +53 -0
- package/dist/transaction/observability.js +19 -0
- package/dist/transaction/plugin.d.ts +285 -0
- package/dist/transaction/plugin.js +106 -0
- package/dist/{policy → transaction/policy}/types.d.ts +3 -3
- package/dist/{policy → transaction/policy}/types.js +2 -0
- package/dist/transaction/resources/httpResources.d.ts +321 -0
- package/dist/transaction/resources/httpResources.js +7 -0
- package/dist/transaction/resources/modelOperations.d.ts +427 -0
- package/dist/transaction/resources/modelOperations.js +12 -0
- package/dist/transaction/resources/mutationOptions.d.ts +66 -0
- package/dist/transaction/resources/mutationOptions.js +9 -0
- package/dist/transaction/resources/where.d.ts +101 -0
- package/dist/transaction/resources/where.js +115 -0
- package/dist/{client → transaction/resources}/writeOptionsSchema.d.ts +2 -6
- package/dist/{client → transaction/resources}/writeOptionsSchema.js +9 -5
- package/dist/{schema → transaction/schema}/field.d.ts +17 -23
- package/dist/{schema → transaction/schema}/field.js +5 -5
- package/dist/transaction/schema/fieldRef.d.ts +38 -0
- package/dist/transaction/schema/fieldRef.js +11 -0
- package/dist/transaction/schema/loadStrategy.d.ts +45 -0
- package/dist/transaction/schema/loadStrategy.js +46 -0
- package/dist/{schema → transaction/schema}/model.d.ts +50 -35
- package/dist/{schema → transaction/schema}/model.js +30 -20
- package/dist/transaction/schema/openapi.d.ts +58 -0
- package/dist/transaction/schema/openapi.js +501 -0
- package/dist/{schema → transaction/schema}/relation.d.ts +21 -16
- package/dist/{schema → transaction/schema}/relation.js +7 -7
- package/dist/{schema → transaction/schema}/residency.d.ts +0 -9
- package/dist/{schema → transaction/schema}/residency.js +0 -5
- package/dist/{schema → transaction/schema}/roles.d.ts +5 -5
- package/dist/{schema → transaction/schema}/roles.js +5 -5
- package/dist/{schema → transaction/schema}/schema.d.ts +39 -10
- package/dist/{schema → transaction/schema}/schema.js +24 -3
- package/dist/{schema → transaction/schema}/tenancy.d.ts +1 -1
- package/dist/{schema → transaction/schema}/tenancy.js +7 -4
- package/dist/transaction/transactionLayer.d.ts +82 -0
- package/dist/transaction/transactionLayer.js +24 -0
- package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.d.ts +5 -6
- package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.js +9 -13
- package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.d.ts +9 -2
- package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.js +5 -9
- package/dist/{transactions/durableWriteStore.d.ts → transaction/transactions/settlement/pendingWrite.d.ts} +11 -37
- package/dist/transaction/transactions/settlement/pendingWrite.js +20 -0
- package/dist/transaction/transport/commitFrames.d.ts +90 -0
- package/dist/transaction/transport/commitFrames.js +134 -0
- package/dist/transaction/transport/connectionManager.d.ts +215 -0
- package/dist/transaction/transport/connectionManager.js +673 -0
- package/dist/transaction/transport/credentialLifecycle.d.ts +177 -0
- package/dist/transaction/transport/credentialLifecycle.js +324 -0
- package/dist/{sync → transaction/transport}/heartbeat.d.ts +3 -1
- package/dist/{sync → transaction/transport}/heartbeat.js +6 -4
- package/dist/transaction/transport/httpClient.d.ts +131 -0
- package/dist/{client → transaction/transport}/httpClient.js +6 -5
- package/dist/transaction/transport/httpOptions.d.ts +33 -0
- package/dist/transaction/transport/httpOptions.js +12 -0
- package/dist/{client → transaction/transport}/httpTransport.js +295 -97
- package/dist/{sync/NetworkProbe.d.ts → transaction/transport/networkProbe.d.ts} +7 -4
- package/dist/{sync/NetworkProbe.js → transaction/transport/networkProbe.js} +14 -13
- package/dist/transaction/transport/wsFrameHandlers.d.ts +128 -0
- package/dist/transaction/transport/wsFrameHandlers.js +429 -0
- package/dist/transaction/transport/wsTransport.d.ts +574 -0
- package/dist/transaction/transport/wsTransport.js +1023 -0
- package/dist/transaction/types/assertExact.d.ts +17 -0
- package/dist/transaction/types/assertExact.js +1 -0
- package/dist/{types → transaction/types}/global.d.ts +17 -2
- package/dist/{types → transaction/types}/global.js +2 -1
- package/dist/{types → transaction/types}/index.d.ts +14 -46
- package/dist/{types → transaction/types}/index.js +7 -16
- package/dist/{types → transaction/types}/streams.d.ts +73 -45
- package/dist/transaction/utils/duration.d.ts +50 -0
- package/dist/{utils → transaction/utils}/duration.js +32 -0
- package/dist/{utils → transaction/utils}/json.d.ts +18 -0
- package/dist/transaction/utils/json.js +276 -0
- package/dist/transaction/wire/accountResponses.d.ts +420 -0
- package/dist/transaction/wire/accountResponses.js +290 -0
- package/dist/transaction/wire/auth.d.ts +56 -0
- package/dist/transaction/wire/auth.js +63 -0
- package/dist/transaction/wire/claimEvent.d.ts +76 -0
- package/dist/transaction/wire/claimEvent.js +73 -0
- package/dist/transaction/wire/claims.d.ts +530 -0
- package/dist/transaction/wire/claims.js +327 -0
- package/dist/{wire → transaction/wire}/commit.d.ts +125 -193
- package/dist/{wire → transaction/wire}/commit.js +68 -47
- package/dist/{wire → transaction/wire}/delta.d.ts +66 -17
- package/dist/{wire → transaction/wire}/delta.js +37 -13
- package/dist/transaction/wire/errorEnvelope.d.ts +72 -0
- package/dist/{wire → transaction/wire}/errorEnvelope.js +36 -5
- package/dist/transaction/wire/feedCursor.d.ts +60 -0
- package/dist/transaction/wire/feedCursor.js +82 -0
- package/dist/transaction/wire/feedEvent.d.ts +204 -0
- package/dist/transaction/wire/feedEvent.js +65 -0
- package/dist/transaction/wire/frames.d.ts +194 -0
- package/dist/transaction/wire/frames.js +50 -0
- package/dist/transaction/wire/inboundFrames.d.ts +562 -0
- package/dist/transaction/wire/inboundFrames.js +116 -0
- package/dist/transaction/wire/index.d.ts +54 -0
- package/dist/transaction/wire/index.js +83 -0
- package/dist/{wire → transaction/wire}/listEnvelope.d.ts +13 -14
- package/dist/transaction/wire/listEnvelope.js +42 -0
- package/dist/transaction/wire/modelMutations.d.ts +31 -0
- package/dist/transaction/wire/modelMutations.js +52 -0
- package/dist/transaction/wire/modelResponses.d.ts +85 -0
- package/dist/transaction/wire/modelResponses.js +43 -0
- package/dist/transaction/wire/modelShape.d.ts +78 -0
- package/dist/transaction/wire/modelShape.js +74 -0
- package/dist/transactions/{TransactionQueue.d.ts → mutations/MutationQueue.d.ts} +85 -38
- package/dist/transactions/{TransactionQueue.js → mutations/MutationQueue.js} +141 -80
- package/dist/transactions/{TransactionStore.d.ts → mutations/MutationStore.d.ts} +8 -8
- package/dist/transactions/{TransactionStore.js → mutations/MutationStore.js} +2 -2
- package/dist/transactions/{coalesceRules.d.ts → mutations/coalesceRules.d.ts} +10 -10
- package/dist/transactions/{coalesceRules.js → mutations/coalesceRules.js} +1 -1
- package/dist/transactions/mutations/commitLatency.d.ts +52 -0
- package/dist/transactions/mutations/commitLatency.js +130 -0
- package/dist/transactions/{commitOutboxStore.d.ts → mutations/commitOutboxStore.d.ts} +1 -5
- package/dist/transactions/{commitOutboxStore.js → mutations/commitOutboxStore.js} +1 -1
- package/dist/transactions/{commitPayload.d.ts → mutations/commitPayload.d.ts} +18 -16
- package/dist/transactions/{commitPayload.js → mutations/commitPayload.js} +15 -15
- package/dist/transactions/{deltaConfirmation.d.ts → mutations/deltaConfirmation.d.ts} +15 -11
- package/dist/transactions/{deltaConfirmation.js → mutations/deltaConfirmation.js} +14 -12
- package/dist/transactions/mutations/durableWriteStore.d.ts +14 -0
- package/dist/transactions/mutations/durableWriteStore.js +12 -0
- package/dist/transactions/{optimisticApply.d.ts → mutations/optimisticApply.d.ts} +7 -7
- package/dist/transactions/{replayValidation.d.ts → mutations/replayValidation.d.ts} +4 -3
- package/dist/transactions/{replayValidation.js → mutations/replayValidation.js} +7 -5
- package/dist/utils/mobxSetup.d.ts +1 -1
- package/dist/utils/mobxSetup.js +5 -2
- package/dist/{core → views}/QueryView.d.ts +2 -2
- package/dist/{core → views}/QueryView.js +2 -2
- package/dist/{core → views}/ViewRegistry.d.ts +1 -1
- package/dist/{core/queryUtils.d.ts → views/incrementalView.d.ts} +6 -6
- package/dist/{core/queryUtils.js → views/incrementalView.js} +6 -6
- package/dist/webhooks/events.d.ts +2 -2
- package/dist/wire/index.d.ts +1 -34
- package/dist/wire/index.js +8 -49
- package/docs/agent-messaging.md +3 -3
- package/docs/agents.md +20 -13
- package/docs/api-keys.md +14 -10
- package/docs/api.md +27 -61
- package/docs/audit.md +6 -3
- package/docs/cli.md +41 -13
- package/docs/client-behavior.md +11 -9
- package/docs/concurrency-convention.md +49 -57
- package/docs/coordination.md +283 -121
- package/docs/data-sources.md +7 -5
- package/docs/debugging.md +39 -15
- package/docs/deployment.md +267 -0
- package/docs/examples/agent-human.md +49 -42
- package/docs/examples/ai-sdk-tool.md +69 -44
- package/docs/examples/existing-python-backend.md +8 -6
- package/docs/examples/nextjs.md +129 -47
- package/docs/examples/scoped-agent.md +46 -45
- package/docs/examples/server-agent.md +46 -26
- package/docs/groups.md +87 -30
- package/docs/guarantees.md +41 -12
- package/docs/how-it-works.md +38 -12
- package/docs/idempotency.md +126 -0
- package/docs/identity.md +77 -74
- package/docs/index.md +172 -86
- package/docs/integration-guide.md +31 -19
- package/docs/mcp.md +46 -21
- package/docs/migration.md +95 -18
- package/docs/operating-on-your-database.md +3 -1
- package/docs/projects.md +3 -1
- package/docs/quickstart.md +22 -5
- package/docs/react.md +31 -18
- package/docs/schema-contract.md +5 -3
- package/docs/session-settings.md +108 -0
- package/docs/sessions.md +4 -2
- package/docs/webhooks.md +12 -10
- package/llms.txt +48 -18
- package/package.json +21 -26
- package/dist/agent/Agent.d.ts +0 -366
- package/dist/agent/Agent.js +0 -514
- package/dist/agent/index.d.ts +0 -115
- package/dist/agent/index.js +0 -128
- package/dist/agent/session.d.ts +0 -93
- package/dist/agent/session.js +0 -149
- package/dist/agent/types.d.ts +0 -68
- package/dist/agent/types.js +0 -9
- package/dist/cli.cjs +0 -286329
- package/dist/client/durableWrites.d.ts +0 -21
- package/dist/client/httpClient.d.ts +0 -80
- package/dist/coordination/schema.d.ts +0 -722
- package/dist/coordination/schema.js +0 -578
- package/dist/schema/openapi.d.ts +0 -29
- package/dist/schema/openapi.js +0 -124
- package/dist/testing/fixtures/bootstrap.d.ts +0 -49
- package/dist/testing/fixtures/bootstrap.js +0 -59
- package/dist/testing/fixtures/deltas.d.ts +0 -83
- package/dist/testing/fixtures/deltas.js +0 -136
- package/dist/testing/fixtures/models.d.ts +0 -83
- package/dist/testing/fixtures/models.js +0 -272
- package/dist/testing/helpers/reactWrapper.d.ts +0 -69
- package/dist/testing/helpers/reactWrapper.js +0 -67
- package/dist/testing/helpers/syncEngineHarness.d.ts +0 -54
- package/dist/testing/helpers/syncEngineHarness.js +0 -73
- package/dist/testing/helpers/wait.d.ts +0 -30
- package/dist/testing/helpers/wait.js +0 -49
- package/dist/testing/index.d.ts +0 -23
- package/dist/testing/index.js +0 -33
- package/dist/testing/mocks/FakeDatabase.d.ts +0 -18
- package/dist/testing/mocks/FakeDatabase.js +0 -10
- package/dist/testing/mocks/MockMutationExecutor.d.ts +0 -87
- package/dist/testing/mocks/MockMutationExecutor.js +0 -192
- package/dist/testing/mocks/MockNetworkMonitor.d.ts +0 -20
- package/dist/testing/mocks/MockNetworkMonitor.js +0 -46
- package/dist/testing/mocks/MockSyncContext.d.ts +0 -51
- package/dist/testing/mocks/MockSyncContext.js +0 -71
- package/dist/testing/mocks/MockSyncStore.d.ts +0 -88
- package/dist/testing/mocks/MockSyncStore.js +0 -171
- package/dist/testing/mocks/MockWebSocket.d.ts +0 -71
- package/dist/testing/mocks/MockWebSocket.js +0 -118
- package/dist/transactions/durableWriteStore.js +0 -30
- package/dist/utils/duration.d.ts +0 -25
- package/dist/utils/json.js +0 -88
- package/dist/wire/errorEnvelope.d.ts +0 -55
- package/dist/wire/frames.d.ts +0 -197
- package/dist/wire/frames.js +0 -49
- package/dist/wire/listEnvelope.js +0 -18
- package/docs/interaction-model.md +0 -97
- /package/dist/{core → query}/QueryProcessor.d.ts +0 -0
- /package/dist/{core → query}/QueryProcessor.js +0 -0
- /package/dist/{core/storeContract.js → storeContract.js} +0 -0
- /package/dist/{core → stores}/openIDBWithTimeout.d.ts +0 -0
- /package/dist/{core → stores}/openIDBWithTimeout.js +0 -0
- /package/dist/{client → transaction/auth}/credentialEndpoint.d.ts +0 -0
- /package/dist/{client → transaction/auth}/credentialEndpoint.js +0 -0
- /package/dist/{auth → transaction/auth}/credentialPolicy.d.ts +0 -0
- /package/dist/{auth → transaction/auth}/credentialPolicy.js +0 -0
- /package/dist/{auth → transaction/auth}/credentialSource.js +0 -0
- /package/dist/{client → transaction/auth}/hostedEndpoints.d.ts +0 -0
- /package/dist/{client → transaction/auth}/hostedEndpoints.js +0 -0
- /package/dist/{client → transaction}/persistence.d.ts +0 -0
- /package/dist/{client → transaction}/persistence.js +0 -0
- /package/dist/{client → transaction/resources}/functionalUpdate.d.ts +0 -0
- /package/dist/{client → transaction/resources}/functionalUpdate.js +0 -0
- /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.d.ts +0 -0
- /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.js +0 -0
- /package/dist/{client → transaction/transport}/httpTransport.d.ts +0 -0
- /package/dist/{types → transaction/types}/modelData.d.ts +0 -0
- /package/dist/{types → transaction/types}/modelData.js +0 -0
- /package/dist/{types → transaction/types}/participant.d.ts +0 -0
- /package/dist/{types → transaction/types}/participant.js +0 -0
- /package/dist/{types → transaction/types}/streams.js +0 -0
- /package/dist/{utils → transaction/utils}/asyncIterator.d.ts +0 -0
- /package/dist/{utils → transaction/utils}/asyncIterator.js +0 -0
- /package/dist/{wire → transaction/wire}/bootstrapReason.d.ts +0 -0
- /package/dist/{wire → transaction/wire}/bootstrapReason.js +0 -0
- /package/dist/{wire → transaction/wire}/protocol.d.ts +0 -0
- /package/dist/{wire → transaction/wire}/protocol.js +0 -0
- /package/dist/{wire → transaction/wire}/protocolVersion.d.ts +0 -0
- /package/dist/{wire → transaction/wire}/protocolVersion.js +0 -0
- /package/dist/transactions/{UnconfirmedWrites.d.ts → mutations/UnconfirmedWrites.d.ts} +0 -0
- /package/dist/transactions/{UnconfirmedWrites.js → mutations/UnconfirmedWrites.js} +0 -0
- /package/dist/transactions/{optimisticApply.js → mutations/optimisticApply.js} +0 -0
- /package/dist/{core → views}/ViewRegistry.js +0 -0
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
* browser — one per registered model — alongside the single
|
|
4
4
|
* {@link SyncActionStore} for pending changes. It creates each store from the
|
|
5
5
|
* model's metadata, tracks readiness, and provisions the underlying IndexedDB
|
|
6
|
-
* object stores. A model's load strategy
|
|
7
|
-
*
|
|
6
|
+
* object stores. A model's load strategy — instant or lazy — decides how and
|
|
7
|
+
* when its data is loaded.
|
|
8
8
|
*/
|
|
9
9
|
import { ModelRegistry } from '../ModelRegistry.js';
|
|
10
|
-
import { ObjectStore } from '
|
|
11
|
-
import { SyncActionStore } from '
|
|
12
|
-
import { LoadStrategy } from '../types/index.js';
|
|
10
|
+
import { ObjectStore } from './ObjectStore.js';
|
|
11
|
+
import { SyncActionStore } from './SyncActionStore.js';
|
|
12
|
+
import { LoadStrategy } from '../transaction/types/index.js';
|
|
13
13
|
/**
|
|
14
14
|
* StoreManager - Central manager for all ObjectStore instances
|
|
15
15
|
*
|
|
@@ -20,6 +20,7 @@ import { LoadStrategy } from '../types/index.js';
|
|
|
20
20
|
* - Handles store-specific optimizations based on load strategies
|
|
21
21
|
*/
|
|
22
22
|
export declare class StoreManager {
|
|
23
|
+
private readonly runtime;
|
|
23
24
|
private stores;
|
|
24
25
|
/** Strict-durability wrapper for the client write journal and commit outbox. */
|
|
25
26
|
private transactionStore;
|
|
@@ -27,7 +28,7 @@ export declare class StoreManager {
|
|
|
27
28
|
private db;
|
|
28
29
|
private isInitialized;
|
|
29
30
|
private modelRegistry;
|
|
30
|
-
constructor(modelRegistry: ModelRegistry);
|
|
31
|
+
constructor(modelRegistry: ModelRegistry, runtime?: RuntimeContext);
|
|
31
32
|
/**
|
|
32
33
|
* Initialize all stores for registered models
|
|
33
34
|
*/
|
|
@@ -39,7 +40,7 @@ export declare class StoreManager {
|
|
|
39
40
|
/**
|
|
40
41
|
* Create stores (tables) in IndexedDB
|
|
41
42
|
*/
|
|
42
|
-
createStores(db: IDBDatabase
|
|
43
|
+
createStores(db: IDBDatabase): Promise<void>;
|
|
43
44
|
/**
|
|
44
45
|
* Create special tables (sync_action_table, model_table, model_table_partial, __meta, __transactions)
|
|
45
46
|
*/
|
|
@@ -74,25 +75,10 @@ export declare class StoreManager {
|
|
|
74
75
|
* than scanning them all, and returns true as soon as one has records.
|
|
75
76
|
*/
|
|
76
77
|
hasAnyData(): Promise<boolean>;
|
|
77
|
-
/**
|
|
78
|
-
* Get store type distribution for debugging
|
|
79
|
-
*/
|
|
80
|
-
getStoreTypeDistribution(): {
|
|
81
|
-
full: number;
|
|
82
|
-
partial: number;
|
|
83
|
-
};
|
|
84
78
|
/**
|
|
85
79
|
* Get stores by load strategy
|
|
86
80
|
*/
|
|
87
81
|
getStoresByStrategy(strategy: LoadStrategy): ObjectStore[];
|
|
88
|
-
/**
|
|
89
|
-
* Get models to load for bootstrapping
|
|
90
|
-
*/
|
|
91
|
-
getModelsToLoad(): {
|
|
92
|
-
instant: string[];
|
|
93
|
-
lazy: string[];
|
|
94
|
-
partial: string[];
|
|
95
|
-
};
|
|
96
82
|
/**
|
|
97
83
|
* Perform maintenance on all stores
|
|
98
84
|
*/
|
|
@@ -111,10 +97,6 @@ export declare class StoreManager {
|
|
|
111
97
|
*/
|
|
112
98
|
getComprehensiveStats(): Promise<{
|
|
113
99
|
totalStores: number;
|
|
114
|
-
storeTypes: {
|
|
115
|
-
full: number;
|
|
116
|
-
partial: number;
|
|
117
|
-
};
|
|
118
100
|
readiness: {
|
|
119
101
|
ready: number;
|
|
120
102
|
notReady: number;
|
|
@@ -129,3 +111,4 @@ export declare class StoreManager {
|
|
|
129
111
|
}[];
|
|
130
112
|
}>;
|
|
131
113
|
}
|
|
114
|
+
import type { RuntimeContext } from '../RuntimeContext.js';
|
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
* browser — one per registered model — alongside the single
|
|
4
4
|
* {@link SyncActionStore} for pending changes. It creates each store from the
|
|
5
5
|
* model's metadata, tracks readiness, and provisions the underlying IndexedDB
|
|
6
|
-
* object stores. A model's load strategy
|
|
7
|
-
*
|
|
6
|
+
* object stores. A model's load strategy — instant or lazy — decides how and
|
|
7
|
+
* when its data is loaded.
|
|
8
8
|
*/
|
|
9
9
|
import { ModelRegistry } from '../ModelRegistry.js';
|
|
10
|
-
import { ObjectStore } from '
|
|
11
|
-
import { SyncActionStore } from '
|
|
12
|
-
import { LoadStrategy } from '../types/index.js';
|
|
13
|
-
import { AbloValidationError } from '../errors.js';
|
|
10
|
+
import { ObjectStore } from './ObjectStore.js';
|
|
11
|
+
import { SyncActionStore } from './SyncActionStore.js';
|
|
12
|
+
import { LoadStrategy } from '../transaction/types/index.js';
|
|
13
|
+
import { AbloValidationError } from '../transaction/errors.js';
|
|
14
14
|
/**
|
|
15
15
|
* StoreManager - Central manager for all ObjectStore instances
|
|
16
16
|
*
|
|
@@ -21,6 +21,7 @@ import { AbloValidationError } from '../errors.js';
|
|
|
21
21
|
* - Handles store-specific optimizations based on load strategies
|
|
22
22
|
*/
|
|
23
23
|
export class StoreManager {
|
|
24
|
+
runtime;
|
|
24
25
|
stores = new Map();
|
|
25
26
|
/** Strict-durability wrapper for the client write journal and commit outbox. */
|
|
26
27
|
transactionStore = null;
|
|
@@ -28,7 +29,8 @@ export class StoreManager {
|
|
|
28
29
|
db = null;
|
|
29
30
|
isInitialized = false;
|
|
30
31
|
modelRegistry;
|
|
31
|
-
constructor(modelRegistry) {
|
|
32
|
+
constructor(modelRegistry, runtime = globalRuntime) {
|
|
33
|
+
this.runtime = runtime;
|
|
32
34
|
this.modelRegistry = modelRegistry;
|
|
33
35
|
}
|
|
34
36
|
/**
|
|
@@ -38,10 +40,10 @@ export class StoreManager {
|
|
|
38
40
|
this.db = db;
|
|
39
41
|
if (this.isInitialized) {
|
|
40
42
|
// Idempotent re-entry — harmless, nothing for the consumer to act on → debug.
|
|
41
|
-
|
|
43
|
+
this.runtime.logger.debug('StoreManager already initialized');
|
|
42
44
|
return;
|
|
43
45
|
}
|
|
44
|
-
|
|
46
|
+
this.runtime.logger.info('Initializing ObjectStore instances for all models');
|
|
45
47
|
const startTime = performance.now();
|
|
46
48
|
// Get all registered models
|
|
47
49
|
const allModels = this.modelRegistry.getRegisteredModelNames();
|
|
@@ -55,17 +57,14 @@ export class StoreManager {
|
|
|
55
57
|
// mode.
|
|
56
58
|
this.transactionStore = new ObjectStore(this.db, '__transactions', '__transactions', { loadStrategy: LoadStrategy.instant }, 'strict');
|
|
57
59
|
// Initialize SyncactionStore
|
|
58
|
-
this.syncactionStore = new SyncActionStore(this.db);
|
|
60
|
+
this.syncactionStore = new SyncActionStore(this.db, this.runtime);
|
|
59
61
|
await this.syncactionStore.initialize();
|
|
60
62
|
this.isInitialized = true;
|
|
61
63
|
const duration = performance.now() - startTime;
|
|
62
|
-
|
|
64
|
+
this.runtime.logger.info('Initialized ObjectStores and SyncactionStore', {
|
|
63
65
|
count: this.stores.size,
|
|
64
66
|
ms: duration.toFixed(2),
|
|
65
67
|
});
|
|
66
|
-
// Log store distribution
|
|
67
|
-
const storeTypes = this.getStoreTypeDistribution();
|
|
68
|
-
getContext().logger.debug('Store distribution', storeTypes);
|
|
69
68
|
}
|
|
70
69
|
/**
|
|
71
70
|
* Create ObjectStore for a specific model
|
|
@@ -86,16 +85,15 @@ export class StoreManager {
|
|
|
86
85
|
/**
|
|
87
86
|
* Create stores (tables) in IndexedDB
|
|
88
87
|
*/
|
|
89
|
-
async createStores(db
|
|
90
|
-
|
|
88
|
+
async createStores(db) {
|
|
89
|
+
this.runtime.logger.info('Creating tables for all registered models');
|
|
91
90
|
for (const modelName of this.modelRegistry.getRegisteredModelNames()) {
|
|
92
91
|
const storeName = modelName;
|
|
93
|
-
const metadata = this.modelRegistry.getMetadata(modelName);
|
|
94
92
|
// Skip if store already exists
|
|
95
93
|
if (db.objectStoreNames.contains(storeName)) {
|
|
96
94
|
continue;
|
|
97
95
|
}
|
|
98
|
-
|
|
96
|
+
this.runtime.logger.debug('Creating table', { storeName, modelName });
|
|
99
97
|
// Create object store with id as keyPath
|
|
100
98
|
const store = db.createObjectStore(storeName, { keyPath: 'id' });
|
|
101
99
|
// Create indexes for indexed properties
|
|
@@ -103,18 +101,14 @@ export class StoreManager {
|
|
|
103
101
|
for (const propName of indexedProperties) {
|
|
104
102
|
try {
|
|
105
103
|
store.createIndex(propName, propName, { unique: false });
|
|
106
|
-
|
|
104
|
+
this.runtime.logger.debug('Created index', { store: storeName, prop: propName });
|
|
107
105
|
}
|
|
108
106
|
catch (error) {
|
|
109
107
|
// Internal IndexedDB index setup — a miss only affects local query
|
|
110
108
|
// speed and isn't consumer-actionable → debug.
|
|
111
|
-
|
|
109
|
+
this.runtime.logger.debug('Failed to create index', { store: storeName, prop: propName, error });
|
|
112
110
|
}
|
|
113
111
|
}
|
|
114
|
-
// For partial load strategy models, we'll create additional partial index database later
|
|
115
|
-
if (metadata?.loadStrategy === LoadStrategy.partial) {
|
|
116
|
-
getContext().logger.debug('Model will have additional partial index database', { modelName });
|
|
117
|
-
}
|
|
118
112
|
}
|
|
119
113
|
// Create special tables
|
|
120
114
|
this.createSpecialTables(db);
|
|
@@ -127,12 +121,12 @@ export class StoreManager {
|
|
|
127
121
|
if (!db.objectStoreNames.contains('sync_action_table')) {
|
|
128
122
|
const syncActionStore = db.createObjectStore('sync_action_table', { keyPath: 'id' });
|
|
129
123
|
syncActionStore.createIndex('syncId', 'id');
|
|
130
|
-
|
|
124
|
+
this.runtime.logger.debug('Created sync_action_table');
|
|
131
125
|
}
|
|
132
126
|
// Create __meta table for model persistence state and database metadata
|
|
133
127
|
if (!db.objectStoreNames.contains('__meta')) {
|
|
134
128
|
db.createObjectStore('__meta');
|
|
135
|
-
|
|
129
|
+
this.runtime.logger.debug('Created __meta table');
|
|
136
130
|
}
|
|
137
131
|
// Create __transactions table for unsent transactions
|
|
138
132
|
if (!db.objectStoreNames.contains('__transactions')) {
|
|
@@ -143,7 +137,7 @@ export class StoreManager {
|
|
|
143
137
|
// Create indexes for transaction queries
|
|
144
138
|
transactionStore.createIndex('timestamp', 'timestamp');
|
|
145
139
|
transactionStore.createIndex('status', 'status');
|
|
146
|
-
|
|
140
|
+
this.runtime.logger.debug('Created __transactions table');
|
|
147
141
|
}
|
|
148
142
|
}
|
|
149
143
|
/**
|
|
@@ -183,7 +177,7 @@ export class StoreManager {
|
|
|
183
177
|
}
|
|
184
178
|
}
|
|
185
179
|
const allReady = notReadyStores.length === 0;
|
|
186
|
-
|
|
180
|
+
this.runtime.logger.debug('Store readiness', {
|
|
187
181
|
ready: readyStores.length,
|
|
188
182
|
total: this.stores.size,
|
|
189
183
|
notReady: notReadyStores,
|
|
@@ -223,23 +217,6 @@ export class StoreManager {
|
|
|
223
217
|
}
|
|
224
218
|
return false;
|
|
225
219
|
}
|
|
226
|
-
/**
|
|
227
|
-
* Get store type distribution for debugging
|
|
228
|
-
*/
|
|
229
|
-
getStoreTypeDistribution() {
|
|
230
|
-
let full = 0;
|
|
231
|
-
let partial = 0;
|
|
232
|
-
for (const [modelName] of Array.from(this.stores)) {
|
|
233
|
-
const metadata = this.modelRegistry.getMetadata(modelName);
|
|
234
|
-
if (metadata?.loadStrategy === LoadStrategy.partial) {
|
|
235
|
-
partial++;
|
|
236
|
-
}
|
|
237
|
-
else {
|
|
238
|
-
full++;
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
return { full, partial };
|
|
242
|
-
}
|
|
243
220
|
/**
|
|
244
221
|
* Get stores by load strategy
|
|
245
222
|
*/
|
|
@@ -253,38 +230,14 @@ export class StoreManager {
|
|
|
253
230
|
}
|
|
254
231
|
return stores;
|
|
255
232
|
}
|
|
256
|
-
/**
|
|
257
|
-
* Get models to load for bootstrapping
|
|
258
|
-
*/
|
|
259
|
-
getModelsToLoad() {
|
|
260
|
-
const instant = [];
|
|
261
|
-
const lazy = [];
|
|
262
|
-
const partial = [];
|
|
263
|
-
for (const [modelName] of Array.from(this.stores)) {
|
|
264
|
-
const metadata = this.modelRegistry.getMetadata(modelName);
|
|
265
|
-
switch (metadata?.loadStrategy) {
|
|
266
|
-
case LoadStrategy.instant:
|
|
267
|
-
instant.push(modelName);
|
|
268
|
-
break;
|
|
269
|
-
case LoadStrategy.lazy:
|
|
270
|
-
lazy.push(modelName);
|
|
271
|
-
break;
|
|
272
|
-
case LoadStrategy.partial:
|
|
273
|
-
partial.push(modelName);
|
|
274
|
-
break;
|
|
275
|
-
// Skip explicitlyRequested and local
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
return { instant, lazy, partial };
|
|
279
|
-
}
|
|
280
233
|
/**
|
|
281
234
|
* Perform maintenance on all stores
|
|
282
235
|
*/
|
|
283
236
|
async performMaintenance() {
|
|
284
|
-
|
|
237
|
+
this.runtime.logger.info('Performing maintenance on all stores');
|
|
285
238
|
const promises = Array.from(this.stores.values()).map((store) => store.performMaintenance());
|
|
286
239
|
await Promise.all(promises);
|
|
287
|
-
|
|
240
|
+
this.runtime.logger.info('Store maintenance completed');
|
|
288
241
|
}
|
|
289
242
|
/**
|
|
290
243
|
* Clear all stores
|
|
@@ -292,17 +245,17 @@ export class StoreManager {
|
|
|
292
245
|
async clearAllStores() {
|
|
293
246
|
// Lifecycle chatter (logout / identity switch / reset), not a warning.
|
|
294
247
|
// Logged at `debug` so it stays silent under the default `warn` threshold.
|
|
295
|
-
|
|
248
|
+
this.runtime.logger.debug('Clearing all stores');
|
|
296
249
|
const promises = Array.from(this.stores.values()).map((store) => store.clear());
|
|
297
250
|
await Promise.all(promises);
|
|
298
|
-
|
|
251
|
+
this.runtime.logger.info('All stores cleared');
|
|
299
252
|
}
|
|
300
253
|
/**
|
|
301
254
|
* Mark all stores as closing to prevent new operations
|
|
302
255
|
* Called before database connection is closed
|
|
303
256
|
*/
|
|
304
257
|
markAllStoresAsClosing() {
|
|
305
|
-
|
|
258
|
+
this.runtime.logger.debug('Marking all stores as closing');
|
|
306
259
|
for (const store of this.stores.values()) {
|
|
307
260
|
store.markAsClosing();
|
|
308
261
|
}
|
|
@@ -312,7 +265,7 @@ export class StoreManager {
|
|
|
312
265
|
// If closing-state coordination is ever needed for sync actions, add it
|
|
313
266
|
// explicitly to SyncActionStore rather than casting to reach a method that
|
|
314
267
|
// may not exist.
|
|
315
|
-
|
|
268
|
+
this.runtime.logger.debug('All stores marked as closing');
|
|
316
269
|
}
|
|
317
270
|
/**
|
|
318
271
|
* Get comprehensive statistics
|
|
@@ -339,7 +292,6 @@ export class StoreManager {
|
|
|
339
292
|
}
|
|
340
293
|
return {
|
|
341
294
|
totalStores: this.stores.size,
|
|
342
|
-
storeTypes: this.getStoreTypeDistribution(),
|
|
343
295
|
readiness: {
|
|
344
296
|
ready: readyCount,
|
|
345
297
|
notReady: this.stores.size - readyCount,
|
|
@@ -349,4 +301,4 @@ export class StoreManager {
|
|
|
349
301
|
};
|
|
350
302
|
}
|
|
351
303
|
}
|
|
352
|
-
import {
|
|
304
|
+
import { globalRuntime } from '../context.js';
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* A local, IndexedDB-backed store for the sync actions (change deltas) the
|
|
3
3
|
* server sends. See {@link SyncActionStore}.
|
|
4
4
|
*/
|
|
5
|
-
import type {
|
|
5
|
+
import type { RuntimeContext } from '../RuntimeContext.js';
|
|
6
|
+
import { type SyncAction } from './syncAction.js';
|
|
6
7
|
/**
|
|
7
8
|
* Stores the sync actions (the change deltas) the server sends, keyed by
|
|
8
9
|
* their sync id, and tracks which ones have been applied. It keeps a
|
|
@@ -11,11 +12,12 @@ import type { SyncAction } from '../types/index.js';
|
|
|
11
12
|
* replayed while resolving a conflict.
|
|
12
13
|
*/
|
|
13
14
|
export declare class SyncActionStore {
|
|
15
|
+
private readonly runtime;
|
|
14
16
|
private db;
|
|
15
17
|
private storeName;
|
|
16
18
|
private lastAppliedSyncId;
|
|
17
19
|
private pendingActions;
|
|
18
|
-
constructor(db: IDBDatabase);
|
|
20
|
+
constructor(db: IDBDatabase, runtime?: RuntimeContext);
|
|
19
21
|
/**
|
|
20
22
|
* Initialize store (create if needed)
|
|
21
23
|
*/
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* server sends. See {@link SyncActionStore}.
|
|
4
4
|
*/
|
|
5
5
|
// Uses native IndexedDB for maximum performance
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { globalRuntime } from '../context.js';
|
|
7
|
+
import { syncActionSchema } from './syncAction.js';
|
|
8
8
|
/**
|
|
9
9
|
* The validation boundary for rows read back from the store. A row may have
|
|
10
10
|
* been written by an earlier session, so this build cannot assume its shape.
|
|
@@ -13,19 +13,11 @@ import { getContext } from '../context.js';
|
|
|
13
13
|
* {@link SyncAction}. A row that fails to parse is dropped and logged rather
|
|
14
14
|
* than replayed as a malformed delta.
|
|
15
15
|
*/
|
|
16
|
-
const storedSyncActionSchema = z.object({
|
|
17
|
-
id: z.number(),
|
|
18
|
-
modelName: z.string(),
|
|
19
|
-
modelId: z.string(),
|
|
20
|
-
action: z.enum(['I', 'U', 'A', 'D', 'C', 'G', 'S', 'V']),
|
|
21
|
-
data: z.unknown(),
|
|
22
|
-
__class: z.literal('SyncAction').default('SyncAction'),
|
|
23
|
-
});
|
|
24
16
|
/** Parse one stored row into a SyncAction, or `null` (dropped + logged). */
|
|
25
|
-
function toSyncAction(row) {
|
|
26
|
-
const parsed =
|
|
17
|
+
function toSyncAction(row, runtime) {
|
|
18
|
+
const parsed = syncActionSchema.safeParse(row);
|
|
27
19
|
if (!parsed.success) {
|
|
28
|
-
|
|
20
|
+
runtime.logger.debug('[SyncActionStore] Dropping malformed stored sync action', {
|
|
29
21
|
issues: parsed.error.issues.map((i) => i.path.join('.')).join(', '),
|
|
30
22
|
});
|
|
31
23
|
return null;
|
|
@@ -40,11 +32,13 @@ function toSyncAction(row) {
|
|
|
40
32
|
* replayed while resolving a conflict.
|
|
41
33
|
*/
|
|
42
34
|
export class SyncActionStore {
|
|
35
|
+
runtime;
|
|
43
36
|
db;
|
|
44
37
|
storeName = 'sync_action_table';
|
|
45
38
|
lastAppliedSyncId = 0;
|
|
46
39
|
pendingActions = new Map();
|
|
47
|
-
constructor(db) {
|
|
40
|
+
constructor(db, runtime = globalRuntime) {
|
|
41
|
+
this.runtime = runtime;
|
|
48
42
|
this.db = db;
|
|
49
43
|
}
|
|
50
44
|
/**
|
|
@@ -129,7 +123,7 @@ export class SyncActionStore {
|
|
|
129
123
|
resolve(undefined);
|
|
130
124
|
return;
|
|
131
125
|
}
|
|
132
|
-
resolve(toSyncAction(data) ?? undefined);
|
|
126
|
+
resolve(toSyncAction(data, this.runtime) ?? undefined);
|
|
133
127
|
};
|
|
134
128
|
request.onerror = () => { reject(request.error); };
|
|
135
129
|
});
|
|
@@ -147,7 +141,7 @@ export class SyncActionStore {
|
|
|
147
141
|
request.onsuccess = () => {
|
|
148
142
|
const allData = request.result;
|
|
149
143
|
const actions = allData
|
|
150
|
-
.map(toSyncAction)
|
|
144
|
+
.map((row) => toSyncAction(row, this.runtime))
|
|
151
145
|
.filter((action) => action !== null);
|
|
152
146
|
resolve(actions);
|
|
153
147
|
};
|
|
@@ -496,7 +490,7 @@ export class SyncActionStore {
|
|
|
496
490
|
try {
|
|
497
491
|
await this.updateLastSyncId(this.lastAppliedSyncId);
|
|
498
492
|
const result = actionsToRewind
|
|
499
|
-
.map(toSyncAction)
|
|
493
|
+
.map((row) => toSyncAction(row, this.runtime))
|
|
500
494
|
.filter((action) => action !== null);
|
|
501
495
|
resolve(result);
|
|
502
496
|
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The persisted local action record consumed by `SyncActionStore`. It is a
|
|
3
|
+
* client materialization artifact, not a transaction-layer wire shape: the
|
|
4
|
+
* authoritative broadcast vocabulary is the settlement core's delta wire
|
|
5
|
+
* schema, while this one adds the local `__class` discriminator IndexedDB uses.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
export declare const syncActionSchema: z.ZodObject<{
|
|
9
|
+
id: z.ZodNumber;
|
|
10
|
+
modelName: z.ZodString;
|
|
11
|
+
modelId: z.ZodString;
|
|
12
|
+
action: z.ZodEnum<{
|
|
13
|
+
I: "I";
|
|
14
|
+
U: "U";
|
|
15
|
+
D: "D";
|
|
16
|
+
A: "A";
|
|
17
|
+
V: "V";
|
|
18
|
+
C: "C";
|
|
19
|
+
G: "G";
|
|
20
|
+
S: "S";
|
|
21
|
+
}>;
|
|
22
|
+
data: z.ZodUnknown;
|
|
23
|
+
__class: z.ZodDefault<z.ZodLiteral<"SyncAction">>;
|
|
24
|
+
}, z.core.$strip>;
|
|
25
|
+
export type SyncAction = z.infer<typeof syncActionSchema>;
|
|
26
|
+
export type SyncActionType = SyncAction['action'];
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The persisted local action record consumed by `SyncActionStore`. It is a
|
|
3
|
+
* client materialization artifact, not a transaction-layer wire shape: the
|
|
4
|
+
* authoritative broadcast vocabulary is the settlement core's delta wire
|
|
5
|
+
* schema, while this one adds the local `__class` discriminator IndexedDB uses.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
import { syncDeltaActionSchema } from '../transaction/wire/delta.js';
|
|
9
|
+
export const syncActionSchema = z.object({
|
|
10
|
+
id: z.number(),
|
|
11
|
+
modelName: z.string(),
|
|
12
|
+
modelId: z.string(),
|
|
13
|
+
action: syncDeltaActionSchema,
|
|
14
|
+
data: z.unknown(),
|
|
15
|
+
__class: z.literal('SyncAction').default('SyncAction'),
|
|
16
|
+
});
|
package/dist/surface.d.ts
CHANGED
|
@@ -19,9 +19,9 @@
|
|
|
19
19
|
* tuple, so it is the one list of model-verb names a generated summary can
|
|
20
20
|
* describe.
|
|
21
21
|
*/
|
|
22
|
-
export declare const PUBLIC_MODEL_VERBS: readonly ["retrieve", "list", "
|
|
22
|
+
export declare const PUBLIC_MODEL_VERBS: readonly ["retrieve", "list", "local", "create", "update", "delete", "claim", "track", "join", "onChange"];
|
|
23
23
|
/**
|
|
24
|
-
* The option keys accepted by `list
|
|
24
|
+
* The option keys accepted by `local.list` and `onChange`, matching the
|
|
25
25
|
* keys of {@link LocalReadOptions}. Note that the lifecycle filter is named
|
|
26
26
|
* `state`, not `scope`.
|
|
27
27
|
*/
|
|
@@ -30,7 +30,7 @@ export declare const PUBLIC_LIST_OPTION_KEYS: readonly ["where", "filter", "orde
|
|
|
30
30
|
* The keys of the client constructor options, {@link AbloOptions}. Only
|
|
31
31
|
* `schema` is required; every other key is optional.
|
|
32
32
|
*/
|
|
33
|
-
export declare const PUBLIC_ABLO_OPTION_KEYS: readonly ["schema", "apiKey", "authEndpoint", "persistence", "durableWrites", "commitOutbox", "commitOutboxScope", "transport", "debug", "logLevel", "authToken", "baseURL", "fetch", "defaultHeaders", "defaultQuery", "dangerouslyAllowBrowser"];
|
|
33
|
+
export declare const PUBLIC_ABLO_OPTION_KEYS: readonly ["schema", "apiKey", "authEndpoint", "persistence", "durableWrites", "commitOutbox", "commitOutboxScope", "transport", "debug", "logLevel", "logger", "authToken", "baseURL", "fetch", "defaultHeaders", "defaultQuery", "dangerouslyAllowBrowser", "collaborationEvents", "plugins", "wait"];
|
|
34
34
|
export type ModelVerb = (typeof PUBLIC_MODEL_VERBS)[number];
|
|
35
35
|
export type ListOptionKey = (typeof PUBLIC_LIST_OPTION_KEYS)[number];
|
|
36
36
|
export type AbloOptionKey = (typeof PUBLIC_ABLO_OPTION_KEYS)[number];
|
package/dist/surface.js
CHANGED
|
@@ -23,9 +23,7 @@
|
|
|
23
23
|
export const PUBLIC_MODEL_VERBS = [
|
|
24
24
|
'retrieve',
|
|
25
25
|
'list',
|
|
26
|
-
'
|
|
27
|
-
'getAll',
|
|
28
|
-
'getCount',
|
|
26
|
+
'local',
|
|
29
27
|
'create',
|
|
30
28
|
'update',
|
|
31
29
|
'delete',
|
|
@@ -36,7 +34,7 @@ export const PUBLIC_MODEL_VERBS = [
|
|
|
36
34
|
];
|
|
37
35
|
// ── the read/list query option surface ─────────────────────────────────────
|
|
38
36
|
/**
|
|
39
|
-
* The option keys accepted by `list
|
|
37
|
+
* The option keys accepted by `local.list` and `onChange`, matching the
|
|
40
38
|
* keys of {@link LocalReadOptions}. Note that the lifecycle filter is named
|
|
41
39
|
* `state`, not `scope`.
|
|
42
40
|
*/
|
|
@@ -64,10 +62,14 @@ export const PUBLIC_ABLO_OPTION_KEYS = [
|
|
|
64
62
|
'transport',
|
|
65
63
|
'debug',
|
|
66
64
|
'logLevel',
|
|
65
|
+
'logger',
|
|
67
66
|
'authToken',
|
|
68
67
|
'baseURL',
|
|
69
68
|
'fetch',
|
|
70
69
|
'defaultHeaders',
|
|
71
70
|
'defaultQuery',
|
|
72
71
|
'dangerouslyAllowBrowser',
|
|
72
|
+
'collaborationEvents',
|
|
73
|
+
'plugins',
|
|
74
|
+
'wait',
|
|
73
75
|
];
|