@abloatai/ablo 0.26.0 → 0.28.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/CHANGELOG.md +42 -2
- package/README.md +102 -86
- package/dist/BaseSyncedStore.d.ts +85 -88
- package/dist/BaseSyncedStore.js +134 -151
- package/dist/Database.d.ts +68 -69
- package/dist/Database.js +316 -135
- package/dist/{ObjectPool.d.ts → InstanceCache.d.ts} +10 -13
- package/dist/{ObjectPool.js → InstanceCache.js} +85 -83
- package/dist/LazyReferenceCollection.d.ts +11 -15
- package/dist/LazyReferenceCollection.js +12 -16
- package/dist/Model.d.ts +54 -52
- package/dist/Model.js +78 -62
- package/dist/ModelRegistry.d.ts +21 -19
- package/dist/ModelRegistry.js +23 -27
- package/dist/NetworkMonitor.d.ts +5 -6
- package/dist/NetworkMonitor.js +5 -6
- package/dist/SyncClient.d.ts +122 -118
- package/dist/SyncClient.js +541 -245
- package/dist/adapters/alwaysOnline.d.ts +6 -8
- package/dist/adapters/alwaysOnline.js +6 -8
- package/dist/adapters/inMemoryStorage.d.ts +10 -9
- package/dist/adapters/inMemoryStorage.js +21 -9
- package/dist/agent/Agent.d.ts +27 -32
- package/dist/agent/Agent.js +18 -19
- package/dist/agent/index.d.ts +4 -4
- package/dist/agent/index.js +5 -5
- package/dist/agent/session.d.ts +47 -44
- package/dist/agent/session.js +37 -48
- package/dist/agent/types.d.ts +26 -31
- package/dist/agent/types.js +6 -7
- package/dist/ai-sdk/coordinatedTool.d.ts +108 -0
- package/dist/ai-sdk/{coordinated-tool.js → coordinatedTool.js} +44 -38
- package/dist/ai-sdk/coordinationContext.d.ts +46 -0
- package/dist/ai-sdk/{coordination-context.js → coordinationContext.js} +26 -33
- package/dist/ai-sdk/index.d.ts +25 -22
- package/dist/ai-sdk/index.js +25 -22
- package/dist/ai-sdk/wrap.d.ts +6 -7
- package/dist/ai-sdk/wrap.js +1 -1
- package/dist/auth/credentialPolicy.d.ts +69 -74
- package/dist/auth/credentialPolicy.js +51 -56
- package/dist/auth/credentialSource.d.ts +6 -5
- package/dist/auth/credentialSource.js +9 -10
- package/dist/auth/index.d.ts +59 -58
- package/dist/auth/index.js +31 -37
- package/dist/auth/schemas.d.ts +5 -4
- package/dist/auth/schemas.js +5 -4
- package/dist/batching/index.d.ts +19 -21
- package/dist/batching/index.js +14 -17
- package/dist/cli.cjs +173 -121
- package/dist/client/Ablo.d.ts +97 -74
- package/dist/client/Ablo.js +129 -163
- package/dist/client/ApiClient.d.ts +30 -19
- package/dist/client/ApiClient.js +442 -81
- package/dist/client/auth.d.ts +47 -47
- package/dist/client/auth.js +108 -117
- package/dist/client/claimHeartbeatLoop.d.ts +50 -0
- package/dist/client/claimHeartbeatLoop.js +88 -0
- package/dist/client/consoleLogger.d.ts +5 -6
- package/dist/client/consoleLogger.js +5 -6
- package/dist/client/createInternalComponents.d.ts +16 -17
- package/dist/client/createInternalComponents.js +26 -31
- package/dist/client/createModelProxy.d.ts +130 -120
- package/dist/client/createModelProxy.js +152 -122
- package/dist/client/credentialEndpoint.d.ts +40 -42
- package/dist/client/credentialEndpoint.js +35 -36
- package/dist/client/functionalUpdate.d.ts +29 -27
- package/dist/client/functionalUpdate.js +21 -21
- package/dist/client/hostedEndpoints.d.ts +9 -12
- package/dist/client/hostedEndpoints.js +9 -12
- package/dist/client/httpClient.d.ts +59 -53
- package/dist/client/httpClient.js +29 -31
- package/dist/client/identity.d.ts +15 -20
- package/dist/client/identity.js +47 -58
- package/dist/client/modelRegistration.d.ts +5 -9
- package/dist/client/modelRegistration.js +78 -87
- package/dist/client/options.d.ts +157 -157
- package/dist/client/options.js +3 -7
- package/dist/client/registerDataSource.d.ts +9 -9
- package/dist/client/registerDataSource.js +15 -16
- package/dist/client/resourceTypes.d.ts +64 -75
- package/dist/client/resourceTypes.js +4 -10
- package/dist/client/schemaConfig.d.ts +31 -43
- package/dist/client/schemaConfig.js +38 -50
- package/dist/client/sessionMint.d.ts +16 -12
- package/dist/client/sessionMint.js +26 -31
- package/dist/client/validateAbloOptions.d.ts +12 -14
- package/dist/client/validateAbloOptions.js +8 -9
- package/dist/client/writeOptionsSchema.d.ts +18 -16
- package/dist/client/writeOptionsSchema.js +23 -20
- package/dist/client/wsMutationExecutor.d.ts +16 -20
- package/dist/client/wsMutationExecutor.js +18 -23
- package/dist/commit/contract.d.ts +493 -0
- package/dist/commit/contract.js +187 -0
- package/dist/commit/index.d.ts +6 -0
- package/dist/commit/index.js +5 -0
- package/dist/context.d.ts +6 -4
- package/dist/context.js +6 -4
- package/dist/coordination/index.d.ts +10 -8
- package/dist/coordination/index.js +14 -12
- package/dist/coordination/schema.d.ts +176 -128
- package/dist/coordination/schema.js +197 -133
- package/dist/coordination/trace.d.ts +9 -10
- package/dist/coordination/trace.js +13 -14
- package/dist/core/DatabaseManager.d.ts +5 -7
- package/dist/core/DatabaseManager.js +15 -19
- package/dist/core/QueryProcessor.d.ts +7 -9
- package/dist/core/QueryProcessor.js +22 -28
- package/dist/core/QueryView.d.ts +8 -8
- package/dist/core/QueryView.js +2 -2
- package/dist/core/StoreManager.d.ts +14 -14
- package/dist/core/StoreManager.js +33 -24
- package/dist/core/ViewRegistry.d.ts +5 -5
- package/dist/core/ViewRegistry.js +4 -4
- package/dist/core/index.d.ts +17 -12
- package/dist/core/index.js +32 -26
- package/dist/core/openIDBWithTimeout.d.ts +38 -36
- package/dist/core/openIDBWithTimeout.js +42 -43
- package/dist/core/queryUtils.d.ts +45 -0
- package/dist/core/queryUtils.js +69 -0
- package/dist/core/storeContract.d.ts +63 -61
- package/dist/core/storeContract.js +8 -12
- package/dist/environment.d.ts +28 -0
- package/dist/environment.js +21 -0
- package/dist/errorCodes.d.ts +107 -99
- package/dist/errorCodes.js +137 -134
- package/dist/errors.d.ts +160 -166
- package/dist/errors.js +155 -158
- package/dist/index.d.ts +36 -27
- package/dist/index.js +91 -86
- package/dist/interfaces/index.d.ts +102 -113
- package/dist/interfaces/index.js +5 -4
- package/dist/keys/index.d.ts +27 -29
- package/dist/keys/index.js +41 -40
- package/dist/mutators/RecordingTransaction.d.ts +16 -16
- package/dist/mutators/RecordingTransaction.js +31 -37
- package/dist/mutators/Transaction.d.ts +18 -26
- package/dist/mutators/Transaction.js +14 -20
- package/dist/mutators/UndoManager.d.ts +124 -131
- package/dist/mutators/UndoManager.js +177 -156
- package/dist/mutators/defineMutators.d.ts +23 -34
- package/dist/mutators/defineMutators.js +14 -20
- package/dist/mutators/inverseOp.d.ts +12 -15
- package/dist/mutators/inverseOp.js +12 -15
- package/dist/mutators/mutateActions.d.ts +10 -9
- package/dist/mutators/mutateActions.js +1 -1
- package/dist/mutators/readerActions.d.ts +9 -8
- package/dist/mutators/readerActions.js +2 -2
- package/dist/mutators/undoApply.d.ts +31 -27
- package/dist/mutators/undoApply.js +26 -24
- package/dist/policy/index.d.ts +5 -3
- package/dist/policy/index.js +5 -3
- package/dist/policy/types.d.ts +104 -100
- package/dist/policy/types.js +67 -66
- package/dist/query/client.d.ts +28 -23
- package/dist/query/client.js +45 -43
- package/dist/query/types.d.ts +37 -60
- package/dist/query/types.js +13 -33
- package/dist/react/AbloProvider.d.ts +1 -1
- package/dist/react/AbloProvider.js +2 -2
- package/dist/react/context.d.ts +25 -28
- package/dist/react/context.js +9 -10
- package/dist/react/index.d.ts +41 -42
- package/dist/react/index.js +37 -38
- package/dist/react/internalContext.d.ts +17 -19
- package/dist/react/useAblo.d.ts +28 -25
- package/dist/react/useAblo.js +41 -17
- package/dist/react/useCurrentUserId.d.ts +8 -7
- package/dist/react/useCurrentUserId.js +8 -7
- package/dist/react/useErrorListener.d.ts +7 -7
- package/dist/react/useErrorListener.js +10 -11
- package/dist/react/useMutationFailureListener.d.ts +8 -8
- package/dist/react/useMutationFailureListener.js +8 -8
- package/dist/react/useMutators.d.ts +11 -11
- package/dist/react/useMutators.js +3 -3
- package/dist/react/useReactive.js +2 -2
- package/dist/react/useSyncStatus.d.ts +4 -6
- package/dist/react/useUndoScope.d.ts +7 -9
- package/dist/react/useUndoScope.js +1 -1
- package/dist/schema/coordination.d.ts +21 -25
- package/dist/schema/coordination.js +21 -25
- package/dist/schema/ddl.d.ts +43 -39
- package/dist/schema/ddl.js +75 -68
- package/dist/schema/ddlLock.d.ts +20 -24
- package/dist/schema/ddlLock.js +18 -23
- package/dist/schema/diff.d.ts +99 -61
- package/dist/schema/diff.js +43 -34
- package/dist/schema/field.d.ts +37 -42
- package/dist/schema/field.js +35 -48
- package/dist/schema/generate.d.ts +12 -12
- package/dist/schema/generate.js +12 -12
- package/dist/schema/index.d.ts +3 -3
- package/dist/schema/index.js +21 -23
- package/dist/schema/model.d.ts +118 -143
- package/dist/schema/model.js +22 -33
- package/dist/schema/openapi.d.ts +10 -9
- package/dist/schema/openapi.js +5 -3
- package/dist/schema/queries.d.ts +29 -31
- package/dist/schema/queries.js +23 -25
- package/dist/schema/relation.d.ts +89 -99
- package/dist/schema/relation.js +13 -13
- package/dist/schema/residency.d.ts +16 -13
- package/dist/schema/residency.js +16 -13
- package/dist/schema/roles.d.ts +36 -43
- package/dist/schema/roles.js +31 -37
- package/dist/schema/schema.d.ts +64 -43
- package/dist/schema/schema.js +31 -32
- package/dist/schema/select.d.ts +13 -13
- package/dist/schema/select.js +13 -13
- package/dist/schema/serialize.d.ts +28 -31
- package/dist/schema/serialize.js +27 -31
- package/dist/schema/sugar.d.ts +17 -32
- package/dist/schema/sugar.js +14 -29
- package/dist/schema/{sync-delta-row.d.ts → syncDeltaRow.d.ts} +26 -49
- package/dist/schema/syncDeltaRow.js +89 -0
- package/dist/schema/tenancy.d.ts +44 -46
- package/dist/schema/tenancy.js +46 -48
- package/dist/server/adapter.d.ts +58 -58
- package/dist/server/adapter.js +13 -14
- package/dist/server/commit.d.ts +60 -64
- package/dist/server/index.d.ts +9 -10
- package/dist/server/index.js +1 -1
- package/dist/server/readConfig.d.ts +70 -0
- package/dist/server/readConfig.js +8 -0
- package/dist/server/storageMode.d.ts +23 -0
- package/dist/server/storageMode.js +17 -0
- package/dist/source/adapter.d.ts +30 -25
- package/dist/source/adapter.js +10 -10
- package/dist/source/adapters/drizzle.d.ts +28 -23
- package/dist/source/adapters/drizzle.js +30 -25
- package/dist/source/adapters/kysely.d.ts +27 -25
- package/dist/source/adapters/kysely.js +24 -23
- package/dist/source/adapters/memory.d.ts +8 -7
- package/dist/source/adapters/memory.js +9 -8
- package/dist/source/adapters/prisma.d.ts +13 -12
- package/dist/source/adapters/prisma.js +22 -25
- package/dist/source/conformance.d.ts +18 -11
- package/dist/source/conformance.js +17 -11
- package/dist/source/connector.d.ts +31 -32
- package/dist/source/connector.js +28 -28
- package/dist/source/connectorProtocol.d.ts +160 -0
- package/dist/source/connectorProtocol.js +162 -0
- package/dist/source/contract.d.ts +26 -27
- package/dist/source/contract.js +28 -29
- package/dist/source/factory.d.ts +46 -58
- package/dist/source/factory.js +22 -27
- package/dist/source/index.d.ts +7 -9
- package/dist/source/index.js +12 -14
- package/dist/source/migrations.d.ts +9 -9
- package/dist/source/migrations.js +9 -9
- package/dist/source/next.d.ts +9 -10
- package/dist/source/next.js +6 -7
- package/dist/source/pushQueue.d.ts +69 -47
- package/dist/source/pushQueue.js +32 -28
- package/dist/source/signing.d.ts +46 -17
- package/dist/source/signing.js +28 -11
- package/dist/source/types.d.ts +121 -104
- package/dist/source/types.js +13 -14
- package/dist/stores/ObjectStore.d.ts +24 -12
- package/dist/stores/ObjectStore.js +38 -16
- package/dist/stores/ObjectStoreContract.d.ts +14 -15
- package/dist/stores/SyncActionStore.d.ts +7 -11
- package/dist/stores/SyncActionStore.js +13 -17
- package/dist/surface.d.ts +28 -21
- package/dist/surface.js +29 -20
- package/dist/sync/{BootstrapHelper.d.ts → BootstrapFetcher.d.ts} +36 -42
- package/dist/sync/{BootstrapHelper.js → BootstrapFetcher.js} +76 -76
- package/dist/sync/ConnectionManager.d.ts +39 -50
- package/dist/sync/ConnectionManager.js +55 -66
- package/dist/sync/NetworkProbe.d.ts +24 -29
- package/dist/sync/NetworkProbe.js +63 -69
- package/dist/sync/{HydrationCoordinator.d.ts → OnDemandLoader.d.ts} +42 -41
- package/dist/sync/{HydrationCoordinator.js → OnDemandLoader.js} +59 -54
- package/dist/sync/{AreaOfInterestManager.d.ts → SubscriptionManager.d.ts} +43 -57
- package/dist/sync/{AreaOfInterestManager.js → SubscriptionManager.js} +43 -51
- package/dist/sync/SyncWebSocket.d.ts +141 -166
- package/dist/sync/SyncWebSocket.js +191 -223
- package/dist/sync/awaitClaimGrant.d.ts +18 -18
- package/dist/sync/awaitClaimGrant.js +11 -11
- package/dist/sync/bootstrapApply.d.ts +34 -24
- package/dist/sync/bootstrapApply.js +27 -19
- package/dist/sync/commitFrames.d.ts +21 -20
- package/dist/sync/commitFrames.js +18 -18
- package/dist/sync/createClaimStream.d.ts +23 -22
- package/dist/sync/createClaimStream.js +105 -23
- package/dist/sync/createPresenceStream.d.ts +19 -18
- package/dist/sync/createPresenceStream.js +25 -26
- package/dist/sync/createSnapshot.d.ts +12 -14
- package/dist/sync/createSnapshot.js +20 -26
- package/dist/sync/credentialLifecycle.d.ts +104 -104
- package/dist/sync/credentialLifecycle.js +140 -147
- package/dist/sync/deltaPipeline.d.ts +36 -34
- package/dist/sync/deltaPipeline.js +64 -65
- package/dist/sync/groupChange.d.ts +63 -61
- package/dist/sync/groupChange.js +74 -78
- package/dist/sync/heartbeat.d.ts +34 -33
- package/dist/sync/heartbeat.js +31 -31
- package/dist/sync/participants.d.ts +19 -19
- package/dist/sync/persistedPrefix.d.ts +12 -0
- package/dist/sync/persistedPrefix.js +22 -0
- package/dist/sync/schemas.d.ts +3 -2
- package/dist/sync/schemas.js +14 -10
- package/dist/sync/syncCursor.d.ts +17 -21
- package/dist/sync/syncCursor.js +17 -21
- package/dist/sync/syncPlan.d.ts +28 -36
- package/dist/sync/syncPlan.js +18 -19
- package/dist/sync/syncPosition.d.ts +54 -49
- package/dist/sync/syncPosition.js +57 -52
- package/dist/sync/wsFrameHandlers.d.ts +35 -36
- package/dist/sync/wsFrameHandlers.js +63 -67
- package/dist/testing/fixtures/bootstrap.d.ts +12 -6
- package/dist/testing/fixtures/bootstrap.js +12 -6
- package/dist/testing/fixtures/deltas.d.ts +30 -33
- package/dist/testing/fixtures/deltas.js +30 -33
- package/dist/testing/fixtures/models.d.ts +11 -10
- package/dist/testing/fixtures/models.js +11 -10
- package/dist/testing/helpers/{react-wrapper.d.ts → reactWrapper.d.ts} +13 -10
- package/dist/testing/helpers/{react-wrapper.js → reactWrapper.js} +15 -12
- package/dist/testing/helpers/{sync-engine-harness.d.ts → syncEngineHarness.d.ts} +17 -15
- package/dist/testing/helpers/{sync-engine-harness.js → syncEngineHarness.js} +12 -10
- package/dist/testing/helpers/wait.d.ts +13 -8
- package/dist/testing/helpers/wait.js +13 -8
- package/dist/testing/index.d.ts +5 -3
- package/dist/testing/index.js +3 -2
- package/dist/testing/mocks/FakeDatabase.d.ts +18 -0
- package/dist/testing/mocks/FakeDatabase.js +10 -0
- package/dist/testing/mocks/MockMutationExecutor.d.ts +18 -17
- package/dist/testing/mocks/MockMutationExecutor.js +15 -14
- package/dist/testing/mocks/MockNetworkMonitor.d.ts +8 -8
- package/dist/testing/mocks/MockNetworkMonitor.js +8 -8
- package/dist/testing/mocks/MockSyncContext.d.ts +20 -17
- package/dist/testing/mocks/MockSyncContext.js +15 -13
- package/dist/testing/mocks/MockSyncStore.d.ts +10 -10
- package/dist/testing/mocks/MockSyncStore.js +11 -11
- package/dist/testing/mocks/MockWebSocket.d.ts +28 -23
- package/dist/testing/mocks/MockWebSocket.js +22 -21
- package/dist/transactions/TransactionQueue.d.ts +244 -181
- package/dist/transactions/TransactionQueue.js +929 -423
- package/dist/transactions/TransactionStore.d.ts +6 -4
- package/dist/transactions/TransactionStore.js +6 -4
- package/dist/transactions/UnconfirmedWrites.d.ts +82 -0
- package/dist/transactions/UnconfirmedWrites.js +104 -0
- package/dist/transactions/coalesceRules.d.ts +41 -17
- package/dist/transactions/coalesceRules.js +40 -17
- package/dist/transactions/commitEnvelope.d.ts +132 -0
- package/dist/transactions/commitEnvelope.js +139 -0
- package/dist/transactions/commitOutboxStore.d.ts +32 -0
- package/dist/transactions/commitOutboxStore.js +26 -0
- package/dist/transactions/commitPayload.d.ts +63 -52
- package/dist/transactions/commitPayload.js +54 -57
- package/dist/transactions/deltaConfirmation.d.ts +20 -22
- package/dist/transactions/deltaConfirmation.js +37 -45
- package/dist/transactions/httpCommitEnvelope.d.ts +43 -0
- package/dist/transactions/httpCommitEnvelope.js +179 -0
- package/dist/transactions/optimisticApply.d.ts +49 -0
- package/dist/transactions/optimisticApply.js +65 -0
- package/dist/transactions/replayValidation.d.ts +182 -0
- package/dist/transactions/replayValidation.js +156 -0
- package/dist/types/global.d.ts +46 -41
- package/dist/types/global.js +20 -19
- package/dist/types/index.d.ts +71 -77
- package/dist/types/index.js +22 -22
- package/dist/types/modelData.d.ts +6 -8
- package/dist/types/modelData.js +5 -7
- package/dist/types/participant.d.ts +10 -11
- package/dist/types/participant.js +6 -8
- package/dist/types/streams.d.ts +208 -195
- package/dist/types/streams.js +7 -7
- package/dist/utils/asyncIterator.d.ts +25 -32
- package/dist/utils/asyncIterator.js +25 -32
- package/dist/utils/duration.d.ts +12 -15
- package/dist/utils/duration.js +12 -15
- package/dist/utils/mobxSetup.d.ts +53 -0
- package/dist/utils/{mobx-setup.js → mobxSetup.js} +42 -98
- package/dist/webhooks/events.d.ts +21 -16
- package/dist/webhooks/events.js +10 -8
- package/dist/webhooks/index.d.ts +5 -7
- package/dist/webhooks/index.js +5 -7
- package/dist/wire/bootstrapReason.d.ts +9 -0
- package/dist/wire/bootstrapReason.js +8 -0
- package/dist/{schema/sync-delta-wire.d.ts → wire/delta.d.ts} +58 -41
- package/dist/wire/delta.js +114 -0
- package/dist/wire/errorEnvelope.d.ts +30 -31
- package/dist/wire/errorEnvelope.js +34 -40
- package/dist/wire/frames.d.ts +315 -86
- package/dist/wire/frames.js +47 -33
- package/dist/wire/index.d.ts +18 -14
- package/dist/wire/index.js +32 -27
- package/dist/wire/listEnvelope.d.ts +16 -23
- package/dist/wire/listEnvelope.js +7 -6
- package/dist/wire/protocol.d.ts +25 -32
- package/dist/wire/protocol.js +25 -32
- package/dist/wire/protocolVersion.d.ts +44 -40
- package/dist/wire/protocolVersion.js +44 -40
- package/docs/api.md +10 -10
- package/docs/coordination.md +59 -0
- package/docs/mcp.md +1 -1
- package/package.json +17 -11
- package/dist/ai-sdk/coordinated-tool.d.ts +0 -101
- package/dist/ai-sdk/coordination-context.d.ts +0 -52
- package/dist/core/query-utils.d.ts +0 -34
- package/dist/core/query-utils.js +0 -59
- package/dist/schema/sync-delta-row.js +0 -103
- package/dist/schema/sync-delta-wire.js +0 -102
- package/dist/server/read-config.d.ts +0 -67
- package/dist/server/read-config.js +0 -8
- package/dist/server/storage-mode.d.ts +0 -8
- package/dist/server/storage-mode.js +0 -28
- package/dist/source/connector-protocol.d.ts +0 -159
- package/dist/source/connector-protocol.js +0 -161
- package/dist/transactions/OptimisticEchoTracker.d.ts +0 -82
- package/dist/transactions/OptimisticEchoTracker.js +0 -104
- package/dist/transactions/mutation-error-handler.d.ts +0 -5
- package/dist/transactions/mutation-error-handler.js +0 -39
- package/dist/transactions/optimistic.d.ts +0 -24
- package/dist/transactions/optimistic.js +0 -45
- package/dist/transactions/persistedReplay.d.ts +0 -93
- package/dist/transactions/persistedReplay.js +0 -105
- package/dist/utils/mobx-setup.d.ts +0 -42
|
@@ -1,22 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* Validates the options passed when constructing a client, before any
|
|
3
|
+
* connection is attempted. Returns the first problem it finds as an
|
|
4
|
+
* {@link AbloError}, or null when every check passes. The caller records that
|
|
5
|
+
* error on the client's sync status, so a misconfiguration surfaces through the
|
|
6
|
+
* normal status channel rather than throwing at the call site.
|
|
6
7
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* because the error messages reference URLs and would mislead if a
|
|
11
|
-
* URL was actually present.
|
|
8
|
+
* The order of checks matters: a missing `url` is reported before any identity
|
|
9
|
+
* problem, because the identity error messages mention the URL and would
|
|
10
|
+
* mislead if the URL were the thing actually missing.
|
|
12
11
|
*/
|
|
13
12
|
import { AbloError } from '../errors.js';
|
|
14
13
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* `AbloOptions` so a real options object satisfies this shape.
|
|
14
|
+
* The subset of client options this validator reads. It is declared as its own
|
|
15
|
+
* interface, structurally compatible with the full options type, so a real
|
|
16
|
+
* options object satisfies it without the validator having to depend on the
|
|
17
|
+
* complete type.
|
|
20
18
|
*/
|
|
21
19
|
export interface ValidatableAbloOptions {
|
|
22
20
|
readonly schema?: {
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* Validates the options passed when constructing a client, before any
|
|
3
|
+
* connection is attempted. Returns the first problem it finds as an
|
|
4
|
+
* {@link AbloError}, or null when every check passes. The caller records that
|
|
5
|
+
* error on the client's sync status, so a misconfiguration surfaces through the
|
|
6
|
+
* normal status channel rather than throwing at the call site.
|
|
6
7
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* because the error messages reference URLs and would mislead if a
|
|
11
|
-
* URL was actually present.
|
|
8
|
+
* The order of checks matters: a missing `url` is reported before any identity
|
|
9
|
+
* problem, because the identity error messages mention the URL and would
|
|
10
|
+
* mislead if the URL were the thing actually missing.
|
|
12
11
|
*/
|
|
13
12
|
import { AbloError, AbloValidationError } from '../errors.js';
|
|
14
13
|
export function validateAbloOptions(input) {
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* HTTP
|
|
5
|
-
* caller
|
|
6
|
-
* typed
|
|
2
|
+
* The Zod schema for write options — the settings accepted by every write
|
|
3
|
+
* entry point, including `ablo.<model>.create/update/delete`, `commits.create`,
|
|
4
|
+
* and the HTTP write routes. Each of those boundaries validates against this
|
|
5
|
+
* one schema, so a caller who passes, say, `onStale: 'rejct'` fails right away
|
|
6
|
+
* with a typed {@link AbloValidationError} at the call site instead of silently
|
|
7
|
+
* or with a 400 from the server.
|
|
7
8
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
9
|
+
* The schema is the runtime counterpart of the {@link MutationOptions}
|
|
10
|
+
* interface. A compile-time check at the bottom of this file asserts that the
|
|
11
|
+
* two describe the same shape, so they cannot drift apart.
|
|
11
12
|
*
|
|
12
|
-
* Validation
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
13
|
+
* Validation only inspects; it never transforms. Callers keep the exact options
|
|
14
|
+
* object they passed in. This matters because the `claim` field can hold a live
|
|
15
|
+
* claim handle whose `release` and `revoke` functions must survive, so the code
|
|
16
|
+
* asserts the shape rather than replacing the value with a parsed copy.
|
|
16
17
|
*/
|
|
17
18
|
import { z } from 'zod';
|
|
18
19
|
export declare const onStaleModeSchema: z.ZodEnum<{
|
|
@@ -40,9 +41,10 @@ export declare const writeOptionsSchema: z.ZodObject<{
|
|
|
40
41
|
}, z.core.$strip>;
|
|
41
42
|
export type WriteOptionsInput = z.infer<typeof writeOptionsSchema>;
|
|
42
43
|
/**
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
* `param` pointing at the offending
|
|
46
|
-
*
|
|
44
|
+
* Validates a write-options object against {@link writeOptionsSchema}. On
|
|
45
|
+
* failure it throws a typed {@link AbloValidationError} — with
|
|
46
|
+
* `code: 'write_options_invalid'` and a `param` pointing at the offending
|
|
47
|
+
* field — and on success returns nothing, leaving the caller's original object
|
|
48
|
+
* untouched. A `null` or `undefined` value passes.
|
|
47
49
|
*/
|
|
48
50
|
export declare function assertWriteOptions(value: unknown, context?: string): void;
|
|
@@ -1,24 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* HTTP
|
|
5
|
-
* caller
|
|
6
|
-
* typed
|
|
2
|
+
* The Zod schema for write options — the settings accepted by every write
|
|
3
|
+
* entry point, including `ablo.<model>.create/update/delete`, `commits.create`,
|
|
4
|
+
* and the HTTP write routes. Each of those boundaries validates against this
|
|
5
|
+
* one schema, so a caller who passes, say, `onStale: 'rejct'` fails right away
|
|
6
|
+
* with a typed {@link AbloValidationError} at the call site instead of silently
|
|
7
|
+
* or with a 400 from the server.
|
|
7
8
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
9
|
+
* The schema is the runtime counterpart of the {@link MutationOptions}
|
|
10
|
+
* interface. A compile-time check at the bottom of this file asserts that the
|
|
11
|
+
* two describe the same shape, so they cannot drift apart.
|
|
11
12
|
*
|
|
12
|
-
* Validation
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
13
|
+
* Validation only inspects; it never transforms. Callers keep the exact options
|
|
14
|
+
* object they passed in. This matters because the `claim` field can hold a live
|
|
15
|
+
* claim handle whose `release` and `revoke` functions must survive, so the code
|
|
16
|
+
* asserts the shape rather than replacing the value with a parsed copy.
|
|
16
17
|
*/
|
|
17
18
|
import { z } from 'zod';
|
|
18
19
|
import { AbloValidationError } from '../errors.js';
|
|
19
20
|
export const onStaleModeSchema = z.enum(['reject', 'overwrite', 'notify']);
|
|
20
21
|
export const writeOptionsSchema = z.object({
|
|
21
|
-
/**
|
|
22
|
+
/** Idempotency key the server records in `mutation_log` to make retries
|
|
23
|
+
* safe; `null` opts out of that protection. */
|
|
22
24
|
idempotencyKey: z.string().min(1).max(255).nullish(),
|
|
23
25
|
/** Human-readable audit tag, persisted to `mutation_log.label`. */
|
|
24
26
|
label: z.string().max(255).optional(),
|
|
@@ -28,17 +30,18 @@ export const writeOptionsSchema = z.object({
|
|
|
28
30
|
readAt: z.number().int().nonnegative().nullish(),
|
|
29
31
|
/** What the server does when the target moved past `readAt`. */
|
|
30
32
|
onStale: onStaleModeSchema.nullish(),
|
|
31
|
-
/**
|
|
32
|
-
* handle
|
|
33
|
+
/** The claim this write belongs to — either a claim id, or a live claim
|
|
34
|
+
* handle whose `release`/`revoke` functions are preserved untouched. */
|
|
33
35
|
claim: z.union([z.string(), z.looseObject({ id: z.string() })]).nullish(),
|
|
34
|
-
/**
|
|
36
|
+
/** Reserved wire-compatibility field; current clients always send `null`. */
|
|
35
37
|
causedByTaskId: z.string().nullish(),
|
|
36
38
|
});
|
|
37
39
|
/**
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
* `param` pointing at the offending
|
|
41
|
-
*
|
|
40
|
+
* Validates a write-options object against {@link writeOptionsSchema}. On
|
|
41
|
+
* failure it throws a typed {@link AbloValidationError} — with
|
|
42
|
+
* `code: 'write_options_invalid'` and a `param` pointing at the offending
|
|
43
|
+
* field — and on success returns nothing, leaving the caller's original object
|
|
44
|
+
* untouched. A `null` or `undefined` value passes.
|
|
42
45
|
*/
|
|
43
46
|
export function assertWriteOptions(value, context) {
|
|
44
47
|
if (value == null)
|
|
@@ -1,30 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The default
|
|
3
|
-
* the engine's own WebSocket,
|
|
4
|
-
* exist when the executor is
|
|
5
|
-
*
|
|
6
|
-
* Extracted from `Ablo.ts`; the factory wires it up with a `getWs` closure
|
|
7
|
-
* over the store holder unless the caller supplies its own executor.
|
|
2
|
+
* The default {@link MutationExecutor}. It sends each change as a `commit`
|
|
3
|
+
* frame over the sync engine's own WebSocket, resolving that socket lazily at
|
|
4
|
+
* commit time because it does not exist yet when the executor is created. A
|
|
5
|
+
* client wires this up automatically unless you supply your own executor.
|
|
8
6
|
*/
|
|
9
7
|
import type { StaleNotification, ReadDependency } from '../coordination/schema.js';
|
|
10
8
|
import type { MutationExecutor, MutationOperation } from '../interfaces/index.js';
|
|
11
9
|
/**
|
|
12
|
-
*
|
|
13
|
-
* the sync engine's own WebSocket.
|
|
10
|
+
* Creates the default mutation executor, which sends each change as a `commit`
|
|
11
|
+
* frame over the sync engine's own WebSocket. The engine owns its socket, so
|
|
12
|
+
* you pass a URL and credentials rather than transport callbacks.
|
|
14
13
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* doesn't exist when the executor is constructed (it's created later in
|
|
20
|
-
* `Ablo` during `BaseSyncedStore` init), so we resolve it
|
|
21
|
-
* lazily at commit time. Same trick Zero uses internally — see
|
|
22
|
-
* `packages/zero-client/src/client/zero.ts` where `Pusher`/`Puller` are
|
|
23
|
-
* constructed before the socket then wired up at connect time.
|
|
14
|
+
* The factory takes a `getWs` accessor instead of a socket directly because the
|
|
15
|
+
* socket is created later during client startup and does not exist yet when
|
|
16
|
+
* this executor is constructed. The accessor is called at commit time to reach
|
|
17
|
+
* the ready socket.
|
|
24
18
|
*
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
19
|
+
* When set, `options.idempotencyKey` is sent as the wire-level `clientTxId`, so
|
|
20
|
+
* retrying a call with the same key is safe. TransactionQueue always supplies
|
|
21
|
+
* this key before its first attempt and owns reuse across retries. The fallback
|
|
22
|
+
* generation below exists only for direct, one-shot executor consumers.
|
|
23
|
+
*/
|
|
28
24
|
export declare function createDefaultMutationExecutor(getWs: () => {
|
|
29
25
|
sendCommit?: (operations: readonly MutationOperation[], clientTxId: string, timeoutMs?: number, causedByTaskId?: string | null, reads?: readonly ReadDependency[] | null) => Promise<{
|
|
30
26
|
lastSyncId: number;
|
|
@@ -1,30 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The default
|
|
3
|
-
* the engine's own WebSocket,
|
|
4
|
-
* exist when the executor is
|
|
5
|
-
*
|
|
6
|
-
* Extracted from `Ablo.ts`; the factory wires it up with a `getWs` closure
|
|
7
|
-
* over the store holder unless the caller supplies its own executor.
|
|
2
|
+
* The default {@link MutationExecutor}. It sends each change as a `commit`
|
|
3
|
+
* frame over the sync engine's own WebSocket, resolving that socket lazily at
|
|
4
|
+
* commit time because it does not exist yet when the executor is created. A
|
|
5
|
+
* client wires this up automatically unless you supply your own executor.
|
|
8
6
|
*/
|
|
9
7
|
import { AbloError, AbloConnectionError } from '../errors.js';
|
|
10
8
|
// ── Default mutation executor (wire: `commit` frame over WebSocket) ──────
|
|
11
9
|
/**
|
|
12
|
-
*
|
|
13
|
-
* the sync engine's own WebSocket.
|
|
10
|
+
* Creates the default mutation executor, which sends each change as a `commit`
|
|
11
|
+
* frame over the sync engine's own WebSocket. The engine owns its socket, so
|
|
12
|
+
* you pass a URL and credentials rather than transport callbacks.
|
|
14
13
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* doesn't exist when the executor is constructed (it's created later in
|
|
20
|
-
* `Ablo` during `BaseSyncedStore` init), so we resolve it
|
|
21
|
-
* lazily at commit time. Same trick Zero uses internally — see
|
|
22
|
-
* `packages/zero-client/src/client/zero.ts` where `Pusher`/`Puller` are
|
|
23
|
-
* constructed before the socket then wired up at connect time.
|
|
14
|
+
* The factory takes a `getWs` accessor instead of a socket directly because the
|
|
15
|
+
* socket is created later during client startup and does not exist yet when
|
|
16
|
+
* this executor is constructed. The accessor is called at commit time to reach
|
|
17
|
+
* the ready socket.
|
|
24
18
|
*
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
19
|
+
* When set, `options.idempotencyKey` is sent as the wire-level `clientTxId`, so
|
|
20
|
+
* retrying a call with the same key is safe. TransactionQueue always supplies
|
|
21
|
+
* this key before its first attempt and owns reuse across retries. The fallback
|
|
22
|
+
* generation below exists only for direct, one-shot executor consumers.
|
|
23
|
+
*/
|
|
28
24
|
export function createDefaultMutationExecutor(getWs) {
|
|
29
25
|
async function commit(operations, options) {
|
|
30
26
|
const ws = getWs();
|
|
@@ -41,9 +37,8 @@ export function createDefaultMutationExecutor(getWs) {
|
|
|
41
37
|
options?.causedByTaskId, options?.reads);
|
|
42
38
|
}
|
|
43
39
|
catch (err) {
|
|
44
|
-
// Wrap transport-level failures as connection errors so the
|
|
45
|
-
//
|
|
46
|
-
// (matches the old HTTP path's network-error handling).
|
|
40
|
+
// Wrap transport-level failures as connection errors so the transaction
|
|
41
|
+
// queue's retry classifier treats them as transient and retries them.
|
|
47
42
|
if (err instanceof AbloError)
|
|
48
43
|
throw err;
|
|
49
44
|
if (err instanceof Error) {
|