@abloatai/ablo 0.35.0 → 0.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +2 -2
- package/CHANGELOG.md +71 -1929
- package/NOTICE +2 -2
- package/README.md +23 -532
- package/assets/banner.png +0 -0
- package/dist/auth.d.ts +2 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +2 -0
- package/dist/auth.js.map +1 -0
- package/dist/client.d.ts +3 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +3 -0
- package/dist/client.js.map +1 -0
- package/dist/coordination.d.ts +2 -0
- package/dist/coordination.d.ts.map +1 -0
- package/dist/coordination.js +2 -0
- package/dist/coordination.js.map +1 -0
- package/dist/index.d.ts +3 -112
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -161
- package/dist/index.js.map +1 -0
- package/dist/react.d.ts +4 -0
- package/dist/react.d.ts.map +1 -0
- package/dist/react.js +3 -0
- package/dist/react.js.map +1 -0
- package/dist/schema.d.ts +2 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +2 -0
- package/dist/schema.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +2 -0
- package/dist/server.js.map +1 -0
- package/dist/source-conformance.d.ts +2 -0
- package/dist/source-conformance.d.ts.map +1 -0
- package/dist/source-conformance.js +2 -0
- package/dist/source-conformance.js.map +1 -0
- package/dist/source-drizzle.d.ts +2 -0
- package/dist/source-drizzle.d.ts.map +1 -0
- package/dist/source-drizzle.js +2 -0
- package/dist/source-drizzle.js.map +1 -0
- package/dist/source-kysely.d.ts +2 -0
- package/dist/source-kysely.d.ts.map +1 -0
- package/dist/source-kysely.js +2 -0
- package/dist/source-kysely.js.map +1 -0
- package/dist/source-next.d.ts +2 -0
- package/dist/source-next.d.ts.map +1 -0
- package/dist/source-next.js +2 -0
- package/dist/source-next.js.map +1 -0
- package/dist/source.d.ts +2 -0
- package/dist/source.d.ts.map +1 -0
- package/dist/source.js +2 -0
- package/dist/source.js.map +1 -0
- package/dist/wire.d.ts +2 -0
- package/dist/wire.d.ts.map +1 -0
- package/dist/wire.js +2 -0
- package/dist/wire.js.map +1 -0
- package/docs/agents.md +2 -2
- package/docs/api-keys.md +13 -12
- package/docs/api.md +15 -53
- package/docs/audit.md +4 -3
- package/docs/cli.md +11 -11
- package/docs/client-behavior.md +9 -9
- package/docs/concurrency-convention.md +28 -42
- package/docs/coordination.md +228 -86
- package/docs/data-sources.md +5 -5
- package/docs/debugging.md +34 -12
- package/docs/deployment.md +8 -8
- package/docs/examples/agent-human.md +4 -4
- package/docs/examples/ai-sdk-tool.md +1 -1
- package/docs/examples/existing-python-backend.md +15 -4
- package/docs/examples/nextjs.md +27 -6
- package/docs/examples/scoped-agent.md +3 -3
- package/docs/examples/server-agent.md +2 -2
- package/docs/groups.md +57 -3
- package/docs/guarantees.md +37 -10
- package/docs/how-it-works.md +32 -8
- package/docs/idempotency.md +6 -6
- package/docs/identity.md +24 -24
- package/docs/index.md +8 -8
- package/docs/integration-guide.md +38 -16
- package/docs/internal/README.md +18 -0
- package/docs/internal/agent-fleet-coordination-design.md +171 -0
- package/docs/internal/agent-orchestration.md +58 -0
- package/docs/internal/commit-identifiers.md +91 -0
- package/docs/internal/concurrency-open-decisions.md +37 -0
- package/docs/internal/data-source-reverse-channel.md +150 -0
- package/docs/internal/per-field-conflict-detection.md +165 -0
- package/docs/internal/postgres-replication.md +64 -0
- package/docs/internal/serializable-schema.md +119 -0
- package/docs/internal/structure.md +32 -0
- package/docs/mcp.md +9 -9
- package/docs/migration.md +37 -18
- package/docs/projects.md +1 -1
- package/docs/quickstart.md +2 -2
- package/docs/react.md +24 -13
- package/docs/schema-contract.md +3 -3
- package/docs/sessions.md +91 -37
- package/docs/webhooks.md +9 -9
- package/examples/README.md +2 -2
- package/examples/data-source/README.md +1 -1
- package/examples/data-source/ablo-driver.ts +1 -1
- package/examples/data-source/customer-server.ts +1 -1
- package/examples/data-source/run.ts +1 -1
- package/examples/data-source/schema.ts +1 -1
- package/examples/quickstart.ts +2 -2
- package/llms.txt +12 -12
- package/package.json +64 -174
- package/dist/BaseSyncedStore.d.ts +0 -823
- package/dist/BaseSyncedStore.js +0 -1955
- package/dist/Database.d.ts +0 -335
- package/dist/Database.js +0 -1500
- package/dist/InstanceCache.d.ts +0 -233
- package/dist/InstanceCache.js +0 -1164
- package/dist/LazyReferenceCollection.d.ts +0 -177
- package/dist/LazyReferenceCollection.js +0 -461
- package/dist/Model.d.ts +0 -444
- package/dist/Model.js +0 -909
- package/dist/ModelRegistry.d.ts +0 -221
- package/dist/ModelRegistry.js +0 -537
- package/dist/NetworkMonitor.d.ts +0 -26
- package/dist/NetworkMonitor.js +0 -77
- package/dist/RuntimeContext.d.ts +0 -52
- package/dist/RuntimeContext.js +0 -80
- package/dist/SyncClient.d.ts +0 -551
- package/dist/SyncClient.js +0 -2199
- package/dist/adapters/alwaysOnline.d.ts +0 -14
- package/dist/adapters/alwaysOnline.js +0 -17
- package/dist/adapters/inMemoryStorage.d.ts +0 -31
- package/dist/adapters/inMemoryStorage.js +0 -110
- package/dist/ai-sdk/coordinatedTool.d.ts +0 -120
- package/dist/ai-sdk/coordinatedTool.js +0 -134
- package/dist/ai-sdk/coordinationContext.d.ts +0 -46
- package/dist/ai-sdk/coordinationContext.js +0 -106
- package/dist/ai-sdk/index.d.ts +0 -121
- package/dist/ai-sdk/index.js +0 -121
- package/dist/ai-sdk/wrap.d.ts +0 -65
- package/dist/ai-sdk/wrap.js +0 -39
- package/dist/auth/index.d.ts +0 -1
- package/dist/auth/index.js +0 -8
- package/dist/batching/index.d.ts +0 -55
- package/dist/batching/index.js +0 -147
- package/dist/cli.cjs +0 -288600
- package/dist/client/Ablo.d.ts +0 -231
- package/dist/client/Ablo.js +0 -149
- package/dist/client/abloClient.d.ts +0 -309
- package/dist/client/abloClient.js +0 -13
- package/dist/client/clientPrelude.d.ts +0 -52
- package/dist/client/clientPrelude.js +0 -60
- package/dist/client/consoleLogger.d.ts +0 -35
- package/dist/client/consoleLogger.js +0 -44
- package/dist/client/coreClient.d.ts +0 -60
- package/dist/client/coreClient.js +0 -118
- package/dist/client/createInternalComponents.d.ts +0 -46
- package/dist/client/createInternalComponents.js +0 -92
- package/dist/client/createModelProxy.d.ts +0 -228
- package/dist/client/createModelProxy.js +0 -818
- package/dist/client/humans.d.ts +0 -48
- package/dist/client/humans.js +0 -52
- package/dist/client/modelRegistration.d.ts +0 -10
- package/dist/client/modelRegistration.js +0 -312
- package/dist/client/options.d.ts +0 -461
- package/dist/client/options.js +0 -7
- package/dist/client/reactiveEngine.d.ts +0 -48
- package/dist/client/reactiveEngine.js +0 -910
- package/dist/client/resourceTypes.d.ts +0 -12
- package/dist/client/resourceTypes.js +0 -10
- package/dist/client/schemaConfig.d.ts +0 -44
- package/dist/client/schemaConfig.js +0 -185
- package/dist/client/validateAbloOptions.d.ts +0 -42
- package/dist/client/validateAbloOptions.js +0 -43
- package/dist/client/wsMutationExecutor.d.ts +0 -27
- package/dist/client/wsMutationExecutor.js +0 -72
- package/dist/context.d.ts +0 -29
- package/dist/context.js +0 -58
- package/dist/coordination/ClaimLog.d.ts +0 -26
- package/dist/coordination/ClaimLog.js +0 -32
- package/dist/coordination/index.d.ts +0 -1
- package/dist/coordination/index.js +0 -8
- package/dist/core/DatabaseManager.d.ts +0 -105
- package/dist/core/DatabaseManager.js +0 -387
- package/dist/core/QueryProcessor.d.ts +0 -75
- package/dist/core/QueryProcessor.js +0 -255
- package/dist/core/QueryView.d.ts +0 -79
- package/dist/core/QueryView.js +0 -218
- package/dist/core/StoreManager.d.ts +0 -112
- package/dist/core/StoreManager.js +0 -302
- package/dist/core/ViewRegistry.d.ts +0 -20
- package/dist/core/ViewRegistry.js +0 -55
- package/dist/core/index.d.ts +0 -33
- package/dist/core/index.js +0 -48
- package/dist/core/openIDBWithTimeout.d.ts +0 -65
- package/dist/core/openIDBWithTimeout.js +0 -153
- package/dist/core/queryUtils.d.ts +0 -45
- package/dist/core/queryUtils.js +0 -69
- package/dist/core/storeContract.d.ts +0 -145
- package/dist/core/storeContract.js +0 -12
- package/dist/docs/catalog.d.ts +0 -72
- package/dist/docs/catalog.js +0 -227
- package/dist/docs/index.d.ts +0 -10
- package/dist/docs/index.js +0 -10
- package/dist/environment.d.ts +0 -1
- package/dist/environment.js +0 -8
- package/dist/interfaces/index.d.ts +0 -311
- package/dist/interfaces/index.js +0 -9
- package/dist/keys/index.d.ts +0 -1
- package/dist/keys/index.js +0 -8
- package/dist/mutators/RecordingMutation.d.ts +0 -36
- package/dist/mutators/RecordingMutation.js +0 -182
- package/dist/mutators/Transaction.d.ts +0 -40
- package/dist/mutators/Transaction.js +0 -58
- package/dist/mutators/UndoManager.d.ts +0 -258
- package/dist/mutators/UndoManager.js +0 -658
- package/dist/mutators/defineMutators.d.ts +0 -60
- package/dist/mutators/defineMutators.js +0 -18
- package/dist/mutators/inverseOp.d.ts +0 -126
- package/dist/mutators/inverseOp.js +0 -71
- package/dist/mutators/mutateActions.d.ts +0 -45
- package/dist/mutators/mutateActions.js +0 -105
- package/dist/mutators/readerActions.d.ts +0 -33
- package/dist/mutators/readerActions.js +0 -57
- package/dist/mutators/undoApply.d.ts +0 -51
- package/dist/mutators/undoApply.js +0 -117
- package/dist/policy/index.d.ts +0 -21
- package/dist/policy/index.js +0 -20
- package/dist/query/client.d.ts +0 -61
- package/dist/query/client.js +0 -137
- package/dist/query/types.d.ts +0 -85
- package/dist/query/types.js +0 -16
- package/dist/react/AbloProvider.d.ts +0 -230
- package/dist/react/AbloProvider.js +0 -455
- package/dist/react/ClientSideSuspense.d.ts +0 -36
- package/dist/react/ClientSideSuspense.js +0 -17
- package/dist/react/DefaultFallback.d.ts +0 -24
- package/dist/react/DefaultFallback.js +0 -43
- package/dist/react/context.d.ts +0 -55
- package/dist/react/context.js +0 -29
- package/dist/react/index.d.ts +0 -61
- package/dist/react/index.js +0 -66
- package/dist/react/internalContext.d.ts +0 -33
- package/dist/react/internalContext.js +0 -3
- package/dist/react/useAblo.d.ts +0 -75
- package/dist/react/useAblo.js +0 -102
- package/dist/react/useCurrentUserId.d.ts +0 -22
- package/dist/react/useCurrentUserId.js +0 -34
- package/dist/react/useErrorListener.d.ts +0 -20
- package/dist/react/useErrorListener.js +0 -38
- package/dist/react/useMutationFailureListener.d.ts +0 -26
- package/dist/react/useMutationFailureListener.js +0 -38
- package/dist/react/useMutators.d.ts +0 -56
- package/dist/react/useMutators.js +0 -84
- package/dist/react/useReactive.d.ts +0 -35
- package/dist/react/useReactive.js +0 -123
- package/dist/react/useSyncStatus.d.ts +0 -59
- package/dist/react/useSyncStatus.js +0 -76
- package/dist/react/useUndoScope.d.ts +0 -34
- package/dist/react/useUndoScope.js +0 -81
- package/dist/schema/coordination.d.ts +0 -112
- package/dist/schema/coordination.js +0 -129
- package/dist/schema/ddl.d.ts +0 -97
- package/dist/schema/ddl.js +0 -491
- package/dist/schema/ddlLock.d.ts +0 -35
- package/dist/schema/ddlLock.js +0 -46
- package/dist/schema/diff.d.ts +0 -225
- package/dist/schema/diff.js +0 -289
- package/dist/schema/generate.d.ts +0 -19
- package/dist/schema/generate.js +0 -86
- package/dist/schema/index.d.ts +0 -41
- package/dist/schema/index.js +0 -76
- package/dist/schema/queries.d.ts +0 -201
- package/dist/schema/queries.js +0 -144
- package/dist/schema/select.d.ts +0 -40
- package/dist/schema/select.js +0 -87
- package/dist/schema/serialize.d.ts +0 -115
- package/dist/schema/serialize.js +0 -262
- package/dist/schema/sugar.d.ts +0 -109
- package/dist/schema/sugar.js +0 -83
- package/dist/schema/syncDeltaRow.d.ts +0 -6
- package/dist/schema/syncDeltaRow.js +0 -6
- package/dist/server/adapter.d.ts +0 -173
- package/dist/server/adapter.js +0 -18
- package/dist/server/commit.d.ts +0 -107
- package/dist/server/commit.js +0 -1
- package/dist/server/index.d.ts +0 -14
- package/dist/server/index.js +0 -2
- package/dist/server/readConfig.d.ts +0 -80
- package/dist/server/readConfig.js +0 -8
- package/dist/server/storageMode.d.ts +0 -23
- package/dist/server/storageMode.js +0 -17
- package/dist/source/adapter.d.ts +0 -81
- package/dist/source/adapter.js +0 -22
- package/dist/source/adapters/drizzle.d.ts +0 -48
- package/dist/source/adapters/drizzle.js +0 -219
- package/dist/source/adapters/kysely.d.ts +0 -42
- package/dist/source/adapters/kysely.js +0 -205
- package/dist/source/adapters/kyselyMutationCore.d.ts +0 -76
- package/dist/source/adapters/kyselyMutationCore.js +0 -125
- package/dist/source/adapters/memory.d.ts +0 -13
- package/dist/source/adapters/memory.js +0 -130
- package/dist/source/adapters/prisma.d.ts +0 -63
- package/dist/source/adapters/prisma.js +0 -202
- package/dist/source/conformance.d.ts +0 -37
- package/dist/source/conformance.js +0 -215
- package/dist/source/connector.d.ts +0 -95
- package/dist/source/connector.js +0 -266
- package/dist/source/connectorProtocol.d.ts +0 -154
- package/dist/source/connectorProtocol.js +0 -163
- package/dist/source/contract.d.ts +0 -195
- package/dist/source/contract.js +0 -164
- package/dist/source/factory.d.ts +0 -92
- package/dist/source/factory.js +0 -286
- package/dist/source/footprint.d.ts +0 -111
- package/dist/source/footprint.js +0 -0
- package/dist/source/idempotency.d.ts +0 -61
- package/dist/source/idempotency.js +0 -144
- package/dist/source/index.d.ts +0 -23
- package/dist/source/index.js +0 -30
- package/dist/source/migrations.d.ts +0 -21
- package/dist/source/migrations.js +0 -103
- package/dist/source/next.d.ts +0 -32
- package/dist/source/next.js +0 -25
- package/dist/source/pushQueue.d.ts +0 -134
- package/dist/source/pushQueue.js +0 -256
- package/dist/source/signing.d.ts +0 -92
- package/dist/source/signing.js +0 -162
- package/dist/source/types.d.ts +0 -401
- package/dist/source/types.js +0 -59
- package/dist/stores/ObjectStore.d.ts +0 -115
- package/dist/stores/ObjectStore.js +0 -393
- package/dist/stores/ObjectStoreContract.d.ts +0 -38
- package/dist/stores/ObjectStoreContract.js +0 -1
- package/dist/stores/SyncActionStore.d.ts +0 -97
- package/dist/stores/SyncActionStore.js +0 -504
- package/dist/stores/syncAction.d.ts +0 -26
- package/dist/stores/syncAction.js +0 -16
- package/dist/surface.d.ts +0 -36
- package/dist/surface.js +0 -75
- package/dist/sync/BootstrapFetcher.d.ts +0 -280
- package/dist/sync/BootstrapFetcher.js +0 -962
- package/dist/sync/ConnectionManager.d.ts +0 -8
- package/dist/sync/ConnectionManager.js +0 -8
- package/dist/sync/OnDemandLoader.d.ts +0 -228
- package/dist/sync/OnDemandLoader.js +0 -742
- package/dist/sync/SubscriptionManager.d.ts +0 -159
- package/dist/sync/SubscriptionManager.js +0 -243
- package/dist/sync/SyncWebSocket.d.ts +0 -173
- package/dist/sync/SyncWebSocket.js +0 -438
- package/dist/sync/awaitClaimGrant.d.ts +0 -6
- package/dist/sync/awaitClaimGrant.js +0 -6
- package/dist/sync/bootstrapApply.d.ts +0 -70
- package/dist/sync/bootstrapApply.js +0 -73
- package/dist/sync/commitFrames.d.ts +0 -8
- package/dist/sync/commitFrames.js +0 -8
- package/dist/sync/contextPorts.d.ts +0 -18
- package/dist/sync/contextPorts.js +0 -31
- package/dist/sync/createClaimStream.d.ts +0 -7
- package/dist/sync/createClaimStream.js +0 -7
- package/dist/sync/createPresenceStream.d.ts +0 -69
- package/dist/sync/createPresenceStream.js +0 -200
- package/dist/sync/createSnapshot.d.ts +0 -29
- package/dist/sync/createSnapshot.js +0 -118
- package/dist/sync/credentialLifecycle.d.ts +0 -7
- package/dist/sync/credentialLifecycle.js +0 -7
- package/dist/sync/deltaPipeline.d.ts +0 -113
- package/dist/sync/deltaPipeline.js +0 -261
- package/dist/sync/groupChange.d.ts +0 -113
- package/dist/sync/groupChange.js +0 -242
- package/dist/sync/participants.d.ts +0 -115
- package/dist/sync/participants.js +0 -344
- package/dist/sync/persistedPrefix.d.ts +0 -12
- package/dist/sync/persistedPrefix.js +0 -22
- package/dist/sync/schemaDrift.d.ts +0 -55
- package/dist/sync/schemaDrift.js +0 -53
- package/dist/sync/schemas.d.ts +0 -70
- package/dist/sync/schemas.js +0 -94
- package/dist/sync/syncCursor.d.ts +0 -40
- package/dist/sync/syncCursor.js +0 -55
- package/dist/sync/syncPlan.d.ts +0 -54
- package/dist/sync/syncPlan.js +0 -50
- package/dist/sync/wsFrameHandlers.d.ts +0 -8
- package/dist/sync/wsFrameHandlers.js +0 -8
- package/dist/testing/fixtures/bootstrap.d.ts +0 -49
- package/dist/testing/fixtures/bootstrap.js +0 -59
- package/dist/testing/fixtures/deltas.d.ts +0 -83
- package/dist/testing/fixtures/deltas.js +0 -136
- package/dist/testing/fixtures/httpResponses.d.ts +0 -70
- package/dist/testing/fixtures/httpResponses.js +0 -90
- package/dist/testing/fixtures/models.d.ts +0 -83
- package/dist/testing/fixtures/models.js +0 -272
- package/dist/testing/helpers/reactWrapper.d.ts +0 -69
- package/dist/testing/helpers/reactWrapper.js +0 -67
- package/dist/testing/helpers/syncEngineHarness.d.ts +0 -54
- package/dist/testing/helpers/syncEngineHarness.js +0 -73
- package/dist/testing/helpers/wait.d.ts +0 -30
- package/dist/testing/helpers/wait.js +0 -49
- package/dist/testing/index.d.ts +0 -23
- package/dist/testing/index.js +0 -33
- package/dist/testing/mocks/FakeDatabase.d.ts +0 -18
- package/dist/testing/mocks/FakeDatabase.js +0 -10
- package/dist/testing/mocks/MockMutationExecutor.d.ts +0 -87
- package/dist/testing/mocks/MockMutationExecutor.js +0 -186
- package/dist/testing/mocks/MockNetworkMonitor.d.ts +0 -20
- package/dist/testing/mocks/MockNetworkMonitor.js +0 -46
- package/dist/testing/mocks/MockSyncContext.d.ts +0 -51
- package/dist/testing/mocks/MockSyncContext.js +0 -72
- package/dist/testing/mocks/MockSyncStore.d.ts +0 -88
- package/dist/testing/mocks/MockSyncStore.js +0 -171
- package/dist/testing/mocks/MockWebSocket.d.ts +0 -71
- package/dist/testing/mocks/MockWebSocket.js +0 -118
- package/dist/transaction/ablo.d.ts +0 -88
- package/dist/transaction/ablo.js +0 -33
- package/dist/transaction/auth/apiKey.d.ts +0 -152
- package/dist/transaction/auth/apiKey.js +0 -419
- package/dist/transaction/auth/bootstrapScope.d.ts +0 -15
- package/dist/transaction/auth/bootstrapScope.js +0 -1
- package/dist/transaction/auth/capability.d.ts +0 -177
- package/dist/transaction/auth/capability.js +0 -199
- package/dist/transaction/auth/credentialEndpoint.d.ts +0 -61
- package/dist/transaction/auth/credentialEndpoint.js +0 -86
- package/dist/transaction/auth/credentialPolicy.d.ts +0 -148
- package/dist/transaction/auth/credentialPolicy.js +0 -125
- package/dist/transaction/auth/credentialSource.d.ts +0 -30
- package/dist/transaction/auth/credentialSource.js +0 -55
- package/dist/transaction/auth/hostedEndpoints.d.ts +0 -21
- package/dist/transaction/auth/hostedEndpoints.js +0 -21
- package/dist/transaction/auth/identity.d.ts +0 -55
- package/dist/transaction/auth/identity.js +0 -210
- package/dist/transaction/auth/index.d.ts +0 -162
- package/dist/transaction/auth/index.js +0 -304
- package/dist/transaction/auth/schemas.d.ts +0 -59
- package/dist/transaction/auth/schemas.js +0 -85
- package/dist/transaction/auth/sessionMint.d.ts +0 -28
- package/dist/transaction/auth/sessionMint.js +0 -85
- package/dist/transaction/coordination/awaitClaimGrant.d.ts +0 -49
- package/dist/transaction/coordination/awaitClaimGrant.js +0 -112
- package/dist/transaction/coordination/claimHeartbeatLoop.d.ts +0 -50
- package/dist/transaction/coordination/claimHeartbeatLoop.js +0 -88
- package/dist/transaction/coordination/claimMeta.d.ts +0 -49
- package/dist/transaction/coordination/claimMeta.js +0 -52
- package/dist/transaction/coordination/createClaimStream.d.ts +0 -64
- package/dist/transaction/coordination/createClaimStream.js +0 -475
- package/dist/transaction/coordination/events.d.ts +0 -74
- package/dist/transaction/coordination/events.js +0 -7
- package/dist/transaction/coordination/index.d.ts +0 -19
- package/dist/transaction/coordination/index.js +0 -44
- package/dist/transaction/coordination/locator.d.ts +0 -83
- package/dist/transaction/coordination/locator.js +0 -82
- package/dist/transaction/coordination/schema.d.ts +0 -1473
- package/dist/transaction/coordination/schema.js +0 -1013
- package/dist/transaction/coordination/targetConflict.d.ts +0 -2
- package/dist/transaction/coordination/targetConflict.js +0 -103
- package/dist/transaction/coordination/trace.d.ts +0 -78
- package/dist/transaction/coordination/trace.js +0 -138
- package/dist/transaction/durableWrites.d.ts +0 -62
- package/dist/transaction/durableWrites.js +0 -71
- package/dist/transaction/environment.d.ts +0 -105
- package/dist/transaction/environment.js +0 -108
- package/dist/transaction/errorCodes.d.ts +0 -403
- package/dist/transaction/errorCodes.js +0 -480
- package/dist/transaction/errors.d.ts +0 -428
- package/dist/transaction/errors.js +0 -686
- package/dist/transaction/index.d.ts +0 -20
- package/dist/transaction/index.js +0 -20
- package/dist/transaction/keys/index.d.ts +0 -87
- package/dist/transaction/keys/index.js +0 -207
- package/dist/transaction/log/syncDeltaRow.d.ts +0 -158
- package/dist/transaction/log/syncDeltaRow.js +0 -95
- package/dist/transaction/logPosition.d.ts +0 -97
- package/dist/transaction/logPosition.js +0 -125
- package/dist/transaction/logger.d.ts +0 -16
- package/dist/transaction/logger.js +0 -7
- package/dist/transaction/observability.d.ts +0 -53
- package/dist/transaction/observability.js +0 -19
- package/dist/transaction/persistence.d.ts +0 -12
- package/dist/transaction/persistence.js +0 -11
- package/dist/transaction/plugin.d.ts +0 -192
- package/dist/transaction/plugin.js +0 -87
- package/dist/transaction/policy/types.d.ts +0 -217
- package/dist/transaction/policy/types.js +0 -126
- package/dist/transaction/resources/functionalUpdate.d.ts +0 -79
- package/dist/transaction/resources/functionalUpdate.js +0 -87
- package/dist/transaction/resources/httpResources.d.ts +0 -266
- package/dist/transaction/resources/httpResources.js +0 -7
- package/dist/transaction/resources/modelOperations.d.ts +0 -319
- package/dist/transaction/resources/modelOperations.js +0 -12
- package/dist/transaction/resources/mutationOptions.d.ts +0 -66
- package/dist/transaction/resources/mutationOptions.js +0 -9
- package/dist/transaction/resources/where.d.ts +0 -85
- package/dist/transaction/resources/where.js +0 -70
- package/dist/transaction/resources/writeOptionsSchema.d.ts +0 -47
- package/dist/transaction/resources/writeOptionsSchema.js +0 -73
- package/dist/transaction/schema/field.d.ts +0 -126
- package/dist/transaction/schema/field.js +0 -265
- package/dist/transaction/schema/loadStrategy.d.ts +0 -45
- package/dist/transaction/schema/loadStrategy.js +0 -46
- package/dist/transaction/schema/model.d.ts +0 -379
- package/dist/transaction/schema/model.js +0 -123
- package/dist/transaction/schema/openapi.d.ts +0 -57
- package/dist/transaction/schema/openapi.js +0 -340
- package/dist/transaction/schema/relation.d.ts +0 -199
- package/dist/transaction/schema/relation.js +0 -104
- package/dist/transaction/schema/residency.d.ts +0 -29
- package/dist/transaction/schema/residency.js +0 -25
- package/dist/transaction/schema/roles.d.ts +0 -249
- package/dist/transaction/schema/roles.js +0 -230
- package/dist/transaction/schema/schema.d.ts +0 -324
- package/dist/transaction/schema/schema.js +0 -305
- package/dist/transaction/schema/tenancy.d.ts +0 -139
- package/dist/transaction/schema/tenancy.js +0 -190
- package/dist/transaction/transactionLayer.d.ts +0 -82
- package/dist/transaction/transactionLayer.js +0 -24
- package/dist/transaction/transactions/settlement/commitEnvelope.d.ts +0 -143
- package/dist/transaction/transactions/settlement/commitEnvelope.js +0 -161
- package/dist/transaction/transactions/settlement/httpCommitEnvelope.d.ts +0 -53
- package/dist/transaction/transactions/settlement/httpCommitEnvelope.js +0 -207
- package/dist/transaction/transactions/settlement/idempotencyKey.d.ts +0 -10
- package/dist/transaction/transactions/settlement/idempotencyKey.js +0 -9
- package/dist/transaction/transactions/settlement/pendingWrite.d.ts +0 -112
- package/dist/transaction/transactions/settlement/pendingWrite.js +0 -20
- package/dist/transaction/transport/commitFrames.d.ts +0 -90
- package/dist/transaction/transport/commitFrames.js +0 -134
- package/dist/transaction/transport/connectionManager.d.ts +0 -215
- package/dist/transaction/transport/connectionManager.js +0 -673
- package/dist/transaction/transport/credentialLifecycle.d.ts +0 -177
- package/dist/transaction/transport/credentialLifecycle.js +0 -324
- package/dist/transaction/transport/heartbeat.d.ts +0 -65
- package/dist/transaction/transport/heartbeat.js +0 -93
- package/dist/transaction/transport/httpClient.d.ts +0 -123
- package/dist/transaction/transport/httpClient.js +0 -145
- package/dist/transaction/transport/httpOptions.d.ts +0 -33
- package/dist/transaction/transport/httpOptions.js +0 -12
- package/dist/transaction/transport/httpTransport.d.ts +0 -8
- package/dist/transaction/transport/httpTransport.js +0 -1276
- package/dist/transaction/transport/networkProbe.d.ts +0 -84
- package/dist/transaction/transport/networkProbe.js +0 -207
- package/dist/transaction/transport/wsFrameHandlers.d.ts +0 -128
- package/dist/transaction/transport/wsFrameHandlers.js +0 -429
- package/dist/transaction/transport/wsTransport.d.ts +0 -576
- package/dist/transaction/transport/wsTransport.js +0 -1017
- package/dist/transaction/types/assertExact.d.ts +0 -17
- package/dist/transaction/types/assertExact.js +0 -1
- package/dist/transaction/types/global.d.ts +0 -107
- package/dist/transaction/types/global.js +0 -40
- package/dist/transaction/types/index.d.ts +0 -205
- package/dist/transaction/types/index.js +0 -56
- package/dist/transaction/types/modelData.d.ts +0 -10
- package/dist/transaction/types/modelData.js +0 -9
- package/dist/transaction/types/participant.d.ts +0 -20
- package/dist/transaction/types/participant.js +0 -10
- package/dist/transaction/types/streams.d.ts +0 -540
- package/dist/transaction/types/streams.js +0 -11
- package/dist/transaction/utils/asyncIterator.d.ts +0 -34
- package/dist/transaction/utils/asyncIterator.js +0 -135
- package/dist/transaction/utils/duration.d.ts +0 -25
- package/dist/transaction/utils/duration.js +0 -45
- package/dist/transaction/utils/json.d.ts +0 -57
- package/dist/transaction/utils/json.js +0 -276
- package/dist/transaction/wire/accountResponses.d.ts +0 -351
- package/dist/transaction/wire/accountResponses.js +0 -255
- package/dist/transaction/wire/auth.d.ts +0 -49
- package/dist/transaction/wire/auth.js +0 -57
- package/dist/transaction/wire/bootstrapReason.d.ts +0 -9
- package/dist/transaction/wire/bootstrapReason.js +0 -8
- package/dist/transaction/wire/claimEvent.d.ts +0 -76
- package/dist/transaction/wire/claimEvent.js +0 -73
- package/dist/transaction/wire/claims.d.ts +0 -463
- package/dist/transaction/wire/claims.js +0 -229
- package/dist/transaction/wire/commit.d.ts +0 -603
- package/dist/transaction/wire/commit.js +0 -321
- package/dist/transaction/wire/delta.d.ts +0 -250
- package/dist/transaction/wire/delta.js +0 -147
- package/dist/transaction/wire/errorEnvelope.d.ts +0 -72
- package/dist/transaction/wire/errorEnvelope.js +0 -123
- package/dist/transaction/wire/feedCursor.d.ts +0 -60
- package/dist/transaction/wire/feedCursor.js +0 -82
- package/dist/transaction/wire/feedEvent.d.ts +0 -177
- package/dist/transaction/wire/feedEvent.js +0 -39
- package/dist/transaction/wire/frames.d.ts +0 -194
- package/dist/transaction/wire/frames.js +0 -50
- package/dist/transaction/wire/inboundFrames.d.ts +0 -552
- package/dist/transaction/wire/inboundFrames.js +0 -116
- package/dist/transaction/wire/index.d.ts +0 -50
- package/dist/transaction/wire/index.js +0 -74
- package/dist/transaction/wire/listEnvelope.d.ts +0 -37
- package/dist/transaction/wire/listEnvelope.js +0 -42
- package/dist/transaction/wire/modelResponses.d.ts +0 -85
- package/dist/transaction/wire/modelResponses.js +0 -43
- package/dist/transaction/wire/protocol.d.ts +0 -38
- package/dist/transaction/wire/protocol.js +0 -38
- package/dist/transaction/wire/protocolVersion.d.ts +0 -73
- package/dist/transaction/wire/protocolVersion.js +0 -83
- package/dist/transactions/mutations/MutationQueue.d.ts +0 -655
- package/dist/transactions/mutations/MutationQueue.js +0 -2797
- package/dist/transactions/mutations/MutationStore.d.ts +0 -20
- package/dist/transactions/mutations/MutationStore.js +0 -53
- package/dist/transactions/mutations/UnconfirmedWrites.d.ts +0 -82
- package/dist/transactions/mutations/UnconfirmedWrites.js +0 -104
- package/dist/transactions/mutations/coalesceRules.d.ts +0 -58
- package/dist/transactions/mutations/coalesceRules.js +0 -140
- package/dist/transactions/mutations/commitLatency.d.ts +0 -52
- package/dist/transactions/mutations/commitLatency.js +0 -130
- package/dist/transactions/mutations/commitOutboxStore.d.ts +0 -28
- package/dist/transactions/mutations/commitOutboxStore.js +0 -26
- package/dist/transactions/mutations/commitPayload.d.ts +0 -164
- package/dist/transactions/mutations/commitPayload.js +0 -152
- package/dist/transactions/mutations/deltaConfirmation.d.ts +0 -59
- package/dist/transactions/mutations/deltaConfirmation.js +0 -233
- package/dist/transactions/mutations/durableWriteStore.d.ts +0 -14
- package/dist/transactions/mutations/durableWriteStore.js +0 -12
- package/dist/transactions/mutations/optimisticApply.d.ts +0 -49
- package/dist/transactions/mutations/optimisticApply.js +0 -65
- package/dist/transactions/mutations/replayValidation.d.ts +0 -186
- package/dist/transactions/mutations/replayValidation.js +0 -163
- package/dist/utils/mobxSetup.d.ts +0 -53
- package/dist/utils/mobxSetup.js +0 -330
- package/dist/webhooks/events.d.ts +0 -43
- package/dist/webhooks/events.js +0 -42
- package/dist/webhooks/index.d.ts +0 -8
- package/dist/webhooks/index.js +0 -8
- package/dist/wire/index.d.ts +0 -1
- package/dist/wire/index.js +0 -8
- package/docs/interaction-model.md +0 -99
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/**
|
|
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
|
-
*
|
|
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
|
-
* uniform `{ object: 'list', data, has_more, next_cursor }` collection.
|
|
13
|
-
*
|
|
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
|
-
*/
|
|
18
|
-
export { errorEnvelopeSchema, errorEnvelope, statusForType, INTERNAL_ERROR_PUBLIC_MESSAGE, } from './errorEnvelope.js';
|
|
19
|
-
export type { ErrorEnvelope } from './errorEnvelope.js';
|
|
20
|
-
export { listEnvelopeSchema, listEnvelope } from './listEnvelope.js';
|
|
21
|
-
export type { ListEnvelope } from './listEnvelope.js';
|
|
22
|
-
export { claimEventSchema } from './claimEvent.js';
|
|
23
|
-
export type { ClaimEvent } from './claimEvent.js';
|
|
24
|
-
export { feedEventSchema, logListResponseSchema } from './feedEvent.js';
|
|
25
|
-
export type { FeedEvent, LogListResponse } from './feedEvent.js';
|
|
26
|
-
export { feedCursorSchema, parseFeedCursor, formatFeedCursor, feedCursorAdvanced, FEED_CURSOR_START, FEED_CURSOR_FORMAT, FEED_CURSOR_EXAMPLE, } from './feedCursor.js';
|
|
27
|
-
export type { FeedCursor } from './feedCursor.js';
|
|
28
|
-
export { bootstrapReasonSchema } from './bootstrapReason.js';
|
|
29
|
-
export type { BootstrapReason } from './bootstrapReason.js';
|
|
30
|
-
export { commitOperationSchema, wireCommitOperationSchema, commitPayloadSchema, commitMessageSchema, } from './frames.js';
|
|
31
|
-
export { PROTOCOL_VERSION, MIN_SUPPORTED_PROTOCOL_VERSION, DEFAULT_PROTOCOL_VERSION, SUPPORTED_PROTOCOL_VERSIONS, WS_CLOSE_PROTOCOL_VERSION, PROTOCOL_VERSION_HEADER, protocolVersionProblem, resolveProtocolVersion, } from './protocolVersion.js';
|
|
32
|
-
export type { SupportedProtocolVersion, ProtocolVersionProblem, } from './protocolVersion.js';
|
|
33
|
-
export type { CommitOperation, WireCommitOperation, CommitMessage, MutationResultMessage, } from './frames.js';
|
|
34
|
-
export { COMMIT_CORRELATION_ID_MAX_LENGTH, correlationIdSchema, commitStatusSchema, commitWaitSchema, commitSettlementSchema, commitReceiptSchema, rejectedCommitReceiptSchema, mutationResultPayloadSchema, mutationResultMessageSchema, commitAckSchema, mutationCommitResultSchema, commitOperationControlShape, commitOperationBodySchema, commitRequestSchema, } from './commit.js';
|
|
35
|
-
export type { CommitOperationBody, CommitRequest, CorrelationId, CommitStatus, CommitWait, CommitSettlement, CommitReceiptWire, RejectedCommitReceiptWire, MutationResultPayload, MutationResultMessageWire, CommitAck, MutationCommitResultInput, MutationCommitResult, } from './commit.js';
|
|
36
|
-
export { participantKindSchema, confirmationStateSchema, syncDeltaActionSchema, wireDeltaDataSchema, participantRefSchema, syncDeltaWireCoreSchema, clientSyncDeltaSchema, serverSyncDeltaSchema, deltaSchema, } from './delta.js';
|
|
37
|
-
export type { ParticipantKind, ConfirmationState, SyncDeltaAction, WireDeltaData, ParticipantRef, SyncDeltaWireCore, ClientSyncDelta, ServerSyncDelta, Delta, } from './delta.js';
|
|
38
|
-
export { AbloError, AbloAuthenticationError, AbloPermissionError, AbloValidationError, AbloRateLimitError, AbloIdempotencyError, AbloConnectionError, AbloNotFoundError, AbloServerError, AbloStaleContextError, AbloContentionError, AbloClaimedError, CapabilityError, AbloSessionError, SyncSessionError, docUrlForCode, translateHttpError, errorFromWire, toAbloError, ERROR_CONTRACT_VERSION, errorCodeSpec, } from '../errors.js';
|
|
39
|
-
export type { ErrorCode, WireErrorCode, RequiredCapability } from '../errors.js';
|
|
40
|
-
export { PING_INTERVAL_MS, LEASE_TTL_MS, WS_BEARER_SUBPROTOCOL_PREFIX, WS_SYNC_SUBPROTOCOL, } from './protocol.js';
|
|
41
|
-
export { claimTargetSchema, claimRequestSchema, claimHeartbeatRequestSchema, listQuerySchema, claimListQuerySchema, claimStateSchema, claimAcquiredResponseSchema, claimQueuedResponseSchema, claimAcquireResponseSchema, claimHeartbeatReplySchema, claimHeartbeatBatchReplySchema, claimListResponseSchema, } from './claims.js';
|
|
42
|
-
export type { ClaimTargetBody, ClaimRequest, ClaimHeartbeatRequest, ListQuery, ClaimListQuery, ClaimState, ClaimAcquiredResponse, ClaimQueuedResponse, ClaimAcquireResponse, ClaimHeartbeatReply, ClaimHeartbeatBatchReply, ClaimListResponse, } from './claims.js';
|
|
43
|
-
export { modelReadResponseSchema, modelListResponseSchema, } from './modelResponses.js';
|
|
44
|
-
export type { ModelReadResponse, ModelListResponse } from './modelResponses.js';
|
|
45
|
-
export { projectResponseSchema, projectListResponseSchema, provisionedKeySchema, provisionKeyResponseSchema, conflictAxisWireSchema, schemaModelResponseSchema, schemaReadResponseSchema, logOpSchema, LOG_OP_BY_ACTION, logEventSchema, usageBucketSchema, usageReportResponseSchema, controlKeySchema, controlKeyListResponseSchema, keyMintedResponseSchema, keyRevokedResponseSchema, } from './accountResponses.js';
|
|
46
|
-
export type { ProjectResponse, ProjectListResponse, ProvisionedKey, ProvisionKeyResponse, SchemaModelResponse, SchemaReadResponse, LogOp, LogEvent, UsageBucket, UsageReportResponse, ControlKey, ControlKeyListResponse, KeyMintedResponse, KeyRevokedResponse, } from './accountResponses.js';
|
|
47
|
-
export { WS_INBOUND_FRAMES, wsInboundEnvelopeSchema, isKnownInboundFrame, isSchemaValidatedFrame, } from './inboundFrames.js';
|
|
48
|
-
export type { InboundFrameContract, InboundFrameType, InboundFramePayload, SchemaValidatedFrameType, WsInboundEnvelope, } from './inboundFrames.js';
|
|
49
|
-
export { ephemeralKeyUserSchema, ephemeralKeyRequestSchema, capabilityRequestSchema, } from './auth.js';
|
|
50
|
-
export type { EphemeralKeyUser, EphemeralKeyRequest, CapabilityRequest, } from './auth.js';
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
/**
|
|
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
|
-
*
|
|
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
|
-
* uniform `{ object: 'list', data, has_more, next_cursor }` collection.
|
|
13
|
-
*
|
|
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
|
-
*/
|
|
18
|
-
export { errorEnvelopeSchema, errorEnvelope, statusForType, INTERNAL_ERROR_PUBLIC_MESSAGE, } from './errorEnvelope.js';
|
|
19
|
-
export { listEnvelopeSchema, listEnvelope } from './listEnvelope.js';
|
|
20
|
-
// The `GET /v1/logs` feed — the two arms, their envelope, and the cursor that
|
|
21
|
-
// carries a position in each.
|
|
22
|
-
export { claimEventSchema } from './claimEvent.js';
|
|
23
|
-
export { feedEventSchema, logListResponseSchema } from './feedEvent.js';
|
|
24
|
-
export { feedCursorSchema, parseFeedCursor, formatFeedCursor, feedCursorAdvanced, FEED_CURSOR_START, FEED_CURSOR_FORMAT, FEED_CURSOR_EXAMPLE, } from './feedCursor.js';
|
|
25
|
-
export { bootstrapReasonSchema } from './bootstrapReason.js';
|
|
26
|
-
// The write-path frame contract: the message shapes shared by the client and
|
|
27
|
-
// the server. The runtime Zod validators sit beside the interfaces and are
|
|
28
|
-
// pinned to them, and they gate every operation and payload on both commit
|
|
29
|
-
// transports.
|
|
30
|
-
export { commitOperationSchema, wireCommitOperationSchema, commitPayloadSchema, commitMessageSchema, } from './frames.js';
|
|
31
|
-
// Protocol versioning: the single integer the client and server compare to
|
|
32
|
-
// confirm they can speak to each other, plus the WebSocket close code used to
|
|
33
|
-
// reject a mismatch. See protocolVersion.ts for the changelog and deploy rules.
|
|
34
|
-
export { PROTOCOL_VERSION, MIN_SUPPORTED_PROTOCOL_VERSION, DEFAULT_PROTOCOL_VERSION, SUPPORTED_PROTOCOL_VERSIONS, WS_CLOSE_PROTOCOL_VERSION, PROTOCOL_VERSION_HEADER, protocolVersionProblem, resolveProtocolVersion, } from './protocolVersion.js';
|
|
35
|
-
// Commit settlement backbone. The transport receipt, server execution cache,
|
|
36
|
-
// and normalized client acknowledgement are different envelopes composed from
|
|
37
|
-
// this one discriminated settlement vocabulary.
|
|
38
|
-
export { COMMIT_CORRELATION_ID_MAX_LENGTH, correlationIdSchema, commitStatusSchema, commitWaitSchema, commitSettlementSchema, commitReceiptSchema, rejectedCommitReceiptSchema, mutationResultPayloadSchema, mutationResultMessageSchema, commitAckSchema, mutationCommitResultSchema,
|
|
39
|
-
// The request side of the same boundary — one definition, which the published
|
|
40
|
-
// OpenAPI reference derives from rather than describing separately.
|
|
41
|
-
commitOperationControlShape, commitOperationBodySchema, commitRequestSchema, } from './commit.js';
|
|
42
|
-
// The read-path delta contract: the shape the server broadcasts to clients as the
|
|
43
|
-
// payload of a `delta` or `sync_response` frame, together with the shared
|
|
44
|
-
// participant vocabulary it carries. Both ends derive their delta type from these
|
|
45
|
-
// schemas, so the client and server cannot drift apart.
|
|
46
|
-
export { participantKindSchema, confirmationStateSchema, syncDeltaActionSchema, wireDeltaDataSchema, participantRefSchema, syncDeltaWireCoreSchema, clientSyncDeltaSchema, serverSyncDeltaSchema, deltaSchema, } from './delta.js';
|
|
47
|
-
// The error surface a wire consumer needs to throw, classify, and serialize.
|
|
48
|
-
export { AbloError, AbloAuthenticationError, AbloPermissionError, AbloValidationError, AbloRateLimitError, AbloIdempotencyError, AbloConnectionError, AbloNotFoundError, AbloServerError, AbloStaleContextError, AbloContentionError, AbloClaimedError, CapabilityError, AbloSessionError, SyncSessionError, docUrlForCode, translateHttpError, errorFromWire, toAbloError, ERROR_CONTRACT_VERSION,
|
|
49
|
-
// The table mapping each error code to its HTTP status and retryable flag —
|
|
50
|
-
// plain data a server can use to resolve a code's canonical status the same
|
|
51
|
-
// way the client's error serializer does.
|
|
52
|
-
errorCodeSpec, } from '../errors.js';
|
|
53
|
-
// Protocol timing constants — the 30-second ping cadence and the lease window
|
|
54
|
-
// derived from it, shared by the client heartbeat and the server keepalive,
|
|
55
|
-
// claim leasing, and presence expiry (see protocol.ts) — plus the WebSocket
|
|
56
|
-
// subprotocols used during the authenticated handshake.
|
|
57
|
-
export { PING_INTERVAL_MS, LEASE_TTL_MS, WS_BEARER_SUBPROTOCOL_PREFIX, WS_SYNC_SUBPROTOCOL, } from './protocol.js';
|
|
58
|
-
// The claim routes' half of the boundary — requests and responses both, beside
|
|
59
|
-
// the commit body for the same reason: the server answers in these shapes, the
|
|
60
|
-
// client reads them back through the same schemas, and the OpenAPI reference
|
|
61
|
-
// derives from them rather than describing them from memory.
|
|
62
|
-
export { claimTargetSchema, claimRequestSchema, claimHeartbeatRequestSchema, listQuerySchema, claimListQuerySchema, claimStateSchema, claimAcquiredResponseSchema, claimQueuedResponseSchema, claimAcquireResponseSchema, claimHeartbeatReplySchema, claimHeartbeatBatchReplySchema, claimListResponseSchema, } from './claims.js';
|
|
63
|
-
// The model read routes' responses — the envelope around a row, which is
|
|
64
|
-
// protocol, around `data`, which is the caller's schema.
|
|
65
|
-
export { modelReadResponseSchema, modelListResponseSchema, } from './modelResponses.js';
|
|
66
|
-
// The account routes' responses — projects, the deployed schema, the commit
|
|
67
|
-
// log, usage. What the server, the CLI, and the MCP server agree on.
|
|
68
|
-
export { projectResponseSchema, projectListResponseSchema, provisionedKeySchema, provisionKeyResponseSchema, conflictAxisWireSchema, schemaModelResponseSchema, schemaReadResponseSchema, logOpSchema, LOG_OP_BY_ACTION, logEventSchema, usageBucketSchema, usageReportResponseSchema, controlKeySchema, controlKeyListResponseSchema, keyMintedResponseSchema, keyRevokedResponseSchema, } from './accountResponses.js';
|
|
69
|
-
// The inbound socket surface: every frame the server can send, and how each
|
|
70
|
-
// one's payload is validated.
|
|
71
|
-
export { WS_INBOUND_FRAMES, wsInboundEnvelopeSchema, isKnownInboundFrame, isSchemaValidatedFrame, } from './inboundFrames.js';
|
|
72
|
-
// Credential minting — the first call any caller makes, so the contract cannot
|
|
73
|
-
// omit it. Response side lives in `auth/schemas.ts`.
|
|
74
|
-
export { ephemeralKeyUserSchema, ephemeralKeyRequestSchema, capabilityRequestSchema, } from './auth.js';
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/**
|
|
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
|
-
*
|
|
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`.
|
|
10
|
-
*/
|
|
11
|
-
import { z } from 'zod';
|
|
12
|
-
/**
|
|
13
|
-
* Builds the authoritative list-envelope schema for a row schema. Keeping the
|
|
14
|
-
* item validator generic lets every endpoint share the same envelope contract
|
|
15
|
-
* without weakening `data` to `unknown[]`.
|
|
16
|
-
*/
|
|
17
|
-
export declare function listEnvelopeSchema<T>(itemSchema: z.ZodType<T>): z.ZodObject<{
|
|
18
|
-
object: z.ZodLiteral<"list">;
|
|
19
|
-
data: z.ZodReadonly<z.ZodArray<z.ZodType<T, unknown, z.core.$ZodTypeInternals<T, unknown>>>>;
|
|
20
|
-
has_more: z.ZodBoolean;
|
|
21
|
-
next_cursor: z.ZodNullable<z.ZodString>;
|
|
22
|
-
}, z.core.$strip>;
|
|
23
|
-
export type ListEnvelope<T> = Readonly<z.infer<ReturnType<typeof listEnvelopeSchema<T>>>>;
|
|
24
|
-
/**
|
|
25
|
-
* Wraps an already-fetched page of rows in the uniform {@link ListEnvelope}.
|
|
26
|
-
*
|
|
27
|
-
* Pagination stays the caller's job — fetch one more row than the limit to
|
|
28
|
-
* decide `hasMore`, and derive the cursor from the last row's sort key. This
|
|
29
|
-
* helper only applies the envelope so no endpoint has to build the shape by
|
|
30
|
-
* hand. The defaults describe a small, unpaginated collection
|
|
31
|
-
* (`has_more: false`, `next_cursor: null`); a paginated endpoint passes both
|
|
32
|
-
* explicitly.
|
|
33
|
-
*/
|
|
34
|
-
export declare function listEnvelope<T>(data: readonly T[], opts?: {
|
|
35
|
-
hasMore?: boolean;
|
|
36
|
-
nextCursor?: string | null;
|
|
37
|
-
}): ListEnvelope<T>;
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
/**
|
|
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
|
-
*
|
|
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`.
|
|
10
|
-
*/
|
|
11
|
-
import { z } from 'zod';
|
|
12
|
-
/**
|
|
13
|
-
* Builds the authoritative list-envelope schema for a row schema. Keeping the
|
|
14
|
-
* item validator generic lets every endpoint share the same envelope contract
|
|
15
|
-
* without weakening `data` to `unknown[]`.
|
|
16
|
-
*/
|
|
17
|
-
export function listEnvelopeSchema(itemSchema) {
|
|
18
|
-
return z.object({
|
|
19
|
-
object: z.literal('list'),
|
|
20
|
-
data: z.array(itemSchema).readonly(),
|
|
21
|
-
has_more: z.boolean(),
|
|
22
|
-
next_cursor: z.string().nullable(),
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Wraps an already-fetched page of rows in the uniform {@link ListEnvelope}.
|
|
27
|
-
*
|
|
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.
|
|
34
|
-
*/
|
|
35
|
-
export function listEnvelope(data, opts = {}) {
|
|
36
|
-
return {
|
|
37
|
-
object: 'list',
|
|
38
|
-
data,
|
|
39
|
-
has_more: opts.hasMore ?? false,
|
|
40
|
-
next_cursor: opts.nextCursor ?? null,
|
|
41
|
-
};
|
|
42
|
-
}
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* What the model read routes answer with — `GET /v1/models/{model}/{id}` and
|
|
3
|
-
* `GET /v1/models/{model}`.
|
|
4
|
-
*
|
|
5
|
-
* `data` is `unknown` here on purpose. The transport that reads these responses
|
|
6
|
-
* is schema-agnostic: it moves rows for whatever schema the caller declared, so
|
|
7
|
-
* it validates the envelope around a row and leaves the row itself to the typed
|
|
8
|
-
* surface above it. Everything outside `data` — the watermark, the claims, the
|
|
9
|
-
* pagination — is protocol, and protocol is validated here.
|
|
10
|
-
*/
|
|
11
|
-
import { z } from 'zod';
|
|
12
|
-
/**
|
|
13
|
-
* `GET /v1/models/{model}/{id}`.
|
|
14
|
-
*
|
|
15
|
-
* `stamp` is the row's watermark: the log position the read reflects. A write
|
|
16
|
-
* that guards on this premise (`readAt`) is rejected if the row moved on in
|
|
17
|
-
* between, which is what makes a read→decide→write sequence safe without a
|
|
18
|
-
* lock. A missing row answers 404, so `data` is always present here.
|
|
19
|
-
*/
|
|
20
|
-
export declare const modelReadResponseSchema: z.ZodObject<{
|
|
21
|
-
object: z.ZodLiteral<"model">;
|
|
22
|
-
model: z.ZodString;
|
|
23
|
-
id: z.ZodString;
|
|
24
|
-
data: z.ZodUnknown;
|
|
25
|
-
stamp: z.ZodNumber;
|
|
26
|
-
claims: z.ZodReadonly<z.ZodArray<z.ZodReadonly<z.ZodObject<{
|
|
27
|
-
id: z.ZodString;
|
|
28
|
-
actor: z.ZodString;
|
|
29
|
-
participantKind: z.ZodPreprocess<z.ZodEnum<{
|
|
30
|
-
user: "user";
|
|
31
|
-
agent: "agent";
|
|
32
|
-
system: "system";
|
|
33
|
-
}>>;
|
|
34
|
-
onBehalfOfId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
35
|
-
onBehalfOfKind: z.ZodOptional<z.ZodNullable<z.ZodPreprocess<z.ZodEnum<{
|
|
36
|
-
user: "user";
|
|
37
|
-
agent: "agent";
|
|
38
|
-
system: "system";
|
|
39
|
-
}>>>>;
|
|
40
|
-
capabilityId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
41
|
-
description: z.ZodOptional<z.ZodString>;
|
|
42
|
-
status: z.ZodOptional<z.ZodEnum<{
|
|
43
|
-
active: "active";
|
|
44
|
-
queued: "queued";
|
|
45
|
-
}>>;
|
|
46
|
-
position: z.ZodOptional<z.ZodNumber>;
|
|
47
|
-
expiresAt: z.ZodNumber;
|
|
48
|
-
fenceToken: z.ZodOptional<z.ZodNumber>;
|
|
49
|
-
target: z.ZodReadonly<z.ZodObject<{
|
|
50
|
-
model: z.ZodString;
|
|
51
|
-
id: z.ZodString;
|
|
52
|
-
path: z.ZodOptional<z.ZodString>;
|
|
53
|
-
range: z.ZodOptional<z.ZodObject<{
|
|
54
|
-
startLine: z.ZodNumber;
|
|
55
|
-
endLine: z.ZodNumber;
|
|
56
|
-
startColumn: z.ZodOptional<z.ZodNumber>;
|
|
57
|
-
endColumn: z.ZodOptional<z.ZodNumber>;
|
|
58
|
-
}, z.core.$strip>>;
|
|
59
|
-
field: z.ZodOptional<z.ZodString>;
|
|
60
|
-
fields: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
|
|
61
|
-
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
62
|
-
}, z.core.$strip>>;
|
|
63
|
-
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
64
|
-
field: z.ZodOptional<z.ZodString>;
|
|
65
|
-
}, z.core.$strip>>>>;
|
|
66
|
-
}, z.core.$strip>;
|
|
67
|
-
export type ModelReadResponse = z.infer<typeof modelReadResponseSchema>;
|
|
68
|
-
/**
|
|
69
|
-
* `GET /v1/models/{model}` — the list envelope, with the two fields the model
|
|
70
|
-
* routes add to it: the model's name and the org-wide watermark the page was
|
|
71
|
-
* read at.
|
|
72
|
-
*
|
|
73
|
-
* The envelope is derived, not restated. A schema-agnostic row is `z.unknown()`,
|
|
74
|
-
* which the generic helper accepts like any other item schema, so there is no
|
|
75
|
-
* layer at which the shared fields have to be spelled a second time.
|
|
76
|
-
*/
|
|
77
|
-
export declare const modelListResponseSchema: z.ZodObject<{
|
|
78
|
-
object: z.ZodLiteral<"list">;
|
|
79
|
-
data: z.ZodReadonly<z.ZodArray<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>>;
|
|
80
|
-
has_more: z.ZodBoolean;
|
|
81
|
-
next_cursor: z.ZodNullable<z.ZodString>;
|
|
82
|
-
model: z.ZodString;
|
|
83
|
-
stamp: z.ZodNumber;
|
|
84
|
-
}, z.core.$strip>;
|
|
85
|
-
export type ModelListResponse = z.infer<typeof modelListResponseSchema>;
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* What the model read routes answer with — `GET /v1/models/{model}/{id}` and
|
|
3
|
-
* `GET /v1/models/{model}`.
|
|
4
|
-
*
|
|
5
|
-
* `data` is `unknown` here on purpose. The transport that reads these responses
|
|
6
|
-
* is schema-agnostic: it moves rows for whatever schema the caller declared, so
|
|
7
|
-
* it validates the envelope around a row and leaves the row itself to the typed
|
|
8
|
-
* surface above it. Everything outside `data` — the watermark, the claims, the
|
|
9
|
-
* pagination — is protocol, and protocol is validated here.
|
|
10
|
-
*/
|
|
11
|
-
import { z } from 'zod';
|
|
12
|
-
import { modelClaimSchema } from '../coordination/schema.js';
|
|
13
|
-
import { listEnvelopeSchema } from './listEnvelope.js';
|
|
14
|
-
/**
|
|
15
|
-
* `GET /v1/models/{model}/{id}`.
|
|
16
|
-
*
|
|
17
|
-
* `stamp` is the row's watermark: the log position the read reflects. A write
|
|
18
|
-
* that guards on this premise (`readAt`) is rejected if the row moved on in
|
|
19
|
-
* between, which is what makes a read→decide→write sequence safe without a
|
|
20
|
-
* lock. A missing row answers 404, so `data` is always present here.
|
|
21
|
-
*/
|
|
22
|
-
export const modelReadResponseSchema = z.object({
|
|
23
|
-
object: z.literal('model'),
|
|
24
|
-
model: z.string(),
|
|
25
|
-
id: z.string(),
|
|
26
|
-
data: z.unknown(),
|
|
27
|
-
stamp: z.number(),
|
|
28
|
-
/** Who holds this row right now — empty when no claim store is configured. */
|
|
29
|
-
claims: z.array(modelClaimSchema).readonly(),
|
|
30
|
-
});
|
|
31
|
-
/**
|
|
32
|
-
* `GET /v1/models/{model}` — the list envelope, with the two fields the model
|
|
33
|
-
* routes add to it: the model's name and the org-wide watermark the page was
|
|
34
|
-
* read at.
|
|
35
|
-
*
|
|
36
|
-
* The envelope is derived, not restated. A schema-agnostic row is `z.unknown()`,
|
|
37
|
-
* which the generic helper accepts like any other item schema, so there is no
|
|
38
|
-
* layer at which the shared fields have to be spelled a second time.
|
|
39
|
-
*/
|
|
40
|
-
export const modelListResponseSchema = listEnvelopeSchema(z.unknown()).extend({
|
|
41
|
-
model: z.string(),
|
|
42
|
-
stamp: z.number(),
|
|
43
|
-
});
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The timing constants both sides of the protocol must agree on: the ping
|
|
3
|
-
* cadence and the lease window derived from it. Defining them here once keeps
|
|
4
|
-
* the client and the server from skewing apart — a change to the ping interval
|
|
5
|
-
* that did not also move the lease window would make claim expiry and presence
|
|
6
|
-
* timeouts disagree between the two.
|
|
7
|
-
*
|
|
8
|
-
* {@link PING_INTERVAL_MS} is how often the connection pings to prove it is
|
|
9
|
-
* alive. {@link LEASE_TTL_MS} is how long a claim or presence entry stays valid
|
|
10
|
-
* without a renewing ping. On the client, these set the heartbeat cadence and
|
|
11
|
-
* the fallback expiry for a claim taken without an explicit lease. On the
|
|
12
|
-
* server, they set the keepalive interval, the lease granted per keepalive, and
|
|
13
|
-
* the presence-entry lifetime, so a silently disconnected client drops off the
|
|
14
|
-
* roster within one lease window.
|
|
15
|
-
*
|
|
16
|
-
* The lease is three ping intervals long and is renewed on every ping, so a
|
|
17
|
-
* live holder always has at least two intervals of runway and a silent one
|
|
18
|
-
* lapses about two missed pings after it stops renewing. The window measures
|
|
19
|
-
* liveness, not how long a task may run: widening the lease without also
|
|
20
|
-
* widening the ping makes holders flap, and neither value should be redefined
|
|
21
|
-
* anywhere else.
|
|
22
|
-
*/
|
|
23
|
-
export declare const PING_INTERVAL_MS = 30000;
|
|
24
|
-
export declare const LEASE_TTL_MS: number;
|
|
25
|
-
/**
|
|
26
|
-
* The WebSocket subprotocols that carry the bearer credential out of the URL.
|
|
27
|
-
*
|
|
28
|
-
* A browser cannot set an `Authorization` header on a WebSocket, so the client
|
|
29
|
-
* offers the token as a `Sec-WebSocket-Protocol` value — `ablo.bearer.<token>` —
|
|
30
|
-
* alongside the real `ablo.sync.v1` protocol the server selects. This keeps the
|
|
31
|
-
* credential out of the query string, which access logs, proxies, and browser
|
|
32
|
-
* history would otherwise capture. The server reads the token from the
|
|
33
|
-
* subprotocol and echoes back only `ablo.sync.v1`, never the token-bearing
|
|
34
|
-
* value. Both the client and the server import these constants, so the
|
|
35
|
-
* handshake format cannot drift.
|
|
36
|
-
*/
|
|
37
|
-
export declare const WS_BEARER_SUBPROTOCOL_PREFIX = "ablo.bearer.";
|
|
38
|
-
export declare const WS_SYNC_SUBPROTOCOL = "ablo.sync.v1";
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The timing constants both sides of the protocol must agree on: the ping
|
|
3
|
-
* cadence and the lease window derived from it. Defining them here once keeps
|
|
4
|
-
* the client and the server from skewing apart — a change to the ping interval
|
|
5
|
-
* that did not also move the lease window would make claim expiry and presence
|
|
6
|
-
* timeouts disagree between the two.
|
|
7
|
-
*
|
|
8
|
-
* {@link PING_INTERVAL_MS} is how often the connection pings to prove it is
|
|
9
|
-
* alive. {@link LEASE_TTL_MS} is how long a claim or presence entry stays valid
|
|
10
|
-
* without a renewing ping. On the client, these set the heartbeat cadence and
|
|
11
|
-
* the fallback expiry for a claim taken without an explicit lease. On the
|
|
12
|
-
* server, they set the keepalive interval, the lease granted per keepalive, and
|
|
13
|
-
* the presence-entry lifetime, so a silently disconnected client drops off the
|
|
14
|
-
* roster within one lease window.
|
|
15
|
-
*
|
|
16
|
-
* The lease is three ping intervals long and is renewed on every ping, so a
|
|
17
|
-
* live holder always has at least two intervals of runway and a silent one
|
|
18
|
-
* lapses about two missed pings after it stops renewing. The window measures
|
|
19
|
-
* liveness, not how long a task may run: widening the lease without also
|
|
20
|
-
* widening the ping makes holders flap, and neither value should be redefined
|
|
21
|
-
* anywhere else.
|
|
22
|
-
*/
|
|
23
|
-
export const PING_INTERVAL_MS = 30_000;
|
|
24
|
-
export const LEASE_TTL_MS = 3 * PING_INTERVAL_MS;
|
|
25
|
-
/**
|
|
26
|
-
* The WebSocket subprotocols that carry the bearer credential out of the URL.
|
|
27
|
-
*
|
|
28
|
-
* A browser cannot set an `Authorization` header on a WebSocket, so the client
|
|
29
|
-
* offers the token as a `Sec-WebSocket-Protocol` value — `ablo.bearer.<token>` —
|
|
30
|
-
* alongside the real `ablo.sync.v1` protocol the server selects. This keeps the
|
|
31
|
-
* credential out of the query string, which access logs, proxies, and browser
|
|
32
|
-
* history would otherwise capture. The server reads the token from the
|
|
33
|
-
* subprotocol and echoes back only `ablo.sync.v1`, never the token-bearing
|
|
34
|
-
* value. Both the client and the server import these constants, so the
|
|
35
|
-
* handshake format cannot drift.
|
|
36
|
-
*/
|
|
37
|
-
export const WS_BEARER_SUBPROTOCOL_PREFIX = 'ablo.bearer.';
|
|
38
|
-
export const WS_SYNC_SUBPROTOCOL = 'ablo.sync.v1';
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The sync protocol version — a single integer, increasing over time, that
|
|
3
|
-
* covers everything the client and server must agree on to talk to each other:
|
|
4
|
-
* the WebSocket frame shapes, the HTTP request and response envelopes, and the
|
|
5
|
-
* delta encodings a client replays. It is separate from the advisory
|
|
6
|
-
* app-schema hash, which diagnoses data-model drift; this version selects a
|
|
7
|
-
* concrete transport codec.
|
|
8
|
-
*
|
|
9
|
-
* Deploy ordering: the server is deployed first. It accepts every version in
|
|
10
|
-
* {@link SUPPORTED_PROTOCOL_VERSIONS}, and a client is never expected to connect
|
|
11
|
-
* to a server older than itself. If that does happen — for example a partial
|
|
12
|
-
* server rollback — {@link protocolVersionProblem} reports it as `too_new` so
|
|
13
|
-
* the mismatch is visible rather than undefined.
|
|
14
|
-
*
|
|
15
|
-
* To change the protocol:
|
|
16
|
-
* 1. Make the change backward-tolerant where you can. The server ignores
|
|
17
|
-
* unknown payload keys, so an additive field usually needs no version bump.
|
|
18
|
-
* 2. For a breaking change, bump {@link PROTOCOL_VERSION}, add its codec to
|
|
19
|
-
* {@link SUPPORTED_PROTOCOL_VERSIONS}, and add a changelog entry below.
|
|
20
|
-
* 3. Keep {@link MIN_SUPPORTED_PROTOCOL_VERSION} low enough to cover every
|
|
21
|
-
* client still in use; raise it only after a deprecation window.
|
|
22
|
-
* 4. The protocol contract tests fail on a version without a codec and on any
|
|
23
|
-
* unreviewed bump — update them in the same change, deliberately.
|
|
24
|
-
*
|
|
25
|
-
* Changelog
|
|
26
|
-
* v1 (2026-07-03) — the protocol as of this field's introduction: the
|
|
27
|
-
* sync-request frame (`cursor`, `lastSyncId`, `capabilities`, optional
|
|
28
|
-
* `protocolVersion`), the commit, claim, release, ack, and
|
|
29
|
-
* presence-update frames, the bootstrap and delta batches, and the HTTP
|
|
30
|
-
* error and list envelopes. A client that predates this field sends no
|
|
31
|
-
* `protocolVersion` and is treated as v1, since introducing the field
|
|
32
|
-
* changed no behavior.
|
|
33
|
-
*/
|
|
34
|
-
export declare const PROTOCOL_VERSION = 1;
|
|
35
|
-
/**
|
|
36
|
-
* The oldest client protocol version this build still serves. Raising it cuts
|
|
37
|
-
* off clients that have not upgraded, so do it only after a deprecation window
|
|
38
|
-
* and with a changelog entry.
|
|
39
|
-
*/
|
|
40
|
-
export declare const MIN_SUPPORTED_PROTOCOL_VERSION = 1;
|
|
41
|
-
/** The version used by clients from before the version field existed. */
|
|
42
|
-
export declare const DEFAULT_PROTOCOL_VERSION = 1;
|
|
43
|
-
/**
|
|
44
|
-
* Every wire version this build can actually decode. This is intentionally an
|
|
45
|
-
* explicit manifest rather than a computed numeric range: a version is not
|
|
46
|
-
* supported merely because its number falls between two constants. Server
|
|
47
|
-
* codec registries use {@link SupportedProtocolVersion} as their key type, so
|
|
48
|
-
* adding a version here makes a missing decoder a compile error.
|
|
49
|
-
*/
|
|
50
|
-
export declare const SUPPORTED_PROTOCOL_VERSIONS: readonly [1];
|
|
51
|
-
export type SupportedProtocolVersion = (typeof SUPPORTED_PROTOCOL_VERSIONS)[number];
|
|
52
|
-
export type ProtocolVersionProblem = 'too_old' | 'too_new' | 'codec_missing';
|
|
53
|
-
/**
|
|
54
|
-
* The WebSocket close code the server sends to reject a protocol-version
|
|
55
|
-
* mismatch. It sits alongside the other application close codes (4001 for a
|
|
56
|
-
* credential problem), and its reason string is the
|
|
57
|
-
* error code `protocol_version_unsupported`. A client should treat this close
|
|
58
|
-
* as terminal: reconnecting cannot heal a version mismatch, but upgrading the
|
|
59
|
-
* client or rolling the server forward can.
|
|
60
|
-
*/
|
|
61
|
-
export declare const WS_CLOSE_PROTOCOL_VERSION = 4010;
|
|
62
|
-
/**
|
|
63
|
-
* Classifies a peer's announced protocol version against what this build
|
|
64
|
-
* supports, returning `'too_old'`, `'too_new'`, or `null` when the versions are
|
|
65
|
-
* compatible. An `undefined` version — a client from before versioning existed
|
|
66
|
-
* — counts as v1. A non-integer value is treated as `'too_old'` so the check
|
|
67
|
-
* fails closed and visibly.
|
|
68
|
-
*/
|
|
69
|
-
export declare function protocolVersionProblem(announced: number | undefined): ProtocolVersionProblem | null;
|
|
70
|
-
/** Resolve an announced value to a version that has a concrete codec. */
|
|
71
|
-
export declare function resolveProtocolVersion(announced: number | undefined): SupportedProtocolVersion | null;
|
|
72
|
-
/** The HTTP request header a client uses to announce its protocol version. */
|
|
73
|
-
export declare const PROTOCOL_VERSION_HEADER = "Ablo-Protocol-Version";
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The sync protocol version — a single integer, increasing over time, that
|
|
3
|
-
* covers everything the client and server must agree on to talk to each other:
|
|
4
|
-
* the WebSocket frame shapes, the HTTP request and response envelopes, and the
|
|
5
|
-
* delta encodings a client replays. It is separate from the advisory
|
|
6
|
-
* app-schema hash, which diagnoses data-model drift; this version selects a
|
|
7
|
-
* concrete transport codec.
|
|
8
|
-
*
|
|
9
|
-
* Deploy ordering: the server is deployed first. It accepts every version in
|
|
10
|
-
* {@link SUPPORTED_PROTOCOL_VERSIONS}, and a client is never expected to connect
|
|
11
|
-
* to a server older than itself. If that does happen — for example a partial
|
|
12
|
-
* server rollback — {@link protocolVersionProblem} reports it as `too_new` so
|
|
13
|
-
* the mismatch is visible rather than undefined.
|
|
14
|
-
*
|
|
15
|
-
* To change the protocol:
|
|
16
|
-
* 1. Make the change backward-tolerant where you can. The server ignores
|
|
17
|
-
* unknown payload keys, so an additive field usually needs no version bump.
|
|
18
|
-
* 2. For a breaking change, bump {@link PROTOCOL_VERSION}, add its codec to
|
|
19
|
-
* {@link SUPPORTED_PROTOCOL_VERSIONS}, and add a changelog entry below.
|
|
20
|
-
* 3. Keep {@link MIN_SUPPORTED_PROTOCOL_VERSION} low enough to cover every
|
|
21
|
-
* client still in use; raise it only after a deprecation window.
|
|
22
|
-
* 4. The protocol contract tests fail on a version without a codec and on any
|
|
23
|
-
* unreviewed bump — update them in the same change, deliberately.
|
|
24
|
-
*
|
|
25
|
-
* Changelog
|
|
26
|
-
* v1 (2026-07-03) — the protocol as of this field's introduction: the
|
|
27
|
-
* sync-request frame (`cursor`, `lastSyncId`, `capabilities`, optional
|
|
28
|
-
* `protocolVersion`), the commit, claim, release, ack, and
|
|
29
|
-
* presence-update frames, the bootstrap and delta batches, and the HTTP
|
|
30
|
-
* error and list envelopes. A client that predates this field sends no
|
|
31
|
-
* `protocolVersion` and is treated as v1, since introducing the field
|
|
32
|
-
* changed no behavior.
|
|
33
|
-
*/
|
|
34
|
-
export const PROTOCOL_VERSION = 1;
|
|
35
|
-
/**
|
|
36
|
-
* The oldest client protocol version this build still serves. Raising it cuts
|
|
37
|
-
* off clients that have not upgraded, so do it only after a deprecation window
|
|
38
|
-
* and with a changelog entry.
|
|
39
|
-
*/
|
|
40
|
-
export const MIN_SUPPORTED_PROTOCOL_VERSION = 1;
|
|
41
|
-
/** The version used by clients from before the version field existed. */
|
|
42
|
-
export const DEFAULT_PROTOCOL_VERSION = 1;
|
|
43
|
-
/**
|
|
44
|
-
* Every wire version this build can actually decode. This is intentionally an
|
|
45
|
-
* explicit manifest rather than a computed numeric range: a version is not
|
|
46
|
-
* supported merely because its number falls between two constants. Server
|
|
47
|
-
* codec registries use {@link SupportedProtocolVersion} as their key type, so
|
|
48
|
-
* adding a version here makes a missing decoder a compile error.
|
|
49
|
-
*/
|
|
50
|
-
export const SUPPORTED_PROTOCOL_VERSIONS = [1];
|
|
51
|
-
/**
|
|
52
|
-
* The WebSocket close code the server sends to reject a protocol-version
|
|
53
|
-
* mismatch. It sits alongside the other application close codes (4001 for a
|
|
54
|
-
* credential problem), and its reason string is the
|
|
55
|
-
* error code `protocol_version_unsupported`. A client should treat this close
|
|
56
|
-
* as terminal: reconnecting cannot heal a version mismatch, but upgrading the
|
|
57
|
-
* client or rolling the server forward can.
|
|
58
|
-
*/
|
|
59
|
-
export const WS_CLOSE_PROTOCOL_VERSION = 4010;
|
|
60
|
-
/**
|
|
61
|
-
* Classifies a peer's announced protocol version against what this build
|
|
62
|
-
* supports, returning `'too_old'`, `'too_new'`, or `null` when the versions are
|
|
63
|
-
* compatible. An `undefined` version — a client from before versioning existed
|
|
64
|
-
* — counts as v1. A non-integer value is treated as `'too_old'` so the check
|
|
65
|
-
* fails closed and visibly.
|
|
66
|
-
*/
|
|
67
|
-
export function protocolVersionProblem(announced) {
|
|
68
|
-
const v = announced ?? DEFAULT_PROTOCOL_VERSION;
|
|
69
|
-
if (!Number.isInteger(v) || v < MIN_SUPPORTED_PROTOCOL_VERSION)
|
|
70
|
-
return 'too_old';
|
|
71
|
-
if (v > PROTOCOL_VERSION)
|
|
72
|
-
return 'too_new';
|
|
73
|
-
return SUPPORTED_PROTOCOL_VERSIONS.some((candidate) => candidate === v)
|
|
74
|
-
? null
|
|
75
|
-
: 'codec_missing';
|
|
76
|
-
}
|
|
77
|
-
/** Resolve an announced value to a version that has a concrete codec. */
|
|
78
|
-
export function resolveProtocolVersion(announced) {
|
|
79
|
-
const version = announced ?? DEFAULT_PROTOCOL_VERSION;
|
|
80
|
-
return SUPPORTED_PROTOCOL_VERSIONS.find((candidate) => candidate === version) ?? null;
|
|
81
|
-
}
|
|
82
|
-
/** The HTTP request header a client uses to announce its protocol version. */
|
|
83
|
-
export const PROTOCOL_VERSION_HEADER = 'Ablo-Protocol-Version';
|