@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
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* queue, {@link Database} owns local persistence, {@link InstanceCache} holds the
|
|
11
11
|
* in-memory models, and {@link ModelRegistry} holds their metadata.
|
|
12
12
|
*/
|
|
13
|
-
import type { RecoveryClass } from './errorCodes.js';
|
|
13
|
+
import type { RecoveryClass } from './transaction/errorCodes.js';
|
|
14
14
|
import { ConnectionManager } from './sync/ConnectionManager.js';
|
|
15
15
|
import { SubscriptionManager } from './sync/SubscriptionManager.js';
|
|
16
16
|
import { type ParticipantScope } from './sync/participants.js';
|
|
@@ -18,22 +18,25 @@ import type { SyncClient } from './SyncClient.js';
|
|
|
18
18
|
import type { Database, BootstrapResult } from './Database.js';
|
|
19
19
|
import type { InstanceCache } from './InstanceCache.js';
|
|
20
20
|
import { ModelRegistry } from './ModelRegistry.js';
|
|
21
|
-
import { SyncWebSocket, type SyncDelta, type SyncGroupChangePayload, type GroupAddedPayload, type GroupRemovedPayload, type BootstrapHint, type BootstrapDataEvent, type
|
|
22
|
-
import { QueryProcessor } from './
|
|
21
|
+
import { SyncWebSocket, type SyncDelta, type SyncGroupChangePayload, type GroupAddedPayload, type GroupRemovedPayload, type BootstrapHint, type BootstrapDataEvent, type PresenceUpdate, type EventMap, type DefaultCollaborationEvents, type SyncWebSocketEventMap } from './sync/SyncWebSocket.js';
|
|
22
|
+
import { QueryProcessor } from './query/QueryProcessor.js';
|
|
23
23
|
import { Model } from './Model.js';
|
|
24
|
+
import type { RuntimeContext } from './RuntimeContext.js';
|
|
25
|
+
import type { AbloPlugin, AppliedChange } from './transaction/plugin.js';
|
|
24
26
|
import { ModelScope } from './InstanceCache.js';
|
|
25
|
-
import type { Schema } from './schema/schema.js';
|
|
26
|
-
import type { SyncStatus, LocalMutation } from './
|
|
27
|
-
import type { AuthCredentialSource } from './auth/credentialSource.js';
|
|
28
|
-
import type { ModelData } from './types/modelData.js';
|
|
27
|
+
import type { Schema } from './transaction/schema/schema.js';
|
|
28
|
+
import type { SyncStatus, LocalMutation } from './storeContract.js';
|
|
29
|
+
import type { AuthCredentialSource } from './transaction/auth/credentialSource.js';
|
|
30
|
+
import type { ModelData } from './transaction/types/modelData.js';
|
|
29
31
|
import type { EnrichmentPlanEntry, ForeignKeyIndexSpec } from './sync/syncPlan.js';
|
|
30
32
|
import { type CredentialRefresher } from './sync/credentialLifecycle.js';
|
|
31
33
|
import type { RehydrationStats } from './sync/bootstrapApply.js';
|
|
34
|
+
import type { ParticipantKind } from './transaction/types/participant.js';
|
|
32
35
|
/** Constructor type for Model subclasses (accepts abstract classes) */
|
|
33
36
|
export type ModelConstructor<T extends Model> = abstract new (...args: never[]) => T;
|
|
34
37
|
/** Concrete constructor type for instantiation */
|
|
35
38
|
export type ConcreteModelConstructor<T extends Model> = new (data?: any) => T;
|
|
36
|
-
export type { ModelData } from './types/modelData.js';
|
|
39
|
+
export type { ModelData } from './transaction/types/modelData.js';
|
|
37
40
|
/** Query result interface */
|
|
38
41
|
export interface QueryResult<T extends Model> {
|
|
39
42
|
data: T[];
|
|
@@ -47,6 +50,16 @@ export interface SyncedStoreConfig {
|
|
|
47
50
|
enableOffline?: boolean;
|
|
48
51
|
enableCache?: boolean;
|
|
49
52
|
enableTelemetry?: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Wire message types to surface as collaboration events, e.g.
|
|
55
|
+
* `['document:selection', 'document:cursor']`.
|
|
56
|
+
*
|
|
57
|
+
* The vocabulary belongs to the application, not the SDK — these name the
|
|
58
|
+
* application's own concepts, and a schema with no documents should never see
|
|
59
|
+
* them. Defaults to none, so an application opts in by naming the events it
|
|
60
|
+
* actually broadcasts.
|
|
61
|
+
*/
|
|
62
|
+
collaborationEvents?: readonly string[];
|
|
50
63
|
/**
|
|
51
64
|
* Declarative enrichment plan consumed by `enrichRelations`. Replaces
|
|
52
65
|
* the subclass override of `enrichRelations` for per-model parent
|
|
@@ -64,7 +77,7 @@ export interface SyncedStoreConfig {
|
|
|
64
77
|
*/
|
|
65
78
|
foreignKeyIndexes?: readonly ForeignKeyIndexSpec[];
|
|
66
79
|
}
|
|
67
|
-
export type { SyncStatus } from './
|
|
80
|
+
export type { SyncStatus } from './storeContract.js';
|
|
68
81
|
/** User context for initialization */
|
|
69
82
|
export interface UserContext {
|
|
70
83
|
userId: string;
|
|
@@ -75,7 +88,7 @@ export interface UserContext {
|
|
|
75
88
|
* sessions; 'agent' for headless bots / worker processes. The
|
|
76
89
|
* store routes this to SyncWebSocket so the WS URL carries
|
|
77
90
|
* `kind=agent` and the server applies capability-token auth. */
|
|
78
|
-
kind?:
|
|
91
|
+
kind?: ParticipantKind;
|
|
79
92
|
/** Restricted (`rk_`) API key for `kind: 'agent'` — the agent's
|
|
80
93
|
* bearer credential. Sent in the `ablo.bearer.<token>` WebSocket
|
|
81
94
|
* subprotocol, never in the URL. */
|
|
@@ -107,14 +120,20 @@ export interface SmartSyncOptions {
|
|
|
107
120
|
maxBatchSize?: number;
|
|
108
121
|
}
|
|
109
122
|
export type { RehydrationStats } from './sync/bootstrapApply.js';
|
|
110
|
-
/**
|
|
123
|
+
/**
|
|
124
|
+
* Bootstrap retry configuration.
|
|
125
|
+
*
|
|
126
|
+
* There is deliberately no overall timeout here. How long one attempt may run
|
|
127
|
+
* is not a policy this layer gets to invent — it is a property of the fetcher's
|
|
128
|
+
* watchdogs, read from `BootstrapFetcher.budgetMs`. A second number kept here
|
|
129
|
+
* would only be able to disagree with them, which is exactly what it used to do.
|
|
130
|
+
*/
|
|
111
131
|
export declare const BOOTSTRAP_CONFIG: {
|
|
112
|
-
readonly OVERALL_TIMEOUT_MS: 15000;
|
|
113
132
|
readonly MAX_RETRY_ATTEMPTS: 3;
|
|
114
133
|
readonly RETRY_DELAY_MS: 500;
|
|
115
134
|
};
|
|
116
135
|
export { ModelScope };
|
|
117
|
-
export type { SyncDelta, SyncGroupChangePayload, GroupAddedPayload, GroupRemovedPayload, BootstrapHint, BootstrapDataEvent,
|
|
136
|
+
export type { SyncDelta, SyncGroupChangePayload, GroupAddedPayload, GroupRemovedPayload, BootstrapHint, BootstrapDataEvent, PresenceUpdate, };
|
|
118
137
|
export { deriveSyncPlanFromSchema } from './sync/syncPlan.js';
|
|
119
138
|
/**
|
|
120
139
|
* The abstract base class that application-specific sync stores extend. It
|
|
@@ -133,18 +152,22 @@ export { deriveSyncPlanFromSchema } from './sync/syncPlan.js';
|
|
|
133
152
|
* the underlying SyncWebSocket without casts:
|
|
134
153
|
*
|
|
135
154
|
* @example
|
|
136
|
-
* interface
|
|
137
|
-
* '
|
|
138
|
-
* '
|
|
155
|
+
* interface EditorEvents {
|
|
156
|
+
* 'document:selection': [SelectionEvent];
|
|
157
|
+
* 'document:cursor': [CursorEvent];
|
|
139
158
|
* }
|
|
140
|
-
* class
|
|
141
|
-
*
|
|
142
|
-
* return this.syncWebSocket
|
|
159
|
+
* class EditorStore extends BaseSyncedStore<EditorEvents> {
|
|
160
|
+
* subscribeToCursor(handler: (e: CursorEvent) => void) {
|
|
161
|
+
* return this.syncWebSocket.subscribe('document:cursor', handler);
|
|
143
162
|
* }
|
|
144
163
|
* }
|
|
145
164
|
*/
|
|
146
165
|
export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaboration> = DefaultCollaborationEvents, TSchema extends Schema = Schema> {
|
|
147
166
|
syncStatus: SyncStatus;
|
|
167
|
+
/** The owning client's runtime; the module-global bridge when constructed directly. */
|
|
168
|
+
protected readonly runtime: RuntimeContext;
|
|
169
|
+
/** The installed plugins the delta pipeline dispatches stage handlers to. */
|
|
170
|
+
protected readonly stagePlugins: readonly AbloPlugin[];
|
|
148
171
|
protected readonly syncClient: SyncClient;
|
|
149
172
|
protected readonly database: Database;
|
|
150
173
|
protected readonly objectPool: InstanceCache;
|
|
@@ -155,15 +178,20 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
|
|
|
155
178
|
* `create(key, data)` factory and model self-healing.
|
|
156
179
|
*/
|
|
157
180
|
protected readonly schema?: TSchema;
|
|
158
|
-
|
|
181
|
+
/**
|
|
182
|
+
* The connection, owned by whoever built this store (ADR 0016 follow-up
|
|
183
|
+
* 3b): the host constructs it and hands it in, the store seeds its late
|
|
184
|
+
* values during `initialize()` and owns the lifecycle from there. One
|
|
185
|
+
* instance for the store's whole lifetime — reconnects replace the socket
|
|
186
|
+
* inside it, never the object.
|
|
187
|
+
*/
|
|
188
|
+
protected readonly syncWebSocket: SyncWebSocket<TCollaboration>;
|
|
159
189
|
/**
|
|
160
190
|
* Dynamic read interest (area-of-interest) over the connection's sync
|
|
161
|
-
* groups.
|
|
162
|
-
*
|
|
163
|
-
* to whichever instance is current, so callers (the React participant
|
|
164
|
-
* hook) never hold a stale reference. Null until `setupWebSocketSync`.
|
|
191
|
+
* groups. Constructed with the connection; the permanent base scopes are
|
|
192
|
+
* seeded in `setupWebSocketSync` once identity resolves.
|
|
165
193
|
*/
|
|
166
|
-
protected areaOfInterest: SubscriptionManager
|
|
194
|
+
protected readonly areaOfInterest: SubscriptionManager;
|
|
167
195
|
/** Sync groups whose current state has been backfilled into the pool
|
|
168
196
|
* (hydrate-on-enter). Cleared when the pool is reset on (re)bootstrap. */
|
|
169
197
|
private readonly hydratedGroups;
|
|
@@ -171,15 +199,32 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
|
|
|
171
199
|
* enters of the same scope so they share one fetch. */
|
|
172
200
|
private readonly hydratingGroups;
|
|
173
201
|
private _syncServerUrl?;
|
|
202
|
+
/** Application-declared collaboration event types; empty unless configured. */
|
|
203
|
+
private _collaborationEvents;
|
|
174
204
|
/**
|
|
175
205
|
* Public accessor for the underlying SyncWebSocket. Used by the
|
|
176
206
|
* factory in `createSyncEngine` to wire the default mutation
|
|
177
207
|
* executor — the executor needs the WS handle to send commit
|
|
178
208
|
* frames, and the factory can't reach `protected` state through
|
|
179
|
-
* normal typing.
|
|
180
|
-
* `initialize()`.
|
|
209
|
+
* normal typing.
|
|
181
210
|
*/
|
|
182
|
-
getSyncWebSocket(): SyncWebSocket<TCollaboration
|
|
211
|
+
getSyncWebSocket(): SyncWebSocket<TCollaboration>;
|
|
212
|
+
/**
|
|
213
|
+
* Subscribe to pushed frames — deltas, presence updates, claim grants and
|
|
214
|
+
* losses, connection changes, and this store's collaboration events.
|
|
215
|
+
* Durable by construction: the connection object exists for the store's
|
|
216
|
+
* whole lifetime (reconnects replace only the socket inside it), so a
|
|
217
|
+
* subscription made before the first connect starts delivering when the
|
|
218
|
+
* socket opens and keeps delivering across every reconnect. Returns the
|
|
219
|
+
* unsubscribe function.
|
|
220
|
+
*/
|
|
221
|
+
subscribe<K extends keyof SyncWebSocketEventMap<TCollaboration>>(event: K, handler: (...args: SyncWebSocketEventMap<TCollaboration>[K]) => void): () => void;
|
|
222
|
+
/**
|
|
223
|
+
* Send a collaboration event (an app-specific real-time message from this
|
|
224
|
+
* store's `TCollaboration` map). A no-op while the connection is down —
|
|
225
|
+
* presence-grade traffic is not queued.
|
|
226
|
+
*/
|
|
227
|
+
sendCollaborationEvent<K extends string & keyof TCollaboration>(messageType: K, payload: TCollaboration[K] extends [infer P] ? Omit<P & Record<string, unknown>, 'timestamp'> : never): void;
|
|
183
228
|
private scopeToGroups;
|
|
184
229
|
/**
|
|
185
230
|
* Bring a scope into view and subscribe to its sync groups. With
|
|
@@ -230,13 +275,15 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
|
|
|
230
275
|
protected pendingDeltas: SyncDelta[];
|
|
231
276
|
protected batchTimer: ReturnType<typeof setTimeout> | null;
|
|
232
277
|
protected syncPromise: Promise<void> | null;
|
|
233
|
-
/** Resume/ack cursor — delegates to the shared
|
|
234
|
-
*
|
|
278
|
+
/** Resume/ack cursor — delegates to the shared LogPosition (see
|
|
279
|
+
* logPosition.ts). Advances only after IDB persistence. */
|
|
235
280
|
protected get lastAckedId(): number;
|
|
236
|
-
/** Pool-applied cursor — delegates to the shared
|
|
281
|
+
/** Pool-applied cursor — delegates to the shared LogPosition. */
|
|
237
282
|
protected get highestProcessedSyncId(): number;
|
|
238
283
|
protected bootstrapDeltaQueue: SyncDelta[] | null;
|
|
239
284
|
protected activeBootstrapCount: number;
|
|
285
|
+
/** The live deadline for the bootstrap attempt in flight, if any. */
|
|
286
|
+
private bootstrapDeadlineTimer;
|
|
240
287
|
protected pendingDeletes: Set<string>;
|
|
241
288
|
protected modelTypesHydrated: Set<string>;
|
|
242
289
|
protected modelTypeHydrationInFlight: Map<string, Promise<void>>;
|
|
@@ -245,6 +292,15 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
|
|
|
245
292
|
database: Database;
|
|
246
293
|
objectPool: InstanceCache;
|
|
247
294
|
modelRegistry: ModelRegistry;
|
|
295
|
+
/**
|
|
296
|
+
* The connection, built by the host. When omitted, the store constructs
|
|
297
|
+
* its own from `url` and the collaboration-event config — the
|
|
298
|
+
* self-contained path subclasses and tests use. Either way the store
|
|
299
|
+
* owns the lifecycle from here: it seeds the late values (identity,
|
|
300
|
+
* read scope, resume cursor) during `initialize()` and releases the
|
|
301
|
+
* first connect.
|
|
302
|
+
*/
|
|
303
|
+
syncWebSocket?: SyncWebSocket<TCollaboration>;
|
|
248
304
|
/**
|
|
249
305
|
* Optional schema. When provided, {@link deriveSyncPlanFromSchema} walks
|
|
250
306
|
* the schema's models and relations to auto-populate foreign-key indexes
|
|
@@ -257,6 +313,14 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
|
|
|
257
313
|
url?: string;
|
|
258
314
|
/** Shared bearer credential source for every auth-aware transport. */
|
|
259
315
|
auth?: AuthCredentialSource;
|
|
316
|
+
/** The owning client's runtime. Defaults to the module-global bridge. */
|
|
317
|
+
runtime?: RuntimeContext;
|
|
318
|
+
/**
|
|
319
|
+
* The installed plugins, whose declared stage handlers the delta
|
|
320
|
+
* pipeline dispatches. Empty on direct construction — the store's own
|
|
321
|
+
* apply is then the whole pipeline.
|
|
322
|
+
*/
|
|
323
|
+
stagePlugins?: readonly AbloPlugin[];
|
|
260
324
|
}, config?: SyncedStoreConfig);
|
|
261
325
|
/**
|
|
262
326
|
* Register foreign-key indexes for constant-time lookups.
|
|
@@ -331,7 +395,7 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
|
|
|
331
395
|
subscribeSessionError(listener: (error: Error) => void): () => void;
|
|
332
396
|
/**
|
|
333
397
|
* Subscribe to per-mutation failure payloads. Forwarded from the
|
|
334
|
-
* underlying `SyncClient.
|
|
398
|
+
* underlying `SyncClient.mutationQueue` so consumers (toast layer,
|
|
335
399
|
* route-level reverted boundaries, telemetry) can react without
|
|
336
400
|
* reaching across the store. Returns an unsubscribe function.
|
|
337
401
|
*
|
|
@@ -342,10 +406,17 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
|
|
|
342
406
|
* same shape, same lifecycle.
|
|
343
407
|
*/
|
|
344
408
|
subscribeMutationFailure(listener: (payload: {
|
|
345
|
-
transaction: import('./transactions/
|
|
409
|
+
transaction: import('./transactions/mutations/MutationQueue.js').QueuedMutation;
|
|
346
410
|
error: Error;
|
|
347
411
|
permanent?: boolean;
|
|
348
412
|
}) => void): () => void;
|
|
413
|
+
/**
|
|
414
|
+
* Subscribe to commit round-trip latency. Forwarded from the underlying
|
|
415
|
+
* `SyncClient` for the same reason as `subscribeMutationFailure` — the
|
|
416
|
+
* React provider binds against this surface, so the engine's wiring stays
|
|
417
|
+
* private while the SDK keeps one hook to expose.
|
|
418
|
+
*/
|
|
419
|
+
subscribeCommitLatency(listener: (sample: import('./transactions/mutations/commitLatency.js').CommitLatencySample) => void): () => void;
|
|
349
420
|
/**
|
|
350
421
|
* Wait for the in-flight transaction for (modelName, modelId) to be
|
|
351
422
|
* confirmed by the server. See `SyncClient.waitForConfirmation` for the
|
|
@@ -354,8 +425,8 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
|
|
|
354
425
|
waitForConfirmation(modelName: string, modelId: string): Promise<void>;
|
|
355
426
|
/**
|
|
356
427
|
* Observe the LOCAL mutation stream for undo recording (see
|
|
357
|
-
* {@link import('./
|
|
358
|
-
*
|
|
428
|
+
* {@link import('./storeContract.js').LocalMutation}). Taps the
|
|
429
|
+
* MutationQueue's `transaction:created` event — fired once per local
|
|
359
430
|
* create/update/delete/archive with `previousData` already captured.
|
|
360
431
|
* Remote/collaborator deltas apply via `applyDeltaBatchToPool` and never
|
|
361
432
|
* emit here, so undo is naturally local-only (you can't undo a teammate).
|
|
@@ -366,8 +437,29 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
|
|
|
366
437
|
* Prevents the common issue where bootstrap hangs on startup.
|
|
367
438
|
*/
|
|
368
439
|
protected executeBootstrapWithTimeout<T>(bootstrapFn: () => Promise<T>, _context: UserContext, signal?: AbortSignal): Promise<T>;
|
|
369
|
-
/**
|
|
440
|
+
/**
|
|
441
|
+
* The outer deadline for one bootstrap attempt.
|
|
442
|
+
*
|
|
443
|
+
* The length is DERIVED from the fetcher's own watchdog budget, not chosen. A
|
|
444
|
+
* chosen number is what broke this: the previous fixed 15s was shorter than a
|
|
445
|
+
* single model chunk's allowance — 20s waiting for response headers plus 15s
|
|
446
|
+
* of stall grace — so on any workspace with one slow model the deadline fired
|
|
447
|
+
* before the watchdogs it was meant to backstop, and every attempt timed out
|
|
448
|
+
* by construction. The watchdogs below are progress-based and already
|
|
449
|
+
* guarantee termination; this deadline exists only for a hang somewhere other
|
|
450
|
+
* than the network, so it must sit above them, and it can only do that
|
|
451
|
+
* reliably by asking them how long they take.
|
|
452
|
+
*
|
|
453
|
+
* Reaching it aborts the work in flight. `Promise.race` merely stops waiting:
|
|
454
|
+
* without the abort the losing bootstrap keeps running, keeps its sockets, and
|
|
455
|
+
* races the retry that replaced it — which is how one page load turned into
|
|
456
|
+
* dozens of overlapping requests.
|
|
457
|
+
*/
|
|
370
458
|
protected createBootstrapTimeout(attempt: number): Promise<never>;
|
|
459
|
+
/** Disarm the deadline once its attempt has settled. Load-bearing now that
|
|
460
|
+
* firing it aborts real work: a leftover timer would cancel a later,
|
|
461
|
+
* unrelated bootstrap. */
|
|
462
|
+
private clearBootstrapDeadline;
|
|
371
463
|
/** Reset bootstrap-related state for a clean retry */
|
|
372
464
|
protected resetBootstrapState(): void;
|
|
373
465
|
/** Perform reconnect: bootstrap + WS reconnect. Returns outcome for state machine. */
|
|
@@ -495,8 +587,15 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
|
|
|
495
587
|
* driven session" vs "is this a server agent". The latter never has
|
|
496
588
|
* a tab to lose focus or a network adapter to wake up.
|
|
497
589
|
*/
|
|
498
|
-
protected createConnectionManager(kind?:
|
|
499
|
-
/**
|
|
590
|
+
protected createConnectionManager(kind?: ParticipantKind): ConnectionManager | null;
|
|
591
|
+
/**
|
|
592
|
+
* Disconnect and clean up all resources. Terminal: this means "the client
|
|
593
|
+
* is finished", not "close and reopen later" — the connection object stays
|
|
594
|
+
* assigned but closed, the event wiring is torn down, and nothing
|
|
595
|
+
* re-initializes a disconnected store. (Mid-session closes during recovery
|
|
596
|
+
* go through the connection FSM's `onDisconnectWebSocket`, which closes
|
|
597
|
+
* the transport without touching the store.)
|
|
598
|
+
*/
|
|
500
599
|
disconnect(): Promise<void>;
|
|
501
600
|
/**
|
|
502
601
|
* Destroy every IndexedDB database owned by the sync engine.
|
|
@@ -535,12 +634,41 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
|
|
|
535
634
|
* mutation attempt surface a clearer error.
|
|
536
635
|
*/
|
|
537
636
|
protected waitForWebSocketConnected(timeoutMs: number): Promise<boolean>;
|
|
637
|
+
/**
|
|
638
|
+
* Seed the connection's late values and open it. The socket itself exists
|
|
639
|
+
* from construction; what identity resolution supplies — the participant
|
|
640
|
+
* kind, the credential, the read scope, and the resume cursor — is seeded
|
|
641
|
+
* here, and only then is the held first connect released. A retried
|
|
642
|
+
* `initialize()` after a failed `ready()` re-runs this against the same
|
|
643
|
+
* connection object: the reconnect counter is reset for a clean slate,
|
|
644
|
+
* while the session-error latch deliberately survives (only the
|
|
645
|
+
* credential-expiry recovery clears it).
|
|
646
|
+
*/
|
|
538
647
|
protected setupWebSocketSync(context: UserContext, lastSyncId: number): void;
|
|
648
|
+
/**
|
|
649
|
+
* Wire the store's handlers onto the connection. Runs once, at
|
|
650
|
+
* construction — the connection object is stable for the store's
|
|
651
|
+
* lifetime, so the wiring is too.
|
|
652
|
+
*/
|
|
653
|
+
protected wireSocketEvents(): void;
|
|
654
|
+
/**
|
|
655
|
+
* Build and start the connection FSM. The `onConnectionEvent` hook is the
|
|
656
|
+
* bridge — WS events fire the hook, the hook forwards into the FSM. Called
|
|
657
|
+
* from `setupWebSocketSync` because the FSM's shape depends on the resolved
|
|
658
|
+
* participant kind (agents get none — see {@link createConnectionManager}).
|
|
659
|
+
*/
|
|
660
|
+
private startConnectionManager;
|
|
539
661
|
/** Memoized pipeline context — `enqueueDelta` runs once per delta, so the
|
|
540
662
|
* accessor object is built once and reused (the get/set accessors always
|
|
541
663
|
* read the live host fields). */
|
|
542
664
|
private _deltaPipelineContext;
|
|
543
665
|
private get deltaPipelineContext();
|
|
666
|
+
/**
|
|
667
|
+
* Lands persisted changes in the in-memory pool, with this store's
|
|
668
|
+
* relation enrichment bound. The one apply path: the pipeline's bridge
|
|
669
|
+
* (no plugins installed) and the `humans()` apply handler both call it.
|
|
670
|
+
*/
|
|
671
|
+
applyChangesToPool(changes: readonly AppliedChange[]): void;
|
|
544
672
|
/** Get fields that represent meaningful state for deduplication. Override for model-specific fields. */
|
|
545
673
|
protected getStateFields(_modelName: string): string[];
|
|
546
674
|
/** Deduplicate deltas to the same entity — keep meaningful state transitions only */
|
|
@@ -590,7 +718,7 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
|
|
|
590
718
|
* schema build time) to find children. The previous implementation did
|
|
591
719
|
* `getByType(ctor).filter(e => e.toJSON()[foreignKey] === parentId)` —
|
|
592
720
|
* a full pool scan per child model + a `toJSON()` allocation per
|
|
593
|
-
* candidate. For a
|
|
721
|
+
* candidate. For a report delete with 10K blocks in the pool, that was
|
|
594
722
|
* 10K toJSON allocations per cascade level. The FK-indexed lookup
|
|
595
723
|
* skips both the scan AND the allocation.
|
|
596
724
|
*/
|
|
@@ -605,7 +733,7 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
|
|
|
605
733
|
* Save a model (create or update).
|
|
606
734
|
*
|
|
607
735
|
* Accepts any entity shape with `{ id: string }` so consumers can pass the
|
|
608
|
-
* Zod-inferred model types from `
|
|
736
|
+
* Zod-inferred model types from `Model<Schema, K>` without knowing
|
|
609
737
|
* about the internal `Model` base class. At runtime, every entity reaching
|
|
610
738
|
* this method came through the object pool (via `store.create`, a query
|
|
611
739
|
* accessor, or an optimistic insert) and IS a `Model` instance — the one
|
|
@@ -618,7 +746,7 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
|
|
|
618
746
|
}>(entity: T, options?: {
|
|
619
747
|
skipValidation?: boolean;
|
|
620
748
|
}): Promise<void>;
|
|
621
|
-
/** Save with an atomic server mutation (e.g.,
|
|
749
|
+
/** Save with an atomic server mutation (e.g., createSectionWithBlocks) */
|
|
622
750
|
saveWithAtomicMutation(model: Model, mutation: (gql: unknown) => Promise<unknown>): Promise<void>;
|
|
623
751
|
/** Delete a model. Accepts schema-inferred entity shapes (see `save`). */
|
|
624
752
|
delete<T extends {
|
|
@@ -648,17 +776,17 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
|
|
|
648
776
|
* Create a model instance locally, typed via the schema.
|
|
649
777
|
*
|
|
650
778
|
* ```ts
|
|
651
|
-
* const
|
|
652
|
-
* //
|
|
779
|
+
* const ledger = store.create('ledgers', { name, reportId });
|
|
780
|
+
* // ledger: Ledger | null — no cast needed
|
|
653
781
|
* ```
|
|
654
782
|
*
|
|
655
783
|
* The `typename` arg is the schema key (camelCase plural, e.g.
|
|
656
|
-
* `'
|
|
657
|
-
* `
|
|
784
|
+
* `'ledgers'`); the returned instance has the
|
|
785
|
+
* `Model<Schema, K>` shape including computeds + relation accessors.
|
|
658
786
|
* Wraps `pool.create(...)` — the underlying runtime is unchanged, just
|
|
659
787
|
* type-narrowed.
|
|
660
788
|
*/
|
|
661
|
-
create<K extends keyof TSchema['models'] & string>(typename: K, data: Record<string, unknown>): import('./schema/schema.js').
|
|
789
|
+
create<K extends keyof TSchema['models'] & string>(typename: K, data: Record<string, unknown>): import('./transaction/schema/schema.js').Model<TSchema, K> | null;
|
|
662
790
|
/**
|
|
663
791
|
* Query entry point for callers that hold a {@link Model} constructor and an
|
|
664
792
|
* options object. It filters, orders, and paginates the matching models from
|
|
@@ -676,7 +804,7 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
|
|
|
676
804
|
/**
|
|
677
805
|
* Get all models of a type. Returns Model[] honestly — callers that need
|
|
678
806
|
* narrow types should use `useAblo((ablo) => ablo.<model>.list(...))`
|
|
679
|
-
* which does proper inference via `
|
|
807
|
+
* which does proper inference via `Model<S, K>`.
|
|
680
808
|
*/
|
|
681
809
|
allModelsOfType(modelClass: ModelConstructor<Model>, scope?: ModelScope): Model[];
|
|
682
810
|
/** Error handler for fire-and-forget flushPendingDeltas calls */
|
|
@@ -688,7 +816,7 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
|
|
|
688
816
|
/** Handle bootstrap_data event. Override in subclass. */
|
|
689
817
|
protected handleBootstrapData(_data: BootstrapDataEvent): void;
|
|
690
818
|
/** Handle presence_update event. Override in subclass. */
|
|
691
|
-
protected handlePresenceUpdate(_data:
|
|
819
|
+
protected handlePresenceUpdate(_data: PresenceUpdate): void;
|
|
692
820
|
protected incrementPendingChanges(): void;
|
|
693
821
|
protected decrementPendingChanges(): void;
|
|
694
822
|
protected updateSyncStatus(updates: Partial<SyncStatus>): void;
|