@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.
- package/dist/cjs/constants.js.map +1 -1
- package/dist/cjs/email/composition/rfc822-builder.js.map +1 -1
- package/dist/cjs/email/messages/fetch-message.js +15 -21
- package/dist/cjs/email/messages/fetch-message.js.map +1 -1
- package/dist/cjs/email/messages/messages.js +2 -2
- package/dist/cjs/email/messages/messages.js.map +1 -1
- package/dist/cjs/email/parsing/header-parsing.js.map +1 -1
- package/dist/cjs/email/parsing/headers-utils.js.map +1 -1
- package/dist/cjs/email/parsing/html-processing.js.map +1 -1
- package/dist/cjs/email/parsing/message-extraction.js.map +1 -1
- package/dist/cjs/email/querying/execute-query.js +7 -14
- package/dist/cjs/email/querying/execute-query.js.map +1 -1
- package/dist/cjs/email/querying/pagination.js +19 -24
- package/dist/cjs/email/querying/pagination.js.map +1 -1
- package/dist/cjs/email/querying/query-builder.js +4 -2
- package/dist/cjs/email/querying/query-builder.js.map +1 -1
- package/dist/cjs/email/querying/search-execution.js +2 -5
- package/dist/cjs/email/querying/search-execution.js.map +1 -1
- package/dist/cjs/index.js +10 -24
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/labels/gmail-labels.js +2 -5
- package/dist/cjs/labels/gmail-labels.js.map +1 -1
- package/dist/cjs/lib/base64-encoding.js.map +1 -1
- package/dist/cjs/lib/create-store.js +2 -5
- package/dist/cjs/lib/create-store.js.map +1 -1
- package/dist/cjs/lib/date-conversion.js.map +1 -1
- package/dist/cjs/lib/messages-to-row.js +2 -2
- package/dist/cjs/lib/messages-to-row.js.map +1 -1
- package/dist/cjs/mcp/index.js +8 -19
- package/dist/cjs/mcp/index.js.map +1 -1
- package/dist/cjs/mcp/prompts/draft-email.js +3 -6
- package/dist/cjs/mcp/prompts/draft-email.js.map +1 -1
- package/dist/cjs/mcp/prompts/index.js.map +1 -1
- package/dist/cjs/mcp/prompts/query-syntax.js +3 -6
- package/dist/cjs/mcp/prompts/query-syntax.js.map +1 -1
- package/dist/cjs/mcp/resources/email.js +3 -6
- package/dist/cjs/mcp/resources/email.js.map +1 -1
- package/dist/cjs/mcp/resources/index.js.map +1 -1
- package/dist/cjs/mcp/tools/categories-list.js +4 -8
- package/dist/cjs/mcp/tools/categories-list.js.map +1 -1
- package/dist/cjs/mcp/tools/index.js.map +1 -1
- package/dist/cjs/mcp/tools/label-add.js +4 -8
- package/dist/cjs/mcp/tools/label-add.js.map +1 -1
- package/dist/cjs/mcp/tools/label-delete.d.cts +1 -1
- package/dist/cjs/mcp/tools/label-delete.d.ts +1 -1
- package/dist/cjs/mcp/tools/label-delete.js +36 -32
- package/dist/cjs/mcp/tools/label-delete.js.map +1 -1
- package/dist/cjs/mcp/tools/labels-list.js +4 -8
- package/dist/cjs/mcp/tools/labels-list.js.map +1 -1
- package/dist/cjs/mcp/tools/message-get.d.cts +21 -21
- package/dist/cjs/mcp/tools/message-get.d.ts +21 -21
- package/dist/cjs/mcp/tools/message-get.js +4 -8
- package/dist/cjs/mcp/tools/message-get.js.map +1 -1
- package/dist/cjs/mcp/tools/message-mark-read.js +4 -8
- package/dist/cjs/mcp/tools/message-mark-read.js.map +1 -1
- package/dist/cjs/mcp/tools/message-move-to-trash.d.cts +1 -1
- package/dist/cjs/mcp/tools/message-move-to-trash.d.ts +1 -1
- package/dist/cjs/mcp/tools/message-move-to-trash.js +36 -32
- package/dist/cjs/mcp/tools/message-move-to-trash.js.map +1 -1
- package/dist/cjs/mcp/tools/message-respond.js +5 -11
- package/dist/cjs/mcp/tools/message-respond.js.map +1 -1
- package/dist/cjs/mcp/tools/message-search.d.cts +23 -23
- package/dist/cjs/mcp/tools/message-search.d.ts +23 -23
- package/dist/cjs/mcp/tools/message-search.js +7 -14
- package/dist/cjs/mcp/tools/message-search.js.map +1 -1
- package/dist/cjs/mcp/tools/message-send.d.cts +3 -3
- package/dist/cjs/mcp/tools/message-send.d.ts +3 -3
- package/dist/cjs/mcp/tools/message-send.js +4 -8
- package/dist/cjs/mcp/tools/message-send.js.map +1 -1
- package/dist/cjs/mcp/tools/messages-export-csv.js +7 -14
- package/dist/cjs/mcp/tools/messages-export-csv.js.map +1 -1
- package/dist/cjs/schemas/gmail-query-schema.js +5 -9
- package/dist/cjs/schemas/gmail-query-schema.js.map +1 -1
- package/dist/cjs/schemas/index.js.map +1 -1
- package/dist/cjs/setup/config.js +11 -25
- package/dist/cjs/setup/config.js.map +1 -1
- package/dist/cjs/setup/http.js +15 -16
- package/dist/cjs/setup/http.js.map +1 -1
- package/dist/cjs/setup/index.js.map +1 -1
- package/dist/cjs/setup/oauth-google.js +9 -16
- package/dist/cjs/setup/oauth-google.js.map +1 -1
- package/dist/cjs/setup/runtime.d.cts +1 -1
- package/dist/cjs/setup/runtime.d.ts +1 -1
- package/dist/cjs/setup/runtime.js +29 -44
- package/dist/cjs/setup/runtime.js.map +1 -1
- package/dist/cjs/setup/stdio.js +15 -16
- package/dist/cjs/setup/stdio.js.map +1 -1
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/email/composition/rfc822-builder.js.map +1 -1
- package/dist/esm/email/messages/fetch-message.js.map +1 -1
- package/dist/esm/email/messages/messages.js.map +1 -1
- package/dist/esm/email/parsing/header-parsing.js.map +1 -1
- package/dist/esm/email/parsing/headers-utils.js.map +1 -1
- package/dist/esm/email/parsing/html-processing.js.map +1 -1
- package/dist/esm/email/parsing/message-extraction.js.map +1 -1
- package/dist/esm/email/querying/execute-query.js.map +1 -1
- package/dist/esm/email/querying/pagination.js.map +1 -1
- package/dist/esm/email/querying/query-builder.js.map +1 -1
- package/dist/esm/email/querying/search-execution.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/labels/gmail-labels.js.map +1 -1
- package/dist/esm/lib/base64-encoding.js.map +1 -1
- package/dist/esm/lib/create-store.js.map +1 -1
- package/dist/esm/lib/date-conversion.js.map +1 -1
- package/dist/esm/lib/messages-to-row.js.map +1 -1
- package/dist/esm/mcp/index.js.map +1 -1
- package/dist/esm/mcp/prompts/draft-email.js.map +1 -1
- package/dist/esm/mcp/prompts/index.js.map +1 -1
- package/dist/esm/mcp/prompts/query-syntax.js.map +1 -1
- package/dist/esm/mcp/resources/email.js.map +1 -1
- package/dist/esm/mcp/resources/index.js.map +1 -1
- package/dist/esm/mcp/tools/categories-list.js.map +1 -1
- package/dist/esm/mcp/tools/index.js.map +1 -1
- package/dist/esm/mcp/tools/label-add.js.map +1 -1
- package/dist/esm/mcp/tools/label-delete.d.ts +1 -1
- package/dist/esm/mcp/tools/label-delete.js.map +1 -1
- package/dist/esm/mcp/tools/labels-list.js.map +1 -1
- package/dist/esm/mcp/tools/message-get.d.ts +21 -21
- package/dist/esm/mcp/tools/message-get.js.map +1 -1
- package/dist/esm/mcp/tools/message-mark-read.js.map +1 -1
- package/dist/esm/mcp/tools/message-move-to-trash.d.ts +1 -1
- package/dist/esm/mcp/tools/message-move-to-trash.js.map +1 -1
- package/dist/esm/mcp/tools/message-respond.js.map +1 -1
- package/dist/esm/mcp/tools/message-search.d.ts +23 -23
- package/dist/esm/mcp/tools/message-search.js.map +1 -1
- package/dist/esm/mcp/tools/message-send.d.ts +3 -3
- package/dist/esm/mcp/tools/message-send.js.map +1 -1
- package/dist/esm/mcp/tools/messages-export-csv.js.map +1 -1
- package/dist/esm/schemas/gmail-query-schema.js.map +1 -1
- package/dist/esm/schemas/index.js.map +1 -1
- package/dist/esm/setup/config.js.map +1 -1
- package/dist/esm/setup/http.js.map +1 -1
- package/dist/esm/setup/index.js.map +1 -1
- package/dist/esm/setup/oauth-google.js.map +1 -1
- package/dist/esm/setup/runtime.d.ts +1 -1
- package/dist/esm/setup/runtime.js.map +1 -1
- package/dist/esm/setup/stdio.js.map +1 -1
- package/dist/esm/types.js.map +1 -1
- package/package.json +15 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/
|
|
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/
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
111
|
-
|
|
112
|
-
|
|
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
|
-
|
|
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)
|
|
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
|
|
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
|
-
|
|
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":";;;;;;;;;;;QA8BgBA;eAAAA;;QANMC;eAAAA;;QA2DAC;eAAAA;;QAvENC;eAAAA;;QA0BAC;eAAAA;;QASAC;eAAAA;;QA5BMC;eAAAA;;QAiDNC;eAAAA;;;qBApE4B;sBAGJ;0DACpB;4DACE;2DACL;oEACO;+DACH;6BAEmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEjD,SAASJ,aAAaK,MAAoB;QAI1BA;IAHrB,IAAMC,WAAWD,OAAOE,SAAS,CAACC,IAAI,KAAK;IAC3C,IAAMC,WAAWC,MAAKC,IAAI,CAACN,OAAOO,OAAO,EAAE,QAAQ,AAAC,GAAc,OAAZP,OAAOQ,IAAI,EAAC;IAClE,IAAIP,UAAUQ,IAAGC,SAAS,CAACL,MAAKM,OAAO,CAACP,WAAW;QAAEQ,WAAW;IAAK;IACrE,OAAOC,IAAAA,aAAI,EAAC;QAAEC,KAAK,GAAEd,mBAAAA,OAAOe,QAAQ,cAAff,8BAAAA,mBAAmB;QAAQgB,YAAYC,IAAAA,kCAA2B;IAAG,GAAGhB,WAAWY,aAAI,CAACK,WAAW,CAAC;QAAEC,MAAMf;QAAUgB,MAAM;IAAM,KAAKP,aAAI,CAACK,WAAW,CAAC;AAC/K;AAEO,SAAepB,iBAAiBS,OAAe;;YAC9Cc;;YAAAA,gBAAgBC,QAAQC,GAAG,CAACC,eAAe,IAAI,AAAC,UAA2C,OAAlCnB,MAAKC,IAAI,CAACC,SAAS;YAClF;;gBAAOkB,IAAAA,sBAAW,EAAcJ;;;IAClC;;AAEO,SAAe5B,eAAec,OAAe,EAAEmB,QAAiB;;YAE/DC;;YADN,IAAI,CAACD,UAAU;;gBAAOE;;YAChBD,cAAcL,QAAQC,GAAG,CAACM,aAAa,IAAI,AAAC,UAAwC,OAA/BxB,MAAKC,IAAI,CAACC,SAAS;YAC9E;;gBAAOkB,IAAAA,sBAAW,EAAUE;;;IAC9B;;AAEO,SAASnC,gBAAgBsC,cAA2C;IACzE,OAAO;QACLC,UAAUD,eAAeE,YAAY;QACrCC,cAAcH,eAAeI,gBAAgB;QAC7CC,YAAYL,eAAeM,cAAc;IAC3C;AACF;AAEO,SAASxC,mBAAmByC,MAAc;IAC/C,IAAMC,UAAUC,IAAAA,+BAAuB,EAAC;QAAEF,QAAAA;IAAO;IACjD,OAAO;QACLN,UAAUO,QAAQE,eAAe;QACjCP,cAAcK,QAAQG,mBAAmB;QACzCN,YAAYG,QAAQI,iBAAiB;IACvC;AACF;AAEO,SAAS7C,mBAAmB8C,cAA8B;IAC/D,IAAMC,iBAAiB,SAAuEC,QAAWC;QACvG,IAAMC,kBAAkBF,OAAOG,OAAO;QAEtC,IAAMC,iBAAiB;6CAAUC;gBAAAA;;;oBACzBC;;;;4BAAAA,QAAQD,OAAO,CAACJ,cAAc;4BACnCK,MAA8CR,cAAc,GAAGA;4BACzD;;gCAAMI,sBAAAA,KAAAA,GAAgB,qBAAGG;;;4BAAhC;;gCAAO;;;;YACT;;QAEA,OAAO,wCACFL;YACHG,SAASC;;IAEb;IAEA,OAAO;QACLlB,UAAU,SAAgEc;mBAAiBD,eAAeC,QAAQ;;IACpH;AACF;AAEO,SAAS9C,sBAAsBC,MAAoB,EAAEqC,MAAc;IACxE,IAAIrC,OAAOoD,IAAI,KAAK,OAAO;QACzB,IAAIpD,OAAOqD,gBAAgB,EAAE;YAC3BhB,OAAOiB,IAAI,CAAC;QACd;QACA;IACF;IACA,IAAI,CAACtD,OAAOqD,gBAAgB,EAAE;QAC5B,MAAM,IAAIE,MAAM;IAClB;IACA,IAAIvD,OAAOE,SAAS,CAACC,IAAI,KAAK,UAAU,CAACH,OAAOwD,OAAO,IAAI,CAACxD,OAAOE,SAAS,CAACuD,IAAI,EAAE;QACjF,MAAM,IAAIF,MAAM;IAClB;AACF;AAEO,SAAe7D,qBAAqBM,MAAoB,EAAE0D,SAA4B;;YAM3E1D,8BAHVqC,QAEAsB,YACAH,SACAI,UACAC,eACAC,MACAC,qBAOAC;;;;oBAhBN,IAAIhE,OAAOoD,IAAI,KAAK,SAASpD,OAAOE,SAAS,CAACC,IAAI,KAAK,QAAQ,MAAM,IAAIoD,MAAM;oBAEzElB,SAAS1C,aAAaK;oBAC5BD,sBAAsBC,QAAQqC;oBACX;;wBAAMvC,iBAAiBE,OAAOO,OAAO;;;oBAAlDoD,aAAa;oBACbH,WAAUxD,kBAAAA,OAAOwD,OAAO,cAAdxD,6BAAAA,kBAAmBA,OAAOE,SAAS,CAACC,IAAI,KAAK,UAAUH,OAAOE,SAAS,CAACuD,IAAI,GAAG,AAAC,oBAAyC,OAAtBzD,OAAOE,SAAS,CAACuD,IAAI,IAAK7B;oBAC5H;;wBAAMnC,eAAeO,OAAOO,OAAO,EAAEP,OAAOoD,IAAI,KAAK;;;oBAAhEQ,WAAW;oBACK;;wBAAMK,IAAAA,kCAAmB,EAACjE,QAAQ;4BAAEqC,QAAAA;4BAAQsB,YAAAA;4BAAYC,UAAAA;wBAAS,GAAGJ;;;oBAApFK,gBAAgB;oBAChBC,OAAoB;wBAAE9D,QAAAA;wBAAQqC,QAAAA;wBAAQsB,YAAAA;wBAAYE,eAAAA;wBAAeL,SAAAA;oBAAQ;oBACzEO,8BACJL,sBAAAA,gCAAAA,UAAWK,mBAAmB,uCAC7B;+BAAO;4BACNG,OAAOC,OAAOC,MAAM,CAACC,SAAIC,aAAa,EAAEC,GAAG,CAAC,SAACC;uCAAYA;;4BACzDC,WAAWN,OAAOC,MAAM,CAACC,SAAIK,iBAAiB,EAAEH,GAAG,CAAC,SAACC;uCAAYA;;4BACjEG,SAASR,OAAOC,MAAM,CAACC,SAAIO,eAAe,EAAEL,GAAG,CAAC,SAACC;uCAAYA;;wBAC/D;;oBACIR,+BAAsBN,sBAAAA,gCAAAA,UAAWM,mBAAmB,yCAAI;wBAAC;mCAAMxE,gBAAgBqE,cAAcgB,UAAU;;wBAAG;mCAAMjF,mBAAmByC;;sBAA3E,OAAoF,qBAAIrC,OAAOoD,IAAI,KAAK;wBAAc;mCAAMvD,mBAAmB;gCAAEwD,kBAAkBrD,OAAOqD,gBAAgB;gCAAEG,SAASxD,OAAOwD,OAAO;gCAAEtD,WAAWF,OAAOE,SAAS;4BAAC;;;oBAE/S;;wBAAO;4BACL4D,MAAAA;4BACAE,qBAAAA;4BACAD,qBAAAA;4BACAe,OAAO;;;;;;;gCAAa;;wBACtB;;;;IACF"}
|
|
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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"}
|
package/dist/cjs/setup/stdio.js
CHANGED
|
@@ -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
|
-
|
|
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)
|
|
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
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/
|
|
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":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/
|
|
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/
|
|
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"}
|