@opencxh/domain 1.150.0 → 1.152.0

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.
@@ -0,0 +1 @@
1
+ export * from './types';
@@ -0,0 +1,130 @@
1
+ import { OwnerScope } from '../contact/types';
2
+ /**
3
+ * A ceiling on what may be spent on AI in one period.
4
+ *
5
+ * The accounting already exists: every provider call writes an `ai_usage` row
6
+ * with its cost frozen at write time. A budget adds no measurement — it adds an
7
+ * answer to "and then?". That is why this type is small: it is policy, and the
8
+ * facts live elsewhere.
9
+ */
10
+ export interface AiBudget {
11
+ id: string;
12
+ organizationId: string;
13
+ /**
14
+ * Who this budget is for — the same three rungs as a task, a template or a
15
+ * contact, so one set of helpers answers "does this apply to me".
16
+ *
17
+ * `org` is not "everyone's budgets added up": it counts **every** row in the
18
+ * tenant, including the ones attributed to nobody (kb indexing, transcription,
19
+ * playbooks running as the organisation). That unattributed spend is real and
20
+ * it has to land somewhere.
21
+ */
22
+ scope: OwnerScope;
23
+ /**
24
+ * Warn here. Absent = never warn, only block. Both absent is allowed and means
25
+ * the budget does nothing — the UI says so rather than pretending it is armed.
26
+ */
27
+ softLimitNanos?: number;
28
+ /** Refuse the next call here. Absent = never block, only warn. */
29
+ hardLimitNanos?: number;
30
+ /**
31
+ * Currently only `"month"`: a calendar month, because that is the rhythm a bill
32
+ * arrives in. A field rather than a constant so a quarter later breaks nothing.
33
+ */
34
+ period: AiBudgetPeriod;
35
+ /**
36
+ * Off keeps the amounts. An emergency release that does not cost you the
37
+ * configuration you will want back tomorrow.
38
+ */
39
+ enabled: boolean;
40
+ createdBy: string;
41
+ createdAt?: number;
42
+ updatedAt?: number;
43
+ }
44
+ export type AiBudgetPeriod = "month";
45
+ /**
46
+ * What a client may send. The server owns everything not in here.
47
+ *
48
+ * The limits are `number | null` and the difference matters: **absent** means
49
+ * "leave it alone", **null** means "there is no ceiling any more". Collapsing the
50
+ * two would make a cleared field unclearable — the update would keep the old
51
+ * amount and the form would look like it had saved.
52
+ */
53
+ export interface AiBudgetInput {
54
+ scope?: OwnerScope;
55
+ softLimitNanos?: number | null;
56
+ hardLimitNanos?: number | null;
57
+ period?: AiBudgetPeriod;
58
+ enabled?: boolean;
59
+ }
60
+ /**
61
+ * A budget plus what has been spent against it — the only shape any screen wants.
62
+ *
63
+ * Kept together on purpose: a budget without its spend is a number nobody can act
64
+ * on, and two round trips to pair them up would let the page render a bar that is
65
+ * briefly, confidently wrong.
66
+ */
67
+ export interface AiBudgetView extends AiBudget {
68
+ spend: AiSpend;
69
+ /** `soft` once past the soft limit, `hard` once past the hard one. */
70
+ state: AiBudgetState;
71
+ }
72
+ export type AiBudgetState = "ok" | "soft" | "hard";
73
+ /** What was spent in one period, for one scope. */
74
+ export interface AiSpend {
75
+ /** Start of the period this covers (epoch ms), so a client can label it. */
76
+ periodStart: number;
77
+ /** Sum of the priced rows, in nano-USD. */
78
+ spentNanos: number;
79
+ /** How many provider calls it took. */
80
+ calls: number;
81
+ /**
82
+ * Calls whose rate was unknown, which therefore contributed **nothing**.
83
+ *
84
+ * An empty `costNanos` means "no rate known", not "free". Counting those as
85
+ * zero is the only honest option — but it means an unknown model can walk past
86
+ * a ceiling without touching it, so the number is surfaced rather than hidden:
87
+ * a budget that is not working should not look like a budget that is.
88
+ */
89
+ unpricedCalls: number;
90
+ }
91
+ /**
92
+ * What the personal usage page shows: your own spend, plus every ceiling that
93
+ * applies to you.
94
+ *
95
+ * `budgets` deliberately includes the team and organisation ones, with their
96
+ * amounts. The alternative — being refused by a ceiling you cannot see — is a
97
+ * worse answer than letting a colleague read the team total. It is a disclosure
98
+ * choice, so it lives in one place: the `/budget/me` handler decides it, and
99
+ * narrowing it later means changing that handler and nothing else.
100
+ */
101
+ export interface AiMyUsage {
102
+ /** Your own spend this period, whether or not you have a budget. */
103
+ spend: AiSpend;
104
+ /** Personal, team and organisation ceilings that apply to you. */
105
+ budgets: AiBudgetView[];
106
+ }
107
+ /**
108
+ * Decide the state of a budget from its spend. Shared so the server, the admin
109
+ * page and the personal page cannot drift on where "almost" ends.
110
+ */
111
+ export declare function aiBudgetState(budget: Pick<AiBudget, "softLimitNanos" | "hardLimitNanos" | "enabled">, spentNanos: number): AiBudgetState;
112
+ /**
113
+ * "Geen plafond" heeft twee vormen en die moeten hetzelfde betekenen.
114
+ *
115
+ * Een gewist plafond wordt als `null` weggeschreven — `undefined` in een `$set`
116
+ * laat het veld staan in plaats van het te legen. Bij het teruglezen is `null`
117
+ * dus een echte waarde, en `x !== undefined` zou hem als het getal nul opvatten:
118
+ * een plafond van nul blokkeert onmiddellijk, zonder dat iemand dat instelde.
119
+ */
120
+ export declare function aiBudgetLimit(value: number | null | undefined): number | undefined;
121
+ /**
122
+ * Start of the calendar month containing `at`, in UTC.
123
+ *
124
+ * UTC and not the tenant's timezone: the usage rows are stamped with `Date.now()`,
125
+ * so a local-midnight boundary would put a row on one side of the period and its
126
+ * own timestamp on the other. One clock, all the way through.
127
+ */
128
+ export declare function aiBudgetPeriodStart(at: number, period?: AiBudgetPeriod): number;
129
+ /** Stable key for one budget's period — used for caching and for warn-once state. */
130
+ export declare function aiBudgetPeriodKey(at: number, period?: AiBudgetPeriod): string;
@@ -36,6 +36,19 @@ export interface MessageTemplateFolder {
36
36
  id: string;
37
37
  name: string;
38
38
  parentFolderId?: string;
39
+ /**
40
+ * Who this folder is for — the same three cases as the templates inside it.
41
+ *
42
+ * A folder used to be org-wide by construction, which made it a label and
43
+ * nothing more: a personal template sat in a folder everyone could see, and
44
+ * the folder itself announced its existence to the whole tenant. Scoping the
45
+ * folder is what lets the rail hide a category that is not yours.
46
+ *
47
+ * Optional on the type because rows written before this field may still
48
+ * exist. An absent scope reads as company-wide — the same answer a migration
49
+ * would have written, without the migration.
50
+ */
51
+ ownerScope?: OwnerScope;
39
52
  organizationId: string;
40
53
  createdBy: string;
41
54
  createdAt?: number;
package/dist/index.cjs CHANGED
@@ -1,18 +1,18 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const D=10,T=10,b=10,I=5,st=new Set(["header","section","context","divider","image","list","actions","attachments"]);function x(e){if(typeof e=="string")return e.length>0;if(!e||typeof e!="object")return!1;const t=e;return typeof t.key=="string"||typeof t.value=="string"}function lt(e,t=()=>{}){if(!Array.isArray(e))return[];const n=[];for(const a of e){if(n.length>=D){t("more than "+D+" blocks; the rest was dropped");break}if(!a||typeof a!="object")continue;const i=a;if(!st.has(i.type)){t("unknown block type "+String(i.type));continue}switch(i.type){case"header":if(!x(i.text)){t("a header without text");continue}break;case"context":if(!x(i.text)){t("a context block without text");continue}break;case"image":if(!i.url||!i.alt){t("an image without url or alt");continue}break;case"section":Array.isArray(i.fields)&&i.fields.length>T&&(t("more than "+T+" fields in a section"),i.fields=i.fields.slice(0,T));break;case"list":if(!Array.isArray(i.items)||i.items.length===0){t("a list without items");continue}i.items.length>b&&(t("more than "+b+" list items"),i.items=i.items.slice(0,b));break;case"actions":{const r=Array.isArray(i.elements)?i.elements:[],o=r.filter(s=>s&&s.action_id&&s.invoke&&x(s.text));if(o.length!==r.length&&t("an action without action_id, invoke or text"),o.length===0)continue;o.length>I&&t("more than "+I+" actions"),i.elements=o.slice(0,I);break}}n.push(i)}return n}function me(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 y(e){if(!e||e<0)return"";const t=Math.floor(e/60),n=Math.floor(e%60);return`${t}:${n.toString().padStart(2,"0")}`}function J(e){return e?` — ${Math.floor(e/60)}m ${e%60}s`:""}function v(e){return e?.split("@")?.[0]||e||""}function _(e){return e.map(t=>t.name).join(", ")}function Q(e){return e==="meeting"?"Meeting":e==="video"?"Video call":"Audio call"}const m={VOICE_CALL_STARTED:{shape:"event",channelKind:"voice",icon:"phone",snippet:()=>"Gesprek gestart",timeline:e=>e.direction==="inbound"?`Inbound call started — ${v(e.payload.from)}`:`Outbound call started — ${v(e.payload.to)}`},VOICE_CALL_ANSWERED:{shape:"event",channelKind:"voice",icon:"phone",snippet:()=>"Gesprek aangenomen",timeline:(e,t)=>`Call answered — ${t}`},VOICE_CALL_HOLD:{shape:"event",channelKind:"voice",icon:"phone",snippet:()=>"In de wacht",timeline:(e,t)=>`Call on hold — ${t}`},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?` (${y(e.payload.duration)})`:""}`,timeline:e=>`Call ended${J(e.payload.duration)}`},VOICE_CALL_MISSED:{shape:"event",channelKind:"voice",icon:"phone",snippet:()=>"Gemiste oproep",timeline:e=>`Missed call — ${v(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?` (${y(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:Z},EMAIL_SENT:{shape:"message",component:"communication:EmailActivity",channelKind:"mail",icon:"mail",replyable:!0,carriesText:!0,countsAs:"outbound_message",snippet:Z},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=>`${_(e.payload.members)} toegevoegd`,timeline:e=>{const t=_(e.payload.members)||"Someone",n=e.payload.initiator?.name?` · added by ${e.payload.initiator.name}`:"";return`${t} joined the chat${n}`}},CHAT_MEMBER_LEFT:{shape:"event",channelKind:"chat",icon:"message-circle",snippet:e=>`${_(e.payload.members)} verlaten`,timeline:e=>{const t=_(e.payload.members)||"Someone",n=e.payload.initiator?.name?` · removed by ${e.payload.initiator.name}`:"";return`${t} left the chat${n}`}},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=>`${Q(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?` (${y(e.payload.duration)})`:""}`,timeline:e=>`${Q(e.payload.callType)} ended${J(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(t=>t.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?` (${y(e.payload.duration)})`:""}`,timeline:()=>"Meeting ended"},MEETING_PARTICIPANT_JOINED:{shape:"event",icon:"calendar",snippet:e=>`${e.payload.name} deelgenomen`,timeline:(e,t)=>`${t} joined the meeting`},MEETING_PARTICIPANT_LEFT:{shape:"event",icon:"calendar",snippet:e=>`${e.payload.name} verlaten`,timeline:(e,t)=>`${t} left the meeting`},INTERACTION_CREATED:{shape:"event",icon:"circle",snippet:()=>"Interactie aangemaakt",timeline:(e,t)=>`Interaction started by ${t}`},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,t)=>`Status changed to ${e.payload.toStatus} by ${t}`},INTERACTION_ASSIGNED:{shape:"event",icon:"user",snippet:()=>"Interactie toegewezen",timeline:(e,t)=>`Assigned by ${t}`}};function Z(e){const t=e.payload,n=t.bodySnippet?.trim()||me(t.body??"");return t.subject?`${t.subject} — ${n}`:n}function p(e){return m[e]}function ct(e){return p(e)?.icon??"circle"}function ut(e){return p(e)?.channelKind}function pt(e){const t=p(e)?.shape;return t==="message"||t==="note"}function dt(e){return p(e)?.replyable===!0}function ft(e){return p(e)?.carriesText===!0}function mt(e){return p(e)?.countsAs}function gt(e){return p(e)?.playbookAuthored===!0}function ge(e){const t=p(e.type)?.snippet;return t?t(e):""}function ht(e,t){const n=p(e.type)?.timeline;return n?n(e,t):e.type.replace(/_/g," ").toLowerCase()}function At(e){const t=p(e.type)?.joinUrl;return t?t(e):void 0}function N(e,t){let n=e;for(const a of t.split(".")){if(n==null||typeof n!="object")return"";n=n[a]}return n==null?"":typeof n=="string"?n:typeof n=="number"||typeof n=="boolean"?String(n):""}function O(e,t,n){if(e===void 0)return null;if(typeof e=="string")return e||null;if("value"in e)return N(t,e.value)||null;const a={};for(const[r,o]of Object.entries(e.params??{}))a[r]=N(t,o);const i=n(e.key,a);return i===e.key?null:i}function he(e,t){if(!e||typeof e=="string"||"value"in e)return null;const n={};for(const[a,i]of Object.entries(e.params??{}))n[a]=N(t,i);return{key:e.key,params:n}}const Et=e=>e;function ee(e){const t=m[e];return{type:e,shape:t.shape,channelKind:t.channelKind,icon:t.icon,replyable:t.replyable===!0,countsAs:t.countsAs,carriesText:t.carriesText===!0,triggerable:t.triggerable===!0,component:t.component,builtIn:!0,displayNameKey:t.displayNameKey}}function te(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 Ae{constructor(t=[],n=Et){this.translate=n;for(const a of t)a?.type&&(a.type in m||this.declared.has(a.type)||this.declared.set(a.type,a))}declared=new Map;get(t){if(t in m)return ee(t);const n=this.declared.get(t);return n?te(n):void 0}triggerable(){const t=Object.keys(m).filter(a=>m[a].triggerable).map(ee),n=[...this.declared.values()].map(te).filter(a=>a.triggerable);return[...t,...n]}timelineText(t,n){const a=m[t.type];if(a?.timeline)return a.timeline(t,n);const i=this.declared.get(t.type);return O(i?.text,t,this.translate)??t.type.replace(/_/g," ").toLowerCase()}snippet(t){const n=m[t.type];if(n?.snippet)return n.snippet(t);const a=this.declared.get(t.type);return O(a?.text,t,this.translate)??""}descriptor(t){return this.declared.get(t)}blocks(t){const n=this.declared.get(t)?.render;return n?.length?n:void 0}get translator(){return this.translate}}const yt=new Ae,ne=140;function _t(e){const t=e.trim();return t.length<=ne?t:t.slice(0,ne-1).trimEnd()+"…"}function Tt(e,t){const n=he(t?.text,e),a=t?O(t.text,e,i=>i):null;return{activityId:e.id,type:e.type,snippet:_t(a??ge(e)),authorName:e.author?.name??"",direction:e.direction,createdAt:e.createdAt??Date.now(),...n?{snippetKey:n.key,snippetParams:n.params}:{}}}function bt(e,t,n=[]){const a=e.createdAt;if(!a)return[];const i=new Set(n);return e.author.type==="user"&&e.author.id&&i.add(e.author.id),Object.entries(t).filter(([r,o])=>o>=a&&!i.has(r)).map(([r])=>r)}function It(e){return e.createdAt??0}const St=[{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 Mt(e){const t=[];for(const n of Object.keys(e))for(const a of Object.keys(e[n]))t.push({lang:n,key:a,value:e[n][a]});return t}function k(e){return e<10?`0${e}`:`${e}`}function Ee(e,t){const n=new Date(e),a=`${n.getUTCFullYear()}-${k(n.getUTCMonth()+1)}-${k(n.getUTCDate())}`;return t==="day"?a:`${a}T${k(n.getUTCHours())}`}function ye(e,t){const n=new Date(e);return n.setUTCMinutes(0,0,0),t==="day"&&n.setUTCHours(0),n.getTime()}const Ct=36e5,Nt=864e5;function Ot(e,t,n){const a=n==="hour"?Ct:Nt,i=[];for(let r=ye(e,n);r<=t;r+=a)i.push(Ee(r,n));return i}const _e=[{id:"resource",label:"Resource",labelSource:"raw"},{id:"origin",label:"Herkomst",labelSource:"raw"}],Te=_e.map(e=>e.id);function be(e,t){return`${e}.usage.${t}`}function Lt(e,t){return t.map(n=>({id:be(e,n.unit),label:n.label,category:"Verbruik",valueType:n.valueType??"count",aggregation:"sum",supportedDimensions:["provider",...Te,...n.extraDimensions??[],"time"]}))}const Ie=new Set(["info","success","warning","destructive"]),P=200,$=100,U=200,w=12,K=4,G=4e3,S=500,Rt=256*1024,xt=new Set(["heading","paragraph","list","quote","code","divider","table","kpi","callout"]),Se=["http:","https:","mailto:","tel:"],vt=/^[a-z][a-z0-9+.-]*:/i;function Me(e){const t=e.trim().replace(/^<|>$/g,"");if(!t)return!1;const n=vt.exec(t)?.[0];return n?Se.includes(n.toLowerCase()):!t.startsWith("//")}const kt=/^[ \t]{0,3}\[([^\]]+)\]:[ \t]*(\S+).*$/gm;function Dt(e){let t="",n=0;for(;n<e.length;){const a=e[n]==="!"&&e[n+1]==="[";if(e[n]!=="["&&!a){t+=e[n],n+=1;continue}const i=n+(a?2:1),r=ie(e,i,"[","]");if(r<0||e[r+1]!=="("){t+=e[n],n+=1;continue}const o=ie(e,r+2,"(",")");if(o<0){t+=e[n],n+=1;continue}const s=e.slice(i,r),l=e.slice(r+2,o).trim().split(/\s+/)[0]??"";t+=a||!Me(l)?s:e.slice(n,o+1),n=o+1}return t}function ie(e,t,n,a){let i=1;for(let r=t;r<e.length;r+=1){if(e[r]==="\\"){r+=1;continue}if(e[r]===n)i+=1;else if(e[r]===a&&(i-=1,i===0))return r}return-1}function Ce(e){return Dt(e).replace(kt,(t,n,a)=>Me(a)?t:"")}function u(e,t=G){return typeof e=="string"?Ce(e).slice(0,t):""}function Pt(e,t=G){return typeof e=="string"?e.slice(0,t):""}function $t(e,t="info"){return typeof e=="string"&&Ie.has(e)?e:t}function Ut(e,t=()=>{}){if(!Array.isArray(e))return[];const n=[];for(const a of e){if(n.length>=P){t("more than "+P+" blocks; the rest was dropped");break}if(!a||typeof a!="object")continue;const i=a;if(!xt.has(i.type)){t("unknown block type "+String(i.type));continue}const r=typeof i.block_id=="string"?{block_id:i.block_id}:{};switch(i.type){case"heading":{const o=u(i.text);if(!o){t("a heading without text");continue}const s=i.level===2||i.level===3?i.level:1;n.push({...r,type:"heading",level:s,text:o});break}case"paragraph":{const o=u(i.text);if(!o){t("a paragraph without text");continue}n.push({...r,type:"paragraph",text:o});break}case"quote":{const o=u(i.text);if(!o){t("a quote without text");continue}n.push({...r,type:"quote",text:o});break}case"code":{const o=Pt(i.text);if(!o){t("a code block without text");continue}const s=typeof i.lang=="string"?{lang:i.lang.slice(0,32)}:{};n.push({...r,type:"code",...s,text:o});break}case"divider":n.push({...r,type:"divider"});break;case"list":{const o=Array.isArray(i.items)?i.items:[],s=[];for(const d of o){if(s.length>=$){t("more than "+$+" list items");break}const f=u(d?.text);if(!f)continue;const c=u(d?.lead,200);s.push(c?{lead:c,text:f}:{text:f})}if(s.length===0){t("a list without usable items");continue}const l=i.style==="numbered"?"numbered":"bulleted";n.push({...r,type:"list",style:l,items:s});break}case"table":{const o=Array.isArray(i.columns)?i.columns:[],s=[];for(const c of o){if(s.length>=w){t("more than "+w+" table columns");break}const E=u(c?.label,S),R=c?.align==="right"?"right":void 0;s.push(R?{label:E,align:R}:{label:E})}if(s.length===0){t("a table without columns");continue}const l=Array.isArray(i.rows)?i.rows:[],d=[];for(const c of l){if(d.length>=U){t("more than "+U+" table rows");break}const E=Array.isArray(c)?c:[];d.push(s.map((R,ot)=>u(E[ot],S)))}const f=u(i.caption,S);n.push({...r,type:"table",columns:s,rows:d,...f?{caption:f}:{}});break}case"kpi":{const o=Array.isArray(i.items)?i.items:[],s=[];for(const l of o){if(s.length>=K){t("more than "+K+" kpi items");break}const d=u(l?.value,40),f=u(l?.label,80);if(!d||!f)continue;const c=l?.tone;s.push(typeof c=="string"&&Ie.has(c)?{value:d,label:f,tone:c}:{value:d,label:f})}if(s.length===0){t("a kpi block without usable items");continue}n.push({...r,type:"kpi",items:s});break}case"callout":{const o=u(i.text);if(!o){t("a callout without text");continue}const s=u(i.title,200);n.push({...r,type:"callout",tone:$t(i.tone),...s?{title:s}:{},text:o});break}}}return n}function wt(e){return JSON.stringify(e).length}function Kt(e){return{blocks:e.length,types:e.map(t=>t.type),headings:e.flatMap(t=>t.type==="heading"?[t.text]:[])}}function ae(e){return e.replace(/\|/g,"\\|").replace(/\r?\n/g," ").trim()}function re(e,t,n){const a=e.map((i,r)=>n?.[r]==="right"?"---:":"---");return[`| ${e.map(ae).join(" | ")} |`,`| ${a.join(" | ")} |`,...t.map(i=>`| ${i.map(ae).join(" | ")} |`)]}function Bt(e){switch(e.type){case"heading":return[`${"#".repeat(e.level)} ${e.text}`];case"paragraph":return[e.text];case"quote":return e.text.split(/\r?\n/).map(t=>`> ${t}`);case"code":return[`\`\`\`${e.lang??""}`,e.text,"```"];case"divider":return["---"];case"list":return e.items.map((t,n)=>{const a=e.style==="numbered"?`${n+1}.`:"-";return t.lead?`${a} **${t.lead}** ${t.text}`:`${a} ${t.text}`});case"table":{const t=re(e.columns.map(n=>n.label),e.rows,e.columns.map(n=>n.align??"left"));return e.caption?[...t,"",`*${e.caption}*`]:t}case"kpi":return re(e.items.map(t=>t.value),[e.items.map(t=>t.label)]);case"callout":return(e.title?`**${e.title}** ${e.text}`:e.text).split(/\r?\n/).map(n=>`> ${n}`)}}function Ft(e,t){const n=[],a=e.some(i=>i.type==="heading"&&i.level===1);t&&!a&&n.push(`# ${t}`);for(const i of e){const r=Bt(i);r.length>0&&n.push(r.join(`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const D=10,T=10,b=10,I=5,ct=new Set(["header","section","context","divider","image","list","actions","attachments"]);function x(e){if(typeof e=="string")return e.length>0;if(!e||typeof e!="object")return!1;const t=e;return typeof t.key=="string"||typeof t.value=="string"}function ut(e,t=()=>{}){if(!Array.isArray(e))return[];const n=[];for(const a of e){if(n.length>=D){t("more than "+D+" blocks; the rest was dropped");break}if(!a||typeof a!="object")continue;const i=a;if(!ct.has(i.type)){t("unknown block type "+String(i.type));continue}switch(i.type){case"header":if(!x(i.text)){t("a header without text");continue}break;case"context":if(!x(i.text)){t("a context block without text");continue}break;case"image":if(!i.url||!i.alt){t("an image without url or alt");continue}break;case"section":Array.isArray(i.fields)&&i.fields.length>T&&(t("more than "+T+" fields in a section"),i.fields=i.fields.slice(0,T));break;case"list":if(!Array.isArray(i.items)||i.items.length===0){t("a list without items");continue}i.items.length>b&&(t("more than "+b+" list items"),i.items=i.items.slice(0,b));break;case"actions":{const r=Array.isArray(i.elements)?i.elements:[],o=r.filter(s=>s&&s.action_id&&s.invoke&&x(s.text));if(o.length!==r.length&&t("an action without action_id, invoke or text"),o.length===0)continue;o.length>I&&t("more than "+I+" actions"),i.elements=o.slice(0,I);break}}n.push(i)}return n}function ge(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 y(e){if(!e||e<0)return"";const t=Math.floor(e/60),n=Math.floor(e%60);return`${t}:${n.toString().padStart(2,"0")}`}function Q(e){return e?` — ${Math.floor(e/60)}m ${e%60}s`:""}function v(e){return e?.split("@")?.[0]||e||""}function _(e){return e.map(t=>t.name).join(", ")}function Z(e){return e==="meeting"?"Meeting":e==="video"?"Video call":"Audio call"}const m={VOICE_CALL_STARTED:{shape:"event",channelKind:"voice",icon:"phone",snippet:()=>"Gesprek gestart",timeline:e=>e.direction==="inbound"?`Inbound call started — ${v(e.payload.from)}`:`Outbound call started — ${v(e.payload.to)}`},VOICE_CALL_ANSWERED:{shape:"event",channelKind:"voice",icon:"phone",snippet:()=>"Gesprek aangenomen",timeline:(e,t)=>`Call answered — ${t}`},VOICE_CALL_HOLD:{shape:"event",channelKind:"voice",icon:"phone",snippet:()=>"In de wacht",timeline:(e,t)=>`Call on hold — ${t}`},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?` (${y(e.payload.duration)})`:""}`,timeline:e=>`Call ended${Q(e.payload.duration)}`},VOICE_CALL_MISSED:{shape:"event",channelKind:"voice",icon:"phone",snippet:()=>"Gemiste oproep",timeline:e=>`Missed call — ${v(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?` (${y(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:ee},EMAIL_SENT:{shape:"message",component:"communication:EmailActivity",channelKind:"mail",icon:"mail",replyable:!0,carriesText:!0,countsAs:"outbound_message",snippet:ee},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=>`${_(e.payload.members)} toegevoegd`,timeline:e=>{const t=_(e.payload.members)||"Someone",n=e.payload.initiator?.name?` · added by ${e.payload.initiator.name}`:"";return`${t} joined the chat${n}`}},CHAT_MEMBER_LEFT:{shape:"event",channelKind:"chat",icon:"message-circle",snippet:e=>`${_(e.payload.members)} verlaten`,timeline:e=>{const t=_(e.payload.members)||"Someone",n=e.payload.initiator?.name?` · removed by ${e.payload.initiator.name}`:"";return`${t} left the chat${n}`}},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=>`${Z(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?` (${y(e.payload.duration)})`:""}`,timeline:e=>`${Z(e.payload.callType)} ended${Q(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(t=>t.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?` (${y(e.payload.duration)})`:""}`,timeline:()=>"Meeting ended"},MEETING_PARTICIPANT_JOINED:{shape:"event",icon:"calendar",snippet:e=>`${e.payload.name} deelgenomen`,timeline:(e,t)=>`${t} joined the meeting`},MEETING_PARTICIPANT_LEFT:{shape:"event",icon:"calendar",snippet:e=>`${e.payload.name} verlaten`,timeline:(e,t)=>`${t} left the meeting`},INTERACTION_CREATED:{shape:"event",icon:"circle",snippet:()=>"Interactie aangemaakt",timeline:(e,t)=>`Interaction started by ${t}`},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,t)=>`Status changed to ${e.payload.toStatus} by ${t}`},INTERACTION_ASSIGNED:{shape:"event",icon:"user",snippet:()=>"Interactie toegewezen",timeline:(e,t)=>`Assigned by ${t}`}};function ee(e){const t=e.payload,n=t.bodySnippet?.trim()||ge(t.body??"");return t.subject?`${t.subject} — ${n}`:n}function p(e){return m[e]}function pt(e){return p(e)?.icon??"circle"}function dt(e){return p(e)?.channelKind}function ft(e){const t=p(e)?.shape;return t==="message"||t==="note"}function mt(e){return p(e)?.replyable===!0}function gt(e){return p(e)?.carriesText===!0}function ht(e){return p(e)?.countsAs}function At(e){return p(e)?.playbookAuthored===!0}function he(e){const t=p(e.type)?.snippet;return t?t(e):""}function Et(e,t){const n=p(e.type)?.timeline;return n?n(e,t):e.type.replace(/_/g," ").toLowerCase()}function yt(e){const t=p(e.type)?.joinUrl;return t?t(e):void 0}function N(e,t){let n=e;for(const a of t.split(".")){if(n==null||typeof n!="object")return"";n=n[a]}return n==null?"":typeof n=="string"?n:typeof n=="number"||typeof n=="boolean"?String(n):""}function L(e,t,n){if(e===void 0)return null;if(typeof e=="string")return e||null;if("value"in e)return N(t,e.value)||null;const a={};for(const[r,o]of Object.entries(e.params??{}))a[r]=N(t,o);const i=n(e.key,a);return i===e.key?null:i}function Ae(e,t){if(!e||typeof e=="string"||"value"in e)return null;const n={};for(const[a,i]of Object.entries(e.params??{}))n[a]=N(t,i);return{key:e.key,params:n}}const _t=e=>e;function te(e){const t=m[e];return{type:e,shape:t.shape,channelKind:t.channelKind,icon:t.icon,replyable:t.replyable===!0,countsAs:t.countsAs,carriesText:t.carriesText===!0,triggerable:t.triggerable===!0,component:t.component,builtIn:!0,displayNameKey:t.displayNameKey}}function ne(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 Ee{constructor(t=[],n=_t){this.translate=n;for(const a of t)a?.type&&(a.type in m||this.declared.has(a.type)||this.declared.set(a.type,a))}declared=new Map;get(t){if(t in m)return te(t);const n=this.declared.get(t);return n?ne(n):void 0}triggerable(){const t=Object.keys(m).filter(a=>m[a].triggerable).map(te),n=[...this.declared.values()].map(ne).filter(a=>a.triggerable);return[...t,...n]}timelineText(t,n){const a=m[t.type];if(a?.timeline)return a.timeline(t,n);const i=this.declared.get(t.type);return L(i?.text,t,this.translate)??t.type.replace(/_/g," ").toLowerCase()}snippet(t){const n=m[t.type];if(n?.snippet)return n.snippet(t);const a=this.declared.get(t.type);return L(a?.text,t,this.translate)??""}descriptor(t){return this.declared.get(t)}blocks(t){const n=this.declared.get(t)?.render;return n?.length?n:void 0}get translator(){return this.translate}}const Tt=new Ee,ie=140;function bt(e){const t=e.trim();return t.length<=ie?t:t.slice(0,ie-1).trimEnd()+"…"}function It(e,t){const n=Ae(t?.text,e),a=t?L(t.text,e,i=>i):null;return{activityId:e.id,type:e.type,snippet:bt(a??he(e)),authorName:e.author?.name??"",direction:e.direction,createdAt:e.createdAt??Date.now(),...n?{snippetKey:n.key,snippetParams:n.params}:{}}}function St(e,t,n=[]){const a=e.createdAt;if(!a)return[];const i=new Set(n);return e.author.type==="user"&&e.author.id&&i.add(e.author.id),Object.entries(t).filter(([r,o])=>o>=a&&!i.has(r)).map(([r])=>r)}function Mt(e){return e.createdAt??0}const Ct=[{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 Nt(e){const t=[];for(const n of Object.keys(e))for(const a of Object.keys(e[n]))t.push({lang:n,key:a,value:e[n][a]});return t}function k(e){return e<10?`0${e}`:`${e}`}function ye(e,t){const n=new Date(e),a=`${n.getUTCFullYear()}-${k(n.getUTCMonth()+1)}-${k(n.getUTCDate())}`;return t==="day"?a:`${a}T${k(n.getUTCHours())}`}function _e(e,t){const n=new Date(e);return n.setUTCMinutes(0,0,0),t==="day"&&n.setUTCHours(0),n.getTime()}const Lt=36e5,Ot=864e5;function Rt(e,t,n){const a=n==="hour"?Lt:Ot,i=[];for(let r=_e(e,n);r<=t;r+=a)i.push(ye(r,n));return i}const Te=[{id:"resource",label:"Resource",labelSource:"raw"},{id:"origin",label:"Herkomst",labelSource:"raw"}],be=Te.map(e=>e.id);function Ie(e,t){return`${e}.usage.${t}`}function xt(e,t){return t.map(n=>({id:Ie(e,n.unit),label:n.label,category:"Verbruik",valueType:n.valueType??"count",aggregation:"sum",supportedDimensions:["provider",...be,...n.extraDimensions??[],"time"]}))}const Se=new Set(["info","success","warning","destructive"]),P=200,$=100,U=200,w=12,K=4,H=4e3,S=500,vt=256*1024,kt=new Set(["heading","paragraph","list","quote","code","divider","table","kpi","callout"]),Me=["http:","https:","mailto:","tel:"],Dt=/^[a-z][a-z0-9+.-]*:/i;function Ce(e){const t=e.trim().replace(/^<|>$/g,"");if(!t)return!1;const n=Dt.exec(t)?.[0];return n?Me.includes(n.toLowerCase()):!t.startsWith("//")}const Pt=/^[ \t]{0,3}\[([^\]]+)\]:[ \t]*(\S+).*$/gm;function $t(e){let t="",n=0;for(;n<e.length;){const a=e[n]==="!"&&e[n+1]==="[";if(e[n]!=="["&&!a){t+=e[n],n+=1;continue}const i=n+(a?2:1),r=ae(e,i,"[","]");if(r<0||e[r+1]!=="("){t+=e[n],n+=1;continue}const o=ae(e,r+2,"(",")");if(o<0){t+=e[n],n+=1;continue}const s=e.slice(i,r),l=e.slice(r+2,o).trim().split(/\s+/)[0]??"";t+=a||!Ce(l)?s:e.slice(n,o+1),n=o+1}return t}function ae(e,t,n,a){let i=1;for(let r=t;r<e.length;r+=1){if(e[r]==="\\"){r+=1;continue}if(e[r]===n)i+=1;else if(e[r]===a&&(i-=1,i===0))return r}return-1}function Ne(e){return $t(e).replace(Pt,(t,n,a)=>Ce(a)?t:"")}function u(e,t=H){return typeof e=="string"?Ne(e).slice(0,t):""}function Ut(e,t=H){return typeof e=="string"?e.slice(0,t):""}function wt(e,t="info"){return typeof e=="string"&&Se.has(e)?e:t}function Kt(e,t=()=>{}){if(!Array.isArray(e))return[];const n=[];for(const a of e){if(n.length>=P){t("more than "+P+" blocks; the rest was dropped");break}if(!a||typeof a!="object")continue;const i=a;if(!kt.has(i.type)){t("unknown block type "+String(i.type));continue}const r=typeof i.block_id=="string"?{block_id:i.block_id}:{};switch(i.type){case"heading":{const o=u(i.text);if(!o){t("a heading without text");continue}const s=i.level===2||i.level===3?i.level:1;n.push({...r,type:"heading",level:s,text:o});break}case"paragraph":{const o=u(i.text);if(!o){t("a paragraph without text");continue}n.push({...r,type:"paragraph",text:o});break}case"quote":{const o=u(i.text);if(!o){t("a quote without text");continue}n.push({...r,type:"quote",text:o});break}case"code":{const o=Ut(i.text);if(!o){t("a code block without text");continue}const s=typeof i.lang=="string"?{lang:i.lang.slice(0,32)}:{};n.push({...r,type:"code",...s,text:o});break}case"divider":n.push({...r,type:"divider"});break;case"list":{const o=Array.isArray(i.items)?i.items:[],s=[];for(const d of o){if(s.length>=$){t("more than "+$+" list items");break}const f=u(d?.text);if(!f)continue;const c=u(d?.lead,200);s.push(c?{lead:c,text:f}:{text:f})}if(s.length===0){t("a list without usable items");continue}const l=i.style==="numbered"?"numbered":"bulleted";n.push({...r,type:"list",style:l,items:s});break}case"table":{const o=Array.isArray(i.columns)?i.columns:[],s=[];for(const c of o){if(s.length>=w){t("more than "+w+" table columns");break}const E=u(c?.label,S),R=c?.align==="right"?"right":void 0;s.push(R?{label:E,align:R}:{label:E})}if(s.length===0){t("a table without columns");continue}const l=Array.isArray(i.rows)?i.rows:[],d=[];for(const c of l){if(d.length>=U){t("more than "+U+" table rows");break}const E=Array.isArray(c)?c:[];d.push(s.map((R,lt)=>u(E[lt],S)))}const f=u(i.caption,S);n.push({...r,type:"table",columns:s,rows:d,...f?{caption:f}:{}});break}case"kpi":{const o=Array.isArray(i.items)?i.items:[],s=[];for(const l of o){if(s.length>=K){t("more than "+K+" kpi items");break}const d=u(l?.value,40),f=u(l?.label,80);if(!d||!f)continue;const c=l?.tone;s.push(typeof c=="string"&&Se.has(c)?{value:d,label:f,tone:c}:{value:d,label:f})}if(s.length===0){t("a kpi block without usable items");continue}n.push({...r,type:"kpi",items:s});break}case"callout":{const o=u(i.text);if(!o){t("a callout without text");continue}const s=u(i.title,200);n.push({...r,type:"callout",tone:wt(i.tone),...s?{title:s}:{},text:o});break}}}return n}function Bt(e){return JSON.stringify(e).length}function Ft(e){return{blocks:e.length,types:e.map(t=>t.type),headings:e.flatMap(t=>t.type==="heading"?[t.text]:[])}}function re(e){return e.replace(/\|/g,"\\|").replace(/\r?\n/g," ").trim()}function oe(e,t,n){const a=e.map((i,r)=>n?.[r]==="right"?"---:":"---");return[`| ${e.map(re).join(" | ")} |`,`| ${a.join(" | ")} |`,...t.map(i=>`| ${i.map(re).join(" | ")} |`)]}function Gt(e){switch(e.type){case"heading":return[`${"#".repeat(e.level)} ${e.text}`];case"paragraph":return[e.text];case"quote":return e.text.split(/\r?\n/).map(t=>`> ${t}`);case"code":return[`\`\`\`${e.lang??""}`,e.text,"```"];case"divider":return["---"];case"list":return e.items.map((t,n)=>{const a=e.style==="numbered"?`${n+1}.`:"-";return t.lead?`${a} **${t.lead}** ${t.text}`:`${a} ${t.text}`});case"table":{const t=oe(e.columns.map(n=>n.label),e.rows,e.columns.map(n=>n.align??"left"));return e.caption?[...t,"",`*${e.caption}*`]:t}case"kpi":return oe(e.items.map(t=>t.value),[e.items.map(t=>t.label)]);case"callout":return(e.title?`**${e.title}** ${e.text}`:e.text).split(/\r?\n/).map(n=>`> ${n}`)}}function Ht(e,t){const n=[],a=e.some(i=>i.type==="heading"&&i.level===1);t&&!a&&n.push(`# ${t}`);for(const i of e){const r=Gt(i);r.length>0&&n.push(r.join(`
2
2
  `))}return`${n.join(`
3
3
 
4
4
  `)}
5
- `}const H=e=>`user:${e}`,V=e=>`team:${e}`;function Gt(e){const t=new Set;for(const n of e??[])n?.id&&(n.kind==="user"&&t.add(H(n.id)),n.kind==="team"&&t.add(V(n.id)));return[...t].sort()}function Ht(e,t){return[H(e),...t.map(V)]}function Vt(e){const t=new Set;for(const n of e??[])n?.kind&&t.add(n.kind);return[...t]}function Xt(e){return(e.startsWith("tool:")?e.slice(5):e).replace(/__/g," · ").replace(/\./g," · ").replace(/_/g," ")}const jt=[{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"}],Wt={topics:[{name:"topic",type:"string"},{name:"confidence",type:"number"}],question:[{name:"answer",type:"boolean"},{name:"confidence",type:"number"}],extract:[]};function Ne(e){switch(e.kind){case"user":return`user:${e.userId}`;case"team":return`team:${e.teamId}`;case"org":return"org"}}function Yt(e){if(typeof e!="string")return;const t=e.trim();if(t==="org")return{kind:"org"};const n=t.indexOf(":");if(n<=0)return;const a=t.slice(0,n),i=t.slice(n+1).trim();if(i){if(a==="user")return{kind:"user",userId:i};if(a==="team")return{kind:"team",teamId:i}}}function Oe(e){return Ne(e)}function zt(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 qt(e){return Oe(e)}const Le=["done","escalated","failed","timed_out","stopped"],Re=["awaiting_approval","awaiting_reply"];function xe(e){return Le.includes(e)}function Jt(e){return xe(e)}function Qt(e){return Re.includes(e)}function Zt(e,t){const n=e.labels??[];return n.find(a=>a.locale===t)?.label??n[0]?.label??e.url}function en(e,t,n){const a=e.translations??[];return a.find(i=>i.locale===t)??(n?a.find(i=>i.locale===n):void 0)??{locale:t}}const B=[{code:"nl",label:"Nederlands",english:"Dutch"},{code:"en",label:"English",english:"English"},{code:"de",label:"Deutsch",english:"German"},{code:"fr",label:"Français",english:"French"},{code:"es",label:"Español",english:"Spanish"},{code:"it",label:"Italiano",english:"Italian"},{code:"pt",label:"Português",english:"Portuguese"},{code:"pl",label:"Polski",english:"Polish"},{code:"sv",label:"Svenska",english:"Swedish"},{code:"da",label:"Dansk",english:"Danish"},{code:"nb",label:"Norsk bokmål",english:"Norwegian Bokmål"},{code:"fi",label:"Suomi",english:"Finnish"},{code:"tr",label:"Türkçe",english:"Turkish"}];function ve(e){const t=(e??"").toLowerCase();return B.find(n=>n.code===t)??B.find(n=>n.code===t.split("-")[0])}function tn(e){return ve(e)?.label??e}function nn(e){const t=ve(e);return t?t.english===t.label?`${t.english} (${t.code})`:`${t.english} — ${t.label} (${t.code})`:e}const X=3;function ke(e,t){const n=new Set;let a=1,i=t.get(e)?.parentId;for(;i;){if(n.has(i)||(n.add(i),a++,a>X+1))return 1/0;i=t.get(i)?.parentId}return a}function an(e,t,n){if(!e)return!0;if(e===t)return!1;const a=new Map(n.map(o=>[o.id,o]));if(!a.has(e)||t&&De(e,t,a))return!1;const i=ke(e,a),r=t?j(t,n):1;return i+r<=X}function De(e,t,n){const a=new Set;let i=n.get(e)?.parentId;for(;i;){if(i===t)return!0;if(a.has(i))return!1;a.add(i),i=n.get(i)?.parentId}return!1}function j(e,t,n=new Set){if(n.has(e))return 1;n.add(e);const a=t.filter(i=>i.parentId===e);return a.length?1+Math.max(...a.map(i=>j(i.id,t,n))):1}const Pe="en";function $e(e){return e.defaultLocale||e.locale||Pe}function rn(e){const t=new Set,n=[];for(const a of[$e(e),...e.locales??[]])!a||t.has(a)||(t.add(a),n.push(a));return n}function on(e,t,n){const a=e.translations??[];return a.find(i=>i.locale===t)?.name??(n?a.find(i=>i.locale===n)?.name:void 0)??e.name}const Ue=20,we=20,M=300;function g(e){return e.toLowerCase().replace(/[^\p{L}\p{N}\s]/gu," ").replace(/\s+/g," ").trim()}function Ke(e){const t=e.replace(/\s+/g," ").trim();if(t.length<=M)return t;const n=t.slice(0,M),a=Math.max(n.lastIndexOf(". "),n.lastIndexOf("! "),n.lastIndexOf("? "));return a>M*.6?n.slice(0,a+1):`${n.trimEnd()}…`}function sn(e,t){const n=Ke(t.text),a=g(n);if(!a||(e.examples??[]).some(o=>g(o)===a))return null;const i=e.exampleCandidates??[],r=i.findIndex(o=>g(o.text)===a);if(r>=0){if(i[r].corrected||!t.corrected)return null;const o=[...i];return o[r]={...o[r],corrected:!0,addedAt:t.addedAt},oe(o)}return oe([{...t,text:n},...i]).slice(0,we)}function oe(e){return[...e].sort((t,n)=>Number(n.corrected)-Number(t.corrected)||n.addedAt-t.addedAt)}function ln(e,t){const n=g(t),a=(e.examples??[]).filter(r=>r.trim());return{examples:a.some(r=>g(r)===n)?a:[...a,t].slice(-Ue),exampleCandidates:Be(e,t)}}function Be(e,t){const n=g(t);return(e.exampleCandidates??[]).filter(a=>g(a.text)!==n)}function Fe(e,t){const n=e.ownerScope;return n?n.kind==="org"?!0:n.kind==="team"?!!t&&n.teamId===t:!1:!1}function cn(e,t){return e.filter(n=>Fe(n,t))}const W=[{id:"openai",attachmentKinds:["image","pdf"],label:"OpenAI",capabilities:["chat","transcription","embedding"],defaultModel:"gpt-5-mini",baseUrl:"https://api.openai.com/v1"},{id:"gemini",attachmentKinds:["image","pdf"],label:"Google Gemini",capabilities:["chat","transcription","embedding"],defaultModel:"gemini-3.5-flash",baseUrl:"https://generativelanguage.googleapis.com/v1beta"},{id:"anthropic",attachmentKinds:["image","pdf"],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 A(e){return W.find(t=>t.id===e)}function un(e){return A(e)?.label??e}function pn(e,t="gpt-5-mini"){return A(e)?.defaultModel??t}function dn(e){return W.filter(t=>t.capabilities.includes(e))}function fn(e){const t=A(e);return!!t&&!t.baseUrl}function mn(e,t){return t==="text"?!0:A(e)?.attachmentKinds?.includes(t)===!0}const gn=new Set(["mail","message"]);function Ge(e,t){const n=e.settings?.signatures?.[t];return!n||!n.enabled||!n.body||n.body.trim()===""?null:n}function hn(e,t,n,a="html"){if(!e)return n;const i=Ge(e,t);return i?`${n}${a==="text"?`
5
+ `}const V=e=>`user:${e}`,X=e=>`team:${e}`;function Vt(e){const t=new Set;for(const n of e??[])n?.id&&(n.kind==="user"&&t.add(V(n.id)),n.kind==="team"&&t.add(X(n.id)));return[...t].sort()}function Xt(e,t){return[V(e),...t.map(X)]}function jt(e){const t=new Set;for(const n of e??[])n?.kind&&t.add(n.kind);return[...t]}function Wt(e){return(e.startsWith("tool:")?e.slice(5):e).replace(/__/g," · ").replace(/\./g," · ").replace(/_/g," ")}const Yt=[{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"}],zt={topics:[{name:"topic",type:"string"},{name:"confidence",type:"number"}],question:[{name:"answer",type:"boolean"},{name:"confidence",type:"number"}],extract:[]};function Le(e){switch(e.kind){case"user":return`user:${e.userId}`;case"team":return`team:${e.teamId}`;case"org":return"org"}}function qt(e){if(typeof e!="string")return;const t=e.trim();if(t==="org")return{kind:"org"};const n=t.indexOf(":");if(n<=0)return;const a=t.slice(0,n),i=t.slice(n+1).trim();if(i){if(a==="user")return{kind:"user",userId:i};if(a==="team")return{kind:"team",teamId:i}}}function Oe(e){return Le(e)}function Jt(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 Qt(e){return Oe(e)}const Re=["done","escalated","failed","timed_out","stopped"],xe=["awaiting_approval","awaiting_reply"];function ve(e){return Re.includes(e)}function Zt(e){return ve(e)}function en(e){return xe.includes(e)}function tn(e,t){const n=e.labels??[];return n.find(a=>a.locale===t)?.label??n[0]?.label??e.url}function nn(e,t,n){const a=e.translations??[];return a.find(i=>i.locale===t)??(n?a.find(i=>i.locale===n):void 0)??{locale:t}}const B=[{code:"nl",label:"Nederlands",english:"Dutch"},{code:"en",label:"English",english:"English"},{code:"de",label:"Deutsch",english:"German"},{code:"fr",label:"Français",english:"French"},{code:"es",label:"Español",english:"Spanish"},{code:"it",label:"Italiano",english:"Italian"},{code:"pt",label:"Português",english:"Portuguese"},{code:"pl",label:"Polski",english:"Polish"},{code:"sv",label:"Svenska",english:"Swedish"},{code:"da",label:"Dansk",english:"Danish"},{code:"nb",label:"Norsk bokmål",english:"Norwegian Bokmål"},{code:"fi",label:"Suomi",english:"Finnish"},{code:"tr",label:"Türkçe",english:"Turkish"}];function ke(e){const t=(e??"").toLowerCase();return B.find(n=>n.code===t)??B.find(n=>n.code===t.split("-")[0])}function an(e){return ke(e)?.label??e}function rn(e){const t=ke(e);return t?t.english===t.label?`${t.english} (${t.code})`:`${t.english} — ${t.label} (${t.code})`:e}const j=3;function De(e,t){const n=new Set;let a=1,i=t.get(e)?.parentId;for(;i;){if(n.has(i)||(n.add(i),a++,a>j+1))return 1/0;i=t.get(i)?.parentId}return a}function on(e,t,n){if(!e)return!0;if(e===t)return!1;const a=new Map(n.map(o=>[o.id,o]));if(!a.has(e)||t&&Pe(e,t,a))return!1;const i=De(e,a),r=t?W(t,n):1;return i+r<=j}function Pe(e,t,n){const a=new Set;let i=n.get(e)?.parentId;for(;i;){if(i===t)return!0;if(a.has(i))return!1;a.add(i),i=n.get(i)?.parentId}return!1}function W(e,t,n=new Set){if(n.has(e))return 1;n.add(e);const a=t.filter(i=>i.parentId===e);return a.length?1+Math.max(...a.map(i=>W(i.id,t,n))):1}const $e="en";function Ue(e){return e.defaultLocale||e.locale||$e}function sn(e){const t=new Set,n=[];for(const a of[Ue(e),...e.locales??[]])!a||t.has(a)||(t.add(a),n.push(a));return n}function ln(e,t,n){const a=e.translations??[];return a.find(i=>i.locale===t)?.name??(n?a.find(i=>i.locale===n)?.name:void 0)??e.name}const we=20,Ke=20,M=300;function g(e){return e.toLowerCase().replace(/[^\p{L}\p{N}\s]/gu," ").replace(/\s+/g," ").trim()}function Be(e){const t=e.replace(/\s+/g," ").trim();if(t.length<=M)return t;const n=t.slice(0,M),a=Math.max(n.lastIndexOf(". "),n.lastIndexOf("! "),n.lastIndexOf("? "));return a>M*.6?n.slice(0,a+1):`${n.trimEnd()}…`}function cn(e,t){const n=Be(t.text),a=g(n);if(!a||(e.examples??[]).some(o=>g(o)===a))return null;const i=e.exampleCandidates??[],r=i.findIndex(o=>g(o.text)===a);if(r>=0){if(i[r].corrected||!t.corrected)return null;const o=[...i];return o[r]={...o[r],corrected:!0,addedAt:t.addedAt},se(o)}return se([{...t,text:n},...i]).slice(0,Ke)}function se(e){return[...e].sort((t,n)=>Number(n.corrected)-Number(t.corrected)||n.addedAt-t.addedAt)}function un(e,t){const n=g(t),a=(e.examples??[]).filter(r=>r.trim());return{examples:a.some(r=>g(r)===n)?a:[...a,t].slice(-we),exampleCandidates:Fe(e,t)}}function Fe(e,t){const n=g(t);return(e.exampleCandidates??[]).filter(a=>g(a.text)!==n)}function Ge(e,t){const n=e.ownerScope;return n?n.kind==="org"?!0:n.kind==="team"?!!t&&n.teamId===t:!1:!1}function pn(e,t){return e.filter(n=>Ge(n,t))}const Y=[{id:"openai",attachmentKinds:["image","pdf"],label:"OpenAI",capabilities:["chat","transcription","embedding"],defaultModel:"gpt-5-mini",baseUrl:"https://api.openai.com/v1"},{id:"gemini",attachmentKinds:["image","pdf"],label:"Google Gemini",capabilities:["chat","transcription","embedding"],defaultModel:"gemini-3.5-flash",baseUrl:"https://generativelanguage.googleapis.com/v1beta"},{id:"anthropic",attachmentKinds:["image","pdf"],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 A(e){return Y.find(t=>t.id===e)}function dn(e){return A(e)?.label??e}function fn(e,t="gpt-5-mini"){return A(e)?.defaultModel??t}function mn(e){return Y.filter(t=>t.capabilities.includes(e))}function gn(e){const t=A(e);return!!t&&!t.baseUrl}function hn(e,t){return t==="text"?!0:A(e)?.attachmentKinds?.includes(t)===!0}function An(e,t){if(!e.enabled)return"ok";const n=F(e.hardLimitNanos),a=F(e.softLimitNanos);return n!==void 0&&t>=n?"hard":a!==void 0&&t>=a?"soft":"ok"}function F(e){return typeof e=="number"?e:void 0}function He(e,t="month"){const n=new Date(e);return Date.UTC(n.getUTCFullYear(),n.getUTCMonth(),1)}function En(e,t="month"){const n=new Date(He(e,t));return`${n.getUTCFullYear()}-${String(n.getUTCMonth()+1).padStart(2,"0")}`}const yn=new Set(["mail","message"]);function Ve(e,t){const n=e.settings?.signatures?.[t];return!n||!n.enabled||!n.body||n.body.trim()===""?null:n}function _n(e,t,n,a="html"){if(!e)return n;const i=Ve(e,t);return i?`${n}${a==="text"?`
6
6
 
7
- `:t==="mail"?"<br><br>-- <br>":"<br><br>"}${i.body}`:n}function An(e){return e.endpoints??[]}const En=e=>!!e.assignedUserId||!!e.assignedInboxId,yn=e=>e.status==="closed",_n=e=>({urgent:10,high:5,normal:2,low:1})[e.priority]||0,Tn=(e,t=30)=>e.title?.length<=t?e.title:`${e.title.substring(0,t)}...`;function bn(e,t){return e.lastActivityAt?!(e.seenBy??[]).includes(t):!1}const In=1e3,Sn=2e3,Mn=500,Cn=12e3,Nn=4e3,He=["contact","company"];function On(e){if(!e)return!1;const t=e.slice(0,e.indexOf(":"));return He.includes(t)}const L={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}},Ve="NL",Ln=15,Rn=8,xn=Array.from(new Set(Object.values(L).map(e=>e.callingCode))).sort((e,t)=>t.length-e.length);function se(e){if(e)return L[e.trim().toUpperCase()]}function C(e,t){return e.length>=t.nsnMin&&e.length<=t.nsnMax}function le(e){if(e.length>Ln)return null;for(const t of xn){if(!e.startsWith(t))continue;const n=e.slice(t.length);for(const a of Object.values(L)){if(a.callingCode!==t)continue;const i=a.trunkPrefix,r=i&&n.startsWith(i)?n.slice(i.length):n;if(C(r,a))return`+${t}${r}`}return null}return e.length<Rn?null:`+${e}`}function vn(e){let t=e.trim();const n=t.match(/^(sips?|tel|whatsapp):/i);n&&(t=t.slice(n[0].length));const a=t.indexOf("@");return a>=0&&(t=t.slice(0,a)),t.trim()}function kn(e){if(!e)return!1;const t=e.indexOf("@");if(t<=0)return!1;const n=e.slice(0,t).trim();return!/^[+\d\s().-]+$/.test(n)}function F(e,t){if(!e)return null;const n=vn(e);if(!n)return null;const a=n.startsWith("+"),i=n.replace(/\D/g,"");if(!i)return null;if(a)return le(i);if(i.startsWith("00"))return le(i.slice(2));const r=se(t)??se(Ve);if(!r)return null;const o=r.trunkPrefix;if(o&&i.startsWith(o)){const s=i.slice(o.length);return C(s,r)?`+${r.callingCode}${s}`:null}if(i.startsWith(r.callingCode)){const s=i.slice(r.callingCode.length);if(C(s,r))return`+${r.callingCode}${s}`}return!o&&C(i,r)?`+${r.callingCode}${i}`:null}function Dn(e,t=9){const n=(e??"").replace(/\D/g,"");return n.length<t?null:n.slice(-t)}function Y(e){if(!e)return null;const t=e.trim().toLowerCase(),n=t.lastIndexOf("@");if(n<=0||n===t.length-1)return null;const a=t.slice(0,n).split("+")[0],i=t.slice(n+1);return!a||!i.includes(".")?null:`${a}@${i}`}function Pn(e){const t=Y(e);return t?t.slice(t.lastIndexOf("@")+1):null}const $n=new Set(["co.uk","org.uk","gov.uk","ac.uk","com.au","co.nz","com.br","co.za"]);function Xe(e){if(!e)return null;const t=e.trim().toLowerCase().replace(/\.$/,"").split(".").filter(Boolean);if(t.length<2)return null;const n=t.slice(-2).join(".");return $n.has(n)&&t.length>=3?t.slice(-3).join("."):n}const je=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 Un(e){const t=Xe(e);return t?je.has(t):!1}function wn(e){if(!e)return!1;const t=e.trim().toLowerCase();return t==="tel"||t==="sms"||t==="whatsapp"||t==="fax"}function Kn(e,t,n){if(!e||!t)return null;const a=e.trim().toLowerCase();if(a==="tel"||a==="sms"||a==="whatsapp"){const r=F(t,n);return r?`tel:${r}`:null}if(a==="fax"){const r=F(t,n);return r?`fax:${r}`:null}if(a==="mailto"||a==="email"){const r=Y(t);return r?`mailto:${r}`:null}const i=t.trim().toLowerCase();return i?`${a}:${i}`:null}const Bn=/(\*\*|__)(?=\S)([\s\S]*?\S)\1/g,Fn=/(\*|_)(?=\S)([^*_\n]*?\S)\1/g;function Gn(e){if(typeof e!="string"||!e)return"";let t=e;return t=t.replace(/```[a-z]*\n?/gi,"").replace(/~~~[a-z]*\n?/gi,""),t=t.replace(/!\[([^\]]*)\]\([^)]*\)/g,"$1"),t=t.replace(/\[([^\]]*)\]\([^)]*\)/g,"$1"),t=t.replace(/\[([^\]]*)\]\[[^\]]*\]/g,"$1"),t=t.replace(/<((?:https?|mailto):[^>\s]+)>/gi,"$1"),t=t.split(`
7
+ `:t==="mail"?"<br><br>-- <br>":"<br><br>"}${i.body}`:n}function Tn(e){return e.endpoints??[]}const bn=e=>!!e.assignedUserId||!!e.assignedInboxId,In=e=>e.status==="closed",Sn=e=>({urgent:10,high:5,normal:2,low:1})[e.priority]||0,Mn=(e,t=30)=>e.title?.length<=t?e.title:`${e.title.substring(0,t)}...`;function Cn(e,t){return e.lastActivityAt?!(e.seenBy??[]).includes(t):!1}const Nn=1e3,Ln=2e3,On=500,Rn=12e3,xn=4e3,Xe=["contact","company"];function vn(e){if(!e)return!1;const t=e.slice(0,e.indexOf(":"));return Xe.includes(t)}const O={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}},je="NL",kn=15,Dn=8,Pn=Array.from(new Set(Object.values(O).map(e=>e.callingCode))).sort((e,t)=>t.length-e.length);function le(e){if(e)return O[e.trim().toUpperCase()]}function C(e,t){return e.length>=t.nsnMin&&e.length<=t.nsnMax}function ce(e){if(e.length>kn)return null;for(const t of Pn){if(!e.startsWith(t))continue;const n=e.slice(t.length);for(const a of Object.values(O)){if(a.callingCode!==t)continue;const i=a.trunkPrefix,r=i&&n.startsWith(i)?n.slice(i.length):n;if(C(r,a))return`+${t}${r}`}return null}return e.length<Dn?null:`+${e}`}function $n(e){let t=e.trim();const n=t.match(/^(sips?|tel|whatsapp):/i);n&&(t=t.slice(n[0].length));const a=t.indexOf("@");return a>=0&&(t=t.slice(0,a)),t.trim()}function Un(e){if(!e)return!1;const t=e.indexOf("@");if(t<=0)return!1;const n=e.slice(0,t).trim();return!/^[+\d\s().-]+$/.test(n)}function G(e,t){if(!e)return null;const n=$n(e);if(!n)return null;const a=n.startsWith("+"),i=n.replace(/\D/g,"");if(!i)return null;if(a)return ce(i);if(i.startsWith("00"))return ce(i.slice(2));const r=le(t)??le(je);if(!r)return null;const o=r.trunkPrefix;if(o&&i.startsWith(o)){const s=i.slice(o.length);return C(s,r)?`+${r.callingCode}${s}`:null}if(i.startsWith(r.callingCode)){const s=i.slice(r.callingCode.length);if(C(s,r))return`+${r.callingCode}${s}`}return!o&&C(i,r)?`+${r.callingCode}${i}`:null}function wn(e,t=9){const n=(e??"").replace(/\D/g,"");return n.length<t?null:n.slice(-t)}function z(e){if(!e)return null;const t=e.trim().toLowerCase(),n=t.lastIndexOf("@");if(n<=0||n===t.length-1)return null;const a=t.slice(0,n).split("+")[0],i=t.slice(n+1);return!a||!i.includes(".")?null:`${a}@${i}`}function Kn(e){const t=z(e);return t?t.slice(t.lastIndexOf("@")+1):null}const Bn=new Set(["co.uk","org.uk","gov.uk","ac.uk","com.au","co.nz","com.br","co.za"]);function We(e){if(!e)return null;const t=e.trim().toLowerCase().replace(/\.$/,"").split(".").filter(Boolean);if(t.length<2)return null;const n=t.slice(-2).join(".");return Bn.has(n)&&t.length>=3?t.slice(-3).join("."):n}const Ye=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 t=We(e);return t?Ye.has(t):!1}function Gn(e){if(!e)return!1;const t=e.trim().toLowerCase();return t==="tel"||t==="sms"||t==="whatsapp"||t==="fax"}function Hn(e,t,n){if(!e||!t)return null;const a=e.trim().toLowerCase();if(a==="tel"||a==="sms"||a==="whatsapp"){const r=G(t,n);return r?`tel:${r}`:null}if(a==="fax"){const r=G(t,n);return r?`fax:${r}`:null}if(a==="mailto"||a==="email"){const r=z(t);return r?`mailto:${r}`:null}const i=t.trim().toLowerCase();return i?`${a}:${i}`:null}const Vn=/(\*\*|__)(?=\S)([\s\S]*?\S)\1/g,Xn=/(\*|_)(?=\S)([^*_\n]*?\S)\1/g;function jn(e){if(typeof e!="string"||!e)return"";let t=e;return t=t.replace(/```[a-z]*\n?/gi,"").replace(/~~~[a-z]*\n?/gi,""),t=t.replace(/!\[([^\]]*)\]\([^)]*\)/g,"$1"),t=t.replace(/\[([^\]]*)\]\([^)]*\)/g,"$1"),t=t.replace(/\[([^\]]*)\]\[[^\]]*\]/g,"$1"),t=t.replace(/<((?:https?|mailto):[^>\s]+)>/gi,"$1"),t=t.split(`
8
8
  `).map(n=>n.replace(/^\s{0,3}#{1,6}\s+/,"").replace(/^\s{0,3}>\s?/,"").replace(/^\s*[-*+]\s+/,"").replace(/^\s*\d+[.)]\s+/,"").replace(/^\s*(?:[-*_]\s*){3,}$/,"")).join(`
9
- `),t=t.replace(Bn,"$2"),t=t.replace(Fn,"$2"),t=t.replace(/~~(?=\S)([\s\S]*?\S)~~/g,"$1"),t=t.replace(/`([^`\n]+)`/g,"$1"),t.replace(/\s+/g," ").trim()}const Hn=[/<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],ce=/^\s*(?:>+\s*)?(?:from|van|sent|verzonden|to|aan|cc|subject|onderwerp|date|datum)\s*:/i,Vn=/^\s*(?:on|op)\b.{0,200}?\b(?:wrote|schreef|geschreven)\s*:?\s*$/i;function Xn(e){const t=e.split(`
10
- `);for(let n=0;n<t.length;n++)if(Vn.test(t[n])||ce.test(t[n])&&t.slice(n+1,n+4).some(a=>ce.test(a)))return t.slice(0,n).join(`
11
- `).trim();return e}function ue(e){let t=e;return t=t.replace(/<(script|style)[\s\S]*?<\/\1>/gi,""),t=t.replace(/<br\s*\/?>/gi,`
9
+ `),t=t.replace(Vn,"$2"),t=t.replace(Xn,"$2"),t=t.replace(/~~(?=\S)([\s\S]*?\S)~~/g,"$1"),t=t.replace(/`([^`\n]+)`/g,"$1"),t.replace(/\s+/g," ").trim()}const Wn=[/<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],ue=/^\s*(?:>+\s*)?(?:from|van|sent|verzonden|to|aan|cc|subject|onderwerp|date|datum)\s*:/i,Yn=/^\s*(?:on|op)\b.{0,200}?\b(?:wrote|schreef|geschreven)\s*:?\s*$/i;function zn(e){const t=e.split(`
10
+ `);for(let n=0;n<t.length;n++)if(Yn.test(t[n])||ue.test(t[n])&&t.slice(n+1,n+4).some(a=>ue.test(a)))return t.slice(0,n).join(`
11
+ `).trim();return e}function pe(e){let t=e;return t=t.replace(/<(script|style)[\s\S]*?<\/\1>/gi,""),t=t.replace(/<br\s*\/?>/gi,`
12
12
  `),t=t.replace(/<\/(p|h[1-6]|ul|ol|table|blockquote)>/gi,`
13
13
 
14
14
  `),t=t.replace(/<\/(div|li|tr)>/gi,`
15
- `),t=t.replace(/<\/(td|th)>/gi," "),t=t.replace(/<[^>]+>/g,""),t=t.replace(/<[^>]*$/,""),t}function pe(e){return!Number.isInteger(e)||e<0||e>1114111?null:String.fromCodePoint(e)}function de(e){return e.replace(/&nbsp;/gi," ").replace(/&lt;/gi,"<").replace(/&gt;/gi,">").replace(/&quot;/gi,'"').replace(/&#(\d+);/g,(t,n)=>pe(Number(n))??t).replace(/&#x([0-9a-f]+);/gi,(t,n)=>pe(parseInt(n,16))??t).replace(/&amp;/gi,"&")}function fe(e){return e.replace(/\r/g,"").replace(/[ \t]+/g," ").replace(/ *\n */g,`
15
+ `),t=t.replace(/<\/(td|th)>/gi," "),t=t.replace(/<[^>]+>/g,""),t=t.replace(/<[^>]*$/,""),t}function de(e){return!Number.isInteger(e)||e<0||e>1114111?null:String.fromCodePoint(e)}function fe(e){return e.replace(/&nbsp;/gi," ").replace(/&lt;/gi,"<").replace(/&gt;/gi,">").replace(/&quot;/gi,'"').replace(/&#(\d+);/g,(t,n)=>de(Number(n))??t).replace(/&#x([0-9a-f]+);/gi,(t,n)=>de(parseInt(n,16))??t).replace(/&amp;/gi,"&")}function me(e){return e.replace(/\r/g,"").replace(/[ \t]+/g," ").replace(/ *\n */g,`
16
16
  `).replace(/\n{3,}/g,`
17
17
 
18
- `).trim()}function jn(e){if(typeof e!="string"||!e)return"";let t=e.length;for(const r of Hn){const o=e.search(r);o>=0&&o<t&&(t=o)}const n=e.slice(0,t);let a=fe(de(ue(n)));return a||(a=fe(de(ue(e)))),Xn(a)||a}const Wn=/(^|[._+-])(no-?reply|noreply|donotreply|do-not-reply|newsletter|nieuwsbrief|mailer|mailing|notifications?|bounce|postmaster|marketing)@/i,Yn=/\b(unsubscribe|afmelden|uitschrijven|opt[\s-]?out|manage (your )?preferences|geen (e-?mails?|nieuwsbrief|berichten) meer)\b/i;function zn(e,t){return!!(e&&Wn.test(e)||t&&Yn.test(t))}const We=3,Ye=600;function qn(e,t){return e>=We||t>=Ye}const Jn=new Set(["image/png","image/jpeg","image/jpg","image/gif","image/webp"]),Qn=new Set(["text/plain","text/markdown","text/csv","application/json","text/html","application/xml","text/xml"]);function ze(e){const t=(e??"").trim().toLowerCase().split(";")[0];return t?Jn.has(t)?"image":t==="application/pdf"?"pdf":Qn.has(t)?"text":t.startsWith("audio/")?"audio":"unsupported":"unsupported"}const h=1024*1024,qe={image:5*h,pdf:20*h,text:1*h,audio:20*h},Zn=25*h,ei=5;function ti(e,t){const n=ze(e);return n==="unsupported"?"unsupported":t>qe[n]?"too-large":null}function Je(e,t){const n=new Set(e.disabledIntents??[]),a=e.intentOverrides??{},i=t.intents.filter(o=>!n.has(o.intent)).map(o=>ii(o,a[o.intent]));if(!e.extraIntents||e.extraIntents.length===0)return i;const r=new Set(i.map(o=>o.intent));for(const o of e.extraIntents)r.has(o.intent)||(i.push(o),r.add(o.intent));return i}function Qe(e,t){const n={};for(const a of e.intents){if(!a.togglable)continue;const i=t?.[a.intent];n[a.intent]=i??a.defaultEnabled??!0}return n}function ni(e,t){const n=Qe(e,t);return Object.entries(n).filter(([,a])=>!a).map(([a])=>a)}function ii(e,t){return t?{intent:t.intent??e.intent,targetSchemes:t.targetSchemes??e.targetSchemes,transport:t.transport??e.transport}:e}function ai(e,t){const n=[];for(const a of e){if(!a.enabled)continue;const i=t[a.providerId];if(i)for(const r of Je(a,i))n.push({channel:a,description:i,capability:r})}return n}function ri(e,t){return t.filter(n=>n.capability.intent===e)}function Ze(e,t){return t.filter(n=>n.capability.targetSchemes.includes(e))}function oi(e,t){return Ze(e.scheme,t)}function si(e,t,n){const a=[];for(const i of e)for(const r of n)r.capability.intent===t&&r.capability.targetSchemes.includes(i.scheme)&&a.push({channelIntent:r,endpoint:i});return a}var et=(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))(et||{});const li={mailto:"mail",sip:"tel",tel:"tel",fax:"tel",sms:"chat",teams:"chat",telegram:"chat",messenger:"chat",instagram:"chat",viber:"chat",whatsapp:"wa",webhook:"note",url:"note",calendar:"note",username:"note",id:"note",custom:"note"};function ci(e){return e?li[e]??"note":"note"}const ui="message_window",pi="message_templates",di={FROM:"from",TO:"to",CC:"cc",BCC:"bcc",ORGANIZER:"organizer",PRESENTER:"presenter",ATTENDEE:"attendee",OWNER:"owner",MEMBER:"member",GUEST:"guest",HOST:"host",PARTICIPANT:"participant"},fi=(e,t)=>({intent:e,...t}),mi="folder_management",gi="remote_search",hi={ok:!1,code:"UNSUPPORTED",message:"Provider does not support this op"},z="auth";function q(e){const t=typeof e=="string"?e.match(/apps\/([^/?#]+)/):null;return t?t[1]:null}function Ai(e){const t=q(e);return t?t!==z:typeof e=="string"&&e.startsWith("/wake")}function Ei(e){return typeof e!="string"||e===""||e==="/"?!0:q(e)===z}function yi(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function tt(e){const n=e.split("/").filter(Boolean).map(a=>a.startsWith(":")?a.endsWith("?")?"(?:/[^/]+)?":"/[^/]+":"/"+yi(a)).join("");return new RegExp(`^${n}\\/?$`)}function nt(e,t){const n=e.split("/").filter(Boolean),a=t.split("/").filter(Boolean),i={};return n.forEach((r,o)=>{if(r.startsWith(":")){const s=r.endsWith("?")?r.slice(1,-1):r.slice(1),l=a[o];l&&(i[s]=l)}}),i}function it(e){return e.publicBasePath??`/apps/${e.name}`}function _i(e){const t=[];for(const n of e){if(!n?.name)continue;const a=it(n);for(const i of n.routes??[]){if(!i.public)continue;const r=i.path==="/"?"":i.path;t.push({appName:n.name,resource:i.resource,pattern:`${a}${r}`,props:i.props})}}return t}function at(e,t){const n=e.split("/").filter(Boolean),a=t.split("/").filter(Boolean);for(let i=0;i<Math.min(n.length,a.length);i++){const r=n[i].startsWith(":"),o=a[i].startsWith(":");if(r!==o)return o}return n.length>a.length}function rt(e,t){if(typeof e!="string")return null;let n=null;for(const a of t)tt(a.pattern).test(e)&&(!n||at(a.pattern,n.pattern))&&(n=a);return n?{...n,params:{...n.props,...nt(n.pattern,e)}}:null}function Ti(e,t){return rt(e,t)!==null}const bi=9e4,Ii="installation-id";exports.ACTIVITY_CATALOG=m;exports.AI_ATTACHMENT_LIMITS=qe;exports.AI_ATTACHMENT_MAX_PER_TURN=ei;exports.AI_ATTACHMENT_TURN_BUDGET=Zn;exports.AI_VENDORS=W;exports.ALLOWED_LINK_SCHEMES=Se;exports.ARTIFACT_MAX_BLOCKS=P;exports.ARTIFACT_MAX_BODY_BYTES=Rt;exports.ARTIFACT_MAX_CELL_LEN=S;exports.ARTIFACT_MAX_KPI_ITEMS=K;exports.ARTIFACT_MAX_LIST_ITEMS=$;exports.ARTIFACT_MAX_TABLE_COLUMNS=w;exports.ARTIFACT_MAX_TABLE_ROWS=U;exports.ARTIFACT_MAX_TEXT_LEN=G;exports.AUTH_APP_NAME=z;exports.ActivityTypeRegistry=Ae;exports.BUILT_IN_ONLY=yt;exports.CLASSIFY_VARS=Wt;exports.CORE_DIMENSIONS=St;exports.CommunicationScheme=et;exports.DEFAULT_MEMORY_BUDGET=Nn;exports.DEFAULT_PHONE_REGION=Ve;exports.FEATURE_FOLDER_MANAGEMENT=mi;exports.FEATURE_REMOTE_SEARCH=gi;exports.INSTALLATION_HEADER=Ii;exports.InteractionParticipantRole=di;exports.KB_FALLBACK_LOCALE=Pe;exports.KB_LOCALES=B;exports.MAX_ACTIONS=I;exports.MAX_BLOCKS=D;exports.MAX_COLLECTION_DEPTH=X;exports.MAX_FIELDS=T;exports.MAX_LIST_ITEMS=b;exports.MAX_MEMORY_BROWSE=In;exports.MAX_MEMORY_BUDGET=Cn;exports.MAX_MEMORY_CHARS=Sn;exports.MAX_TOPIC_CANDIDATES=we;exports.MAX_TOPIC_EXAMPLES=Ue;exports.MAX_TOPIC_EXAMPLE_CHARS=M;exports.MIN_MEMORY_BUDGET=Mn;exports.PAUSED_RUN_STATUSES=Re;exports.PHONE_REGIONS=L;exports.PRESENCE_ONLINE_WINDOW_MS=bi;exports.PROVIDER_FEATURE_MESSAGE_TEMPLATES=pi;exports.PROVIDER_FEATURE_MESSAGE_WINDOW=ui;exports.PUBLIC_EMAIL_DOMAINS=je;exports.RELATED_SUBJECT_KINDS=He;exports.SIGNATURE_INTENTS=gn;exports.SUMMARY_MIN_LAST_CHARS=Ye;exports.SUMMARY_MIN_MESSAGES=We;exports.TERMINAL_RUN_STATUSES=Le;exports.TRIGGER_VARS=jt;exports.UNSUPPORTED=hi;exports.USAGE_DIMENSIONS=_e;exports.USAGE_DIMENSION_IDS=Te;exports.acceptExampleCandidate=ln;exports.actingIdentityKey=Oe;exports.activityIconOf=ct;exports.activityJoinUrl=At;exports.activitySnippet=ge;exports.activityTextParams=he;exports.activityTimelineText=ht;exports.activityTimestamp=It;exports.activityTypeInfo=p;exports.actorKey=qt;exports.addExampleCandidate=sn;exports.aiAttachmentKind=ze;exports.aiAttachmentRejection=ti;exports.aiVendorAcceptsAttachment=mn;exports.aiVendorDefaultModel=pn;exports.aiVendorLabel=un;exports.aiVendorNeedsBaseUrl=fn;exports.aiVendorsWith=dn;exports.appNameFromPath=q;exports.applySignature=hn;exports.artifactBodyBytes=wt;exports.artifactOutline=Kt;exports.artifactToMarkdown=Ft;exports.buildActivityPreview=Tt;exports.buildChannelIntents=ai;exports.buildShareKeys=Gt;exports.canNestUnder=an;exports.carriesText=ft;exports.categoryLabel=on;exports.channelKindForScheme=ci;exports.channelKindOf=ut;exports.cleanMessageText=jn;exports.defaultLocaleOf=$e;exports.defineIntent=fi;exports.depthOf=ke;exports.disabledIntentsFromCapabilities=ni;exports.emailDomain=Pn;exports.endpointKey=Kn;exports.extractParams=nt;exports.filterByEndpoint=oi;exports.filterByIntent=ri;exports.filterByTargetScheme=Ze;exports.findAiVendor=A;exports.flattenLocales=Mt;exports.floorToPeriod=ye;exports.formatActingIdentity=Ne;exports.formatPeriod=Ee;exports.getActivitySeenUserIds=bt;exports.getContactEndpoints=An;exports.getShortTitle=Tn;exports.getUrgencyScore=_n;exports.heightOf=j;exports.helpCenterText=en;exports.humanizeAction=Xt;exports.isAssigned=En;exports.isClosed=yn;exports.isDeepLink=Ai;exports.isDescendant=De;exports.isInteractionUnseen=bn;exports.isLandingPath=Ei;exports.isLikelyBulk=zn;exports.isMessageType=pt;exports.isMoreSpecificPattern=at;exports.isPaused=Qt;exports.isPlaybookAuthoredType=gt;exports.isPublicEmailDomain=Un;exports.isPublicPath=Ti;exports.isReplyableType=dt;exports.isRetryable=Jt;exports.isTerminal=xe;exports.isThreadLongEnough=qn;exports.linkLabel=Zt;exports.localeInstruction=nn;exports.localeName=tn;exports.localesOf=rn;exports.looksLikeEmail=kn;exports.matchContactToIntents=si;exports.matchPublicRoute=rt;exports.messageCountsAs=mt;exports.needsPhoneRegion=wn;exports.normalizeArtifactBlocks=Ut;exports.normalizeBlocks=lt;exports.normalizeEmail=Y;exports.normalizeExample=g;exports.parseActingIdentity=Yt;exports.pathToRegex=tt;exports.periodsInRange=Ot;exports.phoneSuffix=Dn;exports.plainTextFromMarkdown=Gn;exports.playbookActor=zt;exports.publicBasePathFor=it;exports.publicRoutePatterns=_i;exports.readPath=N;exports.registrableDomain=Xe;exports.rejectExampleCandidate=Be;exports.relatedByDefault=On;exports.resolveAccountCapabilities=Qe;exports.resolveActivityText=O;exports.resolveChannelIntents=Je;exports.resolveSignature=Ge;exports.sanitizeInline=Ce;exports.shareKeyForTeam=V;exports.shareKeyForUser=H;exports.shareKeysForViewer=Ht;exports.stripHtml=me;exports.toE164=F;exports.toolSourceKinds=Vt;exports.topicOfferedForTeam=Fe;exports.topicsForTeam=cn;exports.truncateExample=Ke;exports.usageMetricId=be;exports.usageMetrics=Lt;
18
+ `).trim()}function qn(e){if(typeof e!="string"||!e)return"";let t=e.length;for(const r of Wn){const o=e.search(r);o>=0&&o<t&&(t=o)}const n=e.slice(0,t);let a=me(fe(pe(n)));return a||(a=me(fe(pe(e)))),zn(a)||a}const Jn=/(^|[._+-])(no-?reply|noreply|donotreply|do-not-reply|newsletter|nieuwsbrief|mailer|mailing|notifications?|bounce|postmaster|marketing)@/i,Qn=/\b(unsubscribe|afmelden|uitschrijven|opt[\s-]?out|manage (your )?preferences|geen (e-?mails?|nieuwsbrief|berichten) meer)\b/i;function Zn(e,t){return!!(e&&Jn.test(e)||t&&Qn.test(t))}const ze=3,qe=600;function ei(e,t){return e>=ze||t>=qe}const ti=new Set(["image/png","image/jpeg","image/jpg","image/gif","image/webp"]),ni=new Set(["text/plain","text/markdown","text/csv","application/json","text/html","application/xml","text/xml"]);function Je(e){const t=(e??"").trim().toLowerCase().split(";")[0];return t?ti.has(t)?"image":t==="application/pdf"?"pdf":ni.has(t)?"text":t.startsWith("audio/")?"audio":"unsupported":"unsupported"}const h=1024*1024,Qe={image:5*h,pdf:20*h,text:1*h,audio:20*h},ii=25*h,ai=5;function ri(e,t){const n=Je(e);return n==="unsupported"?"unsupported":t>Qe[n]?"too-large":null}function Ze(e,t){const n=new Set(e.disabledIntents??[]),a=e.intentOverrides??{},i=t.intents.filter(o=>!n.has(o.intent)).map(o=>si(o,a[o.intent]));if(!e.extraIntents||e.extraIntents.length===0)return i;const r=new Set(i.map(o=>o.intent));for(const o of e.extraIntents)r.has(o.intent)||(i.push(o),r.add(o.intent));return i}function et(e,t){const n={};for(const a of e.intents){if(!a.togglable)continue;const i=t?.[a.intent];n[a.intent]=i??a.defaultEnabled??!0}return n}function oi(e,t){const n=et(e,t);return Object.entries(n).filter(([,a])=>!a).map(([a])=>a)}function si(e,t){return t?{intent:t.intent??e.intent,targetSchemes:t.targetSchemes??e.targetSchemes,transport:t.transport??e.transport}:e}function li(e,t){const n=[];for(const a of e){if(!a.enabled)continue;const i=t[a.providerId];if(i)for(const r of Ze(a,i))n.push({channel:a,description:i,capability:r})}return n}function ci(e,t){return t.filter(n=>n.capability.intent===e)}function tt(e,t){return t.filter(n=>n.capability.targetSchemes.includes(e))}function ui(e,t){return tt(e.scheme,t)}function pi(e,t,n){const a=[];for(const i of e)for(const r of n)r.capability.intent===t&&r.capability.targetSchemes.includes(i.scheme)&&a.push({channelIntent:r,endpoint:i});return a}var nt=(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))(nt||{});const di={mailto:"mail",sip:"tel",tel:"tel",fax:"tel",sms:"chat",teams:"chat",telegram:"chat",messenger:"chat",instagram:"chat",viber:"chat",whatsapp:"wa",webhook:"note",url:"note",calendar:"note",username:"note",id:"note",custom:"note"};function fi(e){return e?di[e]??"note":"note"}const mi="message_window",gi="message_templates",hi={FROM:"from",TO:"to",CC:"cc",BCC:"bcc",ORGANIZER:"organizer",PRESENTER:"presenter",ATTENDEE:"attendee",OWNER:"owner",MEMBER:"member",GUEST:"guest",HOST:"host",PARTICIPANT:"participant"},Ai=(e,t)=>({intent:e,...t}),Ei="folder_management",yi="remote_search",_i={ok:!1,code:"UNSUPPORTED",message:"Provider does not support this op"},q="auth";function J(e){const t=typeof e=="string"?e.match(/apps\/([^/?#]+)/):null;return t?t[1]:null}function Ti(e){const t=J(e);return t?t!==q:typeof e=="string"&&e.startsWith("/wake")}function bi(e){return typeof e!="string"||e===""||e==="/"?!0:J(e)===q}function Ii(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function it(e){const n=e.split("/").filter(Boolean).map(a=>a.startsWith(":")?a.endsWith("?")?"(?:/[^/]+)?":"/[^/]+":"/"+Ii(a)).join("");return new RegExp(`^${n}\\/?$`)}function at(e,t){const n=e.split("/").filter(Boolean),a=t.split("/").filter(Boolean),i={};return n.forEach((r,o)=>{if(r.startsWith(":")){const s=r.endsWith("?")?r.slice(1,-1):r.slice(1),l=a[o];l&&(i[s]=l)}}),i}function rt(e){return e.publicBasePath??`/apps/${e.name}`}function Si(e){const t=[];for(const n of e){if(!n?.name)continue;const a=rt(n);for(const i of n.routes??[]){if(!i.public)continue;const r=i.path==="/"?"":i.path;t.push({appName:n.name,resource:i.resource,pattern:`${a}${r}`,props:i.props})}}return t}function ot(e,t){const n=e.split("/").filter(Boolean),a=t.split("/").filter(Boolean);for(let i=0;i<Math.min(n.length,a.length);i++){const r=n[i].startsWith(":"),o=a[i].startsWith(":");if(r!==o)return o}return n.length>a.length}function st(e,t){if(typeof e!="string")return null;let n=null;for(const a of t)it(a.pattern).test(e)&&(!n||ot(a.pattern,n.pattern))&&(n=a);return n?{...n,params:{...n.props,...at(n.pattern,e)}}:null}function Mi(e,t){return st(e,t)!==null}const Ci=9e4,Ni="installation-id";exports.ACTIVITY_CATALOG=m;exports.AI_ATTACHMENT_LIMITS=Qe;exports.AI_ATTACHMENT_MAX_PER_TURN=ai;exports.AI_ATTACHMENT_TURN_BUDGET=ii;exports.AI_VENDORS=Y;exports.ALLOWED_LINK_SCHEMES=Me;exports.ARTIFACT_MAX_BLOCKS=P;exports.ARTIFACT_MAX_BODY_BYTES=vt;exports.ARTIFACT_MAX_CELL_LEN=S;exports.ARTIFACT_MAX_KPI_ITEMS=K;exports.ARTIFACT_MAX_LIST_ITEMS=$;exports.ARTIFACT_MAX_TABLE_COLUMNS=w;exports.ARTIFACT_MAX_TABLE_ROWS=U;exports.ARTIFACT_MAX_TEXT_LEN=H;exports.AUTH_APP_NAME=q;exports.ActivityTypeRegistry=Ee;exports.BUILT_IN_ONLY=Tt;exports.CLASSIFY_VARS=zt;exports.CORE_DIMENSIONS=Ct;exports.CommunicationScheme=nt;exports.DEFAULT_MEMORY_BUDGET=xn;exports.DEFAULT_PHONE_REGION=je;exports.FEATURE_FOLDER_MANAGEMENT=Ei;exports.FEATURE_REMOTE_SEARCH=yi;exports.INSTALLATION_HEADER=Ni;exports.InteractionParticipantRole=hi;exports.KB_FALLBACK_LOCALE=$e;exports.KB_LOCALES=B;exports.MAX_ACTIONS=I;exports.MAX_BLOCKS=D;exports.MAX_COLLECTION_DEPTH=j;exports.MAX_FIELDS=T;exports.MAX_LIST_ITEMS=b;exports.MAX_MEMORY_BROWSE=Nn;exports.MAX_MEMORY_BUDGET=Rn;exports.MAX_MEMORY_CHARS=Ln;exports.MAX_TOPIC_CANDIDATES=Ke;exports.MAX_TOPIC_EXAMPLES=we;exports.MAX_TOPIC_EXAMPLE_CHARS=M;exports.MIN_MEMORY_BUDGET=On;exports.PAUSED_RUN_STATUSES=xe;exports.PHONE_REGIONS=O;exports.PRESENCE_ONLINE_WINDOW_MS=Ci;exports.PROVIDER_FEATURE_MESSAGE_TEMPLATES=gi;exports.PROVIDER_FEATURE_MESSAGE_WINDOW=mi;exports.PUBLIC_EMAIL_DOMAINS=Ye;exports.RELATED_SUBJECT_KINDS=Xe;exports.SIGNATURE_INTENTS=yn;exports.SUMMARY_MIN_LAST_CHARS=qe;exports.SUMMARY_MIN_MESSAGES=ze;exports.TERMINAL_RUN_STATUSES=Re;exports.TRIGGER_VARS=Yt;exports.UNSUPPORTED=_i;exports.USAGE_DIMENSIONS=Te;exports.USAGE_DIMENSION_IDS=be;exports.acceptExampleCandidate=un;exports.actingIdentityKey=Oe;exports.activityIconOf=pt;exports.activityJoinUrl=yt;exports.activitySnippet=he;exports.activityTextParams=Ae;exports.activityTimelineText=Et;exports.activityTimestamp=Mt;exports.activityTypeInfo=p;exports.actorKey=Qt;exports.addExampleCandidate=cn;exports.aiAttachmentKind=Je;exports.aiAttachmentRejection=ri;exports.aiBudgetLimit=F;exports.aiBudgetPeriodKey=En;exports.aiBudgetPeriodStart=He;exports.aiBudgetState=An;exports.aiVendorAcceptsAttachment=hn;exports.aiVendorDefaultModel=fn;exports.aiVendorLabel=dn;exports.aiVendorNeedsBaseUrl=gn;exports.aiVendorsWith=mn;exports.appNameFromPath=J;exports.applySignature=_n;exports.artifactBodyBytes=Bt;exports.artifactOutline=Ft;exports.artifactToMarkdown=Ht;exports.buildActivityPreview=It;exports.buildChannelIntents=li;exports.buildShareKeys=Vt;exports.canNestUnder=on;exports.carriesText=gt;exports.categoryLabel=ln;exports.channelKindForScheme=fi;exports.channelKindOf=dt;exports.cleanMessageText=qn;exports.defaultLocaleOf=Ue;exports.defineIntent=Ai;exports.depthOf=De;exports.disabledIntentsFromCapabilities=oi;exports.emailDomain=Kn;exports.endpointKey=Hn;exports.extractParams=at;exports.filterByEndpoint=ui;exports.filterByIntent=ci;exports.filterByTargetScheme=tt;exports.findAiVendor=A;exports.flattenLocales=Nt;exports.floorToPeriod=_e;exports.formatActingIdentity=Le;exports.formatPeriod=ye;exports.getActivitySeenUserIds=St;exports.getContactEndpoints=Tn;exports.getShortTitle=Mn;exports.getUrgencyScore=Sn;exports.heightOf=W;exports.helpCenterText=nn;exports.humanizeAction=Wt;exports.isAssigned=bn;exports.isClosed=In;exports.isDeepLink=Ti;exports.isDescendant=Pe;exports.isInteractionUnseen=Cn;exports.isLandingPath=bi;exports.isLikelyBulk=Zn;exports.isMessageType=ft;exports.isMoreSpecificPattern=ot;exports.isPaused=en;exports.isPlaybookAuthoredType=At;exports.isPublicEmailDomain=Fn;exports.isPublicPath=Mi;exports.isReplyableType=mt;exports.isRetryable=Zt;exports.isTerminal=ve;exports.isThreadLongEnough=ei;exports.linkLabel=tn;exports.localeInstruction=rn;exports.localeName=an;exports.localesOf=sn;exports.looksLikeEmail=Un;exports.matchContactToIntents=pi;exports.matchPublicRoute=st;exports.messageCountsAs=ht;exports.needsPhoneRegion=Gn;exports.normalizeArtifactBlocks=Kt;exports.normalizeBlocks=ut;exports.normalizeEmail=z;exports.normalizeExample=g;exports.parseActingIdentity=qt;exports.pathToRegex=it;exports.periodsInRange=Rt;exports.phoneSuffix=wn;exports.plainTextFromMarkdown=jn;exports.playbookActor=Jt;exports.publicBasePathFor=rt;exports.publicRoutePatterns=Si;exports.readPath=N;exports.registrableDomain=We;exports.rejectExampleCandidate=Fe;exports.relatedByDefault=vn;exports.resolveAccountCapabilities=et;exports.resolveActivityText=L;exports.resolveChannelIntents=Ze;exports.resolveSignature=Ve;exports.sanitizeInline=Ne;exports.shareKeyForTeam=X;exports.shareKeyForUser=V;exports.shareKeysForViewer=Xt;exports.stripHtml=ge;exports.toE164=G;exports.toolSourceKinds=jt;exports.topicOfferedForTeam=Ge;exports.topicsForTeam=pn;exports.truncateExample=Be;exports.usageMetricId=Ie;exports.usageMetrics=xt;
package/dist/index.d.ts CHANGED
@@ -6,6 +6,7 @@ export * from './entities/playbook';
6
6
  export * from './entities/kb';
7
7
  export * from './entities/topic';
8
8
  export * from './entities/ai-account';
9
+ export * from './entities/ai-budget';
9
10
  export * from './entities/ai-context';
10
11
  export * from './entities/ai-conversation';
11
12
  export * from './entities/ai-message';