accessflow-mcp-server 1.0.15 → 1.1.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.
Files changed (144) hide show
  1. package/dist/index.d.ts +2 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +66 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/services/apiSchemas.d.ts +200 -0
  6. package/dist/services/apiSchemas.d.ts.map +1 -0
  7. package/dist/services/apiSchemas.js +95 -0
  8. package/dist/services/apiSchemas.js.map +1 -0
  9. package/dist/services/apiService.d.ts +37 -0
  10. package/dist/services/apiService.d.ts.map +1 -0
  11. package/dist/services/apiService.js +198 -0
  12. package/dist/services/apiService.js.map +1 -0
  13. package/dist/services/loggerService.d.ts +3 -0
  14. package/dist/services/loggerService.d.ts.map +1 -0
  15. package/dist/services/loggerService.js +38 -0
  16. package/dist/services/loggerService.js.map +1 -0
  17. package/dist/services/rulesService.d.ts +10 -0
  18. package/dist/services/rulesService.d.ts.map +1 -0
  19. package/dist/services/rulesService.js +70 -0
  20. package/dist/services/rulesService.js.map +1 -0
  21. package/dist/tools/getIssueRemediation.d.ts +16 -0
  22. package/dist/tools/getIssueRemediation.d.ts.map +1 -0
  23. package/dist/tools/getIssueRemediation.js +77 -0
  24. package/dist/tools/getIssueRemediation.js.map +1 -0
  25. package/dist/tools/getMostUrgentIssues.d.ts +7 -0
  26. package/dist/tools/getMostUrgentIssues.d.ts.map +1 -0
  27. package/dist/tools/getMostUrgentIssues.js +94 -0
  28. package/dist/tools/getMostUrgentIssues.js.map +1 -0
  29. package/dist/tools/index.d.ts +4 -0
  30. package/dist/tools/index.d.ts.map +1 -0
  31. package/dist/tools/index.js +21 -0
  32. package/dist/tools/index.js.map +1 -0
  33. package/dist/tools/resolveIssue.d.ts +16 -0
  34. package/dist/tools/resolveIssue.d.ts.map +1 -0
  35. package/dist/tools/resolveIssue.js +70 -0
  36. package/dist/tools/resolveIssue.js.map +1 -0
  37. package/dist/tools/toolRegistry.d.ts +19 -0
  38. package/dist/tools/toolRegistry.d.ts.map +1 -0
  39. package/dist/tools/toolRegistry.js +9 -0
  40. package/dist/tools/toolRegistry.js.map +1 -0
  41. package/dist/types/issues.d.ts +32 -0
  42. package/dist/types/issues.d.ts.map +1 -0
  43. package/dist/types/issues.js +6 -0
  44. package/dist/types/issues.js.map +1 -0
  45. package/dist/types/remediation.d.ts +24 -0
  46. package/dist/types/remediation.d.ts.map +1 -0
  47. package/dist/types/remediation.js +6 -0
  48. package/dist/types/remediation.js.map +1 -0
  49. package/dist/utils/domains.d.ts +2 -0
  50. package/dist/utils/domains.d.ts.map +1 -0
  51. package/dist/utils/domains.js +14 -0
  52. package/dist/utils/domains.js.map +1 -0
  53. package/dist/utils/issues.d.ts +16 -0
  54. package/dist/utils/issues.d.ts.map +1 -0
  55. package/dist/utils/issues.js +24 -0
  56. package/dist/utils/issues.js.map +1 -0
  57. package/dist/utils/middleware.d.ts +14 -0
  58. package/dist/utils/middleware.d.ts.map +1 -0
  59. package/dist/utils/middleware.js +37 -0
  60. package/dist/utils/middleware.js.map +1 -0
  61. package/dist/utils/remediation.d.ts +27 -0
  62. package/dist/utils/remediation.d.ts.map +1 -0
  63. package/dist/utils/remediation.js +139 -0
  64. package/dist/utils/remediation.js.map +1 -0
  65. package/dist/utils.d.ts +2 -0
  66. package/dist/utils.d.ts.map +1 -0
  67. package/dist/utils.js +14 -0
  68. package/dist/utils.js.map +1 -0
  69. package/package.json +48 -14
  70. package/TOOL_REFERENCE.md +0 -126
  71. package/assets/MCP_banner.png +0 -0
  72. package/bin/flow-mcp +0 -4
  73. package/build/index.d.ts +0 -12
  74. package/build/index.d.ts.map +0 -1
  75. package/build/index.js +0 -95
  76. package/build/index.js.map +0 -1
  77. package/build/prompts/formatUrgentIssues.d.ts +0 -4
  78. package/build/prompts/formatUrgentIssues.d.ts.map +0 -1
  79. package/build/prompts/formatUrgentIssues.js +0 -78
  80. package/build/prompts/formatUrgentIssues.js.map +0 -1
  81. package/build/prompts/index.d.ts +0 -4
  82. package/build/prompts/index.d.ts.map +0 -1
  83. package/build/prompts/index.js +0 -12
  84. package/build/prompts/index.js.map +0 -1
  85. package/build/prompts/types.d.ts +0 -22
  86. package/build/prompts/types.d.ts.map +0 -1
  87. package/build/prompts/types.js +0 -2
  88. package/build/prompts/types.js.map +0 -1
  89. package/build/rules.json +0 -4591
  90. package/build/services/accessflow.d.ts +0 -6
  91. package/build/services/accessflow.d.ts.map +0 -1
  92. package/build/services/accessflow.js +0 -8
  93. package/build/services/accessflow.js.map +0 -1
  94. package/build/tools/getIssueRemediation.d.ts +0 -4
  95. package/build/tools/getIssueRemediation.d.ts.map +0 -1
  96. package/build/tools/getIssueRemediation.js +0 -165
  97. package/build/tools/getIssueRemediation.js.map +0 -1
  98. package/build/tools/getMostUrgentIssues.d.ts +0 -4
  99. package/build/tools/getMostUrgentIssues.d.ts.map +0 -1
  100. package/build/tools/getMostUrgentIssues.js +0 -106
  101. package/build/tools/getMostUrgentIssues.js.map +0 -1
  102. package/build/tools/index.d.ts +0 -9
  103. package/build/tools/index.d.ts.map +0 -1
  104. package/build/tools/index.js +0 -19
  105. package/build/tools/index.js.map +0 -1
  106. package/build/tools/types.d.ts +0 -19
  107. package/build/tools/types.d.ts.map +0 -1
  108. package/build/tools/types.js +0 -2
  109. package/build/tools/types.js.map +0 -1
  110. package/build/utils/config.d.ts +0 -8
  111. package/build/utils/config.d.ts.map +0 -1
  112. package/build/utils/config.js +0 -26
  113. package/build/utils/config.js.map +0 -1
  114. package/build/utils/database.d.ts +0 -13
  115. package/build/utils/database.d.ts.map +0 -1
  116. package/build/utils/database.js +0 -64
  117. package/build/utils/database.js.map +0 -1
  118. package/build/utils/domain.d.ts +0 -2
  119. package/build/utils/domain.d.ts.map +0 -1
  120. package/build/utils/domain.js +0 -11
  121. package/build/utils/domain.js.map +0 -1
  122. package/build/utils/logger.d.ts +0 -18
  123. package/build/utils/logger.d.ts.map +0 -1
  124. package/build/utils/logger.js +0 -51
  125. package/build/utils/logger.js.map +0 -1
  126. package/build/utils/responses.d.ts +0 -19
  127. package/build/utils/responses.d.ts.map +0 -1
  128. package/build/utils/responses.js +0 -41
  129. package/build/utils/responses.js.map +0 -1
  130. package/build/utils/validation.d.ts +0 -7
  131. package/build/utils/validation.d.ts.map +0 -1
  132. package/build/utils/validation.js +0 -47
  133. package/build/utils/validation.js.map +0 -1
  134. package/mcp-config.json +0 -11
  135. package/src/index.ts +0 -125
  136. package/src/services/accessflow.ts +0 -9
  137. package/src/tools/getIssueRemediation.ts +0 -218
  138. package/src/tools/getMostUrgentIssues.ts +0 -144
  139. package/src/tools/index.ts +0 -33
  140. package/src/tools/types.ts +0 -20
  141. package/src/utils/domain.ts +0 -13
  142. package/test.mjs +0 -63
  143. package/tsconfig.json +0 -20
  144. /package/{src → dist/data}/rules.json +0 -0
@@ -1,6 +0,0 @@
1
- export declare class AccessflowService {
2
- private authCookie;
3
- constructor(authCookie: string);
4
- fetchIssue(displayName: string, domain: string): Promise<void>;
5
- }
6
- //# sourceMappingURL=accessflow.d.ts.map
@@ -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,8 +0,0 @@
1
- export class AccessflowService {
2
- authCookie;
3
- constructor(authCookie) {
4
- this.authCookie = authCookie;
5
- }
6
- async fetchIssue(displayName, domain) { }
7
- }
8
- //# sourceMappingURL=accessflow.js.map
@@ -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,4 +0,0 @@
1
- import { ToolDefinition, ToolHandler } from "./types.js";
2
- export declare const getIssueRemediationDefinition: ToolDefinition;
3
- export declare const getIssueRemediationHandler: ToolHandler;
4
- //# sourceMappingURL=getIssueRemediation.d.ts.map
@@ -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(/&lt;/g, "<")
116
- .replace(/&gt;/g, ">")
117
- .replace(/&quot;/g, '"')
118
- .replace(/&amp;/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":"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"}
@@ -1,4 +0,0 @@
1
- import { ToolDefinition, ToolHandler } from "./types.js";
2
- export declare const getMostUrgentIssuesDefinition: ToolDefinition;
3
- export declare const getMostUrgentIssuesHandler: ToolHandler;
4
- //# sourceMappingURL=getMostUrgentIssues.d.ts.map
@@ -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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"}
@@ -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"}
@@ -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
@@ -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"}
@@ -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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":""}
@@ -1,8 +0,0 @@
1
- export interface EnvironmentConfig {
2
- mongoUri: string;
3
- websiteId: string;
4
- nodeEnv: string;
5
- logLevel: string;
6
- }
7
- export declare function validateEnvironment(): EnvironmentConfig;
8
- //# sourceMappingURL=config.d.ts.map
@@ -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"}
@@ -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"}
@@ -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"}
@@ -1,2 +0,0 @@
1
- export declare function sanitizeDomain(domain: string): string;
2
- //# sourceMappingURL=domain.d.ts.map
@@ -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"}
@@ -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"}
@@ -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"}
@@ -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