gmail-to-exchange365
Version:
Complete Gmail to Exchange 365 migration tool with UI - Migrate emails, attachments, and folders seamlessly
68 lines • 2.32 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getOrCreateFolder = getOrCreateFolder;
exports.mapGmailLabelsToFolders = mapGmailLabelsToFolders;
exports.getFolderIdForLabel = getFolderIdForLabel;
async function getOrCreateFolder(client, folderName, parentFolderId = "Inbox") {
try {
// Try to find existing folder
const folders = await client
.api(`/me/mailFolders/${parentFolderId}/childFolders`)
.filter(`displayName eq '${folderName}'`)
.get();
if (folders.value && folders.value.length > 0) {
return folders.value[0].id;
}
// Create new folder
const newFolder = await client
.api(`/me/mailFolders/${parentFolderId}/childFolders`)
.post({
displayName: folderName
});
return newFolder.id;
}
catch (error) {
console.error(`Error creating folder ${folderName}:`, error.message);
// Fallback to Inbox if folder creation fails
return parentFolderId;
}
}
async function mapGmailLabelsToFolders(client, gmailLabels) {
const mappings = [];
// Map common Gmail labels to Exchange folders
const commonMappings = {
"INBOX": "Inbox",
"SENT": "Sent Items",
"DRAFT": "Drafts",
"TRASH": "Deleted Items",
"SPAM": "Junk Email",
"IMPORTANT": "Important"
};
for (const label of gmailLabels) {
const folderName = commonMappings[label.toUpperCase()] || label;
try {
const folderId = await getOrCreateFolder(client, folderName);
mappings.push({
gmailLabel: label,
exchangeFolderId: folderId,
exchangeFolderName: folderName
});
}
catch (error) {
console.error(`Error mapping label ${label}:`, error.message);
}
}
return mappings;
}
function getFolderIdForLabel(mappings, labels) {
// Find the first matching label mapping
for (const label of labels) {
const mapping = mappings.find(m => m.gmailLabel === label);
if (mapping) {
return mapping.exchangeFolderId;
}
}
// Default to Inbox
return "Inbox";
}
//# sourceMappingURL=folderMapper.js.map