lib/commands/info.ts
import { ParsedMail } from "mailparser";
import { Commands } from "../commandSet";
import { email, operationalDomain } from "../env";
import Alias from "../models/Alias";
import generateReplyEmail from "../generateReplyEmail";
import sendEmail from "../sendEmail";
const commandEmailAddress = `${Commands.Info}@${operationalDomain}`;
export const prepareAliasInfoText = (alias: Alias): string => {
let res = "";
res += `Alias: ${alias.value}@${operationalDomain}\n`;
res += `Description: ${alias.description}\n`;
res += `Created: ${alias.creationDate ? alias.creationDate : "Unknown"}\n`;
res += `Emails received: ${alias.countReceived}\n`;
res += `Emails sent: ${alias.countSent}\n`;
res += `Email last received on: ${
alias.lastReceivedDate ? alias.lastReceivedDate : "-"
}\n`;
res += `Email last sent on: ${
alias.lastSentDate ? alias.lastSentDate : "-"
}\n\n`;
res += `Information generated on ${new Date()}`;
return res;
};
export default async (parsedMail: ParsedMail): Promise<void> => {
const aliasValue = parsedMail.subject;
if (aliasValue === undefined) {
throw new Error("Alias value (email subject) is undefined");
}
const alias = await Alias.getAlias(aliasValue);
if (alias === undefined) {
await sendEmail({
from: commandEmailAddress,
to: email,
subject: `Info: ${aliasValue}@${operationalDomain} does not exist`,
text: "-"
});
return;
}
await sendEmail(
generateReplyEmail(
{
from: {
name: "Info",
address: commandEmailAddress
},
to: email,
subject: parsedMail.subject,
text: prepareAliasInfoText(alias)
},
parsedMail
)
);
};