verification-layer 0.4.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.
Files changed (95) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +345 -0
  3. package/dist/audit/evidence.d.ts +25 -0
  4. package/dist/audit/evidence.d.ts.map +1 -0
  5. package/dist/audit/evidence.js +70 -0
  6. package/dist/audit/evidence.js.map +1 -0
  7. package/dist/audit/index.d.ts +54 -0
  8. package/dist/audit/index.d.ts.map +1 -0
  9. package/dist/audit/index.js +159 -0
  10. package/dist/audit/index.js.map +1 -0
  11. package/dist/cli.d.ts +3 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +199 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/config.d.ts +7 -0
  16. package/dist/config.d.ts.map +1 -0
  17. package/dist/config.js +77 -0
  18. package/dist/config.js.map +1 -0
  19. package/dist/fixer/index.d.ts +11 -0
  20. package/dist/fixer/index.d.ts.map +1 -0
  21. package/dist/fixer/index.js +171 -0
  22. package/dist/fixer/index.js.map +1 -0
  23. package/dist/fixer/strategies.d.ts +3 -0
  24. package/dist/fixer/strategies.d.ts.map +1 -0
  25. package/dist/fixer/strategies.js +199 -0
  26. package/dist/fixer/strategies.js.map +1 -0
  27. package/dist/index.d.ts +4 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +3 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/reporters/audit-report.d.ts +13 -0
  32. package/dist/reporters/audit-report.d.ts.map +1 -0
  33. package/dist/reporters/audit-report.js +526 -0
  34. package/dist/reporters/audit-report.js.map +1 -0
  35. package/dist/reporters/fix-report.d.ts +3 -0
  36. package/dist/reporters/fix-report.d.ts.map +1 -0
  37. package/dist/reporters/fix-report.js +70 -0
  38. package/dist/reporters/fix-report.js.map +1 -0
  39. package/dist/reporters/index.d.ts +3 -0
  40. package/dist/reporters/index.d.ts.map +1 -0
  41. package/dist/reporters/index.js +425 -0
  42. package/dist/reporters/index.js.map +1 -0
  43. package/dist/reporters/remediation-guides.d.ts +25 -0
  44. package/dist/reporters/remediation-guides.d.ts.map +1 -0
  45. package/dist/reporters/remediation-guides.js +636 -0
  46. package/dist/reporters/remediation-guides.js.map +1 -0
  47. package/dist/scan.d.ts +3 -0
  48. package/dist/scan.d.ts.map +1 -0
  49. package/dist/scan.js +96 -0
  50. package/dist/scan.js.map +1 -0
  51. package/dist/scanners/access/index.d.ts +3 -0
  52. package/dist/scanners/access/index.d.ts.map +1 -0
  53. package/dist/scanners/access/index.js +102 -0
  54. package/dist/scanners/access/index.js.map +1 -0
  55. package/dist/scanners/audit/index.d.ts +3 -0
  56. package/dist/scanners/audit/index.d.ts.map +1 -0
  57. package/dist/scanners/audit/index.js +94 -0
  58. package/dist/scanners/audit/index.js.map +1 -0
  59. package/dist/scanners/encryption/index.d.ts +3 -0
  60. package/dist/scanners/encryption/index.d.ts.map +1 -0
  61. package/dist/scanners/encryption/index.js +86 -0
  62. package/dist/scanners/encryption/index.js.map +1 -0
  63. package/dist/scanners/phi/index.d.ts +3 -0
  64. package/dist/scanners/phi/index.d.ts.map +1 -0
  65. package/dist/scanners/phi/index.js +47 -0
  66. package/dist/scanners/phi/index.js.map +1 -0
  67. package/dist/scanners/phi/patterns.d.ts +13 -0
  68. package/dist/scanners/phi/patterns.d.ts.map +1 -0
  69. package/dist/scanners/phi/patterns.js +242 -0
  70. package/dist/scanners/phi/patterns.js.map +1 -0
  71. package/dist/scanners/retention/index.d.ts +3 -0
  72. package/dist/scanners/retention/index.d.ts.map +1 -0
  73. package/dist/scanners/retention/index.js +102 -0
  74. package/dist/scanners/retention/index.js.map +1 -0
  75. package/dist/scanners/security/index.d.ts +3 -0
  76. package/dist/scanners/security/index.d.ts.map +1 -0
  77. package/dist/scanners/security/index.js +280 -0
  78. package/dist/scanners/security/index.js.map +1 -0
  79. package/dist/stack-detector/index.d.ts +26 -0
  80. package/dist/stack-detector/index.d.ts.map +1 -0
  81. package/dist/stack-detector/index.js +317 -0
  82. package/dist/stack-detector/index.js.map +1 -0
  83. package/dist/stack-detector/stack-guides.d.ts +16 -0
  84. package/dist/stack-detector/stack-guides.d.ts.map +1 -0
  85. package/dist/stack-detector/stack-guides.js +772 -0
  86. package/dist/stack-detector/stack-guides.js.map +1 -0
  87. package/dist/types.d.ts +143 -0
  88. package/dist/types.d.ts.map +1 -0
  89. package/dist/types.js +2 -0
  90. package/dist/types.js.map +1 -0
  91. package/dist/utils/context.d.ts +3 -0
  92. package/dist/utils/context.d.ts.map +1 -0
  93. package/dist/utils/context.js +14 -0
  94. package/dist/utils/context.js.map +1 -0
  95. package/package.json +76 -0
@@ -0,0 +1,199 @@
1
+ function toScreamingSnakeCase(varName) {
2
+ return varName
3
+ .replace(/([a-z])([A-Z])/g, '$1_$2')
4
+ .replace(/[-\s]+/g, '_')
5
+ .toUpperCase();
6
+ }
7
+ function extractVarName(line) {
8
+ // Match variable declarations: const/let/var name = or name: or name =
9
+ const match = line.match(/(?:const|let|var)\s+(\w+)|(\w+)\s*[:=]/);
10
+ if (match) {
11
+ return match[1] || match[2];
12
+ }
13
+ return null;
14
+ }
15
+ const fixStrategies = {
16
+ 'sql-injection-template': (line) => {
17
+ // Pattern: query(`SELECT * FROM users WHERE id = ${userId}`)
18
+ // Convert to: query('SELECT * FROM users WHERE id = ?', [userId])
19
+ const templateMatch = line.match(/(\w+)\s*\(\s*`([^`]*)\$\{([^}]+)\}([^`]*)`\s*\)/);
20
+ if (templateMatch) {
21
+ const [, funcName, before, variable, after] = templateMatch;
22
+ // Replace all template interpolations with ?
23
+ let sql = before + '?' + after;
24
+ const vars = [variable.trim()];
25
+ // Handle multiple interpolations
26
+ let remaining = sql;
27
+ const additionalMatches = remaining.match(/\$\{([^}]+)\}/g);
28
+ if (additionalMatches) {
29
+ for (const match of additionalMatches) {
30
+ const varMatch = match.match(/\$\{([^}]+)\}/);
31
+ if (varMatch) {
32
+ vars.push(varMatch[1].trim());
33
+ remaining = remaining.replace(match, '?');
34
+ }
35
+ }
36
+ sql = remaining;
37
+ }
38
+ return line.replace(/(\w+)\s*\(\s*`[^`]*`\s*\)/, `${funcName}('${sql}', [${vars.join(', ')}])`);
39
+ }
40
+ return null;
41
+ },
42
+ 'sql-injection-concat': (line) => {
43
+ // Pattern: query("SELECT * FROM users WHERE id = " + userId + " AND ...")
44
+ // Convert to: query("SELECT * FROM users WHERE id = ? AND ...", [userId])
45
+ // This is a complex pattern - we'll be conservative and only fix simple cases
46
+ // Match: func("sql part" + variable + "sql part")
47
+ const simpleMatch = line.match(/(\w+)\s*\(\s*"([^"]+)"\s*\+\s*(\w+)\s*\+\s*"([^"]*)"\s*\)/);
48
+ if (simpleMatch) {
49
+ const [, funcName, sqlBefore, variable, sqlAfter] = simpleMatch;
50
+ // Remove any trailing quote marks from sqlBefore that were meant for the variable
51
+ const cleanBefore = sqlBefore.replace(/'?\s*$/, '');
52
+ // Remove any leading quote marks from sqlAfter
53
+ const cleanAfter = sqlAfter.replace(/^\s*'?/, '');
54
+ const sql = cleanBefore + '?' + cleanAfter;
55
+ return line.replace(/(\w+)\s*\(\s*"[^"]+"\s*\+\s*\w+\s*\+\s*"[^"]*"\s*\)/, `${funcName}('${sql}', [${variable}])`);
56
+ }
57
+ // For more complex patterns, don't attempt auto-fix
58
+ return null;
59
+ },
60
+ 'hardcoded-password': (line) => {
61
+ // Pattern: password = "secret" or password: "secret"
62
+ // Convert to: password = process.env.PASSWORD
63
+ const match = line.match(/(password|pwd)\s*[:=]\s*(['"`])[^'"`]+\2/i);
64
+ if (match) {
65
+ const varName = extractVarName(line);
66
+ const envVarName = varName ? toScreamingSnakeCase(varName) : 'PASSWORD';
67
+ return line.replace(/(password|pwd)\s*[:=]\s*(['"`])[^'"`]+\2/i, `$1 = process.env.${envVarName}`);
68
+ }
69
+ return null;
70
+ },
71
+ 'hardcoded-secret': (line) => {
72
+ // Pattern: secret = "xyz"
73
+ // Convert to: secret = process.env.SECRET
74
+ const match = line.match(/secret\s*[:=]\s*(['"`])[^'"`]+\1/i);
75
+ if (match) {
76
+ const varName = extractVarName(line);
77
+ const envVarName = varName ? toScreamingSnakeCase(varName) : 'SECRET';
78
+ return line.replace(/secret\s*[:=]\s*(['"`])[^'"`]+\1/i, `secret = process.env.${envVarName}`);
79
+ }
80
+ return null;
81
+ },
82
+ 'api-key-exposed': (line) => {
83
+ // Pattern: apiKey = "abc123xyz" or api_key: "abc123xyz"
84
+ // Convert to: apiKey = process.env.API_KEY
85
+ const match = line.match(/(api[_-]?key|apikey)\s*[:=]\s*(['"`])[^'"`]+\2/i);
86
+ if (match) {
87
+ const varName = extractVarName(line);
88
+ const envVarName = varName ? toScreamingSnakeCase(varName) : 'API_KEY';
89
+ return line.replace(/(api[_-]?key|apikey)\s*[:=]\s*(['"`])[^'"`]+\2/i, `$1 = process.env.${envVarName}`);
90
+ }
91
+ return null;
92
+ },
93
+ 'phi-console-log': (line) => {
94
+ // Pattern: console.log(patient) or console.log("Patient:", patient)
95
+ // Convert to: // [VLAYER] PHI logging removed - review needed: console.log(...)
96
+ const match = line.match(/^(\s*)console\.(log|info|debug|warn|error)\s*\(/);
97
+ if (match) {
98
+ const indent = match[1];
99
+ return `${indent}// [VLAYER] PHI logging removed - review needed: ${line.trim()}`;
100
+ }
101
+ return null;
102
+ },
103
+ 'http-url': (line) => {
104
+ // Pattern: http://example.com
105
+ // Convert to: https://example.com
106
+ if (line.includes('http://') && !line.includes('http://localhost') && !line.includes('http://127.0.0.1')) {
107
+ return line.replace(/http:\/\//g, 'https://');
108
+ }
109
+ return null;
110
+ },
111
+ 'innerhtml-unsanitized': (line) => {
112
+ // Pattern: element.innerHTML = userText
113
+ // Convert to: element.textContent = userText
114
+ const match = line.match(/\.innerHTML\s*=\s*/);
115
+ if (match) {
116
+ return line.replace(/\.innerHTML\s*=/, '.textContent =');
117
+ }
118
+ return null;
119
+ },
120
+ 'phi-localstorage': (line) => {
121
+ // Pattern: localStorage.setItem("patientData", data)
122
+ // Convert to: comment with suggestion to use server-side session
123
+ const match = line.match(/^(\s*)localStorage\.(setItem|getItem)\s*\(/);
124
+ if (match) {
125
+ const indent = match[1];
126
+ return `${indent}// [VLAYER] PHI in localStorage removed - use server-side session storage instead\n${indent}// TODO: Replace with: await sessionApi.store(key, encryptedData)\n${indent}// Original: ${line.trim()}`;
127
+ }
128
+ return null;
129
+ },
130
+ 'phi-url-param': (line) => {
131
+ // Pattern: fetch(`/api?patientId=${id}`)
132
+ // Convert to: suggestion to use POST with body
133
+ const match = line.match(/^(\s*)(fetch|axios\.get|http\.get)\s*\(\s*[`'"]/);
134
+ if (match) {
135
+ const indent = match[1];
136
+ const method = match[2];
137
+ return `${indent}// [VLAYER] PHI in URL params - use POST with encrypted body instead\n${indent}// TODO: Replace with: ${method === 'fetch' ? "fetch(url, { method: 'POST', body: JSON.stringify({ patientId }) })" : 'axios.post(url, { patientId })'}\n${indent}// Original: ${line.trim()}`;
138
+ }
139
+ return null;
140
+ },
141
+ 'phi-log-unredacted': (line) => {
142
+ // Pattern: logger.info("Patient data", patientData)
143
+ // Convert to: logger.info("Patient data", redactPHI(patientData))
144
+ const match = line.match(/(logger\.(log|info|debug|warn|error))\s*\(\s*(['"`][^'"`]*['"`])\s*,\s*(\w+)/);
145
+ if (match) {
146
+ const [, loggerCall, , message, variable] = match;
147
+ return line.replace(new RegExp(`(${loggerCall.replace('.', '\\.')}\\s*\\(\\s*${message.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\s*,\\s*)${variable}`), `$1redactPHI(${variable})`);
148
+ }
149
+ // Simpler pattern: logger.info(patientData)
150
+ const simpleMatch = line.match(/(logger\.(log|info|debug|warn|error))\s*\(\s*(\w*patient\w*)\s*\)/i);
151
+ if (simpleMatch) {
152
+ const [, loggerCall, , variable] = simpleMatch;
153
+ return line.replace(new RegExp(`(${loggerCall.replace('.', '\\.')}\\s*\\()${variable}(\\s*\\))`), `$1redactPHI(${variable})$2`);
154
+ }
155
+ return null;
156
+ },
157
+ 'cookie-insecure': (line) => {
158
+ // Pattern: cookie: { maxAge: 3600 } or res.cookie('session', value)
159
+ // Add httpOnly: true, secure: true
160
+ // Pattern 1: cookie options object without httpOnly
161
+ const optionsMatch = line.match(/cookie\s*:\s*\{([^}]*)\}/);
162
+ if (optionsMatch && !line.includes('httpOnly')) {
163
+ const options = optionsMatch[1];
164
+ const newOptions = options.trim() ? `${options.trim()}, httpOnly: true, secure: true` : 'httpOnly: true, secure: true';
165
+ return line.replace(/cookie\s*:\s*\{[^}]*\}/, `cookie: { ${newOptions} }`);
166
+ }
167
+ // Pattern 2: res.cookie() without options
168
+ const resCookieMatch = line.match(/(res\.cookie\s*\(\s*['"`][^'"`]+['"`]\s*,\s*\w+)\s*\)/);
169
+ if (resCookieMatch && !line.includes('httpOnly')) {
170
+ return line.replace(/(res\.cookie\s*\(\s*['"`][^'"`]+['"`]\s*,\s*\w+)\s*\)/, '$1, { httpOnly: true, secure: true })');
171
+ }
172
+ return null;
173
+ },
174
+ 'backup-unencrypted': (line) => {
175
+ // Pattern: writeFile('backup.sql', data) or backup.sql without encryption
176
+ // Add encryption suggestion
177
+ const match = line.match(/^(\s*)(fs\.)?writeFile\s*\(\s*(['"`][^'"`]*backup[^'"`]*['"`])/i);
178
+ if (match) {
179
+ const indent = match[1];
180
+ const filePath = match[3];
181
+ return `${indent}// [VLAYER] Unencrypted backup - encrypt before writing\n${indent}// TODO: const encrypted = await crypto.encrypt(data, process.env.BACKUP_KEY);\n${indent}// Then write encrypted data to ${filePath}.enc\n${indent}// Original: ${line.trim()}`;
182
+ }
183
+ // Pattern for backup config
184
+ const configMatch = line.match(/^(\s*).*backup.*=.*\.(sql|csv|json|txt)/i);
185
+ if (configMatch && !line.includes('encrypt') && !line.includes('gpg')) {
186
+ const indent = configMatch[1];
187
+ return `${indent}// [VLAYER] Use encrypted backup format (.gpg, .enc) or enable encryption\n${indent}${line.trim()}`;
188
+ }
189
+ return null;
190
+ },
191
+ };
192
+ export function applyFixStrategy(line, fixType) {
193
+ const strategy = fixStrategies[fixType];
194
+ if (!strategy) {
195
+ return null;
196
+ }
197
+ return strategy(line);
198
+ }
199
+ //# sourceMappingURL=strategies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategies.js","sourceRoot":"","sources":["../../src/fixer/strategies.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { scan } from './scan.js';
2
+ export { generateReport } from './reporters/index.js';
3
+ export type { Finding, ScanResult, ScanOptions, Report, ReportOptions, Scanner, Severity, ComplianceCategory, VlayerConfig, ContextLine, } from './types.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EACV,OAAO,EACP,UAAU,EACV,WAAW,EACX,MAAM,EACN,aAAa,EACb,OAAO,EACP,QAAQ,EACR,kBAAkB,EAClB,YAAY,EACZ,WAAW,GACZ,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { scan } from './scan.js';
2
+ export { generateReport } from './reporters/index.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { AuditTrail, AuditReportOptions } from '../types.js';
2
+ /**
3
+ * Generate PDF audit report
4
+ */
5
+ export declare function generateAuditReport(trail: AuditTrail, options: AuditReportOptions): Promise<{
6
+ path: string;
7
+ hash: string;
8
+ }>;
9
+ /**
10
+ * Generate text-based audit report (for environments without PDF support)
11
+ */
12
+ export declare function generateTextAuditReport(trail: AuditTrail): string;
13
+ //# sourceMappingURL=audit-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-report.d.ts","sourceRoot":"","sources":["../../src/reporters/audit-report.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAmC,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAsBnG;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAkDzC;AAghBD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAuEjE"}