visus-mcp 0.6.2 → 0.8.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 (177) hide show
  1. package/.claude/settings.local.json +6 -1
  2. package/.env.status +7 -0
  3. package/CHANGELOG.md +65 -0
  4. package/CLAUDE.md +3 -0
  5. package/README.md +15 -7
  6. package/SECURITY.md +2 -0
  7. package/STATUS.md +203 -9
  8. package/dist/content-handlers/index.d.ts +36 -0
  9. package/dist/content-handlers/index.d.ts.map +1 -0
  10. package/dist/content-handlers/index.js +59 -0
  11. package/dist/content-handlers/index.js.map +1 -0
  12. package/dist/content-handlers/json-handler.d.ts +28 -0
  13. package/dist/content-handlers/json-handler.d.ts.map +1 -0
  14. package/dist/content-handlers/json-handler.js +116 -0
  15. package/dist/content-handlers/json-handler.js.map +1 -0
  16. package/dist/content-handlers/pdf-handler.d.ts +29 -0
  17. package/dist/content-handlers/pdf-handler.d.ts.map +1 -0
  18. package/dist/content-handlers/pdf-handler.js +77 -0
  19. package/dist/content-handlers/pdf-handler.js.map +1 -0
  20. package/dist/content-handlers/svg-handler.d.ts +35 -0
  21. package/dist/content-handlers/svg-handler.d.ts.map +1 -0
  22. package/dist/content-handlers/svg-handler.js +206 -0
  23. package/dist/content-handlers/svg-handler.js.map +1 -0
  24. package/dist/content-handlers/types.d.ts +42 -0
  25. package/dist/content-handlers/types.d.ts.map +1 -0
  26. package/dist/content-handlers/types.js +7 -0
  27. package/dist/content-handlers/types.js.map +1 -0
  28. package/dist/tools/fetch.d.ts.map +1 -1
  29. package/dist/tools/fetch.js +62 -4
  30. package/dist/tools/fetch.js.map +1 -1
  31. package/package.json +2 -1
  32. package/server.json +2 -2
  33. package/src/content-handlers/index.ts +72 -0
  34. package/src/content-handlers/json-handler.ts +137 -0
  35. package/src/content-handlers/pdf-handler.ts +91 -0
  36. package/src/content-handlers/svg-handler.ts +243 -0
  37. package/src/content-handlers/types.ts +44 -0
  38. package/src/tools/fetch.ts +69 -4
  39. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -47
  40. package/.github/ISSUE_TEMPLATE/false_positive.md +0 -43
  41. package/.github/ISSUE_TEMPLATE/new_pattern.md +0 -49
  42. package/.github/ISSUE_TEMPLATE/security_report.md +0 -31
  43. package/.github/PULL_REQUEST_TEMPLATE.md +0 -39
  44. package/.mcpregistry_github_token +0 -1
  45. package/.mcpregistry_registry_token +0 -1
  46. package/CONTRIBUTING.md +0 -329
  47. package/LINKEDIN-STRATEGY.md +0 -367
  48. package/ROADMAP.md +0 -221
  49. package/SECURITY-AUDIT-v1.md +0 -277
  50. package/SUBMISSION.md +0 -66
  51. package/TROUBLESHOOT-AUTH-20260322-2019.md +0 -291
  52. package/TROUBLESHOOT-BUILD-20260319-1450.md +0 -546
  53. package/TROUBLESHOOT-COGNITO-AUTH-20260324-2029.md +0 -415
  54. package/TROUBLESHOOT-COGNITO-JWT-20260324.md +0 -592
  55. package/TROUBLESHOOT-FETCH-20260320-1150.md +0 -168
  56. package/TROUBLESHOOT-JEST-20260323-1357.md +0 -139
  57. package/TROUBLESHOOT-LAMBDA-20260322-1945.md +0 -183
  58. package/TROUBLESHOOT-PLAYWRIGHT-20260321-1549.md +0 -217
  59. package/TROUBLESHOOT-SSL-20260320-1138.md +0 -171
  60. package/TROUBLESHOOT-STRUCTURED-20260320-1200.md +0 -246
  61. package/TROUBLESHOOT-TEST-20260320-0942.md +0 -281
  62. package/VISUS-CLAUDE-CODE-PROMPT.md +0 -324
  63. package/VISUS-PROJECT-PLAN.md +0 -205
  64. package/cdk.json +0 -73
  65. package/infrastructure/app.ts +0 -39
  66. package/infrastructure/stack.ts +0 -298
  67. package/jest.config.js +0 -33
  68. package/jest.setup.js +0 -9
  69. package/lambda-deploy/index.js +0 -81512
  70. package/lambda-deploy/index.js.map +0 -7
  71. package/lambda-package/browser/__mocks__/playwright-renderer.d.ts +0 -25
  72. package/lambda-package/browser/__mocks__/playwright-renderer.d.ts.map +0 -1
  73. package/lambda-package/browser/__mocks__/playwright-renderer.js +0 -119
  74. package/lambda-package/browser/__mocks__/playwright-renderer.js.map +0 -1
  75. package/lambda-package/browser/playwright-renderer.d.ts +0 -40
  76. package/lambda-package/browser/playwright-renderer.d.ts.map +0 -1
  77. package/lambda-package/browser/playwright-renderer.js +0 -214
  78. package/lambda-package/browser/playwright-renderer.js.map +0 -1
  79. package/lambda-package/browser/reader.d.ts +0 -31
  80. package/lambda-package/browser/reader.d.ts.map +0 -1
  81. package/lambda-package/browser/reader.js +0 -98
  82. package/lambda-package/browser/reader.js.map +0 -1
  83. package/lambda-package/index.d.ts +0 -18
  84. package/lambda-package/index.d.ts.map +0 -1
  85. package/lambda-package/index.js +0 -238
  86. package/lambda-package/index.js.map +0 -1
  87. package/lambda-package/lambda-handler.d.ts +0 -28
  88. package/lambda-package/lambda-handler.d.ts.map +0 -1
  89. package/lambda-package/lambda-handler.js +0 -257
  90. package/lambda-package/lambda-handler.js.map +0 -1
  91. package/lambda-package/package-lock.json +0 -7435
  92. package/lambda-package/package.json +0 -74
  93. package/lambda-package/runtime.d.ts +0 -50
  94. package/lambda-package/runtime.d.ts.map +0 -1
  95. package/lambda-package/runtime.js +0 -86
  96. package/lambda-package/runtime.js.map +0 -1
  97. package/lambda-package/sanitizer/elicit-runner.d.ts +0 -48
  98. package/lambda-package/sanitizer/elicit-runner.d.ts.map +0 -1
  99. package/lambda-package/sanitizer/elicit-runner.js +0 -100
  100. package/lambda-package/sanitizer/elicit-runner.js.map +0 -1
  101. package/lambda-package/sanitizer/framework-mapper.d.ts +0 -24
  102. package/lambda-package/sanitizer/framework-mapper.d.ts.map +0 -1
  103. package/lambda-package/sanitizer/framework-mapper.js +0 -342
  104. package/lambda-package/sanitizer/framework-mapper.js.map +0 -1
  105. package/lambda-package/sanitizer/hitl-gate.d.ts +0 -69
  106. package/lambda-package/sanitizer/hitl-gate.d.ts.map +0 -1
  107. package/lambda-package/sanitizer/hitl-gate.js +0 -101
  108. package/lambda-package/sanitizer/hitl-gate.js.map +0 -1
  109. package/lambda-package/sanitizer/index.d.ts +0 -63
  110. package/lambda-package/sanitizer/index.d.ts.map +0 -1
  111. package/lambda-package/sanitizer/index.js +0 -105
  112. package/lambda-package/sanitizer/index.js.map +0 -1
  113. package/lambda-package/sanitizer/injection-detector.d.ts +0 -34
  114. package/lambda-package/sanitizer/injection-detector.d.ts.map +0 -1
  115. package/lambda-package/sanitizer/injection-detector.js +0 -89
  116. package/lambda-package/sanitizer/injection-detector.js.map +0 -1
  117. package/lambda-package/sanitizer/patterns.d.ts +0 -30
  118. package/lambda-package/sanitizer/patterns.d.ts.map +0 -1
  119. package/lambda-package/sanitizer/patterns.js +0 -372
  120. package/lambda-package/sanitizer/patterns.js.map +0 -1
  121. package/lambda-package/sanitizer/pii-allowlist.d.ts +0 -49
  122. package/lambda-package/sanitizer/pii-allowlist.d.ts.map +0 -1
  123. package/lambda-package/sanitizer/pii-allowlist.js +0 -231
  124. package/lambda-package/sanitizer/pii-allowlist.js.map +0 -1
  125. package/lambda-package/sanitizer/pii-redactor.d.ts +0 -41
  126. package/lambda-package/sanitizer/pii-redactor.d.ts.map +0 -1
  127. package/lambda-package/sanitizer/pii-redactor.js +0 -213
  128. package/lambda-package/sanitizer/pii-redactor.js.map +0 -1
  129. package/lambda-package/sanitizer/severity-classifier.d.ts +0 -33
  130. package/lambda-package/sanitizer/severity-classifier.d.ts.map +0 -1
  131. package/lambda-package/sanitizer/severity-classifier.js +0 -113
  132. package/lambda-package/sanitizer/severity-classifier.js.map +0 -1
  133. package/lambda-package/sanitizer/threat-reporter.d.ts +0 -66
  134. package/lambda-package/sanitizer/threat-reporter.d.ts.map +0 -1
  135. package/lambda-package/sanitizer/threat-reporter.js +0 -163
  136. package/lambda-package/sanitizer/threat-reporter.js.map +0 -1
  137. package/lambda-package/tools/fetch-structured.d.ts +0 -51
  138. package/lambda-package/tools/fetch-structured.d.ts.map +0 -1
  139. package/lambda-package/tools/fetch-structured.js +0 -237
  140. package/lambda-package/tools/fetch-structured.js.map +0 -1
  141. package/lambda-package/tools/fetch.d.ts +0 -49
  142. package/lambda-package/tools/fetch.d.ts.map +0 -1
  143. package/lambda-package/tools/fetch.js +0 -131
  144. package/lambda-package/tools/fetch.js.map +0 -1
  145. package/lambda-package/tools/read.d.ts +0 -51
  146. package/lambda-package/tools/read.d.ts.map +0 -1
  147. package/lambda-package/tools/read.js +0 -127
  148. package/lambda-package/tools/read.js.map +0 -1
  149. package/lambda-package/tools/search.d.ts +0 -45
  150. package/lambda-package/tools/search.d.ts.map +0 -1
  151. package/lambda-package/tools/search.js +0 -220
  152. package/lambda-package/tools/search.js.map +0 -1
  153. package/lambda-package/types.d.ts +0 -167
  154. package/lambda-package/types.d.ts.map +0 -1
  155. package/lambda-package/types.js +0 -16
  156. package/lambda-package/types.js.map +0 -1
  157. package/lambda-package/utils/format-converter.d.ts +0 -39
  158. package/lambda-package/utils/format-converter.d.ts.map +0 -1
  159. package/lambda-package/utils/format-converter.js +0 -191
  160. package/lambda-package/utils/format-converter.js.map +0 -1
  161. package/lambda-package/utils/truncate.d.ts +0 -26
  162. package/lambda-package/utils/truncate.d.ts.map +0 -1
  163. package/lambda-package/utils/truncate.js +0 -54
  164. package/lambda-package/utils/truncate.js.map +0 -1
  165. package/lambda.zip +0 -0
  166. package/test-output.txt +0 -4
  167. package/tests/auth-smoke.test.ts +0 -480
  168. package/tests/elicit-runner.test.ts +0 -232
  169. package/tests/fetch-tool.test.ts +0 -922
  170. package/tests/hitl-gate.test.ts +0 -267
  171. package/tests/injection-corpus.ts +0 -338
  172. package/tests/pii-allowlist.test.ts +0 -282
  173. package/tests/reader.test.ts +0 -353
  174. package/tests/sanitizer.test.ts +0 -358
  175. package/tests/search.test.ts +0 -456
  176. package/tests/threat-reporter.test.ts +0 -334
  177. package/tsconfig.cdk.json +0 -35
@@ -1,49 +0,0 @@
1
- /**
2
- * PII Allowlist Configuration
3
- *
4
- * Defines trusted phone numbers that should NOT be redacted from web content.
5
- * Primarily for verified health authority and government emergency numbers.
6
- *
7
- * CRITICAL: Only add numbers that are:
8
- * 1. Publicly published institutional/government numbers
9
- * 2. Verified health/safety authorities
10
- * 3. Not personal contact information
11
- */
12
- export interface TrustedPhoneNumber {
13
- /** Display name for logging */
14
- name: string;
15
- /** Normalized phone number variants (all formats this number might appear in) */
16
- numbers: string[];
17
- /** Optional: domains where this number is trusted (empty = trusted everywhere) */
18
- trustedDomains?: string[];
19
- /** Category for audit logging */
20
- category: 'emergency' | 'health_authority' | 'government' | 'helpline';
21
- }
22
- export interface PIIAllowlistConfig {
23
- /** When true, trusted numbers only preserved if source domain matches trustedDomains */
24
- strictDomainMode: boolean;
25
- /** List of verified trusted phone numbers */
26
- trustedPhoneNumbers: TrustedPhoneNumber[];
27
- }
28
- /**
29
- * Normalize a phone number to digits-only format for comparison
30
- */
31
- export declare function normalizePhoneNumber(phone: string): string;
32
- /**
33
- * Extract domain from URL (returns hostname without www.)
34
- */
35
- export declare function extractDomain(url: string): string;
36
- /**
37
- * Built-in allowlist of verified health authority and emergency numbers
38
- */
39
- export declare const DEFAULT_ALLOWLIST: PIIAllowlistConfig;
40
- /**
41
- * Check if a phone number should be allowlisted (not redacted)
42
- *
43
- * @param phoneNumber The phone number to check (in any format)
44
- * @param sourceUrl Optional source URL for domain-scoped allowlisting
45
- * @param config Optional custom config (defaults to DEFAULT_ALLOWLIST)
46
- * @returns The trusted number entry if allowlisted, null otherwise
47
- */
48
- export declare function isAllowlistedPhoneNumber(phoneNumber: string, sourceUrl?: string, config?: PIIAllowlistConfig): TrustedPhoneNumber | null;
49
- //# sourceMappingURL=pii-allowlist.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pii-allowlist.d.ts","sourceRoot":"","sources":["../../src/sanitizer/pii-allowlist.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,kBAAkB;IACjC,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,kFAAkF;IAClF,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,iCAAiC;IACjC,QAAQ,EAAE,WAAW,GAAG,kBAAkB,GAAG,YAAY,GAAG,UAAU,CAAC;CACxE;AAED,MAAM,WAAW,kBAAkB;IACjC,wFAAwF;IACxF,gBAAgB,EAAE,OAAO,CAAC;IAC1B,6CAA6C;IAC7C,mBAAmB,EAAE,kBAAkB,EAAE,CAAC;CAC3C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAOjD;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,kBA+J/B,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,GAAE,kBAAsC,GAC7C,kBAAkB,GAAG,IAAI,CA+C3B"}
@@ -1,231 +0,0 @@
1
- /**
2
- * PII Allowlist Configuration
3
- *
4
- * Defines trusted phone numbers that should NOT be redacted from web content.
5
- * Primarily for verified health authority and government emergency numbers.
6
- *
7
- * CRITICAL: Only add numbers that are:
8
- * 1. Publicly published institutional/government numbers
9
- * 2. Verified health/safety authorities
10
- * 3. Not personal contact information
11
- */
12
- /**
13
- * Normalize a phone number to digits-only format for comparison
14
- */
15
- export function normalizePhoneNumber(phone) {
16
- return phone.replace(/\D/g, '');
17
- }
18
- /**
19
- * Extract domain from URL (returns hostname without www.)
20
- */
21
- export function extractDomain(url) {
22
- try {
23
- const parsedUrl = new URL(url);
24
- return parsedUrl.hostname.replace(/^www\./, '').toLowerCase();
25
- }
26
- catch {
27
- return '';
28
- }
29
- }
30
- /**
31
- * Built-in allowlist of verified health authority and emergency numbers
32
- */
33
- export const DEFAULT_ALLOWLIST = {
34
- strictDomainMode: false, // Default: trust globally, not domain-scoped
35
- trustedPhoneNumbers: [
36
- // Emergency Services
37
- {
38
- name: 'Emergency Services (911)',
39
- numbers: ['911'],
40
- category: 'emergency'
41
- },
42
- // Poison Control
43
- {
44
- name: 'Poison Control Center',
45
- numbers: [
46
- '18002221222',
47
- '8002221222',
48
- '1-800-222-1222',
49
- '800-222-1222'
50
- ],
51
- trustedDomains: [
52
- 'medlineplus.gov',
53
- 'cdc.gov',
54
- 'fda.gov',
55
- 'aapcc.org',
56
- 'poison.org',
57
- 'nih.gov',
58
- 'nlm.nih.gov'
59
- ],
60
- category: 'health_authority'
61
- },
62
- // FDA MedWatch (adverse event reporting)
63
- {
64
- name: 'FDA MedWatch',
65
- numbers: [
66
- '18003321088',
67
- '8003321088',
68
- '1-800-332-1088',
69
- '800-332-1088'
70
- ],
71
- trustedDomains: [
72
- 'fda.gov',
73
- 'medlineplus.gov',
74
- 'cdc.gov',
75
- 'nih.gov'
76
- ],
77
- category: 'health_authority'
78
- },
79
- // CDC INFO
80
- {
81
- name: 'CDC INFO',
82
- numbers: [
83
- '18002324636',
84
- '8002324636',
85
- '1-800-232-4636',
86
- '800-232-4636'
87
- ],
88
- trustedDomains: [
89
- 'cdc.gov',
90
- 'medlineplus.gov',
91
- 'nih.gov'
92
- ],
93
- category: 'health_authority'
94
- },
95
- // SAMHSA National Helpline (substance abuse/mental health)
96
- {
97
- name: 'SAMHSA National Helpline',
98
- numbers: [
99
- '18006624357',
100
- '8006624357',
101
- '1-800-662-4357',
102
- '800-662-4357'
103
- ],
104
- trustedDomains: [
105
- 'samhsa.gov',
106
- 'medlineplus.gov',
107
- 'cdc.gov',
108
- 'nih.gov'
109
- ],
110
- category: 'helpline'
111
- },
112
- // National Suicide Prevention Lifeline
113
- {
114
- name: 'National Suicide Prevention Lifeline',
115
- numbers: [
116
- '18002738255',
117
- '8002738255',
118
- '1-800-273-8255',
119
- '800-273-8255',
120
- '988' // New 3-digit code
121
- ],
122
- trustedDomains: [
123
- 'suicidepreventionlifeline.org',
124
- 'samhsa.gov',
125
- 'medlineplus.gov',
126
- 'cdc.gov',
127
- 'nih.gov'
128
- ],
129
- category: 'helpline'
130
- },
131
- // National Domestic Violence Hotline
132
- {
133
- name: 'National Domestic Violence Hotline',
134
- numbers: [
135
- '18007997233',
136
- '8007997233',
137
- '1-800-799-7233',
138
- '800-799-7233'
139
- ],
140
- trustedDomains: [
141
- 'thehotline.org',
142
- 'cdc.gov',
143
- 'medlineplus.gov',
144
- 'nih.gov'
145
- ],
146
- category: 'helpline'
147
- },
148
- // Medicare
149
- {
150
- name: 'Medicare',
151
- numbers: [
152
- '18006331795',
153
- '8006331795',
154
- '1-800-633-1795',
155
- '800-633-1795'
156
- ],
157
- trustedDomains: [
158
- 'medicare.gov',
159
- 'cms.gov',
160
- 'medlineplus.gov',
161
- 'nih.gov'
162
- ],
163
- category: 'government'
164
- },
165
- // Veterans Crisis Line
166
- {
167
- name: 'Veterans Crisis Line',
168
- numbers: [
169
- '18002738255',
170
- '8002738255',
171
- '1-800-273-8255',
172
- '800-273-8255'
173
- ],
174
- trustedDomains: [
175
- 'va.gov',
176
- 'veteranscrisisline.net',
177
- 'medlineplus.gov',
178
- 'nih.gov'
179
- ],
180
- category: 'helpline'
181
- }
182
- ]
183
- };
184
- /**
185
- * Check if a phone number should be allowlisted (not redacted)
186
- *
187
- * @param phoneNumber The phone number to check (in any format)
188
- * @param sourceUrl Optional source URL for domain-scoped allowlisting
189
- * @param config Optional custom config (defaults to DEFAULT_ALLOWLIST)
190
- * @returns The trusted number entry if allowlisted, null otherwise
191
- */
192
- export function isAllowlistedPhoneNumber(phoneNumber, sourceUrl, config = DEFAULT_ALLOWLIST) {
193
- const normalized = normalizePhoneNumber(phoneNumber);
194
- const sourceDomain = sourceUrl ? extractDomain(sourceUrl) : '';
195
- for (const trustedEntry of config.trustedPhoneNumbers) {
196
- // Check if any variant of this trusted number matches
197
- const matchesNumber = trustedEntry.numbers.some(variant => {
198
- const normalizedVariant = normalizePhoneNumber(variant);
199
- return normalized === normalizedVariant;
200
- });
201
- if (!matchesNumber) {
202
- continue; // Number doesn't match, check next entry
203
- }
204
- // Number matches - now check domain restrictions
205
- const hasDomainRestrictions = trustedEntry.trustedDomains && trustedEntry.trustedDomains.length > 0;
206
- if (!hasDomainRestrictions) {
207
- // No domain restrictions - trust globally
208
- return trustedEntry;
209
- }
210
- // Has domain restrictions
211
- if (config.strictDomainMode && !sourceUrl) {
212
- // Strict mode requires domain match, but no URL provided
213
- continue;
214
- }
215
- if (sourceUrl && trustedEntry.trustedDomains) {
216
- // Check if source domain matches any trusted domain
217
- const isDomainTrusted = trustedEntry.trustedDomains.some(trustedDomain => {
218
- return sourceDomain.endsWith(trustedDomain);
219
- });
220
- if (isDomainTrusted) {
221
- return trustedEntry;
222
- }
223
- }
224
- // In non-strict mode, trust the number even if domain doesn't match
225
- if (!config.strictDomainMode) {
226
- return trustedEntry;
227
- }
228
- }
229
- return null; // No match found
230
- }
231
- //# sourceMappingURL=pii-allowlist.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pii-allowlist.js","sourceRoot":"","sources":["../../src/sanitizer/pii-allowlist.ts"],"names":[],"mappings":"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"}
@@ -1,41 +0,0 @@
1
- /**
2
- * PII Redaction Engine
3
- *
4
- * Detects and redacts personally identifiable information (PII) from content
5
- * to prevent leakage of sensitive data to the LLM.
6
- *
7
- * Redacts: emails, phone numbers, SSNs, credit cards, IP addresses
8
- * Supports allowlisting of trusted institutional phone numbers (e.g., Poison Control)
9
- */
10
- import { type PIIAllowlistConfig } from './pii-allowlist.js';
11
- export interface PIIRedactionResult {
12
- content: string;
13
- pii_types_redacted: string[];
14
- pii_allowlisted: Array<{
15
- type: string;
16
- value: string;
17
- reason: string;
18
- }>;
19
- content_modified: boolean;
20
- metadata: {
21
- redaction_counts: Record<string, number>;
22
- allowlist_counts: Record<string, number>;
23
- };
24
- }
25
- /**
26
- * Redact PII from content
27
- *
28
- * @param content Content to redact PII from
29
- * @param sourceUrl Optional source URL for domain-scoped allowlisting
30
- * @param allowlistConfig Optional custom allowlist config
31
- */
32
- export declare function redactPII(content: string, sourceUrl?: string, allowlistConfig?: PIIAllowlistConfig): PIIRedactionResult;
33
- /**
34
- * Check if content contains any PII (without redacting)
35
- */
36
- export declare function containsPII(content: string): boolean;
37
- /**
38
- * Get list of PII types detected (without redacting)
39
- */
40
- export declare function detectPIITypes(content: string): string[];
41
- //# sourceMappingURL=pii-redactor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pii-redactor.d.ts","sourceRoot":"","sources":["../../src/sanitizer/pii-redactor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAEL,KAAK,kBAAkB,EAExB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,eAAe,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxE,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE;QACR,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACzC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC1C,CAAC;CACH;AAuID;;;;;;GAMG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,EAClB,eAAe,GAAE,kBAAsC,GACtD,kBAAkB,CA2DpB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAYpD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAcxD"}
@@ -1,213 +0,0 @@
1
- /**
2
- * PII Redaction Engine
3
- *
4
- * Detects and redacts personally identifiable information (PII) from content
5
- * to prevent leakage of sensitive data to the LLM.
6
- *
7
- * Redacts: emails, phone numbers, SSNs, credit cards, IP addresses
8
- * Supports allowlisting of trusted institutional phone numbers (e.g., Poison Control)
9
- */
10
- import { isAllowlistedPhoneNumber, DEFAULT_ALLOWLIST } from './pii-allowlist.js';
11
- /**
12
- * PII detection patterns with validators
13
- */
14
- const PII_PATTERNS = [
15
- // Email addresses
16
- {
17
- type: 'EMAIL',
18
- name: 'email',
19
- regex: /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g,
20
- validator: (match) => {
21
- // Basic email validation
22
- return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(match);
23
- }
24
- },
25
- // Phone numbers (US and international formats)
26
- {
27
- type: 'PHONE',
28
- name: 'phone',
29
- regex: /(\+\d{1,3}[\s-]?)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}\b/g,
30
- validator: (match) => {
31
- // Remove non-digits and check length
32
- const digits = match.replace(/\D/g, '');
33
- return digits.length >= 10 && digits.length <= 15;
34
- }
35
- },
36
- // US Social Security Numbers
37
- {
38
- type: 'SSN',
39
- name: 'ssn',
40
- regex: /\b\d{3}[-\s]?\d{2}[-\s]?\d{4}\b/g,
41
- validator: (match) => {
42
- const digits = match.replace(/\D/g, '');
43
- // Basic SSN format check (9 digits)
44
- if (digits.length !== 9)
45
- return false;
46
- // Reject invalid SSN patterns
47
- if (digits === '000000000')
48
- return false;
49
- if (digits.startsWith('000'))
50
- return false;
51
- if (digits.startsWith('666'))
52
- return false;
53
- if (digits.startsWith('9'))
54
- return false;
55
- return true;
56
- }
57
- },
58
- // Credit card numbers (13-19 digits with optional separators)
59
- // Matches: 4-4-4-4 (Visa/MC), 4-6-5 (AmEx), or continuous digits
60
- {
61
- type: 'CC',
62
- name: 'credit_card',
63
- regex: /\b(?:\d{4}[\s-]?\d{6}[\s-]?\d{5}|\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4,7}|\d{13,19})\b/g,
64
- validator: (match) => {
65
- const digits = match.replace(/\D/g, '');
66
- if (digits.length < 13 || digits.length > 19)
67
- return false;
68
- return luhnCheck(digits);
69
- }
70
- },
71
- // IPv4 addresses
72
- {
73
- type: 'IP',
74
- name: 'ipv4',
75
- regex: /\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/g,
76
- validator: (match) => {
77
- // Exclude common non-PII patterns like version numbers
78
- if (match.startsWith('0.0.0'))
79
- return false;
80
- if (match.startsWith('255.255.255'))
81
- return false;
82
- return true;
83
- }
84
- },
85
- // IPv6 addresses (simplified pattern)
86
- {
87
- type: 'IP',
88
- name: 'ipv6',
89
- regex: /\b(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}\b/g,
90
- validator: () => true
91
- },
92
- // US Passport numbers
93
- {
94
- type: 'PASSPORT',
95
- name: 'passport',
96
- regex: /\b[A-Z]{1,2}\d{6,9}\b/g,
97
- validator: (match) => {
98
- // Basic format: 1-2 letters + 6-9 digits
99
- return /^[A-Z]{1,2}\d{6,9}$/.test(match);
100
- }
101
- },
102
- // Driver's license patterns (varies by state, general pattern)
103
- {
104
- type: 'DL',
105
- name: 'drivers_license',
106
- regex: /\b[A-Z]{1,2}\d{5,8}\b/g,
107
- validator: (match) => {
108
- // Overlap with passport, but keep for completeness
109
- return /^[A-Z]{1,2}\d{5,8}$/.test(match);
110
- }
111
- }
112
- ];
113
- /**
114
- * Luhn algorithm for credit card validation
115
- */
116
- function luhnCheck(digits) {
117
- let sum = 0;
118
- let alternate = false;
119
- for (let i = digits.length - 1; i >= 0; i--) {
120
- let n = parseInt(digits.charAt(i), 10);
121
- if (alternate) {
122
- n *= 2;
123
- if (n > 9) {
124
- n = n - 9;
125
- }
126
- }
127
- sum += n;
128
- alternate = !alternate;
129
- }
130
- return sum % 10 === 0;
131
- }
132
- /**
133
- * Redact PII from content
134
- *
135
- * @param content Content to redact PII from
136
- * @param sourceUrl Optional source URL for domain-scoped allowlisting
137
- * @param allowlistConfig Optional custom allowlist config
138
- */
139
- export function redactPII(content, sourceUrl, allowlistConfig = DEFAULT_ALLOWLIST) {
140
- const piiTypesRedacted = new Set();
141
- const redactionCounts = {};
142
- const allowlistCounts = {};
143
- const piiAllowlisted = [];
144
- let sanitizedContent = content;
145
- for (const pattern of PII_PATTERNS) {
146
- const matches = Array.from(sanitizedContent.matchAll(pattern.regex));
147
- for (const match of matches) {
148
- const matchedText = match[0];
149
- // Apply validator if present
150
- if (pattern.validator && !pattern.validator(matchedText)) {
151
- continue;
152
- }
153
- // Check allowlist for phone numbers
154
- if (pattern.type === 'PHONE') {
155
- const allowlistedEntry = isAllowlistedPhoneNumber(matchedText, sourceUrl, allowlistConfig);
156
- if (allowlistedEntry) {
157
- // This is a trusted number - DO NOT redact
158
- piiAllowlisted.push({
159
- type: pattern.type,
160
- value: matchedText,
161
- reason: `Trusted ${allowlistedEntry.category}: ${allowlistedEntry.name}`
162
- });
163
- allowlistCounts[pattern.name] = (allowlistCounts[pattern.name] || 0) + 1;
164
- continue; // Skip redaction
165
- }
166
- }
167
- // Redact the PII
168
- sanitizedContent = sanitizedContent.replace(matchedText, `[REDACTED:${pattern.type}]`);
169
- piiTypesRedacted.add(pattern.name);
170
- redactionCounts[pattern.name] = (redactionCounts[pattern.name] || 0) + 1;
171
- }
172
- }
173
- return {
174
- content: sanitizedContent,
175
- pii_types_redacted: Array.from(piiTypesRedacted),
176
- pii_allowlisted: piiAllowlisted,
177
- content_modified: sanitizedContent !== content,
178
- metadata: {
179
- redaction_counts: redactionCounts,
180
- allowlist_counts: allowlistCounts
181
- }
182
- };
183
- }
184
- /**
185
- * Check if content contains any PII (without redacting)
186
- */
187
- export function containsPII(content) {
188
- for (const pattern of PII_PATTERNS) {
189
- const matches = Array.from(content.matchAll(pattern.regex));
190
- for (const match of matches) {
191
- if (!pattern.validator || pattern.validator(match[0])) {
192
- return true;
193
- }
194
- }
195
- }
196
- return false;
197
- }
198
- /**
199
- * Get list of PII types detected (without redacting)
200
- */
201
- export function detectPIITypes(content) {
202
- const detected = new Set();
203
- for (const pattern of PII_PATTERNS) {
204
- const matches = Array.from(content.matchAll(pattern.regex));
205
- for (const match of matches) {
206
- if (!pattern.validator || pattern.validator(match[0])) {
207
- detected.add(pattern.name);
208
- }
209
- }
210
- }
211
- return Array.from(detected);
212
- }
213
- //# sourceMappingURL=pii-redactor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pii-redactor.js","sourceRoot":"","sources":["../../src/sanitizer/pii-redactor.ts"],"names":[],"mappings":"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"}
@@ -1,33 +0,0 @@
1
- /**
2
- * Severity Classification Engine
3
- *
4
- * Maps injection pattern categories to standardized severity levels.
5
- * Used for threat reporting and compliance documentation.
6
- */
7
- export type Severity = 'CRITICAL' | 'HIGH' | 'MEDIUM' | 'LOW';
8
- export type OverallSeverity = Severity | 'CLEAN';
9
- /**
10
- * Classify severity for a single pattern category
11
- */
12
- export declare function classifySeverity(patternCategory: string): Severity;
13
- /**
14
- * Interface for a threat finding
15
- */
16
- export interface Finding {
17
- pattern_category: string;
18
- severity: Severity;
19
- }
20
- /**
21
- * Aggregate severity across multiple findings
22
- * Returns the highest severity level found, or CLEAN if no findings
23
- */
24
- export declare function aggregateSeverity(findings: Finding[]): OverallSeverity;
25
- /**
26
- * Count findings by severity level
27
- */
28
- export declare function countBySeverity(findings: Finding[]): Record<Severity, number>;
29
- /**
30
- * Get emoji for severity level (for Markdown reports)
31
- */
32
- export declare function getSeverityEmoji(severity: Severity | OverallSeverity): string;
33
- //# sourceMappingURL=severity-classifier.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"severity-classifier.d.ts","sourceRoot":"","sources":["../../src/sanitizer/severity-classifier.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAC9D,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,OAAO,CAAC;AA2DjD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,eAAe,EAAE,MAAM,GAAG,QAAQ,CAElE;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,eAAe,CAatE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAa7E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,eAAe,GAAG,MAAM,CAS7E"}