@abloatai/ablo 0.26.0 → 0.27.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 +14 -0
- package/README.md +101 -85
- package/dist/BaseSyncedStore.d.ts +85 -88
- package/dist/BaseSyncedStore.js +131 -147
- package/dist/Database.d.ts +54 -68
- package/dist/Database.js +97 -113
- 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 +37 -52
- package/dist/Model.js +46 -61
- 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 +112 -112
- package/dist/SyncClient.js +165 -172
- package/dist/adapters/alwaysOnline.d.ts +6 -8
- package/dist/adapters/alwaysOnline.js +6 -8
- package/dist/adapters/inMemoryStorage.d.ts +9 -9
- package/dist/adapters/inMemoryStorage.js +9 -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 +167 -119
- package/dist/client/Ablo.d.ts +73 -73
- package/dist/client/Ablo.js +125 -160
- package/dist/client/ApiClient.d.ts +30 -19
- package/dist/client/ApiClient.js +133 -38
- 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 +14 -17
- package/dist/client/createInternalComponents.js +25 -30
- 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 +57 -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 +67 -87
- package/dist/client/options.d.ts +134 -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 +15 -20
- package/dist/client/wsMutationExecutor.js +17 -23
- 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 +12 -14
- package/dist/core/StoreManager.js +21 -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 +131 -132
- package/dist/errors.d.ts +160 -166
- package/dist/errors.js +155 -158
- package/dist/index.d.ts +30 -27
- package/dist/index.js +89 -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 +122 -131
- package/dist/mutators/UndoManager.js +145 -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 +23 -22
- package/dist/react/useAblo.js +16 -14
- 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 +2 -2
- 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 +33 -42
- 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 +10 -11
- package/dist/stores/ObjectStore.js +11 -12
- package/dist/stores/ObjectStoreContract.d.ts +12 -15
- package/dist/stores/SyncActionStore.d.ts +7 -11
- package/dist/stores/SyncActionStore.js +13 -17
- package/dist/surface.d.ts +27 -20
- package/dist/surface.js +27 -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 +139 -165
- 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/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 +3 -3
- package/dist/testing/index.js +2 -2
- 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 +26 -22
- package/dist/testing/mocks/MockWebSocket.js +22 -21
- package/dist/transactions/TransactionQueue.d.ts +181 -176
- package/dist/transactions/TransactionQueue.js +338 -350
- 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/commitPayload.d.ts +48 -52
- package/dist/transactions/commitPayload.js +48 -57
- package/dist/transactions/deltaConfirmation.d.ts +20 -22
- package/dist/transactions/deltaConfirmation.js +37 -45
- package/dist/transactions/optimisticApply.d.ts +49 -0
- package/dist/transactions/optimisticApply.js +65 -0
- package/dist/transactions/{persistedReplay.d.ts → replayValidation.d.ts} +28 -22
- package/dist/transactions/{persistedReplay.js → replayValidation.js} +33 -27
- 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/{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 +79 -86
- package/dist/wire/frames.js +26 -33
- package/dist/wire/index.d.ts +14 -12
- package/dist/wire/index.js +30 -26
- 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/coordination.md +59 -0
- package/package.json +11 -10
- 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/utils/mobx-setup.d.ts +0 -42
package/dist/wire/frames.d.ts
CHANGED
|
@@ -1,30 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* The write-path message shapes for the sync protocol. These cover the frames
|
|
3
|
+
* a client sends to commit work — {@link CommitMessage} (a batch of raw
|
|
4
|
+
* operations) and {@link MutationMessage} (a single named mutation) — and the
|
|
5
|
+
* server's {@link MutationResultMessage} acknowledgement. The same frames flow
|
|
6
|
+
* over a WebSocket connection and over the HTTP commit endpoint.
|
|
3
7
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* any
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* Scope note: the delta/sync frames (`sync_response`, `delta`) are NOT
|
|
12
|
-
* here yet — they reference `SyncDelta`, which currently has two
|
|
13
|
-
* definitions (server `db/deltas` vs package `core`) pending unification.
|
|
14
|
-
* They stay server-local until that lands. Everything in this file
|
|
15
|
-
* depends only on package-canonical types (`OnStaleMode`, `ErrorCode`,
|
|
16
|
-
* `RequiredCapability`), so it is safe to share today.
|
|
17
|
-
*
|
|
18
|
-
* Changing any shape here is a wire-contract change — it requires
|
|
19
|
-
* coordinated client + server updates.
|
|
8
|
+
* Both the client and the server import these definitions from here, so the two
|
|
9
|
+
* sides cannot drift. Each interface is paired with a Zod validator
|
|
10
|
+
* ({@link commitOperationSchema}, {@link commitPayloadSchema}) pinned to it at
|
|
11
|
+
* compile time, so the runtime check and the type stay in lockstep. Changing
|
|
12
|
+
* any shape in this file changes the wire contract and requires the client and
|
|
13
|
+
* server to update together.
|
|
20
14
|
*/
|
|
21
15
|
import { z } from 'zod';
|
|
22
16
|
import type { OnStaleMode, StaleNotification, ReadDependency } from '../coordination/index.js';
|
|
23
17
|
import type { ErrorCode, RequiredCapability } from '../errors.js';
|
|
24
18
|
/**
|
|
25
|
-
* A single operation within a {@link CommitMessage} batch.
|
|
26
|
-
* the
|
|
27
|
-
*
|
|
19
|
+
* A single operation within a {@link CommitMessage} batch. Each operation is
|
|
20
|
+
* the smallest unit the server applies atomically — one create, update,
|
|
21
|
+
* delete, archive, or unarchive against one model row.
|
|
28
22
|
*/
|
|
29
23
|
export interface CommitOperation {
|
|
30
24
|
type: 'CREATE' | 'UPDATE' | 'DELETE' | 'ARCHIVE' | 'UNARCHIVE';
|
|
@@ -32,45 +26,44 @@ export interface CommitOperation {
|
|
|
32
26
|
id?: string | null;
|
|
33
27
|
input?: Record<string, unknown> | null;
|
|
34
28
|
/**
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
29
|
+
* A client-generated transaction id for this one operation. The server
|
|
30
|
+
* stamps it onto the `sync_deltas.transaction_id` column so the originating
|
|
31
|
+
* client can recognize the resulting broadcast as an echo of its own
|
|
32
|
+
* optimistic write. This is distinct from the batch-level `clientTxId` on
|
|
33
|
+
* {@link CommitMessage}, which the server uses to deduplicate retried batches.
|
|
39
34
|
*/
|
|
40
35
|
transactionId?: string | null;
|
|
41
36
|
/**
|
|
42
|
-
*
|
|
43
|
-
* has
|
|
44
|
-
*
|
|
37
|
+
* A read watermark captured when the client last read this row. The server
|
|
38
|
+
* checks whether the target has changed since this point; if it has, the
|
|
39
|
+
* operation's {@link CommitOperation.onStale} mode decides what happens.
|
|
45
40
|
*/
|
|
46
41
|
readAt?: number | null;
|
|
47
42
|
/**
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
43
|
+
* What to do when the server detects the row changed since
|
|
44
|
+
* {@link CommitOperation.readAt}. `'reject'` (the default) fails the
|
|
45
|
+
* operation with a stale-context error; `'overwrite'` applies the write
|
|
46
|
+
* regardless; `'notify'` holds the write and returns a
|
|
47
|
+
* {@link StaleNotification} for the caller to resolve.
|
|
52
48
|
*/
|
|
53
49
|
onStale?: OnStaleMode | null;
|
|
54
50
|
/**
|
|
55
|
-
* Write even
|
|
56
|
-
*
|
|
57
|
-
* is
|
|
58
|
-
* claim guard trusts
|
|
59
|
-
*
|
|
60
|
-
* being declared here — the exact contract drift this file exists to
|
|
61
|
-
* prevent.
|
|
51
|
+
* Write even when another participant holds a claim on this row. The default
|
|
52
|
+
* (`false`) rejects the operation with a claimed-entity error while a claim
|
|
53
|
+
* is held. Setting `bypass` overrides that, and the override is recorded. It
|
|
54
|
+
* is honored only for participants the claim guard trusts, such as human and
|
|
55
|
+
* framework identities; a bypass requested by an agent is ignored.
|
|
62
56
|
*/
|
|
63
57
|
bypass?: boolean | null;
|
|
64
58
|
}
|
|
65
59
|
/**
|
|
66
|
-
* Runtime validator for {@link CommitOperation}
|
|
67
|
-
*
|
|
68
|
-
* operation
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
* stale-guard SQL (`id > $3`) unvalidated.
|
|
60
|
+
* Runtime validator for {@link CommitOperation}. Both commit transports — the
|
|
61
|
+
* WebSocket `commit` frame and the HTTP `/v1/commits` endpoint — run this check
|
|
62
|
+
* on every operation before it is applied, so a malformed operation is rejected
|
|
63
|
+
* at the edge. It builds on the shared coordination schema, widening `bypass`
|
|
64
|
+
* to also accept `null` so the validator and the interface match exactly. Note
|
|
65
|
+
* that `readAt` must be a number: it feeds the server's stale-check comparison,
|
|
66
|
+
* so a non-numeric watermark is refused here.
|
|
74
67
|
*/
|
|
75
68
|
export declare const commitOperationSchema: z.ZodObject<{
|
|
76
69
|
readAt: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
@@ -93,10 +86,10 @@ export declare const commitOperationSchema: z.ZodObject<{
|
|
|
93
86
|
bypass: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
94
87
|
}, z.core.$strip>;
|
|
95
88
|
/**
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
89
|
+
* A client-to-server frame that invokes a single named mutation by name and
|
|
90
|
+
* arguments, as opposed to the raw operation batch in {@link CommitMessage}.
|
|
91
|
+
* The server resolves `mutatorName` against the set of mutations registered on
|
|
92
|
+
* it and runs the matching one.
|
|
100
93
|
*/
|
|
101
94
|
export interface MutationMessage {
|
|
102
95
|
type: 'mutation';
|
|
@@ -107,10 +100,10 @@ export interface MutationMessage {
|
|
|
107
100
|
};
|
|
108
101
|
}
|
|
109
102
|
/**
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
*
|
|
103
|
+
* A client-to-server frame that asks the server to commit a batch of operations
|
|
104
|
+
* atomically. This is the raw-operation counterpart to {@link MutationMessage};
|
|
105
|
+
* it carries a list of {@link CommitOperation} entries plus the batch metadata
|
|
106
|
+
* below.
|
|
114
107
|
*/
|
|
115
108
|
export interface CommitMessage {
|
|
116
109
|
type: 'commit';
|
|
@@ -118,30 +111,28 @@ export interface CommitMessage {
|
|
|
118
111
|
operations: CommitOperation[];
|
|
119
112
|
clientTxId: string;
|
|
120
113
|
/**
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
* threads it onto `caused_by_task_id`, but client writes leave it
|
|
126
|
-
* `null` (the audit pane treats null as "no prompt-side context").
|
|
114
|
+
* Optional lineage id linking this batch to the task that caused it. When
|
|
115
|
+
* present, the server validates it and records it on the delta's
|
|
116
|
+
* `caused_by_task_id` column for audit trails; when omitted or `null`, the
|
|
117
|
+
* batch simply carries no task attribution.
|
|
127
118
|
*/
|
|
128
119
|
causedByTaskId?: string | null;
|
|
129
120
|
/**
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
* checked
|
|
121
|
+
* The reads this batch's writes were premised on. Each entry names either a
|
|
122
|
+
* specific row (`{ model, id, readAt, fields? }`) or a sync group
|
|
123
|
+
* (`{ group, readAt }`) that must not have changed since its `readAt`
|
|
124
|
+
* watermark. The server checks every entry and applies its `onStale`
|
|
125
|
+
* disposition to the whole batch if one moved. When omitted, only the rows
|
|
126
|
+
* being written are checked for staleness.
|
|
136
127
|
*/
|
|
137
128
|
reads?: ReadDependency[] | null;
|
|
138
129
|
};
|
|
139
130
|
}
|
|
140
131
|
/**
|
|
141
|
-
* Runtime validator for {@link CommitMessage}
|
|
142
|
-
* server
|
|
143
|
-
* `
|
|
144
|
-
*
|
|
132
|
+
* Runtime validator for the payload of {@link CommitMessage}. It checks every
|
|
133
|
+
* field the server acts on — `operations`, `clientTxId`, `causedByTaskId`, and
|
|
134
|
+
* `reads` — validating each operation with {@link commitOperationSchema} and
|
|
135
|
+
* each read dependency with the shared read-dependency schema.
|
|
145
136
|
*/
|
|
146
137
|
export declare const commitPayloadSchema: z.ZodObject<{
|
|
147
138
|
operations: z.ZodArray<z.ZodObject<{
|
|
@@ -187,13 +178,13 @@ export declare const commitPayloadSchema: z.ZodObject<{
|
|
|
187
178
|
}, z.core.$strip>]>>>>;
|
|
188
179
|
}, z.core.$strip>;
|
|
189
180
|
/**
|
|
190
|
-
*
|
|
191
|
-
*
|
|
192
|
-
* `
|
|
181
|
+
* The server's acknowledgement of a {@link CommitMessage}. Its payload mirrors
|
|
182
|
+
* the commit-receipt shape, so a commit acknowledged over a WebSocket, over the
|
|
183
|
+
* HTTP `/v1/commits` endpoint, or read back from a persisted job result all
|
|
184
|
+
* carry the same fields.
|
|
193
185
|
*
|
|
194
|
-
* `object`, `status`, and `ops` are
|
|
195
|
-
*
|
|
196
|
-
* New clients can rely on them.
|
|
186
|
+
* `object`, `status`, and `ops` are optional in the type but the server always
|
|
187
|
+
* populates them, so a current client can rely on them being present.
|
|
197
188
|
*/
|
|
198
189
|
export interface MutationResultMessage {
|
|
199
190
|
type: 'mutation_result';
|
|
@@ -206,25 +197,27 @@ export interface MutationResultMessage {
|
|
|
206
197
|
lastSyncId?: number;
|
|
207
198
|
ops?: number;
|
|
208
199
|
/**
|
|
209
|
-
*
|
|
210
|
-
* premise
|
|
211
|
-
*
|
|
212
|
-
* `conflict:notified` event and the commit
|
|
200
|
+
* Notifications for operations that used `onStale: 'notify'` and whose
|
|
201
|
+
* premise changed while the batch was being applied. Present only on a
|
|
202
|
+
* successful acknowledgement that resolved such a conflict; the client
|
|
203
|
+
* surfaces each one through its `conflict:notified` event and the commit
|
|
204
|
+
* receipt rather than failing the write.
|
|
213
205
|
*/
|
|
214
206
|
notifications?: StaleNotification[];
|
|
215
207
|
/**
|
|
216
|
-
* Ids of
|
|
217
|
-
*
|
|
218
|
-
*
|
|
219
|
-
* caller
|
|
208
|
+
* Ids of update or delete targets that matched no rows — because they do
|
|
209
|
+
* not exist or fall outside the caller's organization. Present and
|
|
210
|
+
* non-empty only when a write missed. The client raises a not-found error
|
|
211
|
+
* for the affected caller rather than treating the no-op as a success.
|
|
220
212
|
*/
|
|
221
213
|
missingIds?: string[];
|
|
222
214
|
error?: {
|
|
223
215
|
code: ErrorCode;
|
|
224
216
|
message: string;
|
|
225
217
|
field?: string;
|
|
226
|
-
/**
|
|
227
|
-
*
|
|
218
|
+
/** The capability the commit required but the caller lacked. Present when
|
|
219
|
+
* the commit was denied for want of a capability, so the client can tell
|
|
220
|
+
* the caller exactly what to obtain. */
|
|
228
221
|
requiredCapability?: RequiredCapability;
|
|
229
222
|
};
|
|
230
223
|
};
|
package/dist/wire/frames.js
CHANGED
|
@@ -1,48 +1,41 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* The write-path message shapes for the sync protocol. These cover the frames
|
|
3
|
+
* a client sends to commit work — {@link CommitMessage} (a batch of raw
|
|
4
|
+
* operations) and {@link MutationMessage} (a single named mutation) — and the
|
|
5
|
+
* server's {@link MutationResultMessage} acknowledgement. The same frames flow
|
|
6
|
+
* over a WebSocket connection and over the HTTP commit endpoint.
|
|
3
7
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* any
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* Scope note: the delta/sync frames (`sync_response`, `delta`) are NOT
|
|
12
|
-
* here yet — they reference `SyncDelta`, which currently has two
|
|
13
|
-
* definitions (server `db/deltas` vs package `core`) pending unification.
|
|
14
|
-
* They stay server-local until that lands. Everything in this file
|
|
15
|
-
* depends only on package-canonical types (`OnStaleMode`, `ErrorCode`,
|
|
16
|
-
* `RequiredCapability`), so it is safe to share today.
|
|
17
|
-
*
|
|
18
|
-
* Changing any shape here is a wire-contract change — it requires
|
|
19
|
-
* coordinated client + server updates.
|
|
8
|
+
* Both the client and the server import these definitions from here, so the two
|
|
9
|
+
* sides cannot drift. Each interface is paired with a Zod validator
|
|
10
|
+
* ({@link commitOperationSchema}, {@link commitPayloadSchema}) pinned to it at
|
|
11
|
+
* compile time, so the runtime check and the type stay in lockstep. Changing
|
|
12
|
+
* any shape in this file changes the wire contract and requires the client and
|
|
13
|
+
* server to update together.
|
|
20
14
|
*/
|
|
21
15
|
import { z } from 'zod';
|
|
22
|
-
//
|
|
23
|
-
//
|
|
16
|
+
// The runtime schema primitives are imported straight from the coordination
|
|
17
|
+
// schema module to keep this file's runtime dependencies limited to Zod.
|
|
24
18
|
import { commitOperationSchema as coordinationCommitOperationSchema, readDependencySchema, } from '../coordination/schema.js';
|
|
25
19
|
/**
|
|
26
|
-
* Runtime validator for {@link CommitOperation}
|
|
27
|
-
*
|
|
28
|
-
* operation
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* stale-guard SQL (`id > $3`) unvalidated.
|
|
20
|
+
* Runtime validator for {@link CommitOperation}. Both commit transports — the
|
|
21
|
+
* WebSocket `commit` frame and the HTTP `/v1/commits` endpoint — run this check
|
|
22
|
+
* on every operation before it is applied, so a malformed operation is rejected
|
|
23
|
+
* at the edge. It builds on the shared coordination schema, widening `bypass`
|
|
24
|
+
* to also accept `null` so the validator and the interface match exactly. Note
|
|
25
|
+
* that `readAt` must be a number: it feeds the server's stale-check comparison,
|
|
26
|
+
* so a non-numeric watermark is refused here.
|
|
34
27
|
*/
|
|
35
28
|
export const commitOperationSchema = coordinationCommitOperationSchema.extend({
|
|
36
29
|
bypass: z.boolean().nullish(),
|
|
37
30
|
});
|
|
38
|
-
//
|
|
31
|
+
// Pins the schema to the interface: this fails to compile if either side drifts.
|
|
39
32
|
const _commitOperationContract = true;
|
|
40
33
|
void _commitOperationContract;
|
|
41
34
|
/**
|
|
42
|
-
* Runtime validator for {@link CommitMessage}
|
|
43
|
-
* server
|
|
44
|
-
* `
|
|
45
|
-
*
|
|
35
|
+
* Runtime validator for the payload of {@link CommitMessage}. It checks every
|
|
36
|
+
* field the server acts on — `operations`, `clientTxId`, `causedByTaskId`, and
|
|
37
|
+
* `reads` — validating each operation with {@link commitOperationSchema} and
|
|
38
|
+
* each read dependency with the shared read-dependency schema.
|
|
46
39
|
*/
|
|
47
40
|
export const commitPayloadSchema = z.object({
|
|
48
41
|
operations: z.array(commitOperationSchema),
|
|
@@ -50,6 +43,6 @@ export const commitPayloadSchema = z.object({
|
|
|
50
43
|
causedByTaskId: z.string().nullish(),
|
|
51
44
|
reads: z.array(readDependencySchema).nullish(),
|
|
52
45
|
});
|
|
53
|
-
//
|
|
46
|
+
// Pins the schema to the payload type: fails to compile if either side drifts.
|
|
54
47
|
const _commitPayloadContract = true;
|
|
55
48
|
void _commitPayloadContract;
|
package/dist/wire/index.d.ts
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* The wire contract for the sync protocol: the HTTP envelope shapes and the
|
|
3
|
+
* write-path frames, with no dependency on the client runtime. A server — a
|
|
4
|
+
* route handler, an edge function — can import the envelope producers here
|
|
5
|
+
* without pulling in the full sync client.
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
* -
|
|
9
|
-
* {@link statusForType} turn any thrown value into
|
|
10
|
-
* `{ type, code, param, message, doc_url, request_id }
|
|
11
|
-
* -
|
|
7
|
+
* It has two halves, used across every endpoint:
|
|
8
|
+
* - Error responses — {@link errorEnvelope}, {@link ErrorEnvelope}, and
|
|
9
|
+
* {@link statusForType} turn any thrown value into the uniform
|
|
10
|
+
* `{ type, code, param, message, doc_url, request_id }` body.
|
|
11
|
+
* - List responses — {@link listEnvelope} and {@link ListEnvelope} stamp the
|
|
12
12
|
* uniform `{ object: 'list', data, has_more, next_cursor }` collection.
|
|
13
13
|
*
|
|
14
|
-
* The {@link AbloError} hierarchy
|
|
15
|
-
* helpers are re-exported so a
|
|
16
|
-
*
|
|
14
|
+
* The {@link AbloError} hierarchy, {@link docUrlForCode}, and the wire-parsing
|
|
15
|
+
* helpers are re-exported too, so a single import lets a route throw the right
|
|
16
|
+
* typed error and serialize it back out.
|
|
17
17
|
*/
|
|
18
18
|
export { errorEnvelope, statusForType } from './errorEnvelope.js';
|
|
19
19
|
export type { ErrorEnvelope } from './errorEnvelope.js';
|
|
@@ -22,6 +22,8 @@ export type { ListEnvelope } from './listEnvelope.js';
|
|
|
22
22
|
export { commitOperationSchema, commitPayloadSchema } from './frames.js';
|
|
23
23
|
export { PROTOCOL_VERSION, MIN_SUPPORTED_PROTOCOL_VERSION, WS_CLOSE_PROTOCOL_VERSION, PROTOCOL_VERSION_HEADER, protocolVersionProblem, } from './protocolVersion.js';
|
|
24
24
|
export type { CommitOperation, MutationMessage, CommitMessage, MutationResultMessage, } from './frames.js';
|
|
25
|
+
export { participantKindSchema, confirmationStateSchema, syncDeltaActionSchema, wireDeltaDataSchema, participantRefSchema, syncDeltaWireCoreSchema, clientSyncDeltaSchema, serverSyncDeltaSchema, } from './delta.js';
|
|
26
|
+
export type { ParticipantKind, ConfirmationState, SyncDeltaAction, WireDeltaData, ParticipantRef, SyncDeltaWireCore, ClientSyncDelta, ServerSyncDelta, } from './delta.js';
|
|
25
27
|
export { AbloError, AbloAuthenticationError, AbloPermissionError, AbloValidationError, AbloRateLimitError, AbloIdempotencyError, AbloConnectionError, AbloServerError, AbloStaleContextError, AbloClaimedError, CapabilityError, SyncSessionError, docUrlForCode, translateHttpError, errorFromWire, toAbloError, ERROR_CONTRACT_VERSION, errorCodeSpec, } from '../errors.js';
|
|
26
28
|
export type { ErrorCode, WireErrorCode } from '../errors.js';
|
|
27
29
|
export { PING_INTERVAL_MS, LEASE_TTL_MS, WS_BEARER_SUBPROTOCOL_PREFIX, WS_SYNC_SUBPROTOCOL, } from './protocol.js';
|
package/dist/wire/index.js
CHANGED
|
@@ -1,40 +1,44 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* The wire contract for the sync protocol: the HTTP envelope shapes and the
|
|
3
|
+
* write-path frames, with no dependency on the client runtime. A server — a
|
|
4
|
+
* route handler, an edge function — can import the envelope producers here
|
|
5
|
+
* without pulling in the full sync client.
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
* -
|
|
9
|
-
* {@link statusForType} turn any thrown value into
|
|
10
|
-
* `{ type, code, param, message, doc_url, request_id }
|
|
11
|
-
* -
|
|
7
|
+
* It has two halves, used across every endpoint:
|
|
8
|
+
* - Error responses — {@link errorEnvelope}, {@link ErrorEnvelope}, and
|
|
9
|
+
* {@link statusForType} turn any thrown value into the uniform
|
|
10
|
+
* `{ type, code, param, message, doc_url, request_id }` body.
|
|
11
|
+
* - List responses — {@link listEnvelope} and {@link ListEnvelope} stamp the
|
|
12
12
|
* uniform `{ object: 'list', data, has_more, next_cursor }` collection.
|
|
13
13
|
*
|
|
14
|
-
* The {@link AbloError} hierarchy
|
|
15
|
-
* helpers are re-exported so a
|
|
16
|
-
*
|
|
14
|
+
* The {@link AbloError} hierarchy, {@link docUrlForCode}, and the wire-parsing
|
|
15
|
+
* helpers are re-exported too, so a single import lets a route throw the right
|
|
16
|
+
* typed error and serialize it back out.
|
|
17
17
|
*/
|
|
18
18
|
export { errorEnvelope, statusForType } from './errorEnvelope.js';
|
|
19
19
|
export { listEnvelope } from './listEnvelope.js';
|
|
20
|
-
//
|
|
21
|
-
//
|
|
22
|
-
//
|
|
23
|
-
// two cannot drift) — the per-op / per-payload ingest gates for both commit
|
|
20
|
+
// The write-path frame contract: the message shapes shared by the client and
|
|
21
|
+
// the server. The runtime Zod validators sit beside the interfaces and are
|
|
22
|
+
// pinned to them, and they gate every operation and payload on both commit
|
|
24
23
|
// transports.
|
|
25
24
|
export { commitOperationSchema, commitPayloadSchema } from './frames.js';
|
|
26
|
-
// Protocol versioning
|
|
27
|
-
// they can speak, plus the
|
|
28
|
-
// changelog
|
|
25
|
+
// Protocol versioning: the single integer the client and server compare to
|
|
26
|
+
// confirm they can speak to each other, plus the WebSocket close code used to
|
|
27
|
+
// reject a mismatch. See protocolVersion.ts for the changelog and deploy rules.
|
|
29
28
|
export { PROTOCOL_VERSION, MIN_SUPPORTED_PROTOCOL_VERSION, WS_CLOSE_PROTOCOL_VERSION, PROTOCOL_VERSION_HEADER, protocolVersionProblem, } from './protocolVersion.js';
|
|
29
|
+
// The read-path delta contract: the shape the server broadcasts to clients as the
|
|
30
|
+
// payload of a `delta` or `sync_response` frame, together with the shared
|
|
31
|
+
// participant vocabulary it carries. Both ends derive their delta type from these
|
|
32
|
+
// schemas, so the client and server cannot drift apart.
|
|
33
|
+
export { participantKindSchema, confirmationStateSchema, syncDeltaActionSchema, wireDeltaDataSchema, participantRefSchema, syncDeltaWireCoreSchema, clientSyncDeltaSchema, serverSyncDeltaSchema, } from './delta.js';
|
|
30
34
|
// The error surface a wire consumer needs to throw, classify, and serialize.
|
|
31
35
|
export { AbloError, AbloAuthenticationError, AbloPermissionError, AbloValidationError, AbloRateLimitError, AbloIdempotencyError, AbloConnectionError, AbloServerError, AbloStaleContextError, AbloClaimedError, CapabilityError, SyncSessionError, docUrlForCode, translateHttpError, errorFromWire, toAbloError, ERROR_CONTRACT_VERSION,
|
|
32
|
-
// The code
|
|
33
|
-
// server
|
|
34
|
-
//
|
|
36
|
+
// The table mapping each error code to its HTTP status and retryable flag —
|
|
37
|
+
// plain data a server can use to resolve a code's canonical status the same
|
|
38
|
+
// way the client's error serializer does.
|
|
35
39
|
errorCodeSpec, } from '../errors.js';
|
|
36
|
-
// Protocol timing constants — the
|
|
37
|
-
//
|
|
38
|
-
//
|
|
39
|
-
//
|
|
40
|
+
// Protocol timing constants — the 30-second ping cadence and the lease window
|
|
41
|
+
// derived from it, shared by the client heartbeat and the server keepalive,
|
|
42
|
+
// claim leasing, and presence expiry (see protocol.ts) — plus the WebSocket
|
|
43
|
+
// subprotocols used during the authenticated handshake.
|
|
40
44
|
export { PING_INTERVAL_MS, LEASE_TTL_MS, WS_BEARER_SUBPROTOCOL_PREFIX, WS_SYNC_SUBPROTOCOL, } from './protocol.js';
|
|
@@ -1,24 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* The envelope every endpoint that returns a collection wraps its results in.
|
|
3
|
+
* Because the shape is always the same — `{ object: 'list', data, has_more,
|
|
4
|
+
* next_cursor }` — a consumer can detect and paginate any list the same way,
|
|
5
|
+
* instead of learning a different payload key for each endpoint.
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* sync-web's dashboard lists, the SDK, and any future surface produce the
|
|
11
|
-
* identical envelope from one definition.
|
|
12
|
-
*
|
|
13
|
-
* The field NAMES are Stripe's (`object`/`has_more`/`next_cursor`), not
|
|
14
|
-
* PlanetScale's (`type`/`cursor_start`/`has_next`): the rest of the Ablo API is
|
|
15
|
-
* Stripe-modeled, so this keeps one vocabulary across the surface. The
|
|
16
|
-
* PlanetScale discipline we deliberately borrow is *"every list is the same
|
|
17
|
-
* envelope"* — not the concrete key names.
|
|
7
|
+
* The list endpoints emit this shape and the {@link listEnvelope} helper
|
|
8
|
+
* produces it, so every list across the API reads from one definition. The
|
|
9
|
+
* generic type parameter carries the row type of `data`.
|
|
18
10
|
*/
|
|
19
11
|
export interface ListEnvelope<T> {
|
|
20
|
-
/**
|
|
21
|
-
*
|
|
12
|
+
/** Always the literal `'list'`. Lets a generic client recognize a collection
|
|
13
|
+
* response without special-casing each endpoint. */
|
|
22
14
|
readonly object: 'list';
|
|
23
15
|
/** The page of results. Always present (an empty array when there are none),
|
|
24
16
|
* never omitted, so `body.data` is a stable access path. */
|
|
@@ -31,13 +23,14 @@ export interface ListEnvelope<T> {
|
|
|
31
23
|
readonly next_cursor: string | null;
|
|
32
24
|
}
|
|
33
25
|
/**
|
|
34
|
-
*
|
|
26
|
+
* Wraps an already-fetched page of rows in the uniform {@link ListEnvelope}.
|
|
35
27
|
*
|
|
36
|
-
* Pagination stays the caller's
|
|
37
|
-
* `hasMore`, derive the cursor from the last row's
|
|
38
|
-
* applies the envelope so no endpoint
|
|
39
|
-
*
|
|
40
|
-
* `next_cursor: null`); a paginated endpoint passes both
|
|
28
|
+
* Pagination stays the caller's job — fetch one more row than the limit to
|
|
29
|
+
* decide `hasMore`, and derive the cursor from the last row's sort key. This
|
|
30
|
+
* helper only applies the envelope so no endpoint has to build the shape by
|
|
31
|
+
* hand. The defaults describe a small, unpaginated collection
|
|
32
|
+
* (`has_more: false`, `next_cursor: null`); a paginated endpoint passes both
|
|
33
|
+
* explicitly.
|
|
41
34
|
*/
|
|
42
35
|
export declare function listEnvelope<T>(data: readonly T[], opts?: {
|
|
43
36
|
hasMore?: boolean;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Wraps an already-fetched page of rows in the uniform {@link ListEnvelope}.
|
|
3
3
|
*
|
|
4
|
-
* Pagination stays the caller's
|
|
5
|
-
* `hasMore`, derive the cursor from the last row's
|
|
6
|
-
* applies the envelope so no endpoint
|
|
7
|
-
*
|
|
8
|
-
* `next_cursor: null`); a paginated endpoint passes both
|
|
4
|
+
* Pagination stays the caller's job — fetch one more row than the limit to
|
|
5
|
+
* decide `hasMore`, and derive the cursor from the last row's sort key. This
|
|
6
|
+
* helper only applies the envelope so no endpoint has to build the shape by
|
|
7
|
+
* hand. The defaults describe a small, unpaginated collection
|
|
8
|
+
* (`has_more: false`, `next_cursor: null`); a paginated endpoint passes both
|
|
9
|
+
* explicitly.
|
|
9
10
|
*/
|
|
10
11
|
export function listEnvelope(data, opts = {}) {
|
|
11
12
|
return {
|