@abloatai/ablo 0.34.1 → 0.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +2 -1
- package/CHANGELOG.md +758 -5
- package/README.md +56 -502
- package/bin/ablo.cjs +39 -0
- package/dist/BaseSyncedStore.d.ts +176 -48
- package/dist/BaseSyncedStore.js +346 -214
- package/dist/Database.d.ts +17 -44
- package/dist/Database.js +96 -79
- package/dist/InstanceCache.d.ts +31 -6
- package/dist/InstanceCache.js +65 -30
- package/dist/LazyReferenceCollection.d.ts +3 -3
- package/dist/LazyReferenceCollection.js +4 -4
- package/dist/Model.d.ts +23 -13
- package/dist/Model.js +27 -17
- package/dist/ModelRegistry.d.ts +8 -4
- package/dist/ModelRegistry.js +20 -18
- package/dist/NetworkMonitor.d.ts +3 -1
- package/dist/NetworkMonitor.js +7 -5
- package/dist/{SyncEngineContext.d.ts → RuntimeContext.d.ts} +20 -13
- package/dist/{SyncEngineContext.js → RuntimeContext.js} +11 -12
- package/dist/SyncClient.d.ts +47 -47
- package/dist/SyncClient.js +215 -156
- package/dist/ai-sdk/coordinatedTool.d.ts +2 -2
- package/dist/ai-sdk/coordinatedTool.js +1 -1
- package/dist/ai-sdk/coordinationContext.d.ts +2 -2
- package/dist/ai-sdk/coordinationContext.js +1 -1
- package/dist/ai-sdk/wrap.d.ts +3 -3
- package/dist/ai-sdk/wrap.js +2 -2
- package/dist/auth/index.d.ts +1 -156
- package/dist/auth/index.js +8 -301
- package/dist/client/Ablo.d.ts +42 -287
- package/dist/client/Ablo.js +129 -963
- package/dist/client/abloClient.d.ts +309 -0
- package/dist/client/abloClient.js +13 -0
- package/dist/client/clientPrelude.d.ts +52 -0
- package/dist/client/clientPrelude.js +60 -0
- package/dist/client/consoleLogger.d.ts +2 -2
- package/dist/client/coreClient.d.ts +60 -0
- package/dist/client/coreClient.js +118 -0
- package/dist/client/createInternalComponents.d.ts +8 -4
- package/dist/client/createInternalComponents.js +17 -10
- package/dist/client/createModelProxy.d.ts +98 -373
- package/dist/client/createModelProxy.js +233 -139
- package/dist/client/humans.d.ts +69 -0
- package/dist/client/humans.js +78 -0
- package/dist/client/modelRegistration.d.ts +1 -1
- package/dist/client/modelRegistration.js +9 -9
- package/dist/client/options.d.ts +73 -17
- package/dist/client/reactiveEngine.d.ts +53 -0
- package/dist/client/reactiveEngine.js +688 -0
- package/dist/client/resourceTypes.d.ts +9 -250
- package/dist/client/resourceTypes.js +8 -5
- package/dist/client/schemaConfig.d.ts +4 -4
- package/dist/client/schemaConfig.js +6 -2
- package/dist/client/storeCluster.d.ts +47 -0
- package/dist/client/storeCluster.js +118 -0
- package/dist/client/storeLifecycle.d.ts +61 -0
- package/dist/client/storeLifecycle.js +231 -0
- package/dist/client/validateAbloOptions.d.ts +3 -2
- package/dist/client/validateAbloOptions.js +1 -1
- package/dist/client/wsMutationExecutor.d.ts +3 -3
- package/dist/client/wsMutationExecutor.js +3 -3
- package/dist/context.d.ts +22 -9
- package/dist/context.js +33 -9
- package/dist/coordination/ClaimLog.d.ts +26 -0
- package/dist/coordination/ClaimLog.js +32 -0
- package/dist/coordination/index.d.ts +1 -15
- package/dist/coordination/index.js +8 -31
- package/dist/core/index.d.ts +3 -3
- package/dist/core/index.js +2 -2
- package/dist/docs/catalog.d.ts +72 -0
- package/dist/docs/catalog.js +230 -0
- package/dist/docs/index.d.ts +10 -0
- package/dist/docs/index.js +10 -0
- package/dist/environment.d.ts +1 -40
- package/dist/environment.js +8 -37
- package/dist/index.d.ts +44 -36
- package/dist/index.js +30 -22
- package/dist/interfaces/index.d.ts +44 -134
- package/dist/keys/index.d.ts +1 -77
- package/dist/keys/index.js +8 -190
- package/dist/mutators/{RecordingTransaction.d.ts → RecordingMutation.d.ts} +4 -4
- package/dist/mutators/{RecordingTransaction.js → RecordingMutation.js} +2 -2
- package/dist/mutators/Transaction.d.ts +1 -1
- package/dist/mutators/Transaction.js +1 -1
- package/dist/mutators/UndoManager.d.ts +6 -6
- package/dist/mutators/UndoManager.js +5 -5
- package/dist/mutators/defineMutators.d.ts +3 -3
- package/dist/mutators/defineMutators.js +1 -1
- package/dist/mutators/inverseOp.js +2 -2
- package/dist/mutators/mutateActions.d.ts +3 -3
- package/dist/mutators/mutateActions.js +1 -1
- package/dist/mutators/readerActions.d.ts +1 -1
- package/dist/mutators/undoApply.d.ts +1 -1
- package/dist/mutators/undoApply.js +1 -1
- package/dist/policy/index.d.ts +2 -2
- package/dist/policy/index.js +1 -1
- package/dist/query/client.d.ts +5 -2
- package/dist/query/client.js +10 -9
- package/dist/query/types.d.ts +6 -41
- package/dist/query/types.js +2 -2
- package/dist/react/AbloProvider.d.ts +18 -8
- package/dist/react/AbloProvider.js +10 -9
- package/dist/react/context.d.ts +3 -3
- package/dist/react/context.js +1 -1
- package/dist/react/createAbloReact.d.ts +56 -0
- package/dist/react/createAbloReact.js +51 -0
- package/dist/react/index.d.ts +6 -5
- package/dist/react/index.js +6 -3
- package/dist/react/internalContext.d.ts +1 -1
- package/dist/react/useAblo.d.ts +12 -5
- package/dist/react/useAblo.js +26 -8
- package/dist/react/useCurrentUserId.js +1 -1
- package/dist/react/useErrorListener.js +1 -1
- package/dist/react/useMutationFailureListener.d.ts +2 -2
- package/dist/react/useMutationFailureListener.js +1 -1
- package/dist/react/useMutators.d.ts +3 -3
- package/dist/react/useMutators.js +3 -3
- package/dist/react/useUndoScope.d.ts +5 -5
- package/dist/react/useUndoScope.js +1 -1
- package/dist/schema/coordination.d.ts +69 -10
- package/dist/schema/coordination.js +90 -9
- package/dist/schema/ddl.js +2 -2
- package/dist/schema/diff.d.ts +1 -1
- package/dist/schema/generate.js +1 -1
- package/dist/schema/index.d.ts +11 -10
- package/dist/schema/index.js +22 -18
- package/dist/schema/queries.d.ts +27 -27
- package/dist/schema/queries.js +23 -23
- package/dist/schema/select.d.ts +3 -3
- package/dist/schema/select.js +6 -3
- package/dist/schema/serialize.d.ts +15 -6
- package/dist/schema/serialize.js +20 -3
- package/dist/schema/sugar.d.ts +6 -7
- package/dist/schema/sugar.js +9 -12
- package/dist/schema/syncDeltaRow.d.ts +4 -152
- package/dist/schema/syncDeltaRow.js +4 -105
- package/dist/server/adapter.d.ts +18 -1
- package/dist/server/commit.d.ts +10 -16
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/readConfig.d.ts +1 -1
- package/dist/source/adapter.d.ts +7 -5
- package/dist/source/adapter.js +7 -5
- package/dist/source/adapters/drizzle.d.ts +1 -1
- package/dist/source/adapters/drizzle.js +2 -2
- package/dist/source/adapters/kysely.d.ts +1 -1
- package/dist/source/adapters/kysely.js +1 -1
- package/dist/source/adapters/kyselyMutationCore.d.ts +1 -1
- package/dist/source/adapters/kyselyMutationCore.js +2 -2
- package/dist/source/adapters/memory.js +1 -1
- package/dist/source/adapters/prisma.d.ts +8 -3
- package/dist/source/adapters/prisma.js +1 -1
- package/dist/source/connector.js +1 -1
- package/dist/source/connectorProtocol.d.ts +2 -8
- package/dist/source/connectorProtocol.js +3 -2
- package/dist/source/contract.d.ts +29 -17
- package/dist/source/contract.js +27 -22
- package/dist/source/factory.d.ts +1 -1
- package/dist/source/idempotency.js +2 -2
- package/dist/source/index.d.ts +1 -0
- package/dist/source/index.js +3 -0
- package/dist/source/next.d.ts +1 -1
- package/dist/source/signing.d.ts +9 -2
- package/dist/source/signing.js +4 -1
- package/dist/source/types.d.ts +6 -4
- package/dist/source/types.js +1 -1
- package/dist/{core/storeContract.d.ts → storeContract.d.ts} +6 -6
- package/dist/{core → stores}/DatabaseManager.d.ts +3 -1
- package/dist/{core → stores}/DatabaseManager.js +14 -13
- package/dist/stores/ObjectStore.d.ts +1 -1
- package/dist/{core → stores}/StoreManager.d.ts +9 -26
- package/dist/{core → stores}/StoreManager.js +29 -77
- package/dist/stores/SyncActionStore.d.ts +4 -2
- package/dist/stores/SyncActionStore.js +11 -17
- package/dist/stores/syncAction.d.ts +26 -0
- package/dist/stores/syncAction.js +16 -0
- package/dist/surface.d.ts +3 -3
- package/dist/surface.js +6 -4
- package/dist/sync/BootstrapFetcher.d.ts +127 -6
- package/dist/sync/BootstrapFetcher.js +511 -83
- package/dist/sync/ConnectionManager.d.ts +6 -198
- package/dist/sync/ConnectionManager.js +6 -677
- package/dist/sync/OnDemandLoader.d.ts +5 -2
- package/dist/sync/OnDemandLoader.js +61 -21
- package/dist/sync/SubscriptionManager.d.ts +13 -2
- package/dist/sync/SubscriptionManager.js +23 -5
- package/dist/sync/SyncWebSocket.d.ts +27 -510
- package/dist/sync/SyncWebSocket.js +76 -954
- package/dist/sync/awaitClaimGrant.d.ts +4 -44
- package/dist/sync/awaitClaimGrant.js +4 -109
- package/dist/sync/bootstrapApply.d.ts +3 -0
- package/dist/sync/bootstrapApply.js +2 -2
- package/dist/sync/commitFrames.d.ts +6 -40
- package/dist/sync/commitFrames.js +6 -97
- package/dist/sync/contextPorts.d.ts +18 -0
- package/dist/sync/contextPorts.js +31 -0
- package/dist/sync/createClaimStream.d.ts +5 -49
- package/dist/sync/createClaimStream.js +5 -469
- package/dist/sync/createPresenceStream.d.ts +26 -4
- package/dist/sync/createPresenceStream.js +28 -20
- package/dist/sync/createSnapshot.d.ts +2 -2
- package/dist/sync/createSnapshot.js +1 -1
- package/dist/sync/credentialLifecycle.d.ts +5 -173
- package/dist/sync/credentialLifecycle.js +5 -320
- package/dist/sync/deltaPipeline.d.ts +13 -12
- package/dist/sync/deltaPipeline.js +21 -4
- package/dist/sync/groupChange.d.ts +3 -0
- package/dist/sync/groupChange.js +16 -14
- package/dist/sync/participants.d.ts +24 -6
- package/dist/sync/participants.js +32 -23
- package/dist/sync/schemaDrift.d.ts +55 -0
- package/dist/sync/schemaDrift.js +53 -0
- package/dist/sync/schemas.d.ts +23 -33
- package/dist/sync/schemas.js +29 -20
- package/dist/sync/syncPlan.d.ts +3 -3
- package/dist/sync/wsFrameHandlers.d.ts +6 -114
- package/dist/sync/wsFrameHandlers.js +6 -392
- package/dist/syncLog/contract.d.ts +20 -0
- package/dist/syncLog/contract.js +19 -0
- package/dist/syncLog/index.d.ts +1 -0
- package/dist/syncLog/index.js +1 -0
- package/dist/transaction/ablo.d.ts +88 -0
- package/dist/transaction/ablo.js +33 -0
- package/dist/{client/auth.d.ts → transaction/auth/apiKey.d.ts} +43 -8
- package/dist/{client/auth.js → transaction/auth/apiKey.js} +19 -0
- package/dist/transaction/auth/bootstrapScope.d.ts +15 -0
- package/dist/transaction/auth/bootstrapScope.js +1 -0
- package/dist/transaction/auth/capability.d.ts +212 -0
- package/dist/transaction/auth/capability.js +224 -0
- package/dist/{auth → transaction/auth}/credentialSource.d.ts +8 -1
- package/dist/{client → transaction/auth}/identity.d.ts +8 -7
- package/dist/{client → transaction/auth}/identity.js +1 -1
- package/dist/transaction/auth/index.d.ts +162 -0
- package/dist/transaction/auth/index.js +304 -0
- package/dist/{auth → transaction/auth}/schemas.d.ts +1 -1
- package/dist/{auth → transaction/auth}/schemas.js +13 -13
- package/dist/{client → transaction/auth}/sessionMint.d.ts +8 -8
- package/dist/{client → transaction/auth}/sessionMint.js +4 -7
- package/dist/transaction/coordination/awaitClaimGrant.d.ts +56 -0
- package/dist/transaction/coordination/awaitClaimGrant.js +124 -0
- package/dist/{client → transaction/coordination}/claimHeartbeatLoop.d.ts +34 -0
- package/dist/{client → transaction/coordination}/claimHeartbeatLoop.js +20 -0
- package/dist/transaction/coordination/claimMeta.d.ts +49 -0
- package/dist/transaction/coordination/claimMeta.js +52 -0
- package/dist/transaction/coordination/createClaimStream.d.ts +64 -0
- package/dist/transaction/coordination/createClaimStream.js +475 -0
- package/dist/transaction/coordination/events.d.ts +74 -0
- package/dist/transaction/coordination/events.js +7 -0
- package/dist/transaction/coordination/index.d.ts +19 -0
- package/dist/transaction/coordination/index.js +45 -0
- package/dist/transaction/coordination/locator.d.ts +104 -0
- package/dist/transaction/coordination/locator.js +102 -0
- package/dist/transaction/coordination/schema.d.ts +1536 -0
- package/dist/transaction/coordination/schema.js +1177 -0
- package/dist/transaction/coordination/targetConflict.d.ts +2 -0
- package/dist/transaction/coordination/targetConflict.js +107 -0
- package/dist/{coordination → transaction/coordination}/trace.d.ts +7 -18
- package/dist/{coordination → transaction/coordination}/trace.js +18 -25
- package/dist/transaction/durableWrites.d.ts +62 -0
- package/dist/{client → transaction}/durableWrites.js +28 -3
- package/dist/transaction/environment.d.ts +105 -0
- package/dist/transaction/environment.js +108 -0
- package/dist/{errorCodes.d.ts → transaction/errorCodes.d.ts} +12 -12
- package/dist/{errorCodes.js → transaction/errorCodes.js} +45 -18
- package/dist/{errors.d.ts → transaction/errors.d.ts} +37 -13
- package/dist/{errors.js → transaction/errors.js} +85 -16
- package/dist/transaction/footprint.d.ts +111 -0
- package/dist/transaction/footprint.js +0 -0
- package/dist/transaction/index.d.ts +20 -0
- package/dist/transaction/index.js +20 -0
- package/dist/transaction/keys/index.d.ts +87 -0
- package/dist/transaction/keys/index.js +207 -0
- package/dist/transaction/log/syncDeltaRow.d.ts +158 -0
- package/dist/transaction/log/syncDeltaRow.js +95 -0
- package/dist/{sync/syncPosition.d.ts → transaction/logPosition.d.ts} +22 -8
- package/dist/{sync/syncPosition.js → transaction/logPosition.js} +15 -6
- package/dist/transaction/logger.d.ts +16 -0
- package/dist/transaction/logger.js +7 -0
- package/dist/transaction/observability.d.ts +53 -0
- package/dist/transaction/observability.js +19 -0
- package/dist/transaction/plugin.d.ts +285 -0
- package/dist/transaction/plugin.js +106 -0
- package/dist/{policy → transaction/policy}/types.d.ts +3 -3
- package/dist/{policy → transaction/policy}/types.js +2 -0
- package/dist/transaction/resources/httpResources.d.ts +321 -0
- package/dist/transaction/resources/httpResources.js +7 -0
- package/dist/transaction/resources/modelOperations.d.ts +427 -0
- package/dist/transaction/resources/modelOperations.js +12 -0
- package/dist/transaction/resources/mutationOptions.d.ts +66 -0
- package/dist/transaction/resources/mutationOptions.js +9 -0
- package/dist/transaction/resources/where.d.ts +101 -0
- package/dist/transaction/resources/where.js +115 -0
- package/dist/{client → transaction/resources}/writeOptionsSchema.d.ts +2 -6
- package/dist/{client → transaction/resources}/writeOptionsSchema.js +9 -5
- package/dist/{schema → transaction/schema}/field.d.ts +17 -23
- package/dist/{schema → transaction/schema}/field.js +5 -5
- package/dist/transaction/schema/fieldRef.d.ts +38 -0
- package/dist/transaction/schema/fieldRef.js +11 -0
- package/dist/transaction/schema/loadStrategy.d.ts +45 -0
- package/dist/transaction/schema/loadStrategy.js +46 -0
- package/dist/{schema → transaction/schema}/model.d.ts +50 -35
- package/dist/{schema → transaction/schema}/model.js +30 -20
- package/dist/transaction/schema/openapi.d.ts +58 -0
- package/dist/transaction/schema/openapi.js +501 -0
- package/dist/{schema → transaction/schema}/relation.d.ts +21 -16
- package/dist/{schema → transaction/schema}/relation.js +7 -7
- package/dist/{schema → transaction/schema}/residency.d.ts +0 -9
- package/dist/{schema → transaction/schema}/residency.js +0 -5
- package/dist/{schema → transaction/schema}/roles.d.ts +5 -5
- package/dist/{schema → transaction/schema}/roles.js +5 -5
- package/dist/{schema → transaction/schema}/schema.d.ts +39 -10
- package/dist/{schema → transaction/schema}/schema.js +24 -3
- package/dist/{schema → transaction/schema}/tenancy.d.ts +1 -1
- package/dist/{schema → transaction/schema}/tenancy.js +7 -4
- package/dist/transaction/transactionLayer.d.ts +82 -0
- package/dist/transaction/transactionLayer.js +24 -0
- package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.d.ts +5 -6
- package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.js +9 -13
- package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.d.ts +9 -2
- package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.js +5 -9
- package/dist/{transactions/durableWriteStore.d.ts → transaction/transactions/settlement/pendingWrite.d.ts} +11 -37
- package/dist/transaction/transactions/settlement/pendingWrite.js +20 -0
- package/dist/transaction/transport/commitFrames.d.ts +90 -0
- package/dist/transaction/transport/commitFrames.js +134 -0
- package/dist/transaction/transport/connectionManager.d.ts +215 -0
- package/dist/transaction/transport/connectionManager.js +673 -0
- package/dist/transaction/transport/credentialLifecycle.d.ts +177 -0
- package/dist/transaction/transport/credentialLifecycle.js +324 -0
- package/dist/{sync → transaction/transport}/heartbeat.d.ts +3 -1
- package/dist/{sync → transaction/transport}/heartbeat.js +6 -4
- package/dist/transaction/transport/httpClient.d.ts +131 -0
- package/dist/{client → transaction/transport}/httpClient.js +6 -5
- package/dist/transaction/transport/httpOptions.d.ts +33 -0
- package/dist/transaction/transport/httpOptions.js +12 -0
- package/dist/{client → transaction/transport}/httpTransport.js +295 -97
- package/dist/{sync/NetworkProbe.d.ts → transaction/transport/networkProbe.d.ts} +7 -4
- package/dist/{sync/NetworkProbe.js → transaction/transport/networkProbe.js} +14 -13
- package/dist/transaction/transport/wsFrameHandlers.d.ts +128 -0
- package/dist/transaction/transport/wsFrameHandlers.js +429 -0
- package/dist/transaction/transport/wsTransport.d.ts +574 -0
- package/dist/transaction/transport/wsTransport.js +1023 -0
- package/dist/transaction/types/assertExact.d.ts +17 -0
- package/dist/transaction/types/assertExact.js +1 -0
- package/dist/{types → transaction/types}/global.d.ts +17 -2
- package/dist/{types → transaction/types}/global.js +2 -1
- package/dist/{types → transaction/types}/index.d.ts +14 -46
- package/dist/{types → transaction/types}/index.js +7 -16
- package/dist/{types → transaction/types}/streams.d.ts +73 -45
- package/dist/transaction/utils/duration.d.ts +50 -0
- package/dist/{utils → transaction/utils}/duration.js +32 -0
- package/dist/{utils → transaction/utils}/json.d.ts +18 -0
- package/dist/transaction/utils/json.js +276 -0
- package/dist/transaction/wire/accountResponses.d.ts +420 -0
- package/dist/transaction/wire/accountResponses.js +290 -0
- package/dist/transaction/wire/auth.d.ts +56 -0
- package/dist/transaction/wire/auth.js +63 -0
- package/dist/transaction/wire/claimEvent.d.ts +76 -0
- package/dist/transaction/wire/claimEvent.js +73 -0
- package/dist/transaction/wire/claims.d.ts +530 -0
- package/dist/transaction/wire/claims.js +327 -0
- package/dist/{wire → transaction/wire}/commit.d.ts +125 -193
- package/dist/{wire → transaction/wire}/commit.js +68 -47
- package/dist/{wire → transaction/wire}/delta.d.ts +66 -17
- package/dist/{wire → transaction/wire}/delta.js +37 -13
- package/dist/transaction/wire/errorEnvelope.d.ts +72 -0
- package/dist/{wire → transaction/wire}/errorEnvelope.js +36 -5
- package/dist/transaction/wire/feedCursor.d.ts +60 -0
- package/dist/transaction/wire/feedCursor.js +82 -0
- package/dist/transaction/wire/feedEvent.d.ts +204 -0
- package/dist/transaction/wire/feedEvent.js +65 -0
- package/dist/transaction/wire/frames.d.ts +194 -0
- package/dist/transaction/wire/frames.js +50 -0
- package/dist/transaction/wire/inboundFrames.d.ts +562 -0
- package/dist/transaction/wire/inboundFrames.js +116 -0
- package/dist/transaction/wire/index.d.ts +54 -0
- package/dist/transaction/wire/index.js +83 -0
- package/dist/{wire → transaction/wire}/listEnvelope.d.ts +13 -14
- package/dist/transaction/wire/listEnvelope.js +42 -0
- package/dist/transaction/wire/modelMutations.d.ts +31 -0
- package/dist/transaction/wire/modelMutations.js +52 -0
- package/dist/transaction/wire/modelResponses.d.ts +85 -0
- package/dist/transaction/wire/modelResponses.js +43 -0
- package/dist/transaction/wire/modelShape.d.ts +78 -0
- package/dist/transaction/wire/modelShape.js +74 -0
- package/dist/transactions/{TransactionQueue.d.ts → mutations/MutationQueue.d.ts} +85 -38
- package/dist/transactions/{TransactionQueue.js → mutations/MutationQueue.js} +141 -80
- package/dist/transactions/{TransactionStore.d.ts → mutations/MutationStore.d.ts} +8 -8
- package/dist/transactions/{TransactionStore.js → mutations/MutationStore.js} +2 -2
- package/dist/transactions/{coalesceRules.d.ts → mutations/coalesceRules.d.ts} +10 -10
- package/dist/transactions/{coalesceRules.js → mutations/coalesceRules.js} +1 -1
- package/dist/transactions/mutations/commitLatency.d.ts +52 -0
- package/dist/transactions/mutations/commitLatency.js +130 -0
- package/dist/transactions/{commitOutboxStore.d.ts → mutations/commitOutboxStore.d.ts} +1 -5
- package/dist/transactions/{commitOutboxStore.js → mutations/commitOutboxStore.js} +1 -1
- package/dist/transactions/{commitPayload.d.ts → mutations/commitPayload.d.ts} +18 -16
- package/dist/transactions/{commitPayload.js → mutations/commitPayload.js} +15 -15
- package/dist/transactions/{deltaConfirmation.d.ts → mutations/deltaConfirmation.d.ts} +15 -11
- package/dist/transactions/{deltaConfirmation.js → mutations/deltaConfirmation.js} +14 -12
- package/dist/transactions/mutations/durableWriteStore.d.ts +14 -0
- package/dist/transactions/mutations/durableWriteStore.js +12 -0
- package/dist/transactions/{optimisticApply.d.ts → mutations/optimisticApply.d.ts} +7 -7
- package/dist/transactions/{replayValidation.d.ts → mutations/replayValidation.d.ts} +4 -3
- package/dist/transactions/{replayValidation.js → mutations/replayValidation.js} +7 -5
- package/dist/utils/mobxSetup.d.ts +1 -1
- package/dist/utils/mobxSetup.js +5 -2
- package/dist/{core → views}/QueryView.d.ts +2 -2
- package/dist/{core → views}/QueryView.js +2 -2
- package/dist/{core → views}/ViewRegistry.d.ts +1 -1
- package/dist/{core/queryUtils.d.ts → views/incrementalView.d.ts} +6 -6
- package/dist/{core/queryUtils.js → views/incrementalView.js} +6 -6
- package/dist/webhooks/events.d.ts +2 -2
- package/dist/wire/index.d.ts +1 -34
- package/dist/wire/index.js +8 -49
- package/docs/agent-messaging.md +3 -3
- package/docs/agents.md +20 -13
- package/docs/api-keys.md +14 -10
- package/docs/api.md +27 -61
- package/docs/audit.md +6 -3
- package/docs/cli.md +41 -13
- package/docs/client-behavior.md +11 -9
- package/docs/concurrency-convention.md +49 -57
- package/docs/coordination.md +283 -121
- package/docs/data-sources.md +7 -5
- package/docs/debugging.md +39 -15
- package/docs/deployment.md +267 -0
- package/docs/examples/agent-human.md +49 -42
- package/docs/examples/ai-sdk-tool.md +69 -44
- package/docs/examples/existing-python-backend.md +8 -6
- package/docs/examples/nextjs.md +129 -47
- package/docs/examples/scoped-agent.md +46 -45
- package/docs/examples/server-agent.md +46 -26
- package/docs/groups.md +87 -30
- package/docs/guarantees.md +41 -12
- package/docs/how-it-works.md +38 -12
- package/docs/idempotency.md +126 -0
- package/docs/identity.md +77 -74
- package/docs/index.md +172 -86
- package/docs/integration-guide.md +31 -19
- package/docs/mcp.md +46 -21
- package/docs/migration.md +95 -18
- package/docs/operating-on-your-database.md +3 -1
- package/docs/projects.md +3 -1
- package/docs/quickstart.md +22 -5
- package/docs/react.md +31 -18
- package/docs/schema-contract.md +5 -3
- package/docs/session-settings.md +108 -0
- package/docs/sessions.md +4 -2
- package/docs/webhooks.md +12 -10
- package/llms.txt +48 -18
- package/package.json +21 -26
- package/dist/agent/Agent.d.ts +0 -366
- package/dist/agent/Agent.js +0 -514
- package/dist/agent/index.d.ts +0 -115
- package/dist/agent/index.js +0 -128
- package/dist/agent/session.d.ts +0 -93
- package/dist/agent/session.js +0 -149
- package/dist/agent/types.d.ts +0 -68
- package/dist/agent/types.js +0 -9
- package/dist/cli.cjs +0 -286329
- package/dist/client/durableWrites.d.ts +0 -21
- package/dist/client/httpClient.d.ts +0 -80
- package/dist/coordination/schema.d.ts +0 -722
- package/dist/coordination/schema.js +0 -578
- package/dist/schema/openapi.d.ts +0 -29
- package/dist/schema/openapi.js +0 -124
- package/dist/testing/fixtures/bootstrap.d.ts +0 -49
- package/dist/testing/fixtures/bootstrap.js +0 -59
- package/dist/testing/fixtures/deltas.d.ts +0 -83
- package/dist/testing/fixtures/deltas.js +0 -136
- package/dist/testing/fixtures/models.d.ts +0 -83
- package/dist/testing/fixtures/models.js +0 -272
- package/dist/testing/helpers/reactWrapper.d.ts +0 -69
- package/dist/testing/helpers/reactWrapper.js +0 -67
- package/dist/testing/helpers/syncEngineHarness.d.ts +0 -54
- package/dist/testing/helpers/syncEngineHarness.js +0 -73
- package/dist/testing/helpers/wait.d.ts +0 -30
- package/dist/testing/helpers/wait.js +0 -49
- package/dist/testing/index.d.ts +0 -23
- package/dist/testing/index.js +0 -33
- package/dist/testing/mocks/FakeDatabase.d.ts +0 -18
- package/dist/testing/mocks/FakeDatabase.js +0 -10
- package/dist/testing/mocks/MockMutationExecutor.d.ts +0 -87
- package/dist/testing/mocks/MockMutationExecutor.js +0 -192
- package/dist/testing/mocks/MockNetworkMonitor.d.ts +0 -20
- package/dist/testing/mocks/MockNetworkMonitor.js +0 -46
- package/dist/testing/mocks/MockSyncContext.d.ts +0 -51
- package/dist/testing/mocks/MockSyncContext.js +0 -71
- package/dist/testing/mocks/MockSyncStore.d.ts +0 -88
- package/dist/testing/mocks/MockSyncStore.js +0 -171
- package/dist/testing/mocks/MockWebSocket.d.ts +0 -71
- package/dist/testing/mocks/MockWebSocket.js +0 -118
- package/dist/transactions/durableWriteStore.js +0 -30
- package/dist/utils/duration.d.ts +0 -25
- package/dist/utils/json.js +0 -88
- package/dist/wire/errorEnvelope.d.ts +0 -55
- package/dist/wire/frames.d.ts +0 -197
- package/dist/wire/frames.js +0 -49
- package/dist/wire/listEnvelope.js +0 -18
- package/docs/interaction-model.md +0 -97
- /package/dist/{core → query}/QueryProcessor.d.ts +0 -0
- /package/dist/{core → query}/QueryProcessor.js +0 -0
- /package/dist/{core/storeContract.js → storeContract.js} +0 -0
- /package/dist/{core → stores}/openIDBWithTimeout.d.ts +0 -0
- /package/dist/{core → stores}/openIDBWithTimeout.js +0 -0
- /package/dist/{client → transaction/auth}/credentialEndpoint.d.ts +0 -0
- /package/dist/{client → transaction/auth}/credentialEndpoint.js +0 -0
- /package/dist/{auth → transaction/auth}/credentialPolicy.d.ts +0 -0
- /package/dist/{auth → transaction/auth}/credentialPolicy.js +0 -0
- /package/dist/{auth → transaction/auth}/credentialSource.js +0 -0
- /package/dist/{client → transaction/auth}/hostedEndpoints.d.ts +0 -0
- /package/dist/{client → transaction/auth}/hostedEndpoints.js +0 -0
- /package/dist/{client → transaction}/persistence.d.ts +0 -0
- /package/dist/{client → transaction}/persistence.js +0 -0
- /package/dist/{client → transaction/resources}/functionalUpdate.d.ts +0 -0
- /package/dist/{client → transaction/resources}/functionalUpdate.js +0 -0
- /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.d.ts +0 -0
- /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.js +0 -0
- /package/dist/{client → transaction/transport}/httpTransport.d.ts +0 -0
- /package/dist/{types → transaction/types}/modelData.d.ts +0 -0
- /package/dist/{types → transaction/types}/modelData.js +0 -0
- /package/dist/{types → transaction/types}/participant.d.ts +0 -0
- /package/dist/{types → transaction/types}/participant.js +0 -0
- /package/dist/{types → transaction/types}/streams.js +0 -0
- /package/dist/{utils → transaction/utils}/asyncIterator.d.ts +0 -0
- /package/dist/{utils → transaction/utils}/asyncIterator.js +0 -0
- /package/dist/{wire → transaction/wire}/bootstrapReason.d.ts +0 -0
- /package/dist/{wire → transaction/wire}/bootstrapReason.js +0 -0
- /package/dist/{wire → transaction/wire}/protocol.d.ts +0 -0
- /package/dist/{wire → transaction/wire}/protocol.js +0 -0
- /package/dist/{wire → transaction/wire}/protocolVersion.d.ts +0 -0
- /package/dist/{wire → transaction/wire}/protocolVersion.js +0 -0
- /package/dist/transactions/{UnconfirmedWrites.d.ts → mutations/UnconfirmedWrites.d.ts} +0 -0
- /package/dist/transactions/{UnconfirmedWrites.js → mutations/UnconfirmedWrites.js} +0 -0
- /package/dist/transactions/{optimisticApply.js → mutations/optimisticApply.js} +0 -0
- /package/dist/{core → views}/ViewRegistry.js +0 -0
|
@@ -0,0 +1,54 @@
|
|
|
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, logQuerySchema, } from './feedEvent.js';
|
|
25
|
+
export type { FeedEvent, LogListResponse, LogQuery } 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 { DEFAULT_CLAIM_TTL_MS, claimTtlSchema, claimTtlMs, claimTargetSchema, claimRequestSchema, claimHeartbeatRequestSchema, listQuerySchema, claimListQuerySchema, claimStateSchema, claimAcquiredResponseSchema, claimQueuedResponseSchema, claimAcquireResponseSchema, claimHeartbeatReplySchema, claimHeartbeatBatchReplySchema, claimListResponseSchema, claimReorderRequestSchema, claimReorderReplySchema, claimReleaseReplySchema, } from './claims.js';
|
|
42
|
+
export type { ClaimTargetBody, ClaimRequest, ClaimHeartbeatRequest, ListQuery, ClaimListQuery, ClaimState, ClaimAcquiredResponse, ClaimQueuedResponse, ClaimAcquireResponse, ClaimHeartbeatReply, ClaimHeartbeatBatchReply, ClaimListResponse, ClaimReorderRequest, ClaimReorderReply, ClaimReleaseReply, } from './claims.js';
|
|
43
|
+
export { modelReadResponseSchema, modelListResponseSchema, } from './modelResponses.js';
|
|
44
|
+
export type { ModelReadResponse, ModelListResponse } from './modelResponses.js';
|
|
45
|
+
export { fieldTypeSchema, fieldMetaSchema, relationTypeSchema, relationMetaSchema, } from './modelShape.js';
|
|
46
|
+
export type { FieldType, FieldMeta, RelationType, RelationMeta, } from './modelShape.js';
|
|
47
|
+
export { modelMutationRequestSchema } from './modelMutations.js';
|
|
48
|
+
export type { ModelMutationRequest } from './modelMutations.js';
|
|
49
|
+
export { projectResponseSchema, projectListResponseSchema, provisionedKeySchema, provisionKeyResponseSchema, conflictAxisWireSchema, schemaModelResponseSchema, schemaReadResponseSchema, logOpSchema, LOG_OP_BY_ACTION, logEventSchema, usageBucketSchema, usageReportResponseSchema, controlKeySchema, controlKeyListResponseSchema, keyMintedResponseSchema, keyRevokedResponseSchema, } from './accountResponses.js';
|
|
50
|
+
export type { ProjectResponse, ProjectListResponse, ProvisionedKey, ProvisionKeyResponse, SchemaModelResponse, SchemaReadResponse, LogOp, LogEvent, UsageBucket, UsageReportResponse, ControlKey, ControlKeyListResponse, KeyMintedResponse, KeyRevokedResponse, } from './accountResponses.js';
|
|
51
|
+
export { WS_INBOUND_FRAMES, wsInboundEnvelopeSchema, isKnownInboundFrame, isSchemaValidatedFrame, } from './inboundFrames.js';
|
|
52
|
+
export type { InboundFrameContract, InboundFrameType, InboundFramePayload, SchemaValidatedFrameType, WsInboundEnvelope, } from './inboundFrames.js';
|
|
53
|
+
export { ephemeralKeyUserSchema, ephemeralKeyRequestSchema, capabilityRequestSchema, capabilityMintResponseSchema, } from './auth.js';
|
|
54
|
+
export type { EphemeralKeyUser, EphemeralKeyRequest, CapabilityRequest, CapabilityMintResponse, } from './auth.js';
|
|
@@ -0,0 +1,83 @@
|
|
|
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, logQuerySchema, } 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 {
|
|
63
|
+
// The lease grammar and its one reading. The server parses TTLs with
|
|
64
|
+
// `claimTtlMs` rather than carrying a second parser — which is how a bare
|
|
65
|
+
// number came to mean seconds on one side and milliseconds on the other.
|
|
66
|
+
DEFAULT_CLAIM_TTL_MS, claimTtlSchema, claimTtlMs, claimTargetSchema, claimRequestSchema, claimHeartbeatRequestSchema, listQuerySchema, claimListQuerySchema, claimStateSchema, claimAcquiredResponseSchema, claimQueuedResponseSchema, claimAcquireResponseSchema, claimHeartbeatReplySchema, claimHeartbeatBatchReplySchema, claimListResponseSchema, claimReorderRequestSchema, claimReorderReplySchema, claimReleaseReplySchema, } from './claims.js';
|
|
67
|
+
// The model read routes' responses — the envelope around a row, which is
|
|
68
|
+
// protocol, around `data`, which is the caller's schema.
|
|
69
|
+
export { modelReadResponseSchema, modelListResponseSchema, } from './modelResponses.js';
|
|
70
|
+
// What a model is made of — the artifact's own field and relation shapes, which
|
|
71
|
+
// the schema read reports and every other layer derives its types from.
|
|
72
|
+
export { fieldTypeSchema, fieldMetaSchema, relationTypeSchema, relationMetaSchema, } from './modelShape.js';
|
|
73
|
+
// The model write routes' body — the record in `data`, the guards beside it.
|
|
74
|
+
export { modelMutationRequestSchema } from './modelMutations.js';
|
|
75
|
+
// The account routes' responses — projects, the deployed schema, the commit
|
|
76
|
+
// log, usage. What the server, the CLI, and the MCP server agree on.
|
|
77
|
+
export { projectResponseSchema, projectListResponseSchema, provisionedKeySchema, provisionKeyResponseSchema, conflictAxisWireSchema, schemaModelResponseSchema, schemaReadResponseSchema, logOpSchema, LOG_OP_BY_ACTION, logEventSchema, usageBucketSchema, usageReportResponseSchema, controlKeySchema, controlKeyListResponseSchema, keyMintedResponseSchema, keyRevokedResponseSchema, } from './accountResponses.js';
|
|
78
|
+
// The inbound socket surface: every frame the server can send, and how each
|
|
79
|
+
// one's payload is validated.
|
|
80
|
+
export { WS_INBOUND_FRAMES, wsInboundEnvelopeSchema, isKnownInboundFrame, isSchemaValidatedFrame, } from './inboundFrames.js';
|
|
81
|
+
// Credential minting — the first call any caller makes, so the contract cannot
|
|
82
|
+
// omit it. Response side lives in `auth/schemas.ts`.
|
|
83
|
+
export { ephemeralKeyUserSchema, ephemeralKeyRequestSchema, capabilityRequestSchema, capabilityMintResponseSchema, } from './auth.js';
|
|
@@ -8,20 +8,19 @@
|
|
|
8
8
|
* produces it, so every list across the API reads from one definition. The
|
|
9
9
|
* generic type parameter carries the row type of `data`.
|
|
10
10
|
*/
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
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>>>>;
|
|
25
24
|
/**
|
|
26
25
|
* Wraps an already-fetched page of rows in the uniform {@link ListEnvelope}.
|
|
27
26
|
*
|
|
@@ -0,0 +1,42 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The body of a model-scoped write — `POST /v1/models/{model}`,
|
|
3
|
+
* `PATCH /v1/models/{model}/{id}`, `DELETE /v1/models/{model}/{id}`.
|
|
4
|
+
*
|
|
5
|
+
* The record travels in `data`, and everything else is a control field beside
|
|
6
|
+
* it rather than inside it. That separation is the point: a row with a column
|
|
7
|
+
* called `claim` or `readAt` is not a reason for a write to stop being guarded,
|
|
8
|
+
* and a flat body would make the two indistinguishable.
|
|
9
|
+
*
|
|
10
|
+
* This lived in `routes/commit.ts` and the published reference described these
|
|
11
|
+
* routes as taking a bare row — so a client built from the document sent the
|
|
12
|
+
* record flat, and every field of it went missing at once. The failure surfaced
|
|
13
|
+
* as `not_null_violation` from the column, which reads as a schema problem
|
|
14
|
+
* rather than an envelope one. One definition, derived, is what stops that:
|
|
15
|
+
* the server validates against this and the reference is generated from it.
|
|
16
|
+
*/
|
|
17
|
+
import { z } from 'zod';
|
|
18
|
+
export declare const modelMutationRequestSchema: z.ZodObject<{
|
|
19
|
+
data: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
20
|
+
id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
21
|
+
claim: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
22
|
+
onStale: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
23
|
+
reject: "reject";
|
|
24
|
+
overwrite: "overwrite";
|
|
25
|
+
notify: "notify";
|
|
26
|
+
}>>>;
|
|
27
|
+
readAt: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
28
|
+
fenceToken: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
29
|
+
idempotencyKey: z.ZodOptional<z.ZodString>;
|
|
30
|
+
}, z.core.$strip>;
|
|
31
|
+
export type ModelMutationRequest = z.infer<typeof modelMutationRequestSchema>;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The body of a model-scoped write — `POST /v1/models/{model}`,
|
|
3
|
+
* `PATCH /v1/models/{model}/{id}`, `DELETE /v1/models/{model}/{id}`.
|
|
4
|
+
*
|
|
5
|
+
* The record travels in `data`, and everything else is a control field beside
|
|
6
|
+
* it rather than inside it. That separation is the point: a row with a column
|
|
7
|
+
* called `claim` or `readAt` is not a reason for a write to stop being guarded,
|
|
8
|
+
* and a flat body would make the two indistinguishable.
|
|
9
|
+
*
|
|
10
|
+
* This lived in `routes/commit.ts` and the published reference described these
|
|
11
|
+
* routes as taking a bare row — so a client built from the document sent the
|
|
12
|
+
* record flat, and every field of it went missing at once. The failure surfaced
|
|
13
|
+
* as `not_null_violation` from the column, which reads as a schema problem
|
|
14
|
+
* rather than an envelope one. One definition, derived, is what stops that:
|
|
15
|
+
* the server validates against this and the reference is generated from it.
|
|
16
|
+
*/
|
|
17
|
+
import { z } from 'zod';
|
|
18
|
+
import { onStaleModeSchema } from '../coordination/schema.js';
|
|
19
|
+
export const modelMutationRequestSchema = z.object({
|
|
20
|
+
/** The record. Its shape is your schema's; everything around it is protocol. */
|
|
21
|
+
data: z.record(z.string(), z.unknown()).nullish(),
|
|
22
|
+
/**
|
|
23
|
+
* The row id.
|
|
24
|
+
*
|
|
25
|
+
* On `POST` this is where it comes from, and it is **yours to choose** —
|
|
26
|
+
* Ablo mints none. Derive it as UUID v5 of `"<model>:<Idempotency-Key>"` in
|
|
27
|
+
* namespace `aa4ba6d4-bf0b-5b38-9c45-116f79a6e548` and a retry after a lost
|
|
28
|
+
* response inserts the same id, colliding with the original rather than
|
|
29
|
+
* writing a second row — with no server state to consult, so it holds across
|
|
30
|
+
* instances and outlives any idempotency record.
|
|
31
|
+
*
|
|
32
|
+
* On `PATCH` and `DELETE` the path names the row and this is redundant.
|
|
33
|
+
*/
|
|
34
|
+
id: z.string().nullish(),
|
|
35
|
+
/** The claim this write is made under — a claim id you hold. */
|
|
36
|
+
claim: z.string().nullish(),
|
|
37
|
+
/** What to do when the row moved since `readAt`. Defaults to rejecting. */
|
|
38
|
+
onStale: onStaleModeSchema.nullish(),
|
|
39
|
+
/**
|
|
40
|
+
* The watermark this write's decision was made against — the `stamp` from
|
|
41
|
+
* the read. Ablo rejects the write if the row moved in between, which is
|
|
42
|
+
* what makes read → decide → write safe without a lock across the deciding.
|
|
43
|
+
*/
|
|
44
|
+
readAt: z.number().nullish(),
|
|
45
|
+
/**
|
|
46
|
+
* The fencing token from the claim's grant. Closes the window `readAt` alone
|
|
47
|
+
* cannot: a lease that lapsed and whose successor came and went.
|
|
48
|
+
*/
|
|
49
|
+
fenceToken: z.number().nullish(),
|
|
50
|
+
/** @compat HTTP idempotency belongs in the `Idempotency-Key` header. */
|
|
51
|
+
idempotencyKey: z.string().optional(),
|
|
52
|
+
});
|
|
@@ -0,0 +1,85 @@
|
|
|
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>;
|
|
@@ -0,0 +1,43 @@
|
|
|
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
|
+
});
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a model is made of — its fields and its edges.
|
|
3
|
+
*
|
|
4
|
+
* These shapes travel twice: they are what `ablo push` serializes into the
|
|
5
|
+
* schema artifact, and what `GET /api/schema` reports back about the artifact
|
|
6
|
+
* that is deployed. Two crossings, one definition, and the definition lives
|
|
7
|
+
* here because `wire/` is the leaf every other layer may depend on.
|
|
8
|
+
*
|
|
9
|
+
* They were TypeScript interfaces, so the schema-read route could not send them
|
|
10
|
+
* without hand-writing a second copy of the record it was refusing to send — the
|
|
11
|
+
* shadow type wearing the fix's clothes. Declared as Zod and derived back into
|
|
12
|
+
* TypeScript, there is nowhere for a second copy to live.
|
|
13
|
+
*
|
|
14
|
+
* **Vocabulary ownership.** `type` is a CLOSED enum: the engine owns the set of
|
|
15
|
+
* types it can store and serialize, so a value outside it is a bug, not an
|
|
16
|
+
* extension. `enumValues` is an OPEN list: the values belong to the application
|
|
17
|
+
* that declared them, and the protocol never interprets one.
|
|
18
|
+
*/
|
|
19
|
+
import { z } from 'zod';
|
|
20
|
+
/**
|
|
21
|
+
* The engine's type vocabulary — closed, and owned by the engine.
|
|
22
|
+
*
|
|
23
|
+
* Each member maps to storage and serialization behaviour, so this is the whole
|
|
24
|
+
* set by construction. A schema's own richer types (a `z.email()`, a branded id)
|
|
25
|
+
* narrow one of these; they do not add a member.
|
|
26
|
+
*/
|
|
27
|
+
export declare const fieldTypeSchema: z.ZodEnum<{
|
|
28
|
+
string: "string";
|
|
29
|
+
number: "number";
|
|
30
|
+
boolean: "boolean";
|
|
31
|
+
date: "date";
|
|
32
|
+
enum: "enum";
|
|
33
|
+
json: "json";
|
|
34
|
+
}>;
|
|
35
|
+
export type FieldType = z.infer<typeof fieldTypeSchema>;
|
|
36
|
+
/** One field of a model, as the schema artifact records it. */
|
|
37
|
+
export declare const fieldMetaSchema: z.ZodObject<{
|
|
38
|
+
type: z.ZodEnum<{
|
|
39
|
+
string: "string";
|
|
40
|
+
number: "number";
|
|
41
|
+
boolean: "boolean";
|
|
42
|
+
date: "date";
|
|
43
|
+
enum: "enum";
|
|
44
|
+
json: "json";
|
|
45
|
+
}>;
|
|
46
|
+
isOptional: z.ZodBoolean;
|
|
47
|
+
isIndexed: z.ZodBoolean;
|
|
48
|
+
column: z.ZodOptional<z.ZodString>;
|
|
49
|
+
enumValues: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
|
|
50
|
+
}, z.core.$strip>;
|
|
51
|
+
export type FieldMeta = z.infer<typeof fieldMetaSchema>;
|
|
52
|
+
/**
|
|
53
|
+
* How one model points at another. Closed, like {@link fieldTypeSchema}: the
|
|
54
|
+
* engine resolves exactly these three when it plans a read.
|
|
55
|
+
*/
|
|
56
|
+
export declare const relationTypeSchema: z.ZodEnum<{
|
|
57
|
+
belongsTo: "belongsTo";
|
|
58
|
+
hasMany: "hasMany";
|
|
59
|
+
hasOne: "hasOne";
|
|
60
|
+
}>;
|
|
61
|
+
export type RelationType = z.infer<typeof relationTypeSchema>;
|
|
62
|
+
/**
|
|
63
|
+
* One edge of a model — what a caller may expand, and what it expands into.
|
|
64
|
+
*
|
|
65
|
+
* Reported alongside the fields because half the answer is not an answer: an
|
|
66
|
+
* agent asking what a model looks like wants its shape AND its edges, and
|
|
67
|
+
* shipping only the scalars invites the second question immediately.
|
|
68
|
+
*/
|
|
69
|
+
export declare const relationMetaSchema: z.ZodObject<{
|
|
70
|
+
type: z.ZodEnum<{
|
|
71
|
+
belongsTo: "belongsTo";
|
|
72
|
+
hasMany: "hasMany";
|
|
73
|
+
hasOne: "hasOne";
|
|
74
|
+
}>;
|
|
75
|
+
target: z.ZodString;
|
|
76
|
+
foreignKey: z.ZodString;
|
|
77
|
+
}, z.core.$strip>;
|
|
78
|
+
export type RelationMeta = z.infer<typeof relationMetaSchema>;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a model is made of — its fields and its edges.
|
|
3
|
+
*
|
|
4
|
+
* These shapes travel twice: they are what `ablo push` serializes into the
|
|
5
|
+
* schema artifact, and what `GET /api/schema` reports back about the artifact
|
|
6
|
+
* that is deployed. Two crossings, one definition, and the definition lives
|
|
7
|
+
* here because `wire/` is the leaf every other layer may depend on.
|
|
8
|
+
*
|
|
9
|
+
* They were TypeScript interfaces, so the schema-read route could not send them
|
|
10
|
+
* without hand-writing a second copy of the record it was refusing to send — the
|
|
11
|
+
* shadow type wearing the fix's clothes. Declared as Zod and derived back into
|
|
12
|
+
* TypeScript, there is nowhere for a second copy to live.
|
|
13
|
+
*
|
|
14
|
+
* **Vocabulary ownership.** `type` is a CLOSED enum: the engine owns the set of
|
|
15
|
+
* types it can store and serialize, so a value outside it is a bug, not an
|
|
16
|
+
* extension. `enumValues` is an OPEN list: the values belong to the application
|
|
17
|
+
* that declared them, and the protocol never interprets one.
|
|
18
|
+
*/
|
|
19
|
+
import { z } from 'zod';
|
|
20
|
+
/**
|
|
21
|
+
* The engine's type vocabulary — closed, and owned by the engine.
|
|
22
|
+
*
|
|
23
|
+
* Each member maps to storage and serialization behaviour, so this is the whole
|
|
24
|
+
* set by construction. A schema's own richer types (a `z.email()`, a branded id)
|
|
25
|
+
* narrow one of these; they do not add a member.
|
|
26
|
+
*/
|
|
27
|
+
export const fieldTypeSchema = z.enum([
|
|
28
|
+
'string',
|
|
29
|
+
'number',
|
|
30
|
+
'boolean',
|
|
31
|
+
'date',
|
|
32
|
+
'enum',
|
|
33
|
+
'json',
|
|
34
|
+
]);
|
|
35
|
+
/** One field of a model, as the schema artifact records it. */
|
|
36
|
+
export const fieldMetaSchema = z.object({
|
|
37
|
+
/** Sync-engine type tag, which maps to storage and serialization hints. */
|
|
38
|
+
type: fieldTypeSchema,
|
|
39
|
+
/** Whether the field was marked optional via `.optional()` or `.nullable()`. */
|
|
40
|
+
isOptional: z.boolean(),
|
|
41
|
+
/** Whether the field was marked indexed via `.indexed()`. */
|
|
42
|
+
isIndexed: z.boolean(),
|
|
43
|
+
/**
|
|
44
|
+
* Physical database column name override. When absent, SQL layers derive the
|
|
45
|
+
* column from the field name using the active casing convention.
|
|
46
|
+
*/
|
|
47
|
+
column: z.string().optional(),
|
|
48
|
+
/**
|
|
49
|
+
* For enums: the allowed values.
|
|
50
|
+
*
|
|
51
|
+
* The application's vocabulary, carried verbatim — an open list, because the
|
|
52
|
+
* protocol has no opinion about what a caller's statuses are called.
|
|
53
|
+
*/
|
|
54
|
+
enumValues: z.array(z.string()).readonly().optional(),
|
|
55
|
+
});
|
|
56
|
+
/**
|
|
57
|
+
* How one model points at another. Closed, like {@link fieldTypeSchema}: the
|
|
58
|
+
* engine resolves exactly these three when it plans a read.
|
|
59
|
+
*/
|
|
60
|
+
export const relationTypeSchema = z.enum(['belongsTo', 'hasMany', 'hasOne']);
|
|
61
|
+
/**
|
|
62
|
+
* One edge of a model — what a caller may expand, and what it expands into.
|
|
63
|
+
*
|
|
64
|
+
* Reported alongside the fields because half the answer is not an answer: an
|
|
65
|
+
* agent asking what a model looks like wants its shape AND its edges, and
|
|
66
|
+
* shipping only the scalars invites the second question immediately.
|
|
67
|
+
*/
|
|
68
|
+
export const relationMetaSchema = z.object({
|
|
69
|
+
type: relationTypeSchema,
|
|
70
|
+
/** The schema key of the model on the other end. */
|
|
71
|
+
target: z.string(),
|
|
72
|
+
/** The field on the owning side that carries the link. */
|
|
73
|
+
foreignKey: z.string(),
|
|
74
|
+
});
|