@abloatai/ablo 0.35.0 → 0.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +2 -2
- package/CHANGELOG.md +71 -1929
- package/NOTICE +2 -2
- package/README.md +23 -532
- 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 -112
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -161
- 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 +2 -2
- package/docs/api-keys.md +13 -12
- package/docs/api.md +15 -53
- package/docs/audit.md +4 -3
- package/docs/cli.md +11 -11
- package/docs/client-behavior.md +9 -9
- package/docs/concurrency-convention.md +28 -42
- package/docs/coordination.md +228 -86
- package/docs/data-sources.md +5 -5
- package/docs/debugging.md +34 -12
- package/docs/deployment.md +8 -8
- 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/scoped-agent.md +3 -3
- package/docs/examples/server-agent.md +2 -2
- package/docs/groups.md +57 -3
- package/docs/guarantees.md +37 -10
- package/docs/how-it-works.md +32 -8
- package/docs/idempotency.md +6 -6
- package/docs/identity.md +24 -24
- package/docs/index.md +8 -8
- package/docs/integration-guide.md +38 -16
- 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 +9 -9
- package/docs/migration.md +37 -18
- package/docs/projects.md +1 -1
- package/docs/quickstart.md +2 -2
- package/docs/react.md +24 -13
- package/docs/schema-contract.md +3 -3
- package/docs/sessions.md +91 -37
- package/docs/webhooks.md +9 -9
- 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 +12 -12
- package/package.json +64 -174
- package/dist/BaseSyncedStore.d.ts +0 -823
- package/dist/BaseSyncedStore.js +0 -1955
- package/dist/Database.d.ts +0 -335
- package/dist/Database.js +0 -1500
- package/dist/InstanceCache.d.ts +0 -233
- package/dist/InstanceCache.js +0 -1164
- package/dist/LazyReferenceCollection.d.ts +0 -177
- package/dist/LazyReferenceCollection.js +0 -461
- package/dist/Model.d.ts +0 -444
- package/dist/Model.js +0 -909
- package/dist/ModelRegistry.d.ts +0 -221
- package/dist/ModelRegistry.js +0 -537
- package/dist/NetworkMonitor.d.ts +0 -26
- package/dist/NetworkMonitor.js +0 -77
- package/dist/RuntimeContext.d.ts +0 -52
- package/dist/RuntimeContext.js +0 -80
- package/dist/SyncClient.d.ts +0 -551
- package/dist/SyncClient.js +0 -2199
- 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/cli.cjs +0 -288600
- package/dist/client/Ablo.d.ts +0 -231
- package/dist/client/Ablo.js +0 -149
- 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 -46
- package/dist/client/createInternalComponents.js +0 -92
- package/dist/client/createModelProxy.d.ts +0 -228
- package/dist/client/createModelProxy.js +0 -818
- package/dist/client/humans.d.ts +0 -48
- package/dist/client/humans.js +0 -52
- 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 -48
- package/dist/client/reactiveEngine.js +0 -910
- 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/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 -29
- package/dist/context.js +0 -58
- 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/DatabaseManager.d.ts +0 -105
- package/dist/core/DatabaseManager.js +0 -387
- package/dist/core/QueryProcessor.d.ts +0 -75
- package/dist/core/QueryProcessor.js +0 -255
- package/dist/core/QueryView.d.ts +0 -79
- package/dist/core/QueryView.js +0 -218
- package/dist/core/StoreManager.d.ts +0 -112
- package/dist/core/StoreManager.js +0 -302
- package/dist/core/ViewRegistry.d.ts +0 -20
- package/dist/core/ViewRegistry.js +0 -55
- package/dist/core/index.d.ts +0 -33
- package/dist/core/index.js +0 -48
- package/dist/core/openIDBWithTimeout.d.ts +0 -65
- package/dist/core/openIDBWithTimeout.js +0 -153
- package/dist/core/queryUtils.d.ts +0 -45
- package/dist/core/queryUtils.js +0 -69
- package/dist/core/storeContract.d.ts +0 -145
- package/dist/core/storeContract.js +0 -12
- package/dist/docs/catalog.d.ts +0 -72
- package/dist/docs/catalog.js +0 -227
- 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/client.d.ts +0 -61
- package/dist/query/client.js +0 -137
- package/dist/query/types.d.ts +0 -85
- package/dist/query/types.js +0 -16
- package/dist/react/AbloProvider.d.ts +0 -230
- package/dist/react/AbloProvider.js +0 -455
- 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/index.d.ts +0 -61
- package/dist/react/index.js +0 -66
- package/dist/react/internalContext.d.ts +0 -33
- package/dist/react/internalContext.js +0 -3
- package/dist/react/useAblo.d.ts +0 -75
- package/dist/react/useAblo.js +0 -102
- 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 -129
- 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 -41
- package/dist/schema/index.js +0 -76
- 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 -87
- package/dist/schema/serialize.d.ts +0 -115
- package/dist/schema/serialize.js +0 -262
- 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 -81
- package/dist/source/adapter.js +0 -22
- 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/footprint.d.ts +0 -111
- package/dist/source/footprint.js +0 -0
- 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/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/SyncActionStore.d.ts +0 -97
- package/dist/stores/SyncActionStore.js +0 -504
- 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 -280
- package/dist/sync/BootstrapFetcher.js +0 -962
- package/dist/sync/ConnectionManager.d.ts +0 -8
- package/dist/sync/ConnectionManager.js +0 -8
- package/dist/sync/OnDemandLoader.d.ts +0 -228
- package/dist/sync/OnDemandLoader.js +0 -742
- 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 -70
- 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 -113
- package/dist/sync/deltaPipeline.js +0 -261
- package/dist/sync/groupChange.d.ts +0 -113
- package/dist/sync/groupChange.js +0 -242
- package/dist/sync/participants.d.ts +0 -115
- package/dist/sync/participants.js +0 -344
- 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 -70
- 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/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/httpResponses.d.ts +0 -70
- package/dist/testing/fixtures/httpResponses.js +0 -90
- 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 -186
- 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 -72
- 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/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 -177
- package/dist/transaction/auth/capability.js +0 -199
- 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 -49
- package/dist/transaction/coordination/awaitClaimGrant.js +0 -112
- package/dist/transaction/coordination/claimHeartbeatLoop.d.ts +0 -50
- package/dist/transaction/coordination/claimHeartbeatLoop.js +0 -88
- 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 -44
- package/dist/transaction/coordination/locator.d.ts +0 -83
- package/dist/transaction/coordination/locator.js +0 -82
- package/dist/transaction/coordination/schema.d.ts +0 -1473
- package/dist/transaction/coordination/schema.js +0 -1013
- package/dist/transaction/coordination/targetConflict.d.ts +0 -2
- package/dist/transaction/coordination/targetConflict.js +0 -103
- 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 -480
- package/dist/transaction/errors.d.ts +0 -428
- package/dist/transaction/errors.js +0 -686
- 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 -192
- package/dist/transaction/plugin.js +0 -87
- 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 -266
- package/dist/transaction/resources/httpResources.js +0 -7
- package/dist/transaction/resources/modelOperations.d.ts +0 -319
- 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 -85
- package/dist/transaction/resources/where.js +0 -70
- 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 -126
- package/dist/transaction/schema/field.js +0 -265
- 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 -57
- package/dist/transaction/schema/openapi.js +0 -340
- package/dist/transaction/schema/relation.d.ts +0 -199
- 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 -324
- package/dist/transaction/schema/schema.js +0 -305
- 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 -123
- package/dist/transaction/transport/httpClient.js +0 -145
- 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 -1276
- 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 -576
- package/dist/transaction/transport/wsTransport.js +0 -1017
- 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 -540
- 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 -25
- package/dist/transaction/utils/duration.js +0 -45
- 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 -351
- package/dist/transaction/wire/accountResponses.js +0 -255
- package/dist/transaction/wire/auth.d.ts +0 -49
- package/dist/transaction/wire/auth.js +0 -57
- 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 -463
- package/dist/transaction/wire/claims.js +0 -229
- 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 -177
- package/dist/transaction/wire/feedEvent.js +0 -39
- 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 -552
- package/dist/transaction/wire/inboundFrames.js +0 -116
- package/dist/transaction/wire/index.d.ts +0 -50
- package/dist/transaction/wire/index.js +0 -74
- package/dist/transaction/wire/listEnvelope.d.ts +0 -37
- package/dist/transaction/wire/listEnvelope.js +0 -42
- package/dist/transaction/wire/modelResponses.d.ts +0 -85
- package/dist/transaction/wire/modelResponses.js +0 -43
- 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 -655
- package/dist/transactions/mutations/MutationQueue.js +0 -2797
- 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 -164
- package/dist/transactions/mutations/commitPayload.js +0 -152
- package/dist/transactions/mutations/deltaConfirmation.d.ts +0 -59
- package/dist/transactions/mutations/deltaConfirmation.js +0 -233
- 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 -186
- package/dist/transactions/mutations/replayValidation.js +0 -163
- package/dist/utils/mobxSetup.d.ts +0 -53
- package/dist/utils/mobxSetup.js +0 -330
- 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
- package/docs/interaction-model.md +0 -99
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { type ReactNode } from 'react';
|
|
2
|
-
/**
|
|
3
|
-
* Nested bootstrap gate for a subtree. `<AbloProvider>` already ships
|
|
4
|
-
* its own built-in gate (via its `fallback` prop) that handles the
|
|
5
|
-
* common "wait for first bootstrap" case. Use `ClientSideSuspense`
|
|
6
|
-
* only when you need a SEPARATE gate inside an already-ready provider —
|
|
7
|
-
* for example, rendering app chrome immediately while gating a single
|
|
8
|
-
* heavy product surface on its own query resolving.
|
|
9
|
-
*
|
|
10
|
-
* Like the provider-level gate, this component latches open on the
|
|
11
|
-
* first `connected` / `reconnecting` / `disconnected` transition and
|
|
12
|
-
* stays open. Subsequent transient `connecting` states (hard reconnect
|
|
13
|
-
* after offline) do NOT re-show the fallback — the app has already
|
|
14
|
-
* rendered once and its own reconnect UI should take over.
|
|
15
|
-
*
|
|
16
|
-
* v0.3.x implementation is non-Suspense: reads `useSyncStatus()` and
|
|
17
|
-
* conditionally renders. v0.3.x+ will ship a
|
|
18
|
-
* `@abloatai/ablo/react/suspense` subpath where `useQuery` / `useOne`
|
|
19
|
-
* actually throw Promises; this component becomes a thin wrapper around
|
|
20
|
-
* React's real `<Suspense>` at that point.
|
|
21
|
-
*
|
|
22
|
-
* @example
|
|
23
|
-
* <AbloProvider fallback={<AppSkeleton />}>
|
|
24
|
-
* <AppChrome />
|
|
25
|
-
* <ClientSideSuspense fallback={<CanvasSkeleton />}>
|
|
26
|
-
* <HeavyCanvas />
|
|
27
|
-
* </ClientSideSuspense>
|
|
28
|
-
* </AbloProvider>
|
|
29
|
-
*/
|
|
30
|
-
export interface ClientSideSuspenseProps {
|
|
31
|
-
/** What to render while the nested subtree is waiting for first bootstrap. */
|
|
32
|
-
fallback: ReactNode;
|
|
33
|
-
/** What to render once the subtree is cleared to render. */
|
|
34
|
-
children: ReactNode;
|
|
35
|
-
}
|
|
36
|
-
export declare function ClientSideSuspense({ fallback, children }: ClientSideSuspenseProps): import("react").JSX.Element;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
-
import { useEffect, useState } from 'react';
|
|
4
|
-
import { useSyncStatus } from './useSyncStatus.js';
|
|
5
|
-
export function ClientSideSuspense({ fallback, children }) {
|
|
6
|
-
const status = useSyncStatus();
|
|
7
|
-
const [everConnected, setEverConnected] = useState(false);
|
|
8
|
-
useEffect(() => {
|
|
9
|
-
if (status.name === 'connected' ||
|
|
10
|
-
status.name === 'reconnecting' ||
|
|
11
|
-
status.name === 'disconnected') {
|
|
12
|
-
setEverConnected(true);
|
|
13
|
-
}
|
|
14
|
-
}, [status.name]);
|
|
15
|
-
const showFallback = !everConnected && status.name === 'connecting';
|
|
16
|
-
return _jsx(_Fragment, { children: showFallback ? fallback : children });
|
|
17
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Neutral loading placeholder — the default value of `<AbloProvider>`'s
|
|
3
|
-
* `fallback` prop. Rendered during the first bootstrap pass when the
|
|
4
|
-
* consumer hasn't supplied their own skeleton.
|
|
5
|
-
*
|
|
6
|
-
* Design goals:
|
|
7
|
-
* - Zero design-system dependency. Inline styles only; no CSS file,
|
|
8
|
-
* no UI-lib imports, no Tailwind assumptions.
|
|
9
|
-
* - Theme-adaptive. Uses `currentColor` for the ring so the spinner
|
|
10
|
-
* inherits the text color from whichever ancestor defines it —
|
|
11
|
-
* works in light + dark contexts without a prop.
|
|
12
|
-
* - Self-centering. Flex-centered in a full-parent container so the
|
|
13
|
-
* common case (provider at the layout root) renders a spinner in
|
|
14
|
-
* the middle of the viewport. Consumers who need different
|
|
15
|
-
* positioning compose their own fallback and pass it explicitly.
|
|
16
|
-
* - Minimal bundle footprint. The whole component + keyframe is ~50
|
|
17
|
-
* bytes gzipped.
|
|
18
|
-
*
|
|
19
|
-
* Consumers wanting a branded loader should pass `fallback={<YourSkeleton />}`
|
|
20
|
-
* on `<AbloProvider>`. Consumers wanting NO visual during bootstrap
|
|
21
|
-
* pass `fallback={null}`. Consumers who want to skip the gate entirely
|
|
22
|
-
* pass `fallback="passthrough"`.
|
|
23
|
-
*/
|
|
24
|
-
export declare function DefaultFallback(): import("react").JSX.Element;
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
/**
|
|
4
|
-
* Neutral loading placeholder — the default value of `<AbloProvider>`'s
|
|
5
|
-
* `fallback` prop. Rendered during the first bootstrap pass when the
|
|
6
|
-
* consumer hasn't supplied their own skeleton.
|
|
7
|
-
*
|
|
8
|
-
* Design goals:
|
|
9
|
-
* - Zero design-system dependency. Inline styles only; no CSS file,
|
|
10
|
-
* no UI-lib imports, no Tailwind assumptions.
|
|
11
|
-
* - Theme-adaptive. Uses `currentColor` for the ring so the spinner
|
|
12
|
-
* inherits the text color from whichever ancestor defines it —
|
|
13
|
-
* works in light + dark contexts without a prop.
|
|
14
|
-
* - Self-centering. Flex-centered in a full-parent container so the
|
|
15
|
-
* common case (provider at the layout root) renders a spinner in
|
|
16
|
-
* the middle of the viewport. Consumers who need different
|
|
17
|
-
* positioning compose their own fallback and pass it explicitly.
|
|
18
|
-
* - Minimal bundle footprint. The whole component + keyframe is ~50
|
|
19
|
-
* bytes gzipped.
|
|
20
|
-
*
|
|
21
|
-
* Consumers wanting a branded loader should pass `fallback={<YourSkeleton />}`
|
|
22
|
-
* on `<AbloProvider>`. Consumers wanting NO visual during bootstrap
|
|
23
|
-
* pass `fallback={null}`. Consumers who want to skip the gate entirely
|
|
24
|
-
* pass `fallback="passthrough"`.
|
|
25
|
-
*/
|
|
26
|
-
export function DefaultFallback() {
|
|
27
|
-
return (_jsxs("div", { role: "status", "aria-live": "polite", "aria-label": "Loading", style: {
|
|
28
|
-
display: 'flex',
|
|
29
|
-
alignItems: 'center',
|
|
30
|
-
justifyContent: 'center',
|
|
31
|
-
width: '100%',
|
|
32
|
-
minHeight: '100vh',
|
|
33
|
-
color: 'currentColor',
|
|
34
|
-
}, children: [_jsx("div", { style: {
|
|
35
|
-
width: 24,
|
|
36
|
-
height: 24,
|
|
37
|
-
border: '2px solid currentColor',
|
|
38
|
-
borderTopColor: 'transparent',
|
|
39
|
-
borderRadius: '50%',
|
|
40
|
-
opacity: 0.6,
|
|
41
|
-
animation: 'ablo-default-fallback-spin 0.8s linear infinite',
|
|
42
|
-
} }), _jsx("style", { children: `@keyframes ablo-default-fallback-spin { to { transform: rotate(360deg); } }` })] }));
|
|
43
|
-
}
|
package/dist/react/context.d.ts
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { type ReactNode } from 'react';
|
|
2
|
-
import type { Schema } from '../transaction/schema/schema.js';
|
|
3
|
-
import type { SyncStoreContract } from '../core/storeContract.js';
|
|
4
|
-
export type { SyncStoreContract, LocalMutation } from '../core/storeContract.js';
|
|
5
|
-
export interface SyncReactContext {
|
|
6
|
-
store: SyncStoreContract;
|
|
7
|
-
/** The organization id used as the default scope for reads and writes. */
|
|
8
|
-
organizationId: string;
|
|
9
|
-
/**
|
|
10
|
-
* An optional schema. When provided, hooks that take a model by name (such as
|
|
11
|
-
* `useQuery('tasks')`) read that model's metadata from this schema, so
|
|
12
|
-
* callers don't pass a schema at every call site. When omitted, those hooks
|
|
13
|
-
* require the schema as an argument instead.
|
|
14
|
-
*
|
|
15
|
-
* The field is loosely typed here because a single runtime context value is
|
|
16
|
-
* shared by every hook. Precise per-model types come from your `Register`
|
|
17
|
-
* module augmentation
|
|
18
|
-
* (`declare module '@abloatai/ablo' { interface Register { Schema: typeof schema } }`),
|
|
19
|
-
* not from this reference.
|
|
20
|
-
*/
|
|
21
|
-
schema?: Schema;
|
|
22
|
-
}
|
|
23
|
-
export declare const SyncContext: import("react").Context<SyncReactContext | null>;
|
|
24
|
-
/**
|
|
25
|
-
* Reads the sync store context from inside a provider subtree, throwing a clear
|
|
26
|
-
* error when no provider is mounted above. `<AbloProvider>` supplies this
|
|
27
|
-
* context by rendering the internal {@link SyncProvider}; you wire
|
|
28
|
-
* `<AbloProvider client={ablo}>` rather than touching this directly.
|
|
29
|
-
*/
|
|
30
|
-
export declare function useSyncContext(): SyncReactContext;
|
|
31
|
-
/**
|
|
32
|
-
* Props for SyncProvider.
|
|
33
|
-
*/
|
|
34
|
-
export interface SyncProviderProps {
|
|
35
|
-
/** The sync store, which must implement {@link SyncStoreContract}. */
|
|
36
|
-
store: SyncStoreContract;
|
|
37
|
-
/** The organization id used as the default scope for reads and writes. */
|
|
38
|
-
organizationId: string;
|
|
39
|
-
/**
|
|
40
|
-
* An optional schema. Provide it to enable hooks that take a model by name
|
|
41
|
-
* (such as `useQuery('tasks')`); the model types also narrow through your
|
|
42
|
-
* `Register` augmentation. Omit it to pass the schema to those hooks directly
|
|
43
|
-
* instead.
|
|
44
|
-
*/
|
|
45
|
-
schema?: Schema;
|
|
46
|
-
children?: ReactNode;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* A low-level provider that places a built sync store on React context so the
|
|
50
|
-
* data hooks can reach it. This is an internal building block: it is not part
|
|
51
|
-
* of the package's public entry point. Reach for `<AbloProvider>` instead,
|
|
52
|
-
* which builds the store from your `Ablo({ schema, apiKey })` client and
|
|
53
|
-
* renders this provider underneath.
|
|
54
|
-
*/
|
|
55
|
-
export declare function SyncProvider({ store, organizationId, schema, children, }: SyncProviderProps): import("react").FunctionComponentElement<import("react").ProviderProps<SyncReactContext | null>>;
|
package/dist/react/context.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { createContext, createElement, useContext } from 'react';
|
|
3
|
-
import { AbloValidationError } from '../transaction/errors.js';
|
|
4
|
-
export const SyncContext = createContext(null);
|
|
5
|
-
/**
|
|
6
|
-
* Reads the sync store context from inside a provider subtree, throwing a clear
|
|
7
|
-
* error when no provider is mounted above. `<AbloProvider>` supplies this
|
|
8
|
-
* context by rendering the internal {@link SyncProvider}; you wire
|
|
9
|
-
* `<AbloProvider client={ablo}>` rather than touching this directly.
|
|
10
|
-
*/
|
|
11
|
-
export function useSyncContext() {
|
|
12
|
-
const ctx = useContext(SyncContext);
|
|
13
|
-
if (!ctx) {
|
|
14
|
-
throw new AbloValidationError('Sync hooks must be used within an <AbloProvider>.', {
|
|
15
|
-
code: 'sync_context_missing_provider',
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
return ctx;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* A low-level provider that places a built sync store on React context so the
|
|
22
|
-
* data hooks can reach it. This is an internal building block: it is not part
|
|
23
|
-
* of the package's public entry point. Reach for `<AbloProvider>` instead,
|
|
24
|
-
* which builds the store from your `Ablo({ schema, apiKey })` client and
|
|
25
|
-
* renders this provider underneath.
|
|
26
|
-
*/
|
|
27
|
-
export function SyncProvider({ store, organizationId, schema, children, }) {
|
|
28
|
-
return createElement(SyncContext.Provider, { value: { store, organizationId, schema } }, children);
|
|
29
|
-
}
|
package/dist/react/index.d.ts
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* React bindings for `@abloatai/ablo`.
|
|
3
|
-
*
|
|
4
|
-
* # Provider
|
|
5
|
-
*
|
|
6
|
-
* Build a client once — at module scope or with `useMemo` — and wrap your tree:
|
|
7
|
-
*
|
|
8
|
-
* const ablo = Ablo({ schema, apiKey })
|
|
9
|
-
* <AbloProvider client={ablo} fallback={<Skeleton/>}>
|
|
10
|
-
*
|
|
11
|
-
* `client` is the only required prop; you construct it, and the provider is the
|
|
12
|
-
* thin reactive binding around it. The provider owns the sync-engine and
|
|
13
|
-
* multiplayer lifecycle. Its `fallback` gates children until the first sync
|
|
14
|
-
* bootstrap completes — pass `fallback="passthrough"` to render children
|
|
15
|
-
* immediately. `userId` is optional and informational.
|
|
16
|
-
*
|
|
17
|
-
* {@link ClientSideSuspense} adds a nested gate inside an already-ready
|
|
18
|
-
* provider. Reach for it only when a heavy subtree, such as a canvas, needs its
|
|
19
|
-
* own gate while the rest of the app renders right away; the provider-level
|
|
20
|
-
* `fallback` is the usual path.
|
|
21
|
-
*
|
|
22
|
-
* # Data hooks
|
|
23
|
-
*
|
|
24
|
-
* useAblo((ablo) => ablo.tasks.local.retrieve(id)) — subscribe to a local snapshot (the main read API)
|
|
25
|
-
* useAblo() — the typed client, for callbacks and effects:
|
|
26
|
-
* synchronous local reads (`ablo.<model>.local.retrieve`/`local.list`),
|
|
27
|
-
* async server reads (`retrieve`/`list`),
|
|
28
|
-
* and writes (`create`/`update`/`delete`)
|
|
29
|
-
* useMutators(defs, opts?) — define custom mutators
|
|
30
|
-
* useUndoScope(name) — per-surface undo and redo
|
|
31
|
-
*
|
|
32
|
-
* # Status and errors
|
|
33
|
-
*
|
|
34
|
-
* useSyncStatus() — a discriminated-union snapshot of the sync lifecycle
|
|
35
|
-
* useErrorListener(cb) — an imperative error callback, for telemetry or toasts
|
|
36
|
-
* useCurrentUserId() — the provider's `userId` prop
|
|
37
|
-
*
|
|
38
|
-
* # Multiplayer
|
|
39
|
-
*
|
|
40
|
-
* Multiplayer is always available, because `<AbloProvider>` always constructs a
|
|
41
|
-
* client:
|
|
42
|
-
*
|
|
43
|
-
* useAblo((ablo) => ablo.<model>.claim.state(...)) — reactive coordination reads
|
|
44
|
-
* useJoin({ scope }) — join a scope to get its peers and claims
|
|
45
|
-
*/
|
|
46
|
-
export type { DefaultSyncShape, ResolveSchema, ResolveUserMeta, ResolveClaimMeta, ResolveModelKey, } from '../transaction/types/global.js';
|
|
47
|
-
export { AbloProvider, useJoin, usePeers, useSync, useSyncStore, type AbloProviderProps, type ParticipantScope, type ParticipantStatus, type UseJoinOptions, type UseJoinReturn, } from './AbloProvider.js';
|
|
48
|
-
export { ClientSideSuspense, type ClientSideSuspenseProps, } from './ClientSideSuspense.js';
|
|
49
|
-
export { DefaultFallback } from './DefaultFallback.js';
|
|
50
|
-
export type { SyncStoreContract } from './context.js';
|
|
51
|
-
export { useSyncStatus, type SyncStatusSnapshot, } from './useSyncStatus.js';
|
|
52
|
-
export { useErrorListener } from './useErrorListener.js';
|
|
53
|
-
export { useMutationFailureListener, type MutationFailurePayload, } from './useMutationFailureListener.js';
|
|
54
|
-
export { useCurrentUserId } from './useCurrentUserId.js';
|
|
55
|
-
export { useReactive } from './useReactive.js';
|
|
56
|
-
export type { MutateActions } from '../mutators/mutateActions.js';
|
|
57
|
-
export type { ReaderActions, ReaderFindOptions } from '../mutators/readerActions.js';
|
|
58
|
-
export { useMutators, type MutatorInvokers, type InvokerFor, type UseMutatorsOptions, } from './useMutators.js';
|
|
59
|
-
export { useUndoScope, type UseUndoScopeResult } from './useUndoScope.js';
|
|
60
|
-
export { useAblo, type UseAbloHydratedModelResult, type UseAbloModelOptions, type UseAbloModelResult, } from './useAblo.js';
|
|
61
|
-
export { ModelScope } from '../transaction/types/index.js';
|
package/dist/react/index.js
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* React bindings for `@abloatai/ablo`.
|
|
3
|
-
*
|
|
4
|
-
* # Provider
|
|
5
|
-
*
|
|
6
|
-
* Build a client once — at module scope or with `useMemo` — and wrap your tree:
|
|
7
|
-
*
|
|
8
|
-
* const ablo = Ablo({ schema, apiKey })
|
|
9
|
-
* <AbloProvider client={ablo} fallback={<Skeleton/>}>
|
|
10
|
-
*
|
|
11
|
-
* `client` is the only required prop; you construct it, and the provider is the
|
|
12
|
-
* thin reactive binding around it. The provider owns the sync-engine and
|
|
13
|
-
* multiplayer lifecycle. Its `fallback` gates children until the first sync
|
|
14
|
-
* bootstrap completes — pass `fallback="passthrough"` to render children
|
|
15
|
-
* immediately. `userId` is optional and informational.
|
|
16
|
-
*
|
|
17
|
-
* {@link ClientSideSuspense} adds a nested gate inside an already-ready
|
|
18
|
-
* provider. Reach for it only when a heavy subtree, such as a canvas, needs its
|
|
19
|
-
* own gate while the rest of the app renders right away; the provider-level
|
|
20
|
-
* `fallback` is the usual path.
|
|
21
|
-
*
|
|
22
|
-
* # Data hooks
|
|
23
|
-
*
|
|
24
|
-
* useAblo((ablo) => ablo.tasks.local.retrieve(id)) — subscribe to a local snapshot (the main read API)
|
|
25
|
-
* useAblo() — the typed client, for callbacks and effects:
|
|
26
|
-
* synchronous local reads (`ablo.<model>.local.retrieve`/`local.list`),
|
|
27
|
-
* async server reads (`retrieve`/`list`),
|
|
28
|
-
* and writes (`create`/`update`/`delete`)
|
|
29
|
-
* useMutators(defs, opts?) — define custom mutators
|
|
30
|
-
* useUndoScope(name) — per-surface undo and redo
|
|
31
|
-
*
|
|
32
|
-
* # Status and errors
|
|
33
|
-
*
|
|
34
|
-
* useSyncStatus() — a discriminated-union snapshot of the sync lifecycle
|
|
35
|
-
* useErrorListener(cb) — an imperative error callback, for telemetry or toasts
|
|
36
|
-
* useCurrentUserId() — the provider's `userId` prop
|
|
37
|
-
*
|
|
38
|
-
* # Multiplayer
|
|
39
|
-
*
|
|
40
|
-
* Multiplayer is always available, because `<AbloProvider>` always constructs a
|
|
41
|
-
* client:
|
|
42
|
-
*
|
|
43
|
-
* useAblo((ablo) => ablo.<model>.claim.state(...)) — reactive coordination reads
|
|
44
|
-
* useJoin({ scope }) — join a scope to get its peers and claims
|
|
45
|
-
*/
|
|
46
|
-
// ── Umbrella provider + lifecycle hooks ────────────────────────────
|
|
47
|
-
export { AbloProvider, useJoin, usePeers, useSync, useSyncStore, } from './AbloProvider.js';
|
|
48
|
-
export { ClientSideSuspense, } from './ClientSideSuspense.js';
|
|
49
|
-
export { DefaultFallback } from './DefaultFallback.js';
|
|
50
|
-
// ── Status + errors + identity ─────────────────────────────────────
|
|
51
|
-
export { useSyncStatus, } from './useSyncStatus.js';
|
|
52
|
-
export { useErrorListener } from './useErrorListener.js';
|
|
53
|
-
export { useMutationFailureListener, } from './useMutationFailureListener.js';
|
|
54
|
-
export { useCurrentUserId } from './useCurrentUserId.js';
|
|
55
|
-
// ── Primitive for building custom reactive hooks ──────────────────
|
|
56
|
-
//
|
|
57
|
-
// Consumers building bespoke hooks on top of the SDK should call
|
|
58
|
-
// `useReactive(() => compute())` instead of reaching for React's
|
|
59
|
-
// lower-level `useSyncExternalStore`. Hides the cached-snapshot
|
|
60
|
-
// contract and handles default structural equality for arrays.
|
|
61
|
-
export { useReactive } from './useReactive.js';
|
|
62
|
-
export { useMutators, } from './useMutators.js';
|
|
63
|
-
export { useUndoScope } from './useUndoScope.js';
|
|
64
|
-
export { useAblo, } from './useAblo.js';
|
|
65
|
-
// ── ModelScope re-export ───────────────────────────────────────────
|
|
66
|
-
export { ModelScope } from '../transaction/types/index.js';
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import type { Ablo } from '../client/Ablo.js';
|
|
2
|
-
import type { SchemaRecord } from '../transaction/schema/schema.js';
|
|
3
|
-
/**
|
|
4
|
-
* The context that `<AbloProvider>` populates for its own hooks. It is kept
|
|
5
|
-
* separate from the data-hook context, which carries the store and schema,
|
|
6
|
-
* because these fields belong to the provider rather than to the store. Read
|
|
7
|
-
* them through the typed hooks such as `useCurrentUserId` and
|
|
8
|
-
* `useErrorListener` rather than reaching into this context directly.
|
|
9
|
-
*/
|
|
10
|
-
export interface AbloInternalContextValue {
|
|
11
|
-
/**
|
|
12
|
-
* The application user id, when your app passed one to `<AbloProvider>`. Sync
|
|
13
|
-
* identity is derived on the server from the API key, so this is `null`
|
|
14
|
-
* unless you set it, and it is not required for sync to work.
|
|
15
|
-
*/
|
|
16
|
-
currentUserId: string | null;
|
|
17
|
-
/** Subscribe to provider-level errors: engine errors, bootstrap failures, and session issues. */
|
|
18
|
-
subscribeError: (listener: (error: Error) => void) => () => void;
|
|
19
|
-
/** Emit an error to every subscribed listener. The provider calls this for you. */
|
|
20
|
-
emitError: (error: Error) => void;
|
|
21
|
-
/**
|
|
22
|
-
* The typed `Ablo` client for this provider, or `null` until the first sync
|
|
23
|
-
* bootstrap resolves. It is held here so `useSync()` can return it without
|
|
24
|
-
* reaching into the store; the client and the store are sibling objects, and
|
|
25
|
-
* neither is derived from the other.
|
|
26
|
-
*
|
|
27
|
-
* It is typed loosely as `Ablo<SchemaRecord>` because generics do not flow
|
|
28
|
-
* through React context. `useSync<R>()` restores the precise type through its
|
|
29
|
-
* own generic; the runtime value is the fully typed client.
|
|
30
|
-
*/
|
|
31
|
-
engine: Ablo<SchemaRecord> | null;
|
|
32
|
-
}
|
|
33
|
-
export declare const AbloInternalContext: import("react").Context<AbloInternalContextValue | null>;
|
package/dist/react/useAblo.d.ts
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import type { Ablo, AbloReads, ModelClaim } from '../client/Ablo.js';
|
|
2
|
-
import type { ModelOperations } from '../client/createModelProxy.js';
|
|
3
|
-
import type { SchemaRecord } from '../transaction/schema/schema.js';
|
|
4
|
-
import type { ResolveSchema } from '../transaction/types/global.js';
|
|
5
|
-
/**
|
|
6
|
-
* The app's resolved schema-record type. It reads your `Register` module
|
|
7
|
-
* augmentation when you declare one and falls back to the loose
|
|
8
|
-
* {@link SchemaRecord} otherwise, so `useAblo()` returns a fully typed client
|
|
9
|
-
* without you passing `<(typeof schema)['models']>` at every call site.
|
|
10
|
-
*/
|
|
11
|
-
type DefaultModels = ResolveSchema extends {
|
|
12
|
-
models: infer M;
|
|
13
|
-
} ? M extends SchemaRecord ? M : SchemaRecord : SchemaRecord;
|
|
14
|
-
type ModelClientSelector<R extends SchemaRecord, T, C> = (ablo: AbloReads<R>) => ModelOperations<T, C>;
|
|
15
|
-
type AbloSelector<R extends SchemaRecord, T> = (ablo: AbloReads<R>) => T;
|
|
16
|
-
export interface UseAbloModelOptions<T> {
|
|
17
|
-
/**
|
|
18
|
-
* An initial row, usually from a server component or a route loader. The hook
|
|
19
|
-
* returns it until sync delivers a newer row for the same id.
|
|
20
|
-
*/
|
|
21
|
-
readonly initial?: T;
|
|
22
|
-
}
|
|
23
|
-
export interface UseAbloModelResult<T> {
|
|
24
|
-
/** The current row for the id, or `initial` until the row has synced. */
|
|
25
|
-
readonly data: T | undefined;
|
|
26
|
-
/** The work claims currently held on this row by any participant. */
|
|
27
|
-
readonly claims: readonly ModelClaim[];
|
|
28
|
-
/** True while another participant holds a claim — handy for disabling UI. */
|
|
29
|
-
readonly claimed: boolean;
|
|
30
|
-
}
|
|
31
|
-
export type UseAbloHydratedModelResult<T> = Omit<UseAbloModelResult<T>, 'data'> & {
|
|
32
|
-
readonly data: T;
|
|
33
|
-
};
|
|
34
|
-
/**
|
|
35
|
-
* Reads Ablo from inside an `<AbloProvider>` subtree. Called with no arguments
|
|
36
|
-
* it returns the typed client for use in callbacks and effects; called with a
|
|
37
|
-
* selector it subscribes the component to a reactive read — such as one
|
|
38
|
-
* `ablo.<model>` row — and re-renders when that read changes.
|
|
39
|
-
*
|
|
40
|
-
* You can call it with no type arguments once you declare the `Register` module
|
|
41
|
-
* augmentation (`declare module '@abloatai/ablo' { interface Register {
|
|
42
|
-
* Schema: typeof schema } }`); the default type then resolves through your
|
|
43
|
-
* schema's models, so call sites stay clean:
|
|
44
|
-
*
|
|
45
|
-
* ```ts
|
|
46
|
-
* // With the Register augmentation (recommended):
|
|
47
|
-
* const ablo = useAblo();
|
|
48
|
-
* if (!ablo) return <Loading />;
|
|
49
|
-
* const doc = await ablo.documents.retrieve({ id }); // async server read
|
|
50
|
-
*
|
|
51
|
-
* // Reactive selector (a synchronous local snapshot). The selector's reads
|
|
52
|
-
* // are typed as snapshot rows — data fields + computeds, no relation
|
|
53
|
-
* // accessors — matching what the hook actually returns:
|
|
54
|
-
* const doc = useAblo((ablo) => ablo.documents.local.retrieve(id)) ?? serverDoc;
|
|
55
|
-
* const active = useAblo((ablo) => ablo.documents.claim.state({ id }));
|
|
56
|
-
*
|
|
57
|
-
* // Without the augmentation, pass the schema as a type argument:
|
|
58
|
-
* const ablo = useAblo<(typeof schema)['models']>();
|
|
59
|
-
* ```
|
|
60
|
-
*
|
|
61
|
-
* The no-argument form returns `null` while the engine is still bootstrapping.
|
|
62
|
-
* Branch on `null` and render a loading state — or gate on `useSyncStatus()`
|
|
63
|
-
* reaching `'connected'` — before calling model methods.
|
|
64
|
-
*/
|
|
65
|
-
export declare function useAblo<R extends SchemaRecord = DefaultModels>(): Ablo<R> | null;
|
|
66
|
-
export declare function useAblo<R extends SchemaRecord = DefaultModels, T = unknown>(select: AbloSelector<R, T>): T | undefined;
|
|
67
|
-
export declare function useAblo<T, C>(modelClient: ModelOperations<T, C>, id: string, options: UseAbloModelOptions<T> & {
|
|
68
|
-
readonly initial: T;
|
|
69
|
-
}): UseAbloHydratedModelResult<T>;
|
|
70
|
-
export declare function useAblo<R extends SchemaRecord = DefaultModels, T = Record<string, unknown>, C = unknown>(select: ModelClientSelector<R, T, C>, id: string, options: UseAbloModelOptions<T> & {
|
|
71
|
-
readonly initial: T;
|
|
72
|
-
}): UseAbloHydratedModelResult<T>;
|
|
73
|
-
export declare function useAblo<T, C>(modelClient: ModelOperations<T, C>, id: string, options?: UseAbloModelOptions<T>): UseAbloModelResult<T>;
|
|
74
|
-
export declare function useAblo<R extends SchemaRecord = DefaultModels, T = Record<string, unknown>, C = unknown>(select: ModelClientSelector<R, T, C>, id: string, options?: UseAbloModelOptions<T>): UseAbloModelResult<T>;
|
|
75
|
-
export {};
|
package/dist/react/useAblo.js
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { useContext, useEffect, useState } from 'react';
|
|
3
|
-
import { AbloInternalContext } from './internalContext.js';
|
|
4
|
-
import { getModelClientMeta } from '../client/createModelProxy.js';
|
|
5
|
-
import { Model } from '../Model.js';
|
|
6
|
-
import { useReactive } from './useReactive.js';
|
|
7
|
-
const EMPTY_CLAIMS = Object.freeze([]);
|
|
8
|
-
/**
|
|
9
|
-
* Restore the caller's schema generics on the context-held engine. React
|
|
10
|
-
* context erases generics (see `AbloInternalContextValue.engine`), so this is
|
|
11
|
-
* the one deliberate rebind point: the runtime value is the fully typed
|
|
12
|
-
* client, and `R` is the compile-time view the calling hook declared.
|
|
13
|
-
*/
|
|
14
|
-
function rebindEngine(engine) {
|
|
15
|
-
return engine;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* The same rebind viewed through the reactive-read surface — the identical
|
|
19
|
-
* runtime object, with model reads typed as snapshot rows, because everything
|
|
20
|
-
* a selector returns is converted through `snapshotValue` before the hook
|
|
21
|
-
* hands it back.
|
|
22
|
-
*/
|
|
23
|
-
function reactiveReads(engine) {
|
|
24
|
-
return rebindEngine(engine);
|
|
25
|
-
}
|
|
26
|
-
function readModelResult(engine, modelClient, id, initial) {
|
|
27
|
-
if (!modelClient || id === undefined) {
|
|
28
|
-
return { data: initial, claims: EMPTY_CLAIMS, claimed: false };
|
|
29
|
-
}
|
|
30
|
-
const data = snapshotValue(modelClient.local.retrieve(id) ?? initial);
|
|
31
|
-
const meta = getModelClientMeta(modelClient);
|
|
32
|
-
const claims = meta && engine
|
|
33
|
-
? engine.claims.list({ model: meta.key, id })
|
|
34
|
-
: EMPTY_CLAIMS;
|
|
35
|
-
return { data, claims, claimed: claims.length > 0 };
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Projects a reactive read into the value that `useReactive` caches and
|
|
39
|
-
* returns.
|
|
40
|
-
*
|
|
41
|
-
* For a `Model`, this reads the row's fields through `toReactiveSnapshot`
|
|
42
|
-
* rather than returning the instance itself. Property access is what subscribes
|
|
43
|
-
* the reaction to those fields, so the read has to happen inside this tracked
|
|
44
|
-
* function; returning the live instance without reading its fields would leave
|
|
45
|
-
* the component blind to later edits. The fresh object it produces also lets
|
|
46
|
-
* `useReactive`'s equality check detect an in-place update.
|
|
47
|
-
*/
|
|
48
|
-
function snapshotValue(value) {
|
|
49
|
-
if (value instanceof Model) {
|
|
50
|
-
return value.toReactiveSnapshot();
|
|
51
|
-
}
|
|
52
|
-
if (Array.isArray(value)) {
|
|
53
|
-
return value.map((item) => snapshotValue(item));
|
|
54
|
-
}
|
|
55
|
-
return value;
|
|
56
|
-
}
|
|
57
|
-
export function useAblo(modelOrSelect, id, options) {
|
|
58
|
-
const ctx = useContext(AbloInternalContext);
|
|
59
|
-
const engine = ctx?.engine ?? null;
|
|
60
|
-
const initial = options?.initial;
|
|
61
|
-
const isSelectorOnly = typeof modelOrSelect === 'function' && id === undefined;
|
|
62
|
-
const modelClient = typeof modelOrSelect === 'function' && id !== undefined
|
|
63
|
-
? engine
|
|
64
|
-
? modelOrSelect(reactiveReads(engine))
|
|
65
|
-
: undefined
|
|
66
|
-
: typeof modelOrSelect === 'function'
|
|
67
|
-
? undefined
|
|
68
|
-
: modelOrSelect;
|
|
69
|
-
// Claims arrive through an event emitter (engine.claims), not through MobX, so
|
|
70
|
-
// the useReactive reactions below cannot track them; we bridge changes with a
|
|
71
|
-
// setState bump instead. Only the model-row form (`id !== undefined`) reads
|
|
72
|
-
// claims, so we subscribe only when `id` is set. The selector-only form never
|
|
73
|
-
// reads claims, and subscribing it to the workspace-wide claim stream would
|
|
74
|
-
// re-render and recompute it on every claim or presence change anywhere — a
|
|
75
|
-
// real storm during AI editing or live collaboration — for a value that cannot
|
|
76
|
-
// change.
|
|
77
|
-
const [claimVersion, setClaimVersion] = useState(0);
|
|
78
|
-
useEffect(() => {
|
|
79
|
-
if (!engine || id === undefined)
|
|
80
|
-
return;
|
|
81
|
-
return engine.claims.onChange(() => { setClaimVersion((version) => version + 1); });
|
|
82
|
-
}, [engine, id]);
|
|
83
|
-
const selected = useReactive(() => {
|
|
84
|
-
if (!engine || !isSelectorOnly || typeof modelOrSelect !== 'function') {
|
|
85
|
-
return undefined;
|
|
86
|
-
}
|
|
87
|
-
// The selector runs against the real engine — reads inside it return the
|
|
88
|
-
// pool's model instances. `snapshotValue` then converts the RESULT to
|
|
89
|
-
// plain snapshot rows, which is what the selector's `AbloReads`
|
|
90
|
-
// parameter type already promised.
|
|
91
|
-
return snapshotValue(modelOrSelect(reactiveReads(engine)));
|
|
92
|
-
});
|
|
93
|
-
const modelResult = useReactive(() => {
|
|
94
|
-
void claimVersion;
|
|
95
|
-
return readModelResult(engine, modelClient, id, initial);
|
|
96
|
-
});
|
|
97
|
-
if (isSelectorOnly)
|
|
98
|
-
return selected;
|
|
99
|
-
if (modelOrSelect)
|
|
100
|
-
return modelResult;
|
|
101
|
-
return engine === null ? null : rebindEngine(engine);
|
|
102
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Returns the application user id passed to the nearest `<AbloProvider>`, or
|
|
3
|
-
* `null` when your app did not provide one.
|
|
4
|
-
*
|
|
5
|
-
* Sync identity is resolved on the server from the API key or session, so this
|
|
6
|
-
* value is not required for sync to connect. It is here for your app's own
|
|
7
|
-
* fields — an assignee id, a presence label, a permission check — where the
|
|
8
|
-
* current user matters to your data rather than to the sync layer. Reach for it
|
|
9
|
-
* in leaf components that need the id, for example to fill in a mutation
|
|
10
|
-
* payload.
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* function TaskRow({ id }) {
|
|
14
|
-
* const userId = useCurrentUserId();
|
|
15
|
-
* const ablo = useAblo();
|
|
16
|
-
* if (!userId) return null;
|
|
17
|
-
* return <button onClick={() => ablo?.tasks.update({ id, data: { assigneeId: userId } })}>
|
|
18
|
-
* Assign to me
|
|
19
|
-
* </button>;
|
|
20
|
-
* }
|
|
21
|
-
*/
|
|
22
|
-
export declare function useCurrentUserId(): string | null;
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { useContext } from 'react';
|
|
3
|
-
import { AbloInternalContext } from './internalContext.js';
|
|
4
|
-
import { AbloValidationError } from '../transaction/errors.js';
|
|
5
|
-
/**
|
|
6
|
-
* Returns the application user id passed to the nearest `<AbloProvider>`, or
|
|
7
|
-
* `null` when your app did not provide one.
|
|
8
|
-
*
|
|
9
|
-
* Sync identity is resolved on the server from the API key or session, so this
|
|
10
|
-
* value is not required for sync to connect. It is here for your app's own
|
|
11
|
-
* fields — an assignee id, a presence label, a permission check — where the
|
|
12
|
-
* current user matters to your data rather than to the sync layer. Reach for it
|
|
13
|
-
* in leaf components that need the id, for example to fill in a mutation
|
|
14
|
-
* payload.
|
|
15
|
-
*
|
|
16
|
-
* @example
|
|
17
|
-
* function TaskRow({ id }) {
|
|
18
|
-
* const userId = useCurrentUserId();
|
|
19
|
-
* const ablo = useAblo();
|
|
20
|
-
* if (!userId) return null;
|
|
21
|
-
* return <button onClick={() => ablo?.tasks.update({ id, data: { assigneeId: userId } })}>
|
|
22
|
-
* Assign to me
|
|
23
|
-
* </button>;
|
|
24
|
-
* }
|
|
25
|
-
*/
|
|
26
|
-
export function useCurrentUserId() {
|
|
27
|
-
const ctx = useContext(AbloInternalContext);
|
|
28
|
-
if (!ctx) {
|
|
29
|
-
throw new AbloValidationError('useCurrentUserId: no <AbloProvider> mounted above this component. ' +
|
|
30
|
-
'Wrap your tree with <AbloProvider ...> from ' +
|
|
31
|
-
'@abloatai/ablo/react.', { code: 'no_ablo_provider' });
|
|
32
|
-
}
|
|
33
|
-
return ctx.currentUserId;
|
|
34
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Registers a callback that runs whenever the provider surfaces an error. This
|
|
3
|
-
* covers engine errors such as bootstrap failures and mutation rejections,
|
|
4
|
-
* WebSocket errors, and uncaught exceptions thrown inside `postBootstrap`
|
|
5
|
-
* hooks.
|
|
6
|
-
*
|
|
7
|
-
* Use it for side effects that should not cause a re-render — telemetry,
|
|
8
|
-
* logging, or a toast. The callback is held in a ref, so a re-render does not
|
|
9
|
-
* resubscribe.
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* function ErrorToaster() {
|
|
13
|
-
* useErrorListener((err) => {
|
|
14
|
-
* toast.error(err.message);
|
|
15
|
-
* Sentry.captureException(err);
|
|
16
|
-
* });
|
|
17
|
-
* return null;
|
|
18
|
-
* }
|
|
19
|
-
*/
|
|
20
|
-
export declare function useErrorListener(listener: (error: Error) => void): void;
|