@calltelemetry/cli 0.4.17 → 0.4.18

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/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- const VERSION = '0.4.17';
2
+ const VERSION = '0.4.18';
3
3
  import { Command } from 'commander';
4
4
  import { registerStatusCommand } from './commands/status.js';
5
5
  import { registerUpdateCommand } from './commands/update.js';
@@ -0,0 +1,28 @@
1
+ /** Send a single CURRI probe request and return the raw HTTP response details. */
2
+ export interface CurriProbeResult {
3
+ /** HTTP status code (0 if connection failed) */
4
+ statusCode: number;
5
+ /** HTTP status text */
6
+ statusText: string;
7
+ /** Response headers as key-value pairs */
8
+ headers: Record<string, string>;
9
+ /** Raw response body */
10
+ body: string;
11
+ /** Request URL */
12
+ requestUrl: string;
13
+ /** Request body (XML) */
14
+ requestBody: string;
15
+ /** Round-trip time in ms */
16
+ latencyMs: number;
17
+ /** Connection error message, if any */
18
+ error?: string;
19
+ }
20
+ export declare function curriProbe(opts: {
21
+ url: string;
22
+ apiKey: string;
23
+ callingNumber: string;
24
+ calledNumber: string;
25
+ deviceName: string;
26
+ triggerType: string;
27
+ }): Promise<CurriProbeResult>;
28
+ //# sourceMappingURL=curri-probe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"curri-probe.d.ts","sourceRoot":"","sources":["../../src/lib/curri-probe.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAMlF,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgE5B"}
@@ -0,0 +1,61 @@
1
+ /** Send a single CURRI probe request and return the raw HTTP response details. */
2
+ import https from 'node:https';
3
+ import http from 'node:http';
4
+ import { buildCurriXmlFromConfig } from './curri-xml.js';
5
+ export async function curriProbe(opts) {
6
+ const targetUrl = `${opts.url}/api/policy?api_key=${opts.apiKey}`;
7
+ const xmlBody = buildCurriXmlFromConfig({
8
+ callingNumber: opts.callingNumber,
9
+ calledNumber: opts.calledNumber,
10
+ deviceName: opts.deviceName,
11
+ triggerType: opts.triggerType,
12
+ });
13
+ const start = performance.now();
14
+ const parsed = new URL(targetUrl);
15
+ const isHttps = parsed.protocol === 'https:';
16
+ const transport = isHttps ? https : http;
17
+ return new Promise((resolve) => {
18
+ const req = transport.request(targetUrl, {
19
+ method: 'POST',
20
+ headers: { 'content-type': 'application/xml' },
21
+ rejectUnauthorized: false,
22
+ }, (res) => {
23
+ const chunks = [];
24
+ res.on('data', (chunk) => chunks.push(chunk));
25
+ res.on('end', () => {
26
+ const latencyMs = performance.now() - start;
27
+ const body = Buffer.concat(chunks).toString('utf-8');
28
+ const headers = {};
29
+ for (const [key, val] of Object.entries(res.headers)) {
30
+ if (val)
31
+ headers[key] = Array.isArray(val) ? val.join(', ') : val;
32
+ }
33
+ resolve({
34
+ statusCode: res.statusCode ?? 0,
35
+ statusText: res.statusMessage ?? '',
36
+ headers,
37
+ body,
38
+ requestUrl: targetUrl,
39
+ requestBody: xmlBody,
40
+ latencyMs,
41
+ });
42
+ });
43
+ });
44
+ req.on('error', (err) => {
45
+ const latencyMs = performance.now() - start;
46
+ resolve({
47
+ statusCode: 0,
48
+ statusText: 'Connection Failed',
49
+ headers: {},
50
+ body: '',
51
+ requestUrl: targetUrl,
52
+ requestBody: xmlBody,
53
+ latencyMs,
54
+ error: err.message,
55
+ });
56
+ });
57
+ req.write(xmlBody);
58
+ req.end();
59
+ });
60
+ }
61
+ //# sourceMappingURL=curri-probe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"curri-probe.js","sourceRoot":"","sources":["../../src/lib/curri-probe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { LoadTestUserConfig } from './LoadTestConfigView.js';
2
+ interface LoadTestProbeViewProps {
3
+ userConfig: LoadTestUserConfig;
4
+ onContinue: () => void;
5
+ onBack: () => void;
6
+ }
7
+ export declare function LoadTestProbeView({ userConfig, onContinue, onBack }: LoadTestProbeViewProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=LoadTestProbeView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoadTestProbeView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/LoadTestProbeView.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,UAAU,sBAAsB;IAC9B,UAAU,EAAE,kBAAkB,CAAC;IAC/B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AA+ED,wBAAgB,iBAAiB,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,sBAAsB,2CA0C3F"}
@@ -0,0 +1,53 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text, useInput } from 'ink';
3
+ import { AppShell, Section, Spinner, StatusBox } from '../components/index.js';
4
+ import { useAsyncTask } from '../hooks/index.js';
5
+ import { curriProbe } from '../../lib/curri-probe.js';
6
+ function statusColor(code) {
7
+ if (code >= 200 && code < 300)
8
+ return 'green';
9
+ if (code >= 300 && code < 400)
10
+ return 'yellow';
11
+ return 'red';
12
+ }
13
+ function ProbeResults({ result }) {
14
+ const bodyPreview = result.body.length > 2000
15
+ ? result.body.slice(0, 2000) + '\n... (truncated)'
16
+ : result.body;
17
+ const isSuccess = result.statusCode >= 200 && result.statusCode < 300;
18
+ return (_jsxs(Box, { flexDirection: "column", paddingLeft: 2, children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { bold: true, children: "HTTP " }), _jsxs(Text, { bold: true, color: statusColor(result.statusCode), children: [result.statusCode, " ", result.statusText] }), _jsx(Text, { dimColor: true, children: ` (${result.latencyMs.toFixed(0)}ms)` })] }), result.error && (_jsx(Box, { marginBottom: 1, children: _jsx(StatusBox, { variant: "error", title: "Connection Error", lines: [result.error] }) })), _jsx(Text, { bold: true, underline: true, children: "Request" }), _jsxs(Box, { marginBottom: 1, flexDirection: "column", children: [_jsxs(Text, { dimColor: true, children: ["POST ", result.requestUrl] }), _jsx(Text, { dimColor: true, children: "Content-Type: application/xml" })] }), _jsx(Text, { bold: true, underline: true, children: "Response Headers" }), _jsxs(Box, { marginBottom: 1, flexDirection: "column", children: [Object.entries(result.headers).map(([key, val]) => (_jsxs(Text, { children: [_jsxs(Text, { dimColor: true, children: [key, ": "] }), _jsx(Text, { children: val })] }, key))), Object.keys(result.headers).length === 0 && (_jsx(Text, { dimColor: true, children: "(none)" }))] }), _jsx(Text, { bold: true, underline: true, children: "Response Body" }), _jsx(Box, { marginBottom: 1, flexDirection: "column", children: bodyPreview ? (_jsx(Text, { children: bodyPreview })) : (_jsx(Text, { dimColor: true, children: "(empty)" })) }), isSuccess ? (_jsx(StatusBox, { variant: "success", title: "CURRI endpoint is responding", lines: ['Press Enter to start load test, or q to go back.'] })) : (_jsx(StatusBox, { variant: "error", title: "CURRI endpoint returned an error", lines: [
19
+ `HTTP ${result.statusCode} — the load test will likely show 100% errors.`,
20
+ 'Check the API key, endpoint URL, and policy configuration.',
21
+ '',
22
+ 'Press Enter to start load test anyway, or q to go back.',
23
+ ] }))] }));
24
+ }
25
+ export function LoadTestProbeView({ userConfig, onContinue, onBack }) {
26
+ const probeTask = useAsyncTask(async () => {
27
+ return curriProbe({
28
+ url: userConfig.url,
29
+ apiKey: userConfig.policy.api_key,
30
+ callingNumber: userConfig.callingNumber,
31
+ calledNumber: userConfig.calledNumber,
32
+ deviceName: userConfig.deviceName,
33
+ triggerType: userConfig.triggerType,
34
+ });
35
+ }, true);
36
+ useInput((input, key) => {
37
+ if (probeTask.status === 'done') {
38
+ if (key.return) {
39
+ onContinue();
40
+ }
41
+ else if (input === 'q' || key.escape) {
42
+ onBack();
43
+ }
44
+ }
45
+ if (probeTask.status === 'error') {
46
+ if (input === 'q' || key.escape) {
47
+ onBack();
48
+ }
49
+ }
50
+ });
51
+ return (_jsx(AppShell, { command: "ct loadtest", onBack: onBack, children: _jsxs(Section, { title: `CURRI Probe — ${userConfig.policy.name}`, children: [probeTask.status === 'pending' && (_jsx(Spinner, { label: `Sending probe to ${userConfig.url}...` })), probeTask.status === 'error' && (_jsx(StatusBox, { variant: "error", title: "Probe failed", lines: [probeTask.error?.message ?? 'Unknown error'] })), probeTask.status === 'done' && probeTask.data && (_jsx(ProbeResults, { result: probeTask.data }))] }) }));
52
+ }
53
+ //# sourceMappingURL=LoadTestProbeView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoadTestProbeView.js","sourceRoot":"","sources":["../../../src/ui/views/LoadTestProbeView.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"LoadTestView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/LoadTestView.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAsB,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAMtF,UAAU,iBAAiB;IACzB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,kBAAkB,CAAC;CACjC;AAED,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,iBAAiB,kDA4DrE"}
1
+ {"version":3,"file":"LoadTestView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/LoadTestView.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAsB,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAMtF,UAAU,iBAAiB;IACzB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,kBAAkB,CAAC;CACjC;AAED,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,iBAAiB,kDA0ErE"}
@@ -1,6 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useState, useCallback } from 'react';
3
3
  import { LoadTestConfigView } from './LoadTestConfigView.js';
4
+ import { LoadTestProbeView } from './LoadTestProbeView.js';
4
5
  import { LoadTestRunView } from './LoadTestRunView.js';
5
6
  import { LoadTestSummaryView } from './LoadTestSummaryView.js';
6
7
  import { useApp } from 'ink';
@@ -11,6 +12,9 @@ export function LoadTestView({ onBack, cliOptions }) {
11
12
  const [results, setResults] = useState(null);
12
13
  const handleStart = useCallback((config) => {
13
14
  setUserConfig(config);
15
+ setPhase('probe');
16
+ }, []);
17
+ const handleProbeComplete = useCallback(() => {
14
18
  setPhase('running');
15
19
  }, []);
16
20
  const handleComplete = useCallback((res) => {
@@ -32,6 +36,9 @@ export function LoadTestView({ onBack, cliOptions }) {
32
36
  if (phase === 'config') {
33
37
  return (_jsx(LoadTestConfigView, { onBack: handleBack, onStart: handleStart, cliOptions: cliOptions }));
34
38
  }
39
+ if (phase === 'probe' && userConfig) {
40
+ return (_jsx(LoadTestProbeView, { userConfig: userConfig, onContinue: handleProbeComplete, onBack: () => setPhase('config') }));
41
+ }
35
42
  if (phase === 'running' && userConfig) {
36
43
  return (_jsx(LoadTestRunView, { userConfig: userConfig, onComplete: handleComplete, onBack: handleBack }));
37
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"LoadTestView.js","sourceRoot":"","sources":["../../../src/ui/views/LoadTestView.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAS7B,MAAM,UAAU,YAAY,CAAC,EAAE,MAAM,EAAE,UAAU,EAAqB;IACpE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAQ,QAAQ,CAAC,CAAC;IACpD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAA4B,IAAI,CAAC,CAAC;IAC9E,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAyB,IAAI,CAAC,CAAC;IAErE,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,MAA0B,EAAE,EAAE;QAC7D,aAAa,CAAC,MAAM,CAAC,CAAC;QACtB,QAAQ,CAAC,SAAS,CAAC,CAAC;IACtB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,GAAoB,EAAE,EAAE;QAC1D,UAAU,CAAC,GAAG,CAAC,CAAC;QAChB,QAAQ,CAAC,SAAS,CAAC,CAAC;IACtB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,EAAE,CAAC;QACX,CAAC;aAAM,CAAC;YACN,IAAI,EAAE,CAAC;QACT,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAEnB,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,OAAO,CACL,KAAC,kBAAkB,IACjB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,WAAW,EACpB,UAAU,EAAE,UAAU,GACtB,CACH,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,KAAK,SAAS,IAAI,UAAU,EAAE,CAAC;QACtC,OAAO,CACL,KAAC,eAAe,IACd,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,cAAc,EAC1B,MAAM,EAAE,UAAU,GAClB,CACH,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,EAAE,CAAC;QACnC,OAAO,CACL,KAAC,mBAAmB,IAClB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,GAClB,CACH,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"LoadTestView.js","sourceRoot":"","sources":["../../../src/ui/views/LoadTestView.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAS7B,MAAM,UAAU,YAAY,CAAC,EAAE,MAAM,EAAE,UAAU,EAAqB;IACpE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAQ,QAAQ,CAAC,CAAC;IACpD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAA4B,IAAI,CAAC,CAAC;IAC9E,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAyB,IAAI,CAAC,CAAC;IAErE,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,MAA0B,EAAE,EAAE;QAC7D,aAAa,CAAC,MAAM,CAAC,CAAC;QACtB,QAAQ,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,mBAAmB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC3C,QAAQ,CAAC,SAAS,CAAC,CAAC;IACtB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,GAAoB,EAAE,EAAE;QAC1D,UAAU,CAAC,GAAG,CAAC,CAAC;QAChB,QAAQ,CAAC,SAAS,CAAC,CAAC;IACtB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,EAAE,CAAC;QACX,CAAC;aAAM,CAAC;YACN,IAAI,EAAE,CAAC;QACT,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAEnB,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,OAAO,CACL,KAAC,kBAAkB,IACjB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,WAAW,EACpB,UAAU,EAAE,UAAU,GACtB,CACH,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,KAAK,OAAO,IAAI,UAAU,EAAE,CAAC;QACpC,OAAO,CACL,KAAC,iBAAiB,IAChB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,mBAAmB,EAC/B,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAChC,CACH,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,KAAK,SAAS,IAAI,UAAU,EAAE,CAAC;QACtC,OAAO,CACL,KAAC,eAAe,IACd,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,cAAc,EAC1B,MAAM,EAAE,UAAU,GAClB,CACH,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,EAAE,CAAC;QACnC,OAAO,CACL,KAAC,mBAAmB,IAClB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,GAClB,CACH,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@calltelemetry/cli",
3
- "version": "0.4.17",
3
+ "version": "0.4.18",
4
4
  "description": "CallTelemetry appliance management CLI",
5
5
  "type": "module",
6
6
  "bin": {