aws-lambda-mcp-server 0.0.2 → 0.0.3

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 CHANGED
@@ -1,5 +1,7 @@
1
1
  # aws-lambda-mcp-server
2
2
 
3
+ [![npm version](https://badge.fury.io/js/aws-lambda-mcp-server.svg)](https://badge.fury.io/js/aws-lambda-mcp-server)
4
+
3
5
  AWS Lambda上でMCP(Model Context Protocol)サーバー機能を提供するためのライブラリです。
4
6
  APIエンドポイントの実装や、各種AWSサービスとの連携を簡易化することを目的としています。
5
7
 
@@ -19,29 +21,33 @@ TypeScriptでの利用例です。
19
21
 
20
22
  ```typescript
21
23
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
22
- import { handler } from 'aws-lambda-mcp-server';
24
+ import { createHonoApp } from 'aws-lambda-mcp-server';
23
25
  import { handle } from 'hono/aws-lambda';
24
-
25
- // MCPサーバーのインスタンスを作成
26
- const server = new McpServer({
27
- name: 'my-mcp-server',
28
- version: '1.0.0',
29
- });
30
-
31
- // MCPサーバーのインスタンスにToolsやResourcesなどを設定する
32
- server.tool(
33
- "say_hello",
34
- { who: z.string() },
35
- async ({ who }) => ({
36
- content: [{
37
- type: "text",
38
- text: `${who} さん、こんにちは!`
39
- }]
40
- })
41
- );
26
+ import { z } from 'zod';
27
+
28
+ // MCPサーバーのファクトリ関数を用意
29
+ const createMcpServer = () => {
30
+ const server = new McpServer({
31
+ name: 'my-mcp-server',
32
+ version: '1.0.0',
33
+ });
34
+
35
+ // MCPサーバーのインスタンスにToolsやResourcesなどを設定する
36
+ server.tool(
37
+ 'say_hello',
38
+ { who: z.string() },
39
+ async ({ who }) => ({
40
+ content: [{
41
+ type: 'text',
42
+ text: `${who} さん、こんにちは!`
43
+ }]
44
+ })
45
+ );
46
+ return server;
47
+ };
42
48
 
43
49
  // Hono アプリケーションを作成
44
- const app = createHonoApp(server);
50
+ const app = createHonoApp(createMcpServer);
45
51
 
46
52
  // AWS Lambdaのエントリポイントとして利用
47
53
  export const handler = handle(app);
package/dist/index.d.ts CHANGED
@@ -1,5 +1,31 @@
1
+ /**
2
+ * Model Context Protocol (MCP) サーバーを Hono フレームワーク上で動作させるエントリーポイント。
3
+ *
4
+ * @remarks
5
+ * `createHonoApp` 関数を通じて、/mcp エンドポイントでMCPサーバーを提供します。
6
+ * - POST/GET /mcp: MCPリクエストの受信・処理
7
+ * - その他のHTTPメソッド: 405 Method Not Allowed
8
+ *
9
+ * 内部的にエラーハンドリングやリソースクローズ処理も行います。
10
+ */
1
11
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
12
  import { Hono } from 'hono';
3
13
  import { BlankEnv } from 'hono/types';
4
- export declare const createHonoApp: (server: McpServer) => Hono<BlankEnv, import("hono/types").BlankSchema, "/">;
14
+ /**
15
+ * Honoアプリケーションを生成し、/mcpエンドポイントでMCPサーバーを提供します。
16
+ *
17
+ * @remarks
18
+ * POST/GET /mcp でMCPリクエストを受け付け、他のHTTPメソッドは405を返します。
19
+ *
20
+ * @param createMcpServer MCPサーバーインスタンスを生成するファクトリ関数
21
+ * @returns Honoアプリケーションインスタンス
22
+ *
23
+ * @example
24
+ * ```ts
25
+ * import { createHonoApp } from '...';
26
+ * import { createMcpServer } from './your-mcp-server';
27
+ * const app = createHonoApp(createMcpServer);
28
+ * ```
29
+ */
30
+ export declare const createHonoApp: (createMcpServer: () => McpServer) => Hono<BlankEnv, import("hono/types").BlankSchema, "/">;
5
31
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAW,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAc,MAAM,YAAY,CAAC;AAqFlD,eAAO,MAAM,aAAa,GAAI,QAAQ,SAAS,0DAiB9C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAW,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAc,MAAM,YAAY,CAAC;AA0IlD;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,aAAa,GAAI,iBAAiB,MAAM,SAAS,0DAiB7D,CAAC"}
package/dist/index.js CHANGED
@@ -1,7 +1,32 @@
1
+ /**
2
+ * Model Context Protocol (MCP) サーバーを Hono フレームワーク上で動作させるエントリーポイント。
3
+ *
4
+ * @remarks
5
+ * `createHonoApp` 関数を通じて、/mcp エンドポイントでMCPサーバーを提供します。
6
+ * - POST/GET /mcp: MCPリクエストの受信・処理
7
+ * - その他のHTTPメソッド: 405 Method Not Allowed
8
+ *
9
+ * 内部的にエラーハンドリングやリソースクローズ処理も行います。
10
+ */
1
11
  import { Logger } from '@aws-lambda-powertools/logger';
2
12
  import { StreamableHTTPTransport } from '@hono/mcp';
3
13
  import { Hono } from 'hono';
14
+ /**
15
+ * ロガーインスタンス(AWS Lambda Powertools)。
16
+ *
17
+ * @private
18
+ */
4
19
  const logger = new Logger();
20
+ /**
21
+ * 許可されていないHTTPメソッドに対するハンドラーです。
22
+ *
23
+ * @remarks
24
+ * 405エラーのJSONレスポンスを返します。
25
+ *
26
+ * @param c Honoのコンテキスト
27
+ * @returns 405エラーのJSONレスポンス
28
+ * @private
29
+ */
5
30
  const methodNotAllowedHandler = async (c) => {
6
31
  return c.json({
7
32
  jsonrpc: '2.0',
@@ -12,6 +37,18 @@ const methodNotAllowedHandler = async (c) => {
12
37
  id: null,
13
38
  }, { status: 405 });
14
39
  };
40
+ /**
41
+ * サーバーエラー発生時の共通エラーハンドラーです。
42
+ *
43
+ * @remarks
44
+ * エラー内容をロギングし、500エラーのJSONレスポンスを返します。
45
+ *
46
+ * @param c Honoのコンテキスト
47
+ * @param reason エラー理由
48
+ * @param logMessage ログ出力用メッセージ
49
+ * @returns 500エラーのJSONレスポンス
50
+ * @private
51
+ */
15
52
  const handleError = (c, reason, logMessage) => {
16
53
  const errorDetails = reason instanceof Error
17
54
  ? { message: reason.message, stack: reason.stack, name: reason.name }
@@ -26,6 +63,17 @@ const handleError = (c, reason, logMessage) => {
26
63
  id: null,
27
64
  }, { status: 500 });
28
65
  };
66
+ /**
67
+ * MCPサーバーおよびトランスポートのリソースをクローズします。
68
+ *
69
+ * @remarks
70
+ * どちらか一方のクローズに失敗しても、もう一方は必ず実行されます。
71
+ *
72
+ * @param server MCPサーバーインスタンス
73
+ * @param transport トランスポートインスタンス
74
+ * @returns void
75
+ * @private
76
+ */
29
77
  const closeResources = async (server, transport) => {
30
78
  // 両方のクローズを確実に実行(片方が失敗してももう片方を実行)
31
79
  const closeResults = await Promise.allSettled([
@@ -44,36 +92,69 @@ const closeResources = async (server, transport) => {
44
92
  }
45
93
  });
46
94
  };
47
- const handleRequest = async (server, c) => {
95
+ /**
96
+ * MCPリクエストを処理します。
97
+ *
98
+ * @remarks
99
+ * サーバーとトランスポートの接続・リクエスト処理・エラーハンドリングを行います。
100
+ *
101
+ * @param createMcpServer MCPサーバーインスタンスを生成するファクトリ関数
102
+ * @param c Honoのコンテキスト
103
+ * @returns MCPレスポンス
104
+ * @private
105
+ */
106
+ const handleRequest = async (createMcpServer, c) => {
48
107
  const transport = new StreamableHTTPTransport({
49
108
  sessionIdGenerator: undefined, // セッションIDを生成しない(ステートレスモード)
50
109
  enableJsonResponse: true,
51
110
  });
111
+ const server = createMcpServer();
52
112
  try {
53
113
  await server.connect(transport);
54
114
  logger.trace('MCP リクエストを受信');
55
115
  return await transport.handleRequest(c);
56
116
  }
57
117
  catch (error) {
118
+ return handleError(c, error, 'MCP 接続中のエラー:');
119
+ }
120
+ finally {
121
+ // エラーの有無に関わらず必ずリソースをクローズ
58
122
  try {
59
123
  await closeResources(server, transport);
60
124
  }
61
125
  catch (closeError) {
126
+ // クローズエラーは既にcloseResources内でログ出力されているため、
127
+ // ここでは追加のエラーハンドリングは不要だが、エラーの詳細を記録
62
128
  const errorDetails = closeError instanceof Error
63
129
  ? { message: closeError.message, stack: closeError.stack }
64
130
  : closeError;
65
- logger.error('Transport close failed after connection error:', { closeError: errorDetails });
131
+ logger.error('リソースクローズ中に追加エラーが発生しましたが、処理を継続します', { closeError: errorDetails });
66
132
  }
67
- return handleError(c, error, 'MCP 接続中のエラー:');
68
133
  }
69
134
  };
70
- export const createHonoApp = (server) => {
135
+ /**
136
+ * Honoアプリケーションを生成し、/mcpエンドポイントでMCPサーバーを提供します。
137
+ *
138
+ * @remarks
139
+ * POST/GET /mcp でMCPリクエストを受け付け、他のHTTPメソッドは405を返します。
140
+ *
141
+ * @param createMcpServer MCPサーバーインスタンスを生成するファクトリ関数
142
+ * @returns Honoアプリケーションインスタンス
143
+ *
144
+ * @example
145
+ * ```ts
146
+ * import { createHonoApp } from '...';
147
+ * import { createMcpServer } from './your-mcp-server';
148
+ * const app = createHonoApp(createMcpServer);
149
+ * ```
150
+ */
151
+ export const createHonoApp = (createMcpServer) => {
71
152
  const app = new Hono();
72
153
  app.post('/mcp', async (c) => {
73
- return await handleRequest(server, c);
154
+ return await handleRequest(createMcpServer, c);
74
155
  });
75
156
  app.get('/mcp', async (c) => {
76
- return await handleRequest(server, c);
157
+ return await handleRequest(createMcpServer, c);
77
158
  });
78
159
  app.put('/mcp', methodNotAllowedHandler);
79
160
  app.delete('/mcp', methodNotAllowedHandler);
@@ -81,4 +162,4 @@ export const createHonoApp = (server) => {
81
162
  app.options('/mcp', methodNotAllowedHandler);
82
163
  return app;
83
164
  };
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVwRCxPQUFPLEVBQVcsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3JDLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7QUFFNUIsTUFBTSx1QkFBdUIsR0FBRyxLQUFLLEVBQ25DLENBQXdDLEVBQ3hDLEVBQUU7SUFDRixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQ1g7UUFDRSxPQUFPLEVBQUUsS0FBSztRQUNkLEtBQUssRUFBRTtZQUNMLElBQUksRUFBRSxDQUFDLEtBQUs7WUFDWixPQUFPLEVBQUUsaUJBQWlCO1NBQzNCO1FBQ0QsRUFBRSxFQUFFLElBQUk7S0FDVCxFQUNELEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUNoQixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxXQUFXLEdBQUcsQ0FDbEIsQ0FBd0MsRUFDeEMsTUFBZSxFQUNmLFVBQWtCLEVBQ2xCLEVBQUU7SUFDRixNQUFNLFlBQVksR0FBRyxNQUFNLFlBQVksS0FBSztRQUMxQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRTtRQUNyRSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3ZDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDWDtRQUNFLE9BQU8sRUFBRSxLQUFLO1FBQ2QsS0FBSyxFQUFFO1lBQ0wsSUFBSSxFQUFFLENBQUMs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QUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDMUIsT0FBTyxNQUFNLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO0lBQ3pDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLHVCQUF1QixDQUFDLENBQUM7SUFDNUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztJQUMzQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO0lBRTdDLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9nZ2VyIH0gZnJvbSAnQGF3cy1sYW1iZGEtcG93ZXJ0b29scy9sb2dnZXInO1xuaW1wb3J0IHsgU3RyZWFtYWJsZUhUVFBUcmFuc3BvcnQgfSBmcm9tICdAaG9uby9tY3AnO1xuaW1wb3J0IHsgTWNwU2VydmVyIH0gZnJvbSAnQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zZXJ2ZXIvbWNwLmpzJztcbmltcG9ydCB7IENvbnRleHQsIEhvbm8gfSBmcm9tICdob25vJztcbmltcG9ydCB7IEJsYW5rRW52LCBCbGFua0lucHV0IH0gZnJvbSAnaG9uby90eXBlcyc7XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoKTtcblxuY29uc3QgbWV0aG9kTm90QWxsb3dlZEhhbmRsZXIgPSBhc3luYyAoXG4gIGM6IENvbnRleHQ8QmxhbmtFbnYsICcvbWNwJywgQmxhbmtJbnB1dD4sXG4pID0+IHtcbiAgcmV0dXJuIGMuanNvbihcbiAgICB7XG4gICAgICBqc29ucnBjOiAnMi4wJyxcbiAgICAgIGVycm9yOiB7XG4gICAgICAgIGNvZGU6IC0zMjAwMCxcbiAgICAgICAgbWVzc2FnZTogJ+ODoeOCveODg+ODieOBr+ioseWPr+OBleOCjOOBpuOBhOOBvuOBm+OCk+OAgicsXG4gICAgICB9LFxuICAgICAgaWQ6IG51bGwsXG4gICAgfSxcbiAgICB7IHN0YXR1czogNDA1IH0sXG4gICk7XG59O1xuXG5jb25zdCBoYW5kbGVFcnJvciA9IChcbiAgYzogQ29udGV4dDxCbGFua0VudiwgJy9tY3AnLCBCbGFua0lucHV0PixcbiAgcmVhc29uOiB1bmtub3duLFxuICBsb2dNZXNzYWdlOiBzdHJpbmcsXG4pID0+IHtcbiAgY29uc3QgZXJyb3JEZXRhaWxzID0gcmVhc29uIGluc3RhbmNlb2YgRXJyb3JcbiAgICA/IHsgbWVzc2FnZTogcmVhc29uLm1lc3NhZ2UsIHN0YWNrOiByZWFzb24uc3RhY2ssIG5hbWU6IHJlYXNvbi5uYW1lIH1cbiAgICA6IHsgcmVhc29uIH07XG4gIGxvZ2dlci5lcnJvcihsb2dNZXNzYWdlLCBlcnJvckRldGFpbHMpO1xuICByZXR1cm4gYy5qc29uKFxuICAgIHtcbiAgICAgIGpzb25ycGM6ICcyLjAnLFxuICAgICAgZXJyb3I6IHtcbiAgICAgICAgY29kZTogLTMyNjAzLFxuICAgICAgICBtZXNzYWdlOiAn5YaF6YOo44K144O844OQ44O844Ko44Op44O8JyxcbiAgICAgIH0sXG4gICAgICBpZDogbnVsbCxcbiAgICB9LFxuICAgIHsgc3RhdHVzOiA1MDAgfSxcbiAgKTtcbn07XG5cbmNvbnN0IGNsb3NlUmVzb3VyY2VzID0gYXN5bmMgKHNlcnZlcjogTWNwU2VydmVyLCB0cmFuc3BvcnQ6IFN0cmVhbWFibGVIVFRQVHJhbnNwb3J0KSA9PiB7XG4gIC8vIOS4oeaWueOBruOCr+ODreODvOOCuuOCkueiuuWun+OBq+Wun+ihjO+8iOeJh+aWueOBjOWkseaVl+OBl+OBpuOCguOCguOBhueJh+aWueOCkuWun+ihjO+8iVxuICBjb25zdCBjbG9zZVJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW1xuICAgIHRyYW5zcG9ydC5jbG9zZSgpLFxuICAgIHNlcnZlci5jbG9zZSgpLFxuICBdKTtcblxuICAvLyDjgq/jg63jg7zjgrrjgqjjg6njg7zjgpLjg63jgrDlh7rliptcbiAgY2xvc2VSZXN1bHRzLmZvckVhY2goKHJlc3VsdCwgaW5kZXgpID0+IHtcbiAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ3JlamVjdGVkJykge1xuICAgICAgY29uc3QgcmVzb3VyY2VOYW1lID0gaW5kZXggPT09IDAgPyAndHJhbnNwb3J0JyA6ICdzZXJ2ZXInO1xuICAgICAgY29uc3QgZXJyb3IgPSByZXN1bHQucmVhc29uO1xuICAgICAgY29uc3QgZXJyb3JEZXRhaWxzID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvclxuICAgICAgICA/IHsgbWVzc2FnZTogZXJyb3IubWVzc2FnZSwgc3RhY2s6IGVycm9yLnN0YWNrIH1cbiAgICAgICAgOiBlcnJvcjtcbiAgICAgIGxvZ2dlci5lcnJvcihgRXJyb3IgY2xvc2luZyAke3Jlc291cmNlTmFtZX06YCwgeyBlcnJvcjogZXJyb3JEZXRhaWxzIH0pO1xuICAgIH1cbiAgfSk7XG59O1xuXG5jb25zdCBoYW5kbGVSZXF1ZXN0ID0gYXN5bmMgKHNlcnZlcjogTWNwU2VydmVyLCBjOiBDb250ZXh0PEJsYW5rRW52LCAnL21jcCcsIEJsYW5rSW5wdXQ+KSA9PiB7XG4gIGNvbnN0IHRyYW5zcG9ydCA9IG5ldyBTdHJlYW1hYmxlSFRUUFRyYW5zcG9ydCh7XG4gICAgc2Vzc2lvbklkR2VuZXJhdG9yOiB1bmRlZmluZWQsIC8vIOOCu+ODg+OCt+ODp+ODs0lE44KS55Sf5oiQ44GX44Gq44GE77yI44K544OG44O844OI44Os44K544Oi44O844OJ77yJXG4gICAgZW5hYmxlSnNvblJlc3BvbnNlOiB0cnVlLFxuICB9KTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBzZXJ2ZXIuY29ubmVjdCh0cmFuc3BvcnQpO1xuICAgIGxvZ2dlci50cmFjZSgnTUNQIOODquOCr+OCqOOCueODiOOCkuWPl+S/oScpO1xuICAgIHJldHVybiBhd2FpdCB0cmFuc3BvcnQuaGFuZGxlUmVxdWVzdChjKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2xvc2VSZXNvdXJjZXMoc2VydmVyLCB0cmFuc3BvcnQpO1xuICAgIH0gY2F0Y2ggKGNsb3NlRXJyb3IpIHtcbiAgICAgIGNvbnN0IGVycm9yRGV0YWlscyA9IGNsb3NlRXJyb3IgaW5zdGFuY2VvZiBFcnJvclxuICAgICAgICA/IHsgbWVzc2FnZTogY2xvc2VFcnJvci5tZXNzYWdlLCBzdGFjazogY2xvc2VFcnJvci5zdGFjayB9XG4gICAgICAgIDogY2xvc2VFcnJvcjtcbiAgICAgIGxvZ2dlci5lcnJvcignVHJhbnNwb3J0IGNsb3NlIGZhaWxlZCBhZnRlciBjb25uZWN0aW9uIGVycm9yOicsIHsgY2xvc2VFcnJvcjogZXJyb3JEZXRhaWxzIH0pO1xuICAgIH1cbiAgICByZXR1cm4gaGFuZGxlRXJyb3IoYywgZXJyb3IsICdNQ1Ag5o6l57aa5Lit44Gu44Ko44Op44O8OicpO1xuICB9XG5cbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVIb25vQXBwID0gKHNlcnZlcjogTWNwU2VydmVyKSA9PiB7XG4gIGNvbnN0IGFwcCA9IG5ldyBIb25vKCk7XG5cbiAgYXBwLnBvc3QoJy9tY3AnLCBhc3luYyAoYykgPT4ge1xuICAgIHJldHVybiBhd2FpdCBoYW5kbGVSZXF1ZXN0KHNlcnZlciwgYyk7XG4gIH0pO1xuXG4gIGFwcC5nZXQoJy9tY3AnLCBhc3luYyAoYykgPT4ge1xuICAgIHJldHVybiBhd2FpdCBoYW5kbGVSZXF1ZXN0KHNlcnZlciwgYyk7XG4gIH0pO1xuXG4gIGFwcC5wdXQoJy9tY3AnLCBtZXRob2ROb3RBbGxvd2VkSGFuZGxlcik7XG4gIGFwcC5kZWxldGUoJy9tY3AnLCBtZXRob2ROb3RBbGxvd2VkSGFuZGxlcik7XG4gIGFwcC5wYXRjaCgnL21jcCcsIG1ldGhvZE5vdEFsbG93ZWRIYW5kbGVyKTtcbiAgYXBwLm9wdGlvbnMoJy9tY3AnLCBtZXRob2ROb3RBbGxvd2VkSGFuZGxlcik7XG5cbiAgcmV0dXJuIGFwcDtcbn07XG4iXX0=
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7OztHQVNHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVwRCxPQUFPLEVBQVcsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3JDOzs7O0dBSUc7QUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO0FBRTVCOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sdUJBQXVCLEdBQUcsS0FBSyxFQUNuQyxDQUF3QyxFQUN4QyxFQUFFO0lBQ0YsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUNYO1FBQ0UsT0FBTyxFQUFFLEtBQUs7UUFDZCxLQUFLLEVBQUU7WUFDTCxJQUFJLEVBQUUsQ0FBQyxLQUFLO1lBQ1osT0FBTyxFQUFFLGlCQUFpQjtTQUMzQjtRQUNELEVBQUUsRUFBRSxJQUFJO0tBQ1QsRUFDRCxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FDaEIsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxXQUFXLEdBQUcsQ0FDbEIsQ0FBd0MsRUFDeEMsTUFBZSxFQUNmLFVBQWtCLEVBQ2xCLEVBQUU7SUFDRixNQUFNLFlBQVksR0FBRyxNQUFNLFlBQVksS0FBSztRQUMxQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRTtRQUNyRSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3ZDLE9BQU8sQ0FBQyxD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QUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsZUFBZ0MsRUFBRSxFQUFFO0lBQ2hFLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFFdkIsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzNCLE9BQU8sTUFBTSxhQUFhLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUMsQ0FBQyxDQUFDO0lBRUgsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzFCLE9BQU8sTUFBTSxhQUFhLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUMsQ0FBQyxDQUFDO0lBRUgsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztJQUN6QyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO0lBQzVDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLHVCQUF1QixDQUFDLENBQUM7SUFDM0MsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztJQUU3QyxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kZWwgQ29udGV4dCBQcm90b2NvbCAoTUNQKSDjgrXjg7zjg5Djg7zjgpIgSG9ubyDjg5Xjg6zjg7zjg6Djg6/jg7zjgq/kuIrjgafli5XkvZzjgZXjgZvjgovjgqjjg7Pjg4jjg6rjg7zjg53jgqTjg7Pjg4jjgIJcbiAqXG4gKiBAcmVtYXJrc1xuICogYGNyZWF0ZUhvbm9BcHBgIOmWouaVsOOCkumAmuOBmOOBpuOAgS9tY3Ag44Ko44Oz44OJ44Od44Kk44Oz44OI44GnTUNQ44K144O844OQ44O844KS5o+Q5L6b44GX44G+44GZ44CCXG4gKiAtIFBPU1QvR0VUIC9tY3A6IE1DUOODquOCr+OCqOOCueODiOOBruWPl+S/oeODu+WHpueQhlxuICogLSDjgZ3jga7ku5bjga5IVFRQ44Oh44K944OD44OJOiA0MDUgTWV0aG9kIE5vdCBBbGxvd2VkXG4gKlxuICog5YaF6YOo55qE44Gr44Ko44Op44O844OP44Oz44OJ44Oq44Oz44Kw44KE44Oq44K944O844K544Kv44Ot44O844K65Yem55CG44KC6KGM44GE44G+44GZ44CCXG4gKi9cblxuaW1wb3J0IHsgTG9nZ2VyIH0gZnJvbSAnQGF3cy1sYW1iZGEtcG93ZXJ0b29scy9sb2dnZXInO1xuaW1wb3J0IHsgU3RyZWFtYWJsZUhUVFBUcmFuc3BvcnQgfSBmcm9tICdAaG9uby9tY3AnO1xuaW1wb3J0IHsgTWNwU2VydmVyIH0gZnJvbSAnQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zZXJ2ZXIvbWNwLmpzJztcbmltcG9ydCB7IENvbnRleHQsIEhvbm8gfSBmcm9tICdob25vJztcbmltcG9ydCB7IEJsYW5rRW52LCBCbGFua0lucHV0IH0gZnJvbSAnaG9uby90eXBlcyc7XG5cbi8qKlxuICog44Ot44Ks44O844Kk44Oz44K544K/44Oz44K577yIQVdTIExhbWJkYSBQb3dlcnRvb2xz77yJ44CCXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuXG4vKipcbiAqIOioseWPr+OBleOCjOOBpuOBhOOBquOBhEhUVFDjg6Hjgr3jg4Pjg4njgavlr77jgZnjgovjg4/jg7Pjg4njg6njg7zjgafjgZnjgIJcbiAqXG4gKiBAcmVtYXJrc1xuICogNDA144Ko44Op44O844GuSlNPTuODrOOCueODneODs+OCueOCkui/lOOBl+OBvuOBmeOAglxuICpcbiAqIEBwYXJhbSBjIEhvbm/jga7jgrPjg7Pjg4bjgq3jgrnjg4hcbiAqIEByZXR1cm5zIDQwNeOCqOODqeODvOOBrkpTT07jg6zjgrnjg53jg7PjgrlcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IG1ldGhvZE5vdEFsbG93ZWRIYW5kbGVyID0gYXN5bmMgKFxuICBjOiBDb250ZXh0PEJsYW5rRW52LCAnL21jcCcsIEJsYW5rSW5wdXQ+LFxuKSA9PiB7XG4gIHJldHVybiBjLmpzb24oXG4gICAge1xuICAgICAganNvbnJwYzogJzIuMCcsXG4gICAgICBlcnJvcjoge1xuICAgICAgICBjb2RlOiAtMzIwMDAsXG4gICAgICAgIG1lc3NhZ2U6ICfjg6Hjgr3jg4Pjg4njga/oqLHlj6/jgZXjgozjgabjgYTjgb7jgZvjgpPjgIInLFxuICAgICAgfSxcbiAgICAgIGlkOiBudWxsLFxuICAgIH0sXG4gICAgeyBzdGF0dXM6IDQwNSB9LFxuICApO1xufTtcblxuLyoqXG4gKiDjgrXjg7zjg5Djg7zjgqjjg6njg7znmbrnlJ/mmYLjga7lhbHpgJrjgqjjg6njg7zjg4/jg7Pjg4njg6njg7zjgafjgZnjgIJcbiAqXG4gKiBAcmVtYXJrc1xuICog44Ko44Op44O85YaF5a6544KS44Ot44Ku44Oz44Kw44GX44CBNTAw44Ko44Op44O844GuSlNPTuODrOOCueODneODs+OCueOCkui/lOOBl+OBvuOBmeOAglxuICpcbiAqIEBwYXJhbSBjIEhvbm/jga7jgrPjg7Pjg4bjgq3jgrnjg4hcbiAqIEBwYXJhbSByZWFzb24g44Ko44Op44O855CG55SxXG4gKiBAcGFyYW0gbG9nTWVzc2FnZSDjg63jgrDlh7rlipvnlKjjg6Hjg4Pjgrvjg7zjgrhcbiAqIEByZXR1cm5zIDUwMOOCqOODqeODvOOBrkpTT07jg6zjgrnjg53jg7PjgrlcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IGhhbmRsZUVycm9yID0gKFxuICBjOiBDb250ZXh0PEJsYW5rRW52LCAnL21jcCcsIEJsYW5rSW5wdXQ+LFxuICByZWFzb246IHVua25vd24sXG4gIGxvZ01lc3NhZ2U6IHN0cmluZyxcbikgPT4ge1xuICBjb25zdCBlcnJvckRldGFpbHMgPSByZWFzb24gaW5zdGFuY2VvZiBFcnJvclxuICAgID8geyBtZXNzYWdlOiByZWFzb24ubWVzc2FnZSwgc3RhY2s6IHJlYXNvbi5zdGFjaywgbmFtZTogcmVhc29uLm5hbWUgfVxuICAgIDogeyByZWFzb24gfTtcbiAgbG9nZ2VyLmVycm9yKGxvZ01lc3NhZ2UsIGVycm9yRGV0YWlscyk7XG4gIHJldHVybiBjLmpzb24oXG4gICAge1xuICAgICAganNvbnJwYzogJzIuMCcsXG4gICAgICBlcnJvcjoge1xuICAgICAgICBjb2RlOiAtMzI2MDMsXG4gICAgICAgIG1lc3NhZ2U6ICflhoXpg6jjgrXjg7zjg5Djg7zjgqjjg6njg7wnLFxuICAgICAgfSxcbiAgICAgIGlkOiBudWxsLFxuICAgIH0sXG4gICAgeyBzdGF0dXM6IDUwMCB9LFxuICApO1xufTtcblxuLyoqXG4gKiBNQ1DjgrXjg7zjg5Djg7zjgYrjgojjgbPjg4jjg6njg7Pjgrnjg53jg7zjg4jjga7jg6rjgr3jg7zjgrnjgpLjgq/jg63jg7zjgrrjgZfjgb7jgZnjgIJcbiAqXG4gKiBAcmVtYXJrc1xuICog44Gp44Gh44KJ44GL5LiA5pa544Gu44Kv44Ot44O844K644Gr5aSx5pWX44GX44Gm44KC44CB44KC44GG5LiA5pa544Gv5b+F44Ga5a6f6KGM44GV44KM44G+44GZ44CCXG4gKlxuICogQHBhcmFtIHNlcnZlciBNQ1DjgrXjg7zjg5Djg7zjgqTjg7Pjgrnjgr/jg7PjgrlcbiAqIEBwYXJhbSB0cmFuc3BvcnQg44OI44Op44Oz44K544Od44O844OI44Kk44Oz44K544K/44Oz44K5XG4gKiBAcmV0dXJucyB2b2lkXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBjbG9zZVJlc291cmNlcyA9IGFzeW5jIChzZXJ2ZXI6IE1jcFNlcnZlciwgdHJhbnNwb3J0OiBTdHJlYW1hYmxlSFRUUFRyYW5zcG9ydCkgPT4ge1xuICAvLyDkuKHmlrnjga7jgq/jg63jg7zjgrrjgpLnorrlrp/jgavlrp/ooYzvvIjniYfmlrnjgYzlpLHmlZfjgZfjgabjgoLjgoLjgYbniYfmlrnjgpLlrp/ooYzvvIlcbiAgY29uc3QgY2xvc2VSZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFtcbiAgICB0cmFuc3BvcnQuY2xvc2UoKSxcbiAgICBzZXJ2ZXIuY2xvc2UoKSxcbiAgXSk7XG5cbiAgLy8g44Kv44Ot44O844K644Ko44Op44O844KS44Ot44Kw5Ye65YqbXG4gIGNsb3NlUmVzdWx0cy5mb3JFYWNoKChyZXN1bHQsIGluZGV4KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdyZWplY3RlZCcpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlTmFtZSA9IGluZGV4ID09PSAwID8gJ3RyYW5zcG9ydCcgOiAnc2VydmVyJztcbiAgICAgIGNvbnN0IGVycm9yID0gcmVzdWx0LnJlYXNvbjtcbiAgICAgIGNvbnN0IGVycm9yRGV0YWlscyA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgPyB7IG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIHN0YWNrOiBlcnJvci5zdGFjayB9XG4gICAgICAgIDogZXJyb3I7XG4gICAgICBsb2dnZXIuZXJyb3IoYEVycm9yIGNsb3NpbmcgJHtyZXNvdXJjZU5hbWV9OmAsIHsgZXJyb3I6IGVycm9yRGV0YWlscyB9KTtcbiAgICB9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBNQ1Djg6rjgq/jgqjjgrnjg4jjgpLlh6bnkIbjgZfjgb7jgZnjgIJcbiAqXG4gKiBAcmVtYXJrc1xuICog44K144O844OQ44O844Go44OI44Op44Oz44K544Od44O844OI44Gu5o6l57aa44O744Oq44Kv44Ko44K544OI5Yem55CG44O744Ko44Op44O844OP44Oz44OJ44Oq44Oz44Kw44KS6KGM44GE44G+44GZ44CCXG4gKlxuICogQHBhcmFtIGNyZWF0ZU1jcFNlcnZlciBNQ1DjgrXjg7zjg5Djg7zjgqTjg7Pjgrnjgr/jg7PjgrnjgpLnlJ/miJDjgZnjgovjg5XjgqHjgq/jg4jjg6rplqLmlbBcbiAqIEBwYXJhbSBjIEhvbm/jga7jgrPjg7Pjg4bjgq3jgrnjg4hcbiAqIEByZXR1cm5zIE1DUOODrOOCueODneODs+OCuVxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgaGFuZGxlUmVxdWVzdCA9IGFzeW5jIChjcmVhdGVNY3BTZXJ2ZXI6ICgpID0+IE1jcFNlcnZlciwgYzogQ29udGV4dDxCbGFua0VudiwgJy9tY3AnLCBCbGFua0lucHV0PikgPT4ge1xuICBjb25zdCB0cmFuc3BvcnQgPSBuZXcgU3RyZWFtYWJsZUhUVFBUcmFuc3BvcnQoe1xuICAgIHNlc3Npb25JZEdlbmVyYXRvcjogdW5kZWZpbmVkLCAvLyDjgrvjg4Pjgrfjg6fjg7NJROOCkueUn+aIkOOBl+OBquOBhO+8iOOCueODhuODvOODiOODrOOCueODouODvOODie+8iVxuICAgIGVuYWJsZUpzb25SZXNwb25zZTogdHJ1ZSxcbiAgfSk7XG4gIGNvbnN0IHNlcnZlciA9IGNyZWF0ZU1jcFNlcnZlcigpO1xuICB0cnkge1xuICAgIGF3YWl0IHNlcnZlci5jb25uZWN0KHRyYW5zcG9ydCk7XG4gICAgbG9nZ2VyLnRyYWNlKCdNQ1Ag44Oq44Kv44Ko44K544OI44KS5Y+X5L+hJyk7XG4gICAgcmV0dXJuIGF3YWl0IHRyYW5zcG9ydC5oYW5kbGVSZXF1ZXN0KGMpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBoYW5kbGVFcnJvcihjLCBlcnJvciwgJ01DUCDmjqXntprkuK3jga7jgqjjg6njg7w6Jyk7XG4gIH0gZmluYWxseSB7XG4gICAgLy8g44Ko44Op44O844Gu5pyJ54Sh44Gr6Zai44KP44KJ44Ga5b+F44Ga44Oq44K944O844K544KS44Kv44Ot44O844K6XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNsb3NlUmVzb3VyY2VzKHNlcnZlciwgdHJhbnNwb3J0KTtcbiAgICB9IGNhdGNoIChjbG9zZUVycm9yKSB7XG4gICAgICAvLyDjgq/jg63jg7zjgrrjgqjjg6njg7zjga/ml6LjgatjbG9zZVJlc291cmNlc+WGheOBp+ODreOCsOWHuuWKm+OBleOCjOOBpuOBhOOCi+OBn+OCgeOAgVxuICAgICAgLy8g44GT44GT44Gn44Gv6L+95Yqg44Gu44Ko44Op44O844OP44Oz44OJ44Oq44Oz44Kw44Gv5LiN6KaB44Gg44GM44CB44Ko44Op44O844Gu6Kmz57Sw44KS6KiY6YyyXG4gICAgICBjb25zdCBlcnJvckRldGFpbHMgPSBjbG9zZUVycm9yIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgPyB7IG1lc3NhZ2U6IGNsb3NlRXJyb3IubWVzc2FnZSwgc3RhY2s6IGNsb3NlRXJyb3Iuc3RhY2sgfVxuICAgICAgICA6IGNsb3NlRXJyb3I7XG4gICAgICBsb2dnZXIuZXJyb3IoJ+ODquOCveODvOOCueOCr+ODreODvOOCuuS4reOBq+i/veWKoOOCqOODqeODvOOBjOeZuueUn+OBl+OBvuOBl+OBn+OBjOOAgeWHpueQhuOCkue2mee2muOBl+OBvuOBmScsIHsgY2xvc2VFcnJvcjogZXJyb3JEZXRhaWxzIH0pO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBIb25v44Ki44OX44Oq44Kx44O844K344On44Oz44KS55Sf5oiQ44GX44CBL21jcOOCqOODs+ODieODneOCpOODs+ODiOOBp01DUOOCteODvOODkOODvOOCkuaPkOS+m+OBl+OBvuOBmeOAglxuICpcbiAqIEByZW1hcmtzXG4gKiBQT1NUL0dFVCAvbWNwIOOBp01DUOODquOCr+OCqOOCueODiOOCkuWPl+OBkeS7mOOBkeOAgeS7luOBrkhUVFDjg6Hjgr3jg4Pjg4njga80MDXjgpLov5TjgZfjgb7jgZnjgIJcbiAqXG4gKiBAcGFyYW0gY3JlYXRlTWNwU2VydmVyIE1DUOOCteODvOODkOODvOOCpOODs+OCueOCv+ODs+OCueOCkueUn+aIkOOBmeOCi+ODleOCoeOCr+ODiOODqumWouaVsFxuICogQHJldHVybnMgSG9ub+OCouODl+ODquOCseODvOOCt+ODp+ODs+OCpOODs+OCueOCv+ODs+OCuVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgY3JlYXRlSG9ub0FwcCB9IGZyb20gJy4uLic7XG4gKiBpbXBvcnQgeyBjcmVhdGVNY3BTZXJ2ZXIgfSBmcm9tICcuL3lvdXItbWNwLXNlcnZlcic7XG4gKiBjb25zdCBhcHAgPSBjcmVhdGVIb25vQXBwKGNyZWF0ZU1jcFNlcnZlcik7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUhvbm9BcHAgPSAoY3JlYXRlTWNwU2VydmVyOiAoKSA9PiBNY3BTZXJ2ZXIpID0+IHtcbiAgY29uc3QgYXBwID0gbmV3IEhvbm8oKTtcblxuICBhcHAucG9zdCgnL21jcCcsIGFzeW5jIChjKSA9PiB7XG4gICAgcmV0dXJuIGF3YWl0IGhhbmRsZVJlcXVlc3QoY3JlYXRlTWNwU2VydmVyLCBjKTtcbiAgfSk7XG5cbiAgYXBwLmdldCgnL21jcCcsIGFzeW5jIChjKSA9PiB7XG4gICAgcmV0dXJuIGF3YWl0IGhhbmRsZVJlcXVlc3QoY3JlYXRlTWNwU2VydmVyLCBjKTtcbiAgfSk7XG5cbiAgYXBwLnB1dCgnL21jcCcsIG1ldGhvZE5vdEFsbG93ZWRIYW5kbGVyKTtcbiAgYXBwLmRlbGV0ZSgnL21jcCcsIG1ldGhvZE5vdEFsbG93ZWRIYW5kbGVyKTtcbiAgYXBwLnBhdGNoKCcvbWNwJywgbWV0aG9kTm90QWxsb3dlZEhhbmRsZXIpO1xuICBhcHAub3B0aW9ucygnL21jcCcsIG1ldGhvZE5vdEFsbG93ZWRIYW5kbGVyKTtcblxuICByZXR1cm4gYXBwO1xufTtcbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aws-lambda-mcp-server",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "description": "A Hono wrapper for building an MCP (Model Context Protocol) Server that runs on AWS Lambda functions.",
5
5
  "type": "module",
6
6
  "keywords": [
@@ -34,25 +34,25 @@
34
34
  "license": "ISC",
35
35
  "devDependencies": {
36
36
  "@eslint/compat": "^1.4.1",
37
- "@eslint/js": "^9.39.0",
37
+ "@eslint/js": "^9.39.1",
38
38
  "@stylistic/eslint-plugin": "^5.5.0",
39
- "@types/node": "24.9.2",
40
- "eslint": "^9.39.0",
39
+ "@types/node": "24.10.0",
40
+ "eslint": "^9.39.1",
41
41
  "eslint-import-resolver-typescript": "^4.4.4",
42
42
  "eslint-plugin-import": "^2.32.0",
43
43
  "eslint-plugin-promise": "^7.2.1",
44
44
  "jiti": "^2.6.1",
45
45
  "tsx": "^4.20.6",
46
46
  "typescript": "^5.9.3",
47
- "typescript-eslint": "^8.46.2",
48
- "vitest": "^4.0.6"
47
+ "typescript-eslint": "^8.46.3",
48
+ "vitest": "^4.0.7"
49
49
  },
50
50
  "dependencies": {
51
51
  "@aws-lambda-powertools/logger": "^2.28.1",
52
52
  "@hono/mcp": "^0.1.5",
53
- "@modelcontextprotocol/sdk": "^1.20.2",
53
+ "@modelcontextprotocol/sdk": "^1.21.0",
54
54
  "hono": "^4.10.4",
55
- "zod": "^3.25.76"
55
+ "zod": "^4.1.12"
56
56
  },
57
57
  "scripts": {
58
58
  "build": "tsc",