plaud 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/cli.js ADDED
@@ -0,0 +1,583 @@
1
+ #!/usr/bin/env node
2
+ import fs from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { Command } from "commander";
5
+ import { clearConfig, readConfig, redactToken } from "./config.js";
6
+ import { exportRecordings } from "./export.js";
7
+ import { downloadRecording } from "./download.js";
8
+ import { resolveAuthToken } from "./plaud-api.js";
9
+ import { fail, makeError, ok, printJson } from "./output.js";
10
+ import { captureTokenFromBrowser, importTokenFromHar, saveToken, validateToken } from "./auth.js";
11
+ function pickUserLabel(me) {
12
+ if (!me || typeof me !== "object")
13
+ return "";
14
+ const candidates = [
15
+ me?.user?.email,
16
+ me?.user?.nickname,
17
+ me?.user?.id,
18
+ me.email,
19
+ me.username,
20
+ me.name,
21
+ me.id,
22
+ ].filter(Boolean);
23
+ return candidates.length ? String(candidates[0]) : "";
24
+ }
25
+ function splitCsv(value) {
26
+ return String(value || "")
27
+ .split(",")
28
+ .map((s) => s.trim())
29
+ .filter(Boolean);
30
+ }
31
+ async function readStdin() {
32
+ const chunks = [];
33
+ for await (const chunk of process.stdin)
34
+ chunks.push(chunk);
35
+ return Buffer.concat(chunks).toString("utf8");
36
+ }
37
+ function defaultOutDir() {
38
+ const date = new Date().toISOString().split("T")[0];
39
+ return path.join(process.cwd(), `plaud-transcripts-${date}`);
40
+ }
41
+ function defaultZipPath() {
42
+ const date = new Date().toISOString().split("T")[0];
43
+ return path.join(process.cwd(), `plaud-transcripts-${date}.zip`);
44
+ }
45
+ function defaultDownloadDir() {
46
+ const date = new Date().toISOString().split("T")[0];
47
+ return path.join(process.cwd(), `plaud-download-${date}`);
48
+ }
49
+ function formatElapsed(elapsedMs) {
50
+ const seconds = Math.round(elapsedMs / 100) / 10;
51
+ return `${seconds.toFixed(1)}s`;
52
+ }
53
+ function createStatusRenderer() {
54
+ const startedAt = Date.now();
55
+ const spinnerFrames = ["|", "/", "-", "\\"];
56
+ let frame = 0;
57
+ let lastLineLen = 0;
58
+ let lastMsg = "";
59
+ let currentMsg = "";
60
+ let interval = null;
61
+ const render = () => {
62
+ const elapsedMs = Date.now() - startedAt;
63
+ const spin = spinnerFrames[frame % spinnerFrames.length];
64
+ frame++;
65
+ const msg = currentMsg || lastMsg || "Working";
66
+ const line = `[plaud] ${spin} ${msg} (${formatElapsed(elapsedMs)})`;
67
+ if (line === lastMsg)
68
+ return;
69
+ lastMsg = line;
70
+ const pad = lastLineLen > line.length ? " ".repeat(lastLineLen - line.length) : "";
71
+ lastLineLen = line.length;
72
+ process.stderr.write(`\r${line}${pad}`);
73
+ };
74
+ return {
75
+ update({ msg, elapsedMs }) {
76
+ currentMsg = msg || currentMsg;
77
+ if (!interval) {
78
+ if (typeof elapsedMs === "number") {
79
+ const line = `[plaud] ${msg} (${formatElapsed(elapsedMs)})`;
80
+ if (line !== lastMsg) {
81
+ lastMsg = line;
82
+ const pad = lastLineLen > line.length ? " ".repeat(lastLineLen - line.length) : "";
83
+ lastLineLen = line.length;
84
+ process.stderr.write(`\r${line}${pad}`);
85
+ }
86
+ return;
87
+ }
88
+ render();
89
+ }
90
+ },
91
+ start(msg) {
92
+ currentMsg = msg || currentMsg;
93
+ if (interval)
94
+ return;
95
+ render();
96
+ interval = setInterval(render, 120);
97
+ },
98
+ done(finalMsg) {
99
+ if (interval)
100
+ clearInterval(interval);
101
+ interval = null;
102
+ if (finalMsg)
103
+ process.stderr.write(`\r[plaud] ${finalMsg}\n`);
104
+ else
105
+ process.stderr.write("\n");
106
+ },
107
+ };
108
+ }
109
+ const program = new Command();
110
+ program.name("plaud").description("Export Plaud recordings and transcripts").version("0.1.0");
111
+ program
112
+ .command("auth")
113
+ .description("Manage Plaud auth token")
114
+ .addCommand(new Command("show")
115
+ .description("Show token source (redacted)")
116
+ .option("--json", "Print JSON")
117
+ .action(async (opts) => {
118
+ const cfg = await readConfig();
119
+ const env = process.env.PLAUD_AUTH_TOKEN;
120
+ const token = env || cfg?.authToken || "";
121
+ if (!token) {
122
+ if (opts.json) {
123
+ printJson(fail(makeError(null, { code: "AUTH_MISSING", message: "No token set" }), { hasToken: false }));
124
+ }
125
+ else {
126
+ // eslint-disable-next-line no-console
127
+ console.log("No token set. Use `plaud auth login`, `plaud auth set`, or export `PLAUD_AUTH_TOKEN`.");
128
+ }
129
+ process.exitCode = 2;
130
+ return;
131
+ }
132
+ const source = env ? "env:PLAUD_AUTH_TOKEN" : "config";
133
+ const tokenRedacted = redactToken(token);
134
+ if (opts.json) {
135
+ printJson(ok({ hasToken: true, source, tokenRedacted }));
136
+ }
137
+ else {
138
+ // eslint-disable-next-line no-console
139
+ console.log(`${source}: ${tokenRedacted}`);
140
+ }
141
+ }))
142
+ .addCommand(new Command("status")
143
+ .description("Check whether the current token is set and valid")
144
+ .option("--json", "Print JSON")
145
+ .action(async (opts) => {
146
+ const env = process.env.PLAUD_AUTH_TOKEN;
147
+ const cfg = await readConfig();
148
+ const token = await resolveAuthToken();
149
+ const source = env ? "env:PLAUD_AUTH_TOKEN" : cfg?.authToken ? "config" : null;
150
+ if (!token) {
151
+ if (opts.json) {
152
+ printJson(fail(makeError(null, { code: "AUTH_MISSING", message: "No token set" }), { hasToken: false, source }));
153
+ }
154
+ else {
155
+ // eslint-disable-next-line no-console
156
+ console.log("No token set. Run `plaud auth login`.");
157
+ }
158
+ process.exitCode = 2;
159
+ return;
160
+ }
161
+ const validation = await validateToken(token);
162
+ const tokenRedacted = redactToken(token);
163
+ const meLabel = validation.ok ? pickUserLabel(validation.me) : "";
164
+ if (opts.json) {
165
+ printJson(ok({ hasToken: true, source, tokenRedacted, validation }));
166
+ }
167
+ else if (validation.ok) {
168
+ // eslint-disable-next-line no-console
169
+ console.log(`Logged in${meLabel ? ` as ${meLabel}` : ""} (${source || "unknown source"})`);
170
+ }
171
+ else {
172
+ // eslint-disable-next-line no-console
173
+ console.log(`Token present but invalid: ${validation.reason}`);
174
+ }
175
+ if (!validation.ok)
176
+ process.exitCode = 1;
177
+ }))
178
+ .addCommand(new Command("login")
179
+ .description("Open a browser, login to Plaud, and capture the auth token")
180
+ .option("--timeout-ms <n>", "Timeout waiting for login (ms)", (v) => Number(v), 180000)
181
+ .option("--url <url>", "Login URL to open", "https://app.plaud.ai")
182
+ .option("--channel <channel>", "Browser channel (chrome or msedge)", "chrome")
183
+ .option("--headless", "Run headless (not recommended for login)", false)
184
+ .option("--force", "Capture even if an existing token is valid", false)
185
+ .option("--json", "Print JSON")
186
+ .action(async (opts) => {
187
+ try {
188
+ const existing = await resolveAuthToken();
189
+ if (existing && !opts.force) {
190
+ const existingValidation = await validateToken(existing);
191
+ if (existingValidation.ok) {
192
+ const msg = "Already logged in (existing token is valid). Use --force to recapture.";
193
+ if (opts.json) {
194
+ printJson(ok({ alreadyLoggedIn: true, message: msg, tokenRedacted: redactToken(existing) }));
195
+ }
196
+ else {
197
+ // eslint-disable-next-line no-console
198
+ console.log(msg);
199
+ }
200
+ return;
201
+ }
202
+ }
203
+ const status = opts.json ? null : createStatusRenderer();
204
+ status?.start("Waiting for login");
205
+ const token = await captureTokenFromBrowser({
206
+ url: opts.url,
207
+ timeoutMs: Math.max(10_000, Number(opts.timeoutMs || 180000)),
208
+ channel: opts.channel,
209
+ headless: !!opts.headless,
210
+ onStatus: (s) => status?.update(s),
211
+ });
212
+ status?.update({ msg: "Saving token" });
213
+ const saved = await saveToken(token);
214
+ status?.update({ msg: "Validating token" });
215
+ const validation = await validateToken(saved);
216
+ status?.done(validation.ok ? "Login complete" : "Token saved (validation failed)");
217
+ if (!validation.ok)
218
+ process.exitCode = 1;
219
+ if (opts.json) {
220
+ printJson(ok({ tokenRedacted: redactToken(saved), validation }));
221
+ return;
222
+ }
223
+ // Keep stdout quiet; print user guidance to stderr.
224
+ // eslint-disable-next-line no-console
225
+ console.error(`Saved Plaud token (${redactToken(saved)}) to ~/.config/plaud/config.json (mode 0600).`);
226
+ // eslint-disable-next-line no-console
227
+ console.error("Next: `plaud auth status` or `plaud doctor`.");
228
+ }
229
+ catch (err) {
230
+ process.exitCode = 1;
231
+ if (opts.json) {
232
+ printJson(fail(makeError(err)));
233
+ return;
234
+ }
235
+ throw err;
236
+ }
237
+ }))
238
+ .addCommand(new Command("set")
239
+ .description("Store token in ~/.config/plaud/config.json")
240
+ .option("--stdin", "Read token from stdin")
241
+ .option("--json", "Print JSON")
242
+ .action(async (opts) => {
243
+ if (!opts.stdin) {
244
+ const msg = "Provide the token via stdin: `plaud auth set --stdin` (then paste token and Ctrl-D).";
245
+ if (opts.json) {
246
+ printJson(fail(makeError(null, { code: "VALIDATION", message: msg })));
247
+ }
248
+ else {
249
+ // eslint-disable-next-line no-console
250
+ console.error(msg);
251
+ }
252
+ process.exitCode = 2;
253
+ return;
254
+ }
255
+ if (process.stdin.isTTY && !opts.json) {
256
+ // eslint-disable-next-line no-console
257
+ console.error("Paste Plaud token, then press Ctrl-D to submit.");
258
+ }
259
+ const token = (await readStdin()).trim();
260
+ if (!token || !token.replace(/^bearer\s+/i, "").startsWith("eyJ")) {
261
+ const msg = "Invalid token. Provide the JWT starting with `eyJ`.";
262
+ if (opts.json) {
263
+ printJson(fail(makeError(null, { code: "VALIDATION", message: msg })));
264
+ }
265
+ else {
266
+ // eslint-disable-next-line no-console
267
+ console.error(msg);
268
+ }
269
+ process.exitCode = 2;
270
+ return;
271
+ }
272
+ const saved = await saveToken(token);
273
+ if (opts.json) {
274
+ printJson(ok({ saved: true, tokenRedacted: redactToken(saved) }));
275
+ }
276
+ else {
277
+ // eslint-disable-next-line no-console
278
+ console.error(`Saved token: ${redactToken(saved)}`);
279
+ }
280
+ }))
281
+ .addCommand(new Command("import-har")
282
+ .description("Extract a bearer token from a Plaud HAR file and store it")
283
+ .argument("<path>", "Path to HAR file (may include Authorization headers)")
284
+ .option("--json", "Print JSON")
285
+ .action(async (harPath, opts) => {
286
+ try {
287
+ const token = await importTokenFromHar(harPath);
288
+ await saveToken(token);
289
+ if (opts.json) {
290
+ printJson(ok({ imported: true, tokenRedacted: redactToken(token) }));
291
+ }
292
+ else {
293
+ // eslint-disable-next-line no-console
294
+ console.error(`Imported token: ${redactToken(token)}`);
295
+ }
296
+ }
297
+ catch (err) {
298
+ const msg = err?.message || String(err);
299
+ const likelyUserIssue = msg.includes("No bearer token") || msg.includes("Invalid HAR") || msg.includes("missing log.entries");
300
+ process.exitCode = likelyUserIssue ? 2 : 1;
301
+ if (opts.json) {
302
+ printJson(fail(makeError(err)));
303
+ return;
304
+ }
305
+ throw err;
306
+ }
307
+ }))
308
+ .addCommand(new Command("clear")
309
+ .description("Remove stored token")
310
+ .option("--json", "Print JSON")
311
+ .action(async (opts) => {
312
+ await clearConfig();
313
+ if (opts.json) {
314
+ printJson(ok({ cleared: true }));
315
+ }
316
+ else {
317
+ // eslint-disable-next-line no-console
318
+ console.log("Cleared stored token.");
319
+ }
320
+ }));
321
+ const recordingsCmd = program.command("recordings").description("Manage Plaud recordings");
322
+ recordingsCmd
323
+ .command("list")
324
+ .description("List recordings (count-only by default)")
325
+ .option("--include-trash", "Include trashed recordings", false)
326
+ .option("--max <n>", "Max recordings to fetch", (v) => Number(v), 99999)
327
+ .option("--json", "Print JSON")
328
+ .action(async (opts) => {
329
+ const { listRecordings } = await import("./plaud-api.js");
330
+ const token = await resolveAuthToken();
331
+ if (!token) {
332
+ if (opts.json) {
333
+ printJson(fail(makeError(null, { code: "AUTH_MISSING", message: "No auth token. Run `plaud auth login`." })));
334
+ }
335
+ else {
336
+ // eslint-disable-next-line no-console
337
+ console.error("No auth token. Use `plaud auth login`, `plaud auth set`, or export `PLAUD_AUTH_TOKEN`.");
338
+ }
339
+ process.exitCode = 2;
340
+ return;
341
+ }
342
+ try {
343
+ const max = Number.isFinite(opts.max) ? opts.max : 99999;
344
+ const recordings = await listRecordings({
345
+ token,
346
+ includeTrash: !!opts.includeTrash,
347
+ max,
348
+ });
349
+ if (opts.json) {
350
+ printJson(ok({ count: recordings.length, recordings }, { includeTrash: !!opts.includeTrash, max }));
351
+ return;
352
+ }
353
+ // eslint-disable-next-line no-console
354
+ console.log(`${recordings.length} recordings`);
355
+ }
356
+ catch (err) {
357
+ process.exitCode = 1;
358
+ if (opts.json) {
359
+ printJson(fail(makeError(err)));
360
+ return;
361
+ }
362
+ throw err;
363
+ }
364
+ });
365
+ recordingsCmd
366
+ .command("get")
367
+ .description("Get recording details")
368
+ .argument("<id>", "Recording id")
369
+ .option("--json", "Print JSON")
370
+ .action(async (id, opts) => {
371
+ const { getRecordingDetailsBatch } = await import("./plaud-api.js");
372
+ const token = await resolveAuthToken();
373
+ if (!token) {
374
+ if (opts.json) {
375
+ printJson(fail(makeError(null, { code: "AUTH_MISSING", message: "No auth token. Run `plaud auth login`." })));
376
+ }
377
+ else {
378
+ // eslint-disable-next-line no-console
379
+ console.error("No auth token. Use `plaud auth login`, `plaud auth set`, or export `PLAUD_AUTH_TOKEN`.");
380
+ }
381
+ process.exitCode = 2;
382
+ return;
383
+ }
384
+ try {
385
+ const list = await getRecordingDetailsBatch({ token, ids: [id] });
386
+ const details = Array.isArray(list) ? list.find((d) => String(d?.id || "") === String(id)) : null;
387
+ if (!details) {
388
+ process.exitCode = 1;
389
+ if (opts.json) {
390
+ printJson(fail(makeError(null, { code: "NOT_FOUND", message: "Recording not found" })));
391
+ return;
392
+ }
393
+ // eslint-disable-next-line no-console
394
+ console.error("Recording not found (or details unavailable).");
395
+ return;
396
+ }
397
+ if (opts.json) {
398
+ printJson(ok({ recording: details }));
399
+ return;
400
+ }
401
+ // eslint-disable-next-line no-console
402
+ console.log(`${details.id} ${details.filename || ""}`.trim());
403
+ }
404
+ catch (err) {
405
+ process.exitCode = 1;
406
+ if (opts.json) {
407
+ printJson(fail(makeError(err)));
408
+ return;
409
+ }
410
+ throw err;
411
+ }
412
+ });
413
+ recordingsCmd
414
+ .command("download")
415
+ .description("Download a single recording's transcript/summary/json/audio")
416
+ .argument("<id>", "Recording id")
417
+ .option("--out <dir>", "Output directory", defaultDownloadDir())
418
+ .option("--what <list>", "Comma-separated: transcript,summary,json,audio", "transcript,summary,json")
419
+ .option("--audio-format <fmt>", "opus or original", "opus")
420
+ .action(async (id, opts) => {
421
+ const token = await resolveAuthToken();
422
+ if (!token) {
423
+ printJson(fail(makeError(null, { code: "AUTH_MISSING", message: "No auth token. Run `plaud auth login`." })));
424
+ process.exitCode = 2;
425
+ return;
426
+ }
427
+ try {
428
+ const outDir = path.resolve(String(opts.out || defaultDownloadDir()));
429
+ const result = await downloadRecording({
430
+ token,
431
+ id,
432
+ outDir,
433
+ what: opts.what,
434
+ audioFormat: String(opts.audioFormat || "opus").toLowerCase(),
435
+ });
436
+ printJson(ok(result));
437
+ }
438
+ catch (err) {
439
+ process.exitCode = 1;
440
+ printJson(fail(makeError(err)));
441
+ }
442
+ });
443
+ recordingsCmd
444
+ .command("export")
445
+ .description("Export many recordings to a directory or zip (bulk)")
446
+ .option("--include-trash", "Include trashed recordings", false)
447
+ .option("--out <dir>", "Output directory (when not zipping)")
448
+ .option("--zip [path]", "Write a single zip (defaults to ./plaud-transcripts-YYYY-MM-DD.zip)")
449
+ .option("--formats <list>", "Comma-separated: txt,json,md", "txt,json,md")
450
+ .option("--batch-size <n>", "IDs per details request (auto-fallback to 1 on failure)", (v) => Number(v), 10)
451
+ .option("--delay-ms <n>", "Delay between batches (ms)", (v) => Number(v), 300)
452
+ .option("--max <n>", "Max recordings to export", (v) => Number(v), Infinity)
453
+ .option("--since <iso>", "Only export recordings on/after this date (ISO string or YYYY-MM-DD)")
454
+ .option("--until <iso>", "Only export recordings on/before this date (ISO string or YYYY-MM-DD)")
455
+ .option("--resume", "Skip writing files that already exist (dir mode)", false)
456
+ .action(async (opts) => {
457
+ const token = await resolveAuthToken();
458
+ if (!token) {
459
+ printJson(fail(makeError(null, { code: "AUTH_MISSING", message: "No auth token. Run `plaud auth login`." })));
460
+ process.exitCode = 2;
461
+ return;
462
+ }
463
+ try {
464
+ const formatsList = new Set(splitCsv(opts.formats).map((f) => f.toLowerCase()));
465
+ const formats = {
466
+ txt: formatsList.has("txt"),
467
+ json: formatsList.has("json"),
468
+ md: formatsList.has("md") || formatsList.has("markdown"),
469
+ };
470
+ const zipPath = typeof opts.zip === "string" ? path.resolve(opts.zip) : opts.zip ? defaultZipPath() : null;
471
+ const outDir = path.resolve(opts.out || defaultOutDir());
472
+ if (!zipPath) {
473
+ await fs.mkdir(outDir, { recursive: true });
474
+ }
475
+ let lastRendered = 0;
476
+ const summary = await exportRecordings({
477
+ token,
478
+ outDir,
479
+ zipPath,
480
+ includeTrash: !!opts.includeTrash,
481
+ formats,
482
+ batchSize: Math.max(1, Number(opts.batchSize || 10)),
483
+ delayMs: Math.max(0, Number(opts.delayMs || 300)),
484
+ max: Number.isFinite(opts.max) ? opts.max : Infinity,
485
+ since: opts.since || null,
486
+ until: opts.until || null,
487
+ resume: !!opts.resume,
488
+ onProgress: (p) => {
489
+ const now = Date.now();
490
+ if (now - lastRendered < 200)
491
+ return;
492
+ lastRendered = now;
493
+ // eslint-disable-next-line no-console
494
+ process.stderr.write(`\rExporting ${p.current}/${p.total}...`);
495
+ },
496
+ });
497
+ // eslint-disable-next-line no-console
498
+ process.stderr.write("\n");
499
+ printJson(ok(summary));
500
+ }
501
+ catch (err) {
502
+ process.exitCode = 1;
503
+ printJson(fail(makeError(err)));
504
+ }
505
+ });
506
+ program
507
+ .command("whoami")
508
+ .description("Fetch the current Plaud user profile")
509
+ .option("--json", "Print JSON")
510
+ .option("--raw", "Print raw /user/me response (may include signed URLs)", false)
511
+ .action(async (opts) => {
512
+ const { getMe } = await import("./plaud-api.js");
513
+ const token = await resolveAuthToken();
514
+ if (!token) {
515
+ const out = fail(makeError(null, { code: "AUTH_MISSING", message: "No auth token. Run `plaud auth login`." }));
516
+ // eslint-disable-next-line no-console
517
+ console.log(opts.json ? JSON.stringify(out, null, 2) : out.error.message);
518
+ process.exitCode = 2;
519
+ return;
520
+ }
521
+ let me;
522
+ if (opts.raw) {
523
+ me = await getMe({ token });
524
+ }
525
+ else {
526
+ const validation = await validateToken(token);
527
+ if (!validation.ok) {
528
+ const out = fail(makeError(null, { code: "AUTH_INVALID", message: validation.reason || "Token invalid" }));
529
+ // eslint-disable-next-line no-console
530
+ console.log(opts.json ? JSON.stringify(out, null, 2) : out.error.message);
531
+ process.exitCode = 1;
532
+ return;
533
+ }
534
+ me = validation.me;
535
+ }
536
+ if (opts.json) {
537
+ printJson(ok({ me, raw: !!opts.raw }));
538
+ return;
539
+ }
540
+ const label = pickUserLabel(me);
541
+ // eslint-disable-next-line no-console
542
+ console.log(label || "OK");
543
+ });
544
+ program
545
+ .command("doctor")
546
+ .description("Run basic checks for auth and API access")
547
+ .option("--json", "Print JSON")
548
+ .action(async (opts) => {
549
+ const checks = [];
550
+ const token = await resolveAuthToken();
551
+ checks.push({ name: "token.present", ok: !!token });
552
+ if (!token) {
553
+ const out = fail(makeError(null, { code: "AUTH_MISSING", message: "No auth token. Run `plaud auth login`." }), { checks });
554
+ // eslint-disable-next-line no-console
555
+ console.log(opts.json ? JSON.stringify(out, null, 2) : out.error.message);
556
+ process.exitCode = 2;
557
+ return;
558
+ }
559
+ const validation = await validateToken(token);
560
+ checks.push({ name: "token.valid", ok: validation.ok, detail: validation.ok ? null : validation.reason });
561
+ try {
562
+ const { listRecordings } = await import("./plaud-api.js");
563
+ await listRecordings({ token, includeTrash: false, max: 1, pageSize: 1 });
564
+ checks.push({ name: "api.listRecordings", ok: true });
565
+ }
566
+ catch (error) {
567
+ checks.push({ name: "api.listRecordings", ok: false, detail: error?.message || String(error) });
568
+ }
569
+ const allOk = checks.every((c) => c.ok);
570
+ const out = allOk
571
+ ? ok({ checks })
572
+ : fail(makeError(null, { code: "CHECK_FAILED", message: "One or more checks failed" }), { checks });
573
+ // eslint-disable-next-line no-console
574
+ console.log(opts.json ? JSON.stringify(out, null, 2) : allOk ? "OK" : "Some checks failed");
575
+ if (!allOk)
576
+ process.exitCode = 1;
577
+ });
578
+ program.parseAsync(process.argv).catch((err) => {
579
+ // eslint-disable-next-line no-console
580
+ console.error(err?.message || err);
581
+ process.exitCode = 1;
582
+ });
583
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/config.js ADDED
@@ -0,0 +1,52 @@
1
+ import fs from "node:fs/promises";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ function getConfigDir() {
5
+ const xdg = process.env.XDG_CONFIG_HOME;
6
+ return xdg && xdg.trim() ? xdg : path.join(os.homedir(), ".config");
7
+ }
8
+ function getConfigPath() {
9
+ return path.join(getConfigDir(), "plaud", "config.json");
10
+ }
11
+ export async function readConfig() {
12
+ const configPath = getConfigPath();
13
+ try {
14
+ const raw = await fs.readFile(configPath, "utf8");
15
+ const parsed = JSON.parse(raw);
16
+ return typeof parsed === "object" && parsed ? parsed : {};
17
+ }
18
+ catch {
19
+ return {};
20
+ }
21
+ }
22
+ export async function writeConfig(config) {
23
+ const configPath = getConfigPath();
24
+ await fs.mkdir(path.dirname(configPath), { recursive: true });
25
+ const json = JSON.stringify(config, null, 2);
26
+ await fs.writeFile(configPath, json, { mode: 0o600 });
27
+ // Ensure correct perms even if the file already existed with looser permissions.
28
+ try {
29
+ await fs.chmod(configPath, 0o600);
30
+ }
31
+ catch {
32
+ // ignore
33
+ }
34
+ }
35
+ export async function clearConfig() {
36
+ const configPath = getConfigPath();
37
+ try {
38
+ await fs.unlink(configPath);
39
+ }
40
+ catch {
41
+ // ignore
42
+ }
43
+ }
44
+ export function redactToken(token) {
45
+ if (!token)
46
+ return "";
47
+ const clean = String(token).trim().replace(/^bearer\s+/i, "");
48
+ if (clean.length <= 12)
49
+ return `${clean.slice(0, 4)}…`;
50
+ return `${clean.slice(0, 6)}…${clean.slice(-4)}`;
51
+ }
52
+ //# sourceMappingURL=config.js.map