@calltelemetry/cli 0.7.8 → 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.
- package/dist/lib/env.d.ts +6 -0
- package/dist/lib/env.d.ts.map +1 -1
- package/dist/lib/env.js +34 -24
- package/dist/lib/env.js.map +1 -1
- package/dist/lib/migration-013-grafana-password.d.ts +3 -9
- package/dist/lib/migration-013-grafana-password.d.ts.map +1 -1
- package/dist/lib/migration-013-grafana-password.js +14 -60
- package/dist/lib/migration-013-grafana-password.js.map +1 -1
- package/dist/lib/version.d.ts +1 -1
- package/dist/lib/version.js +1 -1
- package/package.json +1 -1
package/dist/lib/env.d.ts
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read the raw .env file, falling back to passwordless sudo for root-owned
|
|
3
|
+
* appliance files. Returns empty content if the file does not exist or cannot
|
|
4
|
+
* be read.
|
|
5
|
+
*/
|
|
6
|
+
export declare function readEnvRaw(): Promise<string>;
|
|
1
7
|
/**
|
|
2
8
|
* Read all key-value pairs from the .env file.
|
|
3
9
|
* Returns empty object if .env doesn't exist.
|
package/dist/lib/env.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/lib/env.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQpD;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAC1C,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/lib/env.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAelD;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQpD;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAC1C,OAAO,CAAC,IAAI,CAAC,CA0Df"}
|
package/dist/lib/env.js
CHANGED
|
@@ -1,6 +1,29 @@
|
|
|
1
1
|
import { existsSync, readFileSync } from 'node:fs';
|
|
2
2
|
import { getEnvFilePath, parseEnvFile } from './secrets.js';
|
|
3
3
|
import { writeFileSafe } from './fs.js';
|
|
4
|
+
/**
|
|
5
|
+
* Read the raw .env file, falling back to passwordless sudo for root-owned
|
|
6
|
+
* appliance files. Returns empty content if the file does not exist or cannot
|
|
7
|
+
* be read.
|
|
8
|
+
*/
|
|
9
|
+
export async function readEnvRaw() {
|
|
10
|
+
const envPath = getEnvFilePath();
|
|
11
|
+
if (!existsSync(envPath))
|
|
12
|
+
return '';
|
|
13
|
+
try {
|
|
14
|
+
return readFileSync(envPath, 'utf-8');
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
try {
|
|
18
|
+
const { execa } = await import('execa');
|
|
19
|
+
const { stdout } = await execa('sudo', ['-n', 'cat', envPath]);
|
|
20
|
+
return stdout;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return '';
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
4
27
|
/**
|
|
5
28
|
* Read all key-value pairs from the .env file.
|
|
6
29
|
* Returns empty object if .env doesn't exist.
|
|
@@ -25,30 +48,15 @@ export function readEnvKeys() {
|
|
|
25
48
|
*/
|
|
26
49
|
export async function updateEnvKeys(updates) {
|
|
27
50
|
const envPath = getEnvFilePath();
|
|
28
|
-
|
|
29
|
-
if (existsSync(envPath)) {
|
|
30
|
-
try {
|
|
31
|
-
raw = readFileSync(envPath, 'utf-8');
|
|
32
|
-
}
|
|
33
|
-
catch {
|
|
34
|
-
// File exists but not readable (owned by root) — read via sudo
|
|
35
|
-
try {
|
|
36
|
-
const { execa } = await import('execa');
|
|
37
|
-
const { stdout } = await execa('sudo', ['-n', 'cat', envPath]);
|
|
38
|
-
raw = stdout;
|
|
39
|
-
}
|
|
40
|
-
catch {
|
|
41
|
-
// Can't read even with sudo — start fresh
|
|
42
|
-
raw = '';
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
51
|
+
const raw = await readEnvRaw();
|
|
46
52
|
// Split into lines, but drop the final empty string produced by trailing newline
|
|
47
53
|
const lines = raw.length > 0 ? raw.split('\n') : [];
|
|
48
54
|
if (lines.length > 0 && lines[lines.length - 1] === '') {
|
|
49
55
|
lines.pop();
|
|
50
56
|
}
|
|
51
57
|
const pending = new Map(Object.entries(updates));
|
|
58
|
+
const targetKeys = new Set(Object.keys(updates));
|
|
59
|
+
const seenUpdatedKeys = new Set();
|
|
52
60
|
const result = [];
|
|
53
61
|
for (const line of lines) {
|
|
54
62
|
const trimmed = line.trim();
|
|
@@ -65,14 +73,16 @@ export async function updateEnvKeys(updates) {
|
|
|
65
73
|
continue;
|
|
66
74
|
}
|
|
67
75
|
const key = stripped.slice(0, eqIdx).trim();
|
|
68
|
-
if (
|
|
76
|
+
if (targetKeys.has(key)) {
|
|
69
77
|
const newValue = pending.get(key);
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
78
|
+
const firstMatch = !seenUpdatedKeys.has(key);
|
|
79
|
+
seenUpdatedKeys.add(key);
|
|
80
|
+
if (newValue !== undefined && firstMatch) {
|
|
73
81
|
result.push(`${key}=${newValue}`);
|
|
82
|
+
pending.delete(key);
|
|
74
83
|
}
|
|
75
|
-
// If undefined, skip
|
|
84
|
+
// If undefined, skip all matching lines. If this is a duplicate of a
|
|
85
|
+
// key already updated above, skip it so duplicate env keys collapse.
|
|
76
86
|
}
|
|
77
87
|
else {
|
|
78
88
|
result.push(line);
|
|
@@ -80,7 +90,7 @@ export async function updateEnvKeys(updates) {
|
|
|
80
90
|
}
|
|
81
91
|
// Append remaining new keys
|
|
82
92
|
for (const [key, value] of pending) {
|
|
83
|
-
if (value !== undefined) {
|
|
93
|
+
if (value !== undefined && !seenUpdatedKeys.has(key)) {
|
|
84
94
|
result.push(`${key}=${value}`);
|
|
85
95
|
}
|
|
86
96
|
}
|
package/dist/lib/env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/lib/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/lib/env.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Migration 013: Generate GRAFANA_PASSWORD for deterministic Grafana auth.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
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
|
|
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
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
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 {
|
|
17
|
-
import {
|
|
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
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
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
|
-
|
|
50
|
-
|
|
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
|
-
|
|
58
|
-
|
|
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":"AAAA
|
|
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"}
|
package/dist/lib/version.d.ts
CHANGED
package/dist/lib/version.js
CHANGED