feat(email): add all 7 squaremcp.com email accounts

- New accounts: sqcp_garfield, sqcp_info, sqcp_sales, sqcp_support,
  sqcp_founder, sqcp_contact, sqcp_admin
- All use same poste.io mail server as fetcherpay.com (IMAP 30993, SMTP 30587)
- Password: onelove for all accounts
- Updated: imap.ts, smtp.ts, tools.ts, manifest.ts, hermes-k8s.yaml
This commit is contained in:
Garfield
2026-05-15 11:34:56 -04:00
parent be1a14f783
commit 38e367ea58
5 changed files with 234 additions and 4 deletions

View File

@@ -1,7 +1,7 @@
import { ImapFlow } from 'imapflow';
import type { EmailCredentials } from './multitenancy/credential-store.js';
export type Account = 'yahoo' | 'fetcherpay' | 'garfield' | 'sales' | 'leads' | 'founder' | 'gmail';
export type Account = 'yahoo' | 'fetcherpay' | 'garfield' | 'sales' | 'leads' | 'founder' | 'gmail' | 'sqcp_garfield' | 'sqcp_info' | 'sqcp_sales' | 'sqcp_support' | 'sqcp_founder' | 'sqcp_contact' | 'sqcp_admin';
export type EmailCtx = Account | EmailCredentials;
const FETCHERPAY_IMAP_HOST = process.env['FETCHERPAY_IMAP_HOST'] ?? 'mail.fetcherpay.com';
@@ -29,6 +29,20 @@ function getEnvConfig(account: Account = 'yahoo') {
return fetcherpayImapConfig(process.env['LEADS_EMAIL']!, process.env['LEADS_PASSWORD']!);
case 'founder':
return fetcherpayImapConfig(process.env['FOUNDER_EMAIL']!, process.env['FOUNDER_PASSWORD']!);
case 'sqcp_garfield':
return fetcherpayImapConfig(process.env['SQCP_GARFIELD_EMAIL']!, process.env['SQCP_GARFIELD_PASSWORD']!);
case 'sqcp_info':
return fetcherpayImapConfig(process.env['SQCP_INFO_EMAIL']!, process.env['SQCP_INFO_PASSWORD']!);
case 'sqcp_sales':
return fetcherpayImapConfig(process.env['SQCP_SALES_EMAIL']!, process.env['SQCP_SALES_PASSWORD']!);
case 'sqcp_support':
return fetcherpayImapConfig(process.env['SQCP_SUPPORT_EMAIL']!, process.env['SQCP_SUPPORT_PASSWORD']!);
case 'sqcp_founder':
return fetcherpayImapConfig(process.env['SQCP_FOUNDER_EMAIL']!, process.env['SQCP_FOUNDER_PASSWORD']!);
case 'sqcp_contact':
return fetcherpayImapConfig(process.env['SQCP_CONTACT_EMAIL']!, process.env['SQCP_CONTACT_PASSWORD']!);
case 'sqcp_admin':
return fetcherpayImapConfig(process.env['SQCP_ADMIN_EMAIL']!, process.env['SQCP_ADMIN_PASSWORD']!);
case 'gmail':
return {
host: 'imap.gmail.com',
@@ -290,6 +304,13 @@ export async function getProfile(ctx: EmailCtx = 'yahoo'): Promise<{ email: stri
leads: process.env['LEADS_EMAIL'] ?? '',
founder: process.env['FOUNDER_EMAIL'] ?? '',
gmail: process.env['GMAIL_EMAIL'] ?? '',
sqcp_garfield: process.env['SQCP_GARFIELD_EMAIL'] ?? '',
sqcp_info: process.env['SQCP_INFO_EMAIL'] ?? '',
sqcp_sales: process.env['SQCP_SALES_EMAIL'] ?? '',
sqcp_support: process.env['SQCP_SUPPORT_EMAIL'] ?? '',
sqcp_founder: process.env['SQCP_FOUNDER_EMAIL'] ?? '',
sqcp_contact: process.env['SQCP_CONTACT_EMAIL'] ?? '',
sqcp_admin: process.env['SQCP_ADMIN_EMAIL'] ?? '',
};
const email = emailMap[ctx] ?? '';
return { email, name: email.split('@')[0], account: ctx };

View File

@@ -796,9 +796,9 @@ export function getOpenApiSpecSocial(serverUrl: string) {
const ACCOUNT_PARAM_SCHEMA = {
account: {
type: 'string',
enum: ['yahoo', 'fetcherpay', 'garfield', 'sales', 'leads', 'founder', 'gmail'],
enum: ['yahoo', 'fetcherpay', 'garfield', 'sales', 'leads', 'founder', 'gmail', 'sqcp_garfield', 'sqcp_info', 'sqcp_sales', 'sqcp_support', 'sqcp_founder', 'sqcp_contact', 'sqcp_admin'],
description:
'Which mailbox to use: "yahoo" (gheron01@yahoo.com), "fetcherpay" (garfield.heron@fetcherpay.com), "garfield" (garfield@fetcherpay.com), "sales" (sales@fetcherpay.com), "leads" (leads@fetcherpay.com), "founder" (founder@fetcherpay.com), or "gmail" (Gmail account). Defaults to "yahoo".',
'Which mailbox to use: "yahoo" (gheron01@yahoo.com), "fetcherpay" (garfield.heron@fetcherpay.com), "garfield" (garfield@fetcherpay.com), "sales" (sales@fetcherpay.com), "leads" (leads@fetcherpay.com), "founder" (founder@fetcherpay.com), "gmail" (Gmail account), or squaremcp accounts: "sqcp_garfield", "sqcp_info", "sqcp_sales", "sqcp_support", "sqcp_founder", "sqcp_contact", "sqcp_admin". Defaults to "yahoo".',
},
};

View File

@@ -27,6 +27,20 @@ function getEnvSmtpTransport(account: Account = 'yahoo') {
return fetcherpaySmtpTransport(process.env['LEADS_EMAIL']!, process.env['LEADS_PASSWORD']!);
case 'founder':
return fetcherpaySmtpTransport(process.env['FOUNDER_EMAIL']!, process.env['FOUNDER_PASSWORD']!);
case 'sqcp_garfield':
return fetcherpaySmtpTransport(process.env['SQCP_GARFIELD_EMAIL']!, process.env['SQCP_GARFIELD_PASSWORD']!);
case 'sqcp_info':
return fetcherpaySmtpTransport(process.env['SQCP_INFO_EMAIL']!, process.env['SQCP_INFO_PASSWORD']!);
case 'sqcp_sales':
return fetcherpaySmtpTransport(process.env['SQCP_SALES_EMAIL']!, process.env['SQCP_SALES_PASSWORD']!);
case 'sqcp_support':
return fetcherpaySmtpTransport(process.env['SQCP_SUPPORT_EMAIL']!, process.env['SQCP_SUPPORT_PASSWORD']!);
case 'sqcp_founder':
return fetcherpaySmtpTransport(process.env['SQCP_FOUNDER_EMAIL']!, process.env['SQCP_FOUNDER_PASSWORD']!);
case 'sqcp_contact':
return fetcherpaySmtpTransport(process.env['SQCP_CONTACT_EMAIL']!, process.env['SQCP_CONTACT_PASSWORD']!);
case 'sqcp_admin':
return fetcherpaySmtpTransport(process.env['SQCP_ADMIN_EMAIL']!, process.env['SQCP_ADMIN_PASSWORD']!);
case 'gmail':
return nodemailer.createTransport({
host: 'smtp.gmail.com',
@@ -67,6 +81,13 @@ function resolveSenderEmail(ctx: EmailCtx): string {
leads: process.env['LEADS_EMAIL'] ?? '',
founder: process.env['FOUNDER_EMAIL'] ?? '',
gmail: process.env['GMAIL_EMAIL'] ?? '',
sqcp_garfield: process.env['SQCP_GARFIELD_EMAIL'] ?? '',
sqcp_info: process.env['SQCP_INFO_EMAIL'] ?? '',
sqcp_sales: process.env['SQCP_SALES_EMAIL'] ?? '',
sqcp_support: process.env['SQCP_SUPPORT_EMAIL'] ?? '',
sqcp_founder: process.env['SQCP_FOUNDER_EMAIL'] ?? '',
sqcp_contact: process.env['SQCP_CONTACT_EMAIL'] ?? '',
sqcp_admin: process.env['SQCP_ADMIN_EMAIL'] ?? '',
};
return emailMap[ctx] ?? '';
}

View File

@@ -19,7 +19,7 @@ import { getMe as getSlackMe, getChannels as getSlackChannels, sendMessage as se
const ACCOUNT_PARAM = {
account: {
type: 'string',
enum: ['yahoo', 'fetcherpay', 'garfield', 'sales', 'leads', 'founder', 'gmail'],
enum: ['yahoo', 'fetcherpay', 'garfield', 'sales', 'leads', 'founder', 'gmail', 'sqcp_garfield', 'sqcp_info', 'sqcp_sales', 'sqcp_support', 'sqcp_founder', 'sqcp_contact', 'sqcp_admin'],
description: 'Which mailbox to use: "yahoo" (gheron01@yahoo.com), "fetcherpay" (garfield.heron@fetcherpay.com), "garfield" (garfield@fetcherpay.com), "sales" (sales@fetcherpay.com), "leads" (leads@fetcherpay.com), "founder" (founder@fetcherpay.com), or "gmail" (Gmail account). Defaults to "yahoo".',
},
};