@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.
Files changed (148) hide show
  1. package/dist/cjs/constants.js.map +1 -1
  2. package/dist/cjs/email/composition/rfc822-builder.js.map +1 -1
  3. package/dist/cjs/email/messages/fetch-message.js +15 -21
  4. package/dist/cjs/email/messages/fetch-message.js.map +1 -1
  5. package/dist/cjs/email/messages/messages.js +2 -2
  6. package/dist/cjs/email/messages/messages.js.map +1 -1
  7. package/dist/cjs/email/parsing/header-parsing.js.map +1 -1
  8. package/dist/cjs/email/parsing/headers-utils.js.map +1 -1
  9. package/dist/cjs/email/parsing/html-processing.js.map +1 -1
  10. package/dist/cjs/email/parsing/message-extraction.js.map +1 -1
  11. package/dist/cjs/email/querying/execute-query.js +7 -14
  12. package/dist/cjs/email/querying/execute-query.js.map +1 -1
  13. package/dist/cjs/email/querying/pagination.js +19 -24
  14. package/dist/cjs/email/querying/pagination.js.map +1 -1
  15. package/dist/cjs/email/querying/query-builder.js +4 -2
  16. package/dist/cjs/email/querying/query-builder.js.map +1 -1
  17. package/dist/cjs/email/querying/search-execution.js +2 -5
  18. package/dist/cjs/email/querying/search-execution.js.map +1 -1
  19. package/dist/cjs/index.js +10 -24
  20. package/dist/cjs/index.js.map +1 -1
  21. package/dist/cjs/labels/gmail-labels.js +2 -5
  22. package/dist/cjs/labels/gmail-labels.js.map +1 -1
  23. package/dist/cjs/lib/base64-encoding.js.map +1 -1
  24. package/dist/cjs/lib/create-store.js +2 -5
  25. package/dist/cjs/lib/create-store.js.map +1 -1
  26. package/dist/cjs/lib/date-conversion.js.map +1 -1
  27. package/dist/cjs/lib/messages-to-row.js +2 -2
  28. package/dist/cjs/lib/messages-to-row.js.map +1 -1
  29. package/dist/cjs/mcp/index.js +8 -19
  30. package/dist/cjs/mcp/index.js.map +1 -1
  31. package/dist/cjs/mcp/prompts/draft-email.js +3 -6
  32. package/dist/cjs/mcp/prompts/draft-email.js.map +1 -1
  33. package/dist/cjs/mcp/prompts/index.js.map +1 -1
  34. package/dist/cjs/mcp/prompts/query-syntax.js +3 -6
  35. package/dist/cjs/mcp/prompts/query-syntax.js.map +1 -1
  36. package/dist/cjs/mcp/resources/email.js +3 -6
  37. package/dist/cjs/mcp/resources/email.js.map +1 -1
  38. package/dist/cjs/mcp/resources/index.js.map +1 -1
  39. package/dist/cjs/mcp/tools/categories-list.js +4 -8
  40. package/dist/cjs/mcp/tools/categories-list.js.map +1 -1
  41. package/dist/cjs/mcp/tools/index.js.map +1 -1
  42. package/dist/cjs/mcp/tools/label-add.js +4 -8
  43. package/dist/cjs/mcp/tools/label-add.js.map +1 -1
  44. package/dist/cjs/mcp/tools/label-delete.d.cts +1 -1
  45. package/dist/cjs/mcp/tools/label-delete.d.ts +1 -1
  46. package/dist/cjs/mcp/tools/label-delete.js +36 -32
  47. package/dist/cjs/mcp/tools/label-delete.js.map +1 -1
  48. package/dist/cjs/mcp/tools/labels-list.js +4 -8
  49. package/dist/cjs/mcp/tools/labels-list.js.map +1 -1
  50. package/dist/cjs/mcp/tools/message-get.d.cts +21 -21
  51. package/dist/cjs/mcp/tools/message-get.d.ts +21 -21
  52. package/dist/cjs/mcp/tools/message-get.js +4 -8
  53. package/dist/cjs/mcp/tools/message-get.js.map +1 -1
  54. package/dist/cjs/mcp/tools/message-mark-read.js +4 -8
  55. package/dist/cjs/mcp/tools/message-mark-read.js.map +1 -1
  56. package/dist/cjs/mcp/tools/message-move-to-trash.d.cts +1 -1
  57. package/dist/cjs/mcp/tools/message-move-to-trash.d.ts +1 -1
  58. package/dist/cjs/mcp/tools/message-move-to-trash.js +36 -32
  59. package/dist/cjs/mcp/tools/message-move-to-trash.js.map +1 -1
  60. package/dist/cjs/mcp/tools/message-respond.js +5 -11
  61. package/dist/cjs/mcp/tools/message-respond.js.map +1 -1
  62. package/dist/cjs/mcp/tools/message-search.d.cts +25 -25
  63. package/dist/cjs/mcp/tools/message-search.d.ts +25 -25
  64. package/dist/cjs/mcp/tools/message-search.js +19 -25
  65. package/dist/cjs/mcp/tools/message-search.js.map +1 -1
  66. package/dist/cjs/mcp/tools/message-send.d.cts +3 -3
  67. package/dist/cjs/mcp/tools/message-send.d.ts +3 -3
  68. package/dist/cjs/mcp/tools/message-send.js +4 -8
  69. package/dist/cjs/mcp/tools/message-send.js.map +1 -1
  70. package/dist/cjs/mcp/tools/messages-export-csv.d.cts +2 -2
  71. package/dist/cjs/mcp/tools/messages-export-csv.d.ts +2 -2
  72. package/dist/cjs/mcp/tools/messages-export-csv.js +16 -22
  73. package/dist/cjs/mcp/tools/messages-export-csv.js.map +1 -1
  74. package/dist/cjs/schemas/gmail-query-schema.d.cts +2 -1
  75. package/dist/cjs/schemas/gmail-query-schema.d.ts +2 -1
  76. package/dist/cjs/schemas/gmail-query-schema.js +26 -30
  77. package/dist/cjs/schemas/gmail-query-schema.js.map +1 -1
  78. package/dist/cjs/schemas/index.js.map +1 -1
  79. package/dist/cjs/setup/config.js +11 -25
  80. package/dist/cjs/setup/config.js.map +1 -1
  81. package/dist/cjs/setup/http.js +15 -16
  82. package/dist/cjs/setup/http.js.map +1 -1
  83. package/dist/cjs/setup/index.js.map +1 -1
  84. package/dist/cjs/setup/oauth-google.js +9 -16
  85. package/dist/cjs/setup/oauth-google.js.map +1 -1
  86. package/dist/cjs/setup/runtime.d.cts +1 -1
  87. package/dist/cjs/setup/runtime.d.ts +1 -1
  88. package/dist/cjs/setup/runtime.js +29 -44
  89. package/dist/cjs/setup/runtime.js.map +1 -1
  90. package/dist/cjs/setup/stdio.js +15 -16
  91. package/dist/cjs/setup/stdio.js.map +1 -1
  92. package/dist/esm/constants.js.map +1 -1
  93. package/dist/esm/email/composition/rfc822-builder.js.map +1 -1
  94. package/dist/esm/email/messages/fetch-message.js.map +1 -1
  95. package/dist/esm/email/messages/messages.js.map +1 -1
  96. package/dist/esm/email/parsing/header-parsing.js.map +1 -1
  97. package/dist/esm/email/parsing/headers-utils.js.map +1 -1
  98. package/dist/esm/email/parsing/html-processing.js.map +1 -1
  99. package/dist/esm/email/parsing/message-extraction.js.map +1 -1
  100. package/dist/esm/email/querying/execute-query.js.map +1 -1
  101. package/dist/esm/email/querying/pagination.js.map +1 -1
  102. package/dist/esm/email/querying/query-builder.js.map +1 -1
  103. package/dist/esm/email/querying/search-execution.js.map +1 -1
  104. package/dist/esm/index.js.map +1 -1
  105. package/dist/esm/labels/gmail-labels.js.map +1 -1
  106. package/dist/esm/lib/base64-encoding.js.map +1 -1
  107. package/dist/esm/lib/create-store.js.map +1 -1
  108. package/dist/esm/lib/date-conversion.js.map +1 -1
  109. package/dist/esm/lib/messages-to-row.js.map +1 -1
  110. package/dist/esm/mcp/index.js.map +1 -1
  111. package/dist/esm/mcp/prompts/draft-email.js.map +1 -1
  112. package/dist/esm/mcp/prompts/index.js.map +1 -1
  113. package/dist/esm/mcp/prompts/query-syntax.js.map +1 -1
  114. package/dist/esm/mcp/resources/email.js.map +1 -1
  115. package/dist/esm/mcp/resources/index.js.map +1 -1
  116. package/dist/esm/mcp/tools/categories-list.js.map +1 -1
  117. package/dist/esm/mcp/tools/index.js.map +1 -1
  118. package/dist/esm/mcp/tools/label-add.js.map +1 -1
  119. package/dist/esm/mcp/tools/label-delete.d.ts +1 -1
  120. package/dist/esm/mcp/tools/label-delete.js.map +1 -1
  121. package/dist/esm/mcp/tools/labels-list.js.map +1 -1
  122. package/dist/esm/mcp/tools/message-get.d.ts +21 -21
  123. package/dist/esm/mcp/tools/message-get.js.map +1 -1
  124. package/dist/esm/mcp/tools/message-mark-read.js.map +1 -1
  125. package/dist/esm/mcp/tools/message-move-to-trash.d.ts +1 -1
  126. package/dist/esm/mcp/tools/message-move-to-trash.js.map +1 -1
  127. package/dist/esm/mcp/tools/message-respond.js.map +1 -1
  128. package/dist/esm/mcp/tools/message-search.d.ts +25 -25
  129. package/dist/esm/mcp/tools/message-search.js +13 -12
  130. package/dist/esm/mcp/tools/message-search.js.map +1 -1
  131. package/dist/esm/mcp/tools/message-send.d.ts +3 -3
  132. package/dist/esm/mcp/tools/message-send.js.map +1 -1
  133. package/dist/esm/mcp/tools/messages-export-csv.d.ts +2 -2
  134. package/dist/esm/mcp/tools/messages-export-csv.js +9 -8
  135. package/dist/esm/mcp/tools/messages-export-csv.js.map +1 -1
  136. package/dist/esm/schemas/gmail-query-schema.d.ts +2 -1
  137. package/dist/esm/schemas/gmail-query-schema.js +18 -21
  138. package/dist/esm/schemas/gmail-query-schema.js.map +1 -1
  139. package/dist/esm/schemas/index.js.map +1 -1
  140. package/dist/esm/setup/config.js.map +1 -1
  141. package/dist/esm/setup/http.js.map +1 -1
  142. package/dist/esm/setup/index.js.map +1 -1
  143. package/dist/esm/setup/oauth-google.js.map +1 -1
  144. package/dist/esm/setup/runtime.d.ts +1 -1
  145. package/dist/esm/setup/runtime.js.map +1 -1
  146. package/dist/esm/setup/stdio.js.map +1 -1
  147. package/dist/esm/types.js.map +1 -1
  148. 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
- resolve(value);
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/Projects/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"}
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
- resolve(value);
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
- return obj;
100
- }
101
- if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
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
- Object.defineProperty(newObj, key, desc);
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) {
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/Projects/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"}
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
- resolve(value);
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/Projects/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
+ {"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/Projects/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"}
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
- resolve(value);
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/Projects/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
+ {"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/Projects/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"}
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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"}
@@ -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
- return obj;
36
- }
37
- if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
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
- Object.defineProperty(newObj, key, desc);
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/Projects/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"}
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
- resolve(value);
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/Projects/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,SAAOC,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
+ {"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/Projects/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"}
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
- resolve(value);
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/Projects/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,SAAOC,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"}
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
- resolve(value);
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) {