@mcp-z/mcp-gmail 1.0.0 → 1.0.1

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 (122) hide show
  1. package/README.md +33 -3
  2. package/bin/server.js +1 -1
  3. package/dist/cjs/constants.js.map +1 -1
  4. package/dist/cjs/email/composition/rfc822-builder.js.map +1 -1
  5. package/dist/cjs/email/messages/fetch-message.js +7 -7
  6. package/dist/cjs/email/messages/fetch-message.js.map +1 -1
  7. package/dist/cjs/email/messages/messages.js +10 -10
  8. package/dist/cjs/email/messages/messages.js.map +1 -1
  9. package/dist/cjs/email/parsing/header-parsing.js +3 -3
  10. package/dist/cjs/email/parsing/header-parsing.js.map +1 -1
  11. package/dist/cjs/email/parsing/headers-utils.js.map +1 -1
  12. package/dist/cjs/email/parsing/html-processing.js.map +1 -1
  13. package/dist/cjs/email/parsing/message-extraction.js +5 -5
  14. package/dist/cjs/email/parsing/message-extraction.js.map +1 -1
  15. package/dist/cjs/email/querying/execute-query.js +2 -2
  16. package/dist/cjs/email/querying/execute-query.js.map +1 -1
  17. package/dist/cjs/email/querying/pagination.js.map +1 -1
  18. package/dist/cjs/email/querying/query-builder.js.map +1 -1
  19. package/dist/cjs/email/querying/search-execution.js +4 -4
  20. package/dist/cjs/email/querying/search-execution.js.map +1 -1
  21. package/dist/cjs/index.js +13 -13
  22. package/dist/cjs/index.js.map +1 -1
  23. package/dist/cjs/labels/gmail-labels.js.map +1 -1
  24. package/dist/cjs/lib/base64-encoding.js.map +1 -1
  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.map +1 -1
  28. package/dist/cjs/mcp/index.js +6 -6
  29. package/dist/cjs/mcp/index.js.map +1 -1
  30. package/dist/cjs/mcp/prompts/draft-email.js.map +1 -1
  31. package/dist/cjs/mcp/prompts/index.js +4 -4
  32. package/dist/cjs/mcp/prompts/index.js.map +1 -1
  33. package/dist/cjs/mcp/prompts/query-syntax.js.map +1 -1
  34. package/dist/cjs/mcp/resources/email.js +5 -5
  35. package/dist/cjs/mcp/resources/email.js.map +1 -1
  36. package/dist/cjs/mcp/resources/index.js +2 -2
  37. package/dist/cjs/mcp/resources/index.js.map +1 -1
  38. package/dist/cjs/mcp/tools/categories-list.js.map +1 -1
  39. package/dist/cjs/mcp/tools/index.js +22 -22
  40. package/dist/cjs/mcp/tools/index.js.map +1 -1
  41. package/dist/cjs/mcp/tools/label-add.js +2 -2
  42. package/dist/cjs/mcp/tools/label-add.js.map +1 -1
  43. package/dist/cjs/mcp/tools/label-delete.js.map +1 -1
  44. package/dist/cjs/mcp/tools/labels-list.js.map +1 -1
  45. package/dist/cjs/mcp/tools/message-get.js +8 -8
  46. package/dist/cjs/mcp/tools/message-get.js.map +1 -1
  47. package/dist/cjs/mcp/tools/message-mark-read.js.map +1 -1
  48. package/dist/cjs/mcp/tools/message-move-to-trash.js.map +1 -1
  49. package/dist/cjs/mcp/tools/message-respond.js +4 -4
  50. package/dist/cjs/mcp/tools/message-respond.js.map +1 -1
  51. package/dist/cjs/mcp/tools/message-search.js +6 -6
  52. package/dist/cjs/mcp/tools/message-search.js.map +1 -1
  53. package/dist/cjs/mcp/tools/message-send.js +4 -4
  54. package/dist/cjs/mcp/tools/message-send.js.map +1 -1
  55. package/dist/cjs/mcp/tools/messages-export-csv.js +6 -6
  56. package/dist/cjs/mcp/tools/messages-export-csv.js.map +1 -1
  57. package/dist/cjs/schemas/gmail-query-schema.js.map +1 -1
  58. package/dist/cjs/schemas/index.js.map +1 -1
  59. package/dist/cjs/setup/config.js +11 -1
  60. package/dist/cjs/setup/config.js.map +1 -1
  61. package/dist/cjs/setup/http.js +6 -2
  62. package/dist/cjs/setup/http.js.map +1 -1
  63. package/dist/cjs/setup/index.js +9 -9
  64. package/dist/cjs/setup/index.js.map +1 -1
  65. package/dist/cjs/setup/oauth-google.d.cts +3 -2
  66. package/dist/cjs/setup/oauth-google.d.ts +3 -2
  67. package/dist/cjs/setup/oauth-google.js +15 -12
  68. package/dist/cjs/setup/oauth-google.js.map +1 -1
  69. package/dist/cjs/setup/runtime.js +9 -9
  70. package/dist/cjs/setup/runtime.js.map +1 -1
  71. package/dist/cjs/setup/stdio.js +2 -2
  72. package/dist/cjs/setup/stdio.js.map +1 -1
  73. package/dist/esm/constants.js.map +1 -1
  74. package/dist/esm/email/composition/rfc822-builder.js.map +1 -1
  75. package/dist/esm/email/messages/fetch-message.js.map +1 -1
  76. package/dist/esm/email/messages/messages.js.map +1 -1
  77. package/dist/esm/email/parsing/header-parsing.js.map +1 -1
  78. package/dist/esm/email/parsing/headers-utils.js.map +1 -1
  79. package/dist/esm/email/parsing/html-processing.js.map +1 -1
  80. package/dist/esm/email/parsing/message-extraction.js.map +1 -1
  81. package/dist/esm/email/querying/execute-query.js.map +1 -1
  82. package/dist/esm/email/querying/pagination.js.map +1 -1
  83. package/dist/esm/email/querying/query-builder.js.map +1 -1
  84. package/dist/esm/email/querying/search-execution.js.map +1 -1
  85. package/dist/esm/index.js.map +1 -1
  86. package/dist/esm/labels/gmail-labels.js.map +1 -1
  87. package/dist/esm/lib/base64-encoding.js.map +1 -1
  88. package/dist/esm/lib/create-store.js.map +1 -1
  89. package/dist/esm/lib/date-conversion.js.map +1 -1
  90. package/dist/esm/lib/messages-to-row.js.map +1 -1
  91. package/dist/esm/mcp/index.js.map +1 -1
  92. package/dist/esm/mcp/prompts/draft-email.js.map +1 -1
  93. package/dist/esm/mcp/prompts/index.js.map +1 -1
  94. package/dist/esm/mcp/prompts/query-syntax.js.map +1 -1
  95. package/dist/esm/mcp/resources/email.js.map +1 -1
  96. package/dist/esm/mcp/resources/index.js.map +1 -1
  97. package/dist/esm/mcp/tools/categories-list.js.map +1 -1
  98. package/dist/esm/mcp/tools/index.js.map +1 -1
  99. package/dist/esm/mcp/tools/label-add.js.map +1 -1
  100. package/dist/esm/mcp/tools/label-delete.js.map +1 -1
  101. package/dist/esm/mcp/tools/labels-list.js.map +1 -1
  102. package/dist/esm/mcp/tools/message-get.js.map +1 -1
  103. package/dist/esm/mcp/tools/message-mark-read.js.map +1 -1
  104. package/dist/esm/mcp/tools/message-move-to-trash.js.map +1 -1
  105. package/dist/esm/mcp/tools/message-respond.js.map +1 -1
  106. package/dist/esm/mcp/tools/message-search.js.map +1 -1
  107. package/dist/esm/mcp/tools/message-send.js.map +1 -1
  108. package/dist/esm/mcp/tools/messages-export-csv.js.map +1 -1
  109. package/dist/esm/schemas/gmail-query-schema.js.map +1 -1
  110. package/dist/esm/schemas/index.js.map +1 -1
  111. package/dist/esm/setup/config.js +12 -2
  112. package/dist/esm/setup/config.js.map +1 -1
  113. package/dist/esm/setup/http.js +4 -0
  114. package/dist/esm/setup/http.js.map +1 -1
  115. package/dist/esm/setup/index.js.map +1 -1
  116. package/dist/esm/setup/oauth-google.d.ts +3 -2
  117. package/dist/esm/setup/oauth-google.js +8 -11
  118. package/dist/esm/setup/oauth-google.js.map +1 -1
  119. package/dist/esm/setup/runtime.js.map +1 -1
  120. package/dist/esm/setup/stdio.js.map +1 -1
  121. package/dist/esm/types.js.map +1 -1
  122. package/package.json +1 -1
@@ -31,6 +31,10 @@ export async function createHTTPServer(config, overrides) {
31
31
  app.use(express.json({
32
32
  limit: '10mb'
33
33
  }));
34
+ if (runtime.deps.oauthAdapters.loopbackRouter) {
35
+ app.use('/', runtime.deps.oauthAdapters.loopbackRouter);
36
+ logger.info('Mounted loopback OAuth callback router');
37
+ }
34
38
  const fileRouter = createFileServingRouter({
35
39
  storageDir: config.storageDir
36
40
  }, {
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/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.js';\nimport { createDefaultRuntime } from './runtime.js';\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 prompts = [...composed.prompts, ...runtime.deps.oauthAdapters.accountPrompts];\n\n const mcpServer = new McpServer({ name: config.name, version: config.version });\n registerTools(mcpServer, tools);\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 const fileRouter = createFileServingRouter({ storageDir: config.storageDir }, { contentType: 'text/csv', contentDisposition: 'attachment' });\n app.use('/files', fileRouter);\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":["composeMiddleware","connectHttp","createFileServingRouter","registerPrompts","registerResources","registerTools","McpServer","cors","express","createDefaultRuntime","createHTTPServer","config","overrides","runtime","modules","createDomainModules","layers","middlewareFactories","map","factory","deps","composed","logger","port","transport","Error","tools","oauthAdapters","accountTools","prompts","accountPrompts","mcpServer","name","version","resources","app","use","json","limit","fileRouter","storageDir","contentType","contentDisposition","dcrRouter","info","close","httpServer"],"mappings":"AAAA,SAASA,iBAAiB,EAAEC,WAAW,EAAEC,uBAAuB,EAAEC,eAAe,EAAEC,iBAAiB,EAAEC,aAAa,QAAQ,gBAAgB;AAC3I,SAASC,SAAS,QAAQ,0CAA0C;AACpE,OAAOC,UAAU,OAAO;AACxB,OAAOC,aAAa,UAAU;AAE9B,SAASC,oBAAoB,QAAQ,eAAe;AAEpD,OAAO,eAAeC,iBAAiBC,MAAoB,EAAEC,SAA4B;IACvF,MAAMC,UAAU,MAAMJ,qBAAqBE,QAAQC;IACnD,MAAME,UAAUD,QAAQE,mBAAmB;IAC3C,MAAMC,SAASH,QAAQI,mBAAmB,CAACC,GAAG,CAAC,CAACC,UAAYA,QAAQN,QAAQO,IAAI;IAChF,MAAMC,WAAWrB,kBAAkBc,SAASE;IAC5C,MAAMM,SAAST,QAAQO,IAAI,CAACE,MAAM;IAClC,MAAMC,OAAOZ,OAAOa,SAAS,CAACD,IAAI;IAClC,IAAI,CAACA,MAAM,MAAM,IAAIE,MAAM;IAE3B,MAAMC,QAAQ;WAAIL,SAASK,KAAK;WAAKb,QAAQO,IAAI,CAACO,aAAa,CAACC,YAAY;KAAC;IAC7E,MAAMC,UAAU;WAAIR,SAASQ,OAAO;WAAKhB,QAAQO,IAAI,CAACO,aAAa,CAACG,cAAc;KAAC;IAEnF,MAAMC,YAAY,IAAIzB,UAAU;QAAE0B,MAAMrB,OAAOqB,IAAI;QAAEC,SAAStB,OAAOsB,OAAO;IAAC;IAC7E5B,cAAc0B,WAAWL;IACzBtB,kBAAkB2B,WAAWV,SAASa,SAAS;IAC/C/B,gBAAgB4B,WAAWF;IAE3B,MAAMM,MAAM3B;IACZ2B,IAAIC,GAAG,CAAC7B;IACR4B,IAAIC,GAAG,CAAC5B,QAAQ6B,IAAI,CAAC;QAAEC,OAAO;IAAO;IAErC,MAAMC,aAAarC,wBAAwB;QAAEsC,YAAY7B,OAAO6B,UAAU;IAAC,GAAG;QAAEC,aAAa;QAAYC,oBAAoB;IAAa;IAC1IP,IAAIC,GAAG,CAAC,UAAUG;IAElB,IAAI1B,QAAQO,IAAI,CAACO,aAAa,CAACgB,SAAS,EAAE;QACxCR,IAAIC,GAAG,CAAC,KAAKvB,QAAQO,IAAI,CAACO,aAAa,CAACgB,SAAS;QACjDrB,OAAOsB,IAAI,CAAC;IACd;IAEAtB,OAAOsB,IAAI,CAAC,CAAC,SAAS,EAAEjC,OAAOqB,IAAI,CAAC,kBAAkB,CAAC;IACvD,MAAM,EAAEa,KAAK,EAAEC,UAAU,EAAE,GAAG,MAAM7C,YAAY8B,WAAW;QAAET;QAAQa;QAAKZ;IAAK;IAC/ED,OAAOsB,IAAI,CAAC;IAEZ,OAAO;QACLE;QACAf;QACAT;QACAuB,OAAO;YACL,MAAMA;YACN,MAAMhC,QAAQgC,KAAK;QACrB;IACF;AACF"}
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 prompts = [...composed.prompts, ...runtime.deps.oauthAdapters.accountPrompts];\n\n const mcpServer = new McpServer({ name: config.name, version: config.version });\n registerTools(mcpServer, tools);\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 const fileRouter = createFileServingRouter({ storageDir: config.storageDir }, { contentType: 'text/csv', contentDisposition: 'attachment' });\n app.use('/files', fileRouter);\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":["composeMiddleware","connectHttp","createFileServingRouter","registerPrompts","registerResources","registerTools","McpServer","cors","express","createDefaultRuntime","createHTTPServer","config","overrides","runtime","modules","createDomainModules","layers","middlewareFactories","map","factory","deps","composed","logger","port","transport","Error","tools","oauthAdapters","accountTools","prompts","accountPrompts","mcpServer","name","version","resources","app","use","json","limit","loopbackRouter","info","fileRouter","storageDir","contentType","contentDisposition","dcrRouter","close","httpServer"],"mappings":"AAAA,SAASA,iBAAiB,EAAEC,WAAW,EAAEC,uBAAuB,EAAEC,eAAe,EAAEC,iBAAiB,EAAEC,aAAa,QAAQ,gBAAgB;AAC3I,SAASC,SAAS,QAAQ,0CAA0C;AACpE,OAAOC,UAAU,OAAO;AACxB,OAAOC,aAAa,UAAU;AAE9B,SAASC,oBAAoB,QAAQ,eAAe;AAEpD,OAAO,eAAeC,iBAAiBC,MAAoB,EAAEC,SAA4B;IACvF,MAAMC,UAAU,MAAMJ,qBAAqBE,QAAQC;IACnD,MAAME,UAAUD,QAAQE,mBAAmB;IAC3C,MAAMC,SAASH,QAAQI,mBAAmB,CAACC,GAAG,CAAC,CAACC,UAAYA,QAAQN,QAAQO,IAAI;IAChF,MAAMC,WAAWrB,kBAAkBc,SAASE;IAC5C,MAAMM,SAAST,QAAQO,IAAI,CAACE,MAAM;IAClC,MAAMC,OAAOZ,OAAOa,SAAS,CAACD,IAAI;IAClC,IAAI,CAACA,MAAM,MAAM,IAAIE,MAAM;IAE3B,MAAMC,QAAQ;WAAIL,SAASK,KAAK;WAAKb,QAAQO,IAAI,CAACO,aAAa,CAACC,YAAY;KAAC;IAC7E,MAAMC,UAAU;WAAIR,SAASQ,OAAO;WAAKhB,QAAQO,IAAI,CAACO,aAAa,CAACG,cAAc;KAAC;IAEnF,MAAMC,YAAY,IAAIzB,UAAU;QAAE0B,MAAMrB,OAAOqB,IAAI;QAAEC,SAAStB,OAAOsB,OAAO;IAAC;IAC7E5B,cAAc0B,WAAWL;IACzBtB,kBAAkB2B,WAAWV,SAASa,SAAS;IAC/C/B,gBAAgB4B,WAAWF;IAE3B,MAAMM,MAAM3B;IACZ2B,IAAIC,GAAG,CAAC7B;IACR4B,IAAIC,GAAG,CAAC5B,QAAQ6B,IAAI,CAAC;QAAEC,OAAO;IAAO;IAErC,IAAIzB,QAAQO,IAAI,CAACO,aAAa,CAACY,cAAc,EAAE;QAC7CJ,IAAIC,GAAG,CAAC,KAAKvB,QAAQO,IAAI,CAACO,aAAa,CAACY,cAAc;QACtDjB,OAAOkB,IAAI,CAAC;IACd;IAEA,MAAMC,aAAavC,wBAAwB;QAAEwC,YAAY/B,OAAO+B,UAAU;IAAC,GAAG;QAAEC,aAAa;QAAYC,oBAAoB;IAAa;IAC1IT,IAAIC,GAAG,CAAC,UAAUK;IAElB,IAAI5B,QAAQO,IAAI,CAACO,aAAa,CAACkB,SAAS,EAAE;QACxCV,IAAIC,GAAG,CAAC,KAAKvB,QAAQO,IAAI,CAACO,aAAa,CAACkB,SAAS;QACjDvB,OAAOkB,IAAI,CAAC;IACd;IAEAlB,OAAOkB,IAAI,CAAC,CAAC,SAAS,EAAE7B,OAAOqB,IAAI,CAAC,kBAAkB,CAAC;IACvD,MAAM,EAAEc,KAAK,EAAEC,UAAU,EAAE,GAAG,MAAM9C,YAAY8B,WAAW;QAAET;QAAQa;QAAKZ;IAAK;IAC/ED,OAAOkB,IAAI,CAAC;IAEZ,OAAO;QACLO;QACAhB;QACAT;QACAwB,OAAO;YACL,MAAMA;YACN,MAAMjC,QAAQiC,KAAK;QACrB;IACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-gmail/src/setup/index.ts"],"sourcesContent":["export { createConfig, parseConfig } from './config.js';\nexport { createHTTPServer } from './http.js';\nexport { createOAuthAdapters } from './oauth-google.js';\nexport * from './runtime.js';\nexport { createStdioServer } from './stdio.js';\n"],"names":["createConfig","parseConfig","createHTTPServer","createOAuthAdapters","createStdioServer"],"mappings":"AAAA,SAASA,YAAY,EAAEC,WAAW,QAAQ,cAAc;AACxD,SAASC,gBAAgB,QAAQ,YAAY;AAC7C,SAASC,mBAAmB,QAAQ,oBAAoB;AACxD,cAAc,eAAe;AAC7B,SAASC,iBAAiB,QAAQ,aAAa"}
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 { createOAuthAdapters } from './oauth-google.ts';\nexport * from './runtime.ts';\nexport { createStdioServer } from './stdio.ts';\n"],"names":["createConfig","parseConfig","createHTTPServer","createOAuthAdapters","createStdioServer"],"mappings":"AAAA,SAASA,YAAY,EAAEC,WAAW,QAAQ,cAAc;AACxD,SAASC,gBAAgB,QAAQ,YAAY;AAC7C,SAASC,mBAAmB,QAAQ,oBAAoB;AACxD,cAAc,eAAe;AAC7B,SAASC,iBAAiB,QAAQ,aAAa"}
@@ -1,4 +1,4 @@
1
- import { type AuthEmailProvider } from '@mcp-z/oauth';
1
+ import { type AccountAuthProvider } from '@mcp-z/oauth';
2
2
  import type { CachedToken } from '@mcp-z/oauth-google';
3
3
  import { DcrOAuthProvider, LoopbackOAuthProvider, ServiceAccountProvider } from '@mcp-z/oauth-google';
4
4
  import type { Logger, PromptModule, ToolModule } from '@mcp-z/server';
@@ -40,10 +40,11 @@ export interface AuthMiddleware {
40
40
  export interface OAuthAdapters {
41
41
  primary: LoopbackOAuthProvider | ServiceAccountProvider | DcrOAuthProvider;
42
42
  middleware: AuthMiddleware;
43
- authAdapter: AuthEmailProvider;
43
+ authAdapter: AccountAuthProvider;
44
44
  accountTools: ToolModule[];
45
45
  accountPrompts: PromptModule[];
46
46
  dcrRouter?: Router;
47
+ loopbackRouter?: Router;
47
48
  }
48
49
  /**
49
50
  * Create Gmail OAuth adapters and helpers.
@@ -1,5 +1,5 @@
1
1
  import { AccountServer } from '@mcp-z/oauth';
2
- import { createDcrRouter, DcrOAuthProvider, LoopbackOAuthProvider, ServiceAccountProvider } from '@mcp-z/oauth-google';
2
+ import { createDcrRouter, createLoopbackCallbackRouter, DcrOAuthProvider, LoopbackOAuthProvider, ServiceAccountProvider } from '@mcp-z/oauth-google';
3
3
  import { GOOGLE_SCOPE } from '../constants.js';
4
4
  /**
5
5
  * Create Gmail OAuth adapters and helpers.
@@ -57,6 +57,9 @@ import { GOOGLE_SCOPE } from '../constants.js';
57
57
  });
58
58
  const middleware = primary.authMiddleware();
59
59
  const authAdapter = {
60
+ getAccessToken: ()=>{
61
+ throw new Error('DCR mode does not support getAccessToken - tokens are provided via bearer auth');
62
+ },
60
63
  getUserEmail: ()=>{
61
64
  throw new Error('DCR mode does not support getUserEmail - tokens are provided via bearer auth');
62
65
  }
@@ -99,15 +102,7 @@ import { GOOGLE_SCOPE } from '../constants.js';
99
102
  }
100
103
  });
101
104
  }
102
- const authAdapter = {
103
- getUserEmail: (accountId)=>primary.getUserEmail(accountId),
104
- ...'authenticateNewAccount' in primary && primary.authenticateNewAccount ? {
105
- authenticateNewAccount: ()=>{
106
- var _primary_authenticateNewAccount;
107
- return (_primary_authenticateNewAccount = primary.authenticateNewAccount) === null || _primary_authenticateNewAccount === void 0 ? void 0 : _primary_authenticateNewAccount.call(primary);
108
- }
109
- } : {}
110
- };
105
+ const authAdapter = primary;
111
106
  let middleware;
112
107
  let accountTools;
113
108
  let accountPrompts;
@@ -132,11 +127,13 @@ import { GOOGLE_SCOPE } from '../constants.js';
132
127
  service: oauthStaticConfig.service
133
128
  });
134
129
  }
130
+ const loopbackRouter = primary instanceof LoopbackOAuthProvider && oauthStaticConfig.redirectUri ? createLoopbackCallbackRouter(primary) : undefined;
135
131
  return {
136
132
  primary,
137
133
  middleware: middleware,
138
134
  authAdapter,
139
135
  accountTools,
140
- accountPrompts
136
+ accountPrompts,
137
+ loopbackRouter
141
138
  };
142
139
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-gmail/src/setup/oauth-google.ts"],"sourcesContent":["import { AccountServer, type AuthEmailProvider } from '@mcp-z/oauth';\nimport type { CachedToken } from '@mcp-z/oauth-google';\nimport { createDcrRouter, 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.js';\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: AuthEmailProvider;\n accountTools: ToolModule[];\n accountPrompts: PromptModule[];\n dcrRouter?: 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: AuthEmailProvider = {\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: AuthEmailProvider = {\n getUserEmail: (accountId) => primary.getUserEmail(accountId),\n ...('authenticateNewAccount' in primary && primary.authenticateNewAccount\n ? {\n authenticateNewAccount: () => primary.authenticateNewAccount?.(),\n }\n : {}),\n };\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 return {\n primary,\n middleware: middleware as unknown as AuthMiddleware,\n authAdapter,\n accountTools,\n accountPrompts,\n };\n}\n"],"names":["AccountServer","createDcrRouter","DcrOAuthProvider","LoopbackOAuthProvider","ServiceAccountProvider","GOOGLE_SCOPE","createOAuthAdapters","config","deps","baseUrl","logger","tokenStore","dcrStore","oauthStaticConfig","service","name","clientId","clientSecret","scope","auth","headless","redirectUri","transport","type","undefined","serviceAccountKeyFile","primary","debug","Error","verifyEndpoint","dcrRouter","store","issuerUrl","scopesSupported","split","clientConfig","middleware","authMiddleware","authAdapter","getUserEmail","accountTools","accountPrompts","keyFilePath","scopes","accountId","authenticateNewAccount","result","createLoopback","tools","prompts"],"mappings":"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"}
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":["AccountServer","createDcrRouter","createLoopbackCallbackRouter","DcrOAuthProvider","LoopbackOAuthProvider","ServiceAccountProvider","GOOGLE_SCOPE","createOAuthAdapters","config","deps","baseUrl","logger","tokenStore","dcrStore","oauthStaticConfig","service","name","clientId","clientSecret","scope","auth","headless","redirectUri","transport","type","undefined","serviceAccountKeyFile","primary","debug","Error","verifyEndpoint","dcrRouter","store","issuerUrl","scopesSupported","split","clientConfig","middleware","authMiddleware","authAdapter","getAccessToken","getUserEmail","accountTools","accountPrompts","keyFilePath","scopes","result","createLoopback","tools","prompts","loopbackRouter"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/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.js';\nimport * as mcp from '../mcp/index.js';\nimport type { CommonRuntime, RuntimeDeps, RuntimeOverrides, ServerConfig, StorageContext } from '../types.js';\nimport { createOAuthAdapters, type OAuthAdapters } from './oauth-google.js';\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 storeUri = process.env.STORE_URI || `file://${path.join(baseDir, 'tokens.json')}`;\n return createStore<CachedToken>(storeUri);\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 assertStorageConfig(config: ServerConfig) {\n if (!config.storageDir) {\n throw new Error('gmail-messages-export-csv: Server configuration missing storageDir.');\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 assertStorageConfig(config);\n const logger = createLogger(config);\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), () => createStorageLayer({ storageDir: config.storageDir, baseUrl: config.baseUrl, transport: config.transport })];\n\n return {\n deps,\n middlewareFactories,\n createDomainModules,\n close: async () => {},\n };\n}\n"],"names":["sanitizeForLoggingFormatter","createLoggingMiddleware","fs","path","pino","createStore","mcp","createOAuthAdapters","createLogger","config","hasStdio","transport","type","logsPath","join","baseDir","name","mkdirSync","dirname","recursive","level","logLevel","formatters","destination","dest","sync","createTokenStore","storeUri","process","env","STORE_URI","createDcrStore","required","undefined","dcrStoreUri","DCR_STORE_URI","createAuthLayer","authMiddleware","withTool","withToolAuth","withResource","withResourceAuth","withPrompt","withPromptAuth","createLoggingLayer","logger","logging","withToolLogging","withResourceLogging","withPromptLogging","createStorageLayer","storageContext","wrapAtPosition","module","extraPosition","originalHandler","handler","wrappedHandler","allArgs","extra","assertStorageConfig","storageDir","Error","baseUrl","port","createDefaultRuntime","overrides","auth","tokenStore","dcrStore","oauthAdapters","deps","createDomainModules","tools","Object","values","toolFactories","map","factory","resources","resourceFactories","prompts","promptFactories","middlewareFactories","middleware","close"],"mappings":"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"}
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 storeUri = process.env.STORE_URI || `file://${path.join(baseDir, 'tokens.json')}`;\n return createStore<CachedToken>(storeUri);\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 assertStorageConfig(config: ServerConfig) {\n if (!config.storageDir) {\n throw new Error('gmail-messages-export-csv: Server configuration missing storageDir.');\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 assertStorageConfig(config);\n const logger = createLogger(config);\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), () => createStorageLayer({ storageDir: config.storageDir, baseUrl: config.baseUrl, transport: config.transport })];\n\n return {\n deps,\n middlewareFactories,\n createDomainModules,\n close: async () => {},\n };\n}\n"],"names":["sanitizeForLoggingFormatter","createLoggingMiddleware","fs","path","pino","createStore","mcp","createOAuthAdapters","createLogger","config","hasStdio","transport","type","logsPath","join","baseDir","name","mkdirSync","dirname","recursive","level","logLevel","formatters","destination","dest","sync","createTokenStore","storeUri","process","env","STORE_URI","createDcrStore","required","undefined","dcrStoreUri","DCR_STORE_URI","createAuthLayer","authMiddleware","withTool","withToolAuth","withResource","withResourceAuth","withPrompt","withPromptAuth","createLoggingLayer","logger","logging","withToolLogging","withResourceLogging","withPromptLogging","createStorageLayer","storageContext","wrapAtPosition","module","extraPosition","originalHandler","handler","wrappedHandler","allArgs","extra","assertStorageConfig","storageDir","Error","baseUrl","port","createDefaultRuntime","overrides","auth","tokenStore","dcrStore","oauthAdapters","deps","createDomainModules","tools","Object","values","toolFactories","map","factory","resources","resourceFactories","prompts","promptFactories","middlewareFactories","middleware","close"],"mappings":"AAAA,SAASA,2BAA2B,QAAQ,eAAe;AAG3D,SAASC,uBAAuB,QAAQ,gBAAgB;AACxD,YAAYC,QAAQ,KAAK;AACzB,YAAYC,UAAU,OAAO;AAC7B,OAAOC,UAAU,OAAO;AACxB,OAAOC,iBAAiB,yBAAyB;AACjD,YAAYC,SAAS,kBAAkB;AAEvC,SAASC,mBAAmB,QAA4B,oBAAoB;AAE5E,OAAO,SAASC,aAAaC,MAAoB;QAI1BA;IAHrB,MAAMC,WAAWD,OAAOE,SAAS,CAACC,IAAI,KAAK;IAC3C,MAAMC,WAAWV,KAAKW,IAAI,CAACL,OAAOM,OAAO,EAAE,QAAQ,GAAGN,OAAOO,IAAI,CAAC,IAAI,CAAC;IACvE,IAAIN,UAAUR,GAAGe,SAAS,CAACd,KAAKe,OAAO,CAACL,WAAW;QAAEM,WAAW;IAAK;IACrE,OAAOf,KAAK;QAAEgB,KAAK,GAAEX,mBAAAA,OAAOY,QAAQ,cAAfZ,8BAAAA,mBAAmB;QAAQa,YAAYtB;IAA8B,GAAGU,WAAWN,KAAKmB,WAAW,CAAC;QAAEC,MAAMX;QAAUY,MAAM;IAAM,KAAKrB,KAAKmB,WAAW,CAAC;AAC/K;AAEA,OAAO,eAAeG,iBAAiBX,OAAe;IACpD,MAAMY,WAAWC,QAAQC,GAAG,CAACC,SAAS,IAAI,CAAC,OAAO,EAAE3B,KAAKW,IAAI,CAACC,SAAS,gBAAgB;IACvF,OAAOV,YAAyBsB;AAClC;AAEA,OAAO,eAAeI,eAAehB,OAAe,EAAEiB,QAAiB;IACrE,IAAI,CAACA,UAAU,OAAOC;IACtB,MAAMC,cAAcN,QAAQC,GAAG,CAACM,aAAa,IAAI,CAAC,OAAO,EAAEhC,KAAKW,IAAI,CAACC,SAAS,aAAa;IAC3F,OAAOV,YAAqB6B;AAC9B;AAEA,OAAO,SAASE,gBAAgBC,cAA2C;IACzE,OAAO;QACLC,UAAUD,eAAeE,YAAY;QACrCC,cAAcH,eAAeI,gBAAgB;QAC7CC,YAAYL,eAAeM,cAAc;IAC3C;AACF;AAEA,OAAO,SAASC,mBAAmBC,MAAc;IAC/C,MAAMC,UAAU7C,wBAAwB;QAAE4C;IAAO;IACjD,OAAO;QACLP,UAAUQ,QAAQC,eAAe;QACjCP,cAAcM,QAAQE,mBAAmB;QACzCN,YAAYI,QAAQG,iBAAiB;IACvC;AACF;AAEA,OAAO,SAASC,mBAAmBC,cAA8B;IAC/D,MAAMC,iBAAiB,CAAuEC,QAAWC;QACvG,MAAMC,kBAAkBF,OAAOG,OAAO;QAEtC,MAAMC,iBAAiB,OAAO,GAAGC;YAC/B,MAAMC,QAAQD,OAAO,CAACJ,cAAc;YACnCK,MAA8CR,cAAc,GAAGA;YAChE,OAAO,MAAMI,mBAAmBG;QAClC;QAEA,OAAO;YACL,GAAGL,MAAM;YACTG,SAASC;QACX;IACF;IAEA,OAAO;QACLnB,UAAU,CAAgEe,SAAiBD,eAAeC,QAAQ;IACpH;AACF;AAEA,OAAO,SAASO,oBAAoBnD,MAAoB;IACtD,IAAI,CAACA,OAAOoD,UAAU,EAAE;QACtB,MAAM,IAAIC,MAAM;IAClB;IACA,IAAIrD,OAAOE,SAAS,CAACC,IAAI,KAAK,UAAU,CAACH,OAAOsD,OAAO,IAAI,CAACtD,OAAOE,SAAS,CAACqD,IAAI,EAAE;QACjF,MAAM,IAAIF,MAAM;IAClB;AACF;AAEA,OAAO,eAAeG,qBAAqBxD,MAAoB,EAAEyD,SAA4B;QAM3EzD;IALhB,IAAIA,OAAO0D,IAAI,KAAK,SAAS1D,OAAOE,SAAS,CAACC,IAAI,KAAK,QAAQ,MAAM,IAAIkD,MAAM;IAE/EF,oBAAoBnD;IACpB,MAAMoC,SAASrC,aAAaC;IAC5B,MAAM2D,aAAa,MAAM1C,iBAAiBjB,OAAOM,OAAO;IACxD,MAAMgD,WAAUtD,kBAAAA,OAAOsD,OAAO,cAAdtD,6BAAAA,kBAAmBA,OAAOE,SAAS,CAACC,IAAI,KAAK,UAAUH,OAAOE,SAAS,CAACqD,IAAI,GAAG,CAAC,iBAAiB,EAAEvD,OAAOE,SAAS,CAACqD,IAAI,EAAE,GAAG/B;IAC7I,MAAMoC,WAAW,MAAMtC,eAAetB,OAAOM,OAAO,EAAEN,OAAO0D,IAAI,KAAK;IACtE,MAAMG,gBAAgB,MAAM/D,oBAAoBE,QAAQ;QAAEoC;QAAQuB;QAAYC;IAAS,GAAGN;IAC1F,MAAMQ,OAAoB;QAAE9D;QAAQoC;QAAQuB;QAAYE;QAAeP;IAAQ;IAC/E,MAAMS,8BACJN,sBAAAA,gCAAAA,UAAWM,mBAAmB,uCAC7B,IAAO,CAAA;YACNC,OAAOC,OAAOC,MAAM,CAACrE,IAAIsE,aAAa,EAAEC,GAAG,CAAC,CAACC,UAAYA;YACzDC,WAAWL,OAAOC,MAAM,CAACrE,IAAI0E,iBAAiB,EAAEH,GAAG,CAAC,CAACC,UAAYA;YACjEG,SAASP,OAAOC,MAAM,CAACrE,IAAI4E,eAAe,EAAEL,GAAG,CAAC,CAACC,UAAYA;QAC/D,CAAA;IACF,MAAMK,+BAAsBjB,sBAAAA,gCAAAA,UAAWiB,mBAAmB,yCAAI;QAAC,IAAM/C,gBAAgBkC,cAAcc,UAAU;QAAG,IAAMxC,mBAAmBC;QAAS,IAAMK,mBAAmB;gBAAEW,YAAYpD,OAAOoD,UAAU;gBAAEE,SAAStD,OAAOsD,OAAO;gBAAEpD,WAAWF,OAAOE,SAAS;YAAC;KAAG;IAEpQ,OAAO;QACL4D;QACAY;QACAX;QACAa,OAAO,WAAa;IACtB;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/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.js';\nimport { createDefaultRuntime } from './runtime.js';\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 prompts = [...composed.prompts, ...runtime.deps.oauthAdapters.accountPrompts];\n\n const mcpServer = new McpServer({ name: config.name, version: config.version });\n registerTools(mcpServer, tools);\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":["composeMiddleware","connectStdio","registerPrompts","registerResources","registerTools","McpServer","createDefaultRuntime","createStdioServer","config","overrides","runtime","modules","createDomainModules","layers","middlewareFactories","map","factory","deps","composed","logger","tools","oauthAdapters","accountTools","prompts","accountPrompts","mcpServer","name","version","resources","info","close"],"mappings":"AAAA,SAASA,iBAAiB,EAAEC,YAAY,EAAEC,eAAe,EAAEC,iBAAiB,EAAEC,aAAa,QAAQ,gBAAgB;AACnH,SAASC,SAAS,QAAQ,0CAA0C;AAEpE,SAASC,oBAAoB,QAAQ,eAAe;AAEpD,OAAO,eAAeC,kBAAkBC,MAAoB,EAAEC,SAA4B;IACxF,MAAMC,UAAU,MAAMJ,qBAAqBE,QAAQC;IACnD,MAAME,UAAUD,QAAQE,mBAAmB;IAC3C,MAAMC,SAASH,QAAQI,mBAAmB,CAACC,GAAG,CAAC,CAACC,UAAYA,QAAQN,QAAQO,IAAI;IAChF,MAAMC,WAAWlB,kBAAkBW,SAASE;IAC5C,MAAMM,SAAST,QAAQO,IAAI,CAACE,MAAM;IAElC,MAAMC,QAAQ;WAAIF,SAASE,KAAK;WAAKV,QAAQO,IAAI,CAACI,aAAa,CAACC,YAAY;KAAC;IAC7E,MAAMC,UAAU;WAAIL,SAASK,OAAO;WAAKb,QAAQO,IAAI,CAACI,aAAa,CAACG,cAAc;KAAC;IAEnF,MAAMC,YAAY,IAAIpB,UAAU;QAAEqB,MAAMlB,OAAOkB,IAAI;QAAEC,SAASnB,OAAOmB,OAAO;IAAC;IAC7EvB,cAAcqB,WAAWL;IACzBjB,kBAAkBsB,WAAWP,SAASU,SAAS;IAC/C1B,gBAAgBuB,WAAWF;IAE3BJ,OAAOU,IAAI,CAAC,CAAC,SAAS,EAAErB,OAAOkB,IAAI,CAAC,mBAAmB,CAAC;IACxD,MAAM,EAAEI,KAAK,EAAE,GAAG,MAAM7B,aAAawB,WAAW;QAAEN;IAAO;IACzDA,OAAOU,IAAI,CAAC;IAEZ,OAAO;QACLJ;QACAN;QACAW,OAAO;YACL,MAAMA;YACN,MAAMpB,QAAQoB,KAAK;QACrB;IACF;AACF"}
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 prompts = [...composed.prompts, ...runtime.deps.oauthAdapters.accountPrompts];\n\n const mcpServer = new McpServer({ name: config.name, version: config.version });\n registerTools(mcpServer, tools);\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":["composeMiddleware","connectStdio","registerPrompts","registerResources","registerTools","McpServer","createDefaultRuntime","createStdioServer","config","overrides","runtime","modules","createDomainModules","layers","middlewareFactories","map","factory","deps","composed","logger","tools","oauthAdapters","accountTools","prompts","accountPrompts","mcpServer","name","version","resources","info","close"],"mappings":"AAAA,SAASA,iBAAiB,EAAEC,YAAY,EAAEC,eAAe,EAAEC,iBAAiB,EAAEC,aAAa,QAAQ,gBAAgB;AACnH,SAASC,SAAS,QAAQ,0CAA0C;AAEpE,SAASC,oBAAoB,QAAQ,eAAe;AAEpD,OAAO,eAAeC,kBAAkBC,MAAoB,EAAEC,SAA4B;IACxF,MAAMC,UAAU,MAAMJ,qBAAqBE,QAAQC;IACnD,MAAME,UAAUD,QAAQE,mBAAmB;IAC3C,MAAMC,SAASH,QAAQI,mBAAmB,CAACC,GAAG,CAAC,CAACC,UAAYA,QAAQN,QAAQO,IAAI;IAChF,MAAMC,WAAWlB,kBAAkBW,SAASE;IAC5C,MAAMM,SAAST,QAAQO,IAAI,CAACE,MAAM;IAElC,MAAMC,QAAQ;WAAIF,SAASE,KAAK;WAAKV,QAAQO,IAAI,CAACI,aAAa,CAACC,YAAY;KAAC;IAC7E,MAAMC,UAAU;WAAIL,SAASK,OAAO;WAAKb,QAAQO,IAAI,CAACI,aAAa,CAACG,cAAc;KAAC;IAEnF,MAAMC,YAAY,IAAIpB,UAAU;QAAEqB,MAAMlB,OAAOkB,IAAI;QAAEC,SAASnB,OAAOmB,OAAO;IAAC;IAC7EvB,cAAcqB,WAAWL;IACzBjB,kBAAkBsB,WAAWP,SAASU,SAAS;IAC/C1B,gBAAgBuB,WAAWF;IAE3BJ,OAAOU,IAAI,CAAC,CAAC,SAAS,EAAErB,OAAOkB,IAAI,CAAC,mBAAmB,CAAC;IACxD,MAAM,EAAEI,KAAK,EAAE,GAAG,MAAM7B,aAAawB,WAAW;QAAEN;IAAO;IACzDA,OAAOU,IAAI,CAAC;IAEZ,OAAO;QACLJ;QACAN;QACAW,OAAO;YACL,MAAMA;YACN,MAAMpB,QAAQoB,KAAK;QACrB;IACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-gmail/src/types.ts"],"sourcesContent":["import type { CachedToken, DcrConfig, OAuthConfig } from '@mcp-z/oauth-google';\nimport type { BaseServerConfig, MiddlewareLayer, PromptModule, ResourceModule, Logger as ServerLogger, ToolModule } from '@mcp-z/server';\nimport type { Keyv } from 'keyv';\nimport type { OAuthAdapters } from './setup/oauth-google.js';\n\nexport type Logger = Pick<Console, 'info' | 'error' | 'warn' | 'debug'>;\n\n/**\n * Composes transport config, OAuth config, and application-level config\n */\nexport interface ServerConfig extends BaseServerConfig, OAuthConfig {\n logLevel: string;\n baseDir: string;\n name: string;\n version: string;\n repositoryUrl: string;\n\n // File serving configuration for CSV exports\n storageDir: string;\n baseUrl?: string;\n\n // DCR configuration (when auth === 'dcr')\n dcrConfig?: DcrConfig;\n}\n\nexport interface StorageContext {\n storageDir: string;\n baseUrl?: string;\n transport: BaseServerConfig['transport'];\n}\n\nexport interface StorageExtra {\n storageContext: StorageContext;\n}\n\n/** Runtime dependencies exposed to middleware/factories. */\nexport interface RuntimeDeps {\n config: ServerConfig;\n logger: ServerLogger;\n tokenStore: Keyv<CachedToken>;\n oauthAdapters: OAuthAdapters;\n baseUrl?: string;\n}\n\n/** Collections of MCP modules produced by domain factories. */\nexport type DomainModules = {\n tools: ToolModule[];\n resources: ResourceModule[];\n prompts: PromptModule[];\n};\n\n/** Factory that produces a middleware layer given runtime dependencies. */\nexport type MiddlewareFactory = (deps: RuntimeDeps) => MiddlewareLayer;\n\n/** Shared runtime configuration returned by `createDefaultRuntime`. */\nexport interface CommonRuntime {\n deps: RuntimeDeps;\n middlewareFactories: MiddlewareFactory[];\n createDomainModules: () => DomainModules;\n close: () => Promise<void>;\n}\n\nexport interface RuntimeOverrides {\n middlewareFactories?: MiddlewareFactory[];\n createDomainModules?: () => DomainModules;\n}\n\nexport type { GmailQuery } from './schemas/index.js';\n"],"names":[],"mappings":"AAmEA,WAAqD"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/Projects/mcp-z/mcp-gmail/src/types.ts"],"sourcesContent":["import type { CachedToken, DcrConfig, OAuthConfig } from '@mcp-z/oauth-google';\nimport type { BaseServerConfig, MiddlewareLayer, PromptModule, ResourceModule, Logger as ServerLogger, ToolModule } from '@mcp-z/server';\nimport type { Keyv } from 'keyv';\nimport type { OAuthAdapters } from './setup/oauth-google.ts';\n\nexport type Logger = Pick<Console, 'info' | 'error' | 'warn' | 'debug'>;\n\n/**\n * Composes transport config, OAuth config, and application-level config\n */\nexport interface ServerConfig extends BaseServerConfig, OAuthConfig {\n logLevel: string;\n baseDir: string;\n name: string;\n version: string;\n repositoryUrl: string;\n\n // File serving configuration for CSV exports\n storageDir: string;\n baseUrl?: string;\n\n // DCR configuration (when auth === 'dcr')\n dcrConfig?: DcrConfig;\n}\n\nexport interface StorageContext {\n storageDir: string;\n baseUrl?: string;\n transport: BaseServerConfig['transport'];\n}\n\nexport interface StorageExtra {\n storageContext: StorageContext;\n}\n\n/** Runtime dependencies exposed to middleware/factories. */\nexport interface RuntimeDeps {\n config: ServerConfig;\n logger: ServerLogger;\n tokenStore: Keyv<CachedToken>;\n oauthAdapters: OAuthAdapters;\n baseUrl?: string;\n}\n\n/** Collections of MCP modules produced by domain factories. */\nexport type DomainModules = {\n tools: ToolModule[];\n resources: ResourceModule[];\n prompts: PromptModule[];\n};\n\n/** Factory that produces a middleware layer given runtime dependencies. */\nexport type MiddlewareFactory = (deps: RuntimeDeps) => MiddlewareLayer;\n\n/** Shared runtime configuration returned by `createDefaultRuntime`. */\nexport interface CommonRuntime {\n deps: RuntimeDeps;\n middlewareFactories: MiddlewareFactory[];\n createDomainModules: () => DomainModules;\n close: () => Promise<void>;\n}\n\nexport interface RuntimeOverrides {\n middlewareFactories?: MiddlewareFactory[];\n createDomainModules?: () => DomainModules;\n}\n\nexport type { GmailQuery } from './schemas/index.ts';\n"],"names":[],"mappings":"AAmEA,WAAqD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcp-z/mcp-gmail",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "MCP server for Gmail integration with OAuth authentication, message search, batch operations, and Google Sheets export",
5
5
  "keywords": [
6
6
  "gmail",