backupdrill 1.1.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -5
- package/dist/backup.js +33 -0
- package/dist/index.js +69 -7
- package/dist/manifest.d.ts +1 -0
- package/dist/manifest.js +8 -0
- package/dist/recovery-doc.d.ts +11 -0
- package/dist/recovery-doc.js +123 -0
- package/dist/restore-engine.d.ts +17 -0
- package/dist/restore-engine.js +127 -8
- package/dist/restore.d.ts +45 -9
- package/dist/restore.js +402 -30
- package/dist/storage-restore.d.ts +79 -0
- package/dist/storage-restore.js +634 -0
- package/package.json +1 -1
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { type S3Client } from "@aws-sdk/client-s3";
|
|
2
|
+
import type { Manifest, StorageFile } from "./manifest.js";
|
|
3
|
+
export interface StorageRestoreTarget {
|
|
4
|
+
supabaseUrl: string;
|
|
5
|
+
serviceRoleKey: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ReconcileReport {
|
|
8
|
+
/** manifest 文件在目标上逐键找到且尺寸一致的数量 */
|
|
9
|
+
verified: number;
|
|
10
|
+
missing: string[];
|
|
11
|
+
sizeMismatched: string[];
|
|
12
|
+
/** 目标上存在但 manifest 没有的对象数——非快照内容混在恢复目标里 = 不是干净恢复,计入失败裁决 */
|
|
13
|
+
extras: number;
|
|
14
|
+
matches: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface StorageRestoreSummary {
|
|
17
|
+
bucketsCreated: string[];
|
|
18
|
+
bucketsExisting: string[];
|
|
19
|
+
/** manifest 未捕获属性的 bucket(以默认设置创建,如实上报,不猜测) */
|
|
20
|
+
bucketsWithoutAttrs: string[];
|
|
21
|
+
/** 既有 bucket 与 manifest 属性不一致的描述(warn 级:可能是用户有意配置) */
|
|
22
|
+
bucketAttrDrift: string[];
|
|
23
|
+
filesUploaded: number;
|
|
24
|
+
bytesUploaded: number;
|
|
25
|
+
/** 目标已有同 key 同尺寸对象而跳过的数量(重试残留;字节级抽样校验覆盖) */
|
|
26
|
+
filesSkippedIdentical: number;
|
|
27
|
+
filesFailed: {
|
|
28
|
+
file: string;
|
|
29
|
+
reason: string;
|
|
30
|
+
}[];
|
|
31
|
+
/** 429/5xx/超时后的成功重试次数(可观测性:PRD §10.3) */
|
|
32
|
+
retries: number;
|
|
33
|
+
reconcile: ReconcileReport;
|
|
34
|
+
checksumSample: {
|
|
35
|
+
checked: number;
|
|
36
|
+
mismatched: string[];
|
|
37
|
+
};
|
|
38
|
+
/** 元数据降级说明(如 TUS 路径不保真的字段)——如实上报,不静默丢 */
|
|
39
|
+
metadataNotes: string[];
|
|
40
|
+
/** PRD §5.4.3:owner 语义边界,报告必须显示 */
|
|
41
|
+
ownerNote: string;
|
|
42
|
+
}
|
|
43
|
+
/** bucket 名单 = manifest.buckets(含空桶)∪ files 里出现过的桶(v1 快照没有 buckets 字段) */
|
|
44
|
+
export declare function bucketsToRestore(manifest: Manifest): {
|
|
45
|
+
name: string;
|
|
46
|
+
attrs: boolean;
|
|
47
|
+
}[];
|
|
48
|
+
export declare const STANDARD_UPLOAD_LIMIT_BYTES: number;
|
|
49
|
+
/**
|
|
50
|
+
* TUS 启用阈值:默认 = 6MB(Supabase 官方对 resumable 的建议线)——大文件从零重传
|
|
51
|
+
* 的标准上传既脆弱又贵;env 可覆盖(验证时压低,特殊网络环境可调高)。
|
|
52
|
+
*/
|
|
53
|
+
export declare function tusThresholdBytes(): number;
|
|
54
|
+
/**
|
|
55
|
+
* 递归遍历目标 bucket 的全部对象(list API 是目录级的:id === null 的条目是"目录")。
|
|
56
|
+
* 返回 key → size。不依赖目标 DB 凭据 → storage-only 恢复也有完整对账。
|
|
57
|
+
*/
|
|
58
|
+
export declare function walkTargetObjects(target: StorageRestoreTarget, bucket: string, counters?: {
|
|
59
|
+
retries: number;
|
|
60
|
+
}): Promise<Map<string, number>>;
|
|
61
|
+
/**
|
|
62
|
+
* 写前净度检查(纯函数,可测):既有桶里只允许"本快照的同尺寸残留"。
|
|
63
|
+
* 任何外来对象或尺寸冲突都在**写第一个字节之前**整体拒绝——部分写入的脏目标
|
|
64
|
+
* 比干净失败难收拾得多(评审第 14 轮)。
|
|
65
|
+
*/
|
|
66
|
+
export declare function targetResidueViolations(files: StorageFile[], preexisting: Map<string, Map<string, number>>): string[];
|
|
67
|
+
/** 逐键对账(纯函数,可测):manifest 每个文件都必须在目标出现且尺寸一致;多余对象另计。 */
|
|
68
|
+
export declare function reconcileFiles(files: StorageFile[], actualByBucket: Map<string, Map<string, number>>): ReconcileReport;
|
|
69
|
+
/** dry-run / 执行前预检的公开形态:一次性 scratch 摘要,只返回计划概要与警告。 */
|
|
70
|
+
export declare function planStorageRestore(target: StorageRestoreTarget, manifest: Manifest): Promise<{
|
|
71
|
+
bucketsToCreate: string[];
|
|
72
|
+
verifiedResidue: number;
|
|
73
|
+
warnings: string[];
|
|
74
|
+
}>;
|
|
75
|
+
export declare function restoreStorage(source: {
|
|
76
|
+
s3: S3Client;
|
|
77
|
+
bucket: string;
|
|
78
|
+
base: string;
|
|
79
|
+
}, target: StorageRestoreTarget, manifest: Manifest): Promise<StorageRestoreSummary>;
|