snow-flow 3.0.9 → 3.0.13
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/claude-flow.bat +0 -0
- package/claude-flow.ps1 +0 -0
- package/dist/mcp/intelligent-reporting-mcp.d.ts +7 -0
- package/dist/mcp/intelligent-reporting-mcp.js +379 -0
- package/dist/mcp/servicenow-automation-mcp.js +0 -0
- package/dist/mcp/servicenow-deployment-mcp.js +0 -0
- package/dist/mcp/servicenow-integration-mcp.js +0 -0
- package/dist/mcp/servicenow-mcp-server.js +0 -0
- package/dist/mcp/servicenow-operations-mcp.js +0 -0
- package/dist/mcp/servicenow-platform-development-mcp.js +0 -0
- package/dist/mcp/servicenow-progressive-indexer.js +0 -0
- package/dist/mcp/servicenow-reporting-analytics-mcp.js +280 -29
- package/dist/mcp/servicenow-security-compliance-mcp.js +0 -0
- package/dist/mcp/servicenow-update-set-mcp.js +0 -0
- package/dist/mcp/start-all-mcp-servers.js +0 -0
- package/dist/mcp/start-servicenow-mcp.js +0 -0
- package/dist/services/widget-deployment-service.d.ts +2 -1
- package/dist/services/widget-deployment-service.js +17 -16
- package/dist/utils/anti-mock-data-validator.d.ts +66 -0
- package/dist/utils/anti-mock-data-validator.js +316 -0
- package/dist/utils/servicenow-eventual-consistency.d.ts +120 -0
- package/dist/utils/servicenow-eventual-consistency.js +220 -0
- package/memory/agents/README.md +1 -1
- package/memory/claude-flow-data.json +1 -1
- package/memory/sessions/README.md +1 -1
- package/package.json +4 -3
- package/.mcp.json +0 -22
- package/claude-flow.config.json +0 -20
- package/dist/agents/app-creator.agent.d.ts +0 -55
- package/dist/agents/app-creator.agent.js +0 -1292
- package/dist/agents/base/base-snow-agent.d.ts +0 -75
- package/dist/agents/base/base-snow-agent.js +0 -169
- package/dist/agents/base-snow-agent.d.ts +0 -63
- package/dist/agents/base-snow-agent.js +0 -296
- package/dist/agents/coordinator.d.ts +0 -200
- package/dist/agents/coordinator.js +0 -777
- package/dist/agents/flow-builder-agent.d.ts +0 -18
- package/dist/agents/flow-builder-agent.js +0 -197
- package/dist/agents/queen-403-handler.d.ts +0 -47
- package/dist/agents/queen-403-handler.js +0 -175
- package/dist/agents/queen-agent-example.d.ts +0 -23
- package/dist/agents/queen-agent-example.js +0 -240
- package/dist/agents/queen-agent.test.d.ts +0 -6
- package/dist/agents/script-generator.agent.d.ts +0 -32
- package/dist/agents/script-generator.agent.js +0 -772
- package/dist/agents/script-writer-agent.d.ts +0 -22
- package/dist/agents/script-writer-agent.js +0 -695
- package/dist/agents/security-agent.d.ts +0 -23
- package/dist/agents/security-agent.js +0 -619
- package/dist/agents/specialists/automation-specialist.agent.d.ts +0 -44
- package/dist/agents/specialists/automation-specialist.agent.js +0 -204
- package/dist/agents/specialists/data-specialist.agent.d.ts +0 -165
- package/dist/agents/specialists/data-specialist.agent.js +0 -484
- package/dist/agents/specialists/integration-specialist.agent.d.ts +0 -227
- package/dist/agents/specialists/integration-specialist.agent.js +0 -725
- package/dist/agents/specialists/reporting-specialist.agent.d.ts +0 -54
- package/dist/agents/specialists/reporting-specialist.agent.js +0 -193
- package/dist/agents/specialists/security-specialist.agent.d.ts +0 -85
- package/dist/agents/specialists/security-specialist.agent.js +0 -309
- package/dist/agents/teams/adaptive/adaptive-coordinator.agent.d.ts +0 -111
- package/dist/agents/teams/adaptive/adaptive-coordinator.agent.js +0 -383
- package/dist/agents/teams/base-team.d.ts +0 -72
- package/dist/agents/teams/base-team.js +0 -253
- package/dist/agents/teams/team-types.d.ts +0 -265
- package/dist/agents/teams/team-types.js +0 -3
- package/dist/agents/teams/widget/widget-architect.agent.d.ts +0 -61
- package/dist/agents/teams/widget/widget-architect.agent.js +0 -436
- package/dist/agents/teams/widget/widget-backend.agent.d.ts +0 -74
- package/dist/agents/teams/widget/widget-backend.agent.js +0 -1531
- package/dist/agents/teams/widget/widget-frontend.agent.d.ts +0 -67
- package/dist/agents/teams/widget/widget-frontend.agent.js +0 -1014
- package/dist/agents/teams/widget/widget-platform.agent.d.ts +0 -90
- package/dist/agents/teams/widget/widget-platform.agent.js +0 -1190
- package/dist/agents/teams/widget/widget-uiux.agent.d.ts +0 -107
- package/dist/agents/teams/widget/widget-uiux.agent.js +0 -1033
- package/dist/agents/test-agent.d.ts +0 -26
- package/dist/agents/test-agent.js +0 -734
- package/dist/agents/test-agents.d.ts +0 -7
- package/dist/agents/test-agents.js +0 -64
- package/dist/agents/ui-builder.agent.d.ts +0 -50
- package/dist/agents/ui-builder.agent.js +0 -1539
- package/dist/agents/widget-builder.agent.d.ts +0 -32
- package/dist/agents/widget-builder.agent.js +0 -439
- package/dist/agents/widget-creator-agent.d.ts +0 -18
- package/dist/agents/widget-creator-agent.js +0 -498
- package/dist/agents/workflow-designer.agent.d.ts +0 -31
- package/dist/agents/workflow-designer.agent.js +0 -583
- package/dist/api/error-handling.d.ts +0 -325
- package/dist/api/error-handling.js +0 -1488
- package/dist/api/flow-designer-api.d.ts +0 -167
- package/dist/api/flow-designer-api.js +0 -554
- package/dist/api/natural-language-mapper.d.ts +0 -124
- package/dist/api/natural-language-mapper.js +0 -501
- package/dist/api/performance-optimizer.d.ts +0 -240
- package/dist/api/performance-optimizer.js +0 -706
- package/dist/api/transaction-manager.d.ts +0 -189
- package/dist/api/transaction-manager.js +0 -576
- package/dist/assembly/team-assembler.d.ts +0 -140
- package/dist/assembly/team-assembler.js +0 -502
- package/dist/benchmark-performance.d.ts +0 -41
- package/dist/benchmark-performance.js +0 -230
- package/dist/cli/snow-flow-cli-integration.d.ts +0 -30
- package/dist/cli/snow-flow-cli-integration.js +0 -396
- package/dist/coordination/coordination-engine.d.ts +0 -41
- package/dist/coordination/coordination-engine.js +0 -324
- package/dist/coordination/coordination.test.d.ts +0 -6
- package/dist/coordination/example.d.ts +0 -31
- package/dist/coordination/example.js +0 -394
- package/dist/coordination/execution-patterns.d.ts +0 -43
- package/dist/coordination/execution-patterns.js +0 -507
- package/dist/coordination/factory.d.ts +0 -94
- package/dist/coordination/factory.js +0 -433
- package/dist/coordination/index.d.ts +0 -71
- package/dist/coordination/index.js +0 -135
- package/dist/coordination/progress-monitor.d.ts +0 -71
- package/dist/coordination/progress-monitor.js +0 -505
- package/dist/coordination/quality-gates.d.ts +0 -124
- package/dist/coordination/quality-gates.js +0 -577
- package/dist/coordination/shared-memory.d.ts +0 -39
- package/dist/coordination/shared-memory.js +0 -289
- package/dist/coordination/task-dependencies.d.ts +0 -50
- package/dist/coordination/task-dependencies.js +0 -407
- package/dist/coordination/team-coordinator.d.ts +0 -59
- package/dist/coordination/team-coordinator.js +0 -550
- package/dist/coordination/types.d.ts +0 -152
- package/dist/coordination/types.js +0 -3
- package/dist/mcp/mcp-wrapper.d.ts +0 -8
- package/dist/mcp/mcp-wrapper.js +0 -77
- package/dist/mcp/servicenow-flow-composer-enhanced.js +0 -396
- package/dist/mcp/servicenow-flow-composer-mcp.d.ts +0 -7
- package/dist/mcp/servicenow-flow-composer-mcp.js +0 -3103
- package/dist/mcp/servicenow-graph-memory-mcp.d.ts +0 -7
- package/dist/mcp/servicenow-intelligent-mcp.d.ts +0 -143
- package/dist/mcp/servicenow-intelligent-mcp.js +0 -4156
- package/dist/mcp/servicenow-xml-flow-mcp.d.ts +0 -53
- package/dist/mcp/servicenow-xml-flow-mcp.js +0 -1704
- package/dist/mcp/singleton-check.js +0 -31
- package/dist/mcp/test-simple-mcp.d.ts +0 -6
- package/dist/mcp/test-simple-mcp.js +0 -63
- package/dist/memory/hierarchical-memory-system.d.ts +0 -90
- package/dist/memory/hierarchical-memory-system.js +0 -400
- package/dist/memory/index.d.ts +0 -9
- package/dist/memory/index.js +0 -20
- package/dist/memory/mcp-integration-example.d.ts +0 -6
- package/dist/memory/mcp-integration-example.js +0 -281
- package/dist/memory/memory-client.d.ts +0 -199
- package/dist/memory/memory-client.js +0 -364
- package/dist/memory/memory-manager.d.ts +0 -29
- package/dist/memory/memory-manager.js +0 -280
- package/dist/memory/memory-operations.d.ts +0 -179
- package/dist/memory/memory-operations.js +0 -691
- package/dist/memory/memory-system.d.ts +0 -153
- package/dist/memory/memory-system.js +0 -651
- package/dist/memory/memory-test.d.ts +0 -6
- package/dist/memory/memory-test.js +0 -161
- package/dist/memory/snow-flow-memory-patterns.d.ts +0 -213
- package/dist/memory/snow-flow-memory-patterns.js +0 -200
- package/dist/memory/snow-memory.d.ts +0 -54
- package/dist/memory/snow-memory.js +0 -301
- package/dist/memory/swarm-memory.d.ts +0 -135
- package/dist/memory/swarm-memory.js +0 -378
- package/dist/optimization/flow-performance-optimizer.js +0 -723
- package/dist/orchestration/discovery/service-discovery.d.ts +0 -81
- package/dist/orchestration/discovery/service-discovery.js +0 -808
- package/dist/orchestration/distributed-orchestrator.d.ts +0 -131
- package/dist/orchestration/distributed-orchestrator.js +0 -712
- package/dist/orchestration/distribution/task-distribution-engine.d.ts +0 -53
- package/dist/orchestration/distribution/task-distribution-engine.js +0 -586
- package/dist/orchestration/flow-update-orchestrator.js +0 -648
- package/dist/orchestration/interfaces/distributed-orchestration.interface.d.ts +0 -606
- package/dist/orchestration/interfaces/distributed-orchestration.interface.js +0 -65
- package/dist/orchestration/protocols/mcpx-protocol.d.ts +0 -71
- package/dist/orchestration/protocols/mcpx-protocol.js +0 -668
- package/dist/orchestration/state/distributed-state-manager.d.ts +0 -89
- package/dist/orchestration/state/distributed-state-manager.js +0 -716
- package/dist/orchestrator/flow-composer.d.ts +0 -105
- package/dist/orchestrator/flow-composer.js +0 -404
- package/dist/orchestrator/flow-pattern-templates.d.ts +0 -260
- package/dist/orchestrator/flow-pattern-templates.js +0 -908
- package/dist/orchestrator/flow-subflow-decision-engine.d.ts +0 -202
- package/dist/orchestrator/flow-subflow-decision-engine.js +0 -769
- package/dist/orchestrator/flow-validation-engine.d.ts +0 -169
- package/dist/orchestrator/flow-validation-engine.js +0 -913
- package/dist/orchestrator/snow-orchestrator.d.ts +0 -49
- package/dist/orchestrator/snow-orchestrator.js +0 -235
- package/dist/orchestrator/subflow-creation-handler.d.ts +0 -230
- package/dist/orchestrator/subflow-creation-handler.js +0 -791
- package/dist/patterns/adaptive-patterns.d.ts +0 -140
- package/dist/patterns/adaptive-patterns.js +0 -549
- package/dist/queen/advanced-integration-test.d.ts +0 -48
- package/dist/queen/advanced-integration-test.js +0 -473
- package/dist/queen/integration-example.d.ts +0 -82
- package/dist/queen/integration-example.js +0 -219
- package/dist/queen/integration-test.d.ts +0 -72
- package/dist/queen/integration-test.js +0 -563
- package/dist/queen/mock-mcp-client.d.ts +0 -71
- package/dist/queen/mock-mcp-client.js +0 -317
- package/dist/queen/run-integration-tests.d.ts +0 -9
- package/dist/queen/run-integration-tests.js +0 -27
- package/dist/sparc/coordinators/adaptive-coordinator.d.ts +0 -54
- package/dist/sparc/coordinators/adaptive-coordinator.js +0 -367
- package/dist/sparc/coordinators/team-coordinator.d.ts +0 -66
- package/dist/sparc/coordinators/team-coordinator.js +0 -402
- package/dist/sparc/modes/team-modes.d.ts +0 -33
- package/dist/sparc/modes/team-modes.js +0 -399
- package/dist/sparc/teams/application-team.d.ts +0 -73
- package/dist/sparc/teams/application-team.js +0 -463
- package/dist/sparc/teams/flow-team.d.ts +0 -67
- package/dist/sparc/teams/flow-team.js +0 -373
- package/dist/sparc/teams/widget-team.d.ts +0 -61
- package/dist/sparc/teams/widget-team.js +0 -280
- package/dist/specialists/app-specialists.d.ts +0 -93
- package/dist/specialists/app-specialists.js +0 -1639
- package/dist/specialists/base-specialist.d.ts +0 -19
- package/dist/specialists/base-specialist.js +0 -54
- package/dist/specialists/flow-specialists.d.ts +0 -113
- package/dist/specialists/flow-specialists.js +0 -1787
- package/dist/specialists/individual-specialists.d.ts +0 -67
- package/dist/specialists/individual-specialists.js +0 -632
- package/dist/specialists/widget-specialists.d.ts +0 -70
- package/dist/specialists/widget-specialists.js +0 -1264
- package/dist/src/utils/agent-detector.js +0 -655
- package/dist/teams/adaptive-team.d.ts +0 -81
- package/dist/teams/adaptive-team.js +0 -1153
- package/dist/teams/application-team.d.ts +0 -30
- package/dist/teams/application-team.js +0 -547
- package/dist/teams/base-team.d.ts +0 -55
- package/dist/teams/base-team.js +0 -243
- package/dist/teams/flow-team.d.ts +0 -28
- package/dist/teams/flow-team.js +0 -525
- package/dist/teams/widget-team.d.ts +0 -26
- package/dist/teams/widget-team.js +0 -459
- package/dist/templates/flow-template-system.js +0 -625
- package/dist/test-fetch-incidents.d.ts +0 -2
- package/dist/test-fetch-incidents.js +0 -84
- package/dist/test-incident-access.d.ts +0 -2
- package/dist/test-incident-access.js +0 -72
- package/dist/test-iphone-flow.js +0 -189
- package/dist/test-limit-problem.d.ts +0 -2
- package/dist/test-limit-problem.js +0 -60
- package/dist/test-ml-batch-fix.d.ts +0 -2
- package/dist/test-ml-batch-fix.js +0 -104
- package/dist/test-ml-batch.d.ts +0 -2
- package/dist/test-ml-batch.js +0 -87
- package/dist/test-ml-query.d.ts +0 -2
- package/dist/test-ml-query.js +0 -100
- package/dist/test-ml-training-fix.d.ts +0 -12
- package/dist/test-ml-training-fix.js +0 -113
- package/dist/test-ml-training.d.ts +0 -2
- package/dist/test-ml-training.js +0 -32
- package/dist/test-operations-query.d.ts +0 -2
- package/dist/test-operations-query.js +0 -84
- package/dist/test-performance-query.d.ts +0 -2
- package/dist/test-performance-query.js +0 -52
- package/dist/test-singleton-protection.d.ts +0 -8
- package/dist/test-singleton-protection.js +0 -110
- package/dist/test-smart-limits.d.ts +0 -13
- package/dist/test-smart-limits.js +0 -100
- package/dist/test-snow-query-incidents.d.ts +0 -2
- package/dist/test-snow-query-incidents.js +0 -66
- package/dist/test-universal-query.d.ts +0 -2
- package/dist/test-universal-query.js +0 -106
- package/dist/testing/flow-testing-automation.js +0 -641
- package/dist/utils/complete-flow-xml-generator.js +0 -1285
- package/dist/utils/file-storage-fallback.d.ts +0 -62
- package/dist/utils/file-storage-fallback.js +0 -289
- package/dist/utils/flow-api-discovery.d.ts +0 -151
- package/dist/utils/flow-api-discovery.js +0 -439
- package/dist/utils/flow-examples.js +0 -720
- package/dist/utils/flow-structure-builder.js +0 -677
- package/dist/utils/flow-xml-generator.d.ts +0 -41
- package/dist/utils/flow-xml-generator.js +0 -258
- package/dist/utils/improved-flow-xml-generator.js +0 -820
- package/dist/utils/mcp-process-manager.backup.d.ts +0 -58
- package/dist/utils/mcp-process-manager.backup.js +0 -220
- package/dist/utils/mcp-singleton-enforcer.d.ts +0 -36
- package/dist/utils/mcp-singleton-enforcer.js +0 -201
- package/dist/utils/mcp-timeout-fix.d.ts +0 -53
- package/dist/utils/mcp-timeout-fix.js +0 -221
- package/dist/utils/migrate-claude-flow.d.ts +0 -22
- package/dist/utils/migrate-claude-flow.js +0 -120
- package/dist/utils/scope-utils.d.ts +0 -72
- package/dist/utils/scope-utils.js +0 -386
- package/dist/utils/snow-oauth-old.d.ts +0 -65
- package/dist/utils/snow-oauth-old.js +0 -345
- package/dist/utils/xml-first-flow-generator.js +0 -513
- package/memory/servicenow_artifacts/000d9224c895221055906c7518aa2d3d.json +0 -30
- package/memory/servicenow_artifacts/0196b66173303010e46b4a2214f6a7a2.json +0 -36
- package/memory/servicenow_artifacts/125e5d1d837e2a102a7ea130ceaad397.json +0 -30
- package/memory/servicenow_artifacts/7637c1f2b7112210a5e5911cde11a972.json +0 -30
- package/memory/servicenow_artifacts/default_documentation_tables_1754056582292.json +0 -55
- package/memory/servicenow_artifacts/default_documentation_tables_1754057477189.json +0 -55
- package/memory/update-set-sessions/01f82af583faea102a7ea130ceaad3d4.json +0 -9
- package/memory/update-set-sessions/27718fb983faea102a7ea130ceaad34b.json +0 -9
- package/memory/update-set-sessions/412e9bf6833e22502a7ea130ceaad30a.json +0 -8
- package/memory/update-set-sessions/66fc5a79837aea102a7ea130ceaad3ab.json +0 -9
- package/memory/update-set-sessions/71a30ff5837eea102a7ea130ceaad37f.json +0 -9
- package/memory/update-set-sessions/74fba27983faea102a7ea130ceaad3bd.json +0 -9
- package/memory/update-set-sessions/a0b147b5837eea102a7ea130ceaad344.json +0 -58
- package/memory/update-set-sessions/b13f5eb983baea102a7ea130ceaad33e.json +0 -9
- package/reports/swarm-auto-centralized-1752649029776.json +0 -13
- package/src/memory/README.md +0 -240
|
@@ -1,345 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
"use strict";
|
|
3
|
-
/**
|
|
4
|
-
* ServiceNow OAuth Authentication Utility
|
|
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
|
-
class ServiceNowOAuth {
|
|
18
|
-
constructor() {
|
|
19
|
-
this.credentials = null;
|
|
20
|
-
this.credentialsFile = (0, path_1.join)(process.cwd(), '.snow-credentials.json');
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Initialize OAuth flow - opens browser and handles callback
|
|
24
|
-
*/
|
|
25
|
-
async authenticate(instance, clientId, clientSecret) {
|
|
26
|
-
try {
|
|
27
|
-
const redirectUri = 'http://localhost:3000/callback';
|
|
28
|
-
// Store credentials temporarily
|
|
29
|
-
this.credentials = {
|
|
30
|
-
instance,
|
|
31
|
-
clientId,
|
|
32
|
-
clientSecret,
|
|
33
|
-
redirectUri
|
|
34
|
-
};
|
|
35
|
-
console.log('🚀 Starting ServiceNow OAuth flow...');
|
|
36
|
-
console.log(`📋 Instance: ${instance}`);
|
|
37
|
-
console.log(`🔐 Client ID: ${clientId}`);
|
|
38
|
-
console.log(`🔗 Redirect URI: ${redirectUri}`);
|
|
39
|
-
// Generate authorization URL
|
|
40
|
-
const authUrl = this.generateAuthUrl(instance, clientId, redirectUri);
|
|
41
|
-
console.log('\n🌐 Authorization URL generated:');
|
|
42
|
-
console.log(`${authUrl}\n`);
|
|
43
|
-
// Start local server to handle callback
|
|
44
|
-
const authResult = await this.startCallbackServer(redirectUri);
|
|
45
|
-
if (authResult.success && authResult.credentials) {
|
|
46
|
-
// Save credentials
|
|
47
|
-
await this.saveCredentials(authResult.credentials);
|
|
48
|
-
console.log('✅ OAuth authentication successful!');
|
|
49
|
-
console.log('💾 Credentials saved to .snow-credentials.json');
|
|
50
|
-
return authResult;
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
console.error('❌ OAuth authentication failed:', authResult.error);
|
|
54
|
-
return authResult;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
catch (error) {
|
|
58
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
59
|
-
console.error('❌ OAuth error:', errorMessage);
|
|
60
|
-
return {
|
|
61
|
-
success: false,
|
|
62
|
-
error: errorMessage
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Generate ServiceNow OAuth authorization URL
|
|
68
|
-
*/
|
|
69
|
-
generateAuthUrl(instance, clientId, redirectUri) {
|
|
70
|
-
const baseUrl = `https://${instance}/oauth_auth.do`;
|
|
71
|
-
const params = new URLSearchParams({
|
|
72
|
-
response_type: 'code',
|
|
73
|
-
client_id: clientId,
|
|
74
|
-
redirect_uri: redirectUri,
|
|
75
|
-
scope: 'useraccount'
|
|
76
|
-
});
|
|
77
|
-
return `${baseUrl}?${params.toString()}`;
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Start local HTTP server to handle OAuth callback
|
|
81
|
-
*/
|
|
82
|
-
async startCallbackServer(redirectUri) {
|
|
83
|
-
return new Promise((resolve) => {
|
|
84
|
-
const server = (0, http_1.createServer)(async (req, res) => {
|
|
85
|
-
try {
|
|
86
|
-
const url = new url_1.URL(req.url, `http://localhost:3000`);
|
|
87
|
-
if (url.pathname === '/callback') {
|
|
88
|
-
const code = url.searchParams.get('code');
|
|
89
|
-
const error = url.searchParams.get('error');
|
|
90
|
-
if (error) {
|
|
91
|
-
res.writeHead(400, { 'Content-Type': 'text/html' });
|
|
92
|
-
res.end(`
|
|
93
|
-
<html>
|
|
94
|
-
<body>
|
|
95
|
-
<h1>❌ OAuth Error</h1>
|
|
96
|
-
<p>Error: ${error}</p>
|
|
97
|
-
<p>You can close this window.</p>
|
|
98
|
-
</body>
|
|
99
|
-
</html>
|
|
100
|
-
`);
|
|
101
|
-
server.close();
|
|
102
|
-
resolve({
|
|
103
|
-
success: false,
|
|
104
|
-
error: `OAuth error: ${error}`
|
|
105
|
-
});
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
if (!code) {
|
|
109
|
-
res.writeHead(400, { 'Content-Type': 'text/html' });
|
|
110
|
-
res.end(`
|
|
111
|
-
<html>
|
|
112
|
-
<body>
|
|
113
|
-
<h1>❌ Missing Authorization Code</h1>
|
|
114
|
-
<p>No authorization code received.</p>
|
|
115
|
-
<p>You can close this window.</p>
|
|
116
|
-
</body>
|
|
117
|
-
</html>
|
|
118
|
-
`);
|
|
119
|
-
server.close();
|
|
120
|
-
resolve({
|
|
121
|
-
success: false,
|
|
122
|
-
error: 'No authorization code received'
|
|
123
|
-
});
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
// Exchange code for tokens
|
|
127
|
-
console.log('🔄 Exchanging authorization code for tokens...');
|
|
128
|
-
const tokenResult = await this.exchangeCodeForTokens(code);
|
|
129
|
-
if (tokenResult.success) {
|
|
130
|
-
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
131
|
-
res.end(`
|
|
132
|
-
<html>
|
|
133
|
-
<body>
|
|
134
|
-
<h1>✅ Authentication Successful!</h1>
|
|
135
|
-
<p>You can now close this window and return to the terminal.</p>
|
|
136
|
-
<p>Snow-Flow is now connected to ServiceNow!</p>
|
|
137
|
-
</body>
|
|
138
|
-
</html>
|
|
139
|
-
`);
|
|
140
|
-
server.close();
|
|
141
|
-
resolve(tokenResult);
|
|
142
|
-
}
|
|
143
|
-
else {
|
|
144
|
-
res.writeHead(500, { 'Content-Type': 'text/html' });
|
|
145
|
-
res.end(`
|
|
146
|
-
<html>
|
|
147
|
-
<body>
|
|
148
|
-
<h1>❌ Token Exchange Failed</h1>
|
|
149
|
-
<p>Error: ${tokenResult.error}</p>
|
|
150
|
-
<p>You can close this window.</p>
|
|
151
|
-
</body>
|
|
152
|
-
</html>
|
|
153
|
-
`);
|
|
154
|
-
server.close();
|
|
155
|
-
resolve(tokenResult);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
else {
|
|
159
|
-
res.writeHead(404, { 'Content-Type': 'text/plain' });
|
|
160
|
-
res.end('Not Found');
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
catch (error) {
|
|
164
|
-
console.error('Callback server error:', error);
|
|
165
|
-
res.writeHead(500, { 'Content-Type': 'text/plain' });
|
|
166
|
-
res.end('Internal Server Error');
|
|
167
|
-
server.close();
|
|
168
|
-
resolve({
|
|
169
|
-
success: false,
|
|
170
|
-
error: error instanceof Error ? error.message : String(error)
|
|
171
|
-
});
|
|
172
|
-
}
|
|
173
|
-
});
|
|
174
|
-
server.listen(3000, () => {
|
|
175
|
-
console.log('🌐 OAuth callback server started on http://localhost:3000');
|
|
176
|
-
console.log('🚀 Please open the authorization URL in your browser...');
|
|
177
|
-
console.log('⏳ Waiting for OAuth callback...');
|
|
178
|
-
// Auto-open browser if possible
|
|
179
|
-
try {
|
|
180
|
-
const { spawn } = require('child_process');
|
|
181
|
-
const authUrl = this.generateAuthUrl(this.credentials.instance, this.credentials.clientId, this.credentials.redirectUri);
|
|
182
|
-
// Try to open browser on macOS
|
|
183
|
-
spawn('open', [authUrl], { stdio: 'ignore' });
|
|
184
|
-
}
|
|
185
|
-
catch (error) {
|
|
186
|
-
console.log('💡 Please manually open the URL above in your browser');
|
|
187
|
-
}
|
|
188
|
-
});
|
|
189
|
-
// Timeout after 5 minutes
|
|
190
|
-
setTimeout(() => {
|
|
191
|
-
server.close();
|
|
192
|
-
resolve({
|
|
193
|
-
success: false,
|
|
194
|
-
error: 'OAuth timeout - no response received within 5 minutes'
|
|
195
|
-
});
|
|
196
|
-
}, 300000);
|
|
197
|
-
});
|
|
198
|
-
}
|
|
199
|
-
/**
|
|
200
|
-
* Exchange authorization code for access tokens
|
|
201
|
-
*/
|
|
202
|
-
async exchangeCodeForTokens(code) {
|
|
203
|
-
try {
|
|
204
|
-
if (!this.credentials) {
|
|
205
|
-
throw new Error('No credentials available');
|
|
206
|
-
}
|
|
207
|
-
const tokenUrl = `https://${this.credentials.instance}/oauth_token.do`;
|
|
208
|
-
const tokenData = {
|
|
209
|
-
grant_type: 'authorization_code',
|
|
210
|
-
client_id: this.credentials.clientId,
|
|
211
|
-
client_secret: this.credentials.clientSecret,
|
|
212
|
-
code: code,
|
|
213
|
-
redirect_uri: this.credentials.redirectUri
|
|
214
|
-
};
|
|
215
|
-
console.log('🔄 Making token request to ServiceNow...');
|
|
216
|
-
const response = await axios_1.default.post(tokenUrl, tokenData, {
|
|
217
|
-
headers: {
|
|
218
|
-
'Content-Type': 'application/x-www-form-urlencoded',
|
|
219
|
-
'Accept': 'application/json'
|
|
220
|
-
}
|
|
221
|
-
});
|
|
222
|
-
const tokenResponse = response.data;
|
|
223
|
-
console.log('✅ Token response received');
|
|
224
|
-
if (!tokenResponse.access_token) {
|
|
225
|
-
throw new Error('No access token in response');
|
|
226
|
-
}
|
|
227
|
-
// Update credentials with tokens
|
|
228
|
-
const updatedCredentials = {
|
|
229
|
-
...this.credentials,
|
|
230
|
-
accessToken: tokenResponse.access_token,
|
|
231
|
-
refreshToken: tokenResponse.refresh_token,
|
|
232
|
-
expiresAt: Date.now() + (tokenResponse.expires_in * 1000)
|
|
233
|
-
};
|
|
234
|
-
this.credentials = updatedCredentials;
|
|
235
|
-
return {
|
|
236
|
-
success: true,
|
|
237
|
-
credentials: updatedCredentials
|
|
238
|
-
};
|
|
239
|
-
}
|
|
240
|
-
catch (error) {
|
|
241
|
-
console.error('Token exchange error:', error);
|
|
242
|
-
return {
|
|
243
|
-
success: false,
|
|
244
|
-
error: error instanceof Error ? error.message : String(error)
|
|
245
|
-
};
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
/**
|
|
249
|
-
* Save credentials to file
|
|
250
|
-
*/
|
|
251
|
-
async saveCredentials(credentials) {
|
|
252
|
-
await fs_1.promises.writeFile(this.credentialsFile, JSON.stringify(credentials, null, 2));
|
|
253
|
-
}
|
|
254
|
-
/**
|
|
255
|
-
* Load credentials from file
|
|
256
|
-
*/
|
|
257
|
-
async loadCredentials() {
|
|
258
|
-
try {
|
|
259
|
-
const data = await fs_1.promises.readFile(this.credentialsFile, 'utf8');
|
|
260
|
-
this.credentials = JSON.parse(data);
|
|
261
|
-
return this.credentials;
|
|
262
|
-
}
|
|
263
|
-
catch (error) {
|
|
264
|
-
return null;
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* Check if credentials are valid and not expired
|
|
269
|
-
*/
|
|
270
|
-
async isAuthenticated() {
|
|
271
|
-
const credentials = await this.loadCredentials();
|
|
272
|
-
if (!credentials || !credentials.accessToken) {
|
|
273
|
-
return false;
|
|
274
|
-
}
|
|
275
|
-
// Check if token is expired
|
|
276
|
-
if (credentials.expiresAt && credentials.expiresAt < Date.now()) {
|
|
277
|
-
// Try to refresh token
|
|
278
|
-
return await this.refreshAccessToken();
|
|
279
|
-
}
|
|
280
|
-
return true;
|
|
281
|
-
}
|
|
282
|
-
/**
|
|
283
|
-
* Refresh access token using refresh token
|
|
284
|
-
*/
|
|
285
|
-
async refreshAccessToken() {
|
|
286
|
-
try {
|
|
287
|
-
if (!this.credentials || !this.credentials.refreshToken) {
|
|
288
|
-
return false;
|
|
289
|
-
}
|
|
290
|
-
const tokenUrl = `https://${this.credentials.instance}/oauth_token.do`;
|
|
291
|
-
const tokenData = {
|
|
292
|
-
grant_type: 'refresh_token',
|
|
293
|
-
client_id: this.credentials.clientId,
|
|
294
|
-
client_secret: this.credentials.clientSecret,
|
|
295
|
-
refresh_token: this.credentials.refreshToken
|
|
296
|
-
};
|
|
297
|
-
const response = await axios_1.default.post(tokenUrl, tokenData, {
|
|
298
|
-
headers: {
|
|
299
|
-
'Content-Type': 'application/x-www-form-urlencoded',
|
|
300
|
-
'Accept': 'application/json'
|
|
301
|
-
}
|
|
302
|
-
});
|
|
303
|
-
const tokenResponse = response.data;
|
|
304
|
-
if (!tokenResponse.access_token) {
|
|
305
|
-
return false;
|
|
306
|
-
}
|
|
307
|
-
// Update credentials with new tokens
|
|
308
|
-
this.credentials = {
|
|
309
|
-
...this.credentials,
|
|
310
|
-
accessToken: tokenResponse.access_token,
|
|
311
|
-
refreshToken: tokenResponse.refresh_token || this.credentials.refreshToken,
|
|
312
|
-
expiresAt: Date.now() + (tokenResponse.expires_in * 1000)
|
|
313
|
-
};
|
|
314
|
-
await this.saveCredentials(this.credentials);
|
|
315
|
-
console.log('✅ Access token refreshed successfully');
|
|
316
|
-
return true;
|
|
317
|
-
}
|
|
318
|
-
catch (error) {
|
|
319
|
-
console.error('Token refresh error:', error);
|
|
320
|
-
return false;
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
/**
|
|
324
|
-
* Get current credentials
|
|
325
|
-
*/
|
|
326
|
-
getCredentials() {
|
|
327
|
-
return this.credentials;
|
|
328
|
-
}
|
|
329
|
-
/**
|
|
330
|
-
* Clear stored credentials
|
|
331
|
-
*/
|
|
332
|
-
async logout() {
|
|
333
|
-
try {
|
|
334
|
-
await fs_1.promises.unlink(this.credentialsFile);
|
|
335
|
-
this.credentials = null;
|
|
336
|
-
console.log('✅ Logged out successfully');
|
|
337
|
-
}
|
|
338
|
-
catch (error) {
|
|
339
|
-
// File might not exist, that's OK
|
|
340
|
-
console.log('✅ Logged out successfully');
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
exports.ServiceNowOAuth = ServiceNowOAuth;
|
|
345
|
-
//# sourceMappingURL=snow-oauth-old.js.map
|