import type { AuthMode } from "./auth-backup.js"; /** * 目标对象存储(S3 兼容:AWS S3 / Cloudflare R2 / Backblaze B2 / Supabase Storage 的 S3 端点均可)。 * 凭据永远来自用户自己的环境 —— CLI 不托管任何密钥,这是"数据不落我们盘"叙事在开源侧的兑现。 */ export interface StorageConfig { endpoint?: string; region: string; bucket: string; accessKeyId: string; secretAccessKey: string; prefix: string; forcePathStyle: boolean; } /** * 备份"源":Supabase Storage 的 S3 兼容端点。存在则一并同步 Storage 文件; * 缺省则只备数据库。密钥在 Supabase 控制台 Storage → S3 Access Keys 生成。 */ export interface SupabaseStorageConfig { endpoint: string; region: string; accessKeyId: string; secretAccessKey: string; buckets?: string[]; } export interface BackupConfig { databaseUrl: string; projectName: string; schemas: string[]; storage?: StorageConfig; supabaseStorage?: SupabaseStorageConfig; /** * 2.10.0 起:是否另外备份 Supabase Auth 用户(auth.users + auth.identities,见 auth-backup.ts)。 * 库调用方不传 = "off",备份与之前逐字节一致;托管 worker 显式传值才打开。 * CLI 的 loadConfig 默认 "default"(做得了就备,做不了只警告);--auth / BACKUPDRILL_AUTH=on 给 "on",关掉给 "off"。 */ auth?: AuthMode; } /** CLI 读出来的配置一定带桶:loadConfig 缺了桶直接报错,所以返回类型里 storage 是必填 */ export type LoadedBackupConfig = BackupConfig & { storage: StorageConfig; }; /** 需要桶的地方先过这一道:没配桶时给一句能看懂的报错,而不是读 undefined 的属性。 */ export declare function requireBucket(config: BackupConfig): StorageConfig; interface RawConfig { databaseUrl?: string; projectName?: string; schemas?: string[]; storage?: Partial; supabaseStorage?: Partial; pingUrl?: string; /** 配置文件里写 true / false;CLI 是 --auth / --no-auth,环境变量 BACKUPDRILL_AUTH=on|off */ auth?: boolean; } /** * 监控 ping 网址(Healthchecks.io 那种):flag > 环境变量 > 配置文件,空串算没配 * (GitHub Actions 里没设的 secret 展开就是空串)。不放进 loadConfig:配置缺项时 * loadConfig 直接抛错,而这恰恰是要报 /fail 的情况,所以网址得先单独读出来。 */ export declare function resolvePingUrl(opts: { flag?: string; configPath: string; }): Promise; /** 合并优先级:显式 flag > 环境变量 > 配置文件。 */ export declare function loadConfig(opts: { configPath: string; overrides: RawConfig; }): Promise; export {};