@sinch/mcp
Version:
Sinch MCP server
86 lines • 4.24 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.listAllTemplatesHandler = exports.registerListAllTemplates = void 0;
const utils_1 = require("../../utils");
const format_list_all_templates_response_1 = require("./utils/format-list-all-templates-response");
const conversation_service_helper_1 = require("./utils/conversation-service-helper");
const conversation_tools_helper_1 = require("./utils/conversation-tools-helper");
const types_1 = require("../../types");
const sdk_client_1 = require("@sinch/sdk-client");
const process_1 = __importDefault(require("process"));
const TOOL_KEY = 'listMessagingTemplates';
const TOOL_NAME = (0, conversation_tools_helper_1.getToolName)(TOOL_KEY);
const registerListAllTemplates = (server, tags) => {
if (!(0, utils_1.matchesAnyTag)(tags, conversation_tools_helper_1.toolsConfig[TOOL_KEY].tags))
return;
server.tool(TOOL_NAME, 'Get a list of all messaging-related templates (omni-channel or channel specific) belonging to an account. Note that the Email templates are NOT included in this list - they can be found with another tool: list-email-templates. Do not try to use this tool to list Email templates, it will not work.', exports.listAllTemplatesHandler);
};
exports.registerListAllTemplates = registerListAllTemplates;
const listAllTemplatesHandler = async () => {
const maybeService = (0, conversation_service_helper_1.getConversationService)(TOOL_NAME);
if ((0, utils_1.isPromptResponse)(maybeService)) {
return maybeService.promptResponse;
}
const conversationService = maybeService;
try {
const supportedRegions = Object.values(sdk_client_1.SupportedConversationRegion);
const omniChannelTemplates = [];
const errors = [];
for (const region of supportedRegions) {
try {
(0, conversation_service_helper_1.setTemplateRegion)(region, conversationService);
const response = await conversationService.templatesV2.list({});
const formatted = (0, format_list_all_templates_response_1.formatListAllTemplatesResponse)(response);
omniChannelTemplates.push(...formatted.map(t => ({ ...t, region })));
}
catch (error) {
errors.push({
region,
error: error instanceof Error ? error.message : 'Unknown error'
});
}
}
const whatsAppTemplates = await fetchWhatsAppSpecificTemplates();
return new types_1.PromptResponse(JSON.stringify({
success: errors.length === 0,
templates: {
omni_channel: omniChannelTemplates,
whatsapp: whatsAppTemplates,
...(errors.length > 0 && { errors })
},
total_count: omniChannelTemplates.length + whatsAppTemplates.length
})).promptResponse;
}
catch (error) {
return new types_1.PromptResponse(JSON.stringify({
success: false,
error: error instanceof Error ? error.message : String(error)
})).promptResponse;
}
};
exports.listAllTemplatesHandler = listAllTemplatesHandler;
const fetchWhatsAppSpecificTemplates = async () => {
const resp = await fetch(`https://provisioning.api.sinch.com/v1/projects/${process_1.default.env.PROJECT_ID}/whatsapp/templates`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
Authorization: 'Basic ' + Buffer.from(`${process_1.default.env.KEY_ID}:${process_1.default.env.KEY_SECRET}`).toString('base64')
}
});
if (!resp.ok) {
console.error(`Failed to fetch WhatsApp templates: ${resp.status} ${resp.statusText}`);
return [];
}
const data = (await resp.json());
return data.templates.map((template) => ({
channel: 'WhatsApp',
name: template.name,
language: template.language,
category: template.category,
state: template.state,
}));
};
//# sourceMappingURL=list-messaging-templates.js.map