export type VoyantDeploymentMode = "managed-cloud" | "self-hosted" | "local"; /** Whether one Redis keyspace is dedicated to this deployment or shared by several. */ export type VoyantRedisBindingIsolation = "dedicated" | "shared"; /** Whether Redis is reached over a trusted private network or an untrusted network. */ export type VoyantRedisBindingNetwork = "trusted" | "untrusted"; /** * Security properties of the concrete Redis binding. * * These are deliberately independent: sharing requires key namespacing, while * an untrusted network requires transport security. Neither property follows * from who operates the deployment. */ export interface VoyantRedisBindingConstraints { isolation: VoyantRedisBindingIsolation; network: VoyantRedisBindingNetwork; } export type VoyantDeploymentProviderRole = "database" | "storage" | "cache" | "sharedState" | "rateLimit" | "search" | "email" | "sms" | "adminAuth" | "customerAuth" | "realtime" | "scheduledJobs" | "outboundWebhooks" | "payments"; export interface VoyantDeploymentProviders { database: "postgres"; storage: "s3-compatible" | "gateway" | "memory" | "custom"; cache: "redis" | "postgres" | "platform" | "memory"; sharedState: "redis" | "postgres" | "platform" | "memory"; rateLimit: "redis" | "postgres" | "platform" | "memory"; search: "postgres" | "typesense" | "algolia" | "custom" | "none"; email: "voyant-cloud" | "resend" | "sendgrid" | "smtp" | "none"; sms: "voyant-cloud" | "twilio" | "none"; adminAuth: "voyant-cloud" | "better-auth"; customerAuth: "better-auth" | "disabled"; realtime: "voyant-cloud" | "local" | "custom" | "none"; scheduledJobs: "cloud-scheduler" | "node-cron" | "none"; outboundWebhooks: "postgres" | "host" | "none"; payments: "managed" | "voyant-pay" /** @deprecated Legacy deployment value; normalized to `voyant-pay`. */ | "voyant-payments" | "netopia" | "custom" | "none"; } export type VoyantDeploymentEnvValueFormat = "postgres-url" | "redis-url" | "http-url"; export interface VoyantDeploymentEnvRequirement { name: string; aliases?: readonly string[]; format?: VoyantDeploymentEnvValueFormat; kind: "secret" | "variable" | "binding"; required: boolean; description: string; } export interface VoyantDeploymentResourceRequirement { resourceKey: string; roles: readonly VoyantDeploymentProviderRole[]; provider: string; required: boolean; env: readonly VoyantDeploymentEnvRequirement[]; notes?: string; } export declare const DEFAULT_MANAGED_CLOUD_PROVIDERS: { readonly database: "postgres"; readonly storage: "s3-compatible"; readonly cache: "redis"; readonly sharedState: "postgres"; readonly rateLimit: "redis"; readonly search: "postgres"; readonly email: "voyant-cloud"; readonly sms: "voyant-cloud"; readonly adminAuth: "voyant-cloud"; readonly customerAuth: "better-auth"; readonly realtime: "voyant-cloud"; readonly scheduledJobs: "cloud-scheduler"; readonly outboundWebhooks: "postgres"; readonly payments: "none"; }; export declare const DEPLOYMENT_PROVIDER_CONTRACTS: { readonly database: readonly ["postgres"]; readonly storage: readonly ["s3-compatible", "gateway", "memory", "custom"]; readonly cache: readonly ["redis", "postgres", "platform", "memory"]; readonly sharedState: readonly ["redis", "postgres", "platform", "memory"]; readonly rateLimit: readonly ["redis", "postgres", "platform", "memory"]; readonly search: readonly ["postgres", "typesense", "algolia", "custom", "none"]; readonly email: readonly ["voyant-cloud", "resend", "sendgrid", "smtp", "none"]; readonly sms: readonly ["voyant-cloud", "twilio", "none"]; readonly adminAuth: readonly ["voyant-cloud", "better-auth"]; readonly customerAuth: readonly ["better-auth", "disabled"]; readonly realtime: readonly ["voyant-cloud", "local", "custom", "none"]; readonly scheduledJobs: readonly ["cloud-scheduler", "node-cron", "none"]; readonly outboundWebhooks: readonly ["postgres", "host", "none"]; readonly payments: readonly ["managed", "voyant-pay", "voyant-payments", "netopia", "custom", "none"]; }; /** Normalize legacy provider values at deployment input boundaries. */ export declare function canonicalDeploymentProvider(role: VoyantDeploymentProviderRole | string, provider: string): string; export declare const DEPLOYMENT_PROVIDER_ROLES: VoyantDeploymentProviderRole[];