snow-flow 1.1.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 (240) hide show
  1. package/.env.example +49 -0
  2. package/.mcp.json +106 -0
  3. package/.mcp.json.template +106 -0
  4. package/LICENSE +21 -0
  5. package/README.md +236 -0
  6. package/bin/snow-flow +4 -0
  7. package/bin/snow-flow.js +3 -0
  8. package/claude-flow +79 -0
  9. package/claude-flow.bat +18 -0
  10. package/claude-flow.config.json +20 -0
  11. package/claude-flow.ps1 +24 -0
  12. package/dist/agents/app-creator.agent.d.ts +55 -0
  13. package/dist/agents/app-creator.agent.d.ts.map +1 -0
  14. package/dist/agents/app-creator.agent.js +1292 -0
  15. package/dist/agents/app-creator.agent.js.map +1 -0
  16. package/dist/agents/base-snow-agent.d.ts +63 -0
  17. package/dist/agents/base-snow-agent.d.ts.map +1 -0
  18. package/dist/agents/base-snow-agent.js +296 -0
  19. package/dist/agents/base-snow-agent.js.map +1 -0
  20. package/dist/agents/script-generator.agent.d.ts +32 -0
  21. package/dist/agents/script-generator.agent.d.ts.map +1 -0
  22. package/dist/agents/script-generator.agent.js +772 -0
  23. package/dist/agents/script-generator.agent.js.map +1 -0
  24. package/dist/agents/ui-builder.agent.d.ts +50 -0
  25. package/dist/agents/ui-builder.agent.d.ts.map +1 -0
  26. package/dist/agents/ui-builder.agent.js +1539 -0
  27. package/dist/agents/ui-builder.agent.js.map +1 -0
  28. package/dist/agents/widget-builder.agent.d.ts +32 -0
  29. package/dist/agents/widget-builder.agent.d.ts.map +1 -0
  30. package/dist/agents/widget-builder.agent.js +439 -0
  31. package/dist/agents/widget-builder.agent.js.map +1 -0
  32. package/dist/agents/workflow-designer.agent.d.ts +31 -0
  33. package/dist/agents/workflow-designer.agent.d.ts.map +1 -0
  34. package/dist/agents/workflow-designer.agent.js +583 -0
  35. package/dist/agents/workflow-designer.agent.js.map +1 -0
  36. package/dist/api/error-handling.d.ts +214 -0
  37. package/dist/api/error-handling.d.ts.map +1 -0
  38. package/dist/api/error-handling.js +594 -0
  39. package/dist/api/error-handling.js.map +1 -0
  40. package/dist/api/flow-designer-api.d.ts +167 -0
  41. package/dist/api/flow-designer-api.d.ts.map +1 -0
  42. package/dist/api/flow-designer-api.js +555 -0
  43. package/dist/api/flow-designer-api.js.map +1 -0
  44. package/dist/api/natural-language-mapper.d.ts +126 -0
  45. package/dist/api/natural-language-mapper.d.ts.map +1 -0
  46. package/dist/api/natural-language-mapper.js +498 -0
  47. package/dist/api/natural-language-mapper.js.map +1 -0
  48. package/dist/api/performance-optimizer.d.ts +240 -0
  49. package/dist/api/performance-optimizer.d.ts.map +1 -0
  50. package/dist/api/performance-optimizer.js +701 -0
  51. package/dist/api/performance-optimizer.js.map +1 -0
  52. package/dist/api/transaction-manager.d.ts +189 -0
  53. package/dist/api/transaction-manager.d.ts.map +1 -0
  54. package/dist/api/transaction-manager.js +576 -0
  55. package/dist/api/transaction-manager.js.map +1 -0
  56. package/dist/cli/deploy-artifact.d.ts +7 -0
  57. package/dist/cli/deploy-artifact.d.ts.map +1 -0
  58. package/dist/cli/deploy-artifact.js +279 -0
  59. package/dist/cli/deploy-artifact.js.map +1 -0
  60. package/dist/cli.d.ts +6 -0
  61. package/dist/cli.d.ts.map +1 -0
  62. package/dist/cli.js +2057 -0
  63. package/dist/cli.js.map +1 -0
  64. package/dist/index.d.ts +10 -0
  65. package/dist/index.d.ts.map +1 -0
  66. package/dist/index.js +35 -0
  67. package/dist/index.js.map +1 -0
  68. package/dist/managers/scope-manager.d.ts +75 -0
  69. package/dist/managers/scope-manager.d.ts.map +1 -0
  70. package/dist/managers/scope-manager.js +448 -0
  71. package/dist/managers/scope-manager.js.map +1 -0
  72. package/dist/mcp/mcp-wrapper.d.ts +8 -0
  73. package/dist/mcp/mcp-wrapper.d.ts.map +1 -0
  74. package/dist/mcp/mcp-wrapper.js +77 -0
  75. package/dist/mcp/mcp-wrapper.js.map +1 -0
  76. package/dist/mcp/servicenow-automation-mcp.d.ts +8 -0
  77. package/dist/mcp/servicenow-automation-mcp.d.ts.map +1 -0
  78. package/dist/mcp/servicenow-automation-mcp.js +683 -0
  79. package/dist/mcp/servicenow-automation-mcp.js.map +1 -0
  80. package/dist/mcp/servicenow-deployment-mcp.d.ts +7 -0
  81. package/dist/mcp/servicenow-deployment-mcp.d.ts.map +1 -0
  82. package/dist/mcp/servicenow-deployment-mcp.js +972 -0
  83. package/dist/mcp/servicenow-deployment-mcp.js.map +1 -0
  84. package/dist/mcp/servicenow-flow-composer-mcp.d.ts +7 -0
  85. package/dist/mcp/servicenow-flow-composer-mcp.d.ts.map +1 -0
  86. package/dist/mcp/servicenow-flow-composer-mcp.js +1121 -0
  87. package/dist/mcp/servicenow-flow-composer-mcp.js.map +1 -0
  88. package/dist/mcp/servicenow-graph-memory-mcp.d.ts +7 -0
  89. package/dist/mcp/servicenow-graph-memory-mcp.d.ts.map +1 -0
  90. package/dist/mcp/servicenow-graph-memory-mcp.js +703 -0
  91. package/dist/mcp/servicenow-graph-memory-mcp.js.map +1 -0
  92. package/dist/mcp/servicenow-integration-mcp.d.ts +8 -0
  93. package/dist/mcp/servicenow-integration-mcp.d.ts.map +1 -0
  94. package/dist/mcp/servicenow-integration-mcp.js +689 -0
  95. package/dist/mcp/servicenow-integration-mcp.js.map +1 -0
  96. package/dist/mcp/servicenow-intelligent-mcp.d.ts +7 -0
  97. package/dist/mcp/servicenow-intelligent-mcp.d.ts.map +1 -0
  98. package/dist/mcp/servicenow-intelligent-mcp.js +1138 -0
  99. package/dist/mcp/servicenow-intelligent-mcp.js.map +1 -0
  100. package/dist/mcp/servicenow-mcp-server.d.ts +37 -0
  101. package/dist/mcp/servicenow-mcp-server.d.ts.map +1 -0
  102. package/dist/mcp/servicenow-mcp-server.js +648 -0
  103. package/dist/mcp/servicenow-mcp-server.js.map +1 -0
  104. package/dist/mcp/servicenow-operations-mcp.d.ts +15 -0
  105. package/dist/mcp/servicenow-operations-mcp.d.ts.map +1 -0
  106. package/dist/mcp/servicenow-operations-mcp.js +1287 -0
  107. package/dist/mcp/servicenow-operations-mcp.js.map +1 -0
  108. package/dist/mcp/servicenow-platform-development-mcp.d.ts +8 -0
  109. package/dist/mcp/servicenow-platform-development-mcp.d.ts.map +1 -0
  110. package/dist/mcp/servicenow-platform-development-mcp.js +557 -0
  111. package/dist/mcp/servicenow-platform-development-mcp.js.map +1 -0
  112. package/dist/mcp/servicenow-progressive-indexer.d.ts +79 -0
  113. package/dist/mcp/servicenow-progressive-indexer.d.ts.map +1 -0
  114. package/dist/mcp/servicenow-progressive-indexer.js +320 -0
  115. package/dist/mcp/servicenow-progressive-indexer.js.map +1 -0
  116. package/dist/mcp/servicenow-reporting-analytics-mcp.d.ts +8 -0
  117. package/dist/mcp/servicenow-reporting-analytics-mcp.d.ts.map +1 -0
  118. package/dist/mcp/servicenow-reporting-analytics-mcp.js +888 -0
  119. package/dist/mcp/servicenow-reporting-analytics-mcp.js.map +1 -0
  120. package/dist/mcp/servicenow-security-compliance-mcp.d.ts +8 -0
  121. package/dist/mcp/servicenow-security-compliance-mcp.d.ts.map +1 -0
  122. package/dist/mcp/servicenow-security-compliance-mcp.js +812 -0
  123. package/dist/mcp/servicenow-security-compliance-mcp.js.map +1 -0
  124. package/dist/mcp/servicenow-update-set-mcp.d.ts +7 -0
  125. package/dist/mcp/servicenow-update-set-mcp.d.ts.map +1 -0
  126. package/dist/mcp/servicenow-update-set-mcp.js +599 -0
  127. package/dist/mcp/servicenow-update-set-mcp.js.map +1 -0
  128. package/dist/mcp/start-all-mcp-servers.d.ts +6 -0
  129. package/dist/mcp/start-all-mcp-servers.d.ts.map +1 -0
  130. package/dist/mcp/start-all-mcp-servers.js +65 -0
  131. package/dist/mcp/start-all-mcp-servers.js.map +1 -0
  132. package/dist/mcp/start-servicenow-mcp.d.ts +7 -0
  133. package/dist/mcp/start-servicenow-mcp.d.ts.map +1 -0
  134. package/dist/mcp/start-servicenow-mcp.js +64 -0
  135. package/dist/mcp/start-servicenow-mcp.js.map +1 -0
  136. package/dist/mcp/test-simple-mcp.d.ts +6 -0
  137. package/dist/mcp/test-simple-mcp.d.ts.map +1 -0
  138. package/dist/mcp/test-simple-mcp.js +64 -0
  139. package/dist/mcp/test-simple-mcp.js.map +1 -0
  140. package/dist/orchestrator/flow-composer.d.ts +269 -0
  141. package/dist/orchestrator/flow-composer.d.ts.map +1 -0
  142. package/dist/orchestrator/flow-composer.js +2221 -0
  143. package/dist/orchestrator/flow-composer.js.map +1 -0
  144. package/dist/orchestrator/flow-pattern-templates.d.ts +260 -0
  145. package/dist/orchestrator/flow-pattern-templates.d.ts.map +1 -0
  146. package/dist/orchestrator/flow-pattern-templates.js +906 -0
  147. package/dist/orchestrator/flow-pattern-templates.js.map +1 -0
  148. package/dist/orchestrator/flow-subflow-decision-engine.d.ts +202 -0
  149. package/dist/orchestrator/flow-subflow-decision-engine.d.ts.map +1 -0
  150. package/dist/orchestrator/flow-subflow-decision-engine.js +769 -0
  151. package/dist/orchestrator/flow-subflow-decision-engine.js.map +1 -0
  152. package/dist/orchestrator/flow-validation-engine.d.ts +145 -0
  153. package/dist/orchestrator/flow-validation-engine.d.ts.map +1 -0
  154. package/dist/orchestrator/flow-validation-engine.js +663 -0
  155. package/dist/orchestrator/flow-validation-engine.js.map +1 -0
  156. package/dist/orchestrator/snow-orchestrator.d.ts +49 -0
  157. package/dist/orchestrator/snow-orchestrator.d.ts.map +1 -0
  158. package/dist/orchestrator/snow-orchestrator.js +235 -0
  159. package/dist/orchestrator/snow-orchestrator.js.map +1 -0
  160. package/dist/orchestrator/subflow-creation-handler.d.ts +230 -0
  161. package/dist/orchestrator/subflow-creation-handler.d.ts.map +1 -0
  162. package/dist/orchestrator/subflow-creation-handler.js +791 -0
  163. package/dist/orchestrator/subflow-creation-handler.js.map +1 -0
  164. package/dist/strategies/global-scope-strategy.d.ts +123 -0
  165. package/dist/strategies/global-scope-strategy.d.ts.map +1 -0
  166. package/dist/strategies/global-scope-strategy.js +585 -0
  167. package/dist/strategies/global-scope-strategy.js.map +1 -0
  168. package/dist/types/index.d.ts +138 -0
  169. package/dist/types/index.d.ts.map +1 -0
  170. package/dist/types/index.js +4 -0
  171. package/dist/types/index.js.map +1 -0
  172. package/dist/types/servicenow.types.d.ts +260 -0
  173. package/dist/types/servicenow.types.d.ts.map +1 -0
  174. package/dist/types/servicenow.types.js +3 -0
  175. package/dist/types/servicenow.types.js.map +1 -0
  176. package/dist/types/snow-flow.types.d.ts +114 -0
  177. package/dist/types/snow-flow.types.d.ts.map +1 -0
  178. package/dist/types/snow-flow.types.js +3 -0
  179. package/dist/types/snow-flow.types.js.map +1 -0
  180. package/dist/utils/action-type-cache.d.ts +66 -0
  181. package/dist/utils/action-type-cache.d.ts.map +1 -0
  182. package/dist/utils/action-type-cache.js +237 -0
  183. package/dist/utils/action-type-cache.js.map +1 -0
  184. package/dist/utils/agent-detector.d.ts +35 -0
  185. package/dist/utils/agent-detector.d.ts.map +1 -0
  186. package/dist/utils/agent-detector.js +353 -0
  187. package/dist/utils/agent-detector.js.map +1 -0
  188. package/dist/utils/flow-api-discovery.d.ts +151 -0
  189. package/dist/utils/flow-api-discovery.d.ts.map +1 -0
  190. package/dist/utils/flow-api-discovery.js +440 -0
  191. package/dist/utils/flow-api-discovery.js.map +1 -0
  192. package/dist/utils/flow-xml-generator.d.ts +41 -0
  193. package/dist/utils/flow-xml-generator.d.ts.map +1 -0
  194. package/dist/utils/flow-xml-generator.js +258 -0
  195. package/dist/utils/flow-xml-generator.js.map +1 -0
  196. package/dist/utils/logger.d.ts +13 -0
  197. package/dist/utils/logger.d.ts.map +1 -0
  198. package/dist/utils/logger.js +51 -0
  199. package/dist/utils/logger.js.map +1 -0
  200. package/dist/utils/mcp-auth-middleware.d.ts +58 -0
  201. package/dist/utils/mcp-auth-middleware.d.ts.map +1 -0
  202. package/dist/utils/mcp-auth-middleware.js +227 -0
  203. package/dist/utils/mcp-auth-middleware.js.map +1 -0
  204. package/dist/utils/mcp-config-manager.d.ts +126 -0
  205. package/dist/utils/mcp-config-manager.d.ts.map +1 -0
  206. package/dist/utils/mcp-config-manager.js +209 -0
  207. package/dist/utils/mcp-config-manager.js.map +1 -0
  208. package/dist/utils/mcp-server-manager.d.ts +91 -0
  209. package/dist/utils/mcp-server-manager.d.ts.map +1 -0
  210. package/dist/utils/mcp-server-manager.js +338 -0
  211. package/dist/utils/mcp-server-manager.js.map +1 -0
  212. package/dist/utils/scope-utils.d.ts +72 -0
  213. package/dist/utils/scope-utils.d.ts.map +1 -0
  214. package/dist/utils/scope-utils.js +386 -0
  215. package/dist/utils/scope-utils.js.map +1 -0
  216. package/dist/utils/servicenow-client.d.ts +233 -0
  217. package/dist/utils/servicenow-client.d.ts.map +1 -0
  218. package/dist/utils/servicenow-client.js +1465 -0
  219. package/dist/utils/servicenow-client.js.map +1 -0
  220. package/dist/utils/snow-oauth-old.d.ts +65 -0
  221. package/dist/utils/snow-oauth-old.d.ts.map +1 -0
  222. package/dist/utils/snow-oauth-old.js +345 -0
  223. package/dist/utils/snow-oauth-old.js.map +1 -0
  224. package/dist/utils/snow-oauth.d.ts +85 -0
  225. package/dist/utils/snow-oauth.d.ts.map +1 -0
  226. package/dist/utils/snow-oauth.js +512 -0
  227. package/dist/utils/snow-oauth.js.map +1 -0
  228. package/dist/utils/template-engine.d.ts +76 -0
  229. package/dist/utils/template-engine.d.ts.map +1 -0
  230. package/dist/utils/template-engine.js +391 -0
  231. package/dist/utils/template-engine.js.map +1 -0
  232. package/dist/version.d.ts +35 -0
  233. package/dist/version.d.ts.map +1 -0
  234. package/dist/version.js +72 -0
  235. package/dist/version.js.map +1 -0
  236. package/mcp-wrapper.sh +12 -0
  237. package/package.json +77 -0
  238. package/reports/swarm-auto-centralized-1752649029776.json +13 -0
  239. package/scripts/postinstall.js +30 -0
  240. package/scripts/setup-mcp.js +89 -0
@@ -0,0 +1,227 @@
1
+ "use strict";
2
+ /**
3
+ * Centralized MCP Authentication Middleware
4
+ * Handles ServiceNow OAuth authentication across all MCP servers
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.mcpAuth = exports.MCPAuthenticationMiddleware = void 0;
8
+ const snow_oauth_js_1 = require("./snow-oauth.js");
9
+ const mcp_config_manager_js_1 = require("./mcp-config-manager.js");
10
+ const logger_js_1 = require("./logger.js");
11
+ class MCPAuthenticationMiddleware {
12
+ constructor() {
13
+ this.lastAuthCheck = null;
14
+ this.authCheckInterval = 5 * 60 * 1000; // 5 minutes
15
+ this.logger = new logger_js_1.Logger('MCPAuthMiddleware');
16
+ this.oauth = new snow_oauth_js_1.ServiceNowOAuth();
17
+ }
18
+ static getInstance() {
19
+ if (!MCPAuthenticationMiddleware.instance) {
20
+ MCPAuthenticationMiddleware.instance = new MCPAuthenticationMiddleware();
21
+ }
22
+ return MCPAuthenticationMiddleware.instance;
23
+ }
24
+ /**
25
+ * Ensure authentication is valid before MCP operations
26
+ */
27
+ async ensureAuthenticated() {
28
+ try {
29
+ // Check if we need to refresh authentication
30
+ if (this.shouldCheckAuth()) {
31
+ this.logger.debug('Checking authentication status...');
32
+ const isAuthenticated = await this.oauth.isAuthenticated();
33
+ if (!isAuthenticated) {
34
+ this.logger.warn('Authentication expired or invalid');
35
+ return {
36
+ success: false,
37
+ error: 'ServiceNow authentication expired. Please run "snow-flow auth login" again.',
38
+ needsReauth: true
39
+ };
40
+ }
41
+ this.lastAuthCheck = new Date();
42
+ }
43
+ // Get current token
44
+ const token = await this.oauth.getAccessToken();
45
+ if (!token) {
46
+ return {
47
+ success: false,
48
+ error: 'No access token available. Please authenticate first.',
49
+ needsReauth: true
50
+ };
51
+ }
52
+ return {
53
+ success: true,
54
+ token
55
+ };
56
+ }
57
+ catch (error) {
58
+ this.logger.error('Authentication check failed:', error);
59
+ return {
60
+ success: false,
61
+ error: error instanceof Error ? error.message : 'Authentication check failed',
62
+ needsReauth: true
63
+ };
64
+ }
65
+ }
66
+ /**
67
+ * Check if authentication status should be verified
68
+ */
69
+ shouldCheckAuth() {
70
+ if (!this.lastAuthCheck)
71
+ return true;
72
+ const timeSinceLastCheck = Date.now() - this.lastAuthCheck.getTime();
73
+ return timeSinceLastCheck > this.authCheckInterval;
74
+ }
75
+ /**
76
+ * Handle authentication errors with automatic retry
77
+ */
78
+ async handleAuthError(error) {
79
+ this.logger.warn('Handling authentication error:', error);
80
+ // Check if this is an authentication-related error
81
+ if (this.isAuthError(error)) {
82
+ // Try to refresh token
83
+ try {
84
+ const credentials = await this.oauth.loadCredentials();
85
+ if (credentials) {
86
+ const refreshResult = await this.oauth.refreshAccessToken(credentials);
87
+ if (refreshResult.success) {
88
+ this.logger.info('Token refreshed successfully');
89
+ return {
90
+ success: true,
91
+ token: refreshResult.accessToken
92
+ };
93
+ }
94
+ }
95
+ }
96
+ catch (refreshError) {
97
+ this.logger.error('Token refresh failed:', refreshError);
98
+ }
99
+ // If refresh failed, require re-authentication
100
+ return {
101
+ success: false,
102
+ error: 'Authentication failed. Please run "snow-flow auth login" again.',
103
+ needsReauth: true
104
+ };
105
+ }
106
+ // Not an auth error, return original error
107
+ return {
108
+ success: false,
109
+ error: error instanceof Error ? error.message : String(error)
110
+ };
111
+ }
112
+ /**
113
+ * Check if an error is authentication-related
114
+ */
115
+ isAuthError(error) {
116
+ if (!error)
117
+ return false;
118
+ const errorMessage = error.message || error.toString() || '';
119
+ const errorCode = error.status || error.code || 0;
120
+ // Check for common authentication error patterns
121
+ const authErrorPatterns = [
122
+ 'unauthorized',
123
+ 'authentication',
124
+ 'expired',
125
+ 'invalid token',
126
+ 'access denied',
127
+ 'forbidden'
128
+ ];
129
+ const isAuthMessage = authErrorPatterns.some(pattern => errorMessage.toLowerCase().includes(pattern));
130
+ const isAuthCode = [401, 403].includes(errorCode);
131
+ return isAuthMessage || isAuthCode;
132
+ }
133
+ /**
134
+ * Get ServiceNow instance information
135
+ */
136
+ async getInstanceInfo() {
137
+ const config = mcp_config_manager_js_1.mcpConfig.getServiceNowConfig();
138
+ const authenticated = await this.oauth.isAuthenticated();
139
+ return {
140
+ instance: config.instanceUrl || 'Not configured',
141
+ authenticated
142
+ };
143
+ }
144
+ /**
145
+ * Wrapper for MCP operations with authentication
146
+ */
147
+ async withAuth(operation) {
148
+ const authResult = await this.ensureAuthenticated();
149
+ if (!authResult.success) {
150
+ throw new Error(authResult.error || 'Authentication failed');
151
+ }
152
+ try {
153
+ return await operation(authResult.token);
154
+ }
155
+ catch (error) {
156
+ // Handle potential authentication errors during operation
157
+ const authErrorResult = await this.handleAuthError(error);
158
+ if (authErrorResult.needsReauth) {
159
+ throw new Error(authErrorResult.error || 'Authentication required');
160
+ }
161
+ // If we successfully refreshed the token, retry the operation
162
+ if (authErrorResult.success && authErrorResult.token) {
163
+ return await operation(authErrorResult.token);
164
+ }
165
+ // Re-throw original error if not auth-related
166
+ throw error;
167
+ }
168
+ }
169
+ /**
170
+ * Get authentication headers for HTTP requests
171
+ */
172
+ async getAuthHeaders() {
173
+ const authResult = await this.ensureAuthenticated();
174
+ if (!authResult.success) {
175
+ throw new Error(authResult.error || 'Authentication failed');
176
+ }
177
+ return {
178
+ 'Authorization': `Bearer ${authResult.token}`,
179
+ 'Content-Type': 'application/json',
180
+ 'Accept': 'application/json'
181
+ };
182
+ }
183
+ /**
184
+ * Force authentication refresh
185
+ */
186
+ async forceRefresh() {
187
+ this.logger.info('Forcing authentication refresh...');
188
+ this.lastAuthCheck = null;
189
+ try {
190
+ const credentials = await this.oauth.loadCredentials();
191
+ if (credentials) {
192
+ const refreshResult = await this.oauth.refreshAccessToken(credentials);
193
+ if (refreshResult.success) {
194
+ return {
195
+ success: true,
196
+ token: refreshResult.accessToken
197
+ };
198
+ }
199
+ else {
200
+ return {
201
+ success: false,
202
+ error: 'Token refresh failed',
203
+ needsReauth: true
204
+ };
205
+ }
206
+ }
207
+ else {
208
+ return {
209
+ success: false,
210
+ error: 'No credentials available',
211
+ needsReauth: true
212
+ };
213
+ }
214
+ }
215
+ catch (error) {
216
+ return {
217
+ success: false,
218
+ error: error instanceof Error ? error.message : 'Refresh failed',
219
+ needsReauth: true
220
+ };
221
+ }
222
+ }
223
+ }
224
+ exports.MCPAuthenticationMiddleware = MCPAuthenticationMiddleware;
225
+ // Export singleton instance
226
+ exports.mcpAuth = MCPAuthenticationMiddleware.getInstance();
227
+ //# sourceMappingURL=mcp-auth-middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-auth-middleware.js","sourceRoot":"","sources":["../../src/utils/mcp-auth-middleware.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Centralized MCP Configuration Manager
3
+ * Handles dynamic configuration loading for all MCP servers
4
+ */
5
+ export interface MCPConfig {
6
+ servicenow: {
7
+ instanceUrl?: string;
8
+ clientId?: string;
9
+ clientSecret?: string;
10
+ oauthRedirectUri?: string;
11
+ maxRetries?: number;
12
+ timeout?: number;
13
+ };
14
+ neo4j?: {
15
+ uri?: string;
16
+ username?: string;
17
+ password?: string;
18
+ database?: string;
19
+ };
20
+ memory: {
21
+ provider: 'file' | 'neo4j' | 'redis';
22
+ path?: string;
23
+ connectionString?: string;
24
+ maxSize?: number;
25
+ ttl?: number;
26
+ };
27
+ performance: {
28
+ connectionPoolSize?: number;
29
+ requestTimeout?: number;
30
+ retryAttempts?: number;
31
+ cacheEnabled?: boolean;
32
+ cacheTtl?: number;
33
+ };
34
+ logging: {
35
+ level: 'debug' | 'info' | 'warn' | 'error';
36
+ enableFileLogging?: boolean;
37
+ logPath?: string;
38
+ };
39
+ }
40
+ export declare class MCPConfigManager {
41
+ private static instance;
42
+ private config;
43
+ private logger;
44
+ private constructor();
45
+ static getInstance(): MCPConfigManager;
46
+ /**
47
+ * Load configuration from environment variables and config files
48
+ */
49
+ private loadConfiguration;
50
+ /**
51
+ * Merge base configuration with file configuration
52
+ */
53
+ private mergeConfigs;
54
+ /**
55
+ * Get the complete configuration
56
+ */
57
+ getConfig(): MCPConfig;
58
+ /**
59
+ * Get ServiceNow configuration
60
+ */
61
+ getServiceNowConfig(): {
62
+ instanceUrl?: string;
63
+ clientId?: string;
64
+ clientSecret?: string;
65
+ oauthRedirectUri?: string;
66
+ maxRetries?: number;
67
+ timeout?: number;
68
+ };
69
+ /**
70
+ * Get Neo4j configuration
71
+ */
72
+ getNeo4jConfig(): {
73
+ uri?: string;
74
+ username?: string;
75
+ password?: string;
76
+ database?: string;
77
+ } | undefined;
78
+ /**
79
+ * Get memory configuration
80
+ */
81
+ getMemoryConfig(): {
82
+ provider: "file" | "neo4j" | "redis";
83
+ path?: string;
84
+ connectionString?: string;
85
+ maxSize?: number;
86
+ ttl?: number;
87
+ };
88
+ /**
89
+ * Get performance configuration
90
+ */
91
+ getPerformanceConfig(): {
92
+ connectionPoolSize?: number;
93
+ requestTimeout?: number;
94
+ retryAttempts?: number;
95
+ cacheEnabled?: boolean;
96
+ cacheTtl?: number;
97
+ };
98
+ /**
99
+ * Get logging configuration
100
+ */
101
+ getLoggingConfig(): {
102
+ level: "debug" | "info" | "warn" | "error";
103
+ enableFileLogging?: boolean;
104
+ logPath?: string;
105
+ };
106
+ /**
107
+ * Validate configuration
108
+ */
109
+ validateConfig(): {
110
+ valid: boolean;
111
+ errors: string[];
112
+ };
113
+ /**
114
+ * Hot reload configuration
115
+ */
116
+ reloadConfig(): Promise<void>;
117
+ /**
118
+ * Get environment-specific configuration
119
+ */
120
+ getEnvironmentConfig(): {
121
+ environment: string;
122
+ config: MCPConfig;
123
+ };
124
+ }
125
+ export declare const mcpConfig: MCPConfigManager;
126
+ //# sourceMappingURL=mcp-config-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-config-manager.d.ts","sourceRoot":"","sources":["../../src/utils/mcp-config-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE;QACV,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,KAAK,CAAC,EAAE;QACN,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;QACrC,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IACF,WAAW,EAAE;QACX,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,OAAO,EAAE;QACP,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;QAC3C,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmB;IAC1C,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO;WAKO,WAAW,IAAI,gBAAgB;IAO7C;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoDzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACI,SAAS,IAAI,SAAS;IAI7B;;OAEG;IACI,mBAAmB;sBAjIV,MAAM;mBACT,MAAM;uBACF,MAAM;2BACF,MAAM;qBACZ,MAAM;kBACT,MAAM;;IAgIlB;;OAEG;IACI,cAAc;cAhIb,MAAM;mBACD,MAAM;mBACN,MAAM;mBACN,MAAM;;IAiInB;;OAEG;IACI,eAAe;kBAjIV,MAAM,GAAG,OAAO,GAAG,OAAO;eAC7B,MAAM;2BACM,MAAM;kBACf,MAAM;cACV,MAAM;;IAiId;;OAEG;IACI,oBAAoB;6BAjIJ,MAAM;yBACV,MAAM;wBACP,MAAM;uBACP,OAAO;mBACX,MAAM;;IAiInB;;OAEG;IACI,gBAAgB;eAjId,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO;4BACtB,OAAO;kBACjB,MAAM;;IAmIlB;;OAEG;IACI,cAAc,IAAI;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IAsC7D;;OAEG;IACU,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAa1C;;OAEG;IACI,oBAAoB,IAAI;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,SAAS,CAAA;KAAE;CA6B1E;AAGD,eAAO,MAAM,SAAS,kBAAiC,CAAC"}
@@ -0,0 +1,209 @@
1
+ "use strict";
2
+ /**
3
+ * Centralized MCP Configuration Manager
4
+ * Handles dynamic configuration loading for all MCP servers
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.mcpConfig = exports.MCPConfigManager = void 0;
8
+ const dotenv_1 = require("dotenv");
9
+ const fs_1 = require("fs");
10
+ const path_1 = require("path");
11
+ const logger_js_1 = require("./logger.js");
12
+ // Load environment variables
13
+ (0, dotenv_1.config)();
14
+ class MCPConfigManager {
15
+ constructor() {
16
+ this.logger = new logger_js_1.Logger('MCPConfigManager');
17
+ this.config = this.loadConfiguration();
18
+ }
19
+ static getInstance() {
20
+ if (!MCPConfigManager.instance) {
21
+ MCPConfigManager.instance = new MCPConfigManager();
22
+ }
23
+ return MCPConfigManager.instance;
24
+ }
25
+ /**
26
+ * Load configuration from environment variables and config files
27
+ */
28
+ loadConfiguration() {
29
+ const baseConfig = {
30
+ servicenow: {
31
+ instanceUrl: process.env.SERVICENOW_INSTANCE_URL || process.env.SERVICENOW_INSTANCE,
32
+ clientId: process.env.SERVICENOW_CLIENT_ID,
33
+ clientSecret: process.env.SERVICENOW_CLIENT_SECRET,
34
+ oauthRedirectUri: process.env.SERVICENOW_OAUTH_REDIRECT_URI || 'http://localhost:8080/auth/callback',
35
+ maxRetries: parseInt(process.env.SERVICENOW_MAX_RETRIES || '3'),
36
+ timeout: parseInt(process.env.SERVICENOW_TIMEOUT || '30000')
37
+ },
38
+ neo4j: {
39
+ uri: process.env.NEO4J_URI || process.env.NEO4J_URL,
40
+ username: process.env.NEO4J_USERNAME || process.env.NEO4J_USER,
41
+ password: process.env.NEO4J_PASSWORD || process.env.NEO4J_PASS,
42
+ database: process.env.NEO4J_DATABASE || 'neo4j'
43
+ },
44
+ memory: {
45
+ provider: process.env.MEMORY_PROVIDER || 'file',
46
+ path: process.env.MEMORY_PATH || (0, path_1.join)(process.cwd(), '.snow-flow', 'memory'),
47
+ connectionString: process.env.MEMORY_CONNECTION_STRING,
48
+ maxSize: parseInt(process.env.MEMORY_MAX_SIZE || '1000'),
49
+ ttl: parseInt(process.env.MEMORY_TTL || '86400') // 24 hours
50
+ },
51
+ performance: {
52
+ connectionPoolSize: parseInt(process.env.CONNECTION_POOL_SIZE || '10'),
53
+ requestTimeout: parseInt(process.env.REQUEST_TIMEOUT || '30000'),
54
+ retryAttempts: parseInt(process.env.RETRY_ATTEMPTS || '3'),
55
+ cacheEnabled: process.env.CACHE_ENABLED !== 'false',
56
+ cacheTtl: parseInt(process.env.CACHE_TTL || '300') // 5 minutes
57
+ },
58
+ logging: {
59
+ level: process.env.LOG_LEVEL || 'info',
60
+ enableFileLogging: process.env.ENABLE_FILE_LOGGING === 'true',
61
+ logPath: process.env.LOG_PATH || (0, path_1.join)(process.cwd(), '.snow-flow', 'logs')
62
+ }
63
+ };
64
+ // Try to load from config file if it exists
65
+ const configPath = (0, path_1.join)(process.cwd(), '.snow-flow', 'config.json');
66
+ if ((0, fs_1.existsSync)(configPath)) {
67
+ try {
68
+ const fileConfig = JSON.parse((0, fs_1.readFileSync)(configPath, 'utf8'));
69
+ this.logger.info('Loaded configuration from config.json');
70
+ return this.mergeConfigs(baseConfig, fileConfig);
71
+ }
72
+ catch (error) {
73
+ this.logger.warn('Failed to load config.json, using environment variables');
74
+ }
75
+ }
76
+ return baseConfig;
77
+ }
78
+ /**
79
+ * Merge base configuration with file configuration
80
+ */
81
+ mergeConfigs(base, override) {
82
+ return {
83
+ servicenow: { ...base.servicenow, ...override.servicenow },
84
+ neo4j: { ...base.neo4j, ...override.neo4j },
85
+ memory: { ...base.memory, ...override.memory },
86
+ performance: { ...base.performance, ...override.performance },
87
+ logging: { ...base.logging, ...override.logging }
88
+ };
89
+ }
90
+ /**
91
+ * Get the complete configuration
92
+ */
93
+ getConfig() {
94
+ return this.config;
95
+ }
96
+ /**
97
+ * Get ServiceNow configuration
98
+ */
99
+ getServiceNowConfig() {
100
+ return this.config.servicenow;
101
+ }
102
+ /**
103
+ * Get Neo4j configuration
104
+ */
105
+ getNeo4jConfig() {
106
+ return this.config.neo4j;
107
+ }
108
+ /**
109
+ * Get memory configuration
110
+ */
111
+ getMemoryConfig() {
112
+ return this.config.memory;
113
+ }
114
+ /**
115
+ * Get performance configuration
116
+ */
117
+ getPerformanceConfig() {
118
+ return this.config.performance;
119
+ }
120
+ /**
121
+ * Get logging configuration
122
+ */
123
+ getLoggingConfig() {
124
+ return this.config.logging;
125
+ }
126
+ /**
127
+ * Validate configuration
128
+ */
129
+ validateConfig() {
130
+ const errors = [];
131
+ // Validate ServiceNow configuration
132
+ if (!this.config.servicenow.instanceUrl) {
133
+ errors.push('ServiceNow instance URL is required (SERVICENOW_INSTANCE_URL)');
134
+ }
135
+ if (!this.config.servicenow.clientId) {
136
+ errors.push('ServiceNow client ID is required (SERVICENOW_CLIENT_ID)');
137
+ }
138
+ if (!this.config.servicenow.clientSecret) {
139
+ errors.push('ServiceNow client secret is required (SERVICENOW_CLIENT_SECRET)');
140
+ }
141
+ // Validate Neo4j configuration if enabled
142
+ if (this.config.memory.provider === 'neo4j') {
143
+ if (!this.config.neo4j?.uri) {
144
+ errors.push('Neo4j URI is required when using Neo4j memory provider (NEO4J_URI)');
145
+ }
146
+ if (!this.config.neo4j?.username) {
147
+ errors.push('Neo4j username is required when using Neo4j memory provider (NEO4J_USERNAME)');
148
+ }
149
+ if (!this.config.neo4j?.password) {
150
+ errors.push('Neo4j password is required when using Neo4j memory provider (NEO4J_PASSWORD)');
151
+ }
152
+ }
153
+ // Validate memory configuration
154
+ if (!['file', 'neo4j', 'redis'].includes(this.config.memory.provider)) {
155
+ errors.push('Memory provider must be one of: file, neo4j, redis');
156
+ }
157
+ return {
158
+ valid: errors.length === 0,
159
+ errors
160
+ };
161
+ }
162
+ /**
163
+ * Hot reload configuration
164
+ */
165
+ async reloadConfig() {
166
+ this.logger.info('Reloading configuration...');
167
+ this.config = this.loadConfiguration();
168
+ const validation = this.validateConfig();
169
+ if (!validation.valid) {
170
+ this.logger.error('Configuration validation failed:', validation.errors);
171
+ throw new Error(`Configuration validation failed: ${validation.errors.join(', ')}`);
172
+ }
173
+ this.logger.info('Configuration reloaded successfully');
174
+ }
175
+ /**
176
+ * Get environment-specific configuration
177
+ */
178
+ getEnvironmentConfig() {
179
+ const environment = process.env.NODE_ENV || 'development';
180
+ // Environment-specific overrides
181
+ const envOverrides = {};
182
+ if (environment === 'production') {
183
+ envOverrides.logging = {
184
+ ...this.config.logging,
185
+ level: 'warn',
186
+ enableFileLogging: true
187
+ };
188
+ envOverrides.performance = {
189
+ ...this.config.performance,
190
+ cacheEnabled: true,
191
+ connectionPoolSize: 20
192
+ };
193
+ }
194
+ else if (environment === 'development') {
195
+ envOverrides.logging = {
196
+ ...this.config.logging,
197
+ level: 'debug'
198
+ };
199
+ }
200
+ return {
201
+ environment,
202
+ config: this.mergeConfigs(this.config, envOverrides)
203
+ };
204
+ }
205
+ }
206
+ exports.MCPConfigManager = MCPConfigManager;
207
+ // Export singleton instance
208
+ exports.mcpConfig = MCPConfigManager.getInstance();
209
+ //# sourceMappingURL=mcp-config-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-config-manager.js","sourceRoot":"","sources":["../../src/utils/mcp-config-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * MCP Server Manager - Manages background MCP servers for Claude Code integration
3
+ */
4
+ import { ChildProcess } from 'child_process';
5
+ import { EventEmitter } from 'events';
6
+ export interface MCPServer {
7
+ name: string;
8
+ script: string;
9
+ port?: number;
10
+ host?: string;
11
+ process?: ChildProcess;
12
+ pid?: number;
13
+ status: 'stopped' | 'starting' | 'running' | 'error';
14
+ startedAt?: Date;
15
+ lastError?: string;
16
+ }
17
+ export interface MCPServerConfig {
18
+ name: string;
19
+ script: string;
20
+ port?: number;
21
+ host?: string;
22
+ autoStart?: boolean;
23
+ env?: Record<string, string>;
24
+ }
25
+ export declare class MCPServerManager extends EventEmitter {
26
+ private servers;
27
+ private configPath;
28
+ private logPath;
29
+ constructor(configPath?: string);
30
+ /**
31
+ * Initialize MCP server manager
32
+ */
33
+ initialize(): Promise<void>;
34
+ /**
35
+ * Load MCP server configuration
36
+ */
37
+ loadConfiguration(): Promise<void>;
38
+ /**
39
+ * Create default MCP server configuration
40
+ */
41
+ createDefaultConfiguration(): Promise<void>;
42
+ /**
43
+ * Save MCP server configuration
44
+ */
45
+ saveConfiguration(configs: MCPServerConfig[]): Promise<void>;
46
+ /**
47
+ * Start a specific MCP server
48
+ */
49
+ startServer(name: string): Promise<boolean>;
50
+ /**
51
+ * Stop a specific MCP server
52
+ */
53
+ stopServer(name: string): Promise<boolean>;
54
+ /**
55
+ * Start all configured MCP servers
56
+ */
57
+ startAllServers(): Promise<void>;
58
+ /**
59
+ * Stop all running MCP servers
60
+ */
61
+ stopAllServers(): Promise<void>;
62
+ /**
63
+ * Get status of all servers
64
+ */
65
+ getServerStatus(): MCPServer[];
66
+ /**
67
+ * Get status of a specific server
68
+ */
69
+ getServer(name: string): MCPServer | undefined;
70
+ /**
71
+ * Check if all servers are running
72
+ */
73
+ areAllServersRunning(): boolean;
74
+ /**
75
+ * Get running servers count
76
+ */
77
+ getRunningServersCount(): number;
78
+ /**
79
+ * Add a new server configuration
80
+ */
81
+ addServer(config: MCPServerConfig): Promise<void>;
82
+ /**
83
+ * Remove a server configuration
84
+ */
85
+ removeServer(name: string): Promise<void>;
86
+ /**
87
+ * Cleanup - stop all servers and clean up resources
88
+ */
89
+ cleanup(): Promise<void>;
90
+ }
91
+ //# sourceMappingURL=mcp-server-manager.d.ts.map