@christopher_dondici/mcp-gen 2.1.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.
Files changed (72) hide show
  1. package/CHANGELOG.md +217 -0
  2. package/LICENSE +21 -0
  3. package/README.md +439 -0
  4. package/README.pt-BR.md +320 -0
  5. package/RELEASE_NOTES.md +98 -0
  6. package/SECURITY.md +75 -0
  7. package/SECURITY.pt-BR.md +77 -0
  8. package/dist/cli/index.d.ts +3 -0
  9. package/dist/cli/index.d.ts.map +1 -0
  10. package/dist/cli/index.js +685 -0
  11. package/dist/cli/index.js.map +1 -0
  12. package/dist/core/generator.d.ts +4 -0
  13. package/dist/core/generator.d.ts.map +1 -0
  14. package/dist/core/generator.js +275 -0
  15. package/dist/core/generator.js.map +1 -0
  16. package/dist/core/incremental.d.ts +25 -0
  17. package/dist/core/incremental.d.ts.map +1 -0
  18. package/dist/core/incremental.js +91 -0
  19. package/dist/core/incremental.js.map +1 -0
  20. package/dist/core/parser.d.ts +3 -0
  21. package/dist/core/parser.d.ts.map +1 -0
  22. package/dist/core/parser.js +372 -0
  23. package/dist/core/parser.js.map +1 -0
  24. package/dist/core/registry.d.ts +13 -0
  25. package/dist/core/registry.d.ts.map +1 -0
  26. package/dist/core/registry.js +107 -0
  27. package/dist/core/registry.js.map +1 -0
  28. package/dist/core/security-lint.d.ts +53 -0
  29. package/dist/core/security-lint.d.ts.map +1 -0
  30. package/dist/core/security-lint.js +470 -0
  31. package/dist/core/security-lint.js.map +1 -0
  32. package/dist/core/security.d.ts +41 -0
  33. package/dist/core/security.d.ts.map +1 -0
  34. package/dist/core/security.js +150 -0
  35. package/dist/core/security.js.map +1 -0
  36. package/dist/core/templating.d.ts +5 -0
  37. package/dist/core/templating.d.ts.map +1 -0
  38. package/dist/core/templating.js +211 -0
  39. package/dist/core/templating.js.map +1 -0
  40. package/dist/core/types.d.ts +104 -0
  41. package/dist/core/types.d.ts.map +1 -0
  42. package/dist/core/types.js +3 -0
  43. package/dist/core/types.js.map +1 -0
  44. package/dist/index.d.ts +7 -0
  45. package/dist/index.d.ts.map +1 -0
  46. package/dist/index.js +20 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/templates/go/Dockerfile.hbs +16 -0
  49. package/dist/templates/go/README.md.hbs +77 -0
  50. package/dist/templates/go/ci.yml.hbs +28 -0
  51. package/dist/templates/go/client.go.hbs +86 -0
  52. package/dist/templates/go/go.mod.hbs +5 -0
  53. package/dist/templates/go/models.go.hbs +28 -0
  54. package/dist/templates/go/server.go.hbs +220 -0
  55. package/dist/templates/python/Dockerfile.hbs +12 -0
  56. package/dist/templates/python/README.md.hbs +115 -0
  57. package/dist/templates/python/ci.yml.hbs +24 -0
  58. package/dist/templates/python/models.py.hbs +20 -0
  59. package/dist/templates/python/requirements.txt.hbs +3 -0
  60. package/dist/templates/python/server.py.hbs +195 -0
  61. package/dist/templates/typescript/Dockerfile.hbs +18 -0
  62. package/dist/templates/typescript/README.md.hbs +91 -0
  63. package/dist/templates/typescript/ci.yml.hbs +28 -0
  64. package/dist/templates/typescript/client.hbs +49 -0
  65. package/dist/templates/typescript/models.hbs +23 -0
  66. package/dist/templates/typescript/package.json.hbs +26 -0
  67. package/dist/templates/typescript/server.hbs +337 -0
  68. package/dist/templates/typescript/tsconfig.json.hbs +17 -0
  69. package/examples/petstore.json +130 -0
  70. package/examples/petstore.yaml +131 -0
  71. package/examples/week3.json +47 -0
  72. package/package.json +64 -0
@@ -0,0 +1,470 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.EXPECTED_AUTH_CONTEXT_FIELDS = exports.RESERVED_TOOL_NAMES = exports.RAW_CREDENTIAL_KEYWORDS = void 0;
7
+ exports.scanForCredentials = scanForCredentials;
8
+ exports.validateAuthContext = validateAuthContext;
9
+ exports.validateToolPolicies = validateToolPolicies;
10
+ exports.lintNaming = lintNaming;
11
+ exports.lintDescriptions = lintDescriptions;
12
+ exports.lintIncrementalMarkers = lintIncrementalMarkers;
13
+ exports.lintSchemas = lintSchemas;
14
+ exports.scanProject = scanProject;
15
+ exports.formatReport = formatReport;
16
+ const path_1 = __importDefault(require("path"));
17
+ const fs_1 = __importDefault(require("fs"));
18
+ /** Keywords that indicate raw credentials (blocked by default) */
19
+ exports.RAW_CREDENTIAL_KEYWORDS = [
20
+ "authorization",
21
+ "token",
22
+ "access_token",
23
+ "api_key",
24
+ "apikey",
25
+ "x-api-key",
26
+ "x_api_key",
27
+ "client_secret",
28
+ "client_id",
29
+ "refresh_token",
30
+ "password",
31
+ "secret",
32
+ "bearer",
33
+ "basic",
34
+ "jwt",
35
+ "private_key",
36
+ "ssh_key",
37
+ ];
38
+ /** Reserved words that shouldn't be tool names */
39
+ exports.RESERVED_TOOL_NAMES = [
40
+ "new", "delete", "class", "function", "var", "let", "const",
41
+ "if", "else", "for", "while", "switch", "case", "default",
42
+ "try", "catch", "finally", "throw", "return", "await",
43
+ "async", "yield", "import", "export", "from", "as",
44
+ "typeof", "instanceof", "in", "of", "void", "null",
45
+ "undefined", "true", "false", "this", "super", "extends",
46
+ "implements", "interface", "type", "enum", "package",
47
+ "private", "protected", "public", "static", "abstract",
48
+ ];
49
+ /** Expected authContext fields */
50
+ exports.EXPECTED_AUTH_CONTEXT_FIELDS = [
51
+ "tokenId",
52
+ "principal",
53
+ "expiresAt",
54
+ "allowedTools",
55
+ "endpointAllowlist",
56
+ "spendLimitUsd",
57
+ "spendUsedUsd",
58
+ "revoked",
59
+ "requestId",
60
+ ];
61
+ /** Scan a string for credential-like patterns */
62
+ function scanForCredentials(content, filePath = "unknown") {
63
+ const rules = [];
64
+ const lines = content.split("\n");
65
+ for (let i = 0; i < lines.length; i++) {
66
+ const line = lines[i];
67
+ const lowerLine = line.toLowerCase();
68
+ // Check for credential keywords
69
+ for (const keyword of exports.RAW_CREDENTIAL_KEYWORDS) {
70
+ const regex = new RegExp(`\\b${keyword}\\b`, "i");
71
+ if (regex.test(lowerLine)) {
72
+ // Skip if it's in a comment about blocking credentials
73
+ if (lowerLine.includes("block") || lowerLine.includes("deny") ||
74
+ lowerLine.includes("not allowed") || lowerLine.includes("forbidden") ||
75
+ lowerLine.includes("raw_credential") || lowerLine.includes("rawcredential")) {
76
+ continue;
77
+ }
78
+ rules.push({
79
+ id: `SEC-CRED-${keyword.toUpperCase()}`,
80
+ severity: "warning",
81
+ category: "credentials",
82
+ message: `Potential raw credential keyword "${keyword}" found`,
83
+ file: filePath,
84
+ line: i + 1,
85
+ suggestion: "Use authContext scoped metadata instead of raw credentials",
86
+ });
87
+ }
88
+ }
89
+ // Check for actual secret patterns (high entropy strings, common prefixes)
90
+ const secretPatterns = [
91
+ { pattern: /sk_[a-zA-Z0-9]{20,}/g, type: "sk_" },
92
+ { pattern: /pk_[a-zA-Z0-9]{20,}/g, type: "pk_" },
93
+ { pattern: /ghp_[a-zA-Z0-9]{36}/g, type: "github_pat" },
94
+ { pattern: /gho_[a-zA-Z0-9]{36}/g, type: "github_oauth" },
95
+ { pattern: /ghu_[a-zA-Z0-9]{36}/g, type: "github_user" },
96
+ { pattern: /glpat-[a-zA-Z0-9]{20,}/g, type: "gitlab_pat" },
97
+ { pattern: /xoxb-[a-zA-Z0-9-]{20,}/g, type: "slack_bot" },
98
+ { pattern: /xoxp-[a-zA-Z0-9-]{20,}/g, type: "slack_user" },
99
+ { pattern: /ya29\.[a-zA-Z0-9_-]{20,}/g, type: "google_oauth" },
100
+ { pattern: /eyJ[a-zA-Z0-9_-]{10,}\.[a-zA-Z0-9_-]{10,}\.[a-zA-Z0-9_-]{10,}/g, type: "jwt" },
101
+ { pattern: /AKIA[0-9A-Z]{16}/g, type: "aws_access_key" },
102
+ { pattern: /[a-zA-Z0-9/+=]{40}/g, type: "base64_secret" },
103
+ ];
104
+ for (const { pattern, type } of secretPatterns) {
105
+ const matches = line.match(pattern);
106
+ if (matches) {
107
+ rules.push({
108
+ id: `SEC-SECRET-${type.toUpperCase()}`,
109
+ severity: "error",
110
+ category: "credentials",
111
+ message: `Potential ${type} secret detected`,
112
+ file: filePath,
113
+ line: i + 1,
114
+ suggestion: "Remove secrets from source code; use environment variables or secret manager",
115
+ });
116
+ }
117
+ }
118
+ }
119
+ return rules;
120
+ }
121
+ /** Validate authContext structure in generated code */
122
+ function validateAuthContext(content, filePath = "unknown") {
123
+ const rules = [];
124
+ const lines = content.split("\n");
125
+ let hasAuthContextParam = false;
126
+ let hasAuthContextValidation = false;
127
+ for (let i = 0; i < lines.length; i++) {
128
+ const line = lines[i];
129
+ // Check for auth_context parameter in tool handlers
130
+ if (line.includes("auth_context") || line.includes("authContext")) {
131
+ hasAuthContextParam = true;
132
+ }
133
+ // Check for require_security or similar validation call
134
+ if (line.includes("require_security") || line.includes("requireSecurity") ||
135
+ line.includes("validate_auth") || line.includes("validateAuth")) {
136
+ hasAuthContextValidation = true;
137
+ }
138
+ }
139
+ if (hasAuthContextParam && !hasAuthContextValidation) {
140
+ rules.push({
141
+ id: "SEC-AUTHCTX-NO-VALIDATION",
142
+ severity: "warning",
143
+ category: "authcontext",
144
+ message: "authContext parameter present but no validation call found",
145
+ file: filePath,
146
+ suggestion: "Call require_security() or validateAuth() with authContext",
147
+ });
148
+ }
149
+ return rules;
150
+ }
151
+ /** Validate tool policies are defined */
152
+ function validateToolPolicies(content, filePath = "unknown") {
153
+ const rules = [];
154
+ const lines = content.split("\n");
155
+ let hasToolPolicies = false;
156
+ let hasRawCredentialCheck = false;
157
+ for (let i = 0; i < lines.length; i++) {
158
+ const line = lines[i];
159
+ if (line.includes("TOOL_POLICIES") || line.includes("toolPolicies")) {
160
+ hasToolPolicies = true;
161
+ }
162
+ if (line.includes("RAW_CREDENTIAL_KEYS") || line.includes("rawCredentialKeys")) {
163
+ hasRawCredentialCheck = true;
164
+ }
165
+ }
166
+ if (!hasToolPolicies) {
167
+ rules.push({
168
+ id: "LINT-NO-TOOL-POLICIES",
169
+ severity: "info",
170
+ category: "policy",
171
+ message: "No TOOL_POLICIES defined — consider adding per-tool security policies",
172
+ file: filePath,
173
+ suggestion: "Define toolPolicies with requires_ttl, requires_spend_limit, etc.",
174
+ });
175
+ }
176
+ if (!hasRawCredentialCheck) {
177
+ rules.push({
178
+ id: "LINT-NO-RAW-CREDENTIAL-CHECK",
179
+ severity: "warning",
180
+ category: "credentials",
181
+ message: "No raw credential keyword blocking defined",
182
+ file: filePath,
183
+ suggestion: "Add RAW_CREDENTIAL_KEYS set and check in require_security",
184
+ });
185
+ }
186
+ return rules;
187
+ }
188
+ /** Lint naming conventions */
189
+ function lintNaming(content, filePath = "unknown") {
190
+ const rules = [];
191
+ const lines = content.split("\n");
192
+ for (let i = 0; i < lines.length; i++) {
193
+ const line = lines[i];
194
+ // Check for snake_case function names in TypeScript (should be camelCase)
195
+ if (filePath.endsWith(".ts") || filePath.endsWith(".js")) {
196
+ const fnMatch = line.match(/^\s*(async\s+)?function\s+([a-z_][a-z0-9_]*)/);
197
+ if (fnMatch && fnMatch[2].includes("_")) {
198
+ rules.push({
199
+ id: "LINT-TS-SNAKE-CASE",
200
+ severity: "info",
201
+ category: "lint",
202
+ message: `Function "${fnMatch[2]}" uses snake_case; prefer camelCase in TypeScript`,
203
+ file: filePath,
204
+ line: i + 1,
205
+ suggestion: "Rename to camelCase (e.g., get_user → getUser)",
206
+ });
207
+ }
208
+ }
209
+ // Check for PascalCase variable names
210
+ const varMatch = line.match(/(?:const|let|var)\s+([A-Z][a-zA-Z0-9]*)\s*=/);
211
+ if (varMatch && !varMatch[1].match(/^[A-Z_]+$/)) {
212
+ // Allow UPPER_CASE constants
213
+ rules.push({
214
+ id: "LINT-PASCAL-VAR",
215
+ severity: "info",
216
+ category: "lint",
217
+ message: `Variable "${varMatch[1]}" uses PascalCase; prefer camelCase`,
218
+ file: filePath,
219
+ line: i + 1,
220
+ suggestion: "Use camelCase for variables",
221
+ });
222
+ }
223
+ }
224
+ return rules;
225
+ }
226
+ /** Lint descriptions */
227
+ function lintDescriptions(content, filePath = "unknown") {
228
+ const rules = [];
229
+ const lines = content.split("\n");
230
+ for (let i = 0; i < lines.length; i++) {
231
+ const line = lines[i];
232
+ // Check for empty descriptions in tool definitions
233
+ if (line.includes("WithDescription") || line.includes("withDescription")) {
234
+ if (line.includes('""') || line.includes("''") || line.includes('""') ||
235
+ line.match(/WithDescription\(\s*\)/)) {
236
+ rules.push({
237
+ id: "LINT-EMPTY-DESCRIPTION",
238
+ severity: "warning",
239
+ category: "lint",
240
+ message: "Empty description found",
241
+ file: filePath,
242
+ line: i + 1,
243
+ suggestion: "Provide a meaningful description for the tool/parameter",
244
+ });
245
+ }
246
+ }
247
+ // Check for TODO/FIXME in generated code
248
+ if (line.match(/TODO|FIXME|XXX|HACK/i)) {
249
+ rules.push({
250
+ id: "LINT-TODO-IN-GENERATED",
251
+ severity: "info",
252
+ category: "lint",
253
+ message: "TODO/FIXME comment in generated code",
254
+ file: filePath,
255
+ line: i + 1,
256
+ suggestion: "Remove or resolve before production",
257
+ });
258
+ }
259
+ }
260
+ return rules;
261
+ }
262
+ /** Lint incremental markers */
263
+ function lintIncrementalMarkers(content, filePath = "unknown") {
264
+ const rules = [];
265
+ const lines = content.split("\n");
266
+ let startCount = 0;
267
+ let endCount = 0;
268
+ const startLines = [];
269
+ const endLines = [];
270
+ for (let i = 0; i < lines.length; i++) {
271
+ const line = lines[i];
272
+ if (line.includes("@@mcp-gen:start:")) {
273
+ startCount++;
274
+ startLines.push(i + 1);
275
+ }
276
+ if (line.includes("@@mcp-gen:end:")) {
277
+ endCount++;
278
+ endLines.push(i + 1);
279
+ }
280
+ }
281
+ if (startCount !== endCount) {
282
+ rules.push({
283
+ id: "LINT-UNBALANCED-MARKERS",
284
+ severity: "error",
285
+ category: "lint",
286
+ message: `Unbalanced incremental markers: ${startCount} start, ${endCount} end`,
287
+ file: filePath,
288
+ suggestion: "Each @@mcp-gen:start: must have matching @@mcp-gen:end:",
289
+ });
290
+ }
291
+ // Check for nested markers (which shouldn't happen)
292
+ for (const start of startLines) {
293
+ const matchingEnd = endLines.find(e => e > start);
294
+ if (matchingEnd) {
295
+ const between = lines.slice(start, matchingEnd);
296
+ const nestedStart = between.findIndex(l => l.includes("@@mcp-gen:start:"));
297
+ if (nestedStart >= 0) {
298
+ rules.push({
299
+ id: "LINT-NESTED-MARKERS",
300
+ severity: "warning",
301
+ category: "lint",
302
+ message: "Nested incremental markers detected",
303
+ file: filePath,
304
+ line: start + nestedStart,
305
+ suggestion: "Flatten marker structure; one start/end per tool",
306
+ });
307
+ }
308
+ }
309
+ }
310
+ return rules;
311
+ }
312
+ /** Lint schema usage */
313
+ function lintSchemas(spec, filePath = "spec") {
314
+ const rules = [];
315
+ if (!spec.paths)
316
+ return rules;
317
+ for (const [path, pathItem] of Object.entries(spec.paths)) {
318
+ if (!pathItem)
319
+ continue;
320
+ const methods = ["get", "post", "put", "patch", "delete", "head", "options", "trace"];
321
+ for (const method of methods) {
322
+ const op = pathItem[method];
323
+ if (!op)
324
+ continue;
325
+ // Check for missing summary/description
326
+ if (!op.summary && !op.description) {
327
+ rules.push({
328
+ id: "LINT-NO-OP-DESCRIPTION",
329
+ severity: "warning",
330
+ category: "lint",
331
+ message: `Operation ${method.toUpperCase()} ${path} has no summary or description`,
332
+ file: filePath,
333
+ suggestion: "Add summary and description for better generated tool docs",
334
+ });
335
+ }
336
+ // Check for missing examples in responses
337
+ if (op.responses) {
338
+ for (const [status, response] of Object.entries(op.responses)) {
339
+ if (response && "content" in response) {
340
+ const resp = response;
341
+ if (resp.content) {
342
+ for (const media of Object.values(resp.content)) {
343
+ if (media && !media.example && !media.examples) {
344
+ rules.push({
345
+ id: "LINT-NO-RESPONSE-EXAMPLE",
346
+ severity: "info",
347
+ category: "lint",
348
+ message: `Response ${status} for ${method.toUpperCase()} ${path} has no example`,
349
+ file: filePath,
350
+ suggestion: "Add example to enable stub handlers",
351
+ });
352
+ }
353
+ }
354
+ }
355
+ }
356
+ }
357
+ }
358
+ }
359
+ }
360
+ return rules;
361
+ }
362
+ /** Main security/lint scan for a generated project */
363
+ async function scanProject(projectPath) {
364
+ const allRules = [];
365
+ // Scan all files in project
366
+ const files = findFiles(projectPath, [".ts", ".js", ".py", ".go", ".json", ".yaml", ".yml"]);
367
+ for (const file of files) {
368
+ const content = fs_1.default.readFileSync(file, "utf-8");
369
+ const relativePath = path_1.default.relative(projectPath, file);
370
+ // Credential scanning
371
+ allRules.push(...scanForCredentials(content, relativePath));
372
+ // AuthContext validation
373
+ allRules.push(...validateAuthContext(content, relativePath));
374
+ // Tool policies
375
+ allRules.push(...validateToolPolicies(content, relativePath));
376
+ // Naming conventions
377
+ allRules.push(...lintNaming(content, relativePath));
378
+ // Descriptions
379
+ allRules.push(...lintDescriptions(content, relativePath));
380
+ // Incremental markers
381
+ allRules.push(...lintIncrementalMarkers(content, relativePath));
382
+ }
383
+ // Scan OpenAPI spec if present
384
+ const specFiles = findFiles(projectPath, [".json", ".yaml", ".yml"])
385
+ .filter(f => f.includes("openapi") || f.includes("swagger") || f.includes("api"));
386
+ for (const specFile of specFiles.slice(0, 1)) { // Only first spec
387
+ try {
388
+ const specContent = fs_1.default.readFileSync(specFile, "utf-8");
389
+ const spec = specFile.endsWith(".json")
390
+ ? JSON.parse(specContent)
391
+ : require("js-yaml").load(specContent);
392
+ allRules.push(...lintSchemas(spec, path_1.default.relative(projectPath, specFile)));
393
+ }
394
+ catch {
395
+ // Ignore parse errors
396
+ }
397
+ }
398
+ const summary = {
399
+ errors: allRules.filter(r => r.severity === "error").length,
400
+ warnings: allRules.filter(r => r.severity === "warning").length,
401
+ info: allRules.filter(r => r.severity === "info").length,
402
+ };
403
+ return {
404
+ rules: allRules,
405
+ summary,
406
+ passed: summary.errors === 0,
407
+ };
408
+ }
409
+ /** Find files with given extensions */
410
+ function findFiles(dir, extensions) {
411
+ const results = [];
412
+ function walk(currentDir) {
413
+ const entries = fs_1.default.readdirSync(currentDir, { withFileTypes: true });
414
+ for (const entry of entries) {
415
+ const fullPath = path_1.default.join(currentDir, entry.name);
416
+ if (entry.isDirectory()) {
417
+ // Skip node_modules, .git, dist, build
418
+ if (![".git", "node_modules", "dist", "build", "__pycache__", ".github"].includes(entry.name)) {
419
+ walk(fullPath);
420
+ }
421
+ }
422
+ else if (entry.isFile()) {
423
+ if (extensions.some(ext => entry.name.endsWith(ext))) {
424
+ results.push(fullPath);
425
+ }
426
+ }
427
+ }
428
+ }
429
+ walk(dir);
430
+ return results;
431
+ }
432
+ /** Format report for console output */
433
+ function formatReport(report) {
434
+ const lines = [];
435
+ lines.push("");
436
+ lines.push("═══════════════════════════════════════════");
437
+ lines.push(" MCP Security & Lint Report");
438
+ lines.push("═══════════════════════════════════════════");
439
+ lines.push("");
440
+ lines.push(` Errors: ${report.summary.errors}`);
441
+ lines.push(` Warnings: ${report.summary.warnings}`);
442
+ lines.push(` Info: ${report.summary.info}`);
443
+ lines.push(` Status: ${report.passed ? "✅ PASSED" : "❌ FAILED"}`);
444
+ lines.push("");
445
+ if (report.rules.length === 0) {
446
+ lines.push(" No issues found.");
447
+ return lines.join("\n");
448
+ }
449
+ // Group by category
450
+ const byCategory = {};
451
+ for (const rule of report.rules) {
452
+ if (!byCategory[rule.category])
453
+ byCategory[rule.category] = [];
454
+ byCategory[rule.category].push(rule);
455
+ }
456
+ for (const [category, rules] of Object.entries(byCategory)) {
457
+ lines.push(` ${category.toUpperCase()}:`);
458
+ for (const rule of rules) {
459
+ const icon = rule.severity === "error" ? "✗" : rule.severity === "warning" ? "⚠" : "ℹ";
460
+ const loc = rule.file ? ` (${rule.file}${rule.line ? `:${rule.line}` : ""})` : "";
461
+ lines.push(` ${icon} [${rule.id}] ${rule.message}${loc}`);
462
+ if (rule.suggestion) {
463
+ lines.push(` → ${rule.suggestion}`);
464
+ }
465
+ }
466
+ lines.push("");
467
+ }
468
+ return lines.join("\n");
469
+ }
470
+ //# sourceMappingURL=security-lint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security-lint.js","sourceRoot":"","sources":["../../src/core/security-lint.ts"],"names":[],"mappings":";;;;;;AAiFA,gDAmEC;AAGD,kDAqCC;AAGD,oDA6CC;AAGD,gCA2CC;AAGD,4CAyCC;AAGD,wDA0DC;AAGD,kCAsDC;AAGD,kCAwDC;AA8BD,oCAwCC;AA7jBD,gDAAwB;AACxB,4CAAoB;AAiCpB,kEAAkE;AACrD,QAAA,uBAAuB,GAAG;IACrC,eAAe;IACf,OAAO;IACP,cAAc;IACd,SAAS;IACT,QAAQ;IACR,WAAW;IACX,WAAW;IACX,eAAe;IACf,WAAW;IACX,eAAe;IACf,UAAU;IACV,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,KAAK;IACL,aAAa;IACb,SAAS;CACV,CAAC;AAEF,kDAAkD;AACrC,QAAA,mBAAmB,GAAG;IACjC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO;IAC3D,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS;IACzD,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO;IACrD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI;IAClD,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM;IAClD,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS;IACxD,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS;IACpD,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU;CACvD,CAAC;AAEF,kCAAkC;AACrB,QAAA,4BAA4B,GAAG;IAC1C,SAAS;IACT,WAAW;IACX,WAAW;IACX,cAAc;IACd,mBAAmB;IACnB,eAAe;IACf,cAAc;IACd,SAAS;IACT,WAAW;CACZ,CAAC;AAEF,iDAAiD;AACjD,SAAgB,kBAAkB,CAChC,OAAe,EACf,WAAmB,SAAS;IAE5B,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAErC,gCAAgC;QAChC,KAAK,MAAM,OAAO,IAAI,+BAAuB,EAAE,CAAC;YAC9C,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,OAAO,KAAK,EAAE,GAAG,CAAC,CAAC;YAClD,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC1B,uDAAuD;gBACvD,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACzD,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC;oBACpE,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;oBAChF,SAAS;gBACX,CAAC;gBAED,KAAK,CAAC,IAAI,CAAC;oBACT,EAAE,EAAE,YAAY,OAAO,CAAC,WAAW,EAAE,EAAE;oBACvC,QAAQ,EAAE,SAAS;oBACnB,QAAQ,EAAE,aAAa;oBACvB,OAAO,EAAE,qCAAqC,OAAO,SAAS;oBAC9D,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,UAAU,EAAE,4DAA4D;iBACzE,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,2EAA2E;QAC3E,MAAM,cAAc,GAAG;YACrB,EAAE,OAAO,EAAE,sBAAsB,EAAE,IAAI,EAAE,KAAK,EAAE;YAChD,EAAE,OAAO,EAAE,sBAAsB,EAAE,IAAI,EAAE,KAAK,EAAE;YAChD,EAAE,OAAO,EAAE,sBAAsB,EAAE,IAAI,EAAE,YAAY,EAAE;YACvD,EAAE,OAAO,EAAE,sBAAsB,EAAE,IAAI,EAAE,cAAc,EAAE;YACzD,EAAE,OAAO,EAAE,sBAAsB,EAAE,IAAI,EAAE,aAAa,EAAE;YACxD,EAAE,OAAO,EAAE,yBAAyB,EAAE,IAAI,EAAE,YAAY,EAAE;YAC1D,EAAE,OAAO,EAAE,yBAAyB,EAAE,IAAI,EAAE,WAAW,EAAE;YACzD,EAAE,OAAO,EAAE,yBAAyB,EAAE,IAAI,EAAE,YAAY,EAAE;YAC1D,EAAE,OAAO,EAAE,2BAA2B,EAAE,IAAI,EAAE,cAAc,EAAE;YAC9D,EAAE,OAAO,EAAE,gEAAgE,EAAE,IAAI,EAAE,KAAK,EAAE;YAC1F,EAAE,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAE,gBAAgB,EAAE;YACxD,EAAE,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE,eAAe,EAAE;SAC1D,CAAC;QAEF,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,cAAc,EAAE,CAAC;YAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,OAAO,EAAE,CAAC;gBACZ,KAAK,CAAC,IAAI,CAAC;oBACT,EAAE,EAAE,cAAc,IAAI,CAAC,WAAW,EAAE,EAAE;oBACtC,QAAQ,EAAE,OAAO;oBACjB,QAAQ,EAAE,aAAa;oBACvB,OAAO,EAAE,aAAa,IAAI,kBAAkB;oBAC5C,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,UAAU,EAAE,8EAA8E;iBAC3F,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,uDAAuD;AACvD,SAAgB,mBAAmB,CACjC,OAAe,EACf,WAAmB,SAAS;IAE5B,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,IAAI,mBAAmB,GAAG,KAAK,CAAC;IAChC,IAAI,wBAAwB,GAAG,KAAK,CAAC;IAErC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEtB,oDAAoD;QACpD,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YAClE,mBAAmB,GAAG,IAAI,CAAC;QAC7B,CAAC;QAED,wDAAwD;QACxD,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACrE,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACpE,wBAAwB,GAAG,IAAI,CAAC;QAClC,CAAC;IACH,CAAC;IAED,IAAI,mBAAmB,IAAI,CAAC,wBAAwB,EAAE,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC;YACT,EAAE,EAAE,2BAA2B;YAC/B,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE,aAAa;YACvB,OAAO,EAAE,4DAA4D;YACrE,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,4DAA4D;SACzE,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,yCAAyC;AACzC,SAAgB,oBAAoB,CAClC,OAAe,EACf,WAAmB,SAAS;IAE5B,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,IAAI,eAAe,GAAG,KAAK,CAAC;IAC5B,IAAI,qBAAqB,GAAG,KAAK,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEtB,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACpE,eAAe,GAAG,IAAI,CAAC;QACzB,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC/E,qBAAqB,GAAG,IAAI,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC;YACT,EAAE,EAAE,uBAAuB;YAC3B,QAAQ,EAAE,MAAM;YAChB,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,uEAAuE;YAChF,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,mEAAmE;SAChF,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC;YACT,EAAE,EAAE,8BAA8B;YAClC,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE,aAAa;YACvB,OAAO,EAAE,4CAA4C;YACrD,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,2DAA2D;SACxE,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8BAA8B;AAC9B,SAAgB,UAAU,CACxB,OAAe,EACf,WAAmB,SAAS;IAE5B,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEtB,0EAA0E;QAC1E,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACzD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAC3E,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxC,KAAK,CAAC,IAAI,CAAC;oBACT,EAAE,EAAE,oBAAoB;oBACxB,QAAQ,EAAE,MAAM;oBAChB,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,aAAa,OAAO,CAAC,CAAC,CAAC,mDAAmD;oBACnF,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,UAAU,EAAE,gDAAgD;iBAC7D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,sCAAsC;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAC3E,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;YAChD,6BAA6B;YAC7B,KAAK,CAAC,IAAI,CAAC;gBACT,EAAE,EAAE,iBAAiB;gBACrB,QAAQ,EAAE,MAAM;gBAChB,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,aAAa,QAAQ,CAAC,CAAC,CAAC,qCAAqC;gBACtE,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,GAAG,CAAC;gBACX,UAAU,EAAE,6BAA6B;aAC1C,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,wBAAwB;AACxB,SAAgB,gBAAgB,CAC9B,OAAe,EACf,WAAmB,SAAS;IAE5B,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEtB,mDAAmD;QACnD,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACzE,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACjE,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,EAAE,CAAC;gBACzC,KAAK,CAAC,IAAI,CAAC;oBACT,EAAE,EAAE,wBAAwB;oBAC5B,QAAQ,EAAE,SAAS;oBACnB,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,yBAAyB;oBAClC,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,UAAU,EAAE,yDAAyD;iBACtE,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,yCAAyC;QACzC,IAAI,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC;gBACT,EAAE,EAAE,wBAAwB;gBAC5B,QAAQ,EAAE,MAAM;gBAChB,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,sCAAsC;gBAC/C,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,GAAG,CAAC;gBACX,UAAU,EAAE,qCAAqC;aAClD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+BAA+B;AAC/B,SAAgB,sBAAsB,CACpC,OAAe,EACf,WAAmB,SAAS;IAE5B,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEtB,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACtC,UAAU,EAAE,CAAC;YACb,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACpC,QAAQ,EAAE,CAAC;YACX,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC;YACT,EAAE,EAAE,yBAAyB;YAC7B,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,mCAAmC,UAAU,WAAW,QAAQ,MAAM;YAC/E,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,yDAAyD;SACtE,CAAC,CAAC;IACL,CAAC;IAED,oDAAoD;IACpD,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QAClD,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YAChD,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAC3E,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;gBACrB,KAAK,CAAC,IAAI,CAAC;oBACT,EAAE,EAAE,qBAAqB;oBACzB,QAAQ,EAAE,SAAS;oBACnB,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,qCAAqC;oBAC9C,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,KAAK,GAAG,WAAW;oBACzB,UAAU,EAAE,kDAAkD;iBAC/D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,wBAAwB;AACxB,SAAgB,WAAW,CACzB,IAAwB,EACxB,WAAmB,MAAM;IAEzB,MAAM,KAAK,GAAmB,EAAE,CAAC;IAEjC,IAAI,CAAC,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAE9B,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1D,IAAI,CAAC,QAAQ;YAAE,SAAS;QAExB,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACtF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,EAAE,GAAG,QAAQ,CAAC,MAA+B,CAA0C,CAAC;YAC9F,IAAI,CAAC,EAAE;gBAAE,SAAS;YAElB,wCAAwC;YACxC,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;gBACnC,KAAK,CAAC,IAAI,CAAC;oBACT,EAAE,EAAE,wBAAwB;oBAC5B,QAAQ,EAAE,SAAS;oBACnB,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,aAAa,MAAM,CAAC,WAAW,EAAE,IAAI,IAAI,gCAAgC;oBAClF,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,4DAA4D;iBACzE,CAAC,CAAC;YACL,CAAC;YAED,0CAA0C;YAC1C,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC;gBACjB,KAAK,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC9D,IAAI,QAAQ,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;wBACtC,MAAM,IAAI,GAAG,QAAoC,CAAC;wBAClD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;4BACjB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gCAChD,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;oCAC/C,KAAK,CAAC,IAAI,CAAC;wCACT,EAAE,EAAE,0BAA0B;wCAC9B,QAAQ,EAAE,MAAM;wCAChB,QAAQ,EAAE,MAAM;wCAChB,OAAO,EAAE,YAAY,MAAM,QAAQ,MAAM,CAAC,WAAW,EAAE,IAAI,IAAI,iBAAiB;wCAChF,IAAI,EAAE,QAAQ;wCACd,UAAU,EAAE,qCAAqC;qCAClD,CAAC,CAAC;gCACL,CAAC;4BACH,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,sDAAsD;AAC/C,KAAK,UAAU,WAAW,CAAC,WAAmB;IACnD,MAAM,QAAQ,GAAmB,EAAE,CAAC;IAEpC,4BAA4B;IAC5B,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IAE7F,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAG,cAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAEtD,sBAAsB;QACtB,QAAQ,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;QAE5D,yBAAyB;QACzB,QAAQ,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;QAE7D,gBAAgB;QAChB,QAAQ,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;QAE9D,qBAAqB;QACrB,QAAQ,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;QAEpD,eAAe;QACf,QAAQ,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;QAE1D,sBAAsB;QACtB,QAAQ,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,+BAA+B;IAC/B,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;SACjE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAEpF,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,kBAAkB;QAChE,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACvD,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;gBACrC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;gBACzB,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACzC,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,cAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5E,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG;QACd,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM;QAC3D,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,MAAM;QAC/D,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM;KACzD,CAAC;IAEF,OAAO;QACL,KAAK,EAAE,QAAQ;QACf,OAAO;QACP,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC;KAC7B,CAAC;AACJ,CAAC;AAED,uCAAuC;AACvC,SAAS,SAAS,CAAC,GAAW,EAAE,UAAoB;IAClD,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,SAAS,IAAI,CAAC,UAAkB;QAC9B,MAAM,OAAO,GAAG,YAAE,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAEpE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAEnD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,uCAAuC;gBACvC,IAAI,CAAC,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC9F,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACjB,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC1B,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;oBACrD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,uCAAuC;AACvC,SAAgB,YAAY,CAAC,MAAsB;IACjD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAC1D,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC3C,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAC1D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACnD,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrD,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACjD,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;IACrE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,oBAAoB;IACpB,MAAM,UAAU,GAAmC,EAAE,CAAC;IACtD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QAC/D,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACvF,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAClF,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,CAAC;YAC7D,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Validates that a file path is within an allowed directory.
3
+ * Prevents path traversal attacks (e.g., ../../../etc/passwd).
4
+ */
5
+ export declare function validateOutputPath(filePath: string, baseDir: string): void;
6
+ /**
7
+ * Validates that a plugin path exists and is a directory.
8
+ * Prevents loading arbitrary code from unexpected locations.
9
+ */
10
+ export declare function validatePluginPath(pluginPath: string): void;
11
+ /**
12
+ * Validates a remote URL for fetching OpenAPI specs.
13
+ * Only allows HTTPS and known safe domains.
14
+ */
15
+ export declare function validateRemoteUrl(urlString: string): void;
16
+ /**
17
+ * Validates the size of remote content to prevent DoS attacks.
18
+ * Max size: 50MB
19
+ */
20
+ export declare function validateContentSize(size: number, maxBytes?: number): void;
21
+ /**
22
+ * Validates Content-Type of remote response.
23
+ * Only allows JSON and YAML for OpenAPI specs.
24
+ */
25
+ export declare function validateContentType(contentType: string | null): void;
26
+ /**
27
+ * Sanitizes user input to prevent injection attacks.
28
+ * Removes/escapes potentially dangerous characters.
29
+ */
30
+ export declare function sanitizeInput(input: string, maxLength?: number): string;
31
+ /**
32
+ * Creates a whitelist of allowed plugin modules.
33
+ * Returns true if plugin is in the whitelist.
34
+ */
35
+ export declare function isPluginWhitelisted(pluginName: string, whitelist: string[]): boolean;
36
+ /**
37
+ * Validates that the plugin module exports a valid structure.
38
+ * Prevents malicious modules from executing arbitrary code.
39
+ */
40
+ export declare function validatePluginModule(module: unknown): boolean;
41
+ //# sourceMappingURL=security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/core/security.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAS1E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAiB3D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAoCzD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAyB,GAAG,IAAI,CAM3F;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAWpE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,MAAY,GAAG,MAAM,CAW5E;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAEpF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAuB7D"}