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,512 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * ServiceNow OAuth Authentication Utility with Dynamic Port
5
+ * Handles OAuth2 flow for ServiceNow integration
6
+ */
7
+ var __importDefault = (this && this.__importDefault) || function (mod) {
8
+ return (mod && mod.__esModule) ? mod : { "default": mod };
9
+ };
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.ServiceNowOAuth = void 0;
12
+ const fs_1 = require("fs");
13
+ const path_1 = require("path");
14
+ const http_1 = require("http");
15
+ const url_1 = require("url");
16
+ const axios_1 = __importDefault(require("axios"));
17
+ const net_1 = __importDefault(require("net"));
18
+ const crypto_1 = __importDefault(require("crypto"));
19
+ class ServiceNowOAuth {
20
+ constructor() {
21
+ // Store tokens in user's home directory
22
+ const configDir = (0, path_1.join)(process.env.HOME || process.env.USERPROFILE || '', '.snow-flow');
23
+ this.tokenPath = (0, path_1.join)(configDir, 'auth.json');
24
+ }
25
+ /**
26
+ * Generate a random state parameter for CSRF protection
27
+ */
28
+ generateState() {
29
+ return Math.random().toString(36).substring(2, 15) +
30
+ Math.random().toString(36).substring(2, 15);
31
+ }
32
+ /**
33
+ * Generate PKCE code verifier and challenge
34
+ */
35
+ generatePKCE() {
36
+ // Generate code verifier (43-128 characters)
37
+ this.codeVerifier = crypto_1.default.randomBytes(32).toString('base64url');
38
+ // Generate code challenge (SHA256 hash of verifier)
39
+ const hash = crypto_1.default.createHash('sha256');
40
+ hash.update(this.codeVerifier);
41
+ this.codeChallenge = hash.digest('base64url');
42
+ }
43
+ /**
44
+ * Check if a specific port is available
45
+ */
46
+ async checkPortAvailable(port) {
47
+ return new Promise((resolve) => {
48
+ const server = net_1.default.createServer();
49
+ server.on('error', () => {
50
+ resolve(false);
51
+ });
52
+ server.listen(port, () => {
53
+ server.close(() => {
54
+ resolve(true);
55
+ });
56
+ });
57
+ });
58
+ }
59
+ /**
60
+ * Initialize OAuth flow - opens browser and handles callback
61
+ */
62
+ async authenticate(instance, clientId, clientSecret) {
63
+ try {
64
+ // Use fixed port 3005 for ServiceNow OAuth
65
+ const port = 3005;
66
+ const redirectUri = `http://localhost:${port}/callback`;
67
+ // Check if port is available
68
+ const isPortAvailable = await this.checkPortAvailable(port);
69
+ if (!isPortAvailable) {
70
+ console.error(`❌ Port ${port} is already in use!`);
71
+ console.error(`💡 Please close any application using port ${port} and try again.`);
72
+ return {
73
+ success: false,
74
+ error: `Port ${port} is already in use. Please free up the port and try again.`
75
+ };
76
+ }
77
+ // Store credentials temporarily (remove trailing slash from instance)
78
+ this.credentials = {
79
+ instance: instance.replace(/\/$/, ''),
80
+ clientId,
81
+ clientSecret,
82
+ redirectUri
83
+ };
84
+ console.log('🚀 Starting ServiceNow OAuth flow...');
85
+ console.log(`📋 Instance: ${instance}`);
86
+ console.log(`🔐 Client ID: ${clientId}`);
87
+ console.log(`🔗 Redirect URI: ${redirectUri}`);
88
+ // Generate state parameter for CSRF protection
89
+ this.stateParameter = this.generateState();
90
+ // Generate PKCE parameters
91
+ this.generatePKCE();
92
+ // Generate authorization URL
93
+ const authUrl = this.generateAuthUrl(instance, clientId, redirectUri);
94
+ console.log('\n🌐 Authorization URL generated:');
95
+ console.log(`${authUrl}\n`);
96
+ // Start local server to handle callback
97
+ const authResult = await this.startCallbackServer(redirectUri, port);
98
+ if (authResult.success && authResult.accessToken) {
99
+ // Save tokens
100
+ await this.saveTokens({
101
+ accessToken: authResult.accessToken,
102
+ refreshToken: authResult.refreshToken || '',
103
+ expiresIn: authResult.expiresIn || 3600,
104
+ instance: instance.replace(/\/$/, ''),
105
+ clientId,
106
+ clientSecret
107
+ });
108
+ console.log('\n✅ Authentication successful!');
109
+ console.log('🔐 Tokens saved securely');
110
+ }
111
+ return authResult;
112
+ }
113
+ catch (error) {
114
+ const errorMessage = error instanceof Error ? error.message : String(error);
115
+ console.error('❌ Authentication failed:', errorMessage);
116
+ return {
117
+ success: false,
118
+ error: errorMessage
119
+ };
120
+ }
121
+ }
122
+ /**
123
+ * Generate ServiceNow OAuth authorization URL
124
+ */
125
+ generateAuthUrl(instance, clientId, redirectUri) {
126
+ const baseUrl = `https://${instance}/oauth_auth.do`;
127
+ const params = new URLSearchParams({
128
+ response_type: 'code',
129
+ client_id: clientId,
130
+ redirect_uri: redirectUri,
131
+ scope: 'useraccount',
132
+ state: this.stateParameter || '',
133
+ code_challenge: this.codeChallenge || '',
134
+ code_challenge_method: 'S256'
135
+ });
136
+ return `${baseUrl}?${params.toString()}`;
137
+ }
138
+ /**
139
+ * Start local HTTP server to handle OAuth callback
140
+ */
141
+ async startCallbackServer(redirectUri, port) {
142
+ return new Promise((resolve) => {
143
+ const server = (0, http_1.createServer)(async (req, res) => {
144
+ try {
145
+ const url = new url_1.URL(req.url, `http://localhost:${port}`);
146
+ if (url.pathname === '/callback') {
147
+ const code = url.searchParams.get('code');
148
+ const error = url.searchParams.get('error');
149
+ const state = url.searchParams.get('state');
150
+ // Validate state parameter
151
+ if (state !== this.stateParameter) {
152
+ res.writeHead(400, { 'Content-Type': 'text/html' });
153
+ res.end(`
154
+ <html>
155
+ <body>
156
+ <h1>❌ Security Error</h1>
157
+ <p>Invalid state parameter - possible CSRF attack</p>
158
+ <p>You can close this window.</p>
159
+ </body>
160
+ </html>
161
+ `);
162
+ server.close();
163
+ resolve({
164
+ success: false,
165
+ error: 'Invalid state parameter'
166
+ });
167
+ return;
168
+ }
169
+ if (error) {
170
+ res.writeHead(400, { 'Content-Type': 'text/html' });
171
+ res.end(`
172
+ <html>
173
+ <body>
174
+ <h1>❌ OAuth Error</h1>
175
+ <p>Error: ${error}</p>
176
+ <p>You can close this window.</p>
177
+ </body>
178
+ </html>
179
+ `);
180
+ server.close();
181
+ resolve({
182
+ success: false,
183
+ error: `OAuth error: ${error}`
184
+ });
185
+ return;
186
+ }
187
+ if (!code) {
188
+ res.writeHead(400, { 'Content-Type': 'text/html' });
189
+ res.end(`
190
+ <html>
191
+ <body>
192
+ <h1>❌ Missing Authorization Code</h1>
193
+ <p>No authorization code received.</p>
194
+ <p>You can close this window.</p>
195
+ </body>
196
+ </html>
197
+ `);
198
+ server.close();
199
+ resolve({
200
+ success: false,
201
+ error: 'No authorization code received'
202
+ });
203
+ return;
204
+ }
205
+ // Exchange code for tokens
206
+ console.log('🔄 Exchanging authorization code for tokens...');
207
+ const tokenResult = await this.exchangeCodeForTokens(code);
208
+ if (tokenResult.success) {
209
+ res.writeHead(200, { 'Content-Type': 'text/html' });
210
+ res.end(`
211
+ <html>
212
+ <body>
213
+ <h1>✅ Authentication Successful!</h1>
214
+ <p>You can now close this window and return to the terminal.</p>
215
+ <p>Snow-Flow is now connected to ServiceNow!</p>
216
+ </body>
217
+ </html>
218
+ `);
219
+ server.close();
220
+ resolve(tokenResult);
221
+ }
222
+ else {
223
+ res.writeHead(500, { 'Content-Type': 'text/html' });
224
+ res.end(`
225
+ <html>
226
+ <body>
227
+ <h1>❌ Token Exchange Failed</h1>
228
+ <p>Error: ${tokenResult.error}</p>
229
+ <p>You can close this window.</p>
230
+ </body>
231
+ </html>
232
+ `);
233
+ server.close();
234
+ resolve(tokenResult);
235
+ }
236
+ }
237
+ else {
238
+ res.writeHead(404, { 'Content-Type': 'text/plain' });
239
+ res.end('Not Found');
240
+ }
241
+ }
242
+ catch (error) {
243
+ console.error('Callback server error:', error);
244
+ res.writeHead(500, { 'Content-Type': 'text/plain' });
245
+ res.end('Internal Server Error');
246
+ server.close();
247
+ resolve({
248
+ success: false,
249
+ error: error instanceof Error ? error.message : String(error)
250
+ });
251
+ }
252
+ });
253
+ server.listen(port, () => {
254
+ console.log(`🌐 OAuth callback server started on http://localhost:${port}`);
255
+ console.log('🚀 Please open the authorization URL in your browser...');
256
+ console.log('⏳ Waiting for OAuth callback...');
257
+ // Auto-open browser if possible
258
+ try {
259
+ const { spawn } = require('child_process');
260
+ const authUrl = this.generateAuthUrl(this.credentials.instance, this.credentials.clientId, redirectUri);
261
+ // Try to open browser on macOS
262
+ if (process.platform === 'darwin') {
263
+ spawn('open', [authUrl]);
264
+ }
265
+ else if (process.platform === 'win32') {
266
+ spawn('cmd', ['/c', 'start', authUrl]);
267
+ }
268
+ else if (process.platform === 'linux') {
269
+ spawn('xdg-open', [authUrl]);
270
+ }
271
+ else {
272
+ console.log('Unknown OS:', process.platform);
273
+ }
274
+ }
275
+ catch (err) {
276
+ console.log('⚠️ Could not auto-open browser. Please open the URL manually.');
277
+ }
278
+ });
279
+ });
280
+ }
281
+ /**
282
+ * Exchange authorization code for tokens
283
+ */
284
+ async exchangeCodeForTokens(code) {
285
+ try {
286
+ const tokenUrl = `https://${this.credentials.instance}/oauth_token.do`;
287
+ const response = await axios_1.default.post(tokenUrl, new URLSearchParams({
288
+ grant_type: 'authorization_code',
289
+ code,
290
+ client_id: this.credentials.clientId,
291
+ client_secret: this.credentials.clientSecret,
292
+ redirect_uri: this.credentials.redirectUri,
293
+ code_verifier: this.codeVerifier || ''
294
+ }), {
295
+ headers: {
296
+ 'Content-Type': 'application/x-www-form-urlencoded'
297
+ }
298
+ });
299
+ const data = response.data;
300
+ if (data.access_token) {
301
+ return {
302
+ success: true,
303
+ accessToken: data.access_token,
304
+ refreshToken: data.refresh_token,
305
+ expiresIn: data.expires_in
306
+ };
307
+ }
308
+ else {
309
+ return {
310
+ success: false,
311
+ error: 'No access token received'
312
+ };
313
+ }
314
+ }
315
+ catch (error) {
316
+ const errorMessage = error instanceof Error ? error.message : String(error);
317
+ console.error('Token exchange error:', errorMessage);
318
+ if (axios_1.default.isAxiosError(error) && error.response) {
319
+ console.error('Response data:', error.response.data);
320
+ }
321
+ return {
322
+ success: false,
323
+ error: errorMessage
324
+ };
325
+ }
326
+ }
327
+ /**
328
+ * Save tokens to file
329
+ */
330
+ async saveTokens(tokenData) {
331
+ try {
332
+ const configDir = (0, path_1.join)(process.env.HOME || process.env.USERPROFILE || '', '.snow-flow');
333
+ await fs_1.promises.mkdir(configDir, { recursive: true });
334
+ const expiresAt = new Date();
335
+ expiresAt.setSeconds(expiresAt.getSeconds() + tokenData.expiresIn);
336
+ const authData = {
337
+ ...tokenData,
338
+ expiresAt: expiresAt.toISOString()
339
+ };
340
+ await fs_1.promises.writeFile(this.tokenPath, JSON.stringify(authData, null, 2), 'utf8');
341
+ }
342
+ catch (error) {
343
+ console.error('Failed to save tokens:', error);
344
+ throw error;
345
+ }
346
+ }
347
+ /**
348
+ * Load tokens from file
349
+ */
350
+ async loadTokens() {
351
+ try {
352
+ const data = await fs_1.promises.readFile(this.tokenPath, 'utf8');
353
+ return JSON.parse(data);
354
+ }
355
+ catch (error) {
356
+ return null;
357
+ }
358
+ }
359
+ /**
360
+ * Check if authenticated
361
+ */
362
+ async isAuthenticated() {
363
+ try {
364
+ const tokens = await this.loadTokens();
365
+ if (!tokens)
366
+ return false;
367
+ // Check if token is expired
368
+ const expiresAt = new Date(tokens.expiresAt);
369
+ const now = new Date();
370
+ return now < expiresAt;
371
+ }
372
+ catch (error) {
373
+ return false;
374
+ }
375
+ }
376
+ /**
377
+ * Get access token (refresh if needed)
378
+ */
379
+ async getAccessToken() {
380
+ try {
381
+ const tokens = await this.loadTokens();
382
+ if (!tokens)
383
+ return null;
384
+ // Check if token is expired
385
+ const expiresAt = new Date(tokens.expiresAt);
386
+ const now = new Date();
387
+ if (now >= expiresAt && tokens.refreshToken) {
388
+ // Token expired, try to refresh
389
+ console.log('🔄 Token expired, refreshing...');
390
+ const refreshResult = await this.refreshAccessToken(tokens);
391
+ if (refreshResult.success && refreshResult.accessToken) {
392
+ // Update saved tokens
393
+ await this.saveTokens({
394
+ ...tokens,
395
+ accessToken: refreshResult.accessToken,
396
+ expiresIn: refreshResult.expiresIn || 3600
397
+ });
398
+ return refreshResult.accessToken;
399
+ }
400
+ else {
401
+ console.error('❌ Token refresh failed:', refreshResult.error);
402
+ return null;
403
+ }
404
+ }
405
+ return tokens.accessToken;
406
+ }
407
+ catch (error) {
408
+ console.error('Failed to get access token:', error);
409
+ return null;
410
+ }
411
+ }
412
+ /**
413
+ * Refresh access token
414
+ */
415
+ async refreshAccessToken(tokens) {
416
+ try {
417
+ // If no tokens provided, load from file
418
+ if (!tokens) {
419
+ tokens = await this.loadTokens();
420
+ if (!tokens) {
421
+ return {
422
+ success: false,
423
+ error: 'No tokens found to refresh'
424
+ };
425
+ }
426
+ }
427
+ const tokenUrl = `https://${tokens.instance}/oauth_token.do`;
428
+ const response = await axios_1.default.post(tokenUrl, new URLSearchParams({
429
+ grant_type: 'refresh_token',
430
+ refresh_token: tokens.refreshToken,
431
+ client_id: tokens.clientId,
432
+ client_secret: tokens.clientSecret
433
+ }), {
434
+ headers: {
435
+ 'Content-Type': 'application/x-www-form-urlencoded'
436
+ }
437
+ });
438
+ const data = response.data;
439
+ if (data.access_token) {
440
+ // Update saved tokens
441
+ await this.saveTokens({
442
+ ...tokens,
443
+ accessToken: data.access_token,
444
+ expiresIn: data.expires_in || 3600
445
+ });
446
+ return {
447
+ success: true,
448
+ accessToken: data.access_token,
449
+ expiresIn: data.expires_in
450
+ };
451
+ }
452
+ else {
453
+ return {
454
+ success: false,
455
+ error: 'No access token received'
456
+ };
457
+ }
458
+ }
459
+ catch (error) {
460
+ const errorMessage = error instanceof Error ? error.message : String(error);
461
+ return {
462
+ success: false,
463
+ error: errorMessage
464
+ };
465
+ }
466
+ }
467
+ /**
468
+ * Logout - clear saved tokens
469
+ */
470
+ async logout() {
471
+ try {
472
+ await fs_1.promises.unlink(this.tokenPath);
473
+ console.log('✅ Logged out successfully');
474
+ }
475
+ catch (error) {
476
+ console.log('No active session to logout from');
477
+ }
478
+ }
479
+ /**
480
+ * Load credentials (including tokens)
481
+ */
482
+ async loadCredentials() {
483
+ try {
484
+ const tokens = await this.loadTokens();
485
+ if (!tokens) {
486
+ console.log('⚠️ No tokens found in:', this.tokenPath);
487
+ return null;
488
+ }
489
+ // Debug: Log what we found
490
+ console.log('🔍 Credentials check:');
491
+ console.log(` - Token file: ${this.tokenPath}`);
492
+ console.log(` - Instance: ${tokens.instance || 'MISSING'}`);
493
+ console.log(` - Client ID: ${tokens.clientId ? '✅ Present' : '❌ Missing'}`);
494
+ console.log(` - Access Token: ${tokens.accessToken ? '✅ Present' : '❌ Missing'}`);
495
+ console.log(` - Expires At: ${tokens.expiresAt || 'MISSING'}`);
496
+ return {
497
+ instance: tokens.instance,
498
+ clientId: tokens.clientId,
499
+ clientSecret: tokens.clientSecret,
500
+ accessToken: tokens.accessToken,
501
+ refreshToken: tokens.refreshToken,
502
+ expiresAt: tokens.expiresAt
503
+ };
504
+ }
505
+ catch (error) {
506
+ console.error('❌ Error loading credentials:', error);
507
+ return null;
508
+ }
509
+ }
510
+ }
511
+ exports.ServiceNowOAuth = ServiceNowOAuth;
512
+ //# sourceMappingURL=snow-oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snow-oauth.js","sourceRoot":"","sources":["../../src/utils/snow-oauth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Template Engine for Dynamic Artifact Generation
3
+ * Replaces hardcoded artifact implementations with flexible templates
4
+ */
5
+ export interface TemplateVariables {
6
+ [key: string]: string | number | boolean;
7
+ }
8
+ export interface Template {
9
+ type: string;
10
+ name: string;
11
+ description: string;
12
+ category?: string;
13
+ config: any;
14
+ variables?: TemplateVariables;
15
+ }
16
+ export declare class TemplateEngine {
17
+ private templatesPath;
18
+ constructor(templatesPath?: string);
19
+ /**
20
+ * Load a template from file
21
+ */
22
+ loadTemplate(templatePath: string): Promise<Template>;
23
+ /**
24
+ * Process template with variables
25
+ */
26
+ processTemplate(template: Template, variables?: TemplateVariables): any;
27
+ /**
28
+ * Create artifact from template
29
+ */
30
+ createFromTemplate(templateName: string, variables?: TemplateVariables): Promise<any>;
31
+ /**
32
+ * Get available templates
33
+ */
34
+ getAvailableTemplates(type?: string, category?: string): Promise<Template[]>;
35
+ /**
36
+ * Get templates from a directory
37
+ */
38
+ private getTemplatesFromDirectory;
39
+ /**
40
+ * Check if directory exists
41
+ */
42
+ private directoryExists;
43
+ /**
44
+ * Create example from template
45
+ */
46
+ createExample(templateName: string, exampleName: string, variables: TemplateVariables): Promise<void>;
47
+ /**
48
+ * Validate template structure
49
+ */
50
+ validateTemplate(template: Template): string[];
51
+ /**
52
+ * Generate artifact from natural language
53
+ */
54
+ generateFromDescription(description: string, type?: string): Promise<any>;
55
+ /**
56
+ * Select the best template based on natural language description
57
+ */
58
+ private selectBestTemplate;
59
+ /**
60
+ * Score a template based on how well it matches the description
61
+ */
62
+ private scoreTemplate;
63
+ /**
64
+ * Extract variables from natural language description
65
+ */
66
+ private extractVariablesFromDescription;
67
+ /**
68
+ * Apply intelligent defaults based on context
69
+ */
70
+ private applyIntelligentDefaults;
71
+ /**
72
+ * Create from pattern template
73
+ */
74
+ createFromPattern(pattern: string, variables?: TemplateVariables): Promise<any>;
75
+ }
76
+ //# sourceMappingURL=template-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-engine.d.ts","sourceRoot":"","sources":["../../src/utils/template-engine.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,iBAAiB;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;CAC1C;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,GAAG,CAAC;IACZ,SAAS,CAAC,EAAE,iBAAiB,CAAC;CAC/B;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,aAAa,CAAS;gBAElB,aAAa,CAAC,EAAE,MAAM;IAIlC;;OAEG;IACG,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAM3D;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,GAAE,iBAAsB,GAAG,GAAG;IAyC3E;;OAEG;IACG,kBAAkB,CACtB,YAAY,EAAE,MAAM,EACpB,SAAS,GAAE,iBAAsB,GAChC,OAAO,CAAC,GAAG,CAAC;IASf;;OAEG;IACG,qBAAqB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAyBlF;;OAEG;YACW,yBAAyB;IAmBvC;;OAEG;YACW,eAAe;IAS7B;;OAEG;IACG,aAAa,CACjB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAAC,IAAI,CAAC;IAWhB;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE;IAqC9C;;OAEG;IACG,uBAAuB,CAC3B,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,GAAG,CAAC;IAWf;;OAEG;YACW,kBAAkB;IA2ChC;;OAEG;IACH,OAAO,CAAC,aAAa;IAiCrB;;OAEG;IACH,OAAO,CAAC,+BAA+B;IAgFvC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA4ChC;;OAEG;IACG,iBAAiB,CACrB,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,iBAAsB,GAChC,OAAO,CAAC,GAAG,CAAC;CAWhB"}