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.
Files changed (73) hide show
  1. package/README.md +111 -0
  2. package/docs/constructs/assets/hierarchy.js +1 -1
  3. package/docs/constructs/assets/navigation.js +1 -1
  4. package/docs/constructs/assets/search.js +1 -1
  5. package/docs/constructs/classes/McpAuth.html +43 -0
  6. package/docs/constructs/classes/McpCognitoAuth.html +43 -0
  7. package/docs/constructs/classes/RestApi.html +6 -3
  8. package/docs/constructs/classes/SingleTableDatastore.html +1 -1
  9. package/docs/constructs/classes/Workflow.html +1 -1
  10. package/docs/constructs/hierarchy.html +1 -1
  11. package/docs/constructs/index.html +112 -1
  12. package/docs/constructs/interfaces/McpAuthCognitoOptions.html +17 -0
  13. package/docs/constructs/interfaces/McpAuthFunctions.html +14 -0
  14. package/docs/constructs/interfaces/McpAuthGenericOptions.html +11 -0
  15. package/docs/constructs/interfaces/McpAuthOptions.html +33 -0
  16. package/docs/constructs/interfaces/McpAuthProps.html +43 -0
  17. package/docs/constructs/interfaces/McpCognitoAuthProps.html +49 -0
  18. package/docs/constructs/interfaces/RestApiProps.html +24 -6
  19. package/docs/constructs/modules.html +1 -1
  20. package/docs/lambda/index.html +112 -1
  21. package/docs/projen/index.html +112 -1
  22. package/lib/constructs/index.d.ts +2 -0
  23. package/lib/constructs/index.js +3 -1
  24. package/lib/constructs/mcp-auth.d.ts +117 -0
  25. package/lib/constructs/mcp-auth.js +127 -0
  26. package/lib/constructs/mcp-cognito-auth.d.ts +110 -0
  27. package/lib/constructs/mcp-cognito-auth.js +76 -0
  28. package/lib/constructs/rest-api.d.ts +136 -0
  29. package/lib/constructs/rest-api.js +159 -1
  30. package/lib/mcp-auth/config.d.ts +39 -0
  31. package/lib/mcp-auth/config.js +3 -0
  32. package/lib/mcp-auth/handlers/authorization-server.d.ts +7 -0
  33. package/lib/mcp-auth/handlers/authorization-server.js +34 -0
  34. package/lib/mcp-auth/handlers/authorize.d.ts +8 -0
  35. package/lib/mcp-auth/handlers/authorize.js +32 -0
  36. package/lib/mcp-auth/handlers/index.d.ts +7 -0
  37. package/lib/mcp-auth/handlers/index.js +24 -0
  38. package/lib/mcp-auth/handlers/protected-resource.d.ts +7 -0
  39. package/lib/mcp-auth/handlers/protected-resource.js +26 -0
  40. package/lib/mcp-auth/handlers/register.d.ts +7 -0
  41. package/lib/mcp-auth/handlers/register.js +68 -0
  42. package/lib/mcp-auth/handlers/token.d.ts +8 -0
  43. package/lib/mcp-auth/handlers/token.js +74 -0
  44. package/lib/mcp-auth/handlers/types.d.ts +21 -0
  45. package/lib/mcp-auth/handlers/types.js +3 -0
  46. package/lib/mcp-auth/handlers/validate-redirect-uris.d.ts +10 -0
  47. package/lib/mcp-auth/handlers/validate-redirect-uris.js +22 -0
  48. package/lib/mcp-auth/index.d.ts +3 -0
  49. package/lib/mcp-auth/index.js +20 -0
  50. package/lib/mcp-auth/lambda-handlers/authorization-server.handler.d.ts +2 -0
  51. package/lib/mcp-auth/lambda-handlers/authorization-server.handler.js +23 -0
  52. package/lib/mcp-auth/lambda-handlers/authorize.handler.d.ts +2 -0
  53. package/lib/mcp-auth/lambda-handlers/authorize.handler.js +23 -0
  54. package/lib/mcp-auth/lambda-handlers/env-config.d.ts +7 -0
  55. package/lib/mcp-auth/lambda-handlers/env-config.js +37 -0
  56. package/lib/mcp-auth/lambda-handlers/protected-resource.handler.d.ts +2 -0
  57. package/lib/mcp-auth/lambda-handlers/protected-resource.handler.js +23 -0
  58. package/lib/mcp-auth/lambda-handlers/register.handler.d.ts +2 -0
  59. package/lib/mcp-auth/lambda-handlers/register.handler.js +23 -0
  60. package/lib/mcp-auth/lambda-handlers/token.handler.d.ts +2 -0
  61. package/lib/mcp-auth/lambda-handlers/token.handler.js +23 -0
  62. package/lib/mcp-auth/mcp/errors.d.ts +8 -0
  63. package/lib/mcp-auth/mcp/errors.js +20 -0
  64. package/lib/mcp-auth/mcp/index.d.ts +4 -0
  65. package/lib/mcp-auth/mcp/index.js +21 -0
  66. package/lib/mcp-auth/mcp/jsonrpc.d.ts +21 -0
  67. package/lib/mcp-auth/mcp/jsonrpc.js +56 -0
  68. package/lib/mcp-auth/mcp/server.d.ts +9 -0
  69. package/lib/mcp-auth/mcp/server.js +107 -0
  70. package/lib/mcp-auth/mcp/types.d.ts +32 -0
  71. package/lib/mcp-auth/mcp/types.js +3 -0
  72. package/llm.md +214 -0
  73. 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,7 @@
1
+ export * from './types';
2
+ export * from './authorize';
3
+ export * from './authorization-server';
4
+ export * from './protected-resource';
5
+ export * from './register';
6
+ export * from './token';
7
+ export * from './validate-redirect-uris';
@@ -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,3 @@
1
+ export * from './config';
2
+ export * from './handlers';
3
+ export * from './mcp';
@@ -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,2 @@
1
+ export declare function lambdaHandler(event: AWSLambda.APIGatewayProxyEvent): Promise<AWSLambda.APIGatewayProxyResult>;
2
+ export { lambdaHandler as handler };
@@ -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,2 @@
1
+ export declare function lambdaHandler(event: AWSLambda.APIGatewayProxyEvent): Promise<AWSLambda.APIGatewayProxyResult>;
2
+ export { lambdaHandler as handler };
@@ -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,2 @@
1
+ export declare function lambdaHandler(event: AWSLambda.APIGatewayProxyEvent): Promise<AWSLambda.APIGatewayProxyResult>;
2
+ export { lambdaHandler as handler };
@@ -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,2 @@
1
+ export declare function lambdaHandler(event: AWSLambda.APIGatewayProxyEvent): Promise<AWSLambda.APIGatewayProxyResult>;
2
+ export { lambdaHandler as handler };
@@ -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,2 @@
1
+ export declare function lambdaHandler(event: AWSLambda.APIGatewayProxyEvent): Promise<AWSLambda.APIGatewayProxyResult>;
2
+ export { lambdaHandler as handler };
@@ -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
+ }