n8n-nodes-imap-ai
Version:
Simplified IMAP node for n8n with AI-agent support. Clean and modular email and mailbox management for automation workflows.
116 lines • 5.47 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getMailboxListOperation = void 0;
var MailboxListStatusFields;
(function (MailboxListStatusFields) {
MailboxListStatusFields["includeMessageCount"] = "includeMessageCount";
MailboxListStatusFields["includeRecentCount"] = "includeRecentCount";
MailboxListStatusFields["includeUnseenCount"] = "includeUnseenCount";
MailboxListStatusFields["includeUidNext"] = "includeUidNext";
MailboxListStatusFields["includeUidValidity"] = "includeUidValidity";
MailboxListStatusFields["includeHighestModseq"] = "includeHighestModseq";
})(MailboxListStatusFields || (MailboxListStatusFields = {}));
exports.getMailboxListOperation = {
operation: {
name: 'Get Many',
value: 'loadMailboxList',
description: 'Get comprehensive list of all mailbox folders with statistics. Perfect for AI agents to analyze folder structures, find specific mailboxes, or monitor email organization.',
},
parameters: [
{
displayName: 'Include Status Fields',
name: 'includeStatusFields',
type: 'multiOptions',
default: [],
description: 'Select which status fields to include. AI agents can choose specific fields based on their analysis needs.',
options: [
{
name: 'Highest Modseq',
value: MailboxListStatusFields.includeHighestModseq,
},
{
name: 'Message Count',
value: MailboxListStatusFields.includeMessageCount,
},
{
name: 'Recent Count',
value: MailboxListStatusFields.includeRecentCount,
},
{
name: 'UID Next',
value: MailboxListStatusFields.includeUidNext,
},
{
name: 'UID Validity',
value: MailboxListStatusFields.includeUidValidity,
},
{
name: 'Unseen Count',
value: MailboxListStatusFields.includeUnseenCount,
},
],
},
{
displayName: 'Performance Notice',
name: 'noticeSlowResponse',
type: 'notice',
default: '',
description: '💡 Including status fields might slow down the response. AI agents should only request needed fields for optimal performance.',
},
],
async executeImapAction(context, itemIndex, client) {
var _a, _b, _c, _d, _e, _f, _g;
const returnData = [];
(_a = context.logger) === null || _a === void 0 ? void 0 : _a.info(`includeStatusFields: ${context.getNodeParameter('includeStatusFields', itemIndex)}`);
const includeStatusFields = context.getNodeParameter('includeStatusFields', itemIndex);
const statusQuery = {
messages: includeStatusFields.includes(MailboxListStatusFields.includeMessageCount),
recent: includeStatusFields.includes(MailboxListStatusFields.includeRecentCount),
unseen: includeStatusFields.includes(MailboxListStatusFields.includeUnseenCount),
uidnext: includeStatusFields.includes(MailboxListStatusFields.includeUidNext),
uidvalidity: includeStatusFields.includes(MailboxListStatusFields.includeUidValidity),
highestmodseq: includeStatusFields.includes(MailboxListStatusFields.includeHighestModseq),
};
const mailboxes = await client.list({
statusQuery: statusQuery,
});
let totalMailboxes = 0;
let totalMessages = 0;
let totalUnseen = 0;
for (const mailbox of mailboxes) {
(_b = context.logger) === null || _b === void 0 ? void 0 : _b.info(` ${mailbox.path}`);
totalMailboxes++;
if ((_c = mailbox.status) === null || _c === void 0 ? void 0 : _c.messages)
totalMessages += mailbox.status.messages;
if ((_d = mailbox.status) === null || _d === void 0 ? void 0 : _d.unseen)
totalUnseen += mailbox.status.unseen;
const item_json = {
operation: 'getMailboxList',
path: mailbox.path,
name: mailbox.name,
status: mailbox.status,
hasMessages: ((_e = mailbox.status) === null || _e === void 0 ? void 0 : _e.messages) ? mailbox.status.messages > 0 : false,
hasUnseenMessages: ((_f = mailbox.status) === null || _f === void 0 ? void 0 : _f.unseen) ? mailbox.status.unseen > 0 : false,
isLeaf: !mailbox.subscribed,
level: mailbox.path.split('/').length - 1,
};
(_g = context.logger) === null || _g === void 0 ? void 0 : _g.info(` ${JSON.stringify(item_json)}`);
returnData.push({
json: item_json,
});
}
returnData.push({
json: {
operation: 'getMailboxList',
summary: true,
totalMailboxes,
totalMessages,
totalUnseen,
retrievedAt: new Date().toISOString(),
statusFieldsIncluded: includeStatusFields,
},
});
return returnData;
},
};
//# sourceMappingURL=MailboxGetList.js.map