@abloatai/ablo 0.34.0 → 0.35.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 +4 -1
- package/CHANGELOG.md +684 -5
- package/README.md +39 -22
- package/dist/BaseSyncedStore.d.ts +152 -44
- package/dist/BaseSyncedStore.js +300 -184
- package/dist/Database.d.ts +9 -24
- package/dist/Database.js +37 -22
- package/dist/InstanceCache.d.ts +25 -4
- package/dist/InstanceCache.js +48 -15
- package/dist/LazyReferenceCollection.d.ts +3 -3
- package/dist/LazyReferenceCollection.js +4 -4
- package/dist/Model.d.ts +6 -6
- package/dist/Model.js +10 -10
- package/dist/ModelRegistry.d.ts +4 -4
- package/dist/ModelRegistry.js +3 -3
- package/dist/{SyncEngineContext.d.ts → RuntimeContext.d.ts} +20 -13
- package/dist/{SyncEngineContext.js → RuntimeContext.js} +11 -12
- package/dist/SyncClient.d.ts +42 -32
- package/dist/SyncClient.js +166 -110
- 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/cli.cjs +3459 -1126
- package/dist/client/Ablo.d.ts +42 -287
- package/dist/client/Ablo.js +118 -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 +4 -4
- package/dist/client/createInternalComponents.js +9 -8
- package/dist/client/createModelProxy.d.ts +78 -373
- package/dist/client/createModelProxy.js +114 -86
- package/dist/client/humans.d.ts +48 -0
- package/dist/client/humans.js +52 -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 +48 -0
- package/dist/client/reactiveEngine.js +910 -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/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 +9 -9
- package/dist/context.js +10 -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/DatabaseManager.js +1 -1
- package/dist/core/QueryView.d.ts +1 -1
- package/dist/core/QueryView.js +1 -1
- package/dist/core/StoreManager.d.ts +4 -23
- package/dist/core/StoreManager.js +5 -55
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.js +2 -2
- package/dist/core/storeContract.d.ts +2 -2
- package/dist/docs/catalog.d.ts +72 -0
- package/dist/docs/catalog.js +227 -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 +40 -34
- package/dist/index.js +26 -20
- 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 +2 -2
- package/dist/query/client.js +4 -4
- package/dist/query/types.d.ts +6 -41
- package/dist/query/types.js +2 -2
- package/dist/react/AbloProvider.d.ts +6 -8
- package/dist/react/AbloProvider.js +5 -7
- package/dist/react/context.d.ts +1 -1
- package/dist/react/context.js +1 -1
- package/dist/react/index.d.ts +5 -5
- package/dist/react/index.js +3 -3
- package/dist/react/internalContext.d.ts +1 -1
- package/dist/react/useAblo.d.ts +3 -3
- package/dist/react/useAblo.js +1 -1
- 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 +86 -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 +10 -10
- package/dist/schema/index.js +18 -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 +3 -3
- package/dist/schema/serialize.d.ts +15 -6
- package/dist/schema/serialize.js +17 -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/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/footprint.d.ts +111 -0
- package/dist/source/footprint.js +0 -0
- 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/stores/ObjectStore.d.ts +1 -1
- package/dist/stores/SyncActionStore.d.ts +1 -1
- package/dist/stores/SyncActionStore.js +2 -10
- 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 +123 -6
- package/dist/sync/BootstrapFetcher.js +492 -66
- package/dist/sync/ConnectionManager.d.ts +6 -198
- package/dist/sync/ConnectionManager.js +6 -677
- package/dist/sync/OnDemandLoader.d.ts +2 -2
- package/dist/sync/OnDemandLoader.js +60 -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/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 +1 -1
- package/dist/sync/participants.d.ts +5 -4
- package/dist/sync/participants.js +29 -22
- package/dist/sync/schemaDrift.d.ts +55 -0
- package/dist/sync/schemaDrift.js +53 -0
- package/dist/sync/schemas.d.ts +21 -32
- package/dist/sync/schemas.js +26 -17
- 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/testing/fixtures/bootstrap.d.ts +1 -1
- package/dist/testing/fixtures/deltas.d.ts +1 -1
- package/dist/testing/fixtures/httpResponses.d.ts +70 -0
- package/dist/testing/fixtures/httpResponses.js +90 -0
- package/dist/testing/fixtures/models.js +1 -1
- package/dist/testing/helpers/wait.js +1 -1
- package/dist/testing/mocks/MockMutationExecutor.d.ts +2 -2
- package/dist/testing/mocks/MockMutationExecutor.js +8 -14
- package/dist/testing/mocks/MockSyncContext.d.ts +11 -11
- package/dist/testing/mocks/MockSyncContext.js +10 -9
- package/dist/testing/mocks/MockSyncStore.js +1 -1
- package/dist/testing/mocks/MockWebSocket.d.ts +2 -2
- 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 +177 -0
- package/dist/transaction/auth/capability.js +199 -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 +49 -0
- package/dist/transaction/coordination/awaitClaimGrant.js +112 -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 +44 -0
- package/dist/transaction/coordination/locator.d.ts +83 -0
- package/dist/transaction/coordination/locator.js +82 -0
- package/dist/transaction/coordination/schema.d.ts +1473 -0
- package/dist/{coordination → transaction/coordination}/schema.js +490 -55
- package/dist/transaction/coordination/targetConflict.d.ts +2 -0
- package/dist/transaction/coordination/targetConflict.js +103 -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} +11 -11
- package/dist/{errorCodes.js → transaction/errorCodes.js} +35 -12
- package/dist/{errors.d.ts → transaction/errors.d.ts} +37 -13
- package/dist/{errors.js → transaction/errors.js} +85 -16
- 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 +192 -0
- package/dist/transaction/plugin.js +87 -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 +266 -0
- package/dist/transaction/resources/httpResources.js +7 -0
- package/dist/transaction/resources/modelOperations.d.ts +319 -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 +85 -0
- package/dist/transaction/resources/where.js +70 -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 +5 -5
- package/dist/{schema → transaction/schema}/field.js +5 -5
- 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 +57 -0
- package/dist/transaction/schema/openapi.js +340 -0
- package/dist/{schema → transaction/schema}/relation.d.ts +14 -14
- 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 +12 -10
- package/dist/{schema → transaction/schema}/schema.js +4 -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 +4 -5
- 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} +10 -36
- 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/{client → transaction/transport}/httpClient.d.ts +59 -16
- package/dist/{client → transaction/transport}/httpClient.js +5 -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 +171 -85
- 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 +576 -0
- package/dist/transaction/transport/wsTransport.js +1017 -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 +63 -45
- 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 +351 -0
- package/dist/transaction/wire/accountResponses.js +255 -0
- package/dist/transaction/wire/auth.d.ts +49 -0
- package/dist/transaction/wire/auth.js +57 -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 +463 -0
- package/dist/transaction/wire/claims.js +229 -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 +177 -0
- package/dist/transaction/wire/feedEvent.js +39 -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 +552 -0
- package/dist/transaction/wire/inboundFrames.js +116 -0
- package/dist/transaction/wire/index.d.ts +50 -0
- package/dist/transaction/wire/index.js +74 -0
- package/dist/{wire → transaction/wire}/listEnvelope.d.ts +13 -14
- package/dist/transaction/wire/listEnvelope.js +42 -0
- package/dist/transaction/wire/modelResponses.d.ts +85 -0
- package/dist/transaction/wire/modelResponses.js +43 -0
- package/dist/transactions/{TransactionQueue.d.ts → mutations/MutationQueue.d.ts} +79 -38
- package/dist/transactions/{TransactionQueue.js → mutations/MutationQueue.js} +110 -59
- 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} +16 -15
- package/dist/transactions/{commitPayload.js → mutations/commitPayload.js} +12 -12
- package/dist/transactions/{deltaConfirmation.d.ts → mutations/deltaConfirmation.d.ts} +11 -11
- package/dist/transactions/{deltaConfirmation.js → mutations/deltaConfirmation.js} +7 -7
- 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} +3 -3
- package/dist/transactions/{replayValidation.js → mutations/replayValidation.js} +4 -3
- package/dist/utils/mobxSetup.d.ts +1 -1
- package/dist/utils/mobxSetup.js +5 -2
- 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 +19 -12
- package/docs/api-keys.md +8 -4
- package/docs/api.md +22 -18
- package/docs/audit.md +2 -0
- package/docs/cli.md +31 -3
- package/docs/client-behavior.md +8 -6
- package/docs/concurrency-convention.md +30 -24
- package/docs/coordination.md +48 -38
- package/docs/data-sources.md +3 -1
- package/docs/debugging.md +5 -3
- 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 +45 -44
- package/docs/examples/server-agent.md +46 -26
- package/docs/groups.md +32 -29
- package/docs/guarantees.md +4 -2
- package/docs/how-it-works.md +9 -7
- package/docs/idempotency.md +126 -0
- package/docs/identity.md +58 -54
- package/docs/index.md +172 -84
- package/docs/integration-guide.md +17 -16
- package/docs/interaction-model.md +6 -4
- package/docs/mcp.md +41 -16
- package/docs/migration.md +63 -5
- package/docs/operating-on-your-database.md +111 -0
- package/docs/projects.md +2 -0
- package/docs/quickstart.md +22 -5
- package/docs/react.md +12 -10
- package/docs/schema-contract.md +5 -3
- package/docs/session-settings.md +108 -0
- package/docs/sessions.md +3 -1
- package/docs/webhooks.md +3 -1
- package/llms.txt +47 -17
- package/package.json +10 -8
- 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/client/durableWrites.d.ts +0 -21
- package/dist/coordination/schema.d.ts +0 -722
- package/dist/schema/openapi.d.ts +0 -29
- package/dist/schema/openapi.js +0 -124
- package/dist/transactions/durableWriteStore.js +0 -30
- 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/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/coordination}/claimHeartbeatLoop.d.ts +0 -0
- /package/dist/{client → transaction/coordination}/claimHeartbeatLoop.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/{utils → transaction/utils}/duration.d.ts +0 -0
- /package/dist/{utils → transaction/utils}/duration.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
|
@@ -24,9 +24,9 @@ import type { InstanceCache } from '../InstanceCache.js';
|
|
|
24
24
|
import type { Database } from '../Database.js';
|
|
25
25
|
import type { Model } from '../Model.js';
|
|
26
26
|
import type { ModelRegistry } from '../ModelRegistry.js';
|
|
27
|
-
import type { RecoveryClass } from '../errorCodes.js';
|
|
27
|
+
import type { RecoveryClass } from '../transaction/errorCodes.js';
|
|
28
28
|
import type { LoadWhere, WhereClause } from '../query/types.js';
|
|
29
|
-
import type { Schema } from '../schema/schema.js';
|
|
29
|
+
import type { Schema } from '../transaction/schema/schema.js';
|
|
30
30
|
export interface OnDemandLoaderOptions {
|
|
31
31
|
readonly objectPool: InstanceCache;
|
|
32
32
|
readonly database: Database;
|
|
@@ -21,8 +21,32 @@
|
|
|
21
21
|
* is ready.
|
|
22
22
|
*/
|
|
23
23
|
import { ModelScope } from '../InstanceCache.js';
|
|
24
|
-
import { AbloValidationError } from '../errors.js';
|
|
24
|
+
import { AbloValidationError } from '../transaction/errors.js';
|
|
25
25
|
import { postQuery } from '../query/client.js';
|
|
26
|
+
function timestampMs(value) {
|
|
27
|
+
if (value instanceof Date) {
|
|
28
|
+
const timestamp = value.getTime();
|
|
29
|
+
return Number.isFinite(timestamp) ? timestamp : undefined;
|
|
30
|
+
}
|
|
31
|
+
if (typeof value === 'number' && Number.isFinite(value))
|
|
32
|
+
return value;
|
|
33
|
+
if (typeof value !== 'string')
|
|
34
|
+
return undefined;
|
|
35
|
+
const parsed = Date.parse(value);
|
|
36
|
+
return Number.isNaN(parsed) ? undefined : parsed;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* A query response is a snapshot, not an ordered delta. It may have started
|
|
40
|
+
* before a local optimistic write and completed after it. Only treat the row
|
|
41
|
+
* as authoritative over an existing model when its server timestamp is newer;
|
|
42
|
+
* missing timestamps retain the legacy merge behavior for custom sources that
|
|
43
|
+
* do not expose `updatedAt`.
|
|
44
|
+
*/
|
|
45
|
+
function snapshotDoesNotAdvanceModel(data, model) {
|
|
46
|
+
const incoming = timestampMs(data.updatedAt);
|
|
47
|
+
const resident = timestampMs(model.updatedAt);
|
|
48
|
+
return incoming !== undefined && resident !== undefined && incoming <= resident;
|
|
49
|
+
}
|
|
26
50
|
export class OnDemandLoader {
|
|
27
51
|
opts;
|
|
28
52
|
inFlight = new Map();
|
|
@@ -323,19 +347,27 @@ export class OnDemandLoader {
|
|
|
323
347
|
if (typeof obj.id !== 'string')
|
|
324
348
|
return null;
|
|
325
349
|
if (this.opts.objectPool.has(obj.id)) {
|
|
326
|
-
//
|
|
327
|
-
//
|
|
328
|
-
//
|
|
329
|
-
//
|
|
330
|
-
// after a missed delta (WS dropped, tab slept, redeploy) silently
|
|
331
|
-
// discards the fresh state and the consumer keeps seeing the
|
|
332
|
-
// birth-time snapshot forever. `updateFromData` is the same
|
|
333
|
-
// primitive `InstanceCache.upsert()` uses for delta application,
|
|
334
|
-
// so the behaviour matches "delta-applied" semantics exactly.
|
|
350
|
+
// Keep the existing instance alive when a query refreshes it. A query
|
|
351
|
+
// can carry fresher server state after a missed delta, but unlike the
|
|
352
|
+
// ordered delta stream it can also finish late with an older snapshot;
|
|
353
|
+
// the reconciliation below distinguishes those cases before applying.
|
|
335
354
|
const existing = this.opts.objectPool.get(obj.id);
|
|
336
355
|
if (existing) {
|
|
337
356
|
const stamped = this.stampTypename(obj, typename);
|
|
338
|
-
|
|
357
|
+
// Network queries are unordered snapshots. A request that began before
|
|
358
|
+
// an optimistic resize can return afterward with the old row; applying
|
|
359
|
+
// it here would visibly snap the live model back, and the matching
|
|
360
|
+
// authoritative delta cannot repair it because own echoes are
|
|
361
|
+
// intentionally suppressed. Keep a newer resident row intact.
|
|
362
|
+
if (snapshotDoesNotAdvanceModel(stamped, existing))
|
|
363
|
+
return existing;
|
|
364
|
+
// If the source has no comparable timestamp, retain pending local
|
|
365
|
+
// fields while accepting unrelated server fields. This is the same
|
|
366
|
+
// local-first merge contract used by SyncClient's delta resolver.
|
|
367
|
+
const localChanges = existing.getChanges();
|
|
368
|
+
existing.updateFromData(Object.keys(localChanges).length > 0
|
|
369
|
+
? { ...stamped, ...localChanges, updatedAt: existing.updatedAt }
|
|
370
|
+
: stamped);
|
|
339
371
|
return existing;
|
|
340
372
|
}
|
|
341
373
|
return null;
|
|
@@ -347,7 +379,7 @@ export class OnDemandLoader {
|
|
|
347
379
|
// "InstanceCache.createFromData: No model identifier found" warning,
|
|
348
380
|
// failing to hydrate the entity from cache (network path then has to
|
|
349
381
|
// re-populate it). The typename comes from the schema relation
|
|
350
|
-
// (`'
|
|
382
|
+
// (`'Block'`, `'Section'`, etc.) so no guessing involved.
|
|
351
383
|
const stamped = this.stampTypename(obj, typename);
|
|
352
384
|
return this.opts.objectPool.createFromData(stamped, undefined, opts);
|
|
353
385
|
}
|
|
@@ -367,8 +399,15 @@ export class OnDemandLoader {
|
|
|
367
399
|
const obj = item;
|
|
368
400
|
if (obj.__typename === typename)
|
|
369
401
|
return obj;
|
|
370
|
-
|
|
371
|
-
|
|
402
|
+
// Drop the driver-mangled `_Typename` AND any row-carried `__typename`
|
|
403
|
+
// that disagrees with the schema's: these rows were returned FOR this
|
|
404
|
+
// model's query, so the schema typename is correct by construction — and
|
|
405
|
+
// without stripping it, the spread would put the row's variant (a server
|
|
406
|
+
// echoing the schema KEY `tasks` instead of the typename `Task`) back on
|
|
407
|
+
// top of the stamp, sending hydration to the strict unknown-model error.
|
|
408
|
+
const { _Typename: _dropMangled, __typename: _dropRowVariant, ...rest } = obj;
|
|
409
|
+
void _dropMangled;
|
|
410
|
+
void _dropRowVariant;
|
|
372
411
|
return { __typename: typename, ...rest };
|
|
373
412
|
}
|
|
374
413
|
async queryNetwork(modelName, clauses, options) {
|
|
@@ -403,7 +442,7 @@ export class OnDemandLoader {
|
|
|
403
442
|
return row;
|
|
404
443
|
});
|
|
405
444
|
// Expand: server returns related entities nested under each row
|
|
406
|
-
// (`row.
|
|
445
|
+
// (`row.blocks = [{...}, ...]`). Walk the nested shape, stamp the
|
|
407
446
|
// typename from the schema's relation metadata (the server bakes
|
|
408
447
|
// `__typename` into the JSONB but the postgres.camel driver
|
|
409
448
|
// mangles it to `_Typename` mid-flight, so client-side stamping
|
|
@@ -475,8 +514,8 @@ export class OnDemandLoader {
|
|
|
475
514
|
}
|
|
476
515
|
resolveTypename(modelName) {
|
|
477
516
|
// Schema is the source of truth for wire typenames. The model proxy
|
|
478
|
-
// is keyed by camelCase plural (`
|
|
479
|
-
// InstanceCache typeIndex use the typename (`
|
|
517
|
+
// is keyed by camelCase plural (`blocks`) but the wire query +
|
|
518
|
+
// InstanceCache typeIndex use the typename (`Block`).
|
|
480
519
|
const def = this.opts.schema
|
|
481
520
|
.models?.[modelName];
|
|
482
521
|
return def?.typename ?? modelName;
|
|
@@ -512,8 +551,8 @@ function stableKey(modelName, clauses, orderBy, limit, expand) {
|
|
|
512
551
|
const kb = JSON.stringify(b);
|
|
513
552
|
return ka < kb ? -1 : ka > kb ? 1 : 0;
|
|
514
553
|
});
|
|
515
|
-
// Expand is part of the query identity: `
|
|
516
|
-
// with `expand:['
|
|
554
|
+
// Expand is part of the query identity: `sections where report=r1` and the same
|
|
555
|
+
// with `expand:['blocks']` hydrate different data, so they must not share a
|
|
517
556
|
// ledger/dedup key. Sorted so relation order doesn't fork the key.
|
|
518
557
|
const expandKey = expand && expand.length > 0 ? [...expand].sort() : undefined;
|
|
519
558
|
return JSON.stringify({ modelName, where: sorted, orderBy, limit, expand: expandKey });
|
|
@@ -693,10 +732,10 @@ function likeRegex(pattern, insensitive) {
|
|
|
693
732
|
return new RegExp(`^${body}$`, insensitive ? 'i' : '');
|
|
694
733
|
}
|
|
695
734
|
/**
|
|
696
|
-
* Schema fields are camelCase (`
|
|
735
|
+
* Schema fields are camelCase (`sectionId`); the wire query expects
|
|
697
736
|
* the server-side column name. The query server's input resolver
|
|
698
737
|
* casing-folds, but we send snake_case to match the convention used
|
|
699
|
-
* by the existing loaders' postQuery calls (`'
|
|
738
|
+
* by the existing loaders' postQuery calls (`'section_id'` etc.).
|
|
700
739
|
*/
|
|
701
740
|
function columnize(field) {
|
|
702
741
|
return field.replace(/[A-Z]/g, (c) => `_${c.toLowerCase()}`);
|
|
@@ -73,7 +73,7 @@ export interface SubscriptionManagerOptions {
|
|
|
73
73
|
}
|
|
74
74
|
export declare class SubscriptionManager {
|
|
75
75
|
private readonly transport;
|
|
76
|
-
private
|
|
76
|
+
private baseGroups;
|
|
77
77
|
private readonly warmTtlMs;
|
|
78
78
|
private readonly maxWarm;
|
|
79
79
|
private readonly now;
|
|
@@ -88,8 +88,19 @@ export declare class SubscriptionManager {
|
|
|
88
88
|
/** Coalescing state so concurrent mutations collapse into one in-flight call. */
|
|
89
89
|
private inFlight;
|
|
90
90
|
private dirty;
|
|
91
|
-
|
|
91
|
+
/** Arms the sweep timer; `null` when sweeping is disabled. The timer is
|
|
92
|
+
* armed lazily, on the first warm entry — sweeping exists only to expire
|
|
93
|
+
* warm groups, so a manager that never warms one holds no timer (and a
|
|
94
|
+
* client that is constructed but never navigates holds none either). */
|
|
95
|
+
private readonly armSweep;
|
|
96
|
+
private cancelSweep;
|
|
92
97
|
constructor(options: SubscriptionManagerOptions);
|
|
98
|
+
/**
|
|
99
|
+
* Seeds the permanent scopes once the host resolves identity. The manager
|
|
100
|
+
* can exist from client construction — before the connection's read scope
|
|
101
|
+
* is known — so the base set is seeded rather than fixed at construction.
|
|
102
|
+
*/
|
|
103
|
+
setBaseGroups(groups: readonly string[]): void;
|
|
93
104
|
/**
|
|
94
105
|
* Move a group into the warm set with a fresh TTL, maintaining LRU order
|
|
95
106
|
* and the `maxWarm` cap. JS `Map` preserves insertion order, so deleting
|
|
@@ -49,7 +49,12 @@ export class SubscriptionManager {
|
|
|
49
49
|
/** Coalescing state so concurrent mutations collapse into one in-flight call. */
|
|
50
50
|
inFlight = null;
|
|
51
51
|
dirty = false;
|
|
52
|
-
|
|
52
|
+
/** Arms the sweep timer; `null` when sweeping is disabled. The timer is
|
|
53
|
+
* armed lazily, on the first warm entry — sweeping exists only to expire
|
|
54
|
+
* warm groups, so a manager that never warms one holds no timer (and a
|
|
55
|
+
* client that is constructed but never navigates holds none either). */
|
|
56
|
+
armSweep;
|
|
57
|
+
cancelSweep = null;
|
|
53
58
|
constructor(options) {
|
|
54
59
|
this.transport = options.transport;
|
|
55
60
|
this.baseGroups = new Set(options.baseGroups ?? []);
|
|
@@ -63,14 +68,24 @@ export class SubscriptionManager {
|
|
|
63
68
|
const handle = setInterval(fn, ms);
|
|
64
69
|
return () => { clearInterval(handle); };
|
|
65
70
|
});
|
|
66
|
-
this.
|
|
67
|
-
|
|
68
|
-
|
|
71
|
+
this.armSweep = () => {
|
|
72
|
+
this.cancelSweep = schedule(() => {
|
|
73
|
+
void this.sweep();
|
|
74
|
+
}, sweepInterval);
|
|
75
|
+
};
|
|
69
76
|
}
|
|
70
77
|
else {
|
|
71
|
-
this.
|
|
78
|
+
this.armSweep = null;
|
|
72
79
|
}
|
|
73
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Seeds the permanent scopes once the host resolves identity. The manager
|
|
83
|
+
* can exist from client construction — before the connection's read scope
|
|
84
|
+
* is known — so the base set is seeded rather than fixed at construction.
|
|
85
|
+
*/
|
|
86
|
+
setBaseGroups(groups) {
|
|
87
|
+
this.baseGroups = new Set(groups);
|
|
88
|
+
}
|
|
74
89
|
/**
|
|
75
90
|
* Move a group into the warm set with a fresh TTL, maintaining LRU order
|
|
76
91
|
* and the `maxWarm` cap. JS `Map` preserves insertion order, so deleting
|
|
@@ -79,6 +94,8 @@ export class SubscriptionManager {
|
|
|
79
94
|
* warm — callers guard before calling this.
|
|
80
95
|
*/
|
|
81
96
|
warmGroup(group) {
|
|
97
|
+
if (this.armSweep && !this.cancelSweep)
|
|
98
|
+
this.armSweep();
|
|
82
99
|
this.warm.delete(group);
|
|
83
100
|
this.warm.set(group, this.now() + this.warmTtlMs);
|
|
84
101
|
while (this.warm.size > this.maxWarm) {
|
|
@@ -172,6 +189,7 @@ export class SubscriptionManager {
|
|
|
172
189
|
/** Stop the sweep timer. The connection is unaffected. */
|
|
173
190
|
dispose() {
|
|
174
191
|
this.cancelSweep?.();
|
|
192
|
+
this.cancelSweep = null;
|
|
175
193
|
}
|
|
176
194
|
/**
|
|
177
195
|
* Push the desired set to the transport iff it differs from the last
|