@mcp-z/mcp-gmail 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +167 -0
- package/bin/server.js +5 -0
- package/dist/cjs/constants.d.cts +11 -0
- package/dist/cjs/constants.d.ts +11 -0
- package/dist/cjs/constants.js +39 -0
- package/dist/cjs/constants.js.map +1 -0
- package/dist/cjs/email/composition/rfc822-builder.d.cts +11 -0
- package/dist/cjs/email/composition/rfc822-builder.d.ts +11 -0
- package/dist/cjs/email/composition/rfc822-builder.js +24 -0
- package/dist/cjs/email/composition/rfc822-builder.js.map +1 -0
- package/dist/cjs/email/messages/fetch-message.d.cts +24 -0
- package/dist/cjs/email/messages/fetch-message.d.ts +24 -0
- package/dist/cjs/email/messages/fetch-message.js +367 -0
- package/dist/cjs/email/messages/fetch-message.js.map +1 -0
- package/dist/cjs/email/messages/messages.d.cts +7 -0
- package/dist/cjs/email/messages/messages.d.ts +7 -0
- package/dist/cjs/email/messages/messages.js +146 -0
- package/dist/cjs/email/messages/messages.js.map +1 -0
- package/dist/cjs/email/parsing/header-parsing.d.cts +1 -0
- package/dist/cjs/email/parsing/header-parsing.d.ts +1 -0
- package/dist/cjs/email/parsing/header-parsing.js +20 -0
- package/dist/cjs/email/parsing/header-parsing.js.map +1 -0
- package/dist/cjs/email/parsing/headers-utils.d.cts +5 -0
- package/dist/cjs/email/parsing/headers-utils.d.ts +5 -0
- package/dist/cjs/email/parsing/headers-utils.js +46 -0
- package/dist/cjs/email/parsing/headers-utils.js.map +1 -0
- package/dist/cjs/email/parsing/html-processing.d.cts +8 -0
- package/dist/cjs/email/parsing/html-processing.d.ts +8 -0
- package/dist/cjs/email/parsing/html-processing.js +72 -0
- package/dist/cjs/email/parsing/html-processing.js.map +1 -0
- package/dist/cjs/email/parsing/message-extraction.d.cts +2 -0
- package/dist/cjs/email/parsing/message-extraction.d.ts +2 -0
- package/dist/cjs/email/parsing/message-extraction.js +25 -0
- package/dist/cjs/email/parsing/message-extraction.js.map +1 -0
- package/dist/cjs/email/querying/execute-query.d.cts +17 -0
- package/dist/cjs/email/querying/execute-query.d.ts +17 -0
- package/dist/cjs/email/querying/execute-query.js +265 -0
- package/dist/cjs/email/querying/execute-query.js.map +1 -0
- package/dist/cjs/email/querying/pagination.d.cts +27 -0
- package/dist/cjs/email/querying/pagination.d.ts +27 -0
- package/dist/cjs/email/querying/pagination.js +533 -0
- package/dist/cjs/email/querying/pagination.js.map +1 -0
- package/dist/cjs/email/querying/query-builder.d.cts +47 -0
- package/dist/cjs/email/querying/query-builder.d.ts +47 -0
- package/dist/cjs/email/querying/query-builder.js +387 -0
- package/dist/cjs/email/querying/query-builder.js.map +1 -0
- package/dist/cjs/email/querying/search-execution.d.cts +29 -0
- package/dist/cjs/email/querying/search-execution.d.ts +29 -0
- package/dist/cjs/email/querying/search-execution.js +190 -0
- package/dist/cjs/email/querying/search-execution.js.map +1 -0
- package/dist/cjs/index.d.cts +8 -0
- package/dist/cjs/index.d.ts +8 -0
- package/dist/cjs/index.js +314 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/labels/gmail-labels.d.cts +2 -0
- package/dist/cjs/labels/gmail-labels.d.ts +2 -0
- package/dist/cjs/labels/gmail-labels.js +206 -0
- package/dist/cjs/labels/gmail-labels.js.map +1 -0
- package/dist/cjs/lib/base64-encoding.d.cts +2 -0
- package/dist/cjs/lib/base64-encoding.d.ts +2 -0
- package/dist/cjs/lib/base64-encoding.js +32 -0
- package/dist/cjs/lib/base64-encoding.js.map +1 -0
- package/dist/cjs/lib/create-store.d.cts +2 -0
- package/dist/cjs/lib/create-store.d.ts +2 -0
- package/dist/cjs/lib/create-store.js +166 -0
- package/dist/cjs/lib/create-store.js.map +1 -0
- package/dist/cjs/lib/date-conversion.d.cts +1 -0
- package/dist/cjs/lib/date-conversion.d.ts +1 -0
- package/dist/cjs/lib/date-conversion.js +16 -0
- package/dist/cjs/lib/date-conversion.js.map +1 -0
- package/dist/cjs/lib/messages-to-row.d.cts +61 -0
- package/dist/cjs/lib/messages-to-row.d.ts +61 -0
- package/dist/cjs/lib/messages-to-row.js +243 -0
- package/dist/cjs/lib/messages-to-row.js.map +1 -0
- package/dist/cjs/mcp/index.d.cts +3 -0
- package/dist/cjs/mcp/index.d.ts +3 -0
- package/dist/cjs/mcp/index.js +66 -0
- package/dist/cjs/mcp/index.js.map +1 -0
- package/dist/cjs/mcp/prompts/draft-email.d.cts +30 -0
- package/dist/cjs/mcp/prompts/draft-email.d.ts +30 -0
- package/dist/cjs/mcp/prompts/draft-email.js +184 -0
- package/dist/cjs/mcp/prompts/draft-email.js.map +1 -0
- package/dist/cjs/mcp/prompts/index.d.cts +2 -0
- package/dist/cjs/mcp/prompts/index.d.ts +2 -0
- package/dist/cjs/mcp/prompts/index.js +26 -0
- package/dist/cjs/mcp/prompts/index.js.map +1 -0
- package/dist/cjs/mcp/prompts/query-syntax.d.cts +19 -0
- package/dist/cjs/mcp/prompts/query-syntax.d.ts +19 -0
- package/dist/cjs/mcp/prompts/query-syntax.js +169 -0
- package/dist/cjs/mcp/prompts/query-syntax.js.map +1 -0
- package/dist/cjs/mcp/resources/email.d.cts +11 -0
- package/dist/cjs/mcp/resources/email.d.ts +11 -0
- package/dist/cjs/mcp/resources/email.js +256 -0
- package/dist/cjs/mcp/resources/email.js.map +1 -0
- package/dist/cjs/mcp/resources/index.d.cts +1 -0
- package/dist/cjs/mcp/resources/index.d.ts +1 -0
- package/dist/cjs/mcp/resources/index.js +17 -0
- package/dist/cjs/mcp/resources/index.js.map +1 -0
- package/dist/cjs/mcp/tools/categories-list.d.cts +58 -0
- package/dist/cjs/mcp/tools/categories-list.d.ts +58 -0
- package/dist/cjs/mcp/tools/categories-list.js +298 -0
- package/dist/cjs/mcp/tools/categories-list.js.map +1 -0
- package/dist/cjs/mcp/tools/index.d.cts +11 -0
- package/dist/cjs/mcp/tools/index.d.ts +11 -0
- package/dist/cjs/mcp/tools/index.js +62 -0
- package/dist/cjs/mcp/tools/index.js.map +1 -0
- package/dist/cjs/mcp/tools/label-add.d.cts +61 -0
- package/dist/cjs/mcp/tools/label-add.d.ts +61 -0
- package/dist/cjs/mcp/tools/label-add.js +280 -0
- package/dist/cjs/mcp/tools/label-add.js.map +1 -0
- package/dist/cjs/mcp/tools/label-delete.d.cts +71 -0
- package/dist/cjs/mcp/tools/label-delete.d.ts +71 -0
- package/dist/cjs/mcp/tools/label-delete.js +476 -0
- package/dist/cjs/mcp/tools/label-delete.js.map +1 -0
- package/dist/cjs/mcp/tools/labels-list.d.cts +75 -0
- package/dist/cjs/mcp/tools/labels-list.d.ts +75 -0
- package/dist/cjs/mcp/tools/labels-list.js +298 -0
- package/dist/cjs/mcp/tools/labels-list.js.map +1 -0
- package/dist/cjs/mcp/tools/message-get.d.cts +146 -0
- package/dist/cjs/mcp/tools/message-get.d.ts +146 -0
- package/dist/cjs/mcp/tools/message-get.js +317 -0
- package/dist/cjs/mcp/tools/message-get.js.map +1 -0
- package/dist/cjs/mcp/tools/message-mark-read.d.cts +50 -0
- package/dist/cjs/mcp/tools/message-mark-read.d.ts +50 -0
- package/dist/cjs/mcp/tools/message-mark-read.js +254 -0
- package/dist/cjs/mcp/tools/message-mark-read.js.map +1 -0
- package/dist/cjs/mcp/tools/message-move-to-trash.d.cts +71 -0
- package/dist/cjs/mcp/tools/message-move-to-trash.d.ts +71 -0
- package/dist/cjs/mcp/tools/message-move-to-trash.js +450 -0
- package/dist/cjs/mcp/tools/message-move-to-trash.js.map +1 -0
- package/dist/cjs/mcp/tools/message-respond.d.cts +60 -0
- package/dist/cjs/mcp/tools/message-respond.d.ts +60 -0
- package/dist/cjs/mcp/tools/message-respond.js +367 -0
- package/dist/cjs/mcp/tools/message-respond.js.map +1 -0
- package/dist/cjs/mcp/tools/message-search.d.cts +182 -0
- package/dist/cjs/mcp/tools/message-search.d.ts +182 -0
- package/dist/cjs/mcp/tools/message-search.js +405 -0
- package/dist/cjs/mcp/tools/message-search.js.map +1 -0
- package/dist/cjs/mcp/tools/message-send.d.cts +87 -0
- package/dist/cjs/mcp/tools/message-send.d.ts +87 -0
- package/dist/cjs/mcp/tools/message-send.js +288 -0
- package/dist/cjs/mcp/tools/message-send.js.map +1 -0
- package/dist/cjs/mcp/tools/messages-export-csv.d.cts +84 -0
- package/dist/cjs/mcp/tools/messages-export-csv.d.ts +84 -0
- package/dist/cjs/mcp/tools/messages-export-csv.js +530 -0
- package/dist/cjs/mcp/tools/messages-export-csv.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/schemas/gmail-query-schema.d.cts +36 -0
- package/dist/cjs/schemas/gmail-query-schema.d.ts +36 -0
- package/dist/cjs/schemas/gmail-query-schema.js +117 -0
- package/dist/cjs/schemas/gmail-query-schema.js.map +1 -0
- package/dist/cjs/schemas/index.d.cts +1 -0
- package/dist/cjs/schemas/index.d.ts +1 -0
- package/dist/cjs/schemas/index.js +19 -0
- package/dist/cjs/schemas/index.js.map +1 -0
- package/dist/cjs/setup/config.d.cts +48 -0
- package/dist/cjs/setup/config.d.ts +48 -0
- package/dist/cjs/setup/config.js +217 -0
- package/dist/cjs/setup/config.js.map +1 -0
- package/dist/cjs/setup/http.d.cts +8 -0
- package/dist/cjs/setup/http.d.ts +8 -0
- package/dist/cjs/setup/http.js +267 -0
- package/dist/cjs/setup/http.js.map +1 -0
- package/dist/cjs/setup/index.d.cts +5 -0
- package/dist/cjs/setup/index.d.ts +5 -0
- package/dist/cjs/setup/index.js +46 -0
- package/dist/cjs/setup/index.js.map +1 -0
- package/dist/cjs/setup/oauth-google.d.cts +54 -0
- package/dist/cjs/setup/oauth-google.d.ts +54 -0
- package/dist/cjs/setup/oauth-google.js +332 -0
- package/dist/cjs/setup/oauth-google.js.map +1 -0
- package/dist/cjs/setup/runtime.d.cts +12 -0
- package/dist/cjs/setup/runtime.d.ts +12 -0
- package/dist/cjs/setup/runtime.js +489 -0
- package/dist/cjs/setup/runtime.js.map +1 -0
- package/dist/cjs/setup/stdio.d.cts +7 -0
- package/dist/cjs/setup/stdio.d.ts +7 -0
- package/dist/cjs/setup/stdio.js +239 -0
- package/dist/cjs/setup/stdio.js.map +1 -0
- package/dist/cjs/types.d.cts +54 -0
- package/dist/cjs/types.d.ts +54 -0
- package/dist/cjs/types.js +5 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/esm/constants.d.ts +11 -0
- package/dist/esm/constants.js +14 -0
- package/dist/esm/constants.js.map +1 -0
- package/dist/esm/email/composition/rfc822-builder.d.ts +11 -0
- package/dist/esm/email/composition/rfc822-builder.js +13 -0
- package/dist/esm/email/composition/rfc822-builder.js.map +1 -0
- package/dist/esm/email/messages/fetch-message.d.ts +24 -0
- package/dist/esm/email/messages/fetch-message.js +123 -0
- package/dist/esm/email/messages/fetch-message.js.map +1 -0
- package/dist/esm/email/messages/messages.d.ts +7 -0
- package/dist/esm/email/messages/messages.js +91 -0
- package/dist/esm/email/messages/messages.js.map +1 -0
- package/dist/esm/email/parsing/header-parsing.d.ts +1 -0
- package/dist/esm/email/parsing/header-parsing.js +1 -0
- package/dist/esm/email/parsing/header-parsing.js.map +1 -0
- package/dist/esm/email/parsing/headers-utils.d.ts +5 -0
- package/dist/esm/email/parsing/headers-utils.js +25 -0
- package/dist/esm/email/parsing/headers-utils.js.map +1 -0
- package/dist/esm/email/parsing/html-processing.d.ts +8 -0
- package/dist/esm/email/parsing/html-processing.js +39 -0
- package/dist/esm/email/parsing/html-processing.js.map +1 -0
- package/dist/esm/email/parsing/message-extraction.d.ts +2 -0
- package/dist/esm/email/parsing/message-extraction.js +3 -0
- package/dist/esm/email/parsing/message-extraction.js.map +1 -0
- package/dist/esm/email/querying/execute-query.d.ts +17 -0
- package/dist/esm/email/querying/execute-query.js +45 -0
- package/dist/esm/email/querying/execute-query.js.map +1 -0
- package/dist/esm/email/querying/pagination.d.ts +27 -0
- package/dist/esm/email/querying/pagination.js +152 -0
- package/dist/esm/email/querying/pagination.js.map +1 -0
- package/dist/esm/email/querying/query-builder.d.ts +47 -0
- package/dist/esm/email/querying/query-builder.js +306 -0
- package/dist/esm/email/querying/query-builder.js.map +1 -0
- package/dist/esm/email/querying/search-execution.d.ts +29 -0
- package/dist/esm/email/querying/search-execution.js +35 -0
- package/dist/esm/email/querying/search-execution.js.map +1 -0
- package/dist/esm/index.d.ts +8 -0
- package/dist/esm/index.js +34 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/labels/gmail-labels.d.ts +2 -0
- package/dist/esm/labels/gmail-labels.js +43 -0
- package/dist/esm/labels/gmail-labels.js.map +1 -0
- package/dist/esm/lib/base64-encoding.d.ts +2 -0
- package/dist/esm/lib/base64-encoding.js +13 -0
- package/dist/esm/lib/base64-encoding.js.map +1 -0
- package/dist/esm/lib/create-store.d.ts +2 -0
- package/dist/esm/lib/create-store.js +6 -0
- package/dist/esm/lib/create-store.js.map +1 -0
- package/dist/esm/lib/date-conversion.d.ts +1 -0
- package/dist/esm/lib/date-conversion.js +5 -0
- package/dist/esm/lib/date-conversion.js.map +1 -0
- package/dist/esm/lib/messages-to-row.d.ts +61 -0
- package/dist/esm/lib/messages-to-row.js +188 -0
- package/dist/esm/lib/messages-to-row.js.map +1 -0
- package/dist/esm/mcp/index.d.ts +3 -0
- package/dist/esm/mcp/index.js +6 -0
- package/dist/esm/mcp/index.js.map +1 -0
- package/dist/esm/mcp/prompts/draft-email.d.ts +30 -0
- package/dist/esm/mcp/prompts/draft-email.js +37 -0
- package/dist/esm/mcp/prompts/draft-email.js.map +1 -0
- package/dist/esm/mcp/prompts/index.d.ts +2 -0
- package/dist/esm/mcp/prompts/index.js +2 -0
- package/dist/esm/mcp/prompts/index.js.map +1 -0
- package/dist/esm/mcp/prompts/query-syntax.d.ts +19 -0
- package/dist/esm/mcp/prompts/query-syntax.js +74 -0
- package/dist/esm/mcp/prompts/query-syntax.js.map +1 -0
- package/dist/esm/mcp/resources/email.d.ts +11 -0
- package/dist/esm/mcp/resources/email.js +92 -0
- package/dist/esm/mcp/resources/email.js.map +1 -0
- package/dist/esm/mcp/resources/index.d.ts +1 -0
- package/dist/esm/mcp/resources/index.js +1 -0
- package/dist/esm/mcp/resources/index.js.map +1 -0
- package/dist/esm/mcp/tools/categories-list.d.ts +58 -0
- package/dist/esm/mcp/tools/categories-list.js +124 -0
- package/dist/esm/mcp/tools/categories-list.js.map +1 -0
- package/dist/esm/mcp/tools/index.d.ts +11 -0
- package/dist/esm/mcp/tools/index.js +11 -0
- package/dist/esm/mcp/tools/index.js.map +1 -0
- package/dist/esm/mcp/tools/label-add.d.ts +61 -0
- package/dist/esm/mcp/tools/label-add.js +101 -0
- package/dist/esm/mcp/tools/label-add.js.map +1 -0
- package/dist/esm/mcp/tools/label-delete.d.ts +71 -0
- package/dist/esm/mcp/tools/label-delete.js +186 -0
- package/dist/esm/mcp/tools/label-delete.js.map +1 -0
- package/dist/esm/mcp/tools/labels-list.d.ts +75 -0
- package/dist/esm/mcp/tools/labels-list.js +122 -0
- package/dist/esm/mcp/tools/labels-list.js.map +1 -0
- package/dist/esm/mcp/tools/message-get.d.ts +146 -0
- package/dist/esm/mcp/tools/message-get.js +145 -0
- package/dist/esm/mcp/tools/message-get.js.map +1 -0
- package/dist/esm/mcp/tools/message-mark-read.d.ts +50 -0
- package/dist/esm/mcp/tools/message-mark-read.js +80 -0
- package/dist/esm/mcp/tools/message-mark-read.js.map +1 -0
- package/dist/esm/mcp/tools/message-move-to-trash.d.ts +71 -0
- package/dist/esm/mcp/tools/message-move-to-trash.js +167 -0
- package/dist/esm/mcp/tools/message-move-to-trash.js.map +1 -0
- package/dist/esm/mcp/tools/message-respond.d.ts +60 -0
- package/dist/esm/mcp/tools/message-respond.js +152 -0
- package/dist/esm/mcp/tools/message-respond.js.map +1 -0
- package/dist/esm/mcp/tools/message-search.d.ts +182 -0
- package/dist/esm/mcp/tools/message-search.js +180 -0
- package/dist/esm/mcp/tools/message-search.js.map +1 -0
- package/dist/esm/mcp/tools/message-send.d.ts +87 -0
- package/dist/esm/mcp/tools/message-send.js +115 -0
- package/dist/esm/mcp/tools/message-send.js.map +1 -0
- package/dist/esm/mcp/tools/messages-export-csv.d.ts +84 -0
- package/dist/esm/mcp/tools/messages-export-csv.js +261 -0
- package/dist/esm/mcp/tools/messages-export-csv.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/schemas/gmail-query-schema.d.ts +36 -0
- package/dist/esm/schemas/gmail-query-schema.js +72 -0
- package/dist/esm/schemas/gmail-query-schema.js.map +1 -0
- package/dist/esm/schemas/index.d.ts +1 -0
- package/dist/esm/schemas/index.js +1 -0
- package/dist/esm/schemas/index.js.map +1 -0
- package/dist/esm/setup/config.d.ts +48 -0
- package/dist/esm/setup/config.js +175 -0
- package/dist/esm/setup/config.js.map +1 -0
- package/dist/esm/setup/http.d.ts +8 -0
- package/dist/esm/setup/http.js +61 -0
- package/dist/esm/setup/http.js.map +1 -0
- package/dist/esm/setup/index.d.ts +5 -0
- package/dist/esm/setup/index.js +5 -0
- package/dist/esm/setup/index.js.map +1 -0
- package/dist/esm/setup/oauth-google.d.ts +54 -0
- package/dist/esm/setup/oauth-google.js +142 -0
- package/dist/esm/setup/oauth-google.js.map +1 -0
- package/dist/esm/setup/runtime.d.ts +12 -0
- package/dist/esm/setup/runtime.js +115 -0
- package/dist/esm/setup/runtime.js.map +1 -0
- package/dist/esm/setup/stdio.d.ts +7 -0
- package/dist/esm/setup/stdio.js +38 -0
- package/dist/esm/setup/stdio.js.map +1 -0
- package/dist/esm/types.d.ts +54 -0
- package/dist/esm/types.js +1 -0
- package/dist/esm/types.js.map +1 -0
- package/package.json +110 -0
|
@@ -0,0 +1,533 @@
|
|
|
1
|
+
/** Gmail pagination helpers for single-page operations. */ "use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
get fetchMessagesConcurrently () {
|
|
13
|
+
return fetchMessagesConcurrently;
|
|
14
|
+
},
|
|
15
|
+
get fetchMessagesPage () {
|
|
16
|
+
return fetchMessagesPage;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
function _array_like_to_array(arr, len) {
|
|
20
|
+
if (len == null || len > arr.length) len = arr.length;
|
|
21
|
+
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
22
|
+
return arr2;
|
|
23
|
+
}
|
|
24
|
+
function _array_without_holes(arr) {
|
|
25
|
+
if (Array.isArray(arr)) return _array_like_to_array(arr);
|
|
26
|
+
}
|
|
27
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
28
|
+
try {
|
|
29
|
+
var info = gen[key](arg);
|
|
30
|
+
var value = info.value;
|
|
31
|
+
} catch (error) {
|
|
32
|
+
reject(error);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
if (info.done) {
|
|
36
|
+
resolve(value);
|
|
37
|
+
} else {
|
|
38
|
+
Promise.resolve(value).then(_next, _throw);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function _async_to_generator(fn) {
|
|
42
|
+
return function() {
|
|
43
|
+
var self = this, args = arguments;
|
|
44
|
+
return new Promise(function(resolve, reject) {
|
|
45
|
+
var gen = fn.apply(self, args);
|
|
46
|
+
function _next(value) {
|
|
47
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
48
|
+
}
|
|
49
|
+
function _throw(err) {
|
|
50
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
51
|
+
}
|
|
52
|
+
_next(undefined);
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function _define_property(obj, key, value) {
|
|
57
|
+
if (key in obj) {
|
|
58
|
+
Object.defineProperty(obj, key, {
|
|
59
|
+
value: value,
|
|
60
|
+
enumerable: true,
|
|
61
|
+
configurable: true,
|
|
62
|
+
writable: true
|
|
63
|
+
});
|
|
64
|
+
} else {
|
|
65
|
+
obj[key] = value;
|
|
66
|
+
}
|
|
67
|
+
return obj;
|
|
68
|
+
}
|
|
69
|
+
function _instanceof(left, right) {
|
|
70
|
+
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
71
|
+
return !!right[Symbol.hasInstance](left);
|
|
72
|
+
} else {
|
|
73
|
+
return left instanceof right;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function _iterable_to_array(iter) {
|
|
77
|
+
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
|
|
78
|
+
}
|
|
79
|
+
function _non_iterable_spread() {
|
|
80
|
+
throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
81
|
+
}
|
|
82
|
+
function _object_spread(target) {
|
|
83
|
+
for(var i = 1; i < arguments.length; i++){
|
|
84
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
85
|
+
var ownKeys = Object.keys(source);
|
|
86
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
87
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
88
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
89
|
+
}));
|
|
90
|
+
}
|
|
91
|
+
ownKeys.forEach(function(key) {
|
|
92
|
+
_define_property(target, key, source[key]);
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
return target;
|
|
96
|
+
}
|
|
97
|
+
function ownKeys(object, enumerableOnly) {
|
|
98
|
+
var keys = Object.keys(object);
|
|
99
|
+
if (Object.getOwnPropertySymbols) {
|
|
100
|
+
var symbols = Object.getOwnPropertySymbols(object);
|
|
101
|
+
if (enumerableOnly) {
|
|
102
|
+
symbols = symbols.filter(function(sym) {
|
|
103
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
keys.push.apply(keys, symbols);
|
|
107
|
+
}
|
|
108
|
+
return keys;
|
|
109
|
+
}
|
|
110
|
+
function _object_spread_props(target, source) {
|
|
111
|
+
source = source != null ? source : {};
|
|
112
|
+
if (Object.getOwnPropertyDescriptors) {
|
|
113
|
+
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
114
|
+
} else {
|
|
115
|
+
ownKeys(Object(source)).forEach(function(key) {
|
|
116
|
+
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
return target;
|
|
120
|
+
}
|
|
121
|
+
function _to_consumable_array(arr) {
|
|
122
|
+
return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
|
|
123
|
+
}
|
|
124
|
+
function _unsupported_iterable_to_array(o, minLen) {
|
|
125
|
+
if (!o) return;
|
|
126
|
+
if (typeof o === "string") return _array_like_to_array(o, minLen);
|
|
127
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
128
|
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
129
|
+
if (n === "Map" || n === "Set") return Array.from(n);
|
|
130
|
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
131
|
+
}
|
|
132
|
+
function _ts_generator(thisArg, body) {
|
|
133
|
+
var f, y, t, _ = {
|
|
134
|
+
label: 0,
|
|
135
|
+
sent: function() {
|
|
136
|
+
if (t[0] & 1) throw t[1];
|
|
137
|
+
return t[1];
|
|
138
|
+
},
|
|
139
|
+
trys: [],
|
|
140
|
+
ops: []
|
|
141
|
+
}, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty;
|
|
142
|
+
return d(g, "next", {
|
|
143
|
+
value: verb(0)
|
|
144
|
+
}), d(g, "throw", {
|
|
145
|
+
value: verb(1)
|
|
146
|
+
}), d(g, "return", {
|
|
147
|
+
value: verb(2)
|
|
148
|
+
}), typeof Symbol === "function" && d(g, Symbol.iterator, {
|
|
149
|
+
value: function() {
|
|
150
|
+
return this;
|
|
151
|
+
}
|
|
152
|
+
}), g;
|
|
153
|
+
function verb(n) {
|
|
154
|
+
return function(v) {
|
|
155
|
+
return step([
|
|
156
|
+
n,
|
|
157
|
+
v
|
|
158
|
+
]);
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
function step(op) {
|
|
162
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
163
|
+
while(g && (g = 0, op[0] && (_ = 0)), _)try {
|
|
164
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
165
|
+
if (y = 0, t) op = [
|
|
166
|
+
op[0] & 2,
|
|
167
|
+
t.value
|
|
168
|
+
];
|
|
169
|
+
switch(op[0]){
|
|
170
|
+
case 0:
|
|
171
|
+
case 1:
|
|
172
|
+
t = op;
|
|
173
|
+
break;
|
|
174
|
+
case 4:
|
|
175
|
+
_.label++;
|
|
176
|
+
return {
|
|
177
|
+
value: op[1],
|
|
178
|
+
done: false
|
|
179
|
+
};
|
|
180
|
+
case 5:
|
|
181
|
+
_.label++;
|
|
182
|
+
y = op[1];
|
|
183
|
+
op = [
|
|
184
|
+
0
|
|
185
|
+
];
|
|
186
|
+
continue;
|
|
187
|
+
case 7:
|
|
188
|
+
op = _.ops.pop();
|
|
189
|
+
_.trys.pop();
|
|
190
|
+
continue;
|
|
191
|
+
default:
|
|
192
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
193
|
+
_ = 0;
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
197
|
+
_.label = op[1];
|
|
198
|
+
break;
|
|
199
|
+
}
|
|
200
|
+
if (op[0] === 6 && _.label < t[1]) {
|
|
201
|
+
_.label = t[1];
|
|
202
|
+
t = op;
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
if (t && _.label < t[2]) {
|
|
206
|
+
_.label = t[2];
|
|
207
|
+
_.ops.push(op);
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
if (t[2]) _.ops.pop();
|
|
211
|
+
_.trys.pop();
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
op = body.call(thisArg, _);
|
|
215
|
+
} catch (e) {
|
|
216
|
+
op = [
|
|
217
|
+
6,
|
|
218
|
+
e
|
|
219
|
+
];
|
|
220
|
+
y = 0;
|
|
221
|
+
} finally{
|
|
222
|
+
f = t = 0;
|
|
223
|
+
}
|
|
224
|
+
if (op[0] & 5) throw op[1];
|
|
225
|
+
return {
|
|
226
|
+
value: op[0] ? op[1] : void 0,
|
|
227
|
+
done: true
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
function fetchMessagesPage(gmail, params) {
|
|
232
|
+
return _async_to_generator(function() {
|
|
233
|
+
var gmailQ, _params_pageSize, pageSize, pageToken, _params_body, body, logger, metadataHeaders, maxPageSize, minPageSize, safePageSize, listParams, listResponse, _tmp, response, messages, items, concurrentArgs, detailedMessages, error, errorMessage;
|
|
234
|
+
return _ts_generator(this, function(_state) {
|
|
235
|
+
switch(_state.label){
|
|
236
|
+
case 0:
|
|
237
|
+
gmailQ = params.gmailQ, _params_pageSize = params.pageSize, pageSize = _params_pageSize === void 0 ? 50 : _params_pageSize, pageToken = params.pageToken, _params_body = params.body, body = _params_body === void 0 ? false : _params_body, logger = params.logger, metadataHeaders = params.metadataHeaders;
|
|
238
|
+
// Secure resource bounds checking - prevent security bypasses
|
|
239
|
+
maxPageSize = 500; // Gmail API maximum - enforced for security
|
|
240
|
+
minPageSize = 1; // Minimum valid page size
|
|
241
|
+
// Validate input is a positive number to prevent bypass attempts
|
|
242
|
+
if (!Number.isInteger(pageSize) || pageSize < 0) {
|
|
243
|
+
throw new Error("Invalid pageSize: must be a positive integer, got ".concat(pageSize));
|
|
244
|
+
}
|
|
245
|
+
safePageSize = Math.min(Math.max(minPageSize, pageSize), maxPageSize);
|
|
246
|
+
if (pageSize !== safePageSize && logger) {
|
|
247
|
+
logger.info('Page size bounded for API safety', {
|
|
248
|
+
requested: pageSize,
|
|
249
|
+
applied: safePageSize
|
|
250
|
+
});
|
|
251
|
+
// No fallback to console - would corrupt MCP stdio communication
|
|
252
|
+
}
|
|
253
|
+
_state.label = 1;
|
|
254
|
+
case 1:
|
|
255
|
+
_state.trys.push([
|
|
256
|
+
1,
|
|
257
|
+
7,
|
|
258
|
+
,
|
|
259
|
+
8
|
|
260
|
+
]);
|
|
261
|
+
listParams = {
|
|
262
|
+
userId: 'me',
|
|
263
|
+
q: gmailQ,
|
|
264
|
+
maxResults: safePageSize
|
|
265
|
+
};
|
|
266
|
+
if (!(pageToken && pageToken.trim().length > 0)) return [
|
|
267
|
+
3,
|
|
268
|
+
3
|
|
269
|
+
];
|
|
270
|
+
return [
|
|
271
|
+
4,
|
|
272
|
+
gmail.users.messages.list(_object_spread_props(_object_spread({}, listParams), {
|
|
273
|
+
pageToken: pageToken
|
|
274
|
+
}))
|
|
275
|
+
];
|
|
276
|
+
case 2:
|
|
277
|
+
_tmp = _state.sent();
|
|
278
|
+
return [
|
|
279
|
+
3,
|
|
280
|
+
5
|
|
281
|
+
];
|
|
282
|
+
case 3:
|
|
283
|
+
return [
|
|
284
|
+
4,
|
|
285
|
+
gmail.users.messages.list(listParams)
|
|
286
|
+
];
|
|
287
|
+
case 4:
|
|
288
|
+
_tmp = _state.sent();
|
|
289
|
+
_state.label = 5;
|
|
290
|
+
case 5:
|
|
291
|
+
listResponse = _tmp;
|
|
292
|
+
response = listResponse.data;
|
|
293
|
+
messages = response.messages || [];
|
|
294
|
+
if (messages.length === 0) {
|
|
295
|
+
if (logger) logger.info('No messages found on page');
|
|
296
|
+
return [
|
|
297
|
+
2,
|
|
298
|
+
{
|
|
299
|
+
messages: [],
|
|
300
|
+
nextPageToken: undefined
|
|
301
|
+
}
|
|
302
|
+
];
|
|
303
|
+
}
|
|
304
|
+
items = messages.map(function(m) {
|
|
305
|
+
return m.id;
|
|
306
|
+
}).filter(Boolean);
|
|
307
|
+
if (items.length === 0) {
|
|
308
|
+
if (logger) logger.info('No valid message ids on page');
|
|
309
|
+
return [
|
|
310
|
+
2,
|
|
311
|
+
{
|
|
312
|
+
messages: [],
|
|
313
|
+
nextPageToken: response.nextPageToken && response.nextPageToken.trim().length > 0 ? response.nextPageToken : undefined
|
|
314
|
+
}
|
|
315
|
+
];
|
|
316
|
+
}
|
|
317
|
+
concurrentArgs = _object_spread({
|
|
318
|
+
items: items,
|
|
319
|
+
concurrency: 5,
|
|
320
|
+
body: body
|
|
321
|
+
}, logger && {
|
|
322
|
+
logger: logger
|
|
323
|
+
}, metadataHeaders && {
|
|
324
|
+
metadataHeaders: metadataHeaders
|
|
325
|
+
});
|
|
326
|
+
return [
|
|
327
|
+
4,
|
|
328
|
+
fetchMessagesConcurrently(gmail, concurrentArgs)
|
|
329
|
+
];
|
|
330
|
+
case 6:
|
|
331
|
+
detailedMessages = _state.sent();
|
|
332
|
+
if (logger) logger.info("Fetched page with ".concat(detailedMessages.length, " messages"));
|
|
333
|
+
return [
|
|
334
|
+
2,
|
|
335
|
+
{
|
|
336
|
+
messages: detailedMessages,
|
|
337
|
+
nextPageToken: response.nextPageToken && response.nextPageToken.trim().length > 0 ? response.nextPageToken : undefined
|
|
338
|
+
}
|
|
339
|
+
];
|
|
340
|
+
case 7:
|
|
341
|
+
error = _state.sent();
|
|
342
|
+
// Standardized error handling for pagination pipeline
|
|
343
|
+
errorMessage = _instanceof(error, Error) ? error.message : String(error);
|
|
344
|
+
if (logger) logger.error('Gmail pagination: single page fetch failed', {
|
|
345
|
+
error: errorMessage,
|
|
346
|
+
query: gmailQ,
|
|
347
|
+
pageSize: safePageSize,
|
|
348
|
+
hasPageToken: !!pageToken
|
|
349
|
+
});
|
|
350
|
+
// Preserve original error type for upstream handling
|
|
351
|
+
if (_instanceof(error, Error)) {
|
|
352
|
+
// Enhance error with pagination context
|
|
353
|
+
error.message = "Gmail pagination fetch failed: ".concat(error.message);
|
|
354
|
+
throw error;
|
|
355
|
+
}
|
|
356
|
+
// Convert non-Error objects to proper Error instances
|
|
357
|
+
throw new Error("Gmail pagination fetch failed: ".concat(errorMessage));
|
|
358
|
+
case 8:
|
|
359
|
+
return [
|
|
360
|
+
2
|
|
361
|
+
];
|
|
362
|
+
}
|
|
363
|
+
});
|
|
364
|
+
})();
|
|
365
|
+
}
|
|
366
|
+
function fetchMessagesConcurrently(gmail, params) {
|
|
367
|
+
return _async_to_generator(function() {
|
|
368
|
+
var items, _params_concurrency, concurrency, _params_body, body, logger, metadataHeaders, maxConcurrency, minConcurrency, safeConcurrency, results, format, metadataHeadersForRequest, requestParams, batchSize, batches, i, processedCount, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, batch, batchPromises, err;
|
|
369
|
+
return _ts_generator(this, function(_state) {
|
|
370
|
+
switch(_state.label){
|
|
371
|
+
case 0:
|
|
372
|
+
items = params.items, _params_concurrency = params.concurrency, concurrency = _params_concurrency === void 0 ? 2 : _params_concurrency, _params_body = params.body, body = _params_body === void 0 ? false : _params_body, logger = params.logger, metadataHeaders = params.metadataHeaders;
|
|
373
|
+
// Secure resource bounds checking for concurrent operations
|
|
374
|
+
maxConcurrency = 10; // Conservative limit to prevent rate limiting and resource exhaustion
|
|
375
|
+
minConcurrency = 1; // Minimum valid concurrency
|
|
376
|
+
// Validate input is a positive number to prevent bypass attempts
|
|
377
|
+
if (!Number.isInteger(concurrency) || concurrency < 0) {
|
|
378
|
+
throw new Error("Invalid concurrency: must be a positive integer, got ".concat(concurrency));
|
|
379
|
+
}
|
|
380
|
+
safeConcurrency = Math.min(Math.max(minConcurrency, concurrency), maxConcurrency);
|
|
381
|
+
if (concurrency !== safeConcurrency && logger) {
|
|
382
|
+
logger.info('Concurrency bounded for API safety', {
|
|
383
|
+
requested: concurrency,
|
|
384
|
+
applied: safeConcurrency
|
|
385
|
+
});
|
|
386
|
+
// No fallback to console - would corrupt MCP stdio communication
|
|
387
|
+
}
|
|
388
|
+
if (items.length === 0) return [
|
|
389
|
+
2,
|
|
390
|
+
[]
|
|
391
|
+
];
|
|
392
|
+
results = new Array(items.length);
|
|
393
|
+
format = body ? 'full' : 'metadata';
|
|
394
|
+
// Always pass metadataHeaders if provided - body doesn't replace headers, it's additional content
|
|
395
|
+
metadataHeadersForRequest = metadataHeaders;
|
|
396
|
+
// Pre-build request parameters to avoid repeated object creation
|
|
397
|
+
requestParams = items.map(function(id) {
|
|
398
|
+
var baseParams = {
|
|
399
|
+
userId: 'me',
|
|
400
|
+
id: id,
|
|
401
|
+
format: format
|
|
402
|
+
};
|
|
403
|
+
// Only include metadataHeaders if defined (exactOptionalPropertyTypes compliance)
|
|
404
|
+
return metadataHeadersForRequest ? _object_spread_props(_object_spread({}, baseParams), {
|
|
405
|
+
metadataHeaders: _to_consumable_array(metadataHeadersForRequest)
|
|
406
|
+
}) : baseParams;
|
|
407
|
+
});
|
|
408
|
+
// Optimize concurrent processing using batching
|
|
409
|
+
batchSize = safeConcurrency;
|
|
410
|
+
batches = [];
|
|
411
|
+
for(i = 0; i < requestParams.length; i += batchSize){
|
|
412
|
+
batches.push(requestParams.slice(i, i + batchSize));
|
|
413
|
+
}
|
|
414
|
+
processedCount = 0;
|
|
415
|
+
_iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
416
|
+
_state.label = 1;
|
|
417
|
+
case 1:
|
|
418
|
+
_state.trys.push([
|
|
419
|
+
1,
|
|
420
|
+
6,
|
|
421
|
+
7,
|
|
422
|
+
8
|
|
423
|
+
]);
|
|
424
|
+
_iterator = batches[Symbol.iterator]();
|
|
425
|
+
_state.label = 2;
|
|
426
|
+
case 2:
|
|
427
|
+
if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [
|
|
428
|
+
3,
|
|
429
|
+
5
|
|
430
|
+
];
|
|
431
|
+
batch = _step.value;
|
|
432
|
+
batchPromises = batch.map(function(params, batchIndex) {
|
|
433
|
+
return _async_to_generator(function() {
|
|
434
|
+
var messageResponse, globalIndex, error, errorMessage;
|
|
435
|
+
return _ts_generator(this, function(_state) {
|
|
436
|
+
switch(_state.label){
|
|
437
|
+
case 0:
|
|
438
|
+
_state.trys.push([
|
|
439
|
+
0,
|
|
440
|
+
2,
|
|
441
|
+
,
|
|
442
|
+
3
|
|
443
|
+
]);
|
|
444
|
+
return [
|
|
445
|
+
4,
|
|
446
|
+
gmail.users.messages.get(params)
|
|
447
|
+
];
|
|
448
|
+
case 1:
|
|
449
|
+
messageResponse = _state.sent();
|
|
450
|
+
globalIndex = processedCount + batchIndex;
|
|
451
|
+
results[globalIndex] = messageResponse.data;
|
|
452
|
+
return [
|
|
453
|
+
2,
|
|
454
|
+
messageResponse.data
|
|
455
|
+
];
|
|
456
|
+
case 2:
|
|
457
|
+
error = _state.sent();
|
|
458
|
+
// Log individual message fetch failures but continue processing
|
|
459
|
+
errorMessage = _instanceof(error, Error) ? error.message : String(error);
|
|
460
|
+
if (logger) logger.info('Gmail pagination: individual message fetch failed, continuing', {
|
|
461
|
+
error: errorMessage,
|
|
462
|
+
messageId: params.id,
|
|
463
|
+
globalIndex: processedCount + batchIndex
|
|
464
|
+
});
|
|
465
|
+
return [
|
|
466
|
+
2,
|
|
467
|
+
null
|
|
468
|
+
]; // Mark as failed but continue
|
|
469
|
+
case 3:
|
|
470
|
+
return [
|
|
471
|
+
2
|
|
472
|
+
];
|
|
473
|
+
}
|
|
474
|
+
});
|
|
475
|
+
})();
|
|
476
|
+
});
|
|
477
|
+
return [
|
|
478
|
+
4,
|
|
479
|
+
Promise.all(batchPromises)
|
|
480
|
+
];
|
|
481
|
+
case 3:
|
|
482
|
+
_state.sent();
|
|
483
|
+
processedCount += batch.length;
|
|
484
|
+
// Progress logging for large batches
|
|
485
|
+
if (items.length > 20) {
|
|
486
|
+
if (logger) logger.info("Gmail pagination: processed ".concat(processedCount, "/").concat(items.length, " messages"));
|
|
487
|
+
}
|
|
488
|
+
_state.label = 4;
|
|
489
|
+
case 4:
|
|
490
|
+
_iteratorNormalCompletion = true;
|
|
491
|
+
return [
|
|
492
|
+
3,
|
|
493
|
+
2
|
|
494
|
+
];
|
|
495
|
+
case 5:
|
|
496
|
+
return [
|
|
497
|
+
3,
|
|
498
|
+
8
|
|
499
|
+
];
|
|
500
|
+
case 6:
|
|
501
|
+
err = _state.sent();
|
|
502
|
+
_didIteratorError = true;
|
|
503
|
+
_iteratorError = err;
|
|
504
|
+
return [
|
|
505
|
+
3,
|
|
506
|
+
8
|
|
507
|
+
];
|
|
508
|
+
case 7:
|
|
509
|
+
try {
|
|
510
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
511
|
+
_iterator.return();
|
|
512
|
+
}
|
|
513
|
+
} finally{
|
|
514
|
+
if (_didIteratorError) {
|
|
515
|
+
throw _iteratorError;
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
return [
|
|
519
|
+
7
|
|
520
|
+
];
|
|
521
|
+
case 8:
|
|
522
|
+
// Filter out any null results from failed individual fetches
|
|
523
|
+
return [
|
|
524
|
+
2,
|
|
525
|
+
results.filter(function(result) {
|
|
526
|
+
return result !== null && result !== undefined;
|
|
527
|
+
})
|
|
528
|
+
];
|
|
529
|
+
}
|
|
530
|
+
});
|
|
531
|
+
})();
|
|
532
|
+
}
|
|
533
|
+
/* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-gmail/src/email/querying/pagination.ts"],"sourcesContent":["/** Gmail pagination helpers for single-page operations. */\n\nimport type { gmail_v1 } from 'googleapis';\nimport type { Logger } from '../../types.js';\n\nexport interface SinglePageResult {\n readonly messages: gmail_v1.Schema$Message[];\n readonly nextPageToken: string | undefined;\n}\n\n/**\n * Fetch a single page of messages from Gmail\n */\nexport interface FetchMessagesPageParams {\n readonly gmailQ: string;\n readonly pageSize?: number;\n readonly pageToken: string | undefined;\n readonly body?: boolean;\n readonly logger: Logger;\n readonly metadataHeaders?: readonly string[];\n}\n\nexport async function fetchMessagesPage(gmail: gmail_v1.Gmail, params: FetchMessagesPageParams): Promise<SinglePageResult> {\n const { gmailQ, pageSize = 50, pageToken, body = false, logger, metadataHeaders } = params;\n\n // Secure resource bounds checking - prevent security bypasses\n const maxPageSize = 500; // Gmail API maximum - enforced for security\n const minPageSize = 1; // Minimum valid page size\n\n // Validate input is a positive number to prevent bypass attempts\n if (!Number.isInteger(pageSize) || pageSize < 0) {\n throw new Error(`Invalid pageSize: must be a positive integer, got ${pageSize}`);\n }\n\n const safePageSize = Math.min(Math.max(minPageSize, pageSize), maxPageSize);\n\n if (pageSize !== safePageSize && logger) {\n logger.info('Page size bounded for API safety', { requested: pageSize, applied: safePageSize });\n // No fallback to console - would corrupt MCP stdio communication\n }\n\n try {\n const listParams = {\n userId: 'me',\n q: gmailQ,\n maxResults: safePageSize,\n };\n const listResponse = pageToken && pageToken.trim().length > 0 ? await gmail.users.messages.list({ ...listParams, pageToken }) : await gmail.users.messages.list(listParams);\n const response = listResponse.data;\n const messages = response.messages || [];\n\n if (messages.length === 0) {\n if (logger) logger.info('No messages found on page');\n return { messages: [], nextPageToken: undefined };\n }\n\n const items = messages.map((m: gmail_v1.Schema$Message) => m.id).filter(Boolean) as string[];\n if (items.length === 0) {\n if (logger) logger.info('No valid message ids on page');\n return { messages: [], nextPageToken: response.nextPageToken && response.nextPageToken.trim().length > 0 ? response.nextPageToken : undefined };\n }\n\n const concurrentArgs: FetchMessagesConcurrentlyParams = {\n items,\n concurrency: 5,\n body,\n ...(logger && { logger }),\n ...(metadataHeaders && { metadataHeaders }),\n };\n const detailedMessages = await fetchMessagesConcurrently(gmail, concurrentArgs);\n\n if (logger) logger.info(`Fetched page with ${detailedMessages.length} messages`);\n return {\n messages: detailedMessages,\n nextPageToken: response.nextPageToken && response.nextPageToken.trim().length > 0 ? response.nextPageToken : undefined,\n };\n } catch (error) {\n // Standardized error handling for pagination pipeline\n const errorMessage = error instanceof Error ? error.message : String(error);\n if (logger)\n logger.error('Gmail pagination: single page fetch failed', {\n error: errorMessage,\n query: gmailQ,\n pageSize: safePageSize,\n hasPageToken: !!pageToken,\n });\n\n // Preserve original error type for upstream handling\n if (error instanceof Error) {\n // Enhance error with pagination context\n error.message = `Gmail pagination fetch failed: ${error.message}`;\n throw error;\n }\n\n // Convert non-Error objects to proper Error instances\n throw new Error(`Gmail pagination fetch failed: ${errorMessage}`);\n }\n}\n\nexport interface FetchMessagesConcurrentlyParams {\n readonly items: readonly string[];\n readonly concurrency?: number;\n readonly body?: boolean;\n readonly logger: Logger;\n readonly metadataHeaders?: readonly string[];\n}\n\nexport async function fetchMessagesConcurrently(gmail: gmail_v1.Gmail, params: FetchMessagesConcurrentlyParams): Promise<gmail_v1.Schema$Message[]> {\n const { items, concurrency = 2, body = false, logger, metadataHeaders } = params;\n\n // Secure resource bounds checking for concurrent operations\n const maxConcurrency = 10; // Conservative limit to prevent rate limiting and resource exhaustion\n const minConcurrency = 1; // Minimum valid concurrency\n\n // Validate input is a positive number to prevent bypass attempts\n if (!Number.isInteger(concurrency) || concurrency < 0) {\n throw new Error(`Invalid concurrency: must be a positive integer, got ${concurrency}`);\n }\n\n const safeConcurrency = Math.min(Math.max(minConcurrency, concurrency), maxConcurrency);\n\n if (concurrency !== safeConcurrency && logger) {\n logger.info('Concurrency bounded for API safety', { requested: concurrency, applied: safeConcurrency });\n // No fallback to console - would corrupt MCP stdio communication\n }\n\n if (items.length === 0) return [];\n\n const results: (gmail_v1.Schema$Message | null)[] = new Array(items.length);\n const format = body ? 'full' : 'metadata';\n // Always pass metadataHeaders if provided - body doesn't replace headers, it's additional content\n const metadataHeadersForRequest = metadataHeaders;\n\n // Pre-build request parameters to avoid repeated object creation\n const requestParams = items.map((id) => {\n const baseParams = {\n userId: 'me' as const,\n id,\n format,\n };\n // Only include metadataHeaders if defined (exactOptionalPropertyTypes compliance)\n return metadataHeadersForRequest ? { ...baseParams, metadataHeaders: [...metadataHeadersForRequest] } : baseParams;\n });\n\n // Optimize concurrent processing using batching\n const batchSize = safeConcurrency;\n const batches: (typeof requestParams)[] = [];\n for (let i = 0; i < requestParams.length; i += batchSize) {\n batches.push(requestParams.slice(i, i + batchSize));\n }\n\n let processedCount = 0;\n for (const batch of batches) {\n const batchPromises = batch.map(async (params, batchIndex) => {\n try {\n const messageResponse = await gmail.users.messages.get(params);\n const globalIndex = processedCount + batchIndex;\n results[globalIndex] = messageResponse.data;\n return messageResponse.data;\n } catch (error) {\n // Log individual message fetch failures but continue processing\n const errorMessage = error instanceof Error ? error.message : String(error);\n if (logger)\n logger.info('Gmail pagination: individual message fetch failed, continuing', {\n error: errorMessage,\n messageId: params.id,\n globalIndex: processedCount + batchIndex,\n });\n return null; // Mark as failed but continue\n }\n });\n\n await Promise.all(batchPromises);\n processedCount += batch.length;\n\n // Progress logging for large batches\n if (items.length > 20) {\n if (logger) logger.info(`Gmail pagination: processed ${processedCount}/${items.length} messages`);\n }\n }\n\n // Filter out any null results from failed individual fetches\n return results.filter((result) => result !== null && result !== undefined);\n}\n"],"names":["fetchMessagesConcurrently","fetchMessagesPage","gmail","params","gmailQ","pageSize","pageToken","body","logger","metadataHeaders","maxPageSize","minPageSize","safePageSize","listParams","listResponse","response","messages","items","concurrentArgs","detailedMessages","error","errorMessage","Number","isInteger","Error","Math","min","max","info","requested","applied","userId","q","maxResults","trim","length","users","list","data","nextPageToken","undefined","map","m","id","filter","Boolean","concurrency","message","String","query","hasPageToken","maxConcurrency","minConcurrency","safeConcurrency","results","format","metadataHeadersForRequest","requestParams","batchSize","batches","i","processedCount","batch","batchPromises","Array","baseParams","push","slice","batchIndex","messageResponse","globalIndex","get","messageId","Promise","all","result"],"mappings":"AAAA,yDAAyD;;;;;;;;;;;QA2GnCA;eAAAA;;QArFAC;eAAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAf,SAAeA,kBAAkBC,KAAqB,EAAEC,MAA+B;;YACpFC,0BAAQC,UAAeC,yBAAWC,MAAcC,QAAQC,iBAG1DC,aACAC,aAOAC,cAQEC,YAKAC,oBACAC,UACAC,UAOAC,OAMAC,gBAOAC,kBAOCC,OAEDC;;;;oBAvDAjB,SAA4ED,OAA5EC,2BAA4ED,OAApEE,UAAAA,yCAAW,uBAAIC,YAAqDH,OAArDG,0BAAqDH,OAA1CI,MAAAA,iCAAO,sBAAOC,SAA4BL,OAA5BK,QAAQC,kBAAoBN,OAApBM;oBAEhE,8DAA8D;oBACxDC,cAAc,KAAK,4CAA4C;oBAC/DC,cAAc,GAAG,0BAA0B;oBAEjD,iEAAiE;oBACjE,IAAI,CAACW,OAAOC,SAAS,CAAClB,aAAaA,WAAW,GAAG;wBAC/C,MAAM,IAAImB,MAAM,AAAC,qDAA6D,OAATnB;oBACvE;oBAEMO,eAAea,KAAKC,GAAG,CAACD,KAAKE,GAAG,CAAChB,aAAaN,WAAWK;oBAE/D,IAAIL,aAAaO,gBAAgBJ,QAAQ;wBACvCA,OAAOoB,IAAI,CAAC,oCAAoC;4BAAEC,WAAWxB;4BAAUyB,SAASlB;wBAAa;oBAC7F,iEAAiE;oBACnE;;;;;;;;;oBAGQC,aAAa;wBACjBkB,QAAQ;wBACRC,GAAG5B;wBACH6B,YAAYrB;oBACd;yBACqBN,CAAAA,aAAaA,UAAU4B,IAAI,GAAGC,MAAM,GAAG,CAAA,GAAvC7B;;;;oBAA2C;;wBAAMJ,MAAMkC,KAAK,CAACpB,QAAQ,CAACqB,IAAI,CAAC,wCAAKxB;4BAAYP,WAAAA;;;;2BAAjD;;;;;;oBAAgE;;wBAAMJ,MAAMkC,KAAK,CAACpB,QAAQ,CAACqB,IAAI,CAACxB;;;2BAAhC;;;oBAA1HC;oBACAC,WAAWD,aAAawB,IAAI;oBAC5BtB,WAAWD,SAASC,QAAQ;oBAElC,IAAIA,SAASmB,MAAM,KAAK,GAAG;wBACzB,IAAI3B,QAAQA,OAAOoB,IAAI,CAAC;wBACxB;;4BAAO;gCAAEZ,QAAQ;gCAAMuB,eAAeC;4BAAU;;oBAClD;oBAEMvB,QAAQD,SAASyB,GAAG,CAAC,SAACC;+BAA+BA,EAAEC,EAAE;uBAAEC,MAAM,CAACC;oBACxE,IAAI5B,MAAMkB,MAAM,KAAK,GAAG;wBACtB,IAAI3B,QAAQA,OAAOoB,IAAI,CAAC;wBACxB;;4BAAO;gCAAEZ,QAAQ;gCAAMuB,eAAexB,SAASwB,aAAa,IAAIxB,SAASwB,aAAa,CAACL,IAAI,GAAGC,MAAM,GAAG,IAAIpB,SAASwB,aAAa,GAAGC;4BAAU;;oBAChJ;oBAEMtB,iBAAkD;wBACtDD,OAAAA;wBACA6B,aAAa;wBACbvC,MAAAA;uBACIC,UAAU;wBAAEA,QAAAA;oBAAO,GACnBC,mBAAmB;wBAAEA,iBAAAA;oBAAgB;oBAElB;;wBAAMT,0BAA0BE,OAAOgB;;;oBAA1DC,mBAAmB;oBAEzB,IAAIX,QAAQA,OAAOoB,IAAI,CAAC,AAAC,qBAA4C,OAAxBT,iBAAiBgB,MAAM,EAAC;oBACrE;;wBAAO;4BACLnB,UAAUG;4BACVoB,eAAexB,SAASwB,aAAa,IAAIxB,SAASwB,aAAa,CAACL,IAAI,GAAGC,MAAM,GAAG,IAAIpB,SAASwB,aAAa,GAAGC;wBAC/G;;;oBACOpB;oBACP,sDAAsD;oBAChDC,eAAeD,AAAK,YAALA,OAAiBI,SAAQJ,MAAM2B,OAAO,GAAGC,OAAO5B;oBACrE,IAAIZ,QACFA,OAAOY,KAAK,CAAC,8CAA8C;wBACzDA,OAAOC;wBACP4B,OAAO7C;wBACPC,UAAUO;wBACVsC,cAAc,CAAC,CAAC5C;oBAClB;oBAEF,qDAAqD;oBACrD,IAAIc,AAAK,YAALA,OAAiBI,QAAO;wBAC1B,wCAAwC;wBACxCJ,MAAM2B,OAAO,GAAG,AAAC,kCAA+C,OAAd3B,MAAM2B,OAAO;wBAC/D,MAAM3B;oBACR;oBAEA,sDAAsD;oBACtD,MAAM,IAAII,MAAM,AAAC,kCAA8C,OAAbH;;;;;;;IAEtD;;AAUO,SAAerB,0BAA0BE,KAAqB,EAAEC,MAAuC;;YACpGc,4BAAO6B,2BAAiBvC,MAAcC,QAAQC,iBAGhD0C,gBACAC,gBAOAC,iBASAC,SACAC,QAEAC,2BAGAC,eAWAC,WACAC,SACGC,GAILC,gBACC,2BAAA,mBAAA,gBAAA,WAAA,OAAMC,OACHC;;;;oBA7CA9C,QAAkEd,OAAlEc,6BAAkEd,OAA3D2C,aAAAA,+CAAc,wCAA6C3C,OAA1CI,MAAAA,iCAAO,sBAAOC,SAA4BL,OAA5BK,QAAQC,kBAAoBN,OAApBM;oBAEtD,4DAA4D;oBACtD0C,iBAAiB,IAAI,sEAAsE;oBAC3FC,iBAAiB,GAAG,4BAA4B;oBAEtD,iEAAiE;oBACjE,IAAI,CAAC9B,OAAOC,SAAS,CAACuB,gBAAgBA,cAAc,GAAG;wBACrD,MAAM,IAAItB,MAAM,AAAC,wDAAmE,OAAZsB;oBAC1E;oBAEMO,kBAAkB5B,KAAKC,GAAG,CAACD,KAAKE,GAAG,CAACyB,gBAAgBN,cAAcK;oBAExE,IAAIL,gBAAgBO,mBAAmB7C,QAAQ;wBAC7CA,OAAOoB,IAAI,CAAC,sCAAsC;4BAAEC,WAAWiB;4BAAahB,SAASuB;wBAAgB;oBACrG,iEAAiE;oBACnE;oBAEA,IAAIpC,MAAMkB,MAAM,KAAK,GAAG;;;;oBAElBmB,UAA8C,IAAIU,MAAM/C,MAAMkB,MAAM;oBACpEoB,SAAShD,OAAO,SAAS;oBAC/B,kGAAkG;oBAC5FiD,4BAA4B/C;oBAElC,iEAAiE;oBAC3DgD,gBAAgBxC,MAAMwB,GAAG,CAAC,SAACE;wBAC/B,IAAMsB,aAAa;4BACjBlC,QAAQ;4BACRY,IAAAA;4BACAY,QAAAA;wBACF;wBACA,kFAAkF;wBAClF,OAAOC,4BAA4B,wCAAKS;4BAAYxD,iBAAkB,qBAAG+C;6BAA+BS;oBAC1G;oBAEA,gDAAgD;oBAC1CP,YAAYL;oBACZM;oBACN,IAASC,IAAI,GAAGA,IAAIH,cAActB,MAAM,EAAEyB,KAAKF,UAAW;wBACxDC,QAAQO,IAAI,CAACT,cAAcU,KAAK,CAACP,GAAGA,IAAIF;oBAC1C;oBAEIG,iBAAiB;oBAChB,kCAAA,2BAAA;;;;;;;;;oBAAA,YAAeF;;;2BAAf,6BAAA,QAAA;;;;oBAAMG,QAAN;oBACGC,gBAAgBD,MAAMrB,GAAG,CAAC,SAAOtC,QAAQiE;;gCAErCC,iBACAC,aAGClD,OAEDC;;;;;;;;;;wCANkB;;4CAAMnB,MAAMkC,KAAK,CAACpB,QAAQ,CAACuD,GAAG,CAACpE;;;wCAAjDkE,kBAAkB;wCAClBC,cAAcT,iBAAiBO;wCACrCd,OAAO,CAACgB,YAAY,GAAGD,gBAAgB/B,IAAI;wCAC3C;;4CAAO+B,gBAAgB/B,IAAI;;;wCACpBlB;wCACP,gEAAgE;wCAC1DC,eAAeD,AAAK,YAALA,OAAiBI,SAAQJ,MAAM2B,OAAO,GAAGC,OAAO5B;wCACrE,IAAIZ,QACFA,OAAOoB,IAAI,CAAC,iEAAiE;4CAC3ER,OAAOC;4CACPmD,WAAWrE,OAAOwC,EAAE;4CACpB2B,aAAaT,iBAAiBO;wCAChC;wCACF;;4CAAO;2CAAM,8BAA8B;;;;;;;wBAE/C;;oBAEA;;wBAAMK,QAAQC,GAAG,CAACX;;;oBAAlB;oBACAF,kBAAkBC,MAAM3B,MAAM;oBAE9B,qCAAqC;oBACrC,IAAIlB,MAAMkB,MAAM,GAAG,IAAI;wBACrB,IAAI3B,QAAQA,OAAOoB,IAAI,CAAC,AAAC,+BAAgDX,OAAlB4C,gBAAe,KAAgB,OAAb5C,MAAMkB,MAAM,EAAC;oBACxF;;;oBA1BG;;;;;;;;;;;;oBAAA;oBAAA;;;;;;;6BAAA,6BAAA;4BAAA;;;4BAAA;kCAAA;;;;;;;oBA6BL,6DAA6D;oBAC7D;;wBAAOmB,QAAQV,MAAM,CAAC,SAAC+B;mCAAWA,WAAW,QAAQA,WAAWnC;;;;;IAClE"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { GmailQuery as QueryNode } from '../../schemas/gmail-query-schema.js';
|
|
2
|
+
/**
|
|
3
|
+
* Field operator interface for query filters
|
|
4
|
+
*/
|
|
5
|
+
export interface FieldOperator {
|
|
6
|
+
$any?: string[];
|
|
7
|
+
$all?: string[];
|
|
8
|
+
$none?: string[];
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Field query interface with support for all email fields including categories and labels
|
|
12
|
+
*/
|
|
13
|
+
export interface FieldQuery {
|
|
14
|
+
from?: FieldOperator | string;
|
|
15
|
+
to?: FieldOperator | string;
|
|
16
|
+
cc?: FieldOperator | string;
|
|
17
|
+
bcc?: FieldOperator | string;
|
|
18
|
+
subject?: FieldOperator | string;
|
|
19
|
+
text?: FieldOperator | string;
|
|
20
|
+
body?: FieldOperator | string;
|
|
21
|
+
categories?: FieldOperator | string;
|
|
22
|
+
label?: FieldOperator | string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Filter extraction result with all collected values from a query
|
|
26
|
+
*/
|
|
27
|
+
export interface Filters {
|
|
28
|
+
subjectIncludes?: string[];
|
|
29
|
+
bodyIncludes?: string[];
|
|
30
|
+
textIncludes?: string[];
|
|
31
|
+
fromIncludes?: string[];
|
|
32
|
+
toIncludes?: string[];
|
|
33
|
+
ccIncludes?: string[];
|
|
34
|
+
bccIncludes?: string[];
|
|
35
|
+
categoriesIncludes?: string[];
|
|
36
|
+
labelIncludes?: string[];
|
|
37
|
+
hasAttachment?: boolean;
|
|
38
|
+
since?: string;
|
|
39
|
+
before?: string;
|
|
40
|
+
}
|
|
41
|
+
export declare function toGmailQuery(query: QueryNode, options?: {
|
|
42
|
+
dateSlash?: boolean;
|
|
43
|
+
}): {
|
|
44
|
+
q: string;
|
|
45
|
+
filters: Record<string, unknown>;
|
|
46
|
+
};
|
|
47
|
+
export declare function extractFiltersFromParsed(parsed: QueryNode): Filters;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { GmailQuery as QueryNode } from '../../schemas/gmail-query-schema.js';
|
|
2
|
+
/**
|
|
3
|
+
* Field operator interface for query filters
|
|
4
|
+
*/
|
|
5
|
+
export interface FieldOperator {
|
|
6
|
+
$any?: string[];
|
|
7
|
+
$all?: string[];
|
|
8
|
+
$none?: string[];
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Field query interface with support for all email fields including categories and labels
|
|
12
|
+
*/
|
|
13
|
+
export interface FieldQuery {
|
|
14
|
+
from?: FieldOperator | string;
|
|
15
|
+
to?: FieldOperator | string;
|
|
16
|
+
cc?: FieldOperator | string;
|
|
17
|
+
bcc?: FieldOperator | string;
|
|
18
|
+
subject?: FieldOperator | string;
|
|
19
|
+
text?: FieldOperator | string;
|
|
20
|
+
body?: FieldOperator | string;
|
|
21
|
+
categories?: FieldOperator | string;
|
|
22
|
+
label?: FieldOperator | string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Filter extraction result with all collected values from a query
|
|
26
|
+
*/
|
|
27
|
+
export interface Filters {
|
|
28
|
+
subjectIncludes?: string[];
|
|
29
|
+
bodyIncludes?: string[];
|
|
30
|
+
textIncludes?: string[];
|
|
31
|
+
fromIncludes?: string[];
|
|
32
|
+
toIncludes?: string[];
|
|
33
|
+
ccIncludes?: string[];
|
|
34
|
+
bccIncludes?: string[];
|
|
35
|
+
categoriesIncludes?: string[];
|
|
36
|
+
labelIncludes?: string[];
|
|
37
|
+
hasAttachment?: boolean;
|
|
38
|
+
since?: string;
|
|
39
|
+
before?: string;
|
|
40
|
+
}
|
|
41
|
+
export declare function toGmailQuery(query: QueryNode, options?: {
|
|
42
|
+
dateSlash?: boolean;
|
|
43
|
+
}): {
|
|
44
|
+
q: string;
|
|
45
|
+
filters: Record<string, unknown>;
|
|
46
|
+
};
|
|
47
|
+
export declare function extractFiltersFromParsed(parsed: QueryNode): Filters;
|