@mcp-z/mcp-gmail 1.0.9 → 1.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/constants.js.map +1 -1
- package/dist/cjs/email/composition/rfc822-builder.js.map +1 -1
- package/dist/cjs/email/messages/fetch-message.js +15 -21
- package/dist/cjs/email/messages/fetch-message.js.map +1 -1
- package/dist/cjs/email/messages/messages.js +2 -2
- package/dist/cjs/email/messages/messages.js.map +1 -1
- package/dist/cjs/email/parsing/header-parsing.js.map +1 -1
- package/dist/cjs/email/parsing/headers-utils.js.map +1 -1
- package/dist/cjs/email/parsing/html-processing.js.map +1 -1
- package/dist/cjs/email/parsing/message-extraction.js.map +1 -1
- package/dist/cjs/email/querying/execute-query.js +7 -14
- package/dist/cjs/email/querying/execute-query.js.map +1 -1
- package/dist/cjs/email/querying/pagination.js +19 -24
- package/dist/cjs/email/querying/pagination.js.map +1 -1
- package/dist/cjs/email/querying/query-builder.js +4 -2
- package/dist/cjs/email/querying/query-builder.js.map +1 -1
- package/dist/cjs/email/querying/search-execution.js +2 -5
- package/dist/cjs/email/querying/search-execution.js.map +1 -1
- package/dist/cjs/index.js +10 -24
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/labels/gmail-labels.js +2 -5
- package/dist/cjs/labels/gmail-labels.js.map +1 -1
- package/dist/cjs/lib/base64-encoding.js.map +1 -1
- package/dist/cjs/lib/create-store.js +2 -5
- package/dist/cjs/lib/create-store.js.map +1 -1
- package/dist/cjs/lib/date-conversion.js.map +1 -1
- package/dist/cjs/lib/messages-to-row.js +2 -2
- package/dist/cjs/lib/messages-to-row.js.map +1 -1
- package/dist/cjs/mcp/index.js +8 -19
- package/dist/cjs/mcp/index.js.map +1 -1
- package/dist/cjs/mcp/prompts/draft-email.js +3 -6
- package/dist/cjs/mcp/prompts/draft-email.js.map +1 -1
- package/dist/cjs/mcp/prompts/index.js.map +1 -1
- package/dist/cjs/mcp/prompts/query-syntax.js +3 -6
- package/dist/cjs/mcp/prompts/query-syntax.js.map +1 -1
- package/dist/cjs/mcp/resources/email.js +3 -6
- package/dist/cjs/mcp/resources/email.js.map +1 -1
- package/dist/cjs/mcp/resources/index.js.map +1 -1
- package/dist/cjs/mcp/tools/categories-list.js +4 -8
- package/dist/cjs/mcp/tools/categories-list.js.map +1 -1
- package/dist/cjs/mcp/tools/index.js.map +1 -1
- package/dist/cjs/mcp/tools/label-add.js +4 -8
- package/dist/cjs/mcp/tools/label-add.js.map +1 -1
- package/dist/cjs/mcp/tools/label-delete.d.cts +1 -1
- package/dist/cjs/mcp/tools/label-delete.d.ts +1 -1
- package/dist/cjs/mcp/tools/label-delete.js +36 -32
- package/dist/cjs/mcp/tools/label-delete.js.map +1 -1
- package/dist/cjs/mcp/tools/labels-list.js +4 -8
- package/dist/cjs/mcp/tools/labels-list.js.map +1 -1
- package/dist/cjs/mcp/tools/message-get.d.cts +21 -21
- package/dist/cjs/mcp/tools/message-get.d.ts +21 -21
- package/dist/cjs/mcp/tools/message-get.js +4 -8
- package/dist/cjs/mcp/tools/message-get.js.map +1 -1
- package/dist/cjs/mcp/tools/message-mark-read.js +4 -8
- package/dist/cjs/mcp/tools/message-mark-read.js.map +1 -1
- package/dist/cjs/mcp/tools/message-move-to-trash.d.cts +1 -1
- package/dist/cjs/mcp/tools/message-move-to-trash.d.ts +1 -1
- package/dist/cjs/mcp/tools/message-move-to-trash.js +36 -32
- package/dist/cjs/mcp/tools/message-move-to-trash.js.map +1 -1
- package/dist/cjs/mcp/tools/message-respond.js +5 -11
- package/dist/cjs/mcp/tools/message-respond.js.map +1 -1
- package/dist/cjs/mcp/tools/message-search.d.cts +25 -25
- package/dist/cjs/mcp/tools/message-search.d.ts +25 -25
- package/dist/cjs/mcp/tools/message-search.js +19 -25
- package/dist/cjs/mcp/tools/message-search.js.map +1 -1
- package/dist/cjs/mcp/tools/message-send.d.cts +3 -3
- package/dist/cjs/mcp/tools/message-send.d.ts +3 -3
- package/dist/cjs/mcp/tools/message-send.js +4 -8
- package/dist/cjs/mcp/tools/message-send.js.map +1 -1
- package/dist/cjs/mcp/tools/messages-export-csv.d.cts +2 -2
- package/dist/cjs/mcp/tools/messages-export-csv.d.ts +2 -2
- package/dist/cjs/mcp/tools/messages-export-csv.js +16 -22
- package/dist/cjs/mcp/tools/messages-export-csv.js.map +1 -1
- package/dist/cjs/schemas/gmail-query-schema.d.cts +2 -1
- package/dist/cjs/schemas/gmail-query-schema.d.ts +2 -1
- package/dist/cjs/schemas/gmail-query-schema.js +26 -30
- package/dist/cjs/schemas/gmail-query-schema.js.map +1 -1
- package/dist/cjs/schemas/index.js.map +1 -1
- package/dist/cjs/setup/config.js +11 -25
- package/dist/cjs/setup/config.js.map +1 -1
- package/dist/cjs/setup/http.js +15 -16
- package/dist/cjs/setup/http.js.map +1 -1
- package/dist/cjs/setup/index.js.map +1 -1
- package/dist/cjs/setup/oauth-google.js +9 -16
- package/dist/cjs/setup/oauth-google.js.map +1 -1
- package/dist/cjs/setup/runtime.d.cts +1 -1
- package/dist/cjs/setup/runtime.d.ts +1 -1
- package/dist/cjs/setup/runtime.js +29 -44
- package/dist/cjs/setup/runtime.js.map +1 -1
- package/dist/cjs/setup/stdio.js +15 -16
- package/dist/cjs/setup/stdio.js.map +1 -1
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/email/composition/rfc822-builder.js.map +1 -1
- package/dist/esm/email/messages/fetch-message.js.map +1 -1
- package/dist/esm/email/messages/messages.js.map +1 -1
- package/dist/esm/email/parsing/header-parsing.js.map +1 -1
- package/dist/esm/email/parsing/headers-utils.js.map +1 -1
- package/dist/esm/email/parsing/html-processing.js.map +1 -1
- package/dist/esm/email/parsing/message-extraction.js.map +1 -1
- package/dist/esm/email/querying/execute-query.js.map +1 -1
- package/dist/esm/email/querying/pagination.js.map +1 -1
- package/dist/esm/email/querying/query-builder.js.map +1 -1
- package/dist/esm/email/querying/search-execution.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/labels/gmail-labels.js.map +1 -1
- package/dist/esm/lib/base64-encoding.js.map +1 -1
- package/dist/esm/lib/create-store.js.map +1 -1
- package/dist/esm/lib/date-conversion.js.map +1 -1
- package/dist/esm/lib/messages-to-row.js.map +1 -1
- package/dist/esm/mcp/index.js.map +1 -1
- package/dist/esm/mcp/prompts/draft-email.js.map +1 -1
- package/dist/esm/mcp/prompts/index.js.map +1 -1
- package/dist/esm/mcp/prompts/query-syntax.js.map +1 -1
- package/dist/esm/mcp/resources/email.js.map +1 -1
- package/dist/esm/mcp/resources/index.js.map +1 -1
- package/dist/esm/mcp/tools/categories-list.js.map +1 -1
- package/dist/esm/mcp/tools/index.js.map +1 -1
- package/dist/esm/mcp/tools/label-add.js.map +1 -1
- package/dist/esm/mcp/tools/label-delete.d.ts +1 -1
- package/dist/esm/mcp/tools/label-delete.js.map +1 -1
- package/dist/esm/mcp/tools/labels-list.js.map +1 -1
- package/dist/esm/mcp/tools/message-get.d.ts +21 -21
- package/dist/esm/mcp/tools/message-get.js.map +1 -1
- package/dist/esm/mcp/tools/message-mark-read.js.map +1 -1
- package/dist/esm/mcp/tools/message-move-to-trash.d.ts +1 -1
- package/dist/esm/mcp/tools/message-move-to-trash.js.map +1 -1
- package/dist/esm/mcp/tools/message-respond.js.map +1 -1
- package/dist/esm/mcp/tools/message-search.d.ts +25 -25
- package/dist/esm/mcp/tools/message-search.js +13 -12
- package/dist/esm/mcp/tools/message-search.js.map +1 -1
- package/dist/esm/mcp/tools/message-send.d.ts +3 -3
- package/dist/esm/mcp/tools/message-send.js.map +1 -1
- package/dist/esm/mcp/tools/messages-export-csv.d.ts +2 -2
- package/dist/esm/mcp/tools/messages-export-csv.js +9 -8
- package/dist/esm/mcp/tools/messages-export-csv.js.map +1 -1
- package/dist/esm/schemas/gmail-query-schema.d.ts +2 -1
- package/dist/esm/schemas/gmail-query-schema.js +18 -21
- package/dist/esm/schemas/gmail-query-schema.js.map +1 -1
- package/dist/esm/schemas/index.js.map +1 -1
- package/dist/esm/setup/config.js.map +1 -1
- package/dist/esm/setup/http.js.map +1 -1
- package/dist/esm/setup/index.js.map +1 -1
- package/dist/esm/setup/oauth-google.js.map +1 -1
- package/dist/esm/setup/runtime.d.ts +1 -1
- package/dist/esm/setup/runtime.js.map +1 -1
- package/dist/esm/setup/stdio.js.map +1 -1
- package/dist/esm/types.js.map +1 -1
- package/package.json +11 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/Projects/mcp-z/mcp-gmail/src/email/querying/query-builder.ts"],"sourcesContent":["import type { GmailQuery as QueryNode } from '../../schemas/gmail-query-schema.ts';\n\n/**\n * Field operator interface for query filters\n */\nexport interface FieldOperator {\n $any?: string[];\n $all?: string[];\n $none?: string[];\n}\n\n/**\n * Field query interface with support for all email fields including categories and labels\n */\nexport interface FieldQuery {\n from?: FieldOperator | string;\n to?: FieldOperator | string;\n cc?: FieldOperator | string;\n bcc?: FieldOperator | string;\n subject?: FieldOperator | string;\n text?: FieldOperator | string;\n body?: FieldOperator | string;\n categories?: FieldOperator | string;\n label?: FieldOperator | string;\n}\n\n/**\n * Filter extraction result with all collected values from a query\n */\nexport interface Filters {\n subjectIncludes?: string[];\n bodyIncludes?: string[];\n textIncludes?: string[];\n fromIncludes?: string[];\n toIncludes?: string[];\n ccIncludes?: string[];\n bccIncludes?: string[];\n categoriesIncludes?: string[];\n labelIncludes?: string[];\n hasAttachment?: boolean;\n since?: string;\n before?: string;\n}\n\n/**\n * Gmail category mappings - case insensitive input to exact system labels\n */\nconst GMAIL_CATEGORIES = {\n primary: 'CATEGORY_PERSONAL',\n social: 'CATEGORY_SOCIAL',\n promotions: 'CATEGORY_PROMOTIONS',\n updates: 'CATEGORY_UPDATES',\n forums: 'CATEGORY_FORUMS',\n} as const;\n\n/**\n * Validate and map category name to Gmail system label\n * Throws error for invalid categories (fail fast principle)\n */\nfunction mapCategoryToLabel(category: string): string {\n // Input validation - fail fast on invalid input\n if (!category || typeof category !== 'string') {\n throw new Error(`Invalid category: expected non-empty string, got ${typeof category}`);\n }\n\n const trimmed = category.trim();\n if (trimmed === '') {\n throw new Error('Invalid category: empty string after trimming');\n }\n\n // Fail fast on unknown categories\n const normalizedCategory = trimmed.toLowerCase();\n const systemLabel = GMAIL_CATEGORIES[normalizedCategory as keyof typeof GMAIL_CATEGORIES];\n\n if (!systemLabel) {\n throw new Error(`Invalid Gmail category: \"${category}\". Valid categories: ${Object.keys(GMAIL_CATEGORIES).join(', ')}`);\n }\n\n return systemLabel;\n}\n\nexport function toGmailQuery(query: QueryNode, options: { dateSlash?: boolean } = {}) {\n const slashDates = options.dateSlash !== false;\n if (query.rawGmailQuery) {\n return { q: query.rawGmailQuery, filters: {} };\n }\n const subjectIncludes: string[] = [];\n const bodyIncludes: string[] = [];\n const textIncludes: string[] = [];\n const fromIncludes: string[] = [];\n const toIncludes: string[] = [];\n const ccIncludes: string[] = [];\n const bccIncludes: string[] = [];\n const categoriesIncludes: string[] = [];\n const labelIncludes: string[] = [];\n let hasAttachment: boolean | undefined;\n\n function p(s: unknown) {\n return `(${String(s ?? '')})`;\n }\n function fmt(d: unknown) {\n const str = String(d ?? '');\n return slashDates ? str.replace(/-/g, '/') : str;\n }\n\n function fv(field: string, raw?: unknown) {\n const rawVal = String(raw ?? '');\n if (rawVal.trim() === '') {\n throw new Error(`Invalid ${field} value: empty string`);\n }\n const v = quote(rawVal);\n if (field === 'subject') subjectIncludes.push(rawVal);\n if (field === 'body') bodyIncludes.push(rawVal);\n if (field === 'text') {\n textIncludes.push(rawVal);\n bodyIncludes.push(rawVal);\n }\n if (field === 'from') fromIncludes.push(rawVal);\n if (field === 'to') toIncludes.push(rawVal);\n if (field === 'cc') ccIncludes.push(rawVal);\n if (field === 'bcc') bccIncludes.push(rawVal);\n if (field === 'categories') {\n const systemLabel = mapCategoryToLabel(rawVal);\n categoriesIncludes.push(rawVal);\n return `label:${systemLabel}`;\n }\n if (field === 'label') {\n // Direct passthrough to Gmail's label syntax (case-sensitive)\n labelIncludes.push(rawVal);\n return `label:${quote(rawVal)}`;\n }\n if (field === 'text' || field === 'body') return p(`subject:${v} OR ${v}`);\n return `${field}:${v}`;\n }\n\n function chain(op: 'AND' | 'OR', arr: string[]) {\n if (arr.length === 0) throw new Error(`chain: empty array for ${op} operation`);\n if (arr.length === 1) {\n const first = arr[0] ?? '';\n return first;\n }\n return p(arr.join(` ${op} `));\n }\n\n function fieldExpr(field: string, op: FieldOperator) {\n if (op.$any) {\n const results = op.$any.map((v: string) => fv(field, String(v ?? '')));\n return chain('OR', results);\n }\n if (op.$all) {\n const results = op.$all.map((v: string) => fv(field, String(v ?? '')));\n return chain('AND', results);\n }\n if (op.$none) {\n const results = op.$none.map((v: string) => fv(field, String(v ?? '')));\n return `NOT ${p(chain('OR', results))}`;\n }\n throw new Error(`Unknown field operator ${JSON.stringify(op)}`);\n }\n\n function dateExpr(d: unknown) {\n const parts: string[] = [];\n if (d && typeof d === 'object' && '$gte' in d) {\n parts.push(`after:${fmt(d.$gte)}`);\n }\n if (d && typeof d === 'object' && '$lt' in d) {\n parts.push(`before:${fmt(d.$lt)}`);\n }\n return parts.length > 1 ? p(parts.join(' AND ')) : (parts[0] ?? '');\n }\n\n function fieldKeys() {\n return ['from', 'to', 'cc', 'bcc', 'subject', 'text', 'body', 'categories', 'label'];\n }\n\n function quote(s?: unknown) {\n const str = String(s ?? '');\n return /[\\s\"()]/.test(str) ? `\"${str.replace(/[\"\\\\]/g, (m) => `\\\\${m}`)}\"` : str;\n }\n\n function emit(n: unknown): string {\n if (!n || typeof n !== 'object') return '';\n\n if ('$and' in n && Array.isArray(n.$and)) {\n return p(n.$and.map(emit).join(' AND '));\n }\n if ('$or' in n && Array.isArray(n.$or)) {\n return p(n.$or.map(emit).join(' OR '));\n }\n if ('$not' in n) {\n return `NOT ${emit(n.$not)}`;\n }\n if ('hasAttachment' in n) {\n hasAttachment = true;\n return 'has:attachment';\n }\n if ('fuzzyPhrase' in n) {\n // Gmail fuzzy phrase matching using quoted strings\n // Example: { fuzzyPhrase: \"quarterly report\" } -> \"quarterly report\"\n return quote(n.fuzzyPhrase);\n }\n if ('date' in n) {\n return dateExpr(n.date);\n }\n\n // Handle empty objects\n const keys = Object.keys(n);\n if (keys.length === 0) return '';\n\n if (keys.length === 1) {\n const k = String(keys[0] ?? '');\n if (fieldKeys().includes(k)) {\n const op = (n as Record<string, unknown>)[k];\n // Handle string-only category queries properly (C2 fix)\n const normalizedOp: FieldOperator = typeof op === 'string' ? { $any: [op] } : (op ?? {});\n return fieldExpr(k, normalizedOp);\n }\n }\n throw new Error(`Unknown node: ${JSON.stringify(n)}`);\n }\n\n function emitTop(n: unknown): string {\n if (!n || typeof n !== 'object') return '';\n\n // Handle empty objects\n if (Object.keys(n).length === 0) return '';\n\n if ('$and' in n && Array.isArray(n.$and)) {\n return n.$and.map(emit).join(' ');\n }\n if ('$or' in n && Array.isArray(n.$or)) {\n return n.$or.map(emit).join(' OR ');\n }\n if ('$not' in n) {\n return `NOT ${emit(n.$not)}`;\n }\n if ('hasAttachment' in n) {\n hasAttachment = true;\n return 'has:attachment';\n }\n if ('fuzzyPhrase' in n) {\n // Gmail fuzzy phrase matching using quoted strings\n return quote(n.fuzzyPhrase);\n }\n if ('date' in n) {\n return dateExpr(n.date);\n }\n return emit(n);\n }\n\n const q = emitTop(query);\n const filters: Record<string, unknown> = {};\n if (subjectIncludes.length) filters.subjectIncludes = subjectIncludes;\n if (bodyIncludes.length) filters.bodyIncludes = bodyIncludes;\n if (textIncludes.length) filters.textIncludes = textIncludes;\n if (fromIncludes.length) filters.fromIncludes = fromIncludes;\n if (toIncludes.length) filters.toIncludes = toIncludes;\n if (ccIncludes.length) filters.ccIncludes = ccIncludes;\n if (bccIncludes.length) filters.bccIncludes = bccIncludes;\n if (categoriesIncludes.length) filters.categoriesIncludes = categoriesIncludes;\n if (labelIncludes.length) filters.labelIncludes = labelIncludes;\n if (typeof hasAttachment === 'boolean') filters.hasAttachment = hasAttachment;\n return { q: q ?? '', filters };\n}\n\nexport function extractFiltersFromParsed(parsed: QueryNode): Filters {\n const filters: Filters = {\n subjectIncludes: [],\n bodyIncludes: [],\n textIncludes: [],\n categoriesIncludes: [],\n labelIncludes: [],\n };\n\n function walk(node: unknown): void {\n if (!node || typeof node !== 'object') return;\n\n if ('$and' in node && Array.isArray(node.$and)) {\n node.$and.forEach(walk);\n return;\n }\n if ('$or' in node && Array.isArray(node.$or)) {\n node.$or.forEach(walk);\n return;\n }\n if ('$not' in node) {\n walk(node.$not);\n return;\n }\n if ('hasAttachment' in node) {\n filters.hasAttachment = node.hasAttachment === true;\n return;\n }\n if ('date' in node) {\n const dateObj = node.date;\n if (dateObj && typeof dateObj === 'object') {\n if ('$gte' in dateObj) {\n filters.since = String(dateObj.$gte);\n }\n if ('$lt' in dateObj) {\n filters.before = String(dateObj.$lt);\n }\n }\n return;\n }\n\n const keys = Object.keys(node || {});\n for (const k of keys) {\n const v = (node as Record<string, unknown>)[k];\n if (!v || typeof v !== 'object') continue;\n\n if (k === 'subject') {\n if ('$any' in v && Array.isArray(v.$any)) filters.subjectIncludes?.push(...v.$any);\n if ('$all' in v && Array.isArray(v.$all)) filters.subjectIncludes?.push(...v.$all);\n if ('$none' in v && Array.isArray(v.$none)) filters.subjectIncludes?.push(...v.$none);\n } else if (k === 'body') {\n if ('$any' in v && Array.isArray(v.$any)) filters.bodyIncludes?.push(...v.$any);\n if ('$all' in v && Array.isArray(v.$all)) filters.bodyIncludes?.push(...v.$all);\n if ('$none' in v && Array.isArray(v.$none)) filters.bodyIncludes?.push(...v.$none);\n } else if (k === 'text') {\n if ('$any' in v && Array.isArray(v.$any)) filters.textIncludes?.push(...v.$any);\n if ('$all' in v && Array.isArray(v.$all)) filters.textIncludes?.push(...v.$all);\n if ('$none' in v && Array.isArray(v.$none)) filters.textIncludes?.push(...v.$none);\n } else if (k === 'categories') {\n // Validate all categories (will throw on invalid)\n if ('$any' in v && Array.isArray(v.$any)) {\n v.$any.forEach((cat: unknown) => {\n mapCategoryToLabel(String(cat));\n });\n filters.categoriesIncludes?.push(...v.$any.map(String));\n }\n if ('$all' in v && Array.isArray(v.$all)) {\n v.$all.forEach((cat: unknown) => {\n mapCategoryToLabel(String(cat));\n });\n filters.categoriesIncludes?.push(...v.$all.map(String));\n }\n if ('$none' in v && Array.isArray(v.$none)) {\n v.$none.forEach((cat: unknown) => {\n mapCategoryToLabel(String(cat));\n });\n filters.categoriesIncludes?.push(...v.$none.map(String));\n }\n } else if (k === 'label') {\n // Direct passthrough for labels (case-sensitive)\n if ('$any' in v && Array.isArray(v.$any)) filters.labelIncludes?.push(...v.$any.map(String));\n if ('$all' in v && Array.isArray(v.$all)) filters.labelIncludes?.push(...v.$all.map(String));\n if ('$none' in v && Array.isArray(v.$none)) filters.labelIncludes?.push(...v.$none.map(String));\n }\n }\n }\n walk(parsed);\n return filters;\n}\n"],"names":["extractFiltersFromParsed","toGmailQuery","GMAIL_CATEGORIES","primary","social","promotions","updates","forums","mapCategoryToLabel","category","Error","trimmed","trim","normalizedCategory","toLowerCase","systemLabel","Object","keys","join","query","options","slashDates","dateSlash","rawGmailQuery","q","filters","subjectIncludes","bodyIncludes","textIncludes","fromIncludes","toIncludes","ccIncludes","bccIncludes","categoriesIncludes","labelIncludes","hasAttachment","p","s","String","fmt","d","str","replace","fv","field","raw","rawVal","v","quote","push","chain","op","arr","length","first","fieldExpr","$any","results","map","$all","$none","JSON","stringify","dateExpr","parts","$gte","$lt","fieldKeys","test","m","emit","n","Array","isArray","$and","$or","$not","fuzzyPhrase","date","k","includes","normalizedOp","emitTop","parsed","walk","node","forEach","dateObj","since","before","cat"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/mcp-z/mcp-gmail/src/email/querying/query-builder.ts"],"sourcesContent":["import type { GmailQuery as QueryNode } from '../../schemas/gmail-query-schema.ts';\n\n/**\n * Field operator interface for query filters\n */\nexport interface FieldOperator {\n $any?: string[];\n $all?: string[];\n $none?: string[];\n}\n\n/**\n * Field query interface with support for all email fields including categories and labels\n */\nexport interface FieldQuery {\n from?: FieldOperator | string;\n to?: FieldOperator | string;\n cc?: FieldOperator | string;\n bcc?: FieldOperator | string;\n subject?: FieldOperator | string;\n text?: FieldOperator | string;\n body?: FieldOperator | string;\n categories?: FieldOperator | string;\n label?: FieldOperator | string;\n}\n\n/**\n * Filter extraction result with all collected values from a query\n */\nexport interface Filters {\n subjectIncludes?: string[];\n bodyIncludes?: string[];\n textIncludes?: string[];\n fromIncludes?: string[];\n toIncludes?: string[];\n ccIncludes?: string[];\n bccIncludes?: string[];\n categoriesIncludes?: string[];\n labelIncludes?: string[];\n hasAttachment?: boolean;\n since?: string;\n before?: string;\n}\n\n/**\n * Gmail category mappings - case insensitive input to exact system labels\n */\nconst GMAIL_CATEGORIES = {\n primary: 'CATEGORY_PERSONAL',\n social: 'CATEGORY_SOCIAL',\n promotions: 'CATEGORY_PROMOTIONS',\n updates: 'CATEGORY_UPDATES',\n forums: 'CATEGORY_FORUMS',\n} as const;\n\n/**\n * Validate and map category name to Gmail system label\n * Throws error for invalid categories (fail fast principle)\n */\nfunction mapCategoryToLabel(category: string): string {\n // Input validation - fail fast on invalid input\n if (!category || typeof category !== 'string') {\n throw new Error(`Invalid category: expected non-empty string, got ${typeof category}`);\n }\n\n const trimmed = category.trim();\n if (trimmed === '') {\n throw new Error('Invalid category: empty string after trimming');\n }\n\n // Fail fast on unknown categories\n const normalizedCategory = trimmed.toLowerCase();\n const systemLabel = GMAIL_CATEGORIES[normalizedCategory as keyof typeof GMAIL_CATEGORIES];\n\n if (!systemLabel) {\n throw new Error(`Invalid Gmail category: \"${category}\". Valid categories: ${Object.keys(GMAIL_CATEGORIES).join(', ')}`);\n }\n\n return systemLabel;\n}\n\nexport function toGmailQuery(query: QueryNode, options: { dateSlash?: boolean } = {}) {\n const slashDates = options.dateSlash !== false;\n if (query.rawGmailQuery) {\n return { q: query.rawGmailQuery, filters: {} };\n }\n const subjectIncludes: string[] = [];\n const bodyIncludes: string[] = [];\n const textIncludes: string[] = [];\n const fromIncludes: string[] = [];\n const toIncludes: string[] = [];\n const ccIncludes: string[] = [];\n const bccIncludes: string[] = [];\n const categoriesIncludes: string[] = [];\n const labelIncludes: string[] = [];\n let hasAttachment: boolean | undefined;\n\n function p(s: unknown) {\n return `(${String(s ?? '')})`;\n }\n function fmt(d: unknown) {\n const str = String(d ?? '');\n return slashDates ? str.replace(/-/g, '/') : str;\n }\n\n function fv(field: string, raw?: unknown) {\n const rawVal = String(raw ?? '');\n if (rawVal.trim() === '') {\n throw new Error(`Invalid ${field} value: empty string`);\n }\n const v = quote(rawVal);\n if (field === 'subject') subjectIncludes.push(rawVal);\n if (field === 'body') bodyIncludes.push(rawVal);\n if (field === 'text') {\n textIncludes.push(rawVal);\n bodyIncludes.push(rawVal);\n }\n if (field === 'from') fromIncludes.push(rawVal);\n if (field === 'to') toIncludes.push(rawVal);\n if (field === 'cc') ccIncludes.push(rawVal);\n if (field === 'bcc') bccIncludes.push(rawVal);\n if (field === 'categories') {\n const systemLabel = mapCategoryToLabel(rawVal);\n categoriesIncludes.push(rawVal);\n return `label:${systemLabel}`;\n }\n if (field === 'label') {\n // Direct passthrough to Gmail's label syntax (case-sensitive)\n labelIncludes.push(rawVal);\n return `label:${quote(rawVal)}`;\n }\n if (field === 'text' || field === 'body') return p(`subject:${v} OR ${v}`);\n return `${field}:${v}`;\n }\n\n function chain(op: 'AND' | 'OR', arr: string[]) {\n if (arr.length === 0) throw new Error(`chain: empty array for ${op} operation`);\n if (arr.length === 1) {\n const first = arr[0] ?? '';\n return first;\n }\n return p(arr.join(` ${op} `));\n }\n\n function fieldExpr(field: string, op: FieldOperator) {\n if (op.$any) {\n const results = op.$any.map((v: string) => fv(field, String(v ?? '')));\n return chain('OR', results);\n }\n if (op.$all) {\n const results = op.$all.map((v: string) => fv(field, String(v ?? '')));\n return chain('AND', results);\n }\n if (op.$none) {\n const results = op.$none.map((v: string) => fv(field, String(v ?? '')));\n return `NOT ${p(chain('OR', results))}`;\n }\n throw new Error(`Unknown field operator ${JSON.stringify(op)}`);\n }\n\n function dateExpr(d: unknown) {\n const parts: string[] = [];\n if (d && typeof d === 'object' && '$gte' in d) {\n parts.push(`after:${fmt(d.$gte)}`);\n }\n if (d && typeof d === 'object' && '$lt' in d) {\n parts.push(`before:${fmt(d.$lt)}`);\n }\n return parts.length > 1 ? p(parts.join(' AND ')) : (parts[0] ?? '');\n }\n\n function fieldKeys() {\n return ['from', 'to', 'cc', 'bcc', 'subject', 'text', 'body', 'categories', 'label'];\n }\n\n function quote(s?: unknown) {\n const str = String(s ?? '');\n return /[\\s\"()]/.test(str) ? `\"${str.replace(/[\"\\\\]/g, (m) => `\\\\${m}`)}\"` : str;\n }\n\n function emit(n: unknown): string {\n if (!n || typeof n !== 'object') return '';\n\n if ('$and' in n && Array.isArray(n.$and)) {\n return p(n.$and.map(emit).join(' AND '));\n }\n if ('$or' in n && Array.isArray(n.$or)) {\n return p(n.$or.map(emit).join(' OR '));\n }\n if ('$not' in n) {\n return `NOT ${emit(n.$not)}`;\n }\n if ('hasAttachment' in n) {\n hasAttachment = true;\n return 'has:attachment';\n }\n if ('fuzzyPhrase' in n) {\n // Gmail fuzzy phrase matching using quoted strings\n // Example: { fuzzyPhrase: \"quarterly report\" } -> \"quarterly report\"\n return quote(n.fuzzyPhrase);\n }\n if ('date' in n) {\n return dateExpr(n.date);\n }\n\n // Handle empty objects\n const keys = Object.keys(n);\n if (keys.length === 0) return '';\n\n if (keys.length === 1) {\n const k = String(keys[0] ?? '');\n if (fieldKeys().includes(k)) {\n const op = (n as Record<string, unknown>)[k];\n // Handle string-only category queries properly (C2 fix)\n const normalizedOp: FieldOperator = typeof op === 'string' ? { $any: [op] } : (op ?? {});\n return fieldExpr(k, normalizedOp);\n }\n }\n throw new Error(`Unknown node: ${JSON.stringify(n)}`);\n }\n\n function emitTop(n: unknown): string {\n if (!n || typeof n !== 'object') return '';\n\n // Handle empty objects\n if (Object.keys(n).length === 0) return '';\n\n if ('$and' in n && Array.isArray(n.$and)) {\n return n.$and.map(emit).join(' ');\n }\n if ('$or' in n && Array.isArray(n.$or)) {\n return n.$or.map(emit).join(' OR ');\n }\n if ('$not' in n) {\n return `NOT ${emit(n.$not)}`;\n }\n if ('hasAttachment' in n) {\n hasAttachment = true;\n return 'has:attachment';\n }\n if ('fuzzyPhrase' in n) {\n // Gmail fuzzy phrase matching using quoted strings\n return quote(n.fuzzyPhrase);\n }\n if ('date' in n) {\n return dateExpr(n.date);\n }\n return emit(n);\n }\n\n const q = emitTop(query);\n const filters: Record<string, unknown> = {};\n if (subjectIncludes.length) filters.subjectIncludes = subjectIncludes;\n if (bodyIncludes.length) filters.bodyIncludes = bodyIncludes;\n if (textIncludes.length) filters.textIncludes = textIncludes;\n if (fromIncludes.length) filters.fromIncludes = fromIncludes;\n if (toIncludes.length) filters.toIncludes = toIncludes;\n if (ccIncludes.length) filters.ccIncludes = ccIncludes;\n if (bccIncludes.length) filters.bccIncludes = bccIncludes;\n if (categoriesIncludes.length) filters.categoriesIncludes = categoriesIncludes;\n if (labelIncludes.length) filters.labelIncludes = labelIncludes;\n if (typeof hasAttachment === 'boolean') filters.hasAttachment = hasAttachment;\n return { q: q ?? '', filters };\n}\n\nexport function extractFiltersFromParsed(parsed: QueryNode): Filters {\n const filters: Filters = {\n subjectIncludes: [],\n bodyIncludes: [],\n textIncludes: [],\n categoriesIncludes: [],\n labelIncludes: [],\n };\n\n function walk(node: unknown): void {\n if (!node || typeof node !== 'object') return;\n\n if ('$and' in node && Array.isArray(node.$and)) {\n node.$and.forEach(walk);\n return;\n }\n if ('$or' in node && Array.isArray(node.$or)) {\n node.$or.forEach(walk);\n return;\n }\n if ('$not' in node) {\n walk(node.$not);\n return;\n }\n if ('hasAttachment' in node) {\n filters.hasAttachment = node.hasAttachment === true;\n return;\n }\n if ('date' in node) {\n const dateObj = node.date;\n if (dateObj && typeof dateObj === 'object') {\n if ('$gte' in dateObj) {\n filters.since = String(dateObj.$gte);\n }\n if ('$lt' in dateObj) {\n filters.before = String(dateObj.$lt);\n }\n }\n return;\n }\n\n const keys = Object.keys(node || {});\n for (const k of keys) {\n const v = (node as Record<string, unknown>)[k];\n if (!v || typeof v !== 'object') continue;\n\n if (k === 'subject') {\n if ('$any' in v && Array.isArray(v.$any)) filters.subjectIncludes?.push(...v.$any);\n if ('$all' in v && Array.isArray(v.$all)) filters.subjectIncludes?.push(...v.$all);\n if ('$none' in v && Array.isArray(v.$none)) filters.subjectIncludes?.push(...v.$none);\n } else if (k === 'body') {\n if ('$any' in v && Array.isArray(v.$any)) filters.bodyIncludes?.push(...v.$any);\n if ('$all' in v && Array.isArray(v.$all)) filters.bodyIncludes?.push(...v.$all);\n if ('$none' in v && Array.isArray(v.$none)) filters.bodyIncludes?.push(...v.$none);\n } else if (k === 'text') {\n if ('$any' in v && Array.isArray(v.$any)) filters.textIncludes?.push(...v.$any);\n if ('$all' in v && Array.isArray(v.$all)) filters.textIncludes?.push(...v.$all);\n if ('$none' in v && Array.isArray(v.$none)) filters.textIncludes?.push(...v.$none);\n } else if (k === 'categories') {\n // Validate all categories (will throw on invalid)\n if ('$any' in v && Array.isArray(v.$any)) {\n v.$any.forEach((cat: unknown) => {\n mapCategoryToLabel(String(cat));\n });\n filters.categoriesIncludes?.push(...v.$any.map(String));\n }\n if ('$all' in v && Array.isArray(v.$all)) {\n v.$all.forEach((cat: unknown) => {\n mapCategoryToLabel(String(cat));\n });\n filters.categoriesIncludes?.push(...v.$all.map(String));\n }\n if ('$none' in v && Array.isArray(v.$none)) {\n v.$none.forEach((cat: unknown) => {\n mapCategoryToLabel(String(cat));\n });\n filters.categoriesIncludes?.push(...v.$none.map(String));\n }\n } else if (k === 'label') {\n // Direct passthrough for labels (case-sensitive)\n if ('$any' in v && Array.isArray(v.$any)) filters.labelIncludes?.push(...v.$any.map(String));\n if ('$all' in v && Array.isArray(v.$all)) filters.labelIncludes?.push(...v.$all.map(String));\n if ('$none' in v && Array.isArray(v.$none)) filters.labelIncludes?.push(...v.$none.map(String));\n }\n }\n }\n walk(parsed);\n return filters;\n}\n"],"names":["extractFiltersFromParsed","toGmailQuery","GMAIL_CATEGORIES","primary","social","promotions","updates","forums","mapCategoryToLabel","category","Error","trimmed","trim","normalizedCategory","toLowerCase","systemLabel","Object","keys","join","query","options","slashDates","dateSlash","rawGmailQuery","q","filters","subjectIncludes","bodyIncludes","textIncludes","fromIncludes","toIncludes","ccIncludes","bccIncludes","categoriesIncludes","labelIncludes","hasAttachment","p","s","String","fmt","d","str","replace","fv","field","raw","rawVal","v","quote","push","chain","op","arr","length","first","fieldExpr","$any","results","map","$all","$none","JSON","stringify","dateExpr","parts","$gte","$lt","fieldKeys","test","m","emit","n","Array","isArray","$and","$or","$not","fuzzyPhrase","date","k","includes","normalizedOp","emitTop","parsed","walk","node","forEach","dateObj","since","before","cat"],"mappings":"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"}
|
|
@@ -18,11 +18,8 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
|
18
18
|
reject(error);
|
|
19
19
|
return;
|
|
20
20
|
}
|
|
21
|
-
if (info.done)
|
|
22
|
-
|
|
23
|
-
} else {
|
|
24
|
-
Promise.resolve(value).then(_next, _throw);
|
|
25
|
-
}
|
|
21
|
+
if (info.done) resolve(value);
|
|
22
|
+
else Promise.resolve(value).then(_next, _throw);
|
|
26
23
|
}
|
|
27
24
|
function _async_to_generator(fn) {
|
|
28
25
|
return function() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/mcp-z/mcp-gmail/src/email/querying/search-execution.ts"],"sourcesContent":["import type { gmail_v1 } from 'googleapis';\nimport type { GmailQuery as QueryNode } from '../../schemas/gmail-query-schema.ts';\nimport type { Logger } from '../../types.ts';\nimport { type FetchMessagesPageParams, fetchMessagesPage } from './pagination.ts';\nimport { toGmailQuery } from './query-builder.ts';\n\nexport interface GmailSearchOptions {\n readonly query?: QueryNode;\n readonly pageSize?: number;\n readonly includeBody?: boolean;\n readonly pageToken: string | undefined; // For pagination support - explicit undefined allowed\n readonly logger: Logger;\n}\n\nexport interface GmailEmailSummary {\n readonly id: string;\n readonly provider: 'gmail';\n readonly threadId?: string;\n readonly date?: string;\n readonly from?: string;\n readonly fromName?: string;\n readonly to?: string;\n readonly cc?: string;\n readonly bcc?: string;\n readonly subject?: string;\n readonly snippet?: string;\n readonly body?: string;\n}\n\nfunction buildGmailQ(query: QueryNode | undefined): string {\n if (!query) return '';\n const emitted = toGmailQuery(query);\n return emitted?.q ?? '';\n}\n\nexport interface GmailSearchResult {\n readonly messages: gmail_v1.Schema$Message[]; // Raw Gmail API messages for transformation by caller\n readonly nextPageToken: string | undefined;\n}\n\nexport async function searchMessages(gmail: gmail_v1.Gmail, opts: GmailSearchOptions): Promise<GmailSearchResult> {\n const { query, pageSize = 50, includeBody = false, pageToken, logger } = opts;\n const gmailQ = buildGmailQ(query);\n const metadataHeaders = ['Date', 'Subject', 'From', 'To', 'Cc', 'Bcc'];\n // Always fetch metadata headers - body is additional content, not a replacement for headers\n const pageParams: FetchMessagesPageParams = {\n gmailQ,\n pageSize,\n body: includeBody,\n metadataHeaders,\n pageToken,\n logger,\n };\n const result = await fetchMessagesPage(gmail, pageParams);\n\n // Return raw Gmail messages - transformation happens in caller\n return {\n messages: result.messages,\n nextPageToken: result.nextPageToken,\n };\n}\n"],"names":["searchMessages","buildGmailQ","query","emitted","toGmailQuery","q","gmail","opts","pageSize","includeBody","pageToken","logger","gmailQ","metadataHeaders","pageParams","result","body","fetchMessagesPage","messages","nextPageToken"],"mappings":";;;;+BAwCsBA;;;eAAAA;;;4BArC0C;8BACnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyB7B,SAASC,YAAYC,KAA4B;;IAC/C,IAAI,CAACA,OAAO,OAAO;IACnB,IAAMC,UAAUC,IAAAA,4BAAY,EAACF;IAC7B,eAAOC,oBAAAA,8BAAAA,QAASE,CAAC,uCAAI;AACvB;AAOO,SAAeL,eAAeM,KAAqB,EAAEC,IAAwB;;YAC1EL,uBAAOM,6BAAeC,aAAqBC,WAAWC,QACxDC,QACAC,iBAEAC,YAQAC;;;;oBAZEb,QAAiEK,KAAjEL,wBAAiEK,KAA1DC,UAAAA,uCAAW,yCAA+CD,KAA3CE,aAAAA,6CAAc,2BAAOC,YAAsBH,KAAtBG,WAAWC,SAAWJ,KAAXI;oBACxDC,SAASX,YAAYC;oBACrBW;wBAAmB;wBAAQ;wBAAW;wBAAQ;wBAAM;wBAAM;;oBAChE,4FAA4F;oBACtFC,aAAsC;wBAC1CF,QAAAA;wBACAJ,UAAAA;wBACAQ,MAAMP;wBACNI,iBAAAA;wBACAH,WAAAA;wBACAC,QAAAA;oBACF;oBACe;;wBAAMM,IAAAA,+BAAiB,EAACX,OAAOQ;;;oBAAxCC,SAAS;oBAEf,+DAA+D;oBAC/D;;wBAAO;4BACLG,UAAUH,OAAOG,QAAQ;4BACzBC,eAAeJ,OAAOI,aAAa;wBACrC;;;;IACF"}
|
package/dist/cjs/index.js
CHANGED
|
@@ -52,11 +52,8 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
|
52
52
|
reject(error);
|
|
53
53
|
return;
|
|
54
54
|
}
|
|
55
|
-
if (info.done)
|
|
56
|
-
|
|
57
|
-
} else {
|
|
58
|
-
Promise.resolve(value).then(_next, _throw);
|
|
59
|
-
}
|
|
55
|
+
if (info.done) resolve(value);
|
|
56
|
+
else Promise.resolve(value).then(_next, _throw);
|
|
60
57
|
}
|
|
61
58
|
function _async_to_generator(fn) {
|
|
62
59
|
return function() {
|
|
@@ -95,18 +92,12 @@ function _getRequireWildcardCache(nodeInterop) {
|
|
|
95
92
|
})(nodeInterop);
|
|
96
93
|
}
|
|
97
94
|
function _interop_require_wildcard(obj, nodeInterop) {
|
|
98
|
-
if (!nodeInterop && obj && obj.__esModule)
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
return {
|
|
103
|
-
default: obj
|
|
104
|
-
};
|
|
105
|
-
}
|
|
95
|
+
if (!nodeInterop && obj && obj.__esModule) return obj;
|
|
96
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") return {
|
|
97
|
+
default: obj
|
|
98
|
+
};
|
|
106
99
|
var cache = _getRequireWildcardCache(nodeInterop);
|
|
107
|
-
if (cache && cache.has(obj))
|
|
108
|
-
return cache.get(obj);
|
|
109
|
-
}
|
|
100
|
+
if (cache && cache.has(obj)) return cache.get(obj);
|
|
110
101
|
var newObj = {
|
|
111
102
|
__proto__: null
|
|
112
103
|
};
|
|
@@ -114,17 +105,12 @@ function _interop_require_wildcard(obj, nodeInterop) {
|
|
|
114
105
|
for(var key in obj){
|
|
115
106
|
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
116
107
|
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
117
|
-
if (desc && (desc.get || desc.set))
|
|
118
|
-
|
|
119
|
-
} else {
|
|
120
|
-
newObj[key] = obj[key];
|
|
121
|
-
}
|
|
108
|
+
if (desc && (desc.get || desc.set)) Object.defineProperty(newObj, key, desc);
|
|
109
|
+
else newObj[key] = obj[key];
|
|
122
110
|
}
|
|
123
111
|
}
|
|
124
112
|
newObj.default = obj;
|
|
125
|
-
if (cache)
|
|
126
|
-
cache.set(obj, newObj);
|
|
127
|
-
}
|
|
113
|
+
if (cache) cache.set(obj, newObj);
|
|
128
114
|
return newObj;
|
|
129
115
|
}
|
|
130
116
|
function _ts_generator(thisArg, body) {
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/mcp-z/mcp-gmail/src/index.ts"],"sourcesContent":["import { createConfig, handleVersionHelp } from './setup/config.ts';\nimport { createHTTPServer } from './setup/http.ts';\nimport { createStdioServer } from './setup/stdio.ts';\nimport type { ServerConfig } from './types.ts';\n\nexport { GOOGLE_SCOPE } from './constants.ts';\nexport * as mcp from './mcp/index.ts';\n// Export types and schemas for documentation\nexport type { Input as CategoriesListInput } from './mcp/tools/categories-list.ts';\nexport { inputSchema as CategoriesListInputSchema } from './mcp/tools/categories-list.ts';\nexport type { Input as LabelsListInput } from './mcp/tools/labels-list.ts';\nexport { inputSchema as LabelsListInputSchema } from './mcp/tools/labels-list.ts';\nexport * as schemas from './schemas/index.ts';\nexport * as setup from './setup/index.ts';\nexport * from './types.ts';\n\nexport async function startServer(config: ServerConfig): Promise<void> {\n const { logger, close } = config.transport.type === 'stdio' ? await createStdioServer(config) : await createHTTPServer(config);\n\n process.on('SIGINT', async () => {\n await close();\n process.exit(0);\n });\n\n logger.info(`Server started with ${config.transport.type} transport`);\n await new Promise(() => {});\n}\n\nexport default async function main(): Promise<void> {\n // Check for help/version flags FIRST, before config parsing\n const versionHelpResult = handleVersionHelp(process.argv);\n if (versionHelpResult.handled) {\n console.log(versionHelpResult.output);\n process.exit(0);\n }\n\n // Only parse config if no help/version flags\n const config = createConfig();\n await startServer(config);\n}\n\nif (process.argv[1] === new URL(import.meta.url).pathname) {\n main();\n}\n"],"names":["CategoriesListInputSchema","inputSchema","GOOGLE_SCOPE","LabelsListInputSchema","main","mcp","schemas","setup","startServer","config","logger","close","transport","type","createStdioServer","createHTTPServer","process","on","exit","info","Promise","versionHelpResult","handleVersionHelp","argv","handled","console","log","output","createConfig","URL","pathname"],"mappings":";;;;;;;;;;;QASwBA;eAAfC,6BAAW;;QAJXC;eAAAA,yBAAY;;QAMGC;eAAfF,yBAAW;;QAiBpB;eAA8BG;;QAtBlBC;;;QAMAC;;;QACAC;;;QAGUC;eAAAA;;;wBAhB0B;sBACf;uBACC;2BAGL;+DACR;gCAGoC;4BAEJ;gEAC5B;gEACF;qBACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEP,SAAeA,YAAYC,MAAoB;;YAC1BA,MAAlBC,QAAQC;;;;yBAAUF,CAAAA,OAAOG,SAAS,CAACC,IAAI,KAAK,OAAM,GAAhCJ;;;;oBAAoC;;wBAAMK,IAAAA,0BAAiB,EAACL;;;2BAAxB;;;;;;oBAAkC;;wBAAMM,IAAAA,wBAAgB,EAACN;;;2BAAvB;;;oBAAtEA,aAAlBC,SAAkBD,KAAlBC,QAAQC,QAAUF,KAAVE;oBAEhBK,QAAQC,EAAE,CAAC,UAAU;;;;;wCACnB;;4CAAMN;;;wCAAN;wCACAK,QAAQE,IAAI,CAAC;;;;;;wBACf;;oBAEAR,OAAOS,IAAI,CAAC,AAAC,uBAA4C,OAAtBV,OAAOG,SAAS,CAACC,IAAI,EAAC;oBACzD;;wBAAM,IAAIO,QAAQ,YAAO;;;oBAAzB;;;;;;IACF;;AAEe,SAAehB;;YAEtBiB,mBAOAZ;;;;oBARN,4DAA4D;oBACtDY,oBAAoBC,IAAAA,2BAAiB,EAACN,QAAQO,IAAI;oBACxD,IAAIF,kBAAkBG,OAAO,EAAE;wBAC7BC,QAAQC,GAAG,CAACL,kBAAkBM,MAAM;wBACpCX,QAAQE,IAAI,CAAC;oBACf;oBAEA,6CAA6C;oBACvCT,SAASmB,IAAAA,sBAAY;oBAC3B;;wBAAMpB,YAAYC;;;oBAAlB;;;;;;IACF;;AAEA,IAAIO,QAAQO,IAAI,CAAC,EAAE,KAAK,IAAIM,IAAI,qDAAiBC,QAAQ,EAAE;IACzD1B;AACF"}
|
|
@@ -16,11 +16,8 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
|
16
16
|
reject(error);
|
|
17
17
|
return;
|
|
18
18
|
}
|
|
19
|
-
if (info.done)
|
|
20
|
-
|
|
21
|
-
} else {
|
|
22
|
-
Promise.resolve(value).then(_next, _throw);
|
|
23
|
-
}
|
|
19
|
+
if (info.done) resolve(value);
|
|
20
|
+
else Promise.resolve(value).then(_next, _throw);
|
|
24
21
|
}
|
|
25
22
|
function _async_to_generator(fn) {
|
|
26
23
|
return function() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/mcp-z/mcp-gmail/src/labels/gmail-labels.ts"],"sourcesContent":["import type { gmail_v1 } from 'googleapis';\n\nexport async function ensureLabelId(gmail: gmail_v1.Gmail, userId: string, labelName: string): Promise<string> {\n // Built-in system labels: pass through by name\n const builtInLabels: Record<string, string> = {\n INBOX: 'INBOX',\n SPAM: 'SPAM',\n TRASH: 'TRASH',\n UNREAD: 'UNREAD',\n STARRED: 'STARRED',\n IMPORTANT: 'IMPORTANT',\n SENT: 'SENT',\n DRAFT: 'DRAFT',\n CATEGORY_PERSONAL: 'CATEGORY_PERSONAL',\n CATEGORY_SOCIAL: 'CATEGORY_SOCIAL',\n CATEGORY_PROMOTIONS: 'CATEGORY_PROMOTIONS',\n CATEGORY_UPDATES: 'CATEGORY_UPDATES',\n CATEGORY_FORUMS: 'CATEGORY_FORUMS',\n };\n\n const upper = labelName.toUpperCase();\n if (builtInLabels[upper]) return builtInLabels[upper];\n\n // Try to find an existing user label by name\n const listed = await gmail.users.labels.list({ userId });\n const labels = Array.isArray(listed?.data?.labels) ? listed.data.labels : [];\n const existing = labels.find((l: unknown) => {\n const label = l as { name?: unknown; id?: unknown };\n return label?.name === labelName;\n });\n const existingTyped = existing as { id?: unknown } | undefined;\n if (existingTyped?.id) return String(existingTyped.id);\n\n // Create the label if it doesn't exist\n const created = await gmail.users.labels.create({\n userId,\n requestBody: {\n name: labelName,\n labelListVisibility: 'labelShow',\n messageListVisibility: 'show',\n },\n });\n if (!created?.data?.id) throw new Error('Failed to create label');\n return created.data.id as string;\n}\n"],"names":["ensureLabelId","gmail","userId","labelName","listed","created","builtInLabels","upper","labels","existing","existingTyped","INBOX","SPAM","TRASH","UNREAD","STARRED","IMPORTANT","SENT","DRAFT","CATEGORY_PERSONAL","CATEGORY_SOCIAL","CATEGORY_PROMOTIONS","CATEGORY_UPDATES","CATEGORY_FORUMS","toUpperCase","users","list","Array","isArray","data","find","l","label","name","id","String","create","requestBody","labelListVisibility","messageListVisibility","Error"],"mappings":";;;;+BAEsBA;;;eAAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAf,SAAeA,cAAcC,KAAqB,EAAEC,MAAc,EAAEC,SAAiB;;YAuB7DC,cAiBxBC,eAtCCC,eAgBAC,OAIAH,QACAI,QACAC,UAIAC,eAIAL;;;;oBA/BN,+CAA+C;oBACzCC,gBAAwC;wBAC5CK,OAAO;wBACPC,MAAM;wBACNC,OAAO;wBACPC,QAAQ;wBACRC,SAAS;wBACTC,WAAW;wBACXC,MAAM;wBACNC,OAAO;wBACPC,mBAAmB;wBACnBC,iBAAiB;wBACjBC,qBAAqB;wBACrBC,kBAAkB;wBAClBC,iBAAiB;oBACnB;oBAEMhB,QAAQJ,UAAUqB,WAAW;oBACnC,IAAIlB,aAAa,CAACC,MAAM,EAAE;;wBAAOD,aAAa,CAACC,MAAM;;oBAGtC;;wBAAMN,MAAMwB,KAAK,CAACjB,MAAM,CAACkB,IAAI,CAAC;4BAAExB,QAAAA;wBAAO;;;oBAAhDE,SAAS;oBACTI,SAASmB,MAAMC,OAAO,CAACxB,mBAAAA,8BAAAA,eAAAA,OAAQyB,IAAI,cAAZzB,mCAAAA,aAAcI,MAAM,IAAIJ,OAAOyB,IAAI,CAACrB,MAAM;oBACjEC,WAAWD,OAAOsB,IAAI,CAAC,SAACC;wBAC5B,IAAMC,QAAQD;wBACd,OAAOC,CAAAA,kBAAAA,4BAAAA,MAAOC,IAAI,MAAK9B;oBACzB;oBACMO,gBAAgBD;oBACtB,IAAIC,0BAAAA,oCAAAA,cAAewB,EAAE,EAAE;;wBAAOC,OAAOzB,cAAcwB,EAAE;;oBAGrC;;wBAAMjC,MAAMwB,KAAK,CAACjB,MAAM,CAAC4B,MAAM,CAAC;4BAC9ClC,QAAAA;4BACAmC,aAAa;gCACXJ,MAAM9B;gCACNmC,qBAAqB;gCACrBC,uBAAuB;4BACzB;wBACF;;;oBAPMlC,UAAU;oBAQhB,IAAI,EAACA,oBAAAA,+BAAAA,gBAAAA,QAASwB,IAAI,cAAbxB,oCAAAA,cAAe6B,EAAE,GAAE,MAAM,IAAIM,MAAM;oBACxC;;wBAAOnC,QAAQwB,IAAI,CAACK,EAAE;;;;IACxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/mcp-z/mcp-gmail/src/lib/base64-encoding.ts"],"sourcesContent":["import { safeBase64UrlDecode } from '@mcp-z/email';\n\nexport function safeBase64Decode(raw?: string): string {\n if (!raw) return '';\n try {\n return safeBase64UrlDecode(raw);\n } catch {\n // Fallback to original input if decoding fails\n return String(raw);\n }\n}\n\nexport function b64url(input: string): string {\n return Buffer.from(input).toString('base64').replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n"],"names":["b64url","safeBase64Decode","raw","safeBase64UrlDecode","String","input","Buffer","from","toString","replace"],"mappings":";;;;;;;;;;;QAYgBA;eAAAA;;QAVAC;eAAAA;;;qBAFoB;AAE7B,SAASA,iBAAiBC,GAAY;IAC3C,IAAI,CAACA,KAAK,OAAO;IACjB,IAAI;QACF,OAAOC,IAAAA,0BAAmB,EAACD;IAC7B,EAAE,eAAM;QACN,+CAA+C;QAC/C,OAAOE,OAAOF;IAChB;AACF;AAEO,SAASF,OAAOK,KAAa;IAClC,OAAOC,OAAOC,IAAI,CAACF,OAAOG,QAAQ,CAAC,UAAUC,OAAO,CAAC,OAAO,KAAKA,OAAO,CAAC,OAAO,KAAKA,OAAO,CAAC,OAAO;AACtG"}
|
|
@@ -17,11 +17,8 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
|
17
17
|
reject(error);
|
|
18
18
|
return;
|
|
19
19
|
}
|
|
20
|
-
if (info.done)
|
|
21
|
-
|
|
22
|
-
} else {
|
|
23
|
-
Promise.resolve(value).then(_next, _throw);
|
|
24
|
-
}
|
|
20
|
+
if (info.done) resolve(value);
|
|
21
|
+
else Promise.resolve(value).then(_next, _throw);
|
|
25
22
|
}
|
|
26
23
|
function _async_to_generator(fn) {
|
|
27
24
|
return function() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/mcp-z/mcp-gmail/src/lib/create-store.ts"],"sourcesContent":["import type Keyv from 'keyv';\nimport keyvRegistry from 'keyv-registry';\n\nexport default async function createStore<T>(uri: string): Promise<Keyv<T>> {\n const store = await keyvRegistry<T>(uri);\n if (!store) throw new Error(`Failed to create store for URI: ${uri}`);\n return store;\n}\n"],"names":["createStore","uri","store","keyvRegistry","Error"],"mappings":";;;;+BAGA;;;eAA8BA;;;mEAFL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEV,SAAeA,YAAeC,GAAW;;YAChDC;;;;oBAAQ;;wBAAMC,IAAAA,qBAAY,EAAIF;;;oBAA9BC,QAAQ;oBACd,IAAI,CAACA,OAAO,MAAM,IAAIE,MAAM,AAAC,mCAAsC,OAAJH;oBAC/D;;wBAAOC;;;;IACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/mcp-z/mcp-gmail/src/lib/date-conversion.ts"],"sourcesContent":["export function toIsoUtc(dateStr?: string): string | undefined {\n if (!dateStr) return undefined;\n const d = new Date(dateStr);\n return Number.isNaN(d.getTime()) ? undefined : d.toISOString();\n}\n"],"names":["toIsoUtc","dateStr","undefined","d","Date","Number","isNaN","getTime","toISOString"],"mappings":";;;;+BAAgBA;;;eAAAA;;;AAAT,SAASA,SAASC,OAAgB;IACvC,IAAI,CAACA,SAAS,OAAOC;IACrB,IAAMC,IAAI,IAAIC,KAAKH;IACnB,OAAOI,OAAOC,KAAK,CAACH,EAAEI,OAAO,MAAML,YAAYC,EAAEK,WAAW;AAC9D"}
|
|
@@ -205,7 +205,7 @@ function toRowFromGmailSummary(msg) {
|
|
|
205
205
|
function filterClientSide(filters) {
|
|
206
206
|
var _ref = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, _ref_subject = _ref.subject, subject = _ref_subject === void 0 ? '' : _ref_subject, _ref_snippetOrPreview = _ref.snippetOrPreview, snippetOrPreview = _ref_snippetOrPreview === void 0 ? '' : _ref_snippetOrPreview, _ref_fullBody = _ref.fullBody, fullBody = _ref_fullBody === void 0 ? '' : _ref_fullBody, _ref_from = _ref.from, from = _ref_from === void 0 ? '' : _ref_from, _ref_to = _ref.to, to = _ref_to === void 0 ? '' : _ref_to, _ref_cc = _ref.cc, cc = _ref_cc === void 0 ? '' : _ref_cc, _ref_bcc = _ref.bcc, bcc = _ref_bcc === void 0 ? '' : _ref_bcc;
|
|
207
207
|
var _ref1;
|
|
208
|
-
var lower = function(a) {
|
|
208
|
+
var lower = function lower(a) {
|
|
209
209
|
return a.map(function(t) {
|
|
210
210
|
return String(t).toLowerCase();
|
|
211
211
|
});
|
|
@@ -223,7 +223,7 @@ function filterClientSide(filters) {
|
|
|
223
223
|
var t = String(to !== null && to !== void 0 ? to : '').toLowerCase();
|
|
224
224
|
var c = String(cc !== null && cc !== void 0 ? cc : '').toLowerCase();
|
|
225
225
|
var bc = String(bcc !== null && bcc !== void 0 ? bcc : '').toLowerCase();
|
|
226
|
-
var anyIncludes = function(val, tokens) {
|
|
226
|
+
var anyIncludes = function anyIncludes(val, tokens) {
|
|
227
227
|
var _tokens_;
|
|
228
228
|
return tokens.length === 1 ? val.includes((_tokens_ = tokens[0]) !== null && _tokens_ !== void 0 ? _tokens_ : '') : tokens.some(function(token) {
|
|
229
229
|
return val.includes(token);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/Projects/mcp-z/mcp-gmail/src/lib/messages-to-row.ts"],"sourcesContent":["import { extractCurrentMessageFromHtmlToText, extractCurrentMessageFromText, formatAddresses, normalizeDateToISO } from '@mcp-z/email';\n\nexport interface GmailMessage {\n id?: string;\n threadId?: string;\n labelIds?: string[];\n snippet?: string;\n payload?: {\n headers?: Array<{ name: string; value: string }>;\n body?: {\n data?: string;\n };\n parts?: Array<{\n mimeType: string;\n body?: {\n data?: string;\n };\n }>;\n };\n}\n\ninterface GmailEmailSummary {\n id: string;\n provider: 'gmail';\n threadId?: string | undefined;\n date?: string | undefined;\n from?: string | undefined;\n fromName?: string | undefined;\n to?: string | undefined;\n cc?: string | undefined;\n bcc?: string | undefined;\n subject?: string | undefined;\n snippet?: string | undefined;\n body?: string | undefined;\n}\n\ninterface FormatOptions {\n body?: boolean;\n addressFormat?: 'raw' | 'name' | 'email';\n}\n\nfunction getHeader(headers: Array<{ name: string; value: string }> | undefined, name: string): string {\n if (!headers || !Array.isArray(headers)) return '';\n const header = headers.find((h) => h.name.toLowerCase() === name.toLowerCase());\n return header ? header.value : '';\n}\n\ninterface AddressToken {\n name?: string | undefined;\n email: string;\n}\n\nfunction parseEmailHeader(headerValue: string): AddressToken[] {\n if (!headerValue) return [];\n\n const parts: string[] = [];\n let current = '';\n let inQuotes = false;\n\n for (let i = 0; i < headerValue.length; i++) {\n const char = headerValue[i];\n if (char === '\"') {\n inQuotes = !inQuotes;\n current += char;\n } else if (char === ',' && !inQuotes) {\n parts.push(current.trim());\n current = '';\n } else {\n current += char;\n }\n }\n\n if (current) parts.push(current.trim());\n\n return parts\n .map((part): AddressToken => {\n const match = part.match(/^(?:\"?([^\"]*)\"? <([^>]+)>|([^,]+))$/);\n if (match) {\n if (match[2]) {\n return { name: match[1] || undefined, email: match[2] };\n }\n return { email: match[3] || '' };\n }\n return { email: part.trim() };\n })\n .filter((token) => !!token.email); // Type guard to ensure email is always present\n}\n\nfunction formatRecipientHeader(headerValue: string, mode: 'raw' | 'name' | 'email' = 'email'): string {\n const addresses = parseEmailHeader(headerValue);\n return formatAddresses(addresses, mode);\n}\n\n/**\n * Sanitizes email body text for Google Sheets export by enforcing cell character limits.\n * Google Sheets API limits cells to 50,000 characters - this prevents API errors during export.\n */\nfunction sanitizeForSheetsExport(text: string): string {\n // Google Sheets has a 50,000 character limit per cell\n // Leave some buffer for safety\n const GOOGLE_SHEETS_CELL_LIMIT = 49000;\n\n if (text.length <= GOOGLE_SHEETS_CELL_LIMIT) return text;\n\n // Truncate and add indication that it was truncated\n const truncated = text.substring(0, GOOGLE_SHEETS_CELL_LIMIT - 100);\n return `${truncated}\\n\\n[...content truncated to fit Google Sheets cell limit...]`;\n}\n\nexport function toRowFromGmail(msg: GmailMessage = {}, opts: FormatOptions = { body: false, addressFormat: 'email' }) {\n const id = msg.id ?? '';\n const provider = 'gmail';\n const threadId = msg.threadId ?? '';\n const fmt = opts.addressFormat || 'email';\n\n const headers = msg.payload?.headers || [];\n const toHeader = getHeader(headers, 'To');\n const fromHeader = getHeader(headers, 'From');\n const ccHeader = getHeader(headers, 'Cc');\n const bccHeader = getHeader(headers, 'Bcc');\n const dateHeader = getHeader(headers, 'Date');\n const subjectHeader = getHeader(headers, 'Subject');\n\n const to = formatRecipientHeader(toHeader, fmt);\n const from = formatRecipientHeader(fromHeader, fmt);\n const cc = formatRecipientHeader(ccHeader, fmt);\n const bcc = formatRecipientHeader(bccHeader, fmt);\n const date = normalizeDateToISO(dateHeader) ?? '';\n const subject = subjectHeader ?? '';\n\n const labels = (msg.labelIds || []).join(', ');\n const snippet = msg.snippet ?? '';\n\n let bodyFull = '';\n if (opts.body) {\n if (msg.payload) {\n if (msg.payload.body?.data) {\n const rawBody = Buffer.from(msg.payload.body.data, 'base64').toString('utf-8');\n bodyFull = extractCurrentMessageFromText(rawBody);\n } else if (msg.payload.parts && Array.isArray(msg.payload.parts)) {\n for (const part of msg.payload.parts) {\n if (part.body?.data) {\n const rawBody = Buffer.from(part.body.data, 'base64').toString('utf-8');\n if (part.mimeType === 'text/plain') {\n bodyFull = extractCurrentMessageFromText(rawBody);\n break;\n }\n if (part.mimeType === 'text/html') {\n bodyFull = extractCurrentMessageFromHtmlToText(rawBody);\n break;\n }\n }\n }\n }\n }\n }\n\n return [id, provider, threadId, to, from, cc, bcc, date, subject, labels, snippet, sanitizeForSheetsExport(bodyFull)];\n}\n\nexport function toRowFromGmailSummary(msg: GmailEmailSummary, opts: FormatOptions = { body: false, addressFormat: 'email' }) {\n const id = msg.id ?? '';\n const provider = msg.provider || 'gmail';\n const threadId = msg.threadId ?? '';\n const fmt = opts.addressFormat || 'email';\n\n const to = formatRecipientHeader(msg.to ?? '', fmt);\n const from = formatRecipientHeader(msg.from ?? '', fmt);\n const cc = formatRecipientHeader(msg.cc ?? '', fmt);\n const bcc = formatRecipientHeader(msg.bcc ?? '', fmt);\n const date = normalizeDateToISO(msg.date) ?? '';\n const subject = msg.subject ?? '';\n const labels = '';\n const snippet = msg.snippet ?? '';\n\n let bodyFull = '';\n if (opts.body && msg.body) {\n bodyFull = extractCurrentMessageFromText(msg.body);\n }\n\n return [id, provider, threadId, to, from, cc, bcc, date, subject, labels, snippet, sanitizeForSheetsExport(bodyFull)];\n}\n\ninterface ClientSideFilters {\n subjectIncludes?: string[];\n bodyIncludes?: string[];\n textIncludes?: string[];\n fromIncludes?: string[];\n toIncludes?: string[];\n ccIncludes?: string[];\n bccIncludes?: string[];\n}\n\ninterface FilterContent {\n subject?: string;\n snippetOrPreview?: string;\n fullBody?: string;\n from?: string;\n to?: string;\n cc?: string;\n bcc?: string;\n}\n\nexport function filterClientSide(filters: ClientSideFilters, { subject = '', snippetOrPreview = '', fullBody = '', from = '', to = '', cc = '', bcc = '' }: FilterContent = {}) {\n const lower = (a: string[]) => a.map((t) => String(t).toLowerCase());\n const subjectTokens = lower(filters.subjectIncludes || []);\n const bodyTokens = lower(filters.bodyIncludes || []);\n const textTokens = lower(filters.textIncludes || []);\n const fromTokens = lower(filters.fromIncludes || []);\n const toCredentials = lower(filters.toIncludes || []);\n const ccTokens = lower(filters.ccIncludes || []);\n const bccTokens = lower(filters.bccIncludes || []);\n\n const s = String(subject ?? '').toLowerCase();\n const b = String((fullBody || snippetOrPreview) ?? '').toLowerCase();\n const f = String(from ?? '').toLowerCase();\n const t = String(to ?? '').toLowerCase();\n const c = String(cc ?? '').toLowerCase();\n const bc = String(bcc ?? '').toLowerCase();\n\n const anyIncludes = (val: string, tokens: string[]) => (tokens.length === 1 ? val.includes(tokens[0] ?? '') : tokens.some((token) => val.includes(token)));\n const subjectOk = subjectTokens.length ? anyIncludes(s, subjectTokens) : true;\n const bodyOk = bodyTokens.length ? anyIncludes(b, bodyTokens) : true;\n const textOk = textTokens.length ? textTokens.some((token) => s.includes(token) || b.includes(token)) : true;\n const fromOk = fromTokens.length ? anyIncludes(f, fromTokens) : true;\n const toOk = toCredentials.length ? anyIncludes(t, toCredentials) : true;\n const ccOk = ccTokens.length ? anyIncludes(c, ccTokens) : true;\n const bccOk = bccTokens.length ? anyIncludes(bc, bccTokens) : true;\n\n return subjectOk && bodyOk && textOk && fromOk && toOk && ccOk && bccOk;\n}\n"],"names":["filterClientSide","toRowFromGmail","toRowFromGmailSummary","getHeader","headers","name","Array","isArray","header","find","h","toLowerCase","value","parseEmailHeader","headerValue","parts","current","inQuotes","i","length","char","push","trim","map","part","match","undefined","email","filter","token","formatRecipientHeader","mode","addresses","formatAddresses","sanitizeForSheetsExport","text","GOOGLE_SHEETS_CELL_LIMIT","truncated","substring","msg","opts","body","addressFormat","normalizeDateToISO","id","provider","threadId","fmt","payload","toHeader","fromHeader","ccHeader","bccHeader","dateHeader","subjectHeader","to","from","cc","bcc","date","subject","labels","labelIds","join","snippet","bodyFull","data","rawBody","Buffer","toString","extractCurrentMessageFromText","mimeType","extractCurrentMessageFromHtmlToText","filters","snippetOrPreview","fullBody","lower","a","t","String","subjectTokens","subjectIncludes","bodyTokens","bodyIncludes","textTokens","textIncludes","fromTokens","fromIncludes","toCredentials","toIncludes","ccTokens","ccIncludes","bccTokens","bccIncludes","s","b","f","c","bc","anyIncludes","val","tokens","includes","some","subjectOk","bodyOk","textOk","fromOk","toOk","ccOk","bccOk"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/mcp-z/mcp-gmail/src/lib/messages-to-row.ts"],"sourcesContent":["import { extractCurrentMessageFromHtmlToText, extractCurrentMessageFromText, formatAddresses, normalizeDateToISO } from '@mcp-z/email';\n\nexport interface GmailMessage {\n id?: string;\n threadId?: string;\n labelIds?: string[];\n snippet?: string;\n payload?: {\n headers?: Array<{ name: string; value: string }>;\n body?: {\n data?: string;\n };\n parts?: Array<{\n mimeType: string;\n body?: {\n data?: string;\n };\n }>;\n };\n}\n\ninterface GmailEmailSummary {\n id: string;\n provider: 'gmail';\n threadId?: string | undefined;\n date?: string | undefined;\n from?: string | undefined;\n fromName?: string | undefined;\n to?: string | undefined;\n cc?: string | undefined;\n bcc?: string | undefined;\n subject?: string | undefined;\n snippet?: string | undefined;\n body?: string | undefined;\n}\n\ninterface FormatOptions {\n body?: boolean;\n addressFormat?: 'raw' | 'name' | 'email';\n}\n\nfunction getHeader(headers: Array<{ name: string; value: string }> | undefined, name: string): string {\n if (!headers || !Array.isArray(headers)) return '';\n const header = headers.find((h) => h.name.toLowerCase() === name.toLowerCase());\n return header ? header.value : '';\n}\n\ninterface AddressToken {\n name?: string | undefined;\n email: string;\n}\n\nfunction parseEmailHeader(headerValue: string): AddressToken[] {\n if (!headerValue) return [];\n\n const parts: string[] = [];\n let current = '';\n let inQuotes = false;\n\n for (let i = 0; i < headerValue.length; i++) {\n const char = headerValue[i];\n if (char === '\"') {\n inQuotes = !inQuotes;\n current += char;\n } else if (char === ',' && !inQuotes) {\n parts.push(current.trim());\n current = '';\n } else {\n current += char;\n }\n }\n\n if (current) parts.push(current.trim());\n\n return parts\n .map((part): AddressToken => {\n const match = part.match(/^(?:\"?([^\"]*)\"? <([^>]+)>|([^,]+))$/);\n if (match) {\n if (match[2]) {\n return { name: match[1] || undefined, email: match[2] };\n }\n return { email: match[3] || '' };\n }\n return { email: part.trim() };\n })\n .filter((token) => !!token.email); // Type guard to ensure email is always present\n}\n\nfunction formatRecipientHeader(headerValue: string, mode: 'raw' | 'name' | 'email' = 'email'): string {\n const addresses = parseEmailHeader(headerValue);\n return formatAddresses(addresses, mode);\n}\n\n/**\n * Sanitizes email body text for Google Sheets export by enforcing cell character limits.\n * Google Sheets API limits cells to 50,000 characters - this prevents API errors during export.\n */\nfunction sanitizeForSheetsExport(text: string): string {\n // Google Sheets has a 50,000 character limit per cell\n // Leave some buffer for safety\n const GOOGLE_SHEETS_CELL_LIMIT = 49000;\n\n if (text.length <= GOOGLE_SHEETS_CELL_LIMIT) return text;\n\n // Truncate and add indication that it was truncated\n const truncated = text.substring(0, GOOGLE_SHEETS_CELL_LIMIT - 100);\n return `${truncated}\\n\\n[...content truncated to fit Google Sheets cell limit...]`;\n}\n\nexport function toRowFromGmail(msg: GmailMessage = {}, opts: FormatOptions = { body: false, addressFormat: 'email' }) {\n const id = msg.id ?? '';\n const provider = 'gmail';\n const threadId = msg.threadId ?? '';\n const fmt = opts.addressFormat || 'email';\n\n const headers = msg.payload?.headers || [];\n const toHeader = getHeader(headers, 'To');\n const fromHeader = getHeader(headers, 'From');\n const ccHeader = getHeader(headers, 'Cc');\n const bccHeader = getHeader(headers, 'Bcc');\n const dateHeader = getHeader(headers, 'Date');\n const subjectHeader = getHeader(headers, 'Subject');\n\n const to = formatRecipientHeader(toHeader, fmt);\n const from = formatRecipientHeader(fromHeader, fmt);\n const cc = formatRecipientHeader(ccHeader, fmt);\n const bcc = formatRecipientHeader(bccHeader, fmt);\n const date = normalizeDateToISO(dateHeader) ?? '';\n const subject = subjectHeader ?? '';\n\n const labels = (msg.labelIds || []).join(', ');\n const snippet = msg.snippet ?? '';\n\n let bodyFull = '';\n if (opts.body) {\n if (msg.payload) {\n if (msg.payload.body?.data) {\n const rawBody = Buffer.from(msg.payload.body.data, 'base64').toString('utf-8');\n bodyFull = extractCurrentMessageFromText(rawBody);\n } else if (msg.payload.parts && Array.isArray(msg.payload.parts)) {\n for (const part of msg.payload.parts) {\n if (part.body?.data) {\n const rawBody = Buffer.from(part.body.data, 'base64').toString('utf-8');\n if (part.mimeType === 'text/plain') {\n bodyFull = extractCurrentMessageFromText(rawBody);\n break;\n }\n if (part.mimeType === 'text/html') {\n bodyFull = extractCurrentMessageFromHtmlToText(rawBody);\n break;\n }\n }\n }\n }\n }\n }\n\n return [id, provider, threadId, to, from, cc, bcc, date, subject, labels, snippet, sanitizeForSheetsExport(bodyFull)];\n}\n\nexport function toRowFromGmailSummary(msg: GmailEmailSummary, opts: FormatOptions = { body: false, addressFormat: 'email' }) {\n const id = msg.id ?? '';\n const provider = msg.provider || 'gmail';\n const threadId = msg.threadId ?? '';\n const fmt = opts.addressFormat || 'email';\n\n const to = formatRecipientHeader(msg.to ?? '', fmt);\n const from = formatRecipientHeader(msg.from ?? '', fmt);\n const cc = formatRecipientHeader(msg.cc ?? '', fmt);\n const bcc = formatRecipientHeader(msg.bcc ?? '', fmt);\n const date = normalizeDateToISO(msg.date) ?? '';\n const subject = msg.subject ?? '';\n const labels = '';\n const snippet = msg.snippet ?? '';\n\n let bodyFull = '';\n if (opts.body && msg.body) {\n bodyFull = extractCurrentMessageFromText(msg.body);\n }\n\n return [id, provider, threadId, to, from, cc, bcc, date, subject, labels, snippet, sanitizeForSheetsExport(bodyFull)];\n}\n\ninterface ClientSideFilters {\n subjectIncludes?: string[];\n bodyIncludes?: string[];\n textIncludes?: string[];\n fromIncludes?: string[];\n toIncludes?: string[];\n ccIncludes?: string[];\n bccIncludes?: string[];\n}\n\ninterface FilterContent {\n subject?: string;\n snippetOrPreview?: string;\n fullBody?: string;\n from?: string;\n to?: string;\n cc?: string;\n bcc?: string;\n}\n\nexport function filterClientSide(filters: ClientSideFilters, { subject = '', snippetOrPreview = '', fullBody = '', from = '', to = '', cc = '', bcc = '' }: FilterContent = {}) {\n const lower = (a: string[]) => a.map((t) => String(t).toLowerCase());\n const subjectTokens = lower(filters.subjectIncludes || []);\n const bodyTokens = lower(filters.bodyIncludes || []);\n const textTokens = lower(filters.textIncludes || []);\n const fromTokens = lower(filters.fromIncludes || []);\n const toCredentials = lower(filters.toIncludes || []);\n const ccTokens = lower(filters.ccIncludes || []);\n const bccTokens = lower(filters.bccIncludes || []);\n\n const s = String(subject ?? '').toLowerCase();\n const b = String((fullBody || snippetOrPreview) ?? '').toLowerCase();\n const f = String(from ?? '').toLowerCase();\n const t = String(to ?? '').toLowerCase();\n const c = String(cc ?? '').toLowerCase();\n const bc = String(bcc ?? '').toLowerCase();\n\n const anyIncludes = (val: string, tokens: string[]) => (tokens.length === 1 ? val.includes(tokens[0] ?? '') : tokens.some((token) => val.includes(token)));\n const subjectOk = subjectTokens.length ? anyIncludes(s, subjectTokens) : true;\n const bodyOk = bodyTokens.length ? anyIncludes(b, bodyTokens) : true;\n const textOk = textTokens.length ? textTokens.some((token) => s.includes(token) || b.includes(token)) : true;\n const fromOk = fromTokens.length ? anyIncludes(f, fromTokens) : true;\n const toOk = toCredentials.length ? anyIncludes(t, toCredentials) : true;\n const ccOk = ccTokens.length ? anyIncludes(c, ccTokens) : true;\n const bccOk = bccTokens.length ? anyIncludes(bc, bccTokens) : true;\n\n return subjectOk && bodyOk && textOk && fromOk && toOk && ccOk && bccOk;\n}\n"],"names":["filterClientSide","toRowFromGmail","toRowFromGmailSummary","getHeader","headers","name","Array","isArray","header","find","h","toLowerCase","value","parseEmailHeader","headerValue","parts","current","inQuotes","i","length","char","push","trim","map","part","match","undefined","email","filter","token","formatRecipientHeader","mode","addresses","formatAddresses","sanitizeForSheetsExport","text","GOOGLE_SHEETS_CELL_LIMIT","truncated","substring","msg","opts","body","addressFormat","normalizeDateToISO","id","provider","threadId","fmt","payload","toHeader","fromHeader","ccHeader","bccHeader","dateHeader","subjectHeader","to","from","cc","bcc","date","subject","labels","labelIds","join","snippet","bodyFull","data","rawBody","Buffer","toString","extractCurrentMessageFromText","mimeType","extractCurrentMessageFromHtmlToText","filters","snippetOrPreview","fullBody","lower","a","t","String","subjectTokens","subjectIncludes","bodyTokens","bodyIncludes","textTokens","textIncludes","fromTokens","fromIncludes","toCredentials","toIncludes","ccTokens","ccIncludes","bccTokens","bccIncludes","s","b","f","c","bc","anyIncludes","val","tokens","includes","some","subjectOk","bodyOk","textOk","fromOk","toOk","ccOk","bccOk"],"mappings":"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"}
|
package/dist/cjs/mcp/index.js
CHANGED
|
@@ -31,18 +31,12 @@ function _getRequireWildcardCache(nodeInterop) {
|
|
|
31
31
|
})(nodeInterop);
|
|
32
32
|
}
|
|
33
33
|
function _interop_require_wildcard(obj, nodeInterop) {
|
|
34
|
-
if (!nodeInterop && obj && obj.__esModule)
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
return {
|
|
39
|
-
default: obj
|
|
40
|
-
};
|
|
41
|
-
}
|
|
34
|
+
if (!nodeInterop && obj && obj.__esModule) return obj;
|
|
35
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") return {
|
|
36
|
+
default: obj
|
|
37
|
+
};
|
|
42
38
|
var cache = _getRequireWildcardCache(nodeInterop);
|
|
43
|
-
if (cache && cache.has(obj))
|
|
44
|
-
return cache.get(obj);
|
|
45
|
-
}
|
|
39
|
+
if (cache && cache.has(obj)) return cache.get(obj);
|
|
46
40
|
var newObj = {
|
|
47
41
|
__proto__: null
|
|
48
42
|
};
|
|
@@ -50,17 +44,12 @@ function _interop_require_wildcard(obj, nodeInterop) {
|
|
|
50
44
|
for(var key in obj){
|
|
51
45
|
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
52
46
|
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
53
|
-
if (desc && (desc.get || desc.set))
|
|
54
|
-
|
|
55
|
-
} else {
|
|
56
|
-
newObj[key] = obj[key];
|
|
57
|
-
}
|
|
47
|
+
if (desc && (desc.get || desc.set)) Object.defineProperty(newObj, key, desc);
|
|
48
|
+
else newObj[key] = obj[key];
|
|
58
49
|
}
|
|
59
50
|
}
|
|
60
51
|
newObj.default = obj;
|
|
61
|
-
if (cache)
|
|
62
|
-
cache.set(obj, newObj);
|
|
63
|
-
}
|
|
52
|
+
if (cache) cache.set(obj, newObj);
|
|
64
53
|
return newObj;
|
|
65
54
|
}
|
|
66
55
|
/* 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; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/mcp-z/mcp-gmail/src/mcp/index.ts"],"sourcesContent":["export * as promptFactories from './prompts/index.ts';\nexport * as resourceFactories from './resources/index.ts';\nexport * as toolFactories from './tools/index.ts';\n"],"names":["promptFactories","resourceFactories","toolFactories"],"mappings":";;;;;;;;;;;QAAYA;;;QACAC;;;QACAC;;;;+DAFqB;gEACE;gEACJ"}
|
|
@@ -17,11 +17,8 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
|
17
17
|
reject(error);
|
|
18
18
|
return;
|
|
19
19
|
}
|
|
20
|
-
if (info.done)
|
|
21
|
-
|
|
22
|
-
} else {
|
|
23
|
-
Promise.resolve(value).then(_next, _throw);
|
|
24
|
-
}
|
|
20
|
+
if (info.done) resolve(value);
|
|
21
|
+
else Promise.resolve(value).then(_next, _throw);
|
|
25
22
|
}
|
|
26
23
|
function _async_to_generator(fn) {
|
|
27
24
|
return function() {
|
|
@@ -146,7 +143,7 @@ function createPrompt() {
|
|
|
146
143
|
description: 'Draft an email response',
|
|
147
144
|
argsSchema: argsSchema.shape
|
|
148
145
|
};
|
|
149
|
-
var handler = function(args, _extra) {
|
|
146
|
+
var handler = function handler(args, _extra) {
|
|
150
147
|
return _async_to_generator(function() {
|
|
151
148
|
var _argsSchema_parse, context, tone;
|
|
152
149
|
return _ts_generator(this, function(_state) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/mcp-z/mcp-gmail/src/mcp/prompts/draft-email.ts"],"sourcesContent":["import type { PromptModule } from '@mcp-z/server';\nimport type { RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';\nimport type { ServerNotification, ServerRequest } from '@modelcontextprotocol/sdk/types.js';\nimport { z } from 'zod';\n\nexport default function createPrompt() {\n const argsSchema = z.object({\n context: z.string().min(1).describe('Email context to draft response for'),\n tone: z.string().optional().describe('Email tone (default: professional)'),\n });\n\n const config = {\n description: 'Draft an email response',\n argsSchema: argsSchema.shape,\n };\n\n const handler = async (args: { [x: string]: unknown }, _extra: RequestHandlerExtra<ServerRequest, ServerNotification>) => {\n const { context, tone } = argsSchema.parse(args);\n return {\n messages: [\n { role: 'system' as const, content: { type: 'text' as const, text: 'You are an expert email assistant.' } },\n { role: 'user' as const, content: { type: 'text' as const, text: `Draft a ${tone || 'professional'} email:\\n\\n${context}` } },\n ],\n };\n };\n\n return {\n name: 'draft-email',\n config,\n handler,\n } satisfies PromptModule;\n}\n"],"names":["createPrompt","argsSchema","z","object","context","string","min","describe","tone","optional","config","description","shape","handler","args","_extra","parse","messages","role","content","type","text","name"],"mappings":";;;;+BAKA;;;eAAwBA;;;mBAFN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,SAASA;IACtB,IAAMC,aAAaC,MAAC,CAACC,MAAM,CAAC;QAC1BC,SAASF,MAAC,CAACG,MAAM,GAAGC,GAAG,CAAC,GAAGC,QAAQ,CAAC;QACpCC,MAAMN,MAAC,CAACG,MAAM,GAAGI,QAAQ,GAAGF,QAAQ,CAAC;IACvC;IAEA,IAAMG,SAAS;QACbC,aAAa;QACbV,YAAYA,WAAWW,KAAK;IAC9B;IAEA,IAAMC,UAAU,iBAAOC,MAAgCC;;gBAC3Bd,mBAAlBG,SAASI;;gBAASP,oBAAAA,WAAWe,KAAK,CAACF,OAAnCV,UAAkBH,kBAAlBG,SAASI,OAASP,kBAATO;gBACjB;;oBAAO;wBACLS,QAAQ;4BACN;gCAAEC,MAAM;gCAAmBC,SAAS;oCAAEC,MAAM;oCAAiBC,MAAM;gCAAqC;4BAAE;4BAC1G;gCAAEH,MAAM;gCAAiBC,SAAS;oCAAEC,MAAM;oCAAiBC,MAAM,AAAC,WAA8CjB,OAApCI,QAAQ,gBAAe,eAAqB,OAARJ;gCAAU;4BAAE;;oBAEhI;;;QACF;;IAEA,OAAO;QACLkB,MAAM;QACNZ,QAAAA;QACAG,SAAAA;IACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/mcp-z/mcp-gmail/src/mcp/prompts/index.ts"],"sourcesContent":["export { default as draftEmail } from './draft-email.ts';\nexport { default as querySyntax } from './query-syntax.ts';\n"],"names":["draftEmail","querySyntax"],"mappings":";;;;;;;;;;;QAAoBA;eAAAA,qBAAU;;QACVC;eAAAA,sBAAW;;;mEADO;oEACC"}
|
|
@@ -16,11 +16,8 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
|
16
16
|
reject(error);
|
|
17
17
|
return;
|
|
18
18
|
}
|
|
19
|
-
if (info.done)
|
|
20
|
-
|
|
21
|
-
} else {
|
|
22
|
-
Promise.resolve(value).then(_next, _throw);
|
|
23
|
-
}
|
|
19
|
+
if (info.done) resolve(value);
|
|
20
|
+
else Promise.resolve(value).then(_next, _throw);
|
|
24
21
|
}
|
|
25
22
|
function _async_to_generator(fn) {
|
|
26
23
|
return function() {
|
|
@@ -140,7 +137,7 @@ function createPrompt() {
|
|
|
140
137
|
var config = {
|
|
141
138
|
description: 'Reference guide for Gmail query syntax'
|
|
142
139
|
};
|
|
143
|
-
var handler = function(_args, _extra) {
|
|
140
|
+
var handler = function handler(_args, _extra) {
|
|
144
141
|
return _async_to_generator(function() {
|
|
145
142
|
return _ts_generator(this, function(_state) {
|
|
146
143
|
return [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/mcp-z/mcp-gmail/src/mcp/prompts/query-syntax.ts"],"sourcesContent":["import type { PromptModule } from '@mcp-z/server';\nimport type { RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';\nimport type { ServerNotification, ServerRequest } from '@modelcontextprotocol/sdk/types.js';\n\nexport default function createPrompt() {\n const config = {\n description: 'Reference guide for Gmail query syntax',\n };\n\n const handler = async (_args: { [x: string]: unknown }, _extra: RequestHandlerExtra<ServerRequest, ServerNotification>) => {\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `# Gmail Query Syntax Reference\n\n## Logical Operators\n- \\`$and\\`: Array of conditions that ALL must match\n- \\`$or\\`: Array of conditions where ANY must match\n- \\`$not\\`: Condition that must NOT match\n\n## Email Address Fields\n- \\`from\\`, \\`to\\`, \\`cc\\`, \\`bcc\\`: String or field operators\n\n## Content Fields\n- \\`subject\\`: Search subject line\n- \\`body\\`: Search message body\n- \\`text\\`: Search all text content\n- \\`fuzzyPhrase\\`: Approximate phrase matching (words appear together)\n\n## Boolean Flags\n- \\`hasAttachment\\`: true/false\n- \\`isRead\\`: true/false\n\n## Date Range\n\\`\\`\\`json\n{ \"date\": { \"$gte\": \"2024-01-01\", \"$lt\": \"2024-12-31\" } }\n\\`\\`\\`\n\n## Gmail-Specific\n- \\`categories\\`: primary, social, promotions, updates, forums\n- \\`label\\`: User labels (case-sensitive, use gmail-labels-list to discover)\n- \\`rawGmailQuery\\`: Escape hatch for advanced Gmail syntax\n\n## Field Operators (for multi-value fields)\n- \\`$any\\`: OR - matches if ANY value matches\n- \\`$all\\`: AND - matches if ALL values match\n- \\`$none\\`: NOT - matches if NONE match\n\n## Example Queries\n\\`\\`\\`json\n// Unread from specific sender\n{ \"from\": \"boss@company.com\", \"isRead\": false }\n\n// Recent with attachment\n{ \"hasAttachment\": true, \"date\": { \"$gte\": \"2024-01-01\" } }\n\n// Multiple senders\n{ \"from\": { \"$any\": [\"alice@example.com\", \"bob@example.com\"] } }\n\n// Complex: promotions OR social, unread\n{ \"$and\": [\n { \"categories\": { \"$any\": [\"promotions\", \"social\"] } },\n { \"isRead\": false }\n]}\n\\`\\`\\``,\n },\n },\n ],\n };\n };\n\n return {\n name: 'query-syntax',\n config,\n handler,\n } satisfies PromptModule;\n}\n"],"names":["createPrompt","config","description","handler","_args","_extra","messages","role","content","type","text","name"],"mappings":";;;;+BAIA;;;eAAwBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAT,SAASA;IACtB,IAAMC,SAAS;QACbC,aAAa;IACf;IAEA,IAAMC,UAAU,iBAAOC,OAAiCC;;;gBACtD;;oBAAO;wBACLC,QAAQ;4BACN;gCACEC,MAAM;gCACNC,SAAS;oCACPC,MAAM;oCACNC,MAAM;gCAoDR;4BACF;;oBAEJ;;;QACF;;IAEA,OAAO;QACLC,MAAM;QACNV,QAAAA;QACAE,SAAAA;IACF;AACF"}
|
|
@@ -20,11 +20,8 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
|
20
20
|
reject(error);
|
|
21
21
|
return;
|
|
22
22
|
}
|
|
23
|
-
if (info.done)
|
|
24
|
-
|
|
25
|
-
} else {
|
|
26
|
-
Promise.resolve(value).then(_next, _throw);
|
|
27
|
-
}
|
|
23
|
+
if (info.done) resolve(value);
|
|
24
|
+
else Promise.resolve(value).then(_next, _throw);
|
|
28
25
|
}
|
|
29
26
|
function _async_to_generator(fn) {
|
|
30
27
|
return function() {
|
|
@@ -148,7 +145,7 @@ function createResource() {
|
|
|
148
145
|
description: 'Gmail message metadata (lightweight: id, subject, from, to, date)',
|
|
149
146
|
mimeType: 'application/json'
|
|
150
147
|
};
|
|
151
|
-
var handler = function(uri, variables, extra) {
|
|
148
|
+
var handler = function handler(uri, variables, extra) {
|
|
152
149
|
return _async_to_generator(function() {
|
|
153
150
|
var _fullData_id, _headersMap_Subject, _fullData_payload, logger, authContext, gmail, response, fullData, headers, headersArray, headersMap, fromInfo, toStr, metadata, e, _ref, logger1, error;
|
|
154
151
|
return _ts_generator(this, function(_state) {
|