@opencxh/domain 1.134.6 → 1.134.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,12 +1,12 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const T=10,d=10,m=10,f=5,pe=new Set(["header","section","context","divider","image","list","actions","attachments"]);function b(e){if(typeof e=="string")return e.length>0;if(!e||typeof e!="object")return!1;const n=e;return typeof n.key=="string"||typeof n.value=="string"}function ue(e,n=()=>{}){if(!Array.isArray(e))return[];const t=[];for(const i of e){if(t.length>=T){n("more than "+T+" blocks; the rest was dropped");break}if(!i||typeof i!="object")continue;const a=i;if(!pe.has(a.type)){n("unknown block type "+String(a.type));continue}switch(a.type){case"header":if(!b(a.text)){n("a header without text");continue}break;case"context":if(!b(a.text)){n("a context block without text");continue}break;case"image":if(!a.url||!a.alt){n("an image without url or alt");continue}break;case"section":Array.isArray(a.fields)&&a.fields.length>d&&(n("more than "+d+" fields in a section"),a.fields=a.fields.slice(0,d));break;case"list":if(!Array.isArray(a.items)||a.items.length===0){n("a list without items");continue}a.items.length>m&&(n("more than "+m+" list items"),a.items=a.items.slice(0,m));break;case"actions":{const r=Array.isArray(a.elements)?a.elements:[],o=r.filter(l=>l&&l.action_id&&l.invoke&&b(l.text));if(o.length!==r.length&&n("an action without action_id, invoke or text"),o.length===0)continue;o.length>f&&n("more than "+f+" actions"),a.elements=o.slice(0,f);break}}t.push(a)}return t}function K(e){return e.replace(/<style[\s\S]*?<\/style>/gi," ").replace(/<script[\s\S]*?<\/script>/gi," ").replace(/<[^>]+>/g," ").replace(/&nbsp;/g," ").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#39;/g,"'").replace(/\s+/g," ").trim()}function p(e){if(!e||e<0)return"";const n=Math.floor(e/60),t=Math.floor(e%60);return`${n}:${t.toString().padStart(2,"0")}`}function v(e){return e?` — ${Math.floor(e/60)}m ${e%60}s`:""}function _(e){return e?.split("@")?.[0]||e||""}function u(e){return e.map(n=>n.name).join(", ")}function C(e){return e==="meeting"?"Meeting":e==="video"?"Video call":"Audio call"}const c={VOICE_CALL_STARTED:{shape:"event",channelKind:"voice",icon:"phone",snippet:()=>"Gesprek gestart",timeline:e=>e.direction==="inbound"?`Inbound call started — ${_(e.payload.from)}`:`Outbound call started — ${_(e.payload.to)}`},VOICE_CALL_ANSWERED:{shape:"event",channelKind:"voice",icon:"phone",snippet:()=>"Gesprek aangenomen",timeline:(e,n)=>`Call answered — ${n}`},VOICE_CALL_HOLD:{shape:"event",channelKind:"voice",icon:"phone",snippet:()=>"In de wacht",timeline:(e,n)=>`Call on hold — ${n}`},VOICE_CALL_UNHOLD:{shape:"event",channelKind:"voice",icon:"phone",snippet:()=>"Hervat"},VOICE_CALL_ENDED:{shape:"event",channelKind:"voice",icon:"phone",snippet:e=>`Gesprek beëindigd${e.payload.duration?` (${p(e.payload.duration)})`:""}`,timeline:e=>`Call ended${v(e.payload.duration)}`},VOICE_CALL_MISSED:{shape:"event",channelKind:"voice",icon:"phone",snippet:()=>"Gemiste oproep",timeline:e=>`Missed call — ${_(e.payload.from)}`},VOICE_CALL_FAILED:{shape:"event",channelKind:"voice",icon:"phone",snippet:()=>"Gesprek mislukt",timeline:()=>"Call failed"},VOICE_CALL_VOICEMAIL:{shape:"artifact",channelKind:"voice",icon:"phone",snippet:e=>e.payload.transcription?.trim()?e.payload.transcription:"Voicemail ontvangen"},VIDEO_CALL_STARTED:{shape:"event",channelKind:"video",icon:"video",snippet:()=>"Gesprek gestart",timeline:()=>"Video call started"},VIDEO_CALL_ANSWERED:{shape:"event",channelKind:"video",icon:"video",snippet:()=>"Gesprek aangenomen",timeline:()=>"Video call answered"},VIDEO_CALL_HOLD:{shape:"event",channelKind:"video",icon:"video",snippet:()=>"In de wacht"},VIDEO_CALL_UNHOLD:{shape:"event",channelKind:"video",icon:"video",snippet:()=>"Hervat"},VIDEO_CALL_ENDED:{shape:"event",channelKind:"video",icon:"video",snippet:e=>`Gesprek beëindigd${e.payload.duration?` (${p(e.payload.duration)})`:""}`,timeline:()=>"Video call ended"},VIDEO_CALL_MISSED:{shape:"event",channelKind:"video",icon:"video",snippet:()=>"Gemiste oproep",timeline:()=>"Missed video call"},VIDEO_CALL_FAILED:{shape:"event",channelKind:"video",icon:"video",snippet:()=>"Gesprek mislukt",timeline:()=>"Video call failed"},EMAIL_RECEIVED:{shape:"message",triggerable:!0,displayNameKey:"communication:activity.EMAIL_RECEIVED",component:"communication:EmailActivity",channelKind:"mail",icon:"mail",replyable:!0,carriesText:!0,countsAs:"inbound_message",snippet:O},EMAIL_SENT:{shape:"message",component:"communication:EmailActivity",channelKind:"mail",icon:"mail",replyable:!0,carriesText:!0,countsAs:"outbound_message",snippet:O},CHAT_MESSAGE_SENT:{shape:"message",component:"communication:ChatMessage",channelKind:"chat",icon:"message-circle",replyable:!0,carriesText:!0,countsAs:"outbound_message",snippet:e=>e.payload.text??""},CHAT_MESSAGE_RECEIVED:{shape:"message",triggerable:!0,displayNameKey:"communication:activity.CHAT_MESSAGE_RECEIVED",component:"communication:ChatMessage",channelKind:"chat",icon:"message-circle",replyable:!0,carriesText:!0,countsAs:"inbound_message",snippet:e=>e.payload.text??""},CHAT_MEMBER_JOINED:{shape:"event",channelKind:"chat",icon:"message-circle",snippet:e=>`${u(e.payload.members)} toegevoegd`,timeline:e=>{const n=u(e.payload.members)||"Someone",t=e.payload.initiator?.name?` · added by ${e.payload.initiator.name}`:"";return`${n} joined the chat${t}`}},CHAT_MEMBER_LEFT:{shape:"event",channelKind:"chat",icon:"message-circle",snippet:e=>`${u(e.payload.members)} verlaten`,timeline:e=>{const n=u(e.payload.members)||"Someone",t=e.payload.initiator?.name?` · removed by ${e.payload.initiator.name}`:"";return`${n} left the chat${t}`}},CHAT_RENAMED:{shape:"event",channelKind:"chat",icon:"message-circle",snippet:e=>`Hernoemd naar "${e.payload.newName}"`,timeline:e=>`Chat renamed to "${e.payload.newName}"${e.payload.initiator?` by ${e.payload.initiator.name}`:""}`},CHAT_CALL_STARTED:{shape:"event",channelKind:"chat",icon:"message-circle",snippet:()=>"Gesprek gestart",timeline:e=>`${C(e.payload.callType)} started${e.payload.initiator?` by ${e.payload.initiator.name}`:""}`,joinUrl:e=>e.payload.joinUrl},CHAT_CALL_ENDED:{shape:"event",channelKind:"chat",icon:"message-circle",snippet:e=>`Gesprek beëindigd${e.payload.duration?` (${p(e.payload.duration)})`:""}`,timeline:e=>`${C(e.payload.callType)} ended${v(e.payload.duration)}`,joinUrl:e=>e.payload.joinUrl},CHAT_EVENT:{shape:"event",channelKind:"chat",icon:"message-circle",snippet:e=>e.payload.text??e.payload.eventType,timeline:e=>e.payload.text||e.payload.eventType},TRANSCRIPT_ADDED:{shape:"artifact",triggerable:!0,displayNameKey:"communication:activity.TRANSCRIPT_ADDED",component:"communication:TranscriptionActivity",icon:"captions",carriesText:!0,snippet:e=>(e.payload.segments??[]).map(n=>n.text).join(" ")},COMMENT_ADDED:{shape:"note",component:"communication:CommentActivity",icon:"sticky-note",carriesText:!0,snippet:e=>e.payload.text??""},FILE_UPLOADED:{shape:"artifact",component:"communication:FileActivity",icon:"paperclip",snippet:e=>`Bestand: ${e.payload.fileName}`},AI_MESSAGE_ADDED:{shape:"event",triggerable:!0,displayNameKey:"communication:activity.AI_MESSAGE_ADDED",icon:"circle",snippet:e=>e.payload.output?.text??e.payload.input?.text??"",timeline:()=>"AI message added"},AI_ACTION_PROPOSED:{shape:"event",component:"communication:ProposedActionCard",icon:"circle",playbookAuthored:!0,snippet:e=>`Voorstel wacht op goedkeuring (${e.payload.actions?.length??0} actie(s))`},PLAYBOOK_STARTED:{shape:"event",icon:"circle",playbookAuthored:!0,snippet:e=>`Playbook gestart${e.payload.playbookName?`: ${e.payload.playbookName}`:""}`,timeline:e=>`Playbook gestart${e.payload.playbookName?` — ${e.payload.playbookName}`:""}`},PLAYBOOK_COMPLETED:{shape:"event",icon:"circle",playbookAuthored:!0,snippet:()=>"Playbook afgerond",timeline:()=>"Playbook afgerond"},PLAYBOOK_ESCALATED:{shape:"event",icon:"circle",playbookAuthored:!0,snippet:()=>"Playbook geëscaleerd naar een mens",timeline:()=>"Playbook geëscaleerd naar een mens"},MEETING_SCHEDULED:{shape:"event",icon:"calendar",snippet:e=>`Vergadering gepland: ${e.payload.title}`,timeline:()=>"Meeting scheduled",joinUrl:e=>e.payload.joinUrl},MEETING_STARTED:{shape:"event",icon:"calendar",snippet:e=>`Vergadering gestart: ${e.payload.title}`,timeline:()=>"Meeting started",joinUrl:e=>e.payload.joinUrl},MEETING_ENDED:{shape:"event",icon:"calendar",snippet:e=>`Vergadering beëindigd${e.payload.duration?` (${p(e.payload.duration)})`:""}`,timeline:()=>"Meeting ended"},MEETING_PARTICIPANT_JOINED:{shape:"event",icon:"calendar",snippet:e=>`${e.payload.name} deelgenomen`,timeline:(e,n)=>`${n} joined the meeting`},MEETING_PARTICIPANT_LEFT:{shape:"event",icon:"calendar",snippet:e=>`${e.payload.name} verlaten`,timeline:(e,n)=>`${n} left the meeting`},INTERACTION_CREATED:{shape:"event",icon:"circle",snippet:()=>"Interactie aangemaakt",timeline:(e,n)=>`Interaction started by ${n}`},INTERACTION_STATUS_CHANGED:{shape:"event",triggerable:!0,displayNameKey:"communication:activity.INTERACTION_STATUS_CHANGED",icon:"circle-dot",snippet:e=>`Status: ${e.payload.fromStatus} → ${e.payload.toStatus}`,timeline:(e,n)=>`Status changed to ${e.payload.toStatus} by ${n}`},INTERACTION_ASSIGNED:{shape:"event",icon:"user",snippet:()=>"Interactie toegewezen",timeline:(e,n)=>`Assigned by ${n}`}};function O(e){const n=e.payload,t=n.bodySnippet?.trim()||K(n.body??"");return n.subject?`${n.subject} — ${t}`:t}function s(e){return c[e]}function de(e){return s(e)?.icon??"circle"}function me(e){return s(e)?.channelKind}function fe(e){const n=s(e)?.shape;return n==="message"||n==="note"}function ge(e){return s(e)?.replyable===!0}function Ee(e){return s(e)?.carriesText===!0}function he(e){return s(e)?.countsAs}function ye(e){return s(e)?.playbookAuthored===!0}function w(e){const n=s(e.type)?.snippet;return n?n(e):""}function Ae(e,n){const t=s(e.type)?.timeline;return t?t(e,n):e.type.replace(/_/g," ").toLowerCase()}function be(e){const n=s(e.type)?.joinUrl;return n?n(e):void 0}function E(e,n){let t=e;for(const i of n.split(".")){if(t==null||typeof t!="object")return"";t=t[i]}return t==null?"":typeof t=="string"?t:typeof t=="number"||typeof t=="boolean"?String(t):""}function h(e,n,t){if(e===void 0)return null;if(typeof e=="string")return e||null;if("value"in e)return E(n,e.value)||null;const i={};for(const[r,o]of Object.entries(e.params??{}))i[r]=E(n,o);const a=t(e.key,i);return a===e.key?null:a}function V(e,n){if(!e||typeof e=="string"||"value"in e)return null;const t={};for(const[i,a]of Object.entries(e.params??{}))t[i]=E(n,a);return{key:e.key,params:t}}const _e=e=>e;function R(e){const n=c[e];return{type:e,shape:n.shape,channelKind:n.channelKind,icon:n.icon,replyable:n.replyable===!0,countsAs:n.countsAs,carriesText:n.carriesText===!0,triggerable:n.triggerable===!0,component:n.component,builtIn:!0,displayNameKey:n.displayNameKey}}function D(e){return{type:e.type,shape:e.shape,channelKind:e.channelKind,icon:e.icon||"circle",replyable:e.replyable===!0,countsAs:e.countsAs,carriesText:e.carriesText===!0,triggerable:e.triggerable===!0,component:e.component,builtIn:!1,displayNameKey:e.displayNameKey}}class B{constructor(n=[],t=_e){this.translate=t;for(const i of n)i?.type&&(i.type in c||this.declared.has(i.type)||this.declared.set(i.type,i))}declared=new Map;get(n){if(n in c)return R(n);const t=this.declared.get(n);return t?D(t):void 0}triggerable(){const n=Object.keys(c).filter(i=>c[i].triggerable).map(R),t=[...this.declared.values()].map(D).filter(i=>i.triggerable);return[...n,...t]}timelineText(n,t){const i=c[n.type];if(i?.timeline)return i.timeline(n,t);const a=this.declared.get(n.type);return h(a?.text,n,this.translate)??n.type.replace(/_/g," ").toLowerCase()}snippet(n){const t=c[n.type];if(t?.snippet)return t.snippet(n);const i=this.declared.get(n.type);return h(i?.text,n,this.translate)??""}descriptor(n){return this.declared.get(n)}blocks(n){const t=this.declared.get(n)?.render;return t?.length?t:void 0}get translator(){return this.translate}}const Ie=new B,L=140;function Te(e){const n=e.trim();return n.length<=L?n:n.slice(0,L-1).trimEnd()+"…"}function Se(e,n){const t=V(n?.text,e),i=n?h(n.text,e,a=>a):null;return{activityId:e.id,type:e.type,snippet:Te(i??w(e)),authorName:e.author?.name??"",direction:e.direction,createdAt:e.createdAt??Date.now(),...t?{snippetKey:t.key,snippetParams:t.params}:{}}}function Me(e,n,t=[]){const i=e.createdAt;if(!i)return[];const a=new Set(t);return e.author.type==="user"&&e.author.id&&a.add(e.author.id),Object.entries(n).filter(([r,o])=>o>=i&&!a.has(r)).map(([r])=>r)}function Ne(e){return e.createdAt??0}const ve=[{id:"agent",label:"Agent",labelSource:"user"},{id:"team",label:"Team",labelSource:"team"},{id:"inbox",label:"Inbox",labelSource:"inbox"},{id:"channel",label:"Kanaal",labelSource:"channel"},{id:"provider",label:"Provider",labelSource:"raw"},{id:"status",label:"Status",labelSource:"raw"},{id:"handledBy",label:"Afhandelaar",labelSource:"raw"},{id:"time",label:"Tijd",labelSource:"raw"}];function Ce(e){const n=[];for(const t of Object.keys(e))for(const i of Object.keys(e[t]))n.push({lang:t,key:i,value:e[t][i]});return n}function I(e){return e<10?`0${e}`:`${e}`}function H(e,n){const t=new Date(e),i=`${t.getUTCFullYear()}-${I(t.getUTCMonth()+1)}-${I(t.getUTCDate())}`;return n==="day"?i:`${i}T${I(t.getUTCHours())}`}function j(e,n){const t=new Date(e);return t.setUTCMinutes(0,0,0),n==="day"&&t.setUTCHours(0),t.getTime()}const Oe=36e5,Re=864e5;function De(e,n,t){const i=t==="hour"?Oe:Re,a=[];for(let r=j(e,t);r<=n;r+=i)a.push(H(r,t));return a}const F=[{id:"resource",label:"Resource",labelSource:"raw"},{id:"origin",label:"Herkomst",labelSource:"raw"}],W=F.map(e=>e.id);function Y(e,n){return`${e}.usage.${n}`}function Le(e,n){return n.map(t=>({id:Y(e,t.unit),label:t.label,category:"Verbruik",valueType:t.valueType??"count",aggregation:"sum",supportedDimensions:["provider",...W,...t.extraDimensions??[],"time"]}))}function ke(e){return(e.startsWith("tool:")?e.slice(5):e).replace(/__/g," · ").replace(/\./g," · ").replace(/_/g," ")}const Ue=[{name:"text",type:"string"},{name:"subject",type:"string"},{name:"from",type:"string"},{name:"type",type:"string"},{name:"direction",type:"string"},{name:"channelId",type:"string"},{name:"interactionId",type:"string"},{name:"activityId",type:"string"},{name:"authorType",type:"string"},{name:"authorName",type:"string"},{name:"textRaw",type:"string"},{name:"fromStatus",type:"string"},{name:"toStatus",type:"string"},{name:"contactId",type:"string"},{name:"companyId",type:"string"}],$e={topics:[{name:"topic",type:"string"},{name:"confidence",type:"number"}],question:[{name:"answer",type:"boolean"},{name:"confidence",type:"number"}],extract:[]};function z(e){switch(e.kind){case"user":return`user:${e.userId}`;case"team":return`team:${e.teamId}`;case"org":return"org"}}function xe(e){if(typeof e!="string")return;const n=e.trim();if(n==="org")return{kind:"org"};const t=n.indexOf(":");if(t<=0)return;const i=n.slice(0,t),a=n.slice(t+1).trim();if(a){if(i==="user")return{kind:"user",userId:a};if(i==="team")return{kind:"team",teamId:a}}}function X(e){return z(e)}function Pe(e){switch(e.kind){case"personal":return{kind:"user",userId:e.userId};case"team":return{kind:"team",teamId:e.teamId};case"org":return{kind:"org"}}}function Ge(e){return X(e)}const q=["done","escalated","failed","timed_out","stopped"],J=["awaiting_approval","awaiting_reply"];function Q(e){return q.includes(e)}function Ke(e){return Q(e)}function we(e){return J.includes(e)}const M=[{id:"openai",label:"OpenAI",capabilities:["chat","transcription","embedding"],defaultModel:"gpt-5-mini",baseUrl:"https://api.openai.com/v1"},{id:"gemini",label:"Google Gemini",capabilities:["chat","transcription","embedding"],defaultModel:"gemini-3.5-flash",baseUrl:"https://generativelanguage.googleapis.com/v1beta"},{id:"anthropic",label:"Anthropic",capabilities:["chat"],defaultModel:"claude-haiku-4-5",baseUrl:"https://api.anthropic.com/v1"},{id:"elevenlabs",label:"ElevenLabs",capabilities:["transcription"],baseUrl:"https://api.elevenlabs.io/v1"},{id:"moonshot",label:"Moonshot (Kimi)",capabilities:["chat"],defaultModel:"kimi-k3",baseUrl:"https://api.moonshot.ai/v1"},{id:"deepseek",label:"DeepSeek",capabilities:["chat"],defaultModel:"deepseek-v4-flash",baseUrl:"https://api.deepseek.com/v1"},{id:"groq",label:"Groq",capabilities:["chat"],defaultModel:"openai/gpt-oss-120b",baseUrl:"https://api.groq.com/openai/v1"},{id:"mistral",label:"Mistral",capabilities:["chat"],defaultModel:"mistral-large-latest",baseUrl:"https://api.mistral.ai/v1"},{id:"openrouter",label:"OpenRouter",capabilities:["chat"],defaultModel:"openrouter/auto",baseUrl:"https://openrouter.ai/api/v1"},{id:"ollama",label:"Ollama (self-hosted)",capabilities:["chat"],defaultModel:"llama3.3"},{id:"openai-compatible",label:"OpenAI-compatible (eigen endpoint)",capabilities:["chat"],defaultModel:"default"}];function y(e){return M.find(n=>n.id===e)}function Ve(e){return y(e)?.label??e}function Be(e,n="gpt-5-mini"){return y(e)?.defaultModel??n}function He(e){return M.filter(n=>n.capabilities.includes(e))}function je(e){const n=y(e);return!!n&&!n.baseUrl}const Fe=new Set(["mail","message"]);function Z(e,n){const t=e.settings?.signatures?.[n];return!t||!t.enabled||!t.body||t.body.trim()===""?null:t}function We(e,n,t,i="html"){if(!e)return t;const a=Z(e,n);return a?`${t}${i==="text"?`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const T=10,d=10,m=10,f=5,ue=new Set(["header","section","context","divider","image","list","actions","attachments"]);function b(e){if(typeof e=="string")return e.length>0;if(!e||typeof e!="object")return!1;const n=e;return typeof n.key=="string"||typeof n.value=="string"}function de(e,n=()=>{}){if(!Array.isArray(e))return[];const t=[];for(const i of e){if(t.length>=T){n("more than "+T+" blocks; the rest was dropped");break}if(!i||typeof i!="object")continue;const a=i;if(!ue.has(a.type)){n("unknown block type "+String(a.type));continue}switch(a.type){case"header":if(!b(a.text)){n("a header without text");continue}break;case"context":if(!b(a.text)){n("a context block without text");continue}break;case"image":if(!a.url||!a.alt){n("an image without url or alt");continue}break;case"section":Array.isArray(a.fields)&&a.fields.length>d&&(n("more than "+d+" fields in a section"),a.fields=a.fields.slice(0,d));break;case"list":if(!Array.isArray(a.items)||a.items.length===0){n("a list without items");continue}a.items.length>m&&(n("more than "+m+" list items"),a.items=a.items.slice(0,m));break;case"actions":{const r=Array.isArray(a.elements)?a.elements:[],o=r.filter(l=>l&&l.action_id&&l.invoke&&b(l.text));if(o.length!==r.length&&n("an action without action_id, invoke or text"),o.length===0)continue;o.length>f&&n("more than "+f+" actions"),a.elements=o.slice(0,f);break}}t.push(a)}return t}function w(e){return e.replace(/<style[\s\S]*?<\/style>/gi," ").replace(/<script[\s\S]*?<\/script>/gi," ").replace(/<[^>]+>/g," ").replace(/&nbsp;/g," ").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#39;/g,"'").replace(/\s+/g," ").trim()}function p(e){if(!e||e<0)return"";const n=Math.floor(e/60),t=Math.floor(e%60);return`${n}:${t.toString().padStart(2,"0")}`}function C(e){return e?` — ${Math.floor(e/60)}m ${e%60}s`:""}function I(e){return e?.split("@")?.[0]||e||""}function u(e){return e.map(n=>n.name).join(", ")}function v(e){return e==="meeting"?"Meeting":e==="video"?"Video call":"Audio call"}const c={VOICE_CALL_STARTED:{shape:"event",channelKind:"voice",icon:"phone",snippet:()=>"Gesprek gestart",timeline:e=>e.direction==="inbound"?`Inbound call started — ${I(e.payload.from)}`:`Outbound call started — ${I(e.payload.to)}`},VOICE_CALL_ANSWERED:{shape:"event",channelKind:"voice",icon:"phone",snippet:()=>"Gesprek aangenomen",timeline:(e,n)=>`Call answered — ${n}`},VOICE_CALL_HOLD:{shape:"event",channelKind:"voice",icon:"phone",snippet:()=>"In de wacht",timeline:(e,n)=>`Call on hold — ${n}`},VOICE_CALL_UNHOLD:{shape:"event",channelKind:"voice",icon:"phone",snippet:()=>"Hervat"},VOICE_CALL_ENDED:{shape:"event",channelKind:"voice",icon:"phone",snippet:e=>`Gesprek beëindigd${e.payload.duration?` (${p(e.payload.duration)})`:""}`,timeline:e=>`Call ended${C(e.payload.duration)}`},VOICE_CALL_MISSED:{shape:"event",channelKind:"voice",icon:"phone",snippet:()=>"Gemiste oproep",timeline:e=>`Missed call — ${I(e.payload.from)}`},VOICE_CALL_FAILED:{shape:"event",channelKind:"voice",icon:"phone",snippet:()=>"Gesprek mislukt",timeline:()=>"Call failed"},VOICE_CALL_VOICEMAIL:{shape:"artifact",channelKind:"voice",icon:"phone",snippet:e=>e.payload.transcription?.trim()?e.payload.transcription:"Voicemail ontvangen"},VIDEO_CALL_STARTED:{shape:"event",channelKind:"video",icon:"video",snippet:()=>"Gesprek gestart",timeline:()=>"Video call started"},VIDEO_CALL_ANSWERED:{shape:"event",channelKind:"video",icon:"video",snippet:()=>"Gesprek aangenomen",timeline:()=>"Video call answered"},VIDEO_CALL_HOLD:{shape:"event",channelKind:"video",icon:"video",snippet:()=>"In de wacht"},VIDEO_CALL_UNHOLD:{shape:"event",channelKind:"video",icon:"video",snippet:()=>"Hervat"},VIDEO_CALL_ENDED:{shape:"event",channelKind:"video",icon:"video",snippet:e=>`Gesprek beëindigd${e.payload.duration?` (${p(e.payload.duration)})`:""}`,timeline:()=>"Video call ended"},VIDEO_CALL_MISSED:{shape:"event",channelKind:"video",icon:"video",snippet:()=>"Gemiste oproep",timeline:()=>"Missed video call"},VIDEO_CALL_FAILED:{shape:"event",channelKind:"video",icon:"video",snippet:()=>"Gesprek mislukt",timeline:()=>"Video call failed"},EMAIL_RECEIVED:{shape:"message",triggerable:!0,displayNameKey:"communication:activity.EMAIL_RECEIVED",component:"communication:EmailActivity",channelKind:"mail",icon:"mail",replyable:!0,carriesText:!0,countsAs:"inbound_message",snippet:O},EMAIL_SENT:{shape:"message",component:"communication:EmailActivity",channelKind:"mail",icon:"mail",replyable:!0,carriesText:!0,countsAs:"outbound_message",snippet:O},CHAT_MESSAGE_SENT:{shape:"message",component:"communication:ChatMessage",channelKind:"chat",icon:"message-circle",replyable:!0,carriesText:!0,countsAs:"outbound_message",snippet:e=>e.payload.text??""},CHAT_MESSAGE_RECEIVED:{shape:"message",triggerable:!0,displayNameKey:"communication:activity.CHAT_MESSAGE_RECEIVED",component:"communication:ChatMessage",channelKind:"chat",icon:"message-circle",replyable:!0,carriesText:!0,countsAs:"inbound_message",snippet:e=>e.payload.text??""},CHAT_MEMBER_JOINED:{shape:"event",channelKind:"chat",icon:"message-circle",snippet:e=>`${u(e.payload.members)} toegevoegd`,timeline:e=>{const n=u(e.payload.members)||"Someone",t=e.payload.initiator?.name?` · added by ${e.payload.initiator.name}`:"";return`${n} joined the chat${t}`}},CHAT_MEMBER_LEFT:{shape:"event",channelKind:"chat",icon:"message-circle",snippet:e=>`${u(e.payload.members)} verlaten`,timeline:e=>{const n=u(e.payload.members)||"Someone",t=e.payload.initiator?.name?` · removed by ${e.payload.initiator.name}`:"";return`${n} left the chat${t}`}},CHAT_RENAMED:{shape:"event",channelKind:"chat",icon:"message-circle",snippet:e=>`Hernoemd naar "${e.payload.newName}"`,timeline:e=>`Chat renamed to "${e.payload.newName}"${e.payload.initiator?` by ${e.payload.initiator.name}`:""}`},CHAT_CALL_STARTED:{shape:"event",channelKind:"chat",icon:"message-circle",snippet:()=>"Gesprek gestart",timeline:e=>`${v(e.payload.callType)} started${e.payload.initiator?` by ${e.payload.initiator.name}`:""}`,joinUrl:e=>e.payload.joinUrl},CHAT_CALL_ENDED:{shape:"event",channelKind:"chat",icon:"message-circle",snippet:e=>`Gesprek beëindigd${e.payload.duration?` (${p(e.payload.duration)})`:""}`,timeline:e=>`${v(e.payload.callType)} ended${C(e.payload.duration)}`,joinUrl:e=>e.payload.joinUrl},CHAT_EVENT:{shape:"event",channelKind:"chat",icon:"message-circle",snippet:e=>e.payload.text??e.payload.eventType,timeline:e=>e.payload.text||e.payload.eventType},TRANSCRIPT_ADDED:{shape:"artifact",triggerable:!0,displayNameKey:"communication:activity.TRANSCRIPT_ADDED",component:"communication:TranscriptionActivity",icon:"captions",carriesText:!0,snippet:e=>(e.payload.segments??[]).map(n=>n.text).join(" ")},COMMENT_ADDED:{shape:"note",component:"communication:CommentActivity",icon:"sticky-note",carriesText:!0,snippet:e=>e.payload.text??""},FILE_UPLOADED:{shape:"artifact",component:"communication:FileActivity",icon:"paperclip",snippet:e=>`Bestand: ${e.payload.fileName}`},AI_MESSAGE_ADDED:{shape:"event",triggerable:!0,displayNameKey:"communication:activity.AI_MESSAGE_ADDED",icon:"circle",snippet:e=>e.payload.output?.text??e.payload.input?.text??"",timeline:()=>"AI message added"},AI_ACTION_PROPOSED:{shape:"event",component:"communication:ProposedActionCard",icon:"circle",playbookAuthored:!0,snippet:e=>`Voorstel wacht op goedkeuring (${e.payload.actions?.length??0} actie(s))`},PLAYBOOK_STARTED:{shape:"event",icon:"circle",playbookAuthored:!0,snippet:e=>`Playbook gestart${e.payload.playbookName?`: ${e.payload.playbookName}`:""}`,timeline:e=>`Playbook gestart${e.payload.playbookName?` — ${e.payload.playbookName}`:""}`},PLAYBOOK_COMPLETED:{shape:"event",icon:"circle",playbookAuthored:!0,snippet:()=>"Playbook afgerond",timeline:()=>"Playbook afgerond"},PLAYBOOK_ESCALATED:{shape:"event",icon:"circle",playbookAuthored:!0,snippet:()=>"Playbook geëscaleerd naar een mens",timeline:()=>"Playbook geëscaleerd naar een mens"},MEETING_SCHEDULED:{shape:"event",icon:"calendar",snippet:e=>`Vergadering gepland: ${e.payload.title}`,timeline:()=>"Meeting scheduled",joinUrl:e=>e.payload.joinUrl},MEETING_STARTED:{shape:"event",icon:"calendar",snippet:e=>`Vergadering gestart: ${e.payload.title}`,timeline:()=>"Meeting started",joinUrl:e=>e.payload.joinUrl},MEETING_ENDED:{shape:"event",icon:"calendar",snippet:e=>`Vergadering beëindigd${e.payload.duration?` (${p(e.payload.duration)})`:""}`,timeline:()=>"Meeting ended"},MEETING_PARTICIPANT_JOINED:{shape:"event",icon:"calendar",snippet:e=>`${e.payload.name} deelgenomen`,timeline:(e,n)=>`${n} joined the meeting`},MEETING_PARTICIPANT_LEFT:{shape:"event",icon:"calendar",snippet:e=>`${e.payload.name} verlaten`,timeline:(e,n)=>`${n} left the meeting`},INTERACTION_CREATED:{shape:"event",icon:"circle",snippet:()=>"Interactie aangemaakt",timeline:(e,n)=>`Interaction started by ${n}`},INTERACTION_STATUS_CHANGED:{shape:"event",triggerable:!0,displayNameKey:"communication:activity.INTERACTION_STATUS_CHANGED",icon:"circle-dot",snippet:e=>`Status: ${e.payload.fromStatus} → ${e.payload.toStatus}`,timeline:(e,n)=>`Status changed to ${e.payload.toStatus} by ${n}`},INTERACTION_ASSIGNED:{shape:"event",icon:"user",snippet:()=>"Interactie toegewezen",timeline:(e,n)=>`Assigned by ${n}`}};function O(e){const n=e.payload,t=n.bodySnippet?.trim()||w(n.body??"");return n.subject?`${n.subject} — ${t}`:t}function s(e){return c[e]}function me(e){return s(e)?.icon??"circle"}function fe(e){return s(e)?.channelKind}function ge(e){const n=s(e)?.shape;return n==="message"||n==="note"}function Ee(e){return s(e)?.replyable===!0}function he(e){return s(e)?.carriesText===!0}function ye(e){return s(e)?.countsAs}function Ae(e){return s(e)?.playbookAuthored===!0}function V(e){const n=s(e.type)?.snippet;return n?n(e):""}function be(e,n){const t=s(e.type)?.timeline;return t?t(e,n):e.type.replace(/_/g," ").toLowerCase()}function Ie(e){const n=s(e.type)?.joinUrl;return n?n(e):void 0}function E(e,n){let t=e;for(const i of n.split(".")){if(t==null||typeof t!="object")return"";t=t[i]}return t==null?"":typeof t=="string"?t:typeof t=="number"||typeof t=="boolean"?String(t):""}function h(e,n,t){if(e===void 0)return null;if(typeof e=="string")return e||null;if("value"in e)return E(n,e.value)||null;const i={};for(const[r,o]of Object.entries(e.params??{}))i[r]=E(n,o);const a=t(e.key,i);return a===e.key?null:a}function B(e,n){if(!e||typeof e=="string"||"value"in e)return null;const t={};for(const[i,a]of Object.entries(e.params??{}))t[i]=E(n,a);return{key:e.key,params:t}}const _e=e=>e;function R(e){const n=c[e];return{type:e,shape:n.shape,channelKind:n.channelKind,icon:n.icon,replyable:n.replyable===!0,countsAs:n.countsAs,carriesText:n.carriesText===!0,triggerable:n.triggerable===!0,component:n.component,builtIn:!0,displayNameKey:n.displayNameKey}}function D(e){return{type:e.type,shape:e.shape,channelKind:e.channelKind,icon:e.icon||"circle",replyable:e.replyable===!0,countsAs:e.countsAs,carriesText:e.carriesText===!0,triggerable:e.triggerable===!0,component:e.component,builtIn:!1,displayNameKey:e.displayNameKey}}class H{constructor(n=[],t=_e){this.translate=t;for(const i of n)i?.type&&(i.type in c||this.declared.has(i.type)||this.declared.set(i.type,i))}declared=new Map;get(n){if(n in c)return R(n);const t=this.declared.get(n);return t?D(t):void 0}triggerable(){const n=Object.keys(c).filter(i=>c[i].triggerable).map(R),t=[...this.declared.values()].map(D).filter(i=>i.triggerable);return[...n,...t]}timelineText(n,t){const i=c[n.type];if(i?.timeline)return i.timeline(n,t);const a=this.declared.get(n.type);return h(a?.text,n,this.translate)??n.type.replace(/_/g," ").toLowerCase()}snippet(n){const t=c[n.type];if(t?.snippet)return t.snippet(n);const i=this.declared.get(n.type);return h(i?.text,n,this.translate)??""}descriptor(n){return this.declared.get(n)}blocks(n){const t=this.declared.get(n)?.render;return t?.length?t:void 0}get translator(){return this.translate}}const Te=new H,L=140;function Se(e){const n=e.trim();return n.length<=L?n:n.slice(0,L-1).trimEnd()+"…"}function Me(e,n){const t=B(n?.text,e),i=n?h(n.text,e,a=>a):null;return{activityId:e.id,type:e.type,snippet:Se(i??V(e)),authorName:e.author?.name??"",direction:e.direction,createdAt:e.createdAt??Date.now(),...t?{snippetKey:t.key,snippetParams:t.params}:{}}}function Ne(e,n,t=[]){const i=e.createdAt;if(!i)return[];const a=new Set(t);return e.author.type==="user"&&e.author.id&&a.add(e.author.id),Object.entries(n).filter(([r,o])=>o>=i&&!a.has(r)).map(([r])=>r)}function Ce(e){return e.createdAt??0}const ve=[{id:"agent",label:"Agent",labelSource:"user"},{id:"team",label:"Team",labelSource:"team"},{id:"inbox",label:"Inbox",labelSource:"inbox"},{id:"channel",label:"Kanaal",labelSource:"channel"},{id:"provider",label:"Provider",labelSource:"raw"},{id:"status",label:"Status",labelSource:"raw"},{id:"handledBy",label:"Afhandelaar",labelSource:"raw"},{id:"time",label:"Tijd",labelSource:"raw"}];function Oe(e){const n=[];for(const t of Object.keys(e))for(const i of Object.keys(e[t]))n.push({lang:t,key:i,value:e[t][i]});return n}function _(e){return e<10?`0${e}`:`${e}`}function j(e,n){const t=new Date(e),i=`${t.getUTCFullYear()}-${_(t.getUTCMonth()+1)}-${_(t.getUTCDate())}`;return n==="day"?i:`${i}T${_(t.getUTCHours())}`}function F(e,n){const t=new Date(e);return t.setUTCMinutes(0,0,0),n==="day"&&t.setUTCHours(0),t.getTime()}const Re=36e5,De=864e5;function Le(e,n,t){const i=t==="hour"?Re:De,a=[];for(let r=F(e,t);r<=n;r+=i)a.push(j(r,t));return a}const W=[{id:"resource",label:"Resource",labelSource:"raw"},{id:"origin",label:"Herkomst",labelSource:"raw"}],Y=W.map(e=>e.id);function z(e,n){return`${e}.usage.${n}`}function ke(e,n){return n.map(t=>({id:z(e,t.unit),label:t.label,category:"Verbruik",valueType:t.valueType??"count",aggregation:"sum",supportedDimensions:["provider",...Y,...t.extraDimensions??[],"time"]}))}function Ue(e){return(e.startsWith("tool:")?e.slice(5):e).replace(/__/g," · ").replace(/\./g," · ").replace(/_/g," ")}const $e=[{name:"text",type:"string"},{name:"subject",type:"string"},{name:"from",type:"string"},{name:"type",type:"string"},{name:"direction",type:"string"},{name:"channelId",type:"string"},{name:"interactionId",type:"string"},{name:"activityId",type:"string"},{name:"authorType",type:"string"},{name:"authorName",type:"string"},{name:"textRaw",type:"string"},{name:"fromStatus",type:"string"},{name:"toStatus",type:"string"},{name:"contactId",type:"string"},{name:"companyId",type:"string"}],xe={topics:[{name:"topic",type:"string"},{name:"confidence",type:"number"}],question:[{name:"answer",type:"boolean"},{name:"confidence",type:"number"}],extract:[]};function X(e){switch(e.kind){case"user":return`user:${e.userId}`;case"team":return`team:${e.teamId}`;case"org":return"org"}}function Pe(e){if(typeof e!="string")return;const n=e.trim();if(n==="org")return{kind:"org"};const t=n.indexOf(":");if(t<=0)return;const i=n.slice(0,t),a=n.slice(t+1).trim();if(a){if(i==="user")return{kind:"user",userId:a};if(i==="team")return{kind:"team",teamId:a}}}function q(e){return X(e)}function Ge(e){switch(e.kind){case"personal":return{kind:"user",userId:e.userId};case"team":return{kind:"team",teamId:e.teamId};case"org":return{kind:"org"}}}function Ke(e){return q(e)}const J=["done","escalated","failed","timed_out","stopped"],Q=["awaiting_approval","awaiting_reply"];function Z(e){return J.includes(e)}function we(e){return Z(e)}function Ve(e){return Q.includes(e)}const M=[{id:"openai",label:"OpenAI",capabilities:["chat","transcription","embedding"],defaultModel:"gpt-5-mini",baseUrl:"https://api.openai.com/v1"},{id:"gemini",label:"Google Gemini",capabilities:["chat","transcription","embedding"],defaultModel:"gemini-3.5-flash",baseUrl:"https://generativelanguage.googleapis.com/v1beta"},{id:"anthropic",label:"Anthropic",capabilities:["chat"],defaultModel:"claude-haiku-4-5",baseUrl:"https://api.anthropic.com/v1"},{id:"elevenlabs",label:"ElevenLabs",capabilities:["transcription"],baseUrl:"https://api.elevenlabs.io/v1"},{id:"moonshot",label:"Moonshot (Kimi)",capabilities:["chat"],defaultModel:"kimi-k3",baseUrl:"https://api.moonshot.ai/v1"},{id:"deepseek",label:"DeepSeek",capabilities:["chat"],defaultModel:"deepseek-v4-flash",baseUrl:"https://api.deepseek.com/v1"},{id:"groq",label:"Groq",capabilities:["chat"],defaultModel:"openai/gpt-oss-120b",baseUrl:"https://api.groq.com/openai/v1"},{id:"mistral",label:"Mistral",capabilities:["chat"],defaultModel:"mistral-large-latest",baseUrl:"https://api.mistral.ai/v1"},{id:"openrouter",label:"OpenRouter",capabilities:["chat"],defaultModel:"openrouter/auto",baseUrl:"https://openrouter.ai/api/v1"},{id:"ollama",label:"Ollama (self-hosted)",capabilities:["chat"],defaultModel:"llama3.3"},{id:"openai-compatible",label:"OpenAI-compatible (eigen endpoint)",capabilities:["chat"],defaultModel:"default"}];function y(e){return M.find(n=>n.id===e)}function Be(e){return y(e)?.label??e}function He(e,n="gpt-5-mini"){return y(e)?.defaultModel??n}function je(e){return M.filter(n=>n.capabilities.includes(e))}function Fe(e){const n=y(e);return!!n&&!n.baseUrl}const We=new Set(["mail","message"]);function ee(e,n){const t=e.settings?.signatures?.[n];return!t||!t.enabled||!t.body||t.body.trim()===""?null:t}function Ye(e,n,t,i="html"){if(!e)return t;const a=ee(e,n);return a?`${t}${i==="text"?`
2
2
 
3
- `:n==="mail"?"<br><br>-- <br>":"<br><br>"}${a.body}`:t}function Ye(e){return e.endpoints??[]}const ze=e=>!!e.assignedUserId||!!e.assignedInboxId,Xe=e=>e.status==="closed",qe=e=>({urgent:10,high:5,normal:2,low:1})[e.priority]||0,Je=(e,n=30)=>e.title?.length<=n?e.title:`${e.title.substring(0,n)}...`;function Qe(e,n){return e.lastActivityAt?!(e.seenBy??[]).includes(n):!1}const Ze=2e3,en=500,nn=12e3,tn=4e3,ee=["contact","company"];function an(e){if(!e)return!1;const n=e.slice(0,e.indexOf(":"));return ee.includes(n)}const A={NL:{callingCode:"31",trunkPrefix:"0",nsnMin:7,nsnMax:9},BE:{callingCode:"32",trunkPrefix:"0",nsnMin:8,nsnMax:9},LU:{callingCode:"352",nsnMin:6,nsnMax:9},DE:{callingCode:"49",trunkPrefix:"0",nsnMin:6,nsnMax:13},FR:{callingCode:"33",trunkPrefix:"0",nsnMin:9,nsnMax:9},GB:{callingCode:"44",trunkPrefix:"0",nsnMin:9,nsnMax:10},IE:{callingCode:"353",trunkPrefix:"0",nsnMin:7,nsnMax:9},ES:{callingCode:"34",nsnMin:9,nsnMax:9},PT:{callingCode:"351",nsnMin:9,nsnMax:9},IT:{callingCode:"39",nsnMin:6,nsnMax:11},AT:{callingCode:"43",trunkPrefix:"0",nsnMin:7,nsnMax:13},CH:{callingCode:"41",trunkPrefix:"0",nsnMin:9,nsnMax:9},DK:{callingCode:"45",nsnMin:8,nsnMax:8},SE:{callingCode:"46",trunkPrefix:"0",nsnMin:7,nsnMax:13},NO:{callingCode:"47",nsnMin:8,nsnMax:8},FI:{callingCode:"358",trunkPrefix:"0",nsnMin:5,nsnMax:12},PL:{callingCode:"48",nsnMin:9,nsnMax:9},US:{callingCode:"1",nsnMin:10,nsnMax:10},CA:{callingCode:"1",nsnMin:10,nsnMax:10}},ne="NL",rn=15,on=8,sn=Array.from(new Set(Object.values(A).map(e=>e.callingCode))).sort((e,n)=>n.length-e.length);function k(e){if(e)return A[e.trim().toUpperCase()]}function g(e,n){return e.length>=n.nsnMin&&e.length<=n.nsnMax}function U(e){if(e.length>rn)return null;for(const n of sn){if(!e.startsWith(n))continue;const t=e.slice(n.length);for(const i of Object.values(A)){if(i.callingCode!==n)continue;const a=i.trunkPrefix,r=a&&t.startsWith(a)?t.slice(a.length):t;if(g(r,i))return`+${n}${r}`}return null}return e.length<on?null:`+${e}`}function ln(e){let n=e.trim();const t=n.match(/^(sips?|tel|whatsapp):/i);t&&(n=n.slice(t[0].length));const i=n.indexOf("@");return i>=0&&(n=n.slice(0,i)),n.trim()}function cn(e){if(!e)return!1;const n=e.indexOf("@");if(n<=0)return!1;const t=e.slice(0,n).trim();return!/^[+\d\s().-]+$/.test(t)}function S(e,n){if(!e)return null;const t=ln(e);if(!t)return null;const i=t.startsWith("+"),a=t.replace(/\D/g,"");if(!a)return null;if(i)return U(a);if(a.startsWith("00"))return U(a.slice(2));const r=k(n)??k(ne);if(!r)return null;const o=r.trunkPrefix;if(o&&a.startsWith(o)){const l=a.slice(o.length);return g(l,r)?`+${r.callingCode}${l}`:null}if(a.startsWith(r.callingCode)){const l=a.slice(r.callingCode.length);if(g(l,r))return`+${r.callingCode}${l}`}return!o&&g(a,r)?`+${r.callingCode}${a}`:null}function pn(e,n=9){const t=(e??"").replace(/\D/g,"");return t.length<n?null:t.slice(-n)}function N(e){if(!e)return null;const n=e.trim().toLowerCase(),t=n.lastIndexOf("@");if(t<=0||t===n.length-1)return null;const i=n.slice(0,t).split("+")[0],a=n.slice(t+1);return!i||!a.includes(".")?null:`${i}@${a}`}function un(e){const n=N(e);return n?n.slice(n.lastIndexOf("@")+1):null}const dn=new Set(["co.uk","org.uk","gov.uk","ac.uk","com.au","co.nz","com.br","co.za"]);function te(e){if(!e)return null;const n=e.trim().toLowerCase().replace(/\.$/,"").split(".").filter(Boolean);if(n.length<2)return null;const t=n.slice(-2).join(".");return dn.has(t)&&n.length>=3?n.slice(-3).join("."):t}const ie=new Set(["gmail.com","googlemail.com","outlook.com","hotmail.com","hotmail.nl","hotmail.be","hotmail.co.uk","live.com","live.nl","live.be","msn.com","yahoo.com","yahoo.co.uk","ymail.com","icloud.com","me.com","mac.com","aol.com","gmx.net","gmx.de","web.de","protonmail.com","proton.me","pm.me","tutanota.com","zoho.com","mail.com","ziggo.nl","kpnmail.nl","planet.nl","home.nl","casema.nl","chello.nl","xs4all.nl","telfort.nl","hetnet.nl","zonnet.nl","upcmail.nl","quicknet.nl","telenet.be","skynet.be","proximus.be","scarlet.be"]);function mn(e){const n=te(e);return n?ie.has(n):!1}function fn(e){if(!e)return!1;const n=e.trim().toLowerCase();return n==="tel"||n==="sms"||n==="whatsapp"||n==="fax"}function gn(e,n,t){if(!e||!n)return null;const i=e.trim().toLowerCase();if(i==="tel"||i==="sms"||i==="whatsapp"){const r=S(n,t);return r?`tel:${r}`:null}if(i==="fax"){const r=S(n,t);return r?`fax:${r}`:null}if(i==="mailto"||i==="email"){const r=N(n);return r?`mailto:${r}`:null}const a=n.trim().toLowerCase();return a?`${i}:${a}`:null}const En=/(\*\*|__)(?=\S)([\s\S]*?\S)\1/g,hn=/(\*|_)(?=\S)([^*_\n]*?\S)\1/g;function yn(e){if(typeof e!="string"||!e)return"";let n=e;return n=n.replace(/```[a-z]*\n?/gi,"").replace(/~~~[a-z]*\n?/gi,""),n=n.replace(/!\[([^\]]*)\]\([^)]*\)/g,"$1"),n=n.replace(/\[([^\]]*)\]\([^)]*\)/g,"$1"),n=n.replace(/\[([^\]]*)\]\[[^\]]*\]/g,"$1"),n=n.replace(/<((?:https?|mailto):[^>\s]+)>/gi,"$1"),n=n.split(`
3
+ `:n==="mail"?"<br><br>-- <br>":"<br><br>"}${a.body}`:t}function ze(e){return e.endpoints??[]}const Xe=e=>!!e.assignedUserId||!!e.assignedInboxId,qe=e=>e.status==="closed",Je=e=>({urgent:10,high:5,normal:2,low:1})[e.priority]||0,Qe=(e,n=30)=>e.title?.length<=n?e.title:`${e.title.substring(0,n)}...`;function Ze(e,n){return e.lastActivityAt?!(e.seenBy??[]).includes(n):!1}const en=2e3,nn=500,tn=12e3,an=4e3,ne=["contact","company"];function rn(e){if(!e)return!1;const n=e.slice(0,e.indexOf(":"));return ne.includes(n)}const A={NL:{callingCode:"31",trunkPrefix:"0",nsnMin:7,nsnMax:9},BE:{callingCode:"32",trunkPrefix:"0",nsnMin:8,nsnMax:9},LU:{callingCode:"352",nsnMin:6,nsnMax:9},DE:{callingCode:"49",trunkPrefix:"0",nsnMin:6,nsnMax:13},FR:{callingCode:"33",trunkPrefix:"0",nsnMin:9,nsnMax:9},GB:{callingCode:"44",trunkPrefix:"0",nsnMin:9,nsnMax:10},IE:{callingCode:"353",trunkPrefix:"0",nsnMin:7,nsnMax:9},ES:{callingCode:"34",nsnMin:9,nsnMax:9},PT:{callingCode:"351",nsnMin:9,nsnMax:9},IT:{callingCode:"39",nsnMin:6,nsnMax:11},AT:{callingCode:"43",trunkPrefix:"0",nsnMin:7,nsnMax:13},CH:{callingCode:"41",trunkPrefix:"0",nsnMin:9,nsnMax:9},DK:{callingCode:"45",nsnMin:8,nsnMax:8},SE:{callingCode:"46",trunkPrefix:"0",nsnMin:7,nsnMax:13},NO:{callingCode:"47",nsnMin:8,nsnMax:8},FI:{callingCode:"358",trunkPrefix:"0",nsnMin:5,nsnMax:12},PL:{callingCode:"48",nsnMin:9,nsnMax:9},US:{callingCode:"1",nsnMin:10,nsnMax:10},CA:{callingCode:"1",nsnMin:10,nsnMax:10}},te="NL",on=15,sn=8,ln=Array.from(new Set(Object.values(A).map(e=>e.callingCode))).sort((e,n)=>n.length-e.length);function k(e){if(e)return A[e.trim().toUpperCase()]}function g(e,n){return e.length>=n.nsnMin&&e.length<=n.nsnMax}function U(e){if(e.length>on)return null;for(const n of ln){if(!e.startsWith(n))continue;const t=e.slice(n.length);for(const i of Object.values(A)){if(i.callingCode!==n)continue;const a=i.trunkPrefix,r=a&&t.startsWith(a)?t.slice(a.length):t;if(g(r,i))return`+${n}${r}`}return null}return e.length<sn?null:`+${e}`}function cn(e){let n=e.trim();const t=n.match(/^(sips?|tel|whatsapp):/i);t&&(n=n.slice(t[0].length));const i=n.indexOf("@");return i>=0&&(n=n.slice(0,i)),n.trim()}function pn(e){if(!e)return!1;const n=e.indexOf("@");if(n<=0)return!1;const t=e.slice(0,n).trim();return!/^[+\d\s().-]+$/.test(t)}function S(e,n){if(!e)return null;const t=cn(e);if(!t)return null;const i=t.startsWith("+"),a=t.replace(/\D/g,"");if(!a)return null;if(i)return U(a);if(a.startsWith("00"))return U(a.slice(2));const r=k(n)??k(te);if(!r)return null;const o=r.trunkPrefix;if(o&&a.startsWith(o)){const l=a.slice(o.length);return g(l,r)?`+${r.callingCode}${l}`:null}if(a.startsWith(r.callingCode)){const l=a.slice(r.callingCode.length);if(g(l,r))return`+${r.callingCode}${l}`}return!o&&g(a,r)?`+${r.callingCode}${a}`:null}function un(e,n=9){const t=(e??"").replace(/\D/g,"");return t.length<n?null:t.slice(-n)}function N(e){if(!e)return null;const n=e.trim().toLowerCase(),t=n.lastIndexOf("@");if(t<=0||t===n.length-1)return null;const i=n.slice(0,t).split("+")[0],a=n.slice(t+1);return!i||!a.includes(".")?null:`${i}@${a}`}function dn(e){const n=N(e);return n?n.slice(n.lastIndexOf("@")+1):null}const mn=new Set(["co.uk","org.uk","gov.uk","ac.uk","com.au","co.nz","com.br","co.za"]);function ie(e){if(!e)return null;const n=e.trim().toLowerCase().replace(/\.$/,"").split(".").filter(Boolean);if(n.length<2)return null;const t=n.slice(-2).join(".");return mn.has(t)&&n.length>=3?n.slice(-3).join("."):t}const ae=new Set(["gmail.com","googlemail.com","outlook.com","hotmail.com","hotmail.nl","hotmail.be","hotmail.co.uk","live.com","live.nl","live.be","msn.com","yahoo.com","yahoo.co.uk","ymail.com","icloud.com","me.com","mac.com","aol.com","gmx.net","gmx.de","web.de","protonmail.com","proton.me","pm.me","tutanota.com","zoho.com","mail.com","ziggo.nl","kpnmail.nl","planet.nl","home.nl","casema.nl","chello.nl","xs4all.nl","telfort.nl","hetnet.nl","zonnet.nl","upcmail.nl","quicknet.nl","telenet.be","skynet.be","proximus.be","scarlet.be"]);function fn(e){const n=ie(e);return n?ae.has(n):!1}function gn(e){if(!e)return!1;const n=e.trim().toLowerCase();return n==="tel"||n==="sms"||n==="whatsapp"||n==="fax"}function En(e,n,t){if(!e||!n)return null;const i=e.trim().toLowerCase();if(i==="tel"||i==="sms"||i==="whatsapp"){const r=S(n,t);return r?`tel:${r}`:null}if(i==="fax"){const r=S(n,t);return r?`fax:${r}`:null}if(i==="mailto"||i==="email"){const r=N(n);return r?`mailto:${r}`:null}const a=n.trim().toLowerCase();return a?`${i}:${a}`:null}const hn=/(\*\*|__)(?=\S)([\s\S]*?\S)\1/g,yn=/(\*|_)(?=\S)([^*_\n]*?\S)\1/g;function An(e){if(typeof e!="string"||!e)return"";let n=e;return n=n.replace(/```[a-z]*\n?/gi,"").replace(/~~~[a-z]*\n?/gi,""),n=n.replace(/!\[([^\]]*)\]\([^)]*\)/g,"$1"),n=n.replace(/\[([^\]]*)\]\([^)]*\)/g,"$1"),n=n.replace(/\[([^\]]*)\]\[[^\]]*\]/g,"$1"),n=n.replace(/<((?:https?|mailto):[^>\s]+)>/gi,"$1"),n=n.split(`
4
4
  `).map(t=>t.replace(/^\s{0,3}#{1,6}\s+/,"").replace(/^\s{0,3}>\s?/,"").replace(/^\s*[-*+]\s+/,"").replace(/^\s*\d+[.)]\s+/,"").replace(/^\s*(?:[-*_]\s*){3,}$/,"")).join(`
5
- `),n=n.replace(En,"$2"),n=n.replace(hn,"$2"),n=n.replace(/~~(?=\S)([\s\S]*?\S)~~/g,"$1"),n=n.replace(/`([^`\n]+)`/g,"$1"),n.replace(/\s+/g," ").trim()}const An=[/<blockquote/i,/class="?gmail_quote/i,/id="?[^"]*divRplyFwdMsg/i,/id="?[^"]*mail-editor-reference-message-container/i,/-{3,}\s*Original Message\s*-{3,}/i,/\n_{5,}\s*\n/,/\bOn\b[\s\S]{0,200}?\bwrote:/i],$=/^\s*(?:>+\s*)?(?:from|van|sent|verzonden|to|aan|cc|subject|onderwerp|date|datum)\s*:/i,bn=/^\s*(?:on|op)\b.{0,200}?\b(?:wrote|schreef|geschreven)\s*:?\s*$/i;function _n(e){const n=e.split(`
6
- `);for(let t=0;t<n.length;t++)if(bn.test(n[t])||$.test(n[t])&&n.slice(t+1,t+4).some(i=>$.test(i)))return n.slice(0,t).join(`
5
+ `),n=n.replace(hn,"$2"),n=n.replace(yn,"$2"),n=n.replace(/~~(?=\S)([\s\S]*?\S)~~/g,"$1"),n=n.replace(/`([^`\n]+)`/g,"$1"),n.replace(/\s+/g," ").trim()}const bn=[/<blockquote/i,/class="?gmail_quote/i,/id="?[^"]*divRplyFwdMsg/i,/id="?[^"]*mail-editor-reference-message-container/i,/-{3,}\s*Original Message\s*-{3,}/i,/\n_{5,}\s*\n/,/\bOn\b[\s\S]{0,200}?\bwrote:/i],$=/^\s*(?:>+\s*)?(?:from|van|sent|verzonden|to|aan|cc|subject|onderwerp|date|datum)\s*:/i,In=/^\s*(?:on|op)\b.{0,200}?\b(?:wrote|schreef|geschreven)\s*:?\s*$/i;function _n(e){const n=e.split(`
6
+ `);for(let t=0;t<n.length;t++)if(In.test(n[t])||$.test(n[t])&&n.slice(t+1,t+4).some(i=>$.test(i)))return n.slice(0,t).join(`
7
7
  `).trim();return e}function x(e){let n=e;return n=n.replace(/<(script|style)[\s\S]*?<\/\1>/gi,""),n=n.replace(/<br\s*\/?>/gi,`
8
8
  `),n=n.replace(/<\/(p|div|li|tr|h[1-6]|ul|ol|table)>/gi,`
9
- `),n=n.replace(/<[^>]+>/g,""),n=n.replace(/<[^>]*$/,""),n}function P(e){return e.replace(/&nbsp;/gi," ").replace(/&lt;/gi,"<").replace(/&gt;/gi,">").replace(/&quot;/gi,'"').replace(/&#39;/gi,"'").replace(/&#(\d+);/g,(n,t)=>String.fromCharCode(Number(t))).replace(/&amp;/gi,"&")}function G(e){return e.replace(/\r/g,"").replace(/[ \t]+/g," ").replace(/ *\n */g,`
9
+ `),n=n.replace(/<[^>]+>/g,""),n=n.replace(/<[^>]*$/,""),n}function P(e){return!Number.isInteger(e)||e<0||e>1114111?null:String.fromCodePoint(e)}function G(e){return e.replace(/&nbsp;/gi," ").replace(/&lt;/gi,"<").replace(/&gt;/gi,">").replace(/&quot;/gi,'"').replace(/&#(\d+);/g,(n,t)=>P(Number(t))??n).replace(/&#x([0-9a-f]+);/gi,(n,t)=>P(parseInt(t,16))??n).replace(/&amp;/gi,"&")}function K(e){return e.replace(/\r/g,"").replace(/[ \t]+/g," ").replace(/ *\n */g,`
10
10
  `).replace(/\n{3,}/g,`
11
11
 
12
- `).trim()}function In(e){if(typeof e!="string"||!e)return"";let n=e.length;for(const r of An){const o=e.search(r);o>=0&&o<n&&(n=o)}const t=e.slice(0,n);let i=G(P(x(t)));return i||(i=G(P(x(e)))),_n(i)||i}const Tn=/(^|[._+-])(no-?reply|noreply|donotreply|do-not-reply|newsletter|nieuwsbrief|mailer|mailing|notifications?|bounce|postmaster|marketing)@/i,Sn=/\b(unsubscribe|afmelden|uitschrijven|opt[\s-]?out|manage (your )?preferences|geen (e-?mails?|nieuwsbrief|berichten) meer)\b/i;function Mn(e,n){return!!(e&&Tn.test(e)||n&&Sn.test(n))}const ae=3,re=600;function Nn(e,n){return e>=ae||n>=re}function oe(e,n){const t=new Set(e.disabledIntents??[]),i=e.intentOverrides??{},a=n.intents.filter(o=>!t.has(o.intent)).map(o=>Cn(o,i[o.intent]));if(!e.extraIntents||e.extraIntents.length===0)return a;const r=new Set(a.map(o=>o.intent));for(const o of e.extraIntents)r.has(o.intent)||(a.push(o),r.add(o.intent));return a}function se(e,n){const t={};for(const i of e.intents){if(!i.togglable)continue;const a=n?.[i.intent];t[i.intent]=a??i.defaultEnabled??!0}return t}function vn(e,n){const t=se(e,n);return Object.entries(t).filter(([,i])=>!i).map(([i])=>i)}function Cn(e,n){return n?{intent:n.intent??e.intent,targetSchemes:n.targetSchemes??e.targetSchemes,transport:n.transport??e.transport}:e}function On(e,n){const t=[];for(const i of e){if(!i.enabled)continue;const a=n[i.providerId];if(a)for(const r of oe(i,a))t.push({channel:i,description:a,capability:r})}return t}function Rn(e,n){return n.filter(t=>t.capability.intent===e)}function le(e,n){return n.filter(t=>t.capability.targetSchemes.includes(e))}function Dn(e,n){return le(e.scheme,n)}function Ln(e,n,t){const i=[];for(const a of e)for(const r of t)r.capability.intent===n&&r.capability.targetSchemes.includes(a.scheme)&&i.push({channelIntent:r,endpoint:a});return i}var ce=(e=>(e.MAILTO="mailto",e.SIP="sip",e.TEL="tel",e.WEBHOOK="webhook",e.USERNAME="username",e.ID="id",e.CUSTOM="custom",e.URL="url",e.TELEGRAM="telegram",e.WHATSAPP="whatsapp",e.MESSENGER="messenger",e.INSTAGRAM="instagram",e.VIBER="viber",e.SMS="sms",e.FAX="fax",e.TEAMS="teams",e.CALENDAR="calendar",e))(ce||{});const kn="message_window",Un="message_templates",$n={FROM:"from",TO:"to",CC:"cc",BCC:"bcc",ORGANIZER:"organizer",PRESENTER:"presenter",ATTENDEE:"attendee",OWNER:"owner",MEMBER:"member",GUEST:"guest",HOST:"host",PARTICIPANT:"participant"},xn=(e,n)=>({intent:e,...n}),Pn="folder_management",Gn="remote_search",Kn={ok:!1,code:"UNSUPPORTED",message:"Provider does not support this op"},wn=9e4,Vn="installation-id";exports.ACTIVITY_CATALOG=c;exports.AI_VENDORS=M;exports.ActivityTypeRegistry=B;exports.BUILT_IN_ONLY=Ie;exports.CLASSIFY_VARS=$e;exports.CORE_DIMENSIONS=ve;exports.CommunicationScheme=ce;exports.DEFAULT_MEMORY_BUDGET=tn;exports.DEFAULT_PHONE_REGION=ne;exports.FEATURE_FOLDER_MANAGEMENT=Pn;exports.FEATURE_REMOTE_SEARCH=Gn;exports.INSTALLATION_HEADER=Vn;exports.InteractionParticipantRole=$n;exports.MAX_ACTIONS=f;exports.MAX_BLOCKS=T;exports.MAX_FIELDS=d;exports.MAX_LIST_ITEMS=m;exports.MAX_MEMORY_BUDGET=nn;exports.MAX_MEMORY_CHARS=Ze;exports.MIN_MEMORY_BUDGET=en;exports.PAUSED_RUN_STATUSES=J;exports.PHONE_REGIONS=A;exports.PRESENCE_ONLINE_WINDOW_MS=wn;exports.PROVIDER_FEATURE_MESSAGE_TEMPLATES=Un;exports.PROVIDER_FEATURE_MESSAGE_WINDOW=kn;exports.PUBLIC_EMAIL_DOMAINS=ie;exports.RELATED_SUBJECT_KINDS=ee;exports.SIGNATURE_INTENTS=Fe;exports.SUMMARY_MIN_LAST_CHARS=re;exports.SUMMARY_MIN_MESSAGES=ae;exports.TERMINAL_RUN_STATUSES=q;exports.TRIGGER_VARS=Ue;exports.UNSUPPORTED=Kn;exports.USAGE_DIMENSIONS=F;exports.USAGE_DIMENSION_IDS=W;exports.actingIdentityKey=X;exports.activityIconOf=de;exports.activityJoinUrl=be;exports.activitySnippet=w;exports.activityTextParams=V;exports.activityTimelineText=Ae;exports.activityTimestamp=Ne;exports.activityTypeInfo=s;exports.actorKey=Ge;exports.aiVendorDefaultModel=Be;exports.aiVendorLabel=Ve;exports.aiVendorNeedsBaseUrl=je;exports.aiVendorsWith=He;exports.applySignature=We;exports.buildActivityPreview=Se;exports.buildChannelIntents=On;exports.carriesText=Ee;exports.channelKindOf=me;exports.cleanMessageText=In;exports.defineIntent=xn;exports.disabledIntentsFromCapabilities=vn;exports.emailDomain=un;exports.endpointKey=gn;exports.filterByEndpoint=Dn;exports.filterByIntent=Rn;exports.filterByTargetScheme=le;exports.findAiVendor=y;exports.flattenLocales=Ce;exports.floorToPeriod=j;exports.formatActingIdentity=z;exports.formatPeriod=H;exports.getActivitySeenUserIds=Me;exports.getContactEndpoints=Ye;exports.getShortTitle=Je;exports.getUrgencyScore=qe;exports.humanizeAction=ke;exports.isAssigned=ze;exports.isClosed=Xe;exports.isInteractionUnseen=Qe;exports.isLikelyBulk=Mn;exports.isMessageType=fe;exports.isPaused=we;exports.isPlaybookAuthoredType=ye;exports.isPublicEmailDomain=mn;exports.isReplyableType=ge;exports.isRetryable=Ke;exports.isTerminal=Q;exports.isThreadLongEnough=Nn;exports.looksLikeEmail=cn;exports.matchContactToIntents=Ln;exports.messageCountsAs=he;exports.needsPhoneRegion=fn;exports.normalizeBlocks=ue;exports.normalizeEmail=N;exports.parseActingIdentity=xe;exports.periodsInRange=De;exports.phoneSuffix=pn;exports.plainTextFromMarkdown=yn;exports.playbookActor=Pe;exports.readPath=E;exports.registrableDomain=te;exports.relatedByDefault=an;exports.resolveAccountCapabilities=se;exports.resolveActivityText=h;exports.resolveChannelIntents=oe;exports.resolveSignature=Z;exports.stripHtml=K;exports.toE164=S;exports.usageMetricId=Y;exports.usageMetrics=Le;
12
+ `).trim()}function Tn(e){if(typeof e!="string"||!e)return"";let n=e.length;for(const r of bn){const o=e.search(r);o>=0&&o<n&&(n=o)}const t=e.slice(0,n);let i=K(G(x(t)));return i||(i=K(G(x(e)))),_n(i)||i}const Sn=/(^|[._+-])(no-?reply|noreply|donotreply|do-not-reply|newsletter|nieuwsbrief|mailer|mailing|notifications?|bounce|postmaster|marketing)@/i,Mn=/\b(unsubscribe|afmelden|uitschrijven|opt[\s-]?out|manage (your )?preferences|geen (e-?mails?|nieuwsbrief|berichten) meer)\b/i;function Nn(e,n){return!!(e&&Sn.test(e)||n&&Mn.test(n))}const re=3,oe=600;function Cn(e,n){return e>=re||n>=oe}function se(e,n){const t=new Set(e.disabledIntents??[]),i=e.intentOverrides??{},a=n.intents.filter(o=>!t.has(o.intent)).map(o=>On(o,i[o.intent]));if(!e.extraIntents||e.extraIntents.length===0)return a;const r=new Set(a.map(o=>o.intent));for(const o of e.extraIntents)r.has(o.intent)||(a.push(o),r.add(o.intent));return a}function le(e,n){const t={};for(const i of e.intents){if(!i.togglable)continue;const a=n?.[i.intent];t[i.intent]=a??i.defaultEnabled??!0}return t}function vn(e,n){const t=le(e,n);return Object.entries(t).filter(([,i])=>!i).map(([i])=>i)}function On(e,n){return n?{intent:n.intent??e.intent,targetSchemes:n.targetSchemes??e.targetSchemes,transport:n.transport??e.transport}:e}function Rn(e,n){const t=[];for(const i of e){if(!i.enabled)continue;const a=n[i.providerId];if(a)for(const r of se(i,a))t.push({channel:i,description:a,capability:r})}return t}function Dn(e,n){return n.filter(t=>t.capability.intent===e)}function ce(e,n){return n.filter(t=>t.capability.targetSchemes.includes(e))}function Ln(e,n){return ce(e.scheme,n)}function kn(e,n,t){const i=[];for(const a of e)for(const r of t)r.capability.intent===n&&r.capability.targetSchemes.includes(a.scheme)&&i.push({channelIntent:r,endpoint:a});return i}var pe=(e=>(e.MAILTO="mailto",e.SIP="sip",e.TEL="tel",e.WEBHOOK="webhook",e.USERNAME="username",e.ID="id",e.CUSTOM="custom",e.URL="url",e.TELEGRAM="telegram",e.WHATSAPP="whatsapp",e.MESSENGER="messenger",e.INSTAGRAM="instagram",e.VIBER="viber",e.SMS="sms",e.FAX="fax",e.TEAMS="teams",e.CALENDAR="calendar",e))(pe||{});const Un="message_window",$n="message_templates",xn={FROM:"from",TO:"to",CC:"cc",BCC:"bcc",ORGANIZER:"organizer",PRESENTER:"presenter",ATTENDEE:"attendee",OWNER:"owner",MEMBER:"member",GUEST:"guest",HOST:"host",PARTICIPANT:"participant"},Pn=(e,n)=>({intent:e,...n}),Gn="folder_management",Kn="remote_search",wn={ok:!1,code:"UNSUPPORTED",message:"Provider does not support this op"},Vn=9e4,Bn="installation-id";exports.ACTIVITY_CATALOG=c;exports.AI_VENDORS=M;exports.ActivityTypeRegistry=H;exports.BUILT_IN_ONLY=Te;exports.CLASSIFY_VARS=xe;exports.CORE_DIMENSIONS=ve;exports.CommunicationScheme=pe;exports.DEFAULT_MEMORY_BUDGET=an;exports.DEFAULT_PHONE_REGION=te;exports.FEATURE_FOLDER_MANAGEMENT=Gn;exports.FEATURE_REMOTE_SEARCH=Kn;exports.INSTALLATION_HEADER=Bn;exports.InteractionParticipantRole=xn;exports.MAX_ACTIONS=f;exports.MAX_BLOCKS=T;exports.MAX_FIELDS=d;exports.MAX_LIST_ITEMS=m;exports.MAX_MEMORY_BUDGET=tn;exports.MAX_MEMORY_CHARS=en;exports.MIN_MEMORY_BUDGET=nn;exports.PAUSED_RUN_STATUSES=Q;exports.PHONE_REGIONS=A;exports.PRESENCE_ONLINE_WINDOW_MS=Vn;exports.PROVIDER_FEATURE_MESSAGE_TEMPLATES=$n;exports.PROVIDER_FEATURE_MESSAGE_WINDOW=Un;exports.PUBLIC_EMAIL_DOMAINS=ae;exports.RELATED_SUBJECT_KINDS=ne;exports.SIGNATURE_INTENTS=We;exports.SUMMARY_MIN_LAST_CHARS=oe;exports.SUMMARY_MIN_MESSAGES=re;exports.TERMINAL_RUN_STATUSES=J;exports.TRIGGER_VARS=$e;exports.UNSUPPORTED=wn;exports.USAGE_DIMENSIONS=W;exports.USAGE_DIMENSION_IDS=Y;exports.actingIdentityKey=q;exports.activityIconOf=me;exports.activityJoinUrl=Ie;exports.activitySnippet=V;exports.activityTextParams=B;exports.activityTimelineText=be;exports.activityTimestamp=Ce;exports.activityTypeInfo=s;exports.actorKey=Ke;exports.aiVendorDefaultModel=He;exports.aiVendorLabel=Be;exports.aiVendorNeedsBaseUrl=Fe;exports.aiVendorsWith=je;exports.applySignature=Ye;exports.buildActivityPreview=Me;exports.buildChannelIntents=Rn;exports.carriesText=he;exports.channelKindOf=fe;exports.cleanMessageText=Tn;exports.defineIntent=Pn;exports.disabledIntentsFromCapabilities=vn;exports.emailDomain=dn;exports.endpointKey=En;exports.filterByEndpoint=Ln;exports.filterByIntent=Dn;exports.filterByTargetScheme=ce;exports.findAiVendor=y;exports.flattenLocales=Oe;exports.floorToPeriod=F;exports.formatActingIdentity=X;exports.formatPeriod=j;exports.getActivitySeenUserIds=Ne;exports.getContactEndpoints=ze;exports.getShortTitle=Qe;exports.getUrgencyScore=Je;exports.humanizeAction=Ue;exports.isAssigned=Xe;exports.isClosed=qe;exports.isInteractionUnseen=Ze;exports.isLikelyBulk=Nn;exports.isMessageType=ge;exports.isPaused=Ve;exports.isPlaybookAuthoredType=Ae;exports.isPublicEmailDomain=fn;exports.isReplyableType=Ee;exports.isRetryable=we;exports.isTerminal=Z;exports.isThreadLongEnough=Cn;exports.looksLikeEmail=pn;exports.matchContactToIntents=kn;exports.messageCountsAs=ye;exports.needsPhoneRegion=gn;exports.normalizeBlocks=de;exports.normalizeEmail=N;exports.parseActingIdentity=Pe;exports.periodsInRange=Le;exports.phoneSuffix=un;exports.plainTextFromMarkdown=An;exports.playbookActor=Ge;exports.readPath=E;exports.registrableDomain=ie;exports.relatedByDefault=rn;exports.resolveAccountCapabilities=le;exports.resolveActivityText=h;exports.resolveChannelIntents=se;exports.resolveSignature=ee;exports.stripHtml=w;exports.toE164=S;exports.usageMetricId=z;exports.usageMetrics=ke;
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- const Se = 10, Me = 10, Ce = 10, ve = 5, x = /* @__PURE__ */ new Set([
1
+ const Me = 10, Ce = 10, ve = 10, Ne = 5, U = /* @__PURE__ */ new Set([
2
2
  "header",
3
3
  "section",
4
4
  "context",
@@ -14,7 +14,7 @@ function m(e) {
14
14
  const n = e;
15
15
  return typeof n.key == "string" || typeof n.value == "string";
16
16
  }
17
- function Ne(e, n = () => {
17
+ function Oe(e, n = () => {
18
18
  }) {
19
19
  if (!Array.isArray(e)) return [];
20
20
  const t = [];
@@ -25,7 +25,7 @@ function Ne(e, n = () => {
25
25
  }
26
26
  if (!i || typeof i != "object") continue;
27
27
  const a = i;
28
- if (!x.has(a.type)) {
28
+ if (!U.has(a.type)) {
29
29
  n("unknown block type " + String(a.type));
30
30
  continue;
31
31
  }
@@ -69,7 +69,7 @@ function Ne(e, n = () => {
69
69
  }
70
70
  return t;
71
71
  }
72
- function U(e) {
72
+ function P(e) {
73
73
  return e.replace(/<style[\s\S]*?<\/style>/gi, " ").replace(/<script[\s\S]*?<\/script>/gi, " ").replace(/<[^>]+>/g, " ").replace(/&nbsp;/g, " ").replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&quot;/g, '"').replace(/&#39;/g, "'").replace(/\s+/g, " ").trim();
74
74
  }
75
75
  function p(e) {
@@ -86,7 +86,7 @@ function f(e) {
86
86
  function u(e) {
87
87
  return e.map((n) => n.name).join(", ");
88
88
  }
89
- function _(e) {
89
+ function I(e) {
90
90
  return e === "meeting" ? "Meeting" : e === "video" ? "Video call" : "Audio call";
91
91
  }
92
92
  const c = {
@@ -204,7 +204,7 @@ const c = {
204
204
  replyable: !0,
205
205
  carriesText: !0,
206
206
  countsAs: "inbound_message",
207
- snippet: I
207
+ snippet: _
208
208
  },
209
209
  EMAIL_SENT: {
210
210
  shape: "message",
@@ -214,7 +214,7 @@ const c = {
214
214
  replyable: !0,
215
215
  carriesText: !0,
216
216
  countsAs: "outbound_message",
217
- snippet: I
217
+ snippet: _
218
218
  },
219
219
  /* ---- chat ---- */
220
220
  CHAT_MESSAGE_SENT: {
@@ -271,7 +271,7 @@ const c = {
271
271
  channelKind: "chat",
272
272
  icon: "message-circle",
273
273
  snippet: () => "Gesprek gestart",
274
- timeline: (e) => `${_(e.payload.callType)} started${e.payload.initiator ? ` by ${e.payload.initiator.name}` : ""}`,
274
+ timeline: (e) => `${I(e.payload.callType)} started${e.payload.initiator ? ` by ${e.payload.initiator.name}` : ""}`,
275
275
  joinUrl: (e) => e.payload.joinUrl
276
276
  },
277
277
  CHAT_CALL_ENDED: {
@@ -279,7 +279,7 @@ const c = {
279
279
  channelKind: "chat",
280
280
  icon: "message-circle",
281
281
  snippet: (e) => `Gesprek beëindigd${e.payload.duration ? ` (${p(e.payload.duration)})` : ""}`,
282
- timeline: (e) => `${_(e.payload.callType)} ended${A(e.payload.duration)}`,
282
+ timeline: (e) => `${I(e.payload.callType)} ended${A(e.payload.duration)}`,
283
283
  joinUrl: (e) => e.payload.joinUrl
284
284
  },
285
285
  CHAT_EVENT: {
@@ -404,44 +404,44 @@ const c = {
404
404
  timeline: (e, n) => `Assigned by ${n}`
405
405
  }
406
406
  };
407
- function I(e) {
408
- const n = e.payload, t = n.bodySnippet?.trim() || U(n.body ?? "");
407
+ function _(e) {
408
+ const n = e.payload, t = n.bodySnippet?.trim() || P(n.body ?? "");
409
409
  return n.subject ? `${n.subject} — ${t}` : t;
410
410
  }
411
411
  function l(e) {
412
412
  return c[e];
413
413
  }
414
- function Oe(e) {
414
+ function ke(e) {
415
415
  return l(e)?.icon ?? "circle";
416
416
  }
417
- function ke(e) {
417
+ function De(e) {
418
418
  return l(e)?.channelKind;
419
419
  }
420
- function De(e) {
420
+ function Le(e) {
421
421
  const n = l(e)?.shape;
422
422
  return n === "message" || n === "note";
423
423
  }
424
- function Le(e) {
424
+ function $e(e) {
425
425
  return l(e)?.replyable === !0;
426
426
  }
427
- function $e(e) {
427
+ function Re(e) {
428
428
  return l(e)?.carriesText === !0;
429
429
  }
430
- function Re(e) {
430
+ function xe(e) {
431
431
  return l(e)?.countsAs;
432
432
  }
433
- function xe(e) {
433
+ function Ue(e) {
434
434
  return l(e)?.playbookAuthored === !0;
435
435
  }
436
- function P(e) {
436
+ function w(e) {
437
437
  const n = l(e.type)?.snippet;
438
438
  return n ? n(e) : "";
439
439
  }
440
- function Ue(e, n) {
440
+ function Pe(e, n) {
441
441
  const t = l(e.type)?.timeline;
442
442
  return t ? t(e, n) : e.type.replace(/_/g, " ").toLowerCase();
443
443
  }
444
- function Pe(e) {
444
+ function we(e) {
445
445
  const n = l(e.type)?.joinUrl;
446
446
  return n ? n(e) : void 0;
447
447
  }
@@ -464,14 +464,14 @@ function y(e, n, t) {
464
464
  const a = t(e.key, i);
465
465
  return a === e.key ? null : a;
466
466
  }
467
- function w(e, n) {
467
+ function K(e, n) {
468
468
  if (!e || typeof e == "string" || "value" in e) return null;
469
469
  const t = {};
470
470
  for (const [i, a] of Object.entries(e.params ?? {}))
471
471
  t[i] = h(n, a);
472
472
  return { key: e.key, params: t };
473
473
  }
474
- const K = (e) => e;
474
+ const G = (e) => e;
475
475
  function T(e) {
476
476
  const n = c[e];
477
477
  return {
@@ -503,8 +503,8 @@ function S(e) {
503
503
  displayNameKey: e.displayNameKey
504
504
  };
505
505
  }
506
- class G {
507
- constructor(n = [], t = K) {
506
+ class V {
507
+ constructor(n = [], t = G) {
508
508
  this.translate = t;
509
509
  for (const i of n)
510
510
  i?.type && (i.type in c || this.declared.has(i.type) || this.declared.set(i.type, i));
@@ -552,33 +552,33 @@ class G {
552
552
  return this.translate;
553
553
  }
554
554
  }
555
- const we = new G(), M = 140;
556
- function V(e) {
555
+ const Ke = new V(), M = 140;
556
+ function H(e) {
557
557
  const n = e.trim();
558
558
  return n.length <= M ? n : n.slice(0, M - 1).trimEnd() + "…";
559
559
  }
560
- function Ke(e, n) {
561
- const t = w(n?.text, e), i = n ? y(n.text, e, (a) => a) : null;
560
+ function Ge(e, n) {
561
+ const t = K(n?.text, e), i = n ? y(n.text, e, (a) => a) : null;
562
562
  return {
563
563
  activityId: e.id,
564
564
  type: e.type,
565
- snippet: V(i ?? P(e)),
565
+ snippet: H(i ?? w(e)),
566
566
  authorName: e.author?.name ?? "",
567
567
  direction: e.direction,
568
568
  createdAt: e.createdAt ?? Date.now(),
569
569
  ...t ? { snippetKey: t.key, snippetParams: t.params } : {}
570
570
  };
571
571
  }
572
- function Ge(e, n, t = []) {
572
+ function Ve(e, n, t = []) {
573
573
  const i = e.createdAt;
574
574
  if (!i) return [];
575
575
  const a = new Set(t);
576
576
  return e.author.type === "user" && e.author.id && a.add(e.author.id), Object.entries(n).filter(([r, o]) => o >= i && !a.has(r)).map(([r]) => r);
577
577
  }
578
- function Ve(e) {
578
+ function He(e) {
579
579
  return e.createdAt ?? 0;
580
580
  }
581
- const He = [
581
+ const je = [
582
582
  { id: "agent", label: "Agent", labelSource: "user" },
583
583
  { id: "team", label: "Team", labelSource: "team" },
584
584
  { id: "inbox", label: "Inbox", labelSource: "inbox" },
@@ -588,7 +588,7 @@ const He = [
588
588
  { id: "handledBy", label: "Afhandelaar", labelSource: "raw" },
589
589
  { id: "time", label: "Tijd", labelSource: "raw" }
590
590
  ];
591
- function je(e) {
591
+ function Be(e) {
592
592
  const n = [];
593
593
  for (const t of Object.keys(e))
594
594
  for (const i of Object.keys(e[t]))
@@ -598,47 +598,47 @@ function je(e) {
598
598
  function g(e) {
599
599
  return e < 10 ? `0${e}` : `${e}`;
600
600
  }
601
- function H(e, n) {
601
+ function j(e, n) {
602
602
  const t = new Date(e), i = `${t.getUTCFullYear()}-${g(t.getUTCMonth() + 1)}-${g(t.getUTCDate())}`;
603
603
  return n === "day" ? i : `${i}T${g(t.getUTCHours())}`;
604
604
  }
605
- function j(e, n) {
605
+ function B(e, n) {
606
606
  const t = new Date(e);
607
607
  return t.setUTCMinutes(0, 0, 0), n === "day" && t.setUTCHours(0), t.getTime();
608
608
  }
609
- const B = 36e5, F = 864e5;
610
- function Be(e, n, t) {
611
- const i = t === "hour" ? B : F, a = [];
612
- for (let r = j(e, t); r <= n; r += i)
613
- a.push(H(r, t));
609
+ const F = 36e5, X = 864e5;
610
+ function Fe(e, n, t) {
611
+ const i = t === "hour" ? F : X, a = [];
612
+ for (let r = B(e, t); r <= n; r += i)
613
+ a.push(j(r, t));
614
614
  return a;
615
615
  }
616
- const X = [
616
+ const W = [
617
617
  { id: "resource", label: "Resource", labelSource: "raw" },
618
618
  { id: "origin", label: "Herkomst", labelSource: "raw" }
619
- ], W = X.map((e) => e.id);
620
- function Y(e, n) {
619
+ ], Y = W.map((e) => e.id);
620
+ function z(e, n) {
621
621
  return `${e}.usage.${n}`;
622
622
  }
623
- function Fe(e, n) {
623
+ function Xe(e, n) {
624
624
  return n.map((t) => ({
625
- id: Y(e, t.unit),
625
+ id: z(e, t.unit),
626
626
  label: t.label,
627
627
  category: "Verbruik",
628
628
  valueType: t.valueType ?? "count",
629
629
  aggregation: "sum",
630
630
  supportedDimensions: [
631
631
  "provider",
632
- ...W,
632
+ ...Y,
633
633
  ...t.extraDimensions ?? [],
634
634
  "time"
635
635
  ]
636
636
  }));
637
637
  }
638
- function Xe(e) {
638
+ function We(e) {
639
639
  return (e.startsWith("tool:") ? e.slice(5) : e).replace(/__/g, " · ").replace(/\./g, " · ").replace(/_/g, " ");
640
640
  }
641
- const We = [
641
+ const Ye = [
642
642
  { name: "text", type: "string" },
643
643
  { name: "subject", type: "string" },
644
644
  { name: "from", type: "string" },
@@ -661,7 +661,7 @@ const We = [
661
661
  // een nieuw adres) — een stap die hierop leunt hoort dus een `condition` te hebben.
662
662
  { name: "contactId", type: "string" },
663
663
  { name: "companyId", type: "string" }
664
- ], Ye = {
664
+ ], ze = {
665
665
  topics: [
666
666
  { name: "topic", type: "string" },
667
667
  { name: "confidence", type: "number" }
@@ -672,7 +672,7 @@ const We = [
672
672
  ],
673
673
  extract: []
674
674
  };
675
- function z(e) {
675
+ function q(e) {
676
676
  switch (e.kind) {
677
677
  case "user":
678
678
  return `user:${e.userId}`;
@@ -682,7 +682,7 @@ function z(e) {
682
682
  return "org";
683
683
  }
684
684
  }
685
- function ze(e) {
685
+ function qe(e) {
686
686
  if (typeof e != "string") return;
687
687
  const n = e.trim();
688
688
  if (n === "org") return { kind: "org" };
@@ -694,10 +694,10 @@ function ze(e) {
694
694
  if (i === "team") return { kind: "team", teamId: a };
695
695
  }
696
696
  }
697
- function q(e) {
698
- return z(e);
697
+ function J(e) {
698
+ return q(e);
699
699
  }
700
- function qe(e) {
700
+ function Je(e) {
701
701
  switch (e.kind) {
702
702
  case "personal":
703
703
  return { kind: "user", userId: e.userId };
@@ -707,20 +707,20 @@ function qe(e) {
707
707
  return { kind: "org" };
708
708
  }
709
709
  }
710
- function Je(e) {
711
- return q(e);
712
- }
713
- const J = ["done", "escalated", "failed", "timed_out", "stopped"], Q = ["awaiting_approval", "awaiting_reply"];
714
- function Z(e) {
715
- return J.includes(e);
716
- }
717
710
  function Qe(e) {
718
- return Z(e);
711
+ return J(e);
719
712
  }
720
- function Ze(e) {
713
+ const Q = ["done", "escalated", "failed", "timed_out", "stopped"], Z = ["awaiting_approval", "awaiting_reply"];
714
+ function ee(e) {
721
715
  return Q.includes(e);
722
716
  }
723
- const $ = [
717
+ function Ze(e) {
718
+ return ee(e);
719
+ }
720
+ function en(e) {
721
+ return Z.includes(e);
722
+ }
723
+ const R = [
724
724
  {
725
725
  id: "openai",
726
726
  label: "OpenAI",
@@ -809,50 +809,50 @@ const $ = [
809
809
  }
810
810
  ];
811
811
  function E(e) {
812
- return $.find((n) => n.id === e);
812
+ return R.find((n) => n.id === e);
813
813
  }
814
- function en(e) {
814
+ function nn(e) {
815
815
  return E(e)?.label ?? e;
816
816
  }
817
- function nn(e, n = "gpt-5-mini") {
817
+ function tn(e, n = "gpt-5-mini") {
818
818
  return E(e)?.defaultModel ?? n;
819
819
  }
820
- function tn(e) {
821
- return $.filter((n) => n.capabilities.includes(e));
822
- }
823
820
  function an(e) {
821
+ return R.filter((n) => n.capabilities.includes(e));
822
+ }
823
+ function rn(e) {
824
824
  const n = E(e);
825
825
  return !!n && !n.baseUrl;
826
826
  }
827
- const rn = /* @__PURE__ */ new Set(["mail", "message"]);
828
- function ee(e, n) {
827
+ const on = /* @__PURE__ */ new Set(["mail", "message"]);
828
+ function ne(e, n) {
829
829
  const t = e.settings?.signatures?.[n];
830
830
  return !t || !t.enabled || !t.body || t.body.trim() === "" ? null : t;
831
831
  }
832
- function on(e, n, t, i = "html") {
832
+ function sn(e, n, t, i = "html") {
833
833
  if (!e) return t;
834
- const a = ee(e, n);
834
+ const a = ne(e, n);
835
835
  return a ? `${t}${i === "text" ? `
836
836
 
837
837
  ` : n === "mail" ? "<br><br>-- <br>" : "<br><br>"}${a.body}` : t;
838
838
  }
839
- function sn(e) {
839
+ function ln(e) {
840
840
  return e.endpoints ?? [];
841
841
  }
842
- const ln = (e) => !!e.assignedUserId || !!e.assignedInboxId, cn = (e) => e.status === "closed", pn = (e) => ({
842
+ const cn = (e) => !!e.assignedUserId || !!e.assignedInboxId, pn = (e) => e.status === "closed", un = (e) => ({
843
843
  urgent: 10,
844
844
  high: 5,
845
845
  normal: 2,
846
846
  low: 1
847
- })[e.priority] || 0, un = (e, n = 30) => e.title?.length <= n ? e.title : `${e.title.substring(0, n)}...`;
848
- function dn(e, n) {
847
+ })[e.priority] || 0, dn = (e, n = 30) => e.title?.length <= n ? e.title : `${e.title.substring(0, n)}...`;
848
+ function mn(e, n) {
849
849
  return e.lastActivityAt ? !(e.seenBy ?? []).includes(n) : !1;
850
850
  }
851
- const mn = 2e3, fn = 500, gn = 12e3, hn = 4e3, ne = ["contact", "company"];
852
- function yn(e) {
851
+ const fn = 2e3, gn = 500, hn = 12e3, yn = 4e3, te = ["contact", "company"];
852
+ function En(e) {
853
853
  if (!e) return !1;
854
854
  const n = e.slice(0, e.indexOf(":"));
855
- return ne.includes(n);
855
+ return te.includes(n);
856
856
  }
857
857
  const b = {
858
858
  // The lower bounds are deliberately generous: service ranges (0800/0900) are
@@ -877,7 +877,7 @@ const b = {
877
877
  PL: { callingCode: "48", nsnMin: 9, nsnMax: 9 },
878
878
  US: { callingCode: "1", nsnMin: 10, nsnMax: 10 },
879
879
  CA: { callingCode: "1", nsnMin: 10, nsnMax: 10 }
880
- }, te = "NL", ie = 15, ae = 8, re = Array.from(
880
+ }, ie = "NL", ae = 15, re = 8, oe = Array.from(
881
881
  new Set(Object.values(b).map((e) => e.callingCode))
882
882
  ).sort((e, n) => n.length - e.length);
883
883
  function C(e) {
@@ -888,8 +888,8 @@ function d(e, n) {
888
888
  return e.length >= n.nsnMin && e.length <= n.nsnMax;
889
889
  }
890
890
  function v(e) {
891
- if (e.length > ie) return null;
892
- for (const n of re) {
891
+ if (e.length > ae) return null;
892
+ for (const n of oe) {
893
893
  if (!e.startsWith(n)) continue;
894
894
  const t = e.slice(n.length);
895
895
  for (const i of Object.values(b)) {
@@ -899,16 +899,16 @@ function v(e) {
899
899
  }
900
900
  return null;
901
901
  }
902
- return e.length < ae ? null : `+${e}`;
902
+ return e.length < re ? null : `+${e}`;
903
903
  }
904
- function oe(e) {
904
+ function se(e) {
905
905
  let n = e.trim();
906
906
  const t = n.match(/^(sips?|tel|whatsapp):/i);
907
907
  t && (n = n.slice(t[0].length));
908
908
  const i = n.indexOf("@");
909
909
  return i >= 0 && (n = n.slice(0, i)), n.trim();
910
910
  }
911
- function En(e) {
911
+ function bn(e) {
912
912
  if (!e) return !1;
913
913
  const n = e.indexOf("@");
914
914
  if (n <= 0) return !1;
@@ -917,13 +917,13 @@ function En(e) {
917
917
  }
918
918
  function N(e, n) {
919
919
  if (!e) return null;
920
- const t = oe(e);
920
+ const t = se(e);
921
921
  if (!t) return null;
922
922
  const i = t.startsWith("+"), a = t.replace(/\D/g, "");
923
923
  if (!a) return null;
924
924
  if (i) return v(a);
925
925
  if (a.startsWith("00")) return v(a.slice(2));
926
- const r = C(n) ?? C(te);
926
+ const r = C(n) ?? C(ie);
927
927
  if (!r) return null;
928
928
  const o = r.trunkPrefix;
929
929
  if (o && a.startsWith(o)) {
@@ -936,22 +936,22 @@ function N(e, n) {
936
936
  }
937
937
  return !o && d(a, r) ? `+${r.callingCode}${a}` : null;
938
938
  }
939
- function bn(e, n = 9) {
939
+ function An(e, n = 9) {
940
940
  const t = (e ?? "").replace(/\D/g, "");
941
941
  return t.length < n ? null : t.slice(-n);
942
942
  }
943
- function R(e) {
943
+ function x(e) {
944
944
  if (!e) return null;
945
945
  const n = e.trim().toLowerCase(), t = n.lastIndexOf("@");
946
946
  if (t <= 0 || t === n.length - 1) return null;
947
947
  const i = n.slice(0, t).split("+")[0], a = n.slice(t + 1);
948
948
  return !i || !a.includes(".") ? null : `${i}@${a}`;
949
949
  }
950
- function An(e) {
951
- const n = R(e);
950
+ function In(e) {
951
+ const n = x(e);
952
952
  return n ? n.slice(n.lastIndexOf("@") + 1) : null;
953
953
  }
954
- const se = /* @__PURE__ */ new Set([
954
+ const le = /* @__PURE__ */ new Set([
955
955
  "co.uk",
956
956
  "org.uk",
957
957
  "gov.uk",
@@ -961,14 +961,14 @@ const se = /* @__PURE__ */ new Set([
961
961
  "com.br",
962
962
  "co.za"
963
963
  ]);
964
- function le(e) {
964
+ function ce(e) {
965
965
  if (!e) return null;
966
966
  const n = e.trim().toLowerCase().replace(/\.$/, "").split(".").filter(Boolean);
967
967
  if (n.length < 2) return null;
968
968
  const t = n.slice(-2).join(".");
969
- return se.has(t) && n.length >= 3 ? n.slice(-3).join(".") : t;
969
+ return le.has(t) && n.length >= 3 ? n.slice(-3).join(".") : t;
970
970
  }
971
- const ce = /* @__PURE__ */ new Set([
971
+ const pe = /* @__PURE__ */ new Set([
972
972
  "gmail.com",
973
973
  "googlemail.com",
974
974
  "outlook.com",
@@ -1014,15 +1014,15 @@ const ce = /* @__PURE__ */ new Set([
1014
1014
  "scarlet.be"
1015
1015
  ]);
1016
1016
  function _n(e) {
1017
- const n = le(e);
1018
- return n ? ce.has(n) : !1;
1017
+ const n = ce(e);
1018
+ return n ? pe.has(n) : !1;
1019
1019
  }
1020
- function In(e) {
1020
+ function Tn(e) {
1021
1021
  if (!e) return !1;
1022
1022
  const n = e.trim().toLowerCase();
1023
1023
  return n === "tel" || n === "sms" || n === "whatsapp" || n === "fax";
1024
1024
  }
1025
- function Tn(e, n, t) {
1025
+ function Sn(e, n, t) {
1026
1026
  if (!e || !n) return null;
1027
1027
  const i = e.trim().toLowerCase();
1028
1028
  if (i === "tel" || i === "sms" || i === "whatsapp") {
@@ -1034,23 +1034,23 @@ function Tn(e, n, t) {
1034
1034
  return r ? `fax:${r}` : null;
1035
1035
  }
1036
1036
  if (i === "mailto" || i === "email") {
1037
- const r = R(n);
1037
+ const r = x(n);
1038
1038
  return r ? `mailto:${r}` : null;
1039
1039
  }
1040
1040
  const a = n.trim().toLowerCase();
1041
1041
  return a ? `${i}:${a}` : null;
1042
1042
  }
1043
- const pe = /(\*\*|__)(?=\S)([\s\S]*?\S)\1/g, ue = /(\*|_)(?=\S)([^*_\n]*?\S)\1/g;
1044
- function Sn(e) {
1043
+ const ue = /(\*\*|__)(?=\S)([\s\S]*?\S)\1/g, de = /(\*|_)(?=\S)([^*_\n]*?\S)\1/g;
1044
+ function Mn(e) {
1045
1045
  if (typeof e != "string" || !e) return "";
1046
1046
  let n = e;
1047
1047
  return n = n.replace(/```[a-z]*\n?/gi, "").replace(/~~~[a-z]*\n?/gi, ""), n = n.replace(/!\[([^\]]*)\]\([^)]*\)/g, "$1"), n = n.replace(/\[([^\]]*)\]\([^)]*\)/g, "$1"), n = n.replace(/\[([^\]]*)\]\[[^\]]*\]/g, "$1"), n = n.replace(/<((?:https?|mailto):[^>\s]+)>/gi, "$1"), n = n.split(`
1048
1048
  `).map(
1049
1049
  (t) => t.replace(/^\s{0,3}#{1,6}\s+/, "").replace(/^\s{0,3}>\s?/, "").replace(/^\s*[-*+]\s+/, "").replace(/^\s*\d+[.)]\s+/, "").replace(/^\s*(?:[-*_]\s*){3,}$/, "")
1050
1050
  ).join(`
1051
- `), n = n.replace(pe, "$2"), n = n.replace(ue, "$2"), n = n.replace(/~~(?=\S)([\s\S]*?\S)~~/g, "$1"), n = n.replace(/`([^`\n]+)`/g, "$1"), n.replace(/\s+/g, " ").trim();
1051
+ `), n = n.replace(ue, "$2"), n = n.replace(de, "$2"), n = n.replace(/~~(?=\S)([\s\S]*?\S)~~/g, "$1"), n = n.replace(/`([^`\n]+)`/g, "$1"), n.replace(/\s+/g, " ").trim();
1052
1052
  }
1053
- const de = [
1053
+ const me = [
1054
1054
  /<blockquote/i,
1055
1055
  /class="?gmail_quote/i,
1056
1056
  // Gmail quote container
@@ -1063,12 +1063,12 @@ const de = [
1063
1063
  // Outlook underscore separator before "From:"
1064
1064
  /\bOn\b[\s\S]{0,200}?\bwrote:/i
1065
1065
  // Gmail "On <date> <name> wrote:"
1066
- ], O = /^\s*(?:>+\s*)?(?:from|van|sent|verzonden|to|aan|cc|subject|onderwerp|date|datum)\s*:/i, me = /^\s*(?:on|op)\b.{0,200}?\b(?:wrote|schreef|geschreven)\s*:?\s*$/i;
1067
- function fe(e) {
1066
+ ], O = /^\s*(?:>+\s*)?(?:from|van|sent|verzonden|to|aan|cc|subject|onderwerp|date|datum)\s*:/i, fe = /^\s*(?:on|op)\b.{0,200}?\b(?:wrote|schreef|geschreven)\s*:?\s*$/i;
1067
+ function ge(e) {
1068
1068
  const n = e.split(`
1069
1069
  `);
1070
1070
  for (let t = 0; t < n.length; t++)
1071
- if (me.test(n[t]) || O.test(n[t]) && n.slice(t + 1, t + 4).some((i) => O.test(i)))
1071
+ if (fe.test(n[t]) || O.test(n[t]) && n.slice(t + 1, t + 4).some((i) => O.test(i)))
1072
1072
  return n.slice(0, t).join(`
1073
1073
  `).trim();
1074
1074
  return e;
@@ -1080,34 +1080,37 @@ function k(e) {
1080
1080
  `), n = n.replace(/<[^>]+>/g, ""), n = n.replace(/<[^>]*$/, ""), n;
1081
1081
  }
1082
1082
  function D(e) {
1083
- return e.replace(/&nbsp;/gi, " ").replace(/&lt;/gi, "<").replace(/&gt;/gi, ">").replace(/&quot;/gi, '"').replace(/&#39;/gi, "'").replace(/&#(\d+);/g, (n, t) => String.fromCharCode(Number(t))).replace(/&amp;/gi, "&");
1083
+ return !Number.isInteger(e) || e < 0 || e > 1114111 ? null : String.fromCodePoint(e);
1084
1084
  }
1085
1085
  function L(e) {
1086
+ return e.replace(/&nbsp;/gi, " ").replace(/&lt;/gi, "<").replace(/&gt;/gi, ">").replace(/&quot;/gi, '"').replace(/&#(\d+);/g, (n, t) => D(Number(t)) ?? n).replace(/&#x([0-9a-f]+);/gi, (n, t) => D(parseInt(t, 16)) ?? n).replace(/&amp;/gi, "&");
1087
+ }
1088
+ function $(e) {
1086
1089
  return e.replace(/\r/g, "").replace(/[ \t]+/g, " ").replace(/ *\n */g, `
1087
1090
  `).replace(/\n{3,}/g, `
1088
1091
 
1089
1092
  `).trim();
1090
1093
  }
1091
- function Mn(e) {
1094
+ function Cn(e) {
1092
1095
  if (typeof e != "string" || !e) return "";
1093
1096
  let n = e.length;
1094
- for (const r of de) {
1097
+ for (const r of me) {
1095
1098
  const o = e.search(r);
1096
1099
  o >= 0 && o < n && (n = o);
1097
1100
  }
1098
1101
  const t = e.slice(0, n);
1099
- let i = L(D(k(t)));
1100
- return i || (i = L(D(k(e)))), fe(i) || i;
1102
+ let i = $(L(k(t)));
1103
+ return i || (i = $(L(k(e)))), ge(i) || i;
1101
1104
  }
1102
- const ge = /(^|[._+-])(no-?reply|noreply|donotreply|do-not-reply|newsletter|nieuwsbrief|mailer|mailing|notifications?|bounce|postmaster|marketing)@/i, he = /\b(unsubscribe|afmelden|uitschrijven|opt[\s-]?out|manage (your )?preferences|geen (e-?mails?|nieuwsbrief|berichten) meer)\b/i;
1103
- function Cn(e, n) {
1104
- return !!(e && ge.test(e) || n && he.test(n));
1105
- }
1106
- const ye = 3, Ee = 600;
1105
+ const he = /(^|[._+-])(no-?reply|noreply|donotreply|do-not-reply|newsletter|nieuwsbrief|mailer|mailing|notifications?|bounce|postmaster|marketing)@/i, ye = /\b(unsubscribe|afmelden|uitschrijven|opt[\s-]?out|manage (your )?preferences|geen (e-?mails?|nieuwsbrief|berichten) meer)\b/i;
1107
1106
  function vn(e, n) {
1108
- return e >= ye || n >= Ee;
1107
+ return !!(e && he.test(e) || n && ye.test(n));
1108
+ }
1109
+ const Ee = 3, be = 600;
1110
+ function Nn(e, n) {
1111
+ return e >= Ee || n >= be;
1109
1112
  }
1110
- function be(e, n) {
1113
+ function Ae(e, n) {
1111
1114
  const t = new Set(e.disabledIntents ?? []), i = e.intentOverrides ?? {}, a = n.intents.filter((o) => !t.has(o.intent)).map((o) => _e(o, i[o.intent]));
1112
1115
  if (!e.extraIntents || e.extraIntents.length === 0) return a;
1113
1116
  const r = new Set(a.map((o) => o.intent));
@@ -1115,7 +1118,7 @@ function be(e, n) {
1115
1118
  r.has(o.intent) || (a.push(o), r.add(o.intent));
1116
1119
  return a;
1117
1120
  }
1118
- function Ae(e, n) {
1121
+ function Ie(e, n) {
1119
1122
  const t = {};
1120
1123
  for (const i of e.intents) {
1121
1124
  if (!i.togglable) continue;
@@ -1124,8 +1127,8 @@ function Ae(e, n) {
1124
1127
  }
1125
1128
  return t;
1126
1129
  }
1127
- function Nn(e, n) {
1128
- const t = Ae(e, n);
1130
+ function On(e, n) {
1131
+ const t = Ie(e, n);
1129
1132
  return Object.entries(t).filter(([, i]) => !i).map(([i]) => i);
1130
1133
  }
1131
1134
  function _e(e, n) {
@@ -1135,35 +1138,35 @@ function _e(e, n) {
1135
1138
  transport: n.transport ?? e.transport
1136
1139
  } : e;
1137
1140
  }
1138
- function On(e, n) {
1141
+ function kn(e, n) {
1139
1142
  const t = [];
1140
1143
  for (const i of e) {
1141
1144
  if (!i.enabled) continue;
1142
1145
  const a = n[i.providerId];
1143
1146
  if (a)
1144
- for (const r of be(i, a))
1147
+ for (const r of Ae(i, a))
1145
1148
  t.push({ channel: i, description: a, capability: r });
1146
1149
  }
1147
1150
  return t;
1148
1151
  }
1149
- function kn(e, n) {
1152
+ function Dn(e, n) {
1150
1153
  return n.filter((t) => t.capability.intent === e);
1151
1154
  }
1152
- function Ie(e, n) {
1155
+ function Te(e, n) {
1153
1156
  return n.filter((t) => t.capability.targetSchemes.includes(e));
1154
1157
  }
1155
- function Dn(e, n) {
1156
- return Ie(e.scheme, n);
1158
+ function Ln(e, n) {
1159
+ return Te(e.scheme, n);
1157
1160
  }
1158
- function Ln(e, n, t) {
1161
+ function $n(e, n, t) {
1159
1162
  const i = [];
1160
1163
  for (const a of e)
1161
1164
  for (const r of t)
1162
1165
  r.capability.intent === n && r.capability.targetSchemes.includes(a.scheme) && i.push({ channelIntent: r, endpoint: a });
1163
1166
  return i;
1164
1167
  }
1165
- var Te = /* @__PURE__ */ ((e) => (e.MAILTO = "mailto", e.SIP = "sip", e.TEL = "tel", e.WEBHOOK = "webhook", e.USERNAME = "username", e.ID = "id", e.CUSTOM = "custom", e.URL = "url", e.TELEGRAM = "telegram", e.WHATSAPP = "whatsapp", e.MESSENGER = "messenger", e.INSTAGRAM = "instagram", e.VIBER = "viber", e.SMS = "sms", e.FAX = "fax", e.TEAMS = "teams", e.CALENDAR = "calendar", e))(Te || {});
1166
- const $n = "message_window", Rn = "message_templates", xn = {
1168
+ var Se = /* @__PURE__ */ ((e) => (e.MAILTO = "mailto", e.SIP = "sip", e.TEL = "tel", e.WEBHOOK = "webhook", e.USERNAME = "username", e.ID = "id", e.CUSTOM = "custom", e.URL = "url", e.TELEGRAM = "telegram", e.WHATSAPP = "whatsapp", e.MESSENGER = "messenger", e.INSTAGRAM = "instagram", e.VIBER = "viber", e.SMS = "sms", e.FAX = "fax", e.TEAMS = "teams", e.CALENDAR = "calendar", e))(Se || {});
1169
+ const Rn = "message_window", xn = "message_templates", Un = {
1167
1170
  // E-mail
1168
1171
  FROM: "from",
1169
1172
  TO: "to",
@@ -1180,111 +1183,111 @@ const $n = "message_window", Rn = "message_templates", xn = {
1180
1183
  // Voice/conference
1181
1184
  HOST: "host",
1182
1185
  PARTICIPANT: "participant"
1183
- }, Un = (e, n) => ({ intent: e, ...n }), Pn = "folder_management", wn = "remote_search", Kn = { ok: !1, code: "UNSUPPORTED", message: "Provider does not support this op" }, Gn = 9e4, Vn = "installation-id";
1186
+ }, Pn = (e, n) => ({ intent: e, ...n }), wn = "folder_management", Kn = "remote_search", Gn = { ok: !1, code: "UNSUPPORTED", message: "Provider does not support this op" }, Vn = 9e4, Hn = "installation-id";
1184
1187
  export {
1185
1188
  c as ACTIVITY_CATALOG,
1186
- $ as AI_VENDORS,
1187
- G as ActivityTypeRegistry,
1188
- we as BUILT_IN_ONLY,
1189
- Ye as CLASSIFY_VARS,
1190
- He as CORE_DIMENSIONS,
1191
- Te as CommunicationScheme,
1192
- hn as DEFAULT_MEMORY_BUDGET,
1193
- te as DEFAULT_PHONE_REGION,
1194
- Pn as FEATURE_FOLDER_MANAGEMENT,
1195
- wn as FEATURE_REMOTE_SEARCH,
1196
- Vn as INSTALLATION_HEADER,
1197
- xn as InteractionParticipantRole,
1198
- ve as MAX_ACTIONS,
1199
- Se as MAX_BLOCKS,
1200
- Me as MAX_FIELDS,
1201
- Ce as MAX_LIST_ITEMS,
1202
- gn as MAX_MEMORY_BUDGET,
1203
- mn as MAX_MEMORY_CHARS,
1204
- fn as MIN_MEMORY_BUDGET,
1205
- Q as PAUSED_RUN_STATUSES,
1189
+ R as AI_VENDORS,
1190
+ V as ActivityTypeRegistry,
1191
+ Ke as BUILT_IN_ONLY,
1192
+ ze as CLASSIFY_VARS,
1193
+ je as CORE_DIMENSIONS,
1194
+ Se as CommunicationScheme,
1195
+ yn as DEFAULT_MEMORY_BUDGET,
1196
+ ie as DEFAULT_PHONE_REGION,
1197
+ wn as FEATURE_FOLDER_MANAGEMENT,
1198
+ Kn as FEATURE_REMOTE_SEARCH,
1199
+ Hn as INSTALLATION_HEADER,
1200
+ Un as InteractionParticipantRole,
1201
+ Ne as MAX_ACTIONS,
1202
+ Me as MAX_BLOCKS,
1203
+ Ce as MAX_FIELDS,
1204
+ ve as MAX_LIST_ITEMS,
1205
+ hn as MAX_MEMORY_BUDGET,
1206
+ fn as MAX_MEMORY_CHARS,
1207
+ gn as MIN_MEMORY_BUDGET,
1208
+ Z as PAUSED_RUN_STATUSES,
1206
1209
  b as PHONE_REGIONS,
1207
- Gn as PRESENCE_ONLINE_WINDOW_MS,
1208
- Rn as PROVIDER_FEATURE_MESSAGE_TEMPLATES,
1209
- $n as PROVIDER_FEATURE_MESSAGE_WINDOW,
1210
- ce as PUBLIC_EMAIL_DOMAINS,
1211
- ne as RELATED_SUBJECT_KINDS,
1212
- rn as SIGNATURE_INTENTS,
1213
- Ee as SUMMARY_MIN_LAST_CHARS,
1214
- ye as SUMMARY_MIN_MESSAGES,
1215
- J as TERMINAL_RUN_STATUSES,
1216
- We as TRIGGER_VARS,
1217
- Kn as UNSUPPORTED,
1218
- X as USAGE_DIMENSIONS,
1219
- W as USAGE_DIMENSION_IDS,
1220
- q as actingIdentityKey,
1221
- Oe as activityIconOf,
1222
- Pe as activityJoinUrl,
1223
- P as activitySnippet,
1224
- w as activityTextParams,
1225
- Ue as activityTimelineText,
1226
- Ve as activityTimestamp,
1210
+ Vn as PRESENCE_ONLINE_WINDOW_MS,
1211
+ xn as PROVIDER_FEATURE_MESSAGE_TEMPLATES,
1212
+ Rn as PROVIDER_FEATURE_MESSAGE_WINDOW,
1213
+ pe as PUBLIC_EMAIL_DOMAINS,
1214
+ te as RELATED_SUBJECT_KINDS,
1215
+ on as SIGNATURE_INTENTS,
1216
+ be as SUMMARY_MIN_LAST_CHARS,
1217
+ Ee as SUMMARY_MIN_MESSAGES,
1218
+ Q as TERMINAL_RUN_STATUSES,
1219
+ Ye as TRIGGER_VARS,
1220
+ Gn as UNSUPPORTED,
1221
+ W as USAGE_DIMENSIONS,
1222
+ Y as USAGE_DIMENSION_IDS,
1223
+ J as actingIdentityKey,
1224
+ ke as activityIconOf,
1225
+ we as activityJoinUrl,
1226
+ w as activitySnippet,
1227
+ K as activityTextParams,
1228
+ Pe as activityTimelineText,
1229
+ He as activityTimestamp,
1227
1230
  l as activityTypeInfo,
1228
- Je as actorKey,
1229
- nn as aiVendorDefaultModel,
1230
- en as aiVendorLabel,
1231
- an as aiVendorNeedsBaseUrl,
1232
- tn as aiVendorsWith,
1233
- on as applySignature,
1234
- Ke as buildActivityPreview,
1235
- On as buildChannelIntents,
1236
- $e as carriesText,
1237
- ke as channelKindOf,
1238
- Mn as cleanMessageText,
1239
- Un as defineIntent,
1240
- Nn as disabledIntentsFromCapabilities,
1241
- An as emailDomain,
1242
- Tn as endpointKey,
1243
- Dn as filterByEndpoint,
1244
- kn as filterByIntent,
1245
- Ie as filterByTargetScheme,
1231
+ Qe as actorKey,
1232
+ tn as aiVendorDefaultModel,
1233
+ nn as aiVendorLabel,
1234
+ rn as aiVendorNeedsBaseUrl,
1235
+ an as aiVendorsWith,
1236
+ sn as applySignature,
1237
+ Ge as buildActivityPreview,
1238
+ kn as buildChannelIntents,
1239
+ Re as carriesText,
1240
+ De as channelKindOf,
1241
+ Cn as cleanMessageText,
1242
+ Pn as defineIntent,
1243
+ On as disabledIntentsFromCapabilities,
1244
+ In as emailDomain,
1245
+ Sn as endpointKey,
1246
+ Ln as filterByEndpoint,
1247
+ Dn as filterByIntent,
1248
+ Te as filterByTargetScheme,
1246
1249
  E as findAiVendor,
1247
- je as flattenLocales,
1248
- j as floorToPeriod,
1249
- z as formatActingIdentity,
1250
- H as formatPeriod,
1251
- Ge as getActivitySeenUserIds,
1252
- sn as getContactEndpoints,
1253
- un as getShortTitle,
1254
- pn as getUrgencyScore,
1255
- Xe as humanizeAction,
1256
- ln as isAssigned,
1257
- cn as isClosed,
1258
- dn as isInteractionUnseen,
1259
- Cn as isLikelyBulk,
1260
- De as isMessageType,
1261
- Ze as isPaused,
1262
- xe as isPlaybookAuthoredType,
1250
+ Be as flattenLocales,
1251
+ B as floorToPeriod,
1252
+ q as formatActingIdentity,
1253
+ j as formatPeriod,
1254
+ Ve as getActivitySeenUserIds,
1255
+ ln as getContactEndpoints,
1256
+ dn as getShortTitle,
1257
+ un as getUrgencyScore,
1258
+ We as humanizeAction,
1259
+ cn as isAssigned,
1260
+ pn as isClosed,
1261
+ mn as isInteractionUnseen,
1262
+ vn as isLikelyBulk,
1263
+ Le as isMessageType,
1264
+ en as isPaused,
1265
+ Ue as isPlaybookAuthoredType,
1263
1266
  _n as isPublicEmailDomain,
1264
- Le as isReplyableType,
1265
- Qe as isRetryable,
1266
- Z as isTerminal,
1267
- vn as isThreadLongEnough,
1268
- En as looksLikeEmail,
1269
- Ln as matchContactToIntents,
1270
- Re as messageCountsAs,
1271
- In as needsPhoneRegion,
1272
- Ne as normalizeBlocks,
1273
- R as normalizeEmail,
1274
- ze as parseActingIdentity,
1275
- Be as periodsInRange,
1276
- bn as phoneSuffix,
1277
- Sn as plainTextFromMarkdown,
1278
- qe as playbookActor,
1267
+ $e as isReplyableType,
1268
+ Ze as isRetryable,
1269
+ ee as isTerminal,
1270
+ Nn as isThreadLongEnough,
1271
+ bn as looksLikeEmail,
1272
+ $n as matchContactToIntents,
1273
+ xe as messageCountsAs,
1274
+ Tn as needsPhoneRegion,
1275
+ Oe as normalizeBlocks,
1276
+ x as normalizeEmail,
1277
+ qe as parseActingIdentity,
1278
+ Fe as periodsInRange,
1279
+ An as phoneSuffix,
1280
+ Mn as plainTextFromMarkdown,
1281
+ Je as playbookActor,
1279
1282
  h as readPath,
1280
- le as registrableDomain,
1281
- yn as relatedByDefault,
1282
- Ae as resolveAccountCapabilities,
1283
+ ce as registrableDomain,
1284
+ En as relatedByDefault,
1285
+ Ie as resolveAccountCapabilities,
1283
1286
  y as resolveActivityText,
1284
- be as resolveChannelIntents,
1285
- ee as resolveSignature,
1286
- U as stripHtml,
1287
+ Ae as resolveChannelIntents,
1288
+ ne as resolveSignature,
1289
+ P as stripHtml,
1287
1290
  N as toE164,
1288
- Y as usageMetricId,
1289
- Fe as usageMetrics
1291
+ z as usageMetricId,
1292
+ Xe as usageMetrics
1290
1293
  };
@@ -141,6 +141,16 @@ export interface ExtensionConfig {
141
141
  * does not have to know which extension is special.
142
142
  */
143
143
  pinned?: boolean;
144
+ /**
145
+ * Paint this tool's glyph in the assistant hue. Declared by the app — like
146
+ * `pinned` — so the host does not have to know which extension is the AI.
147
+ *
148
+ * Deliberately the only value there is: violet is reserved for the
149
+ * assistant, and an open colour field here would give us a rainbow of tool
150
+ * headers. The shell used to hardcode this tint on *every* tool, which is
151
+ * how the storage and task panels ended up wearing the assistant's colour.
152
+ */
153
+ tone?: "assistant";
144
154
  conditions?: {
145
155
  [key: string]: any;
146
156
  };
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,10 +1,19 @@
1
1
  {
2
2
  "name": "@opencxh/domain",
3
- "version": "1.134.6",
3
+ "version": "1.134.9",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "source": "./src/index.ts",
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js",
13
+ "default": "./dist/index.js"
14
+ },
15
+ "./package.json": "./package.json"
16
+ },
8
17
  "files": [
9
18
  "dist"
10
19
  ],