litmus-cli 1.3.4 → 1.3.7

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.
Files changed (39) hide show
  1. package/README.md +21 -0
  2. package/dist/commands/init.d.ts.map +1 -1
  3. package/dist/commands/init.js +140 -43
  4. package/dist/commands/init.js.map +1 -1
  5. package/dist/commands/status.d.ts.map +1 -1
  6. package/dist/commands/status.js +97 -17
  7. package/dist/commands/status.js.map +1 -1
  8. package/dist/commands/submit.d.ts.map +1 -1
  9. package/dist/commands/submit.js +30 -4
  10. package/dist/commands/submit.js.map +1 -1
  11. package/dist/lib/ai-tracking.d.ts +50 -0
  12. package/dist/lib/ai-tracking.d.ts.map +1 -0
  13. package/dist/lib/ai-tracking.js +345 -0
  14. package/dist/lib/ai-tracking.js.map +1 -0
  15. package/dist/lib/api.d.ts.map +1 -1
  16. package/dist/lib/api.js +143 -30
  17. package/dist/lib/api.js.map +1 -1
  18. package/dist/lib/config.d.ts.map +1 -1
  19. package/dist/lib/config.js +14 -5
  20. package/dist/lib/config.js.map +1 -1
  21. package/dist/lib/errors.js +3 -3
  22. package/dist/lib/errors.js.map +1 -1
  23. package/dist/lib/extract.d.ts.map +1 -1
  24. package/dist/lib/extract.js +22 -3
  25. package/dist/lib/extract.js.map +1 -1
  26. package/dist/lib/format-time.d.ts +28 -0
  27. package/dist/lib/format-time.d.ts.map +1 -0
  28. package/dist/lib/format-time.js +68 -0
  29. package/dist/lib/format-time.js.map +1 -0
  30. package/dist/lib/hook-logger.cjs +50 -16
  31. package/dist/lib/tracker.d.ts.map +1 -1
  32. package/dist/lib/tracker.js +47 -16
  33. package/dist/lib/tracker.js.map +1 -1
  34. package/dist/lib/watcher.js +133 -35
  35. package/dist/lib/watcher.js.map +1 -1
  36. package/dist/lib/zip.d.ts.map +1 -1
  37. package/dist/lib/zip.js +45 -9
  38. package/dist/lib/zip.js.map +1 -1
  39. package/package.json +3 -2
package/dist/lib/api.js CHANGED
@@ -45,9 +45,85 @@ export class ServerError extends Error {
45
45
  }
46
46
  }
47
47
  const TIMEOUT_MS = 30000; // 30s for metadata/download requests
48
+ const RETRY_ATTEMPTS = 3;
49
+ const RETRY_BASE_MS = 250;
50
+ const RETRY_MAX_MS = 1500;
48
51
  // ENG-666: X-Litmus-CLI-Version is sent on every CLI request so the backend can
49
52
  // attribute residual `?token=` query-param usage to specific CLI versions in
50
53
  // the field. Sourced from package.json via ./version so it can't drift.
54
+ /**
55
+ * Run a request function with retries on transient failures. Used for SAFE
56
+ * (idempotent GET) endpoints only: `fetchInitMetadata`, `downloadZip`,
57
+ * `fetchSubmitStatus`. `submitZip` is NOT retried because the multipart
58
+ * stream is consumed on the first attempt and would need re-construction.
59
+ *
60
+ * Retries on:
61
+ * - HTTP 5xx (transient backend)
62
+ * - Fetch errors with `cause.code` in TRANSIENT_CODES (DNS, RST, timeout)
63
+ * - `AbortError` from AbortSignal.timeout
64
+ *
65
+ * Does NOT retry on:
66
+ * - 4xx (candidate-fault, fix the request)
67
+ * - non-network exceptions (bug — re-throw)
68
+ */
69
+ const TRANSIENT_CODES = new Set([
70
+ "ECONNRESET", "ETIMEDOUT", "EAI_AGAIN", "EHOSTUNREACH",
71
+ "ECONNREFUSED", "ENETUNREACH", "ENOTFOUND",
72
+ ]);
73
+ function isTransientError(err) {
74
+ if (!(err instanceof Error))
75
+ return false;
76
+ if (err.name === "AbortError" || err.name === "TimeoutError")
77
+ return true;
78
+ const cause = err.cause;
79
+ const code = cause && typeof cause === "object" ? cause.code : undefined;
80
+ return typeof code === "string" && TRANSIENT_CODES.has(code);
81
+ }
82
+ function backoffMs(attempt) {
83
+ // Exponential with jitter, capped: 250ms → 500-1000ms → 1000-1500ms
84
+ const base = Math.min(RETRY_BASE_MS * 2 ** attempt, RETRY_MAX_MS);
85
+ return Math.floor(base / 2 + Math.random() * base / 2);
86
+ }
87
+ function sleep(ms) {
88
+ return new Promise((r) => setTimeout(r, ms));
89
+ }
90
+ async function withRetries(fn) {
91
+ let lastErr;
92
+ for (let attempt = 0; attempt < RETRY_ATTEMPTS; attempt++) {
93
+ try {
94
+ const result = await fn();
95
+ // Retry 5xx only — let 4xx bubble up to the caller's error mapping so
96
+ // the candidate sees the specific message (bad token, deadline, etc.).
97
+ if (result.res.status >= 500 && attempt < RETRY_ATTEMPTS - 1) {
98
+ await sleep(backoffMs(attempt));
99
+ continue;
100
+ }
101
+ return result;
102
+ }
103
+ catch (err) {
104
+ lastErr = err;
105
+ if (isTransientError(err) && attempt < RETRY_ATTEMPTS - 1) {
106
+ await sleep(backoffMs(attempt));
107
+ continue;
108
+ }
109
+ throw err;
110
+ }
111
+ }
112
+ // Loop exited via the 5xx-without-retries-left path — re-run once more
113
+ // and return whatever we get (caller's error path takes it from there).
114
+ if (lastErr)
115
+ throw lastErr;
116
+ return fn();
117
+ }
118
+ async function fetchWithRetries(url, init) {
119
+ return withRetries(async () => {
120
+ const start = Date.now();
121
+ const res = await fetch(url, init);
122
+ const durationMs = Date.now() - start;
123
+ const rawBody = await res.text();
124
+ return { res, rawBody, durationMs };
125
+ });
126
+ }
51
127
  /**
52
128
  * Pull a stable error code out of a JSON error body. Handles both shapes:
53
129
  * FastAPI (`{detail: {error: "..."}}`) and the Next.js routes
@@ -76,13 +152,10 @@ function authHeaders(token) {
76
152
  */
77
153
  export async function fetchInitMetadata(apiBase, token) {
78
154
  const url = `${apiBase}/api/cli/init`;
79
- const start = Date.now();
80
- const res = await fetch(url, {
155
+ const { res, rawBody, durationMs } = await fetchWithRetries(url, {
81
156
  headers: authHeaders(token),
82
157
  signal: AbortSignal.timeout(TIMEOUT_MS),
83
158
  });
84
- const durationMs = Date.now() - start;
85
- const rawBody = await res.text();
86
159
  let body = {};
87
160
  try {
88
161
  body = JSON.parse(rawBody);
@@ -116,28 +189,56 @@ export async function fetchInitMetadata(apiBase, token) {
116
189
  */
117
190
  export async function downloadZip(apiBase, token) {
118
191
  const url = `${apiBase}/api/cli/download`;
119
- const start = Date.now();
120
- const res = await fetch(url, {
121
- headers: authHeaders(token),
122
- signal: AbortSignal.timeout(TIMEOUT_MS),
123
- });
124
- const durationMs = Date.now() - start;
125
- if (!res.ok) {
126
- const rawBody = await res.text();
127
- let body = {};
192
+ // Open-ended retry loop here rather than fetchWithRetries — that helper
193
+ // consumes the body via .text() so it can decide whether to retry, but
194
+ // the caller of downloadZip streams `res.body` directly, so we keep the
195
+ // response intact and just retry the connect-and-headers step.
196
+ let lastErr;
197
+ for (let attempt = 0; attempt < RETRY_ATTEMPTS; attempt++) {
198
+ const start = Date.now();
128
199
  try {
129
- body = JSON.parse(rawBody);
200
+ const res = await fetch(url, {
201
+ headers: authHeaders(token),
202
+ signal: AbortSignal.timeout(TIMEOUT_MS),
203
+ });
204
+ const durationMs = Date.now() - start;
205
+ if (res.ok)
206
+ return res;
207
+ // 5xx → retry (drain the body first so the connection releases cleanly).
208
+ if (res.status >= 500 && attempt < RETRY_ATTEMPTS - 1) {
209
+ try {
210
+ await res.text();
211
+ }
212
+ catch { /* best effort */ }
213
+ await sleep(backoffMs(attempt));
214
+ continue;
215
+ }
216
+ const rawBody = await res.text();
217
+ let body = {};
218
+ try {
219
+ body = JSON.parse(rawBody);
220
+ }
221
+ catch { /* not JSON */ }
222
+ const message = body.message || body.error || `Server returned ${res.status}`;
223
+ throw new ServerError({
224
+ message, statusCode: res.status, responseBody: rawBody, url,
225
+ responseHeaders: Object.fromEntries(res.headers.entries()),
226
+ durationMs,
227
+ errorCode: extractErrorCode(body),
228
+ });
229
+ }
230
+ catch (err) {
231
+ lastErr = err;
232
+ if (isTransientError(err) && attempt < RETRY_ATTEMPTS - 1) {
233
+ await sleep(backoffMs(attempt));
234
+ continue;
235
+ }
236
+ throw err;
130
237
  }
131
- catch { /* not JSON */ }
132
- const message = body.message || body.error || `Server returned ${res.status}`;
133
- throw new ServerError({
134
- message, statusCode: res.status, responseBody: rawBody, url,
135
- responseHeaders: Object.fromEntries(res.headers.entries()),
136
- durationMs,
137
- errorCode: extractErrorCode(body),
138
- });
139
238
  }
140
- return res;
239
+ // Loop exited via the 5xx-without-retries-left path on the final iteration —
240
+ // surface the most recent error.
241
+ throw lastErr ?? new Error("downloadZip retry budget exhausted");
141
242
  }
142
243
  /**
143
244
  * Pre-submit status check. Returns whether the candidate has uploaded
@@ -145,13 +246,10 @@ export async function downloadZip(apiBase, token) {
145
246
  */
146
247
  export async function fetchSubmitStatus(backendUrl, token) {
147
248
  const url = `${backendUrl}/cli/status`;
148
- const start = Date.now();
149
- const res = await fetch(url, {
249
+ const { res, rawBody, durationMs } = await fetchWithRetries(url, {
150
250
  headers: authHeaders(token),
151
251
  signal: AbortSignal.timeout(TIMEOUT_MS),
152
252
  });
153
- const durationMs = Date.now() - start;
154
- const rawBody = await res.text();
155
253
  let body = {};
156
254
  try {
157
255
  body = JSON.parse(rawBody);
@@ -166,7 +264,18 @@ export async function fetchSubmitStatus(backendUrl, token) {
166
264
  errorCode: extractErrorCode(body),
167
265
  });
168
266
  }
169
- return SubmitStatusSchema.parse(body);
267
+ try {
268
+ return SubmitStatusSchema.parse(body);
269
+ }
270
+ catch (err) {
271
+ const issues = err.issues.map(i => `${i.path.join(".")}: ${i.message}`).join(", ");
272
+ throw new ServerError({
273
+ message: "Something went wrong checking submission status. Please try again, or contact the company for help.",
274
+ statusCode: res.status, responseBody: `${rawBody}\n\nValidation: ${issues}`, url,
275
+ responseHeaders: Object.fromEntries(res.headers.entries()),
276
+ durationMs,
277
+ });
278
+ }
170
279
  }
171
280
  /**
172
281
  * Upload a ZIP file for submission.
@@ -195,9 +304,13 @@ export async function submitZip(backendUrl, token, zipPath, fileName, onProgress
195
304
  },
196
305
  timeout: 300000, // 5 min for upload
197
306
  }, (res) => {
198
- let data = "";
199
- res.on("data", (chunk) => { data += chunk.toString(); });
307
+ // Collect Buffer chunks and decode once at end. `chunk.toString()` per
308
+ // chunk corrupts multi-byte UTF-8 characters that span TCP boundaries —
309
+ // latent until the backend returns a non-ASCII byte in an error body.
310
+ const chunks = [];
311
+ res.on("data", (chunk) => { chunks.push(chunk); });
200
312
  res.on("end", () => {
313
+ const data = Buffer.concat(chunks).toString("utf8");
201
314
  const durationMs = Date.now() - start;
202
315
  const resHeaders = {};
203
316
  for (const [k, v] of Object.entries(res.headers)) {
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;IACtB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,WAAW,GAAG,WAAW,CAAC,GAAG,MAAM,GAAG,IAAI,CAStH;AAKD,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAKf;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAY/C;AAED;;;GAGG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAuB/D"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;IACtB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,WAAW,GAAG,WAAW,CAAC,GAAG,MAAM,GAAG,IAAI,CAStH;AAKD,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAUf;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAe/C;AAED;;;GAGG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAwB/D"}
@@ -1,4 +1,4 @@
1
- import { readFile, writeFile, mkdir } from "fs/promises";
1
+ import { readFile, writeFile, mkdir, rename } from "fs/promises";
2
2
  import { existsSync } from "fs";
3
3
  import path from "path";
4
4
  /**
@@ -20,7 +20,12 @@ export async function writeConfig(projectRoot, config) {
20
20
  const configDir = path.join(projectRoot, CONFIG_DIR);
21
21
  await mkdir(configDir, { recursive: true });
22
22
  const configPath = path.join(configDir, CONFIG_FILE);
23
- await writeFile(configPath, JSON.stringify(config, null, 2), "utf8");
23
+ // Atomic write: tmp + rename. A naive overwrite that's interrupted (SIGKILL
24
+ // mid-write, machine sleep, OOM) leaves the candidate with a truncated
25
+ // config.json and the only recovery is to `rm -rf .litmus && litmus init`.
26
+ const tmpPath = `${configPath}.litmus-tmp-${process.pid}-${Date.now()}`;
27
+ await writeFile(tmpPath, JSON.stringify(config, null, 2), "utf8");
28
+ await rename(tmpPath, configPath);
24
29
  }
25
30
  /**
26
31
  * Walk up from cwd to find the directory containing .litmus/config.json.
@@ -28,7 +33,10 @@ export async function writeConfig(projectRoot, config) {
28
33
  */
29
34
  export function findProjectRoot() {
30
35
  let dir = process.cwd();
31
- while (true) {
36
+ // Hard cap on walk depth: defends against pathological symlinked dir
37
+ // structures that would otherwise loop. 32 levels is way more than any
38
+ // legitimate candidate filesystem layout.
39
+ for (let i = 0; i < 32; i++) {
32
40
  const configPath = path.join(dir, CONFIG_DIR, CONFIG_FILE);
33
41
  if (existsSync(configPath)) {
34
42
  return dir;
@@ -46,8 +54,9 @@ export function findProjectRoot() {
46
54
  */
47
55
  export async function readConfig() {
48
56
  let dir = process.cwd();
49
- // Walk up the directory tree looking for .litmus/config.json
50
- while (true) {
57
+ // Walk up the directory tree looking for .litmus/config.json. Capped at
58
+ // 32 levels — same defense as findProjectRoot against symlink cycles.
59
+ for (let i = 0; i < 32; i++) {
51
60
  const configPath = path.join(dir, CONFIG_DIR, CONFIG_FILE);
52
61
  if (existsSync(configPath)) {
53
62
  const raw = await readFile(configPath, "utf8");
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -67,7 +67,7 @@ export function fatal(message, hint, opts) {
67
67
  // Backward compat: opts can be a plain string (internalDetail)
68
68
  const { internalDetail, severity = "error" } = typeof opts === "string" ? { internalDetail: opts, severity: "error" } : (opts ?? {});
69
69
  console.error();
70
- console.error(chalk.red("Error: ") + message);
70
+ console.error(chalk.red("Error: ") + message);
71
71
  if (hint) {
72
72
  console.error(chalk.dim(" Hint: ") + hint);
73
73
  }
@@ -88,13 +88,13 @@ export function fatal(message, hint, opts) {
88
88
  * Print a warning (non-fatal).
89
89
  */
90
90
  export function warn(message) {
91
- console.warn(chalk.yellow("Warning: ") + message);
91
+ console.warn(chalk.yellow("Warning: ") + message);
92
92
  }
93
93
  /**
94
94
  * Print a success message.
95
95
  */
96
96
  export function success(message) {
97
- console.log(chalk.green("✓ ") + message);
97
+ console.log(chalk.green(message));
98
98
  }
99
99
  /**
100
100
  * Print a plain info line.
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/lib/extract.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAqBf"}
1
+ {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/lib/extract.ts"],"names":[],"mappings":"AAYA;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAuCf"}
@@ -3,6 +3,11 @@ import { mkdir } from "fs/promises";
3
3
  import path from "path";
4
4
  import { pipeline } from "stream/promises";
5
5
  import unzipper from "unzipper";
6
+ // Defensive caps on a possibly-misconfigured assessment archive. Upstream is
7
+ // litmus-controlled today, but a zero-cost guard against accidentally serving
8
+ // a huge archive that fills the candidate's disk costs nothing.
9
+ const MAX_TOTAL_BYTES = 500 * 1024 * 1024; // 500 MB total extracted
10
+ const MAX_FILE_COUNT = 100000;
6
11
  /**
7
12
  * Extract a ZIP file from disk to a target directory.
8
13
  * Iterates entries individually to validate paths against traversal attacks.
@@ -11,6 +16,10 @@ export async function extractZip(zipPath, targetDir) {
11
16
  const resolvedTarget = path.resolve(targetDir) + path.sep;
12
17
  await mkdir(resolvedTarget, { recursive: true });
13
18
  const directory = await unzipper.Open.file(zipPath);
19
+ if (directory.files.length > MAX_FILE_COUNT) {
20
+ throw new Error(`Assessment archive contains ${directory.files.length} entries (max ${MAX_FILE_COUNT}). Refusing to extract.`);
21
+ }
22
+ let totalBytes = 0;
14
23
  for (const entry of directory.files) {
15
24
  const resolvedPath = path.resolve(resolvedTarget, entry.path);
16
25
  if (!resolvedPath.startsWith(resolvedTarget)) {
@@ -18,11 +27,21 @@ export async function extractZip(zipPath, targetDir) {
18
27
  }
19
28
  if (entry.type === "Directory") {
20
29
  await mkdir(resolvedPath, { recursive: true });
30
+ continue;
21
31
  }
22
- else {
23
- await mkdir(path.dirname(resolvedPath), { recursive: true });
24
- await pipeline(entry.stream(), createWriteStream(resolvedPath));
32
+ // unzipper's TS types only model "Directory" | "File" but the underlying
33
+ // library still emits "SymbolicLink" for zips that ship symlinks. Skip
34
+ // those — writing the target string into a regular file would be confusing.
35
+ // Litmus-authored assessments don't ship symlinks.
36
+ if (entry.type === "SymbolicLink")
37
+ continue;
38
+ const entryBytes = typeof entry.uncompressedSize === "number" ? entry.uncompressedSize : 0;
39
+ totalBytes += entryBytes;
40
+ if (totalBytes > MAX_TOTAL_BYTES) {
41
+ throw new Error(`Assessment archive exceeds size cap (${(MAX_TOTAL_BYTES / 1024 / 1024).toFixed(0)} MB). Contact the company for help.`);
25
42
  }
43
+ await mkdir(path.dirname(resolvedPath), { recursive: true });
44
+ await pipeline(entry.stream(), createWriteStream(resolvedPath));
26
45
  }
27
46
  }
28
47
  //# sourceMappingURL=extract.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/lib/extract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,IAAI,CAAA;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC1C,OAAO,QAAQ,MAAM,UAAU,CAAA;AAE/B;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,OAAe,EACf,SAAiB;IAEjB,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,CAAA;IACzD,MAAM,KAAK,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAEhD,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAEnD,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;QACpC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAC7D,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CACb,iCAAiC,KAAK,CAAC,IAAI,4BAA4B,CACxE,CAAA;QACH,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/B,MAAM,KAAK,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAChD,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAC5D,MAAM,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAA;QACjE,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/lib/extract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,IAAI,CAAA;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC1C,OAAO,QAAQ,MAAM,UAAU,CAAA;AAE/B,6EAA6E;AAC7E,8EAA8E;AAC9E,gEAAgE;AAChE,MAAM,eAAe,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAA,CAAC,yBAAyB;AACnE,MAAM,cAAc,GAAG,MAAO,CAAA;AAE9B;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,OAAe,EACf,SAAiB;IAEjB,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,CAAA;IACzD,MAAM,KAAK,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAEhD,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAEnD,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,+BAA+B,SAAS,CAAC,KAAK,CAAC,MAAM,iBAAiB,cAAc,yBAAyB,CAAC,CAAA;IAChI,CAAC;IAED,IAAI,UAAU,GAAG,CAAC,CAAA;IAClB,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;QACpC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAC7D,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CACb,iCAAiC,KAAK,CAAC,IAAI,4BAA4B,CACxE,CAAA;QACH,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/B,MAAM,KAAK,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAC9C,SAAQ;QACV,CAAC;QACD,yEAAyE;QACzE,uEAAuE;QACvE,4EAA4E;QAC5E,mDAAmD;QACnD,IAAK,KAAK,CAAC,IAAe,KAAK,cAAc;YAAE,SAAQ;QAEvD,MAAM,UAAU,GAAG,OAAO,KAAK,CAAC,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAA;QAC1F,UAAU,IAAI,UAAU,CAAA;QACxB,IAAI,UAAU,GAAG,eAAe,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CACb,wCAAwC,CAAC,eAAe,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,qCAAqC,CACxH,CAAA;QACH,CAAC;QACD,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC5D,MAAM,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAA;IACjE,CAAC;AACH,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Datetime formatting for CLI output.
3
+ *
4
+ * Two surfaces matter:
5
+ *
6
+ * - **Deadline**: a server-side cutoff. The website renders deadlines in
7
+ * Pacific Time with a "PT" label (see frontend/lib/pt-format.ts). The
8
+ * CLI should match — otherwise a candidate in IST sees "due Jun 17 at
9
+ * 5:30 AM" in their terminal and "due Jun 16 at 11:59 PM PT" on the
10
+ * website, and reasonably concludes they have 12 more hours than they
11
+ * actually do.
12
+ *
13
+ * - **Started-at / informational timestamps**: the candidate's own
14
+ * anchor in their own day. Local time is what they want, but with a
15
+ * TZ short name appended so they can disambiguate against the PT
16
+ * deadline shown right next to it.
17
+ *
18
+ * `Intl.DateTimeFormat` handles both via `timeZone: "America/Los_Angeles"`
19
+ * (PT) and `timeZoneName: "short"` (resolves to PDT/PST/IST/EDT/...). For
20
+ * the PT case we override the resolved name with the static "PT" label
21
+ * the website uses, so deadlines don't read as "PDT" half the year and
22
+ * "PST" the other half.
23
+ */
24
+ /** "Jun 16, 2026 at 11:59 PM PT" — for deadlines (matches the website). */
25
+ export declare function formatDeadlinePT(d: Date): string;
26
+ /** "Jun 16, 2026 at 10:29 AM IST" — for the candidate's own timestamps. */
27
+ export declare function formatLocalDateTime(d: Date): string;
28
+ //# sourceMappingURL=format-time.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-time.d.ts","sourceRoot":"","sources":["../../src/lib/format-time.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAIH,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAchD;AAED,2EAA2E;AAC3E,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAanD"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Datetime formatting for CLI output.
3
+ *
4
+ * Two surfaces matter:
5
+ *
6
+ * - **Deadline**: a server-side cutoff. The website renders deadlines in
7
+ * Pacific Time with a "PT" label (see frontend/lib/pt-format.ts). The
8
+ * CLI should match — otherwise a candidate in IST sees "due Jun 17 at
9
+ * 5:30 AM" in their terminal and "due Jun 16 at 11:59 PM PT" on the
10
+ * website, and reasonably concludes they have 12 more hours than they
11
+ * actually do.
12
+ *
13
+ * - **Started-at / informational timestamps**: the candidate's own
14
+ * anchor in their own day. Local time is what they want, but with a
15
+ * TZ short name appended so they can disambiguate against the PT
16
+ * deadline shown right next to it.
17
+ *
18
+ * `Intl.DateTimeFormat` handles both via `timeZone: "America/Los_Angeles"`
19
+ * (PT) and `timeZoneName: "short"` (resolves to PDT/PST/IST/EDT/...). For
20
+ * the PT case we override the resolved name with the static "PT" label
21
+ * the website uses, so deadlines don't read as "PDT" half the year and
22
+ * "PST" the other half.
23
+ */
24
+ const COMPANY_TIMEZONE = "America/Los_Angeles";
25
+ /** "Jun 16, 2026 at 11:59 PM PT" — for deadlines (matches the website). */
26
+ export function formatDeadlinePT(d) {
27
+ const datePart = d.toLocaleDateString("en-US", {
28
+ year: "numeric",
29
+ month: "short",
30
+ day: "numeric",
31
+ timeZone: COMPANY_TIMEZONE,
32
+ });
33
+ const timePart = d.toLocaleTimeString("en-US", {
34
+ hour: "numeric",
35
+ minute: "2-digit",
36
+ hour12: true,
37
+ timeZone: COMPANY_TIMEZONE,
38
+ });
39
+ return `${datePart} at ${timePart} PT`;
40
+ }
41
+ /** "Jun 16, 2026 at 10:29 AM IST" — for the candidate's own timestamps. */
42
+ export function formatLocalDateTime(d) {
43
+ const datePart = d.toLocaleDateString("en-US", {
44
+ year: "numeric",
45
+ month: "short",
46
+ day: "numeric",
47
+ });
48
+ const timePart = d.toLocaleTimeString("en-US", {
49
+ hour: "numeric",
50
+ minute: "2-digit",
51
+ hour12: true,
52
+ });
53
+ const tz = timeZoneShortName(d);
54
+ return tz ? `${datePart} at ${timePart} ${tz}` : `${datePart} at ${timePart}`;
55
+ }
56
+ function timeZoneShortName(d) {
57
+ try {
58
+ const parts = new Intl.DateTimeFormat("en-US", {
59
+ timeZoneName: "short",
60
+ hour: "numeric",
61
+ }).formatToParts(d);
62
+ return parts.find((p) => p.type === "timeZoneName")?.value ?? "";
63
+ }
64
+ catch {
65
+ return "";
66
+ }
67
+ }
68
+ //# sourceMappingURL=format-time.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-time.js","sourceRoot":"","sources":["../../src/lib/format-time.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,MAAM,gBAAgB,GAAG,qBAAqB,CAAA;AAE9C,2EAA2E;AAC3E,MAAM,UAAU,gBAAgB,CAAC,CAAO;IACtC,MAAM,QAAQ,GAAG,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE;QAC7C,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,OAAO;QACd,GAAG,EAAE,SAAS;QACd,QAAQ,EAAE,gBAAgB;KAC3B,CAAC,CAAA;IACF,MAAM,QAAQ,GAAG,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE;QAC7C,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,gBAAgB;KAC3B,CAAC,CAAA;IACF,OAAO,GAAG,QAAQ,OAAO,QAAQ,KAAK,CAAA;AACxC,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,mBAAmB,CAAC,CAAO;IACzC,MAAM,QAAQ,GAAG,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE;QAC7C,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,OAAO;QACd,GAAG,EAAE,SAAS;KACf,CAAC,CAAA;IACF,MAAM,QAAQ,GAAG,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE;QAC7C,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,IAAI;KACb,CAAC,CAAA;IACF,MAAM,EAAE,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAA;IAC/B,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,QAAQ,OAAO,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,QAAQ,OAAO,QAAQ,EAAE,CAAA;AAC/E,CAAC;AAED,SAAS,iBAAiB,CAAC,CAAO;IAChC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;YAC7C,YAAY,EAAE,OAAO;YACrB,IAAI,EAAE,SAAS;SAChB,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;QACnB,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,EAAE,KAAK,IAAI,EAAE,CAAA;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC"}