UNPKG

@sinch/mcp

Version:

Sinch MCP server

48 lines 3.01 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.numberLookupHandler = exports.registerNumberLookup = void 0; const zod_1 = require("zod"); const verification_service_helper_1 = require("./utils/verification-service-helper"); const utils_1 = require("../../utils"); const user_agent_1 = require("../../user-agent"); const types_1 = require("../../types"); const registerNumberLookup = (server, tags) => { if (!(0, utils_1.hasMatchingTag)(['all', 'verification'], tags)) { return; } server.tool('number-lookup', 'With quick and easy access to Number Lookup, you can enhance your communications and keep your database as clean as a whistle. Number Lookup checks against first-party numbering sources and provides real-time feedback. Improve communication by validating and verifying numbers, boosting delivery conversion rates, and saving money on marketing campaigns. Test numbers to ensure your recipients are ready and waiting to receive your messages!', { phoneNumber: zod_1.z.string().describe('Phone number in E.164 format to look up'), }, exports.numberLookupHandler); }; exports.registerNumberLookup = registerNumberLookup; const numberLookupHandler = async ({ phoneNumber }) => { const maybeCredentials = (0, verification_service_helper_1.getVerificationCredentials)(); if ((0, utils_1.isPromptResponse)(maybeCredentials)) { return maybeCredentials.promptResponse; } const credentials = maybeCredentials; // TODO: use the SinchClient once it supports the Number Lookup API to use the signed request instead of basic authentication const resp = await fetch('https://number-lookup.api.sinch.com/v1/lookups', { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: 'Basic ' + Buffer.from(`${credentials.applicationKey}:${credentials.applicationSecret}`).toString('base64'), 'User-Agent': user_agent_1.USER_AGENT }, body: JSON.stringify({ number: phoneNumber, features: ['LineType'] }) }); if (!resp.ok) { const errorText = await resp.text(); return new types_1.PromptResponse(`Failed to look up number ${phoneNumber}. Status: ${resp.status}, Error: ${errorText}`).promptResponse; } const data = await resp.json(); if (!data.line || !data.line.carrier || !data.line.type || !data.countryCode || !data.number) { return new types_1.PromptResponse(`Number lookup for ${phoneNumber} returned incomplete data.`).promptResponse; } return new types_1.PromptResponse(`Line type features: carrier ${data.line.carrier}, type: ${data.line.type}), mobileCountryCode: ${data.line.mobileCountryCode}, mobileNetworkCode: ${data.line.mobileNetworkCode}, countryCode: ${data.countryCode}, number: ${data.number}, traceId: ${data.traceId}`).promptResponse; }; exports.numberLookupHandler = numberLookupHandler; //# sourceMappingURL=number-lookup.js.map