#!/usr/bin/env node
import { FastMailClient } from '../src/fastmail-client.js';
import dotenv from 'dotenv';
dotenv.config({ path: '../.env' });
async function countAllEmails() {
console.log('π COUNTING ALL EMAILS IN ENTIRE SYSTEM\n');
const client = new FastMailClient(
process.env.FASTMAIL_API_TOKEN,
'clark@clarkeverson.com',
'clark@clarkeverson.com',
'clarkeverson.com',
'https://api.fastmail.com/jmap/session'
);
try {
await client.authenticate();
const mailboxes = await client.getMailboxes();
console.log('π COMPLETE EMAIL INVENTORY:');
console.log('='.repeat(70));
let totalSystemEmails = 0;
let hierarchicalEmails = 0;
let inboxEmails = 0;
let oldFolderEmails = 0;
let systemFolderEmails = 0;
// Categorize all mailboxes
const hierarchicalParents = ['Information', 'Financial', 'Commerce', 'Professional', 'Personal'];
const systemFolders = ['Inbox', 'Sent', 'Drafts', 'Trash', 'Archive', 'Spam'];
const oldFolders = [
'Newsletter', 'screened-newsletters', 'Updates', 'Education', 'News',
'Banking', 'Transactions', 'Shopping', 'Technical', 'Unsubscribed',
'NeedsAction', 'Notifications', 'Snoozed'
];
console.log('ποΈ HIERARCHICAL STRUCTURE:');
hierarchicalParents.forEach(parentName => {
const parent = mailboxes.find(mb => mb.name === parentName);
if (parent) {
console.log(`π ${parentName} (${parent.totalEmails} emails)`);
hierarchicalEmails += parent.totalEmails;
totalSystemEmails += parent.totalEmails;
const children = mailboxes.filter(mb => mb.parentId === parent.id);
children.forEach(child => {
console.log(` βββ ${child.name} (${child.totalEmails} emails)`);
hierarchicalEmails += child.totalEmails;
totalSystemEmails += child.totalEmails;
});
}
});
console.log('\nπ₯ SYSTEM FOLDERS:');
systemFolders.forEach(folderName => {
const folder = mailboxes.find(mb => mb.name === folderName);
if (folder) {
console.log(`π ${folderName} (${folder.totalEmails} emails)`);
if (folderName === 'Inbox') {
inboxEmails = folder.totalEmails;
} else {
systemFolderEmails += folder.totalEmails;
}
totalSystemEmails += folder.totalEmails;
}
});
console.log('\nποΈ OLD FOLDERS (NEED TO BE ORGANIZED):');
oldFolders.forEach(folderName => {
const folder = mailboxes.find(mb => mb.name === folderName && !mb.parentId);
if (folder && folder.totalEmails > 0) {
console.log(`π ${folderName} (${folder.totalEmails} emails) β οΈ NEEDS MIGRATION`);
oldFolderEmails += folder.totalEmails;
totalSystemEmails += folder.totalEmails;
}
});
// Check for any other folders not accounted for
console.log('\nπ OTHER/UNKNOWN FOLDERS:');
const accountedFolders = [...hierarchicalParents, ...systemFolders, ...oldFolders];
let otherEmails = 0;
mailboxes.forEach(mb => {
const isHierarchicalChild = hierarchicalParents.some(parent => {
const parentMb = mailboxes.find(p => p.name === parent);
return parentMb && mb.parentId === parentMb.id;
});
const isSubFolder = mb.parentId && !isHierarchicalChild;
const isUnaccounted = !accountedFolders.includes(mb.name) && !mb.parentId && !isSubFolder;
if (isUnaccounted || isSubFolder) {
console.log(`π ${mb.name} (${mb.totalEmails} emails)${mb.parentId ? ' [sub-folder]' : ''}`);
otherEmails += mb.totalEmails;
totalSystemEmails += mb.totalEmails;
}
});
console.log('\nπ COMPLETE SYSTEM SUMMARY:');
console.log('='.repeat(50));
console.log(`π§ Total emails in entire system: ${totalSystemEmails}`);
console.log(`β
Emails in hierarchical structure: ${hierarchicalEmails} (${((hierarchicalEmails/totalSystemEmails)*100).toFixed(1)}%)`);
console.log(`π₯ Emails in Inbox (need categorization): ${inboxEmails}`);
console.log(`β οΈ Emails in old folders (need migration): ${oldFolderEmails}`);
console.log(`π Emails in system folders: ${systemFolderEmails}`);
console.log(`β Emails in other folders: ${otherEmails}`);
const unorganizedEmails = inboxEmails + oldFolderEmails;
console.log(`\nπ― EMAILS STILL NEEDING ORGANIZATION: ${unorganizedEmails}`);
if (unorganizedEmails > 0) {
console.log('\nπ NEXT ACTIONS NEEDED:');
console.log('='.repeat(40));
if (oldFolderEmails > 0) {
console.log(`1. π§ Migrate ${oldFolderEmails} emails from old folders to hierarchy`);
}
if (inboxEmails > 0) {
console.log(`2. π₯ Categorize ${inboxEmails} inbox emails into hierarchy`);
}
console.log('3. ποΈ Delete empty old folders');
console.log('4. π Update sieve rules for automatic organization');
} else {
console.log('\nπ ALL EMAILS ARE ORGANIZED!');
}
} catch (error) {
console.log('β Error:', error.message);
}
}
countAllEmails().catch(console.error);