import { PackageManager } from "../../core/command-context"; import { ApiZone, Architecture, AuthCapability, ContractsCapability, ControllerLayout, DatabaseCapability, DocsCapability, MessagingCapability, OAuthProviderConfig, OAuthProviderPreset, ProjectCapabilities, RealtimeCapability, SoapApiConfig, SoapProjectConfig, SoapRegistryConfig, SoapStructureConfig, TelemetryCapability } from "../../config/schemas/types"; import { ResolvedDependencies } from "../../dependencies/dependency-resolver"; import { PlannedFile } from "../../io/file-writer"; export interface ProjectPlan { name: string; root: string; framework: "express"; architecture: Architecture; controllerLayout: ControllerLayout; packageManager: PackageManager; capabilities: ProjectCapabilities; zones: ApiZone[]; dependencies: ResolvedDependencies; authFlow: AuthFlowPlan; } export type TokenDeliveryMode = "json" | "cookie" | "cookie-redirect"; export type OAuthCallbackMode = TokenDeliveryMode; export type OAuthProvisioningPolicy = "auto" | "existing-user-only" | "verified-email-domain"; export type AuthStorage = "memory" | "database"; export type ApiKeyStorage = "static" | "database"; export type AuthDatabase = "postgres" | "mongo"; export interface OAuthProviderFlowPlan { provisioning: OAuthProvisioningPolicy; allowedEmailDomain?: string; } export interface AuthFlowPlan { tokenDeliveryMode: TokenDeliveryMode; oauthProvisioning: OAuthProvisioningPolicy; oauthAllowedEmailDomain?: string; oauthSuccessRedirectUrl?: string; frontendUrl: string; authStorage: AuthStorage; authDatabase: AuthDatabase; apiKeyStorage: ApiKeyStorage; apiKeyHeader: string; apiKeyScopes: boolean; roles: string[]; adminEmail: string; adminPassword: string; oauthProviders: Record; } export declare const defaultAuthFlowPlan: AuthFlowPlan; export interface ProjectConfigBundle { project: SoapProjectConfig; structure: SoapStructureConfig; api: SoapApiConfig; registry: SoapRegistryConfig; } export declare function createDefaultCapabilities(): ProjectCapabilities; export declare function createSoapConfigBundle(plan: ProjectPlan): ProjectConfigBundle; export declare function parseCsvOption(value: string | string[] | undefined, allowed: readonly T[]): T[]; export declare function authFlowFromProjectConfig(project: SoapProjectConfig): AuthFlowPlan; export declare const databaseOptions: DatabaseCapability[]; export declare const authOptions: AuthCapability[]; export declare const oauthProviderOptions: OAuthProviderPreset[]; export declare const messagingOptions: MessagingCapability[]; export declare const realtimeOptions: RealtimeCapability[]; export declare const telemetryOptions: TelemetryCapability[]; export declare const docsOptions: DocsCapability[]; export declare const contractsOptions: ContractsCapability[]; export declare const zonesOptions: ApiZone[]; export declare const oauthProviderLabels: Record; export declare const oauthProviderDefaultScopes: Record; export declare function createOAuthProviderConfig(provider: OAuthProviderPreset): OAuthProviderConfig; export declare function targetRoot(cwd: string, name: string): string; export declare function createProjectFiles(plan: ProjectPlan): PlannedFile[]; export interface ResourceRegistration { functionName: string; importPath: string; } export interface DatabaseFeatureRegistration { initFunctionName: string; seedFunctionName: string; resetFunctionName: string; importPath: string; } export declare function createResourcesTs(resources: ResourceRegistration[]): string; export declare function createDatabaseTs(features: DatabaseFeatureRegistration[]): string; export interface ControllerRegistration { className: string; importPath: string; spread?: boolean; } export declare function createControllersTs(controllers: ControllerRegistration[]): string;