import { CloudFrontClient } from '../aws/cloudfront';
import { CloudWatchLogsClient } from '../aws/cloudwatch-logs';
import { IAMClient } from '../aws/iam';
import { LambdaClient } from '../aws/lambda';
import { STSClient } from '../aws/sts';
export interface StaticApiOriginOptions {
    distributionId: string;
    expectedAlias: string;
    functionName: string;
    profile?: string;
    region?: string;
    pathPattern?: string;
    originId?: string;
    roleName?: string;
    memorySize?: number;
    timeout?: number;
    logRetentionDays?: number;
    code?: string;
    apply?: boolean;
    confirm?: string;
}
export interface StaticApiOriginPlan {
    mode: 'plan' | 'apply';
    accountId: string;
    identityArn?: string;
    distribution: {
        id: string;
        arn: string;
        alias: string;
        domainName: string;
        status: string;
    };
    function: {
        name: string;
        existed: boolean;
        runtime: 'nodejs22.x';
        urlExisted: boolean;
        url?: string;
    };
    role: {
        name: string;
        existed: boolean;
        arn: string;
    };
    origin: {
        id: string;
        pathPattern: string;
        existed: boolean;
        behaviorExisted: boolean;
        accessControlExisted: boolean;
    };
    changes: string[];
    rollback: {
        command: string;
        removeFunction: boolean;
        removeRole: boolean;
    };
    applied: boolean;
}
export interface StaticApiOriginVerification {
    frontend: {
        url: string;
        status: number;
        sha256: string;
        unchanged?: boolean;
        bytes: number;
    };
    api: {
        url: string;
        status: number;
        latencyMs: number;
        healthy: boolean;
        body: unknown;
    };
    coldStart: {
        observed: boolean;
        initDurationMs?: number;
    };
    verifiedAt: string;
}
export interface StaticApiOriginDependencies {
    cloudfront: Pick<CloudFrontClient, 'getDistribution' | 'getDistributionConfig' | 'listOriginAccessControls' | 'findOrCreateOriginAccessControl' | 'upsertExistingDistributionOrigin'>;
    iam: Pick<IAMClient, 'getRole' | 'createRole' | 'putRolePolicy'>;
    lambda: Pick<LambdaClient, 'functionExists' | 'getFunction' | 'createFunctionWithCode' | 'updateFunctionCodeInline' | 'updateFunctionConfiguration' | 'waitForFunctionActive' | 'getFunctionUrl' | 'createFunctionUrl' | 'addPermission'>;
    logs: Pick<CloudWatchLogsClient, 'createLogGroup' | 'putRetentionPolicy'>;
    sts: Pick<STSClient, 'getCallerIdentity'>;
    sleep: (milliseconds: number) => Promise<void>;
}
export declare function createStaticApiOriginDependencies(options: Pick<StaticApiOriginOptions, 'profile' | 'region'>): StaticApiOriginDependencies;
export declare function deployStaticApiOrigin(options: StaticApiOriginOptions, injected?: StaticApiOriginDependencies): Promise<StaticApiOriginPlan>;
export declare function verifyStaticApiOrigin(options: {
    alias: string;
    expectedFrontendSha256?: string;
    logs?: Pick<CloudWatchLogsClient, 'filterLogEvents'>;
    functionName?: string;
    now?: () => Date;
}): Promise<StaticApiOriginVerification>;
export declare function estimateStaticApiOriginMonthlyCost(options: {
    requests: number;
    averageDurationMs: number;
    memoryMb?: number;
    includeFreeTier?: boolean;
}): {
    lambdaUsd: number;
    alwaysOnFargateAndAlbUsd: number;
    assumptions: string[];
};
