@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,170 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = mcpRoutes;
4
+ const zod_1 = require("zod");
5
+ const mcp_discovery_service_1 = require("../services/mcp-discovery-service");
6
+ // OAuth discovery functions
7
+ async function extractUrlsFromWWWAuthenticate(headerValue) {
8
+ if (!headerValue)
9
+ return [];
10
+ const urlRegex = /https?:\/\/[^\s,;\"]+/g;
11
+ return headerValue.match(urlRegex) || [];
12
+ }
13
+ async function getBaseOrigin(url) {
14
+ const parsed = new URL(url);
15
+ return `${parsed.protocol}//${parsed.host}`;
16
+ }
17
+ async function probeWWWAuthenticate(url) {
18
+ const headersCommon = {
19
+ 'Accept': 'application/json, text/event-stream',
20
+ 'Content-Type': 'application/json',
21
+ };
22
+ try {
23
+ // Try GET first
24
+ const getResp = await fetch(url, {
25
+ method: 'GET',
26
+ headers: { 'Accept': headersCommon.Accept }
27
+ });
28
+ const www = getResp.headers.get('www-authenticate');
29
+ if (www) {
30
+ return { wwwAuth: www, response: getResp };
31
+ }
32
+ }
33
+ catch (error) {
34
+ // Ignore GET errors
35
+ }
36
+ try {
37
+ // Try POST minimal JSON-RPC envelope
38
+ const payload = { jsonrpc: '2.0', id: 1, method: 'tools/list', params: {} };
39
+ const postResp = await fetch(url, {
40
+ method: 'POST',
41
+ headers: headersCommon,
42
+ body: JSON.stringify(payload)
43
+ });
44
+ const www = postResp.headers.get('www-authenticate');
45
+ if (www) {
46
+ return { wwwAuth: www, response: postResp };
47
+ }
48
+ return { wwwAuth: null, response: postResp };
49
+ }
50
+ catch (error) {
51
+ return { wwwAuth: null, response: null };
52
+ }
53
+ }
54
+ async function fetchProtectedResourceMetadata(baseOrigin) {
55
+ const prUrl = `${baseOrigin}/.well-known/oauth-protected-resource`;
56
+ try {
57
+ const response = await fetch(prUrl);
58
+ if (response.ok) {
59
+ const data = await response.json();
60
+ console.log(`✅ Fetched OAuth metadata from ${prUrl}:`, data);
61
+ return { protectedResourceConfigUrl: prUrl, raw: data };
62
+ }
63
+ else {
64
+ console.log(`⚠️ OAuth metadata not found at ${prUrl}: ${response.status}`);
65
+ }
66
+ }
67
+ catch (error) {
68
+ console.log(`❌ Error fetching OAuth metadata from ${prUrl}:`, error);
69
+ }
70
+ return { protectedResourceConfigUrl: prUrl };
71
+ }
72
+ async function fetchAuthorizationServerMetadata(issuerOrAsUrl) {
73
+ // If it's already a well-known URL, use as-is; otherwise append well-known path
74
+ let asUrl = issuerOrAsUrl;
75
+ if (!asUrl.includes('/.well-known/')) {
76
+ asUrl = asUrl.replace(/\/$/, '') + '/.well-known/oauth-authorization-server';
77
+ }
78
+ try {
79
+ const response = await fetch(asUrl);
80
+ if (response.ok) {
81
+ const data = await response.json();
82
+ return {
83
+ authorizationServerMetadataUrl: asUrl,
84
+ authorizationUrl: data.authorization_endpoint,
85
+ tokenUrl: data.token_endpoint,
86
+ issuer: data.issuer,
87
+ raw: data,
88
+ };
89
+ }
90
+ }
91
+ catch (error) {
92
+ // Ignore errors
93
+ }
94
+ return { authorizationServerMetadataUrl: asUrl };
95
+ }
96
+ async function discoverOAuthInfo(url) {
97
+ const { wwwAuth, response } = await probeWWWAuthenticate(url);
98
+ if (wwwAuth) {
99
+ const urls = await extractUrlsFromWWWAuthenticate(wwwAuth);
100
+ const oauthInfo = {
101
+ required: true,
102
+ wwwAuthenticate: wwwAuth,
103
+ discoveredUrls: urls,
104
+ };
105
+ // Heuristic: pick the first url as authorizationUrl
106
+ if (urls.length > 0) {
107
+ oauthInfo.authorizationUrl = urls[0];
108
+ }
109
+ // Prefer OAuth Protected Resource metadata (RFC 9449) to discover AS
110
+ const baseOrigin = await getBaseOrigin(url);
111
+ const prMeta = await fetchProtectedResourceMetadata(baseOrigin);
112
+ Object.assign(oauthInfo, prMeta);
113
+ // If protected resource metadata exposes authorization_servers, fetch AS metadata
114
+ const authServers = (prMeta.raw || {}).authorization_servers || [];
115
+ if (authServers.length > 0) {
116
+ // Use the first AS listed
117
+ const asMeta = await fetchAuthorizationServerMetadata(authServers[0]);
118
+ // If endpoints found, mark required
119
+ if (asMeta.authorizationUrl || asMeta.tokenUrl) {
120
+ oauthInfo.required = true;
121
+ }
122
+ Object.assign(oauthInfo, asMeta);
123
+ }
124
+ // Add OAuth configuration information for the frontend
125
+ if (prMeta.raw) {
126
+ oauthInfo.resourceName = prMeta.raw.resource_name;
127
+ oauthInfo.scopesSupported = prMeta.raw.scopes_supported || [];
128
+ oauthInfo.bearerMethodsSupported = prMeta.raw.bearer_methods_supported || [];
129
+ // For GitHub OAuth, provide standard endpoints
130
+ if (authServers.includes('https://github.com/login/oauth')) {
131
+ oauthInfo.authorizationUrl = 'https://github.com/login/oauth/authorize';
132
+ oauthInfo.tokenUrl = 'https://github.com/login/oauth/access_token';
133
+ oauthInfo.provider = 'github';
134
+ }
135
+ }
136
+ return oauthInfo;
137
+ }
138
+ return { required: false };
139
+ }
140
+ // Request schemas
141
+ const DiscoverMCPRequest = zod_1.z.object({
142
+ url: zod_1.z.string().url(),
143
+ });
144
+ async function mcpRoutes(fastify) {
145
+ const discoveryService = new mcp_discovery_service_1.MCPDiscoveryService();
146
+ // Discover and analyze an MCP server
147
+ fastify.post('/discover', async (request, reply) => {
148
+ try {
149
+ const { url } = request.body;
150
+ fastify.log.info(`🔍 Discovering MCP server: ${url}`);
151
+ // Use the new discovery service
152
+ const discoveryResult = await discoveryService.discoverService(url);
153
+ fastify.log.info(`✅ MCP discovery completed for ${url}: ${discoveryResult.tools_count} tools found, OAuth required: ${discoveryResult.oauth.required}`);
154
+ const response = {
155
+ success: true,
156
+ data: discoveryResult,
157
+ };
158
+ return reply.send(response);
159
+ }
160
+ catch (error) {
161
+ fastify.log.error(`Error discovering MCP server: ${error}`);
162
+ const response = {
163
+ success: false,
164
+ error: error instanceof Error ? error.message : 'Unknown error',
165
+ };
166
+ return reply.status(500).send(response);
167
+ }
168
+ });
169
+ }
170
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/routes/mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { FastifyInstance } from 'fastify';
2
+ export declare function registerOAuthRoutes(fastify: FastifyInstance): Promise<void>;
3
+ //# sourceMappingURL=oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/routes/oauth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AA8BxE,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,eAAe,iBAgRjE"}
@@ -0,0 +1,242 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerOAuthRoutes = registerOAuthRoutes;
4
+ const mcp_discovery_service_1 = require("../services/mcp-discovery-service");
5
+ async function registerOAuthRoutes(fastify) {
6
+ // Discover OAuth configuration for a service
7
+ fastify.get('/:serviceId/discover', async (request, reply) => {
8
+ try {
9
+ const service = await fastify.db.getService(request.params.serviceId);
10
+ if (!service) {
11
+ const response = {
12
+ success: false,
13
+ error: 'Service not found',
14
+ };
15
+ return reply.status(404).send(response);
16
+ }
17
+ const discovery = await fastify.oauthManager.discoverOAuth(service.url);
18
+ const response = {
19
+ success: true,
20
+ data: discovery,
21
+ };
22
+ return reply.send(response);
23
+ }
24
+ catch (error) {
25
+ const response = {
26
+ success: false,
27
+ error: error instanceof Error ? error.message : 'Unknown error',
28
+ };
29
+ return reply.status(500).send(response);
30
+ }
31
+ });
32
+ // Auto-register OAuth application and initiate flow
33
+ fastify.post('/:serviceId/auto-setup', async (request, reply) => {
34
+ try {
35
+ const service = await fastify.db.getService(request.params.serviceId);
36
+ if (!service) {
37
+ const response = {
38
+ success: false,
39
+ error: 'Service not found',
40
+ };
41
+ return reply.status(404).send(response);
42
+ }
43
+ // Use MCP discovery service to get OAuth configuration
44
+ const discoveryService = new mcp_discovery_service_1.MCPDiscoveryService();
45
+ const mcpDiscovery = await discoveryService.discoverService(service.url);
46
+ if (!mcpDiscovery.oauth.required) {
47
+ const response = {
48
+ success: false,
49
+ error: 'Service does not require OAuth authentication',
50
+ };
51
+ return reply.status(400).send(response);
52
+ }
53
+ // Convert MCP discovery to OAuth config format
54
+ const oauthConfig = {
55
+ clientId: '', // Will be provided by auto-registration
56
+ clientSecret: '', // Will be provided by auto-registration
57
+ authorizationUrl: mcpDiscovery.oauth.authorizationUrl || '',
58
+ tokenUrl: mcpDiscovery.oauth.tokenUrl || '',
59
+ redirectUri: `http://localhost:8000/api/oauth/callback`,
60
+ scope: mcpDiscovery.oauth.scopesSupported?.[0] || 'read write',
61
+ };
62
+ // Auto-register OAuth application
63
+ const registration = await fastify.oauthManager.autoRegisterOAuthApp(service.url, oauthConfig);
64
+ if (!registration.success) {
65
+ const response = {
66
+ success: false,
67
+ error: registration.error || 'Failed to auto-register OAuth application',
68
+ data: registration.registrationUrl ? { registrationUrl: registration.registrationUrl } : undefined,
69
+ };
70
+ return reply.status(400).send(response);
71
+ }
72
+ // Update service with OAuth credentials
73
+ await fastify.db.updateService(request.params.serviceId, {
74
+ oauthClientId: registration.clientId,
75
+ oauthClientSecret: registration.clientSecret,
76
+ oauthAuthorizationUrl: oauthConfig.authorizationUrl,
77
+ oauthTokenUrl: oauthConfig.tokenUrl,
78
+ oauthRedirectUri: oauthConfig.redirectUri,
79
+ oauthScope: oauthConfig.scope,
80
+ });
81
+ // Initiate OAuth flow
82
+ const { authorizationUrl, state } = await fastify.oauthManager.initiateOAuthFlow({
83
+ serviceId: request.params.serviceId,
84
+ redirectUri: `http://localhost:8000/api/oauth/callback`,
85
+ });
86
+ const response = {
87
+ success: true,
88
+ data: {
89
+ authorizationUrl,
90
+ state,
91
+ clientId: registration.clientId,
92
+ message: 'OAuth application registered and authorization flow initiated',
93
+ },
94
+ };
95
+ return reply.send(response);
96
+ }
97
+ catch (error) {
98
+ const response = {
99
+ success: false,
100
+ error: error instanceof Error ? error.message : 'Unknown error',
101
+ };
102
+ return reply.status(400).send(response);
103
+ }
104
+ });
105
+ // Initiate OAuth flow (existing endpoint)
106
+ fastify.get('/:serviceId/authorize', async (request, reply) => {
107
+ try {
108
+ const { authorizationUrl, state } = await fastify.oauthManager.initiateOAuthFlow({
109
+ serviceId: request.params.serviceId,
110
+ redirectUri: request.query.redirectUri,
111
+ });
112
+ const response = {
113
+ success: true,
114
+ data: {
115
+ authorizationUrl,
116
+ state,
117
+ },
118
+ };
119
+ return reply.send(response);
120
+ }
121
+ catch (error) {
122
+ const response = {
123
+ success: false,
124
+ error: error instanceof Error ? error.message : 'Unknown error',
125
+ };
126
+ return reply.status(400).send(response);
127
+ }
128
+ });
129
+ // Handle OAuth callback (generic endpoint for all services)
130
+ fastify.get('/callback', async (request, reply) => {
131
+ try {
132
+ const { code, state } = request.query;
133
+ if (!code || !state) {
134
+ const response = {
135
+ success: false,
136
+ error: 'Missing authorization code or state parameter',
137
+ };
138
+ return reply.status(400).send(response);
139
+ }
140
+ // Extract service ID from state using OAuth manager's state mapping
141
+ const serviceId = fastify.oauthManager.getOAuthState(state);
142
+ if (!serviceId) {
143
+ const response = {
144
+ success: false,
145
+ error: 'Invalid or expired OAuth state',
146
+ };
147
+ return reply.status(400).send(response);
148
+ }
149
+ const token = await fastify.oauthManager.handleOAuthCallback({
150
+ serviceId,
151
+ code,
152
+ state,
153
+ });
154
+ fastify.collectionWarningService.clearCache(serviceId);
155
+ // Redirect to frontend with success status
156
+ return reply.redirect(`http://localhost:3000/oauth/callback?success=true&serviceId=${serviceId}`);
157
+ }
158
+ catch (error) {
159
+ // Redirect to frontend with error status
160
+ const errorMessage = error instanceof Error ? error.message : 'OAuth callback failed';
161
+ return reply.redirect(`http://localhost:3000/oauth/callback?success=false&error=${encodeURIComponent(errorMessage)}`);
162
+ }
163
+ });
164
+ // Handle OAuth callback (legacy endpoint with service ID)
165
+ fastify.get('/:serviceId/callback', async (request, reply) => {
166
+ try {
167
+ const token = await fastify.oauthManager.handleOAuthCallback({
168
+ serviceId: request.params.serviceId,
169
+ code: request.query.code,
170
+ state: request.query.state,
171
+ });
172
+ const response = {
173
+ success: true,
174
+ data: token,
175
+ message: 'OAuth authentication successful',
176
+ };
177
+ return reply.send(response);
178
+ }
179
+ catch (error) {
180
+ const response = {
181
+ success: false,
182
+ error: error instanceof Error ? error.message : 'Unknown error',
183
+ };
184
+ return reply.status(400).send(response);
185
+ }
186
+ });
187
+ // Refresh OAuth token
188
+ fastify.post('/:serviceId/refresh', async (request, reply) => {
189
+ try {
190
+ const token = await fastify.oauthManager.refreshOAuthToken({
191
+ serviceId: request.params.serviceId,
192
+ refreshToken: request.body.refreshToken,
193
+ });
194
+ const response = {
195
+ success: true,
196
+ data: token,
197
+ message: 'OAuth token refreshed successfully',
198
+ };
199
+ return reply.send(response);
200
+ }
201
+ catch (error) {
202
+ const response = {
203
+ success: false,
204
+ error: error instanceof Error ? error.message : 'Unknown error',
205
+ };
206
+ return reply.status(400).send(response);
207
+ }
208
+ });
209
+ // Get OAuth status for a service
210
+ fastify.get('/:serviceId/status', async (request, reply) => {
211
+ try {
212
+ const service = await fastify.db.getService(request.params.serviceId);
213
+ if (!service) {
214
+ const response = {
215
+ success: false,
216
+ error: 'Service not found',
217
+ };
218
+ return reply.status(404).send(response);
219
+ }
220
+ const isExpired = await fastify.oauthManager.isTokenExpired(request.params.serviceId);
221
+ const hasToken = !!service.oauthAccessToken;
222
+ const response = {
223
+ success: true,
224
+ data: {
225
+ hasToken,
226
+ isExpired,
227
+ hasRefreshToken: !!service.oauthRefreshToken,
228
+ expiresAt: service.oauthTokenExpiresAt,
229
+ },
230
+ };
231
+ return reply.send(response);
232
+ }
233
+ catch (error) {
234
+ const response = {
235
+ success: false,
236
+ error: error instanceof Error ? error.message : 'Unknown error',
237
+ };
238
+ return reply.status(500).send(response);
239
+ }
240
+ });
241
+ }
242
+ //# sourceMappingURL=oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/routes/oauth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { FastifyInstance } from 'fastify';
2
+ import { PlaybookDependencyError } from '../playbooks/playbook-manager';
3
+ export declare function registerPlaybookRoutes(fastify: FastifyInstance): Promise<void>;
4
+ export { PlaybookDependencyError };
5
+ //# sourceMappingURL=playbooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playbooks.d.ts","sourceRoot":"","sources":["../../src/routes/playbooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAqB1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAoBxE,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,eAAe,iBAqNpE;AAED,OAAO,EAAE,uBAAuB,EAAE,CAAC"}