visus-mcp 0.2.0 → 0.6.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.
- package/.claude/settings.local.json +22 -0
- package/LINKEDIN-STRATEGY.md +367 -0
- package/README.md +491 -16
- package/ROADMAP.md +214 -34
- package/SECURITY-AUDIT-v1.md +277 -0
- package/STATUS.md +801 -42
- package/TROUBLESHOOT-AUTH-20260322-2019.md +291 -0
- package/TROUBLESHOOT-JEST-20260323-1357.md +139 -0
- package/TROUBLESHOOT-LAMBDA-20260322-1945.md +183 -0
- package/VISUS-CLAUDE-CODE-PROMPT.md +1 -1
- package/VISUS-PROJECT-PLAN.md +7 -0
- package/dist/browser/playwright-renderer.d.ts.map +1 -1
- package/dist/browser/playwright-renderer.js +7 -0
- package/dist/browser/playwright-renderer.js.map +1 -1
- package/dist/browser/reader.d.ts +31 -0
- package/dist/browser/reader.d.ts.map +1 -0
- package/dist/browser/reader.js +98 -0
- package/dist/browser/reader.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -5
- package/dist/index.js.map +1 -1
- package/dist/lambda-handler.d.ts +0 -6
- package/dist/lambda-handler.d.ts.map +1 -1
- package/dist/lambda-handler.js +97 -25
- package/dist/lambda-handler.js.map +1 -1
- package/dist/sanitizer/framework-mapper.d.ts +22 -0
- package/dist/sanitizer/framework-mapper.d.ts.map +1 -0
- package/dist/sanitizer/framework-mapper.js +296 -0
- package/dist/sanitizer/framework-mapper.js.map +1 -0
- package/dist/sanitizer/index.d.ts +10 -2
- package/dist/sanitizer/index.d.ts.map +1 -1
- package/dist/sanitizer/index.js +22 -6
- package/dist/sanitizer/index.js.map +1 -1
- package/dist/sanitizer/patterns.js +1 -1
- package/dist/sanitizer/patterns.js.map +1 -1
- package/dist/sanitizer/pii-allowlist.d.ts +49 -0
- package/dist/sanitizer/pii-allowlist.d.ts.map +1 -0
- package/dist/sanitizer/pii-allowlist.js +231 -0
- package/dist/sanitizer/pii-allowlist.js.map +1 -0
- package/dist/sanitizer/pii-redactor.d.ts +13 -1
- package/dist/sanitizer/pii-redactor.d.ts.map +1 -1
- package/dist/sanitizer/pii-redactor.js +26 -2
- package/dist/sanitizer/pii-redactor.js.map +1 -1
- package/dist/sanitizer/severity-classifier.d.ts +33 -0
- package/dist/sanitizer/severity-classifier.d.ts.map +1 -0
- package/dist/sanitizer/severity-classifier.js +113 -0
- package/dist/sanitizer/severity-classifier.js.map +1 -0
- package/dist/sanitizer/threat-reporter.d.ts +65 -0
- package/dist/sanitizer/threat-reporter.d.ts.map +1 -0
- package/dist/sanitizer/threat-reporter.js +160 -0
- package/dist/sanitizer/threat-reporter.js.map +1 -0
- package/dist/tools/fetch-structured.d.ts +5 -0
- package/dist/tools/fetch-structured.d.ts.map +1 -1
- package/dist/tools/fetch-structured.js +59 -8
- package/dist/tools/fetch-structured.js.map +1 -1
- package/dist/tools/fetch.d.ts +5 -0
- package/dist/tools/fetch.d.ts.map +1 -1
- package/dist/tools/fetch.js +43 -9
- package/dist/tools/fetch.js.map +1 -1
- package/dist/tools/read.d.ts +51 -0
- package/dist/tools/read.d.ts.map +1 -0
- package/dist/tools/read.js +127 -0
- package/dist/tools/read.js.map +1 -0
- package/dist/tools/search.d.ts +45 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +220 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/types.d.ts +74 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/format-converter.d.ts +39 -0
- package/dist/utils/format-converter.d.ts.map +1 -0
- package/dist/utils/format-converter.js +191 -0
- package/dist/utils/format-converter.js.map +1 -0
- package/dist/utils/truncate.d.ts +26 -0
- package/dist/utils/truncate.d.ts.map +1 -0
- package/dist/utils/truncate.js +54 -0
- package/dist/utils/truncate.js.map +1 -0
- package/infrastructure/stack.ts +55 -6
- package/jest.config.js +3 -0
- package/package.json +9 -2
- package/src/browser/playwright-renderer.ts +8 -0
- package/src/browser/reader.ts +129 -0
- package/src/index.ts +49 -5
- package/src/lambda-handler.ts +131 -26
- package/src/sanitizer/framework-mapper.ts +347 -0
- package/src/sanitizer/index.ts +28 -6
- package/src/sanitizer/patterns.ts +1 -1
- package/src/sanitizer/pii-allowlist.ts +273 -0
- package/src/sanitizer/pii-redactor.ts +43 -2
- package/src/sanitizer/severity-classifier.ts +132 -0
- package/src/sanitizer/threat-reporter.ts +261 -0
- package/src/tools/fetch-structured.ts +63 -8
- package/src/tools/fetch.ts +45 -9
- package/src/tools/read.ts +143 -0
- package/src/tools/search.ts +263 -0
- package/src/types.ts +71 -0
- package/src/utils/format-converter.ts +236 -0
- package/src/utils/truncate.ts +64 -0
- package/tests/auth-smoke.test.ts +480 -0
- package/tests/fetch-tool.test.ts +595 -2
- package/tests/pii-allowlist.test.ts +282 -0
- package/tests/reader.test.ts +353 -0
- package/tests/sanitizer.test.ts +52 -0
- package/tests/search.test.ts +456 -0
- package/tests/threat-reporter.test.ts +266 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playwright-renderer.js","sourceRoot":"","sources":["../../src/browser/playwright-renderer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"playwright-renderer.js","sourceRoot":"","sources":["../../src/browser/playwright-renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reader Mode - Mozilla Readability Integration
|
|
3
|
+
*
|
|
4
|
+
* Extracts clean article content from web pages using Mozilla's Readability.js.
|
|
5
|
+
* This module strips navigation, ads, and boilerplate to return main article content.
|
|
6
|
+
*
|
|
7
|
+
* CRITICAL: Content extraction happens BEFORE sanitization. The pipeline is:
|
|
8
|
+
* Playwright renders → Readability extracts → Sanitizer runs → Token ceiling applied
|
|
9
|
+
*/
|
|
10
|
+
import type { Result } from '../types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Result from reader mode extraction
|
|
13
|
+
*/
|
|
14
|
+
export interface ReaderResult {
|
|
15
|
+
title: string;
|
|
16
|
+
byline: string | null;
|
|
17
|
+
publishedTime: string | null;
|
|
18
|
+
content: string;
|
|
19
|
+
excerpt: string | null;
|
|
20
|
+
wordCount: number;
|
|
21
|
+
readerModeAvailable: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Extract clean article content using Mozilla Readability
|
|
25
|
+
*
|
|
26
|
+
* @param html - Rendered HTML from Playwright
|
|
27
|
+
* @param url - Original URL (required for relative link resolution)
|
|
28
|
+
* @returns Result containing extracted article or fallback to full HTML
|
|
29
|
+
*/
|
|
30
|
+
export declare function extractArticle(html: string, url: string): Result<ReaderResult, Error>;
|
|
31
|
+
//# sourceMappingURL=reader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../../src/browser/reader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACV,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,CAkD7B"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reader Mode - Mozilla Readability Integration
|
|
3
|
+
*
|
|
4
|
+
* Extracts clean article content from web pages using Mozilla's Readability.js.
|
|
5
|
+
* This module strips navigation, ads, and boilerplate to return main article content.
|
|
6
|
+
*
|
|
7
|
+
* CRITICAL: Content extraction happens BEFORE sanitization. The pipeline is:
|
|
8
|
+
* Playwright renders → Readability extracts → Sanitizer runs → Token ceiling applied
|
|
9
|
+
*/
|
|
10
|
+
import { Readability } from '@mozilla/readability';
|
|
11
|
+
import { JSDOM } from 'jsdom';
|
|
12
|
+
import { Ok, Err } from '../types.js';
|
|
13
|
+
/**
|
|
14
|
+
* Extract clean article content using Mozilla Readability
|
|
15
|
+
*
|
|
16
|
+
* @param html - Rendered HTML from Playwright
|
|
17
|
+
* @param url - Original URL (required for relative link resolution)
|
|
18
|
+
* @returns Result containing extracted article or fallback to full HTML
|
|
19
|
+
*/
|
|
20
|
+
export function extractArticle(html, url) {
|
|
21
|
+
try {
|
|
22
|
+
// Parse HTML with jsdom
|
|
23
|
+
const dom = new JSDOM(html, { url });
|
|
24
|
+
const document = dom.window.document;
|
|
25
|
+
// Attempt extraction with Readability
|
|
26
|
+
const reader = new Readability(document);
|
|
27
|
+
const article = reader.parse();
|
|
28
|
+
// If Readability succeeds, return extracted content
|
|
29
|
+
if (article && article.textContent) {
|
|
30
|
+
const wordCount = estimateWordCount(article.textContent);
|
|
31
|
+
return Ok({
|
|
32
|
+
title: article.title || 'Untitled',
|
|
33
|
+
byline: article.byline || null,
|
|
34
|
+
publishedTime: article.publishedTime || null,
|
|
35
|
+
content: article.textContent,
|
|
36
|
+
excerpt: article.excerpt || null,
|
|
37
|
+
wordCount,
|
|
38
|
+
readerModeAvailable: true
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
// Readability failed - fallback to raw text extraction
|
|
42
|
+
const fallbackText = extractFallbackText(document);
|
|
43
|
+
const wordCount = estimateWordCount(fallbackText);
|
|
44
|
+
// Extract title from <title> tag as fallback
|
|
45
|
+
const titleElement = document.querySelector('title');
|
|
46
|
+
const fallbackTitle = titleElement?.textContent?.trim() || 'Untitled';
|
|
47
|
+
return Ok({
|
|
48
|
+
title: fallbackTitle,
|
|
49
|
+
byline: null,
|
|
50
|
+
publishedTime: null,
|
|
51
|
+
content: fallbackText,
|
|
52
|
+
excerpt: null,
|
|
53
|
+
wordCount,
|
|
54
|
+
readerModeAvailable: false
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
return Err(error instanceof Error
|
|
59
|
+
? error
|
|
60
|
+
: new Error(`Reader extraction failed: ${String(error)}`));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Estimate word count from text content
|
|
65
|
+
*
|
|
66
|
+
* @param text - Text content to count
|
|
67
|
+
* @returns Estimated word count
|
|
68
|
+
*/
|
|
69
|
+
function estimateWordCount(text) {
|
|
70
|
+
if (!text || text.trim().length === 0) {
|
|
71
|
+
return 0;
|
|
72
|
+
}
|
|
73
|
+
// Split on whitespace and filter out empty strings
|
|
74
|
+
const words = text.trim().split(/\s+/).filter(word => word.length > 0);
|
|
75
|
+
return words.length;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Fallback text extraction when Readability fails
|
|
79
|
+
*
|
|
80
|
+
* Extracts visible text from the page, skipping script/style elements.
|
|
81
|
+
*
|
|
82
|
+
* @param document - JSDOM document
|
|
83
|
+
* @returns Extracted text content
|
|
84
|
+
*/
|
|
85
|
+
function extractFallbackText(document) {
|
|
86
|
+
// Remove script and style elements
|
|
87
|
+
const scripts = document.querySelectorAll('script, style, noscript');
|
|
88
|
+
scripts.forEach(el => el.remove());
|
|
89
|
+
// Extract body text
|
|
90
|
+
const bodyText = document.body?.textContent || '';
|
|
91
|
+
// Clean up whitespace
|
|
92
|
+
return bodyText
|
|
93
|
+
.split('\n')
|
|
94
|
+
.map(line => line.trim())
|
|
95
|
+
.filter(line => line.length > 0)
|
|
96
|
+
.join('\n');
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reader.js","sourceRoot":"","sources":["../../src/browser/reader.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;GAcG;AA4NH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -19,6 +19,8 @@ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
|
|
|
19
19
|
import { CallToolRequestSchema, ListToolsRequestSchema, ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';
|
|
20
20
|
import { visusFetch, visusFetchToolDefinition } from './tools/fetch.js';
|
|
21
21
|
import { visusFetchStructured, visusFetchStructuredToolDefinition } from './tools/fetch-structured.js';
|
|
22
|
+
import { visusRead, visusReadToolDefinition } from './tools/read.js';
|
|
23
|
+
import { visusSearch, visusSearchToolDefinition } from './tools/search.js';
|
|
22
24
|
import { closeBrowser } from './browser/playwright-renderer.js';
|
|
23
25
|
import { detectRuntime, logRuntimeConfig, validateRuntime } from './runtime.js';
|
|
24
26
|
/**
|
|
@@ -39,7 +41,9 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
39
41
|
return {
|
|
40
42
|
tools: [
|
|
41
43
|
visusFetchToolDefinition,
|
|
42
|
-
visusFetchStructuredToolDefinition
|
|
44
|
+
visusFetchStructuredToolDefinition,
|
|
45
|
+
visusReadToolDefinition,
|
|
46
|
+
visusSearchToolDefinition
|
|
43
47
|
]
|
|
44
48
|
};
|
|
45
49
|
});
|
|
@@ -78,6 +82,34 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
78
82
|
]
|
|
79
83
|
};
|
|
80
84
|
}
|
|
85
|
+
case 'visus_read': {
|
|
86
|
+
const result = await visusRead(args);
|
|
87
|
+
if (!result.ok) {
|
|
88
|
+
throw new McpError(ErrorCode.InternalError, `visus_read failed: ${result.error.message}`);
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
content: [
|
|
92
|
+
{
|
|
93
|
+
type: 'text',
|
|
94
|
+
text: JSON.stringify(result.value, null, 2)
|
|
95
|
+
}
|
|
96
|
+
]
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
case 'visus_search': {
|
|
100
|
+
const result = await visusSearch(args);
|
|
101
|
+
if (!result.ok) {
|
|
102
|
+
throw new McpError(ErrorCode.InternalError, `visus_search failed: ${result.error.message}`);
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
content: [
|
|
106
|
+
{
|
|
107
|
+
type: 'text',
|
|
108
|
+
text: JSON.stringify(result.value, null, 2)
|
|
109
|
+
}
|
|
110
|
+
]
|
|
111
|
+
};
|
|
112
|
+
}
|
|
81
113
|
default:
|
|
82
114
|
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
|
|
83
115
|
}
|
|
@@ -102,7 +134,7 @@ async function startMcpServer() {
|
|
|
102
134
|
event: 'mcp_server_started',
|
|
103
135
|
name: 'visus-mcp',
|
|
104
136
|
version: '0.2.0',
|
|
105
|
-
tools: ['visus_fetch', 'visus_fetch_structured']
|
|
137
|
+
tools: ['visus_fetch', 'visus_fetch_structured', 'visus_read', 'visus_search']
|
|
106
138
|
}));
|
|
107
139
|
// Graceful shutdown
|
|
108
140
|
process.on('SIGINT', async () => {
|
|
@@ -146,9 +178,9 @@ async function main() {
|
|
|
146
178
|
}));
|
|
147
179
|
}
|
|
148
180
|
}
|
|
149
|
-
// Export Lambda
|
|
150
|
-
//
|
|
151
|
-
export { handler
|
|
181
|
+
// Export Lambda handler (for AWS deployment)
|
|
182
|
+
// This is only used when the file is imported as a module by Lambda runtime
|
|
183
|
+
export { handler } from './lambda-handler.js';
|
|
152
184
|
// Run stdio MCP server when executed directly (not in Lambda)
|
|
153
185
|
if (!process.env.AWS_LAMBDA_FUNCTION_NAME) {
|
|
154
186
|
main().catch((error) => {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,SAAS,EACT,QAAQ,EACT,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,kCAAkC,EAAE,MAAM,6BAA6B,CAAC;AACvG,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEhF;;GAEG;AACH,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;IACE,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,OAAO;CACjB,EACD;IACE,YAAY,EAAE;QACZ,KAAK,EAAE,EAAE;KACV;CACF,CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;IAC1D,OAAO;QACL,KAAK,EAAE;YACL,wBAAwB;YACxB,kCAAkC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,SAAS,EACT,QAAQ,EACT,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,kCAAkC,EAAE,MAAM,6BAA6B,CAAC;AACvG,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEhF;;GAEG;AACH,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;IACE,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,OAAO;CACjB,EACD;IACE,YAAY,EAAE;QACZ,KAAK,EAAE,EAAE;KACV;CACF,CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;IAC1D,OAAO;QACL,KAAK,EAAE;YACL,wBAAwB;YACxB,kCAAkC;YAClC,uBAAuB;YACvB,yBAAyB;SAC1B;KACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAChE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAEjD,IAAI,CAAC;QACH,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAW,CAAC,CAAC;gBAE7C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;oBACf,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,aAAa,EACvB,uBAAuB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAC9C,CAAC;gBACJ,CAAC;gBAED,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;yBAC5C;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,wBAAwB,CAAC,CAAC,CAAC;gBAC9B,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,IAAW,CAAC,CAAC;gBAEvD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;oBACf,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,aAAa,EACvB,kCAAkC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CACzD,CAAC;gBACJ,CAAC;gBAED,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;yBAC5C;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAW,CAAC,CAAC;gBAE5C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;oBACf,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,aAAa,EACvB,sBAAsB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAC7C,CAAC;gBACJ,CAAC;gBAED,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;yBAC5C;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,cAAc,CAAC,CAAC,CAAC;gBACpB,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAW,CAAC,CAAC;gBAE9C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;oBACf,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,aAAa,EACvB,wBAAwB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAC/C,CAAC;gBACJ,CAAC;gBAED,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;yBAC5C;qBACF;iBACF,CAAC;YACJ,CAAC;YAED;gBACE,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,cAAc,EACxB,iBAAiB,IAAI,EAAE,CACxB,CAAC;QACN,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;YAC9B,MAAM,KAAK,CAAC;QACd,CAAC;QAED,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,aAAa,EACvB,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACnF,CAAC;IACJ,CAAC;AACH,CAAC,CAAC,CAAC;AAEH;;GAEG;AACH,KAAK,UAAU,cAAc;IAC3B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAE7C,8BAA8B;IAC9B,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,uDAAuD;IACvD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;QAC3B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,KAAK,EAAE,oBAAoB;QAC3B,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,OAAO;QAChB,KAAK,EAAE,CAAC,aAAa,EAAE,wBAAwB,EAAE,YAAY,EAAE,cAAc,CAAC;KAC/E,CAAC,CAAC,CAAC;IAEJ,oBAAoB;IACpB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC9B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YAC3B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,KAAK,EAAE,qBAAqB;SAC7B,CAAC,CAAC,CAAC;QAEJ,MAAM,YAAY,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QAC/B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YAC3B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,KAAK,EAAE,qBAAqB;SAC7B,CAAC,CAAC,CAAC;QAEJ,MAAM,YAAY,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,6BAA6B;IAC7B,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC1B,eAAe,CAAC,OAAO,CAAC,CAAC;IAEzB,mCAAmC;IACnC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,qCAAqC;QACrC,MAAM,cAAc,EAAE,CAAC;IACzB,CAAC;SAAM,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC5B,8BAA8B;QAC9B,6DAA6D;QAC7D,qEAAqE;QACrE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YAC3B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,KAAK,EAAE,sBAAsB;YAC7B,OAAO,EAAE,+CAA+C;SACzD,CAAC,CAAC,CAAC;IACN,CAAC;AACH,CAAC;AAED,6CAA6C;AAC7C,4EAA4E;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,8DAA8D;AAC9D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC;IAC1C,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACrB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YAC3B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,KAAK,EAAE,eAAe;YACtB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC,CAAC;QACJ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/lambda-handler.d.ts
CHANGED
|
@@ -25,10 +25,4 @@ import type { APIGatewayProxyEvent, APIGatewayProxyResult, Context } from 'aws-l
|
|
|
25
25
|
* @returns API Gateway response
|
|
26
26
|
*/
|
|
27
27
|
export declare function handler(event: APIGatewayProxyEvent, context: Context): Promise<APIGatewayProxyResult>;
|
|
28
|
-
/**
|
|
29
|
-
* Health check handler
|
|
30
|
-
*
|
|
31
|
-
* @returns API Gateway response
|
|
32
|
-
*/
|
|
33
|
-
export declare function healthCheck(): Promise<APIGatewayProxyResult>;
|
|
34
28
|
//# sourceMappingURL=lambda-handler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lambda-handler.d.ts","sourceRoot":"","sources":["../src/lambda-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"lambda-handler.d.ts","sourceRoot":"","sources":["../src/lambda-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAsFvF;;;;;;;;;;GAUG;AACH,wBAAsB,OAAO,CAC3B,KAAK,EAAE,oBAAoB,EAC3B,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,qBAAqB,CAAC,CAsNhC"}
|
package/dist/lambda-handler.js
CHANGED
|
@@ -12,9 +12,59 @@
|
|
|
12
12
|
* - Reserved concurrent executions set
|
|
13
13
|
* - No plaintext logging of tokens/PII
|
|
14
14
|
*/
|
|
15
|
+
import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
|
|
16
|
+
import { DynamoDBDocumentClient, PutCommand } from '@aws-sdk/lib-dynamodb';
|
|
15
17
|
import { visusFetch } from './tools/fetch.js';
|
|
16
18
|
import { visusFetchStructured } from './tools/fetch-structured.js';
|
|
17
19
|
import { closeBrowser } from './browser/playwright-renderer.js';
|
|
20
|
+
// Initialize DynamoDB client
|
|
21
|
+
const ddbClient = new DynamoDBClient({});
|
|
22
|
+
const docClient = DynamoDBDocumentClient.from(ddbClient);
|
|
23
|
+
/**
|
|
24
|
+
* Fire-and-forget audit logging to DynamoDB
|
|
25
|
+
*
|
|
26
|
+
* Logs request metadata without blocking the response.
|
|
27
|
+
* Errors are logged but do not affect the API response.
|
|
28
|
+
*
|
|
29
|
+
* @param userId User ID from Cognito JWT
|
|
30
|
+
* @param requestId AWS request ID
|
|
31
|
+
* @param url URL being fetched
|
|
32
|
+
* @param endpoint API endpoint (/fetch or /fetch-structured)
|
|
33
|
+
* @param patternsDetected Sanitization patterns detected
|
|
34
|
+
* @param piiRedacted PII types redacted
|
|
35
|
+
*/
|
|
36
|
+
function logAuditEvent(userId, requestId, url, endpoint, patternsDetected, piiRedacted) {
|
|
37
|
+
const tableName = process.env.AUDIT_TABLE_NAME;
|
|
38
|
+
if (!tableName) {
|
|
39
|
+
console.error('AUDIT_TABLE_NAME not set - skipping audit logging');
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const now = new Date();
|
|
43
|
+
const ttl = Math.floor(now.getTime() / 1000) + (30 * 24 * 60 * 60); // 30 days from now
|
|
44
|
+
const item = {
|
|
45
|
+
user_id: userId,
|
|
46
|
+
timestamp: now.toISOString(),
|
|
47
|
+
request_id: requestId,
|
|
48
|
+
url,
|
|
49
|
+
endpoint,
|
|
50
|
+
patterns_detected: patternsDetected,
|
|
51
|
+
pii_redacted: piiRedacted,
|
|
52
|
+
ttl, // Auto-delete after 30 days
|
|
53
|
+
};
|
|
54
|
+
// Fire-and-forget: do not await
|
|
55
|
+
docClient.send(new PutCommand({
|
|
56
|
+
TableName: tableName,
|
|
57
|
+
Item: item,
|
|
58
|
+
})).catch((error) => {
|
|
59
|
+
// Log error but do not throw (fire-and-forget pattern)
|
|
60
|
+
console.error(JSON.stringify({
|
|
61
|
+
timestamp: now.toISOString(),
|
|
62
|
+
event: 'audit_logging_failed',
|
|
63
|
+
error: error instanceof Error ? error.message : String(error),
|
|
64
|
+
request_id: requestId,
|
|
65
|
+
}));
|
|
66
|
+
});
|
|
67
|
+
}
|
|
18
68
|
/**
|
|
19
69
|
* Lambda handler for Visus API
|
|
20
70
|
*
|
|
@@ -39,10 +89,13 @@ export async function handler(event, context) {
|
|
|
39
89
|
user_agent: event.headers['User-Agent'] || event.headers['user-agent'],
|
|
40
90
|
}));
|
|
41
91
|
try {
|
|
42
|
-
// CORS headers for all responses
|
|
92
|
+
// CORS headers for all responses (environment-variable-driven allowlist)
|
|
93
|
+
const allowedOrigins = (process.env.ALLOWED_ORIGINS || '*').split(',');
|
|
94
|
+
const origin = event.headers.origin || event.headers.Origin || '';
|
|
95
|
+
const allowOrigin = allowedOrigins.includes(origin) ? origin : allowedOrigins[0] || '*';
|
|
43
96
|
const corsHeaders = {
|
|
44
|
-
'Access-Control-Allow-Origin':
|
|
45
|
-
'Access-Control-Allow-Methods': 'POST, OPTIONS',
|
|
97
|
+
'Access-Control-Allow-Origin': allowOrigin,
|
|
98
|
+
'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
|
|
46
99
|
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
|
|
47
100
|
'Content-Type': 'application/json',
|
|
48
101
|
};
|
|
@@ -54,7 +107,21 @@ export async function handler(event, context) {
|
|
|
54
107
|
body: '',
|
|
55
108
|
};
|
|
56
109
|
}
|
|
57
|
-
//
|
|
110
|
+
// Health check endpoint (no auth required, allows GET and POST)
|
|
111
|
+
// SECURITY FIX (FINDING 2): Moved before POST-only validation to support standard GET health checks
|
|
112
|
+
if (event.path === '/health' || event.path === '/dev/health' || event.path === '/prod/health') {
|
|
113
|
+
return {
|
|
114
|
+
statusCode: 200,
|
|
115
|
+
headers: corsHeaders,
|
|
116
|
+
body: JSON.stringify({
|
|
117
|
+
status: 'healthy',
|
|
118
|
+
service: 'visus-mcp',
|
|
119
|
+
version: '0.3.1',
|
|
120
|
+
timestamp: new Date().toISOString(),
|
|
121
|
+
}),
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
// Only allow POST requests for protected endpoints
|
|
58
125
|
if (event.httpMethod !== 'POST') {
|
|
59
126
|
return {
|
|
60
127
|
statusCode: 405,
|
|
@@ -74,8 +141,28 @@ export async function handler(event, context) {
|
|
|
74
141
|
body: JSON.stringify({ error: 'Invalid JSON in request body' }),
|
|
75
142
|
};
|
|
76
143
|
}
|
|
144
|
+
// SECURITY FIX (FINDING 1): Application-level authentication enforcement
|
|
145
|
+
// Extract user ID from Cognito authorizer
|
|
146
|
+
const userId = event.requestContext.authorizer?.claims?.sub;
|
|
147
|
+
// Require authentication for all protected endpoints (not already handled above)
|
|
148
|
+
if (!userId) {
|
|
149
|
+
console.error(JSON.stringify({
|
|
150
|
+
timestamp: new Date().toISOString(),
|
|
151
|
+
event: 'auth_required',
|
|
152
|
+
request_id: requestId,
|
|
153
|
+
path: event.path,
|
|
154
|
+
reason: 'Missing Cognito authorizer context - Lambda must be invoked via API Gateway',
|
|
155
|
+
}));
|
|
156
|
+
return {
|
|
157
|
+
statusCode: 401,
|
|
158
|
+
headers: corsHeaders,
|
|
159
|
+
body: JSON.stringify({
|
|
160
|
+
error: 'Unauthorized: Authentication required. This Lambda must be invoked via API Gateway with Cognito authorizer.',
|
|
161
|
+
}),
|
|
162
|
+
};
|
|
163
|
+
}
|
|
77
164
|
// Route based on path
|
|
78
|
-
if (event.path === '/fetch' || event.path === '/prod/fetch') {
|
|
165
|
+
if (event.path === '/fetch' || event.path === '/dev/fetch' || event.path === '/prod/fetch') {
|
|
79
166
|
const fetchReq = body;
|
|
80
167
|
// Validate request
|
|
81
168
|
if (!fetchReq.url || typeof fetchReq.url !== 'string') {
|
|
@@ -94,13 +181,15 @@ export async function handler(event, context) {
|
|
|
94
181
|
body: JSON.stringify({ error: result.error.message }),
|
|
95
182
|
};
|
|
96
183
|
}
|
|
184
|
+
// Fire-and-forget audit logging
|
|
185
|
+
logAuditEvent(userId, requestId, fetchReq.url, '/fetch', result.value.sanitization.patterns_detected, result.value.sanitization.pii_types_redacted);
|
|
97
186
|
return {
|
|
98
187
|
statusCode: 200,
|
|
99
188
|
headers: corsHeaders,
|
|
100
189
|
body: JSON.stringify(result.value),
|
|
101
190
|
};
|
|
102
191
|
}
|
|
103
|
-
if (event.path === '/fetch-structured' || event.path === '/prod/fetch-structured') {
|
|
192
|
+
if (event.path === '/fetch-structured' || event.path === '/dev/fetch-structured' || event.path === '/prod/fetch-structured') {
|
|
104
193
|
const fetchReq = body;
|
|
105
194
|
// Validate request
|
|
106
195
|
if (!fetchReq.url || typeof fetchReq.url !== 'string') {
|
|
@@ -126,6 +215,8 @@ export async function handler(event, context) {
|
|
|
126
215
|
body: JSON.stringify({ error: result.error.message }),
|
|
127
216
|
};
|
|
128
217
|
}
|
|
218
|
+
// Fire-and-forget audit logging
|
|
219
|
+
logAuditEvent(userId, requestId, fetchReq.url, '/fetch-structured', result.value.sanitization.patterns_detected, result.value.sanitization.pii_types_redacted);
|
|
129
220
|
return {
|
|
130
221
|
statusCode: 200,
|
|
131
222
|
headers: corsHeaders,
|
|
@@ -163,23 +254,4 @@ export async function handler(event, context) {
|
|
|
163
254
|
await closeBrowser();
|
|
164
255
|
}
|
|
165
256
|
}
|
|
166
|
-
/**
|
|
167
|
-
* Health check handler
|
|
168
|
-
*
|
|
169
|
-
* @returns API Gateway response
|
|
170
|
-
*/
|
|
171
|
-
export async function healthCheck() {
|
|
172
|
-
return {
|
|
173
|
-
statusCode: 200,
|
|
174
|
-
headers: {
|
|
175
|
-
'Content-Type': 'application/json',
|
|
176
|
-
},
|
|
177
|
-
body: JSON.stringify({
|
|
178
|
-
status: 'healthy',
|
|
179
|
-
service: 'visus-mcp',
|
|
180
|
-
version: '0.2.0',
|
|
181
|
-
timestamp: new Date().toISOString(),
|
|
182
|
-
}),
|
|
183
|
-
};
|
|
184
|
-
}
|
|
185
257
|
//# sourceMappingURL=lambda-handler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lambda-handler.js","sourceRoot":"","sources":["../src/lambda-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"lambda-handler.js","sourceRoot":"","sources":["../src/lambda-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compliance Framework Mapper
|
|
3
|
+
*
|
|
4
|
+
* Maps injection pattern categories to compliance framework identifiers:
|
|
5
|
+
* - OWASP LLM Top 10 (2025)
|
|
6
|
+
* - NIST AI 600-1 (Generative AI Profile)
|
|
7
|
+
* - MITRE ATLAS (Adversarial Threat Landscape for AI Systems)
|
|
8
|
+
*/
|
|
9
|
+
export interface FrameworkMappings {
|
|
10
|
+
owasp_llm: string;
|
|
11
|
+
nist_ai_600_1: string;
|
|
12
|
+
mitre_atlas: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Get framework mappings for a pattern category
|
|
16
|
+
*/
|
|
17
|
+
export declare function getFrameworkMappings(patternCategory: string): FrameworkMappings;
|
|
18
|
+
/**
|
|
19
|
+
* Get all supported frameworks
|
|
20
|
+
*/
|
|
21
|
+
export declare function getSupportedFrameworks(): string[];
|
|
22
|
+
//# sourceMappingURL=framework-mapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework-mapper.d.ts","sourceRoot":"","sources":["../../src/sanitizer/framework-mapper.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AA6TD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,MAAM,GAAG,iBAAiB,CAE/E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAMjD"}
|