@marlinjai/email-mcp 1.2.4 → 1.2.5

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.
@@ -1,3 +1,6 @@
1
+ #!/usr/bin/env node
2
+
3
+
1
4
  // src/setup/wizard.ts
2
5
  import crypto3 from "node:crypto";
3
6
  import { exec } from "node:child_process";
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/setup/wizard.ts", "../../src/auth/credential-store.ts", "../../src/auth/oauth-server.ts", "../../src/providers/gmail/auth.ts", "../../src/providers/outlook/auth.ts", "../../src/models/types.ts", "../../src/providers/gmail/adapter.ts", "../../src/providers/gmail/mapper.ts", "../../src/providers/outlook/adapter.ts", "../../src/providers/outlook/mapper.ts", "../../src/providers/imap/adapter.ts", "../../src/providers/imap/mapper.ts", "../../src/providers/imap/smtp.ts", "../../src/providers/icloud/adapter.ts", "../../src/oauth-config.ts", "../../src/account-manager.ts"],
4
4
  "sourcesContent": ["import crypto from 'node:crypto';\nimport { exec } from 'node:child_process';\nimport inquirer from 'inquirer';\nimport { CredentialStore } from '../auth/credential-store.js';\nimport { OAuthCallbackServer } from '../auth/oauth-server.js';\nimport { GmailAuth } from '../providers/gmail/auth.js';\nimport { OutlookAuth } from '../providers/outlook/auth.js';\nimport type { AccountCredentials, ProviderTypeValue } from '../models/types.js';\nimport { ProviderType } from '../models/types.js';\nimport { AccountManager } from '../account-manager.js';\nimport { GMAIL_CLIENT_ID, GMAIL_CLIENT_SECRET, OUTLOOK_CLIENT_ID } from '../oauth-config.js';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nconst store = new CredentialStore();\nconst manager = new AccountManager(store);\n\nfunction openBrowser(url: string): void {\n const platform = process.platform;\n let cmd: string;\n if (platform === 'darwin') {\n cmd = `open \"${url}\"`;\n } else if (platform === 'win32') {\n cmd = `start \"\" \"${url}\"`;\n } else {\n cmd = `xdg-open \"${url}\"`;\n }\n exec(cmd, (err) => {\n if (err) {\n console.log(`\\nCould not open browser automatically. Please visit:\\n${url}\\n`);\n }\n });\n}\n\nasync function testAndSave(creds: AccountCredentials): Promise<void> {\n console.log('\\nTesting connection...');\n try {\n await manager.addAccount(creds);\n const result = await manager.testAccount(creds.id);\n if (result.success) {\n console.log(`Connection successful! Found ${result.folderCount} folder(s).`);\n console.log(`Account \"${creds.name}\" saved (id: ${creds.id}).`);\n } else {\n console.log(`Connection test failed: ${result.error}`);\n console.log('Credentials were saved anyway \u2014 you can retry later.');\n }\n } catch (error: any) {\n // Save credentials even if connection test fails so user doesn't lose them\n await store.save(creds);\n console.log(`Connection failed: ${error.message}`);\n console.log('Credentials were saved \u2014 you can retry later.');\n } finally {\n await manager.disconnectAll();\n }\n}\n\nasync function promptAccountName(defaultName: string): Promise<string> {\n const { name } = await inquirer.prompt([\n {\n type: 'input',\n name: 'name',\n message: 'Account name:',\n default: defaultName,\n },\n ]);\n return name;\n}\n\n// ---------------------------------------------------------------------------\n// Gmail Setup\n// ---------------------------------------------------------------------------\n\nasync function setupGmail(): Promise<void> {\n console.log('\\n--- Gmail Setup ---');\n console.log('A browser window will open for Google authorization.\\n');\n\n const server = new OAuthCallbackServer();\n const port = await server.start();\n const redirectUri = `http://localhost:${port}/callback`;\n\n const gmailAuth = new GmailAuth(GMAIL_CLIENT_ID, GMAIL_CLIENT_SECRET, redirectUri);\n const { url, codeVerifier } = gmailAuth.getAuthUrl(redirectUri);\n\n console.log('\\nOpening browser for Google authorization...');\n console.log(`If the browser does not open, visit:\\n${url}\\n`);\n openBrowser(url);\n\n let code: string;\n try {\n code = await server.waitForCode();\n } catch (err: any) {\n server.shutdown();\n throw new Error(`OAuth flow failed: ${err.message}`);\n }\n server.shutdown();\n\n console.log('Authorization code received. Exchanging for tokens...');\n const tokens = await gmailAuth.exchangeCode(code, codeVerifier);\n\n // Fetch email from Gmail profile using the access token\n const profileRes = await fetch('https://gmail.googleapis.com/gmail/v1/users/me/profile', {\n headers: { Authorization: `Bearer ${tokens.access_token}` },\n });\n const profile = await profileRes.json() as { emailAddress?: string };\n const email = profile.emailAddress ?? '';\n if (!email) throw new Error('Could not retrieve Gmail address from profile');\n console.log(`Authenticated as ${email}`);\n\n const name = await promptAccountName('Gmail');\n const id = crypto.randomUUID();\n\n const creds: AccountCredentials = {\n id,\n name,\n provider: ProviderType.Gmail,\n email: email.trim(),\n oauth: tokens,\n };\n\n await testAndSave(creds);\n}\n\n// ---------------------------------------------------------------------------\n// Outlook Setup\n// ---------------------------------------------------------------------------\n\nasync function setupOutlook(): Promise<void> {\n console.log('\\n--- Outlook Setup ---');\n console.log('A browser window will open for Microsoft authorization.\\n');\n\n const server = new OAuthCallbackServer();\n const port = await server.start();\n const redirectUri = `http://localhost:${port}`;\n\n const outlookAuth = new OutlookAuth(OUTLOOK_CLIENT_ID);\n const { url, codeVerifier } = await outlookAuth.getAuthUrl(redirectUri);\n\n console.log('\\nOpening browser for Microsoft authorization...');\n console.log(`If the browser does not open, visit:\\n${url}\\n`);\n openBrowser(url);\n\n let code: string;\n try {\n code = await server.waitForCode();\n } catch (err: any) {\n server.shutdown();\n throw new Error(`OAuth flow failed: ${err.message}`);\n }\n server.shutdown();\n\n console.log('Authorization code received. Exchanging for tokens...');\n const result = await outlookAuth.exchangeCode(code, codeVerifier, redirectUri);\n\n // Extract email from MSAL account info\n const account = result.account as { username?: string } | undefined;\n const email = account?.username ?? '';\n if (!email) throw new Error('Could not retrieve email from Microsoft account');\n console.log(`Authenticated as ${email}`);\n\n const name = await promptAccountName('Outlook');\n const id = crypto.randomUUID();\n\n const creds: AccountCredentials = {\n id,\n name,\n provider: ProviderType.Outlook,\n email: email.trim(),\n oauth: {\n access_token: result.accessToken,\n refresh_token: '', // MSAL cache handles refresh tokens via file persistence\n expiry: result.expiresOn?.toISOString() ?? '',\n msal_home_account_id: result.homeAccountId,\n },\n };\n\n await testAndSave(creds);\n}\n\n// ---------------------------------------------------------------------------\n// iCloud Setup\n// ---------------------------------------------------------------------------\n\nasync function setupICloud(): Promise<void> {\n console.log('\\n--- iCloud Mail Setup ---');\n console.log(\n 'You need an app-specific password for iCloud Mail.\\n' +\n 'Generate one at https://appleid.apple.com/account/manage\\n' +\n '(Sign In & Security > App-Specific Passwords)\\n'\n );\n\n const answers = await inquirer.prompt([\n {\n type: 'input',\n name: 'email',\n message: 'iCloud email address:',\n validate: (v: string) => v.includes('@') || 'Enter a valid email address',\n },\n {\n type: 'password',\n name: 'password',\n message: 'App-specific password:',\n mask: '*',\n validate: (v: string) => v.trim().length > 0 || 'Password is required',\n },\n ]);\n\n const name = await promptAccountName('iCloud');\n const id = crypto.randomUUID();\n\n const creds: AccountCredentials = {\n id,\n name,\n provider: ProviderType.ICloud,\n email: answers.email.trim(),\n password: {\n password: answers.password,\n host: 'imap.mail.me.com',\n port: 993,\n tls: true,\n smtpHost: 'smtp.mail.me.com',\n smtpPort: 587,\n },\n };\n\n await testAndSave(creds);\n}\n\n// ---------------------------------------------------------------------------\n// Generic IMAP Setup\n// ---------------------------------------------------------------------------\n\nasync function setupIMAP(): Promise<void> {\n console.log('\\n--- Generic IMAP Setup ---\\n');\n\n const answers = await inquirer.prompt([\n {\n type: 'input',\n name: 'email',\n message: 'Email address:',\n validate: (v: string) => v.includes('@') || 'Enter a valid email address',\n },\n {\n type: 'input',\n name: 'host',\n message: 'IMAP host:',\n validate: (v: string) => v.trim().length > 0 || 'Host is required',\n },\n {\n type: 'input',\n name: 'port',\n message: 'IMAP port:',\n default: '993',\n validate: (v: string) => {\n const n = parseInt(v, 10);\n return (n > 0 && n <= 65535) || 'Enter a valid port number (1-65535)';\n },\n },\n {\n type: 'confirm',\n name: 'tls',\n message: 'Use TLS?',\n default: true,\n },\n {\n type: 'password',\n name: 'password',\n message: 'Password:',\n mask: '*',\n validate: (v: string) => v.trim().length > 0 || 'Password is required',\n },\n {\n type: 'confirm',\n name: 'configureSmtp',\n message: 'Configure SMTP (for sending)?',\n default: false,\n },\n ]);\n\n let smtpHost: string | undefined;\n let smtpPort: number | undefined;\n\n if (answers.configureSmtp) {\n const smtp = await inquirer.prompt([\n {\n type: 'input',\n name: 'smtpHost',\n message: 'SMTP host:',\n validate: (v: string) => v.trim().length > 0 || 'SMTP host is required',\n },\n {\n type: 'input',\n name: 'smtpPort',\n message: 'SMTP port:',\n default: '587',\n validate: (v: string) => {\n const n = parseInt(v, 10);\n return (n > 0 && n <= 65535) || 'Enter a valid port number (1-65535)';\n },\n },\n ]);\n smtpHost = smtp.smtpHost.trim();\n smtpPort = parseInt(smtp.smtpPort, 10);\n }\n\n const name = await promptAccountName('IMAP');\n const id = crypto.randomUUID();\n\n const creds: AccountCredentials = {\n id,\n name,\n provider: ProviderType.IMAP,\n email: answers.email.trim(),\n password: {\n password: answers.password,\n host: answers.host.trim(),\n port: parseInt(answers.port, 10),\n tls: answers.tls,\n smtpHost,\n smtpPort,\n },\n };\n\n await testAndSave(creds);\n}\n\n// ---------------------------------------------------------------------------\n// List / Remove\n// ---------------------------------------------------------------------------\n\nasync function listAccounts(): Promise<void> {\n const accounts = await store.list();\n if (accounts.length === 0) {\n console.log('No accounts configured.');\n return;\n }\n console.log(`\\nConfigured accounts (${accounts.length}):\\n`);\n for (const acct of accounts) {\n console.log(` ${acct.id}`);\n console.log(` Name: ${acct.name}`);\n console.log(` Provider: ${acct.provider}`);\n console.log(` Email: ${acct.email}`);\n console.log('');\n }\n}\n\nasync function removeAccount(id: string): Promise<void> {\n const acct = await store.get(id);\n if (!acct) {\n console.error(`Account not found: ${id}`);\n process.exit(1);\n }\n\n const { confirm } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'confirm',\n message: `Remove account \"${acct.name}\" (${acct.email})?`,\n default: false,\n },\n ]);\n\n if (confirm) {\n await store.remove(id);\n console.log(`Account \"${acct.name}\" removed.`);\n } else {\n console.log('Cancelled.');\n }\n}\n\n// ---------------------------------------------------------------------------\n// Main\n// ---------------------------------------------------------------------------\n\nasync function main(): Promise<void> {\n const args = process.argv.slice(2);\n\n // Handle --list\n if (args.includes('--list')) {\n await listAccounts();\n return;\n }\n\n // Handle --remove <id>\n const removeIdx = args.indexOf('--remove');\n if (removeIdx !== -1) {\n const id = args[removeIdx + 1];\n if (!id) {\n console.error('Usage: --remove <account-id>');\n process.exit(1);\n }\n await removeAccount(id);\n return;\n }\n\n // Interactive wizard\n console.log('@marlinjai/email-mcp Account Setup\\n');\n\n let addMore = true;\n while (addMore) {\n const { provider } = await inquirer.prompt([\n {\n type: 'rawlist',\n name: 'provider',\n message: 'Select provider:',\n choices: [\n { name: 'Gmail', value: 'gmail' },\n { name: 'Outlook', value: 'outlook' },\n { name: 'iCloud', value: 'icloud' },\n { name: 'Other IMAP', value: 'imap' },\n ],\n },\n ]);\n\n switch (provider as ProviderTypeValue) {\n case ProviderType.Gmail:\n await setupGmail();\n break;\n case ProviderType.Outlook:\n await setupOutlook();\n break;\n case ProviderType.ICloud:\n await setupICloud();\n break;\n case ProviderType.IMAP:\n await setupIMAP();\n break;\n default:\n console.error(`Unknown provider: ${provider}`);\n process.exit(1);\n }\n\n const { another } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'another',\n message: 'Would you like to add another email account?',\n default: false,\n },\n ]);\n addMore = another;\n }\n\n console.log('\\nSetup complete! You can now use the email tools in Claude Code.');\n}\n\nmain().catch((err) => {\n console.error(`\\nSetup failed: ${err.message}`);\n process.exit(1);\n});\n", "import crypto from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport os from 'node:os';\nimport type { AccountCredentials } from '../models/types.js';\n\nconst ALGORITHM = 'aes-256-gcm';\nconst KEY_LENGTH = 32;\nconst IV_LENGTH = 16;\nconst SALT_LENGTH = 32;\nconst PBKDF2_ITERATIONS = 100_000;\n\nfunction getMachineSeed(): string {\n return `email-mcp:${os.hostname()}:${os.userInfo().username}`;\n}\n\nfunction deriveKey(salt: Buffer): Buffer {\n return crypto.pbkdf2Sync(getMachineSeed(), salt, PBKDF2_ITERATIONS, KEY_LENGTH, 'sha512');\n}\n\nfunction encrypt(plaintext: string): string {\n const salt = crypto.randomBytes(SALT_LENGTH);\n const key = deriveKey(salt);\n const iv = crypto.randomBytes(IV_LENGTH);\n const cipher = crypto.createCipheriv(ALGORITHM, key, iv);\n\n let encrypted = cipher.update(plaintext, 'utf-8', 'hex');\n encrypted += cipher.final('hex');\n const authTag = cipher.getAuthTag();\n\n return JSON.stringify({\n salt: salt.toString('hex'),\n iv: iv.toString('hex'),\n authTag: authTag.toString('hex'),\n data: encrypted,\n });\n}\n\nfunction decrypt(ciphertext: string): string {\n const { salt, iv, authTag, data } = JSON.parse(ciphertext);\n const key = deriveKey(Buffer.from(salt, 'hex'));\n const decipher = crypto.createDecipheriv(ALGORITHM, key, Buffer.from(iv, 'hex'));\n decipher.setAuthTag(Buffer.from(authTag, 'hex'));\n\n let decrypted = decipher.update(data, 'hex', 'utf-8');\n decrypted += decipher.final('utf-8');\n return decrypted;\n}\n\ninterface StoredData {\n accounts: Record<string, AccountCredentials>;\n}\n\nexport class CredentialStore {\n private filePath: string;\n\n constructor(dir?: string) {\n const baseDir = dir ?? path.join(os.homedir(), '.email-mcp');\n if (!fs.existsSync(baseDir)) {\n fs.mkdirSync(baseDir, { recursive: true, mode: 0o700 });\n }\n this.filePath = path.join(baseDir, 'credentials.enc');\n }\n\n private read(): StoredData {\n if (!fs.existsSync(this.filePath)) {\n return { accounts: {} };\n }\n const raw = fs.readFileSync(this.filePath, 'utf-8');\n const json = decrypt(raw);\n return JSON.parse(json);\n }\n\n private write(data: StoredData): void {\n const json = JSON.stringify(data);\n const encrypted = encrypt(json);\n fs.writeFileSync(this.filePath, encrypted, { mode: 0o600 });\n }\n\n async save(creds: AccountCredentials): Promise<void> {\n const data = this.read();\n data.accounts[creds.id] = creds;\n this.write(data);\n }\n\n async get(id: string): Promise<AccountCredentials | null> {\n const data = this.read();\n return data.accounts[id] ?? null;\n }\n\n async list(): Promise<AccountCredentials[]> {\n const data = this.read();\n return Object.values(data.accounts);\n }\n\n async remove(id: string): Promise<void> {\n const data = this.read();\n delete data.accounts[id];\n this.write(data);\n }\n}\n", "import http from 'node:http';\n\nconst SUCCESS_HTML = `<!DOCTYPE html>\n<html>\n<head><title>Authorization Successful</title></head>\n<body style=\"font-family: sans-serif; text-align: center; padding: 50px;\">\n <h1>Authorization Successful</h1>\n <p>You can close this window and return to the terminal.</p>\n</body>\n</html>`;\n\nconst ERROR_HTML = `<!DOCTYPE html>\n<html>\n<head><title>Authorization Failed</title></head>\n<body style=\"font-family: sans-serif; text-align: center; padding: 50px;\">\n <h1>Authorization Failed</h1>\n <p>An error occurred during authorization. Please try again.</p>\n</body>\n</html>`;\n\nexport class OAuthCallbackServer {\n private server: http.Server | null = null;\n private resolveCode: ((code: string) => void) | null = null;\n private rejectCode: ((error: Error) => void) | null = null;\n private timeoutMs: number;\n private timeoutHandle: ReturnType<typeof setTimeout> | null = null;\n\n constructor(timeoutMs: number = 120_000) {\n this.timeoutMs = timeoutMs;\n }\n\n start(): Promise<number> {\n return new Promise((resolve, reject) => {\n this.server = http.createServer((req, res) => {\n const url = new URL(req.url || '/', `http://localhost`);\n\n if (url.pathname === '/callback' || url.pathname === '/') {\n const code = url.searchParams.get('code');\n const error = url.searchParams.get('error');\n\n if (code) {\n res.writeHead(200, { 'Content-Type': 'text/html' });\n res.end(SUCCESS_HTML);\n this.resolveCode?.(code);\n } else {\n res.writeHead(400, { 'Content-Type': 'text/html' });\n res.end(ERROR_HTML);\n this.rejectCode?.(new Error(`OAuth error: ${error || 'no code received'}`));\n }\n } else {\n res.writeHead(404);\n res.end('Not Found');\n }\n });\n\n this.server.listen(0, () => {\n const addr = this.server!.address();\n if (addr && typeof addr === 'object') {\n resolve(addr.port);\n } else {\n reject(new Error('Failed to get server port'));\n }\n });\n\n this.server.on('error', reject);\n });\n }\n\n waitForCode(): Promise<string> {\n return new Promise<string>((resolve, reject) => {\n this.resolveCode = (code: string) => {\n if (this.timeoutHandle) clearTimeout(this.timeoutHandle);\n resolve(code);\n };\n this.rejectCode = (error: Error) => {\n if (this.timeoutHandle) clearTimeout(this.timeoutHandle);\n reject(error);\n };\n\n this.timeoutHandle = setTimeout(() => {\n this.shutdown();\n reject(new Error('OAuth callback timeout \u2014 no response received'));\n }, this.timeoutMs);\n });\n }\n\n shutdown(): void {\n if (this.timeoutHandle) {\n clearTimeout(this.timeoutHandle);\n this.timeoutHandle = null;\n }\n if (this.server) {\n this.server.close();\n this.server = null;\n }\n }\n}\n", "import { OAuth2Client } from 'google-auth-library';\nimport crypto from 'node:crypto';\nimport type { OAuthTokens } from '../../models/types.js';\n\nconst GMAIL_SCOPES = [\n 'https://mail.google.com/',\n 'https://www.googleapis.com/auth/gmail.modify',\n];\n\nexport class GmailAuth {\n private clientId: string;\n private clientSecret: string;\n private oauth2Client: OAuth2Client;\n\n constructor(clientId: string, clientSecret: string, redirectUri?: string) {\n this.clientId = clientId;\n this.clientSecret = clientSecret;\n this.oauth2Client = new OAuth2Client(clientId, clientSecret, redirectUri);\n }\n\n getAuthUrl(redirectUri: string): { url: string; codeVerifier: string } {\n const codeVerifier = crypto.randomBytes(32).toString('base64url');\n const codeChallenge = crypto\n .createHash('sha256')\n .update(codeVerifier)\n .digest('base64url');\n\n // Recreate client with the callback redirect URI\n this.oauth2Client = new OAuth2Client(this.clientId, this.clientSecret, redirectUri);\n\n const url = this.oauth2Client.generateAuthUrl({\n access_type: 'offline',\n scope: GMAIL_SCOPES,\n prompt: 'consent',\n code_challenge: codeChallenge,\n code_challenge_method: 'S256',\n });\n\n return { url, codeVerifier };\n }\n\n async exchangeCode(code: string, codeVerifier: string): Promise<OAuthTokens> {\n const { tokens } = await this.oauth2Client.getToken({ code, codeVerifier });\n return {\n access_token: tokens.access_token || '',\n refresh_token: tokens.refresh_token || '',\n expiry: tokens.expiry_date\n ? new Date(tokens.expiry_date).toISOString()\n : '',\n };\n }\n\n async refreshAccessToken(refreshToken: string): Promise<OAuthTokens> {\n this.oauth2Client.setCredentials({ refresh_token: refreshToken });\n const { token } = await this.oauth2Client.getAccessToken();\n return {\n access_token: token || '',\n refresh_token: refreshToken,\n expiry: this.oauth2Client.credentials.expiry_date\n ? new Date(this.oauth2Client.credentials.expiry_date).toISOString()\n : '',\n };\n }\n\n getOAuth2Client(): OAuth2Client {\n return this.oauth2Client;\n }\n\n setCredentials(tokens: OAuthTokens): void {\n this.oauth2Client.setCredentials({\n access_token: tokens.access_token,\n refresh_token: tokens.refresh_token,\n expiry_date: tokens.expiry ? new Date(tokens.expiry).getTime() : undefined,\n });\n }\n}\n", "import fs from 'node:fs';\nimport path from 'node:path';\nimport os from 'node:os';\nimport {\n PublicClientApplication,\n CryptoProvider,\n type AuthenticationResult,\n type ICachePlugin,\n type TokenCacheContext,\n} from '@azure/msal-node';\n\nexport interface OutlookAuthResult {\n accessToken: string;\n expiresOn: Date | null;\n idToken?: string;\n account?: unknown;\n /** MSAL home account ID for subsequent silent token acquisition */\n homeAccountId?: string;\n}\n\n/** Default directory for MSAL cache file */\nconst DEFAULT_CACHE_DIR = path.join(os.homedir(), '.email-mcp');\nconst DEFAULT_CACHE_FILE = path.join(DEFAULT_CACHE_DIR, 'msal-cache.json');\n\n/**\n * Creates a file-based ICachePlugin for persisting MSAL's token cache.\n * This ensures refresh tokens survive process restarts.\n */\nfunction createFileCachePlugin(cacheFilePath: string): ICachePlugin {\n return {\n async beforeCacheAccess(context: TokenCacheContext): Promise<void> {\n if (fs.existsSync(cacheFilePath)) {\n const data = fs.readFileSync(cacheFilePath, 'utf-8');\n context.tokenCache.deserialize(data);\n }\n },\n async afterCacheAccess(context: TokenCacheContext): Promise<void> {\n if (context.cacheHasChanged) {\n const dir = path.dirname(cacheFilePath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true, mode: 0o700 });\n }\n fs.writeFileSync(cacheFilePath, context.tokenCache.serialize(), { mode: 0o600 });\n }\n },\n };\n}\n\nexport class OutlookAuth {\n static readonly AUTHORITY = 'https://login.microsoftonline.com/consumers';\n static readonly SCOPES = ['Mail.ReadWrite', 'Mail.Send', 'offline_access'];\n\n private pca: InstanceType<typeof PublicClientApplication>;\n private cryptoProvider: InstanceType<typeof CryptoProvider>;\n\n constructor(clientId: string, cacheFilePath?: string) {\n this.pca = new PublicClientApplication({\n auth: {\n clientId,\n authority: OutlookAuth.AUTHORITY,\n },\n cache: {\n cachePlugin: createFileCachePlugin(cacheFilePath ?? DEFAULT_CACHE_FILE),\n },\n });\n this.cryptoProvider = new CryptoProvider();\n }\n\n async getAuthUrl(redirectUri: string): Promise<{ url: string; codeVerifier: string }> {\n const { verifier, challenge } = await this.cryptoProvider.generatePkceCodes();\n\n const url = await this.pca.getAuthCodeUrl({\n scopes: OutlookAuth.SCOPES,\n redirectUri,\n codeChallenge: challenge,\n codeChallengeMethod: 'S256',\n });\n\n return { url, codeVerifier: verifier };\n }\n\n async exchangeCode(\n code: string,\n codeVerifier: string,\n redirectUri: string\n ): Promise<OutlookAuthResult> {\n const result: AuthenticationResult = await this.pca.acquireTokenByCode({\n code,\n codeVerifier,\n scopes: OutlookAuth.SCOPES,\n redirectUri,\n });\n\n return {\n accessToken: result.accessToken,\n expiresOn: result.expiresOn,\n idToken: result.idToken,\n account: result.account,\n homeAccountId: result.account?.homeAccountId,\n };\n }\n\n /**\n * Silently refresh the access token using MSAL's persisted cache.\n * This is the preferred refresh method \u2014 it uses the cached refresh token\n * automatically via acquireTokenSilent().\n */\n async refreshTokenSilent(homeAccountId: string): Promise<OutlookAuthResult> {\n const account = await this.pca.getTokenCache().getAccountByHomeId(homeAccountId);\n\n if (!account) {\n throw new Error(\n 'No cached MSAL account found \u2014 re-authenticate via setup wizard'\n );\n }\n\n const result = await this.pca.acquireTokenSilent({\n account,\n scopes: OutlookAuth.SCOPES,\n });\n\n return {\n accessToken: result.accessToken,\n expiresOn: result.expiresOn,\n homeAccountId: result.account?.homeAccountId ?? homeAccountId,\n };\n }\n\n /**\n * @deprecated Use refreshTokenSilent() instead.\n * Kept for backward compatibility with credentials that have a stored refresh token.\n */\n async refreshToken(refreshToken: string): Promise<OutlookAuthResult> {\n const result = await this.pca.acquireTokenByRefreshToken({\n refreshToken,\n scopes: OutlookAuth.SCOPES,\n });\n\n if (!result) {\n throw new Error('Failed to refresh Outlook token');\n }\n\n return {\n accessToken: result.accessToken,\n expiresOn: result.expiresOn,\n };\n }\n}\n", "export const ProviderType = {\n Gmail: 'gmail',\n Outlook: 'outlook',\n ICloud: 'icloud',\n IMAP: 'imap',\n} as const;\n\nexport type ProviderTypeValue = (typeof ProviderType)[keyof typeof ProviderType];\n\nexport const FolderType = {\n Inbox: 'inbox',\n Sent: 'sent',\n Drafts: 'drafts',\n Trash: 'trash',\n Spam: 'spam',\n Archive: 'archive',\n Other: 'other',\n} as const;\n\nexport type FolderTypeValue = (typeof FolderType)[keyof typeof FolderType];\n\nexport function isProviderSupported(provider: string): provider is ProviderTypeValue {\n return Object.values(ProviderType).includes(provider as ProviderTypeValue);\n}\n\nexport interface Contact {\n name?: string;\n email: string;\n}\n\nexport interface AttachmentMeta {\n id: string;\n filename: string;\n contentType: string;\n size: number;\n}\n\nexport interface Email {\n id: string;\n accountId: string;\n threadId?: string;\n folder: string;\n from: Contact;\n to: Contact[];\n cc?: Contact[];\n bcc?: Contact[];\n subject: string;\n date: string;\n body: { text?: string; html?: string };\n snippet?: string;\n attachments: AttachmentMeta[];\n labels?: string[];\n categories?: string[];\n flags: {\n read: boolean;\n starred: boolean;\n flagged: boolean;\n draft: boolean;\n };\n headers?: Record<string, string>;\n truncated?: boolean;\n}\n\nexport interface Folder {\n id: string;\n name: string;\n path: string;\n type?: FolderTypeValue;\n unreadCount?: number;\n totalCount?: number;\n children?: Folder[];\n}\n\nexport interface Thread {\n id: string;\n subject: string;\n participants: Contact[];\n messageCount: number;\n messages: Email[];\n lastMessageDate: string;\n}\n\nexport interface SearchQuery {\n folder?: string;\n from?: string;\n to?: string;\n subject?: string;\n body?: string;\n since?: string;\n before?: string;\n unreadOnly?: boolean;\n starredOnly?: boolean;\n hasAttachment?: boolean;\n limit?: number;\n offset?: number;\n returnBody?: boolean;\n}\n\nexport interface Account {\n id: string;\n name: string;\n provider: ProviderTypeValue;\n email: string;\n connected: boolean;\n}\n\nexport interface OAuthTokens {\n access_token: string;\n refresh_token: string;\n expiry: string;\n /** MSAL home account ID for acquireTokenSilent (Outlook only) */\n msal_home_account_id?: string;\n}\n\nexport interface PasswordCredentials {\n password: string;\n host: string;\n port: number;\n tls: boolean;\n smtpHost?: string;\n smtpPort?: number;\n}\n\nexport interface AccountCredentials {\n id: string;\n name: string;\n provider: ProviderTypeValue;\n email: string;\n oauth?: OAuthTokens;\n password?: PasswordCredentials;\n}\n\nexport interface ProviderError {\n success: false;\n error: string;\n provider?: string;\n supportedProviders?: string[];\n}\n\nexport interface ProviderSuccess<T> {\n success: true;\n data: T;\n}\n\nexport type ProviderResult<T> = ProviderSuccess<T> | ProviderError;\n\nexport interface BatchResult {\n succeeded: string[];\n failed: Array<{ id: string; error: string }>;\n}\n", "import { google } from 'googleapis';\nimport { OAuth2Client } from 'google-auth-library';\nimport type { gmail_v1 } from 'googleapis';\nimport type { EmailProvider, SendEmailParams } from '../provider.js';\nimport type {\n Email,\n Folder,\n Thread,\n SearchQuery,\n AttachmentMeta,\n AccountCredentials,\n ProviderTypeValue,\n BatchResult,\n} from '../../models/types.js';\nimport { ProviderType } from '../../models/types.js';\nimport { mapGmailLabel, mapGmailMessage, buildGmailQuery } from './mapper.js';\n\nexport class GmailAdapter implements EmailProvider {\n readonly providerType: ProviderTypeValue = ProviderType.Gmail;\n private gmail: gmail_v1.Gmail | null = null;\n private accountId: string = '';\n private email: string = '';\n\n async connect(credentials: AccountCredentials): Promise<void> {\n if (!credentials.oauth) {\n throw new Error('Gmail adapter requires OAuth credentials');\n }\n this.accountId = credentials.id;\n this.email = credentials.email;\n\n const auth = new OAuth2Client();\n auth.setCredentials({\n access_token: credentials.oauth.access_token,\n refresh_token: credentials.oauth.refresh_token,\n expiry_date: credentials.oauth.expiry\n ? new Date(credentials.oauth.expiry).getTime()\n : undefined,\n });\n\n this.gmail = google.gmail({ version: 'v1', auth });\n }\n\n async disconnect(): Promise<void> {\n this.gmail = null;\n }\n\n async testConnection(): Promise<{ success: boolean; folderCount: number; error?: string }> {\n try {\n const folders = await this.listFolders();\n return { success: true, folderCount: folders.length };\n } catch (error: any) {\n return { success: false, folderCount: 0, error: error.message };\n }\n }\n\n private ensureConnected(): gmail_v1.Gmail {\n if (!this.gmail) throw new Error('Not connected');\n return this.gmail;\n }\n\n async listFolders(): Promise<Folder[]> {\n const gmail = this.ensureConnected();\n const res = await gmail.users.labels.list({ userId: 'me' });\n const labels = res.data.labels || [];\n return labels.map(mapGmailLabel);\n }\n\n async createFolder(name: string): Promise<Folder> {\n const gmail = this.ensureConnected();\n const res = await gmail.users.labels.create({\n userId: 'me',\n requestBody: { name },\n });\n return mapGmailLabel(res.data);\n }\n\n async search(query: SearchQuery): Promise<Email[]> {\n const gmail = this.ensureConnected();\n const q = buildGmailQuery(query);\n\n const params: any = {\n userId: 'me',\n maxResults: query.limit || 20,\n };\n\n if (q) params.q = q;\n if (query.folder) params.labelIds = [query.folder];\n\n const res = await gmail.users.messages.list(params);\n const messages = res.data.messages || [];\n\n if (messages.length === 0) return [];\n\n // Fetch full message details for each result\n const emails: Email[] = [];\n for (const msg of messages) {\n const full = await gmail.users.messages.get({\n userId: 'me',\n id: msg.id!,\n format: 'full',\n });\n emails.push(mapGmailMessage(full.data, this.accountId));\n }\n\n return emails;\n }\n\n async getEmail(id: string): Promise<Email> {\n const gmail = this.ensureConnected();\n const res = await gmail.users.messages.get({\n userId: 'me',\n id,\n format: 'full',\n });\n return mapGmailMessage(res.data, this.accountId);\n }\n\n async getThread(threadId: string): Promise<Thread> {\n const gmail = this.ensureConnected();\n const res = await gmail.users.threads.get({\n userId: 'me',\n id: threadId,\n format: 'full',\n });\n\n const gmailMessages = res.data.messages || [];\n const messages = gmailMessages.map((msg: any) =>\n mapGmailMessage(msg, this.accountId),\n );\n\n // Collect unique participants\n const participantMap = new Map<string, { name?: string; email: string }>();\n for (const msg of messages) {\n participantMap.set(msg.from.email, msg.from);\n for (const to of msg.to) {\n participantMap.set(to.email, to);\n }\n }\n\n return {\n id: threadId,\n subject: messages[0]?.subject || '(no subject)',\n participants: Array.from(participantMap.values()),\n messageCount: messages.length,\n messages,\n lastMessageDate: messages[messages.length - 1]?.date || new Date().toISOString(),\n };\n }\n\n async getAttachment(\n emailId: string,\n attachmentId: string,\n ): Promise<{ data: Buffer; meta: AttachmentMeta }> {\n const gmail = this.ensureConnected();\n\n // Get the attachment data\n const res = await gmail.users.messages.attachments.get({\n userId: 'me',\n messageId: emailId,\n id: attachmentId,\n });\n\n // Get the email to find attachment metadata\n const email = await this.getEmail(emailId);\n const attachment = email.attachments.find((a) => a.id === attachmentId);\n\n return {\n data: Buffer.from(res.data.data || '', 'base64url'),\n meta: attachment || {\n id: attachmentId,\n filename: 'unknown',\n contentType: 'application/octet-stream',\n size: res.data.size || 0,\n },\n };\n }\n\n async sendEmail(params: SendEmailParams): Promise<{ id: string; threadId?: string }> {\n const gmail = this.ensureConnected();\n const raw = this.buildRfc2822(params);\n\n const res = await gmail.users.messages.send({\n userId: 'me',\n requestBody: { raw },\n });\n\n return {\n id: res.data.id || '',\n threadId: res.data.threadId || undefined,\n };\n }\n\n async createDraft(params: SendEmailParams): Promise<{ id: string }> {\n const gmail = this.ensureConnected();\n const raw = this.buildRfc2822(params);\n\n const res = await gmail.users.drafts.create({\n userId: 'me',\n requestBody: {\n message: { raw },\n },\n });\n\n return { id: res.data.id || '' };\n }\n\n async listDrafts(limit?: number, _offset?: number): Promise<Email[]> {\n const gmail = this.ensureConnected();\n\n const res = await gmail.users.drafts.list({\n userId: 'me',\n maxResults: limit || 20,\n });\n\n const drafts = res.data.drafts || [];\n const emails: Email[] = [];\n\n for (const draft of drafts) {\n const full = await gmail.users.drafts.get({\n userId: 'me',\n id: draft.id!,\n format: 'full',\n });\n if (full.data.message) {\n emails.push(mapGmailMessage(full.data.message, this.accountId));\n }\n }\n\n return emails;\n }\n\n async moveEmail(emailId: string, targetFolder: string, _sourceFolder?: string): Promise<void> {\n const gmail = this.ensureConnected();\n\n // Get current labels to determine source\n const email = await this.getEmail(emailId);\n const currentLabels = email.labels || [];\n\n // Remove folder-type labels, add target\n const systemFolderLabels = ['INBOX', 'SENT', 'TRASH', 'SPAM', 'DRAFT'];\n const removeLabelIds = currentLabels.filter((l) =>\n systemFolderLabels.includes(l),\n );\n\n await gmail.users.messages.modify({\n userId: 'me',\n id: emailId,\n requestBody: {\n addLabelIds: [targetFolder],\n removeLabelIds,\n },\n });\n }\n\n async deleteEmail(emailId: string, permanent?: boolean, _sourceFolder?: string): Promise<void> {\n const gmail = this.ensureConnected();\n\n if (permanent) {\n await gmail.users.messages.delete({ userId: 'me', id: emailId });\n } else {\n await gmail.users.messages.trash({ userId: 'me', id: emailId });\n }\n }\n\n async markEmail(\n emailId: string,\n flags: { read?: boolean; starred?: boolean; flagged?: boolean },\n _sourceFolder?: string,\n ): Promise<void> {\n const gmail = this.ensureConnected();\n const addLabelIds: string[] = [];\n const removeLabelIds: string[] = [];\n\n if (flags.read === true) removeLabelIds.push('UNREAD');\n if (flags.read === false) addLabelIds.push('UNREAD');\n if (flags.starred === true || flags.flagged === true) addLabelIds.push('STARRED');\n if (flags.starred === false || flags.flagged === false) removeLabelIds.push('STARRED');\n\n if (addLabelIds.length > 0 || removeLabelIds.length > 0) {\n await gmail.users.messages.modify({\n userId: 'me',\n id: emailId,\n requestBody: { addLabelIds, removeLabelIds },\n });\n }\n }\n\n async batchDelete(emailIds: string[], permanent?: boolean, _sourceFolder?: string): Promise<BatchResult> {\n const gmail = this.ensureConnected();\n const result: BatchResult = { succeeded: [], failed: [] };\n\n if (permanent) {\n // Gmail batchDelete permanently deletes\n try {\n await gmail.users.messages.batchDelete({\n userId: 'me',\n requestBody: { ids: emailIds },\n });\n result.succeeded = [...emailIds];\n } catch (error: any) {\n // If batch fails, try individually\n for (const id of emailIds) {\n try {\n await gmail.users.messages.delete({ userId: 'me', id });\n result.succeeded.push(id);\n } catch (e: any) {\n result.failed.push({ id, error: e.message });\n }\n }\n }\n } else {\n // Move to trash \u2014 no native batch, but batchModify can add TRASH label\n try {\n await gmail.users.messages.batchModify({\n userId: 'me',\n requestBody: {\n ids: emailIds,\n addLabelIds: ['TRASH'],\n removeLabelIds: ['INBOX'],\n },\n });\n result.succeeded = [...emailIds];\n } catch (error: any) {\n for (const id of emailIds) {\n try {\n await gmail.users.messages.trash({ userId: 'me', id });\n result.succeeded.push(id);\n } catch (e: any) {\n result.failed.push({ id, error: e.message });\n }\n }\n }\n }\n\n return result;\n }\n\n async batchMove(emailIds: string[], targetFolder: string, _sourceFolder?: string): Promise<BatchResult> {\n const gmail = this.ensureConnected();\n const result: BatchResult = { succeeded: [], failed: [] };\n\n const systemFolderLabels = ['INBOX', 'SENT', 'TRASH', 'SPAM', 'DRAFT'];\n // Determine which labels to remove (remove all system folder labels)\n const removeLabelIds = systemFolderLabels;\n\n try {\n await gmail.users.messages.batchModify({\n userId: 'me',\n requestBody: {\n ids: emailIds,\n addLabelIds: [targetFolder],\n removeLabelIds,\n },\n });\n result.succeeded = [...emailIds];\n } catch (error: any) {\n // Fallback to individual moves\n for (const id of emailIds) {\n try {\n await this.moveEmail(id, targetFolder);\n result.succeeded.push(id);\n } catch (e: any) {\n result.failed.push({ id, error: e.message });\n }\n }\n }\n\n return result;\n }\n\n async batchMark(emailIds: string[], flags: { read?: boolean; starred?: boolean; flagged?: boolean }, _sourceFolder?: string): Promise<BatchResult> {\n const gmail = this.ensureConnected();\n const result: BatchResult = { succeeded: [], failed: [] };\n\n const addLabelIds: string[] = [];\n const removeLabelIds: string[] = [];\n\n if (flags.read === true) removeLabelIds.push('UNREAD');\n if (flags.read === false) addLabelIds.push('UNREAD');\n if (flags.starred === true || flags.flagged === true) addLabelIds.push('STARRED');\n if (flags.starred === false || flags.flagged === false) removeLabelIds.push('STARRED');\n\n if (addLabelIds.length === 0 && removeLabelIds.length === 0) {\n result.succeeded = [...emailIds];\n return result;\n }\n\n try {\n await gmail.users.messages.batchModify({\n userId: 'me',\n requestBody: { ids: emailIds, addLabelIds, removeLabelIds },\n });\n result.succeeded = [...emailIds];\n } catch (error: any) {\n for (const id of emailIds) {\n try {\n await this.markEmail(id, flags);\n result.succeeded.push(id);\n } catch (e: any) {\n result.failed.push({ id, error: e.message });\n }\n }\n }\n\n return result;\n }\n\n async addLabels(emailId: string, labels: string[]): Promise<void> {\n const gmail = this.ensureConnected();\n await gmail.users.messages.modify({\n userId: 'me',\n id: emailId,\n requestBody: { addLabelIds: labels },\n });\n }\n\n async removeLabels(emailId: string, labels: string[]): Promise<void> {\n const gmail = this.ensureConnected();\n await gmail.users.messages.modify({\n userId: 'me',\n id: emailId,\n requestBody: { removeLabelIds: labels },\n });\n }\n\n async listLabels(): Promise<Array<{ id: string; name: string; messageCount: number }>> {\n const gmail = this.ensureConnected();\n const res = await gmail.users.labels.list({ userId: 'me' });\n const labels = res.data.labels || [];\n return labels.map((label: any) => ({\n id: label.id,\n name: label.name,\n messageCount: label.messagesTotal ?? 0,\n }));\n }\n\n private buildRfc2822(params: SendEmailParams): string {\n const lines: string[] = [];\n lines.push(`From: ${this.email}`);\n lines.push(\n `To: ${params.to.map((c) => (c.name ? `\"${c.name}\" <${c.email}>` : c.email)).join(', ')}`,\n );\n if (params.cc?.length) {\n lines.push(`Cc: ${params.cc.map((c) => c.email).join(', ')}`);\n }\n if (params.bcc?.length) {\n lines.push(`Bcc: ${params.bcc.map((c) => c.email).join(', ')}`);\n }\n lines.push(`Subject: ${params.subject}`);\n if (params.inReplyTo) {\n lines.push(`In-Reply-To: ${params.inReplyTo}`);\n }\n if (params.references?.length) {\n lines.push(`References: ${params.references.join(' ')}`);\n }\n lines.push('MIME-Version: 1.0');\n lines.push('Content-Type: text/plain; charset=UTF-8');\n lines.push('');\n lines.push(params.body.text || params.body.html || '');\n\n return Buffer.from(lines.join('\\r\\n')).toString('base64url');\n }\n}\n", "import type {\n Folder,\n Email,\n Contact,\n AttachmentMeta,\n FolderTypeValue,\n SearchQuery,\n} from '../../models/types.js';\nimport { FolderType } from '../../models/types.js';\n\nconst LABEL_TYPE_MAP: Record<string, FolderTypeValue> = {\n INBOX: FolderType.Inbox,\n SENT: FolderType.Sent,\n DRAFT: FolderType.Drafts,\n TRASH: FolderType.Trash,\n SPAM: FolderType.Spam,\n STARRED: FolderType.Other,\n IMPORTANT: FolderType.Other,\n CATEGORY_PERSONAL: FolderType.Other,\n CATEGORY_SOCIAL: FolderType.Other,\n CATEGORY_PROMOTIONS: FolderType.Other,\n CATEGORY_UPDATES: FolderType.Other,\n CATEGORY_FORUMS: FolderType.Other,\n};\n\nexport function mapGmailLabel(label: any): Folder {\n return {\n id: label.id,\n name: label.name,\n path: label.id,\n type: LABEL_TYPE_MAP[label.id] ?? FolderType.Other,\n totalCount: label.messagesTotal ?? 0,\n unreadCount: label.messagesUnread ?? 0,\n };\n}\n\nfunction getHeader(headers: any[], name: string): string | undefined {\n const header = headers?.find(\n (h: any) => h.name.toLowerCase() === name.toLowerCase(),\n );\n return header?.value;\n}\n\nfunction parseContact(raw: string): Contact {\n // Formats: \"Name <email>\" or \"email\"\n const match = raw.match(/^\"?(.+?)\"?\\s*<(.+?)>$/);\n if (match) {\n return { name: match[1].trim(), email: match[2].trim() };\n }\n return { email: raw.trim() };\n}\n\nfunction parseContacts(raw: string | undefined): Contact[] {\n if (!raw) return [];\n return raw.split(',').map((s) => parseContact(s.trim()));\n}\n\nfunction decodeBase64Url(data: string): string {\n return Buffer.from(data, 'base64url').toString('utf-8');\n}\n\nfunction extractBody(\n payload: any,\n): { text?: string; html?: string } {\n const result: { text?: string; html?: string } = {};\n\n if (!payload) return result;\n\n // Single-part message\n if (payload.body?.data && payload.mimeType) {\n const decoded = decodeBase64Url(payload.body.data);\n if (payload.mimeType === 'text/plain') result.text = decoded;\n if (payload.mimeType === 'text/html') result.html = decoded;\n return result;\n }\n\n // Multi-part message\n if (payload.parts) {\n for (const part of payload.parts) {\n if (part.mimeType === 'text/plain' && part.body?.data) {\n result.text = decodeBase64Url(part.body.data);\n } else if (part.mimeType === 'text/html' && part.body?.data) {\n result.html = decodeBase64Url(part.body.data);\n } else if (part.parts) {\n // Nested multipart (e.g. multipart/alternative inside multipart/mixed)\n const nested = extractBody(part);\n if (nested.text && !result.text) result.text = nested.text;\n if (nested.html && !result.html) result.html = nested.html;\n }\n }\n }\n\n return result;\n}\n\nfunction extractAttachments(payload: any): AttachmentMeta[] {\n const attachments: AttachmentMeta[] = [];\n\n if (!payload?.parts) return attachments;\n\n for (const part of payload.parts) {\n if (part.filename && part.body?.attachmentId) {\n attachments.push({\n id: part.body.attachmentId,\n filename: part.filename,\n contentType: part.mimeType || 'application/octet-stream',\n size: part.body.size || 0,\n });\n }\n // Recurse into nested parts\n if (part.parts) {\n attachments.push(...extractAttachments(part));\n }\n }\n\n return attachments;\n}\n\nexport function mapGmailMessage(message: any, accountId: string): Email {\n const headers = message.payload?.headers || [];\n const labelIds: string[] = message.labelIds || [];\n\n const from = parseContact(getHeader(headers, 'From') || 'unknown@unknown.com');\n const to = parseContacts(getHeader(headers, 'To'));\n const cc = parseContacts(getHeader(headers, 'Cc'));\n const bcc = parseContacts(getHeader(headers, 'Bcc'));\n const subject = getHeader(headers, 'Subject') || '(no subject)';\n const dateStr = getHeader(headers, 'Date');\n const date = dateStr\n ? new Date(dateStr).toISOString()\n : new Date(parseInt(message.internalDate, 10)).toISOString();\n\n const body = extractBody(message.payload);\n const attachments = extractAttachments(message.payload);\n\n // Determine folder from labels\n let folder = 'INBOX';\n for (const labelId of labelIds) {\n if (LABEL_TYPE_MAP[labelId] && labelId !== 'STARRED' && labelId !== 'IMPORTANT') {\n folder = labelId;\n break;\n }\n }\n\n return {\n id: message.id,\n accountId,\n threadId: message.threadId,\n folder,\n from,\n to,\n cc: cc.length > 0 ? cc : undefined,\n bcc: bcc.length > 0 ? bcc : undefined,\n subject,\n date,\n body,\n snippet: message.snippet,\n attachments,\n labels: labelIds,\n flags: {\n read: !labelIds.includes('UNREAD'),\n starred: labelIds.includes('STARRED'),\n flagged: labelIds.includes('STARRED'),\n draft: labelIds.includes('DRAFT'),\n },\n };\n}\n\nexport function buildGmailQuery(query: SearchQuery): string {\n const parts: string[] = [];\n\n if (query.from) parts.push(`from:${query.from}`);\n if (query.to) parts.push(`to:${query.to}`);\n if (query.subject) parts.push(`subject:${query.subject}`);\n if (query.body) parts.push(query.body);\n if (query.since) {\n const d = new Date(query.since);\n parts.push(`after:${d.getFullYear()}/${d.getMonth() + 1}/${d.getDate()}`);\n }\n if (query.before) {\n const d = new Date(query.before);\n parts.push(`before:${d.getFullYear()}/${d.getMonth() + 1}/${d.getDate()}`);\n }\n if (query.unreadOnly) parts.push('is:unread');\n if (query.starredOnly) parts.push('is:starred');\n if (query.hasAttachment) parts.push('has:attachment');\n\n return parts.join(' ');\n}\n", "import { Client } from '@microsoft/microsoft-graph-client';\nimport type { EmailProvider, SendEmailParams } from '../provider.js';\nimport type {\n Email,\n Folder,\n Thread,\n SearchQuery,\n AttachmentMeta,\n AccountCredentials,\n ProviderTypeValue,\n BatchResult,\n} from '../../models/types.js';\nimport { ProviderType } from '../../models/types.js';\nimport { mapGraphFolder, mapGraphMessage, mapGraphAttachment, buildGraphFilter, resolveWellKnownFolder } from './mapper.js';\n\nexport class OutlookAdapter implements EmailProvider {\n readonly providerType: ProviderTypeValue = ProviderType.Outlook;\n private client: InstanceType<typeof Client> | null = null;\n private accountId: string = '';\n private accessToken: string = '';\n private folderIdCache: Map<string, string> = new Map();\n\n async connect(credentials: AccountCredentials): Promise<void> {\n if (!credentials.oauth) {\n throw new Error('Outlook adapter requires OAuth credentials');\n }\n this.accountId = credentials.id;\n this.accessToken = credentials.oauth.access_token;\n\n const client = Client.init({\n authProvider: (done) => {\n done(null, this.accessToken);\n },\n });\n\n // Wrap the api() method to inject `Prefer: IdType=\"ImmutableId\"` on every\n // request. This makes the Graph API return stable, immutable message IDs\n // that survive moves across folders. Without this, older Outlook.com\n // messages can have IDs in a shorter format that the API rejects as\n // \"Id is malformed\" when the message has been moved internally.\n const originalApi = client.api.bind(client);\n client.api = (path: string) => {\n return originalApi(path).header('Prefer', 'IdType=\"ImmutableId\"');\n };\n\n this.client = client;\n }\n\n async disconnect(): Promise<void> {\n this.client = null;\n this.accessToken = '';\n }\n\n async testConnection(): Promise<{ success: boolean; folderCount: number; error?: string }> {\n try {\n const folders = await this.listFolders();\n return { success: true, folderCount: folders.length };\n } catch (error: any) {\n return { success: false, folderCount: 0, error: error.message };\n }\n }\n\n private ensureClient(): InstanceType<typeof Client> {\n if (!this.client) throw new Error('Not connected');\n return this.client;\n }\n\n /**\n * Resolves a folder name/display name/ID to a valid Graph API folder reference.\n * Handles well-known names, localized display names, and raw folder IDs.\n */\n async resolveFolder(nameOrId: string): Promise<string> {\n // Check well-known name mappings (handles localized display names)\n const wellKnown = resolveWellKnownFolder(nameOrId);\n if (wellKnown) return wellKnown;\n\n // Check cache\n const cached = this.folderIdCache.get(nameOrId.toLowerCase());\n if (cached) return cached;\n\n // Looks like a raw folder ID (long base64 string) \u2014 use as-is\n if (nameOrId.length > 40) return nameOrId;\n\n // Fall back to listing folders and matching by display name\n const client = this.ensureClient();\n const response = await client.api('/me/mailFolders').get();\n const folders = response.value || [];\n for (const folder of folders) {\n // Cache all folders while we're at it\n this.folderIdCache.set(folder.displayName.toLowerCase(), folder.id);\n if (folder.displayName.toLowerCase() === nameOrId.toLowerCase()) {\n return folder.id;\n }\n }\n\n // Nothing matched \u2014 return original value and let Graph API error naturally\n return nameOrId;\n }\n\n async listFolders(): Promise<Folder[]> {\n const client = this.ensureClient();\n const response = await client.api('/me/mailFolders').get();\n return (response.value || []).map(mapGraphFolder);\n }\n\n async createFolder(name: string, parentPath?: string): Promise<Folder> {\n const client = this.ensureClient();\n const endpoint = parentPath\n ? `/me/mailFolders/${encodeURIComponent(parentPath)}/childFolders`\n : '/me/mailFolders';\n const result = await client.api(endpoint).post({ displayName: name });\n return mapGraphFolder(result);\n }\n\n async search(query: SearchQuery): Promise<Email[]> {\n const client = this.ensureClient();\n let endpoint = '/me/messages';\n if (query.folder) {\n const folderId = await this.resolveFolder(query.folder);\n endpoint = `/me/mailFolders/${encodeURIComponent(folderId)}/messages`;\n }\n\n const { filter, search } = buildGraphFilter(query);\n let request = client.api(endpoint);\n\n // When body is not needed, use $select to exclude it \u2014 dramatically reduces payload\n if (!query.returnBody) {\n request = request.select('id,conversationId,parentFolderId,from,toRecipients,ccRecipients,bccRecipients,subject,receivedDateTime,bodyPreview,hasAttachments,isRead,importance,flag,isDraft,categories');\n }\n\n if (filter) {\n request = request.filter(filter);\n }\n if (search) {\n request = request.search(search);\n }\n if (query.limit) {\n request = request.top(query.limit);\n }\n if (query.offset) {\n request = request.skip(query.offset);\n }\n\n request = request.orderby('receivedDateTime desc');\n\n const response = await request.get();\n return (response.value || []).map((msg: any) => mapGraphMessage(msg, this.accountId));\n }\n\n async getEmail(id: string): Promise<Email> {\n const client = this.ensureClient();\n const message = await client.api(`/me/messages/${encodeURIComponent(id)}`).get();\n const email = mapGraphMessage(message, this.accountId);\n\n if (message.hasAttachments) {\n const attachments = await client.api(`/me/messages/${encodeURIComponent(id)}/attachments`).get();\n email.attachments = (attachments.value || []).map(mapGraphAttachment);\n }\n\n return email;\n }\n\n async getThread(threadId: string): Promise<Thread> {\n const client = this.ensureClient();\n const response = await client\n .api('/me/messages')\n .filter(`conversationId eq '${threadId}'`)\n .orderby('receivedDateTime asc')\n .get();\n\n const messages: Email[] = (response.value || []).map((msg: any) =>\n mapGraphMessage(msg, this.accountId)\n );\n\n const participantMap = new Map<string, { name?: string; email: string }>();\n for (const msg of messages) {\n participantMap.set(msg.from.email, msg.from);\n for (const to of msg.to) {\n participantMap.set(to.email, to);\n }\n }\n\n return {\n id: threadId,\n subject: messages[0]?.subject || '',\n participants: Array.from(participantMap.values()),\n messageCount: messages.length,\n messages,\n lastMessageDate: messages[messages.length - 1]?.date || '',\n };\n }\n\n async getAttachment(\n emailId: string,\n attachmentId: string\n ): Promise<{ data: Buffer; meta: AttachmentMeta }> {\n const client = this.ensureClient();\n const attachment = await client\n .api(`/me/messages/${encodeURIComponent(emailId)}/attachments/${encodeURIComponent(attachmentId)}`)\n .get();\n\n return {\n data: Buffer.from(attachment.contentBytes || '', 'base64'),\n meta: mapGraphAttachment(attachment),\n };\n }\n\n async sendEmail(params: SendEmailParams): Promise<{ id: string; threadId?: string }> {\n const client = this.ensureClient();\n const message = this.buildGraphMessage(params);\n\n const payload: any = { message };\n if (params.attachments?.length) {\n payload.message.attachments = params.attachments.map((att) => ({\n '@odata.type': '#microsoft.graph.fileAttachment',\n name: att.filename,\n contentType: att.contentType,\n contentBytes: att.content.toString('base64'),\n }));\n }\n\n await client.api('/me/sendMail').post(payload);\n\n return { id: `sent-${Date.now()}` };\n }\n\n async createDraft(params: SendEmailParams): Promise<{ id: string }> {\n const client = this.ensureClient();\n const message = this.buildGraphMessage(params);\n\n const result = await client.api('/me/messages').post(message);\n return { id: result.id };\n }\n\n async listDrafts(limit?: number, offset?: number): Promise<Email[]> {\n const client = this.ensureClient();\n let request = client.api('/me/mailFolders/drafts/messages');\n\n if (limit !== undefined) {\n request = request.top(limit);\n }\n if (offset !== undefined) {\n request = request.skip(offset);\n }\n\n request = request.orderby('receivedDateTime desc');\n\n const response = await request.get();\n return (response.value || []).map((msg: any) => mapGraphMessage(msg, this.accountId));\n }\n\n async moveEmail(emailId: string, targetFolder: string, _sourceFolder?: string): Promise<void> {\n const client = this.ensureClient();\n const destinationId = await this.resolveFolder(targetFolder);\n await client.api(`/me/messages/${encodeURIComponent(emailId)}/move`).post({\n destinationId,\n });\n }\n\n async deleteEmail(emailId: string, permanent?: boolean, _sourceFolder?: string): Promise<void> {\n const client = this.ensureClient();\n if (permanent) {\n await client.api(`/me/messages/${encodeURIComponent(emailId)}`).delete();\n } else {\n await client.api(`/me/messages/${encodeURIComponent(emailId)}/move`).post({\n destinationId: 'deleteditems',\n });\n }\n }\n\n async markEmail(\n emailId: string,\n flags: { read?: boolean; starred?: boolean; flagged?: boolean },\n _sourceFolder?: string,\n ): Promise<void> {\n const client = this.ensureClient();\n const patch: any = {};\n\n if (flags.read !== undefined) {\n patch.isRead = flags.read;\n }\n if (flags.starred !== undefined) {\n patch.importance = flags.starred ? 'high' : 'normal';\n }\n if (flags.flagged !== undefined) {\n patch.flag = { flagStatus: flags.flagged ? 'flagged' : 'notFlagged' };\n }\n\n await client.api(`/me/messages/${encodeURIComponent(emailId)}`).patch(patch);\n }\n\n private async executeBatch(requests: Array<{ id: string; method: string; url: string; body?: any }>): Promise<Map<string, { status: number; body?: any }>> {\n const client = this.ensureClient();\n const results = new Map<string, { status: number; body?: any }>();\n\n // Graph API allows max 20 requests per batch\n for (let i = 0; i < requests.length; i += 20) {\n const chunk = requests.slice(i, i + 20);\n\n // Use sequential numeric IDs for the batch request `id` field instead of\n // raw message IDs. The batch `id` is a correlation value only \u2014 it is\n // case-INsensitive and must be unique within the batch. Outlook message\n // IDs are long base64 strings that can collide under case-insensitive\n // comparison, causing \"Id is malformed\" or duplicate-id errors.\n const indexToId = new Map<string, string>();\n const batchPayload = {\n requests: chunk.map((req, idx) => {\n const batchId = String(idx);\n indexToId.set(batchId, req.id);\n return {\n id: batchId,\n method: req.method,\n url: req.url,\n ...(req.body ? { body: req.body, headers: { 'Content-Type': 'application/json' } } : {}),\n };\n }),\n };\n\n const response = await client.api('/$batch').post(batchPayload);\n for (const resp of response.responses || []) {\n // Map the sequential batch id back to the original email id\n const originalId = indexToId.get(resp.id) ?? resp.id;\n results.set(originalId, { status: resp.status, body: resp.body });\n }\n }\n\n return results;\n }\n\n async batchDelete(emailIds: string[], permanent?: boolean, _sourceFolder?: string): Promise<BatchResult> {\n const result: BatchResult = { succeeded: [], failed: [] };\n\n if (permanent) {\n const requests = emailIds.map((id) => ({\n id,\n method: 'DELETE',\n url: `/me/messages/${encodeURIComponent(id)}`,\n }));\n const responses = await this.executeBatch(requests);\n for (const [id, resp] of responses) {\n if (resp.status >= 200 && resp.status < 300) {\n result.succeeded.push(id);\n } else {\n result.failed.push({ id, error: resp.body?.error?.message || `HTTP ${resp.status}` });\n }\n }\n } else {\n const requests = emailIds.map((id) => ({\n id,\n method: 'POST',\n url: `/me/messages/${encodeURIComponent(id)}/move`,\n body: { destinationId: 'deleteditems' },\n }));\n const responses = await this.executeBatch(requests);\n for (const [id, resp] of responses) {\n if (resp.status >= 200 && resp.status < 300) {\n result.succeeded.push(id);\n } else {\n result.failed.push({ id, error: resp.body?.error?.message || `HTTP ${resp.status}` });\n }\n }\n }\n\n return result;\n }\n\n async batchMove(emailIds: string[], targetFolder: string, _sourceFolder?: string): Promise<BatchResult> {\n const result: BatchResult = { succeeded: [], failed: [] };\n const destinationId = await this.resolveFolder(targetFolder);\n\n const requests = emailIds.map((id) => ({\n id,\n method: 'POST',\n url: `/me/messages/${encodeURIComponent(id)}/move`,\n body: { destinationId },\n }));\n\n const responses = await this.executeBatch(requests);\n for (const [id, resp] of responses) {\n if (resp.status >= 200 && resp.status < 300) {\n result.succeeded.push(id);\n } else {\n result.failed.push({ id, error: resp.body?.error?.message || `HTTP ${resp.status}` });\n }\n }\n\n return result;\n }\n\n async batchMark(emailIds: string[], flags: { read?: boolean; starred?: boolean; flagged?: boolean }, _sourceFolder?: string): Promise<BatchResult> {\n const result: BatchResult = { succeeded: [], failed: [] };\n const patch: any = {};\n\n if (flags.read !== undefined) patch.isRead = flags.read;\n if (flags.starred !== undefined) patch.importance = flags.starred ? 'high' : 'normal';\n if (flags.flagged !== undefined) patch.flag = { flagStatus: flags.flagged ? 'flagged' : 'notFlagged' };\n\n if (Object.keys(patch).length === 0) {\n result.succeeded = [...emailIds];\n return result;\n }\n\n const requests = emailIds.map((id) => ({\n id,\n method: 'PATCH',\n url: `/me/messages/${encodeURIComponent(id)}`,\n body: patch,\n }));\n\n const responses = await this.executeBatch(requests);\n for (const [id, resp] of responses) {\n if (resp.status >= 200 && resp.status < 300) {\n result.succeeded.push(id);\n } else {\n result.failed.push({ id, error: resp.body?.error?.message || `HTTP ${resp.status}` });\n }\n }\n\n return result;\n }\n\n async getCategories(): Promise<string[]> {\n const client = this.ensureClient();\n const response = await client.api('/me/outlook/masterCategories').get();\n return (response.value || []).map((cat: any) => cat.displayName);\n }\n\n private buildGraphMessage(params: SendEmailParams): any {\n const toGraphRecipient = (contact: { name?: string; email: string }) => ({\n emailAddress: { name: contact.name, address: contact.email },\n });\n\n const bodyContent = params.body.html || params.body.text || '';\n const contentType = params.body.html ? 'html' : 'text';\n\n const message: any = {\n subject: params.subject,\n body: { contentType, content: bodyContent },\n toRecipients: params.to.map(toGraphRecipient),\n };\n\n if (params.cc?.length) {\n message.ccRecipients = params.cc.map(toGraphRecipient);\n }\n if (params.bcc?.length) {\n message.bccRecipients = params.bcc.map(toGraphRecipient);\n }\n\n return message;\n }\n}\n", "import type { Folder, Email, Contact, AttachmentMeta, FolderTypeValue } from '../../models/types.js';\nimport { FolderType } from '../../models/types.js';\n\nconst WELL_KNOWN_FOLDER_MAP: Record<string, FolderTypeValue> = {\n inbox: FolderType.Inbox,\n sentitems: FolderType.Sent,\n drafts: FolderType.Drafts,\n deleteditems: FolderType.Trash,\n junkemail: FolderType.Spam,\n archive: FolderType.Archive,\n};\n\n// Maps localized display names to Graph API well-known folder names\nconst DISPLAY_NAME_TO_WELL_KNOWN: Record<string, string> = {\n // English\n 'inbox': 'inbox',\n 'sent items': 'sentitems',\n 'sent': 'sentitems',\n 'drafts': 'drafts',\n 'deleted items': 'deleteditems',\n 'trash': 'deleteditems',\n 'junk email': 'junkemail',\n 'junk': 'junkemail',\n 'spam': 'junkemail',\n 'archive': 'archive',\n // German\n 'posteingang': 'inbox',\n 'gesendete elemente': 'sentitems',\n 'gesendet': 'sentitems',\n 'entw\u00FCrfe': 'drafts',\n 'gel\u00F6schte elemente': 'deleteditems',\n 'papierkorb': 'deleteditems',\n 'junk-e-mail': 'junkemail',\n 'archiv': 'archive',\n // Spanish\n 'bandeja de entrada': 'inbox',\n 'elementos enviados': 'sentitems',\n 'enviados': 'sentitems',\n 'borradores': 'drafts',\n 'elementos eliminados': 'deleteditems',\n 'correo no deseado': 'junkemail',\n 'archivo': 'archive',\n // French\n 'bo\u00EEte de r\u00E9ception': 'inbox',\n '\u00E9l\u00E9ments envoy\u00E9s': 'sentitems',\n 'brouillons': 'drafts',\n '\u00E9l\u00E9ments supprim\u00E9s': 'deleteditems',\n 'courrier ind\u00E9sirable': 'junkemail',\n 'archives': 'archive',\n};\n\n/**\n * Resolves a display name or well-known alias to a Graph API well-known folder name.\n * Returns undefined if not a recognized name.\n */\nexport function resolveWellKnownFolder(nameOrId: string): string | undefined {\n const lower = nameOrId.toLowerCase().trim();\n // Check if it's already a well-known name\n if (WELL_KNOWN_FOLDER_MAP[lower]) return lower;\n // Check display name mappings\n return DISPLAY_NAME_TO_WELL_KNOWN[lower];\n}\n\nexport function mapGraphFolder(graphFolder: any): Folder {\n const wellKnown = graphFolder.wellKnownName?.toLowerCase();\n return {\n id: graphFolder.id,\n name: graphFolder.displayName,\n path: graphFolder.displayName,\n type: (wellKnown && WELL_KNOWN_FOLDER_MAP[wellKnown]) || FolderType.Other,\n totalCount: graphFolder.totalItemCount,\n unreadCount: graphFolder.unreadItemCount,\n };\n}\n\nfunction mapGraphContact(recipient: any): Contact {\n return {\n name: recipient?.emailAddress?.name || undefined,\n email: recipient?.emailAddress?.address || '',\n };\n}\n\nfunction mapGraphContacts(recipients: any[]): Contact[] {\n if (!recipients) return [];\n return recipients.map(mapGraphContact);\n}\n\nexport function mapGraphMessage(message: any, accountId: string): Email {\n const bodyType = message.body?.contentType?.toLowerCase();\n\n return {\n id: message.id,\n accountId,\n threadId: message.conversationId,\n folder: message.parentFolderId || '',\n from: mapGraphContact(message.from),\n to: mapGraphContacts(message.toRecipients),\n cc: message.ccRecipients?.length ? mapGraphContacts(message.ccRecipients) : undefined,\n bcc: message.bccRecipients?.length ? mapGraphContacts(message.bccRecipients) : undefined,\n subject: message.subject || '(no subject)',\n date: message.receivedDateTime || new Date().toISOString(),\n body: {\n text: bodyType === 'text' ? message.body?.content : undefined,\n html: bodyType === 'html' ? message.body?.content : undefined,\n },\n snippet: message.bodyPreview,\n attachments: [],\n categories: message.categories || [],\n flags: {\n read: message.isRead ?? false,\n starred: message.importance === 'high',\n flagged: message.flag?.flagStatus === 'flagged',\n draft: message.isDraft ?? false,\n },\n };\n}\n\nexport function mapGraphAttachment(attachment: any): AttachmentMeta {\n return {\n id: attachment.id,\n filename: attachment.name || 'unknown',\n contentType: attachment.contentType || 'application/octet-stream',\n size: attachment.size || 0,\n };\n}\n\nexport function buildGraphFilter(query: any): { filter?: string; search?: string } {\n const filters: string[] = [];\n const searchParts: string[] = [];\n\n if (query.from) {\n filters.push(`from/emailAddress/address eq '${query.from}'`);\n }\n if (query.to) {\n filters.push(`toRecipients/any(r:r/emailAddress/address eq '${query.to}')`);\n }\n if (query.unreadOnly) {\n filters.push('isRead eq false');\n }\n if (query.starredOnly) {\n filters.push(\"importance eq 'high'\");\n }\n if (query.hasAttachment) {\n filters.push('hasAttachments eq true');\n }\n if (query.since) {\n filters.push(`receivedDateTime ge ${query.since}`);\n }\n if (query.before) {\n filters.push(`receivedDateTime lt ${query.before}`);\n }\n\n if (query.subject) {\n searchParts.push(`subject:${query.subject}`);\n }\n if (query.body) {\n searchParts.push(`body:${query.body}`);\n }\n\n return {\n filter: filters.length > 0 ? filters.join(' and ') : undefined,\n search: searchParts.length > 0 ? `\"${searchParts.join(' AND ')}\"` : undefined,\n };\n}\n", "import { ImapFlow } from 'imapflow';\nimport { simpleParser } from 'mailparser';\nimport type { EmailProvider, SendEmailParams } from '../provider.js';\nimport type {\n Email,\n Folder,\n Thread,\n SearchQuery,\n AttachmentMeta,\n AccountCredentials,\n ProviderTypeValue,\n PasswordCredentials,\n BatchResult,\n} from '../../models/types.js';\nimport { ProviderType, FolderType } from '../../models/types.js';\nimport { mapImapFolder, mapParsedEmail } from './mapper.js';\nimport { createSmtpTransport, sendViaSmtp } from './smtp.js';\n\n/**\n * Extracts detailed diagnostic information from ImapFlow errors.\n * ImapFlow wraps IMAP server responses in Error objects with extra properties\n * (responseText, responseStatus, serverResponseCode, executedCommand) that\n * are not included in error.message (\"Command failed\"). This helper surfaces\n * those details so callers get actionable error messages instead of opaque ones.\n */\nfunction formatImapError(error: any, context?: string): Error {\n const parts: string[] = [];\n if (context) parts.push(context);\n\n // error.responseText contains the human-readable reason from the IMAP server\n // e.g., \"Mailbox does not exist\" or \"[NONEXISTENT] No such mailbox\"\n const serverMsg = error.responseText || error.responseStatus;\n if (serverMsg) {\n parts.push(serverMsg);\n } else {\n parts.push(error.message || 'Unknown IMAP error');\n }\n\n // Include the server response code if available (e.g., NONEXISTENT, SERVERBUG)\n if (error.serverResponseCode) {\n parts.push(`[${error.serverResponseCode}]`);\n }\n\n // Flag when the server explicitly says the mailbox does not exist\n if (error.mailboxMissing) {\n parts.push('(mailbox does not exist on server)');\n }\n\n const enhanced = new Error(parts.join(' - '));\n // Preserve the original error for debugging\n enhanced.cause = error;\n return enhanced;\n}\n\nexport class ImapAdapter implements EmailProvider {\n readonly providerType: ProviderTypeValue = ProviderType.IMAP;\n protected client: InstanceType<typeof ImapFlow> | null = null;\n protected accountId: string = '';\n protected email: string = '';\n protected passwordCreds: PasswordCredentials | null = null;\n\n async connect(credentials: AccountCredentials): Promise<void> {\n if (!credentials.password) {\n throw new Error('IMAP adapter requires password credentials');\n }\n this.accountId = credentials.id;\n this.email = credentials.email;\n this.passwordCreds = credentials.password;\n\n this.client = new ImapFlow({\n host: credentials.password.host,\n port: credentials.password.port,\n secure: credentials.password.tls,\n auth: {\n user: credentials.email,\n pass: credentials.password.password,\n },\n logger: false,\n });\n\n await this.client.connect();\n }\n\n async disconnect(): Promise<void> {\n if (this.client) {\n await this.client.logout();\n this.client = null;\n }\n }\n\n async testConnection(): Promise<{ success: boolean; folderCount: number; error?: string }> {\n try {\n const folders = await this.listFolders();\n return { success: true, folderCount: folders.length };\n } catch (error: any) {\n return { success: false, folderCount: 0, error: error.message };\n }\n }\n\n async listFolders(): Promise<Folder[]> {\n if (!this.client) throw new Error('Not connected');\n const imapFolders = await this.client.list();\n return imapFolders.map(mapImapFolder);\n }\n\n async createFolder(name: string, parentPath?: string): Promise<Folder> {\n if (!this.client) throw new Error('Not connected');\n const fullPath = parentPath ? `${parentPath}/${name}` : name;\n const result = await this.client.mailboxCreate(fullPath);\n return {\n id: result.path,\n name: result.name || name,\n path: result.path,\n type: FolderType.Other,\n };\n }\n\n protected buildSearchCriteria(query: SearchQuery): Record<string, any> {\n const criteria: Record<string, any> = {};\n if (query.from) criteria.from = query.from;\n if (query.to) criteria.to = query.to;\n if (query.subject) criteria.subject = query.subject;\n if (query.body) criteria.body = query.body;\n if (query.since) criteria.since = new Date(query.since);\n if (query.before) criteria.before = new Date(query.before);\n if (query.unreadOnly) criteria.unseen = true;\n if (query.starredOnly) criteria.flagged = true;\n if (query.hasAttachment) criteria.header = { 'content-type': 'multipart/mixed' };\n return criteria;\n }\n\n /**\n * Resolves a folder name to the correct IMAP path.\n * Some providers (e.g., iCloud) report folder paths differently than what\n * users might expect. This method tries the given path first, and if SELECT\n * fails with a mailbox-not-found error, it falls back to listing all folders\n * and matching by name or special-use type.\n */\n protected async resolveFolder(folder: string): Promise<string> {\n if (!this.client) throw new Error('Not connected');\n\n // Common aliases: map well-known names to potential IMAP special-use types\n const FOLDER_ALIASES: Record<string, string[]> = {\n junk: ['Junk', 'Spam', 'Bulk Mail', 'Junk E-mail', 'Junk Email'],\n spam: ['Junk', 'Spam', 'Bulk Mail', 'Junk E-mail', 'Junk Email'],\n trash: ['Trash', 'Deleted Messages', 'Deleted Items', 'Bin'],\n sent: ['Sent', 'Sent Messages', 'Sent Items', 'Sent Mail'],\n drafts: ['Drafts', 'Draft'],\n archive: ['Archive', 'All Mail'],\n };\n\n // First, try to match against known folder paths from the server\n const folders = await this.client.list();\n const lowerFolder = folder.toLowerCase();\n\n // Exact path match (case-insensitive for non-INBOX folders)\n const exactMatch = folders.find(\n (f: any) => f.path === folder || f.path.toLowerCase() === lowerFolder\n );\n if (exactMatch) return exactMatch.path;\n\n // Match by name (the last component of the path)\n const nameMatch = folders.find(\n (f: any) => f.name && f.name.toLowerCase() === lowerFolder\n );\n if (nameMatch) return nameMatch.path;\n\n // Match by special-use flag (e.g., \\Junk, \\Trash, \\Sent)\n const specialUseMap: Record<string, string> = {\n junk: '\\\\Junk',\n spam: '\\\\Junk',\n trash: '\\\\Trash',\n sent: '\\\\Sent',\n drafts: '\\\\Drafts',\n archive: '\\\\Archive',\n inbox: '\\\\Inbox',\n };\n const specialUseFlag = specialUseMap[lowerFolder];\n if (specialUseFlag) {\n const specialMatch = folders.find(\n (f: any) => f.specialUse === specialUseFlag\n );\n if (specialMatch) return specialMatch.path;\n }\n\n // Match by alias list\n const aliases = FOLDER_ALIASES[lowerFolder];\n if (aliases) {\n for (const alias of aliases) {\n const aliasMatch = folders.find(\n (f: any) => f.path === alias || f.name === alias ||\n f.path.toLowerCase() === alias.toLowerCase()\n );\n if (aliasMatch) return aliasMatch.path;\n }\n }\n\n // No match found -- return the original path and let SELECT report the error\n return folder;\n }\n\n async search(query: SearchQuery): Promise<Email[]> {\n if (!this.client) throw new Error('Not connected');\n\n const requestedFolder = query.folder || 'INBOX';\n\n // Resolve the folder path -- this handles provider-specific naming differences\n // (e.g., iCloud uses \"Junk\" not \"Spam\", \"Deleted Messages\" not \"Trash\")\n let folder: string;\n try {\n folder = await this.resolveFolder(requestedFolder);\n } catch {\n folder = requestedFolder;\n }\n\n // Refresh connection state before search (helps with iCloud stale sessions)\n try { await this.client.noop(); } catch { /* ignore */ }\n\n let lock;\n try {\n lock = await this.client.getMailboxLock(folder);\n } catch (error: any) {\n throw formatImapError(error, `Failed to open folder \"${folder}\"`);\n }\n\n try {\n // Get real message count via STATUS (works even when mailbox.exists is stale).\n // iCloud can report EXISTS=0 after SELECT for folders that actually have messages\n // (see ImapFlow issue #209). STATUS works independently and gives the true count.\n let realMessageCount = -1;\n try {\n const status = await this.client.status(folder, { messages: true });\n realMessageCount = status.messages ?? -1;\n } catch { /* ignore - will fall back to mailbox.exists */ }\n\n const mailboxExists = (this.client as any).mailbox?.exists ?? -1;\n\n // Use the higher of the two counts \u2014 if STATUS says messages exist, trust it\n const effectiveCount = Math.max(realMessageCount, mailboxExists);\n if (effectiveCount === 0) {\n return [];\n }\n\n const criteria = this.buildSearchCriteria(query);\n const hasCriteria = Object.keys(criteria).length > 0;\n let allUids: number[];\n\n try {\n const searchResult = await this.client.search(\n hasCriteria ? criteria : { all: true },\n { uid: true }\n );\n\n // ImapFlow's search() returns false when the SEARCH command fails\n // (server responds with NO/BAD) instead of throwing an error.\n // Treat this as an empty result rather than crashing on .slice().\n allUids = Array.isArray(searchResult) ? searchResult : [];\n } catch (searchError: any) {\n // Fallback: some IMAP servers (e.g. iCloud) fail on UID SEARCH ALL with\n // \"Invalid message number\". ANY such error should trigger the FETCH fallback,\n // regardless of whether text-based search criteria are specified.\n const errorMsg = String(searchError?.responseText || searchError?.message || '').toLowerCase();\n const isInvalidMessage = errorMsg.includes('invalid message');\n\n if (isInvalidMessage || !hasCriteria) {\n allUids = await this.collectUidsViaFetch(query);\n } else {\n throw searchError;\n }\n }\n\n // Apply offset and limit to the UID list\n const offset = query.offset || 0;\n const slicedUids = query.limit\n ? allUids.slice(offset, offset + query.limit)\n : allUids.slice(offset);\n\n if (slicedUids.length === 0) return [];\n\n return await this.fetchEmails(slicedUids, folder, query.returnBody);\n } catch (error: any) {\n throw formatImapError(error, `Search failed in folder \"${folder}\"`);\n } finally {\n lock.release();\n }\n }\n\n /**\n * Fallback UID collection when UID SEARCH fails (e.g. iCloud \"Invalid message number\").\n * Uses a multi-level fallback chain:\n * 1. FETCH 1:* with sequence numbers\n * 2. FETCH 1:N using mailbox.exists as explicit range\n * 3. Individual sequence number fetches (slowest but most resilient)\n */\n private async collectUidsViaFetch(query: SearchQuery): Promise<number[]> {\n if (!this.client) return [];\n const uids: number[] = [];\n\n try {\n // Primary: FETCH 1:* with sequence numbers\n for await (const msg of this.client.fetch('1:*', { uid: true, flags: true })) {\n if (query.unreadOnly && msg.flags?.has('\\\\Seen')) continue;\n if (query.starredOnly && !msg.flags?.has('\\\\Flagged')) continue;\n uids.push(msg.uid);\n }\n return uids;\n } catch {\n // Fallback: use mailbox.exists to build explicit range\n const exists = (this.client as any).mailbox?.exists ?? 0;\n if (exists > 0) {\n try {\n for await (const msg of this.client.fetch(`1:${exists}`, { uid: true, flags: true })) {\n if (query.unreadOnly && msg.flags?.has('\\\\Seen')) continue;\n if (query.starredOnly && !msg.flags?.has('\\\\Flagged')) continue;\n uids.push(msg.uid);\n }\n return uids;\n } catch { /* fall through to individual fetch */ }\n }\n\n // Final fallback: fetch one-by-one (slowest but most resilient)\n const count = exists > 0 ? exists : 50;\n for (let seq = 1; seq <= count; seq++) {\n try {\n for await (const msg of this.client.fetch(String(seq), { uid: true, flags: true })) {\n if (query.unreadOnly && msg.flags?.has('\\\\Seen')) continue;\n if (query.starredOnly && !msg.flags?.has('\\\\Flagged')) continue;\n uids.push(msg.uid);\n }\n } catch { /* skip \u2014 message at this sequence may not exist */ }\n }\n return uids;\n }\n }\n\n /**\n * Fetches email data for a set of UIDs, either with full body or lightweight headers.\n */\n private async fetchEmails(uids: number[], folder: string, returnBody?: boolean): Promise<Email[]> {\n if (!this.client) return [];\n const emails: Email[] = [];\n\n if (returnBody) {\n for await (const msg of this.client.fetch(uids, { source: true, uid: true, flags: true })) {\n const parsed = await simpleParser(msg.source);\n (parsed as any).flags = msg.flags;\n emails.push(mapParsedEmail(parsed, folder, this.accountId, msg.uid));\n }\n } else {\n for await (const msg of this.client.fetch(uids, {\n envelope: true, uid: true, flags: true, bodyStructure: true,\n })) {\n const env = msg.envelope;\n emails.push({\n id: String(msg.uid),\n accountId: this.accountId,\n threadId: env.messageId || undefined,\n folder,\n from: env.from?.[0] ? { name: env.from[0].name || undefined, email: env.from[0].address || '' } : { email: '' },\n to: (env.to || []).map((a: any) => ({ name: a.name || undefined, email: a.address || '' })),\n cc: env.cc?.length ? env.cc.map((a: any) => ({ name: a.name || undefined, email: a.address || '' })) : undefined,\n bcc: env.bcc?.length ? env.bcc.map((a: any) => ({ name: a.name || undefined, email: a.address || '' })) : undefined,\n subject: env.subject || '(no subject)',\n date: env.date ? new Date(env.date).toISOString() : new Date().toISOString(),\n body: { text: undefined, html: undefined },\n snippet: env.subject || '',\n attachments: [],\n flags: {\n read: msg.flags?.has('\\\\Seen') ?? false,\n starred: msg.flags?.has('\\\\Flagged') ?? false,\n flagged: msg.flags?.has('\\\\Flagged') ?? false,\n draft: msg.flags?.has('\\\\Draft') ?? false,\n },\n });\n }\n }\n\n return emails;\n }\n\n async getEmail(id: string, folder?: string): Promise<Email> {\n if (!this.client) throw new Error('Not connected');\n\n const targetFolder = folder || 'INBOX';\n let lock;\n try {\n lock = await this.client.getMailboxLock(targetFolder);\n } catch (error: any) {\n throw formatImapError(error, `Failed to open folder \"${targetFolder}\"`);\n }\n\n try {\n const uid = parseInt(id, 10);\n const msg = await this.client.fetchOne(String(uid), { source: true, uid: true, flags: true }, { uid: true });\n if (!msg) throw new Error(`Email ${id} not found`);\n\n const parsed = await simpleParser(msg.source);\n (parsed as any).flags = msg.flags;\n return mapParsedEmail(parsed, targetFolder, this.accountId, msg.uid);\n } finally {\n lock.release();\n }\n }\n\n async getThread(threadId: string): Promise<Thread> {\n if (!this.client) throw new Error('Not connected');\n\n let lock;\n try {\n lock = await this.client.getMailboxLock('INBOX');\n } catch (error: any) {\n throw formatImapError(error, 'Failed to open folder \"INBOX\"');\n }\n try {\n // Search for messages that reference this thread ID via header\n const searchResult = await this.client.search(\n { or: [{ header: { 'message-id': threadId } }, { header: { references: threadId } }, { header: { 'in-reply-to': threadId } }] },\n { uid: true }\n );\n const uids: number[] = Array.isArray(searchResult) ? searchResult : [];\n\n if (uids.length === 0) throw new Error(`Thread ${threadId} not found`);\n\n const messages: Email[] = [];\n for await (const msg of this.client.fetch(uids, { source: true, uid: true, flags: true })) {\n const parsed = await simpleParser(msg.source);\n (parsed as any).flags = msg.flags;\n messages.push(mapParsedEmail(parsed, 'INBOX', this.accountId, msg.uid));\n }\n\n // Collect unique participants\n const participantMap = new Map<string, { name?: string; email: string }>();\n for (const msg of messages) {\n if (msg.from.email) participantMap.set(msg.from.email, msg.from);\n for (const to of msg.to) {\n if (to.email) participantMap.set(to.email, to);\n }\n }\n\n // Sort messages by date\n messages.sort((a, b) => new Date(a.date).getTime() - new Date(b.date).getTime());\n\n return {\n id: threadId,\n subject: messages[0]?.subject || '(no subject)',\n participants: Array.from(participantMap.values()),\n messageCount: messages.length,\n messages,\n lastMessageDate: messages[messages.length - 1]?.date || new Date().toISOString(),\n };\n } finally {\n lock.release();\n }\n }\n\n async getAttachment(emailId: string, attachmentId: string): Promise<{ data: Buffer; meta: AttachmentMeta }> {\n if (!this.client) throw new Error('Not connected');\n\n let lock;\n try {\n lock = await this.client.getMailboxLock('INBOX');\n } catch (error: any) {\n throw formatImapError(error, 'Failed to open folder \"INBOX\"');\n }\n try {\n const msg = await this.client.fetchOne(String(emailId), { source: true, uid: true }, { uid: true });\n if (!msg) throw new Error(`Email ${emailId} not found`);\n\n const parsed = await simpleParser(msg.source);\n const attachment = (parsed.attachments || []).find(\n (att: any) => att.contentId === attachmentId || att.filename === attachmentId\n );\n if (!attachment) throw new Error(`Attachment ${attachmentId} not found in email ${emailId}`);\n\n return {\n data: attachment.content,\n meta: {\n id: attachment.contentId || attachmentId,\n filename: attachment.filename || 'attachment',\n contentType: attachment.contentType || 'application/octet-stream',\n size: attachment.size || 0,\n },\n };\n } finally {\n lock.release();\n }\n }\n\n async sendEmail(params: SendEmailParams): Promise<{ id: string; threadId?: string }> {\n if (!this.passwordCreds) throw new Error('No credentials available');\n const transport = createSmtpTransport(this.email, this.passwordCreds);\n const messageId = await sendViaSmtp(transport, this.email, params);\n return { id: messageId };\n }\n\n async createDraft(params: SendEmailParams): Promise<{ id: string }> {\n if (!this.client) throw new Error('Not connected');\n\n // Build RFC 2822 message\n const lines: string[] = [];\n lines.push(`From: ${this.email}`);\n lines.push(`To: ${params.to.map((c) => (c.name ? `\"${c.name}\" <${c.email}>` : c.email)).join(', ')}`);\n if (params.cc?.length) {\n lines.push(`Cc: ${params.cc.map((c) => c.email).join(', ')}`);\n }\n lines.push(`Subject: ${params.subject}`);\n lines.push(`Date: ${new Date().toUTCString()}`);\n if (params.inReplyTo) lines.push(`In-Reply-To: ${params.inReplyTo}`);\n if (params.references?.length) lines.push(`References: ${params.references.join(' ')}`);\n lines.push('MIME-Version: 1.0');\n lines.push('Content-Type: text/plain; charset=utf-8');\n lines.push('');\n lines.push(params.body.text || '');\n\n const rawMessage = lines.join('\\r\\n');\n const result = await this.client.append('Drafts', rawMessage, ['\\\\Draft', '\\\\Seen']);\n return { id: String(result.uid || result) };\n }\n\n async listDrafts(limit?: number, offset?: number): Promise<Email[]> {\n return this.search({\n folder: 'Drafts',\n limit,\n offset,\n });\n }\n\n async moveEmail(emailId: string, targetFolder: string, sourceFolder?: string): Promise<void> {\n if (!this.client) throw new Error('Not connected');\n const folder = sourceFolder || 'INBOX';\n let lock;\n try {\n lock = await this.client.getMailboxLock(folder);\n } catch (error: any) {\n throw formatImapError(error, `Failed to open folder \"${folder}\"`);\n }\n try {\n await this.client.messageMove(emailId, targetFolder, { uid: true });\n } finally {\n lock.release();\n }\n }\n\n async deleteEmail(emailId: string, permanent?: boolean, sourceFolder?: string): Promise<void> {\n if (!this.client) throw new Error('Not connected');\n const folder = sourceFolder ? await this.resolveFolder(sourceFolder) : 'INBOX';\n const trashFolder = await this.resolveFolder('Trash');\n let lock;\n try {\n lock = await this.client.getMailboxLock(folder);\n } catch (error: any) {\n throw formatImapError(error, `Failed to open folder \"${folder}\"`);\n }\n try {\n if (permanent || folder === trashFolder) {\n // Permanently delete if requested or if already in trash\n await this.client.messageDelete(emailId, { uid: true });\n } else {\n await this.client.messageMove(emailId, trashFolder, { uid: true });\n }\n } finally {\n lock.release();\n }\n }\n\n async markEmail(emailId: string, flags: { read?: boolean; starred?: boolean; flagged?: boolean }, sourceFolder?: string): Promise<void> {\n if (!this.client) throw new Error('Not connected');\n const folder = sourceFolder || 'INBOX';\n let lock;\n try {\n lock = await this.client.getMailboxLock(folder);\n } catch (error: any) {\n throw formatImapError(error, `Failed to open folder \"${folder}\"`);\n }\n try {\n if (flags.read === true) {\n await this.client.messageFlagsAdd(emailId, ['\\\\Seen'], { uid: true });\n } else if (flags.read === false) {\n await this.client.messageFlagsRemove(emailId, ['\\\\Seen'], { uid: true });\n }\n\n if (flags.starred === true || flags.flagged === true) {\n await this.client.messageFlagsAdd(emailId, ['\\\\Flagged'], { uid: true });\n } else if (flags.starred === false || flags.flagged === false) {\n await this.client.messageFlagsRemove(emailId, ['\\\\Flagged'], { uid: true });\n }\n } finally {\n lock.release();\n }\n }\n\n async batchDelete(emailIds: string[], permanent?: boolean, sourceFolder?: string): Promise<BatchResult> {\n if (!this.client) throw new Error('Not connected');\n const result: BatchResult = { succeeded: [], failed: [] };\n const folder = sourceFolder ? await this.resolveFolder(sourceFolder) : 'INBOX';\n const trashFolder = await this.resolveFolder('Trash');\n const shouldPermanentDelete = permanent || folder === trashFolder;\n let lock;\n try {\n lock = await this.client.getMailboxLock(folder);\n } catch (error: any) {\n throw formatImapError(error, `Failed to open folder \"${folder}\"`);\n }\n\n try {\n // ImapFlow supports UID ranges as comma-separated strings\n const uidRange = emailIds.join(',');\n if (shouldPermanentDelete) {\n await this.client.messageDelete(uidRange, { uid: true });\n } else {\n await this.client.messageMove(uidRange, trashFolder, { uid: true });\n }\n result.succeeded = [...emailIds];\n } catch (error: any) {\n // If batch fails, try individually\n for (const id of emailIds) {\n try {\n if (shouldPermanentDelete) {\n await this.client.messageDelete(id, { uid: true });\n } else {\n await this.client.messageMove(id, trashFolder, { uid: true });\n }\n result.succeeded.push(id);\n } catch (e: any) {\n result.failed.push({ id, error: e.message });\n }\n }\n } finally {\n lock.release();\n }\n\n return result;\n }\n\n async batchMove(emailIds: string[], targetFolder: string, sourceFolder?: string): Promise<BatchResult> {\n if (!this.client) throw new Error('Not connected');\n const result: BatchResult = { succeeded: [], failed: [] };\n const folder = sourceFolder || 'INBOX';\n let lock;\n try {\n lock = await this.client.getMailboxLock(folder);\n } catch (error: any) {\n throw formatImapError(error, `Failed to open folder \"${folder}\"`);\n }\n\n try {\n const uidRange = emailIds.join(',');\n await this.client.messageMove(uidRange, targetFolder, { uid: true });\n result.succeeded = [...emailIds];\n } catch (error: any) {\n for (const id of emailIds) {\n try {\n await this.client.messageMove(id, targetFolder, { uid: true });\n result.succeeded.push(id);\n } catch (e: any) {\n result.failed.push({ id, error: e.message });\n }\n }\n } finally {\n lock.release();\n }\n\n return result;\n }\n\n async batchMark(emailIds: string[], flags: { read?: boolean; starred?: boolean; flagged?: boolean }, sourceFolder?: string): Promise<BatchResult> {\n if (!this.client) throw new Error('Not connected');\n const result: BatchResult = { succeeded: [], failed: [] };\n const folder = sourceFolder || 'INBOX';\n let lock;\n try {\n lock = await this.client.getMailboxLock(folder);\n } catch (error: any) {\n throw formatImapError(error, `Failed to open folder \"${folder}\"`);\n }\n\n try {\n const uidRange = emailIds.join(',');\n\n if (flags.read === true) {\n await this.client.messageFlagsAdd(uidRange, ['\\\\Seen'], { uid: true });\n } else if (flags.read === false) {\n await this.client.messageFlagsRemove(uidRange, ['\\\\Seen'], { uid: true });\n }\n\n if (flags.starred === true || flags.flagged === true) {\n await this.client.messageFlagsAdd(uidRange, ['\\\\Flagged'], { uid: true });\n } else if (flags.starred === false || flags.flagged === false) {\n await this.client.messageFlagsRemove(uidRange, ['\\\\Flagged'], { uid: true });\n }\n\n result.succeeded = [...emailIds];\n } catch (error: any) {\n for (const id of emailIds) {\n try {\n await this.markEmail(id, flags, folder);\n result.succeeded.push(id);\n } catch (e: any) {\n result.failed.push({ id, error: e.message });\n }\n }\n } finally {\n lock.release();\n }\n\n return result;\n }\n}\n", "import type { Folder, Email, Contact, AttachmentMeta, FolderTypeValue } from '../../models/types.js';\nimport { FolderType } from '../../models/types.js';\n\nconst SPECIAL_USE_MAP: Record<string, FolderTypeValue> = {\n '\\\\Inbox': FolderType.Inbox,\n '\\\\Sent': FolderType.Sent,\n '\\\\Drafts': FolderType.Drafts,\n '\\\\Trash': FolderType.Trash,\n '\\\\Junk': FolderType.Spam,\n '\\\\Archive': FolderType.Archive,\n};\n\nexport function mapImapFolder(imapFolder: any): Folder {\n return {\n id: imapFolder.path,\n name: imapFolder.name,\n path: imapFolder.path,\n type: (imapFolder.specialUse && SPECIAL_USE_MAP[imapFolder.specialUse]) || FolderType.Other,\n totalCount: imapFolder.status?.messages,\n unreadCount: imapFolder.status?.unseen,\n };\n}\n\nexport function mapParsedEmail(parsed: any, folder: string, accountId: string, uid?: number): Email {\n const mapContact = (addr: any): Contact => ({\n name: addr.name || undefined,\n email: addr.address,\n });\n\n const mapContacts = (addrs: any): Contact[] => {\n if (!addrs?.value) return [];\n return addrs.value.map(mapContact);\n };\n\n const attachments: AttachmentMeta[] = (parsed.attachments || []).map((att: any, i: number) => ({\n id: att.contentId || `att-${i}`,\n filename: att.filename || `attachment-${i}`,\n contentType: att.contentType || 'application/octet-stream',\n size: att.size || 0,\n }));\n\n const from = parsed.from?.value?.[0];\n\n return {\n id: String(uid || parsed.messageId || ''),\n accountId,\n threadId: parsed.references?.[0] || parsed.messageId,\n folder,\n from: from ? mapContact(from) : { email: 'unknown' },\n to: mapContacts(parsed.to),\n cc: parsed.cc ? mapContacts(parsed.cc) : undefined,\n bcc: parsed.bcc ? mapContacts(parsed.bcc) : undefined,\n subject: parsed.subject || '(no subject)',\n date: parsed.date?.toISOString() || new Date().toISOString(),\n body: {\n text: parsed.text,\n html: parsed.html || undefined,\n },\n snippet: parsed.text?.substring(0, 200),\n attachments,\n flags: {\n read: parsed.flags?.has('\\\\Seen') || false,\n starred: parsed.flags?.has('\\\\Flagged') || false,\n flagged: parsed.flags?.has('\\\\Flagged') || false,\n draft: parsed.flags?.has('\\\\Draft') || false,\n },\n headers: parsed.headerLines\n ? Object.fromEntries(parsed.headerLines.map((h: any) => [h.key, h.line]))\n : undefined,\n };\n}\n", "import nodemailer from 'nodemailer';\nimport type { SendEmailParams } from '../provider.js';\nimport type { PasswordCredentials } from '../../models/types.js';\n\nexport function createSmtpTransport(email: string, creds: PasswordCredentials) {\n return nodemailer.createTransport({\n host: creds.smtpHost || creds.host.replace('imap', 'smtp'),\n port: creds.smtpPort || 587,\n secure: creds.smtpPort === 465,\n auth: { user: email, pass: creds.password },\n });\n}\n\nexport async function sendViaSmtp(\n transport: ReturnType<typeof nodemailer.createTransport>,\n from: string,\n params: SendEmailParams\n): Promise<string> {\n const result = await transport.sendMail({\n from,\n to: params.to.map((c) => (c.name ? `\"${c.name}\" <${c.email}>` : c.email)).join(', '),\n cc: params.cc?.map((c) => c.email).join(', '),\n bcc: params.bcc?.map((c) => c.email).join(', '),\n subject: params.subject,\n text: params.body.text,\n html: params.body.html,\n inReplyTo: params.inReplyTo,\n references: params.references?.join(' '),\n attachments: params.attachments?.map((a) => ({\n filename: a.filename,\n content: a.content,\n contentType: a.contentType,\n })),\n });\n return result.messageId;\n}\n", "import { ImapAdapter } from '../imap/adapter.js';\nimport { ProviderType } from '../../models/types.js';\nimport type { AccountCredentials, ProviderTypeValue } from '../../models/types.js';\n\nexport class ICloudAdapter extends ImapAdapter {\n override readonly providerType: ProviderTypeValue = ProviderType.ICloud;\n\n override async connect(credentials: AccountCredentials): Promise<void> {\n const withDefaults: AccountCredentials = {\n ...credentials,\n password: {\n host: 'imap.mail.me.com',\n port: 993,\n tls: true,\n smtpHost: 'smtp.mail.me.com',\n smtpPort: 587,\n ...credentials.password!,\n },\n };\n return super.connect(withDefaults);\n }\n}\n", "// Publisher-provided OAuth credentials (PKCE public clients).\n// These are intentionally shipped in source \u2014 safe for desktop/CLI apps.\n// Same pattern as GitHub CLI, VS Code, Firebase CLI, etc.\n\nexport const GMAIL_CLIENT_ID =\n '1062266096576-lu2ukplhc3lcm0bvheml5i18urptdp4t.apps.googleusercontent.com';\nexport const GMAIL_CLIENT_SECRET = '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';\nexport const OUTLOOK_CLIENT_ID = '76d32225-ef10-4b49-951c-c80ae906595d';\n", "import { CredentialStore } from './auth/credential-store.js';\nimport { GmailAdapter } from './providers/gmail/adapter.js';\nimport { GmailAuth } from './providers/gmail/auth.js';\nimport { OutlookAdapter } from './providers/outlook/adapter.js';\nimport { OutlookAuth } from './providers/outlook/auth.js';\nimport { ICloudAdapter } from './providers/icloud/adapter.js';\nimport { ImapAdapter } from './providers/imap/adapter.js';\nimport type { EmailProvider } from './providers/provider.js';\nimport type { Account, AccountCredentials, ProviderTypeValue } from './models/types.js';\nimport { ProviderType } from './models/types.js';\nimport { GMAIL_CLIENT_ID, GMAIL_CLIENT_SECRET, OUTLOOK_CLIENT_ID } from './oauth-config.js';\n\nfunction createProvider(provider: ProviderTypeValue): EmailProvider {\n switch (provider) {\n case ProviderType.Gmail:\n return new GmailAdapter();\n case ProviderType.Outlook:\n return new OutlookAdapter();\n case ProviderType.ICloud:\n return new ICloudAdapter();\n case ProviderType.IMAP:\n return new ImapAdapter();\n default:\n throw new Error(`Unknown provider: ${provider}`);\n }\n}\n\nexport class AccountManager {\n private store: CredentialStore;\n private providers: Map<string, EmailProvider> = new Map();\n private credentials: Map<string, AccountCredentials> = new Map();\n\n constructor(store?: CredentialStore) {\n this.store = store ?? new CredentialStore();\n }\n\n async listAccounts(): Promise<Account[]> {\n const creds = await this.store.list();\n return creds.map((c) => ({\n id: c.id,\n name: c.name,\n provider: c.provider,\n email: c.email,\n connected: this.providers.has(c.id),\n }));\n }\n\n async getProvider(accountId: string): Promise<EmailProvider> {\n const existing = this.providers.get(accountId);\n if (existing) {\n // Check if OAuth token has expired mid-session \u2014 reconnect if so\n const creds = this.credentials.get(accountId);\n if (creds?.oauth?.expiry) {\n const expiryDate = new Date(creds.oauth.expiry);\n const now = new Date();\n if (!isNaN(expiryDate.getTime()) && expiryDate <= now) {\n await this.disconnectAccount(accountId);\n await this.connectAccount(accountId);\n const refreshed = this.providers.get(accountId);\n if (!refreshed) throw new Error(`Failed to reconnect account ${accountId} after token expiry`);\n return refreshed;\n }\n }\n return existing;\n }\n\n // Auto-connect if not connected\n await this.connectAccount(accountId);\n const provider = this.providers.get(accountId);\n if (!provider) throw new Error(`Failed to connect account ${accountId}`);\n return provider;\n }\n\n async connectAccount(accountId: string): Promise<void> {\n const creds = await this.store.get(accountId);\n if (!creds) throw new Error(`Account ${accountId} not found`);\n\n // Check if OAuth token needs refresh\n if (creds.oauth) {\n await this.refreshTokenIfNeeded(creds);\n }\n\n const provider = createProvider(creds.provider);\n await provider.connect(creds);\n this.providers.set(accountId, provider);\n this.credentials.set(accountId, creds);\n }\n\n async addAccount(creds: AccountCredentials): Promise<void> {\n await this.store.save(creds);\n await this.connectAccount(creds.id);\n }\n\n async removeAccount(accountId: string): Promise<void> {\n await this.disconnectAccount(accountId);\n await this.store.remove(accountId);\n }\n\n async disconnectAccount(accountId: string): Promise<void> {\n const provider = this.providers.get(accountId);\n if (provider) {\n try {\n await provider.disconnect();\n } catch {\n // Ignore disconnect errors\n }\n this.providers.delete(accountId);\n this.credentials.delete(accountId);\n }\n }\n\n async disconnectAll(): Promise<void> {\n const ids = Array.from(this.providers.keys());\n await Promise.allSettled(ids.map((id) => this.disconnectAccount(id)));\n }\n\n async testAccount(accountId: string): Promise<{ success: boolean; folderCount: number; error?: string }> {\n try {\n const provider = await this.getProvider(accountId);\n return await provider.testConnection();\n } catch (error: any) {\n return { success: false, folderCount: 0, error: error.message };\n }\n }\n\n private async refreshTokenIfNeeded(creds: AccountCredentials): Promise<void> {\n if (!creds.oauth?.expiry) return;\n\n const expiryDate = new Date(creds.oauth.expiry);\n const fiveMinutesFromNow = new Date(Date.now() + 5 * 60 * 1000);\n\n // Skip refresh if token is still valid (and expiry is a valid date)\n if (!isNaN(expiryDate.getTime()) && expiryDate > fiveMinutesFromNow) return;\n\n if (creds.provider === ProviderType.Gmail) {\n const auth = new GmailAuth(GMAIL_CLIENT_ID, GMAIL_CLIENT_SECRET);\n const newTokens = await auth.refreshAccessToken(creds.oauth.refresh_token);\n if (!newTokens.access_token) {\n throw new Error('Gmail token refresh returned empty access token \u2014 re-authenticate via setup wizard');\n }\n creds.oauth = newTokens;\n await this.store.save(creds);\n } else if (creds.provider === ProviderType.Outlook) {\n const outlookAuth = new OutlookAuth(OUTLOOK_CLIENT_ID);\n const homeAccountId = creds.oauth.msal_home_account_id;\n\n if (homeAccountId) {\n // Preferred: use MSAL's persisted cache for silent token refresh\n const result = await outlookAuth.refreshTokenSilent(homeAccountId);\n if (!result.accessToken) {\n throw new Error('Outlook token refresh returned empty access token \u2014 re-authenticate via setup wizard');\n }\n creds.oauth = {\n access_token: result.accessToken,\n refresh_token: creds.oauth.refresh_token,\n expiry: result.expiresOn?.toISOString() ?? '',\n msal_home_account_id: result.homeAccountId ?? homeAccountId,\n };\n } else if (creds.oauth.refresh_token) {\n // Fallback: use stored refresh token directly (legacy credentials)\n const result = await outlookAuth.refreshToken(creds.oauth.refresh_token);\n if (!result.accessToken) {\n throw new Error('Outlook token refresh returned empty access token \u2014 re-authenticate via setup wizard');\n }\n creds.oauth = {\n access_token: result.accessToken,\n refresh_token: creds.oauth.refresh_token,\n expiry: result.expiresOn?.toISOString() ?? '',\n };\n } else {\n throw new Error('No MSAL account ID or refresh token \u2014 re-authenticate via setup wizard');\n }\n\n await this.store.save(creds);\n }\n }\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["crypto", "crypto", "fs", "path", "os", "OAuth2Client", "OAuth2Client", "path", "store", "crypto"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marlinjai/email-mcp",
3
- "version": "1.2.4",
3
+ "version": "1.2.5",
4
4
  "mcpName": "io.github.marlinjai/email-mcp",
5
5
  "description": "Unified MCP server for email access across Gmail, Outlook, iCloud, and IMAP — search, send, organize, and batch-manage emails from any AI assistant",
6
6
  "type": "module",