@abloatai/ablo 0.34.1 → 0.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +2 -1
- package/CHANGELOG.md +758 -5
- package/README.md +56 -502
- package/bin/ablo.cjs +39 -0
- package/dist/BaseSyncedStore.d.ts +176 -48
- package/dist/BaseSyncedStore.js +346 -214
- package/dist/Database.d.ts +17 -44
- package/dist/Database.js +96 -79
- package/dist/InstanceCache.d.ts +31 -6
- package/dist/InstanceCache.js +65 -30
- package/dist/LazyReferenceCollection.d.ts +3 -3
- package/dist/LazyReferenceCollection.js +4 -4
- package/dist/Model.d.ts +23 -13
- package/dist/Model.js +27 -17
- package/dist/ModelRegistry.d.ts +8 -4
- package/dist/ModelRegistry.js +20 -18
- package/dist/NetworkMonitor.d.ts +3 -1
- package/dist/NetworkMonitor.js +7 -5
- package/dist/{SyncEngineContext.d.ts → RuntimeContext.d.ts} +20 -13
- package/dist/{SyncEngineContext.js → RuntimeContext.js} +11 -12
- package/dist/SyncClient.d.ts +47 -47
- package/dist/SyncClient.js +215 -156
- package/dist/ai-sdk/coordinatedTool.d.ts +2 -2
- package/dist/ai-sdk/coordinatedTool.js +1 -1
- package/dist/ai-sdk/coordinationContext.d.ts +2 -2
- package/dist/ai-sdk/coordinationContext.js +1 -1
- package/dist/ai-sdk/wrap.d.ts +3 -3
- package/dist/ai-sdk/wrap.js +2 -2
- package/dist/auth/index.d.ts +1 -156
- package/dist/auth/index.js +8 -301
- package/dist/client/Ablo.d.ts +42 -287
- package/dist/client/Ablo.js +129 -963
- package/dist/client/abloClient.d.ts +309 -0
- package/dist/client/abloClient.js +13 -0
- package/dist/client/clientPrelude.d.ts +52 -0
- package/dist/client/clientPrelude.js +60 -0
- package/dist/client/consoleLogger.d.ts +2 -2
- package/dist/client/coreClient.d.ts +60 -0
- package/dist/client/coreClient.js +118 -0
- package/dist/client/createInternalComponents.d.ts +8 -4
- package/dist/client/createInternalComponents.js +17 -10
- package/dist/client/createModelProxy.d.ts +98 -373
- package/dist/client/createModelProxy.js +233 -139
- package/dist/client/humans.d.ts +69 -0
- package/dist/client/humans.js +78 -0
- package/dist/client/modelRegistration.d.ts +1 -1
- package/dist/client/modelRegistration.js +9 -9
- package/dist/client/options.d.ts +73 -17
- package/dist/client/reactiveEngine.d.ts +53 -0
- package/dist/client/reactiveEngine.js +688 -0
- package/dist/client/resourceTypes.d.ts +9 -250
- package/dist/client/resourceTypes.js +8 -5
- package/dist/client/schemaConfig.d.ts +4 -4
- package/dist/client/schemaConfig.js +6 -2
- package/dist/client/storeCluster.d.ts +47 -0
- package/dist/client/storeCluster.js +118 -0
- package/dist/client/storeLifecycle.d.ts +61 -0
- package/dist/client/storeLifecycle.js +231 -0
- package/dist/client/validateAbloOptions.d.ts +3 -2
- package/dist/client/validateAbloOptions.js +1 -1
- package/dist/client/wsMutationExecutor.d.ts +3 -3
- package/dist/client/wsMutationExecutor.js +3 -3
- package/dist/context.d.ts +22 -9
- package/dist/context.js +33 -9
- package/dist/coordination/ClaimLog.d.ts +26 -0
- package/dist/coordination/ClaimLog.js +32 -0
- package/dist/coordination/index.d.ts +1 -15
- package/dist/coordination/index.js +8 -31
- package/dist/core/index.d.ts +3 -3
- package/dist/core/index.js +2 -2
- package/dist/docs/catalog.d.ts +72 -0
- package/dist/docs/catalog.js +230 -0
- package/dist/docs/index.d.ts +10 -0
- package/dist/docs/index.js +10 -0
- package/dist/environment.d.ts +1 -40
- package/dist/environment.js +8 -37
- package/dist/index.d.ts +44 -36
- package/dist/index.js +30 -22
- package/dist/interfaces/index.d.ts +44 -134
- package/dist/keys/index.d.ts +1 -77
- package/dist/keys/index.js +8 -190
- package/dist/mutators/{RecordingTransaction.d.ts → RecordingMutation.d.ts} +4 -4
- package/dist/mutators/{RecordingTransaction.js → RecordingMutation.js} +2 -2
- package/dist/mutators/Transaction.d.ts +1 -1
- package/dist/mutators/Transaction.js +1 -1
- package/dist/mutators/UndoManager.d.ts +6 -6
- package/dist/mutators/UndoManager.js +5 -5
- package/dist/mutators/defineMutators.d.ts +3 -3
- package/dist/mutators/defineMutators.js +1 -1
- package/dist/mutators/inverseOp.js +2 -2
- package/dist/mutators/mutateActions.d.ts +3 -3
- package/dist/mutators/mutateActions.js +1 -1
- package/dist/mutators/readerActions.d.ts +1 -1
- package/dist/mutators/undoApply.d.ts +1 -1
- package/dist/mutators/undoApply.js +1 -1
- package/dist/policy/index.d.ts +2 -2
- package/dist/policy/index.js +1 -1
- package/dist/query/client.d.ts +5 -2
- package/dist/query/client.js +10 -9
- package/dist/query/types.d.ts +6 -41
- package/dist/query/types.js +2 -2
- package/dist/react/AbloProvider.d.ts +18 -8
- package/dist/react/AbloProvider.js +10 -9
- package/dist/react/context.d.ts +3 -3
- package/dist/react/context.js +1 -1
- package/dist/react/createAbloReact.d.ts +56 -0
- package/dist/react/createAbloReact.js +51 -0
- package/dist/react/index.d.ts +6 -5
- package/dist/react/index.js +6 -3
- package/dist/react/internalContext.d.ts +1 -1
- package/dist/react/useAblo.d.ts +12 -5
- package/dist/react/useAblo.js +26 -8
- package/dist/react/useCurrentUserId.js +1 -1
- package/dist/react/useErrorListener.js +1 -1
- package/dist/react/useMutationFailureListener.d.ts +2 -2
- package/dist/react/useMutationFailureListener.js +1 -1
- package/dist/react/useMutators.d.ts +3 -3
- package/dist/react/useMutators.js +3 -3
- package/dist/react/useUndoScope.d.ts +5 -5
- package/dist/react/useUndoScope.js +1 -1
- package/dist/schema/coordination.d.ts +69 -10
- package/dist/schema/coordination.js +90 -9
- package/dist/schema/ddl.js +2 -2
- package/dist/schema/diff.d.ts +1 -1
- package/dist/schema/generate.js +1 -1
- package/dist/schema/index.d.ts +11 -10
- package/dist/schema/index.js +22 -18
- package/dist/schema/queries.d.ts +27 -27
- package/dist/schema/queries.js +23 -23
- package/dist/schema/select.d.ts +3 -3
- package/dist/schema/select.js +6 -3
- package/dist/schema/serialize.d.ts +15 -6
- package/dist/schema/serialize.js +20 -3
- package/dist/schema/sugar.d.ts +6 -7
- package/dist/schema/sugar.js +9 -12
- package/dist/schema/syncDeltaRow.d.ts +4 -152
- package/dist/schema/syncDeltaRow.js +4 -105
- package/dist/server/adapter.d.ts +18 -1
- package/dist/server/commit.d.ts +10 -16
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/readConfig.d.ts +1 -1
- package/dist/source/adapter.d.ts +7 -5
- package/dist/source/adapter.js +7 -5
- package/dist/source/adapters/drizzle.d.ts +1 -1
- package/dist/source/adapters/drizzle.js +2 -2
- package/dist/source/adapters/kysely.d.ts +1 -1
- package/dist/source/adapters/kysely.js +1 -1
- package/dist/source/adapters/kyselyMutationCore.d.ts +1 -1
- package/dist/source/adapters/kyselyMutationCore.js +2 -2
- package/dist/source/adapters/memory.js +1 -1
- package/dist/source/adapters/prisma.d.ts +8 -3
- package/dist/source/adapters/prisma.js +1 -1
- package/dist/source/connector.js +1 -1
- package/dist/source/connectorProtocol.d.ts +2 -8
- package/dist/source/connectorProtocol.js +3 -2
- package/dist/source/contract.d.ts +29 -17
- package/dist/source/contract.js +27 -22
- package/dist/source/factory.d.ts +1 -1
- package/dist/source/idempotency.js +2 -2
- package/dist/source/index.d.ts +1 -0
- package/dist/source/index.js +3 -0
- package/dist/source/next.d.ts +1 -1
- package/dist/source/signing.d.ts +9 -2
- package/dist/source/signing.js +4 -1
- package/dist/source/types.d.ts +6 -4
- package/dist/source/types.js +1 -1
- package/dist/{core/storeContract.d.ts → storeContract.d.ts} +6 -6
- package/dist/{core → stores}/DatabaseManager.d.ts +3 -1
- package/dist/{core → stores}/DatabaseManager.js +14 -13
- package/dist/stores/ObjectStore.d.ts +1 -1
- package/dist/{core → stores}/StoreManager.d.ts +9 -26
- package/dist/{core → stores}/StoreManager.js +29 -77
- package/dist/stores/SyncActionStore.d.ts +4 -2
- package/dist/stores/SyncActionStore.js +11 -17
- package/dist/stores/syncAction.d.ts +26 -0
- package/dist/stores/syncAction.js +16 -0
- package/dist/surface.d.ts +3 -3
- package/dist/surface.js +6 -4
- package/dist/sync/BootstrapFetcher.d.ts +127 -6
- package/dist/sync/BootstrapFetcher.js +511 -83
- package/dist/sync/ConnectionManager.d.ts +6 -198
- package/dist/sync/ConnectionManager.js +6 -677
- package/dist/sync/OnDemandLoader.d.ts +5 -2
- package/dist/sync/OnDemandLoader.js +61 -21
- package/dist/sync/SubscriptionManager.d.ts +13 -2
- package/dist/sync/SubscriptionManager.js +23 -5
- package/dist/sync/SyncWebSocket.d.ts +27 -510
- package/dist/sync/SyncWebSocket.js +76 -954
- package/dist/sync/awaitClaimGrant.d.ts +4 -44
- package/dist/sync/awaitClaimGrant.js +4 -109
- package/dist/sync/bootstrapApply.d.ts +3 -0
- package/dist/sync/bootstrapApply.js +2 -2
- package/dist/sync/commitFrames.d.ts +6 -40
- package/dist/sync/commitFrames.js +6 -97
- package/dist/sync/contextPorts.d.ts +18 -0
- package/dist/sync/contextPorts.js +31 -0
- package/dist/sync/createClaimStream.d.ts +5 -49
- package/dist/sync/createClaimStream.js +5 -469
- package/dist/sync/createPresenceStream.d.ts +26 -4
- package/dist/sync/createPresenceStream.js +28 -20
- package/dist/sync/createSnapshot.d.ts +2 -2
- package/dist/sync/createSnapshot.js +1 -1
- package/dist/sync/credentialLifecycle.d.ts +5 -173
- package/dist/sync/credentialLifecycle.js +5 -320
- package/dist/sync/deltaPipeline.d.ts +13 -12
- package/dist/sync/deltaPipeline.js +21 -4
- package/dist/sync/groupChange.d.ts +3 -0
- package/dist/sync/groupChange.js +16 -14
- package/dist/sync/participants.d.ts +24 -6
- package/dist/sync/participants.js +32 -23
- package/dist/sync/schemaDrift.d.ts +55 -0
- package/dist/sync/schemaDrift.js +53 -0
- package/dist/sync/schemas.d.ts +23 -33
- package/dist/sync/schemas.js +29 -20
- package/dist/sync/syncPlan.d.ts +3 -3
- package/dist/sync/wsFrameHandlers.d.ts +6 -114
- package/dist/sync/wsFrameHandlers.js +6 -392
- package/dist/syncLog/contract.d.ts +20 -0
- package/dist/syncLog/contract.js +19 -0
- package/dist/syncLog/index.d.ts +1 -0
- package/dist/syncLog/index.js +1 -0
- package/dist/transaction/ablo.d.ts +88 -0
- package/dist/transaction/ablo.js +33 -0
- package/dist/{client/auth.d.ts → transaction/auth/apiKey.d.ts} +43 -8
- package/dist/{client/auth.js → transaction/auth/apiKey.js} +19 -0
- package/dist/transaction/auth/bootstrapScope.d.ts +15 -0
- package/dist/transaction/auth/bootstrapScope.js +1 -0
- package/dist/transaction/auth/capability.d.ts +212 -0
- package/dist/transaction/auth/capability.js +224 -0
- package/dist/{auth → transaction/auth}/credentialSource.d.ts +8 -1
- package/dist/{client → transaction/auth}/identity.d.ts +8 -7
- package/dist/{client → transaction/auth}/identity.js +1 -1
- package/dist/transaction/auth/index.d.ts +162 -0
- package/dist/transaction/auth/index.js +304 -0
- package/dist/{auth → transaction/auth}/schemas.d.ts +1 -1
- package/dist/{auth → transaction/auth}/schemas.js +13 -13
- package/dist/{client → transaction/auth}/sessionMint.d.ts +8 -8
- package/dist/{client → transaction/auth}/sessionMint.js +4 -7
- package/dist/transaction/coordination/awaitClaimGrant.d.ts +56 -0
- package/dist/transaction/coordination/awaitClaimGrant.js +124 -0
- package/dist/{client → transaction/coordination}/claimHeartbeatLoop.d.ts +34 -0
- package/dist/{client → transaction/coordination}/claimHeartbeatLoop.js +20 -0
- package/dist/transaction/coordination/claimMeta.d.ts +49 -0
- package/dist/transaction/coordination/claimMeta.js +52 -0
- package/dist/transaction/coordination/createClaimStream.d.ts +64 -0
- package/dist/transaction/coordination/createClaimStream.js +475 -0
- package/dist/transaction/coordination/events.d.ts +74 -0
- package/dist/transaction/coordination/events.js +7 -0
- package/dist/transaction/coordination/index.d.ts +19 -0
- package/dist/transaction/coordination/index.js +45 -0
- package/dist/transaction/coordination/locator.d.ts +104 -0
- package/dist/transaction/coordination/locator.js +102 -0
- package/dist/transaction/coordination/schema.d.ts +1536 -0
- package/dist/transaction/coordination/schema.js +1177 -0
- package/dist/transaction/coordination/targetConflict.d.ts +2 -0
- package/dist/transaction/coordination/targetConflict.js +107 -0
- package/dist/{coordination → transaction/coordination}/trace.d.ts +7 -18
- package/dist/{coordination → transaction/coordination}/trace.js +18 -25
- package/dist/transaction/durableWrites.d.ts +62 -0
- package/dist/{client → transaction}/durableWrites.js +28 -3
- package/dist/transaction/environment.d.ts +105 -0
- package/dist/transaction/environment.js +108 -0
- package/dist/{errorCodes.d.ts → transaction/errorCodes.d.ts} +12 -12
- package/dist/{errorCodes.js → transaction/errorCodes.js} +45 -18
- package/dist/{errors.d.ts → transaction/errors.d.ts} +37 -13
- package/dist/{errors.js → transaction/errors.js} +85 -16
- package/dist/transaction/footprint.d.ts +111 -0
- package/dist/transaction/footprint.js +0 -0
- package/dist/transaction/index.d.ts +20 -0
- package/dist/transaction/index.js +20 -0
- package/dist/transaction/keys/index.d.ts +87 -0
- package/dist/transaction/keys/index.js +207 -0
- package/dist/transaction/log/syncDeltaRow.d.ts +158 -0
- package/dist/transaction/log/syncDeltaRow.js +95 -0
- package/dist/{sync/syncPosition.d.ts → transaction/logPosition.d.ts} +22 -8
- package/dist/{sync/syncPosition.js → transaction/logPosition.js} +15 -6
- package/dist/transaction/logger.d.ts +16 -0
- package/dist/transaction/logger.js +7 -0
- package/dist/transaction/observability.d.ts +53 -0
- package/dist/transaction/observability.js +19 -0
- package/dist/transaction/plugin.d.ts +285 -0
- package/dist/transaction/plugin.js +106 -0
- package/dist/{policy → transaction/policy}/types.d.ts +3 -3
- package/dist/{policy → transaction/policy}/types.js +2 -0
- package/dist/transaction/resources/httpResources.d.ts +321 -0
- package/dist/transaction/resources/httpResources.js +7 -0
- package/dist/transaction/resources/modelOperations.d.ts +427 -0
- package/dist/transaction/resources/modelOperations.js +12 -0
- package/dist/transaction/resources/mutationOptions.d.ts +66 -0
- package/dist/transaction/resources/mutationOptions.js +9 -0
- package/dist/transaction/resources/where.d.ts +101 -0
- package/dist/transaction/resources/where.js +115 -0
- package/dist/{client → transaction/resources}/writeOptionsSchema.d.ts +2 -6
- package/dist/{client → transaction/resources}/writeOptionsSchema.js +9 -5
- package/dist/{schema → transaction/schema}/field.d.ts +17 -23
- package/dist/{schema → transaction/schema}/field.js +5 -5
- package/dist/transaction/schema/fieldRef.d.ts +38 -0
- package/dist/transaction/schema/fieldRef.js +11 -0
- package/dist/transaction/schema/loadStrategy.d.ts +45 -0
- package/dist/transaction/schema/loadStrategy.js +46 -0
- package/dist/{schema → transaction/schema}/model.d.ts +50 -35
- package/dist/{schema → transaction/schema}/model.js +30 -20
- package/dist/transaction/schema/openapi.d.ts +58 -0
- package/dist/transaction/schema/openapi.js +501 -0
- package/dist/{schema → transaction/schema}/relation.d.ts +21 -16
- package/dist/{schema → transaction/schema}/relation.js +7 -7
- package/dist/{schema → transaction/schema}/residency.d.ts +0 -9
- package/dist/{schema → transaction/schema}/residency.js +0 -5
- package/dist/{schema → transaction/schema}/roles.d.ts +5 -5
- package/dist/{schema → transaction/schema}/roles.js +5 -5
- package/dist/{schema → transaction/schema}/schema.d.ts +39 -10
- package/dist/{schema → transaction/schema}/schema.js +24 -3
- package/dist/{schema → transaction/schema}/tenancy.d.ts +1 -1
- package/dist/{schema → transaction/schema}/tenancy.js +7 -4
- package/dist/transaction/transactionLayer.d.ts +82 -0
- package/dist/transaction/transactionLayer.js +24 -0
- package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.d.ts +5 -6
- package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.js +9 -13
- package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.d.ts +9 -2
- package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.js +5 -9
- package/dist/{transactions/durableWriteStore.d.ts → transaction/transactions/settlement/pendingWrite.d.ts} +11 -37
- package/dist/transaction/transactions/settlement/pendingWrite.js +20 -0
- package/dist/transaction/transport/commitFrames.d.ts +90 -0
- package/dist/transaction/transport/commitFrames.js +134 -0
- package/dist/transaction/transport/connectionManager.d.ts +215 -0
- package/dist/transaction/transport/connectionManager.js +673 -0
- package/dist/transaction/transport/credentialLifecycle.d.ts +177 -0
- package/dist/transaction/transport/credentialLifecycle.js +324 -0
- package/dist/{sync → transaction/transport}/heartbeat.d.ts +3 -1
- package/dist/{sync → transaction/transport}/heartbeat.js +6 -4
- package/dist/transaction/transport/httpClient.d.ts +131 -0
- package/dist/{client → transaction/transport}/httpClient.js +6 -5
- package/dist/transaction/transport/httpOptions.d.ts +33 -0
- package/dist/transaction/transport/httpOptions.js +12 -0
- package/dist/{client → transaction/transport}/httpTransport.js +295 -97
- package/dist/{sync/NetworkProbe.d.ts → transaction/transport/networkProbe.d.ts} +7 -4
- package/dist/{sync/NetworkProbe.js → transaction/transport/networkProbe.js} +14 -13
- package/dist/transaction/transport/wsFrameHandlers.d.ts +128 -0
- package/dist/transaction/transport/wsFrameHandlers.js +429 -0
- package/dist/transaction/transport/wsTransport.d.ts +574 -0
- package/dist/transaction/transport/wsTransport.js +1023 -0
- package/dist/transaction/types/assertExact.d.ts +17 -0
- package/dist/transaction/types/assertExact.js +1 -0
- package/dist/{types → transaction/types}/global.d.ts +17 -2
- package/dist/{types → transaction/types}/global.js +2 -1
- package/dist/{types → transaction/types}/index.d.ts +14 -46
- package/dist/{types → transaction/types}/index.js +7 -16
- package/dist/{types → transaction/types}/streams.d.ts +73 -45
- package/dist/transaction/utils/duration.d.ts +50 -0
- package/dist/{utils → transaction/utils}/duration.js +32 -0
- package/dist/{utils → transaction/utils}/json.d.ts +18 -0
- package/dist/transaction/utils/json.js +276 -0
- package/dist/transaction/wire/accountResponses.d.ts +420 -0
- package/dist/transaction/wire/accountResponses.js +290 -0
- package/dist/transaction/wire/auth.d.ts +56 -0
- package/dist/transaction/wire/auth.js +63 -0
- package/dist/transaction/wire/claimEvent.d.ts +76 -0
- package/dist/transaction/wire/claimEvent.js +73 -0
- package/dist/transaction/wire/claims.d.ts +530 -0
- package/dist/transaction/wire/claims.js +327 -0
- package/dist/{wire → transaction/wire}/commit.d.ts +125 -193
- package/dist/{wire → transaction/wire}/commit.js +68 -47
- package/dist/{wire → transaction/wire}/delta.d.ts +66 -17
- package/dist/{wire → transaction/wire}/delta.js +37 -13
- package/dist/transaction/wire/errorEnvelope.d.ts +72 -0
- package/dist/{wire → transaction/wire}/errorEnvelope.js +36 -5
- package/dist/transaction/wire/feedCursor.d.ts +60 -0
- package/dist/transaction/wire/feedCursor.js +82 -0
- package/dist/transaction/wire/feedEvent.d.ts +204 -0
- package/dist/transaction/wire/feedEvent.js +65 -0
- package/dist/transaction/wire/frames.d.ts +194 -0
- package/dist/transaction/wire/frames.js +50 -0
- package/dist/transaction/wire/inboundFrames.d.ts +562 -0
- package/dist/transaction/wire/inboundFrames.js +116 -0
- package/dist/transaction/wire/index.d.ts +54 -0
- package/dist/transaction/wire/index.js +83 -0
- package/dist/{wire → transaction/wire}/listEnvelope.d.ts +13 -14
- package/dist/transaction/wire/listEnvelope.js +42 -0
- package/dist/transaction/wire/modelMutations.d.ts +31 -0
- package/dist/transaction/wire/modelMutations.js +52 -0
- package/dist/transaction/wire/modelResponses.d.ts +85 -0
- package/dist/transaction/wire/modelResponses.js +43 -0
- package/dist/transaction/wire/modelShape.d.ts +78 -0
- package/dist/transaction/wire/modelShape.js +74 -0
- package/dist/transactions/{TransactionQueue.d.ts → mutations/MutationQueue.d.ts} +85 -38
- package/dist/transactions/{TransactionQueue.js → mutations/MutationQueue.js} +141 -80
- package/dist/transactions/{TransactionStore.d.ts → mutations/MutationStore.d.ts} +8 -8
- package/dist/transactions/{TransactionStore.js → mutations/MutationStore.js} +2 -2
- package/dist/transactions/{coalesceRules.d.ts → mutations/coalesceRules.d.ts} +10 -10
- package/dist/transactions/{coalesceRules.js → mutations/coalesceRules.js} +1 -1
- package/dist/transactions/mutations/commitLatency.d.ts +52 -0
- package/dist/transactions/mutations/commitLatency.js +130 -0
- package/dist/transactions/{commitOutboxStore.d.ts → mutations/commitOutboxStore.d.ts} +1 -5
- package/dist/transactions/{commitOutboxStore.js → mutations/commitOutboxStore.js} +1 -1
- package/dist/transactions/{commitPayload.d.ts → mutations/commitPayload.d.ts} +18 -16
- package/dist/transactions/{commitPayload.js → mutations/commitPayload.js} +15 -15
- package/dist/transactions/{deltaConfirmation.d.ts → mutations/deltaConfirmation.d.ts} +15 -11
- package/dist/transactions/{deltaConfirmation.js → mutations/deltaConfirmation.js} +14 -12
- package/dist/transactions/mutations/durableWriteStore.d.ts +14 -0
- package/dist/transactions/mutations/durableWriteStore.js +12 -0
- package/dist/transactions/{optimisticApply.d.ts → mutations/optimisticApply.d.ts} +7 -7
- package/dist/transactions/{replayValidation.d.ts → mutations/replayValidation.d.ts} +4 -3
- package/dist/transactions/{replayValidation.js → mutations/replayValidation.js} +7 -5
- package/dist/utils/mobxSetup.d.ts +1 -1
- package/dist/utils/mobxSetup.js +5 -2
- package/dist/{core → views}/QueryView.d.ts +2 -2
- package/dist/{core → views}/QueryView.js +2 -2
- package/dist/{core → views}/ViewRegistry.d.ts +1 -1
- package/dist/{core/queryUtils.d.ts → views/incrementalView.d.ts} +6 -6
- package/dist/{core/queryUtils.js → views/incrementalView.js} +6 -6
- package/dist/webhooks/events.d.ts +2 -2
- package/dist/wire/index.d.ts +1 -34
- package/dist/wire/index.js +8 -49
- package/docs/agent-messaging.md +3 -3
- package/docs/agents.md +20 -13
- package/docs/api-keys.md +14 -10
- package/docs/api.md +27 -61
- package/docs/audit.md +6 -3
- package/docs/cli.md +41 -13
- package/docs/client-behavior.md +11 -9
- package/docs/concurrency-convention.md +49 -57
- package/docs/coordination.md +283 -121
- package/docs/data-sources.md +7 -5
- package/docs/debugging.md +39 -15
- package/docs/deployment.md +267 -0
- package/docs/examples/agent-human.md +49 -42
- package/docs/examples/ai-sdk-tool.md +69 -44
- package/docs/examples/existing-python-backend.md +8 -6
- package/docs/examples/nextjs.md +129 -47
- package/docs/examples/scoped-agent.md +46 -45
- package/docs/examples/server-agent.md +46 -26
- package/docs/groups.md +87 -30
- package/docs/guarantees.md +41 -12
- package/docs/how-it-works.md +38 -12
- package/docs/idempotency.md +126 -0
- package/docs/identity.md +77 -74
- package/docs/index.md +172 -86
- package/docs/integration-guide.md +31 -19
- package/docs/mcp.md +46 -21
- package/docs/migration.md +95 -18
- package/docs/operating-on-your-database.md +3 -1
- package/docs/projects.md +3 -1
- package/docs/quickstart.md +22 -5
- package/docs/react.md +31 -18
- package/docs/schema-contract.md +5 -3
- package/docs/session-settings.md +108 -0
- package/docs/sessions.md +4 -2
- package/docs/webhooks.md +12 -10
- package/llms.txt +48 -18
- package/package.json +21 -26
- package/dist/agent/Agent.d.ts +0 -366
- package/dist/agent/Agent.js +0 -514
- package/dist/agent/index.d.ts +0 -115
- package/dist/agent/index.js +0 -128
- package/dist/agent/session.d.ts +0 -93
- package/dist/agent/session.js +0 -149
- package/dist/agent/types.d.ts +0 -68
- package/dist/agent/types.js +0 -9
- package/dist/cli.cjs +0 -286329
- package/dist/client/durableWrites.d.ts +0 -21
- package/dist/client/httpClient.d.ts +0 -80
- package/dist/coordination/schema.d.ts +0 -722
- package/dist/coordination/schema.js +0 -578
- package/dist/schema/openapi.d.ts +0 -29
- package/dist/schema/openapi.js +0 -124
- package/dist/testing/fixtures/bootstrap.d.ts +0 -49
- package/dist/testing/fixtures/bootstrap.js +0 -59
- package/dist/testing/fixtures/deltas.d.ts +0 -83
- package/dist/testing/fixtures/deltas.js +0 -136
- package/dist/testing/fixtures/models.d.ts +0 -83
- package/dist/testing/fixtures/models.js +0 -272
- package/dist/testing/helpers/reactWrapper.d.ts +0 -69
- package/dist/testing/helpers/reactWrapper.js +0 -67
- package/dist/testing/helpers/syncEngineHarness.d.ts +0 -54
- package/dist/testing/helpers/syncEngineHarness.js +0 -73
- package/dist/testing/helpers/wait.d.ts +0 -30
- package/dist/testing/helpers/wait.js +0 -49
- package/dist/testing/index.d.ts +0 -23
- package/dist/testing/index.js +0 -33
- package/dist/testing/mocks/FakeDatabase.d.ts +0 -18
- package/dist/testing/mocks/FakeDatabase.js +0 -10
- package/dist/testing/mocks/MockMutationExecutor.d.ts +0 -87
- package/dist/testing/mocks/MockMutationExecutor.js +0 -192
- package/dist/testing/mocks/MockNetworkMonitor.d.ts +0 -20
- package/dist/testing/mocks/MockNetworkMonitor.js +0 -46
- package/dist/testing/mocks/MockSyncContext.d.ts +0 -51
- package/dist/testing/mocks/MockSyncContext.js +0 -71
- package/dist/testing/mocks/MockSyncStore.d.ts +0 -88
- package/dist/testing/mocks/MockSyncStore.js +0 -171
- package/dist/testing/mocks/MockWebSocket.d.ts +0 -71
- package/dist/testing/mocks/MockWebSocket.js +0 -118
- package/dist/transactions/durableWriteStore.js +0 -30
- package/dist/utils/duration.d.ts +0 -25
- package/dist/utils/json.js +0 -88
- package/dist/wire/errorEnvelope.d.ts +0 -55
- package/dist/wire/frames.d.ts +0 -197
- package/dist/wire/frames.js +0 -49
- package/dist/wire/listEnvelope.js +0 -18
- package/docs/interaction-model.md +0 -97
- /package/dist/{core → query}/QueryProcessor.d.ts +0 -0
- /package/dist/{core → query}/QueryProcessor.js +0 -0
- /package/dist/{core/storeContract.js → storeContract.js} +0 -0
- /package/dist/{core → stores}/openIDBWithTimeout.d.ts +0 -0
- /package/dist/{core → stores}/openIDBWithTimeout.js +0 -0
- /package/dist/{client → transaction/auth}/credentialEndpoint.d.ts +0 -0
- /package/dist/{client → transaction/auth}/credentialEndpoint.js +0 -0
- /package/dist/{auth → transaction/auth}/credentialPolicy.d.ts +0 -0
- /package/dist/{auth → transaction/auth}/credentialPolicy.js +0 -0
- /package/dist/{auth → transaction/auth}/credentialSource.js +0 -0
- /package/dist/{client → transaction/auth}/hostedEndpoints.d.ts +0 -0
- /package/dist/{client → transaction/auth}/hostedEndpoints.js +0 -0
- /package/dist/{client → transaction}/persistence.d.ts +0 -0
- /package/dist/{client → transaction}/persistence.js +0 -0
- /package/dist/{client → transaction/resources}/functionalUpdate.d.ts +0 -0
- /package/dist/{client → transaction/resources}/functionalUpdate.js +0 -0
- /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.d.ts +0 -0
- /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.js +0 -0
- /package/dist/{client → transaction/transport}/httpTransport.d.ts +0 -0
- /package/dist/{types → transaction/types}/modelData.d.ts +0 -0
- /package/dist/{types → transaction/types}/modelData.js +0 -0
- /package/dist/{types → transaction/types}/participant.d.ts +0 -0
- /package/dist/{types → transaction/types}/participant.js +0 -0
- /package/dist/{types → transaction/types}/streams.js +0 -0
- /package/dist/{utils → transaction/utils}/asyncIterator.d.ts +0 -0
- /package/dist/{utils → transaction/utils}/asyncIterator.js +0 -0
- /package/dist/{wire → transaction/wire}/bootstrapReason.d.ts +0 -0
- /package/dist/{wire → transaction/wire}/bootstrapReason.js +0 -0
- /package/dist/{wire → transaction/wire}/protocol.d.ts +0 -0
- /package/dist/{wire → transaction/wire}/protocol.js +0 -0
- /package/dist/{wire → transaction/wire}/protocolVersion.d.ts +0 -0
- /package/dist/{wire → transaction/wire}/protocolVersion.js +0 -0
- /package/dist/transactions/{UnconfirmedWrites.d.ts → mutations/UnconfirmedWrites.d.ts} +0 -0
- /package/dist/transactions/{UnconfirmedWrites.js → mutations/UnconfirmedWrites.js} +0 -0
- /package/dist/transactions/{optimisticApply.js → mutations/optimisticApply.js} +0 -0
- /package/dist/{core → views}/ViewRegistry.js +0 -0
package/dist/index.js
CHANGED
|
@@ -26,14 +26,13 @@
|
|
|
26
26
|
* Related surfaces live on their own import subpaths:
|
|
27
27
|
* @abloatai/ablo/schema — defineSchema, model, z (Zod)
|
|
28
28
|
* @abloatai/ablo/react — <AbloProvider>, useQuery, useMutate
|
|
29
|
-
* @abloatai/ablo/testing — test harnesses and fixtures
|
|
30
29
|
*
|
|
31
30
|
* Reads come in two flavors, distinguished by where the data is fetched from.
|
|
32
31
|
* `ablo.<model>.retrieve({ id })` and `.list({ where })` are asynchronous reads
|
|
33
32
|
* that consult the local cache first and fall back to the network, de-duplicating
|
|
34
33
|
* concurrent requests for the same row. They are the default, and the right
|
|
35
34
|
* choice for stateless callers whose local graph starts empty.
|
|
36
|
-
* `ablo.<model>.
|
|
35
|
+
* `ablo.<model>.local.retrieve(id)`, `.local.list(...)`, and `.local.count(...)` are synchronous
|
|
37
36
|
* snapshots of the already-loaded local graph with no network round-trip — use
|
|
38
37
|
* them in reactive React selectors (`useAblo((ablo) => ablo.<model>.get(id))`)
|
|
39
38
|
* once the graph is warm.
|
|
@@ -57,16 +56,19 @@
|
|
|
57
56
|
// one name. It is the default export, so `import Ablo from '@abloatai/ablo'`
|
|
58
57
|
// works, and a named export, so `import { Ablo }` compiles too.
|
|
59
58
|
export { Ablo } from './client/Ablo.js';
|
|
60
|
-
|
|
59
|
+
// The reactive materialiser as a declared capability (ADR 0016): installed by
|
|
60
|
+
// default on the socket client, named explicitly when the list is written out.
|
|
61
|
+
// `AbloPlugin` is the one uniform shape every capability declares.
|
|
62
|
+
export { humans } from './client/humans.js';
|
|
63
|
+
export { DEFAULT_CONTENTION_RETRIES } from './transaction/resources/functionalUpdate.js';
|
|
61
64
|
// The stateless HTTP client is constructed through `Ablo({ transport: 'http' })`.
|
|
62
65
|
// There is no separate constructor to import; annotate values with the
|
|
63
66
|
// `AbloHttpClient` type, which is the return type of that call.
|
|
64
|
-
export {} from './
|
|
65
|
-
export { ABLO_DEFAULT_BASE_URL, ABLO_HOSTED_API_DOMAIN, ABLO_HOSTED_HTTP_BASE_URL, normalizeAbloHostedBaseUrl, } from './
|
|
66
|
-
export { durableWritesConfigSchema, durableWriteStoreSchema, pendingWriteSchema, } from './transactions/durableWriteStore.js';
|
|
67
|
-
|
|
68
|
-
export {
|
|
69
|
-
export { durableHttpCommitEnvelopeSchema, } from './transactions/httpCommitEnvelope.js';
|
|
67
|
+
export {} from './transaction/transport/httpClient.js';
|
|
68
|
+
export { ABLO_DEFAULT_BASE_URL, ABLO_HOSTED_API_DOMAIN, ABLO_HOSTED_HTTP_BASE_URL, normalizeAbloHostedBaseUrl, } from './transaction/auth/apiKey.js';
|
|
69
|
+
export { durableWritesConfigSchema, durableWriteStoreSchema, pendingWriteSchema, } from './transactions/mutations/durableWriteStore.js';
|
|
70
|
+
export { durableCommitEnvelopeSchema, } from './transaction/transactions/settlement/commitEnvelope.js';
|
|
71
|
+
export { durableHttpCommitEnvelopeSchema, } from './transaction/transactions/settlement/httpCommitEnvelope.js';
|
|
70
72
|
// Participant types live under `Ablo.Participant.*` —
|
|
71
73
|
// `Ablo.Participant.Joined`, `Ablo.Participant.Manager`,
|
|
72
74
|
// `Ablo.Participant.JoinOptions`, etc. Same dot-access shape as
|
|
@@ -95,37 +97,44 @@ export { defaultPolicy, capabilityPreemptPolicy, interpretConflictAxis } from '.
|
|
|
95
97
|
// The typed error hierarchy. One import brings in every class you need to
|
|
96
98
|
// tell failures apart — by `e instanceof AbloX` or `e.type === 'AbloX'` — along
|
|
97
99
|
// with the helper that translates an HTTP response into the right class.
|
|
98
|
-
export {
|
|
100
|
+
export { AbloSessionError,
|
|
101
|
+
// Deprecated alias, removed in 0.36.0. The barrel keeps re-exporting it until
|
|
102
|
+
// then so consumers don't lose the name a version early.
|
|
103
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
104
|
+
SyncSessionError, AbloError, AbloAuthenticationError, AbloPermissionError, AbloRateLimitError, AbloIdempotencyError, AbloConnectionError, AbloValidationError, AbloNotFoundError, AbloServerError, AbloStaleContextError, AbloClaimedError, AbloContentionError, CapabilityError, translateHttpError, hasWireCode, errorFromWire, toAbloError, ERROR_CODES, ERROR_CONTRACT_VERSION, errorCodeSpec, isRetryableCode, classifyRecovery, recoveryClassSchema, RECOVERY_CLASSES, } from './transaction/errors.js';
|
|
99
105
|
// The wire contract for errors, with no dependencies: the JSON envelope shape
|
|
100
106
|
// plus the table mapping each AbloError subclass to an HTTP status. A server
|
|
101
107
|
// that returns Ablo errors can assert against these so its responses never
|
|
102
108
|
// drift from what the client expects.
|
|
103
|
-
export { errorEnvelope, statusForType } from './wire/errorEnvelope.js';
|
|
104
|
-
export { WS_BEARER_SUBPROTOCOL_PREFIX, WS_SYNC_SUBPROTOCOL } from './auth/credentialSource.js';
|
|
105
|
-
export { ENVIRONMENTS, environmentSchema, normalizeEnvironment, environmentFromKeyPrefix, environmentToKeyPrefix, isSandboxEnvironment, } from './environment.js';
|
|
109
|
+
export { errorEnvelope, statusForType } from './transaction/wire/errorEnvelope.js';
|
|
110
|
+
export { WS_BEARER_SUBPROTOCOL_PREFIX, WS_SYNC_SUBPROTOCOL } from './transaction/auth/credentialSource.js';
|
|
111
|
+
export { ENVIRONMENTS, environmentSchema, normalizeEnvironment, environmentFromKeyPrefix, environmentToKeyPrefix, isSandboxEnvironment, } from './transaction/environment.js';
|
|
106
112
|
// The write-options contract: the single Zod schema for the option bag every
|
|
107
113
|
// write accepts (`ablo.<model>.create/update/delete`, `commits.create`, and the
|
|
108
114
|
// HTTP model routes). The SDK validates against it at each boundary, and it is
|
|
109
115
|
// exported so you can validate or assemble options before a call — for example,
|
|
110
116
|
// as the input schema of an agent tool. It is the runtime counterpart of the
|
|
111
117
|
// `MutationOptions` type.
|
|
112
|
-
export { writeOptionsSchema, onStaleModeSchema, assertWriteOptions, } from './
|
|
118
|
+
export { writeOptionsSchema, onStaleModeSchema, assertWriteOptions, } from './transaction/resources/writeOptionsSchema.js';
|
|
113
119
|
// The value handed back to a writer whose change hit a stale-context conflict
|
|
114
120
|
// under `onStale: 'notify'`. Instead of throwing, the commit succeeds and
|
|
115
121
|
// returns this notification so the caller can reconcile against the current
|
|
116
122
|
// value and retry rather than discard its work.
|
|
117
|
-
export { staleNotificationSchema, readDependencySchema } from './coordination/schema.js';
|
|
123
|
+
export { staleNotificationSchema, readDependencySchema } from './transaction/coordination/schema.js';
|
|
124
|
+
// The claim-part marker: schema field names typecheck plainly on a claim
|
|
125
|
+
// target; an app-defined part (a cell, a section) is named through `part()`.
|
|
126
|
+
export { part } from './transaction/coordination/schema.js';
|
|
118
127
|
// Collects claim events and stale-write collisions into an ordered list you can
|
|
119
128
|
// print to inspect coordination, or read through `collisions()` to assert on in
|
|
120
129
|
// tests. Pass `new ClaimLog()` as `Ablo({ observability })`.
|
|
121
|
-
export { ClaimLog, formatClaim, formatConflict } from './coordination/
|
|
130
|
+
export { ClaimLog, formatClaim, formatConflict } from './coordination/ClaimLog.js';
|
|
122
131
|
// Spread this to provide a custom `observability` that overrides only the hooks
|
|
123
132
|
// you care about (e.g. captureClaim) and no-ops the rest.
|
|
124
|
-
export { noopObservability } from './
|
|
133
|
+
export { noopObservability } from './RuntimeContext.js';
|
|
125
134
|
// Detects a stuck local store: use these to recognize when the browser's
|
|
126
135
|
// IndexedDB backing store fails to open in time, so your app can show a
|
|
127
136
|
// recovery screen instead of hanging.
|
|
128
|
-
export { IDBOpenTimeoutError, isStorageOpenTimeout } from './
|
|
137
|
+
export { IDBOpenTimeoutError, isStorageOpenTimeout } from './stores/openIDBWithTimeout.js';
|
|
129
138
|
// A machine-readable manifest of the SDK's public verb and option names, bound
|
|
130
139
|
// at compile time to the real types so the lists can never name a method or
|
|
131
140
|
// option the API doesn't have. Useful for generating documentation or tooling
|
|
@@ -135,9 +144,8 @@ export { PUBLIC_MODEL_VERBS, PUBLIC_LIST_OPTION_KEYS, PUBLIC_ABLO_OPTION_KEYS, }
|
|
|
135
144
|
// `ablo.<model>.create/update/delete`; reach for `defineMutators` only when you
|
|
136
145
|
// need a named, multi-step mutation with its own undo behavior. The matching
|
|
137
146
|
// types live under the `Ablo` namespace:
|
|
138
|
-
// Ablo.Mutator.Fn, Ablo.Transaction
|
|
139
|
-
// Ablo.Mutator.UndoEntry, Ablo.Mutator.InverseOp
|
|
140
|
-
// Ablo.Query, Ablo.QueryBatch, Ablo.QueryBatchResult
|
|
147
|
+
// Ablo.Mutator.Fn, Ablo.Mutator.Transaction
|
|
148
|
+
// Ablo.Mutator.UndoEntry, Ablo.Mutator.UndoScope, Ablo.Mutator.InverseOp
|
|
141
149
|
export { defineMutators } from './mutators/defineMutators.js';
|
|
142
150
|
// `createTransaction` lets callers outside React — server-side workers, agent
|
|
143
151
|
// runtimes — run custom mutators without the `useMutators` hook. Build a
|
|
@@ -152,4 +160,4 @@ export { createTransaction } from './mutators/Transaction.js';
|
|
|
152
160
|
// then reports a difference that isn't real — a common trap when reconciling an
|
|
153
161
|
// Ablo row against external editor state. These compare independent of key
|
|
154
162
|
// order, so use them instead.
|
|
155
|
-
export { deepEqual, stableStringify } from './utils/json.js';
|
|
163
|
+
export { deepEqual, stableStringify } from './transaction/utils/json.js';
|
|
@@ -6,18 +6,15 @@
|
|
|
6
6
|
* session-error detection, online-status checks, and the transport that carries
|
|
7
7
|
* mutations to your backend. The SDK ships sensible no-op defaults where it can.
|
|
8
8
|
*/
|
|
9
|
-
import type {
|
|
10
|
-
import type {
|
|
11
|
-
export
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export type BreadcrumbLevel = 'debug' | 'info' | 'warning' | 'error';
|
|
19
|
-
/** Breadcrumb categories for sync engine lifecycle events */
|
|
20
|
-
export type SyncBreadcrumbCategory = 'sync.bootstrap' | 'sync.transaction' | 'sync.websocket' | 'sync.offline' | 'sync.database' | 'sync.conflict' | 'sync.coordination' | 'sync.groups';
|
|
9
|
+
import type { MutationCommitResultInput } from '../transaction/wire/commit.js';
|
|
10
|
+
import type { OnStaleMode } from '../transaction/coordination/schema.js';
|
|
11
|
+
export type { ClaimEvent, ConflictEvent } from '../transaction/coordination/events.js';
|
|
12
|
+
import type { CoordinationObservability } from '../transaction/observability.js';
|
|
13
|
+
export type { CoordinationObservability } from '../transaction/observability.js';
|
|
14
|
+
export type { Logger } from '../transaction/logger.js';
|
|
15
|
+
import type { Logger } from '../transaction/logger.js';
|
|
16
|
+
export type { BreadcrumbLevel, BreadcrumbCategory, WebSocketErrorDetails, TransportObservability, } from '../transaction/observability.js';
|
|
17
|
+
import type { BreadcrumbCategory, TransportObservability } from '../transaction/observability.js';
|
|
21
18
|
export interface RollbackDetails {
|
|
22
19
|
transactionType: string;
|
|
23
20
|
modelName: string;
|
|
@@ -54,12 +51,6 @@ export interface DeltaRetryExhaustedDetails {
|
|
|
54
51
|
retryCount: number;
|
|
55
52
|
syncIdNeeded?: number;
|
|
56
53
|
}
|
|
57
|
-
export interface WebSocketErrorDetails {
|
|
58
|
-
context: string;
|
|
59
|
-
error?: string;
|
|
60
|
-
code?: number;
|
|
61
|
-
reason?: string;
|
|
62
|
-
}
|
|
63
54
|
export interface SelfHealingDetails {
|
|
64
55
|
modelName: string;
|
|
65
56
|
modelId: string;
|
|
@@ -70,46 +61,6 @@ export interface CommitZeroSyncIdDetails {
|
|
|
70
61
|
operationCount: number;
|
|
71
62
|
operations: string[];
|
|
72
63
|
}
|
|
73
|
-
/**
|
|
74
|
-
* A single event in the life of a claim. `phase` is the state the claim has just
|
|
75
|
-
* entered, and the sequence of phases is the trail you follow to see how two
|
|
76
|
-
* participants collided on a row — who asked for it, who waited behind whom, who
|
|
77
|
-
* was turned away, and whose lease lapsed. Each phase corresponds to a `claim_*`
|
|
78
|
-
* frame on the wire.
|
|
79
|
-
*/
|
|
80
|
-
export interface ClaimEvent {
|
|
81
|
-
phase: 'acquired' | 'queued' | 'granted' | 'lost' | 'rejected' | 'expired';
|
|
82
|
-
/** Server claim id, when the frame carries one. */
|
|
83
|
-
claimId?: string;
|
|
84
|
-
/** The claimed row + optional field scope. */
|
|
85
|
-
model?: string;
|
|
86
|
-
id?: string;
|
|
87
|
-
field?: string;
|
|
88
|
-
/** Participant that owns or blocks the lease (on `rejected`, the holder). */
|
|
89
|
-
actor?: string;
|
|
90
|
-
participantKind?: ParticipantKind;
|
|
91
|
-
/** FIFO position when `queued`. */
|
|
92
|
-
position?: number;
|
|
93
|
-
/** Rejection or policy reason, when the server supplied one. */
|
|
94
|
-
reason?: string;
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* A committed `onStale: 'notify'` write whose premise had moved. The commit
|
|
98
|
-
* succeeded, but the guarded operations were not written because the row had
|
|
99
|
-
* changed since the caller's `readAt`, and the engine returned the current value
|
|
100
|
-
* so the caller can reconcile. Records which rows and fields collided.
|
|
101
|
-
*/
|
|
102
|
-
export interface ConflictEvent {
|
|
103
|
-
/** The client idempotency key whose write was notified. */
|
|
104
|
-
clientTxId: string;
|
|
105
|
-
/** The conflicted rows + the fields that collided. */
|
|
106
|
-
rows: readonly {
|
|
107
|
-
model: string;
|
|
108
|
-
id: string;
|
|
109
|
-
fields: readonly string[];
|
|
110
|
-
writtenBy?: ParticipantKind;
|
|
111
|
-
}[];
|
|
112
|
-
}
|
|
113
64
|
/** Span attributes for performance monitoring */
|
|
114
65
|
export type SpanAttributes = Record<string, string | number | boolean | undefined>;
|
|
115
66
|
/**
|
|
@@ -117,31 +68,29 @@ export type SpanAttributes = Record<string, string | number | boolean | undefine
|
|
|
117
68
|
* ships a no-op default; provide your own to forward these events to a monitoring
|
|
118
69
|
* tool such as Sentry, Datadog, or OpenTelemetry.
|
|
119
70
|
*/
|
|
120
|
-
export interface
|
|
71
|
+
export interface ObservabilityProvider extends CoordinationObservability, TransportObservability {
|
|
121
72
|
/** Set user/org context for error grouping */
|
|
122
73
|
setContext(userId: string, organizationId: string): void;
|
|
123
74
|
/** Update connection state tag */
|
|
124
75
|
setConnectionState(state: 'connected' | 'disconnected' | 'connecting'): void;
|
|
125
|
-
/** Add a breadcrumb for sync lifecycle events */
|
|
126
|
-
breadcrumb(message: string, category: SyncBreadcrumbCategory, level?: BreadcrumbLevel, data?: Record<string, string | number | boolean | undefined>): void;
|
|
127
76
|
/** Capture optimistic rollback (data reverted) */
|
|
128
77
|
captureRollback(details: RollbackDetails): void;
|
|
129
|
-
/**
|
|
130
|
-
|
|
78
|
+
/**
|
|
79
|
+
* Capture permanent mutation failure. Named `captureTransactionFailure`
|
|
80
|
+
* before 0.35.0; the rename is announced in that release note rather than
|
|
81
|
+
* aliased, because this member is required — a provider still carrying the
|
|
82
|
+
* old spelling fails to satisfy the interface and the compiler names the
|
|
83
|
+
* member, which an optional alias would only have hidden.
|
|
84
|
+
*/
|
|
85
|
+
captureMutationFailure(details: TransactionFailureDetails): void;
|
|
131
86
|
/** Capture bootstrap failure */
|
|
132
87
|
captureBootstrapFailure(error: Error | unknown, details?: BootstrapFailureDetails): void;
|
|
133
88
|
/** Capture reconciliation needed (delta confirmation timeout) */
|
|
134
89
|
captureReconciliation(details: ReconciliationDetails): void;
|
|
135
90
|
/** Capture delta retry exhausted */
|
|
136
91
|
captureDeltaRetryExhausted(details: DeltaRetryExhaustedDetails): void;
|
|
137
|
-
/** Capture WebSocket error */
|
|
138
|
-
captureWebSocketError(details: WebSocketErrorDetails): void;
|
|
139
92
|
/** Capture self-healing event */
|
|
140
93
|
captureSelfHealing(details: SelfHealingDetails): void;
|
|
141
|
-
/** Capture a claim state change (acquired / queued / granted / lost / rejected / expired) */
|
|
142
|
-
captureClaim(event: ClaimEvent): void;
|
|
143
|
-
/** Capture a notify-instead-of-abort stale-write collision */
|
|
144
|
-
captureConflict(event: ConflictEvent): void;
|
|
145
94
|
/** Capture commit returning lastSyncId: 0 */
|
|
146
95
|
captureCommitZeroSyncId(details: CommitZeroSyncIdDetails): void;
|
|
147
96
|
/** Wrap a synchronous function in a performance span */
|
|
@@ -149,7 +98,7 @@ export interface SyncObservabilityProvider {
|
|
|
149
98
|
/** Wrap an async function in a performance span */
|
|
150
99
|
startSpanAsync<T>(name: string, op: string, fn: () => Promise<T>, attributes?: SpanAttributes): Promise<T>;
|
|
151
100
|
}
|
|
152
|
-
export interface
|
|
101
|
+
export interface Analytics {
|
|
153
102
|
capture(event: string, properties?: Record<string, unknown>): void;
|
|
154
103
|
}
|
|
155
104
|
/**
|
|
@@ -184,67 +133,8 @@ export interface ModelDebugLoggerContract {
|
|
|
184
133
|
* while every explicit queued result requires a WAL correlation.
|
|
185
134
|
*/
|
|
186
135
|
export type CommitResult = MutationCommitResultInput;
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
* Every field is optional; omitted fields fall back to sensible defaults.
|
|
190
|
-
*
|
|
191
|
-
* - `idempotencyKey` — when set, the server caches the response for 24 hours and
|
|
192
|
-
* returns the cached result on any retry using the same key. When omitted, the
|
|
193
|
-
* SDK generates a fresh UUID per mutation, so every call is retry-safe by
|
|
194
|
-
* default. `null` is retained for source compatibility and is treated like
|
|
195
|
-
* omission; write retries never opt out of request identity.
|
|
196
|
-
* - `label` — a human-readable tag recorded with the mutation for debugging, such
|
|
197
|
-
* as "nightly cleanup" or "user click".
|
|
198
|
-
*/
|
|
199
|
-
export interface MutationOptions {
|
|
200
|
-
idempotencyKey?: string | null;
|
|
201
|
-
label?: string;
|
|
202
|
-
wait?: CommitStatus;
|
|
203
|
-
readAt?: number | null;
|
|
204
|
-
onStale?: 'reject' | 'overwrite' | 'notify' | null;
|
|
205
|
-
/**
|
|
206
|
-
* The fencing token (Option B) of the held claim this write belongs to. The
|
|
207
|
-
* server validates it against the entity's persisted high-water and rejects a
|
|
208
|
-
* stale token. Sourced from the claim handle, never set by hand.
|
|
209
|
-
*/
|
|
210
|
-
fenceToken?: number | null;
|
|
211
|
-
/** The id (or `{ id }`) of the claim this write belongs to. This is the
|
|
212
|
-
* low-level reference the commit carries so the write is attributed to a claim
|
|
213
|
-
* and can pass the holder's own lock. It is distinct from the `claim` handle on
|
|
214
|
-
* the model write parameters, which is the higher-level object you usually pass. */
|
|
215
|
-
claimRef?: string | {
|
|
216
|
-
readonly id: string;
|
|
217
|
-
} | null;
|
|
218
|
-
/**
|
|
219
|
-
* Reserved lineage field, forwarded on the wire as `causedByTaskId`. The client
|
|
220
|
-
* always sends `null`; write attribution now travels on the claim id instead.
|
|
221
|
-
*/
|
|
222
|
-
causedByTaskId?: string | null;
|
|
223
|
-
/**
|
|
224
|
-
* Batch-level read dependencies — the answer to "did anything I looked at
|
|
225
|
-
* change?" Each entry is a row (`{ model, id, readAt, fields? }`) or a sync
|
|
226
|
-
* group (`{ group, readAt }`) that this write was premised on. The server
|
|
227
|
-
* checks that none of them moved since their `readAt` and applies the entry's
|
|
228
|
-
* `onStale` behavior to the whole batch. This is distinct from the per-operation
|
|
229
|
-
* `readAt`, which guards only the row being written.
|
|
230
|
-
*
|
|
231
|
-
* See `packages/sync-engine/docs/concurrency-convention.md` (§3 the two
|
|
232
|
-
* footprints, §4 the read-set) for the governing convention.
|
|
233
|
-
*/
|
|
234
|
-
reads?: ReadDependency[] | null;
|
|
235
|
-
/**
|
|
236
|
-
* Durable read-dependencies — what this write (or the record it produces) should
|
|
237
|
-
* keep watching. Unlike `reads`, which is checked once at commit and discarded,
|
|
238
|
-
* each `track` entry is persisted and re-checked against every future delta; a
|
|
239
|
-
* later matching change opens a `StaleNotification` for the tracking participant,
|
|
240
|
-
* delivered at their next commit or live to a held claim. Each entry is a row
|
|
241
|
-
* (`{ model, id }`) or a sync group (`{ group }`), optionally pinned to a `readAt`
|
|
242
|
-
* baseline (defaults to this commit's watermark).
|
|
243
|
-
*
|
|
244
|
-
* See `packages/sync-engine/docs/groups.md` for how `track` drives propagation.
|
|
245
|
-
*/
|
|
246
|
-
track?: TrackDependency[] | null;
|
|
247
|
-
}
|
|
136
|
+
export type { MutationOptions } from '../transaction/resources/mutationOptions.js';
|
|
137
|
+
import type { MutationOptions } from '../transaction/resources/mutationOptions.js';
|
|
248
138
|
/**
|
|
249
139
|
* The subset of {@link MutationOptions} that travels with each write as it is
|
|
250
140
|
* queued offline and sent on the wire. A single shared type keeps the public
|
|
@@ -273,7 +163,7 @@ export interface MutationOperation {
|
|
|
273
163
|
*/
|
|
274
164
|
transactionId?: string;
|
|
275
165
|
readAt?: number | null;
|
|
276
|
-
onStale?:
|
|
166
|
+
onStale?: OnStaleMode | null;
|
|
277
167
|
/**
|
|
278
168
|
* The fencing token (Option B) carried on the wire for this op — the held
|
|
279
169
|
* claim's token, validated against the entity's high-water at commit.
|
|
@@ -333,7 +223,7 @@ export interface MutationExecutor {
|
|
|
333
223
|
* Application-specific configuration for the sync engine, describing how your
|
|
334
224
|
* models relate so the engine can order and merge writes correctly.
|
|
335
225
|
*/
|
|
336
|
-
export interface
|
|
226
|
+
export interface RuntimeConfig {
|
|
337
227
|
/**
|
|
338
228
|
* The order in which to create models, so a row is never inserted before the
|
|
339
229
|
* parent row its foreign key points at. Keyed by each model's type name, with
|
|
@@ -361,7 +251,7 @@ export interface SyncEngineConfig {
|
|
|
361
251
|
* Fields to preserve when merging a partial update into the local store. A
|
|
362
252
|
* change usually carries only the fields that changed; listing a model's
|
|
363
253
|
* essential fields here keeps them from being dropped during that merge.
|
|
364
|
-
* For example: `{ Task: ['title', 'projectId'],
|
|
254
|
+
* For example: `{ Task: ['title', 'projectId'], Section: ['reportId', 'order'] }`.
|
|
365
255
|
*/
|
|
366
256
|
essentialFields: Readonly<Record<string, readonly string[]>>;
|
|
367
257
|
/**
|
|
@@ -389,6 +279,16 @@ export interface SyncEngineConfig {
|
|
|
389
279
|
* hash above.
|
|
390
280
|
*/
|
|
391
281
|
expectedSourceSchemaHash?: string;
|
|
282
|
+
/**
|
|
283
|
+
* Per-model content hashes of the schema this client was built against,
|
|
284
|
+
* keyed by schema key (`tasks` → hash of that model's serialized JSON). The
|
|
285
|
+
* semantic layer of the drift check: on a whole-schema mismatch the client
|
|
286
|
+
* compares only the models IT declares against the server's per-model
|
|
287
|
+
* surface, so a purely additive server-side change (new models this build
|
|
288
|
+
* never references) is silence, and real divergence names the exact models.
|
|
289
|
+
* Advisory, like the hashes above.
|
|
290
|
+
*/
|
|
291
|
+
expectedModelHashes?: Readonly<Record<string, string>>;
|
|
392
292
|
}
|
|
393
293
|
/**
|
|
394
294
|
* Extends the WebSocket event map with your own collaboration events, such as
|
|
@@ -399,3 +299,13 @@ export interface WebSocketEventConfig {
|
|
|
399
299
|
/** Additional event type names beyond the core delta/presence/bootstrap events */
|
|
400
300
|
customEventTypes?: readonly string[];
|
|
401
301
|
}
|
|
302
|
+
/** @deprecated Renamed to {@link Logger}. Removed in 0.36.0. */
|
|
303
|
+
export type SyncLogger = Logger;
|
|
304
|
+
/** @deprecated Renamed to {@link ObservabilityProvider}. Removed in 0.36.0. */
|
|
305
|
+
export type SyncObservabilityProvider = ObservabilityProvider;
|
|
306
|
+
/** @deprecated Renamed to {@link Analytics}. Removed in 0.36.0. */
|
|
307
|
+
export type SyncAnalytics = Analytics;
|
|
308
|
+
/** @deprecated Renamed to {@link RuntimeConfig}. Removed in 0.36.0. */
|
|
309
|
+
export type SyncEngineConfig = RuntimeConfig;
|
|
310
|
+
/** @deprecated Renamed to {@link BreadcrumbCategory}. Removed in 0.36.0. */
|
|
311
|
+
export type SyncBreadcrumbCategory = BreadcrumbCategory;
|
package/dist/keys/index.d.ts
CHANGED
|
@@ -1,77 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* The Ablo API-key format: how keys are minted, hashed, and validated, in one
|
|
3
|
-
* place so every component that issues or checks a key agrees on the format.
|
|
4
|
-
*
|
|
5
|
-
* This module uses `node:crypto` and is therefore Node-only. It is published on
|
|
6
|
-
* the `@abloatai/ablo/keys` subpath and kept off the main browser-facing entry
|
|
7
|
-
* so a browser bundle never pulls in `node:crypto`.
|
|
8
|
-
*
|
|
9
|
-
* A key looks like `<sk|rk|ek|pk>_<live|test>_<30 base62 chars><6-char base62
|
|
10
|
-
* CRC32 checksum>`. The middle segment is the stable environment prefix, mapped
|
|
11
|
-
* on parse to `production` or `sandbox`. The recognizable prefix lets secret
|
|
12
|
-
* scanners spot a leaked key, and the trailing checksum lets the format reject a
|
|
13
|
-
* mistyped or forged key locally, without a database round-trip. Older keys
|
|
14
|
-
* (roughly a 43-character base64url body with no checksum) still validate by hash
|
|
15
|
-
* and parse here with `checksummed: false`.
|
|
16
|
-
*/
|
|
17
|
-
import { z } from 'zod';
|
|
18
|
-
import { type Environment } from '../environment.js';
|
|
19
|
-
export declare const API_KEY_KINDS: readonly ["secret", "restricted", "ephemeral", "publishable"];
|
|
20
|
-
export type ApiKeyKind = (typeof API_KEY_KINDS)[number];
|
|
21
|
-
export declare const API_KEY_ENVS: readonly ["production", "sandbox"];
|
|
22
|
-
export type ApiKeyEnv = Environment;
|
|
23
|
-
/** A structurally-valid Ablo API key, parsed into its parts. */
|
|
24
|
-
export interface ParsedApiKey {
|
|
25
|
-
/** The original plaintext. */
|
|
26
|
-
raw: string;
|
|
27
|
-
kind: ApiKeyKind;
|
|
28
|
-
env: ApiKeyEnv;
|
|
29
|
-
/** The chars after `<prefix>_<env>_` (body + checksum for new keys). */
|
|
30
|
-
body: string;
|
|
31
|
-
/** True when this is the new checksummed format (36-char base62 body). */
|
|
32
|
-
checksummed: boolean;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* The Zod schema for an Ablo API key. `parse` and `safeParse` return a typed
|
|
36
|
-
* {@link ParsedApiKey}. A checksummed-format key whose checksum does not match is
|
|
37
|
-
* rejected without any network call; an older key with no checksum parses with
|
|
38
|
-
* `checksummed: false` and is left for the server to validate by hash.
|
|
39
|
-
*/
|
|
40
|
-
export declare const apiKeySchema: z.ZodPipe<z.ZodString, z.ZodTransform<ParsedApiKey, string>>;
|
|
41
|
-
/** Parse + fully validate (incl. checksum). Returns null when invalid. */
|
|
42
|
-
export declare function parseApiKey(raw: string): ParsedApiKey | null;
|
|
43
|
-
/** True when the key uses the new checksummed format (regardless of validity). */
|
|
44
|
-
export declare function isChecksummedKey(raw: string): boolean;
|
|
45
|
-
/** Verify the embedded checksum. Meaningful only for checksummed-format keys. */
|
|
46
|
-
export declare function keyChecksumMatches(raw: string): boolean;
|
|
47
|
-
/**
|
|
48
|
-
* Mint a key: `<prefix>_<env>_<body><checksum>`. Returns the plaintext (shown
|
|
49
|
-
* once), its SHA-256 hash (persisted), and the 12-char display prefix.
|
|
50
|
-
*/
|
|
51
|
-
export declare function generateApiKey(env?: ApiKeyEnv, kind?: ApiKeyKind): {
|
|
52
|
-
plaintext: string;
|
|
53
|
-
hash: string;
|
|
54
|
-
prefix: string;
|
|
55
|
-
};
|
|
56
|
-
/**
|
|
57
|
-
* The stable SHA-256 hex digest of a plaintext key, computed both when a key is
|
|
58
|
-
* minted and when one is looked up. A fast hash is the right choice here rather
|
|
59
|
-
* than a password hash like bcrypt: API keys are long random strings, so there is
|
|
60
|
-
* no dictionary of guesses to slow down.
|
|
61
|
-
*/
|
|
62
|
-
export declare function hashApiKey(plaintext: string): string;
|
|
63
|
-
/** `whsec_` label prefix per the Standard Webhooks spec (not part of the key material). */
|
|
64
|
-
export declare const WEBHOOK_SECRET_PREFIX = "whsec_";
|
|
65
|
-
/**
|
|
66
|
-
* Mints a webhook signing secret following the Standard Webhooks specification
|
|
67
|
-
* (https://www.standardwebhooks.com): a base64-encoded random key of 24–64 bytes,
|
|
68
|
-
* labelled with the `whsec_` prefix. This uses 32 bytes (256 bits), comfortably
|
|
69
|
-
* inside that range. Unlike an API key, a signing secret is not hashed at rest,
|
|
70
|
-
* because signing a request with {@link signAbloSourceRequest} needs the live
|
|
71
|
-
* value. It is therefore kept in a secret store, returned to the customer once at
|
|
72
|
-
* creation, and never shown again.
|
|
73
|
-
*/
|
|
74
|
-
export declare function generateWebhookSecret(): {
|
|
75
|
-
plaintext: string;
|
|
76
|
-
last4: string;
|
|
77
|
-
};
|
|
1
|
+
export * from '../transaction/keys/index.js';
|