@kodrunhq/claudefy 1.1.3 → 1.3.0

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.
Files changed (53) hide show
  1. package/README.md +46 -4
  2. package/dist/backup-manager/backup-manager.d.ts +1 -0
  3. package/dist/backup-manager/backup-manager.js +9 -1
  4. package/dist/backup-manager/backup-manager.js.map +1 -1
  5. package/dist/cli.js +16 -0
  6. package/dist/cli.js.map +1 -1
  7. package/dist/commands/init.js +1 -0
  8. package/dist/commands/init.js.map +1 -1
  9. package/dist/commands/join.js +9 -5
  10. package/dist/commands/join.js.map +1 -1
  11. package/dist/commands/override.js +1 -0
  12. package/dist/commands/override.js.map +1 -1
  13. package/dist/commands/pull.d.ts +6 -0
  14. package/dist/commands/pull.js +197 -141
  15. package/dist/commands/pull.js.map +1 -1
  16. package/dist/commands/push.d.ts +8 -0
  17. package/dist/commands/push.js +200 -76
  18. package/dist/commands/push.js.map +1 -1
  19. package/dist/commands/restore.d.ts +12 -0
  20. package/dist/commands/restore.js +71 -0
  21. package/dist/commands/restore.js.map +1 -0
  22. package/dist/encryptor/encryptor.d.ts +10 -5
  23. package/dist/encryptor/encryptor.js +50 -31
  24. package/dist/encryptor/encryptor.js.map +1 -1
  25. package/dist/encryptor/file-encryptor.d.ts +8 -0
  26. package/dist/encryptor/file-encryptor.js +32 -0
  27. package/dist/encryptor/file-encryptor.js.map +1 -0
  28. package/dist/encryptor/key-derivation.d.ts +2 -0
  29. package/dist/encryptor/key-derivation.js +20 -0
  30. package/dist/encryptor/key-derivation.js.map +1 -0
  31. package/dist/encryptor/line-encryptor.d.ts +10 -0
  32. package/dist/encryptor/line-encryptor.js +43 -0
  33. package/dist/encryptor/line-encryptor.js.map +1 -0
  34. package/dist/git-adapter/git-adapter.d.ts +11 -1
  35. package/dist/git-adapter/git-adapter.js +117 -3
  36. package/dist/git-adapter/git-adapter.js.map +1 -1
  37. package/dist/index.js +5 -3
  38. package/dist/index.js.map +1 -1
  39. package/dist/machine-registry/machine-registry.d.ts +1 -0
  40. package/dist/machine-registry/machine-registry.js +21 -0
  41. package/dist/machine-registry/machine-registry.js.map +1 -1
  42. package/dist/merger/merger.d.ts +1 -7
  43. package/dist/merger/merger.js +17 -6
  44. package/dist/merger/merger.js.map +1 -1
  45. package/dist/path-mapper/path-mapper.d.ts +1 -1
  46. package/dist/path-mapper/path-mapper.js +19 -8
  47. package/dist/path-mapper/path-mapper.js.map +1 -1
  48. package/dist/secret-scanner/scanner.js +8 -0
  49. package/dist/secret-scanner/scanner.js.map +1 -1
  50. package/dist/update-check.d.ts +5 -0
  51. package/dist/update-check.js +83 -0
  52. package/dist/update-check.js.map +1 -0
  53. package/package.json +4 -4
@@ -1,5 +1,6 @@
1
- import { cp, mkdir, readdir, readFile, rename, rm, writeFile } from "node:fs/promises";
2
- import { join } from "node:path";
1
+ import { lstat, mkdir, readdir, readFile, rm, writeFile } from "node:fs/promises";
2
+ import { createHash } from "node:crypto";
3
+ import { join, relative, resolve, sep } from "node:path";
3
4
  import { existsSync } from "node:fs";
4
5
  import { hostname, platform } from "node:os";
5
6
  import { ConfigManager } from "../config/config-manager.js";
@@ -35,93 +36,51 @@ export class PushCommand {
35
36
  `${classification.unknown.length} ${unknownLabel}, ` +
36
37
  `${classification.denylist.length} denied`);
37
38
  }
38
- // 2. Initialize git adapter
39
+ // 2. Initialize git adapter + per-machine branch
39
40
  const gitAdapter = new GitAdapter(join(this.homeDir, ".claudefy"));
40
41
  await gitAdapter.initStore(config.backend.url);
42
+ await gitAdapter.ensureMachineBranch(config.machineId);
41
43
  try {
42
- await gitAdapter.pull();
44
+ await gitAdapter.pullAndMergeMain();
43
45
  }
44
46
  catch {
45
- // Fresh store with no remote history yet — safe to continue
47
+ if (!options.quiet) {
48
+ output.info("Warning: Unable to pull latest changes from remote; proceeding with local state only.");
49
+ }
46
50
  }
47
51
  const storePath = gitAdapter.getStorePath();
48
52
  const configDir = join(storePath, "config");
49
53
  const unknownDir = join(storePath, "unknown");
50
- // 3. Clean existing config and unknown dirs in store
51
- if (existsSync(configDir)) {
52
- await rm(configDir, { recursive: true });
53
- }
54
- if (existsSync(unknownDir)) {
55
- await rm(unknownDir, { recursive: true });
56
- }
54
+ // 3. Build path mapper
55
+ const links = await this.configManager.getLinks();
56
+ const pathMapper = new PathMapper(links);
57
+ // 4. Hash existing store files
58
+ const configHashes = await this.collectStoreHashes(configDir);
59
+ const unknownHashes = await this.collectStoreHashes(unknownDir);
60
+ // 5. Incremental sync — write only changed files
61
+ const changedFiles = [];
57
62
  await mkdir(configDir, { recursive: true });
58
63
  await mkdir(unknownDir, { recursive: true });
59
- // 4. Copy allowlisted items
64
+ // Track which top-level items are being synced for deletion detection
65
+ const syncedConfigItems = [];
66
+ const syncedUnknownItems = [];
60
67
  for (const item of classification.allowlist) {
68
+ syncedConfigItems.push(item.name);
61
69
  const src = join(this.claudeDir, item.name);
62
- const dest = join(configDir, item.name);
63
- await cp(src, dest, { recursive: true });
70
+ await this.syncItem(src, configDir, item.name, configHashes, changedFiles, pathMapper);
64
71
  }
65
- // 5. Copy unknown items
66
72
  for (const item of classification.unknown) {
73
+ syncedUnknownItems.push(item.name);
67
74
  const src = join(this.claudeDir, item.name);
68
- const dest = join(unknownDir, item.name);
69
- await cp(src, dest, { recursive: true });
70
- }
71
- // 6. Normalize paths in known files
72
- const links = await this.configManager.getLinks();
73
- const pathMapper = new PathMapper(links);
74
- // settings.json
75
- const settingsPath = join(configDir, "settings.json");
76
- if (existsSync(settingsPath)) {
77
- const settings = JSON.parse(await readFile(settingsPath, "utf-8"));
78
- const normalized = pathMapper.normalizeSettingsPaths(settings, this.claudeDir);
79
- await writeFile(settingsPath, JSON.stringify(normalized, null, 2));
80
- }
81
- // installed_plugins.json
82
- const pluginsJsonPath = join(configDir, "plugins", "installed_plugins.json");
83
- if (existsSync(pluginsJsonPath)) {
84
- const plugins = JSON.parse(await readFile(pluginsJsonPath, "utf-8"));
85
- const normalized = pathMapper.normalizePluginPaths(plugins, this.claudeDir);
86
- await writeFile(pluginsJsonPath, JSON.stringify(normalized, null, 2));
87
- }
88
- // known_marketplaces.json
89
- const marketplacesPath = join(configDir, "plugins", "known_marketplaces.json");
90
- if (existsSync(marketplacesPath)) {
91
- const mp = JSON.parse(await readFile(marketplacesPath, "utf-8"));
92
- const normalized = pathMapper.normalizePluginPaths(mp, this.claudeDir);
93
- await writeFile(marketplacesPath, JSON.stringify(normalized, null, 2));
94
- }
95
- // history.jsonl
96
- const historyPath = join(configDir, "history.jsonl");
97
- if (existsSync(historyPath)) {
98
- const content = await readFile(historyPath, "utf-8");
99
- const normalized = content
100
- .split("\n")
101
- .filter(Boolean)
102
- .map((line) => pathMapper.normalizeJsonlLine(line))
103
- .join("\n") + "\n";
104
- await writeFile(historyPath, normalized);
105
- }
106
- // projects/ directory renaming
107
- const projectsDir = join(configDir, "projects");
108
- if (existsSync(projectsDir)) {
109
- const projectDirs = await readdir(projectsDir);
110
- for (const dirName of projectDirs) {
111
- const canonicalId = pathMapper.normalizeDirName(dirName);
112
- if (canonicalId) {
113
- await rename(join(projectsDir, dirName), join(projectsDir, canonicalId));
114
- }
115
- }
75
+ await this.syncItem(src, unknownDir, item.name, unknownHashes, changedFiles, null);
116
76
  }
77
+ // 6. Detect deletions — remove store entries not present in source
78
+ await this.removeDeleted(configDir, syncedConfigItems);
79
+ await this.removeDeleted(unknownDir, syncedUnknownItems);
117
80
  // 7. Scan for secrets and encrypt files that contain them
118
- if (!options.skipSecretScan) {
81
+ if (!options.skipSecretScan && changedFiles.length > 0) {
119
82
  const scanner = new SecretScanner();
120
- const allFiles = [
121
- ...(await this.collectFiles(configDir)),
122
- ...(await this.collectFiles(unknownDir)),
123
- ];
124
- const findings = await scanner.scanFiles(allFiles);
83
+ const findings = await scanner.scanFiles(changedFiles);
125
84
  if (findings.length > 0) {
126
85
  if (!config.encryption.enabled || options.skipEncryption) {
127
86
  const details = findings.map((f) => ` ${f.file}:${f.line} [${f.pattern}]`).join("\n");
@@ -134,7 +93,12 @@ export class PushCommand {
134
93
  const filesToEncrypt = new Set(findings.map((f) => f.file));
135
94
  for (const filePath of filesToEncrypt) {
136
95
  if (existsSync(filePath) && !filePath.endsWith(".age")) {
137
- await encryptor.encryptFile(filePath, filePath + ".age");
96
+ const ad = (filePath.startsWith(configDir)
97
+ ? relative(configDir, filePath)
98
+ : relative(unknownDir, filePath))
99
+ .split(sep)
100
+ .join("/");
101
+ await encryptor.encryptFile(filePath, filePath + ".age", ad);
138
102
  await rm(filePath);
139
103
  }
140
104
  }
@@ -143,15 +107,175 @@ export class PushCommand {
143
107
  }
144
108
  }
145
109
  }
146
- // 9. Update machine registry
110
+ // 8. Conditional manifest update
111
+ const hasRealChanges = !(await gitAdapter.isClean());
147
112
  const registry = new MachineRegistry(join(storePath, "manifest.json"));
148
- await registry.register(config.machineId, hostname(), platform());
149
- // 10. Commit and push
150
- await gitAdapter.commitAndPush(`sync: push from ${config.machineId}`);
113
+ await registry.conditionalRegister(config.machineId, hostname(), platform(), hasRealChanges);
114
+ // 9. Commit and push with branch support
115
+ const commitResult = await gitAdapter.commitAndPush(`sync: push from ${config.machineId}`, config.machineId);
151
116
  if (!options.quiet) {
117
+ if (commitResult.committed && !commitResult.pushed) {
118
+ output.warn("Changes were committed locally, but pushing to the remote failed. Retry with 'claudefy push'.");
119
+ }
120
+ if (commitResult.pushed && !commitResult.mergedToMain) {
121
+ output.warn("Unable to merge machine branch into main. You may need to resolve conflicts.");
122
+ }
152
123
  output.success("Push complete.");
153
124
  }
154
125
  }
126
+ async hashFile(filePath) {
127
+ const content = await readFile(filePath);
128
+ return createHash("sha256").update(content).digest("hex");
129
+ }
130
+ async hashContent(content) {
131
+ return createHash("sha256").update(content).digest("hex");
132
+ }
133
+ async collectStoreHashes(dirPath, prefix = "") {
134
+ const hashes = new Map();
135
+ if (!existsSync(dirPath))
136
+ return hashes;
137
+ const entries = await readdir(dirPath, { withFileTypes: true });
138
+ for (const entry of entries) {
139
+ const relPath = prefix ? `${prefix}/${entry.name}` : entry.name;
140
+ const fullPath = join(dirPath, entry.name);
141
+ if (entry.isDirectory()) {
142
+ const sub = await this.collectStoreHashes(fullPath, relPath);
143
+ for (const [k, v] of sub)
144
+ hashes.set(k, v);
145
+ }
146
+ else if (!entry.isSymbolicLink()) {
147
+ hashes.set(relPath, await this.hashFile(fullPath));
148
+ }
149
+ }
150
+ return hashes;
151
+ }
152
+ needsNormalization(itemName) {
153
+ return ["settings.json", "history.jsonl"].includes(itemName) || itemName.startsWith("plugins/");
154
+ }
155
+ normalizeContent(itemName, text, pathMapper) {
156
+ if (itemName === "settings.json") {
157
+ const parsed = JSON.parse(text);
158
+ const normalized = pathMapper.normalizeSettingsPaths(parsed, this.claudeDir);
159
+ return JSON.stringify(normalized, null, 2);
160
+ }
161
+ if (itemName === "plugins/installed_plugins.json" ||
162
+ itemName === "plugins/known_marketplaces.json") {
163
+ const parsed = JSON.parse(text);
164
+ const normalized = pathMapper.normalizePluginPaths(parsed, this.claudeDir);
165
+ return JSON.stringify(normalized, null, 2);
166
+ }
167
+ if (itemName === "history.jsonl") {
168
+ return (text
169
+ .split("\n")
170
+ .filter(Boolean)
171
+ .map((line) => pathMapper.normalizeJsonlLine(line))
172
+ .join("\n") + "\n");
173
+ }
174
+ return text;
175
+ }
176
+ async syncItem(srcPath, destBaseDir, itemName, storeHashes, changedFiles, pathMapper) {
177
+ const srcStat = await lstat(srcPath);
178
+ if (srcStat.isSymbolicLink())
179
+ return;
180
+ if (srcStat.isFile()) {
181
+ let content;
182
+ if (pathMapper && this.needsNormalization(itemName)) {
183
+ const text = await readFile(srcPath, "utf-8");
184
+ content = Buffer.from(this.normalizeContent(itemName, text, pathMapper));
185
+ }
186
+ else {
187
+ content = await readFile(srcPath);
188
+ }
189
+ const hash = await this.hashContent(content);
190
+ const storeHash = storeHashes.get(itemName);
191
+ if (hash !== storeHash) {
192
+ const destPath = join(destBaseDir, itemName);
193
+ const parentDir = join(destPath, "..");
194
+ await mkdir(parentDir, { recursive: true });
195
+ await writeFile(destPath, content);
196
+ changedFiles.push(destPath);
197
+ }
198
+ }
199
+ else if (srcStat.isDirectory()) {
200
+ await this.syncDirectory(srcPath, destBaseDir, itemName, storeHashes, changedFiles, pathMapper);
201
+ }
202
+ }
203
+ async syncDirectory(srcDir, destBaseDir, itemName, storeHashes, changedFiles, pathMapper) {
204
+ const destDir = join(destBaseDir, itemName);
205
+ await mkdir(destDir, { recursive: true });
206
+ const entries = await readdir(srcDir, { withFileTypes: true });
207
+ // Track children for deletion detection within this directory
208
+ const childNames = [];
209
+ for (const entry of entries) {
210
+ if (entry.isSymbolicLink())
211
+ continue;
212
+ const srcPath = join(srcDir, entry.name);
213
+ if (entry.isDirectory()) {
214
+ // Handle projects/ directory renaming
215
+ if (itemName === "projects" && pathMapper) {
216
+ const canonicalName = pathMapper.normalizeDirName(entry.name);
217
+ if (canonicalName) {
218
+ // Path traversal check
219
+ const destPath = resolve(join(destDir, canonicalName));
220
+ const rel = relative(resolve(destDir), destPath);
221
+ if (rel.startsWith("..") || resolve(destPath) === resolve(destDir)) {
222
+ continue;
223
+ }
224
+ const canonicalChildName = `${itemName}/${canonicalName}`;
225
+ childNames.push(canonicalName);
226
+ await this.syncDirectory(srcPath, destBaseDir, canonicalChildName, storeHashes, changedFiles, pathMapper);
227
+ continue;
228
+ }
229
+ }
230
+ childNames.push(entry.name);
231
+ const childName = `${itemName}/${entry.name}`;
232
+ await this.syncDirectory(srcPath, destBaseDir, childName, storeHashes, changedFiles, pathMapper);
233
+ }
234
+ else {
235
+ childNames.push(entry.name);
236
+ const childName = `${itemName}/${entry.name}`;
237
+ let content;
238
+ if (pathMapper && this.needsNormalization(childName)) {
239
+ const text = await readFile(srcPath, "utf-8");
240
+ content = Buffer.from(this.normalizeContent(childName, text, pathMapper));
241
+ }
242
+ else {
243
+ content = await readFile(srcPath);
244
+ }
245
+ const hash = await this.hashContent(content);
246
+ const storeHash = storeHashes.get(childName);
247
+ if (hash !== storeHash) {
248
+ const destPath = join(destBaseDir, childName);
249
+ await mkdir(join(destPath, ".."), { recursive: true });
250
+ await writeFile(destPath, content);
251
+ changedFiles.push(destPath);
252
+ }
253
+ }
254
+ }
255
+ // Remove files/dirs in the store directory that no longer exist in source
256
+ if (existsSync(destDir)) {
257
+ const storeEntries = await readdir(destDir);
258
+ const childSet = new Set(childNames);
259
+ for (const storeEntry of storeEntries) {
260
+ const baseName = storeEntry.endsWith(".age") ? storeEntry.slice(0, -4) : storeEntry;
261
+ if (!childSet.has(baseName) && !childSet.has(storeEntry)) {
262
+ await rm(join(destDir, storeEntry), { recursive: true });
263
+ }
264
+ }
265
+ }
266
+ }
267
+ async removeDeleted(storeDir, currentItems) {
268
+ if (!existsSync(storeDir))
269
+ return;
270
+ const entries = await readdir(storeDir);
271
+ const currentSet = new Set(currentItems);
272
+ for (const entry of entries) {
273
+ const baseName = entry.endsWith(".age") ? entry.slice(0, -4) : entry;
274
+ if (!currentSet.has(baseName) && !currentSet.has(entry)) {
275
+ await rm(join(storeDir, entry), { recursive: true });
276
+ }
277
+ }
278
+ }
155
279
  async collectFiles(dirPath) {
156
280
  if (!existsSync(dirPath))
157
281
  return [];
@@ -162,7 +286,7 @@ export class PushCommand {
162
286
  if (entry.isDirectory()) {
163
287
  results.push(...(await this.collectFiles(fullPath)));
164
288
  }
165
- else {
289
+ else if (!entry.isSymbolicLink()) {
166
290
  results.push(fullPath);
167
291
  }
168
292
  }
@@ -1 +1 @@
1
- {"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAStC,MAAM,OAAO,WAAW;IACd,OAAO,CAAS;IAChB,SAAS,CAAS;IAClB,aAAa,CAAgB;IAErC,YAAY,OAAe;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAoB;QAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;QAClE,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,gBAAgB,CAAC,CAAC;QAEpD,iCAAiC;QACjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,SAAS,oCAAoC,CAAC,CAAC;QAC5E,CAAC;QACD,MAAM,cAAc,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEjE,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;QACzE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAAC;YACrE,MAAM,CAAC,IAAI,CACT,YAAY,cAAc,CAAC,SAAS,CAAC,MAAM,YAAY;gBACrD,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,IAAI,YAAY,IAAI;gBACpD,GAAG,cAAc,CAAC,QAAQ,CAAC,MAAM,SAAS,CAC7C,CAAC;QACJ,CAAC;QAED,iDAAiD;QACjD,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;QACnE,MAAM,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,UAAU,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,CAAC;YACH,MAAM,UAAU,CAAC,gBAAgB,EAAE,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CACT,uFAAuF,CACxF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAE9C,uBAAuB;QACvB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;QAEzC,+BAA+B;QAC/B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC9D,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAEhE,iDAAiD;QACjD,MAAM,YAAY,GAAa,EAAE,CAAC;QAElC,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE7C,sEAAsE;QACtE,MAAM,iBAAiB,GAAa,EAAE,CAAC;QACvC,MAAM,kBAAkB,GAAa,EAAE,CAAC;QAExC,KAAK,MAAM,IAAI,IAAI,cAAc,CAAC,SAAS,EAAE,CAAC;YAC5C,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;QACzF,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;YAC1C,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;QACrF,CAAC;QAED,mEAAmE;QACnE,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;QACvD,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;QAEzD,0DAA0D;QAC1D,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvD,MAAM,OAAO,GAAG,IAAI,aAAa,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YAEvD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;oBACzD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACvF,MAAM,IAAI,KAAK,CACb,wBAAwB,QAAQ,CAAC,MAAM,0BAA0B,OAAO,qEAAqE,CAC9I,CAAC;gBACJ,CAAC;gBACD,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;oBACxB,MAAM,IAAI,KAAK,CACb,kJAAkJ,CACnJ,CAAC;gBACJ,CAAC;gBAED,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBACpD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC5D,KAAK,MAAM,QAAQ,IAAI,cAAc,EAAE,CAAC;oBACtC,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;wBACvD,MAAM,EAAE,GAAG,CACT,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC;4BAC5B,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC;4BAC/B,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CACnC;6BACE,KAAK,CAAC,GAAG,CAAC;6BACV,IAAI,CAAC,GAAG,CAAC,CAAC;wBACb,MAAM,SAAS,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC;wBAC7D,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC;oBACrB,CAAC;gBACH,CAAC;gBAED,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;oBACnB,MAAM,CAAC,IAAI,CAAC,aAAa,cAAc,CAAC,IAAI,wCAAwC,CAAC,CAAC;gBACxF,CAAC;YACH,CAAC;QACH,CAAC;QAED,iCAAiC;QACjC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;QACvE,MAAM,QAAQ,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,EAAE,cAAc,CAAC,CAAC;QAE7F,yCAAyC;QACzC,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,aAAa,CACjD,mBAAmB,MAAM,CAAC,SAAS,EAAE,EACrC,MAAM,CAAC,SAAS,CACjB,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,IAAI,YAAY,CAAC,SAAS,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;gBACnD,MAAM,CAAC,IAAI,CACT,+FAA+F,CAChG,CAAC;YACJ,CAAC;YACD,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;gBACtD,MAAM,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC;YAC9F,CAAC;YACD,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,QAAgB;QACrC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5D,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,OAAwB;QAChD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5D,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAC9B,OAAe,EACf,SAAiB,EAAE;QAEnB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QACzC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,OAAO,MAAM,CAAC;QACxC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;YAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC7D,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7C,CAAC;iBAAM,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;gBACnC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,kBAAkB,CAAC,QAAgB;QACzC,OAAO,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAClG,CAAC;IAEO,gBAAgB,CAAC,QAAgB,EAAE,IAAY,EAAE,UAAsB;QAC7E,IAAI,QAAQ,KAAK,eAAe,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,MAAM,UAAU,GAAG,UAAU,CAAC,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7E,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC7C,CAAC;QACD,IACE,QAAQ,KAAK,gCAAgC;YAC7C,QAAQ,KAAK,iCAAiC,EAC9C,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,MAAM,UAAU,GAAG,UAAU,CAAC,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3E,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,QAAQ,KAAK,eAAe,EAAE,CAAC;YACjC,OAAO,CACL,IAAI;iBACD,KAAK,CAAC,IAAI,CAAC;iBACX,MAAM,CAAC,OAAO,CAAC;iBACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;iBAClD,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CACrB,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,QAAQ,CACpB,OAAe,EACf,WAAmB,EACnB,QAAgB,EAChB,WAAgC,EAChC,YAAsB,EACtB,UAA6B;QAE7B,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,OAAO,CAAC,cAAc,EAAE;YAAE,OAAO;QAErC,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YACrB,IAAI,OAAe,CAAC;YACpB,IAAI,UAAU,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACpD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC9C,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;YAC3E,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;YACpC,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC7C,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC5C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;gBAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBACvC,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC5C,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACnC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YACjC,MAAM,IAAI,CAAC,aAAa,CACtB,OAAO,EACP,WAAW,EACX,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,UAAU,CACX,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,aAAa,CACzB,MAAc,EACd,WAAmB,EACnB,QAAgB,EAChB,WAAgC,EAChC,YAAsB,EACtB,UAA6B;QAE7B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC5C,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/D,8DAA8D;QAC9D,MAAM,UAAU,GAAa,EAAE,CAAC;QAEhC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,cAAc,EAAE;gBAAE,SAAS;YACrC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAEzC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,sCAAsC;gBACtC,IAAI,QAAQ,KAAK,UAAU,IAAI,UAAU,EAAE,CAAC;oBAC1C,MAAM,aAAa,GAAG,UAAU,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC9D,IAAI,aAAa,EAAE,CAAC;wBAClB,uBAAuB;wBACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;wBACvD,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;wBACjD,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;4BACnE,SAAS;wBACX,CAAC;wBACD,MAAM,kBAAkB,GAAG,GAAG,QAAQ,IAAI,aAAa,EAAE,CAAC;wBAC1D,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;wBAC/B,MAAM,IAAI,CAAC,aAAa,CACtB,OAAO,EACP,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,UAAU,CACX,CAAC;wBACF,SAAS;oBACX,CAAC;gBACH,CAAC;gBACD,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC5B,MAAM,SAAS,GAAG,GAAG,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC9C,MAAM,IAAI,CAAC,aAAa,CACtB,OAAO,EACP,WAAW,EACX,SAAS,EACT,WAAW,EACX,YAAY,EACZ,UAAU,CACX,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC5B,MAAM,SAAS,GAAG,GAAG,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC9C,IAAI,OAAe,CAAC;gBACpB,IAAI,UAAU,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;oBACrD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;oBAC9C,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;gBAC5E,CAAC;qBAAM,CAAC;oBACN,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACpC,CAAC;gBACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBAC7C,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC7C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;oBAC9C,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBACvD,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;oBACnC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;QACH,CAAC;QAED,0EAA0E;QAC1E,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;YAC5C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;YACrC,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE,CAAC;gBACtC,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;gBACpF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;oBACzD,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC3D,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,QAAgB,EAAE,YAAsB;QAClE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO;QAClC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;QACzC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACrE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxD,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,OAAe;QACxC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,OAAO,EAAE,CAAC;QACpC,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACvD,CAAC;iBAAM,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;gBACnC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ export interface RestoreOptions {
2
+ quiet: boolean;
3
+ }
4
+ export declare class RestoreCommand {
5
+ private homeDir;
6
+ private claudeDir;
7
+ private backupManager;
8
+ constructor(homeDir: string);
9
+ listAvailableBackups(): Promise<string[]>;
10
+ restoreByName(backupName: string, options: RestoreOptions): Promise<void>;
11
+ executeInteractive(options: RestoreOptions): Promise<void>;
12
+ }
@@ -0,0 +1,71 @@
1
+ import { cp, rm } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { existsSync } from "node:fs";
4
+ import { createInterface } from "node:readline";
5
+ import { BackupManager } from "../backup-manager/backup-manager.js";
6
+ import { output } from "../output.js";
7
+ export class RestoreCommand {
8
+ homeDir;
9
+ claudeDir;
10
+ backupManager;
11
+ constructor(homeDir) {
12
+ this.homeDir = homeDir;
13
+ this.claudeDir = join(homeDir, ".claude");
14
+ this.backupManager = new BackupManager(join(homeDir, ".claudefy"));
15
+ }
16
+ async listAvailableBackups() {
17
+ return this.backupManager.listBackups();
18
+ }
19
+ async restoreByName(backupName, options) {
20
+ const backupPath = this.backupManager.getBackupPath(backupName);
21
+ if (!existsSync(backupPath)) {
22
+ throw new Error(`Backup not found: ${backupName}`);
23
+ }
24
+ if (existsSync(this.claudeDir)) {
25
+ const safetyPath = await this.backupManager.createBackup(this.claudeDir, "pre-restore");
26
+ if (!options.quiet) {
27
+ output.info(`Safety backup created at: ${safetyPath}`);
28
+ }
29
+ }
30
+ if (existsSync(this.claudeDir)) {
31
+ await rm(this.claudeDir, { recursive: true, force: true });
32
+ }
33
+ await cp(backupPath, this.claudeDir, { recursive: true });
34
+ if (!options.quiet) {
35
+ output.success(`Restored from backup: ${backupName}`);
36
+ }
37
+ }
38
+ async executeInteractive(options) {
39
+ const backups = await this.listAvailableBackups();
40
+ if (backups.length === 0) {
41
+ output.info("No backups available.");
42
+ return;
43
+ }
44
+ console.log("\nAvailable backups:\n");
45
+ for (let i = 0; i < backups.length; i++) {
46
+ console.log(` ${i + 1}. ${backups[i]}`);
47
+ }
48
+ console.log();
49
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
50
+ const ask = (question) => new Promise((resolve) => rl.question(question, resolve));
51
+ try {
52
+ const indexStr = await ask("Enter backup number to restore: ");
53
+ const index = parseInt(indexStr, 10) - 1;
54
+ if (isNaN(index) || index < 0 || index >= backups.length) {
55
+ output.error("Invalid selection.");
56
+ return;
57
+ }
58
+ const selected = backups[index];
59
+ const confirm = await ask(`This will replace ~/.claude with backup "${selected}". Continue? (y/N) `);
60
+ if (confirm.toLowerCase() !== "y") {
61
+ output.info("Restore cancelled.");
62
+ return;
63
+ }
64
+ await this.restoreByName(selected, options);
65
+ }
66
+ finally {
67
+ rl.close();
68
+ }
69
+ }
70
+ }
71
+ //# sourceMappingURL=restore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restore.js","sourceRoot":"","sources":["../../src/commands/restore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAMtC,MAAM,OAAO,cAAc;IACjB,OAAO,CAAS;IAChB,SAAS,CAAS;IAClB,aAAa,CAAgB;IAErC,YAAY,OAAe;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,oBAAoB;QACxB,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,UAAkB,EAAE,OAAuB;QAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAChE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;YACxF,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,6BAA6B,UAAU,EAAE,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QAED,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,MAAM,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1D,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,CAAC,OAAO,CAAC,yBAAyB,UAAU,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,OAAuB;QAC9C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAClD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7E,MAAM,GAAG,GAAG,CAAC,QAAgB,EAAmB,EAAE,CAChD,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;QAE3D,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAC/D,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACzD,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;gBACnC,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,OAAO,GAAG,MAAM,GAAG,CACvB,4CAA4C,QAAQ,qBAAqB,CAC1E,CAAC;YACF,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;gBAClC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;gBAClC,OAAO;YACT,CAAC;YAED,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;IACH,CAAC;CACF"}
@@ -1,10 +1,15 @@
1
1
  export declare class Encryptor {
2
- private passphrase;
2
+ private lineEncryptor;
3
+ private fileEncryptor;
3
4
  constructor(passphrase: string);
4
- encryptFile(inputPath: string, outputPath: string): Promise<void>;
5
- decryptFile(inputPath: string, outputPath: string): Promise<void>;
6
- encryptString(input: string): Promise<string>;
7
- decryptString(base64Input: string): Promise<string>;
5
+ private isJsonlFile;
6
+ private isOriginallyJsonl;
7
+ encryptFile(inputPath: string, outputPath: string, ad: string): Promise<void>;
8
+ decryptFile(inputPath: string, outputPath: string, ad: string): Promise<void>;
9
+ encryptString(input: string, ad: string): Promise<string>;
10
+ decryptString(encrypted: string, ad: string): Promise<string>;
8
11
  encryptDirectory(dirPath: string): Promise<void>;
12
+ private _encryptDirRecursive;
9
13
  decryptDirectory(dirPath: string): Promise<void>;
14
+ private _decryptDirRecursive;
10
15
  }
@@ -1,65 +1,84 @@
1
- import { Encrypter, Decrypter } from "age-encryption";
2
1
  import { readFile, readdir, rm, writeFile } from "node:fs/promises";
3
- import { join } from "node:path";
2
+ import { join, relative, sep } from "node:path";
3
+ import { LineEncryptor } from "./line-encryptor.js";
4
+ import { FileEncryptor } from "./file-encryptor.js";
4
5
  export class Encryptor {
5
- passphrase;
6
+ lineEncryptor;
7
+ fileEncryptor;
6
8
  constructor(passphrase) {
7
- this.passphrase = passphrase;
9
+ this.lineEncryptor = new LineEncryptor(passphrase);
10
+ this.fileEncryptor = new FileEncryptor(passphrase);
8
11
  }
9
- async encryptFile(inputPath, outputPath) {
10
- const data = await readFile(inputPath);
11
- const e = new Encrypter();
12
- e.setPassphrase(this.passphrase);
13
- const encrypted = await e.encrypt(data);
14
- await writeFile(outputPath, encrypted);
12
+ isJsonlFile(filePath) {
13
+ return filePath.endsWith(".jsonl");
15
14
  }
16
- async decryptFile(inputPath, outputPath) {
17
- const data = await readFile(inputPath);
18
- const d = new Decrypter();
19
- d.addPassphrase(this.passphrase);
20
- const decrypted = await d.decrypt(data, "uint8array");
21
- await writeFile(outputPath, decrypted);
15
+ isOriginallyJsonl(agePath) {
16
+ return agePath.endsWith(".jsonl.age");
22
17
  }
23
- async encryptString(input) {
24
- const e = new Encrypter();
25
- e.setPassphrase(this.passphrase);
26
- const encrypted = await e.encrypt(new TextEncoder().encode(input));
27
- return Buffer.from(encrypted).toString("base64");
18
+ async encryptFile(inputPath, outputPath, ad) {
19
+ if (this.isJsonlFile(inputPath)) {
20
+ const content = await readFile(inputPath, "utf-8");
21
+ const encrypted = this.lineEncryptor.encryptFileContent(content, ad);
22
+ await writeFile(outputPath, encrypted);
23
+ }
24
+ else {
25
+ const data = await readFile(inputPath);
26
+ const encrypted = this.fileEncryptor.encrypt(new Uint8Array(data), ad);
27
+ await writeFile(outputPath, encrypted);
28
+ }
29
+ }
30
+ async decryptFile(inputPath, outputPath, ad) {
31
+ const content = await readFile(inputPath, "utf-8");
32
+ if (this.isOriginallyJsonl(inputPath)) {
33
+ const decrypted = this.lineEncryptor.decryptFileContent(content, ad);
34
+ await writeFile(outputPath, decrypted);
35
+ }
36
+ else {
37
+ const decrypted = this.fileEncryptor.decrypt(content, ad);
38
+ await writeFile(outputPath, decrypted);
39
+ }
40
+ }
41
+ async encryptString(input, ad) {
42
+ return this.fileEncryptor.encryptString(input, ad);
28
43
  }
29
- async decryptString(base64Input) {
30
- const data = new Uint8Array(Buffer.from(base64Input, "base64"));
31
- const d = new Decrypter();
32
- d.addPassphrase(this.passphrase);
33
- const decrypted = await d.decrypt(data, "uint8array");
34
- return new TextDecoder().decode(decrypted);
44
+ async decryptString(encrypted, ad) {
45
+ return this.fileEncryptor.decryptString(encrypted, ad);
35
46
  }
36
47
  async encryptDirectory(dirPath) {
48
+ await this._encryptDirRecursive(dirPath, dirPath);
49
+ }
50
+ async _encryptDirRecursive(dirPath, rootPath) {
37
51
  const entries = await readdir(dirPath, { withFileTypes: true });
38
52
  for (const entry of entries) {
39
53
  if (entry.isSymbolicLink())
40
54
  continue;
41
55
  const fullPath = join(dirPath, entry.name);
42
56
  if (entry.isDirectory()) {
43
- await this.encryptDirectory(fullPath);
57
+ await this._encryptDirRecursive(fullPath, rootPath);
44
58
  }
45
59
  else if (!entry.name.endsWith(".age")) {
46
- await this.encryptFile(fullPath, fullPath + ".age");
60
+ const ad = relative(rootPath, fullPath).split(sep).join("/");
61
+ await this.encryptFile(fullPath, fullPath + ".age", ad);
47
62
  await rm(fullPath);
48
63
  }
49
64
  }
50
65
  }
51
66
  async decryptDirectory(dirPath) {
67
+ await this._decryptDirRecursive(dirPath, dirPath);
68
+ }
69
+ async _decryptDirRecursive(dirPath, rootPath) {
52
70
  const entries = await readdir(dirPath, { withFileTypes: true });
53
71
  for (const entry of entries) {
54
72
  if (entry.isSymbolicLink())
55
73
  continue;
56
74
  const fullPath = join(dirPath, entry.name);
57
75
  if (entry.isDirectory()) {
58
- await this.decryptDirectory(fullPath);
76
+ await this._decryptDirRecursive(fullPath, rootPath);
59
77
  }
60
78
  else if (entry.name.endsWith(".age")) {
61
79
  const outputPath = fullPath.replace(/\.age$/, "");
62
- await this.decryptFile(fullPath, outputPath);
80
+ const ad = relative(rootPath, outputPath).split(sep).join("/");
81
+ await this.decryptFile(fullPath, outputPath, ad);
63
82
  await rm(fullPath);
64
83
  }
65
84
  }
@@ -1 +1 @@
1
- {"version":3,"file":"encryptor.js","sourceRoot":"","sources":["../../src/encryptor/encryptor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"encryptor.js","sourceRoot":"","sources":["../../src/encryptor/encryptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,OAAO,SAAS;IACZ,aAAa,CAAgB;IAC7B,aAAa,CAAgB;IAErC,YAAY,UAAkB;QAC5B,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,UAAU,CAAC,CAAC;IACrD,CAAC;IAEO,WAAW,CAAC,QAAgB;QAClC,OAAO,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAEO,iBAAiB,CAAC,OAAe;QACvC,OAAO,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,UAAkB,EAAE,EAAU;QACjE,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACnD,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACrE,MAAM,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;YACvC,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YACvE,MAAM,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,UAAkB,EAAE,EAAU;QACjE,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,CAAC;YACtC,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACrE,MAAM,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC1D,MAAM,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,KAAa,EAAE,EAAU;QAC3C,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,SAAiB,EAAE,EAAU;QAC/C,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAe;QACpC,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,OAAe,EAAE,QAAgB;QAClE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,cAAc,EAAE;gBAAE,SAAS;YACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACtD,CAAC;iBAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxC,MAAM,EAAE,GAAG,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC7D,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC;gBACxD,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAe;QACpC,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,OAAe,EAAE,QAAgB;QAClE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,cAAc,EAAE;gBAAE,SAAS;YACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACtD,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvC,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAClD,MAAM,EAAE,GAAG,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC/D,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;gBACjD,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ export declare class FileEncryptor {
2
+ private key;
3
+ constructor(passphrase: string);
4
+ encrypt(data: Uint8Array, ad: string): string;
5
+ decrypt(encoded: string, ad: string): Uint8Array;
6
+ encryptString(text: string, ad: string): string;
7
+ decryptString(encoded: string, ad: string): string;
8
+ }