cdk-serverless 3.2.1 → 3.3.1
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/README.md +111 -0
- package/docs/constructs/assets/hierarchy.js +1 -1
- package/docs/constructs/assets/navigation.js +1 -1
- package/docs/constructs/assets/search.js +1 -1
- package/docs/constructs/classes/McpAuth.html +43 -0
- package/docs/constructs/classes/McpCognitoAuth.html +43 -0
- package/docs/constructs/classes/RestApi.html +6 -3
- package/docs/constructs/classes/SingleTableDatastore.html +1 -1
- package/docs/constructs/classes/Workflow.html +1 -1
- package/docs/constructs/hierarchy.html +1 -1
- package/docs/constructs/index.html +112 -1
- package/docs/constructs/interfaces/McpAuthCognitoOptions.html +17 -0
- package/docs/constructs/interfaces/McpAuthFunctions.html +14 -0
- package/docs/constructs/interfaces/McpAuthGenericOptions.html +11 -0
- package/docs/constructs/interfaces/McpAuthOptions.html +33 -0
- package/docs/constructs/interfaces/McpAuthProps.html +43 -0
- package/docs/constructs/interfaces/McpCognitoAuthProps.html +49 -0
- package/docs/constructs/interfaces/RestApiProps.html +24 -6
- package/docs/constructs/modules.html +1 -1
- package/docs/lambda/index.html +112 -1
- package/docs/projen/index.html +112 -1
- package/lib/constructs/index.d.ts +2 -0
- package/lib/constructs/index.js +3 -1
- package/lib/constructs/mcp-auth.d.ts +117 -0
- package/lib/constructs/mcp-auth.js +127 -0
- package/lib/constructs/mcp-cognito-auth.d.ts +110 -0
- package/lib/constructs/mcp-cognito-auth.js +76 -0
- package/lib/constructs/rest-api.d.ts +136 -0
- package/lib/constructs/rest-api.js +159 -1
- package/lib/mcp-auth/config.d.ts +39 -0
- package/lib/mcp-auth/config.js +3 -0
- package/lib/mcp-auth/handlers/authorization-server.d.ts +7 -0
- package/lib/mcp-auth/handlers/authorization-server.js +34 -0
- package/lib/mcp-auth/handlers/authorize.d.ts +8 -0
- package/lib/mcp-auth/handlers/authorize.js +32 -0
- package/lib/mcp-auth/handlers/index.d.ts +7 -0
- package/lib/mcp-auth/handlers/index.js +24 -0
- package/lib/mcp-auth/handlers/protected-resource.d.ts +7 -0
- package/lib/mcp-auth/handlers/protected-resource.js +26 -0
- package/lib/mcp-auth/handlers/register.d.ts +7 -0
- package/lib/mcp-auth/handlers/register.js +68 -0
- package/lib/mcp-auth/handlers/token.d.ts +8 -0
- package/lib/mcp-auth/handlers/token.js +74 -0
- package/lib/mcp-auth/handlers/types.d.ts +21 -0
- package/lib/mcp-auth/handlers/types.js +3 -0
- package/lib/mcp-auth/handlers/validate-redirect-uris.d.ts +10 -0
- package/lib/mcp-auth/handlers/validate-redirect-uris.js +22 -0
- package/lib/mcp-auth/index.d.ts +3 -0
- package/lib/mcp-auth/index.js +20 -0
- package/lib/mcp-auth/lambda-handlers/authorization-server.handler.d.ts +2 -0
- package/lib/mcp-auth/lambda-handlers/authorization-server.handler.js +23 -0
- package/lib/mcp-auth/lambda-handlers/authorize.handler.d.ts +2 -0
- package/lib/mcp-auth/lambda-handlers/authorize.handler.js +23 -0
- package/lib/mcp-auth/lambda-handlers/env-config.d.ts +7 -0
- package/lib/mcp-auth/lambda-handlers/env-config.js +37 -0
- package/lib/mcp-auth/lambda-handlers/protected-resource.handler.d.ts +2 -0
- package/lib/mcp-auth/lambda-handlers/protected-resource.handler.js +23 -0
- package/lib/mcp-auth/lambda-handlers/register.handler.d.ts +2 -0
- package/lib/mcp-auth/lambda-handlers/register.handler.js +23 -0
- package/lib/mcp-auth/lambda-handlers/token.handler.d.ts +2 -0
- package/lib/mcp-auth/lambda-handlers/token.handler.js +23 -0
- package/lib/mcp-auth/mcp/errors.d.ts +8 -0
- package/lib/mcp-auth/mcp/errors.js +20 -0
- package/lib/mcp-auth/mcp/index.d.ts +4 -0
- package/lib/mcp-auth/mcp/index.js +21 -0
- package/lib/mcp-auth/mcp/jsonrpc.d.ts +21 -0
- package/lib/mcp-auth/mcp/jsonrpc.js +56 -0
- package/lib/mcp-auth/mcp/server.d.ts +9 -0
- package/lib/mcp-auth/mcp/server.js +107 -0
- package/lib/mcp-auth/mcp/types.d.ts +32 -0
- package/lib/mcp-auth/mcp/types.js +3 -0
- package/llm.md +214 -0
- package/package.json +1 -1
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createAuthorizeHandler = createAuthorizeHandler;
|
|
4
|
+
/**
|
|
5
|
+
* Factory for the `/oauth/authorize` proxy endpoint.
|
|
6
|
+
* Strips configured parameters (default: 'resource') before redirecting
|
|
7
|
+
* to the upstream authorization endpoint.
|
|
8
|
+
*/
|
|
9
|
+
function createAuthorizeHandler(config) {
|
|
10
|
+
return async (event) => {
|
|
11
|
+
const params = new URLSearchParams(event.queryStringParameters);
|
|
12
|
+
// Strip unsupported parameters (e.g. RFC 8707 'resource')
|
|
13
|
+
const stripParams = config.stripParameters ?? ['resource'];
|
|
14
|
+
for (const param of stripParams) {
|
|
15
|
+
params.delete(param);
|
|
16
|
+
}
|
|
17
|
+
const upstreamUrl = `${config.authorizeEndpoint}?${params.toString()}`;
|
|
18
|
+
console.log(JSON.stringify({
|
|
19
|
+
event: 'oauth-authorize-proxy',
|
|
20
|
+
upstreamUrl,
|
|
21
|
+
strippedParams: stripParams.filter(p => event.queryStringParameters?.[p]),
|
|
22
|
+
}));
|
|
23
|
+
return {
|
|
24
|
+
statusCode: 302,
|
|
25
|
+
headers: {
|
|
26
|
+
'Location': upstreamUrl,
|
|
27
|
+
'Cache-Control': 'no-cache, no-store',
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21jcC1hdXRoL2hhbmRsZXJzL2F1dGhvcml6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVFBLHdEQTBCQztBQS9CRDs7OztHQUlHO0FBQ0gsU0FBZ0Isc0JBQXNCLENBQUMsTUFBcUI7SUFDMUQsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUE2QixFQUFFO1FBQ2hELE1BQU0sTUFBTSxHQUFHLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxxQkFBK0MsQ0FBQyxDQUFDO1FBRTFGLDBEQUEwRDtRQUMxRCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsZUFBZSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0QsS0FBSyxNQUFNLEtBQUssSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztRQUV2RSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDekIsS0FBSyxFQUFFLHVCQUF1QjtZQUM5QixXQUFXO1lBQ1gsY0FBYyxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMxRSxDQUFDLENBQUMsQ0FBQztRQUVKLE9BQU87WUFDTCxVQUFVLEVBQUUsR0FBRztZQUNmLE9BQU8sRUFBRTtnQkFDUCxVQUFVLEVBQUUsV0FBVztnQkFDdkIsZUFBZSxFQUFFLG9CQUFvQjthQUN0QztTQUNGLENBQUM7SUFDSixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBNY3BBdXRoQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB0eXBlIHsgTWNwT0F1dGhIYW5kbGVyLCBNY3BPQXV0aFJlc3BvbnNlIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogRmFjdG9yeSBmb3IgdGhlIGAvb2F1dGgvYXV0aG9yaXplYCBwcm94eSBlbmRwb2ludC5cbiAqIFN0cmlwcyBjb25maWd1cmVkIHBhcmFtZXRlcnMgKGRlZmF1bHQ6ICdyZXNvdXJjZScpIGJlZm9yZSByZWRpcmVjdGluZ1xuICogdG8gdGhlIHVwc3RyZWFtIGF1dGhvcml6YXRpb24gZW5kcG9pbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBdXRob3JpemVIYW5kbGVyKGNvbmZpZzogTWNwQXV0aENvbmZpZyk6IE1jcE9BdXRoSGFuZGxlciB7XG4gIHJldHVybiBhc3luYyAoZXZlbnQpOiBQcm9taXNlPE1jcE9BdXRoUmVzcG9uc2U+ID0+IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKGV2ZW50LnF1ZXJ5U3RyaW5nUGFyYW1ldGVycyBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTtcblxuICAgIC8vIFN0cmlwIHVuc3VwcG9ydGVkIHBhcmFtZXRlcnMgKGUuZy4gUkZDIDg3MDcgJ3Jlc291cmNlJylcbiAgICBjb25zdCBzdHJpcFBhcmFtcyA9IGNvbmZpZy5zdHJpcFBhcmFtZXRlcnMgPz8gWydyZXNvdXJjZSddO1xuICAgIGZvciAoY29uc3QgcGFyYW0gb2Ygc3RyaXBQYXJhbXMpIHtcbiAgICAgIHBhcmFtcy5kZWxldGUocGFyYW0pO1xuICAgIH1cblxuICAgIGNvbnN0IHVwc3RyZWFtVXJsID0gYCR7Y29uZmlnLmF1dGhvcml6ZUVuZHBvaW50fT8ke3BhcmFtcy50b1N0cmluZygpfWA7XG5cbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7XG4gICAgICBldmVudDogJ29hdXRoLWF1dGhvcml6ZS1wcm94eScsXG4gICAgICB1cHN0cmVhbVVybCxcbiAgICAgIHN0cmlwcGVkUGFyYW1zOiBzdHJpcFBhcmFtcy5maWx0ZXIocCA9PiBldmVudC5xdWVyeVN0cmluZ1BhcmFtZXRlcnM/LltwXSksXG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1c0NvZGU6IDMwMixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0xvY2F0aW9uJzogdXBzdHJlYW1VcmwsXG4gICAgICAgICdDYWNoZS1Db250cm9sJzogJ25vLWNhY2hlLCBuby1zdG9yZScsXG4gICAgICB9LFxuICAgIH07XG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./types"), exports);
|
|
18
|
+
__exportStar(require("./authorize"), exports);
|
|
19
|
+
__exportStar(require("./authorization-server"), exports);
|
|
20
|
+
__exportStar(require("./protected-resource"), exports);
|
|
21
|
+
__exportStar(require("./register"), exports);
|
|
22
|
+
__exportStar(require("./token"), exports);
|
|
23
|
+
__exportStar(require("./validate-redirect-uris"), exports);
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWNwLWF1dGgvaGFuZGxlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDBDQUF3QjtBQUN4Qiw4Q0FBNEI7QUFDNUIseURBQXVDO0FBQ3ZDLHVEQUFxQztBQUNyQyw2Q0FBMkI7QUFDM0IsMENBQXdCO0FBQ3hCLDJEQUF5QyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9hdXRob3JpemUnO1xuZXhwb3J0ICogZnJvbSAnLi9hdXRob3JpemF0aW9uLXNlcnZlcic7XG5leHBvcnQgKiBmcm9tICcuL3Byb3RlY3RlZC1yZXNvdXJjZSc7XG5leHBvcnQgKiBmcm9tICcuL3JlZ2lzdGVyJztcbmV4cG9ydCAqIGZyb20gJy4vdG9rZW4nO1xuZXhwb3J0ICogZnJvbSAnLi92YWxpZGF0ZS1yZWRpcmVjdC11cmlzJztcbiJdfQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { McpAuthConfig } from '../config';
|
|
2
|
+
import type { McpOAuthHandler } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Factory for the `/.well-known/oauth-protected-resource` endpoint (RFC 9728).
|
|
5
|
+
* Returns the resource identifier and authorization servers.
|
|
6
|
+
*/
|
|
7
|
+
export declare function createProtectedResourceHandler(config: McpAuthConfig): McpOAuthHandler;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createProtectedResourceHandler = createProtectedResourceHandler;
|
|
4
|
+
/**
|
|
5
|
+
* Factory for the `/.well-known/oauth-protected-resource` endpoint (RFC 9728).
|
|
6
|
+
* Returns the resource identifier and authorization servers.
|
|
7
|
+
*/
|
|
8
|
+
function createProtectedResourceHandler(config) {
|
|
9
|
+
return async (event) => {
|
|
10
|
+
console.log(JSON.stringify({
|
|
11
|
+
event: 'oauth-protected-resource',
|
|
12
|
+
method: event.httpMethod,
|
|
13
|
+
path: event.path,
|
|
14
|
+
}));
|
|
15
|
+
const body = {
|
|
16
|
+
resource: `https://${config.apiDomain}/mcp`,
|
|
17
|
+
authorization_servers: [`https://${config.apiDomain}`],
|
|
18
|
+
};
|
|
19
|
+
return {
|
|
20
|
+
statusCode: 200,
|
|
21
|
+
headers: { 'Content-Type': 'application/json' },
|
|
22
|
+
body: JSON.stringify(body),
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdGVjdGVkLXJlc291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21jcC1hdXRoL2hhbmRsZXJzL3Byb3RlY3RlZC1yZXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU9BLHdFQW1CQztBQXZCRDs7O0dBR0c7QUFDSCxTQUFnQiw4QkFBOEIsQ0FBQyxNQUFxQjtJQUNsRSxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQTZCLEVBQUU7UUFDaEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ3pCLEtBQUssRUFBRSwwQkFBMEI7WUFDakMsTUFBTSxFQUFFLEtBQUssQ0FBQyxVQUFVO1lBQ3hCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtTQUNqQixDQUFDLENBQUMsQ0FBQztRQUVKLE1BQU0sSUFBSSxHQUFHO1lBQ1gsUUFBUSxFQUFFLFdBQVcsTUFBTSxDQUFDLFNBQVMsTUFBTTtZQUMzQyxxQkFBcUIsRUFBRSxDQUFDLFdBQVcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ3ZELENBQUM7UUFFRixPQUFPO1lBQ0wsVUFBVSxFQUFFLEdBQUc7WUFDZixPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUU7WUFDL0MsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1NBQzNCLENBQUM7SUFDSixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBNY3BBdXRoQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB0eXBlIHsgTWNwT0F1dGhIYW5kbGVyLCBNY3BPQXV0aFJlc3BvbnNlIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogRmFjdG9yeSBmb3IgdGhlIGAvLndlbGwta25vd24vb2F1dGgtcHJvdGVjdGVkLXJlc291cmNlYCBlbmRwb2ludCAoUkZDIDk3MjgpLlxuICogUmV0dXJucyB0aGUgcmVzb3VyY2UgaWRlbnRpZmllciBhbmQgYXV0aG9yaXphdGlvbiBzZXJ2ZXJzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvdGVjdGVkUmVzb3VyY2VIYW5kbGVyKGNvbmZpZzogTWNwQXV0aENvbmZpZyk6IE1jcE9BdXRoSGFuZGxlciB7XG4gIHJldHVybiBhc3luYyAoZXZlbnQpOiBQcm9taXNlPE1jcE9BdXRoUmVzcG9uc2U+ID0+IHtcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7XG4gICAgICBldmVudDogJ29hdXRoLXByb3RlY3RlZC1yZXNvdXJjZScsXG4gICAgICBtZXRob2Q6IGV2ZW50Lmh0dHBNZXRob2QsXG4gICAgICBwYXRoOiBldmVudC5wYXRoLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICByZXNvdXJjZTogYGh0dHBzOi8vJHtjb25maWcuYXBpRG9tYWlufS9tY3BgLFxuICAgICAgYXV0aG9yaXphdGlvbl9zZXJ2ZXJzOiBbYGh0dHBzOi8vJHtjb25maWcuYXBpRG9tYWlufWBdLFxuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzQ29kZTogMjAwLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICB9O1xuICB9O1xufVxuIl19
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { McpAuthConfig } from '../config';
|
|
2
|
+
import type { McpOAuthHandler } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Factory for the `/oauth/register` endpoint (RFC 7591 simplified).
|
|
5
|
+
* Validates redirect URIs against the allowlist and returns the pre-provisioned client_id.
|
|
6
|
+
*/
|
|
7
|
+
export declare function createRegisterHandler(config: McpAuthConfig): McpOAuthHandler;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createRegisterHandler = createRegisterHandler;
|
|
4
|
+
const validate_redirect_uris_1 = require("./validate-redirect-uris");
|
|
5
|
+
/**
|
|
6
|
+
* Factory for the `/oauth/register` endpoint (RFC 7591 simplified).
|
|
7
|
+
* Validates redirect URIs against the allowlist and returns the pre-provisioned client_id.
|
|
8
|
+
*/
|
|
9
|
+
function createRegisterHandler(config) {
|
|
10
|
+
return async (event) => {
|
|
11
|
+
console.log(JSON.stringify({
|
|
12
|
+
event: 'register-oauth-client',
|
|
13
|
+
method: event.httpMethod,
|
|
14
|
+
path: event.path,
|
|
15
|
+
}));
|
|
16
|
+
// Parse body
|
|
17
|
+
const rawBody = event.isBase64Encoded
|
|
18
|
+
? Buffer.from(event.body ?? '', 'base64').toString('utf-8')
|
|
19
|
+
: (event.body ?? '');
|
|
20
|
+
let data;
|
|
21
|
+
try {
|
|
22
|
+
data = typeof rawBody === 'string' ? JSON.parse(rawBody) : rawBody;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return {
|
|
26
|
+
statusCode: 400,
|
|
27
|
+
headers: { 'Content-Type': 'application/json' },
|
|
28
|
+
body: JSON.stringify({ error: 'invalid_request', error_description: 'Malformed JSON body' }),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
if (data === null || typeof data !== 'object' || Array.isArray(data)) {
|
|
32
|
+
return {
|
|
33
|
+
statusCode: 400,
|
|
34
|
+
headers: { 'Content-Type': 'application/json' },
|
|
35
|
+
body: JSON.stringify({ error: 'invalid_request', error_description: 'Request body must be a JSON object' }),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
const redirectUris = data.redirect_uris;
|
|
39
|
+
const clientName = data.client_name ?? 'MCP Connector';
|
|
40
|
+
if (!redirectUris || !Array.isArray(redirectUris) || redirectUris.length === 0) {
|
|
41
|
+
return {
|
|
42
|
+
statusCode: 400,
|
|
43
|
+
headers: { 'Content-Type': 'application/json' },
|
|
44
|
+
body: JSON.stringify({ error: 'invalid_request', error_description: 'redirect_uris is required' }),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
if (!(0, validate_redirect_uris_1.validateRedirectUris)(redirectUris, config.allowedRedirectUris)) {
|
|
48
|
+
return {
|
|
49
|
+
statusCode: 400,
|
|
50
|
+
headers: { 'Content-Type': 'application/json' },
|
|
51
|
+
body: JSON.stringify({ error: 'invalid_redirect_uri', error_description: 'One or more redirect_uris are not allowed' }),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
const response = {
|
|
55
|
+
client_id: config.clientId,
|
|
56
|
+
client_name: clientName,
|
|
57
|
+
redirect_uris: redirectUris,
|
|
58
|
+
token_endpoint_auth_method: 'none',
|
|
59
|
+
};
|
|
60
|
+
console.log(JSON.stringify({ event: 'register-oauth-client-response', status: 201, body: response }));
|
|
61
|
+
return {
|
|
62
|
+
statusCode: 201,
|
|
63
|
+
headers: { 'Content-Type': 'application/json' },
|
|
64
|
+
body: JSON.stringify(response),
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWNwLWF1dGgvaGFuZGxlcnMvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFRQSxzREFrRUM7QUF4RUQscUVBQWdFO0FBRWhFOzs7R0FHRztBQUNILFNBQWdCLHFCQUFxQixDQUFDLE1BQXFCO0lBQ3pELE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBNkIsRUFBRTtRQUNoRCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDekIsS0FBSyxFQUFFLHVCQUF1QjtZQUM5QixNQUFNLEVBQUUsS0FBSyxDQUFDLFVBQVU7WUFDeEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1NBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBRUosYUFBYTtRQUNiLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxlQUFlO1lBQ25DLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7WUFDM0QsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztRQUV2QixJQUFJLElBQTZCLENBQUM7UUFDbEMsSUFBSSxDQUFDO1lBQ0gsSUFBSSxHQUFHLE9BQU8sT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3JFLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPO2dCQUNMLFVBQVUsRUFBRSxHQUFHO2dCQUNmLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRTtnQkFDL0MsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsQ0FBQzthQUM3RixDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3JFLE9BQU87Z0JBQ0wsVUFBVSxFQUFFLEdBQUc7Z0JBQ2YsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFO2dCQUMvQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxvQ0FBb0MsRUFBRSxDQUFDO2FBQzVHLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQXFDLENBQUM7UUFDaEUsTUFBTSxVQUFVLEdBQUksSUFBSSxDQUFDLFdBQXNCLElBQUksZUFBZSxDQUFDO1FBRW5FLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0UsT0FBTztnQkFDTCxVQUFVLEVBQUUsR0FBRztnQkFDZixPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUU7Z0JBQy9DLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLDJCQUEyQixFQUFFLENBQUM7YUFDbkcsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBQSw2Q0FBb0IsRUFBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztZQUNwRSxPQUFPO2dCQUNMLFVBQVUsRUFBRSxHQUFHO2dCQUNmLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRTtnQkFDL0MsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsaUJBQWlCLEVBQUUsMkNBQTJDLEVBQUUsQ0FBQzthQUN4SCxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHO1lBQ2YsU0FBUyxFQUFFLE1BQU0sQ0FBQyxRQUFRO1lBQzFCLFdBQVcsRUFBRSxVQUFVO1lBQ3ZCLGFBQWEsRUFBRSxZQUFZO1lBQzNCLDBCQUEwQixFQUFFLE1BQU07U0FDbkMsQ0FBQztRQUVGLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFdEcsT0FBTztZQUNMLFVBQVUsRUFBRSxHQUFHO1lBQ2YsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFO1lBQy9DLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztTQUMvQixDQUFDO0lBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTWNwQXV0aENvbmZpZyB9IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQgdHlwZSB7IE1jcE9BdXRoSGFuZGxlciwgTWNwT0F1dGhSZXNwb25zZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVSZWRpcmVjdFVyaXMgfSBmcm9tICcuL3ZhbGlkYXRlLXJlZGlyZWN0LXVyaXMnO1xuXG4vKipcbiAqIEZhY3RvcnkgZm9yIHRoZSBgL29hdXRoL3JlZ2lzdGVyYCBlbmRwb2ludCAoUkZDIDc1OTEgc2ltcGxpZmllZCkuXG4gKiBWYWxpZGF0ZXMgcmVkaXJlY3QgVVJJcyBhZ2FpbnN0IHRoZSBhbGxvd2xpc3QgYW5kIHJldHVybnMgdGhlIHByZS1wcm92aXNpb25lZCBjbGllbnRfaWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWdpc3RlckhhbmRsZXIoY29uZmlnOiBNY3BBdXRoQ29uZmlnKTogTWNwT0F1dGhIYW5kbGVyIHtcbiAgcmV0dXJuIGFzeW5jIChldmVudCk6IFByb21pc2U8TWNwT0F1dGhSZXNwb25zZT4gPT4ge1xuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGV2ZW50OiAncmVnaXN0ZXItb2F1dGgtY2xpZW50JyxcbiAgICAgIG1ldGhvZDogZXZlbnQuaHR0cE1ldGhvZCxcbiAgICAgIHBhdGg6IGV2ZW50LnBhdGgsXG4gICAgfSkpO1xuXG4gICAgLy8gUGFyc2UgYm9keVxuICAgIGNvbnN0IHJhd0JvZHkgPSBldmVudC5pc0Jhc2U2NEVuY29kZWRcbiAgICAgID8gQnVmZmVyLmZyb20oZXZlbnQuYm9keSA/PyAnJywgJ2Jhc2U2NCcpLnRvU3RyaW5nKCd1dGYtOCcpXG4gICAgICA6IChldmVudC5ib2R5ID8/ICcnKTtcblxuICAgIGxldCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICB0cnkge1xuICAgICAgZGF0YSA9IHR5cGVvZiByYXdCb2R5ID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UocmF3Qm9keSkgOiByYXdCb2R5O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwLFxuICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBlcnJvcjogJ2ludmFsaWRfcmVxdWVzdCcsIGVycm9yX2Rlc2NyaXB0aW9uOiAnTWFsZm9ybWVkIEpTT04gYm9keScgfSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChkYXRhID09PSBudWxsIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXNDb2RlOiA0MDAsXG4gICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGVycm9yOiAnaW52YWxpZF9yZXF1ZXN0JywgZXJyb3JfZGVzY3JpcHRpb246ICdSZXF1ZXN0IGJvZHkgbXVzdCBiZSBhIEpTT04gb2JqZWN0JyB9KSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgcmVkaXJlY3RVcmlzID0gZGF0YS5yZWRpcmVjdF91cmlzIGFzIHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGNsaWVudE5hbWUgPSAoZGF0YS5jbGllbnRfbmFtZSBhcyBzdHJpbmcpID8/ICdNQ1AgQ29ubmVjdG9yJztcblxuICAgIGlmICghcmVkaXJlY3RVcmlzIHx8ICFBcnJheS5pc0FycmF5KHJlZGlyZWN0VXJpcykgfHwgcmVkaXJlY3RVcmlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwLFxuICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBlcnJvcjogJ2ludmFsaWRfcmVxdWVzdCcsIGVycm9yX2Rlc2NyaXB0aW9uOiAncmVkaXJlY3RfdXJpcyBpcyByZXF1aXJlZCcgfSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICghdmFsaWRhdGVSZWRpcmVjdFVyaXMocmVkaXJlY3RVcmlzLCBjb25maWcuYWxsb3dlZFJlZGlyZWN0VXJpcykpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMCxcbiAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgZXJyb3I6ICdpbnZhbGlkX3JlZGlyZWN0X3VyaScsIGVycm9yX2Rlc2NyaXB0aW9uOiAnT25lIG9yIG1vcmUgcmVkaXJlY3RfdXJpcyBhcmUgbm90IGFsbG93ZWQnIH0pLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgIGNsaWVudF9pZDogY29uZmlnLmNsaWVudElkLFxuICAgICAgY2xpZW50X25hbWU6IGNsaWVudE5hbWUsXG4gICAgICByZWRpcmVjdF91cmlzOiByZWRpcmVjdFVyaXMsXG4gICAgICB0b2tlbl9lbmRwb2ludF9hdXRoX21ldGhvZDogJ25vbmUnLFxuICAgIH07XG5cbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IGV2ZW50OiAncmVnaXN0ZXItb2F1dGgtY2xpZW50LXJlc3BvbnNlJywgc3RhdHVzOiAyMDEsIGJvZHk6IHJlc3BvbnNlIH0pKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXNDb2RlOiAyMDEsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlKSxcbiAgICB9O1xuICB9O1xufVxuIl19
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { McpAuthConfig } from '../config';
|
|
2
|
+
import type { McpOAuthHandler } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Factory for the `/oauth/token` proxy endpoint.
|
|
5
|
+
* Forwards token exchange to the upstream token endpoint,
|
|
6
|
+
* stripping configured parameters from the request body.
|
|
7
|
+
*/
|
|
8
|
+
export declare function createTokenHandler(config: McpAuthConfig): McpOAuthHandler;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createTokenHandler = createTokenHandler;
|
|
4
|
+
const ALLOWED_GRANT_TYPES = ['authorization_code', 'refresh_token'];
|
|
5
|
+
/**
|
|
6
|
+
* Factory for the `/oauth/token` proxy endpoint.
|
|
7
|
+
* Forwards token exchange to the upstream token endpoint,
|
|
8
|
+
* stripping configured parameters from the request body.
|
|
9
|
+
*/
|
|
10
|
+
function createTokenHandler(config) {
|
|
11
|
+
return async (event) => {
|
|
12
|
+
const tokenUrl = config.tokenEndpoint;
|
|
13
|
+
// Decode body if base64-encoded
|
|
14
|
+
const rawBody = event.isBase64Encoded
|
|
15
|
+
? Buffer.from(event.body ?? '', 'base64').toString('utf-8')
|
|
16
|
+
: (event.body ?? '');
|
|
17
|
+
// Parse form-encoded body and strip unsupported parameters
|
|
18
|
+
const params = new URLSearchParams(rawBody);
|
|
19
|
+
const stripParamsList = config.stripParameters ?? ['resource'];
|
|
20
|
+
for (const param of stripParamsList) {
|
|
21
|
+
params.delete(param);
|
|
22
|
+
}
|
|
23
|
+
// Validate grant_type
|
|
24
|
+
const grantType = params.get('grant_type');
|
|
25
|
+
if (!grantType || !ALLOWED_GRANT_TYPES.includes(grantType)) {
|
|
26
|
+
return {
|
|
27
|
+
statusCode: 400,
|
|
28
|
+
headers: { 'Content-Type': 'application/json' },
|
|
29
|
+
body: JSON.stringify({ error: 'unsupported_grant_type', error_description: `grant_type must be one of: ${ALLOWED_GRANT_TYPES.join(', ')}` }),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
const body = params.toString();
|
|
33
|
+
console.log(JSON.stringify({
|
|
34
|
+
event: 'oauth-token-proxy',
|
|
35
|
+
tokenUrl,
|
|
36
|
+
grantType,
|
|
37
|
+
}));
|
|
38
|
+
let responseBody;
|
|
39
|
+
let statusCode;
|
|
40
|
+
const controller = new AbortController();
|
|
41
|
+
const timeout = setTimeout(() => controller.abort(), 10000);
|
|
42
|
+
try {
|
|
43
|
+
const response = await fetch(tokenUrl, {
|
|
44
|
+
method: 'POST',
|
|
45
|
+
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
46
|
+
body,
|
|
47
|
+
signal: controller.signal,
|
|
48
|
+
});
|
|
49
|
+
responseBody = await response.text();
|
|
50
|
+
statusCode = response.status;
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
console.log(JSON.stringify({ event: 'oauth-token-proxy-error', error: err.message }));
|
|
54
|
+
return {
|
|
55
|
+
statusCode: 502,
|
|
56
|
+
headers: { 'Content-Type': 'application/json' },
|
|
57
|
+
body: JSON.stringify({ error: 'upstream_error', error_description: 'Token endpoint unreachable' }),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
clearTimeout(timeout);
|
|
62
|
+
}
|
|
63
|
+
console.log(JSON.stringify({
|
|
64
|
+
event: 'oauth-token-proxy-response',
|
|
65
|
+
status: statusCode,
|
|
66
|
+
}));
|
|
67
|
+
return {
|
|
68
|
+
statusCode,
|
|
69
|
+
headers: { 'Content-Type': 'application/json' },
|
|
70
|
+
body: responseBody,
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWNwLWF1dGgvaGFuZGxlcnMvdG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFVQSxnREFxRUM7QUE1RUQsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLG9CQUFvQixFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBRXBFOzs7O0dBSUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxNQUFxQjtJQUN0RCxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQTZCLEVBQUU7UUFDaEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztRQUV0QyxnQ0FBZ0M7UUFDaEMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLGVBQWU7WUFDbkMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUMzRCxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRXZCLDJEQUEyRDtRQUMzRCxNQUFNLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsZUFBZSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0QsS0FBSyxNQUFNLEtBQUssSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNwQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7UUFFRCxzQkFBc0I7UUFDdEIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDM0QsT0FBTztnQkFDTCxVQUFVLEVBQUUsR0FBRztnQkFDZixPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUU7Z0JBQy9DLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLHdCQUF3QixFQUFFLGlCQUFpQixFQUFFLDhCQUE4QixtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO2FBQzdJLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRS9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUN6QixLQUFLLEVBQUUsbUJBQW1CO1lBQzFCLFFBQVE7WUFDUixTQUFTO1NBQ1YsQ0FBQyxDQUFDLENBQUM7UUFFSixJQUFJLFlBQW9CLENBQUM7UUFDekIsSUFBSSxVQUFrQixDQUFDO1FBQ3ZCLE1BQU0sVUFBVSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFDekMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxLQUFNLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxRQUFRLEVBQUU7Z0JBQ3JDLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxtQ0FBbUMsRUFBRTtnQkFDaEUsSUFBSTtnQkFDSixNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07YUFDMUIsQ0FBQyxDQUFDO1lBQ0gsWUFBWSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3JDLFVBQVUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQy9CLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLHlCQUF5QixFQUFFLEtBQUssRUFBRyxHQUFhLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2pHLE9BQU87Z0JBQ0wsVUFBVSxFQUFFLEdBQUc7Z0JBQ2YsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFO2dCQUMvQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSw0QkFBNEIsRUFBRSxDQUFDO2FBQ25HLENBQUM7UUFDSixDQUFDO2dCQUFTLENBQUM7WUFDVCxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEIsQ0FBQztRQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUN6QixLQUFLLEVBQUUsNEJBQTRCO1lBQ25DLE1BQU0sRUFBRSxVQUFVO1NBQ25CLENBQUMsQ0FBQyxDQUFDO1FBRUosT0FBTztZQUNMLFVBQVU7WUFDVixPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUU7WUFDL0MsSUFBSSxFQUFFLFlBQVk7U0FDbkIsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE1jcEF1dGhDb25maWcgfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHR5cGUgeyBNY3BPQXV0aEhhbmRsZXIsIE1jcE9BdXRoUmVzcG9uc2UgfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgQUxMT1dFRF9HUkFOVF9UWVBFUyA9IFsnYXV0aG9yaXphdGlvbl9jb2RlJywgJ3JlZnJlc2hfdG9rZW4nXTtcblxuLyoqXG4gKiBGYWN0b3J5IGZvciB0aGUgYC9vYXV0aC90b2tlbmAgcHJveHkgZW5kcG9pbnQuXG4gKiBGb3J3YXJkcyB0b2tlbiBleGNoYW5nZSB0byB0aGUgdXBzdHJlYW0gdG9rZW4gZW5kcG9pbnQsXG4gKiBzdHJpcHBpbmcgY29uZmlndXJlZCBwYXJhbWV0ZXJzIGZyb20gdGhlIHJlcXVlc3QgYm9keS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRva2VuSGFuZGxlcihjb25maWc6IE1jcEF1dGhDb25maWcpOiBNY3BPQXV0aEhhbmRsZXIge1xuICByZXR1cm4gYXN5bmMgKGV2ZW50KTogUHJvbWlzZTxNY3BPQXV0aFJlc3BvbnNlPiA9PiB7XG4gICAgY29uc3QgdG9rZW5VcmwgPSBjb25maWcudG9rZW5FbmRwb2ludDtcblxuICAgIC8vIERlY29kZSBib2R5IGlmIGJhc2U2NC1lbmNvZGVkXG4gICAgY29uc3QgcmF3Qm9keSA9IGV2ZW50LmlzQmFzZTY0RW5jb2RlZFxuICAgICAgPyBCdWZmZXIuZnJvbShldmVudC5ib2R5ID8/ICcnLCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0Zi04JylcbiAgICAgIDogKGV2ZW50LmJvZHkgPz8gJycpO1xuXG4gICAgLy8gUGFyc2UgZm9ybS1lbmNvZGVkIGJvZHkgYW5kIHN0cmlwIHVuc3VwcG9ydGVkIHBhcmFtZXRlcnNcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHJhd0JvZHkpO1xuICAgIGNvbnN0IHN0cmlwUGFyYW1zTGlzdCA9IGNvbmZpZy5zdHJpcFBhcmFtZXRlcnMgPz8gWydyZXNvdXJjZSddO1xuICAgIGZvciAoY29uc3QgcGFyYW0gb2Ygc3RyaXBQYXJhbXNMaXN0KSB7XG4gICAgICBwYXJhbXMuZGVsZXRlKHBhcmFtKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBncmFudF90eXBlXG4gICAgY29uc3QgZ3JhbnRUeXBlID0gcGFyYW1zLmdldCgnZ3JhbnRfdHlwZScpO1xuICAgIGlmICghZ3JhbnRUeXBlIHx8ICFBTExPV0VEX0dSQU5UX1RZUEVTLmluY2x1ZGVzKGdyYW50VHlwZSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMCxcbiAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgZXJyb3I6ICd1bnN1cHBvcnRlZF9ncmFudF90eXBlJywgZXJyb3JfZGVzY3JpcHRpb246IGBncmFudF90eXBlIG11c3QgYmUgb25lIG9mOiAke0FMTE9XRURfR1JBTlRfVFlQRVMuam9pbignLCAnKX1gIH0pLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBib2R5ID0gcGFyYW1zLnRvU3RyaW5nKCk7XG5cbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7XG4gICAgICBldmVudDogJ29hdXRoLXRva2VuLXByb3h5JyxcbiAgICAgIHRva2VuVXJsLFxuICAgICAgZ3JhbnRUeXBlLFxuICAgIH0pKTtcblxuICAgIGxldCByZXNwb25zZUJvZHk6IHN0cmluZztcbiAgICBsZXQgc3RhdHVzQ29kZTogbnVtYmVyO1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCAxMF8wMDApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHRva2VuVXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyB9LFxuICAgICAgICBib2R5LFxuICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgfSk7XG4gICAgICByZXNwb25zZUJvZHkgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICBzdGF0dXNDb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoeyBldmVudDogJ29hdXRoLXRva2VuLXByb3h5LWVycm9yJywgZXJyb3I6IChlcnIgYXMgRXJyb3IpLm1lc3NhZ2UgfSkpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzQ29kZTogNTAyLFxuICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBlcnJvcjogJ3Vwc3RyZWFtX2Vycm9yJywgZXJyb3JfZGVzY3JpcHRpb246ICdUb2tlbiBlbmRwb2ludCB1bnJlYWNoYWJsZScgfSksXG4gICAgICB9O1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgZXZlbnQ6ICdvYXV0aC10b2tlbi1wcm94eS1yZXNwb25zZScsXG4gICAgICBzdGF0dXM6IHN0YXR1c0NvZGUsXG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1c0NvZGUsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IHJlc3BvbnNlQm9keSxcbiAgICB9O1xuICB9O1xufVxuIl19
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A generic Lambda-like handler: receives an event (simplified) and returns
|
|
3
|
+
* a response with statusCode, headers, and body.
|
|
4
|
+
*/
|
|
5
|
+
export interface McpOAuthResponse {
|
|
6
|
+
statusCode: number;
|
|
7
|
+
headers: Record<string, string>;
|
|
8
|
+
body?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface McpOAuthEvent {
|
|
11
|
+
httpMethod: string;
|
|
12
|
+
path: string;
|
|
13
|
+
headers: Record<string, string | undefined>;
|
|
14
|
+
queryStringParameters: Record<string, string | undefined> | null;
|
|
15
|
+
body: string | null;
|
|
16
|
+
isBase64Encoded: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Handler function signature returned by all factories.
|
|
20
|
+
*/
|
|
21
|
+
export type McpOAuthHandler = (event: McpOAuthEvent) => Promise<McpOAuthResponse>;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWNwLWF1dGgvaGFuZGxlcnMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQSBnZW5lcmljIExhbWJkYS1saWtlIGhhbmRsZXI6IHJlY2VpdmVzIGFuIGV2ZW50IChzaW1wbGlmaWVkKSBhbmQgcmV0dXJuc1xuICogYSByZXNwb25zZSB3aXRoIHN0YXR1c0NvZGUsIGhlYWRlcnMsIGFuZCBib2R5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1jcE9BdXRoUmVzcG9uc2Uge1xuICBzdGF0dXNDb2RlOiBudW1iZXI7XG4gIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGJvZHk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWNwT0F1dGhFdmVudCB7XG4gIGh0dHBNZXRob2Q6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICBxdWVyeVN0cmluZ1BhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4gfCBudWxsO1xuICBib2R5OiBzdHJpbmcgfCBudWxsO1xuICBpc0Jhc2U2NEVuY29kZWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogSGFuZGxlciBmdW5jdGlvbiBzaWduYXR1cmUgcmV0dXJuZWQgYnkgYWxsIGZhY3Rvcmllcy5cbiAqL1xuZXhwb3J0IHR5cGUgTWNwT0F1dGhIYW5kbGVyID0gKGV2ZW50OiBNY3BPQXV0aEV2ZW50KSA9PiBQcm9taXNlPE1jcE9BdXRoUmVzcG9uc2U+O1xuIl19
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default allowlisted redirect URIs for MCP connector registration.
|
|
3
|
+
* These cover the most common MCP-compatible clients.
|
|
4
|
+
*/
|
|
5
|
+
export declare const DEFAULT_ALLOWED_REDIRECT_URIS: readonly string[];
|
|
6
|
+
/**
|
|
7
|
+
* Returns true if every URI in the list is on the allowlist.
|
|
8
|
+
* Uses the provided allowlist or falls back to the default.
|
|
9
|
+
*/
|
|
10
|
+
export declare function validateRedirectUris(uris: string[], allowlist?: readonly string[]): boolean;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_ALLOWED_REDIRECT_URIS = void 0;
|
|
4
|
+
exports.validateRedirectUris = validateRedirectUris;
|
|
5
|
+
/**
|
|
6
|
+
* Default allowlisted redirect URIs for MCP connector registration.
|
|
7
|
+
* These cover the most common MCP-compatible clients.
|
|
8
|
+
*/
|
|
9
|
+
exports.DEFAULT_ALLOWED_REDIRECT_URIS = [
|
|
10
|
+
'https://claude.ai/oauth/callback',
|
|
11
|
+
'https://claude.ai/api/mcp/auth_callback',
|
|
12
|
+
'https://chatgpt.com/oauth/callback',
|
|
13
|
+
];
|
|
14
|
+
/**
|
|
15
|
+
* Returns true if every URI in the list is on the allowlist.
|
|
16
|
+
* Uses the provided allowlist or falls back to the default.
|
|
17
|
+
*/
|
|
18
|
+
function validateRedirectUris(uris, allowlist) {
|
|
19
|
+
const list = allowlist ?? exports.DEFAULT_ALLOWED_REDIRECT_URIS;
|
|
20
|
+
return uris.every(uri => list.includes(uri));
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtcmVkaXJlY3QtdXJpcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tY3AtYXV0aC9oYW5kbGVycy92YWxpZGF0ZS1yZWRpcmVjdC11cmlzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWNBLG9EQUdDO0FBakJEOzs7R0FHRztBQUNVLFFBQUEsNkJBQTZCLEdBQXNCO0lBQzlELGtDQUFrQztJQUNsQyx5Q0FBeUM7SUFDekMsb0NBQW9DO0NBQ3JDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxTQUFnQixvQkFBb0IsQ0FBQyxJQUFjLEVBQUUsU0FBNkI7SUFDaEYsTUFBTSxJQUFJLEdBQUcsU0FBUyxJQUFJLHFDQUE2QixDQUFDO0lBQ3hELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEZWZhdWx0IGFsbG93bGlzdGVkIHJlZGlyZWN0IFVSSXMgZm9yIE1DUCBjb25uZWN0b3IgcmVnaXN0cmF0aW9uLlxuICogVGhlc2UgY292ZXIgdGhlIG1vc3QgY29tbW9uIE1DUC1jb21wYXRpYmxlIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FMTE9XRURfUkVESVJFQ1RfVVJJUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbXG4gICdodHRwczovL2NsYXVkZS5haS9vYXV0aC9jYWxsYmFjaycsXG4gICdodHRwczovL2NsYXVkZS5haS9hcGkvbWNwL2F1dGhfY2FsbGJhY2snLFxuICAnaHR0cHM6Ly9jaGF0Z3B0LmNvbS9vYXV0aC9jYWxsYmFjaycsXG5dO1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBldmVyeSBVUkkgaW4gdGhlIGxpc3QgaXMgb24gdGhlIGFsbG93bGlzdC5cbiAqIFVzZXMgdGhlIHByb3ZpZGVkIGFsbG93bGlzdCBvciBmYWxscyBiYWNrIHRvIHRoZSBkZWZhdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVSZWRpcmVjdFVyaXModXJpczogc3RyaW5nW10sIGFsbG93bGlzdD86IHJlYWRvbmx5IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gIGNvbnN0IGxpc3QgPSBhbGxvd2xpc3QgPz8gREVGQVVMVF9BTExPV0VEX1JFRElSRUNUX1VSSVM7XG4gIHJldHVybiB1cmlzLmV2ZXJ5KHVyaSA9PiBsaXN0LmluY2x1ZGVzKHVyaSkpO1xufVxuIl19
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./config"), exports);
|
|
18
|
+
__exportStar(require("./handlers"), exports);
|
|
19
|
+
__exportStar(require("./mcp"), exports);
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWNwLWF1dGgvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUF5QjtBQUN6Qiw2Q0FBMkI7QUFDM0Isd0NBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi9oYW5kbGVycyc7XG5leHBvcnQgKiBmcm9tICcuL21jcCc7XG4iXX0=
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.lambdaHandler = lambdaHandler;
|
|
4
|
+
exports.handler = lambdaHandler;
|
|
5
|
+
const env_config_1 = require("./env-config");
|
|
6
|
+
const authorization_server_1 = require("../handlers/authorization-server");
|
|
7
|
+
const handler = (0, authorization_server_1.createAuthorizationServerHandler)((0, env_config_1.getConfigFromEnv)());
|
|
8
|
+
async function lambdaHandler(event) {
|
|
9
|
+
const result = await handler({
|
|
10
|
+
httpMethod: event.httpMethod,
|
|
11
|
+
path: event.path,
|
|
12
|
+
headers: event.headers,
|
|
13
|
+
queryStringParameters: event.queryStringParameters,
|
|
14
|
+
body: event.body,
|
|
15
|
+
isBase64Encoded: event.isBase64Encoded,
|
|
16
|
+
});
|
|
17
|
+
return {
|
|
18
|
+
statusCode: result.statusCode,
|
|
19
|
+
headers: result.headers,
|
|
20
|
+
body: result.body ?? '',
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXphdGlvbi1zZXJ2ZXIuaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tY3AtYXV0aC9sYW1iZGEtaGFuZGxlcnMvYXV0aG9yaXphdGlvbi1zZXJ2ZXIuaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUtBLHNDQWVDO0FBRXlCLGdDQUFPO0FBdEJqQyw2Q0FBZ0Q7QUFDaEQsMkVBQW9GO0FBRXBGLE1BQU0sT0FBTyxHQUFHLElBQUEsdURBQWdDLEVBQUMsSUFBQSw2QkFBZ0IsR0FBRSxDQUFDLENBQUM7QUFFOUQsS0FBSyxVQUFVLGFBQWEsQ0FBQyxLQUFxQztJQUN2RSxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQztRQUMzQixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7UUFDNUIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1FBQ2hCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBNkM7UUFDNUQscUJBQXFCLEVBQUUsS0FBSyxDQUFDLHFCQUFrRTtRQUMvRixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7UUFDaEIsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlO0tBQ3ZDLENBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7UUFDN0IsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1FBQ3ZCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUU7S0FDeEIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRDb25maWdGcm9tRW52IH0gZnJvbSAnLi9lbnYtY29uZmlnJztcbmltcG9ydCB7IGNyZWF0ZUF1dGhvcml6YXRpb25TZXJ2ZXJIYW5kbGVyIH0gZnJvbSAnLi4vaGFuZGxlcnMvYXV0aG9yaXphdGlvbi1zZXJ2ZXInO1xuXG5jb25zdCBoYW5kbGVyID0gY3JlYXRlQXV0aG9yaXphdGlvblNlcnZlckhhbmRsZXIoZ2V0Q29uZmlnRnJvbUVudigpKTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxhbWJkYUhhbmRsZXIoZXZlbnQ6IEFXU0xhbWJkYS5BUElHYXRld2F5UHJveHlFdmVudCk6IFByb21pc2U8QVdTTGFtYmRhLkFQSUdhdGV3YXlQcm94eVJlc3VsdD4ge1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyKHtcbiAgICBodHRwTWV0aG9kOiBldmVudC5odHRwTWV0aG9kLFxuICAgIHBhdGg6IGV2ZW50LnBhdGgsXG4gICAgaGVhZGVyczogZXZlbnQuaGVhZGVycyBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+LFxuICAgIHF1ZXJ5U3RyaW5nUGFyYW1ldGVyczogZXZlbnQucXVlcnlTdHJpbmdQYXJhbWV0ZXJzIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4gfCBudWxsLFxuICAgIGJvZHk6IGV2ZW50LmJvZHksXG4gICAgaXNCYXNlNjRFbmNvZGVkOiBldmVudC5pc0Jhc2U2NEVuY29kZWQsXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgc3RhdHVzQ29kZTogcmVzdWx0LnN0YXR1c0NvZGUsXG4gICAgaGVhZGVyczogcmVzdWx0LmhlYWRlcnMsXG4gICAgYm9keTogcmVzdWx0LmJvZHkgPz8gJycsXG4gIH07XG59XG5cbmV4cG9ydCB7IGxhbWJkYUhhbmRsZXIgYXMgaGFuZGxlciB9O1xuIl19
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.lambdaHandler = lambdaHandler;
|
|
4
|
+
exports.handler = lambdaHandler;
|
|
5
|
+
const env_config_1 = require("./env-config");
|
|
6
|
+
const authorize_1 = require("../handlers/authorize");
|
|
7
|
+
const handler = (0, authorize_1.createAuthorizeHandler)((0, env_config_1.getConfigFromEnv)());
|
|
8
|
+
async function lambdaHandler(event) {
|
|
9
|
+
const result = await handler({
|
|
10
|
+
httpMethod: event.httpMethod,
|
|
11
|
+
path: event.path,
|
|
12
|
+
headers: event.headers,
|
|
13
|
+
queryStringParameters: event.queryStringParameters,
|
|
14
|
+
body: event.body,
|
|
15
|
+
isBase64Encoded: event.isBase64Encoded,
|
|
16
|
+
});
|
|
17
|
+
return {
|
|
18
|
+
statusCode: result.statusCode,
|
|
19
|
+
headers: result.headers,
|
|
20
|
+
body: result.body ?? '',
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXplLmhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWNwLWF1dGgvbGFtYmRhLWhhbmRsZXJzL2F1dGhvcml6ZS5oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBS0Esc0NBZUM7QUFFeUIsZ0NBQU87QUF0QmpDLDZDQUFnRDtBQUNoRCxxREFBK0Q7QUFFL0QsTUFBTSxPQUFPLEdBQUcsSUFBQSxrQ0FBc0IsRUFBQyxJQUFBLDZCQUFnQixHQUFFLENBQUMsQ0FBQztBQUVwRCxLQUFLLFVBQVUsYUFBYSxDQUFDLEtBQXFDO0lBQ3ZFLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDO1FBQzNCLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtRQUM1QixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7UUFDaEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUE2QztRQUM1RCxxQkFBcUIsRUFBRSxLQUFLLENBQUMscUJBQWtFO1FBQy9GLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtRQUNoQixlQUFlLEVBQUUsS0FBSyxDQUFDLGVBQWU7S0FDdkMsQ0FBQyxDQUFDO0lBRUgsT0FBTztRQUNMLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtRQUM3QixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87UUFDdkIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRTtLQUN4QixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldENvbmZpZ0Zyb21FbnYgfSBmcm9tICcuL2Vudi1jb25maWcnO1xuaW1wb3J0IHsgY3JlYXRlQXV0aG9yaXplSGFuZGxlciB9IGZyb20gJy4uL2hhbmRsZXJzL2F1dGhvcml6ZSc7XG5cbmNvbnN0IGhhbmRsZXIgPSBjcmVhdGVBdXRob3JpemVIYW5kbGVyKGdldENvbmZpZ0Zyb21FbnYoKSk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsYW1iZGFIYW5kbGVyKGV2ZW50OiBBV1NMYW1iZGEuQVBJR2F0ZXdheVByb3h5RXZlbnQpOiBQcm9taXNlPEFXU0xhbWJkYS5BUElHYXRld2F5UHJveHlSZXN1bHQ+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlcih7XG4gICAgaHR0cE1ldGhvZDogZXZlbnQuaHR0cE1ldGhvZCxcbiAgICBwYXRoOiBldmVudC5wYXRoLFxuICAgIGhlYWRlcnM6IGV2ZW50LmhlYWRlcnMgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPixcbiAgICBxdWVyeVN0cmluZ1BhcmFtZXRlcnM6IGV2ZW50LnF1ZXJ5U3RyaW5nUGFyYW1ldGVycyBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+IHwgbnVsbCxcbiAgICBib2R5OiBldmVudC5ib2R5LFxuICAgIGlzQmFzZTY0RW5jb2RlZDogZXZlbnQuaXNCYXNlNjRFbmNvZGVkLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHN0YXR1c0NvZGU6IHJlc3VsdC5zdGF0dXNDb2RlLFxuICAgIGhlYWRlcnM6IHJlc3VsdC5oZWFkZXJzLFxuICAgIGJvZHk6IHJlc3VsdC5ib2R5ID8/ICcnLFxuICB9O1xufVxuXG5leHBvcnQgeyBsYW1iZGFIYW5kbGVyIGFzIGhhbmRsZXIgfTtcbiJdfQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { McpAuthConfig } from '../config';
|
|
2
|
+
/**
|
|
3
|
+
* Read MCP auth configuration from environment variables.
|
|
4
|
+
* Used by all Lambda handler entry points.
|
|
5
|
+
* Throws a descriptive error if any required env var is missing or empty.
|
|
6
|
+
*/
|
|
7
|
+
export declare function getConfigFromEnv(): McpAuthConfig;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getConfigFromEnv = getConfigFromEnv;
|
|
4
|
+
const REQUIRED_ENV_VARS = [
|
|
5
|
+
'MCP_API_DOMAIN',
|
|
6
|
+
'MCP_AUTHORIZE_ENDPOINT',
|
|
7
|
+
'MCP_TOKEN_ENDPOINT',
|
|
8
|
+
'MCP_CLIENT_ID',
|
|
9
|
+
'MCP_SERVER_NAME',
|
|
10
|
+
'MCP_SERVER_VERSION',
|
|
11
|
+
];
|
|
12
|
+
/**
|
|
13
|
+
* Read MCP auth configuration from environment variables.
|
|
14
|
+
* Used by all Lambda handler entry points.
|
|
15
|
+
* Throws a descriptive error if any required env var is missing or empty.
|
|
16
|
+
*/
|
|
17
|
+
function getConfigFromEnv() {
|
|
18
|
+
const missing = REQUIRED_ENV_VARS.filter(name => !process.env[name]);
|
|
19
|
+
if (missing.length > 0) {
|
|
20
|
+
throw new Error(`MCP Auth: missing required environment variables: ${missing.join(', ')}`);
|
|
21
|
+
}
|
|
22
|
+
return {
|
|
23
|
+
apiDomain: process.env.MCP_API_DOMAIN,
|
|
24
|
+
authorizeEndpoint: process.env.MCP_AUTHORIZE_ENDPOINT,
|
|
25
|
+
tokenEndpoint: process.env.MCP_TOKEN_ENDPOINT,
|
|
26
|
+
clientId: process.env.MCP_CLIENT_ID,
|
|
27
|
+
allowedRedirectUris: (process.env.MCP_ALLOWED_REDIRECT_URIS ?? '').split(',').filter(Boolean),
|
|
28
|
+
serverInfo: {
|
|
29
|
+
name: process.env.MCP_SERVER_NAME,
|
|
30
|
+
version: process.env.MCP_SERVER_VERSION,
|
|
31
|
+
},
|
|
32
|
+
protocolVersions: (process.env.MCP_PROTOCOL_VERSIONS ?? '').split(',').filter(Boolean),
|
|
33
|
+
scopes: (process.env.MCP_SCOPES ?? '').split(',').filter(Boolean),
|
|
34
|
+
stripParameters: (process.env.MCP_STRIP_PARAMETERS ?? 'resource').split(',').filter(Boolean),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tY3AtYXV0aC9sYW1iZGEtaGFuZGxlcnMvZW52LWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWdCQSw0Q0FvQkM7QUFsQ0QsTUFBTSxpQkFBaUIsR0FBRztJQUN4QixnQkFBZ0I7SUFDaEIsd0JBQXdCO0lBQ3hCLG9CQUFvQjtJQUNwQixlQUFlO0lBQ2YsaUJBQWlCO0lBQ2pCLG9CQUFvQjtDQUNaLENBQUM7QUFFWDs7OztHQUlHO0FBQ0gsU0FBZ0IsZ0JBQWdCO0lBQzlCLE1BQU0sT0FBTyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBRUQsT0FBTztRQUNMLFNBQVMsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWU7UUFDdEMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBdUI7UUFDdEQsYUFBYSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQW1CO1FBQzlDLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWM7UUFDcEMsbUJBQW1CLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQzdGLFVBQVUsRUFBRTtZQUNWLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWdCO1lBQ2xDLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFtQjtTQUN6QztRQUNELGdCQUFnQixFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUN0RixNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUNqRSxlQUFlLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixJQUFJLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO0tBQzdGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBNY3BBdXRoQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlnJztcblxuY29uc3QgUkVRVUlSRURfRU5WX1ZBUlMgPSBbXG4gICdNQ1BfQVBJX0RPTUFJTicsXG4gICdNQ1BfQVVUSE9SSVpFX0VORFBPSU5UJyxcbiAgJ01DUF9UT0tFTl9FTkRQT0lOVCcsXG4gICdNQ1BfQ0xJRU5UX0lEJyxcbiAgJ01DUF9TRVJWRVJfTkFNRScsXG4gICdNQ1BfU0VSVkVSX1ZFUlNJT04nLFxuXSBhcyBjb25zdDtcblxuLyoqXG4gKiBSZWFkIE1DUCBhdXRoIGNvbmZpZ3VyYXRpb24gZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKiBVc2VkIGJ5IGFsbCBMYW1iZGEgaGFuZGxlciBlbnRyeSBwb2ludHMuXG4gKiBUaHJvd3MgYSBkZXNjcmlwdGl2ZSBlcnJvciBpZiBhbnkgcmVxdWlyZWQgZW52IHZhciBpcyBtaXNzaW5nIG9yIGVtcHR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlnRnJvbUVudigpOiBNY3BBdXRoQ29uZmlnIHtcbiAgY29uc3QgbWlzc2luZyA9IFJFUVVJUkVEX0VOVl9WQVJTLmZpbHRlcihuYW1lID0+ICFwcm9jZXNzLmVudltuYW1lXSk7XG4gIGlmIChtaXNzaW5nLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1DUCBBdXRoOiBtaXNzaW5nIHJlcXVpcmVkIGVudmlyb25tZW50IHZhcmlhYmxlczogJHttaXNzaW5nLmpvaW4oJywgJyl9YCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFwaURvbWFpbjogcHJvY2Vzcy5lbnYuTUNQX0FQSV9ET01BSU4hLFxuICAgIGF1dGhvcml6ZUVuZHBvaW50OiBwcm9jZXNzLmVudi5NQ1BfQVVUSE9SSVpFX0VORFBPSU5UISxcbiAgICB0b2tlbkVuZHBvaW50OiBwcm9jZXNzLmVudi5NQ1BfVE9LRU5fRU5EUE9JTlQhLFxuICAgIGNsaWVudElkOiBwcm9jZXNzLmVudi5NQ1BfQ0xJRU5UX0lEISxcbiAgICBhbGxvd2VkUmVkaXJlY3RVcmlzOiAocHJvY2Vzcy5lbnYuTUNQX0FMTE9XRURfUkVESVJFQ1RfVVJJUyA/PyAnJykuc3BsaXQoJywnKS5maWx0ZXIoQm9vbGVhbiksXG4gICAgc2VydmVySW5mbzoge1xuICAgICAgbmFtZTogcHJvY2Vzcy5lbnYuTUNQX1NFUlZFUl9OQU1FISxcbiAgICAgIHZlcnNpb246IHByb2Nlc3MuZW52Lk1DUF9TRVJWRVJfVkVSU0lPTiEsXG4gICAgfSxcbiAgICBwcm90b2NvbFZlcnNpb25zOiAocHJvY2Vzcy5lbnYuTUNQX1BST1RPQ09MX1ZFUlNJT05TID8/ICcnKS5zcGxpdCgnLCcpLmZpbHRlcihCb29sZWFuKSxcbiAgICBzY29wZXM6IChwcm9jZXNzLmVudi5NQ1BfU0NPUEVTID8/ICcnKS5zcGxpdCgnLCcpLmZpbHRlcihCb29sZWFuKSxcbiAgICBzdHJpcFBhcmFtZXRlcnM6IChwcm9jZXNzLmVudi5NQ1BfU1RSSVBfUEFSQU1FVEVSUyA/PyAncmVzb3VyY2UnKS5zcGxpdCgnLCcpLmZpbHRlcihCb29sZWFuKSxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.lambdaHandler = lambdaHandler;
|
|
4
|
+
exports.handler = lambdaHandler;
|
|
5
|
+
const env_config_1 = require("./env-config");
|
|
6
|
+
const protected_resource_1 = require("../handlers/protected-resource");
|
|
7
|
+
const handler = (0, protected_resource_1.createProtectedResourceHandler)((0, env_config_1.getConfigFromEnv)());
|
|
8
|
+
async function lambdaHandler(event) {
|
|
9
|
+
const result = await handler({
|
|
10
|
+
httpMethod: event.httpMethod,
|
|
11
|
+
path: event.path,
|
|
12
|
+
headers: event.headers,
|
|
13
|
+
queryStringParameters: event.queryStringParameters,
|
|
14
|
+
body: event.body,
|
|
15
|
+
isBase64Encoded: event.isBase64Encoded,
|
|
16
|
+
});
|
|
17
|
+
return {
|
|
18
|
+
statusCode: result.statusCode,
|
|
19
|
+
headers: result.headers,
|
|
20
|
+
body: result.body ?? '',
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdGVjdGVkLXJlc291cmNlLmhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWNwLWF1dGgvbGFtYmRhLWhhbmRsZXJzL3Byb3RlY3RlZC1yZXNvdXJjZS5oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBS0Esc0NBZUM7QUFFeUIsZ0NBQU87QUF0QmpDLDZDQUFnRDtBQUNoRCx1RUFBZ0Y7QUFFaEYsTUFBTSxPQUFPLEdBQUcsSUFBQSxtREFBOEIsRUFBQyxJQUFBLDZCQUFnQixHQUFFLENBQUMsQ0FBQztBQUU1RCxLQUFLLFVBQVUsYUFBYSxDQUFDLEtBQXFDO0lBQ3ZFLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDO1FBQzNCLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtRQUM1QixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7UUFDaEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUE2QztRQUM1RCxxQkFBcUIsRUFBRSxLQUFLLENBQUMscUJBQWtFO1FBQy9GLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtRQUNoQixlQUFlLEVBQUUsS0FBSyxDQUFDLGVBQWU7S0FDdkMsQ0FBQyxDQUFDO0lBRUgsT0FBTztRQUNMLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtRQUM3QixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87UUFDdkIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRTtLQUN4QixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldENvbmZpZ0Zyb21FbnYgfSBmcm9tICcuL2Vudi1jb25maWcnO1xuaW1wb3J0IHsgY3JlYXRlUHJvdGVjdGVkUmVzb3VyY2VIYW5kbGVyIH0gZnJvbSAnLi4vaGFuZGxlcnMvcHJvdGVjdGVkLXJlc291cmNlJztcblxuY29uc3QgaGFuZGxlciA9IGNyZWF0ZVByb3RlY3RlZFJlc291cmNlSGFuZGxlcihnZXRDb25maWdGcm9tRW52KCkpO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGFtYmRhSGFuZGxlcihldmVudDogQVdTTGFtYmRhLkFQSUdhdGV3YXlQcm94eUV2ZW50KTogUHJvbWlzZTxBV1NMYW1iZGEuQVBJR2F0ZXdheVByb3h5UmVzdWx0PiB7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIoe1xuICAgIGh0dHBNZXRob2Q6IGV2ZW50Lmh0dHBNZXRob2QsXG4gICAgcGF0aDogZXZlbnQucGF0aCxcbiAgICBoZWFkZXJzOiBldmVudC5oZWFkZXJzIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4sXG4gICAgcXVlcnlTdHJpbmdQYXJhbWV0ZXJzOiBldmVudC5xdWVyeVN0cmluZ1BhcmFtZXRlcnMgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPiB8IG51bGwsXG4gICAgYm9keTogZXZlbnQuYm9keSxcbiAgICBpc0Jhc2U2NEVuY29kZWQ6IGV2ZW50LmlzQmFzZTY0RW5jb2RlZCxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzdGF0dXNDb2RlOiByZXN1bHQuc3RhdHVzQ29kZSxcbiAgICBoZWFkZXJzOiByZXN1bHQuaGVhZGVycyxcbiAgICBib2R5OiByZXN1bHQuYm9keSA/PyAnJyxcbiAgfTtcbn1cblxuZXhwb3J0IHsgbGFtYmRhSGFuZGxlciBhcyBoYW5kbGVyIH07XG4iXX0=
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.lambdaHandler = lambdaHandler;
|
|
4
|
+
exports.handler = lambdaHandler;
|
|
5
|
+
const env_config_1 = require("./env-config");
|
|
6
|
+
const register_1 = require("../handlers/register");
|
|
7
|
+
const handler = (0, register_1.createRegisterHandler)((0, env_config_1.getConfigFromEnv)());
|
|
8
|
+
async function lambdaHandler(event) {
|
|
9
|
+
const result = await handler({
|
|
10
|
+
httpMethod: event.httpMethod,
|
|
11
|
+
path: event.path,
|
|
12
|
+
headers: event.headers,
|
|
13
|
+
queryStringParameters: event.queryStringParameters,
|
|
14
|
+
body: event.body,
|
|
15
|
+
isBase64Encoded: event.isBase64Encoded,
|
|
16
|
+
});
|
|
17
|
+
return {
|
|
18
|
+
statusCode: result.statusCode,
|
|
19
|
+
headers: result.headers,
|
|
20
|
+
body: result.body ?? '',
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tY3AtYXV0aC9sYW1iZGEtaGFuZGxlcnMvcmVnaXN0ZXIuaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUtBLHNDQWVDO0FBRXlCLGdDQUFPO0FBdEJqQyw2Q0FBZ0Q7QUFDaEQsbURBQTZEO0FBRTdELE1BQU0sT0FBTyxHQUFHLElBQUEsZ0NBQXFCLEVBQUMsSUFBQSw2QkFBZ0IsR0FBRSxDQUFDLENBQUM7QUFFbkQsS0FBSyxVQUFVLGFBQWEsQ0FBQyxLQUFxQztJQUN2RSxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQztRQUMzQixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7UUFDNUIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1FBQ2hCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBNkM7UUFDNUQscUJBQXFCLEVBQUUsS0FBSyxDQUFDLHFCQUFrRTtRQUMvRixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7UUFDaEIsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlO0tBQ3ZDLENBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7UUFDN0IsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1FBQ3ZCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUU7S0FDeEIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRDb25maWdGcm9tRW52IH0gZnJvbSAnLi9lbnYtY29uZmlnJztcbmltcG9ydCB7IGNyZWF0ZVJlZ2lzdGVySGFuZGxlciB9IGZyb20gJy4uL2hhbmRsZXJzL3JlZ2lzdGVyJztcblxuY29uc3QgaGFuZGxlciA9IGNyZWF0ZVJlZ2lzdGVySGFuZGxlcihnZXRDb25maWdGcm9tRW52KCkpO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGFtYmRhSGFuZGxlcihldmVudDogQVdTTGFtYmRhLkFQSUdhdGV3YXlQcm94eUV2ZW50KTogUHJvbWlzZTxBV1NMYW1iZGEuQVBJR2F0ZXdheVByb3h5UmVzdWx0PiB7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIoe1xuICAgIGh0dHBNZXRob2Q6IGV2ZW50Lmh0dHBNZXRob2QsXG4gICAgcGF0aDogZXZlbnQucGF0aCxcbiAgICBoZWFkZXJzOiBldmVudC5oZWFkZXJzIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4sXG4gICAgcXVlcnlTdHJpbmdQYXJhbWV0ZXJzOiBldmVudC5xdWVyeVN0cmluZ1BhcmFtZXRlcnMgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPiB8IG51bGwsXG4gICAgYm9keTogZXZlbnQuYm9keSxcbiAgICBpc0Jhc2U2NEVuY29kZWQ6IGV2ZW50LmlzQmFzZTY0RW5jb2RlZCxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzdGF0dXNDb2RlOiByZXN1bHQuc3RhdHVzQ29kZSxcbiAgICBoZWFkZXJzOiByZXN1bHQuaGVhZGVycyxcbiAgICBib2R5OiByZXN1bHQuYm9keSA/PyAnJyxcbiAgfTtcbn1cblxuZXhwb3J0IHsgbGFtYmRhSGFuZGxlciBhcyBoYW5kbGVyIH07XG4iXX0=
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.lambdaHandler = lambdaHandler;
|
|
4
|
+
exports.handler = lambdaHandler;
|
|
5
|
+
const env_config_1 = require("./env-config");
|
|
6
|
+
const token_1 = require("../handlers/token");
|
|
7
|
+
const handler = (0, token_1.createTokenHandler)((0, env_config_1.getConfigFromEnv)());
|
|
8
|
+
async function lambdaHandler(event) {
|
|
9
|
+
const result = await handler({
|
|
10
|
+
httpMethod: event.httpMethod,
|
|
11
|
+
path: event.path,
|
|
12
|
+
headers: event.headers,
|
|
13
|
+
queryStringParameters: event.queryStringParameters,
|
|
14
|
+
body: event.body,
|
|
15
|
+
isBase64Encoded: event.isBase64Encoded,
|
|
16
|
+
});
|
|
17
|
+
return {
|
|
18
|
+
statusCode: result.statusCode,
|
|
19
|
+
headers: result.headers,
|
|
20
|
+
body: result.body ?? '',
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4uaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tY3AtYXV0aC9sYW1iZGEtaGFuZGxlcnMvdG9rZW4uaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUtBLHNDQWVDO0FBRXlCLGdDQUFPO0FBdEJqQyw2Q0FBZ0Q7QUFDaEQsNkNBQXVEO0FBRXZELE1BQU0sT0FBTyxHQUFHLElBQUEsMEJBQWtCLEVBQUMsSUFBQSw2QkFBZ0IsR0FBRSxDQUFDLENBQUM7QUFFaEQsS0FBSyxVQUFVLGFBQWEsQ0FBQyxLQUFxQztJQUN2RSxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQztRQUMzQixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7UUFDNUIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1FBQ2hCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBNkM7UUFDNUQscUJBQXFCLEVBQUUsS0FBSyxDQUFDLHFCQUFrRTtRQUMvRixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7UUFDaEIsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlO0tBQ3ZDLENBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7UUFDN0IsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1FBQ3ZCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUU7S0FDeEIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRDb25maWdGcm9tRW52IH0gZnJvbSAnLi9lbnYtY29uZmlnJztcbmltcG9ydCB7IGNyZWF0ZVRva2VuSGFuZGxlciB9IGZyb20gJy4uL2hhbmRsZXJzL3Rva2VuJztcblxuY29uc3QgaGFuZGxlciA9IGNyZWF0ZVRva2VuSGFuZGxlcihnZXRDb25maWdGcm9tRW52KCkpO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGFtYmRhSGFuZGxlcihldmVudDogQVdTTGFtYmRhLkFQSUdhdGV3YXlQcm94eUV2ZW50KTogUHJvbWlzZTxBV1NMYW1iZGEuQVBJR2F0ZXdheVByb3h5UmVzdWx0PiB7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIoe1xuICAgIGh0dHBNZXRob2Q6IGV2ZW50Lmh0dHBNZXRob2QsXG4gICAgcGF0aDogZXZlbnQucGF0aCxcbiAgICBoZWFkZXJzOiBldmVudC5oZWFkZXJzIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4sXG4gICAgcXVlcnlTdHJpbmdQYXJhbWV0ZXJzOiBldmVudC5xdWVyeVN0cmluZ1BhcmFtZXRlcnMgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPiB8IG51bGwsXG4gICAgYm9keTogZXZlbnQuYm9keSxcbiAgICBpc0Jhc2U2NEVuY29kZWQ6IGV2ZW50LmlzQmFzZTY0RW5jb2RlZCxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzdGF0dXNDb2RlOiByZXN1bHQuc3RhdHVzQ29kZSxcbiAgICBoZWFkZXJzOiByZXN1bHQuaGVhZGVycyxcbiAgICBib2R5OiByZXN1bHQuYm9keSA/PyAnJyxcbiAgfTtcbn1cblxuZXhwb3J0IHsgbGFtYmRhSGFuZGxlciBhcyBoYW5kbGVyIH07XG4iXX0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare class McpUnauthorizedError extends Error {
|
|
2
|
+
readonly challenge: string;
|
|
3
|
+
constructor(challenge: string, message?: string);
|
|
4
|
+
}
|
|
5
|
+
export declare class McpProtocolError extends Error {
|
|
6
|
+
readonly code: number;
|
|
7
|
+
constructor(code: number, message: string);
|
|
8
|
+
}
|