maintouch 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/dist/index.js ADDED
@@ -0,0 +1,338 @@
1
+ #!/usr/bin/env node
2
+ import { spawn } from "node:child_process";
3
+ import { realpathSync } from "node:fs";
4
+ import { createInterface } from "node:readline/promises";
5
+ import { Writable } from "node:stream";
6
+ import { fileURLToPath } from "node:url";
7
+ import { getBoolean, getString, parseArgs, splitCommandLine } from "./args.js";
8
+ import { colorize, renderVersion } from "./ascii.js";
9
+ import { deleteConfig, isSafeBaseUrl, readConfig, redactKey, resolveAppUrl, resolveCredentials, writeConfig } from "./config.js";
10
+ import { commandsText, helpText, introText, shellIntroText, topicHelpText, workflowsText } from "./help.js";
11
+ import { buildRequestPlan, CliError, sendRequest } from "./request.js";
12
+ export async function runCli(argv, env, io, fetchImpl) {
13
+ const parsed = parseArgs(argv);
14
+ const [group, topic] = parsed.positional;
15
+ const color = shouldUseColor(env);
16
+ const columns = io.stdout.columns ?? 80;
17
+ if (getBoolean(parsed.options, "help")) {
18
+ const requestedTopic = group;
19
+ const output = requestedTopic === undefined ? helpText(color, columns) : topicHelpText(requestedTopic, color, columns);
20
+ if (output === undefined) {
21
+ io.stderr.write(`maintouch: unknown help topic "${requestedTopic}"\n`);
22
+ return 2;
23
+ }
24
+ io.stdout.write(output);
25
+ return 0;
26
+ }
27
+ if (group === "version" || getBoolean(parsed.options, "version")) {
28
+ io.stdout.write(renderVersion(color, columns));
29
+ return 0;
30
+ }
31
+ const forceShell = group === "interactive" || group === "shell" || getBoolean(parsed.options, "interactive");
32
+ if (forceShell || (group === undefined && isInteractiveTerminal(env, io))) {
33
+ return runInteractive(env, io, fetchImpl);
34
+ }
35
+ if (group === undefined) {
36
+ io.stdout.write(introText(color, columns));
37
+ return 0;
38
+ }
39
+ if (group === "help") {
40
+ const requestedTopic = topic;
41
+ const output = requestedTopic === undefined ? helpText(color, columns) : topicHelpText(requestedTopic, color, columns);
42
+ if (output === undefined) {
43
+ io.stderr.write(`maintouch: unknown help topic "${requestedTopic}"\n`);
44
+ return 2;
45
+ }
46
+ io.stdout.write(output);
47
+ return 0;
48
+ }
49
+ if (group === "commands") {
50
+ io.stdout.write(commandsText(color, columns));
51
+ return 0;
52
+ }
53
+ if (group === "workflows") {
54
+ io.stdout.write(workflowsText(color, columns));
55
+ return 0;
56
+ }
57
+ try {
58
+ if (group === "auth" && (topic === "setup" || topic === "login")) {
59
+ return await setupAuth(parsed.options, env, io, fetchImpl);
60
+ }
61
+ if (group === "auth" && topic === "status") {
62
+ return status(env, io);
63
+ }
64
+ if (group === "auth" && topic === "logout") {
65
+ return logout(env, io);
66
+ }
67
+ const credentials = resolveCredentials(env, {
68
+ apiKey: getString(parsed.options, "apiKey"),
69
+ baseUrl: getString(parsed.options, "baseUrl"),
70
+ });
71
+ const timeoutMs = resolveTimeoutMs(parsed.options, env);
72
+ if (!credentials.apiKey) {
73
+ throw new CliError("No API key found. Run `maintouch auth setup` or set MAINTOUCH_API_KEY.", 2);
74
+ }
75
+ requireSafeBaseUrl(credentials.baseUrl, parsed.options, env);
76
+ if (group === "auth" && topic === "validate") {
77
+ const payload = await sendRequest({ method: "GET", path: "/v0/auth/validate" }, { apiKey: credentials.apiKey, baseUrl: credentials.baseUrl, fetchImpl, timeoutMs });
78
+ if (getBoolean(parsed.options, "raw")) {
79
+ io.stdout.write(`${JSON.stringify(payload, null, 0)}\n`);
80
+ }
81
+ else {
82
+ io.stdout.write(`Authenticated with Maintouch (${credentials.source}).\n`);
83
+ }
84
+ return 0;
85
+ }
86
+ const plan = buildRequestPlan(parsed);
87
+ const payload = await sendRequest(plan, {
88
+ apiKey: credentials.apiKey,
89
+ baseUrl: credentials.baseUrl,
90
+ fetchImpl,
91
+ timeoutMs,
92
+ });
93
+ const raw = getBoolean(parsed.options, "raw");
94
+ io.stdout.write(`${JSON.stringify(payload, null, raw ? 0 : 2)}\n`);
95
+ return 0;
96
+ }
97
+ catch (error) {
98
+ if (error instanceof CliError) {
99
+ io.stderr.write(`maintouch: ${error.message}\n`);
100
+ return error.exitCode;
101
+ }
102
+ const message = error instanceof Error ? error.message : String(error);
103
+ io.stderr.write(`maintouch: ${message}\n`);
104
+ return 1;
105
+ }
106
+ }
107
+ if (isDirectRun()) {
108
+ const exitCode = await runCli(process.argv.slice(2), process.env, process);
109
+ process.exitCode = exitCode;
110
+ }
111
+ function shouldUseColor(env) {
112
+ if (env.MAINTOUCH_NO_COLOR !== undefined)
113
+ return false;
114
+ if (env.FORCE_COLOR === "0")
115
+ return false;
116
+ return true;
117
+ }
118
+ function isDirectRun() {
119
+ if (!process.argv[1])
120
+ return false;
121
+ try {
122
+ return realpathSync(fileURLToPath(import.meta.url)) === realpathSync(process.argv[1]);
123
+ }
124
+ catch {
125
+ return false;
126
+ }
127
+ }
128
+ function isInteractiveTerminal(env, io) {
129
+ if (env.MAINTOUCH_NONINTERACTIVE !== undefined)
130
+ return false;
131
+ if (env.CI !== undefined)
132
+ return false;
133
+ const input = io.stdin ?? process.stdin;
134
+ return Boolean(input.isTTY);
135
+ }
136
+ async function runInteractive(env, io, fetchImpl) {
137
+ const color = shouldUseColor(env);
138
+ const columns = io.stdout.columns ?? 80;
139
+ const prompt = `${colorize("maintouch", "orange", color)} ${colorize("›", "muted", color)} `;
140
+ const input = io.stdin ?? process.stdin;
141
+ const isTty = Boolean(input.isTTY);
142
+ const rl = createInterface({ input, output: process.stdout, terminal: isTty });
143
+ io.stdout.write(shellIntroText(color, columns));
144
+ try {
145
+ if (isTty) {
146
+ while (true) {
147
+ const line = await askLine(rl, prompt);
148
+ if (line === undefined)
149
+ break;
150
+ if ((await runInteractiveLine(line, env, io, rl, true, fetchImpl)) === "exit")
151
+ break;
152
+ }
153
+ }
154
+ else {
155
+ for await (const line of rl) {
156
+ if ((await runInteractiveLine(line, env, io, rl, false, fetchImpl)) === "exit")
157
+ break;
158
+ }
159
+ }
160
+ }
161
+ finally {
162
+ rl.close();
163
+ }
164
+ io.stdout.write("\n");
165
+ return 0;
166
+ }
167
+ async function runInteractiveLine(line, env, io, rl, canPrompt, fetchImpl) {
168
+ const trimmed = line.trim();
169
+ if (trimmed.length === 0)
170
+ return "continue";
171
+ let args;
172
+ try {
173
+ args = normalizeInteractiveArgs(splitCommandLine(trimmed));
174
+ }
175
+ catch (error) {
176
+ const message = error instanceof Error ? error.message : String(error);
177
+ io.stderr.write(`maintouch: ${message}\n`);
178
+ return "continue";
179
+ }
180
+ if (args.length === 0)
181
+ return "continue";
182
+ if (isExitCommand(args))
183
+ return "exit";
184
+ if (args[0] === "clear") {
185
+ io.stdout.write("\x1Bc");
186
+ return "continue";
187
+ }
188
+ if (args[0] === "interactive" || args[0] === "shell") {
189
+ io.stdout.write("Already in the Maintouch shell.\n");
190
+ return "continue";
191
+ }
192
+ const preparedArgs = await prepareInteractiveArgs(args, env, io, rl, canPrompt);
193
+ if (preparedArgs === undefined)
194
+ return "continue";
195
+ await runCli(preparedArgs, env, { ...io, stdin: undefined }, fetchImpl);
196
+ return "continue";
197
+ }
198
+ async function askLine(rl, prompt) {
199
+ try {
200
+ return await rl.question(prompt);
201
+ }
202
+ catch {
203
+ return undefined;
204
+ }
205
+ }
206
+ function normalizeInteractiveArgs(args) {
207
+ const normalized = args[0] === "maintouch" ? args.slice(1) : args;
208
+ const [command, ...rest] = normalized;
209
+ if (command === undefined)
210
+ return [];
211
+ if (command === "?")
212
+ return ["help", ...rest];
213
+ if (["setup", "login", "logout", "status", "validate"].includes(command)) {
214
+ return ["auth", command, ...rest];
215
+ }
216
+ return normalized;
217
+ }
218
+ function isExitCommand(args) {
219
+ return args.length === 1 && ["exit", "quit", ":q"].includes(args[0]);
220
+ }
221
+ async function prepareInteractiveArgs(args, env, io, rl, canPrompt) {
222
+ if (args[0] !== "auth" || (args[1] !== "setup" && args[1] !== "login"))
223
+ return args;
224
+ const parsed = parseArgs(args);
225
+ if (getString(parsed.options, "apiKey") || env.MAINTOUCH_API_KEY || env.MT_API_KEY)
226
+ return args;
227
+ if (!canPrompt)
228
+ return args;
229
+ rl.pause();
230
+ const apiKey = await promptForApiKey(env, io);
231
+ rl.resume();
232
+ if (!apiKey) {
233
+ io.stderr.write("maintouch: API key is required.\n");
234
+ return undefined;
235
+ }
236
+ return [...args, "--api-key", apiKey];
237
+ }
238
+ async function setupAuth(options, env, io, fetchImpl) {
239
+ const existing = readConfig(env);
240
+ const baseUrl = getString(options, "baseUrl") ?? env.MAINTOUCH_API_URL ?? existing.baseUrl ?? "https://api.maintouch.com";
241
+ const timeoutMs = resolveTimeoutMs(options, env);
242
+ requireSafeBaseUrl(baseUrl, options, env);
243
+ const apiKey = getString(options, "apiKey") ?? env.MAINTOUCH_API_KEY ?? env.MT_API_KEY ?? (await promptForApiKey(env, io));
244
+ if (!apiKey) {
245
+ throw new CliError("Pass --api-key, set MAINTOUCH_API_KEY, or paste a key when prompted.", 2);
246
+ }
247
+ await sendRequest({ method: "GET", path: "/v0/auth/validate" }, { apiKey, baseUrl, fetchImpl, timeoutMs });
248
+ const configPath = writeConfig(env, { apiKey, baseUrl });
249
+ io.stdout.write(`Saved Maintouch API key (${redactKey(apiKey)})\n`);
250
+ io.stdout.write(`Config: ${configPath}\n`);
251
+ io.stdout.write("Next: maintouch posts export --status scheduled\n");
252
+ return 0;
253
+ }
254
+ function status(env, io) {
255
+ const credentials = resolveCredentials(env, {});
256
+ if (!credentials.apiKey) {
257
+ io.stdout.write("No API key configured.\n");
258
+ io.stdout.write("Run: maintouch auth setup\n");
259
+ io.stdout.write(`Config: ${credentials.configPath}\n`);
260
+ return 0;
261
+ }
262
+ io.stdout.write(`API key: ${redactKey(credentials.apiKey)}\n`);
263
+ io.stdout.write(`Source: ${credentials.source}\n`);
264
+ io.stdout.write(`Base URL: ${credentials.baseUrl}\n`);
265
+ io.stdout.write(`Config: ${credentials.configPath}\n`);
266
+ return 0;
267
+ }
268
+ function logout(env, io) {
269
+ const deleted = deleteConfig(env);
270
+ io.stdout.write(deleted ? "Removed saved Maintouch credentials.\n" : "No saved Maintouch credentials found.\n");
271
+ return 0;
272
+ }
273
+ async function promptForApiKey(env, io) {
274
+ const input = io.stdin ?? process.stdin;
275
+ if (input.isTTY) {
276
+ const url = buildCliApiKeyUrl(env);
277
+ io.stdout.write("Open Maintouch to create an API key for this CLI.\n");
278
+ io.stdout.write(`${url}\n\n`);
279
+ openBrowser(url);
280
+ io.stdout.write("After creating the key, copy it from your browser and paste it below.\n");
281
+ }
282
+ return promptForHiddenValue("Maintouch API key: ", io);
283
+ }
284
+ function buildCliApiKeyUrl(env) {
285
+ const url = new URL("/settings/api-keys", resolveAppUrl(env));
286
+ url.searchParams.set("create", "cli");
287
+ return url.toString();
288
+ }
289
+ function openBrowser(url) {
290
+ const opener = process.platform === "darwin" ? "open" : process.platform === "win32" ? "cmd" : "xdg-open";
291
+ const args = process.platform === "win32" ? ["/c", "start", "", url] : [url];
292
+ try {
293
+ const child = spawn(opener, args, { detached: true, stdio: "ignore" });
294
+ child.unref();
295
+ }
296
+ catch {
297
+ // the printed url is the fallback
298
+ }
299
+ }
300
+ async function promptForHiddenValue(prompt, io) {
301
+ const input = io.stdin ?? process.stdin;
302
+ if (!input.isTTY)
303
+ return undefined;
304
+ // keep pasted keys out of the visible terminal
305
+ const mutedOutput = new Writable({
306
+ write(_chunk, _encoding, callback) {
307
+ callback();
308
+ },
309
+ });
310
+ io.stderr.write(prompt);
311
+ const rl = createInterface({ input, output: mutedOutput, terminal: true });
312
+ try {
313
+ const answer = await rl.question("");
314
+ io.stderr.write("\n");
315
+ return answer.trim() || undefined;
316
+ }
317
+ finally {
318
+ rl.close();
319
+ }
320
+ }
321
+ function resolveTimeoutMs(options, env) {
322
+ const raw = getString(options, "timeout") ?? getString(options, "timeoutMs") ?? env.MAINTOUCH_TIMEOUT_MS;
323
+ if (raw === undefined)
324
+ return undefined;
325
+ const timeoutMs = Number(raw);
326
+ if (!Number.isInteger(timeoutMs) || timeoutMs <= 0) {
327
+ throw new CliError("Timeout must be a positive number of milliseconds.", 2);
328
+ }
329
+ return timeoutMs;
330
+ }
331
+ function requireSafeBaseUrl(baseUrl, options, env) {
332
+ const allowedByFlag = getBoolean(options, "allowInsecureBaseUrl") || getBoolean(options, "allowUnsafeBaseUrl");
333
+ const allowedByEnv = env.MAINTOUCH_ALLOW_INSECURE_API_URL === "1" || env.MAINTOUCH_ALLOW_INSECURE_API_URL === "true";
334
+ if (allowedByFlag || allowedByEnv || isSafeBaseUrl(baseUrl))
335
+ return;
336
+ throw new CliError("Refusing to send an API key to a non-Maintouch API URL. Use --allow-insecure-base-url only for trusted development endpoints.", 2);
337
+ }
338
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { type ParsedArgs } from "./args.js";
2
+ export type HttpMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
3
+ export type RequestPlan = {
4
+ method: HttpMethod;
5
+ path: string;
6
+ query?: Record<string, string | number | boolean | string[] | undefined>;
7
+ body?: unknown;
8
+ };
9
+ export declare function buildRequestPlan(parsed: ParsedArgs): RequestPlan;
10
+ export declare function buildUrl(baseUrl: string, plan: RequestPlan): URL;
11
+ export declare function sendRequest(plan: RequestPlan, config: {
12
+ apiKey: string;
13
+ baseUrl: string;
14
+ fetchImpl?: typeof fetch;
15
+ timeoutMs?: number;
16
+ }): Promise<unknown>;
17
+ export declare class CliError extends Error {
18
+ readonly exitCode: number;
19
+ constructor(message: string, exitCode: number);
20
+ }
21
+ //# sourceMappingURL=request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4D,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAEtG,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;AAErE,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;IACzE,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAwCF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,CAmJhE;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,GAAG,CAWhE;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAyChK;AAgID,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;CAK9C"}