@abloatai/ablo 0.36.0 → 0.37.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +2 -2
- package/CHANGELOG.md +55 -2014
- package/NOTICE +2 -2
- package/README.md +45 -63
- package/assets/banner.png +0 -0
- package/dist/auth.d.ts +2 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +2 -0
- package/dist/auth.js.map +1 -0
- package/dist/client.d.ts +3 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +3 -0
- package/dist/client.js.map +1 -0
- package/dist/coordination.d.ts +2 -0
- package/dist/coordination.d.ts.map +1 -0
- package/dist/coordination.js +2 -0
- package/dist/coordination.js.map +1 -0
- package/dist/index.d.ts +3 -114
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -163
- package/dist/index.js.map +1 -0
- package/dist/react.d.ts +4 -0
- package/dist/react.d.ts.map +1 -0
- package/dist/react.js +3 -0
- package/dist/react.js.map +1 -0
- package/dist/schema.d.ts +2 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +2 -0
- package/dist/schema.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +2 -0
- package/dist/server.js.map +1 -0
- package/dist/source-conformance.d.ts +2 -0
- package/dist/source-conformance.d.ts.map +1 -0
- package/dist/source-conformance.js +2 -0
- package/dist/source-conformance.js.map +1 -0
- package/dist/source-drizzle.d.ts +2 -0
- package/dist/source-drizzle.d.ts.map +1 -0
- package/dist/source-drizzle.js +2 -0
- package/dist/source-drizzle.js.map +1 -0
- package/dist/source-kysely.d.ts +2 -0
- package/dist/source-kysely.d.ts.map +1 -0
- package/dist/source-kysely.js +2 -0
- package/dist/source-kysely.js.map +1 -0
- package/dist/source-next.d.ts +2 -0
- package/dist/source-next.d.ts.map +1 -0
- package/dist/source-next.js +2 -0
- package/dist/source-next.js.map +1 -0
- package/dist/source.d.ts +2 -0
- package/dist/source.d.ts.map +1 -0
- package/dist/source.js +2 -0
- package/dist/source.js.map +1 -0
- package/dist/wire.d.ts +2 -0
- package/dist/wire.d.ts.map +1 -0
- package/dist/wire.js +2 -0
- package/dist/wire.js.map +1 -0
- package/docs/agents.md +1 -1
- package/docs/api-keys.md +7 -6
- package/docs/api.md +10 -10
- package/docs/client-behavior.md +5 -5
- package/docs/coordination.md +52 -62
- package/docs/data-sources.md +1 -1
- package/docs/examples/agent-human.md +4 -4
- package/docs/examples/ai-sdk-tool.md +1 -1
- package/docs/examples/existing-python-backend.md +15 -4
- package/docs/examples/nextjs.md +27 -6
- package/docs/examples/server-agent.md +2 -2
- package/docs/how-it-works.md +4 -4
- package/docs/identity.md +2 -1
- package/docs/integration-guide.md +24 -13
- package/docs/internal/README.md +18 -0
- package/docs/internal/agent-fleet-coordination-design.md +171 -0
- package/docs/internal/agent-orchestration.md +58 -0
- package/docs/internal/commit-identifiers.md +91 -0
- package/docs/internal/concurrency-open-decisions.md +37 -0
- package/docs/internal/data-source-reverse-channel.md +150 -0
- package/docs/internal/per-field-conflict-detection.md +165 -0
- package/docs/internal/postgres-replication.md +64 -0
- package/docs/internal/serializable-schema.md +119 -0
- package/docs/internal/structure.md +32 -0
- package/docs/mcp.md +2 -2
- package/docs/migration.md +3 -3
- package/docs/quickstart.md +2 -2
- package/docs/react.md +5 -5
- package/docs/schema-contract.md +3 -3
- package/docs/sessions.md +91 -37
- package/examples/README.md +2 -2
- package/examples/data-source/README.md +1 -1
- package/examples/data-source/ablo-driver.ts +1 -1
- package/examples/data-source/customer-server.ts +1 -1
- package/examples/data-source/run.ts +1 -1
- package/examples/data-source/schema.ts +1 -1
- package/examples/quickstart.ts +2 -2
- package/llms.txt +8 -8
- package/package.json +63 -166
- package/bin/ablo.cjs +0 -39
- package/dist/BaseSyncedStore.d.ts +0 -843
- package/dist/BaseSyncedStore.js +0 -1971
- package/dist/Database.d.ts +0 -323
- package/dist/Database.js +0 -1502
- package/dist/InstanceCache.d.ts +0 -237
- package/dist/InstanceCache.js +0 -1166
- package/dist/LazyReferenceCollection.d.ts +0 -177
- package/dist/LazyReferenceCollection.js +0 -461
- package/dist/Model.d.ts +0 -454
- package/dist/Model.js +0 -919
- package/dist/ModelRegistry.d.ts +0 -225
- package/dist/ModelRegistry.js +0 -539
- package/dist/NetworkMonitor.d.ts +0 -28
- package/dist/NetworkMonitor.js +0 -79
- package/dist/RuntimeContext.d.ts +0 -52
- package/dist/RuntimeContext.js +0 -80
- package/dist/SyncClient.d.ts +0 -541
- package/dist/SyncClient.js +0 -2202
- package/dist/adapters/alwaysOnline.d.ts +0 -14
- package/dist/adapters/alwaysOnline.js +0 -17
- package/dist/adapters/inMemoryStorage.d.ts +0 -31
- package/dist/adapters/inMemoryStorage.js +0 -110
- package/dist/ai-sdk/coordinatedTool.d.ts +0 -120
- package/dist/ai-sdk/coordinatedTool.js +0 -134
- package/dist/ai-sdk/coordinationContext.d.ts +0 -46
- package/dist/ai-sdk/coordinationContext.js +0 -106
- package/dist/ai-sdk/index.d.ts +0 -121
- package/dist/ai-sdk/index.js +0 -121
- package/dist/ai-sdk/wrap.d.ts +0 -65
- package/dist/ai-sdk/wrap.js +0 -39
- package/dist/auth/index.d.ts +0 -1
- package/dist/auth/index.js +0 -8
- package/dist/batching/index.d.ts +0 -55
- package/dist/batching/index.js +0 -147
- package/dist/client/Ablo.d.ts +0 -231
- package/dist/client/Ablo.js +0 -160
- package/dist/client/abloClient.d.ts +0 -309
- package/dist/client/abloClient.js +0 -13
- package/dist/client/clientPrelude.d.ts +0 -52
- package/dist/client/clientPrelude.js +0 -60
- package/dist/client/consoleLogger.d.ts +0 -35
- package/dist/client/consoleLogger.js +0 -44
- package/dist/client/coreClient.d.ts +0 -60
- package/dist/client/coreClient.js +0 -118
- package/dist/client/createInternalComponents.d.ts +0 -50
- package/dist/client/createInternalComponents.js +0 -98
- package/dist/client/createModelProxy.d.ts +0 -248
- package/dist/client/createModelProxy.js +0 -884
- package/dist/client/humans.d.ts +0 -69
- package/dist/client/humans.js +0 -78
- package/dist/client/modelRegistration.d.ts +0 -10
- package/dist/client/modelRegistration.js +0 -312
- package/dist/client/options.d.ts +0 -461
- package/dist/client/options.js +0 -7
- package/dist/client/reactiveEngine.d.ts +0 -53
- package/dist/client/reactiveEngine.js +0 -688
- package/dist/client/resourceTypes.d.ts +0 -12
- package/dist/client/resourceTypes.js +0 -10
- package/dist/client/schemaConfig.d.ts +0 -44
- package/dist/client/schemaConfig.js +0 -185
- package/dist/client/storeCluster.d.ts +0 -47
- package/dist/client/storeCluster.js +0 -118
- package/dist/client/storeLifecycle.d.ts +0 -61
- package/dist/client/storeLifecycle.js +0 -231
- package/dist/client/validateAbloOptions.d.ts +0 -42
- package/dist/client/validateAbloOptions.js +0 -43
- package/dist/client/wsMutationExecutor.d.ts +0 -27
- package/dist/client/wsMutationExecutor.js +0 -72
- package/dist/context.d.ts +0 -42
- package/dist/context.js +0 -81
- package/dist/coordination/ClaimLog.d.ts +0 -26
- package/dist/coordination/ClaimLog.js +0 -32
- package/dist/coordination/index.d.ts +0 -1
- package/dist/coordination/index.js +0 -8
- package/dist/core/index.d.ts +0 -33
- package/dist/core/index.js +0 -48
- package/dist/docs/catalog.d.ts +0 -72
- package/dist/docs/catalog.js +0 -230
- package/dist/docs/index.d.ts +0 -10
- package/dist/docs/index.js +0 -10
- package/dist/environment.d.ts +0 -1
- package/dist/environment.js +0 -8
- package/dist/interfaces/index.d.ts +0 -311
- package/dist/interfaces/index.js +0 -9
- package/dist/keys/index.d.ts +0 -1
- package/dist/keys/index.js +0 -8
- package/dist/mutators/RecordingMutation.d.ts +0 -36
- package/dist/mutators/RecordingMutation.js +0 -182
- package/dist/mutators/Transaction.d.ts +0 -40
- package/dist/mutators/Transaction.js +0 -58
- package/dist/mutators/UndoManager.d.ts +0 -258
- package/dist/mutators/UndoManager.js +0 -658
- package/dist/mutators/defineMutators.d.ts +0 -60
- package/dist/mutators/defineMutators.js +0 -18
- package/dist/mutators/inverseOp.d.ts +0 -126
- package/dist/mutators/inverseOp.js +0 -71
- package/dist/mutators/mutateActions.d.ts +0 -45
- package/dist/mutators/mutateActions.js +0 -105
- package/dist/mutators/readerActions.d.ts +0 -33
- package/dist/mutators/readerActions.js +0 -57
- package/dist/mutators/undoApply.d.ts +0 -51
- package/dist/mutators/undoApply.js +0 -117
- package/dist/policy/index.d.ts +0 -21
- package/dist/policy/index.js +0 -20
- package/dist/query/QueryProcessor.d.ts +0 -75
- package/dist/query/QueryProcessor.js +0 -255
- package/dist/query/client.d.ts +0 -64
- package/dist/query/client.js +0 -138
- package/dist/query/types.d.ts +0 -85
- package/dist/query/types.js +0 -16
- package/dist/react/AbloProvider.d.ts +0 -242
- package/dist/react/AbloProvider.js +0 -458
- package/dist/react/ClientSideSuspense.d.ts +0 -36
- package/dist/react/ClientSideSuspense.js +0 -17
- package/dist/react/DefaultFallback.d.ts +0 -24
- package/dist/react/DefaultFallback.js +0 -43
- package/dist/react/context.d.ts +0 -55
- package/dist/react/context.js +0 -29
- package/dist/react/createAbloReact.d.ts +0 -56
- package/dist/react/createAbloReact.js +0 -51
- package/dist/react/index.d.ts +0 -62
- package/dist/react/index.js +0 -69
- package/dist/react/internalContext.d.ts +0 -33
- package/dist/react/internalContext.js +0 -3
- package/dist/react/useAblo.d.ts +0 -82
- package/dist/react/useAblo.js +0 -120
- package/dist/react/useCurrentUserId.d.ts +0 -22
- package/dist/react/useCurrentUserId.js +0 -34
- package/dist/react/useErrorListener.d.ts +0 -20
- package/dist/react/useErrorListener.js +0 -38
- package/dist/react/useMutationFailureListener.d.ts +0 -26
- package/dist/react/useMutationFailureListener.js +0 -38
- package/dist/react/useMutators.d.ts +0 -56
- package/dist/react/useMutators.js +0 -84
- package/dist/react/useReactive.d.ts +0 -35
- package/dist/react/useReactive.js +0 -123
- package/dist/react/useSyncStatus.d.ts +0 -59
- package/dist/react/useSyncStatus.js +0 -76
- package/dist/react/useUndoScope.d.ts +0 -34
- package/dist/react/useUndoScope.js +0 -81
- package/dist/schema/coordination.d.ts +0 -112
- package/dist/schema/coordination.js +0 -133
- package/dist/schema/ddl.d.ts +0 -97
- package/dist/schema/ddl.js +0 -491
- package/dist/schema/ddlLock.d.ts +0 -35
- package/dist/schema/ddlLock.js +0 -46
- package/dist/schema/diff.d.ts +0 -225
- package/dist/schema/diff.js +0 -289
- package/dist/schema/generate.d.ts +0 -19
- package/dist/schema/generate.js +0 -86
- package/dist/schema/index.d.ts +0 -42
- package/dist/schema/index.js +0 -80
- package/dist/schema/queries.d.ts +0 -201
- package/dist/schema/queries.js +0 -144
- package/dist/schema/select.d.ts +0 -40
- package/dist/schema/select.js +0 -90
- package/dist/schema/serialize.d.ts +0 -115
- package/dist/schema/serialize.js +0 -265
- package/dist/schema/sugar.d.ts +0 -109
- package/dist/schema/sugar.js +0 -83
- package/dist/schema/syncDeltaRow.d.ts +0 -6
- package/dist/schema/syncDeltaRow.js +0 -6
- package/dist/server/adapter.d.ts +0 -173
- package/dist/server/adapter.js +0 -18
- package/dist/server/commit.d.ts +0 -107
- package/dist/server/commit.js +0 -1
- package/dist/server/index.d.ts +0 -14
- package/dist/server/index.js +0 -2
- package/dist/server/readConfig.d.ts +0 -80
- package/dist/server/readConfig.js +0 -8
- package/dist/server/storageMode.d.ts +0 -23
- package/dist/server/storageMode.js +0 -17
- package/dist/source/adapter.d.ts +0 -83
- package/dist/source/adapter.js +0 -24
- package/dist/source/adapters/drizzle.d.ts +0 -48
- package/dist/source/adapters/drizzle.js +0 -219
- package/dist/source/adapters/kysely.d.ts +0 -42
- package/dist/source/adapters/kysely.js +0 -205
- package/dist/source/adapters/kyselyMutationCore.d.ts +0 -76
- package/dist/source/adapters/kyselyMutationCore.js +0 -125
- package/dist/source/adapters/memory.d.ts +0 -13
- package/dist/source/adapters/memory.js +0 -130
- package/dist/source/adapters/prisma.d.ts +0 -63
- package/dist/source/adapters/prisma.js +0 -202
- package/dist/source/conformance.d.ts +0 -37
- package/dist/source/conformance.js +0 -215
- package/dist/source/connector.d.ts +0 -95
- package/dist/source/connector.js +0 -266
- package/dist/source/connectorProtocol.d.ts +0 -154
- package/dist/source/connectorProtocol.js +0 -163
- package/dist/source/contract.d.ts +0 -195
- package/dist/source/contract.js +0 -164
- package/dist/source/factory.d.ts +0 -92
- package/dist/source/factory.js +0 -286
- package/dist/source/idempotency.d.ts +0 -61
- package/dist/source/idempotency.js +0 -144
- package/dist/source/index.d.ts +0 -23
- package/dist/source/index.js +0 -30
- package/dist/source/migrations.d.ts +0 -21
- package/dist/source/migrations.js +0 -103
- package/dist/source/next.d.ts +0 -32
- package/dist/source/next.js +0 -25
- package/dist/source/pushQueue.d.ts +0 -134
- package/dist/source/pushQueue.js +0 -256
- package/dist/source/signing.d.ts +0 -92
- package/dist/source/signing.js +0 -162
- package/dist/source/types.d.ts +0 -401
- package/dist/source/types.js +0 -59
- package/dist/storeContract.d.ts +0 -145
- package/dist/storeContract.js +0 -12
- package/dist/stores/DatabaseManager.d.ts +0 -107
- package/dist/stores/DatabaseManager.js +0 -388
- package/dist/stores/ObjectStore.d.ts +0 -115
- package/dist/stores/ObjectStore.js +0 -393
- package/dist/stores/ObjectStoreContract.d.ts +0 -38
- package/dist/stores/ObjectStoreContract.js +0 -1
- package/dist/stores/StoreManager.d.ts +0 -114
- package/dist/stores/StoreManager.js +0 -304
- package/dist/stores/SyncActionStore.d.ts +0 -99
- package/dist/stores/SyncActionStore.js +0 -506
- package/dist/stores/openIDBWithTimeout.d.ts +0 -65
- package/dist/stores/openIDBWithTimeout.js +0 -153
- package/dist/stores/syncAction.d.ts +0 -26
- package/dist/stores/syncAction.js +0 -16
- package/dist/surface.d.ts +0 -36
- package/dist/surface.js +0 -75
- package/dist/sync/BootstrapFetcher.d.ts +0 -284
- package/dist/sync/BootstrapFetcher.js +0 -964
- package/dist/sync/ConnectionManager.d.ts +0 -8
- package/dist/sync/ConnectionManager.js +0 -8
- package/dist/sync/OnDemandLoader.d.ts +0 -231
- package/dist/sync/OnDemandLoader.js +0 -743
- package/dist/sync/SubscriptionManager.d.ts +0 -159
- package/dist/sync/SubscriptionManager.js +0 -243
- package/dist/sync/SyncWebSocket.d.ts +0 -173
- package/dist/sync/SyncWebSocket.js +0 -438
- package/dist/sync/awaitClaimGrant.d.ts +0 -6
- package/dist/sync/awaitClaimGrant.js +0 -6
- package/dist/sync/bootstrapApply.d.ts +0 -73
- package/dist/sync/bootstrapApply.js +0 -73
- package/dist/sync/commitFrames.d.ts +0 -8
- package/dist/sync/commitFrames.js +0 -8
- package/dist/sync/contextPorts.d.ts +0 -18
- package/dist/sync/contextPorts.js +0 -31
- package/dist/sync/createClaimStream.d.ts +0 -7
- package/dist/sync/createClaimStream.js +0 -7
- package/dist/sync/createPresenceStream.d.ts +0 -69
- package/dist/sync/createPresenceStream.js +0 -200
- package/dist/sync/createSnapshot.d.ts +0 -29
- package/dist/sync/createSnapshot.js +0 -118
- package/dist/sync/credentialLifecycle.d.ts +0 -7
- package/dist/sync/credentialLifecycle.js +0 -7
- package/dist/sync/deltaPipeline.d.ts +0 -114
- package/dist/sync/deltaPipeline.js +0 -278
- package/dist/sync/groupChange.d.ts +0 -116
- package/dist/sync/groupChange.js +0 -244
- package/dist/sync/participants.d.ts +0 -132
- package/dist/sync/participants.js +0 -346
- package/dist/sync/persistedPrefix.d.ts +0 -12
- package/dist/sync/persistedPrefix.js +0 -22
- package/dist/sync/schemaDrift.d.ts +0 -55
- package/dist/sync/schemaDrift.js +0 -53
- package/dist/sync/schemas.d.ts +0 -71
- package/dist/sync/schemas.js +0 -94
- package/dist/sync/syncCursor.d.ts +0 -40
- package/dist/sync/syncCursor.js +0 -55
- package/dist/sync/syncPlan.d.ts +0 -54
- package/dist/sync/syncPlan.js +0 -50
- package/dist/sync/wsFrameHandlers.d.ts +0 -8
- package/dist/sync/wsFrameHandlers.js +0 -8
- package/dist/syncLog/contract.d.ts +0 -20
- package/dist/syncLog/contract.js +0 -19
- package/dist/syncLog/index.d.ts +0 -1
- package/dist/syncLog/index.js +0 -1
- package/dist/transaction/ablo.d.ts +0 -88
- package/dist/transaction/ablo.js +0 -33
- package/dist/transaction/auth/apiKey.d.ts +0 -152
- package/dist/transaction/auth/apiKey.js +0 -419
- package/dist/transaction/auth/bootstrapScope.d.ts +0 -15
- package/dist/transaction/auth/bootstrapScope.js +0 -1
- package/dist/transaction/auth/capability.d.ts +0 -212
- package/dist/transaction/auth/capability.js +0 -224
- package/dist/transaction/auth/credentialEndpoint.d.ts +0 -61
- package/dist/transaction/auth/credentialEndpoint.js +0 -86
- package/dist/transaction/auth/credentialPolicy.d.ts +0 -148
- package/dist/transaction/auth/credentialPolicy.js +0 -125
- package/dist/transaction/auth/credentialSource.d.ts +0 -30
- package/dist/transaction/auth/credentialSource.js +0 -55
- package/dist/transaction/auth/hostedEndpoints.d.ts +0 -21
- package/dist/transaction/auth/hostedEndpoints.js +0 -21
- package/dist/transaction/auth/identity.d.ts +0 -55
- package/dist/transaction/auth/identity.js +0 -210
- package/dist/transaction/auth/index.d.ts +0 -162
- package/dist/transaction/auth/index.js +0 -304
- package/dist/transaction/auth/schemas.d.ts +0 -59
- package/dist/transaction/auth/schemas.js +0 -85
- package/dist/transaction/auth/sessionMint.d.ts +0 -28
- package/dist/transaction/auth/sessionMint.js +0 -85
- package/dist/transaction/coordination/awaitClaimGrant.d.ts +0 -56
- package/dist/transaction/coordination/awaitClaimGrant.js +0 -124
- package/dist/transaction/coordination/claimHeartbeatLoop.d.ts +0 -84
- package/dist/transaction/coordination/claimHeartbeatLoop.js +0 -108
- package/dist/transaction/coordination/claimMeta.d.ts +0 -49
- package/dist/transaction/coordination/claimMeta.js +0 -52
- package/dist/transaction/coordination/createClaimStream.d.ts +0 -64
- package/dist/transaction/coordination/createClaimStream.js +0 -475
- package/dist/transaction/coordination/events.d.ts +0 -74
- package/dist/transaction/coordination/events.js +0 -7
- package/dist/transaction/coordination/index.d.ts +0 -19
- package/dist/transaction/coordination/index.js +0 -45
- package/dist/transaction/coordination/locator.d.ts +0 -104
- package/dist/transaction/coordination/locator.js +0 -102
- package/dist/transaction/coordination/schema.d.ts +0 -1536
- package/dist/transaction/coordination/schema.js +0 -1177
- package/dist/transaction/coordination/targetConflict.d.ts +0 -2
- package/dist/transaction/coordination/targetConflict.js +0 -107
- package/dist/transaction/coordination/trace.d.ts +0 -78
- package/dist/transaction/coordination/trace.js +0 -138
- package/dist/transaction/durableWrites.d.ts +0 -62
- package/dist/transaction/durableWrites.js +0 -71
- package/dist/transaction/environment.d.ts +0 -105
- package/dist/transaction/environment.js +0 -108
- package/dist/transaction/errorCodes.d.ts +0 -403
- package/dist/transaction/errorCodes.js +0 -484
- package/dist/transaction/errors.d.ts +0 -428
- package/dist/transaction/errors.js +0 -686
- package/dist/transaction/footprint.d.ts +0 -111
- package/dist/transaction/footprint.js +0 -0
- package/dist/transaction/index.d.ts +0 -20
- package/dist/transaction/index.js +0 -20
- package/dist/transaction/keys/index.d.ts +0 -87
- package/dist/transaction/keys/index.js +0 -207
- package/dist/transaction/log/syncDeltaRow.d.ts +0 -158
- package/dist/transaction/log/syncDeltaRow.js +0 -95
- package/dist/transaction/logPosition.d.ts +0 -97
- package/dist/transaction/logPosition.js +0 -125
- package/dist/transaction/logger.d.ts +0 -16
- package/dist/transaction/logger.js +0 -7
- package/dist/transaction/observability.d.ts +0 -53
- package/dist/transaction/observability.js +0 -19
- package/dist/transaction/persistence.d.ts +0 -12
- package/dist/transaction/persistence.js +0 -11
- package/dist/transaction/plugin.d.ts +0 -285
- package/dist/transaction/plugin.js +0 -106
- package/dist/transaction/policy/types.d.ts +0 -217
- package/dist/transaction/policy/types.js +0 -126
- package/dist/transaction/resources/functionalUpdate.d.ts +0 -79
- package/dist/transaction/resources/functionalUpdate.js +0 -87
- package/dist/transaction/resources/httpResources.d.ts +0 -321
- package/dist/transaction/resources/httpResources.js +0 -7
- package/dist/transaction/resources/modelOperations.d.ts +0 -427
- package/dist/transaction/resources/modelOperations.js +0 -12
- package/dist/transaction/resources/mutationOptions.d.ts +0 -66
- package/dist/transaction/resources/mutationOptions.js +0 -9
- package/dist/transaction/resources/where.d.ts +0 -101
- package/dist/transaction/resources/where.js +0 -115
- package/dist/transaction/resources/writeOptionsSchema.d.ts +0 -47
- package/dist/transaction/resources/writeOptionsSchema.js +0 -73
- package/dist/transaction/schema/field.d.ts +0 -120
- package/dist/transaction/schema/field.js +0 -265
- package/dist/transaction/schema/fieldRef.d.ts +0 -38
- package/dist/transaction/schema/fieldRef.js +0 -11
- package/dist/transaction/schema/loadStrategy.d.ts +0 -45
- package/dist/transaction/schema/loadStrategy.js +0 -46
- package/dist/transaction/schema/model.d.ts +0 -379
- package/dist/transaction/schema/model.js +0 -123
- package/dist/transaction/schema/openapi.d.ts +0 -58
- package/dist/transaction/schema/openapi.js +0 -501
- package/dist/transaction/schema/relation.d.ts +0 -204
- package/dist/transaction/schema/relation.js +0 -104
- package/dist/transaction/schema/residency.d.ts +0 -29
- package/dist/transaction/schema/residency.js +0 -25
- package/dist/transaction/schema/roles.d.ts +0 -249
- package/dist/transaction/schema/roles.js +0 -230
- package/dist/transaction/schema/schema.d.ts +0 -351
- package/dist/transaction/schema/schema.js +0 -325
- package/dist/transaction/schema/tenancy.d.ts +0 -139
- package/dist/transaction/schema/tenancy.js +0 -190
- package/dist/transaction/transactionLayer.d.ts +0 -82
- package/dist/transaction/transactionLayer.js +0 -24
- package/dist/transaction/transactions/settlement/commitEnvelope.d.ts +0 -143
- package/dist/transaction/transactions/settlement/commitEnvelope.js +0 -161
- package/dist/transaction/transactions/settlement/httpCommitEnvelope.d.ts +0 -53
- package/dist/transaction/transactions/settlement/httpCommitEnvelope.js +0 -207
- package/dist/transaction/transactions/settlement/idempotencyKey.d.ts +0 -10
- package/dist/transaction/transactions/settlement/idempotencyKey.js +0 -9
- package/dist/transaction/transactions/settlement/pendingWrite.d.ts +0 -112
- package/dist/transaction/transactions/settlement/pendingWrite.js +0 -20
- package/dist/transaction/transport/commitFrames.d.ts +0 -90
- package/dist/transaction/transport/commitFrames.js +0 -134
- package/dist/transaction/transport/connectionManager.d.ts +0 -215
- package/dist/transaction/transport/connectionManager.js +0 -673
- package/dist/transaction/transport/credentialLifecycle.d.ts +0 -177
- package/dist/transaction/transport/credentialLifecycle.js +0 -324
- package/dist/transaction/transport/heartbeat.d.ts +0 -65
- package/dist/transaction/transport/heartbeat.js +0 -93
- package/dist/transaction/transport/httpClient.d.ts +0 -131
- package/dist/transaction/transport/httpClient.js +0 -146
- package/dist/transaction/transport/httpOptions.d.ts +0 -33
- package/dist/transaction/transport/httpOptions.js +0 -12
- package/dist/transaction/transport/httpTransport.d.ts +0 -8
- package/dist/transaction/transport/httpTransport.js +0 -1388
- package/dist/transaction/transport/networkProbe.d.ts +0 -84
- package/dist/transaction/transport/networkProbe.js +0 -207
- package/dist/transaction/transport/wsFrameHandlers.d.ts +0 -128
- package/dist/transaction/transport/wsFrameHandlers.js +0 -429
- package/dist/transaction/transport/wsTransport.d.ts +0 -574
- package/dist/transaction/transport/wsTransport.js +0 -1023
- package/dist/transaction/types/assertExact.d.ts +0 -17
- package/dist/transaction/types/assertExact.js +0 -1
- package/dist/transaction/types/global.d.ts +0 -107
- package/dist/transaction/types/global.js +0 -40
- package/dist/transaction/types/index.d.ts +0 -205
- package/dist/transaction/types/index.js +0 -56
- package/dist/transaction/types/modelData.d.ts +0 -10
- package/dist/transaction/types/modelData.js +0 -9
- package/dist/transaction/types/participant.d.ts +0 -20
- package/dist/transaction/types/participant.js +0 -10
- package/dist/transaction/types/streams.d.ts +0 -550
- package/dist/transaction/types/streams.js +0 -11
- package/dist/transaction/utils/asyncIterator.d.ts +0 -34
- package/dist/transaction/utils/asyncIterator.js +0 -135
- package/dist/transaction/utils/duration.d.ts +0 -50
- package/dist/transaction/utils/duration.js +0 -77
- package/dist/transaction/utils/json.d.ts +0 -57
- package/dist/transaction/utils/json.js +0 -276
- package/dist/transaction/wire/accountResponses.d.ts +0 -420
- package/dist/transaction/wire/accountResponses.js +0 -290
- package/dist/transaction/wire/auth.d.ts +0 -56
- package/dist/transaction/wire/auth.js +0 -63
- package/dist/transaction/wire/bootstrapReason.d.ts +0 -9
- package/dist/transaction/wire/bootstrapReason.js +0 -8
- package/dist/transaction/wire/claimEvent.d.ts +0 -76
- package/dist/transaction/wire/claimEvent.js +0 -73
- package/dist/transaction/wire/claims.d.ts +0 -530
- package/dist/transaction/wire/claims.js +0 -327
- package/dist/transaction/wire/commit.d.ts +0 -603
- package/dist/transaction/wire/commit.js +0 -321
- package/dist/transaction/wire/delta.d.ts +0 -250
- package/dist/transaction/wire/delta.js +0 -147
- package/dist/transaction/wire/errorEnvelope.d.ts +0 -72
- package/dist/transaction/wire/errorEnvelope.js +0 -123
- package/dist/transaction/wire/feedCursor.d.ts +0 -60
- package/dist/transaction/wire/feedCursor.js +0 -82
- package/dist/transaction/wire/feedEvent.d.ts +0 -204
- package/dist/transaction/wire/feedEvent.js +0 -65
- package/dist/transaction/wire/frames.d.ts +0 -194
- package/dist/transaction/wire/frames.js +0 -50
- package/dist/transaction/wire/inboundFrames.d.ts +0 -562
- package/dist/transaction/wire/inboundFrames.js +0 -116
- package/dist/transaction/wire/index.d.ts +0 -54
- package/dist/transaction/wire/index.js +0 -83
- package/dist/transaction/wire/listEnvelope.d.ts +0 -37
- package/dist/transaction/wire/listEnvelope.js +0 -42
- package/dist/transaction/wire/modelMutations.d.ts +0 -31
- package/dist/transaction/wire/modelMutations.js +0 -52
- package/dist/transaction/wire/modelResponses.d.ts +0 -85
- package/dist/transaction/wire/modelResponses.js +0 -43
- package/dist/transaction/wire/modelShape.d.ts +0 -78
- package/dist/transaction/wire/modelShape.js +0 -74
- package/dist/transaction/wire/protocol.d.ts +0 -38
- package/dist/transaction/wire/protocol.js +0 -38
- package/dist/transaction/wire/protocolVersion.d.ts +0 -73
- package/dist/transaction/wire/protocolVersion.js +0 -83
- package/dist/transactions/mutations/MutationQueue.d.ts +0 -661
- package/dist/transactions/mutations/MutationQueue.js +0 -2807
- package/dist/transactions/mutations/MutationStore.d.ts +0 -20
- package/dist/transactions/mutations/MutationStore.js +0 -53
- package/dist/transactions/mutations/UnconfirmedWrites.d.ts +0 -82
- package/dist/transactions/mutations/UnconfirmedWrites.js +0 -104
- package/dist/transactions/mutations/coalesceRules.d.ts +0 -58
- package/dist/transactions/mutations/coalesceRules.js +0 -140
- package/dist/transactions/mutations/commitLatency.d.ts +0 -52
- package/dist/transactions/mutations/commitLatency.js +0 -130
- package/dist/transactions/mutations/commitOutboxStore.d.ts +0 -28
- package/dist/transactions/mutations/commitOutboxStore.js +0 -26
- package/dist/transactions/mutations/commitPayload.d.ts +0 -165
- package/dist/transactions/mutations/commitPayload.js +0 -152
- package/dist/transactions/mutations/deltaConfirmation.d.ts +0 -63
- package/dist/transactions/mutations/deltaConfirmation.js +0 -235
- package/dist/transactions/mutations/durableWriteStore.d.ts +0 -14
- package/dist/transactions/mutations/durableWriteStore.js +0 -12
- package/dist/transactions/mutations/optimisticApply.d.ts +0 -49
- package/dist/transactions/mutations/optimisticApply.js +0 -65
- package/dist/transactions/mutations/replayValidation.d.ts +0 -187
- package/dist/transactions/mutations/replayValidation.js +0 -164
- package/dist/utils/mobxSetup.d.ts +0 -53
- package/dist/utils/mobxSetup.js +0 -330
- package/dist/views/QueryView.d.ts +0 -79
- package/dist/views/QueryView.js +0 -218
- package/dist/views/ViewRegistry.d.ts +0 -20
- package/dist/views/ViewRegistry.js +0 -55
- package/dist/views/incrementalView.d.ts +0 -45
- package/dist/views/incrementalView.js +0 -69
- package/dist/webhooks/events.d.ts +0 -43
- package/dist/webhooks/events.js +0 -42
- package/dist/webhooks/index.d.ts +0 -8
- package/dist/webhooks/index.js +0 -8
- package/dist/wire/index.d.ts +0 -1
- package/dist/wire/index.js +0 -8
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The error raised when opening an IndexedDB database does not complete in a
|
|
3
|
-
* bounded time. {@link openIDBWithTimeout} throws it in two situations: another
|
|
4
|
-
* browser tab is holding an older version of the database open and blocking the
|
|
5
|
-
* upgrade (`reason: 'blocked'`), or the open request produced no result at all
|
|
6
|
-
* within the timeout (`reason: 'timeout'`).
|
|
7
|
-
*
|
|
8
|
-
* The native open request can otherwise hang indefinitely — when a blocking tab
|
|
9
|
-
* never closes its connection, neither the success nor the error callback fires,
|
|
10
|
-
* and any code awaiting the open waits forever. Turning that into a thrown error
|
|
11
|
-
* lets the surrounding application show a recoverable failure instead of an
|
|
12
|
-
* unbreakable spinner.
|
|
13
|
-
*/
|
|
14
|
-
export class IDBOpenTimeoutError extends Error {
|
|
15
|
-
dbName;
|
|
16
|
-
reason;
|
|
17
|
-
/**
|
|
18
|
-
* A stable identifier for this failure, independent of the message text. When
|
|
19
|
-
* this error is wrapped into an {@link AbloError} by `toAbloError`, the string
|
|
20
|
-
* code is preserved, so error handlers can recognize a wedged-storage failure
|
|
21
|
-
* and offer a recovery path rather than matching on the message.
|
|
22
|
-
*/
|
|
23
|
-
code = 'storage_open_timeout';
|
|
24
|
-
constructor(dbName, reason, message) {
|
|
25
|
-
super(message);
|
|
26
|
-
this.dbName = dbName;
|
|
27
|
-
this.reason = reason;
|
|
28
|
-
this.name = 'IDBOpenTimeoutError';
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Returns true when a caught value is the storage-open-timeout failure. It
|
|
33
|
-
* detects the failure by its stable `code`, so it still matches after the error
|
|
34
|
-
* has been wrapped into an {@link AbloError} or another error type.
|
|
35
|
-
*/
|
|
36
|
-
export function isStorageOpenTimeout(err) {
|
|
37
|
-
return (typeof err === 'object' &&
|
|
38
|
-
err !== null &&
|
|
39
|
-
err.code === 'storage_open_timeout');
|
|
40
|
-
}
|
|
41
|
-
export function openIDBWithTimeout(name, version, options = {}) {
|
|
42
|
-
const timeoutMs = options.timeoutMs ?? 10_000;
|
|
43
|
-
return new Promise((resolve, reject) => {
|
|
44
|
-
const request = version === undefined
|
|
45
|
-
? indexedDB.open(name)
|
|
46
|
-
: indexedDB.open(name, version);
|
|
47
|
-
let settled = false;
|
|
48
|
-
const settle = (fn) => {
|
|
49
|
-
if (settled)
|
|
50
|
-
return;
|
|
51
|
-
settled = true;
|
|
52
|
-
clearTimeout(timer);
|
|
53
|
-
fn();
|
|
54
|
-
};
|
|
55
|
-
if (options.onUpgrade) {
|
|
56
|
-
request.onupgradeneeded = (event) => {
|
|
57
|
-
options.onUpgrade(request, event);
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
request.onsuccess = () => {
|
|
61
|
-
// If we already timed out or were blocked and rejected, this is a late
|
|
62
|
-
// success: the native open eventually completed after we gave up. The
|
|
63
|
-
// resulting connection is orphaned — nothing up the stack holds it, so
|
|
64
|
-
// nothing will close it. A leaked open connection holds an IndexedDB lock
|
|
65
|
-
// that wedges every later open or delete of this database name, so close
|
|
66
|
-
// it here to keep a timed-out attempt from poisoning the store.
|
|
67
|
-
if (settled) {
|
|
68
|
-
try {
|
|
69
|
-
request.result.close();
|
|
70
|
-
}
|
|
71
|
-
catch {
|
|
72
|
-
// Best-effort — a half-open connection may already be unusable.
|
|
73
|
-
}
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
const db = request.result;
|
|
77
|
-
// Required resilience handler per the IndexedDB specification: close this
|
|
78
|
-
// connection as soon as any other context wants to upgrade or delete the
|
|
79
|
-
// database. Without it, a connection that ignores `versionchange` blocks
|
|
80
|
-
// the other context's request indefinitely — a common cause of a database
|
|
81
|
-
// that stays wedged across reloads. Closing here makes the store release
|
|
82
|
-
// itself.
|
|
83
|
-
db.onversionchange = () => {
|
|
84
|
-
try {
|
|
85
|
-
db.close();
|
|
86
|
-
}
|
|
87
|
-
catch {
|
|
88
|
-
// Already closing/closed — nothing to do.
|
|
89
|
-
}
|
|
90
|
-
try {
|
|
91
|
-
options.onVersionChange?.();
|
|
92
|
-
}
|
|
93
|
-
catch {
|
|
94
|
-
// A consumer reaction must never break the close.
|
|
95
|
-
}
|
|
96
|
-
};
|
|
97
|
-
settle(() => { resolve(db); });
|
|
98
|
-
};
|
|
99
|
-
request.onerror = () => { settle(() => { reject(request.error); }); };
|
|
100
|
-
// The critical handler: another tab is blocking us. Native API leaves
|
|
101
|
-
// the request pending indefinitely; we fail fast with a clear error so
|
|
102
|
-
// the UI can tell the user to close other tabs.
|
|
103
|
-
request.onblocked = () => {
|
|
104
|
-
settle(() => {
|
|
105
|
-
reject(new IDBOpenTimeoutError(name, 'blocked', `IndexedDB \"${name}\" open blocked — another tab is holding an ` +
|
|
106
|
-
`older version. Close other Ablo tabs and reload.`));
|
|
107
|
-
});
|
|
108
|
-
};
|
|
109
|
-
// Catch-all timeout: even without `onblocked`, some browsers in some
|
|
110
|
-
// storage states hang without firing any event. Bounded wait →
|
|
111
|
-
// deterministic error.
|
|
112
|
-
const timer = setTimeout(() => {
|
|
113
|
-
settle(() => {
|
|
114
|
-
reject(new IDBOpenTimeoutError(name, 'timeout', `IndexedDB \"${name}\" open did not resolve within ${timeoutMs}ms. ` +
|
|
115
|
-
`Storage may be in a bad state — clearing site data and reloading ` +
|
|
116
|
-
`usually fixes this.`));
|
|
117
|
-
});
|
|
118
|
-
}, timeoutMs);
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Deletes an IndexedDB database within a bounded time — the delete counterpart
|
|
123
|
-
* to {@link openIDBWithTimeout}. It is used to recover from a wedged backing
|
|
124
|
-
* store: when opening a database times out, the caller can delete it and start
|
|
125
|
-
* fresh, which is safe for any database whose contents can be rebuilt on the
|
|
126
|
-
* next load.
|
|
127
|
-
*
|
|
128
|
-
* Like an open request, a native delete can hang indefinitely — it fires a
|
|
129
|
-
* blocked event and waits when another connection still holds the database, and
|
|
130
|
-
* on a truly stuck store it fires no event at all. Both cases become a bounded,
|
|
131
|
-
* resolved result here, so the caller never spins.
|
|
132
|
-
*
|
|
133
|
-
* Resolves to `true` on a clean delete and `false` when the delete was blocked
|
|
134
|
-
* or timed out. Either way the caller can decide whether to retry the open; a
|
|
135
|
-
* delete that did nothing leaves the store no worse off.
|
|
136
|
-
*/
|
|
137
|
-
export function deleteIDBWithTimeout(name, timeoutMs = 5_000) {
|
|
138
|
-
return new Promise((resolve) => {
|
|
139
|
-
let settled = false;
|
|
140
|
-
const settle = (value) => {
|
|
141
|
-
if (settled)
|
|
142
|
-
return;
|
|
143
|
-
settled = true;
|
|
144
|
-
clearTimeout(timer);
|
|
145
|
-
resolve(value);
|
|
146
|
-
};
|
|
147
|
-
const request = indexedDB.deleteDatabase(name);
|
|
148
|
-
request.onsuccess = () => { settle(true); };
|
|
149
|
-
request.onerror = () => { settle(false); };
|
|
150
|
-
request.onblocked = () => { settle(false); };
|
|
151
|
-
const timer = setTimeout(() => { settle(false); }, timeoutMs);
|
|
152
|
-
});
|
|
153
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
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'];
|
|
@@ -1,16 +0,0 @@
|
|
|
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
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A machine-checked manifest of this package's public API surface. It lists,
|
|
3
|
-
* as string tuples, the method names on `ablo.<model>`, the keys accepted by
|
|
4
|
-
* the list-style read options, and the keys of the client constructor
|
|
5
|
-
* options. Each tuple is proven equal to the keys of its source interface at
|
|
6
|
-
* compile time, so the lists cannot drift from the real types: add or remove
|
|
7
|
-
* a name on either side without updating the matching tuple and this file
|
|
8
|
-
* fails to compile, in both directions — no name the interface lacks, and no
|
|
9
|
-
* interface key the tuple omits.
|
|
10
|
-
*
|
|
11
|
-
* Documentation tooling reads these tuples to describe the surface, which
|
|
12
|
-
* guarantees a generated summary never names a method or option that does
|
|
13
|
-
* not exist. The names are verified here; their prose descriptions are
|
|
14
|
-
* written by hand, since prose cannot be type-checked.
|
|
15
|
-
*/
|
|
16
|
-
/**
|
|
17
|
-
* The names of every method available on `ablo.<model>`, matching the keys of
|
|
18
|
-
* the {@link ModelOperations} interface. Documentation tooling reads this
|
|
19
|
-
* tuple, so it is the one list of model-verb names a generated summary can
|
|
20
|
-
* describe.
|
|
21
|
-
*/
|
|
22
|
-
export declare const PUBLIC_MODEL_VERBS: readonly ["retrieve", "list", "local", "create", "update", "delete", "claim", "track", "join", "onChange"];
|
|
23
|
-
/**
|
|
24
|
-
* The option keys accepted by `local.list` and `onChange`, matching the
|
|
25
|
-
* keys of {@link LocalReadOptions}. Note that the lifecycle filter is named
|
|
26
|
-
* `state`, not `scope`.
|
|
27
|
-
*/
|
|
28
|
-
export declare const PUBLIC_LIST_OPTION_KEYS: readonly ["where", "filter", "orderBy", "limit", "offset", "state"];
|
|
29
|
-
/**
|
|
30
|
-
* The keys of the client constructor options, {@link AbloOptions}. Only
|
|
31
|
-
* `schema` is required; every other key is optional.
|
|
32
|
-
*/
|
|
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
|
-
export type ModelVerb = (typeof PUBLIC_MODEL_VERBS)[number];
|
|
35
|
-
export type ListOptionKey = (typeof PUBLIC_LIST_OPTION_KEYS)[number];
|
|
36
|
-
export type AbloOptionKey = (typeof PUBLIC_ABLO_OPTION_KEYS)[number];
|
package/dist/surface.js
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A machine-checked manifest of this package's public API surface. It lists,
|
|
3
|
-
* as string tuples, the method names on `ablo.<model>`, the keys accepted by
|
|
4
|
-
* the list-style read options, and the keys of the client constructor
|
|
5
|
-
* options. Each tuple is proven equal to the keys of its source interface at
|
|
6
|
-
* compile time, so the lists cannot drift from the real types: add or remove
|
|
7
|
-
* a name on either side without updating the matching tuple and this file
|
|
8
|
-
* fails to compile, in both directions — no name the interface lacks, and no
|
|
9
|
-
* interface key the tuple omits.
|
|
10
|
-
*
|
|
11
|
-
* Documentation tooling reads these tuples to describe the surface, which
|
|
12
|
-
* guarantees a generated summary never names a method or option that does
|
|
13
|
-
* not exist. The names are verified here; their prose descriptions are
|
|
14
|
-
* written by hand, since prose cannot be type-checked.
|
|
15
|
-
*/
|
|
16
|
-
// ── the per-`ablo.<model>` verb surface ────────────────────────────────────
|
|
17
|
-
/**
|
|
18
|
-
* The names of every method available on `ablo.<model>`, matching the keys of
|
|
19
|
-
* the {@link ModelOperations} interface. Documentation tooling reads this
|
|
20
|
-
* tuple, so it is the one list of model-verb names a generated summary can
|
|
21
|
-
* describe.
|
|
22
|
-
*/
|
|
23
|
-
export const PUBLIC_MODEL_VERBS = [
|
|
24
|
-
'retrieve',
|
|
25
|
-
'list',
|
|
26
|
-
'local',
|
|
27
|
-
'create',
|
|
28
|
-
'update',
|
|
29
|
-
'delete',
|
|
30
|
-
'claim',
|
|
31
|
-
'track',
|
|
32
|
-
'join',
|
|
33
|
-
'onChange',
|
|
34
|
-
];
|
|
35
|
-
// ── the read/list query option surface ─────────────────────────────────────
|
|
36
|
-
/**
|
|
37
|
-
* The option keys accepted by `local.list` and `onChange`, matching the
|
|
38
|
-
* keys of {@link LocalReadOptions}. Note that the lifecycle filter is named
|
|
39
|
-
* `state`, not `scope`.
|
|
40
|
-
*/
|
|
41
|
-
export const PUBLIC_LIST_OPTION_KEYS = [
|
|
42
|
-
'where',
|
|
43
|
-
'filter',
|
|
44
|
-
'orderBy',
|
|
45
|
-
'limit',
|
|
46
|
-
'offset',
|
|
47
|
-
'state',
|
|
48
|
-
];
|
|
49
|
-
// ── the `Ablo({ … })` constructor option surface ───────────────────────────
|
|
50
|
-
/**
|
|
51
|
-
* The keys of the client constructor options, {@link AbloOptions}. Only
|
|
52
|
-
* `schema` is required; every other key is optional.
|
|
53
|
-
*/
|
|
54
|
-
export const PUBLIC_ABLO_OPTION_KEYS = [
|
|
55
|
-
'schema',
|
|
56
|
-
'apiKey',
|
|
57
|
-
'authEndpoint',
|
|
58
|
-
'persistence',
|
|
59
|
-
'durableWrites',
|
|
60
|
-
'commitOutbox',
|
|
61
|
-
'commitOutboxScope',
|
|
62
|
-
'transport',
|
|
63
|
-
'debug',
|
|
64
|
-
'logLevel',
|
|
65
|
-
'logger',
|
|
66
|
-
'authToken',
|
|
67
|
-
'baseURL',
|
|
68
|
-
'fetch',
|
|
69
|
-
'defaultHeaders',
|
|
70
|
-
'defaultQuery',
|
|
71
|
-
'dangerouslyAllowBrowser',
|
|
72
|
-
'collaborationEvents',
|
|
73
|
-
'plugins',
|
|
74
|
-
'wait',
|
|
75
|
-
];
|
|
@@ -1,284 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Fetches the initial snapshot the sync engine needs before it can go live: the
|
|
3
|
-
* current rows for the requested models plus the sync position from which to
|
|
4
|
-
* resume live updates. It calls the sync server's `/sync/bootstrap` HTTP
|
|
5
|
-
* endpoint, retries transient failures with backoff, and can fall back to a
|
|
6
|
-
* cached snapshot when the device is offline. {@link BootstrapData} is the
|
|
7
|
-
* shape it returns; {@link BootstrapOptions} configures it.
|
|
8
|
-
*/
|
|
9
|
-
export interface BootstrapData {
|
|
10
|
-
type: 'full' | 'partial';
|
|
11
|
-
lastSyncId: number;
|
|
12
|
-
/**
|
|
13
|
-
* Model rows keyed by type name. Each row is opaque at this boundary; the
|
|
14
|
-
* engine asserts the per-model shape against the registered schema when it
|
|
15
|
-
* reduces the rows and writes them to local storage.
|
|
16
|
-
*/
|
|
17
|
-
models?: Record<string, unknown[]>;
|
|
18
|
-
deltas?: ValidatedServerDelta[];
|
|
19
|
-
deltaCount?: number;
|
|
20
|
-
/** Model types whose server-side query failed (timeout, RLS error, and the like). */
|
|
21
|
-
failedModels?: string[];
|
|
22
|
-
timestamp: number;
|
|
23
|
-
/**
|
|
24
|
-
* The content hash of the schema the server currently has active for this
|
|
25
|
-
* tenant — the same hash `ablo push` computes. Present once a schema has been
|
|
26
|
-
* pushed. The client compares it against its own `expectedSchemaHash` to warn
|
|
27
|
-
* when the app's schema and the deployed schema have drifted apart.
|
|
28
|
-
*/
|
|
29
|
-
schemaHash?: string;
|
|
30
|
-
/**
|
|
31
|
-
* Present when a paged single-model request stopped at its row limit with
|
|
32
|
-
* rows remaining: pass it back as the next page's `cursor`. Absent on the
|
|
33
|
-
* final page, on unpaged responses, and from servers that predate paging.
|
|
34
|
-
*/
|
|
35
|
-
nextCursor?: string;
|
|
36
|
-
}
|
|
37
|
-
export interface BootstrapFetchResult {
|
|
38
|
-
notModified: boolean;
|
|
39
|
-
data?: BootstrapData;
|
|
40
|
-
etag?: string | null;
|
|
41
|
-
}
|
|
42
|
-
export interface BootstrapOptions {
|
|
43
|
-
/**
|
|
44
|
-
* Full base URL of the sync server's HTTP API, **including the `/api`
|
|
45
|
-
* prefix**. The bootstrap endpoint is appended as `/sync/bootstrap`, so
|
|
46
|
-
* the final request hits `${baseUrl}/sync/bootstrap`.
|
|
47
|
-
*
|
|
48
|
-
* Example: `'http://localhost:8080/api'` → `http://localhost:8080/api/sync/bootstrap`
|
|
49
|
-
*
|
|
50
|
-
* Default: `'http://localhost:8080/api'`.
|
|
51
|
-
*/
|
|
52
|
-
baseUrl?: string;
|
|
53
|
-
/**
|
|
54
|
-
* Namespace for the offline bootstrap cache. Most callers leave this unset;
|
|
55
|
-
* the SDK fills it in once authentication has resolved the account scope, so
|
|
56
|
-
* the fallback cache is partitioned per account.
|
|
57
|
-
*/
|
|
58
|
-
cacheScope?: string | null;
|
|
59
|
-
/**
|
|
60
|
-
* @deprecated Use `cacheScope`. Retained so code that constructs
|
|
61
|
-
* {@link BootstrapFetcher} directly keeps its cache namespace.
|
|
62
|
-
*/
|
|
63
|
-
organizationId?: string;
|
|
64
|
-
syncGroups?: string[];
|
|
65
|
-
maxRetries?: number;
|
|
66
|
-
retryDelay?: number;
|
|
67
|
-
/**
|
|
68
|
-
* How long to wait for the server to START responding (response headers), in
|
|
69
|
-
* milliseconds. Default 20000 (20 seconds).
|
|
70
|
-
*
|
|
71
|
-
* Deliberately NOT a bound on the whole download: a cold-start snapshot can
|
|
72
|
-
* be tens of megabytes, and its transfer time depends on the connection. A
|
|
73
|
-
* healthy download that is actively delivering bytes is never aborted, no
|
|
74
|
-
* matter how long it takes — {@link stallTimeout} guards the body instead.
|
|
75
|
-
*/
|
|
76
|
-
fetchTimeout?: number;
|
|
77
|
-
/**
|
|
78
|
-
* The longest quiet gap allowed between body chunks while downloading, in
|
|
79
|
-
* milliseconds. Default 15000 (15 seconds). This is the progress watchdog:
|
|
80
|
-
* it aborts a download whose stream has gone silent (dead connection,
|
|
81
|
-
* hung proxy) without ever penalizing a slow-but-moving transfer.
|
|
82
|
-
*/
|
|
83
|
-
stallTimeout?: number;
|
|
84
|
-
/**
|
|
85
|
-
* The model names to request. When set, the server returns only these models
|
|
86
|
-
* and skips the rest. This is derived from each model's `load` strategy: only
|
|
87
|
-
* models loaded instantly (the default) are included. When unset, the server
|
|
88
|
-
* returns every model.
|
|
89
|
-
*/
|
|
90
|
-
instantModels?: string[];
|
|
91
|
-
/**
|
|
92
|
-
* Getter for the current credential, read at request time so a refreshed
|
|
93
|
-
* token takes effect without recreating the helper. Preferred over
|
|
94
|
-
* {@link BootstrapFetcher.setAuthToken}.
|
|
95
|
-
*/
|
|
96
|
-
getAuthToken?: AuthTokenGetter;
|
|
97
|
-
/** The owning client's runtime. Defaults to the module-global bridge. */
|
|
98
|
-
runtime?: RuntimeContext;
|
|
99
|
-
}
|
|
100
|
-
import type { RuntimeContext } from '../RuntimeContext.js';
|
|
101
|
-
import { type AuthTokenGetter } from '../transaction/auth/credentialSource.js';
|
|
102
|
-
import { type ValidatedServerDelta } from './schemas.js';
|
|
103
|
-
export declare class BootstrapFetcher {
|
|
104
|
-
private options;
|
|
105
|
-
private readonly runtime;
|
|
106
|
-
/**
|
|
107
|
-
* Every in-flight request's controller, tagged with the lane it belongs to. A
|
|
108
|
-
* registry rather than a single field because a chunked cold start runs
|
|
109
|
-
* several model fetches concurrently — aborting one request (its own
|
|
110
|
-
* TTFB/stall watchdog) must never take its siblings down, while
|
|
111
|
-
* {@link abort} takes down all of them.
|
|
112
|
-
*/
|
|
113
|
-
private readonly activeControllers;
|
|
114
|
-
/**
|
|
115
|
-
* Non-scoped bootstraps currently running, keyed by request identity. A
|
|
116
|
-
* second call for the same snapshot joins the one already in flight rather
|
|
117
|
-
* than cancelling and restarting it — see {@link fetchBootstrap}.
|
|
118
|
-
*/
|
|
119
|
-
private readonly flights;
|
|
120
|
-
/** Warn about schema drift at most once per helper. */
|
|
121
|
-
private schemaDriftWarned;
|
|
122
|
-
/**
|
|
123
|
-
* Abort every in-flight request in `lane` — or in every lane when none is
|
|
124
|
-
* given — with an explicit reason.
|
|
125
|
-
*
|
|
126
|
-
* The reason is load-bearing, not decoration. `fetch` rejects with the exact
|
|
127
|
-
* value handed to `abort()`, so passing a typed error is what lets the retry
|
|
128
|
-
* loop below tell a deliberate cancellation apart from a dead connection. A
|
|
129
|
-
* bare `abort()` produces an `AbortError` indistinguishable from the one the
|
|
130
|
-
* browser's stop button produces, and a retry loop that cannot tell them
|
|
131
|
-
* apart re-issues the requests it just killed.
|
|
132
|
-
*/
|
|
133
|
-
private cancelActive;
|
|
134
|
-
/**
|
|
135
|
-
* The longest a single bootstrap can run before every watchdog below has
|
|
136
|
-
* necessarily fired, derived from those watchdogs rather than guessed. A
|
|
137
|
-
* caller wanting an outer deadline reads this instead of picking a number,
|
|
138
|
-
* so it cannot set one shorter than the work it wraps. A cold start pages
|
|
139
|
-
* through its models {@link CHUNK_CONCURRENCY} at a time; each request may
|
|
140
|
-
* spend `fetchTimeout` waiting for response headers and `stallTimeout`
|
|
141
|
-
* waiting for the next body chunk, and may be retried `maxRetries` times.
|
|
142
|
-
*/
|
|
143
|
-
get budgetMs(): number;
|
|
144
|
-
get baseUrl(): string;
|
|
145
|
-
/**
|
|
146
|
-
* Advisory schema-drift check: compare the server's active schema hash (on the
|
|
147
|
-
* bootstrap response) against the hash this client was built with. A mismatch
|
|
148
|
-
* means the app's schema and the deployed schema have diverged — reads/writes
|
|
149
|
-
* relying on undeployed changes will later fail with an opaque DB constraint
|
|
150
|
-
* error. Warn once, actionably; never throws or blocks the bootstrap.
|
|
151
|
-
*
|
|
152
|
-
* The message names the SERVER it connected to, and spans all three real
|
|
153
|
-
* causes rather than assuming "you forgot to push". Drift most often means the
|
|
154
|
-
* schema was pushed to a different server, project, or environment than this
|
|
155
|
-
* client points at (a bare `ablo push` targets the hosted default; a local app
|
|
156
|
-
* usually reads a local server) — so the first, load-bearing pointer is `ablo
|
|
157
|
-
* status`, which names the exact org/project/environment the key resolves to
|
|
158
|
-
* and the deployed hash, turning "which of these is it?" into one glance. The
|
|
159
|
-
* older "Run `ablo push`" copy sent everyone down one path and confused the
|
|
160
|
-
* common wrong-target and version-skew cases.
|
|
161
|
-
*/
|
|
162
|
-
private warnOnSchemaDrift;
|
|
163
|
-
/** Fetch the server's per-model schema surface and warn precisely — or stay
|
|
164
|
-
* silent when every model this client declares matches (additive lead). */
|
|
165
|
-
private resolveSemanticDrift;
|
|
166
|
-
private warnWholeHashDrift;
|
|
167
|
-
constructor(options: BootstrapOptions);
|
|
168
|
-
/**
|
|
169
|
-
* Update the offline-cache namespace once auth has resolved the server-side
|
|
170
|
-
* account scope. This is intentionally not a public organizationId input.
|
|
171
|
-
*/
|
|
172
|
-
setCacheScope(cacheScope: string): void;
|
|
173
|
-
setSyncGroups(syncGroups: readonly string[] | undefined): void;
|
|
174
|
-
/**
|
|
175
|
-
* Sets a fixed credential for callers that construct the helper directly.
|
|
176
|
-
* The SDK instead supplies `getAuthToken` and never calls this.
|
|
177
|
-
*/
|
|
178
|
-
setAuthToken(authToken: string | undefined): void;
|
|
179
|
-
/**
|
|
180
|
-
* Fetch bootstrap data from sync engine with partial bootstrap support
|
|
181
|
-
* @param lastSyncId - Optional: client's current lastSyncId for partial bootstrap
|
|
182
|
-
* @returns Bootstrap data (either full snapshot or delta batch)
|
|
183
|
-
*/
|
|
184
|
-
fetchBootstrap(lastSyncId?: number,
|
|
185
|
-
/**
|
|
186
|
-
* A per-call set of sync groups for a scoped hydrate-on-enter. When given,
|
|
187
|
-
* the request uses these groups instead of the configured `syncGroups`, and
|
|
188
|
-
* does so without mutating the shared options, so a concurrent full
|
|
189
|
-
* bootstrap is unaffected. It also bypasses the offline snapshot cache,
|
|
190
|
-
* which holds the full bootstrap and would be a wrong answer to a subset
|
|
191
|
-
* request.
|
|
192
|
-
*/
|
|
193
|
-
syncGroupsOverride?: readonly string[]): Promise<BootstrapData>;
|
|
194
|
-
/**
|
|
195
|
-
* The identity of a bootstrap request: everything that determines its answer.
|
|
196
|
-
* Two calls with the same key are asking the same question, so the second can
|
|
197
|
-
* take the first's result.
|
|
198
|
-
*/
|
|
199
|
-
private flightKey;
|
|
200
|
-
/** One bootstrap, start to finish. {@link fetchBootstrap} owns whether it runs. */
|
|
201
|
-
private runBootstrap;
|
|
202
|
-
/**
|
|
203
|
-
* One bootstrap URL, fetched with backoff. Session errors and other
|
|
204
|
-
* non-retryable failures throw immediately; only transient failures
|
|
205
|
-
* (5xx, 429, timeouts, network blips) consume attempts. A cancellation is
|
|
206
|
-
* deliberate and therefore non-retryable — it leaves through the same gate.
|
|
207
|
-
*/
|
|
208
|
-
private fetchWithRetries;
|
|
209
|
-
/**
|
|
210
|
-
* Cold-start bootstrap, one request per instant model with a small
|
|
211
|
-
* concurrency cap. Any chunk's terminal failure fails the whole
|
|
212
|
-
* bootstrap (a partial snapshot must never masquerade as a full one)
|
|
213
|
-
* and cancels its siblings.
|
|
214
|
-
*/
|
|
215
|
-
private fetchChunkedBootstrap;
|
|
216
|
-
/**
|
|
217
|
-
* Fetch bootstrap with ETag, returning 304 hints
|
|
218
|
-
*/
|
|
219
|
-
fetchBootstrapWithETag(): Promise<BootstrapFetchResult>;
|
|
220
|
-
private fetchWithETagUsing;
|
|
221
|
-
/**
|
|
222
|
-
* Read a response body as a stream under a progress watchdog: the stall
|
|
223
|
-
* timer re-arms on every chunk, so only a silent stream is aborted — a
|
|
224
|
-
* slow-but-moving download is never killed for total duration. A cold-start
|
|
225
|
-
* snapshot can be tens of megabytes; bounding its total transfer time was
|
|
226
|
-
* what trapped large orgs in an endless full-bootstrap retry loop.
|
|
227
|
-
*
|
|
228
|
-
* Falls back to `response.json()` when the response exposes no readable
|
|
229
|
-
* stream (empty bodies, some test doubles).
|
|
230
|
-
*/
|
|
231
|
-
private readJsonWithStallGuard;
|
|
232
|
-
/**
|
|
233
|
-
* Perform one fetch. The timeout here bounds time to response headers
|
|
234
|
-
* only; the body download is guarded by the stall watchdog in
|
|
235
|
-
* {@link readJsonWithStallGuard}. Superseding an older in-flight
|
|
236
|
-
* bootstrap is the caller's job ({@link fetchBootstrap} cancels the
|
|
237
|
-
* registry) — chunk requests run through here concurrently and must
|
|
238
|
-
* not cancel each other.
|
|
239
|
-
*/
|
|
240
|
-
private fetchOnce;
|
|
241
|
-
private fetchOnceWith;
|
|
242
|
-
/**
|
|
243
|
-
* Fetch a single entity by ID (on-demand self-healing).
|
|
244
|
-
* Returns `null` for 404 (entity deleted) — this is an expected state, not an error.
|
|
245
|
-
* Throws for unexpected HTTP errors (5xx, network failures).
|
|
246
|
-
*/
|
|
247
|
-
fetchEntity(modelName: string, id: string): Promise<Record<string, unknown> | null>;
|
|
248
|
-
/**
|
|
249
|
-
* Clear all cached bootstrap data
|
|
250
|
-
*/
|
|
251
|
-
clearCache(): void;
|
|
252
|
-
private getBootstrapCacheKey;
|
|
253
|
-
private saveCachedBootstrap;
|
|
254
|
-
private loadCachedBootstrap;
|
|
255
|
-
/**
|
|
256
|
-
* Abort every ongoing bootstrap request (including all chunks of a
|
|
257
|
-
* chunked cold start). Entity self-heal fetches are unaffected.
|
|
258
|
-
*
|
|
259
|
-
* The flight registry is cleared first and synchronously, so a caller that
|
|
260
|
-
* bootstraps again in the same tick starts a fresh request rather than
|
|
261
|
-
* joining the one being torn down.
|
|
262
|
-
*/
|
|
263
|
-
abort(): void;
|
|
264
|
-
/**
|
|
265
|
-
* Helper to delay execution
|
|
266
|
-
*/
|
|
267
|
-
private delay;
|
|
268
|
-
/**
|
|
269
|
-
* Get health status of sync engine
|
|
270
|
-
*/
|
|
271
|
-
checkHealth(): Promise<boolean>;
|
|
272
|
-
}
|
|
273
|
-
/**
|
|
274
|
-
* Assemble per-model chunk responses into one full snapshot.
|
|
275
|
-
*
|
|
276
|
-
* Each chunk is internally consistent at its own sync position, and the
|
|
277
|
-
* positions differ (the chunks were served seconds apart). Anchoring the
|
|
278
|
-
* merged snapshot at the MINIMUM position turns that skew into an ordinary
|
|
279
|
-
* "briefly offline client": the WS catch-up replays every delta from the
|
|
280
|
-
* anchor, and since deltas carry full rows, re-applying one a later chunk
|
|
281
|
-
* already reflects converges to the same state. Anchoring at anything later
|
|
282
|
-
* would silently skip deltas for the earliest-fetched models.
|
|
283
|
-
*/
|
|
284
|
-
export declare function mergeBootstrapChunks(chunks: readonly BootstrapData[]): BootstrapData;
|