eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 4.46 kB
JavaScript
import{l as e}from"./chunk-KBOOTKHF-DJqFk2r1.js";var t=`chat:`;function n(e){return e.startsWith(t)}function r(e,n){let r={a:e};return typeof n==`string`&&(r.v=n),`${t}${JSON.stringify(r)}`}function i(e){if(!e)return{actionId:`twilio_callback`,value:void 0};if(!n(e))return{actionId:e,value:e};try{let n=JSON.parse(e.slice(t.length));if(typeof n.a==`string`&&n.a)return{actionId:n.a,value:typeof n.v==`string`?n.v:void 0}}catch{}return{actionId:e,value:e}}var a=`rcs:`,o=`whatsapp:`,s=/^\+?\d/;function c(e){return e.startsWith(a)}function l(e){if(e)try{let t=JSON.parse(e);return typeof t==`object`&&t&&!Array.isArray(t)?t:void 0}catch{return}}function u(e){let t=e.channelMetadata?.type;if(typeof t==`string`){let e=t.toLowerCase();if(e===`rcs`)return`rcs`;if(e===`sms`||e===`mms`)return`sms`;if(e===`whatsapp`)return`whatsapp`}let n=[e.from,e.to].filter(Boolean);for(let e of n){if(e.startsWith(a))return`rcs`;if(e.startsWith(o))return`whatsapp`}return n.some(e=>s.test(e))?`sms`:`unknown`}function d(e){return e.startsWith(`MG`)||c(e)}function f(e){return e.startsWith(a)?e:`${a}${e}`}function p(e){if(d(e.to))return e.to;if(u({channelMetadata:e.channelMetadata,to:e.to})===`rcs`){if(e.messagingServiceSid?.startsWith(`MG`))return e.messagingServiceSid;if(e.messagingServiceSidConfig)return e.messagingServiceSidConfig;if(e.rcsSenderIdConfig)return f(e.rcsSenderIdConfig)}return e.to}function m(e){let t=g(e,`MessageStatus`)??g(e,`SmsStatus`),r=g(e,`Body`),i=g(e,`From`),a=g(e,`To`),o=g(e,`MessageSid`)??g(e,`SmsMessageSid`),s=g(e,`MessagingServiceSid`),c=l(g(e,`ChannelMetadata`));if(t&&!r)return{accountSid:g(e,`AccountSid`),channelPrefix:g(e,`ChannelPrefix`),eventType:g(e,`EventType`),from:i,kind:`status`,messageSid:o,messageStatus:t,raw:e,to:a};let u=g(e,`ButtonPayload`);if(i&&a&&u&&(n(u)||r===void 0))return{accountSid:g(e,`AccountSid`),buttonPayload:u,buttonText:g(e,`ButtonText`),channelMetadata:c,from:i,kind:`action`,messageSid:o,messagingServiceSid:s,raw:e,to:a};let d=g(e,`Latitude`)!==void 0&&g(e,`Longitude`)!==void 0;return i&&a&&(r!==void 0||Number(g(e,`NumMedia`)??0)>0||d)?{accountSid:g(e,`AccountSid`),address:g(e,`Address`),body:r??``,channelMetadata:c,from:i,kind:`text`,label:g(e,`Label`),latitude:g(e,`Latitude`),longitude:g(e,`Longitude`),media:h(e),messageSid:o,messagingServiceSid:s,raw:e,to:a}:{kind:`unsupported`,raw:e}}function h(e){let t=Number(g(e,`NumMedia`)??0),n=[];for(let r=0;r<t;r++){let t=g(e,`MediaUrl${r}`);t&&n.push({contentType:g(e,`MediaContentType${r}`),url:t})}return n}function g(e,t){let n=e.get(t);return n===null||n.length===0?void 0:n}var _=class extends Error{constructor(e){super(e),this.name=`TwilioWebhookError`}},v=class extends _{constructor(e){super(e),this.name=`TwilioWebhookParseError`}},y=class extends _{constructor(e){super(e),this.name=`TwilioWebhookVerificationError`}};async function b(t,n={}){let r=await t.text();if(n.webhookVerifier){let e=await n.webhookVerifier(t,r);if(!e)throw new y(`Twilio webhook verifier rejected the request`);return{body:typeof e==`string`?e:r,params:w(t,typeof e==`string`?e:r)}}let i=t.headers.get(`x-twilio-signature`);if(!i)throw new y(`Twilio signature header is required`);let a=await e(n.authToken,`TWILIO_AUTH_TOKEN`),o=await C(t,n.webhookUrl),s=w(t,r);if(!E(await x({authToken:a,params:t.method.toUpperCase()===`GET`?null:s,url:o}),i))throw new y(`Twilio signature is invalid`);return{body:r,params:s}}async function x(e){let t=await crypto.subtle.importKey(`raw`,new TextEncoder().encode(e.authToken),{hash:`SHA-1`,name:`HMAC`},!1,[`sign`]);return T(await crypto.subtle.sign(`HMAC`,t,new TextEncoder().encode(S(e.url,e.params))))}function S(e,t){if(!t)return e;let n=e,r=new Map;for(let[e,n]of t){let t=r.get(e)??new Set;t.add(n),r.set(e,t)}for(let e of[...r.keys()].sort())for(let t of[...r.get(e)??[]].sort())n+=`${e}${t}`;return n}async function C(e,t){return typeof t==`function`?t(e):t??e.url}function w(e,t){return e.method.toUpperCase()===`GET`?new URL(e.url).searchParams:new URLSearchParams(t)}function T(e){let t=``,n=new Uint8Array(e);for(let e of n)t+=String.fromCharCode(e);return btoa(t)}function E(e,t){let n=Math.abs(e.length-t.length),r=Math.max(e.length,t.length);for(let i=0;i<r;i++){let r=e.charCodeAt(i)||0,a=t.charCodeAt(i)||0;n+=Number(r!==a)}return n===0}async function D(e,t={}){return m((await b(e,t)).params)}export{r as a,d as c,D as d,p as f,b as g,S as h,i,f as l,x as m,v as n,u as o,C as p,y as r,c as s,_ as t,m as u};