accessflow-mcp-server 1.0.15 → 1.2.0-beta.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/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +67 -0
- package/dist/index.js.map +1 -0
- package/dist/services/apiSchemas.d.ts +200 -0
- package/dist/services/apiSchemas.d.ts.map +1 -0
- package/dist/services/apiSchemas.js +95 -0
- package/dist/services/apiSchemas.js.map +1 -0
- package/dist/services/apiService.d.ts +37 -0
- package/dist/services/apiService.d.ts.map +1 -0
- package/dist/services/apiService.js +201 -0
- package/dist/services/apiService.js.map +1 -0
- package/dist/services/loggerService.d.ts +3 -0
- package/dist/services/loggerService.d.ts.map +1 -0
- package/dist/services/loggerService.js +38 -0
- package/dist/services/loggerService.js.map +1 -0
- package/dist/services/rulesService.d.ts +10 -0
- package/dist/services/rulesService.d.ts.map +1 -0
- package/dist/services/rulesService.js +70 -0
- package/dist/services/rulesService.js.map +1 -0
- package/dist/tools/getIssueRemediation.d.ts +16 -0
- package/dist/tools/getIssueRemediation.d.ts.map +1 -0
- package/dist/tools/getIssueRemediation.js +77 -0
- package/dist/tools/getIssueRemediation.js.map +1 -0
- package/dist/tools/getMostUrgentIssues.d.ts +7 -0
- package/dist/tools/getMostUrgentIssues.d.ts.map +1 -0
- package/dist/tools/getMostUrgentIssues.js +94 -0
- package/dist/tools/getMostUrgentIssues.js.map +1 -0
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +21 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/resolveIssue.d.ts +16 -0
- package/dist/tools/resolveIssue.d.ts.map +1 -0
- package/dist/tools/resolveIssue.js +77 -0
- package/dist/tools/resolveIssue.js.map +1 -0
- package/dist/tools/toolRegistry.d.ts +19 -0
- package/dist/tools/toolRegistry.d.ts.map +1 -0
- package/dist/tools/toolRegistry.js +9 -0
- package/dist/tools/toolRegistry.js.map +1 -0
- package/dist/types/issues.d.ts +32 -0
- package/dist/types/issues.d.ts.map +1 -0
- package/dist/types/issues.js +6 -0
- package/dist/types/issues.js.map +1 -0
- package/dist/types/remediation.d.ts +24 -0
- package/dist/types/remediation.d.ts.map +1 -0
- package/dist/types/remediation.js +6 -0
- package/dist/types/remediation.js.map +1 -0
- package/dist/utils/domains.d.ts +2 -0
- package/dist/utils/domains.d.ts.map +1 -0
- package/dist/utils/domains.js +14 -0
- package/dist/utils/domains.js.map +1 -0
- package/dist/utils/issues.d.ts +16 -0
- package/dist/utils/issues.d.ts.map +1 -0
- package/dist/utils/issues.js +24 -0
- package/dist/utils/issues.js.map +1 -0
- package/dist/utils/middleware.d.ts +14 -0
- package/dist/utils/middleware.d.ts.map +1 -0
- package/dist/utils/middleware.js +37 -0
- package/dist/utils/middleware.js.map +1 -0
- package/dist/utils/remediation.d.ts +27 -0
- package/dist/utils/remediation.d.ts.map +1 -0
- package/dist/utils/remediation.js +139 -0
- package/dist/utils/remediation.js.map +1 -0
- package/dist/utils.d.ts +2 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +14 -0
- package/dist/utils.js.map +1 -0
- package/package.json +48 -14
- package/TOOL_REFERENCE.md +0 -126
- package/assets/MCP_banner.png +0 -0
- package/bin/flow-mcp +0 -4
- package/build/index.d.ts +0 -12
- package/build/index.d.ts.map +0 -1
- package/build/index.js +0 -95
- package/build/index.js.map +0 -1
- package/build/prompts/formatUrgentIssues.d.ts +0 -4
- package/build/prompts/formatUrgentIssues.d.ts.map +0 -1
- package/build/prompts/formatUrgentIssues.js +0 -78
- package/build/prompts/formatUrgentIssues.js.map +0 -1
- package/build/prompts/index.d.ts +0 -4
- package/build/prompts/index.d.ts.map +0 -1
- package/build/prompts/index.js +0 -12
- package/build/prompts/index.js.map +0 -1
- package/build/prompts/types.d.ts +0 -22
- package/build/prompts/types.d.ts.map +0 -1
- package/build/prompts/types.js +0 -2
- package/build/prompts/types.js.map +0 -1
- package/build/rules.json +0 -4591
- package/build/services/accessflow.d.ts +0 -6
- package/build/services/accessflow.d.ts.map +0 -1
- package/build/services/accessflow.js +0 -8
- package/build/services/accessflow.js.map +0 -1
- package/build/tools/getIssueRemediation.d.ts +0 -4
- package/build/tools/getIssueRemediation.d.ts.map +0 -1
- package/build/tools/getIssueRemediation.js +0 -165
- package/build/tools/getIssueRemediation.js.map +0 -1
- package/build/tools/getMostUrgentIssues.d.ts +0 -4
- package/build/tools/getMostUrgentIssues.d.ts.map +0 -1
- package/build/tools/getMostUrgentIssues.js +0 -106
- package/build/tools/getMostUrgentIssues.js.map +0 -1
- package/build/tools/index.d.ts +0 -9
- package/build/tools/index.d.ts.map +0 -1
- package/build/tools/index.js +0 -19
- package/build/tools/index.js.map +0 -1
- package/build/tools/types.d.ts +0 -19
- package/build/tools/types.d.ts.map +0 -1
- package/build/tools/types.js +0 -2
- package/build/tools/types.js.map +0 -1
- package/build/utils/config.d.ts +0 -8
- package/build/utils/config.d.ts.map +0 -1
- package/build/utils/config.js +0 -26
- package/build/utils/config.js.map +0 -1
- package/build/utils/database.d.ts +0 -13
- package/build/utils/database.d.ts.map +0 -1
- package/build/utils/database.js +0 -64
- package/build/utils/database.js.map +0 -1
- package/build/utils/domain.d.ts +0 -2
- package/build/utils/domain.d.ts.map +0 -1
- package/build/utils/domain.js +0 -11
- package/build/utils/domain.js.map +0 -1
- package/build/utils/logger.d.ts +0 -18
- package/build/utils/logger.d.ts.map +0 -1
- package/build/utils/logger.js +0 -51
- package/build/utils/logger.js.map +0 -1
- package/build/utils/responses.d.ts +0 -19
- package/build/utils/responses.d.ts.map +0 -1
- package/build/utils/responses.js +0 -41
- package/build/utils/responses.js.map +0 -1
- package/build/utils/validation.d.ts +0 -7
- package/build/utils/validation.d.ts.map +0 -1
- package/build/utils/validation.js +0 -47
- package/build/utils/validation.js.map +0 -1
- package/mcp-config.json +0 -11
- package/src/index.ts +0 -125
- package/src/services/accessflow.ts +0 -9
- package/src/tools/getIssueRemediation.ts +0 -218
- package/src/tools/getMostUrgentIssues.ts +0 -144
- package/src/tools/index.ts +0 -33
- package/src/tools/types.ts +0 -20
- package/src/utils/domain.ts +0 -13
- package/test.mjs +0 -63
- package/tsconfig.json +0 -20
- /package/{src → dist/data}/rules.json +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"accessflow.d.ts","sourceRoot":"","sources":["../../src/services/accessflow.ts"],"names":[],"mappings":"AAAA,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,EAAE,MAAM;IAIxB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CACrD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"accessflow.js","sourceRoot":"","sources":["../../src/services/accessflow.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,iBAAiB;IACpB,UAAU,CAAS;IAE3B,YAAY,UAAkB;QAC5B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,WAAmB,EAAE,MAAc,IAAG,CAAC;CACzD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getIssueRemediation.d.ts","sourceRoot":"","sources":["../../src/tools/getIssueRemediation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAe,MAAM,YAAY,CAAC;AAEtE,eAAO,MAAM,6BAA6B,EAAE,cAe3C,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,WAkGxC,CAAC"}
|
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
import { McpError, ErrorCode } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
-
export const getIssueRemediationDefinition = {
|
|
3
|
-
name: "getIssueRemediation",
|
|
4
|
-
description: "Get detailed remediation guidance for an accessibility issue by issue display name",
|
|
5
|
-
inputSchema: {
|
|
6
|
-
type: "object",
|
|
7
|
-
properties: {
|
|
8
|
-
issueDisplayName: {
|
|
9
|
-
type: "string",
|
|
10
|
-
description: "The accessibility issue display name (e.g., Decorative-Content-6d277a13ba)",
|
|
11
|
-
},
|
|
12
|
-
},
|
|
13
|
-
required: ["issueDisplayName"],
|
|
14
|
-
},
|
|
15
|
-
};
|
|
16
|
-
export const getIssueRemediationHandler = async (args, context) => {
|
|
17
|
-
const { issueDisplayName } = args;
|
|
18
|
-
const { environment, headers } = context;
|
|
19
|
-
if (!issueDisplayName) {
|
|
20
|
-
throw new McpError(ErrorCode.InvalidParams, "Issue display name is required");
|
|
21
|
-
}
|
|
22
|
-
let issue;
|
|
23
|
-
try {
|
|
24
|
-
const response = await fetch(`${environment}/api/v6/mcp/${issueDisplayName}`, {
|
|
25
|
-
method: "GET",
|
|
26
|
-
headers: headers,
|
|
27
|
-
});
|
|
28
|
-
if (!response.ok) {
|
|
29
|
-
if (response.status === 404) {
|
|
30
|
-
return {
|
|
31
|
-
content: [
|
|
32
|
-
{
|
|
33
|
-
type: "text",
|
|
34
|
-
text: `**Issue Not Found**\n\nNo accessibility issue found with display name: ${issueDisplayName}\n\nPlease verify the issue display name and try again.`,
|
|
35
|
-
},
|
|
36
|
-
],
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
throw new McpError(ErrorCode.InternalError, `API request failed: ${response.status} ${response.statusText}`);
|
|
40
|
-
}
|
|
41
|
-
issue = await response.json();
|
|
42
|
-
}
|
|
43
|
-
catch (error) {
|
|
44
|
-
if (error instanceof McpError) {
|
|
45
|
-
throw error;
|
|
46
|
-
}
|
|
47
|
-
throw new McpError(ErrorCode.InternalError, `Failed to fetch issue data: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
48
|
-
}
|
|
49
|
-
if (!issue) {
|
|
50
|
-
return {
|
|
51
|
-
content: [
|
|
52
|
-
{
|
|
53
|
-
type: "text",
|
|
54
|
-
text: `**Issue Not Found**\n\nNo accessibility issue found with display name: ${issueDisplayName}\n\nPlease verify the issue display name and try again.`,
|
|
55
|
-
},
|
|
56
|
-
],
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
// Find the related rule
|
|
60
|
-
// Handle MongoDB ObjectId - convert to string for comparison
|
|
61
|
-
let relatedRuleId = issue.relatedRuleId;
|
|
62
|
-
if (relatedRuleId && typeof relatedRuleId === "object") {
|
|
63
|
-
if (relatedRuleId.$oid) {
|
|
64
|
-
relatedRuleId = relatedRuleId.$oid;
|
|
65
|
-
}
|
|
66
|
-
else if (relatedRuleId.toString &&
|
|
67
|
-
typeof relatedRuleId.toString === "function") {
|
|
68
|
-
relatedRuleId = relatedRuleId.toString();
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
const rule = relatedRuleId
|
|
72
|
-
? context.rules.find((r) => r._id?.$oid === relatedRuleId)
|
|
73
|
-
: null;
|
|
74
|
-
// Format the remediation response
|
|
75
|
-
const response = formatRemediationResponse(issue, rule);
|
|
76
|
-
return {
|
|
77
|
-
content: [
|
|
78
|
-
{
|
|
79
|
-
type: "text",
|
|
80
|
-
text: response,
|
|
81
|
-
},
|
|
82
|
-
],
|
|
83
|
-
};
|
|
84
|
-
};
|
|
85
|
-
function formatRemediationResponse(issue, rule = null) {
|
|
86
|
-
// 1. Short summary of the problem
|
|
87
|
-
const summary = rule?.shortDescription ||
|
|
88
|
-
`Accessibility issue detected: ${issue.displayName}`;
|
|
89
|
-
// 2. WCAG reference & severity
|
|
90
|
-
const wcagLevel = issue.WCAGLevel || "Unknown";
|
|
91
|
-
const severity = issue.severity?.toUpperCase() || "Unknown";
|
|
92
|
-
const criteria = issue.criteria || "Unknown";
|
|
93
|
-
const wcagLink = rule?.issueWCAGLink || "";
|
|
94
|
-
// 3. Code-level fix suggestions
|
|
95
|
-
let codeFix = "\n## Code-Level Fix\n\n";
|
|
96
|
-
if (rule) {
|
|
97
|
-
codeFix += rule.shortDescription
|
|
98
|
-
? `**Solution:** ${rule.shortDescription}\n\n`
|
|
99
|
-
: "";
|
|
100
|
-
// Show the current problematic code
|
|
101
|
-
if (issue.HTML) {
|
|
102
|
-
codeFix += "**Current code:**\n```html\n" + issue.HTML + "\n```\n\n";
|
|
103
|
-
}
|
|
104
|
-
// Extract code examples from the HTML resolution if available
|
|
105
|
-
if (rule.issueResolution) {
|
|
106
|
-
const htmlResolution = rule.issueResolution;
|
|
107
|
-
const codeBlocks = htmlResolution.match(/<pre[^>]*><code[^>]*>(.*?)<\/code><\/pre>/gs) ||
|
|
108
|
-
[];
|
|
109
|
-
if (codeBlocks.length > 0) {
|
|
110
|
-
// Extract and clean up code examples
|
|
111
|
-
codeBlocks.forEach((block, index) => {
|
|
112
|
-
const cleanCode = block
|
|
113
|
-
.replace(/<pre[^>]*><code[^>]*>/, "")
|
|
114
|
-
.replace(/<\/code><\/pre>/, "")
|
|
115
|
-
.replace(/</g, "<")
|
|
116
|
-
.replace(/>/g, ">")
|
|
117
|
-
.replace(/"/g, '"')
|
|
118
|
-
.replace(/&/g, "&")
|
|
119
|
-
.trim();
|
|
120
|
-
codeFix += `**Suggested fix ${index + 1}:**\n\`\`\`html\n${cleanCode}\n\`\`\`\n\n`;
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
// Add suggested fix details if available
|
|
125
|
-
if (rule.suggestedFix && rule.suggestedFix.length > 0) {
|
|
126
|
-
codeFix += "**Quick Fix Suggestions:**\n";
|
|
127
|
-
rule.suggestedFix.forEach((fix, index) => {
|
|
128
|
-
codeFix += `${index + 1}. **${fix.suggestedFixType}**: `;
|
|
129
|
-
if (fix.suggestedFixKey) {
|
|
130
|
-
codeFix += `Add attribute \`${fix.suggestedFixKey}="${fix.suggestedFixValue}"\`\n`;
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
codeFix += `${fix.suggestedFixValue}\n`;
|
|
134
|
-
}
|
|
135
|
-
});
|
|
136
|
-
codeFix += "\n";
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
else {
|
|
140
|
-
codeFix += "No specific rule found for this issue.\n\n";
|
|
141
|
-
}
|
|
142
|
-
// 4. Links back to remediation panel
|
|
143
|
-
const remediationLinks = `
|
|
144
|
-
## 📚 Additional Resources
|
|
145
|
-
|
|
146
|
-
- **WCAG Reference:** ${wcagLink
|
|
147
|
-
? `[${wcagLevel} - ${criteria}](${wcagLink})`
|
|
148
|
-
: `${wcagLevel} - ${criteria}`}
|
|
149
|
-
- **Tutorial:** ${rule?.issueTutorialLink || "Contact your AccessFlow administrator"}
|
|
150
|
-
- **Issue Location:** ${issue.webpath} (Selector: \`${issue.selector}\`)
|
|
151
|
-
- **AccessFlow Panel:** View full remediation details in your AccessFlow dashboard
|
|
152
|
-
|
|
153
|
-
---
|
|
154
|
-
**Issue ID:** ${issue.displayName} | **Detected:** ${new Date(issue.date?.$date || issue.modified?.$date || Date.now()).toLocaleDateString()} | **Confidence:** ${issue.confidence}%`;
|
|
155
|
-
return `# 🚨 ${summary}
|
|
156
|
-
|
|
157
|
-
## 📊 WCAG Reference & Severity
|
|
158
|
-
- **Severity:** ${severity}
|
|
159
|
-
- **WCAG Level:** ${wcagLevel}
|
|
160
|
-
- **Criteria:** ${criteria}
|
|
161
|
-
- **Occurrences:** ${issue.occurrences} time(s) on this page
|
|
162
|
-
${codeFix}
|
|
163
|
-
${remediationLinks}`;
|
|
164
|
-
}
|
|
165
|
-
//# sourceMappingURL=getIssueRemediation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getIssueRemediation.js","sourceRoot":"","sources":["../../src/tools/getIssueRemediation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAGzE,MAAM,CAAC,MAAM,6BAA6B,GAAmB;IAC3D,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EACT,oFAAoF;IACtF,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,gBAAgB,EAAE;gBAChB,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,4EAA4E;aAC/E;SACF;QACD,QAAQ,EAAE,CAAC,kBAAkB,CAAC;KAC/B;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAgB,KAAK,EAC1D,IAAI,EACJ,OAAO,EACP,EAAE;IACF,MAAM,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC;IAClC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAEzC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,aAAa,EACvB,gCAAgC,CACjC,CAAC;IACJ,CAAC;IAED,IAAI,KAAU,CAAC;IAEf,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,WAAW,eAAe,gBAAgB,EAAE,EAC/C;YACE,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,OAAO;SACjB,CACF,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,0EAA0E,gBAAgB,yDAAyD;yBAC1J;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,aAAa,EACvB,uBAAuB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAChE,CAAC;QACJ,CAAC;QAED,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAChC,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,+BACE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAC3C,EAAE,CACH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,0EAA0E,gBAAgB,yDAAyD;iBAC1J;aACF;SACF,CAAC;IACJ,CAAC;IAED,wBAAwB;IACxB,6DAA6D;IAC7D,IAAI,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;IAExC,IAAI,aAAa,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;QACvD,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC;YACvB,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC;QACrC,CAAC;aAAM,IACL,aAAa,CAAC,QAAQ;YACtB,OAAO,aAAa,CAAC,QAAQ,KAAK,UAAU,EAC5C,CAAC;YACD,aAAa,GAAG,aAAa,CAAC,QAAQ,EAAE,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,aAAa;QACxB,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,aAAa,CAAC;QAC1D,CAAC,CAAC,IAAI,CAAC;IAET,kCAAkC;IAClC,MAAM,QAAQ,GAAG,yBAAyB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAExD,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,QAAQ;aACf;SACF;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,SAAS,yBAAyB,CAAC,KAAU,EAAE,OAAY,IAAI;IAC7D,kCAAkC;IAClC,MAAM,OAAO,GACX,IAAI,EAAE,gBAAgB;QACtB,iCAAiC,KAAK,CAAC,WAAW,EAAE,CAAC;IAEvD,+BAA+B;IAC/B,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,SAAS,CAAC;IAC/C,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,SAAS,CAAC;IAC5D,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,SAAS,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAI,EAAE,aAAa,IAAI,EAAE,CAAC;IAE3C,gCAAgC;IAChC,IAAI,OAAO,GAAG,yBAAyB,CAAC;IAExC,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,IAAI,IAAI,CAAC,gBAAgB;YAC9B,CAAC,CAAC,iBAAiB,IAAI,CAAC,gBAAgB,MAAM;YAC9C,CAAC,CAAC,EAAE,CAAC;QAEP,oCAAoC;QACpC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,IAAI,8BAA8B,GAAG,KAAK,CAAC,IAAI,GAAG,WAAW,CAAC;QACvE,CAAC;QAED,8DAA8D;QAC9D,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC;YAC5C,MAAM,UAAU,GACd,cAAc,CAAC,KAAK,CAAC,6CAA6C,CAAC;gBACnE,EAAE,CAAC;YAEL,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,qCAAqC;gBACrC,UAAU,CAAC,OAAO,CAAC,CAAC,KAAa,EAAE,KAAa,EAAE,EAAE;oBAClD,MAAM,SAAS,GAAG,KAAK;yBACpB,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC;yBACpC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;yBAC9B,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;yBACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;yBACrB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;yBACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;yBACtB,IAAI,EAAE,CAAC;oBAEV,OAAO,IAAI,mBACT,KAAK,GAAG,CACV,oBAAoB,SAAS,cAAc,CAAC;gBAC9C,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,yCAAyC;QACzC,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtD,OAAO,IAAI,8BAA8B,CAAC;YAC1C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,GAAQ,EAAE,KAAa,EAAE,EAAE;gBACpD,OAAO,IAAI,GAAG,KAAK,GAAG,CAAC,OAAO,GAAG,CAAC,gBAAgB,MAAM,CAAC;gBACzD,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;oBACxB,OAAO,IAAI,mBAAmB,GAAG,CAAC,eAAe,KAAK,GAAG,CAAC,iBAAiB,OAAO,CAAC;gBACrF,CAAC;qBAAM,CAAC;oBACN,OAAO,IAAI,GAAG,GAAG,CAAC,iBAAiB,IAAI,CAAC;gBAC1C,CAAC;YACH,CAAC,CAAC,CAAC;YACH,OAAO,IAAI,IAAI,CAAC;QAClB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,4CAA4C,CAAC;IAC1D,CAAC;IAED,qCAAqC;IACrC,MAAM,gBAAgB,GAAG;;;wBAIvB,QAAQ;QACN,CAAC,CAAC,IAAI,SAAS,MAAM,QAAQ,KAAK,QAAQ,GAAG;QAC7C,CAAC,CAAC,GAAG,SAAS,MAAM,QAAQ,EAChC;kBAEE,IAAI,EAAE,iBAAiB,IAAI,uCAC7B;wBACsB,KAAK,CAAC,OAAO,iBAAiB,KAAK,CAAC,QAAQ;;;;gBAIpD,KAAK,CAAC,WAAW,oBAAoB,IAAI,IAAI,CACzD,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,CACzD,CAAC,kBAAkB,EAAE,sBAAsB,KAAK,CAAC,UAAU,GAAG,CAAC;IAEhE,OAAO,QAAQ,OAAO;;;kBAGN,QAAQ;oBACN,SAAS;kBACX,QAAQ;qBACL,KAAK,CAAC,WAAW;EACpC,OAAO;EACP,gBAAgB,EAAE,CAAC;AACrB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getMostUrgentIssues.d.ts","sourceRoot":"","sources":["../../src/tools/getMostUrgentIssues.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAe,MAAM,YAAY,CAAC;AAEtE,eAAO,MAAM,6BAA6B,EAAE,cAS3C,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,WAkHxC,CAAC"}
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import { McpError, ErrorCode } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
-
export const getMostUrgentIssuesDefinition = {
|
|
3
|
-
name: "getMostUrgentIssues",
|
|
4
|
-
description: "Get the most urgent accessibility issues as structured JSON data, ordered by severity (extreme > high > medium > low), then by site occurrences, then by page occurrences. Use the formatUrgentIssues prompt to format the JSON response into user-friendly markdown.",
|
|
5
|
-
inputSchema: {
|
|
6
|
-
type: "object",
|
|
7
|
-
properties: {},
|
|
8
|
-
required: [],
|
|
9
|
-
},
|
|
10
|
-
};
|
|
11
|
-
export const getMostUrgentIssuesHandler = async (args, context) => {
|
|
12
|
-
const { environment, headers } = context;
|
|
13
|
-
// Validate limit parameter
|
|
14
|
-
const issueLimit = 5;
|
|
15
|
-
try {
|
|
16
|
-
const response = await fetch(`${environment}/api/v6/mcp/urgent-issues?limit=${issueLimit}`, {
|
|
17
|
-
method: "GET",
|
|
18
|
-
headers: headers,
|
|
19
|
-
});
|
|
20
|
-
if (!response.ok) {
|
|
21
|
-
throw new McpError(ErrorCode.InternalError, `API request failed: ${response.status} ${response.statusText}`);
|
|
22
|
-
}
|
|
23
|
-
const apiResponse = await response.json();
|
|
24
|
-
// Extract the issues array from the response
|
|
25
|
-
let issues;
|
|
26
|
-
if (Array.isArray(apiResponse)) {
|
|
27
|
-
issues = apiResponse;
|
|
28
|
-
}
|
|
29
|
-
else if (apiResponse && Array.isArray(apiResponse.issues)) {
|
|
30
|
-
issues = apiResponse.issues;
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
throw new McpError(ErrorCode.InternalError, `Invalid API response format. Expected array or object with 'issues' array. Received: ${JSON.stringify(apiResponse, null, 2)}`);
|
|
34
|
-
}
|
|
35
|
-
// The API returns issues already sorted by severity, site occurrences, and page occurrences
|
|
36
|
-
const sortedIssues = issues.slice(0, issueLimit);
|
|
37
|
-
if (sortedIssues.length === 0) {
|
|
38
|
-
return {
|
|
39
|
-
content: [
|
|
40
|
-
{
|
|
41
|
-
type: "text",
|
|
42
|
-
text: JSON.stringify({
|
|
43
|
-
totalIssues: 0,
|
|
44
|
-
showing: 0,
|
|
45
|
-
issues: [],
|
|
46
|
-
hasMore: false,
|
|
47
|
-
}, null, 2),
|
|
48
|
-
},
|
|
49
|
-
],
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
// Format the issues data for structured response
|
|
53
|
-
const formattedIssues = sortedIssues.map((issue, index) => ({
|
|
54
|
-
rank: index + 1,
|
|
55
|
-
displayName: issue.displayName,
|
|
56
|
-
severity: issue.severity?.toUpperCase() || "UNKNOWN",
|
|
57
|
-
severityEmoji: getSeverityEmoji(issue.severity),
|
|
58
|
-
wcagLevel: issue.WCAGLevel || "Unknown",
|
|
59
|
-
criteria: issue.criteria || "Unknown",
|
|
60
|
-
siteOccurrences: issue.siteOccurrences || 0,
|
|
61
|
-
pageOccurrences: issue.occurrences || 0,
|
|
62
|
-
}));
|
|
63
|
-
const responseData = {
|
|
64
|
-
totalIssues: issues.length,
|
|
65
|
-
showing: sortedIssues.length,
|
|
66
|
-
limit: issueLimit,
|
|
67
|
-
issues: formattedIssues,
|
|
68
|
-
hasMore: issues.length > issueLimit,
|
|
69
|
-
nextSteps: {
|
|
70
|
-
suggestion: "Use getIssueRemediation with issueDisplayName for detailed fix guidance",
|
|
71
|
-
instructions: "List to the user these issues with all the data for every one of them: severity, wcag, etc. For every issue, show the displayName to the user. After listing all the issues, suggest the user to get full issue remediation data. Do not fix the issues unless explicitly asked to fix",
|
|
72
|
-
},
|
|
73
|
-
};
|
|
74
|
-
return {
|
|
75
|
-
content: [
|
|
76
|
-
{
|
|
77
|
-
type: "text",
|
|
78
|
-
text: JSON.stringify(responseData, null, 2),
|
|
79
|
-
},
|
|
80
|
-
],
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
catch (error) {
|
|
84
|
-
if (error instanceof McpError) {
|
|
85
|
-
throw error;
|
|
86
|
-
}
|
|
87
|
-
// Enhanced error with more context
|
|
88
|
-
const errorMessage = error instanceof Error ? error.message : "Unknown error";
|
|
89
|
-
throw new McpError(ErrorCode.InternalError, `Failed to fetch urgent issues: ${errorMessage}. This may be due to an unexpected API response format or network issue.`);
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
|
-
function getSeverityEmoji(severity) {
|
|
93
|
-
switch (severity?.toLowerCase()) {
|
|
94
|
-
case "extreme":
|
|
95
|
-
return "🔴";
|
|
96
|
-
case "high":
|
|
97
|
-
return "🟠";
|
|
98
|
-
case "medium":
|
|
99
|
-
return "🟡";
|
|
100
|
-
case "low":
|
|
101
|
-
return "🟢";
|
|
102
|
-
default:
|
|
103
|
-
return "⚪";
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
//# sourceMappingURL=getMostUrgentIssues.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getMostUrgentIssues.js","sourceRoot":"","sources":["../../src/tools/getMostUrgentIssues.ts"],"names":[],"mappings":"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"}
|
package/build/tools/index.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { ToolDefinition, ToolHandler } from "./types.js";
|
|
2
|
-
export interface Tool {
|
|
3
|
-
definition: ToolDefinition;
|
|
4
|
-
handler: ToolHandler;
|
|
5
|
-
}
|
|
6
|
-
export declare const tools: Record<string, Tool>;
|
|
7
|
-
export declare const getToolDefinitions: () => ToolDefinition[];
|
|
8
|
-
export declare const getToolHandler: (name: string) => ToolHandler | undefined;
|
|
9
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAUzD,MAAM,WAAW,IAAI;IACnB,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,eAAO,MAAM,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAStC,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAO,cAAc,EAEnD,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,KAAG,WAAW,GAAG,SAE3D,CAAC"}
|
package/build/tools/index.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { getIssueRemediationDefinition, getIssueRemediationHandler, } from "./getIssueRemediation.js";
|
|
2
|
-
import { getMostUrgentIssuesDefinition, getMostUrgentIssuesHandler, } from "./getMostUrgentIssues.js";
|
|
3
|
-
export const tools = {
|
|
4
|
-
getIssueRemediation: {
|
|
5
|
-
definition: getIssueRemediationDefinition,
|
|
6
|
-
handler: getIssueRemediationHandler,
|
|
7
|
-
},
|
|
8
|
-
getMostUrgentIssues: {
|
|
9
|
-
definition: getMostUrgentIssuesDefinition,
|
|
10
|
-
handler: getMostUrgentIssuesHandler,
|
|
11
|
-
},
|
|
12
|
-
};
|
|
13
|
-
export const getToolDefinitions = () => {
|
|
14
|
-
return Object.values(tools).map((tool) => tool.definition);
|
|
15
|
-
};
|
|
16
|
-
export const getToolHandler = (name) => {
|
|
17
|
-
return tools[name]?.handler;
|
|
18
|
-
};
|
|
19
|
-
//# sourceMappingURL=index.js.map
|
package/build/tools/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC;AAOlC,MAAM,CAAC,MAAM,KAAK,GAAyB;IACzC,mBAAmB,EAAE;QACnB,UAAU,EAAE,6BAA6B;QACzC,OAAO,EAAE,0BAA0B;KACpC;IACD,mBAAmB,EAAE;QACnB,UAAU,EAAE,6BAA6B;QACzC,OAAO,EAAE,0BAA0B;KACpC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAqB,EAAE;IACvD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC7D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAY,EAA2B,EAAE;IACtE,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;AAC9B,CAAC,CAAC"}
|
package/build/tools/types.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export interface ToolContext {
|
|
2
|
-
rules: any[];
|
|
3
|
-
environment: string;
|
|
4
|
-
apiKey: string;
|
|
5
|
-
headers: Record<string, string>;
|
|
6
|
-
}
|
|
7
|
-
export interface ToolDefinition {
|
|
8
|
-
name: string;
|
|
9
|
-
description: string;
|
|
10
|
-
inputSchema: {
|
|
11
|
-
type: "object";
|
|
12
|
-
properties: Record<string, any>;
|
|
13
|
-
required: string[];
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
export interface ToolHandler {
|
|
17
|
-
(args: any, context: ToolContext): Promise<any>;
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,GAAG,EAAE,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CACjD"}
|
package/build/tools/types.js
DELETED
package/build/tools/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":""}
|
package/build/utils/config.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,mBAAmB,IAAI,iBAAiB,CA2BvD"}
|
package/build/utils/config.js
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { ObjectId } from "mongodb";
|
|
2
|
-
export function validateEnvironment() {
|
|
3
|
-
const mongoUri = process.env.MONGO_URI;
|
|
4
|
-
if (!mongoUri) {
|
|
5
|
-
throw new Error("MONGO_URI environment variable is required");
|
|
6
|
-
}
|
|
7
|
-
// Validate MongoDB URI format
|
|
8
|
-
if (!mongoUri.startsWith("mongodb://") && !mongoUri.startsWith("mongodb+srv://")) {
|
|
9
|
-
throw new Error("MONGO_URI must be a valid MongoDB connection string");
|
|
10
|
-
}
|
|
11
|
-
const websiteId = process.env.WEBSITE_ID;
|
|
12
|
-
if (!websiteId) {
|
|
13
|
-
throw new Error("WEBSITE_ID environment variable is required");
|
|
14
|
-
}
|
|
15
|
-
// Validate ObjectId format
|
|
16
|
-
if (!ObjectId.isValid(websiteId)) {
|
|
17
|
-
throw new Error(`WEBSITE_ID must be a valid ObjectId: ${websiteId}`);
|
|
18
|
-
}
|
|
19
|
-
return {
|
|
20
|
-
mongoUri,
|
|
21
|
-
websiteId,
|
|
22
|
-
nodeEnv: process.env.NODE_ENV || "development",
|
|
23
|
-
logLevel: process.env.LOG_LEVEL || "info"
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
//# sourceMappingURL=config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AASnC,MAAM,UAAU,mBAAmB;IACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IACvC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,8BAA8B;IAC9B,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACjF,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IACzC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IAED,2BAA2B;IAC3B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,wCAAwC,SAAS,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,OAAO;QACL,QAAQ;QACR,SAAS;QACT,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa;QAC9C,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;KAC1C,CAAC;AACJ,CAAC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { Db } from "mongodb";
|
|
2
|
-
export declare class DatabaseManager {
|
|
3
|
-
private client;
|
|
4
|
-
private db;
|
|
5
|
-
private readonly uri;
|
|
6
|
-
private readonly options;
|
|
7
|
-
constructor(uri: string);
|
|
8
|
-
connect(): Promise<void>;
|
|
9
|
-
disconnect(): Promise<void>;
|
|
10
|
-
getDb(): Db;
|
|
11
|
-
healthCheck(): Promise<boolean>;
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=database.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/utils/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,EAAE,EAAsB,MAAM,SAAS,CAAC;AAE9D,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,EAAE,CAAmB;IAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;gBAEjC,GAAG,EAAE,MAAM;IAYjB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAajC,KAAK,IAAI,EAAE;IAOL,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAStC"}
|
package/build/utils/database.js
DELETED
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { MongoClient } from "mongodb";
|
|
2
|
-
export class DatabaseManager {
|
|
3
|
-
client = null;
|
|
4
|
-
db = null;
|
|
5
|
-
uri;
|
|
6
|
-
options;
|
|
7
|
-
constructor(uri) {
|
|
8
|
-
this.uri = uri;
|
|
9
|
-
this.options = {
|
|
10
|
-
maxPoolSize: 10, // Maximum number of connections in the pool
|
|
11
|
-
serverSelectionTimeoutMS: 5000, // How long to try selecting a server
|
|
12
|
-
socketTimeoutMS: 45000, // How long a send or receive on a socket can take
|
|
13
|
-
family: 4, // Use IPv4, skip trying IPv6
|
|
14
|
-
retryWrites: true,
|
|
15
|
-
retryReads: true,
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
async connect() {
|
|
19
|
-
if (this.client && this.db) {
|
|
20
|
-
return; // Already connected
|
|
21
|
-
}
|
|
22
|
-
try {
|
|
23
|
-
this.client = new MongoClient(this.uri, this.options);
|
|
24
|
-
await this.client.connect();
|
|
25
|
-
this.db = this.client.db();
|
|
26
|
-
console.error(`Connected to MongoDB: ${this.db.databaseName}`);
|
|
27
|
-
}
|
|
28
|
-
catch (error) {
|
|
29
|
-
console.error("Failed to connect to MongoDB:", error);
|
|
30
|
-
throw new Error(`Database connection failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
async disconnect() {
|
|
34
|
-
if (this.client) {
|
|
35
|
-
try {
|
|
36
|
-
await this.client.close();
|
|
37
|
-
this.client = null;
|
|
38
|
-
this.db = null;
|
|
39
|
-
console.error("Disconnected from MongoDB");
|
|
40
|
-
}
|
|
41
|
-
catch (error) {
|
|
42
|
-
console.error("Error disconnecting from MongoDB:", error);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
getDb() {
|
|
47
|
-
if (!this.db) {
|
|
48
|
-
throw new Error("Database not connected. Call connect() first.");
|
|
49
|
-
}
|
|
50
|
-
return this.db;
|
|
51
|
-
}
|
|
52
|
-
async healthCheck() {
|
|
53
|
-
try {
|
|
54
|
-
if (!this.db)
|
|
55
|
-
return false;
|
|
56
|
-
await this.db.admin().ping();
|
|
57
|
-
return true;
|
|
58
|
-
}
|
|
59
|
-
catch {
|
|
60
|
-
return false;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
//# sourceMappingURL=database.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/utils/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA0B,MAAM,SAAS,CAAC;AAE9D,MAAM,OAAO,eAAe;IAClB,MAAM,GAAuB,IAAI,CAAC;IAClC,EAAE,GAAc,IAAI,CAAC;IACZ,GAAG,CAAS;IACZ,OAAO,CAAqB;IAE7C,YAAY,GAAW;QACrB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,OAAO,GAAG;YACb,WAAW,EAAE,EAAE,EAAE,4CAA4C;YAC7D,wBAAwB,EAAE,IAAI,EAAE,qCAAqC;YACrE,eAAe,EAAE,KAAK,EAAE,kDAAkD;YAC1E,MAAM,EAAE,CAAC,EAAE,6BAA6B;YACxC,WAAW,EAAE,IAAI;YACjB,UAAU,EAAE,IAAI;SACjB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YAC3B,OAAO,CAAC,oBAAoB;QAC9B,CAAC;QAED,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACtD,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,yBAAyB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC;QACjE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3G,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;gBACnB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC7C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,EAAE;gBAAE,OAAO,KAAK,CAAC;YAC3B,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF"}
|
package/build/utils/domain.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../src/utils/domain.ts"],"names":[],"mappings":"AAAA,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAYrD"}
|
package/build/utils/domain.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export function sanitizeDomain(domain) {
|
|
2
|
-
if (!domain) {
|
|
3
|
-
return domain;
|
|
4
|
-
}
|
|
5
|
-
// Remove protocol (http:// or https://)
|
|
6
|
-
let sanitized = domain.replace(/^https?:\/\//, "");
|
|
7
|
-
// Remove trailing slash
|
|
8
|
-
sanitized = sanitized.replace(/\/$/, "");
|
|
9
|
-
return sanitized;
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=domain.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"domain.js","sourceRoot":"","sources":["../../src/utils/domain.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,wCAAwC;IACxC,IAAI,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAEnD,wBAAwB;IACxB,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAEzC,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
package/build/utils/logger.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export declare enum LogLevel {
|
|
2
|
-
ERROR = 0,
|
|
3
|
-
WARN = 1,
|
|
4
|
-
INFO = 2,
|
|
5
|
-
DEBUG = 3
|
|
6
|
-
}
|
|
7
|
-
export declare class Logger {
|
|
8
|
-
private level;
|
|
9
|
-
constructor(level?: string);
|
|
10
|
-
private parseLogLevel;
|
|
11
|
-
private shouldLog;
|
|
12
|
-
private formatMessage;
|
|
13
|
-
error(message: string, meta?: any): void;
|
|
14
|
-
warn(message: string, meta?: any): void;
|
|
15
|
-
info(message: string, meta?: any): void;
|
|
16
|
-
debug(message: string, meta?: any): void;
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;CACV;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,KAAK,CAAW;gBAEZ,KAAK,GAAE,MAAe;IAIlC,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,aAAa;IAMrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAMxC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAMvC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAMvC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;CAKzC"}
|
package/build/utils/logger.js
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
export var LogLevel;
|
|
2
|
-
(function (LogLevel) {
|
|
3
|
-
LogLevel[LogLevel["ERROR"] = 0] = "ERROR";
|
|
4
|
-
LogLevel[LogLevel["WARN"] = 1] = "WARN";
|
|
5
|
-
LogLevel[LogLevel["INFO"] = 2] = "INFO";
|
|
6
|
-
LogLevel[LogLevel["DEBUG"] = 3] = "DEBUG";
|
|
7
|
-
})(LogLevel || (LogLevel = {}));
|
|
8
|
-
export class Logger {
|
|
9
|
-
level;
|
|
10
|
-
constructor(level = "info") {
|
|
11
|
-
this.level = this.parseLogLevel(level);
|
|
12
|
-
}
|
|
13
|
-
parseLogLevel(level) {
|
|
14
|
-
switch (level.toLowerCase()) {
|
|
15
|
-
case "error": return LogLevel.ERROR;
|
|
16
|
-
case "warn": return LogLevel.WARN;
|
|
17
|
-
case "info": return LogLevel.INFO;
|
|
18
|
-
case "debug": return LogLevel.DEBUG;
|
|
19
|
-
default: return LogLevel.INFO;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
shouldLog(level) {
|
|
23
|
-
return level <= this.level;
|
|
24
|
-
}
|
|
25
|
-
formatMessage(level, message, meta) {
|
|
26
|
-
const timestamp = new Date().toISOString();
|
|
27
|
-
const metaStr = meta ? ` ${JSON.stringify(meta)}` : "";
|
|
28
|
-
return `[${timestamp}] ${level}: ${message}${metaStr}`;
|
|
29
|
-
}
|
|
30
|
-
error(message, meta) {
|
|
31
|
-
if (this.shouldLog(LogLevel.ERROR)) {
|
|
32
|
-
console.error(this.formatMessage("ERROR", message, meta));
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
warn(message, meta) {
|
|
36
|
-
if (this.shouldLog(LogLevel.WARN)) {
|
|
37
|
-
console.warn(this.formatMessage("WARN", message, meta));
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
info(message, meta) {
|
|
41
|
-
if (this.shouldLog(LogLevel.INFO)) {
|
|
42
|
-
console.log(this.formatMessage("INFO", message, meta));
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
debug(message, meta) {
|
|
46
|
-
if (this.shouldLog(LogLevel.DEBUG)) {
|
|
47
|
-
console.log(this.formatMessage("DEBUG", message, meta));
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
//# sourceMappingURL=logger.js.map
|