@calltelemetry/cli 0.11.0 → 0.12.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.
- package/dist/commands/cube.d.ts +8 -0
- package/dist/commands/cube.d.ts.map +1 -0
- package/dist/commands/cube.js +47 -0
- package/dist/commands/cube.js.map +1 -0
- package/dist/commands/proxy.d.ts +3 -0
- package/dist/commands/proxy.d.ts.map +1 -0
- package/dist/commands/proxy.js +94 -0
- package/dist/commands/proxy.js.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/appliance-proxy-policy.d.ts +38 -0
- package/dist/lib/appliance-proxy-policy.d.ts.map +1 -0
- package/dist/lib/appliance-proxy-policy.js +132 -0
- package/dist/lib/appliance-proxy-policy.js.map +1 -0
- package/dist/lib/cube-diag.d.ts +26 -0
- package/dist/lib/cube-diag.d.ts.map +1 -0
- package/dist/lib/cube-diag.js +336 -0
- package/dist/lib/cube-diag.js.map +1 -0
- package/dist/lib/offline-steps.d.ts.map +1 -1
- package/dist/lib/offline-steps.js +18 -1
- package/dist/lib/offline-steps.js.map +1 -1
- package/dist/lib/proxy.d.ts +19 -0
- package/dist/lib/proxy.d.ts.map +1 -0
- package/dist/lib/proxy.js +104 -0
- package/dist/lib/proxy.js.map +1 -0
- package/dist/lib/rpc.d.ts +10 -1
- package/dist/lib/rpc.d.ts.map +1 -1
- package/dist/lib/rpc.js +14 -2
- package/dist/lib/rpc.js.map +1 -1
- package/dist/lib/update.d.ts.map +1 -1
- package/dist/lib/update.js +29 -2
- package/dist/lib/update.js.map +1 -1
- package/dist/lib/version.d.ts +1 -1
- package/dist/lib/version.js +1 -1
- package/dist/shell/commands/cube.d.ts +8 -0
- package/dist/shell/commands/cube.d.ts.map +1 -0
- package/dist/shell/commands/cube.js +47 -0
- package/dist/shell/commands/cube.js.map +1 -0
- package/dist/shell/commands/registry.d.ts.map +1 -1
- package/dist/shell/commands/registry.js +20 -0
- package/dist/shell/commands/registry.js.map +1 -1
- package/dist/utils/parseSecs.d.ts +17 -0
- package/dist/utils/parseSecs.d.ts.map +1 -0
- package/dist/utils/parseSecs.js +33 -0
- package/dist/utils/parseSecs.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* `ct cube` — CUBE/XCC diagnostics.
|
|
4
|
+
*
|
|
5
|
+
* Pure async command path (no React/Ink imports) so the CLI stays fast.
|
|
6
|
+
*/
|
|
7
|
+
export declare function registerCubeCommand(program: Command): void;
|
|
8
|
+
//# sourceMappingURL=cube.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cube.d.ts","sourceRoot":"","sources":["../../src/commands/cube.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,QAqCnD"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { collectCubeDiag } from '../lib/cube-diag.js';
|
|
2
|
+
import { parseNonNegativeSecs } from '../utils/parseSecs.js';
|
|
3
|
+
import * as out from '../utils/output.js';
|
|
4
|
+
/**
|
|
5
|
+
* `ct cube` — CUBE/XCC diagnostics.
|
|
6
|
+
*
|
|
7
|
+
* Pure async command path (no React/Ink imports) so the CLI stays fast.
|
|
8
|
+
*/
|
|
9
|
+
export function registerCubeCommand(program) {
|
|
10
|
+
const cube = program
|
|
11
|
+
.command('cube')
|
|
12
|
+
.description('CUBE diagnostics');
|
|
13
|
+
cube.command('diag')
|
|
14
|
+
.description('Collect a read-only cube DB + NATS + logs bundle (stuck REGISTERED triage)')
|
|
15
|
+
.option('--output <path>', 'Write the bundle to this path instead of ./cube-diag-<ISO>.log')
|
|
16
|
+
.option('--capture <secs>', 'Live-capture cube.> and alarms.> NATS subjects for N seconds', '0')
|
|
17
|
+
.option('--monitor <secs>', 'RPC-poll each cube state/interval every ~5s for N seconds', '0')
|
|
18
|
+
.action(async (opts) => {
|
|
19
|
+
// Strict parse FIRST — a junk `--capture`/`--monitor` must fail loudly, not
|
|
20
|
+
// silently coerce to 0 and look like a successful run that skipped capture.
|
|
21
|
+
let captureSecs;
|
|
22
|
+
let monitorSecs;
|
|
23
|
+
try {
|
|
24
|
+
captureSecs = parseNonNegativeSecs(opts.capture, '--capture');
|
|
25
|
+
monitorSecs = parseNonNegativeSecs(opts.monitor, '--monitor');
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
out.fail(err instanceof Error ? err.message : String(err));
|
|
29
|
+
process.exitCode = 1;
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
out.info('Collecting cube diagnostics (read-only)...');
|
|
33
|
+
try {
|
|
34
|
+
const path = await collectCubeDiag({
|
|
35
|
+
outputPath: opts.output,
|
|
36
|
+
captureSecs,
|
|
37
|
+
monitorSecs,
|
|
38
|
+
});
|
|
39
|
+
out.ok(`Cube diagnostic bundle written to ${path}`);
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
43
|
+
out.fail(`Cube diagnostics failed: ${message}`);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=cube.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cube.js","sourceRoot":"","sources":["../../src/commands/cube.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAE1C;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,MAAM,IAAI,GAAG,OAAO;SACjB,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,kBAAkB,CAAC,CAAC;IAEnC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;SACjB,WAAW,CAAC,4EAA4E,CAAC;SACzF,MAAM,CAAC,iBAAiB,EAAE,gEAAgE,CAAC;SAC3F,MAAM,CAAC,kBAAkB,EAAE,8DAA8D,EAAE,GAAG,CAAC;SAC/F,MAAM,CAAC,kBAAkB,EAAE,2DAA2D,EAAE,GAAG,CAAC;SAC5F,MAAM,CAAC,KAAK,EAAE,IAA6D,EAAE,EAAE;QAC9E,4EAA4E;QAC5E,4EAA4E;QAC5E,IAAI,WAAmB,CAAC;QACxB,IAAI,WAAmB,CAAC;QACxB,IAAI,CAAC;YACH,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YAC9D,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,GAAG,CAAC,IAAI,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QACvD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC;gBACjC,UAAU,EAAE,IAAI,CAAC,MAAM;gBACvB,WAAW;gBACX,WAAW;aACZ,CAAC,CAAC;YACH,GAAG,CAAC,EAAE,CAAC,qCAAqC,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,GAAG,CAAC,IAAI,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/commands/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+CpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8E3D"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { execa } from 'execa';
|
|
2
|
+
import { PROXY_ENV_KEYS, clearProxySettings, displayProxyValue, getProxySettings, setProxySettings, } from '../lib/proxy.js';
|
|
3
|
+
import * as out from '../utils/output.js';
|
|
4
|
+
function printProxySettings(title) {
|
|
5
|
+
console.log(title);
|
|
6
|
+
console.log('='.repeat(title.length));
|
|
7
|
+
const settings = getProxySettings();
|
|
8
|
+
for (const key of PROXY_ENV_KEYS) {
|
|
9
|
+
console.log(` ${key.padEnd(18)} ${displayProxyValue(key, settings[key])}`);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
async function restartIfRequested(restart) {
|
|
13
|
+
if (!restart) {
|
|
14
|
+
console.log('Restart services to apply app-container environment: ct restart');
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
await execa('systemctl', ['restart', 'docker-compose-app.service'], { stdout: 'inherit', stderr: 'inherit' });
|
|
18
|
+
out.ok('Services restarted.');
|
|
19
|
+
}
|
|
20
|
+
export function registerProxyCommand(program) {
|
|
21
|
+
const proxy = program
|
|
22
|
+
.command('proxy')
|
|
23
|
+
.description('Show or set appliance app egress proxy settings')
|
|
24
|
+
.action(() => {
|
|
25
|
+
printProxySettings('Appliance proxy configuration');
|
|
26
|
+
console.log();
|
|
27
|
+
console.log('Docker compose isolation: enabled');
|
|
28
|
+
console.log("Proxy settings here are written to .env for application egress; they are not written to Docker's compose client config.");
|
|
29
|
+
});
|
|
30
|
+
proxy
|
|
31
|
+
.command('show')
|
|
32
|
+
.alias('status')
|
|
33
|
+
.description('Show appliance app egress proxy settings')
|
|
34
|
+
.action(() => {
|
|
35
|
+
printProxySettings('Appliance proxy configuration');
|
|
36
|
+
console.log();
|
|
37
|
+
console.log('Docker compose isolation: enabled');
|
|
38
|
+
console.log("Proxy settings here are written to .env for application egress; they are not written to Docker's compose client config.");
|
|
39
|
+
});
|
|
40
|
+
proxy
|
|
41
|
+
.command('set')
|
|
42
|
+
.description('Set HTTP(S), no-proxy, and authentication proxy settings')
|
|
43
|
+
.option('--url <url>', 'Set both HTTP_PROXY and HTTPS_PROXY')
|
|
44
|
+
.option('--proxy-url <url>', 'Set both HTTP_PROXY and HTTPS_PROXY')
|
|
45
|
+
.option('--http <url>', 'Set HTTP_PROXY')
|
|
46
|
+
.option('--http-proxy <url>', 'Set HTTP_PROXY')
|
|
47
|
+
.option('--https <url>', 'Set HTTPS_PROXY')
|
|
48
|
+
.option('--https-proxy <url>', 'Set HTTPS_PROXY')
|
|
49
|
+
.option('--no-proxy <list>', 'Set NO_PROXY')
|
|
50
|
+
.option('--no_proxy <list>', 'Set NO_PROXY')
|
|
51
|
+
.option('--username <user>', 'Set proxy username')
|
|
52
|
+
.option('--user <user>', 'Set proxy username')
|
|
53
|
+
.option('--password <password>', 'Set proxy password')
|
|
54
|
+
.option('--bearer-token <token>', 'Set proxy bearer token')
|
|
55
|
+
.option('--basic-token <token>', 'Set proxy basic token')
|
|
56
|
+
.option('--restart', 'Restart docker-compose-app.service after writing settings')
|
|
57
|
+
.action(async (opts) => {
|
|
58
|
+
const sharedUrl = opts.url ?? opts.proxyUrl;
|
|
59
|
+
const settings = {};
|
|
60
|
+
if (sharedUrl !== undefined) {
|
|
61
|
+
settings.http = sharedUrl;
|
|
62
|
+
settings.https = sharedUrl;
|
|
63
|
+
}
|
|
64
|
+
settings.http = opts.http ?? opts.httpProxy ?? settings.http;
|
|
65
|
+
settings.https = opts.https ?? opts.httpsProxy ?? settings.https;
|
|
66
|
+
settings.noProxy = opts.noProxy ?? opts.no_proxy;
|
|
67
|
+
settings.username = opts.username ?? opts.user;
|
|
68
|
+
settings.password = opts.password;
|
|
69
|
+
settings.bearerToken = opts.bearerToken;
|
|
70
|
+
settings.basicToken = opts.basicToken;
|
|
71
|
+
await setProxySettings(settings);
|
|
72
|
+
out.ok('Proxy settings updated.');
|
|
73
|
+
console.log('Docker compose proxy isolation remains enabled; compose/client Docker config was not given proxy settings.');
|
|
74
|
+
await restartIfRequested(opts.restart);
|
|
75
|
+
});
|
|
76
|
+
proxy
|
|
77
|
+
.command('clear')
|
|
78
|
+
.alias('disable')
|
|
79
|
+
.description('Clear appliance app egress proxy settings')
|
|
80
|
+
.option('--restart', 'Restart docker-compose-app.service after clearing settings')
|
|
81
|
+
.action(async (opts) => {
|
|
82
|
+
await clearProxySettings();
|
|
83
|
+
out.ok('Proxy settings cleared.');
|
|
84
|
+
console.log('Docker compose proxy isolation remains enabled.');
|
|
85
|
+
await restartIfRequested(opts.restart);
|
|
86
|
+
});
|
|
87
|
+
proxy
|
|
88
|
+
.command('test-env')
|
|
89
|
+
.description('Show rendered app-container proxy environment')
|
|
90
|
+
.action(() => {
|
|
91
|
+
printProxySettings('Rendered proxy environment for app containers');
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/commands/proxy.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -11,6 +11,7 @@ import { registerDockerCommand } from './commands/docker.js';
|
|
|
11
11
|
import { registerOfflineCommand } from './commands/offline.js';
|
|
12
12
|
import { registerDiagCommand } from './commands/diag.js';
|
|
13
13
|
import { registerJtapiCommand } from './commands/jtapi.js';
|
|
14
|
+
import { registerCubeCommand } from './commands/cube.js';
|
|
14
15
|
import { registerStorageCommand } from './commands/storage.js';
|
|
15
16
|
import { registerOtelCommand } from './commands/otel.js';
|
|
16
17
|
import { registerSyslogCommand } from './commands/syslog.js';
|
|
@@ -25,6 +26,7 @@ import { registerNetworkCommand } from './commands/network.js';
|
|
|
25
26
|
import { registerShellCommand } from './commands/shell.js';
|
|
26
27
|
import { registerApplianceCommand } from './commands/appliance.js';
|
|
27
28
|
import { registerSeedCommand } from './commands/seed.js';
|
|
29
|
+
import { registerProxyCommand } from './commands/proxy.js';
|
|
28
30
|
import { LOGO } from './lib/brand.js';
|
|
29
31
|
import { setVerbose, setGlobalLevel } from './lib/log.js';
|
|
30
32
|
import { loadPrefs } from './lib/prefs.js';
|
|
@@ -64,6 +66,7 @@ registerDockerCommand(program);
|
|
|
64
66
|
registerOfflineCommand(program);
|
|
65
67
|
registerDiagCommand(program);
|
|
66
68
|
registerJtapiCommand(program);
|
|
69
|
+
registerCubeCommand(program);
|
|
67
70
|
registerStorageCommand(program);
|
|
68
71
|
registerOtelCommand(program);
|
|
69
72
|
registerSyslogCommand(program);
|
|
@@ -78,6 +81,7 @@ registerNetworkCommand(program);
|
|
|
78
81
|
registerShellCommand(program);
|
|
79
82
|
registerApplianceCommand(program);
|
|
80
83
|
registerSeedCommand(program);
|
|
84
|
+
registerProxyCommand(program);
|
|
81
85
|
program
|
|
82
86
|
.command('version')
|
|
83
87
|
.description('Print CLI version')
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,IAAI,CAAC;KACV,WAAW,CAAC,wCAAwC,CAAC;KACrD,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,eAAe,EAAE,6BAA6B,CAAC;KACtD,MAAM,CAAC,SAAS,EAAE,4BAA4B,CAAC;KAC/C,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE;IACxC,wCAAwC;IACxC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK;QAAE,cAAc,CAAC,OAAO,CAAC,CAAC;SAC7C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO;QAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO;IAC3C,qDAAqD;IACrD,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,+BAA+B,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,iEAAiE;IACjE,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,IAAI,KAAK,EAAE,UAAU,EAAE,CAAC;QACtB,kBAAkB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,yBAAyB,CAAC,OAAO,CAAC,CAAC;AACnC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,mBAAmB,CAAC,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guardrail 2: the appliance owns its Docker client config.
|
|
3
|
+
*
|
|
4
|
+
* A customer's IT can set a corporate proxy in /root/.docker/config.json; Docker
|
|
5
|
+
* then injects HTTP_PROXY into EVERY container at create time, which breaks
|
|
6
|
+
* internal 100.64.x hops (SeaweedFS volume->master) and the BusyBox-wget
|
|
7
|
+
* healthchecks (busybox ignores no_proxy) — so the stack never reaches healthy.
|
|
8
|
+
*
|
|
9
|
+
* We make the appliance immune by pinning DOCKER_CONFIG (via a systemd drop-in)
|
|
10
|
+
* to an appliance-owned dir whose config.json has NO proxies block (carrying any
|
|
11
|
+
* registry auths), so the stack the unit launches can't inherit the host proxy.
|
|
12
|
+
* The only service that gets a proxy is `web`, via compose env from .env — which
|
|
13
|
+
* the appliance owns. The proxy->.env migration carries any existing host proxy
|
|
14
|
+
* into .env so web keeps its internet across the cutover.
|
|
15
|
+
*
|
|
16
|
+
* Mirrors ova/cli.sh (_ensure_appliance_proxy_policy) and the Go shadow CLI
|
|
17
|
+
* (ensureApplianceProxyPolicy). Best-effort and idempotent; never fatal.
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Write the appliance config.json: carry registry auths from the host root
|
|
21
|
+
* config, but NEVER a proxies block. Then pin DOCKER_CONFIG and export it for
|
|
22
|
+
* this process so its own `docker compose` calls use the appliance config too.
|
|
23
|
+
*/
|
|
24
|
+
export declare function writeApplianceDockerConfig(): void;
|
|
25
|
+
/** Pin DOCKER_CONFIG to the appliance dir via a systemd drop-in. Idempotent. */
|
|
26
|
+
export declare function writeDockerConfigDropin(): void;
|
|
27
|
+
/**
|
|
28
|
+
* Carry an existing host proxy into .env HTTP_PROXY/HTTPS_PROXY/NO_PROXY
|
|
29
|
+
* (no-clobber) so `web` keeps its internet across the cutover, and always seed
|
|
30
|
+
* the three keys (empty = no proxy) so compose ${HTTP_PROXY:-} resolves.
|
|
31
|
+
*/
|
|
32
|
+
export declare function migrateProxyToEnv(): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Guardrail 2 + migration entrypoint, run on every apply. Carry any host proxy
|
|
35
|
+
* into .env, then make the appliance own its Docker config. Never throws.
|
|
36
|
+
*/
|
|
37
|
+
export declare function ensureApplianceProxyPolicy(): Promise<void>;
|
|
38
|
+
//# sourceMappingURL=appliance-proxy-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appliance-proxy-policy.d.ts","sourceRoot":"","sources":["../../src/lib/appliance-proxy-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AA0CH;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAI,IAAI,CAuBjD;AAED,gFAAgF;AAChF,wBAAgB,uBAAuB,IAAI,IAAI,CAY9C;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAavD;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,CAWhE"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guardrail 2: the appliance owns its Docker client config.
|
|
3
|
+
*
|
|
4
|
+
* A customer's IT can set a corporate proxy in /root/.docker/config.json; Docker
|
|
5
|
+
* then injects HTTP_PROXY into EVERY container at create time, which breaks
|
|
6
|
+
* internal 100.64.x hops (SeaweedFS volume->master) and the BusyBox-wget
|
|
7
|
+
* healthchecks (busybox ignores no_proxy) — so the stack never reaches healthy.
|
|
8
|
+
*
|
|
9
|
+
* We make the appliance immune by pinning DOCKER_CONFIG (via a systemd drop-in)
|
|
10
|
+
* to an appliance-owned dir whose config.json has NO proxies block (carrying any
|
|
11
|
+
* registry auths), so the stack the unit launches can't inherit the host proxy.
|
|
12
|
+
* The only service that gets a proxy is `web`, via compose env from .env — which
|
|
13
|
+
* the appliance owns. The proxy->.env migration carries any existing host proxy
|
|
14
|
+
* into .env so web keeps its internet across the cutover.
|
|
15
|
+
*
|
|
16
|
+
* Mirrors ova/cli.sh (_ensure_appliance_proxy_policy) and the Go shadow CLI
|
|
17
|
+
* (ensureApplianceProxyPolicy). Best-effort and idempotent; never fatal.
|
|
18
|
+
*/
|
|
19
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync, } from 'node:fs';
|
|
20
|
+
import { join, dirname } from 'node:path';
|
|
21
|
+
import { readEnvKeys, updateEnvKeys } from './env.js';
|
|
22
|
+
function applianceDockerConfigDir() {
|
|
23
|
+
return process.env.CT_APPLIANCE_DOCKER_CONFIG_DIR || '/etc/calltelemetry/docker';
|
|
24
|
+
}
|
|
25
|
+
// The docker-compose-app unit path (test override via CT_CLI_TEST_SERVICE_FILE),
|
|
26
|
+
// matching ova/cli.sh's _systemd_service_file.
|
|
27
|
+
function systemdServiceFile() {
|
|
28
|
+
return process.env.CT_CLI_TEST_SERVICE_FILE || '/etc/systemd/system/docker-compose-app.service';
|
|
29
|
+
}
|
|
30
|
+
function dockerConfigDropinFile() {
|
|
31
|
+
return systemdServiceFile() + '.d/docker-config.conf';
|
|
32
|
+
}
|
|
33
|
+
// The host root Docker config a customer's IT may have edited (proxies + auths).
|
|
34
|
+
// CT_CLI_ROOT_HOME overrides root's home for tests so they never touch /root.
|
|
35
|
+
function hostRootDockerConfig() {
|
|
36
|
+
const rootHome = process.env.CT_CLI_ROOT_HOME || '/root';
|
|
37
|
+
return join(rootHome, '.docker', 'config.json');
|
|
38
|
+
}
|
|
39
|
+
function readJsonOrEmpty(path) {
|
|
40
|
+
if (!existsSync(path))
|
|
41
|
+
return {};
|
|
42
|
+
try {
|
|
43
|
+
const data = JSON.parse(readFileSync(path, 'utf-8'));
|
|
44
|
+
return data && typeof data === 'object' ? data : {};
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return {};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Write the appliance config.json: carry registry auths from the host root
|
|
52
|
+
* config, but NEVER a proxies block. Then pin DOCKER_CONFIG and export it for
|
|
53
|
+
* this process so its own `docker compose` calls use the appliance config too.
|
|
54
|
+
*/
|
|
55
|
+
export function writeApplianceDockerConfig() {
|
|
56
|
+
const cfgDir = applianceDockerConfigDir();
|
|
57
|
+
const cfgPath = join(cfgDir, 'config.json');
|
|
58
|
+
const config = readJsonOrEmpty(cfgPath);
|
|
59
|
+
// Carry registry auths from the host root config so image pulls keep working.
|
|
60
|
+
const src = readJsonOrEmpty(hostRootDockerConfig());
|
|
61
|
+
if (src.auths && typeof src.auths === 'object') {
|
|
62
|
+
const auths = (config.auths && typeof config.auths === 'object' ? config.auths : {});
|
|
63
|
+
for (const [k, v] of Object.entries(src.auths)) {
|
|
64
|
+
if (!(k in auths))
|
|
65
|
+
auths[k] = v;
|
|
66
|
+
}
|
|
67
|
+
config.auths = auths;
|
|
68
|
+
}
|
|
69
|
+
// The appliance config NEVER carries a proxies block — that is the whole point.
|
|
70
|
+
delete config.proxies;
|
|
71
|
+
mkdirSync(cfgDir, { recursive: true });
|
|
72
|
+
writeFileSync(cfgPath, JSON.stringify(config, null, 2) + '\n', { mode: 0o600 });
|
|
73
|
+
writeDockerConfigDropin();
|
|
74
|
+
process.env.DOCKER_CONFIG = cfgDir;
|
|
75
|
+
}
|
|
76
|
+
/** Pin DOCKER_CONFIG to the appliance dir via a systemd drop-in. Idempotent. */
|
|
77
|
+
export function writeDockerConfigDropin() {
|
|
78
|
+
const dropin = dockerConfigDropinFile();
|
|
79
|
+
const want = `[Service]\nEnvironment=DOCKER_CONFIG=${applianceDockerConfigDir()}\n`;
|
|
80
|
+
if (existsSync(dropin)) {
|
|
81
|
+
try {
|
|
82
|
+
if (readFileSync(dropin, 'utf-8') === want)
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
/* fall through and rewrite */
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
mkdirSync(dirname(dropin), { recursive: true });
|
|
90
|
+
writeFileSync(dropin, want, { mode: 0o644 });
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Carry an existing host proxy into .env HTTP_PROXY/HTTPS_PROXY/NO_PROXY
|
|
94
|
+
* (no-clobber) so `web` keeps its internet across the cutover, and always seed
|
|
95
|
+
* the three keys (empty = no proxy) so compose ${HTTP_PROXY:-} resolves.
|
|
96
|
+
*/
|
|
97
|
+
export async function migrateProxyToEnv() {
|
|
98
|
+
const src = readJsonOrEmpty(hostRootDockerConfig());
|
|
99
|
+
const def = (src.proxies && src.proxies.default && typeof src.proxies.default === 'object')
|
|
100
|
+
? src.proxies.default
|
|
101
|
+
: {};
|
|
102
|
+
const str = (k) => (typeof def[k] === 'string' ? def[k] : '');
|
|
103
|
+
const env = readEnvKeys();
|
|
104
|
+
const updates = {};
|
|
105
|
+
if (!('HTTP_PROXY' in env))
|
|
106
|
+
updates.HTTP_PROXY = str('httpProxy');
|
|
107
|
+
if (!('HTTPS_PROXY' in env))
|
|
108
|
+
updates.HTTPS_PROXY = str('httpsProxy');
|
|
109
|
+
if (!('NO_PROXY' in env))
|
|
110
|
+
updates.NO_PROXY = str('noProxy');
|
|
111
|
+
if (Object.keys(updates).length > 0)
|
|
112
|
+
await updateEnvKeys(updates);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Guardrail 2 + migration entrypoint, run on every apply. Carry any host proxy
|
|
116
|
+
* into .env, then make the appliance own its Docker config. Never throws.
|
|
117
|
+
*/
|
|
118
|
+
export async function ensureApplianceProxyPolicy() {
|
|
119
|
+
try {
|
|
120
|
+
await migrateProxyToEnv();
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
/* non-fatal */
|
|
124
|
+
}
|
|
125
|
+
try {
|
|
126
|
+
writeApplianceDockerConfig();
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
/* non-fatal */
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=appliance-proxy-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appliance-proxy-policy.js","sourceRoot":"","sources":["../../src/lib/appliance-proxy-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EACL,UAAU,EACV,YAAY,EACZ,aAAa,EACb,SAAS,GACV,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEtD,SAAS,wBAAwB;IAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,8BAA8B,IAAI,2BAA2B,CAAC;AACnF,CAAC;AAED,iFAAiF;AACjF,+CAA+C;AAC/C,SAAS,kBAAkB;IACzB,OAAO,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,gDAAgD,CAAC;AAClG,CAAC;AAED,SAAS,sBAAsB;IAC7B,OAAO,kBAAkB,EAAE,GAAG,uBAAuB,CAAC;AACxD,CAAC;AAED,iFAAiF;AACjF,8EAA8E;AAC9E,SAAS,oBAAoB;IAC3B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,OAAO,CAAC;IACzD,OAAO,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QACrD,OAAO,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B;IACxC,MAAM,MAAM,GAAG,wBAAwB,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAE5C,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAExC,8EAA8E;IAC9E,MAAM,GAAG,GAAG,eAAe,CAAC,oBAAoB,EAAE,CAAC,CAAC;IACpD,IAAI,GAAG,CAAC,KAAK,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAA4B,CAAC;QAChH,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;gBAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;QACD,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IACD,gFAAgF;IAChF,OAAO,MAAM,CAAC,OAAO,CAAC;IAEtB,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAEhF,uBAAuB,EAAE,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC;AACrC,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,uBAAuB;IACrC,MAAM,MAAM,GAAG,sBAAsB,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,wCAAwC,wBAAwB,EAAE,IAAI,CAAC;IACpF,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,IAAI,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI;gBAAE,OAAO;QACrD,CAAC;QAAC,MAAM,CAAC;YACP,8BAA8B;QAChC,CAAC;IACH,CAAC;IACD,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,GAAG,GAAG,eAAe,CAAC,oBAAoB,EAAE,CAAC,CAAC;IACpD,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC;QACzF,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO;QACrB,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,GAAG,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAE9E,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;IAC1B,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,IAAI,CAAC,CAAC,YAAY,IAAI,GAAG,CAAC;QAAE,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC;IAClE,IAAI,CAAC,CAAC,aAAa,IAAI,GAAG,CAAC;QAAE,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC;IACrE,IAAI,CAAC,CAAC,UAAU,IAAI,GAAG,CAAC;QAAE,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;IAC5D,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;AACpE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B;IAC9C,IAAI,CAAC;QACH,MAAM,iBAAiB,EAAE,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;IACD,IAAI,CAAC;QACH,0BAA0B,EAAE,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read-only collector for the "CUBE stuck in REGISTERED, never ONLINE" bug class.
|
|
3
|
+
*
|
|
4
|
+
* Builds one text bundle from three sources — Postgres, NATS KV/streams, and
|
|
5
|
+
* container logs — redacts it, and writes it to a single .log file. Each section
|
|
6
|
+
* is best-effort: a failure in one section is captured inline and never aborts
|
|
7
|
+
* the rest of the collection. Pure async — no React/Ink imports.
|
|
8
|
+
*
|
|
9
|
+
* The registered -> online transition requires a healthy SolicitXccProbing
|
|
10
|
+
* keepalive; this bundle surfaces the DB state, NATS KV view, and the log lines
|
|
11
|
+
* that explain why that keepalive never lands.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Collect the full cube-diag bundle and write it to a single .log file.
|
|
15
|
+
*
|
|
16
|
+
* @param opts.outputPath Target log path. Defaults to ./cube-diag-<ISO>.log.
|
|
17
|
+
* @param opts.captureSecs Seconds to live-capture cube.> / alarms.> subjects (0 = skip).
|
|
18
|
+
* @param opts.monitorSecs Seconds to RPC-poll each cube's state/interval ~every 5s (0 = skip).
|
|
19
|
+
* @returns the path the bundle was written to.
|
|
20
|
+
*/
|
|
21
|
+
export declare function collectCubeDiag(opts?: {
|
|
22
|
+
outputPath?: string;
|
|
23
|
+
captureSecs?: number;
|
|
24
|
+
monitorSecs?: number;
|
|
25
|
+
}): Promise<string>;
|
|
26
|
+
//# sourceMappingURL=cube-diag.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cube-diag.d.ts","sourceRoot":"","sources":["../../src/lib/cube-diag.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAuPH;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,IAAI,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAgJjI"}
|