@mrmtsu/mcms-cli 0.1.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/LICENSE +21 -0
- package/README.ja.md +184 -0
- package/README.md +185 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +143 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/api.d.ts +2 -0
- package/dist/commands/api.js +27 -0
- package/dist/commands/api.js.map +1 -0
- package/dist/commands/auth.d.ts +2 -0
- package/dist/commands/auth.js +238 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/completion.d.ts +2 -0
- package/dist/commands/completion.js +390 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/config.d.ts +2 -0
- package/dist/commands/config.js +63 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/content.d.ts +2 -0
- package/dist/commands/content.js +191 -0
- package/dist/commands/content.js.map +1 -0
- package/dist/commands/media.d.ts +2 -0
- package/dist/commands/media.js +47 -0
- package/dist/commands/media.js.map +1 -0
- package/dist/commands/schema.d.ts +2 -0
- package/dist/commands/schema.js +71 -0
- package/dist/commands/schema.js.map +1 -0
- package/dist/commands/types.d.ts +2 -0
- package/dist/commands/types.js +85 -0
- package/dist/commands/types.js.map +1 -0
- package/dist/commands/utils.d.ts +8 -0
- package/dist/commands/utils.js +56 -0
- package/dist/commands/utils.js.map +1 -0
- package/dist/commands/validate.d.ts +2 -0
- package/dist/commands/validate.js +38 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/core/auth-store.d.ts +11 -0
- package/dist/core/auth-store.js +83 -0
- package/dist/core/auth-store.js.map +1 -0
- package/dist/core/client.d.ts +33 -0
- package/dist/core/client.js +416 -0
- package/dist/core/client.js.map +1 -0
- package/dist/core/config.d.ts +11 -0
- package/dist/core/config.js +73 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/context.d.ts +39 -0
- package/dist/core/context.js +382 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/errors.d.ts +26 -0
- package/dist/core/errors.js +167 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/exit-codes.d.ts +10 -0
- package/dist/core/exit-codes.js +10 -0
- package/dist/core/exit-codes.js.map +1 -0
- package/dist/core/http.d.ts +24 -0
- package/dist/core/http.js +237 -0
- package/dist/core/http.js.map +1 -0
- package/dist/core/io.d.ts +2 -0
- package/dist/core/io.js +39 -0
- package/dist/core/io.js.map +1 -0
- package/dist/core/output.d.ts +4 -0
- package/dist/core/output.js +182 -0
- package/dist/core/output.js.map +1 -0
- package/dist/core/schema.d.ts +23 -0
- package/dist/core/schema.js +319 -0
- package/dist/core/schema.js.map +1 -0
- package/dist/validation/payload.d.ts +6 -0
- package/dist/validation/payload.js +204 -0
- package/dist/validation/payload.js.map +1 -0
- package/package.json +39 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export type ApiKeySource = "option" | "env" | "keychain" | "none";
|
|
2
|
+
export type ApiKeySourceDetail = "option" | "stdin" | "prompt" | "env" | "keychain_profile" | "keychain_service" | "none";
|
|
3
|
+
export type ProfileSource = "option" | "env" | "config" | "none";
|
|
4
|
+
export type ServiceDomainSource = "option" | "env" | "profile" | "config" | "none";
|
|
5
|
+
export type OutputMode = "inspect" | "plain" | "table";
|
|
6
|
+
export type RuntimeContext = {
|
|
7
|
+
json: boolean;
|
|
8
|
+
verbose: boolean;
|
|
9
|
+
color: boolean;
|
|
10
|
+
timeoutMs: number;
|
|
11
|
+
retry: number;
|
|
12
|
+
retryMaxDelayMs: number;
|
|
13
|
+
outputMode: OutputMode;
|
|
14
|
+
selectFields?: string[];
|
|
15
|
+
profile?: string;
|
|
16
|
+
profileSource: ProfileSource;
|
|
17
|
+
serviceDomain?: string;
|
|
18
|
+
serviceDomainSource: ServiceDomainSource;
|
|
19
|
+
apiKey?: string;
|
|
20
|
+
apiKeySource: ApiKeySource;
|
|
21
|
+
apiKeySourceDetail: ApiKeySourceDetail;
|
|
22
|
+
};
|
|
23
|
+
export type GlobalOptions = {
|
|
24
|
+
json?: boolean;
|
|
25
|
+
plain?: boolean;
|
|
26
|
+
table?: boolean;
|
|
27
|
+
select?: string;
|
|
28
|
+
profile?: string;
|
|
29
|
+
serviceDomain?: string;
|
|
30
|
+
apiKey?: string;
|
|
31
|
+
apiKeyStdin?: boolean;
|
|
32
|
+
apiKeyPrompt?: boolean;
|
|
33
|
+
timeout?: string | number;
|
|
34
|
+
retry?: string | number;
|
|
35
|
+
retryMaxDelay?: string | number;
|
|
36
|
+
verbose?: boolean;
|
|
37
|
+
color?: boolean;
|
|
38
|
+
};
|
|
39
|
+
export declare function createRuntimeContext(options: GlobalOptions): Promise<RuntimeContext>;
|
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
import { readApiKey, readApiKeyForProfile } from "./auth-store.js";
|
|
2
|
+
import { readConfig } from "./config.js";
|
|
3
|
+
import { CliError } from "./errors.js";
|
|
4
|
+
import { EXIT_CODE } from "./exit-codes.js";
|
|
5
|
+
export async function createRuntimeContext(options) {
|
|
6
|
+
const config = await readConfig();
|
|
7
|
+
const profileOption = normalizeString(options.profile);
|
|
8
|
+
const profileEnv = normalizeString(process.env.MICROCMS_PROFILE);
|
|
9
|
+
const profileConfig = normalizeString(config.defaultProfile);
|
|
10
|
+
const profile = resolveProfileName(profileOption ?? profileEnv ?? profileConfig);
|
|
11
|
+
const profileSource = profileOption
|
|
12
|
+
? "option"
|
|
13
|
+
: profileEnv
|
|
14
|
+
? "env"
|
|
15
|
+
: profileConfig
|
|
16
|
+
? "config"
|
|
17
|
+
: "none";
|
|
18
|
+
const profileServiceDomain = profile ? normalizeString(config.profiles?.[profile]?.serviceDomain) : undefined;
|
|
19
|
+
const serviceDomainOption = normalizeString(options.serviceDomain);
|
|
20
|
+
const serviceDomainEnv = normalizeString(process.env.MICROCMS_SERVICE_DOMAIN);
|
|
21
|
+
const serviceDomainConfig = normalizeString(config.serviceDomain);
|
|
22
|
+
const serviceDomain = resolveServiceDomain(serviceDomainOption ?? serviceDomainEnv ?? profileServiceDomain ?? serviceDomainConfig);
|
|
23
|
+
const serviceDomainSource = serviceDomainOption
|
|
24
|
+
? "option"
|
|
25
|
+
: serviceDomainEnv
|
|
26
|
+
? "env"
|
|
27
|
+
: profileServiceDomain
|
|
28
|
+
? "profile"
|
|
29
|
+
: serviceDomainConfig
|
|
30
|
+
? "config"
|
|
31
|
+
: "none";
|
|
32
|
+
const fromOption = normalizeString(options.apiKey);
|
|
33
|
+
const apiKeyStdin = Boolean(options.apiKeyStdin);
|
|
34
|
+
const apiKeyPrompt = Boolean(options.apiKeyPrompt);
|
|
35
|
+
if (fromOption && apiKeyStdin) {
|
|
36
|
+
throw new CliError({
|
|
37
|
+
code: "INVALID_INPUT",
|
|
38
|
+
message: "Use either --api-key or --api-key-stdin, not both",
|
|
39
|
+
exitCode: EXIT_CODE.INVALID_INPUT
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
if (apiKeyPrompt && (fromOption || apiKeyStdin)) {
|
|
43
|
+
throw new CliError({
|
|
44
|
+
code: "INVALID_INPUT",
|
|
45
|
+
message: "Use --prompt alone. It conflicts with --api-key and --api-key-stdin.",
|
|
46
|
+
exitCode: EXIT_CODE.INVALID_INPUT
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
let apiKey = fromOption;
|
|
50
|
+
let apiKeySource = "none";
|
|
51
|
+
let apiKeySourceDetail = "none";
|
|
52
|
+
if (apiKey) {
|
|
53
|
+
apiKeySource = "option";
|
|
54
|
+
apiKeySourceDetail = "option";
|
|
55
|
+
}
|
|
56
|
+
else if (apiKeyStdin) {
|
|
57
|
+
apiKey = await readApiKeyFromStdin();
|
|
58
|
+
apiKeySource = "option";
|
|
59
|
+
apiKeySourceDetail = "stdin";
|
|
60
|
+
}
|
|
61
|
+
else if (apiKeyPrompt) {
|
|
62
|
+
apiKey = await readApiKeyFromPrompt();
|
|
63
|
+
apiKeySource = "option";
|
|
64
|
+
apiKeySourceDetail = "prompt";
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
apiKey = normalizeString(process.env.MICROCMS_API_KEY);
|
|
68
|
+
if (apiKey) {
|
|
69
|
+
apiKeySource = "env";
|
|
70
|
+
apiKeySourceDetail = "env";
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (!apiKey && profile) {
|
|
74
|
+
const fromProfileKeychain = await readApiKeyForProfile(profile);
|
|
75
|
+
if (fromProfileKeychain) {
|
|
76
|
+
apiKey = fromProfileKeychain;
|
|
77
|
+
apiKeySource = "keychain";
|
|
78
|
+
apiKeySourceDetail = "keychain_profile";
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (!apiKey && serviceDomain) {
|
|
82
|
+
const fromKeychain = await readApiKey(serviceDomain);
|
|
83
|
+
if (fromKeychain) {
|
|
84
|
+
apiKey = fromKeychain;
|
|
85
|
+
apiKeySource = "keychain";
|
|
86
|
+
apiKeySourceDetail = "keychain_service";
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
json: Boolean(options.json),
|
|
91
|
+
verbose: Boolean(options.verbose),
|
|
92
|
+
color: options.color !== false,
|
|
93
|
+
timeoutMs: parseTimeout(options.timeout),
|
|
94
|
+
retry: parseRetry(options.retry),
|
|
95
|
+
retryMaxDelayMs: parseRetryMaxDelay(options.retryMaxDelay),
|
|
96
|
+
...parseOutputMode(options),
|
|
97
|
+
profile,
|
|
98
|
+
profileSource,
|
|
99
|
+
serviceDomain,
|
|
100
|
+
serviceDomainSource,
|
|
101
|
+
apiKey,
|
|
102
|
+
apiKeySource,
|
|
103
|
+
apiKeySourceDetail
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
function parseOutputMode(options) {
|
|
107
|
+
const plain = Boolean(options.plain);
|
|
108
|
+
const table = Boolean(options.table);
|
|
109
|
+
if (plain && table) {
|
|
110
|
+
throw new CliError({
|
|
111
|
+
code: "INVALID_INPUT",
|
|
112
|
+
message: "Use either --plain or --table, not both",
|
|
113
|
+
exitCode: EXIT_CODE.INVALID_INPUT
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
if (Boolean(options.json) && (plain || table)) {
|
|
117
|
+
throw new CliError({
|
|
118
|
+
code: "INVALID_INPUT",
|
|
119
|
+
message: "--json cannot be combined with --plain or --table",
|
|
120
|
+
exitCode: EXIT_CODE.INVALID_INPUT
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
const selectFields = parseSelectFields(options.select);
|
|
124
|
+
return {
|
|
125
|
+
outputMode: table ? "table" : plain ? "plain" : "inspect",
|
|
126
|
+
selectFields
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
function parseSelectFields(value) {
|
|
130
|
+
if (!value) {
|
|
131
|
+
return undefined;
|
|
132
|
+
}
|
|
133
|
+
const fields = value
|
|
134
|
+
.split(",")
|
|
135
|
+
.map((field) => field.trim())
|
|
136
|
+
.filter((field) => field.length > 0);
|
|
137
|
+
if (fields.length === 0) {
|
|
138
|
+
throw new CliError({
|
|
139
|
+
code: "INVALID_INPUT",
|
|
140
|
+
message: "--select requires at least one field name",
|
|
141
|
+
exitCode: EXIT_CODE.INVALID_INPUT
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
const unique = [...new Set(fields)];
|
|
145
|
+
if (unique.some((field) => !/^[A-Za-z0-9_.-]+$/.test(field))) {
|
|
146
|
+
throw new CliError({
|
|
147
|
+
code: "INVALID_INPUT",
|
|
148
|
+
message: "--select supports letters, numbers, dot, underscore, hyphen",
|
|
149
|
+
exitCode: EXIT_CODE.INVALID_INPUT
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
return unique;
|
|
153
|
+
}
|
|
154
|
+
function parseTimeout(value) {
|
|
155
|
+
if (typeof value === "number" && Number.isFinite(value) && value > 0) {
|
|
156
|
+
return assertRange("timeout", value, 1, 120_000);
|
|
157
|
+
}
|
|
158
|
+
if (typeof value === "string") {
|
|
159
|
+
const parsed = Number.parseInt(value, 10);
|
|
160
|
+
if (/^\d+$/.test(value.trim()) && Number.isFinite(parsed) && parsed > 0) {
|
|
161
|
+
return assertRange("timeout", parsed, 1, 120_000);
|
|
162
|
+
}
|
|
163
|
+
throw invalidInteger("timeout", value, "1-120000");
|
|
164
|
+
}
|
|
165
|
+
return 10_000;
|
|
166
|
+
}
|
|
167
|
+
function parseRetry(value) {
|
|
168
|
+
if (typeof value === "number" && Number.isFinite(value)) {
|
|
169
|
+
return assertRange("retry", value, 0, 10);
|
|
170
|
+
}
|
|
171
|
+
if (typeof value === "string") {
|
|
172
|
+
const parsed = Number.parseInt(value, 10);
|
|
173
|
+
if (/^\d+$/.test(value.trim()) && Number.isFinite(parsed)) {
|
|
174
|
+
return assertRange("retry", parsed, 0, 10);
|
|
175
|
+
}
|
|
176
|
+
throw invalidInteger("retry", value, "0-10");
|
|
177
|
+
}
|
|
178
|
+
return 2;
|
|
179
|
+
}
|
|
180
|
+
function parseRetryMaxDelay(value) {
|
|
181
|
+
if (typeof value === "number" && Number.isFinite(value) && value > 0) {
|
|
182
|
+
return assertRange("retry-max-delay", value, 100, 120_000);
|
|
183
|
+
}
|
|
184
|
+
if (typeof value === "string") {
|
|
185
|
+
const parsed = Number.parseInt(value, 10);
|
|
186
|
+
if (/^\d+$/.test(value.trim()) && Number.isFinite(parsed) && parsed > 0) {
|
|
187
|
+
return assertRange("retry-max-delay", parsed, 100, 120_000);
|
|
188
|
+
}
|
|
189
|
+
throw invalidInteger("retry-max-delay", value, "100-120000");
|
|
190
|
+
}
|
|
191
|
+
return 3_000;
|
|
192
|
+
}
|
|
193
|
+
function normalizeString(value) {
|
|
194
|
+
if (!value) {
|
|
195
|
+
return undefined;
|
|
196
|
+
}
|
|
197
|
+
const trimmed = value.trim();
|
|
198
|
+
return trimmed.length > 0 ? trimmed : undefined;
|
|
199
|
+
}
|
|
200
|
+
function resolveProfileName(value) {
|
|
201
|
+
if (!value) {
|
|
202
|
+
return undefined;
|
|
203
|
+
}
|
|
204
|
+
if (!/^[A-Za-z0-9](?:[A-Za-z0-9._-]{0,62}[A-Za-z0-9])?$/.test(value)) {
|
|
205
|
+
throw new CliError({
|
|
206
|
+
code: "INVALID_INPUT",
|
|
207
|
+
message: "Invalid profile name format. Use letters, numbers, dot, underscore, hyphen (1-64 chars).",
|
|
208
|
+
exitCode: EXIT_CODE.INVALID_INPUT,
|
|
209
|
+
details: { provided: value }
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
return value;
|
|
213
|
+
}
|
|
214
|
+
function resolveServiceDomain(value) {
|
|
215
|
+
if (!value) {
|
|
216
|
+
return undefined;
|
|
217
|
+
}
|
|
218
|
+
const normalized = value.toLowerCase();
|
|
219
|
+
if (!/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/.test(normalized)) {
|
|
220
|
+
throw new CliError({
|
|
221
|
+
code: "INVALID_INPUT",
|
|
222
|
+
message: "Invalid service domain format. Expected lowercase letters, numbers, hyphens, max 63 chars, no leading/trailing hyphen.",
|
|
223
|
+
exitCode: EXIT_CODE.INVALID_INPUT,
|
|
224
|
+
details: {
|
|
225
|
+
provided: value
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
return normalized;
|
|
230
|
+
}
|
|
231
|
+
async function readApiKeyFromStdin() {
|
|
232
|
+
if (process.stdin.isTTY) {
|
|
233
|
+
throw new CliError({
|
|
234
|
+
code: "INVALID_INPUT",
|
|
235
|
+
message: "--api-key-stdin requires piped stdin input (TTY is not supported)",
|
|
236
|
+
exitCode: EXIT_CODE.INVALID_INPUT
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
const chunks = [];
|
|
240
|
+
for await (const chunk of process.stdin) {
|
|
241
|
+
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
|
|
242
|
+
}
|
|
243
|
+
const trimmed = Buffer.concat(chunks).toString("utf8").trim();
|
|
244
|
+
if (!trimmed) {
|
|
245
|
+
throw new CliError({
|
|
246
|
+
code: "INVALID_INPUT",
|
|
247
|
+
message: "--api-key-stdin was specified but stdin did not contain an API key",
|
|
248
|
+
exitCode: EXIT_CODE.INVALID_INPUT
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
return trimmed;
|
|
252
|
+
}
|
|
253
|
+
async function readApiKeyFromPrompt() {
|
|
254
|
+
if (!process.stdin.isTTY || !process.stderr.isTTY) {
|
|
255
|
+
throw new CliError({
|
|
256
|
+
code: "INVALID_INPUT",
|
|
257
|
+
message: "--prompt requires an interactive TTY",
|
|
258
|
+
exitCode: EXIT_CODE.INVALID_INPUT
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
const stdin = process.stdin;
|
|
262
|
+
const wasRaw = Boolean(stdin.isRaw);
|
|
263
|
+
stdin.setEncoding("utf8");
|
|
264
|
+
stdin.resume();
|
|
265
|
+
process.stderr.write("API key: ");
|
|
266
|
+
return new Promise((resolve, reject) => {
|
|
267
|
+
let value = "";
|
|
268
|
+
let escapePending = false;
|
|
269
|
+
let inControlSequence = false;
|
|
270
|
+
let settled = false;
|
|
271
|
+
const cleanup = () => {
|
|
272
|
+
stdin.off("data", onData);
|
|
273
|
+
stdin.off("end", onEnd);
|
|
274
|
+
stdin.off("error", onError);
|
|
275
|
+
if (stdin.isTTY) {
|
|
276
|
+
stdin.setRawMode(wasRaw);
|
|
277
|
+
}
|
|
278
|
+
stdin.pause();
|
|
279
|
+
process.stderr.write("\n");
|
|
280
|
+
};
|
|
281
|
+
const finishResolve = (apiKey) => {
|
|
282
|
+
if (settled) {
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
settled = true;
|
|
286
|
+
cleanup();
|
|
287
|
+
resolve(apiKey);
|
|
288
|
+
};
|
|
289
|
+
const finishReject = (error) => {
|
|
290
|
+
if (settled) {
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
settled = true;
|
|
294
|
+
cleanup();
|
|
295
|
+
reject(error);
|
|
296
|
+
};
|
|
297
|
+
const onData = (chunk) => {
|
|
298
|
+
const text = Buffer.isBuffer(chunk) ? chunk.toString("utf8") : chunk;
|
|
299
|
+
for (const char of text) {
|
|
300
|
+
if (escapePending) {
|
|
301
|
+
escapePending = false;
|
|
302
|
+
if (char === "[" || char === "O") {
|
|
303
|
+
inControlSequence = true;
|
|
304
|
+
}
|
|
305
|
+
continue;
|
|
306
|
+
}
|
|
307
|
+
if (inControlSequence) {
|
|
308
|
+
if (/[A-Za-z~]/.test(char)) {
|
|
309
|
+
inControlSequence = false;
|
|
310
|
+
}
|
|
311
|
+
continue;
|
|
312
|
+
}
|
|
313
|
+
if (char === "\r" || char === "\n") {
|
|
314
|
+
const trimmed = value.trim();
|
|
315
|
+
if (!trimmed) {
|
|
316
|
+
finishReject(new CliError({
|
|
317
|
+
code: "INVALID_INPUT",
|
|
318
|
+
message: "No API key was entered",
|
|
319
|
+
exitCode: EXIT_CODE.INVALID_INPUT
|
|
320
|
+
}));
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
finishResolve(trimmed);
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
if (char === "\u0003") {
|
|
327
|
+
finishReject(new CliError({
|
|
328
|
+
code: "INVALID_INPUT",
|
|
329
|
+
message: "API key input canceled",
|
|
330
|
+
exitCode: EXIT_CODE.INVALID_INPUT
|
|
331
|
+
}));
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
if (char === "\u007f" || char === "\b" || char === "\u0008") {
|
|
335
|
+
value = value.slice(0, -1);
|
|
336
|
+
continue;
|
|
337
|
+
}
|
|
338
|
+
if (char === "\u001b") {
|
|
339
|
+
escapePending = true;
|
|
340
|
+
continue;
|
|
341
|
+
}
|
|
342
|
+
if (char >= " ") {
|
|
343
|
+
value += char;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
};
|
|
347
|
+
const onEnd = () => {
|
|
348
|
+
finishReject(new CliError({
|
|
349
|
+
code: "INVALID_INPUT",
|
|
350
|
+
message: "API key input stream ended before completion",
|
|
351
|
+
exitCode: EXIT_CODE.INVALID_INPUT
|
|
352
|
+
}));
|
|
353
|
+
};
|
|
354
|
+
const onError = () => {
|
|
355
|
+
finishReject(new CliError({
|
|
356
|
+
code: "INVALID_INPUT",
|
|
357
|
+
message: "Failed to read API key from prompt",
|
|
358
|
+
exitCode: EXIT_CODE.INVALID_INPUT
|
|
359
|
+
}));
|
|
360
|
+
};
|
|
361
|
+
if (stdin.isTTY) {
|
|
362
|
+
stdin.setRawMode(true);
|
|
363
|
+
}
|
|
364
|
+
stdin.on("data", onData);
|
|
365
|
+
stdin.on("end", onEnd);
|
|
366
|
+
stdin.on("error", onError);
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
function assertRange(name, value, min, max) {
|
|
370
|
+
if (!Number.isInteger(value) || value < min || value > max) {
|
|
371
|
+
throw invalidInteger(name, String(value), `${min}-${max}`);
|
|
372
|
+
}
|
|
373
|
+
return value;
|
|
374
|
+
}
|
|
375
|
+
function invalidInteger(name, value, expectedRange) {
|
|
376
|
+
return new CliError({
|
|
377
|
+
code: "INVALID_INPUT",
|
|
378
|
+
message: `Invalid ${name}: ${value}. Expected integer in range ${expectedRange}.`,
|
|
379
|
+
exitCode: EXIT_CODE.INVALID_INPUT
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type ExitCode } from "./exit-codes.js";
|
|
2
|
+
export type ErrorCode = "INVALID_INPUT" | "AUTH_FAILED" | "FORBIDDEN" | "NETWORK_ERROR" | "CONFLICT" | "NOT_FOUND" | "API_ERROR" | "UNKNOWN_ERROR";
|
|
3
|
+
export type JsonErrorShape = {
|
|
4
|
+
code: ErrorCode;
|
|
5
|
+
message: string;
|
|
6
|
+
details?: unknown;
|
|
7
|
+
retryable: boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare class CliError extends Error {
|
|
10
|
+
readonly code: ErrorCode;
|
|
11
|
+
readonly exitCode: ExitCode;
|
|
12
|
+
readonly details?: unknown;
|
|
13
|
+
readonly retryable: boolean;
|
|
14
|
+
constructor(params: {
|
|
15
|
+
code: ErrorCode;
|
|
16
|
+
message: string;
|
|
17
|
+
exitCode: ExitCode;
|
|
18
|
+
details?: unknown;
|
|
19
|
+
retryable?: boolean;
|
|
20
|
+
});
|
|
21
|
+
toJson(options?: {
|
|
22
|
+
includeDetails?: boolean;
|
|
23
|
+
}): JsonErrorShape;
|
|
24
|
+
}
|
|
25
|
+
export declare function fromHttpStatus(status: number, message: string, details?: unknown): CliError;
|
|
26
|
+
export declare function normalizeError(error: unknown): CliError;
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { EXIT_CODE } from "./exit-codes.js";
|
|
2
|
+
export class CliError extends Error {
|
|
3
|
+
code;
|
|
4
|
+
exitCode;
|
|
5
|
+
details;
|
|
6
|
+
retryable;
|
|
7
|
+
constructor(params) {
|
|
8
|
+
super(params.message);
|
|
9
|
+
this.name = "CliError";
|
|
10
|
+
this.code = params.code;
|
|
11
|
+
this.exitCode = params.exitCode;
|
|
12
|
+
this.details = params.details;
|
|
13
|
+
this.retryable = Boolean(params.retryable);
|
|
14
|
+
}
|
|
15
|
+
toJson(options) {
|
|
16
|
+
const payload = {
|
|
17
|
+
code: this.code,
|
|
18
|
+
message: this.message,
|
|
19
|
+
retryable: this.retryable
|
|
20
|
+
};
|
|
21
|
+
if (options?.includeDetails && this.details !== undefined) {
|
|
22
|
+
payload.details = this.details;
|
|
23
|
+
}
|
|
24
|
+
return payload;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const NETWORK_NAMES = new Set(["AbortError", "FetchError"]);
|
|
28
|
+
function isLikelyNetworkError(err) {
|
|
29
|
+
if (!(err instanceof Error)) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
if (NETWORK_NAMES.has(err.name)) {
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
const code = err.code;
|
|
36
|
+
if (typeof code === "string") {
|
|
37
|
+
return [
|
|
38
|
+
"ECONNRESET",
|
|
39
|
+
"ECONNREFUSED",
|
|
40
|
+
"ENOTFOUND",
|
|
41
|
+
"ETIMEDOUT",
|
|
42
|
+
"EAI_AGAIN"
|
|
43
|
+
].includes(code);
|
|
44
|
+
}
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
export function fromHttpStatus(status, message, details) {
|
|
48
|
+
if (status === 401) {
|
|
49
|
+
return new CliError({
|
|
50
|
+
code: "AUTH_FAILED",
|
|
51
|
+
message,
|
|
52
|
+
details,
|
|
53
|
+
exitCode: EXIT_CODE.AUTH,
|
|
54
|
+
retryable: false
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
if (status === 403) {
|
|
58
|
+
return new CliError({
|
|
59
|
+
code: "FORBIDDEN",
|
|
60
|
+
message,
|
|
61
|
+
details,
|
|
62
|
+
exitCode: EXIT_CODE.PERMISSION,
|
|
63
|
+
retryable: false
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
if (status === 404) {
|
|
67
|
+
return new CliError({
|
|
68
|
+
code: "NOT_FOUND",
|
|
69
|
+
message,
|
|
70
|
+
details,
|
|
71
|
+
exitCode: EXIT_CODE.INVALID_INPUT,
|
|
72
|
+
retryable: false
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
if (status === 409) {
|
|
76
|
+
return new CliError({
|
|
77
|
+
code: "CONFLICT",
|
|
78
|
+
message,
|
|
79
|
+
details,
|
|
80
|
+
exitCode: EXIT_CODE.CONFLICT,
|
|
81
|
+
retryable: false
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
if (status === 408 || status === 425 || status === 429) {
|
|
85
|
+
return new CliError({
|
|
86
|
+
code: "NETWORK_ERROR",
|
|
87
|
+
message,
|
|
88
|
+
details,
|
|
89
|
+
exitCode: EXIT_CODE.NETWORK,
|
|
90
|
+
retryable: true
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
if (status >= 500) {
|
|
94
|
+
return new CliError({
|
|
95
|
+
code: "API_ERROR",
|
|
96
|
+
message,
|
|
97
|
+
details,
|
|
98
|
+
exitCode: EXIT_CODE.NETWORK,
|
|
99
|
+
retryable: true
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
return new CliError({
|
|
103
|
+
code: "API_ERROR",
|
|
104
|
+
message,
|
|
105
|
+
details,
|
|
106
|
+
exitCode: EXIT_CODE.UNKNOWN,
|
|
107
|
+
retryable: false
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
export function normalizeError(error) {
|
|
111
|
+
if (error instanceof CliError) {
|
|
112
|
+
return error;
|
|
113
|
+
}
|
|
114
|
+
if (isLikelyNetworkError(error)) {
|
|
115
|
+
return new CliError({
|
|
116
|
+
code: "NETWORK_ERROR",
|
|
117
|
+
message: "Network request failed",
|
|
118
|
+
details: toErrorDetails(error),
|
|
119
|
+
exitCode: EXIT_CODE.NETWORK,
|
|
120
|
+
retryable: true
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
const status = getStatusCode(error);
|
|
124
|
+
if (typeof status === "number") {
|
|
125
|
+
return fromHttpStatus(status, `microCMS API request failed with status ${status}`, toErrorDetails(error));
|
|
126
|
+
}
|
|
127
|
+
if (error instanceof Error) {
|
|
128
|
+
return new CliError({
|
|
129
|
+
code: "UNKNOWN_ERROR",
|
|
130
|
+
message: error.message,
|
|
131
|
+
details: toErrorDetails(error),
|
|
132
|
+
exitCode: EXIT_CODE.UNKNOWN,
|
|
133
|
+
retryable: false
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
return new CliError({
|
|
137
|
+
code: "UNKNOWN_ERROR",
|
|
138
|
+
message: "Unexpected error",
|
|
139
|
+
details: { error },
|
|
140
|
+
exitCode: EXIT_CODE.UNKNOWN,
|
|
141
|
+
retryable: false
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
function getStatusCode(error) {
|
|
145
|
+
if (typeof error !== "object" || error === null) {
|
|
146
|
+
return undefined;
|
|
147
|
+
}
|
|
148
|
+
const maybeStatus = error.status;
|
|
149
|
+
if (typeof maybeStatus === "number") {
|
|
150
|
+
return maybeStatus;
|
|
151
|
+
}
|
|
152
|
+
const responseStatus = error.response?.status;
|
|
153
|
+
if (typeof responseStatus === "number") {
|
|
154
|
+
return responseStatus;
|
|
155
|
+
}
|
|
156
|
+
return undefined;
|
|
157
|
+
}
|
|
158
|
+
function toErrorDetails(error) {
|
|
159
|
+
if (error instanceof Error) {
|
|
160
|
+
return {
|
|
161
|
+
name: error.name,
|
|
162
|
+
message: error.message
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
return error;
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const EXIT_CODE: {
|
|
2
|
+
readonly SUCCESS: 0;
|
|
3
|
+
readonly UNKNOWN: 1;
|
|
4
|
+
readonly INVALID_INPUT: 2;
|
|
5
|
+
readonly AUTH: 3;
|
|
6
|
+
readonly PERMISSION: 4;
|
|
7
|
+
readonly NETWORK: 5;
|
|
8
|
+
readonly CONFLICT: 6;
|
|
9
|
+
};
|
|
10
|
+
export type ExitCode = (typeof EXIT_CODE)[keyof typeof EXIT_CODE];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exit-codes.js","sourceRoot":"","sources":["../../src/core/exit-codes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,aAAa,EAAE,CAAC;IAChB,IAAI,EAAE,CAAC;IACP,UAAU,EAAE,CAAC;IACb,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,CAAC;CACH,CAAC"}
|