@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.
- package/dist/.tsbuildinfo +1 -0
- package/dist/cli-runtime.d.ts +4 -0
- package/dist/cli-runtime.d.ts.map +1 -0
- package/dist/cli-runtime.js +12 -0
- package/dist/cli-runtime.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/agent-deck-context.d.ts +8 -0
- package/dist/lib/agent-deck-context.d.ts.map +1 -0
- package/dist/lib/agent-deck-context.js +48 -0
- package/dist/lib/agent-deck-context.js.map +1 -0
- package/dist/lib/bound-deck-scope.d.ts +15 -0
- package/dist/lib/bound-deck-scope.d.ts.map +1 -0
- package/dist/lib/bound-deck-scope.js +68 -0
- package/dist/lib/bound-deck-scope.js.map +1 -0
- package/dist/lib/client-scope.d.ts +14 -0
- package/dist/lib/client-scope.d.ts.map +1 -0
- package/dist/lib/client-scope.js +46 -0
- package/dist/lib/client-scope.js.map +1 -0
- package/dist/lib/paths.d.ts +2 -0
- package/dist/lib/paths.d.ts.map +1 -0
- package/dist/lib/paths.js +24 -0
- package/dist/lib/paths.js.map +1 -0
- package/dist/lib/version.d.ts +3 -0
- package/dist/lib/version.d.ts.map +1 -0
- package/dist/lib/version.js +20 -0
- package/dist/lib/version.js.map +1 -0
- package/dist/mcp-index.d.ts +2 -0
- package/dist/mcp-index.d.ts.map +1 -0
- package/dist/mcp-index.js +32 -0
- package/dist/mcp-index.js.map +1 -0
- package/dist/mcp-server.d.ts +25 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +1121 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/mcp-stdio.d.ts +2 -0
- package/dist/mcp-stdio.d.ts.map +1 -0
- package/dist/mcp-stdio.js.map +1 -0
- package/dist/models/database.d.ts +64 -0
- package/dist/models/database.d.ts.map +1 -0
- package/dist/models/database.js +965 -0
- package/dist/models/database.js.map +1 -0
- package/dist/playbooks/playbook-manager.d.ts +29 -0
- package/dist/playbooks/playbook-manager.d.ts.map +1 -0
- package/dist/playbooks/playbook-manager.js +198 -0
- package/dist/playbooks/playbook-manager.js.map +1 -0
- package/dist/playbooks/playbook-parser.d.ts +8 -0
- package/dist/playbooks/playbook-parser.d.ts.map +1 -0
- package/dist/playbooks/playbook-parser.js +76 -0
- package/dist/playbooks/playbook-parser.js.map +1 -0
- package/dist/playbooks/playbook-service.d.ts +9 -0
- package/dist/playbooks/playbook-service.d.ts.map +1 -0
- package/dist/playbooks/playbook-service.js +107 -0
- package/dist/playbooks/playbook-service.js.map +1 -0
- package/dist/routes/collection.d.ts +3 -0
- package/dist/routes/collection.d.ts.map +1 -0
- package/dist/routes/collection.js +34 -0
- package/dist/routes/collection.js.map +1 -0
- package/dist/routes/credentials.d.ts +3 -0
- package/dist/routes/credentials.d.ts.map +1 -0
- package/dist/routes/credentials.js +241 -0
- package/dist/routes/credentials.js.map +1 -0
- package/dist/routes/decks.d.ts +3 -0
- package/dist/routes/decks.d.ts.map +1 -0
- package/dist/routes/decks.js +430 -0
- package/dist/routes/decks.js.map +1 -0
- package/dist/routes/local-mcp.d.ts +3 -0
- package/dist/routes/local-mcp.d.ts.map +1 -0
- package/dist/routes/local-mcp.js +189 -0
- package/dist/routes/local-mcp.js.map +1 -0
- package/dist/routes/mcp.d.ts +3 -0
- package/dist/routes/mcp.d.ts.map +1 -0
- package/dist/routes/mcp.js +170 -0
- package/dist/routes/mcp.js.map +1 -0
- package/dist/routes/oauth.d.ts +3 -0
- package/dist/routes/oauth.d.ts.map +1 -0
- package/dist/routes/oauth.js +242 -0
- package/dist/routes/oauth.js.map +1 -0
- package/dist/routes/playbooks.d.ts +5 -0
- package/dist/routes/playbooks.d.ts.map +1 -0
- package/dist/routes/playbooks.js +220 -0
- package/dist/routes/playbooks.js.map +1 -0
- package/dist/routes/scope.d.ts +3 -0
- package/dist/routes/scope.d.ts.map +1 -0
- package/dist/routes/scope.js +107 -0
- package/dist/routes/scope.js.map +1 -0
- package/dist/routes/services.d.ts +3 -0
- package/dist/routes/services.d.ts.map +1 -0
- package/dist/routes/services.js +281 -0
- package/dist/routes/services.js.map +1 -0
- package/dist/routes/websocket.d.ts +11 -0
- package/dist/routes/websocket.d.ts.map +1 -0
- package/dist/routes/websocket.js +154 -0
- package/dist/routes/websocket.js.map +1 -0
- package/dist/scope/repo-deck.d.ts +10 -0
- package/dist/scope/repo-deck.d.ts.map +1 -0
- package/dist/scope/repo-deck.js +63 -0
- package/dist/scope/repo-deck.js.map +1 -0
- package/dist/server/index.d.ts +24 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +111 -0
- package/dist/server/index.js.map +1 -0
- package/dist/services/collection-warning-service.d.ts +18 -0
- package/dist/services/collection-warning-service.d.ts.map +1 -0
- package/dist/services/collection-warning-service.js +129 -0
- package/dist/services/collection-warning-service.js.map +1 -0
- package/dist/services/config-manager.d.ts +32 -0
- package/dist/services/config-manager.d.ts.map +1 -0
- package/dist/services/config-manager.js +119 -0
- package/dist/services/config-manager.js.map +1 -0
- package/dist/services/icon-resolver.d.ts +20 -0
- package/dist/services/icon-resolver.d.ts.map +1 -0
- package/dist/services/icon-resolver.js +224 -0
- package/dist/services/icon-resolver.js.map +1 -0
- package/dist/services/local-mcp-server-manager.d.ts +51 -0
- package/dist/services/local-mcp-server-manager.d.ts.map +1 -0
- package/dist/services/local-mcp-server-manager.js +246 -0
- package/dist/services/local-mcp-server-manager.js.map +1 -0
- package/dist/services/mcp-client-manager.d.ts +22 -0
- package/dist/services/mcp-client-manager.d.ts.map +1 -0
- package/dist/services/mcp-client-manager.js +257 -0
- package/dist/services/mcp-client-manager.js.map +1 -0
- package/dist/services/mcp-discovery-service.d.ts +31 -0
- package/dist/services/mcp-discovery-service.d.ts.map +1 -0
- package/dist/services/mcp-discovery-service.js +164 -0
- package/dist/services/mcp-discovery-service.js.map +1 -0
- package/dist/services/oauth-manager.d.ts +25 -0
- package/dist/services/oauth-manager.d.ts.map +1 -0
- package/dist/services/oauth-manager.js +365 -0
- package/dist/services/oauth-manager.js.map +1 -0
- package/dist/services/service-manager.d.ts +61 -0
- package/dist/services/service-manager.d.ts.map +1 -0
- package/dist/services/service-manager.js +447 -0
- package/dist/services/service-manager.js.map +1 -0
- package/dist/test-local-mcp-e2e.d.ts +3 -0
- package/dist/test-local-mcp-e2e.d.ts.map +1 -0
- package/dist/test-local-mcp-e2e.js +104 -0
- package/dist/test-local-mcp-e2e.js.map +1 -0
- package/dist/test-local-mcp.d.ts +3 -0
- package/dist/test-local-mcp.d.ts.map +1 -0
- package/dist/test-local-mcp.js +54 -0
- package/dist/test-local-mcp.js.map +1 -0
- package/dist/vault/credential-manager.d.ts +45 -0
- package/dist/vault/credential-manager.d.ts.map +1 -0
- package/dist/vault/credential-manager.js +237 -0
- package/dist/vault/credential-manager.js.map +1 -0
- package/dist/vault/index.d.ts +4 -0
- package/dist/vault/index.d.ts.map +1 -0
- package/dist/vault/index.js +20 -0
- package/dist/vault/index.js.map +1 -0
- package/dist/vault/secret-store.d.ts +36 -0
- package/dist/vault/secret-store.d.ts.map +1 -0
- package/dist/vault/secret-store.js +207 -0
- package/dist/vault/secret-store.js.map +1 -0
- package/dist/vault/yaml-sync.d.ts +8 -0
- package/dist/vault/yaml-sync.d.ts.map +1 -0
- package/dist/vault/yaml-sync.js +60 -0
- package/dist/vault/yaml-sync.js.map +1 -0
- package/package.json +64 -0
- package/static-ui/assets/AgentDeckLogo2-z3pVqJJ3.png +0 -0
- package/static-ui/assets/index-BnA3AsqY.css +1 -0
- package/static-ui/assets/index-D1IuraRt.js +334 -0
- package/static-ui/favicon.png +0 -0
- 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 @@
|
|
|
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"}
|