@mcp-z/mcp-gmail 1.0.10 → 1.0.12

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 (139) 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 +23 -23
  63. package/dist/cjs/mcp/tools/message-search.d.ts +23 -23
  64. package/dist/cjs/mcp/tools/message-search.js +7 -14
  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.js +7 -14
  71. package/dist/cjs/mcp/tools/messages-export-csv.js.map +1 -1
  72. package/dist/cjs/schemas/gmail-query-schema.js +5 -9
  73. package/dist/cjs/schemas/gmail-query-schema.js.map +1 -1
  74. package/dist/cjs/schemas/index.js.map +1 -1
  75. package/dist/cjs/setup/config.js +11 -25
  76. package/dist/cjs/setup/config.js.map +1 -1
  77. package/dist/cjs/setup/http.js +15 -16
  78. package/dist/cjs/setup/http.js.map +1 -1
  79. package/dist/cjs/setup/index.js.map +1 -1
  80. package/dist/cjs/setup/oauth-google.js +9 -16
  81. package/dist/cjs/setup/oauth-google.js.map +1 -1
  82. package/dist/cjs/setup/runtime.d.cts +1 -1
  83. package/dist/cjs/setup/runtime.d.ts +1 -1
  84. package/dist/cjs/setup/runtime.js +29 -44
  85. package/dist/cjs/setup/runtime.js.map +1 -1
  86. package/dist/cjs/setup/stdio.js +15 -16
  87. package/dist/cjs/setup/stdio.js.map +1 -1
  88. package/dist/esm/constants.js.map +1 -1
  89. package/dist/esm/email/composition/rfc822-builder.js.map +1 -1
  90. package/dist/esm/email/messages/fetch-message.js.map +1 -1
  91. package/dist/esm/email/messages/messages.js.map +1 -1
  92. package/dist/esm/email/parsing/header-parsing.js.map +1 -1
  93. package/dist/esm/email/parsing/headers-utils.js.map +1 -1
  94. package/dist/esm/email/parsing/html-processing.js.map +1 -1
  95. package/dist/esm/email/parsing/message-extraction.js.map +1 -1
  96. package/dist/esm/email/querying/execute-query.js.map +1 -1
  97. package/dist/esm/email/querying/pagination.js.map +1 -1
  98. package/dist/esm/email/querying/query-builder.js.map +1 -1
  99. package/dist/esm/email/querying/search-execution.js.map +1 -1
  100. package/dist/esm/index.js.map +1 -1
  101. package/dist/esm/labels/gmail-labels.js.map +1 -1
  102. package/dist/esm/lib/base64-encoding.js.map +1 -1
  103. package/dist/esm/lib/create-store.js.map +1 -1
  104. package/dist/esm/lib/date-conversion.js.map +1 -1
  105. package/dist/esm/lib/messages-to-row.js.map +1 -1
  106. package/dist/esm/mcp/index.js.map +1 -1
  107. package/dist/esm/mcp/prompts/draft-email.js.map +1 -1
  108. package/dist/esm/mcp/prompts/index.js.map +1 -1
  109. package/dist/esm/mcp/prompts/query-syntax.js.map +1 -1
  110. package/dist/esm/mcp/resources/email.js.map +1 -1
  111. package/dist/esm/mcp/resources/index.js.map +1 -1
  112. package/dist/esm/mcp/tools/categories-list.js.map +1 -1
  113. package/dist/esm/mcp/tools/index.js.map +1 -1
  114. package/dist/esm/mcp/tools/label-add.js.map +1 -1
  115. package/dist/esm/mcp/tools/label-delete.d.ts +1 -1
  116. package/dist/esm/mcp/tools/label-delete.js.map +1 -1
  117. package/dist/esm/mcp/tools/labels-list.js.map +1 -1
  118. package/dist/esm/mcp/tools/message-get.d.ts +21 -21
  119. package/dist/esm/mcp/tools/message-get.js.map +1 -1
  120. package/dist/esm/mcp/tools/message-mark-read.js.map +1 -1
  121. package/dist/esm/mcp/tools/message-move-to-trash.d.ts +1 -1
  122. package/dist/esm/mcp/tools/message-move-to-trash.js.map +1 -1
  123. package/dist/esm/mcp/tools/message-respond.js.map +1 -1
  124. package/dist/esm/mcp/tools/message-search.d.ts +23 -23
  125. package/dist/esm/mcp/tools/message-search.js.map +1 -1
  126. package/dist/esm/mcp/tools/message-send.d.ts +3 -3
  127. package/dist/esm/mcp/tools/message-send.js.map +1 -1
  128. package/dist/esm/mcp/tools/messages-export-csv.js.map +1 -1
  129. package/dist/esm/schemas/gmail-query-schema.js.map +1 -1
  130. package/dist/esm/schemas/index.js.map +1 -1
  131. package/dist/esm/setup/config.js.map +1 -1
  132. package/dist/esm/setup/http.js.map +1 -1
  133. package/dist/esm/setup/index.js.map +1 -1
  134. package/dist/esm/setup/oauth-google.js.map +1 -1
  135. package/dist/esm/setup/runtime.d.ts +1 -1
  136. package/dist/esm/setup/runtime.js.map +1 -1
  137. package/dist/esm/setup/stdio.js.map +1 -1
  138. package/dist/esm/types.js.map +1 -1
  139. package/package.json +15 -11
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/Projects/mcp-z/mcp-gmail/src/setup/http.ts"],"sourcesContent":["import { composeMiddleware, connectHttp, createFileServingRouter, registerPrompts, registerResources, registerTools } from '@mcp-z/server';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport cors from 'cors';\nimport express from 'express';\nimport type { RuntimeOverrides, ServerConfig } from '../types.ts';\nimport { createDefaultRuntime } from './runtime.ts';\n\nexport async function createHTTPServer(config: ServerConfig, overrides?: RuntimeOverrides) {\n const runtime = await createDefaultRuntime(config, overrides);\n const modules = runtime.createDomainModules();\n const layers = runtime.middlewareFactories.map((factory) => factory(runtime.deps));\n const composed = composeMiddleware(modules, layers);\n const logger = runtime.deps.logger;\n const port = config.transport.port;\n if (!port) throw new Error('Port is required for HTTP transport');\n\n const tools = [...composed.tools, ...runtime.deps.oauthAdapters.accountTools];\n const filteredTools =\n config.auth === 'dcr'\n ? tools.filter((tool) => tool.name !== 'messages-export-csv') // No file storage in DCR (public cloud responsibility)\n : tools;\n const prompts = [...composed.prompts, ...runtime.deps.oauthAdapters.accountPrompts];\n\n const mcpServer = new McpServer({ name: config.name, version: config.version });\n registerTools(mcpServer, filteredTools);\n registerResources(mcpServer, composed.resources);\n registerPrompts(mcpServer, prompts);\n\n const app = express();\n app.use(cors());\n app.use(express.json({ limit: '10mb' }));\n\n if (runtime.deps.oauthAdapters.loopbackRouter) {\n app.use('/', runtime.deps.oauthAdapters.loopbackRouter);\n logger.info('Mounted loopback OAuth callback router');\n }\n\n if (config.auth !== 'dcr') {\n const fileRouter = createFileServingRouter({ resourceStoreUri: config.resourceStoreUri }, { contentType: 'text/csv', contentDisposition: 'attachment' });\n app.use('/files', fileRouter);\n }\n\n if (runtime.deps.oauthAdapters.dcrRouter) {\n app.use('/', runtime.deps.oauthAdapters.dcrRouter);\n logger.info('Mounted DCR router with OAuth endpoints');\n }\n\n logger.info(`Starting ${config.name} MCP server (http)`);\n const { close, httpServer } = await connectHttp(mcpServer, { logger, app, port });\n logger.info('http transport ready');\n\n return {\n httpServer,\n mcpServer,\n logger,\n close: async () => {\n await close();\n await runtime.close();\n },\n };\n}\n"],"names":["createHTTPServer","config","overrides","runtime","modules","layers","composed","logger","port","tools","filteredTools","prompts","mcpServer","app","fileRouter","close","httpServer","createDefaultRuntime","createDomainModules","middlewareFactories","map","factory","deps","composeMiddleware","transport","Error","oauthAdapters","accountTools","auth","filter","tool","name","accountPrompts","McpServer","version","registerTools","registerResources","resources","registerPrompts","express","use","cors","json","limit","loopbackRouter","info","createFileServingRouter","resourceStoreUri","contentType","contentDisposition","dcrRouter","connectHttp"],"mappings":"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"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/mcp-z/mcp-gmail/src/setup/http.ts"],"sourcesContent":["import { composeMiddleware, connectHttp, createFileServingRouter, registerPrompts, registerResources, registerTools } from '@mcp-z/server';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport cors from 'cors';\nimport express from 'express';\nimport type { RuntimeOverrides, ServerConfig } from '../types.ts';\nimport { createDefaultRuntime } from './runtime.ts';\n\nexport async function createHTTPServer(config: ServerConfig, overrides?: RuntimeOverrides) {\n const runtime = await createDefaultRuntime(config, overrides);\n const modules = runtime.createDomainModules();\n const layers = runtime.middlewareFactories.map((factory) => factory(runtime.deps));\n const composed = composeMiddleware(modules, layers);\n const logger = runtime.deps.logger;\n const port = config.transport.port;\n if (!port) throw new Error('Port is required for HTTP transport');\n\n const tools = [...composed.tools, ...runtime.deps.oauthAdapters.accountTools];\n const filteredTools =\n config.auth === 'dcr'\n ? tools.filter((tool) => tool.name !== 'messages-export-csv') // No file storage in DCR (public cloud responsibility)\n : tools;\n const prompts = [...composed.prompts, ...runtime.deps.oauthAdapters.accountPrompts];\n\n const mcpServer = new McpServer({ name: config.name, version: config.version });\n registerTools(mcpServer, filteredTools);\n registerResources(mcpServer, composed.resources);\n registerPrompts(mcpServer, prompts);\n\n const app = express();\n app.use(cors());\n app.use(express.json({ limit: '10mb' }));\n\n if (runtime.deps.oauthAdapters.loopbackRouter) {\n app.use('/', runtime.deps.oauthAdapters.loopbackRouter);\n logger.info('Mounted loopback OAuth callback router');\n }\n\n if (config.auth !== 'dcr') {\n const fileRouter = createFileServingRouter({ resourceStoreUri: config.resourceStoreUri }, { contentType: 'text/csv', contentDisposition: 'attachment' });\n app.use('/files', fileRouter);\n }\n\n if (runtime.deps.oauthAdapters.dcrRouter) {\n app.use('/', runtime.deps.oauthAdapters.dcrRouter);\n logger.info('Mounted DCR router with OAuth endpoints');\n }\n\n logger.info(`Starting ${config.name} MCP server (http)`);\n const { close, httpServer } = await connectHttp(mcpServer, { logger, app, port });\n logger.info('http transport ready');\n\n return {\n httpServer,\n mcpServer,\n logger,\n close: async () => {\n await close();\n await runtime.close();\n },\n };\n}\n"],"names":["createHTTPServer","config","overrides","runtime","modules","layers","composed","logger","port","tools","filteredTools","prompts","mcpServer","app","fileRouter","close","httpServer","createDefaultRuntime","createDomainModules","middlewareFactories","map","factory","deps","composeMiddleware","transport","Error","oauthAdapters","accountTools","auth","filter","tool","name","accountPrompts","McpServer","version","registerTools","registerResources","resources","registerPrompts","express","use","cors","json","limit","loopbackRouter","info","createFileServingRouter","resourceStoreUri","contentType","contentDisposition","dcrRouter","connectHttp"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/Projects/mcp-z/mcp-gmail/src/setup/index.ts"],"sourcesContent":["export { createConfig, parseConfig } from './config.ts';\nexport { createHTTPServer } from './http.ts';\nexport type { AuthMiddleware, OAuthAdapters, OAuthRuntimeDeps } from './oauth-google.ts';\nexport { createOAuthAdapters } from './oauth-google.ts';\nexport * from './runtime.ts';\nexport { createStdioServer } from './stdio.ts';\n"],"names":["createConfig","createHTTPServer","createOAuthAdapters","createStdioServer","parseConfig"],"mappings":";;;;;;;;;;;QAASA;eAAAA,sBAAY;;QACZC;eAAAA,wBAAgB;;QAEhBC;eAAAA,kCAAmB;;QAEnBC;eAAAA,0BAAiB;;QALHC;eAAAA,qBAAW;;;wBAAQ;sBACT;6BAEG;qBACtB;uBACoB"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/mcp-z/mcp-gmail/src/setup/index.ts"],"sourcesContent":["export { createConfig, parseConfig } from './config.ts';\nexport { createHTTPServer } from './http.ts';\nexport type { AuthMiddleware, OAuthAdapters, OAuthRuntimeDeps } from './oauth-google.ts';\nexport { createOAuthAdapters } from './oauth-google.ts';\nexport * from './runtime.ts';\nexport { createStdioServer } from './stdio.ts';\n"],"names":["createConfig","createHTTPServer","createOAuthAdapters","createStdioServer","parseConfig"],"mappings":";;;;;;;;;;;QAASA;eAAAA,sBAAY;;QACZC;eAAAA,wBAAgB;;QAEhBC;eAAAA,kCAAmB;;QAEnBC;eAAAA,0BAAiB;;QALHC;eAAAA,qBAAW;;;wBAAQ;sBACT;6BAEG;qBACtB;uBACoB"}
@@ -19,11 +19,8 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
19
19
  reject(error);
20
20
  return;
21
21
  }
22
- if (info.done) {
23
- resolve(value);
24
- } else {
25
- Promise.resolve(value).then(_next, _throw);
26
- }
22
+ if (info.done) resolve(value);
23
+ else Promise.resolve(value).then(_next, _throw);
27
24
  }
28
25
  function _async_to_generator(fn) {
29
26
  return function() {
@@ -48,17 +45,14 @@ function _define_property(obj, key, value) {
48
45
  configurable: true,
49
46
  writable: true
50
47
  });
51
- } else {
52
- obj[key] = value;
53
- }
48
+ } else obj[key] = value;
54
49
  return obj;
55
50
  }
56
51
  function _instanceof(left, right) {
52
+ "@swc/helpers - instanceof";
57
53
  if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
58
54
  return !!right[Symbol.hasInstance](left);
59
- } else {
60
- return left instanceof right;
61
- }
55
+ } else return left instanceof right;
62
56
  }
63
57
  function _object_spread(target) {
64
58
  for(var i = 1; i < arguments.length; i++){
@@ -90,9 +84,8 @@ function ownKeys(object, enumerableOnly) {
90
84
  }
91
85
  function _object_spread_props(target, source) {
92
86
  source = source != null ? source : {};
93
- if (Object.getOwnPropertyDescriptors) {
94
- Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
95
- } else {
87
+ if (Object.getOwnPropertyDescriptors) Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
88
+ else {
96
89
  ownKeys(Object(source)).forEach(function(key) {
97
90
  Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
98
91
  });
@@ -248,10 +241,10 @@ function createOAuthAdapters(config, deps, baseUrl) {
248
241
  });
249
242
  middleware = primary.authMiddleware();
250
243
  authAdapter = {
251
- getAccessToken: function() {
244
+ getAccessToken: function getAccessToken() {
252
245
  throw new Error('DCR mode does not support getAccessToken - tokens are provided via bearer auth');
253
246
  },
254
- getUserEmail: function() {
247
+ getUserEmail: function getUserEmail() {
255
248
  throw new Error('DCR mode does not support getUserEmail - tokens are provided via bearer auth');
256
249
  }
257
250
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/Projects/mcp-z/mcp-gmail/src/setup/oauth-google.ts"],"sourcesContent":["import { type AccountAuthProvider, AccountServer } from '@mcp-z/oauth';\nimport type { CachedToken } from '@mcp-z/oauth-google';\nimport { createDcrRouter, createLoopbackCallbackRouter, DcrOAuthProvider, LoopbackOAuthProvider, ServiceAccountProvider } from '@mcp-z/oauth-google';\nimport type { Logger, PromptModule, ToolModule } from '@mcp-z/server';\nimport type { Router } from 'express';\nimport type { Keyv } from 'keyv';\nimport { GOOGLE_SCOPE } from '../constants.ts';\nimport type { ServerConfig } from '../types.ts';\n\n/**\n * Gmail OAuth runtime dependencies.\n */\nexport interface OAuthRuntimeDeps {\n logger: Logger;\n tokenStore: Keyv<CachedToken>;\n dcrStore?: Keyv<unknown>;\n}\n\n/**\n * Auth middleware helpers used to wrap MCP modules.\n */\nexport interface AuthMiddleware {\n withToolAuth<T extends { name: string; config: unknown; handler: unknown }>(module: T): T;\n withResourceAuth<T extends { name: string; template?: unknown; config?: unknown; handler: unknown }>(module: T): T;\n withPromptAuth<T extends { name: string; config: unknown; handler: unknown }>(module: T): T;\n}\n\n/**\n * Result returned by createOAuthAdapters.\n */\nexport interface OAuthAdapters {\n primary: LoopbackOAuthProvider | ServiceAccountProvider | DcrOAuthProvider;\n middleware: AuthMiddleware;\n authAdapter: AccountAuthProvider;\n accountTools: ToolModule[];\n accountPrompts: PromptModule[];\n dcrRouter?: Router;\n loopbackRouter?: Router;\n}\n\n/**\n * Create Gmail OAuth adapters and helpers.\n *\n * @param config Gmail server configuration.\n * @param deps Runtime dependencies (logger, token store, optional DCR store).\n */\nexport async function createOAuthAdapters(config: ServerConfig, deps: OAuthRuntimeDeps, baseUrl?: string): Promise<OAuthAdapters> {\n const { logger, tokenStore, dcrStore } = deps;\n const oauthStaticConfig = {\n service: config.name,\n clientId: config.clientId,\n clientSecret: config.clientSecret,\n scope: GOOGLE_SCOPE,\n auth: config.auth,\n headless: config.headless,\n redirectUri: config.transport.type === 'stdio' ? undefined : config.redirectUri,\n ...(config.serviceAccountKeyFile && { serviceAccountKeyFile: config.serviceAccountKeyFile }),\n ...(baseUrl && { baseUrl }),\n };\n\n let primary: LoopbackOAuthProvider | ServiceAccountProvider | DcrOAuthProvider;\n\n if (oauthStaticConfig.auth === 'dcr') {\n logger.debug('Creating DCR provider', { service: oauthStaticConfig.service });\n\n if (!dcrStore) {\n throw new Error('DCR mode requires dcrStore to be configured');\n }\n if (!oauthStaticConfig.baseUrl) {\n throw new Error('DCR mode requires baseUrl to be configured');\n }\n\n primary = new DcrOAuthProvider({\n clientId: oauthStaticConfig.clientId,\n ...(oauthStaticConfig.clientSecret && { clientSecret: oauthStaticConfig.clientSecret }),\n scope: oauthStaticConfig.scope,\n verifyEndpoint: `${oauthStaticConfig.baseUrl}/oauth/verify`,\n logger,\n });\n\n const dcrRouter = createDcrRouter({\n store: dcrStore,\n issuerUrl: oauthStaticConfig.baseUrl,\n baseUrl: oauthStaticConfig.baseUrl,\n scopesSupported: oauthStaticConfig.scope.split(' '),\n clientConfig: {\n clientId: oauthStaticConfig.clientId,\n ...(oauthStaticConfig.clientSecret && { clientSecret: oauthStaticConfig.clientSecret }),\n },\n });\n\n const middleware = primary.authMiddleware();\n const authAdapter: AccountAuthProvider = {\n getAccessToken: () => {\n throw new Error('DCR mode does not support getAccessToken - tokens are provided via bearer auth');\n },\n getUserEmail: () => {\n throw new Error('DCR mode does not support getUserEmail - tokens are provided via bearer auth');\n },\n };\n\n return {\n primary,\n middleware: middleware as unknown as AuthMiddleware,\n authAdapter,\n accountTools: [],\n accountPrompts: [],\n dcrRouter,\n };\n }\n\n if (oauthStaticConfig.auth === 'service-account') {\n if (!oauthStaticConfig.serviceAccountKeyFile) {\n throw new Error('Service account key file is required when auth mode is \"service-account\". Set GOOGLE_SERVICE_ACCOUNT_KEY_FILE environment variable or use --service-account-key-file flag.');\n }\n\n logger.debug('Creating service account provider', { service: oauthStaticConfig.service });\n primary = new ServiceAccountProvider({\n keyFilePath: oauthStaticConfig.serviceAccountKeyFile,\n scopes: oauthStaticConfig.scope.split(' '),\n logger,\n });\n } else {\n logger.debug('Creating loopback OAuth provider', { service: oauthStaticConfig.service });\n primary = new LoopbackOAuthProvider({\n service: oauthStaticConfig.service,\n clientId: oauthStaticConfig.clientId,\n clientSecret: oauthStaticConfig.clientSecret,\n scope: oauthStaticConfig.scope,\n headless: oauthStaticConfig.headless,\n logger,\n tokenStore,\n ...(oauthStaticConfig.redirectUri !== undefined && { redirectUri: oauthStaticConfig.redirectUri }),\n });\n }\n\n const authAdapter: AccountAuthProvider = primary;\n\n let middleware: ReturnType<LoopbackOAuthProvider['authMiddleware']>;\n let accountTools: ToolModule[];\n let accountPrompts: PromptModule[];\n\n if (oauthStaticConfig.auth === 'service-account') {\n middleware = primary.authMiddleware();\n accountTools = [];\n accountPrompts = [];\n logger.debug('Service account mode - no account tools', { service: oauthStaticConfig.service });\n } else {\n middleware = primary.authMiddleware();\n\n const result = AccountServer.createLoopback({\n service: oauthStaticConfig.service,\n store: tokenStore,\n logger,\n auth: authAdapter,\n });\n accountTools = result.tools as ToolModule[];\n accountPrompts = result.prompts as PromptModule[];\n logger.debug('Loopback OAuth (multi-account mode)', { service: oauthStaticConfig.service });\n }\n\n const loopbackRouter = primary instanceof LoopbackOAuthProvider && oauthStaticConfig.redirectUri ? createLoopbackCallbackRouter(primary) : undefined;\n\n return {\n primary,\n middleware: middleware as unknown as AuthMiddleware,\n authAdapter,\n accountTools,\n accountPrompts,\n loopbackRouter,\n };\n}\n"],"names":["createOAuthAdapters","config","deps","baseUrl","logger","tokenStore","dcrStore","oauthStaticConfig","primary","dcrRouter","middleware","authAdapter","accountTools","accountPrompts","result","loopbackRouter","service","name","clientId","clientSecret","scope","GOOGLE_SCOPE","auth","headless","redirectUri","transport","type","undefined","serviceAccountKeyFile","debug","Error","DcrOAuthProvider","verifyEndpoint","createDcrRouter","store","issuerUrl","scopesSupported","split","clientConfig","authMiddleware","getAccessToken","getUserEmail","ServiceAccountProvider","keyFilePath","scopes","LoopbackOAuthProvider","AccountServer","createLoopback","tools","prompts","createLoopbackCallbackRouter"],"mappings":"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"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/mcp-z/mcp-gmail/src/setup/oauth-google.ts"],"sourcesContent":["import { type AccountAuthProvider, AccountServer } from '@mcp-z/oauth';\nimport type { CachedToken } from '@mcp-z/oauth-google';\nimport { createDcrRouter, createLoopbackCallbackRouter, DcrOAuthProvider, LoopbackOAuthProvider, ServiceAccountProvider } from '@mcp-z/oauth-google';\nimport type { Logger, PromptModule, ToolModule } from '@mcp-z/server';\nimport type { Router } from 'express';\nimport type { Keyv } from 'keyv';\nimport { GOOGLE_SCOPE } from '../constants.ts';\nimport type { ServerConfig } from '../types.ts';\n\n/**\n * Gmail OAuth runtime dependencies.\n */\nexport interface OAuthRuntimeDeps {\n logger: Logger;\n tokenStore: Keyv<CachedToken>;\n dcrStore?: Keyv<unknown>;\n}\n\n/**\n * Auth middleware helpers used to wrap MCP modules.\n */\nexport interface AuthMiddleware {\n withToolAuth<T extends { name: string; config: unknown; handler: unknown }>(module: T): T;\n withResourceAuth<T extends { name: string; template?: unknown; config?: unknown; handler: unknown }>(module: T): T;\n withPromptAuth<T extends { name: string; config: unknown; handler: unknown }>(module: T): T;\n}\n\n/**\n * Result returned by createOAuthAdapters.\n */\nexport interface OAuthAdapters {\n primary: LoopbackOAuthProvider | ServiceAccountProvider | DcrOAuthProvider;\n middleware: AuthMiddleware;\n authAdapter: AccountAuthProvider;\n accountTools: ToolModule[];\n accountPrompts: PromptModule[];\n dcrRouter?: Router;\n loopbackRouter?: Router;\n}\n\n/**\n * Create Gmail OAuth adapters and helpers.\n *\n * @param config Gmail server configuration.\n * @param deps Runtime dependencies (logger, token store, optional DCR store).\n */\nexport async function createOAuthAdapters(config: ServerConfig, deps: OAuthRuntimeDeps, baseUrl?: string): Promise<OAuthAdapters> {\n const { logger, tokenStore, dcrStore } = deps;\n const oauthStaticConfig = {\n service: config.name,\n clientId: config.clientId,\n clientSecret: config.clientSecret,\n scope: GOOGLE_SCOPE,\n auth: config.auth,\n headless: config.headless,\n redirectUri: config.transport.type === 'stdio' ? undefined : config.redirectUri,\n ...(config.serviceAccountKeyFile && { serviceAccountKeyFile: config.serviceAccountKeyFile }),\n ...(baseUrl && { baseUrl }),\n };\n\n let primary: LoopbackOAuthProvider | ServiceAccountProvider | DcrOAuthProvider;\n\n if (oauthStaticConfig.auth === 'dcr') {\n logger.debug('Creating DCR provider', { service: oauthStaticConfig.service });\n\n if (!dcrStore) {\n throw new Error('DCR mode requires dcrStore to be configured');\n }\n if (!oauthStaticConfig.baseUrl) {\n throw new Error('DCR mode requires baseUrl to be configured');\n }\n\n primary = new DcrOAuthProvider({\n clientId: oauthStaticConfig.clientId,\n ...(oauthStaticConfig.clientSecret && { clientSecret: oauthStaticConfig.clientSecret }),\n scope: oauthStaticConfig.scope,\n verifyEndpoint: `${oauthStaticConfig.baseUrl}/oauth/verify`,\n logger,\n });\n\n const dcrRouter = createDcrRouter({\n store: dcrStore,\n issuerUrl: oauthStaticConfig.baseUrl,\n baseUrl: oauthStaticConfig.baseUrl,\n scopesSupported: oauthStaticConfig.scope.split(' '),\n clientConfig: {\n clientId: oauthStaticConfig.clientId,\n ...(oauthStaticConfig.clientSecret && { clientSecret: oauthStaticConfig.clientSecret }),\n },\n });\n\n const middleware = primary.authMiddleware();\n const authAdapter: AccountAuthProvider = {\n getAccessToken: () => {\n throw new Error('DCR mode does not support getAccessToken - tokens are provided via bearer auth');\n },\n getUserEmail: () => {\n throw new Error('DCR mode does not support getUserEmail - tokens are provided via bearer auth');\n },\n };\n\n return {\n primary,\n middleware: middleware as unknown as AuthMiddleware,\n authAdapter,\n accountTools: [],\n accountPrompts: [],\n dcrRouter,\n };\n }\n\n if (oauthStaticConfig.auth === 'service-account') {\n if (!oauthStaticConfig.serviceAccountKeyFile) {\n throw new Error('Service account key file is required when auth mode is \"service-account\". Set GOOGLE_SERVICE_ACCOUNT_KEY_FILE environment variable or use --service-account-key-file flag.');\n }\n\n logger.debug('Creating service account provider', { service: oauthStaticConfig.service });\n primary = new ServiceAccountProvider({\n keyFilePath: oauthStaticConfig.serviceAccountKeyFile,\n scopes: oauthStaticConfig.scope.split(' '),\n logger,\n });\n } else {\n logger.debug('Creating loopback OAuth provider', { service: oauthStaticConfig.service });\n primary = new LoopbackOAuthProvider({\n service: oauthStaticConfig.service,\n clientId: oauthStaticConfig.clientId,\n clientSecret: oauthStaticConfig.clientSecret,\n scope: oauthStaticConfig.scope,\n headless: oauthStaticConfig.headless,\n logger,\n tokenStore,\n ...(oauthStaticConfig.redirectUri !== undefined && { redirectUri: oauthStaticConfig.redirectUri }),\n });\n }\n\n const authAdapter: AccountAuthProvider = primary;\n\n let middleware: ReturnType<LoopbackOAuthProvider['authMiddleware']>;\n let accountTools: ToolModule[];\n let accountPrompts: PromptModule[];\n\n if (oauthStaticConfig.auth === 'service-account') {\n middleware = primary.authMiddleware();\n accountTools = [];\n accountPrompts = [];\n logger.debug('Service account mode - no account tools', { service: oauthStaticConfig.service });\n } else {\n middleware = primary.authMiddleware();\n\n const result = AccountServer.createLoopback({\n service: oauthStaticConfig.service,\n store: tokenStore,\n logger,\n auth: authAdapter,\n });\n accountTools = result.tools as ToolModule[];\n accountPrompts = result.prompts as PromptModule[];\n logger.debug('Loopback OAuth (multi-account mode)', { service: oauthStaticConfig.service });\n }\n\n const loopbackRouter = primary instanceof LoopbackOAuthProvider && oauthStaticConfig.redirectUri ? createLoopbackCallbackRouter(primary) : undefined;\n\n return {\n primary,\n middleware: middleware as unknown as AuthMiddleware,\n authAdapter,\n accountTools,\n accountPrompts,\n loopbackRouter,\n };\n}\n"],"names":["createOAuthAdapters","config","deps","baseUrl","logger","tokenStore","dcrStore","oauthStaticConfig","primary","dcrRouter","middleware","authAdapter","accountTools","accountPrompts","result","loopbackRouter","service","name","clientId","clientSecret","scope","GOOGLE_SCOPE","auth","headless","redirectUri","transport","type","undefined","serviceAccountKeyFile","debug","Error","DcrOAuthProvider","verifyEndpoint","createDcrRouter","store","issuerUrl","scopesSupported","split","clientConfig","authMiddleware","getAccessToken","getUserEmail","ServiceAccountProvider","keyFilePath","scopes","LoopbackOAuthProvider","AccountServer","createLoopback","tools","prompts","createLoopbackCallbackRouter"],"mappings":"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"}
@@ -4,7 +4,7 @@ import type { CommonRuntime, RuntimeOverrides, ServerConfig, StorageContext } fr
4
4
  import { type OAuthAdapters } from './oauth-google.js';
5
5
  export declare function createLogger(config: ServerConfig): Logger;
6
6
  export declare function createTokenStore(baseDir: string): Promise<import("keyv").Keyv<CachedToken>>;
7
- export declare function createDcrStore(baseDir: string, required: boolean): Promise<import("keyv").Keyv<unknown>>;
7
+ export declare function createDcrStore(baseDir: string, required: boolean): Promise<import("keyv").Keyv<unknown> | undefined>;
8
8
  export declare function createAuthLayer(authMiddleware: OAuthAdapters['middleware']): MiddlewareLayer;
9
9
  export declare function createLoggingLayer(logger: Logger): MiddlewareLayer;
10
10
  export declare function createStorageLayer(storageContext: StorageContext): MiddlewareLayer;
@@ -4,7 +4,7 @@ import type { CommonRuntime, RuntimeOverrides, ServerConfig, StorageContext } fr
4
4
  import { type OAuthAdapters } from './oauth-google.js';
5
5
  export declare function createLogger(config: ServerConfig): Logger;
6
6
  export declare function createTokenStore(baseDir: string): Promise<import("keyv").Keyv<CachedToken>>;
7
- export declare function createDcrStore(baseDir: string, required: boolean): Promise<import("keyv").Keyv<unknown>>;
7
+ export declare function createDcrStore(baseDir: string, required: boolean): Promise<import("keyv").Keyv<unknown> | undefined>;
8
8
  export declare function createAuthLayer(authMiddleware: OAuthAdapters['middleware']): MiddlewareLayer;
9
9
  export declare function createLoggingLayer(logger: Logger): MiddlewareLayer;
10
10
  export declare function createStorageLayer(storageContext: StorageContext): MiddlewareLayer;
@@ -58,11 +58,8 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
58
58
  reject(error);
59
59
  return;
60
60
  }
61
- if (info.done) {
62
- resolve(value);
63
- } else {
64
- Promise.resolve(value).then(_next, _throw);
65
- }
61
+ if (info.done) resolve(value);
62
+ else Promise.resolve(value).then(_next, _throw);
66
63
  }
67
64
  function _async_to_generator(fn) {
68
65
  return function() {
@@ -87,9 +84,7 @@ function _define_property(obj, key, value) {
87
84
  configurable: true,
88
85
  writable: true
89
86
  });
90
- } else {
91
- obj[key] = value;
92
- }
87
+ } else obj[key] = value;
93
88
  return obj;
94
89
  }
95
90
  function _interop_require_default(obj) {
@@ -106,18 +101,12 @@ function _getRequireWildcardCache(nodeInterop) {
106
101
  })(nodeInterop);
107
102
  }
108
103
  function _interop_require_wildcard(obj, nodeInterop) {
109
- if (!nodeInterop && obj && obj.__esModule) {
110
- return obj;
111
- }
112
- if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
113
- return {
114
- default: obj
115
- };
116
- }
104
+ if (!nodeInterop && obj && obj.__esModule) return obj;
105
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") return {
106
+ default: obj
107
+ };
117
108
  var cache = _getRequireWildcardCache(nodeInterop);
118
- if (cache && cache.has(obj)) {
119
- return cache.get(obj);
120
- }
109
+ if (cache && cache.has(obj)) return cache.get(obj);
121
110
  var newObj = {
122
111
  __proto__: null
123
112
  };
@@ -125,24 +114,21 @@ function _interop_require_wildcard(obj, nodeInterop) {
125
114
  for(var key in obj){
126
115
  if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
127
116
  var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
128
- if (desc && (desc.get || desc.set)) {
129
- Object.defineProperty(newObj, key, desc);
130
- } else {
131
- newObj[key] = obj[key];
132
- }
117
+ if (desc && (desc.get || desc.set)) Object.defineProperty(newObj, key, desc);
118
+ else newObj[key] = obj[key];
133
119
  }
134
120
  }
135
121
  newObj.default = obj;
136
- if (cache) {
137
- cache.set(obj, newObj);
138
- }
122
+ if (cache) cache.set(obj, newObj);
139
123
  return newObj;
140
124
  }
141
125
  function _iterable_to_array(iter) {
142
- if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
126
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) {
127
+ return Array.from(iter);
128
+ }
143
129
  }
144
130
  function _non_iterable_spread() {
145
- throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
131
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
146
132
  }
147
133
  function _object_spread(target) {
148
134
  for(var i = 1; i < arguments.length; i++){
@@ -174,9 +160,8 @@ function ownKeys(object, enumerableOnly) {
174
160
  }
175
161
  function _object_spread_props(target, source) {
176
162
  source = source != null ? source : {};
177
- if (Object.getOwnPropertyDescriptors) {
178
- Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
179
- } else {
163
+ if (Object.getOwnPropertyDescriptors) Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
164
+ else {
180
165
  ownKeys(Object(source)).forEach(function(key) {
181
166
  Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
182
167
  });
@@ -186,14 +171,6 @@ function _object_spread_props(target, source) {
186
171
  function _to_consumable_array(arr) {
187
172
  return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
188
173
  }
189
- function _unsupported_iterable_to_array(o, minLen) {
190
- if (!o) return;
191
- if (typeof o === "string") return _array_like_to_array(o, minLen);
192
- var n = Object.prototype.toString.call(o).slice(8, -1);
193
- if (n === "Object" && o.constructor) n = o.constructor.name;
194
- if (n === "Map" || n === "Set") return Array.from(n);
195
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
196
- }
197
174
  function _ts_generator(thisArg, body) {
198
175
  var f, y, t, _ = {
199
176
  label: 0,
@@ -293,6 +270,14 @@ function _ts_generator(thisArg, body) {
293
270
  };
294
271
  }
295
272
  }
273
+ function _unsupported_iterable_to_array(o, minLen) {
274
+ if (!o) return;
275
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
276
+ var n = Object.prototype.toString.call(o).slice(8, -1);
277
+ if (n === "Object" && o.constructor) n = o.constructor.name;
278
+ if (n === "Map" || n === "Set") return Array.from(n);
279
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
280
+ }
296
281
  function createLogger(config) {
297
282
  var _config_logLevel;
298
283
  var hasStdio = config.transport.type === 'stdio';
@@ -354,9 +339,9 @@ function createLoggingLayer(logger) {
354
339
  };
355
340
  }
356
341
  function createStorageLayer(storageContext) {
357
- var wrapAtPosition = function(module, extraPosition) {
342
+ var wrapAtPosition = function wrapAtPosition(module, extraPosition) {
358
343
  var originalHandler = module.handler;
359
- var wrappedHandler = function() {
344
+ var wrappedHandler = function wrappedHandler() {
360
345
  for(var _len = arguments.length, allArgs = new Array(_len), _key = 0; _key < _len; _key++){
361
346
  allArgs[_key] = arguments[_key];
362
347
  }
@@ -385,7 +370,7 @@ function createStorageLayer(storageContext) {
385
370
  });
386
371
  };
387
372
  return {
388
- withTool: function(module) {
373
+ withTool: function withTool(module) {
389
374
  return wrapAtPosition(module, 1);
390
375
  }
391
376
  };
@@ -478,7 +463,7 @@ function createDefaultRuntime(config, overrides) {
478
463
  deps: deps,
479
464
  middlewareFactories: middlewareFactories,
480
465
  createDomainModules: createDomainModules,
481
- close: function() {
466
+ close: function close() {
482
467
  return _async_to_generator(function() {
483
468
  return _ts_generator(this, function(_state) {
484
469
  return [
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/Projects/mcp-z/mcp-gmail/src/setup/runtime.ts"],"sourcesContent":["import { sanitizeForLoggingFormatter } from '@mcp-z/oauth';\nimport type { CachedToken } from '@mcp-z/oauth-google';\nimport type { Logger, MiddlewareLayer } from '@mcp-z/server';\nimport { createLoggingMiddleware } from '@mcp-z/server';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport pino from 'pino';\nimport createStore from '../lib/create-store.ts';\nimport * as mcp from '../mcp/index.ts';\nimport type { CommonRuntime, RuntimeDeps, RuntimeOverrides, ServerConfig, StorageContext } from '../types.ts';\nimport { createOAuthAdapters, type OAuthAdapters } from './oauth-google.ts';\n\nexport function createLogger(config: ServerConfig): Logger {\n const hasStdio = config.transport.type === 'stdio';\n const logsPath = path.join(config.baseDir, 'logs', `${config.name}.log`);\n if (hasStdio) fs.mkdirSync(path.dirname(logsPath), { recursive: true });\n return pino({ level: config.logLevel ?? 'info', formatters: sanitizeForLoggingFormatter() }, hasStdio ? pino.destination({ dest: logsPath, sync: false }) : pino.destination(1));\n}\n\nexport async function createTokenStore(baseDir: string) {\n const tokenStoreUri = process.env.TOKEN_STORE_URI || `file://${path.join(baseDir, 'tokens.json')}`;\n return createStore<CachedToken>(tokenStoreUri);\n}\n\nexport async function createDcrStore(baseDir: string, required: boolean) {\n if (!required) return undefined;\n const dcrStoreUri = process.env.DCR_STORE_URI || `file://${path.join(baseDir, 'dcr.json')}`;\n return createStore<unknown>(dcrStoreUri);\n}\n\nexport function createAuthLayer(authMiddleware: OAuthAdapters['middleware']): MiddlewareLayer {\n return {\n withTool: authMiddleware.withToolAuth,\n withResource: authMiddleware.withResourceAuth,\n withPrompt: authMiddleware.withPromptAuth,\n };\n}\n\nexport function createLoggingLayer(logger: Logger): MiddlewareLayer {\n const logging = createLoggingMiddleware({ logger });\n return {\n withTool: logging.withToolLogging,\n withResource: logging.withResourceLogging,\n withPrompt: logging.withPromptLogging,\n };\n}\n\nexport function createStorageLayer(storageContext: StorageContext): MiddlewareLayer {\n const wrapAtPosition = <T extends { name: string; handler: unknown; [key: string]: unknown }>(module: T, extraPosition: number): T => {\n const originalHandler = module.handler as (...args: unknown[]) => Promise<unknown>;\n\n const wrappedHandler = async (...allArgs: unknown[]) => {\n const extra = allArgs[extraPosition];\n (extra as { storageContext?: StorageContext }).storageContext = storageContext;\n return await originalHandler(...allArgs);\n };\n\n return {\n ...module,\n handler: wrappedHandler,\n } as T;\n };\n\n return {\n withTool: <T extends { name: string; config: unknown; handler: unknown }>(module: T): T => wrapAtPosition(module, 1) as T,\n };\n}\n\nexport function validateStorageConfig(config: ServerConfig, logger: Logger) {\n if (config.auth === 'dcr') {\n if (config.resourceStoreUri) {\n logger.warn('DCR mode does not support file storage; resourceStoreUri will be ignored.');\n }\n return;\n }\n if (!config.resourceStoreUri) {\n throw new Error('gmail-messages-export-csv: Server configuration missing resourceStoreUri.');\n }\n if (config.transport.type === 'http' && !config.baseUrl && !config.transport.port) {\n throw new Error('gmail-messages-export-csv: HTTP transport requires either baseUrl in server config or port in transport config. This is a server configuration error - please provide --base-url or --port.');\n }\n}\n\nexport async function createDefaultRuntime(config: ServerConfig, overrides?: RuntimeOverrides): Promise<CommonRuntime> {\n if (config.auth === 'dcr' && config.transport.type !== 'http') throw new Error('DCR mode requires an HTTP transport');\n\n const logger = createLogger(config);\n validateStorageConfig(config, logger);\n const tokenStore = await createTokenStore(config.baseDir);\n const baseUrl = config.baseUrl ?? (config.transport.type === 'http' && config.transport.port ? `http://localhost:${config.transport.port}` : undefined);\n const dcrStore = await createDcrStore(config.baseDir, config.auth === 'dcr');\n const oauthAdapters = await createOAuthAdapters(config, { logger, tokenStore, dcrStore }, baseUrl);\n const deps: RuntimeDeps = { config, logger, tokenStore, oauthAdapters, baseUrl };\n const createDomainModules =\n overrides?.createDomainModules ??\n (() => ({\n tools: Object.values(mcp.toolFactories).map((factory) => factory()),\n resources: Object.values(mcp.resourceFactories).map((factory) => factory()),\n prompts: Object.values(mcp.promptFactories).map((factory) => factory()),\n }));\n const middlewareFactories = overrides?.middlewareFactories ?? [() => createAuthLayer(oauthAdapters.middleware), () => createLoggingLayer(logger), ...(config.auth === 'dcr' ? [] : [() => createStorageLayer({ resourceStoreUri: config.resourceStoreUri, baseUrl: config.baseUrl, transport: config.transport })])];\n\n return {\n deps,\n middlewareFactories,\n createDomainModules,\n close: async () => {},\n };\n}\n"],"names":["createAuthLayer","createDcrStore","createDefaultRuntime","createLogger","createLoggingLayer","createStorageLayer","createTokenStore","validateStorageConfig","config","hasStdio","transport","type","logsPath","path","join","baseDir","name","fs","mkdirSync","dirname","recursive","pino","level","logLevel","formatters","sanitizeForLoggingFormatter","destination","dest","sync","tokenStoreUri","process","env","TOKEN_STORE_URI","createStore","required","dcrStoreUri","undefined","DCR_STORE_URI","authMiddleware","withTool","withToolAuth","withResource","withResourceAuth","withPrompt","withPromptAuth","logger","logging","createLoggingMiddleware","withToolLogging","withResourceLogging","withPromptLogging","storageContext","wrapAtPosition","module","extraPosition","originalHandler","handler","wrappedHandler","allArgs","extra","auth","resourceStoreUri","warn","Error","baseUrl","port","overrides","tokenStore","dcrStore","oauthAdapters","deps","createDomainModules","middlewareFactories","createOAuthAdapters","tools","Object","values","mcp","toolFactories","map","factory","resources","resourceFactories","prompts","promptFactories","middleware","close"],"mappings":"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"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/mcp-z/mcp-gmail/src/setup/runtime.ts"],"sourcesContent":["import { sanitizeForLoggingFormatter } from '@mcp-z/oauth';\nimport type { CachedToken } from '@mcp-z/oauth-google';\nimport type { Logger, MiddlewareLayer } from '@mcp-z/server';\nimport { createLoggingMiddleware } from '@mcp-z/server';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport pino from 'pino';\nimport createStore from '../lib/create-store.ts';\nimport * as mcp from '../mcp/index.ts';\nimport type { CommonRuntime, RuntimeDeps, RuntimeOverrides, ServerConfig, StorageContext } from '../types.ts';\nimport { createOAuthAdapters, type OAuthAdapters } from './oauth-google.ts';\n\nexport function createLogger(config: ServerConfig): Logger {\n const hasStdio = config.transport.type === 'stdio';\n const logsPath = path.join(config.baseDir, 'logs', `${config.name}.log`);\n if (hasStdio) fs.mkdirSync(path.dirname(logsPath), { recursive: true });\n return pino({ level: config.logLevel ?? 'info', formatters: sanitizeForLoggingFormatter() }, hasStdio ? pino.destination({ dest: logsPath, sync: false }) : pino.destination(1));\n}\n\nexport async function createTokenStore(baseDir: string) {\n const tokenStoreUri = process.env.TOKEN_STORE_URI || `file://${path.join(baseDir, 'tokens.json')}`;\n return createStore<CachedToken>(tokenStoreUri);\n}\n\nexport async function createDcrStore(baseDir: string, required: boolean) {\n if (!required) return undefined;\n const dcrStoreUri = process.env.DCR_STORE_URI || `file://${path.join(baseDir, 'dcr.json')}`;\n return createStore<unknown>(dcrStoreUri);\n}\n\nexport function createAuthLayer(authMiddleware: OAuthAdapters['middleware']): MiddlewareLayer {\n return {\n withTool: authMiddleware.withToolAuth,\n withResource: authMiddleware.withResourceAuth,\n withPrompt: authMiddleware.withPromptAuth,\n };\n}\n\nexport function createLoggingLayer(logger: Logger): MiddlewareLayer {\n const logging = createLoggingMiddleware({ logger });\n return {\n withTool: logging.withToolLogging,\n withResource: logging.withResourceLogging,\n withPrompt: logging.withPromptLogging,\n };\n}\n\nexport function createStorageLayer(storageContext: StorageContext): MiddlewareLayer {\n const wrapAtPosition = <T extends { name: string; handler: unknown; [key: string]: unknown }>(module: T, extraPosition: number): T => {\n const originalHandler = module.handler as (...args: unknown[]) => Promise<unknown>;\n\n const wrappedHandler = async (...allArgs: unknown[]) => {\n const extra = allArgs[extraPosition];\n (extra as { storageContext?: StorageContext }).storageContext = storageContext;\n return await originalHandler(...allArgs);\n };\n\n return {\n ...module,\n handler: wrappedHandler,\n } as T;\n };\n\n return {\n withTool: <T extends { name: string; config: unknown; handler: unknown }>(module: T): T => wrapAtPosition(module, 1) as T,\n };\n}\n\nexport function validateStorageConfig(config: ServerConfig, logger: Logger) {\n if (config.auth === 'dcr') {\n if (config.resourceStoreUri) {\n logger.warn('DCR mode does not support file storage; resourceStoreUri will be ignored.');\n }\n return;\n }\n if (!config.resourceStoreUri) {\n throw new Error('gmail-messages-export-csv: Server configuration missing resourceStoreUri.');\n }\n if (config.transport.type === 'http' && !config.baseUrl && !config.transport.port) {\n throw new Error('gmail-messages-export-csv: HTTP transport requires either baseUrl in server config or port in transport config. This is a server configuration error - please provide --base-url or --port.');\n }\n}\n\nexport async function createDefaultRuntime(config: ServerConfig, overrides?: RuntimeOverrides): Promise<CommonRuntime> {\n if (config.auth === 'dcr' && config.transport.type !== 'http') throw new Error('DCR mode requires an HTTP transport');\n\n const logger = createLogger(config);\n validateStorageConfig(config, logger);\n const tokenStore = await createTokenStore(config.baseDir);\n const baseUrl = config.baseUrl ?? (config.transport.type === 'http' && config.transport.port ? `http://localhost:${config.transport.port}` : undefined);\n const dcrStore = await createDcrStore(config.baseDir, config.auth === 'dcr');\n const oauthAdapters = await createOAuthAdapters(config, { logger, tokenStore, dcrStore }, baseUrl);\n const deps: RuntimeDeps = { config, logger, tokenStore, oauthAdapters, baseUrl };\n const createDomainModules =\n overrides?.createDomainModules ??\n (() => ({\n tools: Object.values(mcp.toolFactories).map((factory) => factory()),\n resources: Object.values(mcp.resourceFactories).map((factory) => factory()),\n prompts: Object.values(mcp.promptFactories).map((factory) => factory()),\n }));\n const middlewareFactories = overrides?.middlewareFactories ?? [() => createAuthLayer(oauthAdapters.middleware), () => createLoggingLayer(logger), ...(config.auth === 'dcr' ? [] : [() => createStorageLayer({ resourceStoreUri: config.resourceStoreUri, baseUrl: config.baseUrl, transport: config.transport })])];\n\n return {\n deps,\n middlewareFactories,\n createDomainModules,\n close: async () => {},\n };\n}\n"],"names":["createAuthLayer","createDcrStore","createDefaultRuntime","createLogger","createLoggingLayer","createStorageLayer","createTokenStore","validateStorageConfig","config","hasStdio","transport","type","logsPath","path","join","baseDir","name","fs","mkdirSync","dirname","recursive","pino","level","logLevel","formatters","sanitizeForLoggingFormatter","destination","dest","sync","tokenStoreUri","process","env","TOKEN_STORE_URI","createStore","required","dcrStoreUri","undefined","DCR_STORE_URI","authMiddleware","withTool","withToolAuth","withResource","withResourceAuth","withPrompt","withPromptAuth","logger","logging","createLoggingMiddleware","withToolLogging","withResourceLogging","withPromptLogging","storageContext","wrapAtPosition","module","extraPosition","originalHandler","handler","wrappedHandler","allArgs","extra","auth","resourceStoreUri","warn","Error","baseUrl","port","overrides","tokenStore","dcrStore","oauthAdapters","deps","createDomainModules","middlewareFactories","createOAuthAdapters","tools","Object","values","mcp","toolFactories","map","factory","resources","resourceFactories","prompts","promptFactories","middleware","close"],"mappings":"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"}
@@ -27,11 +27,8 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
27
27
  reject(error);
28
28
  return;
29
29
  }
30
- if (info.done) {
31
- resolve(value);
32
- } else {
33
- Promise.resolve(value).then(_next, _throw);
34
- }
30
+ if (info.done) resolve(value);
31
+ else Promise.resolve(value).then(_next, _throw);
35
32
  }
36
33
  function _async_to_generator(fn) {
37
34
  return function() {
@@ -49,22 +46,16 @@ function _async_to_generator(fn) {
49
46
  };
50
47
  }
51
48
  function _iterable_to_array(iter) {
52
- if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
49
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) {
50
+ return Array.from(iter);
51
+ }
53
52
  }
54
53
  function _non_iterable_spread() {
55
- throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
54
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
56
55
  }
57
56
  function _to_consumable_array(arr) {
58
57
  return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
59
58
  }
60
- function _unsupported_iterable_to_array(o, minLen) {
61
- if (!o) return;
62
- if (typeof o === "string") return _array_like_to_array(o, minLen);
63
- var n = Object.prototype.toString.call(o).slice(8, -1);
64
- if (n === "Object" && o.constructor) n = o.constructor.name;
65
- if (n === "Map" || n === "Set") return Array.from(n);
66
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
67
- }
68
59
  function _ts_generator(thisArg, body) {
69
60
  var f, y, t, _ = {
70
61
  label: 0,
@@ -164,6 +155,14 @@ function _ts_generator(thisArg, body) {
164
155
  };
165
156
  }
166
157
  }
158
+ function _unsupported_iterable_to_array(o, minLen) {
159
+ if (!o) return;
160
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
161
+ var n = Object.prototype.toString.call(o).slice(8, -1);
162
+ if (n === "Object" && o.constructor) n = o.constructor.name;
163
+ if (n === "Map" || n === "Set") return Array.from(n);
164
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
165
+ }
167
166
  function createStdioServer(config, overrides) {
168
167
  return _async_to_generator(function() {
169
168
  var runtime, modules, layers, composed, logger, tools, filteredTools, prompts, mcpServer, close;
@@ -210,7 +209,7 @@ function createStdioServer(config, overrides) {
210
209
  {
211
210
  mcpServer: mcpServer,
212
211
  logger: logger,
213
- close: function() {
212
+ close: function close1() {
214
213
  return _async_to_generator(function() {
215
214
  return _ts_generator(this, function(_state) {
216
215
  switch(_state.label){
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/Projects/mcp-z/mcp-gmail/src/setup/stdio.ts"],"sourcesContent":["import { composeMiddleware, connectStdio, registerPrompts, registerResources, registerTools } from '@mcp-z/server';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { RuntimeOverrides, ServerConfig } from '../types.ts';\nimport { createDefaultRuntime } from './runtime.ts';\n\nexport async function createStdioServer(config: ServerConfig, overrides?: RuntimeOverrides) {\n const runtime = await createDefaultRuntime(config, overrides);\n const modules = runtime.createDomainModules();\n const layers = runtime.middlewareFactories.map((factory) => factory(runtime.deps));\n const composed = composeMiddleware(modules, layers);\n const logger = runtime.deps.logger;\n\n const tools = [...composed.tools, ...runtime.deps.oauthAdapters.accountTools];\n const filteredTools =\n config.auth === 'dcr'\n ? tools.filter((tool) => tool.name !== 'messages-export-csv') // No file storage in DCR (public cloud responsibility)\n : tools;\n const prompts = [...composed.prompts, ...runtime.deps.oauthAdapters.accountPrompts];\n\n const mcpServer = new McpServer({ name: config.name, version: config.version });\n registerTools(mcpServer, filteredTools);\n registerResources(mcpServer, composed.resources);\n registerPrompts(mcpServer, prompts);\n\n logger.info(`Starting ${config.name} MCP server (stdio)`);\n const { close } = await connectStdio(mcpServer, { logger });\n logger.info('stdio transport ready');\n\n return {\n mcpServer,\n logger,\n close: async () => {\n await close();\n await runtime.close();\n },\n };\n}\n"],"names":["createStdioServer","config","overrides","runtime","modules","layers","composed","logger","tools","filteredTools","prompts","mcpServer","close","createDefaultRuntime","createDomainModules","middlewareFactories","map","factory","deps","composeMiddleware","oauthAdapters","accountTools","auth","filter","tool","name","accountPrompts","McpServer","version","registerTools","registerResources","resources","registerPrompts","info","connectStdio"],"mappings":";;;;+BAKsBA;;;eAAAA;;;sBAL6E;mBACzE;yBAEW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE9B,SAAeA,kBAAkBC,MAAoB,EAAEC,SAA4B;;YAClFC,SACAC,SACAC,QACAC,UACAC,QAEAC,OACAC,eAIAC,SAEAC,WAMEC;;;;oBAnBQ;;wBAAMC,IAAAA,+BAAoB,EAACZ,QAAQC;;;oBAA7CC,UAAU;oBACVC,UAAUD,QAAQW,mBAAmB;oBACrCT,SAASF,QAAQY,mBAAmB,CAACC,GAAG,CAAC,SAACC;+BAAYA,QAAQd,QAAQe,IAAI;;oBAC1EZ,WAAWa,IAAAA,yBAAiB,EAACf,SAASC;oBACtCE,SAASJ,QAAQe,IAAI,CAACX,MAAM;oBAE5BC,QAAQ,AAAC,qBAAGF,SAASE,KAAK,SAAE,qBAAGL,QAAQe,IAAI,CAACE,aAAa,CAACC,YAAY;oBACtEZ,gBACJR,OAAOqB,IAAI,KAAK,QACZd,MAAMe,MAAM,CAAC,SAACC;+BAASA,KAAKC,IAAI,KAAK;uBAAuB,uDAAuD;uBACnHjB;oBACAE,UAAU,AAAC,qBAAGJ,SAASI,OAAO,SAAE,qBAAGP,QAAQe,IAAI,CAACE,aAAa,CAACM,cAAc;oBAE5Ef,YAAY,IAAIgB,cAAS,CAAC;wBAAEF,MAAMxB,OAAOwB,IAAI;wBAAEG,SAAS3B,OAAO2B,OAAO;oBAAC;oBAC7EC,IAAAA,qBAAa,EAAClB,WAAWF;oBACzBqB,IAAAA,yBAAiB,EAACnB,WAAWL,SAASyB,SAAS;oBAC/CC,IAAAA,uBAAe,EAACrB,WAAWD;oBAE3BH,OAAO0B,IAAI,CAAC,AAAC,YAAuB,OAAZhC,OAAOwB,IAAI,EAAC;oBAClB;;wBAAMS,IAAAA,oBAAY,EAACvB,WAAW;4BAAEJ,QAAAA;wBAAO;;;oBAAjDK,QAAU,cAAVA;oBACRL,OAAO0B,IAAI,CAAC;oBAEZ;;wBAAO;4BACLtB,WAAAA;4BACAJ,QAAAA;4BACAK,OAAO;;;;;gDACL;;oDAAMA;;;gDAAN;gDACA;;oDAAMT,QAAQS,KAAK;;;gDAAnB;;;;;;gCACF;;wBACF;;;;IACF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/mcp-z/mcp-gmail/src/setup/stdio.ts"],"sourcesContent":["import { composeMiddleware, connectStdio, registerPrompts, registerResources, registerTools } from '@mcp-z/server';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { RuntimeOverrides, ServerConfig } from '../types.ts';\nimport { createDefaultRuntime } from './runtime.ts';\n\nexport async function createStdioServer(config: ServerConfig, overrides?: RuntimeOverrides) {\n const runtime = await createDefaultRuntime(config, overrides);\n const modules = runtime.createDomainModules();\n const layers = runtime.middlewareFactories.map((factory) => factory(runtime.deps));\n const composed = composeMiddleware(modules, layers);\n const logger = runtime.deps.logger;\n\n const tools = [...composed.tools, ...runtime.deps.oauthAdapters.accountTools];\n const filteredTools =\n config.auth === 'dcr'\n ? tools.filter((tool) => tool.name !== 'messages-export-csv') // No file storage in DCR (public cloud responsibility)\n : tools;\n const prompts = [...composed.prompts, ...runtime.deps.oauthAdapters.accountPrompts];\n\n const mcpServer = new McpServer({ name: config.name, version: config.version });\n registerTools(mcpServer, filteredTools);\n registerResources(mcpServer, composed.resources);\n registerPrompts(mcpServer, prompts);\n\n logger.info(`Starting ${config.name} MCP server (stdio)`);\n const { close } = await connectStdio(mcpServer, { logger });\n logger.info('stdio transport ready');\n\n return {\n mcpServer,\n logger,\n close: async () => {\n await close();\n await runtime.close();\n },\n };\n}\n"],"names":["createStdioServer","config","overrides","runtime","modules","layers","composed","logger","tools","filteredTools","prompts","mcpServer","close","createDefaultRuntime","createDomainModules","middlewareFactories","map","factory","deps","composeMiddleware","oauthAdapters","accountTools","auth","filter","tool","name","accountPrompts","McpServer","version","registerTools","registerResources","resources","registerPrompts","info","connectStdio"],"mappings":";;;;+BAKsBA;;;eAAAA;;;sBAL6E;mBACzE;yBAEW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE9B,SAAeA,kBAAkBC,MAAoB,EAAEC,SAA4B;;YAClFC,SACAC,SACAC,QACAC,UACAC,QAEAC,OACAC,eAIAC,SAEAC,WAMEC;;;;oBAnBQ;;wBAAMC,IAAAA,+BAAoB,EAACZ,QAAQC;;;oBAA7CC,UAAU;oBACVC,UAAUD,QAAQW,mBAAmB;oBACrCT,SAASF,QAAQY,mBAAmB,CAACC,GAAG,CAAC,SAACC;+BAAYA,QAAQd,QAAQe,IAAI;;oBAC1EZ,WAAWa,IAAAA,yBAAiB,EAACf,SAASC;oBACtCE,SAASJ,QAAQe,IAAI,CAACX,MAAM;oBAE5BC,QAAQ,AAAC,qBAAGF,SAASE,KAAK,SAAE,qBAAGL,QAAQe,IAAI,CAACE,aAAa,CAACC,YAAY;oBACtEZ,gBACJR,OAAOqB,IAAI,KAAK,QACZd,MAAMe,MAAM,CAAC,SAACC;+BAASA,KAAKC,IAAI,KAAK;uBAAuB,uDAAuD;uBACnHjB;oBACAE,UAAU,AAAC,qBAAGJ,SAASI,OAAO,SAAE,qBAAGP,QAAQe,IAAI,CAACE,aAAa,CAACM,cAAc;oBAE5Ef,YAAY,IAAIgB,cAAS,CAAC;wBAAEF,MAAMxB,OAAOwB,IAAI;wBAAEG,SAAS3B,OAAO2B,OAAO;oBAAC;oBAC7EC,IAAAA,qBAAa,EAAClB,WAAWF;oBACzBqB,IAAAA,yBAAiB,EAACnB,WAAWL,SAASyB,SAAS;oBAC/CC,IAAAA,uBAAe,EAACrB,WAAWD;oBAE3BH,OAAO0B,IAAI,CAAC,AAAC,YAAuB,OAAZhC,OAAOwB,IAAI,EAAC;oBAClB;;wBAAMS,IAAAA,oBAAY,EAACvB,WAAW;4BAAEJ,QAAAA;wBAAO;;;oBAAjDK,QAAU,cAAVA;oBACRL,OAAO0B,IAAI,CAAC;oBAEZ;;wBAAO;4BACLtB,WAAAA;4BACAJ,QAAAA;4BACAK,OAAO,SAAPA;;;;;gDACE;;oDAAMA;;;gDAAN;gDACA;;oDAAMT,QAAQS,KAAK;;;gDAAnB;;;;;;gCACF;;wBACF;;;;IACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/Projects/mcp-z/mcp-gmail/src/constants.ts"],"sourcesContent":["/**\n * Gmail MCP Server Constants\n *\n * These scopes are required for Gmail functionality and are hardcoded\n * rather than externally configured since this server knows its own requirements.\n */\n\nimport { EMAIL_CHUNK_SIZE, EMAIL_MAX_BATCH_SIZE } from '@mcp-z/email';\n\n// Google OAuth scopes required for Gmail operations\nexport const GOOGLE_SCOPE = 'openid https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email https://mail.google.com/';\n\n// Batch processing configuration (from shared email constants)\nexport const CHUNK_SIZE = EMAIL_CHUNK_SIZE;\nexport const MAX_BATCH_SIZE = EMAIL_MAX_BATCH_SIZE;\n\n// Pagination configuration\nexport const DEFAULT_PAGE_SIZE = 50; // Default number of items per page\nexport const MAX_PAGE_SIZE = 1000; // Maximum number of items per page\n"],"names":["EMAIL_CHUNK_SIZE","EMAIL_MAX_BATCH_SIZE","GOOGLE_SCOPE","CHUNK_SIZE","MAX_BATCH_SIZE","DEFAULT_PAGE_SIZE","MAX_PAGE_SIZE"],"mappings":"AAAA;;;;;CAKC,GAED,SAASA,gBAAgB,EAAEC,oBAAoB,QAAQ,eAAe;AAEtE,oDAAoD;AACpD,OAAO,MAAMC,eAAe,kIAAkI;AAE9J,+DAA+D;AAC/D,OAAO,MAAMC,aAAaH,iBAAiB;AAC3C,OAAO,MAAMI,iBAAiBH,qBAAqB;AAEnD,2BAA2B;AAC3B,OAAO,MAAMI,oBAAoB,GAAG,CAAC,mCAAmC;AACxE,OAAO,MAAMC,gBAAgB,KAAK,CAAC,mCAAmC"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/mcp-z/mcp-gmail/src/constants.ts"],"sourcesContent":["/**\n * Gmail MCP Server Constants\n *\n * These scopes are required for Gmail functionality and are hardcoded\n * rather than externally configured since this server knows its own requirements.\n */\n\nimport { EMAIL_CHUNK_SIZE, EMAIL_MAX_BATCH_SIZE } from '@mcp-z/email';\n\n// Google OAuth scopes required for Gmail operations\nexport const GOOGLE_SCOPE = 'openid https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email https://mail.google.com/';\n\n// Batch processing configuration (from shared email constants)\nexport const CHUNK_SIZE = EMAIL_CHUNK_SIZE;\nexport const MAX_BATCH_SIZE = EMAIL_MAX_BATCH_SIZE;\n\n// Pagination configuration\nexport const DEFAULT_PAGE_SIZE = 50; // Default number of items per page\nexport const MAX_PAGE_SIZE = 1000; // Maximum number of items per page\n"],"names":["EMAIL_CHUNK_SIZE","EMAIL_MAX_BATCH_SIZE","GOOGLE_SCOPE","CHUNK_SIZE","MAX_BATCH_SIZE","DEFAULT_PAGE_SIZE","MAX_PAGE_SIZE"],"mappings":"AAAA;;;;;CAKC,GAED,SAASA,gBAAgB,EAAEC,oBAAoB,QAAQ,eAAe;AAEtE,oDAAoD;AACpD,OAAO,MAAMC,eAAe,kIAAkI;AAE9J,+DAA+D;AAC/D,OAAO,MAAMC,aAAaH,iBAAiB;AAC3C,OAAO,MAAMI,iBAAiBH,qBAAqB;AAEnD,2BAA2B;AAC3B,OAAO,MAAMI,oBAAoB,GAAG,CAAC,mCAAmC;AACxE,OAAO,MAAMC,gBAAgB,KAAK,CAAC,mCAAmC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/Projects/mcp-z/mcp-gmail/src/email/composition/rfc822-builder.ts"],"sourcesContent":["export interface Rfc822Args {\n to?: string | string[];\n cc?: string | string[];\n bcc?: string | string[];\n subject?: string;\n body?: string;\n from?: string;\n /** Content type for the email body */\n contentType?: 'text' | 'html';\n}\n\nexport function buildRfc822FromArgs(args: Rfc822Args): string {\n const { to = [], cc = [], bcc = [], subject = '', body = '', from = '', contentType = 'text' } = args;\n\n const headers: string[] = [];\n\n if (from) headers.push(`From: ${from}`);\n if (to && to.length) headers.push(`To: ${Array.isArray(to) ? to.join(', ') : to}`);\n if (cc && cc.length) headers.push(`Cc: ${Array.isArray(cc) ? cc.join(', ') : cc}`);\n if (bcc && bcc.length) headers.push(`Bcc: ${Array.isArray(bcc) ? bcc.join(', ') : bcc}`);\n if (subject) headers.push(`Subject: ${subject}`);\n\n headers.push('MIME-Version: 1.0');\n const mimeType = contentType === 'html' ? 'text/html' : 'text/plain';\n headers.push(`Content-Type: ${mimeType}; charset=utf-8`);\n\n return `${headers.join('\\r\\n')}\\r\\n\\r\\n${body}`;\n}\n"],"names":["buildRfc822FromArgs","args","to","cc","bcc","subject","body","from","contentType","headers","push","length","Array","isArray","join","mimeType"],"mappings":"AAWA,OAAO,SAASA,oBAAoBC,IAAgB;IAClD,MAAM,EAAEC,KAAK,EAAE,EAAEC,KAAK,EAAE,EAAEC,MAAM,EAAE,EAAEC,UAAU,EAAE,EAAEC,OAAO,EAAE,EAAEC,OAAO,EAAE,EAAEC,cAAc,MAAM,EAAE,GAAGP;IAEjG,MAAMQ,UAAoB,EAAE;IAE5B,IAAIF,MAAME,QAAQC,IAAI,CAAC,CAAC,MAAM,EAAEH,MAAM;IACtC,IAAIL,MAAMA,GAAGS,MAAM,EAAEF,QAAQC,IAAI,CAAC,CAAC,IAAI,EAAEE,MAAMC,OAAO,CAACX,MAAMA,GAAGY,IAAI,CAAC,QAAQZ,IAAI;IACjF,IAAIC,MAAMA,GAAGQ,MAAM,EAAEF,QAAQC,IAAI,CAAC,CAAC,IAAI,EAAEE,MAAMC,OAAO,CAACV,MAAMA,GAAGW,IAAI,CAAC,QAAQX,IAAI;IACjF,IAAIC,OAAOA,IAAIO,MAAM,EAAEF,QAAQC,IAAI,CAAC,CAAC,KAAK,EAAEE,MAAMC,OAAO,CAACT,OAAOA,IAAIU,IAAI,CAAC,QAAQV,KAAK;IACvF,IAAIC,SAASI,QAAQC,IAAI,CAAC,CAAC,SAAS,EAAEL,SAAS;IAE/CI,QAAQC,IAAI,CAAC;IACb,MAAMK,WAAWP,gBAAgB,SAAS,cAAc;IACxDC,QAAQC,IAAI,CAAC,CAAC,cAAc,EAAEK,SAAS,eAAe,CAAC;IAEvD,OAAO,GAAGN,QAAQK,IAAI,CAAC,QAAQ,QAAQ,EAAER,MAAM;AACjD"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/mcp-z/mcp-gmail/src/email/composition/rfc822-builder.ts"],"sourcesContent":["export interface Rfc822Args {\n to?: string | string[];\n cc?: string | string[];\n bcc?: string | string[];\n subject?: string;\n body?: string;\n from?: string;\n /** Content type for the email body */\n contentType?: 'text' | 'html';\n}\n\nexport function buildRfc822FromArgs(args: Rfc822Args): string {\n const { to = [], cc = [], bcc = [], subject = '', body = '', from = '', contentType = 'text' } = args;\n\n const headers: string[] = [];\n\n if (from) headers.push(`From: ${from}`);\n if (to && to.length) headers.push(`To: ${Array.isArray(to) ? to.join(', ') : to}`);\n if (cc && cc.length) headers.push(`Cc: ${Array.isArray(cc) ? cc.join(', ') : cc}`);\n if (bcc && bcc.length) headers.push(`Bcc: ${Array.isArray(bcc) ? bcc.join(', ') : bcc}`);\n if (subject) headers.push(`Subject: ${subject}`);\n\n headers.push('MIME-Version: 1.0');\n const mimeType = contentType === 'html' ? 'text/html' : 'text/plain';\n headers.push(`Content-Type: ${mimeType}; charset=utf-8`);\n\n return `${headers.join('\\r\\n')}\\r\\n\\r\\n${body}`;\n}\n"],"names":["buildRfc822FromArgs","args","to","cc","bcc","subject","body","from","contentType","headers","push","length","Array","isArray","join","mimeType"],"mappings":"AAWA,OAAO,SAASA,oBAAoBC,IAAgB;IAClD,MAAM,EAAEC,KAAK,EAAE,EAAEC,KAAK,EAAE,EAAEC,MAAM,EAAE,EAAEC,UAAU,EAAE,EAAEC,OAAO,EAAE,EAAEC,OAAO,EAAE,EAAEC,cAAc,MAAM,EAAE,GAAGP;IAEjG,MAAMQ,UAAoB,EAAE;IAE5B,IAAIF,MAAME,QAAQC,IAAI,CAAC,CAAC,MAAM,EAAEH,MAAM;IACtC,IAAIL,MAAMA,GAAGS,MAAM,EAAEF,QAAQC,IAAI,CAAC,CAAC,IAAI,EAAEE,MAAMC,OAAO,CAACX,MAAMA,GAAGY,IAAI,CAAC,QAAQZ,IAAI;IACjF,IAAIC,MAAMA,GAAGQ,MAAM,EAAEF,QAAQC,IAAI,CAAC,CAAC,IAAI,EAAEE,MAAMC,OAAO,CAACV,MAAMA,GAAGW,IAAI,CAAC,QAAQX,IAAI;IACjF,IAAIC,OAAOA,IAAIO,MAAM,EAAEF,QAAQC,IAAI,CAAC,CAAC,KAAK,EAAEE,MAAMC,OAAO,CAACT,OAAOA,IAAIU,IAAI,CAAC,QAAQV,KAAK;IACvF,IAAIC,SAASI,QAAQC,IAAI,CAAC,CAAC,SAAS,EAAEL,SAAS;IAE/CI,QAAQC,IAAI,CAAC;IACb,MAAMK,WAAWP,gBAAgB,SAAS,cAAc;IACxDC,QAAQC,IAAI,CAAC,CAAC,cAAc,EAAEK,SAAS,eAAe,CAAC;IAEvD,OAAO,GAAGN,QAAQK,IAAI,CAAC,QAAQ,QAAQ,EAAER,MAAM;AACjD"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/Projects/mcp-z/mcp-gmail/src/email/messages/fetch-message.ts"],"sourcesContent":["import type { gmail_v1 } from 'googleapis';\nimport { toIsoUtc } from '../../lib/date-conversion.ts';\nimport { extractEmails, extractFrom } from '../parsing/headers-utils.ts';\n\nexport type FetchMode = 'metadata' | 'full';\n\nexport interface NormalizedAddress {\n address?: string | undefined;\n name?: string | undefined;\n}\nexport interface NormalizedMessage {\n id: string;\n threadId?: string | undefined;\n date?: string | undefined;\n subject?: string | undefined;\n from?: NormalizedAddress | undefined;\n to?: string[] | undefined;\n cc?: string[] | undefined;\n bcc?: string[] | undefined;\n snippet?: string | undefined;\n labels?: string[] | undefined;\n body?: string | undefined;\n}\n\nexport interface GmailDeps {\n /** googleapis Gmail client created via createGmailClient(provider). */\n gmail: gmail_v1.Gmail;\n}\n\nfunction extractHeader(headers: Array<{ name?: string; value?: string }> | undefined, key: string): string | undefined {\n const h = headers?.find((x) => (x.name ?? '').toLowerCase() === key.toLowerCase());\n return h?.value ?? undefined;\n}\n\nfunction base64UrlDecode(input: string): string {\n let s = String(input).replace(/-/g, '+').replace(/_/g, '/');\n while (s.length % 4 !== 0) s += '=';\n try {\n return Buffer.from(s, 'base64').toString('utf8');\n } catch {\n return '';\n }\n}\n\nfunction extractBody(payload: unknown): string | undefined {\n const find = (parts: unknown[] | undefined, mime: string): string | undefined => {\n for (const p of parts ?? []) {\n if (p && typeof p === 'object' && 'mimeType' in p && 'body' in p) {\n if (p.mimeType === mime && p.body && typeof p.body === 'object' && 'data' in p.body) {\n return base64UrlDecode(p.body.data as string);\n }\n }\n if (p && typeof p === 'object' && 'parts' in p) {\n const nested = find(p.parts as unknown[], mime);\n if (nested) return nested;\n }\n }\n return undefined;\n };\n if (payload && typeof payload === 'object' && 'parts' in payload) {\n return find(payload.parts as unknown[], 'text/plain') ?? find(payload.parts as unknown[], 'text/html')?.replace(/\\r\\n?/g, '\\n');\n }\n return undefined;\n}\n\nexport async function fetchMessage(deps: GmailDeps, id: string, mode: FetchMode): Promise<NormalizedMessage> {\n const { gmail } = deps;\n // When only metadata is requested, ask Gmail for a reduced payload with just the headers we care about.\n const metadataHeaders = ['Date', 'Subject', 'From', 'To', 'Cc', 'Bcc'];\n const format = mode === 'full' ? 'full' : 'metadata';\n const baseParams = { userId: 'me' as const, id, format };\n const resp = format === 'metadata' ? await gmail.users.messages.get({ ...baseParams, metadataHeaders }) : await gmail.users.messages.get(baseParams);\n const data = resp?.data as unknown;\n const headers = data && typeof data === 'object' && 'payload' in data && data.payload && typeof data.payload === 'object' && 'headers' in data.payload ? (data.payload.headers as Array<{ name?: string; value?: string }> | undefined) : undefined;\n const dateRaw = extractHeader(headers, 'Date');\n const fromRaw = extractHeader(headers, 'From');\n const toRaw = extractHeader(headers, 'To');\n const ccRaw = extractHeader(headers, 'Cc');\n const bccRaw = extractHeader(headers, 'Bcc');\n\n const fromObj = (fromRaw ? (extractFrom(fromRaw) as NormalizedAddress) : undefined) ?? undefined;\n const toArr = toRaw ? extractEmails(toRaw) : [];\n const ccArr = ccRaw ? extractEmails(ccRaw) : [];\n const bccArr = bccRaw ? extractEmails(bccRaw) : [];\n\n const getId = (): string => {\n if (data && typeof data === 'object' && 'id' in data) {\n return String(data.id ?? id);\n }\n return id;\n };\n\n const getThreadId = (): string | undefined => {\n if (data && typeof data === 'object' && 'threadId' in data && data.threadId) {\n return String(data.threadId);\n }\n return undefined;\n };\n\n const getSnippet = (): string | undefined => {\n if (data && typeof data === 'object' && 'snippet' in data && data.snippet) {\n return String(data.snippet);\n }\n return undefined;\n };\n\n const getLabelIds = (): string[] | undefined => {\n if (data && typeof data === 'object' && 'labelIds' in data && Array.isArray(data.labelIds)) {\n return data.labelIds.map(String);\n }\n return undefined;\n };\n\n const getPayload = (): unknown => {\n if (data && typeof data === 'object' && 'payload' in data) {\n return data.payload;\n }\n return undefined;\n };\n\n const msg: NormalizedMessage = {\n id: getId(),\n threadId: getThreadId(),\n date: dateRaw ? (toIsoUtc(dateRaw) ?? dateRaw) : undefined,\n subject: extractHeader(headers, 'Subject'),\n from: fromObj,\n to: toArr.length ? toArr : undefined,\n cc: ccArr.length ? ccArr : undefined,\n bcc: bccArr.length ? bccArr : undefined,\n snippet: getSnippet(),\n labels: getLabelIds(),\n };\n if (mode === 'full') {\n const body = extractBody(getPayload());\n if (body) msg.body = body;\n }\n return msg;\n}\n"],"names":["toIsoUtc","extractEmails","extractFrom","extractHeader","headers","key","h","find","x","name","toLowerCase","value","undefined","base64UrlDecode","input","s","String","replace","length","Buffer","from","toString","extractBody","payload","parts","mime","p","mimeType","body","data","nested","fetchMessage","deps","id","mode","fromRaw","gmail","metadataHeaders","format","baseParams","userId","resp","users","messages","get","dateRaw","toRaw","ccRaw","bccRaw","fromObj","toArr","ccArr","bccArr","getId","getThreadId","threadId","getSnippet","snippet","getLabelIds","Array","isArray","labelIds","map","getPayload","msg","date","subject","to","cc","bcc","labels"],"mappings":"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"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/mcp-z/mcp-gmail/src/email/messages/fetch-message.ts"],"sourcesContent":["import type { gmail_v1 } from 'googleapis';\nimport { toIsoUtc } from '../../lib/date-conversion.ts';\nimport { extractEmails, extractFrom } from '../parsing/headers-utils.ts';\n\nexport type FetchMode = 'metadata' | 'full';\n\nexport interface NormalizedAddress {\n address?: string | undefined;\n name?: string | undefined;\n}\nexport interface NormalizedMessage {\n id: string;\n threadId?: string | undefined;\n date?: string | undefined;\n subject?: string | undefined;\n from?: NormalizedAddress | undefined;\n to?: string[] | undefined;\n cc?: string[] | undefined;\n bcc?: string[] | undefined;\n snippet?: string | undefined;\n labels?: string[] | undefined;\n body?: string | undefined;\n}\n\nexport interface GmailDeps {\n /** googleapis Gmail client created via createGmailClient(provider). */\n gmail: gmail_v1.Gmail;\n}\n\nfunction extractHeader(headers: Array<{ name?: string; value?: string }> | undefined, key: string): string | undefined {\n const h = headers?.find((x) => (x.name ?? '').toLowerCase() === key.toLowerCase());\n return h?.value ?? undefined;\n}\n\nfunction base64UrlDecode(input: string): string {\n let s = String(input).replace(/-/g, '+').replace(/_/g, '/');\n while (s.length % 4 !== 0) s += '=';\n try {\n return Buffer.from(s, 'base64').toString('utf8');\n } catch {\n return '';\n }\n}\n\nfunction extractBody(payload: unknown): string | undefined {\n const find = (parts: unknown[] | undefined, mime: string): string | undefined => {\n for (const p of parts ?? []) {\n if (p && typeof p === 'object' && 'mimeType' in p && 'body' in p) {\n if (p.mimeType === mime && p.body && typeof p.body === 'object' && 'data' in p.body) {\n return base64UrlDecode(p.body.data as string);\n }\n }\n if (p && typeof p === 'object' && 'parts' in p) {\n const nested = find(p.parts as unknown[], mime);\n if (nested) return nested;\n }\n }\n return undefined;\n };\n if (payload && typeof payload === 'object' && 'parts' in payload) {\n return find(payload.parts as unknown[], 'text/plain') ?? find(payload.parts as unknown[], 'text/html')?.replace(/\\r\\n?/g, '\\n');\n }\n return undefined;\n}\n\nexport async function fetchMessage(deps: GmailDeps, id: string, mode: FetchMode): Promise<NormalizedMessage> {\n const { gmail } = deps;\n // When only metadata is requested, ask Gmail for a reduced payload with just the headers we care about.\n const metadataHeaders = ['Date', 'Subject', 'From', 'To', 'Cc', 'Bcc'];\n const format = mode === 'full' ? 'full' : 'metadata';\n const baseParams = { userId: 'me' as const, id, format };\n const resp = format === 'metadata' ? await gmail.users.messages.get({ ...baseParams, metadataHeaders }) : await gmail.users.messages.get(baseParams);\n const data = resp?.data as unknown;\n const headers = data && typeof data === 'object' && 'payload' in data && data.payload && typeof data.payload === 'object' && 'headers' in data.payload ? (data.payload.headers as Array<{ name?: string; value?: string }> | undefined) : undefined;\n const dateRaw = extractHeader(headers, 'Date');\n const fromRaw = extractHeader(headers, 'From');\n const toRaw = extractHeader(headers, 'To');\n const ccRaw = extractHeader(headers, 'Cc');\n const bccRaw = extractHeader(headers, 'Bcc');\n\n const fromObj = (fromRaw ? (extractFrom(fromRaw) as NormalizedAddress) : undefined) ?? undefined;\n const toArr = toRaw ? extractEmails(toRaw) : [];\n const ccArr = ccRaw ? extractEmails(ccRaw) : [];\n const bccArr = bccRaw ? extractEmails(bccRaw) : [];\n\n const getId = (): string => {\n if (data && typeof data === 'object' && 'id' in data) {\n return String(data.id ?? id);\n }\n return id;\n };\n\n const getThreadId = (): string | undefined => {\n if (data && typeof data === 'object' && 'threadId' in data && data.threadId) {\n return String(data.threadId);\n }\n return undefined;\n };\n\n const getSnippet = (): string | undefined => {\n if (data && typeof data === 'object' && 'snippet' in data && data.snippet) {\n return String(data.snippet);\n }\n return undefined;\n };\n\n const getLabelIds = (): string[] | undefined => {\n if (data && typeof data === 'object' && 'labelIds' in data && Array.isArray(data.labelIds)) {\n return data.labelIds.map(String);\n }\n return undefined;\n };\n\n const getPayload = (): unknown => {\n if (data && typeof data === 'object' && 'payload' in data) {\n return data.payload;\n }\n return undefined;\n };\n\n const msg: NormalizedMessage = {\n id: getId(),\n threadId: getThreadId(),\n date: dateRaw ? (toIsoUtc(dateRaw) ?? dateRaw) : undefined,\n subject: extractHeader(headers, 'Subject'),\n from: fromObj,\n to: toArr.length ? toArr : undefined,\n cc: ccArr.length ? ccArr : undefined,\n bcc: bccArr.length ? bccArr : undefined,\n snippet: getSnippet(),\n labels: getLabelIds(),\n };\n if (mode === 'full') {\n const body = extractBody(getPayload());\n if (body) msg.body = body;\n }\n return msg;\n}\n"],"names":["toIsoUtc","extractEmails","extractFrom","extractHeader","headers","key","h","find","x","name","toLowerCase","value","undefined","base64UrlDecode","input","s","String","replace","length","Buffer","from","toString","extractBody","payload","parts","mime","p","mimeType","body","data","nested","fetchMessage","deps","id","mode","fromRaw","gmail","metadataHeaders","format","baseParams","userId","resp","users","messages","get","dateRaw","toRaw","ccRaw","bccRaw","fromObj","toArr","ccArr","bccArr","getId","getThreadId","threadId","getSnippet","snippet","getLabelIds","Array","isArray","labelIds","map","getPayload","msg","date","subject","to","cc","bcc","labels"],"mappings":"AACA,SAASA,QAAQ,QAAQ,+BAA+B;AACxD,SAASC,aAAa,EAAEC,WAAW,QAAQ,8BAA8B;AA2BzE,SAASC,cAAcC,OAA6D,EAAEC,GAAW;;IAC/F,MAAMC,IAAIF,oBAAAA,8BAAAA,QAASG,IAAI,CAAC,CAACC;YAAOA;eAAD,EAACA,UAAAA,EAAEC,IAAI,cAAND,qBAAAA,UAAU,IAAIE,WAAW,OAAOL,IAAIK,WAAW;;IAC/E,eAAOJ,cAAAA,wBAAAA,EAAGK,KAAK,uCAAIC;AACrB;AAEA,SAASC,gBAAgBC,KAAa;IACpC,IAAIC,IAAIC,OAAOF,OAAOG,OAAO,CAAC,MAAM,KAAKA,OAAO,CAAC,MAAM;IACvD,MAAOF,EAAEG,MAAM,GAAG,MAAM,EAAGH,KAAK;IAChC,IAAI;QACF,OAAOI,OAAOC,IAAI,CAACL,GAAG,UAAUM,QAAQ,CAAC;IAC3C,EAAE,OAAM;QACN,OAAO;IACT;AACF;AAEA,SAASC,YAAYC,OAAgB;IACnC,MAAMhB,OAAO,CAACiB,OAA8BC;QAC1C,KAAK,MAAMC,KAAKF,kBAAAA,mBAAAA,QAAS,EAAE,CAAE;YAC3B,IAAIE,KAAK,OAAOA,MAAM,YAAY,cAAcA,KAAK,UAAUA,GAAG;gBAChE,IAAIA,EAAEC,QAAQ,KAAKF,QAAQC,EAAEE,IAAI,IAAI,OAAOF,EAAEE,IAAI,KAAK,YAAY,UAAUF,EAAEE,IAAI,EAAE;oBACnF,OAAOf,gBAAgBa,EAAEE,IAAI,CAACC,IAAI;gBACpC;YACF;YACA,IAAIH,KAAK,OAAOA,MAAM,YAAY,WAAWA,GAAG;gBAC9C,MAAMI,SAASvB,KAAKmB,EAAEF,KAAK,EAAeC;gBAC1C,IAAIK,QAAQ,OAAOA;YACrB;QACF;QACA,OAAOlB;IACT;IACA,IAAIW,WAAW,OAAOA,YAAY,YAAY,WAAWA,SAAS;YACzDhB;YAAkDA;QAAzD,QAAOA,QAAAA,KAAKgB,QAAQC,KAAK,EAAe,2BAAjCjB,mBAAAA,SAAkDA,SAAAA,KAAKgB,QAAQC,KAAK,EAAe,0BAAjCjB,6BAAAA,OAA+CU,OAAO,CAAC,UAAU;IAC5H;IACA,OAAOL;AACT;AAEA,OAAO,eAAemB,aAAaC,IAAe,EAAEC,EAAU,EAAEC,IAAe;QAe5DC,MA2CEnC;IAzDnB,MAAM,EAAEoC,KAAK,EAAE,GAAGJ;IAClB,wGAAwG;IACxG,MAAMK,kBAAkB;QAAC;QAAQ;QAAW;QAAQ;QAAM;QAAM;KAAM;IACtE,MAAMC,SAASJ,SAAS,SAAS,SAAS;IAC1C,MAAMK,aAAa;QAAEC,QAAQ;QAAeP;QAAIK;IAAO;IACvD,MAAMG,OAAOH,WAAW,aAAa,MAAMF,MAAMM,KAAK,CAACC,QAAQ,CAACC,GAAG,CAAC;QAAE,GAAGL,UAAU;QAAEF;IAAgB,KAAK,MAAMD,MAAMM,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACL;IACzI,MAAMV,OAAOY,iBAAAA,2BAAAA,KAAMZ,IAAI;IACvB,MAAMzB,UAAUyB,QAAQ,OAAOA,SAAS,YAAY,aAAaA,QAAQA,KAAKN,OAAO,IAAI,OAAOM,KAAKN,OAAO,KAAK,YAAY,aAAaM,KAAKN,OAAO,GAAIM,KAAKN,OAAO,CAACnB,OAAO,GAA4DQ;IAC1O,MAAMiC,UAAU1C,cAAcC,SAAS;IACvC,MAAM+B,UAAUhC,cAAcC,SAAS;IACvC,MAAM0C,QAAQ3C,cAAcC,SAAS;IACrC,MAAM2C,QAAQ5C,cAAcC,SAAS;IACrC,MAAM4C,SAAS7C,cAAcC,SAAS;IAEtC,MAAM6C,WAAWd,OAAAA,UAAWjC,YAAYiC,WAAiCvB,uBAAxDuB,kBAAAA,OAAsEvB;IACvF,MAAMsC,QAAQJ,QAAQ7C,cAAc6C,SAAS,EAAE;IAC/C,MAAMK,QAAQJ,QAAQ9C,cAAc8C,SAAS,EAAE;IAC/C,MAAMK,SAASJ,SAAS/C,cAAc+C,UAAU,EAAE;IAElD,MAAMK,QAAQ;QACZ,IAAIxB,QAAQ,OAAOA,SAAS,YAAY,QAAQA,MAAM;gBACtCA;YAAd,OAAOb,QAAOa,WAAAA,KAAKI,EAAE,cAAPJ,sBAAAA,WAAWI;QAC3B;QACA,OAAOA;IACT;IAEA,MAAMqB,cAAc;QAClB,IAAIzB,QAAQ,OAAOA,SAAS,YAAY,cAAcA,QAAQA,KAAK0B,QAAQ,EAAE;YAC3E,OAAOvC,OAAOa,KAAK0B,QAAQ;QAC7B;QACA,OAAO3C;IACT;IAEA,MAAM4C,aAAa;QACjB,IAAI3B,QAAQ,OAAOA,SAAS,YAAY,aAAaA,QAAQA,KAAK4B,OAAO,EAAE;YACzE,OAAOzC,OAAOa,KAAK4B,OAAO;QAC5B;QACA,OAAO7C;IACT;IAEA,MAAM8C,cAAc;QAClB,IAAI7B,QAAQ,OAAOA,SAAS,YAAY,cAAcA,QAAQ8B,MAAMC,OAAO,CAAC/B,KAAKgC,QAAQ,GAAG;YAC1F,OAAOhC,KAAKgC,QAAQ,CAACC,GAAG,CAAC9C;QAC3B;QACA,OAAOJ;IACT;IAEA,MAAMmD,aAAa;QACjB,IAAIlC,QAAQ,OAAOA,SAAS,YAAY,aAAaA,MAAM;YACzD,OAAOA,KAAKN,OAAO;QACrB;QACA,OAAOX;IACT;IAEA,MAAMoD,MAAyB;QAC7B/B,IAAIoB;QACJE,UAAUD;QACVW,MAAMpB,WAAW7C,YAAAA,SAAS6C,sBAAT7C,uBAAAA,YAAqB6C,UAAWjC;QACjDsD,SAAS/D,cAAcC,SAAS;QAChCgB,MAAM6B;QACNkB,IAAIjB,MAAMhC,MAAM,GAAGgC,QAAQtC;QAC3BwD,IAAIjB,MAAMjC,MAAM,GAAGiC,QAAQvC;QAC3ByD,KAAKjB,OAAOlC,MAAM,GAAGkC,SAASxC;QAC9B6C,SAASD;QACTc,QAAQZ;IACV;IACA,IAAIxB,SAAS,QAAQ;QACnB,MAAMN,OAAON,YAAYyC;QACzB,IAAInC,MAAMoC,IAAIpC,IAAI,GAAGA;IACvB;IACA,OAAOoC;AACT"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/Projects/mcp-z/mcp-gmail/src/email/messages/messages.ts"],"sourcesContent":["import { buildContentForItems } from '@mcp-z/email';\nimport type { gmail_v1 } from 'googleapis';\nimport { safeBase64Decode } from '../../lib/base64-encoding.ts';\nimport { toIsoUtc } from '../../lib/date-conversion.ts';\nimport { extractEmails, extractFrom } from '../parsing/headers-utils.ts';\n\nexport { buildContentForItems };\n\n// Convert a Gmail messages.get() response into canonical row shape used by sheets writer\n// [id, provider, threadId, to, from, cc, bcc, date, subject, labels, snippet, body]\nexport function toRowFromGmail(msg: gmail_v1.Schema$Message = {}, opts: { body?: boolean; addressFormat?: 'email' | string } = { body: false, addressFormat: 'email' }) {\n const headers = msg?.payload?.headers || [];\n const headerObj: Record<string, string> = Object.fromEntries((headers || []).map((h) => [String(h?.name ?? ''), String(h?.value ?? '')]));\n const id = msg?.id ?? '';\n const provider = 'gmail';\n const threadId = msg?.threadId ?? '';\n const to = extractEmails(headerObj.To ?? '').join(', ');\n const fromInfo = extractFrom(headerObj.From ?? '');\n const from = ((fromInfo && fromInfo.address) || headerObj.From) ?? '';\n const cc = extractEmails(headerObj.Cc ?? '').join(', ');\n const bcc = extractEmails(headerObj.Bcc ?? '').join(', ');\n const date = (toIsoUtc(headerObj.Date) || headerObj.Date) ?? '';\n const subject = headerObj.Subject ?? '';\n const labelIds = Array.isArray(msg?.labelIds) ? (msg.labelIds as string[]) : [];\n const labels = labelIds.join(';');\n const snippet = msg?.snippet ?? '';\n\n let bodyFull = '';\n if (opts?.body) {\n const parts = msg?.payload?.parts || [];\n const findText = (partsArr: unknown[]): string | null => {\n for (const p of partsArr || []) {\n if (p && typeof p === 'object' && 'mimeType' in p && 'body' in p) {\n if (p.mimeType === 'text/plain' && p.body && typeof p.body === 'object' && 'data' in p.body) {\n return p.body.data as string;\n }\n }\n if (p && typeof p === 'object' && 'parts' in p) {\n const nested = findText(p.parts as unknown[]);\n if (nested) return nested;\n }\n }\n return null;\n };\n const raw = findText(parts as unknown[]) || (msg?.payload?.body && typeof msg.payload.body === 'object' && 'data' in msg.payload.body ? msg.payload.body.data : null) || null;\n if (raw) {\n bodyFull = safeBase64Decode(raw as string);\n } else {\n const findHtml = (partsArr: unknown[]): string | null => {\n for (const p of partsArr || []) {\n if (p && typeof p === 'object' && 'mimeType' in p && 'body' in p) {\n if (p.mimeType === 'text/html' && p.body && typeof p.body === 'object' && 'data' in p.body) {\n return p.body.data as string;\n }\n }\n if (p && typeof p === 'object' && 'parts' in p) {\n const nested = findHtml(p.parts as unknown[]);\n if (nested) return nested;\n }\n }\n return null;\n };\n const htmlPart = findHtml(parts as unknown[]);\n if (htmlPart) {\n bodyFull = safeBase64Decode(htmlPart).replace(/\\r\\n?/g, '\\n');\n }\n }\n }\n return [id, provider, threadId, to, from, cc, bcc, date, subject, labels, snippet, bodyFull];\n}\n"],"names":["buildContentForItems","safeBase64Decode","toIsoUtc","extractEmails","extractFrom","toRowFromGmail","msg","opts","body","addressFormat","headerObj","headers","payload","Object","fromEntries","map","h","String","name","value","id","provider","threadId","to","To","join","fromInfo","From","from","address","cc","Cc","bcc","Bcc","date","Date","subject","Subject","labelIds","Array","isArray","labels","snippet","bodyFull","parts","findText","partsArr","p","mimeType","data","nested","raw","findHtml","htmlPart","replace"],"mappings":"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"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/mcp-z/mcp-gmail/src/email/messages/messages.ts"],"sourcesContent":["import { buildContentForItems } from '@mcp-z/email';\nimport type { gmail_v1 } from 'googleapis';\nimport { safeBase64Decode } from '../../lib/base64-encoding.ts';\nimport { toIsoUtc } from '../../lib/date-conversion.ts';\nimport { extractEmails, extractFrom } from '../parsing/headers-utils.ts';\n\nexport { buildContentForItems };\n\n// Convert a Gmail messages.get() response into canonical row shape used by sheets writer\n// [id, provider, threadId, to, from, cc, bcc, date, subject, labels, snippet, body]\nexport function toRowFromGmail(msg: gmail_v1.Schema$Message = {}, opts: { body?: boolean; addressFormat?: 'email' | string } = { body: false, addressFormat: 'email' }) {\n const headers = msg?.payload?.headers || [];\n const headerObj: Record<string, string> = Object.fromEntries((headers || []).map((h) => [String(h?.name ?? ''), String(h?.value ?? '')]));\n const id = msg?.id ?? '';\n const provider = 'gmail';\n const threadId = msg?.threadId ?? '';\n const to = extractEmails(headerObj.To ?? '').join(', ');\n const fromInfo = extractFrom(headerObj.From ?? '');\n const from = ((fromInfo && fromInfo.address) || headerObj.From) ?? '';\n const cc = extractEmails(headerObj.Cc ?? '').join(', ');\n const bcc = extractEmails(headerObj.Bcc ?? '').join(', ');\n const date = (toIsoUtc(headerObj.Date) || headerObj.Date) ?? '';\n const subject = headerObj.Subject ?? '';\n const labelIds = Array.isArray(msg?.labelIds) ? (msg.labelIds as string[]) : [];\n const labels = labelIds.join(';');\n const snippet = msg?.snippet ?? '';\n\n let bodyFull = '';\n if (opts?.body) {\n const parts = msg?.payload?.parts || [];\n const findText = (partsArr: unknown[]): string | null => {\n for (const p of partsArr || []) {\n if (p && typeof p === 'object' && 'mimeType' in p && 'body' in p) {\n if (p.mimeType === 'text/plain' && p.body && typeof p.body === 'object' && 'data' in p.body) {\n return p.body.data as string;\n }\n }\n if (p && typeof p === 'object' && 'parts' in p) {\n const nested = findText(p.parts as unknown[]);\n if (nested) return nested;\n }\n }\n return null;\n };\n const raw = findText(parts as unknown[]) || (msg?.payload?.body && typeof msg.payload.body === 'object' && 'data' in msg.payload.body ? msg.payload.body.data : null) || null;\n if (raw) {\n bodyFull = safeBase64Decode(raw as string);\n } else {\n const findHtml = (partsArr: unknown[]): string | null => {\n for (const p of partsArr || []) {\n if (p && typeof p === 'object' && 'mimeType' in p && 'body' in p) {\n if (p.mimeType === 'text/html' && p.body && typeof p.body === 'object' && 'data' in p.body) {\n return p.body.data as string;\n }\n }\n if (p && typeof p === 'object' && 'parts' in p) {\n const nested = findHtml(p.parts as unknown[]);\n if (nested) return nested;\n }\n }\n return null;\n };\n const htmlPart = findHtml(parts as unknown[]);\n if (htmlPart) {\n bodyFull = safeBase64Decode(htmlPart).replace(/\\r\\n?/g, '\\n');\n }\n }\n }\n return [id, provider, threadId, to, from, cc, bcc, date, subject, labels, snippet, bodyFull];\n}\n"],"names":["buildContentForItems","safeBase64Decode","toIsoUtc","extractEmails","extractFrom","toRowFromGmail","msg","opts","body","addressFormat","headerObj","headers","payload","Object","fromEntries","map","h","String","name","value","id","provider","threadId","to","To","join","fromInfo","From","from","address","cc","Cc","bcc","Bcc","date","Date","subject","Subject","labelIds","Array","isArray","labels","snippet","bodyFull","parts","findText","partsArr","p","mimeType","data","nested","raw","findHtml","htmlPart","replace"],"mappings":"AAAA,SAASA,oBAAoB,QAAQ,eAAe;AAEpD,SAASC,gBAAgB,QAAQ,+BAA+B;AAChE,SAASC,QAAQ,QAAQ,+BAA+B;AACxD,SAASC,aAAa,EAAEC,WAAW,QAAQ,8BAA8B;AAEzE,SAASJ,oBAAoB,GAAG;AAEhC,yFAAyF;AACzF,oFAAoF;AACpF,OAAO,SAASK,eAAeC,MAA+B,CAAC,CAAC,EAAEC,OAA6D;IAAEC,MAAM;IAAOC,eAAe;AAAQ,CAAC;qBAM3IC,eACIA,iBACf,OACWA,eACCA,gBACZR,OACEQ;QAXAJ;IAAhB,MAAMK,UAAUL,CAAAA,gBAAAA,2BAAAA,eAAAA,IAAKM,OAAO,cAAZN,mCAAAA,aAAcK,OAAO,KAAI,EAAE;IAC3C,MAAMD,YAAoCG,OAAOC,WAAW,CAAC,AAACH,CAAAA,WAAW,EAAE,AAAD,EAAGI,GAAG,CAAC,CAACC;;eAAM;YAACC,eAAOD,cAAAA,wBAAAA,EAAGE,IAAI,uCAAI;YAAKD,gBAAOD,cAAAA,wBAAAA,EAAGG,KAAK,yCAAI;SAAI;;IACvI,MAAMC,aAAKd,gBAAAA,0BAAAA,IAAKc,EAAE,uCAAI;IACtB,MAAMC,WAAW;IACjB,MAAMC,oBAAWhB,gBAAAA,0BAAAA,IAAKgB,QAAQ,yCAAI;IAClC,MAAMC,KAAKpB,eAAcO,gBAAAA,UAAUc,EAAE,cAAZd,2BAAAA,gBAAgB,IAAIe,IAAI,CAAC;IAClD,MAAMC,WAAWtB,aAAYM,kBAAAA,UAAUiB,IAAI,cAAdjB,6BAAAA,kBAAkB;IAC/C,MAAMkB,QAAQ,QAAA,AAACF,YAAYA,SAASG,OAAO,IAAKnB,UAAUiB,IAAI,cAAhD,mBAAA,QAAqD;IACnE,MAAMG,KAAK3B,eAAcO,gBAAAA,UAAUqB,EAAE,cAAZrB,2BAAAA,gBAAgB,IAAIe,IAAI,CAAC;IAClD,MAAMO,MAAM7B,eAAcO,iBAAAA,UAAUuB,GAAG,cAAbvB,4BAAAA,iBAAiB,IAAIe,IAAI,CAAC;IACpD,MAAMS,QAAQhC,QAAAA,SAASQ,UAAUyB,IAAI,KAAKzB,UAAUyB,IAAI,cAA1CjC,mBAAAA,QAA+C;IAC7D,MAAMkC,WAAU1B,qBAAAA,UAAU2B,OAAO,cAAjB3B,gCAAAA,qBAAqB;IACrC,MAAM4B,WAAWC,MAAMC,OAAO,CAAClC,gBAAAA,0BAAAA,IAAKgC,QAAQ,IAAKhC,IAAIgC,QAAQ,GAAgB,EAAE;IAC/E,MAAMG,SAASH,SAASb,IAAI,CAAC;IAC7B,MAAMiB,mBAAUpC,gBAAAA,0BAAAA,IAAKoC,OAAO,yCAAI;IAEhC,IAAIC,WAAW;IACf,IAAIpC,iBAAAA,2BAAAA,KAAMC,IAAI,EAAE;YACAF,eAe+BA;QAf7C,MAAMsC,QAAQtC,CAAAA,gBAAAA,2BAAAA,gBAAAA,IAAKM,OAAO,cAAZN,oCAAAA,cAAcsC,KAAK,KAAI,EAAE;QACvC,MAAMC,WAAW,CAACC;YAChB,KAAK,MAAMC,KAAKD,YAAY,EAAE,CAAE;gBAC9B,IAAIC,KAAK,OAAOA,MAAM,YAAY,cAAcA,KAAK,UAAUA,GAAG;oBAChE,IAAIA,EAAEC,QAAQ,KAAK,gBAAgBD,EAAEvC,IAAI,IAAI,OAAOuC,EAAEvC,IAAI,KAAK,YAAY,UAAUuC,EAAEvC,IAAI,EAAE;wBAC3F,OAAOuC,EAAEvC,IAAI,CAACyC,IAAI;oBACpB;gBACF;gBACA,IAAIF,KAAK,OAAOA,MAAM,YAAY,WAAWA,GAAG;oBAC9C,MAAMG,SAASL,SAASE,EAAEH,KAAK;oBAC/B,IAAIM,QAAQ,OAAOA;gBACrB;YACF;YACA,OAAO;QACT;QACA,MAAMC,MAAMN,SAASD,UAAwBtC,CAAAA,CAAAA,gBAAAA,2BAAAA,gBAAAA,IAAKM,OAAO,cAAZN,oCAAAA,cAAcE,IAAI,KAAI,OAAOF,IAAIM,OAAO,CAACJ,IAAI,KAAK,YAAY,UAAUF,IAAIM,OAAO,CAACJ,IAAI,GAAGF,IAAIM,OAAO,CAACJ,IAAI,CAACyC,IAAI,GAAG,IAAG,KAAM;QACzK,IAAIE,KAAK;YACPR,WAAW1C,iBAAiBkD;QAC9B,OAAO;YACL,MAAMC,WAAW,CAACN;gBAChB,KAAK,MAAMC,KAAKD,YAAY,EAAE,CAAE;oBAC9B,IAAIC,KAAK,OAAOA,MAAM,YAAY,cAAcA,KAAK,UAAUA,GAAG;wBAChE,IAAIA,EAAEC,QAAQ,KAAK,eAAeD,EAAEvC,IAAI,IAAI,OAAOuC,EAAEvC,IAAI,KAAK,YAAY,UAAUuC,EAAEvC,IAAI,EAAE;4BAC1F,OAAOuC,EAAEvC,IAAI,CAACyC,IAAI;wBACpB;oBACF;oBACA,IAAIF,KAAK,OAAOA,MAAM,YAAY,WAAWA,GAAG;wBAC9C,MAAMG,SAASE,SAASL,EAAEH,KAAK;wBAC/B,IAAIM,QAAQ,OAAOA;oBACrB;gBACF;gBACA,OAAO;YACT;YACA,MAAMG,WAAWD,SAASR;YAC1B,IAAIS,UAAU;gBACZV,WAAW1C,iBAAiBoD,UAAUC,OAAO,CAAC,UAAU;YAC1D;QACF;IACF;IACA,OAAO;QAAClC;QAAIC;QAAUC;QAAUC;QAAIK;QAAME;QAAIE;QAAKE;QAAME;QAASK;QAAQC;QAASC;KAAS;AAC9F"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/Projects/mcp-z/mcp-gmail/src/email/parsing/header-parsing.ts"],"sourcesContent":["export { extractEmails, extractFrom } from './headers-utils.ts';\n"],"names":["extractEmails","extractFrom"],"mappings":"AAAA,SAASA,aAAa,EAAEC,WAAW,QAAQ,qBAAqB"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/mcp-z/mcp-gmail/src/email/parsing/header-parsing.ts"],"sourcesContent":["export { extractEmails, extractFrom } from './headers-utils.ts';\n"],"names":["extractEmails","extractFrom"],"mappings":"AAAA,SAASA,aAAa,EAAEC,WAAW,QAAQ,qBAAqB"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/Projects/mcp-z/mcp-gmail/src/email/parsing/headers-utils.ts"],"sourcesContent":["export function extractEmails(header?: string): string[] {\n if (!header) return [];\n const matches = header.match(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}/gi) || [];\n return matches.map((s: string) => s.trim());\n}\n\nexport function extractFrom(header?: string): { address?: string; name?: string } | undefined {\n if (!header) return undefined;\n const m = header.match(/^(.*)<([^>]+)>/);\n if (m) {\n const rawName = m[1];\n const name = rawName ? rawName.replace(/\"/g, '').trim() : undefined;\n const addr = m[2] ? m[2].trim() : undefined;\n const result: { address?: string; name?: string } = {};\n if (addr) result.address = addr;\n if (name) result.name = name;\n return result;\n }\n const emails = extractEmails(header);\n if (emails[0]) return { address: emails[0] };\n return { address: header.trim() };\n}\n"],"names":["extractEmails","header","matches","match","map","s","trim","extractFrom","undefined","m","rawName","name","replace","addr","result","address","emails"],"mappings":"AAAA,OAAO,SAASA,cAAcC,MAAe;IAC3C,IAAI,CAACA,QAAQ,OAAO,EAAE;IACtB,MAAMC,UAAUD,OAAOE,KAAK,CAAC,8CAA8C,EAAE;IAC7E,OAAOD,QAAQE,GAAG,CAAC,CAACC,IAAcA,EAAEC,IAAI;AAC1C;AAEA,OAAO,SAASC,YAAYN,MAAe;IACzC,IAAI,CAACA,QAAQ,OAAOO;IACpB,MAAMC,IAAIR,OAAOE,KAAK,CAAC;IACvB,IAAIM,GAAG;QACL,MAAMC,UAAUD,CAAC,CAAC,EAAE;QACpB,MAAME,OAAOD,UAAUA,QAAQE,OAAO,CAAC,MAAM,IAAIN,IAAI,KAAKE;QAC1D,MAAMK,OAAOJ,CAAC,CAAC,EAAE,GAAGA,CAAC,CAAC,EAAE,CAACH,IAAI,KAAKE;QAClC,MAAMM,SAA8C,CAAC;QACrD,IAAID,MAAMC,OAAOC,OAAO,GAAGF;QAC3B,IAAIF,MAAMG,OAAOH,IAAI,GAAGA;QACxB,OAAOG;IACT;IACA,MAAME,SAAShB,cAAcC;IAC7B,IAAIe,MAAM,CAAC,EAAE,EAAE,OAAO;QAAED,SAASC,MAAM,CAAC,EAAE;IAAC;IAC3C,OAAO;QAAED,SAASd,OAAOK,IAAI;IAAG;AAClC"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/mcp-z/mcp-gmail/src/email/parsing/headers-utils.ts"],"sourcesContent":["export function extractEmails(header?: string): string[] {\n if (!header) return [];\n const matches = header.match(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}/gi) || [];\n return matches.map((s: string) => s.trim());\n}\n\nexport function extractFrom(header?: string): { address?: string; name?: string } | undefined {\n if (!header) return undefined;\n const m = header.match(/^(.*)<([^>]+)>/);\n if (m) {\n const rawName = m[1];\n const name = rawName ? rawName.replace(/\"/g, '').trim() : undefined;\n const addr = m[2] ? m[2].trim() : undefined;\n const result: { address?: string; name?: string } = {};\n if (addr) result.address = addr;\n if (name) result.name = name;\n return result;\n }\n const emails = extractEmails(header);\n if (emails[0]) return { address: emails[0] };\n return { address: header.trim() };\n}\n"],"names":["extractEmails","header","matches","match","map","s","trim","extractFrom","undefined","m","rawName","name","replace","addr","result","address","emails"],"mappings":"AAAA,OAAO,SAASA,cAAcC,MAAe;IAC3C,IAAI,CAACA,QAAQ,OAAO,EAAE;IACtB,MAAMC,UAAUD,OAAOE,KAAK,CAAC,8CAA8C,EAAE;IAC7E,OAAOD,QAAQE,GAAG,CAAC,CAACC,IAAcA,EAAEC,IAAI;AAC1C;AAEA,OAAO,SAASC,YAAYN,MAAe;IACzC,IAAI,CAACA,QAAQ,OAAOO;IACpB,MAAMC,IAAIR,OAAOE,KAAK,CAAC;IACvB,IAAIM,GAAG;QACL,MAAMC,UAAUD,CAAC,CAAC,EAAE;QACpB,MAAME,OAAOD,UAAUA,QAAQE,OAAO,CAAC,MAAM,IAAIN,IAAI,KAAKE;QAC1D,MAAMK,OAAOJ,CAAC,CAAC,EAAE,GAAGA,CAAC,CAAC,EAAE,CAACH,IAAI,KAAKE;QAClC,MAAMM,SAA8C,CAAC;QACrD,IAAID,MAAMC,OAAOC,OAAO,GAAGF;QAC3B,IAAIF,MAAMG,OAAOH,IAAI,GAAGA;QACxB,OAAOG;IACT;IACA,MAAME,SAAShB,cAAcC;IAC7B,IAAIe,MAAM,CAAC,EAAE,EAAE,OAAO;QAAED,SAASC,MAAM,CAAC,EAAE;IAAC;IAC3C,OAAO;QAAED,SAASd,OAAOK,IAAI;IAAG;AAClC"}