UNPKG

@sinch/mcp

Version:

Sinch MCP server

86 lines 4.24 kB
"use strict"; 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