fg-tracker-mcp 0.7.0 → 0.9.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.
@@ -0,0 +1,370 @@
1
+ /**
2
+ * Varredura estática (somente leitura, regex) de rotas HTTP do repositório para montar roteiros de
3
+ * carga (CONTRATO.md §28.8): controllers NestJS, Express/Fastify/Router, Next.js (app router e
4
+ * pages/api) e pistas de autenticação (login/refresh, JWT, cookie, provedores externos).
5
+ */
6
+ import { join } from 'node:path';
7
+ import { isSourceFile, isTestFile, lineOf, matchParen, readText, walkFiles } from '../infra/files.js';
8
+ import { EXTERNAL_EFFECT_RE } from './scenario.js';
9
+ const NEST_METHODS = { Get: 'GET', Post: 'POST', Put: 'PUT', Patch: 'PATCH', Delete: 'DELETE', Head: 'HEAD', Options: 'OPTIONS', All: 'ALL' };
10
+ const EXPRESS_RECEIVER = /^(app|router|api|server|fastify|routes?|\w+Router|\w+Routes|\w+App)$/;
11
+ const GUARD_WORDS = /auth|jwt|protect|requireUser|requireLogin|ensureLogged|isLogged|passport\.authenticate|verifyToken|session|guard/i;
12
+ const NEXT_GUARD = /getServerSession|\bauth\(\)|getToken\(|currentUser\(|clerk|verify(Jwt|Token)|jwtVerify|cookies\(\)\.get\(|headers\(\)\.get\(\s*['"]authorization/i;
13
+ function normalizePath(...parts) {
14
+ const joined = parts
15
+ .filter((p) => Boolean(p))
16
+ .flatMap((p) => p.split('/'))
17
+ .filter(Boolean)
18
+ .join('/');
19
+ return `/${joined}`;
20
+ }
21
+ function stringLiteral(src) {
22
+ const m = src.trim().match(/^(['"`])([^'"`]*)\1/);
23
+ return m ? (m[2] ?? '') : null;
24
+ }
25
+ /** Argumento de `@Controller(...)`: string, `{ path: 'x' }` ou vazio. */
26
+ function controllerPath(args) {
27
+ const lit = stringLiteral(args);
28
+ if (lit !== null)
29
+ return lit;
30
+ const obj = args.match(/path\s*:\s*(['"`])([^'"`]*)\1/);
31
+ if (obj)
32
+ return obj[2] ?? '';
33
+ const arr = args.match(/^\s*\[\s*(['"`])([^'"`]*)\1/);
34
+ return arr ? (arr[2] ?? '') : '';
35
+ }
36
+ function isExternal(path) {
37
+ return EXTERNAL_EFFECT_RE.test(path);
38
+ }
39
+ function skipDecorators(content, pos) {
40
+ const names = [];
41
+ let i = pos;
42
+ for (;;) {
43
+ const ws = content.slice(i).match(/^\s*/);
44
+ i += ws ? ws[0].length : 0;
45
+ const dec = content.slice(i).match(/^@([\w.]+)/);
46
+ if (!dec)
47
+ break;
48
+ names.push(dec[1] ?? '');
49
+ i += dec[0].length;
50
+ if (content[i] === '(') {
51
+ const close = matchParen(content, i);
52
+ if (close < 0)
53
+ break;
54
+ i = close + 1;
55
+ }
56
+ }
57
+ return { pos: i, names };
58
+ }
59
+ function scanNest(file, content, globalPrefix, out) {
60
+ const ctrlRe = /@Controller\s*\(/g;
61
+ const controllers = [];
62
+ for (let m = ctrlRe.exec(content); m; m = ctrlRe.exec(content)) {
63
+ const open = m.index + m[0].length - 1;
64
+ const close = matchParen(content, open);
65
+ if (close < 0)
66
+ continue;
67
+ const after = skipDecorators(content, close + 1);
68
+ const cls = content.slice(after.pos).match(/^(?:export\s+)?(?:default\s+)?(?:abstract\s+)?class\s+(\w+)/);
69
+ // decorators antes de @Controller (até o fim do statement anterior)
70
+ const before = content.slice(Math.max(0, content.lastIndexOf(';', m.index) + 1, content.lastIndexOf('}', m.index) + 1), m.index);
71
+ const decos = [...before.matchAll(/@([\w.]+)/g)].map((d) => d[1] ?? '').concat(after.names);
72
+ const guarded = decos.some((d) => /^Public$|^SkipAuth$|^AllowAnonymous$/i.test(d)) ? false : decos.some((d) => /UseGuards|^Auth$|Authenticated|Roles|ApiBearerAuth/.test(d)) ? true : null;
73
+ controllers.push({ index: m.index, path: controllerPath(content.slice(open + 1, close)), className: cls?.[1] ?? null, guarded, bodyStart: after.pos });
74
+ }
75
+ controllers.forEach((ctrl, ci) => {
76
+ const end = controllers[ci + 1]?.index ?? content.length;
77
+ const region = content.slice(ctrl.bodyStart, end);
78
+ const methodRe = /@(Get|Post|Put|Patch|Delete|Head|Options|All)\s*\(/g;
79
+ let lastEnd = 0;
80
+ for (let m = methodRe.exec(region); m; m = methodRe.exec(region)) {
81
+ const absOpen = ctrl.bodyStart + m.index + m[0].length - 1;
82
+ const absClose = matchParen(content, absOpen);
83
+ if (absClose < 0)
84
+ continue;
85
+ const routePath = stringLiteral(content.slice(absOpen + 1, absClose)) ?? '';
86
+ const after = skipDecorators(content, absClose + 1);
87
+ const sig = content.slice(after.pos).match(/^(?:(?:public|private|protected|static|async|override)\s+)*(\w+)\s*(?:<[^>]*>)?\s*\(/);
88
+ let handler = null;
89
+ let dto = null;
90
+ let paramsEnd = absClose;
91
+ if (sig) {
92
+ handler = sig[1] ?? null;
93
+ const pOpen = after.pos + sig[0].length - 1;
94
+ const pClose = matchParen(content, pOpen);
95
+ if (pClose > 0) {
96
+ paramsEnd = pClose;
97
+ const params = content.slice(pOpen + 1, pClose);
98
+ const body = params.match(/@Body\s*\([^)]*\)\s*(?:\w+)\s*[?]?\s*:\s*([A-Z][\w]*)/);
99
+ const query = params.match(/@Query\s*\(\s*\)\s*(?:\w+)\s*[?]?\s*:\s*([A-Z][\w]*)/);
100
+ dto = body?.[1] ?? query?.[1] ?? null;
101
+ }
102
+ }
103
+ const window = region.slice(lastEnd, m.index) + content.slice(absClose + 1, after.pos);
104
+ lastEnd = paramsEnd - ctrl.bodyStart;
105
+ let guarded = ctrl.guarded;
106
+ if (/@(Public|SkipAuth|AllowAnonymous)\b/.test(window))
107
+ guarded = false;
108
+ else if (/@(UseGuards|Auth|Roles|ApiBearerAuth)\b/.test(window))
109
+ guarded = true;
110
+ const path = normalizePath(globalPrefix, ctrl.path, routePath);
111
+ out.push({
112
+ method: NEST_METHODS[m[1] ?? ''] ?? 'GET',
113
+ path,
114
+ file,
115
+ line: lineOf(content, ctrl.bodyStart + m.index),
116
+ framework: 'nestjs',
117
+ controller: ctrl.className,
118
+ handler,
119
+ dto,
120
+ guarded,
121
+ externalEffect: isExternal(path),
122
+ });
123
+ }
124
+ });
125
+ }
126
+ function scanExpress(file, content, out) {
127
+ const re = /\b([A-Za-z_$][\w$]*)\s*\.\s*(get|post|put|patch|delete|all|head|options)\s*\(\s*(['"`])(\/[^'"`]*)\3/g;
128
+ for (let m = re.exec(content); m; m = re.exec(content)) {
129
+ if (!EXPRESS_RECEIVER.test(m[1] ?? ''))
130
+ continue;
131
+ const open = content.indexOf('(', m.index + (m[1] ?? '').length);
132
+ const close = matchParen(content, open);
133
+ const args = close > 0 ? content.slice(open + 1, close) : '';
134
+ const rest = args.slice(args.indexOf(m[4] ?? '') + (m[4] ?? '').length + 1);
135
+ const middlewares = rest.split(/=>|function\s*\(|async\s*\(/)[0] ?? '';
136
+ const path = m[4] ?? '/';
137
+ out.push({ method: (m[2] ?? 'get').toUpperCase(), path, file, line: lineOf(content, m.index), framework: 'express', controller: null, handler: null, dto: null, guarded: GUARD_WORDS.test(middlewares) ? true : null, externalEffect: isExternal(path) });
138
+ }
139
+ // router.route('/x').get(...).post(...)
140
+ const routeRe = /\b([A-Za-z_$][\w$]*)\s*\.\s*route\s*\(\s*(['"`])(\/[^'"`]*)\2\s*\)/g;
141
+ for (let m = routeRe.exec(content); m; m = routeRe.exec(content)) {
142
+ if (!EXPRESS_RECEIVER.test(m[1] ?? ''))
143
+ continue;
144
+ let i = m.index + m[0].length;
145
+ for (;;) {
146
+ const chained = content.slice(i).match(/^\s*\.\s*(get|post|put|patch|delete|all)\s*\(/);
147
+ if (!chained)
148
+ break;
149
+ const open = i + chained[0].length - 1;
150
+ const close = matchParen(content, open);
151
+ const path = m[3] ?? '/';
152
+ const args = close > 0 ? content.slice(open + 1, close) : '';
153
+ out.push({ method: (chained[1] ?? 'get').toUpperCase(), path, file, line: lineOf(content, i), framework: 'express', controller: null, handler: null, dto: null, guarded: GUARD_WORDS.test(args.split(/=>|function\s*\(/)[0] ?? '') ? true : null, externalEffect: isExternal(path) });
154
+ if (close < 0)
155
+ break;
156
+ i = close + 1;
157
+ }
158
+ }
159
+ }
160
+ function nextSegments(rel) {
161
+ return rel
162
+ .split('/')
163
+ .filter((seg) => seg && !/^\(.*\)$/.test(seg) && !seg.startsWith('@'))
164
+ .map((seg) => seg.replace(/^\[\[\.\.\.(\w+)\]\]$/, ':$1*?').replace(/^\[\.\.\.(\w+)\]$/, ':$1*').replace(/^\[(\w+)\]$/, ':$1'))
165
+ .join('/');
166
+ }
167
+ function scanNextApp(file, content, out) {
168
+ const m = file.match(/(?:^|\/)app\/(.*?)\/?route\.(?:ts|js|mjs|tsx|jsx)$/);
169
+ if (!m)
170
+ return;
171
+ const path = normalizePath(nextSegments(m[1] ?? ''));
172
+ const guarded = NEXT_GUARD.test(content) ? true : null;
173
+ const re = /export\s+(?:async\s+)?function\s+(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)\b|export\s+const\s+(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)\s*=|\bas\s+(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)\b/g;
174
+ for (let x = re.exec(content); x; x = re.exec(content)) {
175
+ const method = x[1] ?? x[2] ?? x[3] ?? 'GET';
176
+ out.push({ method, path, file, line: lineOf(content, x.index), framework: 'nextjs-app', controller: null, handler: method, dto: null, guarded, externalEffect: isExternal(path) });
177
+ }
178
+ }
179
+ function scanNextPages(file, content, out) {
180
+ const m = file.match(/(?:^|\/)pages\/(api\/.*?)(?:\/index)?\.(?:ts|js|mjs|tsx|jsx)$/);
181
+ if (!m || !/export\s+default/.test(content))
182
+ return;
183
+ const path = normalizePath(nextSegments(m[1] ?? ''));
184
+ const methods = [...new Set([...content.matchAll(/method\s*===?\s*['"](GET|POST|PUT|PATCH|DELETE)['"]/g)].map((x) => x[1] ?? 'GET'))];
185
+ const guarded = NEXT_GUARD.test(content) ? true : null;
186
+ for (const method of methods.length ? methods : ['ALL']) {
187
+ out.push({ method, path, file, line: 1, framework: 'nextjs-pages', controller: null, handler: 'default', dto: null, guarded, externalEffect: isExternal(path) });
188
+ }
189
+ }
190
+ function matchBrace(content, openIndex) {
191
+ let depth = 0;
192
+ for (let i = openIndex; i < content.length; i++) {
193
+ const c = content[i];
194
+ if (c === '{')
195
+ depth++;
196
+ else if (c === '}') {
197
+ depth--;
198
+ if (depth === 0)
199
+ return i;
200
+ }
201
+ }
202
+ return -1;
203
+ }
204
+ function scanDtos(file, content, out) {
205
+ const re = /(?:export\s+)?class\s+(\w+(?:Dto|DTO|Input|Request|Body|Payload))\b[^{]*\{/g;
206
+ for (let m = re.exec(content); m; m = re.exec(content)) {
207
+ const open = m.index + m[0].length - 1;
208
+ const close = matchBrace(content, open);
209
+ if (close < 0)
210
+ continue;
211
+ const body = content.slice(open + 1, close);
212
+ const fields = [...new Set([...body.matchAll(/^\s*(?:readonly\s+|public\s+)?(\w+)\s*[?!]?\s*:\s*[^;\n(]+[;\n]/gm)].map((f) => f[1] ?? '').filter(Boolean))];
213
+ out.push({ name: m[1] ?? '', file, line: lineOf(content, m.index), fields: fields.slice(0, 40) });
214
+ }
215
+ }
216
+ const LOGIN_RE = /(^|\/)(login|signin|sign-in|log-in|authenticate|sessions?|oauth\/token|auth\/token|token)(\/|$)/i;
217
+ const REFRESH_RE = /refresh/i;
218
+ const SIGNUP_RE = /(^|\/)(register|signup|sign-up)(\/|$)/i;
219
+ const LOGOUT_RE = /(^|\/)(logout|signout|sign-out|log-out)(\/|$)/i;
220
+ const MECHANISMS = [
221
+ ['jwt', /jsonwebtoken|@nestjs\/jwt|passport-jwt|\bjose\b|jwtVerify|JwtService|Bearer\s/],
222
+ ['cookie', /cookie-parser|res\.cookie\(|cookies\(\)\.set|set-cookie|httpOnly\s*:/i],
223
+ ['session', /express-session|@fastify\/session|iron-session|req\.session\b/],
224
+ ['api-key', /x-api-key|apiKey\s*header|ApiKeyGuard/i],
225
+ ];
226
+ const PROVIDERS = [
227
+ ['next-auth', /from\s+['"](next-auth|@auth\/)/],
228
+ ['clerk', /from\s+['"]@clerk\//],
229
+ ['cognito', /amazon-cognito|@aws-sdk\/client-cognito|aws-amplify/],
230
+ ['supabase', /from\s+['"]@supabase\//],
231
+ ['firebase', /firebase-admin|firebase\/auth/],
232
+ ['auth0', /auth0/i],
233
+ ['better-auth', /better-auth/],
234
+ ['lucia', /from\s+['"]lucia['"]/],
235
+ ];
236
+ export async function scanRoutes(root, options = {}) {
237
+ const { files, truncated } = await walkFiles(root, { maxFiles: options.maxFiles ?? 8000 });
238
+ const sources = files.filter((f) => isSourceFile(f) && !isTestFile(f));
239
+ const routes = [];
240
+ const dtos = [];
241
+ const warnings = [];
242
+ const mechanisms = new Set();
243
+ const providers = new Set();
244
+ const tokenFields = new Set();
245
+ const evidence = [];
246
+ let globalGuard = false;
247
+ let globalPrefix = null;
248
+ const contents = new Map();
249
+ for (const file of sources) {
250
+ const content = await readText(join(root, file));
251
+ if (content === null)
252
+ continue;
253
+ contents.set(file, content);
254
+ const prefix = content.match(/setGlobalPrefix\s*\(\s*(['"`])([^'"`]+)\1/);
255
+ if (prefix && globalPrefix === null) {
256
+ globalPrefix = prefix[2] ?? null;
257
+ evidence.push(`${file}:${lineOf(content, prefix.index ?? 0)} setGlobalPrefix('${globalPrefix}')`);
258
+ }
259
+ if (/provide\s*:\s*APP_GUARD/.test(content)) {
260
+ globalGuard = true;
261
+ evidence.push(`${file}:${lineOf(content, content.search(/provide\s*:\s*APP_GUARD/))} guard global (APP_GUARD)`);
262
+ }
263
+ }
264
+ for (const [file, content] of contents) {
265
+ if (/@Controller\s*\(/.test(content))
266
+ scanNest(file, content, globalPrefix, routes);
267
+ if (/\.\s*(get|post|put|patch|delete|all|route)\s*\(/.test(content))
268
+ scanExpress(file, content, routes);
269
+ if (/(?:^|\/)route\.(?:ts|js|mjs|tsx|jsx)$/.test(file))
270
+ scanNextApp(file, content, routes);
271
+ if (/(?:^|\/)pages\/api\//.test(file))
272
+ scanNextPages(file, content, routes);
273
+ if (/class\s+\w+(Dto|DTO|Input|Request|Body|Payload)\b/.test(content))
274
+ scanDtos(file, content, dtos);
275
+ for (const [name, re] of MECHANISMS)
276
+ if (re.test(content))
277
+ mechanisms.add(name);
278
+ for (const [name, re] of PROVIDERS)
279
+ if (re.test(content))
280
+ providers.add(name);
281
+ }
282
+ // Guard global: rotas Nest sem marcação explícita provavelmente exigem auth.
283
+ if (globalGuard)
284
+ for (const r of routes)
285
+ if (r.framework === 'nestjs' && r.guarded === null)
286
+ r.guarded = true;
287
+ const seen = new Set();
288
+ const unique = routes.filter((r) => {
289
+ const key = `${r.method} ${r.path} ${r.file}:${r.line}`;
290
+ if (seen.has(key))
291
+ return false;
292
+ seen.add(key);
293
+ return true;
294
+ });
295
+ const describe = (r) => `${r.method} ${r.path} (${r.file}:${r.line}${r.dto ? `, ${r.dto}` : ''})`;
296
+ const loginRoutes = unique.filter((r) => r.method !== 'GET' && LOGIN_RE.test(r.path) && !REFRESH_RE.test(r.path) && !LOGOUT_RE.test(r.path));
297
+ for (const r of loginRoutes) {
298
+ const content = contents.get(r.file) ?? '';
299
+ for (const f of content.matchAll(/\b(accessToken|access_token|refreshToken|refresh_token|idToken|id_token|token|jwt|sessionToken)\s*[:,]/g))
300
+ tokenFields.add(f[1] ?? '');
301
+ }
302
+ if (loginRoutes.length === 0 && unique.length > 0)
303
+ warnings.push('Nenhuma rota de login encontrada: a aplicação pode usar provedor externo (veja providers) ou login fora deste repositório.');
304
+ if (providers.size)
305
+ warnings.push(`Autenticação por provedor externo (${[...providers].join(', ')}): o login pode não ser um POST simples — prefira um endpoint de token de teste ou credenciais de API do provedor em modo de teste.`);
306
+ if (truncated)
307
+ warnings.push('Varredura truncada (muitos arquivos): passe `path` apontando para o app/serviço.');
308
+ unique.sort((a, b) => a.path.localeCompare(b.path) || a.method.localeCompare(b.method));
309
+ return {
310
+ root,
311
+ filesScanned: sources.length,
312
+ truncated,
313
+ routes: unique,
314
+ dtos,
315
+ auth: {
316
+ loginEndpoints: loginRoutes.map(describe),
317
+ refreshEndpoints: unique.filter((r) => REFRESH_RE.test(r.path)).map(describe),
318
+ signupEndpoints: unique.filter((r) => SIGNUP_RE.test(r.path)).map(describe),
319
+ logoutEndpoints: unique.filter((r) => LOGOUT_RE.test(r.path)).map(describe),
320
+ mechanisms: [...mechanisms],
321
+ providers: [...providers],
322
+ tokenFields: [...tokenFields],
323
+ globalGuard,
324
+ globalPrefix,
325
+ evidence,
326
+ },
327
+ warnings,
328
+ };
329
+ }
330
+ /** Texto compacto para o agente (rotas agrupadas por arquivo, DTOs referenciados e auth). */
331
+ export function formatRouteScan(scan, maxRoutes = 150) {
332
+ const lines = [`${scan.routes.length} rota(s) em ${scan.filesScanned} arquivo(s) de código (${scan.root}).`];
333
+ const shown = scan.routes.slice(0, maxRoutes);
334
+ for (const r of shown) {
335
+ const flags = [r.guarded === true ? 'auth' : r.guarded === false ? 'pública' : null, r.externalEffect ? '⚠ efeito externo' : null].filter(Boolean).join(', ');
336
+ const where = [r.controller && r.handler ? `${r.controller}.${r.handler}` : r.handler, r.dto ? `dto ${r.dto}` : null].filter(Boolean).join(' · ');
337
+ lines.push(`- ${r.method.padEnd(6)} ${r.path} ${r.file}:${r.line}${where ? ` ${where}` : ''}${flags ? ` [${flags}]` : ''}`);
338
+ }
339
+ if (scan.routes.length > shown.length)
340
+ lines.push(`- … +${scan.routes.length - shown.length} rotas (passe \`path\` de um app específico)`);
341
+ const referenced = new Set(scan.routes.map((r) => r.dto).filter(Boolean));
342
+ const dtos = scan.dtos.filter((d) => referenced.has(d.name)).slice(0, 40);
343
+ if (dtos.length) {
344
+ lines.push('', 'DTOs usados pelas rotas:');
345
+ for (const d of dtos)
346
+ lines.push(`- ${d.name} (${d.file}:${d.line}): ${d.fields.join(', ') || '—'}`);
347
+ }
348
+ const a = scan.auth;
349
+ lines.push('', 'Autenticação:');
350
+ lines.push(`- login: ${a.loginEndpoints.join('; ') || '—'}`);
351
+ if (a.refreshEndpoints.length)
352
+ lines.push(`- refresh: ${a.refreshEndpoints.join('; ')}`);
353
+ if (a.signupEndpoints.length)
354
+ lines.push(`- cadastro: ${a.signupEndpoints.join('; ')}`);
355
+ if (a.logoutEndpoints.length)
356
+ lines.push(`- logout: ${a.logoutEndpoints.join('; ')}`);
357
+ lines.push(`- mecanismos: ${a.mechanisms.join(', ') || '—'}${a.tokenFields.length ? ` · campos de token: ${a.tokenFields.join(', ')}` : ''}`);
358
+ if (a.providers.length)
359
+ lines.push(`- provedores externos: ${a.providers.join(', ')}`);
360
+ if (a.globalPrefix)
361
+ lines.push(`- prefixo global: /${a.globalPrefix} (já aplicado às rotas NestJS)`);
362
+ if (a.globalGuard)
363
+ lines.push('- guard global (APP_GUARD): rotas NestJS sem @Public() exigem auth');
364
+ if (a.evidence.length)
365
+ lines.push(...a.evidence.map((e) => ` · ${e}`));
366
+ if (scan.warnings.length)
367
+ lines.push('', 'Avisos:', ...scan.warnings.map((w) => `- ${w}`));
368
+ return lines.join('\n');
369
+ }
370
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/loadtest/routes.ts"],"names":[],"mappings":"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"}