@inboxychat/cli 0.0.0-stage → 0.2.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/README.md +178 -2
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +76 -0
- package/dist/bin.js.map +1 -0
- package/dist/cli.d.ts +17 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +624 -0
- package/dist/cli.js.map +1 -0
- package/dist/device-login.d.ts +9 -0
- package/dist/device-login.d.ts.map +1 -0
- package/dist/device-login.js +214 -0
- package/dist/device-login.js.map +1 -0
- package/dist/doctor.d.ts +32 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +127 -0
- package/dist/doctor.js.map +1 -0
- package/dist/output.d.ts +67 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +161 -0
- package/dist/output.js.map +1 -0
- package/package.json +33 -3
package/dist/output.js
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Output contract of the `inboxy` CLI.
|
|
3
|
+
*
|
|
4
|
+
* --json prints exactly one JSON document on stdout (schemaVersion 1):
|
|
5
|
+
* success: { schemaVersion: 1, ok: true, command, data, meta? }
|
|
6
|
+
* failure: { schemaVersion: 1, ok: false, command, error: { kind, code, message, status, details, retryAfterSeconds } }
|
|
7
|
+
* Fields may be added within schemaVersion 1; none is renamed or removed.
|
|
8
|
+
*
|
|
9
|
+
* Exit codes are stable and documented in the README.
|
|
10
|
+
*/
|
|
11
|
+
import { InboxyError, describeError, redactSecrets } from '@inboxychat/sdk';
|
|
12
|
+
export const JSON_SCHEMA_VERSION = 1;
|
|
13
|
+
export const EXIT = {
|
|
14
|
+
OK: 0,
|
|
15
|
+
UNEXPECTED: 1,
|
|
16
|
+
USAGE: 2,
|
|
17
|
+
CONFIG: 3,
|
|
18
|
+
AUTH: 4,
|
|
19
|
+
FORBIDDEN: 5,
|
|
20
|
+
NOT_FOUND: 6,
|
|
21
|
+
RATE_LIMITED: 7,
|
|
22
|
+
NETWORK: 8,
|
|
23
|
+
SERVER: 9,
|
|
24
|
+
CHECKS_FAILED: 10,
|
|
25
|
+
};
|
|
26
|
+
export function exitCodeFor(kind) {
|
|
27
|
+
switch (kind) {
|
|
28
|
+
case 'config':
|
|
29
|
+
return EXIT.CONFIG;
|
|
30
|
+
case 'auth':
|
|
31
|
+
return EXIT.AUTH;
|
|
32
|
+
case 'forbidden':
|
|
33
|
+
return EXIT.FORBIDDEN;
|
|
34
|
+
case 'not_found':
|
|
35
|
+
return EXIT.NOT_FOUND;
|
|
36
|
+
case 'rate_limited':
|
|
37
|
+
return EXIT.RATE_LIMITED;
|
|
38
|
+
case 'timeout':
|
|
39
|
+
case 'cancelled':
|
|
40
|
+
case 'network':
|
|
41
|
+
return EXIT.NETWORK;
|
|
42
|
+
case 'server':
|
|
43
|
+
case 'invalid_response':
|
|
44
|
+
return EXIT.SERVER;
|
|
45
|
+
case 'invalid_request':
|
|
46
|
+
return EXIT.USAGE;
|
|
47
|
+
default:
|
|
48
|
+
return EXIT.UNEXPECTED;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export class UsageError extends Error {
|
|
52
|
+
constructor(message) {
|
|
53
|
+
super(message);
|
|
54
|
+
this.name = 'UsageError';
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export class Output {
|
|
58
|
+
io;
|
|
59
|
+
json;
|
|
60
|
+
command;
|
|
61
|
+
secrets;
|
|
62
|
+
constructor(io, json, command,
|
|
63
|
+
/** Secrets that must never reach the terminal (the key in use). */
|
|
64
|
+
secrets) {
|
|
65
|
+
this.io = io;
|
|
66
|
+
this.json = json;
|
|
67
|
+
this.command = command;
|
|
68
|
+
this.secrets = secrets;
|
|
69
|
+
}
|
|
70
|
+
clean(text) {
|
|
71
|
+
return redactSecrets(text, this.secrets());
|
|
72
|
+
}
|
|
73
|
+
/** Success. `human` renders the non-JSON view. */
|
|
74
|
+
success(data, meta, human) {
|
|
75
|
+
if (this.json) {
|
|
76
|
+
const doc = {
|
|
77
|
+
schemaVersion: JSON_SCHEMA_VERSION,
|
|
78
|
+
ok: true,
|
|
79
|
+
command: this.command,
|
|
80
|
+
data,
|
|
81
|
+
};
|
|
82
|
+
if (meta !== undefined)
|
|
83
|
+
doc.meta = meta;
|
|
84
|
+
this.io.stdout(`${this.clean(JSON.stringify(doc, null, 2))}\n`);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
const text = human();
|
|
88
|
+
if (text)
|
|
89
|
+
this.io.stdout(`${this.clean(text)}\n`);
|
|
90
|
+
}
|
|
91
|
+
return EXIT.OK;
|
|
92
|
+
}
|
|
93
|
+
failure(error) {
|
|
94
|
+
let payload;
|
|
95
|
+
let code;
|
|
96
|
+
let human;
|
|
97
|
+
if (error instanceof InboxyError) {
|
|
98
|
+
payload = { ...error.toJSON(), message: describeError(error) };
|
|
99
|
+
code = exitCodeFor(error.kind);
|
|
100
|
+
human = `Error (${error.code}): ${describeError(error)}`;
|
|
101
|
+
}
|
|
102
|
+
else if (error instanceof UsageError) {
|
|
103
|
+
payload = {
|
|
104
|
+
kind: 'usage',
|
|
105
|
+
code: 'USAGE',
|
|
106
|
+
message: error.message,
|
|
107
|
+
status: 0,
|
|
108
|
+
details: {},
|
|
109
|
+
retryAfterSeconds: null,
|
|
110
|
+
};
|
|
111
|
+
code = EXIT.USAGE;
|
|
112
|
+
human = `Error: ${error.message}\nRun \`inboxy --help\` for usage.`;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
const message = error instanceof Error ? error.message : 'Unexpected error';
|
|
116
|
+
payload = {
|
|
117
|
+
kind: 'unexpected',
|
|
118
|
+
code: 'UNEXPECTED',
|
|
119
|
+
message,
|
|
120
|
+
status: 0,
|
|
121
|
+
details: {},
|
|
122
|
+
retryAfterSeconds: null,
|
|
123
|
+
};
|
|
124
|
+
code = EXIT.UNEXPECTED;
|
|
125
|
+
human = `Error: ${message}`;
|
|
126
|
+
}
|
|
127
|
+
if (this.json) {
|
|
128
|
+
const doc = {
|
|
129
|
+
schemaVersion: JSON_SCHEMA_VERSION,
|
|
130
|
+
ok: false,
|
|
131
|
+
command: this.command,
|
|
132
|
+
error: payload,
|
|
133
|
+
};
|
|
134
|
+
this.io.stdout(`${this.clean(JSON.stringify(doc, null, 2))}\n`);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
this.io.stderr(`${this.clean(human)}\n`);
|
|
138
|
+
}
|
|
139
|
+
return code;
|
|
140
|
+
}
|
|
141
|
+
/** Progress or hints for humans; suppressed in --json mode. */
|
|
142
|
+
note(text) {
|
|
143
|
+
if (!this.json)
|
|
144
|
+
this.io.stderr(`${this.clean(text)}\n`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/** A plain aligned table; cells are flattened to one line. */
|
|
148
|
+
export function table(headers, rows) {
|
|
149
|
+
const cells = rows.map((r) => r.map((c) => (c === null || c === undefined ? '-' : String(c).replace(/\s+/g, ' '))));
|
|
150
|
+
const widths = headers.map((h, i) => Math.min(48, Math.max(h.length, ...cells.map((r) => (r[i] ?? '').length))));
|
|
151
|
+
const fmt = (r) => r
|
|
152
|
+
.map((c, i) => {
|
|
153
|
+
const w = widths[i];
|
|
154
|
+
const v = c.length > w ? `${c.slice(0, w - 1)}…` : c;
|
|
155
|
+
return v.padEnd(w);
|
|
156
|
+
})
|
|
157
|
+
.join(' ')
|
|
158
|
+
.trimEnd();
|
|
159
|
+
return [fmt(headers), fmt(widths.map((w) => '-'.repeat(w))), ...cells.map(fmt)].join('\n');
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,36 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@inboxychat/cli",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Inboxy command line with read methods, diagnostics and schema-validated confirmed operations.",
|
|
5
|
+
"license": "UNLICENSED",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"bin": {
|
|
8
|
+
"inboxy": "./dist/bin.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"!dist/.tsbuildinfo",
|
|
13
|
+
"!dist/**/*.tsbuildinfo"
|
|
14
|
+
],
|
|
15
|
+
"engines": {
|
|
16
|
+
"node": ">=20.3.0"
|
|
17
|
+
},
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"@inboxychat/sdk": "^0.2.0"
|
|
20
|
+
},
|
|
21
|
+
"devDependencies": {
|
|
22
|
+
"@types/node": "^20.10.0",
|
|
23
|
+
"typescript": "^5.3.0",
|
|
24
|
+
"vitest": "^4.0.16"
|
|
25
|
+
},
|
|
26
|
+
"homepage": "https://inboxy.chat/developers/cli",
|
|
27
|
+
"publishConfig": {
|
|
28
|
+
"access": "public"
|
|
29
|
+
},
|
|
30
|
+
"scripts": {
|
|
31
|
+
"build": "tsc -b tsconfig.build.json",
|
|
32
|
+
"type-check": "tsc -p tsconfig.json --noEmit",
|
|
33
|
+
"test": "vitest run",
|
|
34
|
+
"clean": "rm -rf dist .turbo"
|
|
35
|
+
}
|
|
6
36
|
}
|