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.
- package/.env.example +49 -0
- package/.mcp.json +106 -0
- package/.mcp.json.template +106 -0
- package/LICENSE +21 -0
- package/README.md +236 -0
- package/bin/snow-flow +4 -0
- package/bin/snow-flow.js +3 -0
- package/claude-flow +79 -0
- package/claude-flow.bat +18 -0
- package/claude-flow.config.json +20 -0
- package/claude-flow.ps1 +24 -0
- package/dist/agents/app-creator.agent.d.ts +55 -0
- package/dist/agents/app-creator.agent.d.ts.map +1 -0
- package/dist/agents/app-creator.agent.js +1292 -0
- package/dist/agents/app-creator.agent.js.map +1 -0
- package/dist/agents/base-snow-agent.d.ts +63 -0
- package/dist/agents/base-snow-agent.d.ts.map +1 -0
- package/dist/agents/base-snow-agent.js +296 -0
- package/dist/agents/base-snow-agent.js.map +1 -0
- package/dist/agents/script-generator.agent.d.ts +32 -0
- package/dist/agents/script-generator.agent.d.ts.map +1 -0
- package/dist/agents/script-generator.agent.js +772 -0
- package/dist/agents/script-generator.agent.js.map +1 -0
- package/dist/agents/ui-builder.agent.d.ts +50 -0
- package/dist/agents/ui-builder.agent.d.ts.map +1 -0
- package/dist/agents/ui-builder.agent.js +1539 -0
- package/dist/agents/ui-builder.agent.js.map +1 -0
- package/dist/agents/widget-builder.agent.d.ts +32 -0
- package/dist/agents/widget-builder.agent.d.ts.map +1 -0
- package/dist/agents/widget-builder.agent.js +439 -0
- package/dist/agents/widget-builder.agent.js.map +1 -0
- package/dist/agents/workflow-designer.agent.d.ts +31 -0
- package/dist/agents/workflow-designer.agent.d.ts.map +1 -0
- package/dist/agents/workflow-designer.agent.js +583 -0
- package/dist/agents/workflow-designer.agent.js.map +1 -0
- package/dist/api/error-handling.d.ts +214 -0
- package/dist/api/error-handling.d.ts.map +1 -0
- package/dist/api/error-handling.js +594 -0
- package/dist/api/error-handling.js.map +1 -0
- package/dist/api/flow-designer-api.d.ts +167 -0
- package/dist/api/flow-designer-api.d.ts.map +1 -0
- package/dist/api/flow-designer-api.js +555 -0
- package/dist/api/flow-designer-api.js.map +1 -0
- package/dist/api/natural-language-mapper.d.ts +126 -0
- package/dist/api/natural-language-mapper.d.ts.map +1 -0
- package/dist/api/natural-language-mapper.js +498 -0
- package/dist/api/natural-language-mapper.js.map +1 -0
- package/dist/api/performance-optimizer.d.ts +240 -0
- package/dist/api/performance-optimizer.d.ts.map +1 -0
- package/dist/api/performance-optimizer.js +701 -0
- package/dist/api/performance-optimizer.js.map +1 -0
- package/dist/api/transaction-manager.d.ts +189 -0
- package/dist/api/transaction-manager.d.ts.map +1 -0
- package/dist/api/transaction-manager.js +576 -0
- package/dist/api/transaction-manager.js.map +1 -0
- package/dist/cli/deploy-artifact.d.ts +7 -0
- package/dist/cli/deploy-artifact.d.ts.map +1 -0
- package/dist/cli/deploy-artifact.js +279 -0
- package/dist/cli/deploy-artifact.js.map +1 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +2057 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/managers/scope-manager.d.ts +75 -0
- package/dist/managers/scope-manager.d.ts.map +1 -0
- package/dist/managers/scope-manager.js +448 -0
- package/dist/managers/scope-manager.js.map +1 -0
- package/dist/mcp/mcp-wrapper.d.ts +8 -0
- package/dist/mcp/mcp-wrapper.d.ts.map +1 -0
- package/dist/mcp/mcp-wrapper.js +77 -0
- package/dist/mcp/mcp-wrapper.js.map +1 -0
- package/dist/mcp/servicenow-automation-mcp.d.ts +8 -0
- package/dist/mcp/servicenow-automation-mcp.d.ts.map +1 -0
- package/dist/mcp/servicenow-automation-mcp.js +683 -0
- package/dist/mcp/servicenow-automation-mcp.js.map +1 -0
- package/dist/mcp/servicenow-deployment-mcp.d.ts +7 -0
- package/dist/mcp/servicenow-deployment-mcp.d.ts.map +1 -0
- package/dist/mcp/servicenow-deployment-mcp.js +972 -0
- package/dist/mcp/servicenow-deployment-mcp.js.map +1 -0
- package/dist/mcp/servicenow-flow-composer-mcp.d.ts +7 -0
- package/dist/mcp/servicenow-flow-composer-mcp.d.ts.map +1 -0
- package/dist/mcp/servicenow-flow-composer-mcp.js +1121 -0
- package/dist/mcp/servicenow-flow-composer-mcp.js.map +1 -0
- package/dist/mcp/servicenow-graph-memory-mcp.d.ts +7 -0
- package/dist/mcp/servicenow-graph-memory-mcp.d.ts.map +1 -0
- package/dist/mcp/servicenow-graph-memory-mcp.js +703 -0
- package/dist/mcp/servicenow-graph-memory-mcp.js.map +1 -0
- package/dist/mcp/servicenow-integration-mcp.d.ts +8 -0
- package/dist/mcp/servicenow-integration-mcp.d.ts.map +1 -0
- package/dist/mcp/servicenow-integration-mcp.js +689 -0
- package/dist/mcp/servicenow-integration-mcp.js.map +1 -0
- package/dist/mcp/servicenow-intelligent-mcp.d.ts +7 -0
- package/dist/mcp/servicenow-intelligent-mcp.d.ts.map +1 -0
- package/dist/mcp/servicenow-intelligent-mcp.js +1138 -0
- package/dist/mcp/servicenow-intelligent-mcp.js.map +1 -0
- package/dist/mcp/servicenow-mcp-server.d.ts +37 -0
- package/dist/mcp/servicenow-mcp-server.d.ts.map +1 -0
- package/dist/mcp/servicenow-mcp-server.js +648 -0
- package/dist/mcp/servicenow-mcp-server.js.map +1 -0
- package/dist/mcp/servicenow-operations-mcp.d.ts +15 -0
- package/dist/mcp/servicenow-operations-mcp.d.ts.map +1 -0
- package/dist/mcp/servicenow-operations-mcp.js +1287 -0
- package/dist/mcp/servicenow-operations-mcp.js.map +1 -0
- package/dist/mcp/servicenow-platform-development-mcp.d.ts +8 -0
- package/dist/mcp/servicenow-platform-development-mcp.d.ts.map +1 -0
- package/dist/mcp/servicenow-platform-development-mcp.js +557 -0
- package/dist/mcp/servicenow-platform-development-mcp.js.map +1 -0
- package/dist/mcp/servicenow-progressive-indexer.d.ts +79 -0
- package/dist/mcp/servicenow-progressive-indexer.d.ts.map +1 -0
- package/dist/mcp/servicenow-progressive-indexer.js +320 -0
- package/dist/mcp/servicenow-progressive-indexer.js.map +1 -0
- package/dist/mcp/servicenow-reporting-analytics-mcp.d.ts +8 -0
- package/dist/mcp/servicenow-reporting-analytics-mcp.d.ts.map +1 -0
- package/dist/mcp/servicenow-reporting-analytics-mcp.js +888 -0
- package/dist/mcp/servicenow-reporting-analytics-mcp.js.map +1 -0
- package/dist/mcp/servicenow-security-compliance-mcp.d.ts +8 -0
- package/dist/mcp/servicenow-security-compliance-mcp.d.ts.map +1 -0
- package/dist/mcp/servicenow-security-compliance-mcp.js +812 -0
- package/dist/mcp/servicenow-security-compliance-mcp.js.map +1 -0
- package/dist/mcp/servicenow-update-set-mcp.d.ts +7 -0
- package/dist/mcp/servicenow-update-set-mcp.d.ts.map +1 -0
- package/dist/mcp/servicenow-update-set-mcp.js +599 -0
- package/dist/mcp/servicenow-update-set-mcp.js.map +1 -0
- package/dist/mcp/start-all-mcp-servers.d.ts +6 -0
- package/dist/mcp/start-all-mcp-servers.d.ts.map +1 -0
- package/dist/mcp/start-all-mcp-servers.js +65 -0
- package/dist/mcp/start-all-mcp-servers.js.map +1 -0
- package/dist/mcp/start-servicenow-mcp.d.ts +7 -0
- package/dist/mcp/start-servicenow-mcp.d.ts.map +1 -0
- package/dist/mcp/start-servicenow-mcp.js +64 -0
- package/dist/mcp/start-servicenow-mcp.js.map +1 -0
- package/dist/mcp/test-simple-mcp.d.ts +6 -0
- package/dist/mcp/test-simple-mcp.d.ts.map +1 -0
- package/dist/mcp/test-simple-mcp.js +64 -0
- package/dist/mcp/test-simple-mcp.js.map +1 -0
- package/dist/orchestrator/flow-composer.d.ts +269 -0
- package/dist/orchestrator/flow-composer.d.ts.map +1 -0
- package/dist/orchestrator/flow-composer.js +2221 -0
- package/dist/orchestrator/flow-composer.js.map +1 -0
- package/dist/orchestrator/flow-pattern-templates.d.ts +260 -0
- package/dist/orchestrator/flow-pattern-templates.d.ts.map +1 -0
- package/dist/orchestrator/flow-pattern-templates.js +906 -0
- package/dist/orchestrator/flow-pattern-templates.js.map +1 -0
- package/dist/orchestrator/flow-subflow-decision-engine.d.ts +202 -0
- package/dist/orchestrator/flow-subflow-decision-engine.d.ts.map +1 -0
- package/dist/orchestrator/flow-subflow-decision-engine.js +769 -0
- package/dist/orchestrator/flow-subflow-decision-engine.js.map +1 -0
- package/dist/orchestrator/flow-validation-engine.d.ts +145 -0
- package/dist/orchestrator/flow-validation-engine.d.ts.map +1 -0
- package/dist/orchestrator/flow-validation-engine.js +663 -0
- package/dist/orchestrator/flow-validation-engine.js.map +1 -0
- package/dist/orchestrator/snow-orchestrator.d.ts +49 -0
- package/dist/orchestrator/snow-orchestrator.d.ts.map +1 -0
- package/dist/orchestrator/snow-orchestrator.js +235 -0
- package/dist/orchestrator/snow-orchestrator.js.map +1 -0
- package/dist/orchestrator/subflow-creation-handler.d.ts +230 -0
- package/dist/orchestrator/subflow-creation-handler.d.ts.map +1 -0
- package/dist/orchestrator/subflow-creation-handler.js +791 -0
- package/dist/orchestrator/subflow-creation-handler.js.map +1 -0
- package/dist/strategies/global-scope-strategy.d.ts +123 -0
- package/dist/strategies/global-scope-strategy.d.ts.map +1 -0
- package/dist/strategies/global-scope-strategy.js +585 -0
- package/dist/strategies/global-scope-strategy.js.map +1 -0
- package/dist/types/index.d.ts +138 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/servicenow.types.d.ts +260 -0
- package/dist/types/servicenow.types.d.ts.map +1 -0
- package/dist/types/servicenow.types.js +3 -0
- package/dist/types/servicenow.types.js.map +1 -0
- package/dist/types/snow-flow.types.d.ts +114 -0
- package/dist/types/snow-flow.types.d.ts.map +1 -0
- package/dist/types/snow-flow.types.js +3 -0
- package/dist/types/snow-flow.types.js.map +1 -0
- package/dist/utils/action-type-cache.d.ts +66 -0
- package/dist/utils/action-type-cache.d.ts.map +1 -0
- package/dist/utils/action-type-cache.js +237 -0
- package/dist/utils/action-type-cache.js.map +1 -0
- package/dist/utils/agent-detector.d.ts +35 -0
- package/dist/utils/agent-detector.d.ts.map +1 -0
- package/dist/utils/agent-detector.js +353 -0
- package/dist/utils/agent-detector.js.map +1 -0
- package/dist/utils/flow-api-discovery.d.ts +151 -0
- package/dist/utils/flow-api-discovery.d.ts.map +1 -0
- package/dist/utils/flow-api-discovery.js +440 -0
- package/dist/utils/flow-api-discovery.js.map +1 -0
- package/dist/utils/flow-xml-generator.d.ts +41 -0
- package/dist/utils/flow-xml-generator.d.ts.map +1 -0
- package/dist/utils/flow-xml-generator.js +258 -0
- package/dist/utils/flow-xml-generator.js.map +1 -0
- package/dist/utils/logger.d.ts +13 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +51 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/mcp-auth-middleware.d.ts +58 -0
- package/dist/utils/mcp-auth-middleware.d.ts.map +1 -0
- package/dist/utils/mcp-auth-middleware.js +227 -0
- package/dist/utils/mcp-auth-middleware.js.map +1 -0
- package/dist/utils/mcp-config-manager.d.ts +126 -0
- package/dist/utils/mcp-config-manager.d.ts.map +1 -0
- package/dist/utils/mcp-config-manager.js +209 -0
- package/dist/utils/mcp-config-manager.js.map +1 -0
- package/dist/utils/mcp-server-manager.d.ts +91 -0
- package/dist/utils/mcp-server-manager.d.ts.map +1 -0
- package/dist/utils/mcp-server-manager.js +338 -0
- package/dist/utils/mcp-server-manager.js.map +1 -0
- package/dist/utils/scope-utils.d.ts +72 -0
- package/dist/utils/scope-utils.d.ts.map +1 -0
- package/dist/utils/scope-utils.js +386 -0
- package/dist/utils/scope-utils.js.map +1 -0
- package/dist/utils/servicenow-client.d.ts +233 -0
- package/dist/utils/servicenow-client.d.ts.map +1 -0
- package/dist/utils/servicenow-client.js +1465 -0
- package/dist/utils/servicenow-client.js.map +1 -0
- package/dist/utils/snow-oauth-old.d.ts +65 -0
- package/dist/utils/snow-oauth-old.d.ts.map +1 -0
- package/dist/utils/snow-oauth-old.js +345 -0
- package/dist/utils/snow-oauth-old.js.map +1 -0
- package/dist/utils/snow-oauth.d.ts +85 -0
- package/dist/utils/snow-oauth.d.ts.map +1 -0
- package/dist/utils/snow-oauth.js +512 -0
- package/dist/utils/snow-oauth.js.map +1 -0
- package/dist/utils/template-engine.d.ts +76 -0
- package/dist/utils/template-engine.d.ts.map +1 -0
- package/dist/utils/template-engine.js +391 -0
- package/dist/utils/template-engine.js.map +1 -0
- package/dist/version.d.ts +35 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +72 -0
- package/dist/version.js.map +1 -0
- package/mcp-wrapper.sh +12 -0
- package/package.json +77 -0
- package/reports/swarm-auto-centralized-1752649029776.json +13 -0
- package/scripts/postinstall.js +30 -0
- 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"}
|