@calltelemetry/cli 0.7.6 → 0.7.9

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 (66) hide show
  1. package/dist/commands/migrate.d.ts.map +1 -1
  2. package/dist/commands/migrate.js +7 -0
  3. package/dist/commands/migrate.js.map +1 -1
  4. package/dist/commands/self-update.d.ts.map +1 -1
  5. package/dist/commands/self-update.js +1 -0
  6. package/dist/commands/self-update.js.map +1 -1
  7. package/dist/commands/syslog.d.ts +3 -0
  8. package/dist/commands/syslog.d.ts.map +1 -0
  9. package/dist/commands/syslog.js +159 -0
  10. package/dist/commands/syslog.js.map +1 -0
  11. package/dist/commands/update.d.ts.map +1 -1
  12. package/dist/commands/update.js +143 -3
  13. package/dist/commands/update.js.map +1 -1
  14. package/dist/index.js +11 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/lib/bundle.d.ts +2 -1
  17. package/dist/lib/bundle.d.ts.map +1 -1
  18. package/dist/lib/bundle.js +41 -12
  19. package/dist/lib/bundle.js.map +1 -1
  20. package/dist/lib/compose.d.ts +10 -0
  21. package/dist/lib/compose.d.ts.map +1 -1
  22. package/dist/lib/compose.js +126 -1
  23. package/dist/lib/compose.js.map +1 -1
  24. package/dist/lib/db-backup.d.ts +23 -0
  25. package/dist/lib/db-backup.d.ts.map +1 -0
  26. package/dist/lib/db-backup.js +80 -0
  27. package/dist/lib/db-backup.js.map +1 -0
  28. package/dist/lib/env.d.ts +6 -0
  29. package/dist/lib/env.d.ts.map +1 -1
  30. package/dist/lib/env.js +34 -24
  31. package/dist/lib/env.js.map +1 -1
  32. package/dist/lib/migration-009-bind-mount-files.d.ts +5 -4
  33. package/dist/lib/migration-009-bind-mount-files.d.ts.map +1 -1
  34. package/dist/lib/migration-009-bind-mount-files.js +13 -5
  35. package/dist/lib/migration-009-bind-mount-files.js.map +1 -1
  36. package/dist/lib/migration-013-grafana-password.d.ts +3 -9
  37. package/dist/lib/migration-013-grafana-password.d.ts.map +1 -1
  38. package/dist/lib/migration-013-grafana-password.js +14 -60
  39. package/dist/lib/migration-013-grafana-password.js.map +1 -1
  40. package/dist/lib/release-migration-progress.d.ts +48 -0
  41. package/dist/lib/release-migration-progress.d.ts.map +1 -0
  42. package/dist/lib/release-migration-progress.js +223 -0
  43. package/dist/lib/release-migration-progress.js.map +1 -0
  44. package/dist/lib/syslog.d.ts +5 -0
  45. package/dist/lib/syslog.d.ts.map +1 -0
  46. package/dist/lib/syslog.js +21 -0
  47. package/dist/lib/syslog.js.map +1 -0
  48. package/dist/lib/update-steps.d.ts.map +1 -1
  49. package/dist/lib/update-steps.js +111 -0
  50. package/dist/lib/update-steps.js.map +1 -1
  51. package/dist/lib/version.d.ts +1 -1
  52. package/dist/lib/version.js +1 -1
  53. package/dist/ui/views/DbBackupView.d.ts.map +1 -1
  54. package/dist/ui/views/DbBackupView.js +11 -27
  55. package/dist/ui/views/DbBackupView.js.map +1 -1
  56. package/dist/ui/views/MigrateDrainView.d.ts +6 -0
  57. package/dist/ui/views/MigrateDrainView.d.ts.map +1 -0
  58. package/dist/ui/views/MigrateDrainView.js +77 -0
  59. package/dist/ui/views/MigrateDrainView.js.map +1 -0
  60. package/dist/ui/views/MigrateStatusView.d.ts.map +1 -1
  61. package/dist/ui/views/MigrateStatusView.js +16 -7
  62. package/dist/ui/views/MigrateStatusView.js.map +1 -1
  63. package/dist/ui/views/MigrateWatchView.d.ts.map +1 -1
  64. package/dist/ui/views/MigrateWatchView.js +17 -12
  65. package/dist/ui/views/MigrateWatchView.js.map +1 -1
  66. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/lib/env.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/lib/env.ts"],"names":[],"mappings":"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"}
@@ -2,10 +2,11 @@
2
2
  * Migration 009: Fix Docker bind-mount directory-vs-file confusion.
3
3
  *
4
4
  * Docker auto-creates missing bind-mount targets as DIRECTORIES.
5
- * If alertmanager.yml or tempo.yaml were created as directories
6
- * (from a `docker compose up` before the files existed), the services
7
- * fail to start. This migration removes the bogus directories and
8
- * creates the correct config files.
5
+ * If alertmanager.yml, tempo.yaml, or prometheus config files were
6
+ * created as directories (from a `docker compose up` before the files
7
+ * existed), the services fail to start or use wrong config. This
8
+ * migration removes the bogus directories and creates the correct
9
+ * stub config files.
9
10
  */
10
11
  export declare function migrateBindMountFiles(): Promise<boolean>;
11
12
  //# sourceMappingURL=migration-009-bind-mount-files.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"migration-009-bind-mount-files.d.ts","sourceRoot":"","sources":["../../src/lib/migration-009-bind-mount-files.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAkFH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC,CAI9D"}
1
+ {"version":3,"file":"migration-009-bind-mount-files.d.ts","sourceRoot":"","sources":["../../src/lib/migration-009-bind-mount-files.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAwFH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC,CAM9D"}
@@ -2,10 +2,11 @@
2
2
  * Migration 009: Fix Docker bind-mount directory-vs-file confusion.
3
3
  *
4
4
  * Docker auto-creates missing bind-mount targets as DIRECTORIES.
5
- * If alertmanager.yml or tempo.yaml were created as directories
6
- * (from a `docker compose up` before the files existed), the services
7
- * fail to start. This migration removes the bogus directories and
8
- * creates the correct config files.
5
+ * If alertmanager.yml, tempo.yaml, or prometheus config files were
6
+ * created as directories (from a `docker compose up` before the files
7
+ * existed), the services fail to start or use wrong config. This
8
+ * migration removes the bogus directories and creates the correct
9
+ * stub config files.
9
10
  */
10
11
  import { existsSync, statSync, mkdirSync, writeFileSync, rmSync } from 'node:fs';
11
12
  import { join } from 'node:path';
@@ -23,6 +24,11 @@ route:
23
24
  receivers:
24
25
  - name: 'default'
25
26
  `;
27
+ const PROMETHEUS_DIR = join(INSTALL_DIR, 'prometheus');
28
+ const PROMETHEUS_CUSTOM_RULES_FILE = join(PROMETHEUS_DIR, 'custom_rules.yml');
29
+ const PROMETHEUS_CUSTOM_RULES_CONTENT = `groups: []\n`;
30
+ const PROMETHEUS_POSTGRES_QUERIES_FILE = join(PROMETHEUS_DIR, 'postgres-queries.yaml');
31
+ const PROMETHEUS_POSTGRES_QUERIES_CONTENT = `{}\n`;
26
32
  const TEMPO_DIR = join(INSTALL_DIR, 'tempo');
27
33
  const TEMPO_FILE = join(TEMPO_DIR, 'tempo.yaml');
28
34
  const TEMPO_CONTENT = `server:
@@ -81,6 +87,8 @@ function fixBindMount(dir, filePath, content) {
81
87
  export async function migrateBindMountFiles() {
82
88
  const a = fixBindMount(ALERTMANAGER_DIR, ALERTMANAGER_FILE, ALERTMANAGER_CONTENT);
83
89
  const b = fixBindMount(TEMPO_DIR, TEMPO_FILE, TEMPO_CONTENT);
84
- return a || b;
90
+ const c = fixBindMount(PROMETHEUS_DIR, PROMETHEUS_CUSTOM_RULES_FILE, PROMETHEUS_CUSTOM_RULES_CONTENT);
91
+ const d = fixBindMount(PROMETHEUS_DIR, PROMETHEUS_POSTGRES_QUERIES_FILE, PROMETHEUS_POSTGRES_QUERIES_CONTENT);
92
+ return a || b || c || d;
85
93
  }
86
94
  //# sourceMappingURL=migration-009-bind-mount-files.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"migration-009-bind-mount-files.js","sourceRoot":"","sources":["../../src/lib/migration-009-bind-mount-files.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,WAAW,GAAG,QAAQ,EAAE,CAAC,UAAU,CAAC;AAE1C,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AAC3D,MAAM,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;AACrE,MAAM,oBAAoB,GAAG;;;;;;;;;CAS5B,CAAC;AAEF,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACjD,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCrB,CAAC;AAEF,SAAS,YAAY,CAAC,GAAW,EAAE,QAAgB,EAAE,OAAe;IAClE,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,qEAAqE;IACrE,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QAC7D,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IAED,iCAAiC;IACjC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpC,sCAAsC;IACtC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjC,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,MAAM,CAAC,GAAG,YAAY,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,oBAAoB,CAAC,CAAC;IAClF,MAAM,CAAC,GAAG,YAAY,CAAC,SAAS,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;IAC7D,OAAO,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"migration-009-bind-mount-files.js","sourceRoot":"","sources":["../../src/lib/migration-009-bind-mount-files.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,WAAW,GAAG,QAAQ,EAAE,CAAC,UAAU,CAAC;AAE1C,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AAC3D,MAAM,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;AACrE,MAAM,oBAAoB,GAAG;;;;;;;;;CAS5B,CAAC;AAEF,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AACvD,MAAM,4BAA4B,GAAG,IAAI,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;AAC9E,MAAM,+BAA+B,GAAG,cAAc,CAAC;AACvD,MAAM,gCAAgC,GAAG,IAAI,CAAC,cAAc,EAAE,uBAAuB,CAAC,CAAC;AACvF,MAAM,mCAAmC,GAAG,MAAM,CAAC;AAEnD,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACjD,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCrB,CAAC;AAEF,SAAS,YAAY,CAAC,GAAW,EAAE,QAAgB,EAAE,OAAe;IAClE,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,qEAAqE;IACrE,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QAC7D,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IAED,iCAAiC;IACjC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpC,sCAAsC;IACtC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjC,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,MAAM,CAAC,GAAG,YAAY,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,oBAAoB,CAAC,CAAC;IAClF,MAAM,CAAC,GAAG,YAAY,CAAC,SAAS,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;IAC7D,MAAM,CAAC,GAAG,YAAY,CAAC,cAAc,EAAE,4BAA4B,EAAE,+BAA+B,CAAC,CAAC;IACtG,MAAM,CAAC,GAAG,YAAY,CAAC,cAAc,EAAE,gCAAgC,EAAE,mCAAmC,CAAC,CAAC;IAC9G,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -1,15 +1,9 @@
1
1
  /**
2
2
  * Migration 013: Generate GRAFANA_PASSWORD for deterministic Grafana auth.
3
3
  *
4
- * The BootProvisioner (Elixir) uses GRAFANA_PASSWORD for basic auth to push
5
- * dashboards to Grafana. Both the web container and grafana container read
6
- * this from .env. If it's missing, dashboard provisioning fails.
7
- *
8
- * This migration:
9
- * 1. Generates a random 32-char hex password
10
- * 2. Writes GRAFANA_PASSWORD=<password> to .env
11
- * 3. Removes stale GRAFANA_TOKEN if present
12
- * 4. Resets Grafana admin password via grafana-cli (for existing volumes)
4
+ * This is a configuration migration only. It seeds .env on fresh or upgraded
5
+ * installs so Grafana can boot with a deterministic admin password. It must not
6
+ * reset Grafana's admin password on existing appliances.
13
7
  */
14
8
  export declare function migrateGrafanaPassword(): Promise<boolean>;
15
9
  //# sourceMappingURL=migration-013-grafana-password.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"migration-013-grafana-password.d.ts","sourceRoot":"","sources":["../../src/lib/migration-013-grafana-password.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAQH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC,CAoE/D"}
1
+ {"version":3,"file":"migration-013-grafana-password.d.ts","sourceRoot":"","sources":["../../src/lib/migration-013-grafana-password.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC,CAkB/D"}
@@ -1,72 +1,26 @@
1
1
  /**
2
2
  * Migration 013: Generate GRAFANA_PASSWORD for deterministic Grafana auth.
3
3
  *
4
- * The BootProvisioner (Elixir) uses GRAFANA_PASSWORD for basic auth to push
5
- * dashboards to Grafana. Both the web container and grafana container read
6
- * this from .env. If it's missing, dashboard provisioning fails.
7
- *
8
- * This migration:
9
- * 1. Generates a random 32-char hex password
10
- * 2. Writes GRAFANA_PASSWORD=<password> to .env
11
- * 3. Removes stale GRAFANA_TOKEN if present
12
- * 4. Resets Grafana admin password via grafana-cli (for existing volumes)
4
+ * This is a configuration migration only. It seeds .env on fresh or upgraded
5
+ * installs so Grafana can boot with a deterministic admin password. It must not
6
+ * reset Grafana's admin password on existing appliances.
13
7
  */
14
- import { existsSync, readFileSync, writeFileSync, unlinkSync } from 'node:fs';
15
8
  import { randomBytes } from 'node:crypto';
16
- import { spawnSync } from 'node:child_process';
17
- import { join } from 'node:path';
18
- import { getPaths } from './paths.js';
9
+ import { readEnvRaw, updateEnvKeys } from './env.js';
10
+ import { parseEnvFile } from './secrets.js';
19
11
  export async function migrateGrafanaPassword() {
20
- const { installDir } = getPaths();
21
- const envFile = join(installDir, '.env');
22
- // If GRAFANA_PASSWORD is already set, nothing to do
23
- if (existsSync(envFile)) {
24
- const content = readFileSync(envFile, 'utf-8');
25
- if (content.includes('GRAFANA_PASSWORD=')) {
26
- return false; // Already configured
27
- }
28
- }
29
- // Generate random password
30
- const password = randomBytes(16).toString('hex');
31
- // Build .env block
32
- const block = '\n# Grafana auth password (auto-generated by migration 013)\n' +
33
- `GRAFANA_PASSWORD=${password}\n`;
34
- const tmp = `/tmp/ct-grafana-pw-${Date.now()}`;
35
- writeFileSync(tmp, block);
36
- // Append to .env
37
- const appendResult = spawnSync('sudo', ['bash', '-c', `cat ${tmp} >> ${envFile}`], {
38
- stdio: 'pipe',
39
- });
40
- try {
41
- unlinkSync(tmp);
42
- }
43
- catch {
44
- /* ignore */
45
- }
46
- if (appendResult.status !== 0) {
47
- throw new Error(`Failed to write GRAFANA_PASSWORD to ${envFile}`);
12
+ const env = parseEnvFile(await readEnvRaw());
13
+ const updates = {};
14
+ if (!env.GRAFANA_PASSWORD) {
15
+ updates.GRAFANA_PASSWORD = randomBytes(16).toString('hex');
48
16
  }
49
- // Remove stale GRAFANA_TOKEN lines from .env (replaced by GRAFANA_PASSWORD)
50
- if (existsSync(envFile)) {
51
- const content = readFileSync(envFile, 'utf-8');
52
- if (content.includes('GRAFANA_TOKEN=')) {
53
- spawnSync('sudo', ['sed', '-i', '/^GRAFANA_TOKEN=/d', envFile], { stdio: 'pipe' });
54
- spawnSync('sudo', ['sed', '-i', '/^# .*GRAFANA_TOKEN/d', envFile], { stdio: 'pipe' });
55
- }
17
+ if (Object.prototype.hasOwnProperty.call(env, 'GRAFANA_TOKEN')) {
18
+ updates.GRAFANA_TOKEN = undefined;
56
19
  }
57
- // Reset Grafana admin password for existing volumes.
58
- // grafana-cli stores the new password in the SQLite DB, overriding whatever
59
- // was set previously (even if changed via the UI).
60
- const resetResult = spawnSync('docker', ['compose', 'exec', '-T', 'grafana', 'grafana-cli', 'admin', 'reset-admin-password', password], { cwd: installDir, stdio: 'pipe', timeout: 30_000 });
61
- if (resetResult.status !== 0) {
62
- // Grafana container might not be running — that's OK.
63
- // On next start, GF_SECURITY_ADMIN_PASSWORD from .env will be used
64
- // (only applies on first start of a fresh volume, but that covers new installs).
65
- const stderr = resetResult.stderr?.toString() ?? '';
66
- if (!stderr.includes('No such container') && !stderr.includes('not running')) {
67
- console.warn(`[migration-013] grafana-cli reset failed (non-fatal): ${stderr.slice(0, 200)}`);
68
- }
20
+ if (Object.keys(updates).length === 0) {
21
+ return false;
69
22
  }
23
+ await updateEnvKeys(updates);
70
24
  return true;
71
25
  }
72
26
  //# sourceMappingURL=migration-013-grafana-password.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"migration-013-grafana-password.js","sourceRoot":"","sources":["../../src/lib/migration-013-grafana-password.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migration-013-grafana-password.js","sourceRoot":"","sources":["../../src/lib/migration-013-grafana-password.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,UAAU,EAAE,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAuC,EAAE,CAAC;IAEvD,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC1B,OAAO,CAAC,gBAAgB,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,EAAE,CAAC;QAC/D,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IACpC,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;IAC7B,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,48 @@
1
+ export interface MigrationProgressEntry {
2
+ version?: string;
3
+ name?: string;
4
+ filename?: string;
5
+ description?: string;
6
+ startedAt?: string;
7
+ completedAt?: string;
8
+ runtimeMs?: number;
9
+ }
10
+ export interface MigrationProgressArtifacts {
11
+ statusPath?: string;
12
+ eventsPath?: string;
13
+ logPath?: string;
14
+ }
15
+ export interface MigrationProgressSnapshot {
16
+ state?: string;
17
+ repository?: string;
18
+ appliedCount?: number;
19
+ totalCount?: number;
20
+ pendingCount?: number;
21
+ currentVersion?: string;
22
+ latestApplied?: MigrationProgressEntry;
23
+ currentMigration?: MigrationProgressEntry;
24
+ lastCompletedMigration?: MigrationProgressEntry;
25
+ nextMigration?: MigrationProgressEntry;
26
+ updatedAt?: string;
27
+ error?: string;
28
+ artifacts: MigrationProgressArtifacts;
29
+ }
30
+ export interface MigrationProgressResult {
31
+ source: 'artifact' | 'rpc';
32
+ snapshot: MigrationProgressSnapshot;
33
+ output: string;
34
+ }
35
+ export interface MigrationArtifactTails {
36
+ events: string;
37
+ log: string;
38
+ }
39
+ export declare function formatRuntimeMs(runtimeMs?: number): string;
40
+ export declare function parseMigrationProgressArtifact(raw: string): MigrationProgressSnapshot;
41
+ export declare function formatMigrationProgress(snapshot: MigrationProgressSnapshot): string;
42
+ export declare function getMigrationProgress(): Promise<MigrationProgressResult>;
43
+ export declare function tailMigrationArtifacts(snapshot: MigrationProgressSnapshot, options?: {
44
+ eventLines?: number;
45
+ logLines?: number;
46
+ }): Promise<MigrationArtifactTails>;
47
+ export declare function migrationProgressReportRpc(): string;
48
+ //# sourceMappingURL=release-migration-progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-migration-progress.d.ts","sourceRoot":"","sources":["../../src/lib/release-migration-progress.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,sBAAsB,CAAC;IACvC,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAC1C,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAChD,aAAa,CAAC,EAAE,sBAAsB,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,0BAA0B,CAAC;CACvC;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,UAAU,GAAG,KAAK,CAAC;IAC3B,QAAQ,EAAE,yBAAyB,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAoCD,wBAAgB,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAa1D;AAED,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,MAAM,GAAG,yBAAyB,CAwBrF;AAMD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,yBAAyB,GAAG,MAAM,CAuCnF;AAuDD,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,uBAAuB,CAAC,CA4B7E;AAeD,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,yBAAyB,EACnC,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GACvD,OAAO,CAAC,sBAAsB,CAAC,CAMjC;AAED,wBAAgB,0BAA0B,IAAI,MAAM,CAEnD"}
@@ -0,0 +1,223 @@
1
+ import { composeExec } from './compose.js';
2
+ import { debug } from './log.js';
3
+ import { rpc } from './rpc.js';
4
+ const DEFAULT_PROGRESS_DIR = '/home/app/logs/migrations';
5
+ function numberValue(value) {
6
+ if (typeof value === 'number' && Number.isFinite(value))
7
+ return Math.trunc(value);
8
+ if (typeof value === 'string' && /^\d+$/.test(value.trim()))
9
+ return Number.parseInt(value.trim(), 10);
10
+ return undefined;
11
+ }
12
+ function stringValue(value) {
13
+ if (value === null || value === undefined)
14
+ return undefined;
15
+ const text = String(value).trim();
16
+ return text.length > 0 ? text : undefined;
17
+ }
18
+ function objectValue(value) {
19
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
20
+ return value;
21
+ }
22
+ return undefined;
23
+ }
24
+ function migrationEntry(value) {
25
+ const obj = objectValue(value);
26
+ if (!obj)
27
+ return undefined;
28
+ return {
29
+ version: stringValue(obj.version),
30
+ name: stringValue(obj.name),
31
+ filename: stringValue(obj.filename),
32
+ description: stringValue(obj.description),
33
+ startedAt: stringValue(obj.started_at),
34
+ completedAt: stringValue(obj.completed_at),
35
+ runtimeMs: numberValue(obj.runtime_ms),
36
+ };
37
+ }
38
+ export function formatRuntimeMs(runtimeMs) {
39
+ if (!Number.isFinite(runtimeMs))
40
+ return 'unknown';
41
+ const totalMs = Math.max(0, Math.trunc(runtimeMs ?? 0));
42
+ const totalSeconds = Math.floor(totalMs / 1000);
43
+ const hours = Math.floor(totalSeconds / 3600);
44
+ const minutes = Math.floor((totalSeconds % 3600) / 60);
45
+ const seconds = totalSeconds % 60;
46
+ const ms = totalMs % 1000;
47
+ if (hours > 0)
48
+ return `${hours}h ${minutes}m ${seconds}.${String(ms).padStart(3, '0')}s`;
49
+ if (minutes > 0)
50
+ return `${minutes}m ${seconds}.${String(ms).padStart(3, '0')}s`;
51
+ return `${seconds}.${String(ms).padStart(3, '0')}s`;
52
+ }
53
+ export function parseMigrationProgressArtifact(raw) {
54
+ const data = JSON.parse(raw);
55
+ const currentMigration = migrationEntry(data.current_migration);
56
+ const latestApplied = migrationEntry(data.latest_applied);
57
+ return {
58
+ state: stringValue(data.state ?? data.status),
59
+ repository: stringValue(data.repository),
60
+ appliedCount: numberValue(data.applied_count),
61
+ totalCount: numberValue(data.total_migrations ?? data.total_count),
62
+ pendingCount: numberValue(data.pending_count),
63
+ currentVersion: stringValue(data.current_version) ?? currentMigration?.version,
64
+ latestApplied,
65
+ currentMigration,
66
+ lastCompletedMigration: migrationEntry(data.last_completed_migration),
67
+ nextMigration: migrationEntry(data.next_migration),
68
+ updatedAt: stringValue(data.updated_at),
69
+ error: stringValue(data.error),
70
+ artifacts: {
71
+ statusPath: stringValue(data.artifact_status_path),
72
+ eventsPath: stringValue(data.artifact_events_path),
73
+ logPath: stringValue(data.artifact_log_path),
74
+ },
75
+ };
76
+ }
77
+ function versionAndFile(entry) {
78
+ return `${entry.version ?? 'unknown'} - ${entry.filename ?? entry.name ?? 'unknown'}`;
79
+ }
80
+ export function formatMigrationProgress(snapshot) {
81
+ const lines = ['=== Migration Progress ==='];
82
+ if (snapshot.state)
83
+ lines.push(`State: ${snapshot.state}`);
84
+ if (snapshot.appliedCount !== undefined || snapshot.totalCount !== undefined) {
85
+ lines.push(`Applied migrations: ${snapshot.appliedCount ?? '?'}/${snapshot.totalCount ?? '?'}`);
86
+ }
87
+ if (snapshot.pendingCount !== undefined)
88
+ lines.push(`Pending migrations: ${snapshot.pendingCount}`);
89
+ if (snapshot.latestApplied) {
90
+ lines.push(`Latest applied: ${versionAndFile(snapshot.latestApplied)}`);
91
+ }
92
+ if (snapshot.currentMigration) {
93
+ lines.push(`Current migration: ${versionAndFile(snapshot.currentMigration)}`);
94
+ if (snapshot.currentMigration.description)
95
+ lines.push(`Current description: ${snapshot.currentMigration.description}`);
96
+ if (snapshot.currentMigration.startedAt)
97
+ lines.push(`Current started: ${snapshot.currentMigration.startedAt}`);
98
+ lines.push(`Current runtime: ${formatRuntimeMs(snapshot.currentMigration.runtimeMs)}`);
99
+ }
100
+ if (snapshot.lastCompletedMigration) {
101
+ lines.push(`Last completed: ${versionAndFile(snapshot.lastCompletedMigration)}`);
102
+ if (snapshot.lastCompletedMigration.description)
103
+ lines.push(`Last completed description: ${snapshot.lastCompletedMigration.description}`);
104
+ if (snapshot.lastCompletedMigration.completedAt)
105
+ lines.push(`Last completed at: ${snapshot.lastCompletedMigration.completedAt}`);
106
+ lines.push(`Last completed runtime: ${formatRuntimeMs(snapshot.lastCompletedMigration.runtimeMs)}`);
107
+ }
108
+ if (snapshot.nextMigration) {
109
+ lines.push(`Next pending: ${versionAndFile(snapshot.nextMigration)}`);
110
+ if (snapshot.nextMigration.description)
111
+ lines.push(`Next description: ${snapshot.nextMigration.description}`);
112
+ }
113
+ if (snapshot.updatedAt)
114
+ lines.push(`Updated at: ${snapshot.updatedAt}`);
115
+ if (snapshot.artifacts.statusPath)
116
+ lines.push(`Artifact status: ${snapshot.artifacts.statusPath}`);
117
+ if (snapshot.artifacts.eventsPath)
118
+ lines.push(`Artifact events: ${snapshot.artifacts.eventsPath}`);
119
+ if (snapshot.artifacts.logPath)
120
+ lines.push(`Artifact log: ${snapshot.artifacts.logPath}`);
121
+ if (snapshot.error)
122
+ lines.push(`Error: ${snapshot.error}`);
123
+ return lines.join('\n');
124
+ }
125
+ function markerValue(raw, key) {
126
+ const prefix = `::${key}=`;
127
+ const line = raw.split('\n').find((entry) => entry.startsWith(prefix));
128
+ return line ? line.slice(prefix.length).trim() : undefined;
129
+ }
130
+ /**
131
+ * Parses release-side migration progress output into the minimum structured
132
+ * snapshot the update loop needs. The contract is strict: a numeric
133
+ * `pendingCount` must be derivable from hidden markers, human-readable pending
134
+ * text, or applied/total counts. Without that value the caller cannot know when
135
+ * migrations are complete, so this throws instead of letting the update poll
136
+ * indefinitely.
137
+ */
138
+ function parseRpcMarkers(raw) {
139
+ const markerPendingCount = numberValue(markerValue(raw, 'pending_count'));
140
+ const pendingMatch = raw.match(/Pending migrations:\s+(\d+)/);
141
+ const appliedMatch = raw.match(/Applied migrations:\s+(\d+)\/(\d+)/);
142
+ const appliedCount = appliedMatch ? Number.parseInt(appliedMatch[1], 10) : undefined;
143
+ const totalCount = appliedMatch ? Number.parseInt(appliedMatch[2], 10) : undefined;
144
+ const pendingCount = markerPendingCount
145
+ ?? (pendingMatch ? Number.parseInt(pendingMatch[1], 10) : undefined)
146
+ ?? (appliedCount !== undefined && totalCount !== undefined
147
+ ? Math.max(totalCount - appliedCount, 0)
148
+ : undefined);
149
+ if (pendingCount === undefined) {
150
+ throw new Error('Unable to determine pending migration count from release migration progress report');
151
+ }
152
+ return {
153
+ appliedCount,
154
+ totalCount,
155
+ pendingCount,
156
+ artifacts: {},
157
+ };
158
+ }
159
+ async function readArtifactJson() {
160
+ const artifactDir = process.env.CT_MIGRATION_PROGRESS_DIR ?? DEFAULT_PROGRESS_DIR;
161
+ const result = await composeExec('web', [
162
+ 'sh',
163
+ '-lc',
164
+ 'status_path="$1"; if [ -f "$status_path" ]; then cat "$status_path"; fi',
165
+ '--',
166
+ `${artifactDir}/current_status.json`,
167
+ ], { pipe: true });
168
+ const stdout = String(result.stdout ?? '').trim();
169
+ return stdout.length > 0 ? stdout : null;
170
+ }
171
+ export async function getMigrationProgress() {
172
+ try {
173
+ const artifact = await readArtifactJson();
174
+ if (artifact) {
175
+ const snapshot = parseMigrationProgressArtifact(artifact);
176
+ if (typeof snapshot.pendingCount !== 'number') {
177
+ throw new Error('Migration progress artifact missing pending_count');
178
+ }
179
+ return {
180
+ source: 'artifact',
181
+ snapshot,
182
+ output: formatMigrationProgress(snapshot),
183
+ };
184
+ }
185
+ }
186
+ catch (err) {
187
+ // Fall through to release-side report. Older releases and booting apps may
188
+ // not have written the artifact yet.
189
+ const message = err instanceof Error ? err.message : String(err);
190
+ debug(`Read/parse migration progress artifact failed, falling back to RPC: ${message}`);
191
+ }
192
+ const output = await rpc(migrationProgressReportRpc());
193
+ const snapshot = parseRpcMarkers(output);
194
+ return {
195
+ source: 'rpc',
196
+ snapshot,
197
+ output: output.split('\n').filter((line) => !line.startsWith('::')).join('\n'),
198
+ };
199
+ }
200
+ async function tailArtifact(path, lines) {
201
+ if (!path)
202
+ return '';
203
+ const result = await composeExec('web', [
204
+ 'sh',
205
+ '-lc',
206
+ 'artifact_path="$1"; lines="$2"; if [ -f "$artifact_path" ]; then tail -n "$lines" "$artifact_path"; fi',
207
+ '--',
208
+ path,
209
+ String(lines),
210
+ ], { pipe: true });
211
+ return String(result.stdout ?? '').trim();
212
+ }
213
+ export async function tailMigrationArtifacts(snapshot, options = {}) {
214
+ const [events, log] = await Promise.all([
215
+ tailArtifact(snapshot.artifacts.eventsPath, options.eventLines ?? 2),
216
+ tailArtifact(snapshot.artifacts.logPath, options.logLines ?? 5),
217
+ ]);
218
+ return { events, log };
219
+ }
220
+ export function migrationProgressReportRpc() {
221
+ return 'IO.puts(Cdrcisco.Release.migration_progress_report())';
222
+ }
223
+ //# sourceMappingURL=release-migration-progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-migration-progress.js","sourceRoot":"","sources":["../../src/lib/release-migration-progress.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare const SYSLOG_SERVICES: string[];
2
+ export declare function isSyslogEnabled(): boolean;
3
+ export declare function enableSyslog(): Promise<void>;
4
+ export declare function disableSyslog(): Promise<void>;
5
+ //# sourceMappingURL=syslog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syslog.d.ts","sourceRoot":"","sources":["../../src/lib/syslog.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,UAAwC,CAAC;AAOrE,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAIlD;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAInD"}
@@ -0,0 +1,21 @@
1
+ import { readEnvKeys, updateEnvKeys } from './env.js';
2
+ export const SYSLOG_SERVICES = ['ct-syslog-ingest', 'loki', 'alloy'];
3
+ function readComposeProfiles() {
4
+ const env = readEnvKeys();
5
+ return (env.COMPOSE_PROFILES ?? '').split(',').map(p => p.trim()).filter(Boolean);
6
+ }
7
+ export function isSyslogEnabled() {
8
+ return readComposeProfiles().includes('syslog');
9
+ }
10
+ export async function enableSyslog() {
11
+ const profiles = readComposeProfiles();
12
+ if (!profiles.includes('syslog'))
13
+ profiles.push('syslog');
14
+ await updateEnvKeys({ COMPOSE_PROFILES: profiles.join(',') });
15
+ }
16
+ export async function disableSyslog() {
17
+ const profiles = readComposeProfiles();
18
+ const filtered = profiles.filter(p => p !== 'syslog');
19
+ await updateEnvKeys({ COMPOSE_PROFILES: filtered.length > 0 ? filtered.join(',') : undefined });
20
+ }
21
+ //# sourceMappingURL=syslog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syslog.js","sourceRoot":"","sources":["../../src/lib/syslog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEtD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,kBAAkB,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAErE,SAAS,mBAAmB;IAC1B,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,mBAAmB,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IACvC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1D,MAAM,aAAa,CAAC,EAAE,gBAAgB,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;IACtD,MAAM,aAAa,CAAC,EAAE,gBAAgB,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;AAClG,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"update-steps.d.ts","sourceRoot":"","sources":["../../src/lib/update-steps.ts"],"names":[],"mappings":"AAaA,oEAAoE;AACpE,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED,sEAAsE;AACtE,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACpD;AAID,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,UAAU,EAAE,CAyClE;AAID,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,UAAU,EAAE,CAuMhE;AAID;;;GAGG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAepE"}
1
+ {"version":3,"file":"update-steps.d.ts","sourceRoot":"","sources":["../../src/lib/update-steps.ts"],"names":[],"mappings":"AAiBA,oEAAoE;AACpE,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED,sEAAsE;AACtE,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACpD;AAgDD,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,UAAU,EAAE,CAyClE;AAID,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,UAAU,EAAE,CA2QhE;AAID;;;GAGG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAepE"}