@abloatai/transaction 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/CONVENTIONS.md +83 -0
- package/README.md +48 -0
- package/dist/ablo.d.ts +90 -0
- package/dist/ablo.d.ts.map +1 -0
- package/dist/ablo.js +34 -0
- package/dist/ablo.js.map +1 -0
- package/dist/ai-sdk/coordinatedTool.d.ts +123 -0
- package/dist/ai-sdk/coordinatedTool.d.ts.map +1 -0
- package/dist/ai-sdk/coordinatedTool.js +135 -0
- package/dist/ai-sdk/coordinatedTool.js.map +1 -0
- package/dist/ai-sdk/index.d.ts +2 -0
- package/dist/ai-sdk/index.d.ts.map +1 -0
- package/dist/ai-sdk/index.js +2 -0
- package/dist/ai-sdk/index.js.map +1 -0
- package/dist/auth/apiKey.d.ts +154 -0
- package/dist/auth/apiKey.d.ts.map +1 -0
- package/dist/auth/apiKey.js +408 -0
- package/dist/auth/apiKey.js.map +1 -0
- package/dist/auth/bootstrapScope.d.ts +16 -0
- package/dist/auth/bootstrapScope.d.ts.map +1 -0
- package/dist/auth/bootstrapScope.js +2 -0
- package/dist/auth/bootstrapScope.js.map +1 -0
- package/dist/auth/browserCredentialSafety.d.ts +7 -0
- package/dist/auth/browserCredentialSafety.d.ts.map +1 -0
- package/dist/auth/browserCredentialSafety.js +29 -0
- package/dist/auth/browserCredentialSafety.js.map +1 -0
- package/dist/auth/capability.d.ts +241 -0
- package/dist/auth/capability.d.ts.map +1 -0
- package/dist/auth/capability.js +253 -0
- package/dist/auth/capability.js.map +1 -0
- package/dist/auth/capabilityLifecycle.d.ts +47 -0
- package/dist/auth/capabilityLifecycle.d.ts.map +1 -0
- package/dist/auth/capabilityLifecycle.js +108 -0
- package/dist/auth/capabilityLifecycle.js.map +1 -0
- package/dist/auth/credentialEndpoint.d.ts +10 -0
- package/dist/auth/credentialEndpoint.d.ts.map +1 -0
- package/dist/auth/credentialEndpoint.js +58 -0
- package/dist/auth/credentialEndpoint.js.map +1 -0
- package/dist/auth/credentialEndpointProtocol.d.ts +24 -0
- package/dist/auth/credentialEndpointProtocol.d.ts.map +1 -0
- package/dist/auth/credentialEndpointProtocol.js +34 -0
- package/dist/auth/credentialEndpointProtocol.js.map +1 -0
- package/dist/auth/credentialKind.d.ts +4 -0
- package/dist/auth/credentialKind.d.ts.map +1 -0
- package/dist/auth/credentialKind.js +15 -0
- package/dist/auth/credentialKind.js.map +1 -0
- package/dist/auth/credentialPolicy.d.ts +141 -0
- package/dist/auth/credentialPolicy.d.ts.map +1 -0
- package/dist/auth/credentialPolicy.js +113 -0
- package/dist/auth/credentialPolicy.js.map +1 -0
- package/dist/auth/credentialResult.d.ts +7 -0
- package/dist/auth/credentialResult.d.ts.map +1 -0
- package/dist/auth/credentialResult.js +9 -0
- package/dist/auth/credentialResult.js.map +1 -0
- package/dist/auth/credentialSource.d.ts +31 -0
- package/dist/auth/credentialSource.d.ts.map +1 -0
- package/dist/auth/credentialSource.js +56 -0
- package/dist/auth/credentialSource.js.map +1 -0
- package/dist/auth/hostedEndpoints.d.ts +22 -0
- package/dist/auth/hostedEndpoints.d.ts.map +1 -0
- package/dist/auth/hostedEndpoints.js +22 -0
- package/dist/auth/hostedEndpoints.js.map +1 -0
- package/dist/auth/identity.d.ts +62 -0
- package/dist/auth/identity.d.ts.map +1 -0
- package/dist/auth/identity.js +224 -0
- package/dist/auth/identity.js.map +1 -0
- package/dist/auth/index.d.ts +189 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +312 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/schemas.d.ts +41 -0
- package/dist/auth/schemas.d.ts.map +1 -0
- package/dist/auth/schemas.js +69 -0
- package/dist/auth/schemas.js.map +1 -0
- package/dist/auth/sessionMint.d.ts +29 -0
- package/dist/auth/sessionMint.d.ts.map +1 -0
- package/dist/auth/sessionMint.js +92 -0
- package/dist/auth/sessionMint.js.map +1 -0
- package/dist/auth/token.d.ts +4 -0
- package/dist/auth/token.d.ts.map +1 -0
- package/dist/auth/token.js +4 -0
- package/dist/auth/token.js.map +1 -0
- package/dist/batching/index.d.ts +56 -0
- package/dist/batching/index.d.ts.map +1 -0
- package/dist/batching/index.js +148 -0
- package/dist/batching/index.js.map +1 -0
- package/dist/coordination/awaitClaimGrant.d.ts +57 -0
- package/dist/coordination/awaitClaimGrant.d.ts.map +1 -0
- package/dist/coordination/awaitClaimGrant.js +138 -0
- package/dist/coordination/awaitClaimGrant.js.map +1 -0
- package/dist/coordination/claimHeartbeatLoop.d.ts +85 -0
- package/dist/coordination/claimHeartbeatLoop.d.ts.map +1 -0
- package/dist/coordination/claimHeartbeatLoop.js +109 -0
- package/dist/coordination/claimHeartbeatLoop.js.map +1 -0
- package/dist/coordination/claimMeta.d.ts +50 -0
- package/dist/coordination/claimMeta.d.ts.map +1 -0
- package/dist/coordination/claimMeta.js +53 -0
- package/dist/coordination/claimMeta.js.map +1 -0
- package/dist/coordination/events.d.ts +75 -0
- package/dist/coordination/events.d.ts.map +1 -0
- package/dist/coordination/events.js +8 -0
- package/dist/coordination/events.js.map +1 -0
- package/dist/coordination/index.d.ts +20 -0
- package/dist/coordination/index.d.ts.map +1 -0
- package/dist/coordination/index.js +46 -0
- package/dist/coordination/index.js.map +1 -0
- package/dist/coordination/locator.d.ts +106 -0
- package/dist/coordination/locator.d.ts.map +1 -0
- package/dist/coordination/locator.js +110 -0
- package/dist/coordination/locator.js.map +1 -0
- package/dist/coordination/schema.d.ts +1332 -0
- package/dist/coordination/schema.d.ts.map +1 -0
- package/dist/coordination/schema.js +1137 -0
- package/dist/coordination/schema.js.map +1 -0
- package/dist/coordination/targetConflict.d.ts +3 -0
- package/dist/coordination/targetConflict.d.ts.map +1 -0
- package/dist/coordination/targetConflict.js +74 -0
- package/dist/coordination/targetConflict.js.map +1 -0
- package/dist/coordination/trace.d.ts +79 -0
- package/dist/coordination/trace.d.ts.map +1 -0
- package/dist/coordination/trace.js +139 -0
- package/dist/coordination/trace.js.map +1 -0
- package/dist/docs/catalog.d.ts +73 -0
- package/dist/docs/catalog.d.ts.map +1 -0
- package/dist/docs/catalog.js +231 -0
- package/dist/docs/catalog.js.map +1 -0
- package/dist/docs/index.d.ts +11 -0
- package/dist/docs/index.d.ts.map +1 -0
- package/dist/docs/index.js +11 -0
- package/dist/docs/index.js.map +1 -0
- package/dist/durableWrites.d.ts +63 -0
- package/dist/durableWrites.d.ts.map +1 -0
- package/dist/durableWrites.js +72 -0
- package/dist/durableWrites.js.map +1 -0
- package/dist/environment.d.ts +106 -0
- package/dist/environment.d.ts.map +1 -0
- package/dist/environment.js +109 -0
- package/dist/environment.js.map +1 -0
- package/dist/errorCodes.d.ts +411 -0
- package/dist/errorCodes.d.ts.map +1 -0
- package/dist/errorCodes.js +500 -0
- package/dist/errorCodes.js.map +1 -0
- package/dist/errors.d.ts +429 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +687 -0
- package/dist/errors.js.map +1 -0
- package/dist/footprint.d.ts +112 -0
- package/dist/footprint.d.ts.map +1 -0
- package/dist/footprint.js +0 -0
- package/dist/footprint.js.map +1 -0
- package/dist/headlessClient.d.ts +10 -0
- package/dist/headlessClient.d.ts.map +1 -0
- package/dist/headlessClient.js +114 -0
- package/dist/headlessClient.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/keys/index.d.ts +88 -0
- package/dist/keys/index.d.ts.map +1 -0
- package/dist/keys/index.js +208 -0
- package/dist/keys/index.js.map +1 -0
- package/dist/log/syncDeltaRow.d.ts +159 -0
- package/dist/log/syncDeltaRow.d.ts.map +1 -0
- package/dist/log/syncDeltaRow.js +96 -0
- package/dist/log/syncDeltaRow.js.map +1 -0
- package/dist/logger.d.ts +17 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +8 -0
- package/dist/logger.js.map +1 -0
- package/dist/observability.d.ts +54 -0
- package/dist/observability.d.ts.map +1 -0
- package/dist/observability.js +20 -0
- package/dist/observability.js.map +1 -0
- package/dist/policy/types.d.ts +218 -0
- package/dist/policy/types.d.ts.map +1 -0
- package/dist/policy/types.js +127 -0
- package/dist/policy/types.js.map +1 -0
- package/dist/resources/functionalUpdate.d.ts +80 -0
- package/dist/resources/functionalUpdate.d.ts.map +1 -0
- package/dist/resources/functionalUpdate.js +88 -0
- package/dist/resources/functionalUpdate.js.map +1 -0
- package/dist/resources/httpResources.d.ts +449 -0
- package/dist/resources/httpResources.d.ts.map +1 -0
- package/dist/resources/httpResources.js +8 -0
- package/dist/resources/httpResources.js.map +1 -0
- package/dist/resources/modelOperations.d.ts +380 -0
- package/dist/resources/modelOperations.d.ts.map +1 -0
- package/dist/resources/modelOperations.js +13 -0
- package/dist/resources/modelOperations.js.map +1 -0
- package/dist/resources/mutationOptions.d.ts +67 -0
- package/dist/resources/mutationOptions.d.ts.map +1 -0
- package/dist/resources/mutationOptions.js +10 -0
- package/dist/resources/mutationOptions.js.map +1 -0
- package/dist/resources/where.d.ts +102 -0
- package/dist/resources/where.d.ts.map +1 -0
- package/dist/resources/where.js +116 -0
- package/dist/resources/where.js.map +1 -0
- package/dist/resources/writeOptionsSchema.d.ts +48 -0
- package/dist/resources/writeOptionsSchema.d.ts.map +1 -0
- package/dist/resources/writeOptionsSchema.js +74 -0
- package/dist/resources/writeOptionsSchema.js.map +1 -0
- package/dist/schema/coordination.d.ts +113 -0
- package/dist/schema/coordination.d.ts.map +1 -0
- package/dist/schema/coordination.js +134 -0
- package/dist/schema/coordination.js.map +1 -0
- package/dist/schema/ddl.d.ts +98 -0
- package/dist/schema/ddl.d.ts.map +1 -0
- package/dist/schema/ddl.js +492 -0
- package/dist/schema/ddl.js.map +1 -0
- package/dist/schema/ddlLock.d.ts +36 -0
- package/dist/schema/ddlLock.d.ts.map +1 -0
- package/dist/schema/ddlLock.js +47 -0
- package/dist/schema/ddlLock.js.map +1 -0
- package/dist/schema/diff.d.ts +226 -0
- package/dist/schema/diff.d.ts.map +1 -0
- package/dist/schema/diff.js +290 -0
- package/dist/schema/diff.js.map +1 -0
- package/dist/schema/field.d.ts +121 -0
- package/dist/schema/field.d.ts.map +1 -0
- package/dist/schema/field.js +266 -0
- package/dist/schema/field.js.map +1 -0
- package/dist/schema/fieldRef.d.ts +58 -0
- package/dist/schema/fieldRef.d.ts.map +1 -0
- package/dist/schema/fieldRef.js +26 -0
- package/dist/schema/fieldRef.js.map +1 -0
- package/dist/schema/generate.d.ts +20 -0
- package/dist/schema/generate.d.ts.map +1 -0
- package/dist/schema/generate.js +87 -0
- package/dist/schema/generate.js.map +1 -0
- package/dist/schema/index.d.ts +43 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +81 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/loadStrategy.d.ts +46 -0
- package/dist/schema/loadStrategy.d.ts.map +1 -0
- package/dist/schema/loadStrategy.js +47 -0
- package/dist/schema/loadStrategy.js.map +1 -0
- package/dist/schema/model.d.ts +380 -0
- package/dist/schema/model.d.ts.map +1 -0
- package/dist/schema/model.js +124 -0
- package/dist/schema/model.js.map +1 -0
- package/dist/schema/openapi.d.ts +59 -0
- package/dist/schema/openapi.d.ts.map +1 -0
- package/dist/schema/openapi.js +508 -0
- package/dist/schema/openapi.js.map +1 -0
- package/dist/schema/queries.d.ts +202 -0
- package/dist/schema/queries.d.ts.map +1 -0
- package/dist/schema/queries.js +144 -0
- package/dist/schema/queries.js.map +1 -0
- package/dist/schema/relation.d.ts +205 -0
- package/dist/schema/relation.d.ts.map +1 -0
- package/dist/schema/relation.js +105 -0
- package/dist/schema/relation.js.map +1 -0
- package/dist/schema/residency.d.ts +30 -0
- package/dist/schema/residency.d.ts.map +1 -0
- package/dist/schema/residency.js +26 -0
- package/dist/schema/residency.js.map +1 -0
- package/dist/schema/roles.d.ts +250 -0
- package/dist/schema/roles.d.ts.map +1 -0
- package/dist/schema/roles.js +231 -0
- package/dist/schema/roles.js.map +1 -0
- package/dist/schema/schema.d.ts +352 -0
- package/dist/schema/schema.d.ts.map +1 -0
- package/dist/schema/schema.js +326 -0
- package/dist/schema/schema.js.map +1 -0
- package/dist/schema/select.d.ts +41 -0
- package/dist/schema/select.d.ts.map +1 -0
- package/dist/schema/select.js +91 -0
- package/dist/schema/select.js.map +1 -0
- package/dist/schema/serialize.d.ts +116 -0
- package/dist/schema/serialize.d.ts.map +1 -0
- package/dist/schema/serialize.js +278 -0
- package/dist/schema/serialize.js.map +1 -0
- package/dist/schema/sugar.d.ts +110 -0
- package/dist/schema/sugar.d.ts.map +1 -0
- package/dist/schema/sugar.js +84 -0
- package/dist/schema/sugar.js.map +1 -0
- package/dist/schema/tenancy.d.ts +140 -0
- package/dist/schema/tenancy.d.ts.map +1 -0
- package/dist/schema/tenancy.js +191 -0
- package/dist/schema/tenancy.js.map +1 -0
- package/dist/server/adapter.d.ts +174 -0
- package/dist/server/adapter.d.ts.map +1 -0
- package/dist/server/adapter.js +19 -0
- package/dist/server/adapter.js.map +1 -0
- package/dist/server/commit.d.ts +108 -0
- package/dist/server/commit.d.ts.map +1 -0
- package/dist/server/commit.js +2 -0
- package/dist/server/commit.js.map +1 -0
- package/dist/server/index.d.ts +15 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +3 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/readConfig.d.ts +81 -0
- package/dist/server/readConfig.d.ts.map +1 -0
- package/dist/server/readConfig.js +9 -0
- package/dist/server/readConfig.js.map +1 -0
- package/dist/server/storageMode.d.ts +24 -0
- package/dist/server/storageMode.d.ts.map +1 -0
- package/dist/server/storageMode.js +18 -0
- package/dist/server/storageMode.js.map +1 -0
- package/dist/source/adapter.d.ts +84 -0
- package/dist/source/adapter.d.ts.map +1 -0
- package/dist/source/adapter.js +25 -0
- package/dist/source/adapter.js.map +1 -0
- package/dist/source/adapters/drizzle.d.ts +49 -0
- package/dist/source/adapters/drizzle.d.ts.map +1 -0
- package/dist/source/adapters/drizzle.js +220 -0
- package/dist/source/adapters/drizzle.js.map +1 -0
- package/dist/source/adapters/kysely.d.ts +43 -0
- package/dist/source/adapters/kysely.d.ts.map +1 -0
- package/dist/source/adapters/kysely.js +206 -0
- package/dist/source/adapters/kysely.js.map +1 -0
- package/dist/source/adapters/kyselyMutationCore.d.ts +77 -0
- package/dist/source/adapters/kyselyMutationCore.d.ts.map +1 -0
- package/dist/source/adapters/kyselyMutationCore.js +126 -0
- package/dist/source/adapters/kyselyMutationCore.js.map +1 -0
- package/dist/source/adapters/memory.d.ts +14 -0
- package/dist/source/adapters/memory.d.ts.map +1 -0
- package/dist/source/adapters/memory.js +131 -0
- package/dist/source/adapters/memory.js.map +1 -0
- package/dist/source/adapters/prisma.d.ts +64 -0
- package/dist/source/adapters/prisma.d.ts.map +1 -0
- package/dist/source/adapters/prisma.js +203 -0
- package/dist/source/adapters/prisma.js.map +1 -0
- package/dist/source/conformance.d.ts +38 -0
- package/dist/source/conformance.d.ts.map +1 -0
- package/dist/source/conformance.js +216 -0
- package/dist/source/conformance.js.map +1 -0
- package/dist/source/connector.d.ts +96 -0
- package/dist/source/connector.d.ts.map +1 -0
- package/dist/source/connector.js +267 -0
- package/dist/source/connector.js.map +1 -0
- package/dist/source/connectorProtocol.d.ts +155 -0
- package/dist/source/connectorProtocol.d.ts.map +1 -0
- package/dist/source/connectorProtocol.js +164 -0
- package/dist/source/connectorProtocol.js.map +1 -0
- package/dist/source/contract.d.ts +196 -0
- package/dist/source/contract.d.ts.map +1 -0
- package/dist/source/contract.js +165 -0
- package/dist/source/contract.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/factory.d.ts +93 -0
- package/dist/source/factory.d.ts.map +1 -0
- package/dist/source/factory.js +287 -0
- package/dist/source/factory.js.map +1 -0
- package/dist/source/idempotency.d.ts +62 -0
- package/dist/source/idempotency.d.ts.map +1 -0
- package/dist/source/idempotency.js +145 -0
- package/dist/source/idempotency.js.map +1 -0
- package/dist/source/index.d.ts +24 -0
- package/dist/source/index.d.ts.map +1 -0
- package/dist/source/index.js +29 -0
- package/dist/source/index.js.map +1 -0
- package/dist/source/kysely.d.ts +3 -0
- package/dist/source/kysely.d.ts.map +1 -0
- package/dist/source/kysely.js +3 -0
- package/dist/source/kysely.js.map +1 -0
- package/dist/source/migrations.d.ts +22 -0
- package/dist/source/migrations.d.ts.map +1 -0
- package/dist/source/migrations.js +104 -0
- package/dist/source/migrations.js.map +1 -0
- package/dist/source/next.d.ts +33 -0
- package/dist/source/next.d.ts.map +1 -0
- package/dist/source/next.js +26 -0
- package/dist/source/next.js.map +1 -0
- package/dist/source/pushQueue.d.ts +135 -0
- package/dist/source/pushQueue.d.ts.map +1 -0
- package/dist/source/pushQueue.js +257 -0
- package/dist/source/pushQueue.js.map +1 -0
- package/dist/source/signing.d.ts +93 -0
- package/dist/source/signing.d.ts.map +1 -0
- package/dist/source/signing.js +163 -0
- package/dist/source/signing.js.map +1 -0
- package/dist/source/types.d.ts +402 -0
- package/dist/source/types.d.ts.map +1 -0
- package/dist/source/types.js +60 -0
- package/dist/source/types.js.map +1 -0
- package/dist/syncLog/contract.d.ts +21 -0
- package/dist/syncLog/contract.d.ts.map +1 -0
- package/dist/syncLog/contract.js +20 -0
- package/dist/syncLog/contract.js.map +1 -0
- package/dist/syncLog/index.d.ts +2 -0
- package/dist/syncLog/index.d.ts.map +1 -0
- package/dist/syncLog/index.js +2 -0
- package/dist/syncLog/index.js.map +1 -0
- package/dist/testing/fixtures/httpResponses.d.ts +74 -0
- package/dist/testing/fixtures/httpResponses.d.ts.map +1 -0
- package/dist/testing/fixtures/httpResponses.js +102 -0
- package/dist/testing/fixtures/httpResponses.js.map +1 -0
- package/dist/transactionLayer.d.ts +110 -0
- package/dist/transactionLayer.d.ts.map +1 -0
- package/dist/transactionLayer.js +25 -0
- package/dist/transactionLayer.js.map +1 -0
- package/dist/transactions/settlement/commitEnvelope.d.ts +144 -0
- package/dist/transactions/settlement/commitEnvelope.d.ts.map +1 -0
- package/dist/transactions/settlement/commitEnvelope.js +162 -0
- package/dist/transactions/settlement/commitEnvelope.js.map +1 -0
- package/dist/transactions/settlement/httpCommitEnvelope.d.ts +54 -0
- package/dist/transactions/settlement/httpCommitEnvelope.d.ts.map +1 -0
- package/dist/transactions/settlement/httpCommitEnvelope.js +208 -0
- package/dist/transactions/settlement/httpCommitEnvelope.js.map +1 -0
- package/dist/transactions/settlement/idempotencyKey.d.ts +11 -0
- package/dist/transactions/settlement/idempotencyKey.d.ts.map +1 -0
- package/dist/transactions/settlement/idempotencyKey.js +10 -0
- package/dist/transactions/settlement/idempotencyKey.js.map +1 -0
- package/dist/transactions/settlement/pendingWrite.d.ts +113 -0
- package/dist/transactions/settlement/pendingWrite.d.ts.map +1 -0
- package/dist/transactions/settlement/pendingWrite.js +21 -0
- package/dist/transactions/settlement/pendingWrite.js.map +1 -0
- package/dist/transport/commitFrames.d.ts +91 -0
- package/dist/transport/commitFrames.d.ts.map +1 -0
- package/dist/transport/commitFrames.js +135 -0
- package/dist/transport/commitFrames.js.map +1 -0
- package/dist/transport/connectionManager.d.ts +216 -0
- package/dist/transport/connectionManager.d.ts.map +1 -0
- package/dist/transport/connectionManager.js +674 -0
- package/dist/transport/connectionManager.js.map +1 -0
- package/dist/transport/credentialLifecycle.d.ts +178 -0
- package/dist/transport/credentialLifecycle.d.ts.map +1 -0
- package/dist/transport/credentialLifecycle.js +324 -0
- package/dist/transport/credentialLifecycle.js.map +1 -0
- package/dist/transport/heartbeat.d.ts +66 -0
- package/dist/transport/heartbeat.d.ts.map +1 -0
- package/dist/transport/heartbeat.js +94 -0
- package/dist/transport/heartbeat.js.map +1 -0
- package/dist/transport/httpClient.d.ts +143 -0
- package/dist/transport/httpClient.d.ts.map +1 -0
- package/dist/transport/httpClient.js +150 -0
- package/dist/transport/httpClient.js.map +1 -0
- package/dist/transport/httpFeed.d.ts +4 -0
- package/dist/transport/httpFeed.d.ts.map +1 -0
- package/dist/transport/httpFeed.js +94 -0
- package/dist/transport/httpFeed.js.map +1 -0
- package/dist/transport/httpOptions.d.ts +34 -0
- package/dist/transport/httpOptions.d.ts.map +1 -0
- package/dist/transport/httpOptions.js +13 -0
- package/dist/transport/httpOptions.js.map +1 -0
- package/dist/transport/httpTransport.d.ts +68 -0
- package/dist/transport/httpTransport.d.ts.map +1 -0
- package/dist/transport/httpTransport.js +1433 -0
- package/dist/transport/httpTransport.js.map +1 -0
- package/dist/transport/networkProbe.d.ts +85 -0
- package/dist/transport/networkProbe.d.ts.map +1 -0
- package/dist/transport/networkProbe.js +208 -0
- package/dist/transport/networkProbe.js.map +1 -0
- package/dist/transport/wsFrameHandlers.d.ts +129 -0
- package/dist/transport/wsFrameHandlers.d.ts.map +1 -0
- package/dist/transport/wsFrameHandlers.js +429 -0
- package/dist/transport/wsFrameHandlers.js.map +1 -0
- package/dist/transport/wsTransport.d.ts +575 -0
- package/dist/transport/wsTransport.d.ts.map +1 -0
- package/dist/transport/wsTransport.js +1024 -0
- package/dist/transport/wsTransport.js.map +1 -0
- package/dist/types/assertExact.d.ts +18 -0
- package/dist/types/assertExact.d.ts.map +1 -0
- package/dist/types/assertExact.js +2 -0
- package/dist/types/assertExact.js.map +1 -0
- package/dist/types/global.d.ts +108 -0
- package/dist/types/global.d.ts.map +1 -0
- package/dist/types/global.js +41 -0
- package/dist/types/global.js.map +1 -0
- package/dist/types/index.d.ts +206 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +57 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/modelData.d.ts +11 -0
- package/dist/types/modelData.d.ts.map +1 -0
- package/dist/types/modelData.js +10 -0
- package/dist/types/modelData.js.map +1 -0
- package/dist/types/participant.d.ts +21 -0
- package/dist/types/participant.d.ts.map +1 -0
- package/dist/types/participant.js +11 -0
- package/dist/types/participant.js.map +1 -0
- package/dist/types/streams.d.ts +545 -0
- package/dist/types/streams.d.ts.map +1 -0
- package/dist/types/streams.js +12 -0
- package/dist/types/streams.js.map +1 -0
- package/dist/utils/asyncIterator.d.ts +35 -0
- package/dist/utils/asyncIterator.d.ts.map +1 -0
- package/dist/utils/asyncIterator.js +136 -0
- package/dist/utils/asyncIterator.js.map +1 -0
- package/dist/utils/duration.d.ts +51 -0
- package/dist/utils/duration.d.ts.map +1 -0
- package/dist/utils/duration.js +78 -0
- package/dist/utils/duration.js.map +1 -0
- package/dist/utils/json.d.ts +58 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +277 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/webhooks/events.d.ts +44 -0
- package/dist/webhooks/events.d.ts.map +1 -0
- package/dist/webhooks/events.js +43 -0
- package/dist/webhooks/events.js.map +1 -0
- package/dist/webhooks/index.d.ts +9 -0
- package/dist/webhooks/index.d.ts.map +1 -0
- package/dist/webhooks/index.js +9 -0
- package/dist/webhooks/index.js.map +1 -0
- package/dist/wire/accountResponses.d.ts +463 -0
- package/dist/wire/accountResponses.d.ts.map +1 -0
- package/dist/wire/accountResponses.js +294 -0
- package/dist/wire/accountResponses.js.map +1 -0
- package/dist/wire/auth.d.ts +57 -0
- package/dist/wire/auth.d.ts.map +1 -0
- package/dist/wire/auth.js +71 -0
- package/dist/wire/auth.js.map +1 -0
- package/dist/wire/bootstrapReason.d.ts +10 -0
- package/dist/wire/bootstrapReason.d.ts.map +1 -0
- package/dist/wire/bootstrapReason.js +9 -0
- package/dist/wire/bootstrapReason.js.map +1 -0
- package/dist/wire/claimEvent.d.ts +70 -0
- package/dist/wire/claimEvent.d.ts.map +1 -0
- package/dist/wire/claimEvent.js +74 -0
- package/dist/wire/claimEvent.js.map +1 -0
- package/dist/wire/claims.d.ts +475 -0
- package/dist/wire/claims.d.ts.map +1 -0
- package/dist/wire/claims.js +326 -0
- package/dist/wire/claims.js.map +1 -0
- package/dist/wire/commit.d.ts +604 -0
- package/dist/wire/commit.d.ts.map +1 -0
- package/dist/wire/commit.js +322 -0
- package/dist/wire/commit.js.map +1 -0
- package/dist/wire/delta.d.ts +251 -0
- package/dist/wire/delta.d.ts.map +1 -0
- package/dist/wire/delta.js +148 -0
- package/dist/wire/delta.js.map +1 -0
- package/dist/wire/errorEnvelope.d.ts +73 -0
- package/dist/wire/errorEnvelope.d.ts.map +1 -0
- package/dist/wire/errorEnvelope.js +124 -0
- package/dist/wire/errorEnvelope.js.map +1 -0
- package/dist/wire/feedCursor.d.ts +61 -0
- package/dist/wire/feedCursor.d.ts.map +1 -0
- package/dist/wire/feedCursor.js +83 -0
- package/dist/wire/feedCursor.js.map +1 -0
- package/dist/wire/feedEvent.d.ts +264 -0
- package/dist/wire/feedEvent.d.ts.map +1 -0
- package/dist/wire/feedEvent.js +66 -0
- package/dist/wire/feedEvent.js.map +1 -0
- package/dist/wire/frames.d.ts +195 -0
- package/dist/wire/frames.d.ts.map +1 -0
- package/dist/wire/frames.js +51 -0
- package/dist/wire/frames.js.map +1 -0
- package/dist/wire/inboundFrames.d.ts +490 -0
- package/dist/wire/inboundFrames.d.ts.map +1 -0
- package/dist/wire/inboundFrames.js +117 -0
- package/dist/wire/inboundFrames.js.map +1 -0
- package/dist/wire/index.d.ts +55 -0
- package/dist/wire/index.d.ts.map +1 -0
- package/dist/wire/index.js +84 -0
- package/dist/wire/index.js.map +1 -0
- package/dist/wire/listEnvelope.d.ts +38 -0
- package/dist/wire/listEnvelope.d.ts.map +1 -0
- package/dist/wire/listEnvelope.js +43 -0
- package/dist/wire/listEnvelope.js.map +1 -0
- package/dist/wire/modelMutations.d.ts +32 -0
- package/dist/wire/modelMutations.d.ts.map +1 -0
- package/dist/wire/modelMutations.js +53 -0
- package/dist/wire/modelMutations.js.map +1 -0
- package/dist/wire/modelResponses.d.ts +79 -0
- package/dist/wire/modelResponses.d.ts.map +1 -0
- package/dist/wire/modelResponses.js +44 -0
- package/dist/wire/modelResponses.js.map +1 -0
- package/dist/wire/modelShape.d.ts +79 -0
- package/dist/wire/modelShape.d.ts.map +1 -0
- package/dist/wire/modelShape.js +75 -0
- package/dist/wire/modelShape.js.map +1 -0
- package/dist/wire/protocol.d.ts +39 -0
- package/dist/wire/protocol.d.ts.map +1 -0
- package/dist/wire/protocol.js +39 -0
- package/dist/wire/protocol.js.map +1 -0
- package/dist/wire/protocolVersion.d.ts +74 -0
- package/dist/wire/protocolVersion.d.ts.map +1 -0
- package/dist/wire/protocolVersion.js +84 -0
- package/dist/wire/protocolVersion.js.map +1 -0
- package/package.json +187 -0
- package/src/ablo.ts +139 -0
- package/src/ai-sdk/coordinatedTool.ts +214 -0
- package/src/ai-sdk/index.ts +7 -0
- package/src/auth/apiKey.ts +540 -0
- package/src/auth/bootstrapScope.ts +15 -0
- package/src/auth/browserCredentialSafety.ts +48 -0
- package/src/auth/capability.ts +326 -0
- package/src/auth/capabilityLifecycle.ts +174 -0
- package/src/auth/credentialEndpoint.ts +79 -0
- package/src/auth/credentialEndpointProtocol.ts +51 -0
- package/src/auth/credentialKind.ts +20 -0
- package/src/auth/credentialPolicy.ts +244 -0
- package/src/auth/credentialResult.ts +23 -0
- package/src/auth/credentialSource.ts +99 -0
- package/src/auth/hostedEndpoints.ts +24 -0
- package/src/auth/identity.ts +330 -0
- package/src/auth/index.ts +592 -0
- package/src/auth/schemas.ts +94 -0
- package/src/auth/sessionMint.ts +126 -0
- package/src/auth/token.ts +4 -0
- package/src/batching/index.ts +200 -0
- package/src/coordination/awaitClaimGrant.ts +243 -0
- package/src/coordination/claimHeartbeatLoop.ts +165 -0
- package/src/coordination/claimMeta.ts +56 -0
- package/src/coordination/events.ts +86 -0
- package/src/coordination/index.ts +181 -0
- package/src/coordination/locator.ts +200 -0
- package/src/coordination/schema.ts +1346 -0
- package/src/coordination/targetConflict.ts +85 -0
- package/src/coordination/trace.ts +173 -0
- package/src/docs/catalog.ts +274 -0
- package/src/docs/index.ts +18 -0
- package/src/durableWrites.ts +134 -0
- package/src/environment.ts +132 -0
- package/src/errorCodes.ts +1591 -0
- package/src/errors.ts +918 -0
- package/src/footprint.ts +0 -0
- package/src/headlessClient.ts +161 -0
- package/src/index.ts +52 -0
- package/src/keys/index.ts +254 -0
- package/src/log/syncDeltaRow.ts +119 -0
- package/src/logger.ts +22 -0
- package/src/observability.ts +85 -0
- package/src/policy/types.ts +292 -0
- package/src/resources/functionalUpdate.ts +151 -0
- package/src/resources/httpResources.ts +520 -0
- package/src/resources/modelOperations.ts +444 -0
- package/src/resources/mutationOptions.ts +66 -0
- package/src/resources/where.ts +160 -0
- package/src/resources/writeOptionsSchema.ts +91 -0
- package/src/schema/coordination.ts +161 -0
- package/src/schema/ddl.ts +593 -0
- package/src/schema/ddlLock.ts +53 -0
- package/src/schema/diff.ts +489 -0
- package/src/schema/field.ts +321 -0
- package/src/schema/fieldRef.ts +88 -0
- package/src/schema/generate.ts +95 -0
- package/src/schema/index.ts +278 -0
- package/src/schema/loadStrategy.ts +52 -0
- package/src/schema/model.ts +476 -0
- package/src/schema/openapi.ts +658 -0
- package/src/schema/queries.ts +273 -0
- package/src/schema/relation.ts +291 -0
- package/src/schema/residency.ts +30 -0
- package/src/schema/roles.ts +325 -0
- package/src/schema/schema.ts +825 -0
- package/src/schema/select.ts +115 -0
- package/src/schema/serialize.ts +373 -0
- package/src/schema/sugar.ts +194 -0
- package/src/schema/tenancy.ts +221 -0
- package/src/server/adapter.ts +203 -0
- package/src/server/commit.ts +109 -0
- package/src/server/index.ts +26 -0
- package/src/server/readConfig.ts +82 -0
- package/src/server/storageMode.ts +20 -0
- package/src/source/adapter.ts +85 -0
- package/src/source/adapters/drizzle.ts +291 -0
- package/src/source/adapters/kysely.ts +346 -0
- package/src/source/adapters/kyselyMutationCore.ts +220 -0
- package/src/source/adapters/memory.ts +154 -0
- package/src/source/adapters/prisma.ts +282 -0
- package/src/source/conformance.ts +287 -0
- package/src/source/connector.ts +394 -0
- package/src/source/connectorProtocol.ts +189 -0
- package/src/source/contract.ts +221 -0
- package/src/source/drizzle.ts +1 -0
- package/src/source/factory.ts +444 -0
- package/src/source/idempotency.ts +189 -0
- package/src/source/index.ts +182 -0
- package/src/source/kysely.ts +2 -0
- package/src/source/migrations.ts +109 -0
- package/src/source/next.ts +38 -0
- package/src/source/pushQueue.ts +368 -0
- package/src/source/signing.ts +279 -0
- package/src/source/types.ts +502 -0
- package/src/syncLog/contract.ts +32 -0
- package/src/syncLog/index.ts +1 -0
- package/src/testing/fixtures/httpResponses.ts +155 -0
- package/src/transactionLayer.ts +122 -0
- package/src/transactions/settlement/commitEnvelope.ts +192 -0
- package/src/transactions/settlement/httpCommitEnvelope.ts +250 -0
- package/src/transactions/settlement/idempotencyKey.ts +11 -0
- package/src/transactions/settlement/pendingWrite.ts +24 -0
- package/src/transport/commitFrames.ts +225 -0
- package/src/transport/connectionManager.ts +856 -0
- package/src/transport/credentialLifecycle.ts +389 -0
- package/src/transport/heartbeat.ts +118 -0
- package/src/transport/httpClient.ts +354 -0
- package/src/transport/httpFeed.ts +111 -0
- package/src/transport/httpOptions.ts +41 -0
- package/src/transport/httpTransport.ts +1976 -0
- package/src/transport/networkProbe.ts +249 -0
- package/src/transport/wsFrameHandlers.ts +619 -0
- package/src/transport/wsTransport.ts +1491 -0
- package/src/types/assertExact.ts +17 -0
- package/src/types/global.ts +123 -0
- package/src/types/index.ts +270 -0
- package/src/types/modelData.ts +11 -0
- package/src/types/participant.ts +22 -0
- package/src/types/streams.ts +702 -0
- package/src/utils/asyncIterator.ts +141 -0
- package/src/utils/duration.ts +88 -0
- package/src/utils/json.ts +281 -0
- package/src/webhooks/events.ts +96 -0
- package/src/webhooks/index.ts +12 -0
- package/src/wire/accountResponses.ts +328 -0
- package/src/wire/auth.ts +86 -0
- package/src/wire/bootstrapReason.ts +10 -0
- package/src/wire/claimEvent.ts +85 -0
- package/src/wire/claims.ts +370 -0
- package/src/wire/commit.ts +379 -0
- package/src/wire/delta.ts +173 -0
- package/src/wire/errorEnvelope.ts +133 -0
- package/src/wire/feedCursor.ts +91 -0
- package/src/wire/feedEvent.ts +74 -0
- package/src/wire/frames.ts +77 -0
- package/src/wire/inboundFrames.ts +182 -0
- package/src/wire/index.ts +328 -0
- package/src/wire/listEnvelope.ts +51 -0
- package/src/wire/modelMutations.ts +55 -0
- package/src/wire/modelResponses.ts +48 -0
- package/src/wire/modelShape.ts +83 -0
- package/src/wire/protocol.ts +39 -0
- package/src/wire/protocolVersion.ts +97 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Defines how a model's rows are scoped to a tenant. Two forms live here, and the
|
|
3
|
+
* separation between them is deliberate:
|
|
4
|
+
*
|
|
5
|
+
* 1. The canonical form, {@link Tenancy} — a discriminated union that every
|
|
6
|
+
* consumer reads (provisioning and row-level security, introspection, the
|
|
7
|
+
* runtime, and the CLI) and the shape that crosses the wire in `ModelJSON`.
|
|
8
|
+
* One exhaustively switchable shape, so the type system enforces the isolation
|
|
9
|
+
* boundary.
|
|
10
|
+
* 2. The authoring form, {@link PolicyInput} — the `policy: { by }` option a
|
|
11
|
+
* schema author writes. The name follows SQL row-level security, where a
|
|
12
|
+
* policy is the rule that decides which rows a tenant may read.
|
|
13
|
+
* {@link resolvePolicy} converts it to the canonical {@link Tenancy} when the
|
|
14
|
+
* model is built, so the authoring vocabulary never reaches the wire or any
|
|
15
|
+
* consumer.
|
|
16
|
+
*
|
|
17
|
+
* The canonical form is an exhaustively switchable discriminated union, so the type
|
|
18
|
+
* system enforces the isolation boundary at every consumer. The authoring form is a
|
|
19
|
+
* flat object whose `by` names the choice and whose per-branch rules are checked by a
|
|
20
|
+
* refinement — the opt-out from tenant scoping (`{ by: 'none' }`) and the
|
|
21
|
+
* source-derived case (`{ by: 'source' }`) are explicit, named values rather than
|
|
22
|
+
* falsy flags, important because `none` makes an entire table readable across tenants.
|
|
23
|
+
*/
|
|
24
|
+
import { z } from 'zod';
|
|
25
|
+
/** The default physical tenancy column. This is the single canonical definition of that column name. */
|
|
26
|
+
export const DEFAULT_ORG_COLUMN = 'organization_id';
|
|
27
|
+
/**
|
|
28
|
+
* Scopes a table's rows through a parent table, for rows that carry no tenancy
|
|
29
|
+
* column of their own (for example, blocks scoped through their section, report,
|
|
30
|
+
* and organization). This is the canonical `parent` payload; authors write the
|
|
31
|
+
* friendlier {@link PolicyInput} `{ by: 'parent', fk, parent }` form, which
|
|
32
|
+
* {@link resolvePolicy} normalizes into this.
|
|
33
|
+
*/
|
|
34
|
+
export const scopedViaRefSchema = z.object({
|
|
35
|
+
/** Column on this table that points at the parent (for example, `'team_id'`). */
|
|
36
|
+
localKey: z.string().min(1),
|
|
37
|
+
/** Parent table name (e.g. `'team'`). */
|
|
38
|
+
parentTable: z.string().min(1),
|
|
39
|
+
/** Column on the parent that `localKey` references. Default `'id'`. */
|
|
40
|
+
parentKey: z.string().min(1).optional(),
|
|
41
|
+
/** Column on the parent holding the tenant id. Default {@link DEFAULT_ORG_COLUMN}. */
|
|
42
|
+
parentOrgColumn: z.string().min(1).optional(),
|
|
43
|
+
});
|
|
44
|
+
/** How a model's rows are scoped to a tenant — the canonical, wire-facing form. */
|
|
45
|
+
export const tenancySchema = z.discriminatedUnion('kind', [
|
|
46
|
+
/** Row-local tenancy column (default name `organization_id`, overridable). */
|
|
47
|
+
z.object({ kind: z.literal('column'), column: z.string().min(1) }),
|
|
48
|
+
/** Scoped through a parent table's tenancy. */
|
|
49
|
+
z.object({ kind: z.literal('parent'), via: scopedViaRefSchema }),
|
|
50
|
+
/** Not tenant-scoped (global / reference data). */
|
|
51
|
+
z.object({ kind: z.literal('none') }),
|
|
52
|
+
/**
|
|
53
|
+
* Scoped by the data source itself: the model carries no tenancy column, and the
|
|
54
|
+
* owning organization is derived from the connected source that registered it — the
|
|
55
|
+
* registration is the tenant boundary. This is the natural default for a
|
|
56
|
+
* single-tenant connected database (`ablo connect`), which holds one org's rows and
|
|
57
|
+
* so has no per-row `organization_id` to read. Carries no payload for the same
|
|
58
|
+
* reason `none` does: the binding lives in the source registration, not the model.
|
|
59
|
+
*/
|
|
60
|
+
z.object({ kind: z.literal('source') }),
|
|
61
|
+
]);
|
|
62
|
+
/**
|
|
63
|
+
* The authoring form of tenancy — what a schema author writes as the model's
|
|
64
|
+
* `policy` option. The name follows SQL row-level security, where a policy is the
|
|
65
|
+
* rule that decides which rows a tenant may read.
|
|
66
|
+
*
|
|
67
|
+
* The four choices `by` can take:
|
|
68
|
+
*
|
|
69
|
+
* - `{ by: 'column' }` — a row-local tenancy column (the default). `column`
|
|
70
|
+
* overrides the name (default {@link DEFAULT_ORG_COLUMN}).
|
|
71
|
+
* - `{ by: 'parent', fk, parent }` — inherit tenancy through a foreign key when
|
|
72
|
+
* this table has no tenancy column of its own. `parentKey` (default `'id'`) and
|
|
73
|
+
* `parentTenantColumn` (default {@link DEFAULT_ORG_COLUMN}) are optional overrides.
|
|
74
|
+
* - `{ by: 'source' }` — derive the organization from the connected source that
|
|
75
|
+
* registered the model, for a single-tenant connected database that carries no
|
|
76
|
+
* `organization_id` column. The registration is the tenant boundary.
|
|
77
|
+
* - `{ by: 'none' }` — genuinely global or reference data. This makes the whole
|
|
78
|
+
* table readable across tenants, so it is correct only for tables that have no tenant.
|
|
79
|
+
*
|
|
80
|
+
* The runtime schema is one flat object rather than a discriminated union: `by`
|
|
81
|
+
* selects the branch, and the {@link https://zod.dev | superRefine} pass enforces
|
|
82
|
+
* the per-branch field rules (`parent` requires `fk` and `parent`; the other three
|
|
83
|
+
* take no branch fields). The exported {@link PolicyInput} type is hand-written as a
|
|
84
|
+
* precise union so the compiler still requires the right fields per `by` — the flat
|
|
85
|
+
* schema validates at runtime, the union guides at author time, and the type guard
|
|
86
|
+
* below keeps the two from drifting.
|
|
87
|
+
*/
|
|
88
|
+
export const policyInputSchema = z
|
|
89
|
+
.object({
|
|
90
|
+
by: z.enum(['column', 'parent', 'none', 'source']),
|
|
91
|
+
/** `by: 'column'` — override the physical tenancy column name. Default {@link DEFAULT_ORG_COLUMN}. */
|
|
92
|
+
column: z.string().min(1).optional(),
|
|
93
|
+
/** `by: 'parent'` — column on this table that points at the parent (for example, `'sectionId'`). */
|
|
94
|
+
fk: z.string().min(1).optional(),
|
|
95
|
+
/** `by: 'parent'` — parent table name (e.g. `'sections'`). */
|
|
96
|
+
parent: z.string().min(1).optional(),
|
|
97
|
+
/** `by: 'parent'` — column on the parent that `fk` references. Default `'id'`. */
|
|
98
|
+
parentKey: z.string().min(1).optional(),
|
|
99
|
+
/** `by: 'parent'` — column on the parent holding the tenant id. Default {@link DEFAULT_ORG_COLUMN}. */
|
|
100
|
+
parentTenantColumn: z.string().min(1).optional(),
|
|
101
|
+
})
|
|
102
|
+
.superRefine((policy, ctx) => {
|
|
103
|
+
if (policy.by === 'parent') {
|
|
104
|
+
if (!policy.fk) {
|
|
105
|
+
ctx.addIssue({
|
|
106
|
+
code: z.ZodIssueCode.custom,
|
|
107
|
+
path: ['fk'],
|
|
108
|
+
message: "A `by: 'parent'` policy needs `fk` — the column on this table that points at the parent row whose tenancy it inherits.",
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
if (!policy.parent) {
|
|
112
|
+
ctx.addIssue({
|
|
113
|
+
code: z.ZodIssueCode.custom,
|
|
114
|
+
path: ['parent'],
|
|
115
|
+
message: "A `by: 'parent'` policy needs `parent` — the name of the parent table this table is scoped through.",
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// A `column` policy may carry `column`; the parent fields belong only to `parent`.
|
|
120
|
+
// Flag a field that landed on the wrong branch so a typo doesn't silently no-op.
|
|
121
|
+
const parentOnly = ['fk', 'parent', 'parentKey', 'parentTenantColumn'];
|
|
122
|
+
if (policy.by !== 'parent') {
|
|
123
|
+
for (const field of parentOnly) {
|
|
124
|
+
if (policy[field] !== undefined) {
|
|
125
|
+
ctx.addIssue({
|
|
126
|
+
code: z.ZodIssueCode.custom,
|
|
127
|
+
path: [field],
|
|
128
|
+
message: `\`${field}\` only applies to a \`by: 'parent'\` policy; remove it or set \`by: 'parent'\`.`,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
if (policy.by !== 'column' && policy.column !== undefined) {
|
|
134
|
+
ctx.addIssue({
|
|
135
|
+
code: z.ZodIssueCode.custom,
|
|
136
|
+
path: ['column'],
|
|
137
|
+
message: "`column` only applies to a `by: 'column'` policy; remove it or set `by: 'column'`.",
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
const _policyInputAssignable = [
|
|
142
|
+
true,
|
|
143
|
+
true,
|
|
144
|
+
];
|
|
145
|
+
void _policyInputAssignable;
|
|
146
|
+
/**
|
|
147
|
+
* Normalizes the authoring {@link PolicyInput} into the canonical {@link Tenancy}.
|
|
148
|
+
* Called once, when the model is built, so that `ModelDef`, `ModelJSON`, and every
|
|
149
|
+
* consumer see only the canonical union. Omitting `policy` defaults to a row-local
|
|
150
|
+
* `organization_id` column.
|
|
151
|
+
*/
|
|
152
|
+
export function resolvePolicy(input) {
|
|
153
|
+
if (!input)
|
|
154
|
+
return { kind: 'column', column: DEFAULT_ORG_COLUMN };
|
|
155
|
+
switch (input.by) {
|
|
156
|
+
case 'column':
|
|
157
|
+
return { kind: 'column', column: input.column ?? DEFAULT_ORG_COLUMN };
|
|
158
|
+
case 'parent':
|
|
159
|
+
return {
|
|
160
|
+
kind: 'parent',
|
|
161
|
+
via: {
|
|
162
|
+
localKey: input.fk,
|
|
163
|
+
parentTable: input.parent,
|
|
164
|
+
parentKey: input.parentKey,
|
|
165
|
+
parentOrgColumn: input.parentTenantColumn,
|
|
166
|
+
},
|
|
167
|
+
};
|
|
168
|
+
case 'source':
|
|
169
|
+
return { kind: 'source' };
|
|
170
|
+
case 'none':
|
|
171
|
+
return { kind: 'none' };
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Reads the canonical {@link Tenancy} off an already-built model definition (or a
|
|
176
|
+
* parsed `ModelJSON`), defaulting to a row-local `organization_id` column when it is
|
|
177
|
+
* absent.
|
|
178
|
+
*
|
|
179
|
+
* This is the read-side helper. Consumers — provisioning and row-level security, the
|
|
180
|
+
* membership resolver, DDL generation, and the CLI — call it to get a model's
|
|
181
|
+
* tenancy without re-deriving the default each time. It is not the authoring
|
|
182
|
+
* normalizer; that is {@link resolvePolicy}.
|
|
183
|
+
*/
|
|
184
|
+
export function resolveTenancy(def) {
|
|
185
|
+
return def.tenancy ?? { kind: 'column', column: DEFAULT_ORG_COLUMN };
|
|
186
|
+
}
|
|
187
|
+
/** The physical tenancy column for a column-scoped model, else `null`. */
|
|
188
|
+
export function tenancyColumn(t) {
|
|
189
|
+
return t.kind === 'column' ? t.column : null;
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=tenancy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenancy.js","sourceRoot":"","sources":["../../src/schema/tenancy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@abloatai/transaction/server` — the `DataAdapter` storage contract.
|
|
3
|
+
*
|
|
4
|
+
* A `DataAdapter` is the boundary between the sync engine and a database. The
|
|
5
|
+
* engine asks it to do three things — `read` canonical rows, `commit` a change,
|
|
6
|
+
* and `sync` the change log — and expects nothing beyond that. Everything
|
|
7
|
+
* higher up, such as proposing a change or resolving a conflict, is handled
|
|
8
|
+
* before the adapter is ever called.
|
|
9
|
+
*
|
|
10
|
+
* This module declares the contract and the value types that travel through it;
|
|
11
|
+
* you supply the implementation for your own database. The reference Postgres
|
|
12
|
+
* implementation ships separately, because it carries a SQL driver and raw
|
|
13
|
+
* queries that have no place in this browser-safe build.
|
|
14
|
+
*
|
|
15
|
+
* Every shape here builds on {@link Row}, the single canonical form of a
|
|
16
|
+
* database row that the rest of the engine reads and writes.
|
|
17
|
+
*/
|
|
18
|
+
import type { SourceListQuery, SourceOperation, SourceRequestContext } from '../source/index.js';
|
|
19
|
+
import type { ServerSyncDelta } from '../wire/delta.js';
|
|
20
|
+
import type { BootstrapModel } from './readConfig.js';
|
|
21
|
+
import type { CommitContext, CommitExecutionResult } from './commit.js';
|
|
22
|
+
import type { StorageMode } from './storageMode.js';
|
|
23
|
+
/**
|
|
24
|
+
* A canonical database row: one record, keyed by column name. The value type is
|
|
25
|
+
* `unknown` by design, not `any` — columns arrive as JSON or in whatever form
|
|
26
|
+
* the driver hands back, so a caller must narrow a value before using it. Reach
|
|
27
|
+
* for this type wherever a row is passed around; it is the one name for that
|
|
28
|
+
* shape, and a later schema-typed `read<T>()` can specialize it to a concrete
|
|
29
|
+
* model without changing any call site.
|
|
30
|
+
*/
|
|
31
|
+
export type Row = Record<string, unknown>;
|
|
32
|
+
/**
|
|
33
|
+
* The result of a {@link Row} read. Its two shapes mirror the two kinds of
|
|
34
|
+
* {@link ReadRequest}:
|
|
35
|
+
* - `bootstrap`: a full load, returned as a map from model name to its rows.
|
|
36
|
+
* - `query`: the rows of a single filtered query.
|
|
37
|
+
*/
|
|
38
|
+
export type ReadResult = {
|
|
39
|
+
readonly kind: 'bootstrap';
|
|
40
|
+
/** model name → its rows. Empty models are omitted. */
|
|
41
|
+
readonly models: Record<string, Row[]>;
|
|
42
|
+
/** Models whose read failed (partial success), if any. */
|
|
43
|
+
readonly failedModels?: string[];
|
|
44
|
+
/**
|
|
45
|
+
* Present when a paged read (`ReadRequest.page`) stopped at its row
|
|
46
|
+
* limit with rows remaining: pass it back as the next page's cursor.
|
|
47
|
+
* Absent on the final page and on unpaged reads.
|
|
48
|
+
*/
|
|
49
|
+
readonly nextCursor?: string;
|
|
50
|
+
} | {
|
|
51
|
+
readonly kind: 'query';
|
|
52
|
+
readonly rows: readonly Row[];
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Where a `sync` call resumes: the client's last-seen position in the
|
|
56
|
+
* `sync_deltas` change log. The cursor carries only that position. Everything
|
|
57
|
+
* else a sync needs — the organization, the sync groups, the largest gap it
|
|
58
|
+
* will stream — is bound onto the adapter when it is resolved, so a client can
|
|
59
|
+
* never ask to read an organization other than its own. A `lastSyncId` of zero
|
|
60
|
+
* or less means "no position yet", which `sync` answers with `needsFullRead`.
|
|
61
|
+
*/
|
|
62
|
+
export interface SyncCursor {
|
|
63
|
+
readonly lastSyncId: number;
|
|
64
|
+
}
|
|
65
|
+
export interface DataAdapterCapabilities {
|
|
66
|
+
/** The backend can dry-run a change without committing it. */
|
|
67
|
+
readonly propose?: boolean;
|
|
68
|
+
/** `commit` is atomic (all-or-nothing) across the change's operations. */
|
|
69
|
+
readonly transactions?: boolean;
|
|
70
|
+
/** Changes fan out in real time (vs poll-only). */
|
|
71
|
+
readonly realtime?: boolean;
|
|
72
|
+
/** The backend can be introspected for its schema. */
|
|
73
|
+
readonly schemaIntrospection?: boolean;
|
|
74
|
+
}
|
|
75
|
+
/** Result of a dry-run proposal (only adapters with `capabilities.propose`). */
|
|
76
|
+
export interface ProposalResult {
|
|
77
|
+
readonly ok: boolean;
|
|
78
|
+
readonly conflicts?: readonly {
|
|
79
|
+
readonly model: string;
|
|
80
|
+
readonly id: string;
|
|
81
|
+
readonly reason: string;
|
|
82
|
+
}[];
|
|
83
|
+
readonly rows?: readonly Row[];
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* A request for canonical rows, in one of two shapes:
|
|
87
|
+
* - `bootstrap`: the full-load reader — every enabled model's rows at once.
|
|
88
|
+
* - `query`: a single filtered query against one model, used by the live
|
|
89
|
+
* `/sync/query` path.
|
|
90
|
+
*
|
|
91
|
+
* A `query` carries its own execution as the `runHosted` closure, the same way
|
|
92
|
+
* a {@link ChangeSet} carries its write. This lets the adapter decide how to
|
|
93
|
+
* answer the request — a data source runs the customer's `list`, a hosted
|
|
94
|
+
* database runs the closure — without the query engine itself having to live
|
|
95
|
+
* inside the adapter.
|
|
96
|
+
*/
|
|
97
|
+
export type ReadRequest = {
|
|
98
|
+
readonly kind: 'bootstrap';
|
|
99
|
+
readonly models: readonly BootstrapModel[];
|
|
100
|
+
readonly requestedModels?: readonly string[];
|
|
101
|
+
readonly scope?: SourceRequestContext;
|
|
102
|
+
/**
|
|
103
|
+
* Keyset pagination for a SINGLE-model read (`requestedModels` names
|
|
104
|
+
* exactly one model): return at most `limit` rows, starting after the
|
|
105
|
+
* row whose id equals `cursor`. The result carries `nextCursor` while
|
|
106
|
+
* rows remain. Ignored for multi-model reads and by adapters whose
|
|
107
|
+
* backend pages upstream on its own.
|
|
108
|
+
*/
|
|
109
|
+
readonly page?: {
|
|
110
|
+
readonly cursor?: string;
|
|
111
|
+
readonly limit: number;
|
|
112
|
+
};
|
|
113
|
+
} | {
|
|
114
|
+
readonly kind: 'query';
|
|
115
|
+
readonly model: string;
|
|
116
|
+
/** Source-side model name, when it differs from `model`. */
|
|
117
|
+
readonly sourceModel?: string;
|
|
118
|
+
/** `__typename` stamped on each returned row. */
|
|
119
|
+
readonly typename: string;
|
|
120
|
+
readonly query: SourceListQuery;
|
|
121
|
+
readonly scope?: SourceRequestContext;
|
|
122
|
+
/** Runs the query against a hosted database: compile, take the tenant pool, apply row-level security, unpack the rows. */
|
|
123
|
+
readonly runHosted: () => Promise<Row[]>;
|
|
124
|
+
};
|
|
125
|
+
/**
|
|
126
|
+
* A change to apply to the canonical store. `runHosted` holds the write already
|
|
127
|
+
* bound to its execution: a hosted adapter simply runs it, while a data-source
|
|
128
|
+
* adapter ignores it and ships the operations to the customer's own endpoint.
|
|
129
|
+
* The adapter therefore decides how a change is applied, while the write logic
|
|
130
|
+
* itself is prepared above it.
|
|
131
|
+
*/
|
|
132
|
+
export interface ChangeSet {
|
|
133
|
+
readonly operations: readonly SourceOperation[];
|
|
134
|
+
readonly context: CommitContext;
|
|
135
|
+
readonly clientTxId: string;
|
|
136
|
+
readonly runHosted: () => Promise<CommitExecutionResult>;
|
|
137
|
+
}
|
|
138
|
+
export interface SyncResult {
|
|
139
|
+
/** Deltas in `(cursor.lastSyncId, nextCursor.lastSyncId]`, scoped to syncGroups. */
|
|
140
|
+
readonly changes: readonly ServerSyncDelta[];
|
|
141
|
+
readonly nextCursor: {
|
|
142
|
+
readonly lastSyncId: number;
|
|
143
|
+
};
|
|
144
|
+
/** True when the gap was too large to stream — caller must full-`read`. */
|
|
145
|
+
readonly needsFullRead: boolean;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* The interface every storage mode implements. The package defines the
|
|
149
|
+
* contract; you implement it against your own database. An adapter is
|
|
150
|
+
* responsible for one thing — reaching the data — and offers exactly three
|
|
151
|
+
* methods to do it: `read` fetches canonical rows, `commit` applies a change,
|
|
152
|
+
* and `sync` reads the change log. Anything above that line, such as proposing
|
|
153
|
+
* a change or resolving a conflict, happens before the adapter is called.
|
|
154
|
+
* `propose` is an optional capability, not a required method.
|
|
155
|
+
*/
|
|
156
|
+
export interface DataAdapter {
|
|
157
|
+
/** Names the adapter's storage mode, for diagnostics. Routing is decided by
|
|
158
|
+
* the resolver, not by reading this field. */
|
|
159
|
+
readonly mode: StorageMode;
|
|
160
|
+
readonly capabilities: DataAdapterCapabilities;
|
|
161
|
+
read(req: ReadRequest): Promise<ReadResult>;
|
|
162
|
+
commit(change: ChangeSet): Promise<CommitExecutionResult>;
|
|
163
|
+
sync(cursor: SyncCursor): Promise<SyncResult>;
|
|
164
|
+
}
|
|
165
|
+
/** A `DataAdapter` whose backend can dry-run a change. Narrow to this only after confirming the `propose` capability. */
|
|
166
|
+
export interface ProposableDataAdapter extends DataAdapter {
|
|
167
|
+
propose(change: ChangeSet): Promise<ProposalResult>;
|
|
168
|
+
}
|
|
169
|
+
/** Resolves an authenticated scope to the adapter that serves it. */
|
|
170
|
+
export type AdapterResolver = (scope: {
|
|
171
|
+
readonly projectId: string;
|
|
172
|
+
readonly accountScope?: string;
|
|
173
|
+
}) => Promise<DataAdapter> | DataAdapter;
|
|
174
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/server/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@abloatai/transaction/server` — the `DataAdapter` storage contract.
|
|
3
|
+
*
|
|
4
|
+
* A `DataAdapter` is the boundary between the sync engine and a database. The
|
|
5
|
+
* engine asks it to do three things — `read` canonical rows, `commit` a change,
|
|
6
|
+
* and `sync` the change log — and expects nothing beyond that. Everything
|
|
7
|
+
* higher up, such as proposing a change or resolving a conflict, is handled
|
|
8
|
+
* before the adapter is ever called.
|
|
9
|
+
*
|
|
10
|
+
* This module declares the contract and the value types that travel through it;
|
|
11
|
+
* you supply the implementation for your own database. The reference Postgres
|
|
12
|
+
* implementation ships separately, because it carries a SQL driver and raw
|
|
13
|
+
* queries that have no place in this browser-safe build.
|
|
14
|
+
*
|
|
15
|
+
* Every shape here builds on {@link Row}, the single canonical form of a
|
|
16
|
+
* database row that the rest of the engine reads and writes.
|
|
17
|
+
*/
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/server/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The commit contract types for the sync engine's server surface.
|
|
3
|
+
*
|
|
4
|
+
* {@link CommitContext} is the attribution envelope stamped onto every delta a
|
|
5
|
+
* commit produces; {@link CommitExecutionResult} is the receipt returned when the commit
|
|
6
|
+
* finishes. Both are plain data descriptors — no database driver, no SQL, no
|
|
7
|
+
* functions — so they belong to this package's public contract, which your commit
|
|
8
|
+
* implementation reads and writes. They feed the `ChangeSet` and `DataAdapter`
|
|
9
|
+
* contracts defined alongside them.
|
|
10
|
+
*
|
|
11
|
+
* The attribution fields reuse the shared {@link ParticipantKind},
|
|
12
|
+
* {@link ConfirmationState}, and {@link ParticipantRef} types, so the shape at
|
|
13
|
+
* commit time and the shape of a stored or broadcast delta share one definition
|
|
14
|
+
* rather than being kept in step by hand.
|
|
15
|
+
*/
|
|
16
|
+
import type { ParticipantKind, ConfirmationState } from '../log/syncDeltaRow.js';
|
|
17
|
+
import type { ParticipantRef } from '../wire/delta.js';
|
|
18
|
+
import type { CommitExecutionResultInput } from '../wire/commit.js';
|
|
19
|
+
import type { Environment } from '../environment.js';
|
|
20
|
+
import type { ReadDependency, TrackDependency } from '../coordination/schema.js';
|
|
21
|
+
export interface CommitContext {
|
|
22
|
+
participantId: string;
|
|
23
|
+
/**
|
|
24
|
+
* The kind of participant making the commit. Required, so that every delta carries
|
|
25
|
+
* structured attribution rather than a string-prefix convention.
|
|
26
|
+
*/
|
|
27
|
+
participantKind: ParticipantKind;
|
|
28
|
+
organizationId: string;
|
|
29
|
+
/**
|
|
30
|
+
* Project scope used to route source-mode storage. When omitted, the commit
|
|
31
|
+
* targets the organization's default project.
|
|
32
|
+
*/
|
|
33
|
+
projectId?: string;
|
|
34
|
+
/** Exact sandbox plane derived from the authenticated key, when present. */
|
|
35
|
+
sandboxId?: string;
|
|
36
|
+
/** Optional external account scope forwarded to storage resolvers. */
|
|
37
|
+
accountScope?: string;
|
|
38
|
+
/**
|
|
39
|
+
* The environment this commit runs in. Source-mode adapters forward it to the
|
|
40
|
+
* customer's handlers so that sandbox and production traffic can reach distinct
|
|
41
|
+
* customer-owned stores.
|
|
42
|
+
*/
|
|
43
|
+
environment?: Environment;
|
|
44
|
+
/**
|
|
45
|
+
* The sync groups this participant subscribes to, taken from the connection
|
|
46
|
+
* upgrade or the capability token. Each is appended to every delta's `sync_groups`
|
|
47
|
+
* so that writes fan out to subscribers of entity-level groups (such as
|
|
48
|
+
* `report:abc`), not only the default `org:X` and `user:Y` groups. When omitted, the
|
|
49
|
+
* commit fans out to just the organization and user groups.
|
|
50
|
+
*/
|
|
51
|
+
syncGroups?: readonly string[];
|
|
52
|
+
/**
|
|
53
|
+
* When true, the commit does not add `org:<organizationId>` to a delta's sync
|
|
54
|
+
* groups. Set this for sandbox writes, so that live organization subscribers do
|
|
55
|
+
* not receive test-environment changes.
|
|
56
|
+
*/
|
|
57
|
+
omitOrgSyncGroup?: boolean;
|
|
58
|
+
/**
|
|
59
|
+
* The participant on whose authority the actor acted. For a direct human commit
|
|
60
|
+
* this equals the actor; for an agent commit it is the human at the root of the
|
|
61
|
+
* capability's delegation chain. Null for `system` principals.
|
|
62
|
+
*/
|
|
63
|
+
onBehalfOf?: ParticipantRef | null;
|
|
64
|
+
/**
|
|
65
|
+
* The id of the scoped credential that authorized the commit. Non-null for agent
|
|
66
|
+
* and system commits when that credential is known; null for direct human commits.
|
|
67
|
+
*/
|
|
68
|
+
capabilityId?: string | null;
|
|
69
|
+
/**
|
|
70
|
+
* The id of the human user at the root of the delegated-authority chain. Stored
|
|
71
|
+
* directly on `sync_deltas` so that audit triggers appending the hash chain never
|
|
72
|
+
* need to join mutable credential tables.
|
|
73
|
+
*/
|
|
74
|
+
delegationChainRootUserId?: string | null;
|
|
75
|
+
/**
|
|
76
|
+
* The id of the API key row when the caller authenticated with an API key. Used by
|
|
77
|
+
* the idempotency cache and for usage attribution. Null for session and capability
|
|
78
|
+
* callers.
|
|
79
|
+
*/
|
|
80
|
+
apiKeyId?: string | null;
|
|
81
|
+
/**
|
|
82
|
+
* Whether a human explicitly approved the change. Defaults to `auto` when the
|
|
83
|
+
* caller does not specify an approval state.
|
|
84
|
+
*/
|
|
85
|
+
confirmationState?: ConfirmationState;
|
|
86
|
+
/**
|
|
87
|
+
* The premise for the whole batch. The committer declares the rows or groups
|
|
88
|
+
* it read to form this batch; the engine checks that none of them changed since
|
|
89
|
+
* each entry's `readAt` timestamp and applies that entry's `onStale` disposition
|
|
90
|
+
* across the batch. This differs from the per-operation `readAt` guard, which
|
|
91
|
+
* validates only the rows being written. Omit it to check the write targets alone.
|
|
92
|
+
*/
|
|
93
|
+
reads?: ReadDependency[] | null;
|
|
94
|
+
/**
|
|
95
|
+
* Durable premises to persist for this commit's participant. Each entry is
|
|
96
|
+
* kept in `track_dependencies` and re-checked against every future delta; a
|
|
97
|
+
* later match opens a `StaleNotification` delivered out of band. Distinct
|
|
98
|
+
* from `reads`, which is checked once here and discarded.
|
|
99
|
+
*/
|
|
100
|
+
track?: TrackDependency[] | null;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* The server execution receipt persisted in `mutation_log`. Its runtime schema
|
|
104
|
+
* lives with the HTTP/WS settlement contract so queued correlation cannot drift
|
|
105
|
+
* between cache, transport, and client.
|
|
106
|
+
*/
|
|
107
|
+
export type CommitExecutionResult = CommitExecutionResultInput;
|
|
108
|
+
//# sourceMappingURL=commit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commit.d.ts","sourceRoot":"","sources":["../../src/server/commit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjF,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,eAAe,EAAE,eAAe,CAAC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,UAAU,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACnC;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;;;OAIG;IACH,yBAAyB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;IAChC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;CAClC;AAED;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG,0BAA0B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commit.js","sourceRoot":"","sources":["../../src/server/commit.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The server-side entry point of the sync engine. It re-exports the contract types
|
|
3
|
+
* you implement a storage backend against: the {@link DataAdapter} and its
|
|
4
|
+
* vocabulary ({@link Row}, {@link ReadRequest}, {@link ChangeSet}, and the rest),
|
|
5
|
+
* the {@link CommitContext} and {@link CommitExecutionResult} commit types, the
|
|
6
|
+
* {@link StorageMode} enumeration, and the per-model read configuration
|
|
7
|
+
* ({@link BootstrapModel}, {@link ColumnOverride}). These are plain, driver-free
|
|
8
|
+
* types; you supply the database code that fulfills them.
|
|
9
|
+
*/
|
|
10
|
+
export type { Row, ReadResult, SyncCursor, DataAdapterCapabilities, ProposalResult, ReadRequest, ChangeSet, SyncResult, DataAdapter, ProposableDataAdapter, AdapterResolver, } from './adapter.js';
|
|
11
|
+
export type { CommitContext, CommitExecutionResult } from './commit.js';
|
|
12
|
+
export { commitExecutionResultSchema } from '../wire/commit.js';
|
|
13
|
+
export { storageModeSchema, type StorageMode } from './storageMode.js';
|
|
14
|
+
export type { ColumnOverride, BootstrapModel } from './readConfig.js';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,YAAY,EACV,GAAG,EACH,UAAU,EACV,UAAU,EACV,uBAAuB,EACvB,cAAc,EACd,WAAW,EACX,SAAS,EACT,UAAU,EACV,WAAW,EACX,qBAAqB,EACrB,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACvE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAoB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical per-model read configuration consumed when a client bootstraps. Each
|
|
3
|
+
* {@link BootstrapModel} maps a model to its physical table, its tenancy column, and
|
|
4
|
+
* any parent scoping — plain data with no database driver. It feeds the read side of
|
|
5
|
+
* the data adapter contract; your query builder reads it to load a model's initial
|
|
6
|
+
* rows.
|
|
7
|
+
*/
|
|
8
|
+
/** A mapping from a declared field to a physical column, with the alias to apply after a `SELECT *`. */
|
|
9
|
+
export interface ColumnOverride {
|
|
10
|
+
readonly field: string;
|
|
11
|
+
readonly column: string;
|
|
12
|
+
readonly alias: string;
|
|
13
|
+
}
|
|
14
|
+
/** Read configuration for one model: how to locate its rows and scope them to a tenant. */
|
|
15
|
+
export interface BootstrapModel {
|
|
16
|
+
name: string;
|
|
17
|
+
/**
|
|
18
|
+
* Extra names accepted when a request looks up or filters this model. When the
|
|
19
|
+
* physical table name is canonical, `name` stays that table name and the aliases
|
|
20
|
+
* cover generated compatibility names such as `WeatherReports` or `weatherReports`.
|
|
21
|
+
*/
|
|
22
|
+
aliases?: readonly string[];
|
|
23
|
+
/**
|
|
24
|
+
* The schema key used by source endpoints. `name` stays the wire and result model
|
|
25
|
+
* name (usually the typename), while source handlers are keyed by the developer's
|
|
26
|
+
* schema key, such as `files` or `blocks`.
|
|
27
|
+
*/
|
|
28
|
+
sourceModel?: string;
|
|
29
|
+
table: string;
|
|
30
|
+
syncGroups?: string[];
|
|
31
|
+
enabled?: boolean;
|
|
32
|
+
/** Max rows to return. Omit for unlimited. Maps to schema's bootstrapLimit. */
|
|
33
|
+
limit?: number;
|
|
34
|
+
/** SQL ORDER BY clause. Default: 'id'. Maps to schema's bootstrapOrderBy. */
|
|
35
|
+
orderBy?: string;
|
|
36
|
+
/** Whether the table has organization_id. Default: true. */
|
|
37
|
+
orgScoped?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* The model derives its tenant from the connected data source (`policy:
|
|
40
|
+
* { by: 'source' }`) rather than a row column. It carries no tenant predicate on a
|
|
41
|
+
* log plane, so it is excluded from the bootstrap set entirely until the
|
|
42
|
+
* write-through connect path can resolve the org from the source registration —
|
|
43
|
+
* serving it now would return every row to every tenant. Kept on the type as a
|
|
44
|
+
* defense-in-depth marker so a source-scoped model that reaches `getBootstrapData`
|
|
45
|
+
* fails closed rather than bootstrapping unscoped.
|
|
46
|
+
*/
|
|
47
|
+
sourceScoped?: boolean;
|
|
48
|
+
/** Physical tenancy column (default `organization_id`, configurable per model). */
|
|
49
|
+
orgColumn?: string;
|
|
50
|
+
/**
|
|
51
|
+
* Parent-table scoping for rows that have no `organization_id` column, mirroring
|
|
52
|
+
* the schema's `scopedVia` option. When set, the bootstrap query adds:
|
|
53
|
+
*
|
|
54
|
+
* WHERE <table>.<localKey> IN
|
|
55
|
+
* (SELECT <parentKey> FROM <parentTable> WHERE <parentOrgColumn> = $1)
|
|
56
|
+
*
|
|
57
|
+
* This applies on top of whatever `orgScoped` dictates, so a table can carry its
|
|
58
|
+
* own `organization_id` and still narrow through a parent. The common case,
|
|
59
|
+
* though, is `orgScoped: false` together with `scopedVia` on a table that lacks the
|
|
60
|
+
* column.
|
|
61
|
+
*/
|
|
62
|
+
scopedVia?: {
|
|
63
|
+
localKey: string;
|
|
64
|
+
parentTable: string;
|
|
65
|
+
parentKey?: string;
|
|
66
|
+
parentOrgColumn?: string;
|
|
67
|
+
};
|
|
68
|
+
/** Client-facing field name → physical DB column for declared fields. */
|
|
69
|
+
fieldColumns?: Record<string, string>;
|
|
70
|
+
/** Physical-column aliases needed after SELECT * for `.from(...)` fields. */
|
|
71
|
+
columnOverrides?: readonly ColumnOverride[];
|
|
72
|
+
/**
|
|
73
|
+
* Physical columns the schema declares as JSON (via `field.json()`). A JSON field
|
|
74
|
+
* stored in a text column comes back from `row_to_json` as a serialized string, so
|
|
75
|
+
* the bootstrap reparses these columns to make the wire value the canonical object
|
|
76
|
+
* regardless of the physical column type. A `jsonb` column already returns an
|
|
77
|
+
* object, so reparsing it is a no-op.
|
|
78
|
+
*/
|
|
79
|
+
jsonColumns?: readonly string[];
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=readConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readConfig.d.ts","sourceRoot":"","sources":["../../src/server/readConfig.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,wGAAwG;AACxG,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,2FAA2F;AAC3F,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,EAAE;QACV,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,yEAAyE;IACzE,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,6EAA6E;IAC7E,eAAe,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IAC5C;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical per-model read configuration consumed when a client bootstraps. Each
|
|
3
|
+
* {@link BootstrapModel} maps a model to its physical table, its tenancy column, and
|
|
4
|
+
* any parent scoping — plain data with no database driver. It feeds the read side of
|
|
5
|
+
* the data adapter contract; your query builder reads it to load a model's initial
|
|
6
|
+
* rows.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=readConfig.js.map
|