@sinch/mcp
Version:
Sinch MCP server
65 lines • 3.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.retrieveEmailInfoHandler = exports.registerRetrieveEmailInfo = void 0;
const zod_1 = require("zod");
const utils_1 = require("../../utils");
const types_1 = require("../../types");
const mailgun_service_helper_1 = require("./utils/mailgun-service-helper");
const registerRetrieveEmailInfo = (server, tags) => {
if (!(0, utils_1.hasMatchingTag)(['all', 'email', 'notification'], tags)) {
return;
}
server.tool('retrieve-email-info', 'Retrieve the content of an email and the events that happened thanks to its ID', {
emailId: zod_1.z.string().describe('The email ID.'),
domain: zod_1.z.string().optional().describe('The domain to use for retrieving the email. If defined, it will override the domain provided in the environment variable "MAILGUN_DOMAIN".')
}, exports.retrieveEmailInfoHandler);
};
exports.registerRetrieveEmailInfo = registerRetrieveEmailInfo;
const retrieveEmailInfoHandler = async ({ emailId, domain }) => {
const maybeCredentials = (0, mailgun_service_helper_1.getMailgunCredentials)(domain);
if ((0, utils_1.isPromptResponse)(maybeCredentials)) {
return maybeCredentials.promptResponse;
}
const credentials = maybeCredentials;
const resp = await fetch(`https://api.mailgun.net/v3/${credentials.domain}/events?message-id=${emailId}`, {
method: 'GET',
headers: {
Authorization: 'Basic ' + Buffer.from(`api:${credentials.apiKey}`).toString('base64')
}
});
if (resp.status !== 200) {
return new types_1.PromptResponse(`An error occurred when trying to retrieve the events related to the email ID ${emailId}. The status code is ${resp.status}.`).promptResponse;
}
const data = await resp.json();
let storageUrl;
const eventSummary = [];
for (const event of data.items) {
const eventType = event.event;
if (eventType === 'accepted') {
storageUrl = event.storage.url;
}
eventSummary.push(`Event: ${eventType}, Timestamp: ${new Date(event.timestamp * 1000).toISOString()}`);
}
let result = `Summary of events to be presented into an table in chronological order: ${eventSummary}.`;
const storedEmail = await fetch(storageUrl, {
method: 'GET',
headers: {
Authorization: 'Basic ' + Buffer.from(`api:${credentials.apiKey}`).toString('base64')
}
});
if (resp.status !== 200) {
// Don't fail the tool if the email content cannot be retrieved, just inform the user
result += `\nBut an error occurred when trying to retrieve the events related to the email ID ${emailId}. The status code is ${resp.status}.`;
}
else {
const storedEmailData = await storedEmail.json();
result += `\nSender: ${storedEmailData['Sender']}.`;
result += `\nFrom: ${storedEmailData['From']}.`;
result += `\nTo: ${storedEmailData['To']}.`;
result += `\nSubject: ${storedEmailData['Subject']}.`;
result += `\nEmail content: ${storedEmailData['body-html']}.`;
}
return new types_1.PromptResponse(result).promptResponse;
};
exports.retrieveEmailInfoHandler = retrieveEmailInfoHandler;
//# sourceMappingURL=retrieve-email-info.js.map