@agent-deck/backend 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 (166) hide show
  1. package/dist/.tsbuildinfo +1 -0
  2. package/dist/cli-runtime.d.ts +4 -0
  3. package/dist/cli-runtime.d.ts.map +1 -0
  4. package/dist/cli-runtime.js +12 -0
  5. package/dist/cli-runtime.js.map +1 -0
  6. package/dist/index.d.ts +2 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +30 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/lib/agent-deck-context.d.ts +8 -0
  11. package/dist/lib/agent-deck-context.d.ts.map +1 -0
  12. package/dist/lib/agent-deck-context.js +48 -0
  13. package/dist/lib/agent-deck-context.js.map +1 -0
  14. package/dist/lib/bound-deck-scope.d.ts +15 -0
  15. package/dist/lib/bound-deck-scope.d.ts.map +1 -0
  16. package/dist/lib/bound-deck-scope.js +68 -0
  17. package/dist/lib/bound-deck-scope.js.map +1 -0
  18. package/dist/lib/client-scope.d.ts +14 -0
  19. package/dist/lib/client-scope.d.ts.map +1 -0
  20. package/dist/lib/client-scope.js +46 -0
  21. package/dist/lib/client-scope.js.map +1 -0
  22. package/dist/lib/paths.d.ts +2 -0
  23. package/dist/lib/paths.d.ts.map +1 -0
  24. package/dist/lib/paths.js +24 -0
  25. package/dist/lib/paths.js.map +1 -0
  26. package/dist/lib/version.d.ts +3 -0
  27. package/dist/lib/version.d.ts.map +1 -0
  28. package/dist/lib/version.js +20 -0
  29. package/dist/lib/version.js.map +1 -0
  30. package/dist/mcp-index.d.ts +2 -0
  31. package/dist/mcp-index.d.ts.map +1 -0
  32. package/dist/mcp-index.js +32 -0
  33. package/dist/mcp-index.js.map +1 -0
  34. package/dist/mcp-server.d.ts +25 -0
  35. package/dist/mcp-server.d.ts.map +1 -0
  36. package/dist/mcp-server.js +1121 -0
  37. package/dist/mcp-server.js.map +1 -0
  38. package/dist/mcp-stdio.d.ts +2 -0
  39. package/dist/mcp-stdio.d.ts.map +1 -0
  40. package/dist/mcp-stdio.js.map +1 -0
  41. package/dist/models/database.d.ts +64 -0
  42. package/dist/models/database.d.ts.map +1 -0
  43. package/dist/models/database.js +965 -0
  44. package/dist/models/database.js.map +1 -0
  45. package/dist/playbooks/playbook-manager.d.ts +29 -0
  46. package/dist/playbooks/playbook-manager.d.ts.map +1 -0
  47. package/dist/playbooks/playbook-manager.js +198 -0
  48. package/dist/playbooks/playbook-manager.js.map +1 -0
  49. package/dist/playbooks/playbook-parser.d.ts +8 -0
  50. package/dist/playbooks/playbook-parser.d.ts.map +1 -0
  51. package/dist/playbooks/playbook-parser.js +76 -0
  52. package/dist/playbooks/playbook-parser.js.map +1 -0
  53. package/dist/playbooks/playbook-service.d.ts +9 -0
  54. package/dist/playbooks/playbook-service.d.ts.map +1 -0
  55. package/dist/playbooks/playbook-service.js +107 -0
  56. package/dist/playbooks/playbook-service.js.map +1 -0
  57. package/dist/routes/collection.d.ts +3 -0
  58. package/dist/routes/collection.d.ts.map +1 -0
  59. package/dist/routes/collection.js +34 -0
  60. package/dist/routes/collection.js.map +1 -0
  61. package/dist/routes/credentials.d.ts +3 -0
  62. package/dist/routes/credentials.d.ts.map +1 -0
  63. package/dist/routes/credentials.js +241 -0
  64. package/dist/routes/credentials.js.map +1 -0
  65. package/dist/routes/decks.d.ts +3 -0
  66. package/dist/routes/decks.d.ts.map +1 -0
  67. package/dist/routes/decks.js +430 -0
  68. package/dist/routes/decks.js.map +1 -0
  69. package/dist/routes/local-mcp.d.ts +3 -0
  70. package/dist/routes/local-mcp.d.ts.map +1 -0
  71. package/dist/routes/local-mcp.js +189 -0
  72. package/dist/routes/local-mcp.js.map +1 -0
  73. package/dist/routes/mcp.d.ts +3 -0
  74. package/dist/routes/mcp.d.ts.map +1 -0
  75. package/dist/routes/mcp.js +170 -0
  76. package/dist/routes/mcp.js.map +1 -0
  77. package/dist/routes/oauth.d.ts +3 -0
  78. package/dist/routes/oauth.d.ts.map +1 -0
  79. package/dist/routes/oauth.js +242 -0
  80. package/dist/routes/oauth.js.map +1 -0
  81. package/dist/routes/playbooks.d.ts +5 -0
  82. package/dist/routes/playbooks.d.ts.map +1 -0
  83. package/dist/routes/playbooks.js +220 -0
  84. package/dist/routes/playbooks.js.map +1 -0
  85. package/dist/routes/scope.d.ts +3 -0
  86. package/dist/routes/scope.d.ts.map +1 -0
  87. package/dist/routes/scope.js +107 -0
  88. package/dist/routes/scope.js.map +1 -0
  89. package/dist/routes/services.d.ts +3 -0
  90. package/dist/routes/services.d.ts.map +1 -0
  91. package/dist/routes/services.js +281 -0
  92. package/dist/routes/services.js.map +1 -0
  93. package/dist/routes/websocket.d.ts +11 -0
  94. package/dist/routes/websocket.d.ts.map +1 -0
  95. package/dist/routes/websocket.js +154 -0
  96. package/dist/routes/websocket.js.map +1 -0
  97. package/dist/scope/repo-deck.d.ts +10 -0
  98. package/dist/scope/repo-deck.d.ts.map +1 -0
  99. package/dist/scope/repo-deck.js +63 -0
  100. package/dist/scope/repo-deck.js.map +1 -0
  101. package/dist/server/index.d.ts +24 -0
  102. package/dist/server/index.d.ts.map +1 -0
  103. package/dist/server/index.js +111 -0
  104. package/dist/server/index.js.map +1 -0
  105. package/dist/services/collection-warning-service.d.ts +18 -0
  106. package/dist/services/collection-warning-service.d.ts.map +1 -0
  107. package/dist/services/collection-warning-service.js +129 -0
  108. package/dist/services/collection-warning-service.js.map +1 -0
  109. package/dist/services/config-manager.d.ts +32 -0
  110. package/dist/services/config-manager.d.ts.map +1 -0
  111. package/dist/services/config-manager.js +119 -0
  112. package/dist/services/config-manager.js.map +1 -0
  113. package/dist/services/icon-resolver.d.ts +20 -0
  114. package/dist/services/icon-resolver.d.ts.map +1 -0
  115. package/dist/services/icon-resolver.js +224 -0
  116. package/dist/services/icon-resolver.js.map +1 -0
  117. package/dist/services/local-mcp-server-manager.d.ts +51 -0
  118. package/dist/services/local-mcp-server-manager.d.ts.map +1 -0
  119. package/dist/services/local-mcp-server-manager.js +246 -0
  120. package/dist/services/local-mcp-server-manager.js.map +1 -0
  121. package/dist/services/mcp-client-manager.d.ts +22 -0
  122. package/dist/services/mcp-client-manager.d.ts.map +1 -0
  123. package/dist/services/mcp-client-manager.js +257 -0
  124. package/dist/services/mcp-client-manager.js.map +1 -0
  125. package/dist/services/mcp-discovery-service.d.ts +31 -0
  126. package/dist/services/mcp-discovery-service.d.ts.map +1 -0
  127. package/dist/services/mcp-discovery-service.js +164 -0
  128. package/dist/services/mcp-discovery-service.js.map +1 -0
  129. package/dist/services/oauth-manager.d.ts +25 -0
  130. package/dist/services/oauth-manager.d.ts.map +1 -0
  131. package/dist/services/oauth-manager.js +365 -0
  132. package/dist/services/oauth-manager.js.map +1 -0
  133. package/dist/services/service-manager.d.ts +61 -0
  134. package/dist/services/service-manager.d.ts.map +1 -0
  135. package/dist/services/service-manager.js +447 -0
  136. package/dist/services/service-manager.js.map +1 -0
  137. package/dist/test-local-mcp-e2e.d.ts +3 -0
  138. package/dist/test-local-mcp-e2e.d.ts.map +1 -0
  139. package/dist/test-local-mcp-e2e.js +104 -0
  140. package/dist/test-local-mcp-e2e.js.map +1 -0
  141. package/dist/test-local-mcp.d.ts +3 -0
  142. package/dist/test-local-mcp.d.ts.map +1 -0
  143. package/dist/test-local-mcp.js +54 -0
  144. package/dist/test-local-mcp.js.map +1 -0
  145. package/dist/vault/credential-manager.d.ts +45 -0
  146. package/dist/vault/credential-manager.d.ts.map +1 -0
  147. package/dist/vault/credential-manager.js +237 -0
  148. package/dist/vault/credential-manager.js.map +1 -0
  149. package/dist/vault/index.d.ts +4 -0
  150. package/dist/vault/index.d.ts.map +1 -0
  151. package/dist/vault/index.js +20 -0
  152. package/dist/vault/index.js.map +1 -0
  153. package/dist/vault/secret-store.d.ts +36 -0
  154. package/dist/vault/secret-store.d.ts.map +1 -0
  155. package/dist/vault/secret-store.js +207 -0
  156. package/dist/vault/secret-store.js.map +1 -0
  157. package/dist/vault/yaml-sync.d.ts +8 -0
  158. package/dist/vault/yaml-sync.d.ts.map +1 -0
  159. package/dist/vault/yaml-sync.js +60 -0
  160. package/dist/vault/yaml-sync.js.map +1 -0
  161. package/package.json +64 -0
  162. package/static-ui/assets/AgentDeckLogo2-z3pVqJJ3.png +0 -0
  163. package/static-ui/assets/index-BnA3AsqY.css +1 -0
  164. package/static-ui/assets/index-D1IuraRt.js +334 -0
  165. package/static-ui/favicon.png +0 -0
  166. package/static-ui/index.html +17 -0
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MCPDiscoveryService = void 0;
4
+ class MCPDiscoveryService {
5
+ async discoverService(url) {
6
+ const result = {
7
+ success: false,
8
+ transport_type: 'http',
9
+ url,
10
+ tools_count: 0,
11
+ tools: [],
12
+ capabilities: {
13
+ supports_tool_discovery: false,
14
+ supports_tool_calling: false,
15
+ },
16
+ oauth: {
17
+ required: false,
18
+ },
19
+ health: 'unknown',
20
+ error: null,
21
+ };
22
+ try {
23
+ // First, check for OAuth requirements
24
+ const oauthInfo = await this.detectOAuthRequirements(url);
25
+ result.oauth = oauthInfo;
26
+ if (oauthInfo.required) {
27
+ // Service requires OAuth, mark as successful discovery
28
+ result.success = true;
29
+ result.health = 'oauth_required';
30
+ return result;
31
+ }
32
+ // Try basic MCP discovery without OAuth
33
+ const basicResult = await this.tryBasicDiscovery(url);
34
+ return basicResult;
35
+ }
36
+ catch (error) {
37
+ result.error = error instanceof Error ? error.message : 'Unknown error';
38
+ return result;
39
+ }
40
+ }
41
+ async tryBasicDiscovery(url) {
42
+ const result = {
43
+ success: false,
44
+ transport_type: 'http',
45
+ url,
46
+ tools_count: 0,
47
+ tools: [],
48
+ capabilities: {
49
+ supports_tool_discovery: false,
50
+ supports_tool_calling: false,
51
+ },
52
+ oauth: {
53
+ required: false,
54
+ },
55
+ health: 'unknown',
56
+ error: null,
57
+ };
58
+ try {
59
+ // Try a simple HTTP request to check if the service is reachable
60
+ const response = await fetch(url, {
61
+ method: 'GET',
62
+ headers: {
63
+ 'Accept': 'application/json, text/event-stream',
64
+ },
65
+ });
66
+ if (response.ok) {
67
+ result.success = true;
68
+ result.health = 'healthy';
69
+ result.capabilities.supports_tool_discovery = true;
70
+ result.capabilities.supports_tool_calling = true;
71
+ }
72
+ else {
73
+ result.error = `HTTP ${response.status}: ${response.statusText}`;
74
+ }
75
+ }
76
+ catch (error) {
77
+ result.error = error instanceof Error ? error.message : 'Connection failed';
78
+ }
79
+ return result;
80
+ }
81
+ async detectOAuthRequirements(url) {
82
+ const oauthInfo = {
83
+ required: false,
84
+ };
85
+ try {
86
+ // Check for OAuth metadata endpoints
87
+ const baseUrl = new URL(url);
88
+ // Try OAuth Protected Resource metadata (RFC 9449)
89
+ const prUrl = `${baseUrl.origin}/.well-known/oauth-protected-resource`;
90
+ try {
91
+ const response = await fetch(prUrl);
92
+ if (response.ok) {
93
+ const data = await response.json();
94
+ oauthInfo.required = true;
95
+ oauthInfo.resourceName = data.resource_name;
96
+ oauthInfo.scopesSupported = data.scopes_supported || [];
97
+ oauthInfo.bearerMethodsSupported = data.bearer_methods_supported || [];
98
+ // Check for authorization servers
99
+ const authServers = data.authorization_servers || [];
100
+ if (authServers.length > 0) {
101
+ const asUrl = authServers[0];
102
+ const asResponse = await fetch(`${asUrl}/.well-known/oauth-authorization-server`);
103
+ if (asResponse.ok) {
104
+ const asData = await asResponse.json();
105
+ oauthInfo.authorizationUrl = asData.authorization_endpoint;
106
+ oauthInfo.tokenUrl = asData.token_endpoint;
107
+ oauthInfo.issuer = asData.issuer;
108
+ }
109
+ }
110
+ return oauthInfo;
111
+ }
112
+ }
113
+ catch (error) {
114
+ // Ignore errors for this endpoint
115
+ }
116
+ // Try OAuth Authorization Server metadata
117
+ const asUrl = `${baseUrl.origin}/.well-known/oauth-authorization-server`;
118
+ try {
119
+ const response = await fetch(asUrl);
120
+ if (response.ok) {
121
+ const data = await response.json();
122
+ oauthInfo.required = true;
123
+ oauthInfo.authorizationUrl = data.authorization_endpoint;
124
+ oauthInfo.tokenUrl = data.token_endpoint;
125
+ oauthInfo.issuer = data.issuer;
126
+ oauthInfo.scopesSupported = data.scopes_supported || [];
127
+ return oauthInfo;
128
+ }
129
+ }
130
+ catch (error) {
131
+ // Ignore errors for this endpoint
132
+ }
133
+ // Check for WWW-Authenticate header
134
+ try {
135
+ const response = await fetch(url, {
136
+ method: 'GET',
137
+ headers: {
138
+ 'Accept': 'application/json, text/event-stream',
139
+ },
140
+ });
141
+ const wwwAuth = response.headers.get('www-authenticate');
142
+ if (wwwAuth && wwwAuth.toLowerCase().includes('oauth')) {
143
+ oauthInfo.required = true;
144
+ // Extract URLs from WWW-Authenticate header
145
+ const urlRegex = /https?:\/\/[^\s,;\"]+/g;
146
+ const urls = wwwAuth.match(urlRegex) || [];
147
+ if (urls.length > 0) {
148
+ oauthInfo.authorizationUrl = urls[0];
149
+ }
150
+ return oauthInfo;
151
+ }
152
+ }
153
+ catch (error) {
154
+ // Ignore errors for this check
155
+ }
156
+ }
157
+ catch (error) {
158
+ oauthInfo.error = error instanceof Error ? error.message : 'OAuth detection failed';
159
+ }
160
+ return oauthInfo;
161
+ }
162
+ }
163
+ exports.MCPDiscoveryService = MCPDiscoveryService;
164
+ //# sourceMappingURL=mcp-discovery-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-discovery-service.js","sourceRoot":"","sources":["../../src/services/mcp-discovery-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { OAuthDiscoveryResult, OAuthConfig, OAuthToken, OAuthFlowInput, OAuthCallbackInput, OAuthRefreshInput } from '@agent-deck/shared';
2
+ import { DatabaseManager } from '../models/database';
3
+ export declare class OAuthManager {
4
+ private db;
5
+ private oauthStates;
6
+ getOAuthState(state: string): string | undefined;
7
+ constructor(db: DatabaseManager);
8
+ discoverOAuth(serviceUrl: string): Promise<OAuthDiscoveryResult>;
9
+ initiateOAuthFlow(input: OAuthFlowInput): Promise<{
10
+ authorizationUrl: string;
11
+ state: string;
12
+ }>;
13
+ handleOAuthCallback(input: OAuthCallbackInput): Promise<OAuthToken>;
14
+ refreshOAuthToken(input: OAuthRefreshInput): Promise<OAuthToken>;
15
+ isTokenExpired(serviceId: string): Promise<boolean>;
16
+ getValidAccessToken(serviceId: string): Promise<string | null>;
17
+ autoRegisterOAuthApp(serviceUrl: string, config: OAuthConfig): Promise<{
18
+ success: boolean;
19
+ clientId?: string;
20
+ clientSecret?: string;
21
+ error?: string;
22
+ registrationUrl?: string;
23
+ }>;
24
+ }
25
+ //# sourceMappingURL=oauth-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-manager.d.ts","sourceRoot":"","sources":["../../src/services/oauth-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAwBrD,qBAAa,YAAY;IAOX,OAAO,CAAC,EAAE;IANtB,OAAO,CAAC,WAAW,CAA6B;IAEhD,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;gBAI5B,EAAE,EAAE,eAAe;IAEjC,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAkEhE,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,gBAAgB,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IA8B9F,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;IA8EnE,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;IAoDhE,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAanD,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA4B9D,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC;QAC3E,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;CAyIH"}
@@ -0,0 +1,365 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OAuthManager = void 0;
4
+ const crypto_1 = require("crypto");
5
+ class OAuthManager {
6
+ db;
7
+ oauthStates = new Map(); // state -> serviceId mapping
8
+ getOAuthState(state) {
9
+ return this.oauthStates.get(state);
10
+ }
11
+ constructor(db) {
12
+ this.db = db;
13
+ }
14
+ async discoverOAuth(serviceUrl) {
15
+ try {
16
+ // Try to get OAuth metadata from the service
17
+ const response = await fetch(`${serviceUrl}/.well-known/oauth-authorization-server`, {
18
+ method: 'GET',
19
+ headers: {
20
+ 'Accept': 'application/json',
21
+ },
22
+ });
23
+ if (response.ok) {
24
+ const metadata = await response.json();
25
+ const config = {
26
+ clientId: '', // Will be provided by user
27
+ clientSecret: '', // Will be provided by user
28
+ authorizationUrl: metadata.authorization_endpoint || '',
29
+ tokenUrl: metadata.token_endpoint || '',
30
+ redirectUri: '', // Will be set during OAuth flow
31
+ scope: metadata.scopes_supported?.[0] || 'read write',
32
+ };
33
+ return {
34
+ hasOAuth: true,
35
+ config,
36
+ };
37
+ }
38
+ // Try alternative discovery methods
39
+ const alternativeResponse = await fetch(`${serviceUrl}/oauth/metadata`, {
40
+ method: 'GET',
41
+ headers: {
42
+ 'Accept': 'application/json',
43
+ },
44
+ });
45
+ if (alternativeResponse.ok) {
46
+ const metadata = await alternativeResponse.json();
47
+ const config = {
48
+ clientId: '',
49
+ clientSecret: '',
50
+ authorizationUrl: metadata.authorizationUrl || metadata.authorization_endpoint || '',
51
+ tokenUrl: metadata.tokenUrl || metadata.token_endpoint || '',
52
+ redirectUri: '',
53
+ scope: metadata.scope || 'read write',
54
+ };
55
+ return {
56
+ hasOAuth: true,
57
+ config,
58
+ };
59
+ }
60
+ return {
61
+ hasOAuth: false,
62
+ };
63
+ }
64
+ catch (error) {
65
+ console.warn('OAuth discovery failed:', error);
66
+ return {
67
+ hasOAuth: false,
68
+ error: error instanceof Error ? error.message : 'Unknown error',
69
+ };
70
+ }
71
+ }
72
+ async initiateOAuthFlow(input) {
73
+ const service = await this.db.getService(input.serviceId);
74
+ if (!service) {
75
+ throw new Error(`Service ${input.serviceId} not found`);
76
+ }
77
+ if (!service.oauthAuthorizationUrl) {
78
+ throw new Error('Service does not have OAuth configuration');
79
+ }
80
+ // Generate state parameter for security
81
+ const state = (0, crypto_1.randomBytes)(32).toString('hex');
82
+ // Store state mapping in memory
83
+ this.oauthStates.set(state, input.serviceId);
84
+ // Build authorization URL
85
+ const url = new URL(service.oauthAuthorizationUrl);
86
+ url.searchParams.set('response_type', 'code');
87
+ url.searchParams.set('client_id', service.oauthClientId || '');
88
+ url.searchParams.set('redirect_uri', input.redirectUri);
89
+ url.searchParams.set('scope', service.oauthScope || 'read write');
90
+ url.searchParams.set('state', state);
91
+ return {
92
+ authorizationUrl: url.toString(),
93
+ state,
94
+ };
95
+ }
96
+ async handleOAuthCallback(input) {
97
+ // Extract service ID from state parameter
98
+ const serviceId = this.oauthStates.get(input.state);
99
+ if (!serviceId) {
100
+ throw new Error('Invalid or expired OAuth state parameter');
101
+ }
102
+ // Clean up the state after successful retrieval
103
+ this.oauthStates.delete(input.state);
104
+ const service = await this.db.getService(serviceId);
105
+ if (!service) {
106
+ throw new Error(`Service ${serviceId} not found`);
107
+ }
108
+ if (!service.oauthTokenUrl) {
109
+ throw new Error('Service does not have OAuth token URL configured');
110
+ }
111
+ // Use the exact same redirect URI that was used in the authorization request
112
+ // This should match the redirect URI stored in the service configuration
113
+ const redirectUri = service.oauthRedirectUri || 'http://localhost:3000/oauth/callback';
114
+ console.log('OAuth callback debug:', {
115
+ serviceId: input.serviceId,
116
+ clientId: service.oauthClientId,
117
+ redirectUri,
118
+ tokenUrl: service.oauthTokenUrl,
119
+ });
120
+ // Exchange authorization code for tokens
121
+ const tokenResponse = await fetch(service.oauthTokenUrl, {
122
+ method: 'POST',
123
+ headers: {
124
+ 'Content-Type': 'application/x-www-form-urlencoded',
125
+ },
126
+ body: new URLSearchParams({
127
+ grant_type: 'authorization_code',
128
+ client_id: service.oauthClientId || '',
129
+ client_secret: service.oauthClientSecret || '',
130
+ code: input.code,
131
+ redirect_uri: redirectUri,
132
+ }),
133
+ });
134
+ if (!tokenResponse.ok) {
135
+ const errorText = await tokenResponse.text();
136
+ throw new Error(`OAuth token exchange failed: ${tokenResponse.status} ${errorText}`);
137
+ }
138
+ const tokenData = await tokenResponse.json();
139
+ const token = {
140
+ accessToken: tokenData.access_token,
141
+ refreshToken: tokenData.refresh_token,
142
+ expiresAt: tokenData.expires_in ?
143
+ new Date(Date.now() + tokenData.expires_in * 1000).toISOString() :
144
+ undefined,
145
+ tokenType: tokenData.token_type || 'Bearer',
146
+ scope: tokenData.scope,
147
+ };
148
+ // Store tokens in database
149
+ await this.db.updateOAuthTokens(serviceId, token.accessToken, token.refreshToken, token.expiresAt);
150
+ // Clear state - we'll need to implement this properly
151
+ // await this.db.updateService(input.serviceId, {
152
+ // oauthState: undefined,
153
+ // });
154
+ return token;
155
+ }
156
+ async refreshOAuthToken(input) {
157
+ const service = await this.db.getService(input.serviceId);
158
+ if (!service) {
159
+ throw new Error(`Service ${input.serviceId} not found`);
160
+ }
161
+ if (!service.oauthTokenUrl) {
162
+ throw new Error('Service does not have OAuth token URL configured');
163
+ }
164
+ // Exchange refresh token for new access token
165
+ const tokenResponse = await fetch(service.oauthTokenUrl, {
166
+ method: 'POST',
167
+ headers: {
168
+ 'Content-Type': 'application/x-www-form-urlencoded',
169
+ },
170
+ body: new URLSearchParams({
171
+ grant_type: 'refresh_token',
172
+ client_id: service.oauthClientId || '',
173
+ client_secret: service.oauthClientSecret || '',
174
+ refresh_token: input.refreshToken,
175
+ }),
176
+ });
177
+ if (!tokenResponse.ok) {
178
+ const errorText = await tokenResponse.text();
179
+ throw new Error(`OAuth token refresh failed: ${tokenResponse.status} ${errorText}`);
180
+ }
181
+ const tokenData = await tokenResponse.json();
182
+ const token = {
183
+ accessToken: tokenData.access_token,
184
+ refreshToken: tokenData.refresh_token || input.refreshToken,
185
+ expiresAt: tokenData.expires_in ?
186
+ new Date(Date.now() + tokenData.expires_in * 1000).toISOString() :
187
+ undefined,
188
+ tokenType: tokenData.token_type || 'Bearer',
189
+ scope: tokenData.scope,
190
+ };
191
+ // Store new tokens in database
192
+ await this.db.updateOAuthTokens(input.serviceId, token.accessToken, token.refreshToken, token.expiresAt);
193
+ return token;
194
+ }
195
+ async isTokenExpired(serviceId) {
196
+ const service = await this.db.getService(serviceId);
197
+ if (!service || !service.oauthTokenExpiresAt) {
198
+ return true;
199
+ }
200
+ const expiresAt = new Date(service.oauthTokenExpiresAt);
201
+ const now = new Date();
202
+ // Consider token expired if it expires within the next 5 minutes
203
+ return expiresAt.getTime() <= now.getTime() + 5 * 60 * 1000;
204
+ }
205
+ async getValidAccessToken(serviceId) {
206
+ const service = await this.db.getService(serviceId);
207
+ if (!service || !service.oauthAccessToken) {
208
+ return null;
209
+ }
210
+ // Check if token is expired
211
+ if (await this.isTokenExpired(serviceId)) {
212
+ // Try to refresh the token
213
+ if (service.oauthRefreshToken) {
214
+ try {
215
+ const newToken = await this.refreshOAuthToken({
216
+ serviceId,
217
+ refreshToken: service.oauthRefreshToken,
218
+ });
219
+ return newToken.accessToken;
220
+ }
221
+ catch (error) {
222
+ console.error(`Failed to refresh OAuth token for service ${serviceId}:`, error);
223
+ return null;
224
+ }
225
+ }
226
+ else {
227
+ return null;
228
+ }
229
+ }
230
+ return service.oauthAccessToken;
231
+ }
232
+ async autoRegisterOAuthApp(serviceUrl, config) {
233
+ try {
234
+ const baseUrl = new URL(serviceUrl);
235
+ console.log('Attempting OAuth auto-registration for:', serviceUrl);
236
+ // Step 1: Try to get OAuth information from the MCP service itself
237
+ console.log('Step 1: Checking MCP service OAuth capabilities');
238
+ try {
239
+ // Try to get OAuth metadata from the MCP service
240
+ const oauthMetadataUrl = `${baseUrl.origin}/.well-known/oauth-authorization-server`;
241
+ console.log('Trying OAuth metadata at:', oauthMetadataUrl);
242
+ const metadataResponse = await fetch(oauthMetadataUrl);
243
+ if (metadataResponse.ok) {
244
+ const metadata = await metadataResponse.json();
245
+ console.log('OAuth metadata found:', metadata);
246
+ if (metadata.registration_endpoint) {
247
+ console.log('Found registration endpoint:', metadata.registration_endpoint);
248
+ // Try dynamic client registration with the MCP service
249
+ const registrationResponse = await fetch(metadata.registration_endpoint, {
250
+ method: 'POST',
251
+ headers: {
252
+ 'Content-Type': 'application/json',
253
+ 'Accept': 'application/json',
254
+ },
255
+ body: JSON.stringify({
256
+ client_name: 'AgentDeck',
257
+ redirect_uris: [`http://localhost:8000/api/oauth/callback`],
258
+ grant_types: ['authorization_code', 'refresh_token'],
259
+ response_types: ['code'],
260
+ token_endpoint_auth_method: 'client_secret_basic',
261
+ scope: config.scope || 'read write',
262
+ }),
263
+ });
264
+ if (registrationResponse.ok) {
265
+ const data = await registrationResponse.json();
266
+ console.log('Dynamic client registration successful:', data);
267
+ // Validate that we got real client credentials
268
+ if (data.client_id && data.client_secret &&
269
+ typeof data.client_id === 'string' &&
270
+ typeof data.client_secret === 'string' &&
271
+ data.client_id.length > 10 &&
272
+ data.client_secret.length > 10) {
273
+ return {
274
+ success: true,
275
+ clientId: data.client_id,
276
+ clientSecret: data.client_secret,
277
+ };
278
+ }
279
+ else {
280
+ console.log('Invalid client credentials received from MCP service');
281
+ }
282
+ }
283
+ else {
284
+ console.log('MCP service registration failed:', await registrationResponse.text());
285
+ }
286
+ }
287
+ else {
288
+ console.log('No registration endpoint found in MCP service OAuth metadata');
289
+ }
290
+ }
291
+ else {
292
+ console.log('MCP service OAuth metadata not found at:', oauthMetadataUrl);
293
+ }
294
+ }
295
+ catch (error) {
296
+ console.log('Failed to get OAuth metadata from MCP service:', error);
297
+ }
298
+ // Step 2: Try MCP service-specific OAuth registration endpoints
299
+ console.log('Step 2: Trying MCP service-specific OAuth registration');
300
+ const mcpOAuthEndpoints = [
301
+ `${serviceUrl}/oauth/register`,
302
+ `${serviceUrl}/oauth/credentials`,
303
+ `${baseUrl.origin}/oauth/register`,
304
+ `${baseUrl.origin}/oauth/credentials`,
305
+ ];
306
+ for (const endpoint of mcpOAuthEndpoints) {
307
+ try {
308
+ console.log('Trying MCP OAuth endpoint:', endpoint);
309
+ const response = await fetch(endpoint, {
310
+ method: 'POST',
311
+ headers: {
312
+ 'Content-Type': 'application/json',
313
+ 'Accept': 'application/json',
314
+ },
315
+ body: JSON.stringify({
316
+ client_name: 'AgentDeck',
317
+ redirect_uri: `http://localhost:8000/api/oauth/callback`,
318
+ scope: config.scope || 'read write',
319
+ }),
320
+ });
321
+ if (response.ok) {
322
+ const data = await response.json();
323
+ console.log('MCP OAuth registration successful at:', endpoint, data);
324
+ // Validate that we got real client credentials
325
+ if (data.client_id && data.client_secret &&
326
+ typeof data.client_id === 'string' &&
327
+ typeof data.client_secret === 'string' &&
328
+ data.client_id.length > 10 &&
329
+ data.client_secret.length > 10) {
330
+ return {
331
+ success: true,
332
+ clientId: data.client_id,
333
+ clientSecret: data.client_secret,
334
+ };
335
+ }
336
+ else {
337
+ console.log('Invalid client credentials received from MCP endpoint:', endpoint);
338
+ }
339
+ }
340
+ else {
341
+ console.log('MCP OAuth endpoint failed:', endpoint, await response.text());
342
+ }
343
+ }
344
+ catch (error) {
345
+ console.log('MCP OAuth endpoint error:', endpoint, error);
346
+ }
347
+ }
348
+ // Step 3: If all automated methods fail, provide generic manual registration instructions
349
+ console.log('Step 3: All automated registration methods failed, providing manual instructions');
350
+ return {
351
+ success: false,
352
+ error: 'This OAuth provider requires manual registration. Please create an OAuth application and add your credentials.',
353
+ };
354
+ }
355
+ catch (error) {
356
+ console.log('OAuth auto-registration failed:', error);
357
+ return {
358
+ success: false,
359
+ error: error instanceof Error ? error.message : 'Auto-registration failed',
360
+ };
361
+ }
362
+ }
363
+ }
364
+ exports.OAuthManager = OAuthManager;
365
+ //# sourceMappingURL=oauth-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-manager.js","sourceRoot":"","sources":["../../src/services/oauth-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { Service, CreateServiceInput, UpdateServiceInput, ServiceTool, ServiceCallInput, ServiceCallResult, UpdateServiceToolSettingsInput, ServiceStatusUpdate } from '@agent-deck/shared';
2
+ import { DatabaseManager } from '../models/database';
3
+ import { MCPClientManager } from './mcp-client-manager';
4
+ import { OAuthManager } from './oauth-manager';
5
+ export declare class ServiceManager {
6
+ private db;
7
+ private mcpClient;
8
+ private oauthManager;
9
+ private configManager;
10
+ constructor(db: DatabaseManager, mcpClient: MCPClientManager, oauthManager: OAuthManager);
11
+ get mcpClientManager(): MCPClientManager;
12
+ createService(input: CreateServiceInput): Promise<Service>;
13
+ private probeInitialHealth;
14
+ refreshUnknownServiceHealth(onUpdate?: (update: ServiceStatusUpdate) => void): Promise<void>;
15
+ private shouldBackgroundProbe;
16
+ refreshServiceIcon(serviceId: string): Promise<Service | null>;
17
+ getService(id: string): Promise<Service | null>;
18
+ getAllServices(): Promise<Service[]>;
19
+ updateService(id: string, input: UpdateServiceInput): Promise<Service | null>;
20
+ deleteService(id: string): Promise<boolean>;
21
+ discoverServiceTools(serviceId: string, options?: {
22
+ forAgent?: boolean;
23
+ }): Promise<ServiceTool[] | {
24
+ success: false;
25
+ error: string;
26
+ }>;
27
+ updateToolSettings(serviceId: string, input: UpdateServiceToolSettingsInput): Promise<Service | null>;
28
+ private annotateToolEnabledState;
29
+ callServiceTool(input: ServiceCallInput): Promise<ServiceCallResult>;
30
+ checkServiceHealth(serviceId: string): Promise<{
31
+ success: boolean;
32
+ health: string;
33
+ isConnected: boolean;
34
+ } | {
35
+ success: false;
36
+ error: string;
37
+ }>;
38
+ private discoverA2ATools;
39
+ private callA2ATool;
40
+ /**
41
+ * Import local MCP servers from JSON configuration
42
+ */
43
+ importLocalServersFromConfig(jsonContent: string): Promise<Service[]>;
44
+ /**
45
+ * Get sample configuration
46
+ */
47
+ getSampleConfig(): string;
48
+ /**
49
+ * Start a local MCP server
50
+ */
51
+ startLocalServer(serviceId: string): Promise<void>;
52
+ /**
53
+ * Stop a local MCP server
54
+ */
55
+ stopLocalServer(serviceId: string): Promise<void>;
56
+ /**
57
+ * Get local MCP server status
58
+ */
59
+ getLocalServerStatus(serviceId: string): Promise<any>;
60
+ }
61
+ //# sourceMappingURL=service-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-manager.d.ts","sourceRoot":"","sources":["../../src/services/service-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EAIjB,8BAA8B,EAC9B,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAmB/C,qBAAa,cAAc;IAIvB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,YAAY;IALtB,OAAO,CAAC,aAAa,CAAgB;gBAG3B,EAAE,EAAE,eAAe,EACnB,SAAS,EAAE,gBAAgB,EAC3B,YAAY,EAAE,YAAY;IAKpC,IAAI,gBAAgB,IAAI,gBAAgB,CAEvC;IAEK,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IA0ChE,OAAO,CAAC,kBAAkB;IAMpB,2BAA2B,CAC/B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,GAC/C,OAAO,CAAC,IAAI,CAAC;IAwBhB,OAAO,CAAC,qBAAqB;IA0BvB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAoB9D,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAI/C,cAAc,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAIpC,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAO7E,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA6B3C,oBAAoB,CACxB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAC/B,OAAO,CAAC,WAAW,EAAE,GAAG;QAAE,OAAO,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAgCvD,kBAAkB,CACtB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,8BAA8B,GACpC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAgB1B,OAAO,CAAC,wBAAwB;IAW1B,eAAe,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAmDpE,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE,GAAG;QAAE,OAAO,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;YAsBtI,gBAAgB;YA2BhB,WAAW;IAsBzB;;OAEG;IACG,4BAA4B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAwC3E;;OAEG;IACH,eAAe,IAAI,MAAM;IAKzB;;OAEG;IACG,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcxD;;OAEG;IACG,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBvD;;OAEG;IACG,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;CA+B5D"}