import { SupabaseClient, User } from '@supabase/supabase-js';

type OutputFormat = "text" | "json";
interface CliOutputOptions {
    json?: boolean;
}
interface StoredProfile {
    accessToken: string;
    refreshToken?: string;
    expiresAt?: number;
    tokenType?: string;
    user?: {
        id: string;
        email?: string;
    };
}
interface StoredConfig {
    activeProfile: string;
    profiles: Record<string, StoredProfile>;
    supabaseUrl?: string;
    supabaseAnonKey?: string;
}
interface AuthContext {
    supabase: SupabaseClient;
    profile?: StoredProfile;
    user: User;
    saveProfile?: (profile: StoredProfile) => Promise<void>;
}
interface SiteRecord {
    id: string | number;
    url?: string;
    name?: string;
    status?: string;
    notes?: string | null;
    pull_zone_id?: string | number | null;
    storage_zone_id?: string | number | null;
    static_site_id?: string | number | null;
    static_site_record_id?: string | number | null;
    site_id?: string | number | null;
    mount_path?: string | null;
    bedrock?: boolean | null;
    [key: string]: unknown;
}
interface SiteMetaRecord {
    id?: string | number;
    site_id?: string | number;
    email?: string;
    username?: string;
    password?: string;
    basic_auth_user?: string;
    basic_auth_password?: string;
    admin_url?: string;
    secret_key?: string;
    [key: string]: unknown;
}
interface CommandGlobals {
    json?: boolean;
    profile?: string;
}

declare function loginWithToken(options: {
    token: string;
    refreshToken?: string;
    profile?: string;
}): Promise<StoredProfile>;
declare function loginWithEmail(options: {
    email?: string;
    otp?: string;
    createUser?: boolean;
    profile?: string;
}): Promise<StoredProfile>;
declare function logout(profile?: string): Promise<boolean>;

interface AccountUsage {
    accountId: string;
    sites: number;
    storageBytes: number;
    bandwidthBytes: number;
    storageGb: string;
    bandwidthGb: string;
    subscription?: unknown;
}
declare function getAccountSubscription(supabase: SupabaseClient, accountId: string): Promise<unknown | null>;
declare function getAccountUsage(supabase: SupabaseClient, accountId: string, options?: {
    includeSubscription?: boolean;
}): Promise<AccountUsage>;

declare const SITE_ALERT_ACTIONS: readonly ["status", "save", "send_test"];
declare const MAX_SITE_ALERT_RECIPIENTS = 10;
declare const SITE_ALERT_DEFAULTS: {
    readonly enabled: false;
    readonly uptimeEnabled: true;
    readonly uptimeThresholdMinutes: 10;
    readonly performanceEnabled: true;
    readonly performanceThreshold: 70;
    readonly seoCriticalEnabled: true;
    readonly notifyOnRecovery: true;
};
type SiteAlertAction = (typeof SITE_ALERT_ACTIONS)[number];
type SiteAlertUnknownFields = Record<string, unknown>;
interface SiteAlertSetting extends SiteAlertUnknownFields {
    site_id: number;
    enabled: boolean;
    uptime_enabled: boolean;
    uptime_threshold_minutes: number;
    performance_enabled: boolean;
    performance_threshold: number;
    seo_critical_enabled: boolean;
    notify_on_recovery: boolean;
    recipients: string[];
    created_at?: string | null;
    updated_at?: string | null;
}
interface SiteAlertCondition extends SiteAlertUnknownFields {
    available?: boolean;
    breached?: boolean;
    currentValue?: unknown;
    summary?: string;
}
interface SiteAlertIncident extends SiteAlertUnknownFields {
    id?: string;
    alert_type?: string;
    status?: string;
    summary?: string;
    threshold_value?: unknown;
    current_value?: unknown;
    details?: SiteAlertUnknownFields;
    triggered_at?: string | null;
}
interface SiteAlertEvent extends SiteAlertUnknownFields {
    id?: string;
    alert_type?: string;
    event_type?: string;
    severity?: string;
    summary?: string;
    recipients?: string[];
    delivery_status?: string;
    delivered_at?: string | null;
    error_message?: string | null;
    created_at?: string | null;
}
interface SiteAlertsStatus extends SiteAlertUnknownFields {
    configured: boolean;
    setting: SiteAlertSetting;
    conditions: Record<string, SiteAlertCondition>;
    incidents: SiteAlertIncident[];
    events: SiteAlertEvent[];
}
interface SaveSiteAlertsOptions {
    enabled: boolean;
    recipients?: readonly string[];
    uptimeEnabled?: boolean;
    uptimeThresholdMinutes?: number;
    performanceEnabled?: boolean;
    performanceThreshold?: number;
    seoCriticalEnabled?: boolean;
    notifyOnRecovery?: boolean;
}
interface SaveSiteAlertsResult extends SiteAlertUnknownFields {
    setting: SiteAlertSetting;
    evaluation: unknown;
    incidents: SiteAlertIncident[];
    events: SiteAlertEvent[];
}
interface SendTestSiteAlertResult extends SiteAlertUnknownFields {
    event: SiteAlertEvent;
}
declare function getSiteAlerts(supabase: SupabaseClient, siteId: string | number): Promise<SiteAlertsStatus>;
declare function saveSiteAlerts(supabase: SupabaseClient, siteId: string | number, options: SaveSiteAlertsOptions): Promise<SaveSiteAlertsResult>;
declare function sendTestSiteAlert(supabase: SupabaseClient, siteId: string | number, recipients: readonly string[]): Promise<SendTestSiteAlertResult>;

declare function getConfigPath(): string;
declare function getEmptyConfig(): StoredConfig;
declare function loadConfig(): Promise<StoredConfig>;
declare function saveConfig(config: StoredConfig): Promise<void>;
declare function getProfile(profileName?: string): Promise<{
    config: StoredConfig;
    profileName: string;
    profile: StoredProfile | undefined;
}>;
declare function setProfile(profile: StoredProfile, profileName?: string): Promise<void>;
declare function removeProfile(profileName?: string): Promise<boolean>;
declare function getSupabaseConfig(config: StoredConfig): {
    url: string;
    anonKey: string;
};

declare const DEFAULT_SUPABASE_URL = "https://api.static.studio";
declare const DEFAULT_SUPABASE_ANON_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InlpbmdxZGltdmtlcW9udGFlc3hrIiwicm9sZSI6ImFub24iLCJpYXQiOjE3Mjc3OTA4MzQsImV4cCI6MjA0MzM2NjgzNH0.wgw5P41QmXkdPkek9sUFBWEKTh_8ZVFLTmBwVGohVGM";
declare const DEFAULT_TLD = "onstatic.studio";
declare const SUPABASE_API_VERSION = 2;

interface DomainMutationResult {
    domain: string;
    primary?: string | null;
    removed?: string[];
    connect?: unknown;
    refresh?: unknown;
    registry?: unknown;
    export?: unknown;
    warnings?: string[];
}
declare function getHostnames(supabase: SupabaseClient, pullZoneId: string): Promise<string[]>;
declare function addDomain(supabase: SupabaseClient, siteId: string, domain: string): Promise<DomainMutationResult>;
declare function setPrimaryDomain(supabase: SupabaseClient, siteId: string, domain: string): Promise<DomainMutationResult>;
declare function setMountPath(supabase: SupabaseClient, siteId: string, publicDomain: string, mountPath: string): Promise<DomainMutationResult & {
    mount_path: string;
}>;
declare function removeDomain(supabase: SupabaseClient, siteId: string, domain: string): Promise<DomainMutationResult>;
declare function issueSsl(supabase: SupabaseClient, siteId: string, domain: string, includeSecondary?: boolean): Promise<unknown>;
declare function transferDomain(supabase: SupabaseClient, sourceSiteId: string, targetSiteId: string, domain: string): Promise<unknown>;

interface MigrationLogResult {
    content: string;
    line_count: number;
}
interface SiteReleaseRecord {
    id: string;
    site_id: string | number;
    release_id: string;
    environment: string;
    status: string;
    snapshot_id?: string | null;
    deploy_id?: string | null;
    created_at?: string;
    [key: string]: unknown;
}
interface RollbackSnapshot {
    id: string;
    snapshot_id?: string;
    deploy_id?: string;
    [key: string]: unknown;
}
interface RollbackStatus {
    available: boolean;
    snapshots: RollbackSnapshot[];
    status: unknown;
    max_snapshots: number;
    error: string | null;
    [key: string]: unknown;
}
declare function cancelExport(supabase: SupabaseClient, siteId: string): Promise<unknown>;
declare function getMigrationLog(supabase: SupabaseClient, siteId: string): Promise<MigrationLogResult>;
declare function listProductionSiteReleases(supabase: SupabaseClient, siteId: string, limit?: number): Promise<SiteReleaseRecord[]>;
declare function getRollbackStatus(supabase: SupabaseClient, siteId: string): Promise<RollbackStatus>;
declare function listRollbackSnapshots(supabase: SupabaseClient, siteId: string): Promise<RollbackSnapshot[]>;
declare function startRollback(supabase: SupabaseClient, siteId: string, snapshotId: string): Promise<unknown>;
declare const listSiteReleases: typeof listProductionSiteReleases;
declare const getRollbackSnapshots: typeof listRollbackSnapshots;
declare const rollbackStaticExport: typeof startRollback;

interface EnvironmentRecord {
    id: string | number;
    site_id?: string | number;
    name?: string;
    title?: string;
    url?: string;
    storage_zone_id?: string | number | null;
    pull_zone_id?: string | number | null;
    [key: string]: unknown;
}
interface EnvironmentStatus {
    enabled: boolean;
    addon?: unknown;
    environments: EnvironmentRecord[];
}
type EnvironmentReference = string | number;
interface EnvironmentHostnameState {
    environment: EnvironmentRecord;
    managedHostname: string;
    hostnames: string[];
    customHostnames: string[];
}
interface EnvironmentDomainMutationResult extends EnvironmentHostnameState {
    domain?: string;
    removed: string[];
    unchanged?: boolean;
    connect?: unknown;
    wordpress?: unknown;
    edgeRules?: unknown;
    warnings: string[];
}
declare function resolveEnvironment(supabase: SupabaseClient, siteId: string, reference: EnvironmentReference): Promise<EnvironmentRecord>;
declare function listEnvironmentHostnames(supabase: SupabaseClient, siteId: string, reference: EnvironmentReference): Promise<EnvironmentHostnameState>;
declare function connectEnvironmentDomain(supabase: SupabaseClient, siteId: string, reference: EnvironmentReference, domain: string): Promise<EnvironmentDomainMutationResult>;
declare function removeEnvironmentDomains(supabase: SupabaseClient, siteId: string, reference: EnvironmentReference): Promise<EnvironmentDomainMutationResult>;
declare function issueEnvironmentSsl(supabase: SupabaseClient, siteId: string, reference: EnvironmentReference, domain: string): Promise<unknown>;
declare const connectEnvironmentCustomDomain: typeof connectEnvironmentDomain;
declare const removeEnvironmentCustomDomains: typeof removeEnvironmentDomains;
declare function parentSubdomainFromAdminUrl(adminUrl: string): string;
declare function getEnvironmentStatus(supabase: SupabaseClient, siteId: string): Promise<EnvironmentStatus>;
declare function enableEnvironments(supabase: SupabaseClient, siteId: string): Promise<EnvironmentStatus>;
declare function createEnvironment(supabase: SupabaseClient, siteId: string, title: string): Promise<unknown>;
declare function deleteEnvironment(supabase: SupabaseClient, siteId: string, nameOrTitle: string, options?: {
    disableIntegration?: boolean;
}): Promise<unknown>;
declare function disableEnvironments(supabase: SupabaseClient, siteId: string): Promise<{
    disabled: true;
    deleted: unknown[];
}>;

declare class CliError extends Error {
    exitCode: number;
    constructor(message: string, exitCode?: number);
}
declare function cliErrorMessage(error: unknown): string;
declare function cliErrorExitCode(error: unknown): number;
declare function cliErrorJson(error: unknown): {
    error: {
        message: string;
        name: string;
        exitCode: number;
    };
};
declare function resolveFunctionError(error: unknown): Promise<Error>;
declare function assertOk<T>(data: T, error: unknown, fallback?: string): asserts data is T;

declare const HEALTH_CHECK_TYPES: readonly ["uptime", "response_time", "ssl", "dns", "cdn", "static_freshness", "robots", "sitemap", "indexability", "ai_readiness"];
declare const SEO_FILE_ACTIONS: readonly ["list", "save", "delete", "apply", "check_sitemaps"];
declare const INDEXNOW_ACTIONS: readonly ["status", "enable", "disable", "set_auto_submit", "submit"];
declare const MAX_HEALTH_SITES_PER_RUN = 25;
declare const MAX_HEALTH_OVERVIEW_ROWS = 100;
declare const MAX_SEO_FILE_BYTES: number;
type HealthCheckType = (typeof HEALTH_CHECK_TYPES)[number];
type SeoFileAction = (typeof SEO_FILE_ACTIONS)[number];
type IndexNowAction = (typeof INDEXNOW_ACTIONS)[number];
type HealthRecord = Record<string, unknown>;
interface SiteDeployManifest extends HealthRecord {
    id: string;
    site_id: string | number;
    deploy_id?: string | null;
    health_status?: string | null;
    finished_at?: string | null;
}
interface SiteHealthSnapshot extends HealthRecord {
    site_id: string | number;
    overall_status?: string;
    availability_status?: string;
    freshness_status?: string;
    seo_status?: string;
    open_issue_count?: number;
    last_checked_at?: string | null;
}
interface SiteHealthIssue extends HealthRecord {
    id: string;
    site_id: string | number;
    pillar?: string;
    check_type?: string;
    severity?: string;
    title?: string;
    status?: string;
    last_seen_at?: string;
}
interface SiteHealthResult extends HealthRecord {
    id: string;
    site_id: string | number;
    pillar?: string;
    check_type?: string;
    status?: string;
    checked_at?: string;
}
interface SiteRelease extends HealthRecord {
    id: string;
    site_id: string | number;
    release_id?: string;
    deploy_id?: string | null;
    status?: string;
    created_at?: string;
}
interface SiteDeployDiff extends HealthRecord {
    id: string;
    site_id: string | number;
    from_manifest_id?: string | null;
    to_manifest_id: string;
    status?: string;
    summary?: HealthRecord;
    details?: HealthRecord;
}
interface HealthOverviewOptions {
    issueLimit?: number;
    resultLimit?: number;
    releaseLimit?: number;
}
interface HealthOverview {
    siteId: string;
    latestManifest: SiteDeployManifest | null;
    snapshot: SiteHealthSnapshot | null;
    openIssues: SiteHealthIssue[];
    recentResults: SiteHealthResult[];
    recentReleases: SiteRelease[];
    latestDiff: SiteDeployDiff | null;
}
interface HealthCheckSiteResult extends HealthRecord {
    site_id: string;
    url?: string;
    checks?: HealthCheckType[];
    errors?: Array<{
        check_type: string;
        error: string;
    }>;
    error?: string;
    alerts?: unknown;
}
interface HealthCheckResponse {
    checked: number;
    failed?: number;
    results: HealthCheckSiteResult[];
}
interface SeoFileRecord extends HealthRecord {
    id?: string;
    site_id: string | number;
    path: string;
    file_kind?: string;
    mime_type?: string;
    content_text?: string;
    size?: number;
    content_hash?: string | null;
    status?: string;
    last_pushed_at?: string | null;
    last_push_status?: string | null;
    last_push_error?: string | null;
}
interface SaveSeoFileOptions {
    path: string;
    content: string;
    fileKind?: string;
    mimeType?: string;
}
interface SeoFileApplyResult {
    applied: number;
    errors: string[];
}
interface SitemapCheck extends HealthRecord {
    path: string;
    url: string;
    status: number;
    ok: boolean;
    valid_xml: boolean;
    bytes?: number;
    error?: string;
}
interface IndexNowSetting extends HealthRecord {
    id?: string;
    site_id?: string | number;
    enabled?: boolean;
    auto_submit?: boolean;
    key_path?: string;
    key_location?: string | null;
    endpoint?: string;
    last_submitted_at?: string | null;
    last_submission_status?: string | null;
    last_submission_details?: HealthRecord;
}
interface IndexNowSubmission extends HealthRecord {
    status?: string;
    reason?: string;
}
interface IndexNowStatus extends HealthRecord {
    setting: IndexNowSetting | null;
    latest_release: SiteRelease | null;
    eligible_url_count: number;
    skipped_reason?: string;
    submission?: IndexNowSubmission;
}
interface SubmitIndexNowOptions {
    releaseId?: string;
}
declare function getHealthOverview(supabase: SupabaseClient, siteId: string, options?: HealthOverviewOptions): Promise<HealthOverview>;
declare function runHealthCheck(supabase: SupabaseClient, siteIdOrIds: string | readonly string[], checkTypes?: readonly string[]): Promise<HealthCheckResponse>;
declare function normalizeSeoFilePath(value: string): string;
declare function validateSeoFileContent(content: string): string;
declare function listSeoFiles(supabase: SupabaseClient, siteId: string): Promise<SeoFileRecord[]>;
declare function saveSeoFile(supabase: SupabaseClient, siteId: string, options: SaveSeoFileOptions): Promise<SeoFileRecord>;
declare function deleteSeoFile(supabase: SupabaseClient, siteId: string, path: string): Promise<SeoFileRecord | null>;
declare function applySeoFiles(supabase: SupabaseClient, siteId: string): Promise<SeoFileApplyResult>;
declare function checkSitemaps(supabase: SupabaseClient, siteId: string): Promise<SitemapCheck[]>;
declare function getIndexNowStatus(supabase: SupabaseClient, siteId: string): Promise<IndexNowStatus>;
declare function enableIndexNow(supabase: SupabaseClient, siteId: string): Promise<IndexNowStatus>;
declare function disableIndexNow(supabase: SupabaseClient, siteId: string): Promise<IndexNowStatus>;
declare function setIndexNowAutoSubmit(supabase: SupabaseClient, siteId: string, autoSubmit: boolean): Promise<IndexNowStatus>;
declare function submitIndexNow(supabase: SupabaseClient, siteId: string, options?: SubmitIndexNowOptions): Promise<IndexNowStatus>;

declare const LOG_LEVELS: readonly ["all", "error", "warning", "notice", "info"];
type DebugLogLevel = (typeof LOG_LEVELS)[number];
interface DebugLogOptions {
    tail?: number;
    level?: string;
    search?: string;
    newestFirst?: boolean;
    outputFile?: string;
    overwriteOutput?: boolean;
    timeoutMs?: number;
    maxBytes?: number;
    allowInsecureHttp?: boolean;
    allowPrivateNetwork?: boolean;
}
interface DebugLogResult {
    siteId: string;
    endpoint: string;
    bytes: number;
    totalLines: number;
    returnedLines: number;
    truncated: boolean;
    log: string;
}
declare function wpBaseUrlFromAdminUrl(adminUrl: string): URL;
declare function getDebugLog(supabase: SupabaseClient, siteId: string, options?: DebugLogOptions): Promise<DebugLogResult>;

interface SiteStatisticsResult {
    siteId: string;
    pullZoneId: string;
    storageZoneId?: string;
    environmentStorageZoneIds: string[];
    statistics: unknown;
}
interface PerformanceRunOptions {
    url?: string;
    force?: boolean;
}
declare function getEnvironmentStorageZoneIds(supabase: SupabaseClient, siteId: string): Promise<string[]>;
declare function runPerformanceTest(supabase: SupabaseClient, siteId: string, options?: PerformanceRunOptions): Promise<unknown>;
declare function getSiteStatistics(supabase: SupabaseClient, siteId: string): Promise<SiteStatisticsResult>;
declare function listPerformanceReports(supabase: SupabaseClient, siteId: string, limit?: number): Promise<unknown[]>;

declare function listBackups(supabase: SupabaseClient, siteId: string, refresh?: boolean): Promise<unknown>;
declare function queueBackup(supabase: SupabaseClient, action: "create" | "delete" | "restore" | "sync", siteId: string, options?: {
    date?: string;
    backupId?: string;
}): Promise<unknown>;
declare function getSshInfo(supabase: SupabaseClient, userId: string): Promise<unknown>;
declare function queueSshKey(supabase: SupabaseClient, action: "add-ssh-key" | "add-ssh-key-to-site" | "remove-ssh-key-to-site", siteId: string, userId: string, options?: {
    publicKey?: string;
    keyId?: string | number;
}): Promise<unknown>;
declare function deleteSshKey(supabase: SupabaseClient, userId: string, keyId: string): Promise<unknown>;

interface UpdateRedirectOptions {
    fromPath?: string;
    toPath?: string;
    isActive?: boolean;
}
interface DeleteRedirectOptions {
    pullZoneId?: string;
    db?: boolean;
    edgeRule?: boolean;
}
interface RefreshRedirectRulesOptions {
    importExistingRedirects?: boolean;
}
declare function refreshRedirectRules(supabase: SupabaseClient, siteId: string, options?: RefreshRedirectRulesOptions): Promise<unknown>;
declare function listRedirects(supabase: SupabaseClient, siteId: string, pullZoneId?: string): Promise<unknown>;
declare function updateRedirect(supabase: SupabaseClient, siteId: string, redirectId: string, options: UpdateRedirectOptions): Promise<unknown>;
declare function setRedirectActive(supabase: SupabaseClient, siteId: string, redirectId: string, isActive: boolean): Promise<unknown>;
declare function createRedirect(supabase: SupabaseClient, siteId: string, fromPath: string, toPath: string, options?: {
    pullZoneId?: string;
    domain?: string;
}): Promise<unknown>;
declare function deleteRedirect(supabase: SupabaseClient, siteId: string, redirectId: string, options?: DeleteRedirectOptions): Promise<unknown>;
declare function bulkCreateRedirects(supabase: SupabaseClient, siteId: string, filePath: string, options?: {
    pullZoneId?: string;
    domain?: string;
}): Promise<unknown>;

declare const REPORT_CADENCES: readonly ["weekly", "monthly"];
type ReportCadence = (typeof REPORT_CADENCES)[number];
interface ReportRecord {
    id: string;
    site_id: string | number;
    report_kind?: string;
    generation_status?: string;
    outcome_status?: string;
    pdf_storage_path?: string | null;
    created_at?: string;
    [key: string]: unknown;
}
interface ReportShareRecord {
    id: string;
    report_id: string;
    site_id: string | number;
    public_url?: string;
    recipient_email?: string;
    expires_at?: string | null;
    revoked_at?: string | null;
    [key: string]: unknown;
}
interface ReportScheduleRecord {
    id: string;
    site_id: string | number;
    site_ids?: Array<string | number>;
    scope?: "site" | "portfolio";
    cadence: ReportCadence;
    enabled?: boolean;
    name?: string;
    recipient_email?: string;
    auto_share?: boolean;
    [key: string]: unknown;
}
interface CreateReportShareOptions {
    recipientEmail?: string;
    password?: string;
    expiresAt?: string;
}
interface SaveReportScheduleOptions {
    scheduleId?: string;
    name?: string;
    autoShare?: boolean;
    recipientEmail?: string;
}
type ReportScheduleSelector = string | {
    scheduleId: string;
} | {
    siteId: string | number;
    cadence: string;
};
declare function listReportsBySite(supabase: SupabaseClient, siteId: string | number, limit?: number): Promise<ReportRecord[]>;
declare function getReportById(supabase: SupabaseClient, reportId: string): Promise<ReportRecord>;
declare function generateReportPdf(supabase: SupabaseClient, reportId: string): Promise<ReportRecord>;
declare function getSignedReportPdfUrl(supabase: SupabaseClient, reportId: string): Promise<string>;
declare function listReportShares(supabase: SupabaseClient, reportId: string): Promise<ReportShareRecord[]>;
declare function createReportShare(supabase: SupabaseClient, reportId: string, options?: CreateReportShareOptions): Promise<ReportShareRecord>;
declare function revokeReportShare(supabase: SupabaseClient, reportId: string, shareId: string): Promise<ReportShareRecord>;
declare function listReportSchedules(supabase: SupabaseClient, siteId?: string | number): Promise<ReportScheduleRecord[]>;
declare function saveReportSchedule(supabase: SupabaseClient, siteIds: Array<string | number>, cadence: string, options?: SaveReportScheduleOptions): Promise<ReportScheduleRecord>;
declare function disableReportSchedule(supabase: SupabaseClient, selector: ReportScheduleSelector): Promise<ReportScheduleRecord>;
declare function deleteReportSchedule(supabase: SupabaseClient, selector: ReportScheduleSelector): Promise<{
    deleted: boolean;
    schedule_id: string;
}>;
declare const listReports: typeof listReportsBySite;
declare const getReport: typeof getReportById;
declare const getSignedPdfUrl: typeof getSignedReportPdfUrl;

interface CreateSiteOptions {
    name?: string;
    subdomain?: string;
    tld?: string;
    url?: string;
    /** @deprecated Studio derives the admin URL on the server. */
    adminUrl?: string;
    email: string;
    userId: string;
    bedrock?: boolean;
    hasMigration?: boolean;
    phpVersion?: string;
    /** @deprecated Studio derives account ownership from the authenticated user. */
    ownerAccountId?: string | null;
    mountPath?: string;
}
declare function normalizeManagedSiteUrl(value: string): string;
declare function generateSiteSeed(options?: Partial<CreateSiteOptions>): {
    name: string;
    subdomain: string;
    tld: string;
    url: string;
    adminUrl: string;
};
declare function listSites(supabase: SupabaseClient, user: {
    id: string;
    email?: string;
}, options?: {
    page?: number;
    pageSize?: number;
    search?: string;
    sort?: string;
    ascending?: boolean;
}): Promise<{
    data: SiteRecord[];
    count: number;
}>;
declare function getSite(supabase: SupabaseClient, siteId: string): Promise<SiteRecord>;
declare function getSiteMeta(supabase: SupabaseClient, siteId: string, email?: string): Promise<SiteMetaRecord>;
declare function basicAuthCredentialsFromMeta(meta: SiteMetaRecord): {
    basic_auth_user: string;
    basic_auth_password: string;
    admin_url?: string;
};
declare function getBasicAuthCredentials(supabase: SupabaseClient, siteId: string, email?: string): Promise<ReturnType<typeof basicAuthCredentialsFromMeta>>;
declare function getMagicLoginLink(supabase: SupabaseClient, siteId: string, email?: string): Promise<{
    url: string;
    siteId: string;
    staticSiteId: string;
    email: string;
}>;
declare function createSite(supabase: SupabaseClient, options: CreateSiteOptions): Promise<{
    site: SiteRecord;
    queue: unknown;
    credentials: Record<string, string>;
}>;
declare function updateSite(supabase: SupabaseClient, siteId: string, changes: {
    name?: string;
    notes?: string;
    status?: string;
}): Promise<SiteRecord>;
declare function deleteSite(supabase: SupabaseClient, siteId: string): Promise<unknown>;
type SitePushMode = "full" | "changes";
type SiteExportType = "export" | "update";
declare function sitePushModeToExportType(mode?: string | undefined): SiteExportType;
declare function exportSite(supabase: SupabaseClient, siteId: string, type?: SiteExportType): Promise<unknown>;
declare function pushSite(supabase: SupabaseClient, siteId: string, mode?: string | undefined): Promise<unknown>;
declare function redeploySite(supabase: SupabaseClient, siteId: string): Promise<unknown>;
declare function getSiteMigrationSubdomain(supabase: SupabaseClient, siteId: string): Promise<string>;
declare function retryFailedDeployment(supabase: SupabaseClient, siteId: string): Promise<unknown>;
declare function getChangesCount(supabase: SupabaseClient, siteId: string): Promise<number>;
declare function clearCache(supabase: SupabaseClient, siteId: string): Promise<unknown>;
declare function siteSummaryRows(sites: SiteRecord[]): Record<string, unknown>[];

interface TagRecord {
    id: string | number;
    account_id?: string;
    name: string;
    color?: string;
    [key: string]: unknown;
}
declare function listTags(supabase: SupabaseClient, accountId: string): Promise<TagRecord[]>;
declare function listSiteTags(supabase: SupabaseClient, siteId: string): Promise<TagRecord[]>;
declare function createTag(supabase: SupabaseClient, accountId: string, name: string, color: string): Promise<TagRecord>;
declare function updateTag(supabase: SupabaseClient, tagId: string, changes: {
    name?: string;
    color?: string;
}): Promise<TagRecord>;
declare function deleteTag(supabase: SupabaseClient, tagId: string): Promise<{
    deleted: true;
    tagId: string;
}>;
declare function assignTagToSite(supabase: SupabaseClient, siteId: string, tagId: string): Promise<{
    assigned: true;
    siteId: string;
    tagId: string;
}>;
declare function removeTagFromSite(supabase: SupabaseClient, siteId: string, tagId: string): Promise<{
    removed: true;
    siteId: string;
    tagId: string;
}>;

interface TeamMemberRecord {
    id: string | number;
    account_id?: string;
    member_id: string;
    created_at?: string;
    email?: string;
    [key: string]: unknown;
}
interface TeamBulkInviteOptions {
    role?: string;
    inviteMissing?: boolean;
    maxEmails?: number;
}
interface TeamInviteResult {
    email: string;
    status: "added" | "invited" | "skipped" | "error";
    userId?: string;
    sitesProcessed: number;
    message?: string;
}
declare function parseEmailInputFile(filePath: string, maxEmails?: number): Promise<string[]>;
declare function listTeamMembers(supabase: SupabaseClient, accountId: string): Promise<TeamMemberRecord[]>;
declare function bulkInviteTeamMembers(supabase: SupabaseClient, accountId: string, emails: string[], options?: TeamBulkInviteOptions): Promise<TeamInviteResult[]>;
declare function removeTeamMember(supabase: SupabaseClient, accountId: string, memberId: string, email?: string): Promise<{
    removed: true;
    memberId: string;
    sitesProcessed: number;
}>;

type MigrationObjectInfo = {
    bucket: string;
    key: string;
    contentType: string;
    size: number;
};
interface UploadMigrationOptions {
    filePath: string;
    subdomain: string;
    allowAnyZipName?: boolean;
    onProgress?: (progress: {
        loaded: number;
        total?: number;
    }) => void;
}
declare function getMigrationObjectInfo(filePath: string, subdomain: string, allowAnyZipName?: boolean): MigrationObjectInfo;
declare function uploadMigrationFile(supabase: SupabaseClient, options: UploadMigrationOptions): Promise<{
    bucket: string;
    key: string;
    size: number;
}>;

declare function listUsers(supabase: SupabaseClient, siteId: string): Promise<unknown[]>;
declare function findUserByEmail(supabase: SupabaseClient, email: string): Promise<{
    id: string;
    email: string;
} | null>;
declare function inviteUser(supabase: SupabaseClient, siteId: string, email: string, role: string, ownerAccountId?: string | null): Promise<unknown>;
declare function addExistingUser(supabase: SupabaseClient, siteId: string, email: string, role: string, siteUserId?: string, ownerAccountId?: string | null): Promise<unknown>;
declare function removeUser(supabase: SupabaseClient, siteId: string, user: string, email?: string): Promise<unknown>;
declare function makeAdmin(supabase: SupabaseClient, siteId: string, user: string): Promise<unknown>;

declare function assertSafeId(value: string, label?: string): string;
declare function parsePositiveInteger(value: unknown, label: string, options?: {
    min?: number;
    max?: number;
}): number;
declare function sanitizeSearchTerm(value: string | undefined, label?: string): string | undefined;
declare function requireAllowedValue<T extends string>(value: string, allowed: readonly T[], label: string): T;
declare function normalizeEmail(value: string): string;
declare function normalizeEmailList(values: string[], options?: {
    max?: number;
}): string[];
declare function normalizeHexColor(value: string): string;
declare function normalizeTagName(value: string): string;
declare function normalizeEnvironmentTitle(value: string): string;
declare function normalizeMountPath(value: unknown): string;
declare function environmentSlug(value: string): string;
declare function assertReadableFileWithinLimit(filePath: string, maxBytes: number): Promise<void>;

export { type AccountUsage, type AuthContext, CliError, type CliOutputOptions, type CommandGlobals, type CreateReportShareOptions, type CreateSiteOptions, DEFAULT_SUPABASE_ANON_KEY, DEFAULT_SUPABASE_URL, DEFAULT_TLD, type DebugLogLevel, type DebugLogOptions, type DebugLogResult, type DeleteRedirectOptions, type DomainMutationResult, type EnvironmentDomainMutationResult, type EnvironmentHostnameState, type EnvironmentRecord, type EnvironmentReference, type EnvironmentStatus, HEALTH_CHECK_TYPES, type HealthCheckResponse, type HealthCheckSiteResult, type HealthCheckType, type HealthOverview, type HealthOverviewOptions, type HealthRecord, INDEXNOW_ACTIONS, type IndexNowAction, type IndexNowSetting, type IndexNowStatus, type IndexNowSubmission, MAX_HEALTH_OVERVIEW_ROWS, MAX_HEALTH_SITES_PER_RUN, MAX_SEO_FILE_BYTES, MAX_SITE_ALERT_RECIPIENTS, type MigrationLogResult, type OutputFormat, type PerformanceRunOptions, type RefreshRedirectRulesOptions, type ReportCadence, type ReportRecord, type ReportScheduleRecord, type ReportScheduleSelector, type ReportShareRecord, type RollbackSnapshot, type RollbackStatus, SEO_FILE_ACTIONS, SITE_ALERT_ACTIONS, SITE_ALERT_DEFAULTS, SUPABASE_API_VERSION, type SaveReportScheduleOptions, type SaveSeoFileOptions, type SaveSiteAlertsOptions, type SaveSiteAlertsResult, type SendTestSiteAlertResult, type SeoFileAction, type SeoFileApplyResult, type SeoFileRecord, type SiteAlertAction, type SiteAlertCondition, type SiteAlertEvent, type SiteAlertIncident, type SiteAlertSetting, type SiteAlertUnknownFields, type SiteAlertsStatus, type SiteDeployDiff, type SiteDeployManifest, type SiteExportType, type SiteHealthIssue, type SiteHealthResult, type SiteHealthSnapshot, type SiteMetaRecord, type SitePushMode, type SiteRecord, type SiteRelease, type SiteReleaseRecord, type SiteStatisticsResult, type SitemapCheck, type StoredConfig, type StoredProfile, type SubmitIndexNowOptions, type TagRecord, type TeamBulkInviteOptions, type TeamInviteResult, type TeamMemberRecord, type UpdateRedirectOptions, type UploadMigrationOptions, addDomain, addExistingUser, applySeoFiles, assertOk, assertReadableFileWithinLimit, assertSafeId, assignTagToSite, basicAuthCredentialsFromMeta, bulkCreateRedirects, bulkInviteTeamMembers, cancelExport, checkSitemaps, clearCache, cliErrorExitCode, cliErrorJson, cliErrorMessage, connectEnvironmentCustomDomain, connectEnvironmentDomain, createEnvironment, createRedirect, createReportShare, createSite, createTag, deleteEnvironment, deleteRedirect, deleteReportSchedule, deleteSeoFile, deleteSite, deleteSshKey, deleteTag, disableEnvironments, disableIndexNow, disableReportSchedule, enableEnvironments, enableIndexNow, environmentSlug, exportSite, findUserByEmail, generateReportPdf, generateSiteSeed, getAccountSubscription, getAccountUsage, getBasicAuthCredentials, getChangesCount, getConfigPath, getDebugLog, getEmptyConfig, getEnvironmentStatus, getEnvironmentStorageZoneIds, getHealthOverview, getHostnames, getIndexNowStatus, getMagicLoginLink, getMigrationLog, getMigrationObjectInfo, getProfile, getReport, getReportById, getRollbackSnapshots, getRollbackStatus, getSignedPdfUrl, getSignedReportPdfUrl, getSite, getSiteAlerts, getSiteMeta, getSiteMigrationSubdomain, getSiteStatistics, getSshInfo, getSupabaseConfig, inviteUser, issueEnvironmentSsl, issueSsl, listBackups, listEnvironmentHostnames, listPerformanceReports, listProductionSiteReleases, listRedirects, listReportSchedules, listReportShares, listReports, listReportsBySite, listRollbackSnapshots, listSeoFiles, listSiteReleases, listSiteTags, listSites, listTags, listTeamMembers, listUsers, loadConfig, loginWithEmail, loginWithToken, logout, makeAdmin, normalizeEmail, normalizeEmailList, normalizeEnvironmentTitle, normalizeHexColor, normalizeManagedSiteUrl, normalizeMountPath, normalizeSeoFilePath, normalizeTagName, parentSubdomainFromAdminUrl, parseEmailInputFile, parsePositiveInteger, pushSite, queueBackup, queueSshKey, redeploySite, refreshRedirectRules, removeDomain, removeEnvironmentCustomDomains, removeEnvironmentDomains, removeProfile, removeTagFromSite, removeTeamMember, removeUser, requireAllowedValue, resolveEnvironment, resolveFunctionError, retryFailedDeployment, revokeReportShare, rollbackStaticExport, runHealthCheck, runPerformanceTest, sanitizeSearchTerm, saveConfig, saveReportSchedule, saveSeoFile, saveSiteAlerts, sendTestSiteAlert, setIndexNowAutoSubmit, setMountPath, setPrimaryDomain, setProfile, setRedirectActive, sitePushModeToExportType, siteSummaryRows, startRollback, submitIndexNow, transferDomain, updateRedirect, updateSite, updateTag, uploadMigrationFile, validateSeoFileContent, wpBaseUrlFromAdminUrl };
