@umeshindu222/apisnap 1.2.0 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -25,6 +25,7 @@ apisnap.init(app); // ← must be AFTER your routes
25
25
 
26
26
  [![npm version](https://img.shields.io/npm/v/@umeshindu222/apisnap.svg)](https://www.npmjs.com/package/@umeshindu222/apisnap)
27
27
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
28
+ [![Socket Badge](https://badge.socket.dev/npm/package/@umeshindu222/apisnap/1.2.1)](https://socket.dev/npm/package/%40umeshindu222%2Fapisnap)
28
29
 
29
30
  ---
30
31
 
@@ -34,33 +35,36 @@ Every time you change your Express backend, manually testing all your routes in
34
35
 
35
36
  One command. Every route. Instant results.
36
37
 
38
+ <img width="700" height="500" alt="image" src="https://github.com/user-attachments/assets/325c7b40-37d5-47e1-830f-db1424956fee" />
39
+
40
+
37
41
  ---
38
42
 
39
43
  ## Features
40
44
 
41
- - **Auto Route Discovery** finds every route including nested sub-routers
42
- - **Full Auth Support** JWT, API Keys, Cookies, multiple headers at once
43
- - **Auth Hints** tells you exactly how to fix 401/403 errors
44
- - **Slow Route Detection** flags endpoints that are too slow
45
- - **Retry Logic** auto-retries failed requests
46
- - **HTML Reports** beautiful visual reports you can share
47
- - **JSON Export** structured output for CI/CD pipelines
48
- - **Config File** save your settings so you don't retype every time
49
- - **Method Filter** test only GET, POST, DELETE etc.
50
- - **Smart Path Params** auto-replaces `:id`, `:slug`, `:uuid` with safe defaults
51
- - **Express v4 & v5** works with both versions
45
+ - **Auto Route Discovery** - finds every route including nested sub-routers
46
+ - **Full Auth Support** - JWT, API Keys, Cookies, multiple headers at once
47
+ - **Auth Hints** - tells you exactly how to fix 401/403 errors
48
+ - **Slow Route Detection** - flags endpoints that are too slow
49
+ - **Retry Logic** - auto-retries failed requests
50
+ - **HTML Reports** - beautiful visual reports you can share
51
+ - **JSON Export** - structured output for CI/CD pipelines
52
+ - **Config File** - save your settings so you don't retype every time
53
+ - **Method Filter** - test only GET, POST, DELETE etc.
54
+ - **Smart Path Params** - auto-replaces `:id`, `:slug`, `:uuid` with safe defaults
55
+ - **Express v4 & v5** - works with both versions
52
56
 
53
57
  ---
54
58
 
55
59
  ## Detailed Setup
56
60
 
57
- ### Step 1 Install
61
+ ### Step 1 - Install
58
62
 
59
63
  ```bash
60
64
  npm install @umeshindu222/apisnap
61
65
  ```
62
66
 
63
- ### Step 2 Add to your server file
67
+ ### Step 2 - Add to your server file
64
68
 
65
69
  Open your main server file (`server.js`, `app.js`, `app.ts`) and add **2 lines**:
66
70
 
@@ -72,7 +76,7 @@ const apisnap = require('@umeshindu222/apisnap'); // ADD THIS at the top
72
76
  apisnap.init(app); // ADD THIS — after your routes
73
77
  ```
74
78
 
75
- ### Step 3 Start your server
79
+ ### Step 3 - Start your server
76
80
 
77
81
  ```bash
78
82
  node server.js
@@ -124,7 +128,7 @@ app.listen(3000, () => console.log('Server running on port 3000'));
124
128
 
125
129
  ### TypeScript
126
130
 
127
- > ⚠️ **TypeScript users — import must be written exactly like this:**
131
+ > **TypeScript users — import must be written exactly like this:**
128
132
 
129
133
  ```typescript
130
134
  // ✅ CORRECT — use import * as
@@ -201,7 +205,7 @@ app.listen(3000);
201
205
 
202
206
  ### With Global Auth Middleware
203
207
 
204
- > ⚠️ **Important:** If you use global auth middleware (`app.use(authMiddleware)`), you must place `apisnap.init(app)` **before** it. Otherwise auth will block the discovery endpoint.
208
+ > **Important:** If you use global auth middleware (`app.use(authMiddleware)`), you must place `apisnap.init(app)` **before** it. Otherwise auth will block the discovery endpoint.
205
209
 
206
210
  ```javascript
207
211
  const express = require('express');
@@ -238,7 +242,7 @@ apisnap.init(app, {
238
242
 
239
243
  ---
240
244
 
241
- ## 🔐 Fixing 401 / 403 Errors
245
+ ## Fixing 401 / 403 Errors
242
246
 
243
247
  401 and 403 errors are **completely normal** — it just means your routes are protected and APISnap needs credentials, exactly like any real client would.
244
248
 
@@ -51,10 +51,8 @@ function loadConfigFile(env) {
51
51
  const filePath = path_1.default.resolve(process.cwd(), name);
52
52
  if (fs_1.default.existsSync(filePath)) {
53
53
  try {
54
- // Strip BOM if present (fixes Windows PowerShell encoding issue)
55
54
  let raw = fs_1.default.readFileSync(filePath, 'utf-8');
56
- raw = raw.replace(/^\uFEFF/, '');
57
- raw = raw.trim();
55
+ raw = raw.replace(/^\uFEFF/, '').trim();
58
56
  const config = JSON.parse(raw);
59
57
  console.log(chalk_1.default.gray(` Config: ${name}${env ? ` (env: ${env})` : ''}\n`));
60
58
  if (env && config.envs?.[env]) {
@@ -71,13 +69,13 @@ function loadConfigFile(env) {
71
69
  }
72
70
  function validateConfig(config) {
73
71
  const errors = [];
74
- if (config.port && isNaN(parseInt(config.port))) {
75
- errors.push({ field: 'port', message: '"port" must be a number', fix: '"port": "3000"' });
72
+ if (config.port !== undefined && !Number.isInteger(Number(config.port))) {
73
+ errors.push({ field: 'port', message: '"port" must be a whole number', fix: '"port": 3000' });
76
74
  }
77
- if (config.slow && isNaN(parseInt(config.slow))) {
78
- errors.push({ field: 'slow', message: '"slow" must be a number', fix: '"slow": 200' });
75
+ if (config.slow !== undefined && !Number.isInteger(Number(config.slow))) {
76
+ errors.push({ field: 'slow', message: '"slow" must be a whole number', fix: '"slow": 200' });
79
77
  }
80
- if (config.concurrency && parseInt(config.concurrency) < 1) {
78
+ if (config.concurrency !== undefined && Number(config.concurrency) < 1) {
81
79
  errors.push({ field: 'concurrency', message: '"concurrency" must be ≥ 1', fix: '"concurrency": 3' });
82
80
  }
83
81
  if (config.headers && !Array.isArray(config.headers)) {
@@ -89,17 +87,42 @@ function validateConfig(config) {
89
87
  if (config.envs && (typeof config.envs !== 'object' || Array.isArray(config.envs) || config.envs === null)) {
90
88
  errors.push({ field: 'envs', message: '"envs" must be an object', fix: '"envs": {"staging": {"baseUrl": "https://staging.example.com"}}' });
91
89
  }
90
+ if (config.authFlow) {
91
+ const af = config.authFlow;
92
+ if (!af.url)
93
+ errors.push({ field: 'authFlow.url', message: '"authFlow.url" is required', fix: '"authFlow": { "url": "/auth/login", ... }' });
94
+ if (!af.body)
95
+ errors.push({ field: 'authFlow.body', message: '"authFlow.body" is required', fix: '"authFlow": { "body": { "username": "test", "password": "pass" } }' });
96
+ if (!af.tokenPath)
97
+ errors.push({ field: 'authFlow.tokenPath', message: '"authFlow.tokenPath" is required', fix: '"authFlow": { "tokenPath": "token" }' });
98
+ }
92
99
  return errors;
93
100
  }
94
- // ─── Header Parser ─────────────────────────────────────────────────────────
101
+ function parseIntOption(value, name, defaultValue, options = {}) {
102
+ if (value === undefined || value === null || value === '')
103
+ return defaultValue;
104
+ const numericValue = typeof value === 'number' ? value : Number(String(value));
105
+ if (!Number.isFinite(numericValue) || !Number.isInteger(numericValue)) {
106
+ console.error(chalk_1.default.red(`\n ✖ Invalid value for --${name}: "${value}" must be a whole number.`));
107
+ process.exit(1);
108
+ }
109
+ if (options.min !== undefined && numericValue < options.min) {
110
+ console.error(chalk_1.default.red(`\n ✖ Invalid value for --${name}: ${numericValue} is below minimum (${options.min}).\n`));
111
+ process.exit(1);
112
+ }
113
+ if (options.max !== undefined && numericValue > options.max) {
114
+ console.error(chalk_1.default.red(`\n ✖ Invalid value for --${name}: ${numericValue} exceeds maximum (${options.max}).\n`));
115
+ process.exit(1);
116
+ }
117
+ return numericValue;
118
+ }
119
+ // ─── Header Parser ────────────────────────────────────────────────────────
95
120
  function parseHeaders(headerArgs) {
96
121
  const headers = {};
97
122
  for (const h of headerArgs) {
98
123
  const colonIdx = h.indexOf(':');
99
124
  if (colonIdx > 0) {
100
- const key = h.slice(0, colonIdx).trim();
101
- const value = h.slice(colonIdx + 1).trim();
102
- headers[key] = value;
125
+ headers[h.slice(0, colonIdx).trim()] = h.slice(colonIdx + 1).trim();
103
126
  }
104
127
  else {
105
128
  console.warn(chalk_1.default.yellow(`⚠️ Skipping malformed header: "${h}" (expected "Key: Value")`));
@@ -107,12 +130,78 @@ function parseHeaders(headerArgs) {
107
130
  }
108
131
  return headers;
109
132
  }
133
+ // ─── Dot-path resolver (for token extraction) ────────────────────────────────
134
+ function resolveDotPath(obj, dotPath) {
135
+ const parts = dotPath.split('.');
136
+ let current = obj;
137
+ for (const part of parts) {
138
+ if (current == null || typeof current !== 'object')
139
+ return null;
140
+ current = current[part];
141
+ }
142
+ return typeof current === 'string' ? current : (current != null ? String(current) : null);
143
+ }
144
+ // ─── Auth Flow Executor ───────────────────────────────────────────────────────
145
+ async function executeAuthFlow(authFlow, baseUrl, timeout) {
146
+ const authSpinner = (0, ora_1.default)(' Authenticating via auth flow...').start();
147
+ try {
148
+ const loginUrl = authFlow.url.startsWith('http') ? authFlow.url : `${baseUrl}${authFlow.url}`;
149
+ const res = await axios_1.default.post(loginUrl, authFlow.body, {
150
+ timeout,
151
+ validateStatus: () => true,
152
+ headers: { 'Content-Type': 'application/json' },
153
+ });
154
+ if (res.status >= 400) {
155
+ authSpinner.fail(chalk_1.default.red(`Auth flow failed: ${res.status} ${res.statusText}`));
156
+ console.log(chalk_1.default.yellow(` Hint: Check authFlow.body credentials and authFlow.url in your config.`));
157
+ return null;
158
+ }
159
+ const token = resolveDotPath(res.data, authFlow.tokenPath);
160
+ if (!token) {
161
+ authSpinner.fail(chalk_1.default.red(`Auth flow: could not find token at path "${authFlow.tokenPath}" in response`));
162
+ console.log(chalk_1.default.gray(` Response body: ${JSON.stringify(res.data).slice(0, 200)}`));
163
+ return null;
164
+ }
165
+ const headerName = authFlow.headerName || 'Authorization';
166
+ const prefix = authFlow.prefix !== undefined ? authFlow.prefix : 'Bearer ';
167
+ const headerValue = `${prefix}${token}`;
168
+ authSpinner.succeed(chalk_1.default.green(`Auth flow succeeded → injecting ${headerName}: ${prefix}${token.slice(0, 8)}••••••`));
169
+ return { headerName, headerValue };
170
+ }
171
+ catch (err) {
172
+ authSpinner.fail(chalk_1.default.red(`Auth flow error: ${err.message}`));
173
+ return null;
174
+ }
175
+ }
176
+ // ─── Cookie Jar (session auth) ───────────────────────────────────────────────
177
+ class CookieJar {
178
+ constructor() {
179
+ this.cookies = new Map();
180
+ }
181
+ ingest(setCookieHeaders) {
182
+ if (!setCookieHeaders)
183
+ return;
184
+ const headers = Array.isArray(setCookieHeaders) ? setCookieHeaders : [setCookieHeaders];
185
+ for (const header of headers) {
186
+ const [kv] = header.split(';');
187
+ const idx = kv.indexOf('=');
188
+ if (idx > 0) {
189
+ this.cookies.set(kv.slice(0, idx).trim(), kv.slice(idx + 1).trim());
190
+ }
191
+ }
192
+ }
193
+ toString() {
194
+ return [...this.cookies.entries()].map(([k, v]) => `${k}=${v}`).join('; ');
195
+ }
196
+ has() {
197
+ return this.cookies.size > 0;
198
+ }
199
+ }
110
200
  // ─── Smart Path Param Replacement ────────────────────────────────────────────
111
201
  function replacePath(rawPath, paramMap = {}) {
112
202
  return rawPath.replace(/:([a-zA-Z0-9_]+)/g, (_, param) => {
113
203
  if (paramMap[param])
114
204
  return paramMap[param];
115
- // Smart defaults based on param name
116
205
  if (/id$/i.test(param))
117
206
  return '1';
118
207
  if (/slug$/i.test(param))
@@ -127,26 +216,108 @@ function replacePath(rawPath, paramMap = {}) {
127
216
  return '1';
128
217
  if (/limit$/i.test(param))
129
218
  return '10';
130
- return '1'; // fallback
219
+ return '1';
131
220
  });
132
221
  }
222
+ // ─── Exponential Backoff ──────────────────────────────────────────────────────
223
+ function backoffDelay(attempt, baseMs = 300) {
224
+ return Math.min(baseMs * Math.pow(2, attempt) + Math.random() * 100, 10000);
225
+ }
133
226
  // ─── Concurrency Limiter ──────────────────────────────────────────────────────
134
227
  async function runWithConcurrency(tasks, limit) {
135
- const results = [];
228
+ const results = Array.from({ length: tasks.length }, () => new Error('Task never executed'));
136
229
  let index = 0;
137
230
  async function worker() {
138
231
  while (index < tasks.length) {
139
232
  const i = index++;
140
- results[i] = await tasks[i]();
233
+ try {
234
+ results[i] = await tasks[i]();
235
+ }
236
+ catch (err) {
237
+ results[i] = err instanceof Error ? err : new Error(String(err));
238
+ }
141
239
  }
142
240
  }
143
- // Spin up `limit` workers — each pulls the next task when free
144
241
  const workers = Array.from({ length: Math.min(limit, tasks.length) }, worker);
145
242
  await Promise.all(workers);
146
243
  return results;
147
244
  }
245
+ // ─── Baseline Diff Engine ─────────────────────────────────────────────────────
246
+ function diffAgainstBaseline(current, baselinePath) {
247
+ if (!fs_1.default.existsSync(baselinePath))
248
+ return null;
249
+ let baseline;
250
+ try {
251
+ baseline = JSON.parse(fs_1.default.readFileSync(baselinePath, 'utf-8'));
252
+ }
253
+ catch {
254
+ console.warn(chalk_1.default.yellow(`⚠️ Could not parse baseline file: ${baselinePath}`));
255
+ return null;
256
+ }
257
+ const baselineMap = new Map(baseline.results.map(r => [`${r.method}:${r.path}`, r]));
258
+ const currentMap = new Map(current.results.map(r => [`${r.method}:${r.path}`, r]));
259
+ const regressions = [];
260
+ const improvements = [];
261
+ let unchanged = 0;
262
+ const baselineKeys = new Set(baselineMap.keys());
263
+ const currentKeys = new Set(currentMap.keys());
264
+ const newEndpoints = [...currentKeys].filter(k => !baselineKeys.has(k));
265
+ const removedEndpoints = [...baselineKeys].filter(k => !currentKeys.has(k));
266
+ for (const [key, curr] of currentMap) {
267
+ const prev = baselineMap.get(key);
268
+ if (!prev)
269
+ continue;
270
+ const wasOk = prev.success;
271
+ const isOk = curr.success;
272
+ const wasSlow = prev.slow;
273
+ const isSlow = curr.slow;
274
+ if (wasOk && !isOk) {
275
+ regressions.push({ path: curr.path, method: curr.method, prev: { status: prev.status, duration: prev.duration }, curr: { status: curr.status, duration: curr.duration, error: curr.error }, reason: `Status changed ${prev.status} → ${curr.status}` });
276
+ }
277
+ else if (!wasOk && isOk) {
278
+ improvements.push({ path: curr.path, method: curr.method, reason: `Fixed: ${prev.status} → ${curr.status}` });
279
+ }
280
+ else if (isOk && !wasSlow && isSlow) {
281
+ regressions.push({ path: curr.path, method: curr.method, prev: { duration: prev.duration }, curr: { duration: curr.duration }, reason: `Latency spike: ${prev.duration}ms → ${curr.duration}ms` });
282
+ }
283
+ else if (isOk && wasSlow && !isSlow) {
284
+ improvements.push({ path: curr.path, method: curr.method, reason: `Faster: ${prev.duration}ms → ${curr.duration}ms` });
285
+ }
286
+ else {
287
+ unchanged++;
288
+ }
289
+ }
290
+ return { regressions, improvements, unchanged, newEndpoints, removedEndpoints };
291
+ }
292
+ function printDiffReport(diff) {
293
+ console.log(chalk_1.default.bold('\n🔍 Regression Diff:'));
294
+ if (diff.regressions.length === 0 && diff.improvements.length === 0) {
295
+ console.log(chalk_1.default.green(' ✅ No regressions — results match baseline.'));
296
+ }
297
+ if (diff.regressions.length > 0) {
298
+ console.log(chalk_1.default.red.bold(`\n ⛔ ${diff.regressions.length} regression(s):`));
299
+ for (const r of diff.regressions) {
300
+ console.log(chalk_1.default.red(` ✖ [${r.method}] ${r.path}`));
301
+ console.log(chalk_1.default.gray(` ${r.reason}`));
302
+ }
303
+ }
304
+ if (diff.improvements.length > 0) {
305
+ console.log(chalk_1.default.green.bold(`\n 🎉 ${diff.improvements.length} improvement(s):`));
306
+ for (const i of diff.improvements) {
307
+ console.log(chalk_1.default.green(` ✔ [${i.method}] ${i.path}`));
308
+ console.log(chalk_1.default.gray(` ${i.reason}`));
309
+ }
310
+ }
311
+ if (diff.newEndpoints.length > 0) {
312
+ console.log(chalk_1.default.cyan(`\n 🆕 ${diff.newEndpoints.length} new endpoint(s): ${diff.newEndpoints.join(', ')}`));
313
+ }
314
+ if (diff.removedEndpoints.length > 0) {
315
+ console.log(chalk_1.default.yellow(`\n 🗑 ${diff.removedEndpoints.length} removed endpoint(s): ${diff.removedEndpoints.join(', ')}`));
316
+ }
317
+ console.log(chalk_1.default.gray(`\n Unchanged: ${diff.unchanged} endpoint(s)`));
318
+ }
148
319
  // ─── HTML Report Generator ────────────────────────────────────────────────────
149
- function generateHTMLReport(data) {
320
+ function generateHTMLReport(data, diff) {
150
321
  const passRate = data.summary.total > 0
151
322
  ? Math.round((data.summary.passed / data.summary.total) * 100)
152
323
  : 0;
@@ -166,9 +337,27 @@ function generateHTMLReport(data) {
166
337
  : `<span class="fail">✖ ${r.status || 'ERR'}</span>`}</td>
167
338
  <td>${r.slow ? `<span class="slow">⚠️ ${r.duration}ms</span>` : `${r.duration}ms`}</td>
168
339
  <td>${r.retries > 0 ? `${r.retries} retry` : '—'}</td>
340
+ <td>${r.authMethod ? `<span class="auth-tag">${r.authMethod}</span>` : '—'}</td>
169
341
  <td>${r.error ? `<span class="errtext">${r.error}</span>` : '—'}</td>
170
342
  </tr>
171
343
  `).join('');
344
+ const diffSection = diff ? `
345
+ <div class="diff-section">
346
+ <h2>🔍 Regression Diff</h2>
347
+ ${diff.regressions.length === 0 && diff.improvements.length === 0
348
+ ? '<p class="no-regressions">✅ No regressions — results match baseline.</p>'
349
+ : ''}
350
+ ${diff.regressions.length > 0 ? `
351
+ <h3 class="red">⛔ ${diff.regressions.length} Regression(s)</h3>
352
+ <ul>${diff.regressions.map(r => `<li><strong>[${r.method}] ${r.path}</strong> — ${r.reason}</li>`).join('')}</ul>
353
+ ` : ''}
354
+ ${diff.improvements.length > 0 ? `
355
+ <h3 class="green">🎉 ${diff.improvements.length} Improvement(s)</h3>
356
+ <ul>${diff.improvements.map(i => `<li><strong>[${i.method}] ${i.path}</strong> — ${i.reason}</li>`).join('')}</ul>
357
+ ` : ''}
358
+ ${diff.newEndpoints.length > 0 ? `<p class="blue">🆕 New: ${diff.newEndpoints.join(', ')}</p>` : ''}
359
+ ${diff.removedEndpoints.length > 0 ? `<p class="yellow">🗑 Removed: ${diff.removedEndpoints.join(', ')}</p>` : ''}
360
+ </div>` : '';
172
361
  return `<!DOCTYPE html>
173
362
  <html lang="en">
174
363
  <head>
@@ -178,6 +367,8 @@ function generateHTMLReport(data) {
178
367
  *{box-sizing:border-box;margin:0;padding:0}
179
368
  body{font-family:'Segoe UI',system-ui,sans-serif;background:#f8fafc;color:#1e293b;padding:2rem}
180
369
  h1{font-size:1.8rem;margin-bottom:.25rem}
370
+ h2{font-size:1.2rem;margin:1.5rem 0 .75rem}
371
+ h3{font-size:1rem;margin:.75rem 0 .4rem}
181
372
  .sub{color:#64748b;font-size:.9rem;margin-bottom:2rem}
182
373
  .cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:1rem;margin-bottom:2rem}
183
374
  .card{background:#fff;border-radius:12px;padding:1.2rem;box-shadow:0 1px 4px rgba(0,0,0,.08);text-align:center}
@@ -192,8 +383,13 @@ function generateHTMLReport(data) {
192
383
  .badge-delete{background:#dc2626}.badge-patch{background:#7c3aed}
193
384
  .ok{color:#16a34a;font-weight:600}.fail{color:#dc2626;font-weight:600}.slow{color:#ca8a04;font-weight:600}
194
385
  .errtext{color:#dc2626;font-size:.8rem}
386
+ .auth-tag{background:#e0e7ff;color:#3730a3;border-radius:4px;padding:.1rem .4rem;font-size:.75rem;font-weight:600}
195
387
  .progress{background:#e2e8f0;border-radius:999px;height:10px;margin:1rem 0}
196
388
  .progress-bar{background:#16a34a;height:10px;border-radius:999px;transition:width .3s}
389
+ .diff-section{background:#fff;border-radius:12px;padding:1.5rem;margin-top:2rem;box-shadow:0 1px 4px rgba(0,0,0,.08)}
390
+ .diff-section ul{padding-left:1.25rem;margin:.5rem 0}
391
+ .diff-section li{margin:.3rem 0;font-size:.9rem}
392
+ .no-regressions{color:#16a34a;font-weight:600}
197
393
  footer{margin-top:2rem;color:#94a3b8;font-size:.8rem;text-align:center}
198
394
  </style>
199
395
  </head>
@@ -214,11 +410,13 @@ function generateHTMLReport(data) {
214
410
 
215
411
  <table>
216
412
  <thead>
217
- <tr><th>Method</th><th>Path</th><th>Status</th><th>Duration</th><th>Retries</th><th>Error</th></tr>
413
+ <tr><th>Method</th><th>Path</th><th>Status</th><th>Duration</th><th>Retries</th><th>Auth</th><th>Error</th></tr>
218
414
  </thead>
219
415
  <tbody>${rows}</tbody>
220
416
  </table>
221
417
 
418
+ ${diffSection}
419
+
222
420
  <footer>APISnap v${data.version} — MIT License</footer>
223
421
  </body>
224
422
  </html>`;
@@ -235,7 +433,16 @@ program
235
433
  console.log(chalk_1.default.gray(' This creates a .apisnaprc.json in your project root.\n'));
236
434
  const port = (await q(chalk_1.default.white(' Server port? ') + chalk_1.default.gray('[3000]: '))).trim() || '3000';
237
435
  const slowInput = (await q(chalk_1.default.white(' Slow threshold (ms)? ') + chalk_1.default.gray('[200]: '))).trim() || '200';
238
- const authRaw = await q(chalk_1.default.white(' Auth token? ') + chalk_1.default.gray('(leave blank to skip): '));
436
+ const authRaw = await q(chalk_1.default.white(' Static auth token? ') + chalk_1.default.gray('(leave blank to skip): '));
437
+ const useAuthFlow = (await q(chalk_1.default.white(' Set up auth flow (auto-login)? ') + chalk_1.default.gray('[y/N]: '))).trim().toLowerCase() === 'y';
438
+ let authFlowConfig = null;
439
+ if (useAuthFlow) {
440
+ const loginUrl = (await q(chalk_1.default.white(' Login endpoint? ') + chalk_1.default.gray('[/auth/login]: '))).trim() || '/auth/login';
441
+ const username = (await q(chalk_1.default.white(' Username/email field value: '))).trim();
442
+ const password = (await q(chalk_1.default.white(' Password field value: '))).trim();
443
+ const tokenPath = (await q(chalk_1.default.white(' Token path in response? ') + chalk_1.default.gray('[token]: '))).trim() || 'token';
444
+ authFlowConfig = { url: loginUrl, body: { username, password }, tokenPath };
445
+ }
239
446
  const skipRaw = await q(chalk_1.default.white(' Paths to skip? ') + chalk_1.default.gray('e.g. /admin,/internal (or blank): '));
240
447
  const configPath = path_1.default.resolve(process.cwd(), '.apisnaprc.json');
241
448
  const alreadyExists = fs_1.default.existsSync(configPath);
@@ -253,12 +460,12 @@ program
253
460
  port,
254
461
  slow: Number.isNaN(parsedSlow) ? 200 : parsedSlow,
255
462
  };
256
- if (authRaw.trim()) {
463
+ if (authRaw.trim())
257
464
  config.headers = [`Authorization: Bearer ${authRaw.trim()}`];
258
- }
259
- if (skipRaw.trim()) {
465
+ if (authFlowConfig)
466
+ config.authFlow = authFlowConfig;
467
+ if (skipRaw.trim())
260
468
  config.skip = skipRaw.split(',').map(s => s.trim()).filter(Boolean);
261
- }
262
469
  fs_1.default.writeFileSync(configPath, JSON.stringify(config, null, 2));
263
470
  console.log(chalk_1.default.green('\n ✅ Created .apisnaprc.json\n'));
264
471
  console.log(chalk_1.default.gray(' Next steps:'));
@@ -270,22 +477,26 @@ program
270
477
  .description('Instant API health-check CLI for Express.js')
271
478
  .version(version)
272
479
  .option('-p, --port <number>', 'Port your server is running on')
273
- .option('-H, --header <string>', 'Custom header — can be used multiple times (e.g. -H "Authorization: Bearer TOKEN" -H "x-api-key: SECRET")', collect, [])
480
+ .option('-H, --header <string>', 'Custom header (repeatable)', collect, [])
274
481
  .option('-c, --cookie <string>', 'Cookie string (e.g. "sessionId=abc; token=xyz")')
275
482
  .option('-s, --slow <number>', 'Slow response threshold in ms')
276
483
  .option('-t, --timeout <number>', 'Request timeout in ms')
277
- .option('-r, --retry <number>', 'Retry failed requests N times')
278
- .option('-e, --export <filename>', 'Export JSON report (e.g. report)')
279
- .option('--html <filename>', 'Export HTML report (e.g. report)')
484
+ .option('-r, --retry <number>', 'Retry failed requests N times (uses exponential backoff)')
485
+ .option('-e, --export <filename>', 'Export JSON report')
486
+ .option('--html <filename>', 'Export HTML report')
280
487
  .option('--only <methods>', 'Only test specific methods (e.g. "GET,POST")')
281
- .option('--env <name>', 'Use environment profile from config (e.g. staging, prod)')
282
- .option('--base-url <url>', 'Override base URL (e.g. https://staging.myapp.com)')
283
- .option('--params <json>', 'JSON map of param overrides (e.g. \'{"id":"42"}\')')
488
+ .option('--env <name>', 'Use environment profile from config')
489
+ .option('--base-url <url>', 'Override base URL')
490
+ .option('--params <json>', 'JSON map of param overrides')
284
491
  .option('--fail-on-slow', 'Exit with code 1 if any slow routes are found')
285
492
  .option('--concurrency <number>', 'How many requests to run in parallel (default: 1)')
286
- .option('--body <json>', 'Default JSON body for POST/PUT/PATCH requests (e.g. \'{"name":"test"}\')')
493
+ .option('--body <json>', 'Default JSON body for POST/PUT/PATCH requests')
494
+ .option('--auth-flow', 'Execute auth flow from config to obtain token automatically')
495
+ .option('--save-baseline <filename>', 'Save results as baseline for future diffs (e.g. baseline)')
496
+ .option('--diff <filename>', 'Diff current results against a saved baseline (e.g. baseline.json)')
497
+ .option('--ci', 'CI mode: structured JSON to stdout, strict exit codes, no spinners')
498
+ .option('--session', 'Enable cookie jar — capture Set-Cookie from login and replay on requests')
287
499
  .action(async (options) => {
288
- // Merge config file with CLI options (CLI takes precedence)
289
500
  const fileConfig = loadConfigFile(options.env);
290
501
  const configErrors = validateConfig(fileConfig);
291
502
  if (configErrors.length > 0) {
@@ -297,27 +508,25 @@ program
297
508
  process.exit(1);
298
509
  }
299
510
  const mergedOptions = { ...fileConfig, ...options };
511
+ const ciMode = !!mergedOptions.ci;
300
512
  const port = mergedOptions.port || '3000';
301
- const slowThreshold = parseInt(mergedOptions.slow || '200');
302
- const timeout = parseInt(mergedOptions.timeout || '5000');
303
- const retryCount = parseInt(mergedOptions.retry || '0');
513
+ const slowThreshold = parseIntOption(mergedOptions.slow, 'slow', 200, { min: 1 });
514
+ const timeout = parseIntOption(mergedOptions.timeout, 'timeout', 5000, { min: 100 });
515
+ const retryCount = parseIntOption(mergedOptions.retry, 'retry', 0, { min: 0, max: 10 });
516
+ const concurrency = parseIntOption(mergedOptions.concurrency, 'concurrency', 1, { min: 1, max: 50 });
304
517
  const onlyMethods = mergedOptions.only
305
518
  ? mergedOptions.only.split(',').map((m) => m.trim().toUpperCase())
306
519
  : null;
307
520
  const paramOverrides = mergedOptions.params
308
- ? (typeof mergedOptions.params === 'string'
309
- ? JSON.parse(mergedOptions.params) // from CLI flag — parse it
310
- : mergedOptions.params) // from config file — already an object
521
+ ? (typeof mergedOptions.params === 'string' ? JSON.parse(mergedOptions.params) : mergedOptions.params)
311
522
  : (fileConfig.params || {});
312
- const concurrency = parseInt(mergedOptions.concurrency || '1');
313
523
  const defaultBody = mergedOptions.body
314
- ? (typeof mergedOptions.body === 'string'
315
- ? JSON.parse(mergedOptions.body)
316
- : mergedOptions.body)
524
+ ? (typeof mergedOptions.body === 'string' ? JSON.parse(mergedOptions.body) : mergedOptions.body)
317
525
  : (fileConfig.body || null);
318
526
  const baseUrl = mergedOptions.baseUrl || mergedOptions['base-url'] || `http://localhost:${port}`;
319
527
  const discoveryUrl = `http://localhost:${port}/__apisnap_discovery`;
320
- // Build headers
528
+ const useAuthFlow = !!(mergedOptions.authFlow || mergedOptions['auth-flow']);
529
+ const useSession = !!mergedOptions.session;
321
530
  const headerArgs = [
322
531
  ...(Array.isArray(mergedOptions.header) ? mergedOptions.header : []),
323
532
  ...(Array.isArray(fileConfig.headers) ? fileConfig.headers : []),
@@ -326,65 +535,93 @@ program
326
535
  ...parseHeaders(headerArgs),
327
536
  'User-Agent': `APISnap/${version}`,
328
537
  };
329
- if (mergedOptions.cookie) {
538
+ if (mergedOptions.cookie)
330
539
  customHeaders['Cookie'] = mergedOptions.cookie;
540
+ let authMethod;
541
+ const cookieJar = new CookieJar();
542
+ if (useAuthFlow && fileConfig.authFlow) {
543
+ const authResult = await executeAuthFlow(fileConfig.authFlow, baseUrl, timeout);
544
+ if (authResult) {
545
+ customHeaders[authResult.headerName] = authResult.headerValue;
546
+ authMethod = 'auth-flow';
547
+ }
548
+ }
549
+ else if (headerArgs.some(h => /^authorization:/i.test(h))) {
550
+ authMethod = 'static-token';
331
551
  }
332
- // ── Banner ──────────────────────────────────────────────────────────────
333
- console.log(chalk_1.default.bold.cyan(`\n📸 APISnap v${version}`));
334
- console.log(chalk_1.default.gray(` Target: ${baseUrl}`));
335
- console.log(chalk_1.default.gray(` Slow: >${slowThreshold}ms`));
336
- console.log(chalk_1.default.gray(` Timeout: ${timeout}ms`));
337
- if (retryCount > 0)
338
- console.log(chalk_1.default.gray(` Retries: ${retryCount}`));
339
- if (concurrency > 1)
340
- console.log(chalk_1.default.gray(` Concurrency: ${concurrency}`));
341
- if (defaultBody)
342
- console.log(chalk_1.default.gray(` Body: ${JSON.stringify(defaultBody)}`));
343
- if (Object.keys(customHeaders).filter(k => k !== 'User-Agent').length > 0) {
552
+ else if (mergedOptions.cookie) {
553
+ authMethod = 'cookie';
554
+ }
555
+ if (!ciMode) {
556
+ console.log(chalk_1.default.bold.cyan(`\n📸 APISnap v${version}`));
557
+ console.log(chalk_1.default.gray(` Target: ${baseUrl}`));
558
+ console.log(chalk_1.default.gray(` Slow: >${slowThreshold}ms`));
559
+ console.log(chalk_1.default.gray(` Timeout: ${timeout}ms`));
560
+ if (retryCount > 0)
561
+ console.log(chalk_1.default.gray(` Retries: ${retryCount} (exponential backoff)`));
562
+ if (concurrency > 1)
563
+ console.log(chalk_1.default.gray(` Concurrency: ${concurrency}`));
564
+ if (defaultBody)
565
+ console.log(chalk_1.default.gray(` Body: ${JSON.stringify(defaultBody)}`));
566
+ if (authMethod)
567
+ console.log(chalk_1.default.gray(` Auth: ${authMethod}`));
568
+ if (useSession)
569
+ console.log(chalk_1.default.gray(` Session: cookie jar enabled`));
570
+ if (onlyMethods)
571
+ console.log(chalk_1.default.gray(` Filter: ${onlyMethods.join(', ')}`));
344
572
  const safeHeaders = { ...customHeaders };
345
- // Mask auth tokens in output
346
573
  Object.keys(safeHeaders).forEach(k => {
347
- if (/auth|token|key|secret|cookie/i.test(k)) {
574
+ if (/auth|token|key|secret|cookie/i.test(k))
348
575
  safeHeaders[k] = safeHeaders[k].slice(0, 8) + '••••••';
349
- }
350
576
  });
351
577
  delete safeHeaders['User-Agent'];
352
- console.log(chalk_1.default.gray(` Headers: ${JSON.stringify(safeHeaders)}`));
578
+ if (Object.keys(safeHeaders).length > 0)
579
+ console.log(chalk_1.default.gray(` Headers: ${JSON.stringify(safeHeaders)}`));
580
+ console.log();
353
581
  }
354
- if (onlyMethods)
355
- console.log(chalk_1.default.gray(` Filter: ${onlyMethods.join(', ')}`));
356
- console.log();
357
- const spinner = (0, ora_1.default)('Connecting to discovery endpoint...').start();
582
+ const spinner = ciMode ? null : (0, ora_1.default)('Connecting to discovery endpoint...').start();
358
583
  const results = [];
359
584
  try {
360
- // ── Discovery ───────────────────────────────────────────────────────
361
585
  const discovery = await axios_1.default.get(discoveryUrl, { timeout: 5000 });
362
586
  let { endpoints } = discovery.data;
363
- // Filter by method if --only flag provided
587
+ if (fileConfig.skip?.length) {
588
+ endpoints = endpoints.filter((e) => !fileConfig.skip.some((s) => e.path.startsWith(s)));
589
+ }
364
590
  if (onlyMethods) {
365
591
  endpoints = endpoints.filter((e) => e.methods.some((m) => onlyMethods.includes(m)));
366
592
  }
367
- spinner.succeed(chalk_1.default.green(`Connected! Found ${endpoints.length} endpoint${endpoints.length !== 1 ? 's' : ''} to test.\n`));
593
+ if (spinner)
594
+ spinner.succeed(chalk_1.default.green(`Connected! Found ${endpoints.length} endpoint${endpoints.length !== 1 ? 's' : ''} to test.\n`));
368
595
  let passed = 0, failed = 0, slow = 0;
369
596
  const allDurations = [];
370
- // ── Test Each Endpoint ───────────────────────────────────────────────
371
- // ── Build task list ───────────────────────────────────────────────────────
372
597
  const tasks = endpoints.map((endpoint) => async () => {
373
598
  const method = endpoint.methods[0];
374
599
  const rawPath = endpoint.path;
375
600
  const resolvedPath = replacePath(rawPath, paramOverrides);
376
601
  const fullUrl = `${baseUrl}${resolvedPath}`;
377
- // Per-route body: check fileConfig.routes first, fall back to defaultBody
378
602
  const routeConfig = (fileConfig.routes || []).find((r) => r.path === rawPath || r.path === resolvedPath);
379
603
  const requestBody = routeConfig?.body ?? defaultBody;
604
+ const requestHeaders = { ...customHeaders };
605
+ if (routeConfig?.headers) {
606
+ Object.assign(requestHeaders, parseHeaders(routeConfig.headers));
607
+ }
608
+ if (routeConfig?.auth === 'none') {
609
+ delete requestHeaders['Authorization'];
610
+ delete requestHeaders['Cookie'];
611
+ }
612
+ if (useSession && cookieJar.has()) {
613
+ const existing = requestHeaders['Cookie'] || '';
614
+ requestHeaders['Cookie'] = [existing, cookieJar.toString()].filter(Boolean).join('; ');
615
+ }
380
616
  const testResult = {
381
617
  method, path: rawPath, fullUrl,
382
618
  status: 0, statusText: '', duration: 0,
383
619
  success: false, slow: false, retries: 0,
620
+ authMethod: routeConfig?.auth === 'none' ? 'none' : authMethod,
384
621
  };
385
- const testSpinner = (0, ora_1.default)({
622
+ const testSpinner = ciMode ? null : (0, ora_1.default)({
386
623
  text: `${chalk_1.default.bold(method.padEnd(7))} ${chalk_1.default.dim(rawPath)}`,
387
- prefixText: ' '
624
+ prefixText: ' ',
388
625
  }).start();
389
626
  let lastError = null;
390
627
  let attempt = 0;
@@ -394,13 +631,14 @@ program
394
631
  const res = await (0, axios_1.default)({
395
632
  method,
396
633
  url: fullUrl,
397
- headers: customHeaders,
634
+ headers: requestHeaders,
398
635
  timeout,
399
636
  validateStatus: () => true,
400
- // Only send body for methods that accept one
401
637
  data: ['POST', 'PUT', 'PATCH'].includes(method) ? requestBody : undefined,
402
638
  });
403
639
  const duration = Date.now() - start;
640
+ if (useSession)
641
+ cookieJar.ingest(res.headers['set-cookie']);
404
642
  testResult.duration = duration;
405
643
  testResult.status = res.status;
406
644
  testResult.statusText = res.statusText;
@@ -412,34 +650,41 @@ program
412
650
  const durationStr = testResult.slow
413
651
  ? chalk_1.default.yellow.bold(`${duration}ms ← slow!`)
414
652
  : chalk_1.default.gray(`${duration}ms`);
415
- const msg = `${chalk_1.default.bold(method.padEnd(7))} ${chalk_1.default.white(rawPath.padEnd(35))} ` +
416
- `${chalk_1.default.green(`[${res.status}]`)} ${durationStr}`;
417
- testResult.slow ? testSpinner.warn(msg) : testSpinner.succeed(msg);
653
+ const msg = `${chalk_1.default.bold(method.padEnd(7))} ${chalk_1.default.white(rawPath.padEnd(35))} ${chalk_1.default.green(`[${res.status}]`)} ${durationStr}`;
654
+ if (testSpinner)
655
+ testResult.slow ? testSpinner.warn(msg) : testSpinner.succeed(msg);
418
656
  passed++;
419
657
  if (testResult.slow)
420
658
  slow++;
421
659
  }
422
660
  else {
423
- testSpinner.fail(`${chalk_1.default.bold(method.padEnd(7))} ${chalk_1.default.white(rawPath.padEnd(35))} ` +
424
- `${chalk_1.default.red(`[${res.status} ${res.statusText}]`)} ${chalk_1.default.gray(`${duration}ms`)}`);
661
+ if (testSpinner)
662
+ testSpinner.fail(`${chalk_1.default.bold(method.padEnd(7))} ${chalk_1.default.white(rawPath.padEnd(35))} ${chalk_1.default.red(`[${res.status} ${res.statusText}]`)} ${chalk_1.default.gray(`${duration}ms`)}`);
425
663
  const paramNames = [...rawPath.matchAll(/:([a-zA-Z0-9_]+)/g)].map(match => match[1]);
426
- const exampleParams = paramNames.reduce((acc, paramName) => ({ ...acc, [paramName]: '1' }), {});
427
- if (res.status === 401 || res.status === 403) {
428
- const hint = res.status === 401
429
- ? 'No credentials sent — add to .apisnaprc: "headers": ["Authorization: Bearer TOKEN"]'
430
- : 'Token lacks permission for this route';
431
- console.log(chalk_1.default.yellow(` hint: ${hint}`));
432
- }
433
- else if (res.status === 404 && paramNames.length > 0) {
434
- console.log(chalk_1.default.yellow(' hint: path needs params — add to .apisnaprc:'));
435
- console.log(chalk_1.default.gray(` "params": ${JSON.stringify(exampleParams)}`));
436
- }
437
- else if (res.status === 404) {
438
- console.log(chalk_1.default.yellow(' hint: route not found — is the server fully started?'));
439
- }
440
- else if (res.status === 400 || res.status === 422) {
441
- console.log(chalk_1.default.yellow(' hint: add a request body to .apisnaprc under "routes":'));
442
- console.log(chalk_1.default.gray(` { "path": "${rawPath}", "body": {"field": "value"} }`));
664
+ const exampleParams = paramNames.reduce((acc, p) => ({ ...acc, [p]: '1' }), {});
665
+ if (!ciMode) {
666
+ if (res.status === 401) {
667
+ if (useAuthFlow) {
668
+ console.log(chalk_1.default.yellow(' hint: auth flow ran but this route still returned 401 — check token permissions'));
669
+ }
670
+ else {
671
+ console.log(chalk_1.default.yellow(' hint: No credentials use --auth-flow or add "headers" / "authFlow" to .apisnaprc'));
672
+ }
673
+ }
674
+ else if (res.status === 403) {
675
+ console.log(chalk_1.default.yellow(' hint: Token lacks permission for this route — check RBAC/scopes'));
676
+ }
677
+ else if (res.status === 404 && paramNames.length > 0) {
678
+ console.log(chalk_1.default.yellow(' hint: path needs params add to .apisnaprc:'));
679
+ console.log(chalk_1.default.gray(` "params": ${JSON.stringify(exampleParams)}`));
680
+ }
681
+ else if (res.status === 404) {
682
+ console.log(chalk_1.default.yellow(' hint: route not found — is the server fully started?'));
683
+ }
684
+ else if (res.status === 400 || res.status === 422) {
685
+ console.log(chalk_1.default.yellow(' hint: add a request body to .apisnaprc under "routes":'));
686
+ console.log(chalk_1.default.gray(` { "path": "${rawPath}", "body": {"field": "value"} }`));
687
+ }
443
688
  }
444
689
  failed++;
445
690
  }
@@ -449,56 +694,46 @@ program
449
694
  catch (err) {
450
695
  lastError = err;
451
696
  attempt++;
452
- if (attempt <= retryCount)
453
- await new Promise(r => setTimeout(r, 500 * attempt));
697
+ if (attempt <= retryCount) {
698
+ const delay = backoffDelay(attempt - 1);
699
+ if (!ciMode)
700
+ process.stdout.write(chalk_1.default.gray(` ↺ retry ${attempt}/${retryCount} in ${Math.round(delay)}ms...\n`));
701
+ await new Promise(r => setTimeout(r, delay));
702
+ }
454
703
  }
455
704
  }
456
705
  if (lastError) {
457
706
  testResult.success = false;
458
707
  testResult.retries = attempt - 1;
459
708
  testResult.error = lastError.code === 'ECONNABORTED' ? 'Timeout' : lastError.message;
460
- testSpinner.fail(`${chalk_1.default.bold(method.padEnd(7))} ${chalk_1.default.white(rawPath.padEnd(35))} ` +
461
- chalk_1.default.red(`[${testResult.error}]`));
709
+ if (testSpinner)
710
+ testSpinner.fail(`${chalk_1.default.bold(method.padEnd(7))} ${chalk_1.default.white(rawPath.padEnd(35))} ${chalk_1.default.red(`[${testResult.error}]`)}`);
462
711
  failed++;
463
712
  }
464
713
  return testResult;
465
714
  });
466
- // ── Run with concurrency limit ────────────────────────────────────────────
467
715
  const allResults = await runWithConcurrency(tasks, concurrency);
468
- results.push(...allResults);
469
- // ── Summary ──────────────────────────────────────────────────────────
470
- const avgDuration = allDurations.length > 0
471
- ? Math.round(allDurations.reduce((a, b) => a + b, 0) / allDurations.length)
472
- : 0;
473
- const totalDuration = allDurations.reduce((a, b) => a + b, 0);
474
- console.log(chalk_1.default.bold('\n📊 Summary:'));
475
- console.log(` ${chalk_1.default.green('✅ Passed: ')} ${chalk_1.default.bold(passed)}`);
476
- console.log(` ${chalk_1.default.red('❌ Failed: ')} ${chalk_1.default.bold(failed)}`);
477
- console.log(` ${chalk_1.default.yellow('⚠️ Slow: ')} ${chalk_1.default.bold(slow)} (>${slowThreshold}ms)`);
478
- console.log(` ${chalk_1.default.cyan('⏱ Avg: ')} ${chalk_1.default.bold(avgDuration + 'ms')}`);
479
- console.log(` ${chalk_1.default.cyan('🕐 Total: ')} ${chalk_1.default.bold(totalDuration + 'ms')}`);
480
- if (failed > 0) {
481
- console.log(chalk_1.default.red.bold('\n⚠️ Some endpoints are unhealthy!'));
482
- }
483
- else if (slow > 0) {
484
- console.log(chalk_1.default.yellow.bold('\n🐢 All alive, but some routes are slow!'));
485
- }
486
- else {
487
- console.log(chalk_1.default.green.bold('\n✨ All systems nominal!'));
488
- }
489
- // ── Auth Troubleshooting Summary ─────────────────────────────────────
490
- const authFailures = results.filter(r => r.status === 401 || r.status === 403);
491
- if (authFailures.length > 0 && !headerArgs.length && !mergedOptions.cookie) {
492
- console.log(chalk_1.default.bgYellow.black.bold('\n🔐 Auth Help'));
493
- console.log(chalk_1.default.yellow(' You have ' + authFailures.length + ' auth failure(s) and no credentials were provided.'));
494
- console.log(chalk_1.default.yellow(' Solutions:'));
495
- console.log(chalk_1.default.gray(' JWT: apisnap -H "Authorization: Bearer YOUR_JWT_TOKEN"'));
496
- console.log(chalk_1.default.gray(' API Key: apisnap -H "x-api-key: YOUR_KEY"'));
497
- console.log(chalk_1.default.gray(' Cookie: apisnap --cookie "sessionId=abc123"'));
498
- console.log(chalk_1.default.gray(' Multi: apisnap -H "Authorization: Bearer TOKEN" -H "x-tenant: acme"'));
499
- console.log(chalk_1.default.gray(' Config: create .apisnaprc.json (see README)\n'));
716
+ for (let i = 0; i < allResults.length; i++) {
717
+ const result = allResults[i];
718
+ if (result instanceof Error) {
719
+ const ep = endpoints[i];
720
+ const method = ep?.methods?.[0] || 'UNKNOWN';
721
+ const rawPath = ep?.path || '(unknown route)';
722
+ results.push({
723
+ method, path: rawPath,
724
+ fullUrl: `${baseUrl}${replacePath(rawPath, paramOverrides)}`,
725
+ status: 0, statusText: 'Internal Error', duration: 0,
726
+ success: false, slow: false,
727
+ error: `Internal task failure: ${result.message}`, retries: 0,
728
+ });
729
+ failed++;
730
+ }
731
+ else {
732
+ results.push(result);
733
+ }
500
734
  }
501
- // ── Exports ──────────────────────────────────────────────────────────
735
+ const avgDuration = allDurations.length > 0 ? Math.round(allDurations.reduce((a, b) => a + b, 0) / allDurations.length) : 0;
736
+ const totalDuration = allDurations.reduce((a, b) => a + b, 0);
502
737
  const reportData = {
503
738
  tool: 'APISnap', version,
504
739
  generatedAt: new Date().toISOString(),
@@ -506,27 +741,83 @@ program
506
741
  summary: { total: endpoints.length, passed, failed, slow, avgDuration, totalDuration },
507
742
  results,
508
743
  };
744
+ const diffFile = mergedOptions.diff;
745
+ let diff = null;
746
+ if (diffFile) {
747
+ const diffPath = diffFile.endsWith('.json') ? diffFile : `${diffFile}.json`;
748
+ diff = diffAgainstBaseline(reportData, diffPath);
749
+ if (diff)
750
+ printDiffReport(diff);
751
+ }
752
+ if (!ciMode) {
753
+ console.log(chalk_1.default.bold('\n📊 Summary:'));
754
+ console.log(` ${chalk_1.default.green('✅ Passed: ')} ${chalk_1.default.bold(passed)}`);
755
+ console.log(` ${chalk_1.default.red('❌ Failed: ')} ${chalk_1.default.bold(failed)}`);
756
+ console.log(` ${chalk_1.default.yellow('⚠️ Slow: ')} ${chalk_1.default.bold(slow)} (>${slowThreshold}ms)`);
757
+ console.log(` ${chalk_1.default.cyan('⏱ Avg: ')} ${chalk_1.default.bold(avgDuration + 'ms')}`);
758
+ console.log(` ${chalk_1.default.cyan('🕐 Total: ')} ${chalk_1.default.bold(totalDuration + 'ms')}`);
759
+ if (failed > 0)
760
+ console.log(chalk_1.default.red.bold('\n⚠️ Some endpoints are unhealthy!'));
761
+ else if (slow > 0)
762
+ console.log(chalk_1.default.yellow.bold('\n🐢 All alive, but some routes are slow!'));
763
+ else
764
+ console.log(chalk_1.default.green.bold('\n✨ All systems nominal!'));
765
+ const authFailures = results.filter(r => r.status === 401 || r.status === 403);
766
+ if (authFailures.length > 0 && !headerArgs.length && !mergedOptions.cookie && !useAuthFlow) {
767
+ console.log(chalk_1.default.bgYellow.black.bold('\n🔐 Auth Help'));
768
+ console.log(chalk_1.default.yellow(` You have ${authFailures.length} auth failure(s) and no credentials were provided.`));
769
+ console.log(chalk_1.default.yellow(' Solutions:'));
770
+ console.log(chalk_1.default.gray(' Auto-login: add "authFlow" to .apisnaprc + run: apisnap --auth-flow'));
771
+ console.log(chalk_1.default.gray(' JWT: apisnap -H "Authorization: Bearer YOUR_JWT_TOKEN"'));
772
+ console.log(chalk_1.default.gray(' API Key: apisnap -H "x-api-key: YOUR_KEY"'));
773
+ console.log(chalk_1.default.gray(' Cookie: apisnap --cookie "sessionId=abc123"'));
774
+ console.log(chalk_1.default.gray(' Session: apisnap --session (auto cookie jar)\n'));
775
+ }
776
+ }
777
+ const saveBaselineFlag = mergedOptions.saveBaseline || mergedOptions['save-baseline'];
778
+ if (saveBaselineFlag) {
779
+ const bp = saveBaselineFlag.endsWith('.json') ? saveBaselineFlag : `${saveBaselineFlag}.json`;
780
+ fs_1.default.writeFileSync(bp, JSON.stringify(reportData, null, 2));
781
+ if (!ciMode)
782
+ console.log(chalk_1.default.cyan(`\n💾 Baseline saved → ${chalk_1.default.white(bp)}`));
783
+ }
509
784
  if (mergedOptions.export) {
510
- const filePath = mergedOptions.export.endsWith('.json') ? mergedOptions.export : `${mergedOptions.export}.json`;
511
- fs_1.default.writeFileSync(filePath, JSON.stringify(reportData, null, 2));
512
- console.log(chalk_1.default.cyan(`\n💾 JSON report → ${chalk_1.default.white(filePath)}`));
785
+ const fp = mergedOptions.export.endsWith('.json') ? mergedOptions.export : `${mergedOptions.export}.json`;
786
+ fs_1.default.writeFileSync(fp, JSON.stringify(reportData, null, 2));
787
+ if (!ciMode)
788
+ console.log(chalk_1.default.cyan(`\n💾 JSON report → ${chalk_1.default.white(fp)}`));
513
789
  }
514
790
  if (mergedOptions.html) {
515
- const filePath = mergedOptions.html.endsWith('.html') ? mergedOptions.html : `${mergedOptions.html}.html`;
516
- fs_1.default.writeFileSync(filePath, generateHTMLReport(reportData));
517
- console.log(chalk_1.default.cyan(`🌐 HTML report → ${chalk_1.default.white(filePath)}`));
791
+ const fp = mergedOptions.html.endsWith('.html') ? mergedOptions.html : `${mergedOptions.html}.html`;
792
+ fs_1.default.writeFileSync(fp, generateHTMLReport(reportData, diff));
793
+ if (!ciMode)
794
+ console.log(chalk_1.default.cyan(`🌐 HTML report → ${chalk_1.default.white(fp)}`));
795
+ }
796
+ if (ciMode) {
797
+ const ciOutput = {
798
+ ...reportData,
799
+ diff: diff ?? undefined,
800
+ exitCode: (failed > 0 || (mergedOptions['fail-on-slow'] && slow > 0) || (diff?.regressions?.length ?? 0) > 0) ? 1 : 0,
801
+ };
802
+ process.stdout.write(JSON.stringify(ciOutput, null, 2) + '\n');
518
803
  }
519
804
  console.log();
520
- // Exit codes for CI/CD
521
- const shouldFail = failed > 0 || (mergedOptions['fail-on-slow'] && slow > 0);
805
+ const hasRegressions = diff?.regressions?.length ?? 0;
806
+ const shouldFail = failed > 0
807
+ || (mergedOptions['fail-on-slow'] && slow > 0)
808
+ || (ciMode && hasRegressions > 0);
522
809
  process.exit(shouldFail ? 1 : 0);
523
810
  }
524
811
  catch (error) {
525
- spinner.fail(chalk_1.default.red('Could not connect to your server.'));
812
+ if (spinner)
813
+ spinner.fail(chalk_1.default.red('Could not connect to your server.'));
526
814
  const isRefused = error?.code === 'ECONNREFUSED';
527
815
  const isTimeout = error?.code === 'ECONNABORTED' || error?.code === 'ETIMEDOUT';
528
816
  const isNoInit = error?.response?.status === 404;
529
- if (isRefused) {
817
+ if (ciMode) {
818
+ process.stdout.write(JSON.stringify({ error: error.message, code: error.code }) + '\n');
819
+ }
820
+ else if (isRefused) {
530
821
  console.log(chalk_1.default.yellow(`\n Your server is not running on port ${port}.`));
531
822
  console.log(chalk_1.default.gray(' → Start it first, then run apisnap again.\n'));
532
823
  }
@@ -537,7 +828,7 @@ program
537
828
  else if (isNoInit) {
538
829
  console.log(chalk_1.default.yellow('\n Server is running but APISnap middleware not found.'));
539
830
  console.log(chalk_1.default.gray(' → Add this to your server AFTER your routes:\n'));
540
- console.log(chalk_1.default.cyan(' const apisnap = require(\'@umeshindu222/apisnap\');'));
831
+ console.log(chalk_1.default.cyan(" const apisnap = require('@umeshindu222/apisnap');"));
541
832
  console.log(chalk_1.default.cyan(' apisnap.init(app);\n'));
542
833
  }
543
834
  else {
@@ -549,7 +840,6 @@ program
549
840
  process.exit(1);
550
841
  }
551
842
  });
552
- // Allows -H to be used multiple times
553
843
  function collect(val, prev) {
554
844
  return prev.concat([val]);
555
845
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@umeshindu222/apisnap",
3
- "version": "1.2.0",
4
- "description": "Instant API auto-discovery and health-check CLI for Express.js",
3
+ "version": "1.2.2",
4
+ "description": "Instant API auto-discovery and health-check CLI for Express.js with auth flows, baseline diffing, and CI integration",
5
5
  "main": "dist/middleware/index.js",
6
6
  "types": "dist/middleware/index.d.ts",
7
7
  "bin": {