@k-msg/analytics 0.30.0 → 0.31.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.
@@ -73,4 +73,5 @@ export declare class MetricAggregator {
73
73
  private robustNormalize;
74
74
  private calculateMAD;
75
75
  private startPeriodicFlush;
76
+ private flushAllBuffers;
76
77
  }
package/dist/index.cjs ADDED
@@ -0,0 +1,26 @@
1
+ var{defineProperty:Te,getOwnPropertyNames:Er,getOwnPropertyDescriptor:Mr}=Object,Dr=Object.prototype.hasOwnProperty;function $r(e){return this[e]}var Rr=(e)=>{var t=(st??=new WeakMap).get(e),r;if(t)return t;if(t=Te({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function"){for(var n of Er(e))if(!Dr.call(t,n))Te(t,n,{get:$r.bind(e,n),enumerable:!(r=Mr(e,n))||r.enumerable})}return st.set(e,t),t},st;var Sr=(e)=>e;function Tr(e,t){this[e]=Sr.bind(null,t)}var zr=(e,t)=>{for(var r in t)Te(e,r,{get:t[r],enumerable:!0,configurable:!0,set:Tr.bind(t,r)})};var ri={};zr(ri,{AnalyticsService:()=>it,AnomalyDetector:()=>Ae,DashboardGenerator:()=>Me,DeliveryTrackingAnalyticsService:()=>ot,EventCollector:()=>be,ExportManager:()=>Re,InsightEngine:()=>oe,MetricAggregator:()=>xe,MetricType:()=>D,MetricsCollector:()=>se,RecommendationEngine:()=>Ee,ReportGenerator:()=>ae,TimeSeriesAggregator:()=>we,WebhookCollector:()=>_e});module.exports=Rr(ri);var Pr=["to","from","phone","phoneNumber","recipient","sender","secret","apiKey","apiSecret","authorization","auth","token","password","payload","message","content","text"],Y=String.raw`\w.[\]"'-`,kr=new RegExp(String.raw`^[${Y}]*(?:(?:secret|password|passwd|passphrase|token|credential|private[-_.]?key|api[-_.]?key)[${Y}]*|auth(?:orization)?(?:[.[\]"'][${Y}]*)?)$`,"i");function ct(e){return kr.test(e.replace(/\s+/g,"_"))}function Ir(e){if(ct(e))return!0;let t=e.toLowerCase();return Pr.some((r)=>t.includes(r.toLowerCase()))}function ut(e){let t=e.trim();if(t.length<=4)return"***";if(t.includes("@")){let[i,o]=t.split("@");return`${i.slice(0,2)}${"*".repeat(Math.max(1,i.length-2))}@${o}`}let r=t.slice(0,3),n=t.slice(-2);return`${r}${"*".repeat(Math.max(1,t.length-5))}${n}`}var Cr=new RegExp([String.raw`(?:\+82[-.\s]?(?:\(0\)[-.\s]?|0)?|0)(?:1[016789]|2|70|80|50\d|[3-6]\d)[-.\s]?\d{3,4}[-.\s]?\d{4}`,String.raw`\(0\d{1,2}\)[-.\s]?\d{3,4}[-.\s]?\d{4}`,String.raw`1[5-9]\d{2}[-\s]\d{4}`].map((e)=>String.raw`(?<![\w+])${e}(?!\w)`).join("|"),"g"),Zr=/(\b[a-z][\w+.-]{0,31}:\/\/[^\s/:@]*):[^\s/?#]*@/gi,Lr=[String.raw`"(?:\\.|[^"\\\n])*"?`,String.raw`'(?:\\.|[^'\\\n])*'?`,String.raw`\\"(?:\\\\(?:\\.|[^\\\n])|\\[^"\\\n]|[^\\\n])*(?:\\")?`,String.raw`\\'(?:\\\\(?:\\.|[^\\\n])|\\[^'\\\n]|[^\\\n])*(?:\\')?`],Br=new RegExp(String.raw`(?<![${Y}])((?:["']?(?:api|private)[ \t]+)?[${Y}]+)((?:\\?["'])?\s*[:=]\s*)`,"gi"),at=new RegExp(String.raw`${Lr.join("|")}|((?:Bearer|Basic)\s+)?[^\s"',;&]+`,"iy");function Or(e){let t="",r=0;for(let n of e.matchAll(Br)){let[i,o=""]=n;if(n.index<r||!ct(o))continue;let s=n.index+i.length;at.lastIndex=s;let a=at.exec(e);if(!a)continue;let c=/^\\?["']/.exec(a[0])?.[0];t+=e.slice(r,s),t+=c?`${c}[REDACTED]${c}`:`${a[1]??""}[REDACTED]`,r=s+a[0].length}return t+e.slice(r)}function ce(e){return Or(e.replace(Zr,"$1:[REDACTED]@").replace(Cr,(t)=>ut(t)))}function Pe(e,t){if(t===void 0||t===null)return t;if(Ir(e)){if(typeof t==="string")return ut(t);if(typeof t==="number"||typeof t==="boolean")return"***";if(Array.isArray(t))return"[REDACTED]";if(typeof t==="object")return"[REDACTED]"}if(Array.isArray(t))return t.map((r)=>Pe(e,r));if(typeof t==="object"){let r={};for(let[n,i]of Object.entries(t))r[n]=Pe(n,i);return r}if(typeof t==="string")return ce(t);return t}function Nr(e){let t={};for(let[r,n]of Object.entries(e))t[r]=Pe(r,n);return t}class ke{config;context;constructor(e={},t={}){this.context=e,this.config={level:"INFO",enableConsole:!0,enableJson:!1,enableColors:!0,...t}}shouldLog(e){let t=["DEBUG","INFO","WARN","ERROR"];return t.indexOf(e)>=t.indexOf(this.config.level)}formatMessage(e){let t=Nr(e.context),r=ce(e.message),n=e.error&&{name:e.error.name,message:ce(e.error.message),stack:e.error.stack?ce(e.error.stack):void 0};if(this.config.enableJson)return JSON.stringify({level:e.level,message:r,timestamp:e.timestamp.toISOString(),context:t,...n&&{error:n},...e.duration&&{duration:e.duration}});let i=e.timestamp.toISOString(),o=this.config.enableColors?this.colorizeLevel(e.level):e.level,s=Object.keys(t).length>0?` [${Object.entries(t).map(([c,u])=>`${c}=${u}`).join(", ")}]`:"",a=`${i} ${o}${s}: ${r}`;if(e.duration!==void 0)a+=` (${e.duration}ms)`;if(n)a+=`
2
+ ${n.stack??`${n.name}: ${n.message}`}`;return a}colorizeLevel(e){if(!this.config.enableColors)return e;return`${{["DEBUG"]:"\x1B[36m",["INFO"]:"\x1B[32m",["WARN"]:"\x1B[33m",["ERROR"]:"\x1B[31m"}[e]}${e}\x1B[0m`}writeLog(e){if(!this.shouldLog(e.level))return;let t=this.formatMessage(e);if(this.config.enableConsole)(e.level==="ERROR"?console.error:e.level==="WARN"?console.warn:console.log)(t);if(this.config.enableFile&&this.config.filePath);}debug(e,t={}){this.writeLog({level:"DEBUG",message:e,timestamp:new Date,context:{...this.context,...t}})}info(e,t={}){this.writeLog({level:"INFO",message:e,timestamp:new Date,context:{...this.context,...t}})}warn(e,t={},r){this.writeLog({level:"WARN",message:e,timestamp:new Date,context:{...this.context,...t},error:r})}error(e,t={},r){this.writeLog({level:"ERROR",message:e,timestamp:new Date,context:{...this.context,...t},error:r})}child(e){return new ke({...this.context,...e},this.config)}time(e){let t=Date.now();return()=>{let r=Date.now()-t;this.info(`${e} completed`,{duration:r})}}async measure(e,t,r={}){let n=Date.now(),i={...r,operation:e};this.debug(`Starting ${e}`,i);try{let o=await t(),s=Date.now()-n;return this.info(`Completed ${e}`,{...i,duration:s}),o}catch(o){let s=Date.now()-n;throw this.error(`Failed ${e}`,{...i,duration:s},o instanceof Error?o:Error(String(o))),o}}}var ze;function Ur(e,t){return new ke(e,t)}function F(){if(!ze)ze=Ur();return ze}var x={debug:(e,t)=>F().debug(e,t),info:(e,t)=>F().info(e,t),warn:(e,t,r)=>F().warn(e,t,r),error:(e,t,r)=>F().error(e,t,r),child:(e)=>F().child(e),time:(e)=>F().time(e),measure:(e,t,r)=>F().measure(e,t,r)};var Ie=["PENDING","SENT","DELIVERED","FAILED","CANCELLED","UNKNOWN"],Fr=["DELIVERED","FAILED","CANCELLED","UNKNOWN"],jr=["PENDING","SENT"],oi=new Set(Ie),si=new Set(Fr),ai=new Set(jr);function Ze(e){let t=Object.values(e).filter((n)=>typeof n==="number");return Object.entries(e).filter(([n,i])=>t.indexOf(+n)===-1).map(([n,i])=>i)}function lt(e,t){if(typeof t==="bigint")return t.toString();return t}class pt{constructor(e){this._getter=e,this._value=void 0}get value(){let e=this._getter;if(e!==void 0)this._value=e(),this._getter=void 0;return this._value}}function dt(e){return new pt(e)}function mt(e){let t=e.startsWith("^")?1:0,r=e.endsWith("$")?e.length-1:e.length;return e.slice(t,r)}function gt(e,t,r){Object.defineProperty(e,t,{value:r,writable:!0,enumerable:!0,configurable:!0})}var Le="captureStackTrace"in Error?Error.captureStackTrace:(...e)=>{};function ue(e){return typeof e==="object"&&e!==null&&!Array.isArray(e)}function ft(e){if(ue(e)===!1)return!1;let t=e.constructor;if(t===void 0)return!0;if(typeof t!=="function")return!0;let r=t.prototype;if(ue(r)===!1)return!1;if(Object.prototype.hasOwnProperty.call(r,"isPrototypeOf")===!1)return!1;return!0}var ht=new Set(["string","number","symbol"]);function yt(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function le(e,t,r){let n=new e._zod.constr(t??e._zod.def);if(!t||r?.parent)n._zod.parent=e;return n}function A(e){let t=e;if(!t)return{};if(typeof t==="string")return{error:()=>t};if(t?.message!==void 0){if(t?.error!==void 0)throw Error("Cannot specify both `message` and `error` params");t.error=t.message}if(delete t.message,typeof t.error==="string")return{...t,error:()=>t.error};return t}function vt(e){return Object.keys(e).filter((t)=>e[t]._zod.optin!==void 0&&e[t]._zod.optout==="optional")}function L(e,t=0){if(e.aborted===!0)return!0;for(let r=t;r<e.issues.length;r++)if(e.issues[r]?.continue!==!0)return!0;return!1}function xt(e,t=0){if(e.aborted===!0)return!0;for(let r=t;r<e.issues.length;r++)if(e.issues[r]?.continue===!1)return!0;return!1}function V(e,t){return t.map((r)=>{var n;return(n=r).path??(n.path=[]),r.path.unshift(e),r})}function Q(e){return typeof e==="string"?e:e?.message}function Be(e,t,r){var n;for(let i=t;i<e.length;i++)(n=e[i]).schema??(n.schema=r)}function B(e,t,r){var n;let i=e.inst?._zod?.traits;if(i?.has("$ZodType"))if(i.has("$ZodCheck"))(n=e).schema??(n.schema=e.inst);else e.schema=e.inst;let o=e.schema!==e.inst?e.schema?._zod.def?.error:void 0,s=e.message?e.message:Q(e.inst?._zod.def?.error?.(e))??Q(o?.(e))??Q(t?.error?.(e))??Q(r.customError?.(e))??Q(r.localeError?.(e))??"Invalid input",a={};for(let c of Object.keys(e)){if(c==="inst"||c==="schema"||c==="continue"||c==="input"||c==="__proto__")continue;a[c]=e[c]}if(a.path??(a.path=[]),a.message=s,t?.reportInput)a.input=e.input;return a}function wt(e,t){for(let r in t){let n=Object.getOwnPropertyDescriptor(t,r);if(n.get)Object.defineProperty(e,r,{...n,enumerable:!1});else Vr(e,r,n.value)}}function j(e,t,r,n=!0){return Object.defineProperty(e,t,{configurable:!0,writable:!0,enumerable:n,value:r}),r}function bt(e,t,r){return j(e,t,r,!1)}function Vr(e,t,r){Object.defineProperty(e,t,{configurable:!0,get(){return this==null?r:j(this,t,r.bind(this))},set(n){j(this,t,n)}})}function Wr(e,t){let r=Object.getPrototypeOf(e);return t in r?void 0:r}var Ce,Z=!1,Gr={configurable:!0,get(){Z=!0;return}};function K(e,t,r){let n=Object.getPrototypeOf(e._zod);if(t in n&&Ce!==e._zod){Ce=void 0;return}Ce=e._zod,Object.defineProperty(n,t,{configurable:!0,get(){Object.defineProperty(this,t,Gr);let i=Z;Z=!1;try{let o=r(this);if(Z)delete this[t];else Object.defineProperty(this,t,{configurable:!0,writable:!0,value:o});return Z=Z||i,o}catch(o){throw delete this[t],Z=Z||i,o}},set(i){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:i})}})}function _t(e,t,r,n){let i=Wr(e,t);if(!i)return;Object.defineProperty(i,t,{configurable:!0,get(){let o={configurable:!0,writable:!0,enumerable:n,value:void 0};return Object.defineProperty(this,t,o),o.value=r(this),Object.defineProperty(this,t,o),o.value},set(o){Object.defineProperty(this,t,{configurable:!0,writable:!0,enumerable:n,value:o})}})}var At;var Oe={value:void 0,enumerable:!1},Et="captureStackTrace"in Error?Error:null;function Kr(e){let t=Et;if(t){let r=t.stackTraceLimit;if(typeof r==="number"){try{t.stackTraceLimit=0}catch{return Et=null,new e}try{return new e}finally{t.stackTraceLimit=r}}}return new e}function y(e,t,r,n){let i={};function o(m){this.def=m,this.constr=p,this.traits=new Set}o.prototype=i;let s=r,a=s&&new WeakSet;function c(m,f){if(!m._zod){Oe.value=new o(f);try{Object.defineProperty(m,"_zod",Oe)}finally{Oe.value=void 0}}else if(m._zod.traits.has(e))return;if(m._zod.traits.add(e),t(m,f),a){let h=Object.getPrototypeOf(m),v=m._zod.constr.prototype,b=h;while(b&&b!==v)b=Object.getPrototypeOf(b);let _=b??h;if(!a.has(_))a.add(_),wt(_,s)}let g=p.prototype;for(let h in g){if(!Object.prototype.hasOwnProperty.call(g,h))continue;if(!(h in m))m[h]=g[h].bind(m)}}let u=n?.Parent??Object;class l extends u{}Object.defineProperty(l,"name",{value:e});function p(m){let f=n?.Parent?Kr(l):this;c(f,m);let g=f._zod.deferred;if(g){for(let v of g)v();f._zod.deferred=void 0}let h=globalThis.__zod_globalConfig?.postProcessor;if(h)h(f);return f}return Object.defineProperty(p,"init",{value:c}),Object.defineProperty(p,Symbol.hasInstance,{value:(m)=>{if(n?.Parent&&m instanceof n.Parent)return!0;return m?._zod?.traits?.has(e)}}),Object.defineProperty(p,"name",{value:e}),p}class O extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}}(At=globalThis).__zod_globalConfig??(At.__zod_globalConfig={});var q=globalThis.__zod_globalConfig;function N(e){if(e)Object.assign(q,e);return q}function Hr(){let e=this._zod;return e.message??(e.message=JSON.stringify(e.def,lt,2)),e.message}function qr(e){this._zod.message=e}var Jr={get:Hr,set:qr,enumerable:!0,configurable:!0},Ue={value:void 0,enumerable:!1},Mt=new WeakSet([Object.prototype,Error.prototype]),Dt=(e,t)=>{e.name="$ZodError",Ue.value=t,Object.defineProperty(e,"issues",Ue),Ue.value=void 0,Object.defineProperty(e,"message",Jr);let r=Object.getPrototypeOf(e);if(!Mt.has(r))Mt.add(r),Object.defineProperty(r,"toString",{configurable:!0,enumerable:!1,get(){let n=()=>this.message;return Object.defineProperty(this,"toString",{value:n,configurable:!0,writable:!0}),n},set(n){Object.defineProperty(this,"toString",{value:n,configurable:!0,writable:!0})}})},pi=y("$ZodError",Dt),ee=y("$ZodError",Dt,void 0,{Parent:Error});var Yr=(e)=>{let t=(r,n,i,o)=>{let s=i?{...i,async:!1}:{async:!1},a=r._zod.run({value:n,issues:[]},s);if(a instanceof Promise)throw new O;if(a.issues.length){let c=new(o?.Err??e)(a.issues.map((u)=>B(u,s,N())));throw Le(c,o?.callee??t),c}return a.value};return t},Fe=Yr(ee),Qr=(e)=>{let t=async(r,n,i,o)=>{let s=i?{...i,async:!0}:{async:!0},a=r._zod.run({value:n,issues:[]},s);if(a instanceof Promise)a=await a;if(a.issues.length){let c=new(o?.Err??e)(a.issues.map((u)=>B(u,s,N())));throw Le(c,o?.callee??t),c}return a.value};return t},je=Qr(ee),en=(e)=>(t,r,n)=>{let i=n?{...n,async:!1}:{async:!1},o=t._zod.run({value:r,issues:[]},i);if(o instanceof Promise)throw new O;return o.issues.length?$t(e,o.issues,i):{success:!0,data:o.value}},Ve=en(ee);function $t(e,t,r){let n;return{success:!1,get error(){if(!n)n=new e(t.map((i)=>B(i,r,N()))),t=void 0,r=void 0;return n},set error(i){n=i,t=void 0,r=void 0}}}var tn=(e)=>async(t,r,n)=>{let i=n?{...n,async:!0}:{async:!0},o=t._zod.run({value:r,issues:[]},i);if(o instanceof Promise)o=await o;return o.issues.length?$t(e,o.issues,i):{success:!0,data:o.value}},We=tn(ee);var Rt=/^[\s\S]{0,}$/;var Ge=/^-?\d+(?:\.\d+)?$/,St=/^(?:true|false)$/i;var de=y("$ZodCheck",(e,t)=>{var r;e._zod??(e._zod={}),e._zod.def=t,(r=e._zod).onattach??(r.onattach=[])});var pe={number:"number",bigint:"bigint",object:"date"},zt=y("$ZodCheckLessThan",(e,t)=>{de.init(e,t);let r=pe[typeof t.value];e._zod.check=(n)=>{if(t.inclusive?n.value<=t.value:n.value<t.value)return;n.issues.push({origin:pe[typeof n.value]??r,code:"too_big",maximum:typeof t.value==="object"?t.value.getTime():t.value,input:n.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),Pt=y("$ZodCheckGreaterThan",(e,t)=>{de.init(e,t);let r=pe[typeof t.value];e._zod.check=(n)=>{if(t.inclusive?n.value>=t.value:n.value>t.value)return;n.issues.push({origin:pe[typeof n.value]??r,code:"too_small",minimum:typeof t.value==="object"?t.value.getTime():t.value,input:n.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}});var kt={major:4,minor:6,patch:5};var R=y("$ZodType",(e,t)=>{var r;e??(e={}),e._zod.def=t,e._zod.bag=e._zod.bag||{},e._zod.version=kt;let n=e._zod.def.checks,i=e._zod.traits.has("$ZodCheck")?[e,...n??[]]:n?.length?[...n]:[];for(let o of i)for(let s of o._zod.onattach)s(e);if(i.length===0)(r=e._zod).deferred??(r.deferred=[]),e._zod.deferred?.push(()=>{e._zod.run=e._zod.parse});else{let o=(a,c,u)=>{if(a.memo)return a;let l=L(a),p;for(let m of c){if(m._zod.def.when){if(xt(a))continue;if(!m._zod.def.when(a))continue}else if(l)continue;let f=a.issues.length,g=m._zod.check(a);if(g instanceof Promise&&u?.async===!1)throw new O;if(p||g instanceof Promise)p=(p??Promise.resolve()).then(async()=>{if(await g,a.issues.length===f)return;if(Be(a.issues,f,e),!l)l=L(a,f)});else{if(a.issues.length===f)continue;if(Be(a.issues,f,e),!l)l=L(a,f)}}if(p)return p.then(()=>a);return a},s=(a,c,u)=>{if(L(a))return a.aborted=!0,a;let l=o(c,i,u);if(l instanceof Promise){if(u.async===!1)throw new O;return l.then((p)=>e._zod.parse(p,u))}return e._zod.parse(l,u)};e._zod.run=(a,c)=>{if(c.skipChecks)return e._zod.parse(a,c);if(c.direction==="backward"){let l=e._zod.parse({value:a.value,issues:[]},{...c,skipChecks:!0});if(l instanceof Promise)return l.then((p)=>s(p,a,c));return s(l,a,c)}let u=e._zod.parse(a,c);if(u instanceof Promise){if(c.async===!1)throw new O;return u.then((l)=>o(l,i,c))}return o(u,i,c)}}},{get "~standard"(){return bt(this,"~standard",sn(this))},set "~standard"(e){j(this,"~standard",e)}}),Zt=(e,t)=>e.issues.length?{issues:e.issues.map((r)=>B(r,t,N()))}:{value:e.value};async function on(e,t){let r={async:!0};return Zt(await e._zod.run({value:t,issues:[]},r),r)}function sn(e){return{validate:(t)=>{let r={async:!1};try{let n=e._zod.run({value:t,issues:[]},r);if(!(n instanceof Promise))return Zt(n,r)}catch(n){}return on(e,t)},vendor:"zod",version:1}}var Lt=y("$ZodString",(e,t)=>{R.init(e,t),e._zod.pattern=t.pattern??Rt,e._zod.parse=(r,n)=>{if(t.coerce)try{r.value=String(r.value)}catch(i){}if(typeof r.value==="string")return r;return r.issues.push({expected:"string",code:"invalid_type",input:r.value,inst:e}),r}});var Bt=y("$ZodNumber",(e,t)=>{R.init(e,t),e._zod.pattern=Ge,e._zod.parse=(r,n)=>{if(t.coerce)try{r.value=Number(r.value)}catch(s){}let i=r.value;if(typeof i==="number"&&!Number.isNaN(i)&&Number.isFinite(i))return r;let o=typeof i==="number"?Number.isNaN(i)?"NaN":!Number.isFinite(i)?String(i):void 0:void 0;return r.issues.push({expected:"number",code:"invalid_type",input:i,inst:e,...o?{received:o}:{}}),r}});var Ot=y("$ZodBoolean",(e,t)=>{R.init(e,t),e._zod.pattern=St,e._zod.parse=(r,n)=>{if(t.coerce)try{r.value=Boolean(r.value)}catch(o){}let i=r.value;if(typeof i==="boolean")return r;return r.issues.push({expected:"boolean",code:"invalid_type",input:i,inst:e}),r}});var Nt=y("$ZodAny",(e,t)=>{R.init(e,t),e._zod.parse=(r)=>r});var Ut=y("$ZodDate",(e,t)=>{R.init(e,t),e._zod.parse=(r,n)=>{if(t.coerce)try{r.value=new Date(r.value)}catch(a){}let i=r.value,o=i instanceof Date;if(o&&!Number.isNaN(i.getTime()))return r;return r.issues.push({expected:"date",code:"invalid_type",input:i,...o?{received:"Invalid Date"}:{},inst:e}),r}});function It(e,t,r){if(e.issues.length)t.issues.push(...V(r,e.issues));t.value[r]=e.value}var Ft=y("$ZodArray",(e,t)=>{R.init(e,t);let r=q.memoizer;r?.attach(e),e._zod.parse=(n,i)=>{let o=n.value;if(!Array.isArray(o))return n.issues.push({expected:"array",code:"invalid_type",input:o,inst:e}),n;n.value=r?r.alloc(e,n,Array(o.length),i):Array(o.length);let s=[],a=i?.abortEarly;for(let c=0;c<o.length;c++){let u=o[c],l=t.element._zod.run({value:u,issues:[]},i);if(l instanceof Promise)s.push(l.then((p)=>It(p,n,c)));else if(It(l,n,c),a&&l.issues.length!==0&&L(l))break}if(s.length)return Promise.all(s).then(()=>n);return n}});function me(e,t,r,n,i,o){let s=r in n,a=o==="optional";if(!s&&a&&i==="optional")return;if(e.issues.length){if(i!==void 0&&a&&!s)return;t.issues.push(...V(r,e.issues))}if(!s&&i===void 0){if(!e.issues.length)t.issues.push({code:"invalid_type",expected:"nonoptional",input:void 0,path:[r]});return}if(e.value===void 0){if(s||i==="defaulted"&&!a)t.value[r]=void 0}else t.value[r]=e.value}var an=[];function cn(e){let t=Object.keys(e.shape),r=Object.getOwnPropertySymbols(e.shape),n=r.length?r:an,i=n.length?[...t,...n]:t;for(let s of i)if(!e.shape?.[s]?._zod?.traits?.has("$ZodType"))throw Error(`Invalid element at key "${String(s)}": expected a Zod schema`);let o=vt(e.shape);return{...e,allKeys:i,symbolKeys:n,keySet:new Set(t),numKeys:t.length,optionalKeys:new Set(o)}}function un(e,t,r,n,i,o,s){let a=[],c=i.keySet,u=i.catchall._zod,l=u.def.type,{optin:p,optout:m}=u,f=0;for(let g in t){if(s&&r.issues.length!==f){if(L(r,f))break;f=r.issues.length}if(c.has(g))continue;if(g==="__proto__"){if(l==="never")a.push(g);continue}if(l==="never"){a.push(g);continue}let h=u.run({value:t[g],issues:[]},n);if(h instanceof Promise)e.push(h.then((v)=>me(v,r,g,t,p,m)));else me(h,r,g,t,p,m)}if(a.length)r.issues.push({code:"unrecognized_keys",keys:a,input:t,inst:o,continue:!0});if(!e.length)return r;return Promise.all(e).then(()=>r)}var jt=y("$ZodObject",(e,t)=>{R.init(e,t);let r=Object.getOwnPropertyDescriptor(t,"shape"),n=r?.get?r.get.raw:t.shape??{};if(n){let u=()=>{let l={...n};return Object.defineProperty(t,"shape",{value:l}),u.raw=l,l};u.raw=n,Object.defineProperty(t,"shape",{get:u})}let i=dt(()=>cn(t));K(e,"propValues",(u)=>{let l=u.def.shape,p={};for(let m in l){let f=l[m]._zod;if(f.values){if(!Object.prototype.hasOwnProperty.call(p,m))gt(p,m,new Set);for(let g of f.values)p[m].add(g);if(f.optin!==void 0)p[m].add(void 0)}}return p});let o=ue,s=t.catchall,a,c=q.memoizer;c?.attach(e),e._zod.parse=(u,l)=>{a??(a=i.value);let p=u.value;if(!o(p))return u.issues.push({expected:"object",code:"invalid_type",input:p,inst:e}),u;u.value=c?c.alloc(e,u,{},l):{};let m=[],f=a.shape,g=l?.abortEarly,h=u.issues.length;for(let v of a.allKeys){if(g&&u.issues.length!==h){if(L(u,h))break;h=u.issues.length}if(v==="__proto__")continue;let b=f[v],_=b._zod.optin,T=b._zod.optout,Se=b._zod.run({value:p[v],issues:[]},l);if(Se instanceof Promise)m.push(Se.then((Ar)=>me(Ar,u,v,p,_,T)));else me(Se,u,v,p,_,T)}if(!s)return m.length?Promise.all(m).then(()=>u):u;return un(m,p,u,l,i.value,e,g===!0)}});var Vt=y("$ZodRecord",(e,t)=>{R.init(e,t);let r=q.memoizer;r?.attach(e),e._zod.parse=(n,i)=>{let o=n.value;if(!ft(o))return n.issues.push({expected:"record",code:"invalid_type",input:o,inst:e}),n;let s=[],a=t.keyType._zod.values;if(a&&!t.partial){n.value=r?r.alloc(e,n,{},i):{};let c=new Set;for(let l of a)if(typeof l==="string"||typeof l==="number"||typeof l==="symbol"){if(c.add(typeof l==="number"?l.toString():l),l==="__proto__")continue;let p=t.keyType._zod.run({value:l,issues:[]},i);if(p instanceof Promise)throw Error("Async schemas not supported in object keys currently");if(p.issues.length){n.issues.push({code:"invalid_key",origin:"record",issues:p.issues.map((g)=>B(g,i,N())),input:l,path:[l],inst:e});continue}let m=p.value;if(m==="__proto__")continue;let f=t.valueType._zod.run({value:o[l],issues:[]},i);if(f instanceof Promise)s.push(f.then((g)=>{if(g.issues.length)n.issues.push(...V(l,g.issues));n.value[m]=g.value}));else{if(f.issues.length)n.issues.push(...V(l,f.issues));n.value[m]=f.value}}let u;for(let l in o)if(!c.has(l))if(t.mode==="loose"){if(l==="__proto__")continue;n.value[l]=o[l]}else u=u??[],u.push(l);if(u&&u.length>0)n.issues.push({code:"unrecognized_keys",input:o,inst:e,keys:u,continue:!0})}else{n.value=r?r.alloc(e,n,{},i):{};let c;for(let u of Reflect.ownKeys(o)){if(u==="__proto__")continue;if(!Object.prototype.propertyIsEnumerable.call(o,u))continue;let l=t.keyType._zod.run({value:u,issues:[]},i);if(l instanceof Promise)throw Error("Async schemas not supported in object keys currently");if(typeof u==="string"&&Ge.test(u)&&l.issues.length){let g=t.keyType._zod.run({value:Number(u),issues:[]},i);if(g instanceof Promise)throw Error("Async schemas not supported in object keys currently");if(g.issues.length===0)l=g}if(l.issues.length){if(t.mode==="loose")n.value[u]=o[u];else if(a)c=c??[],c.push(u);else n.issues.push({code:"invalid_key",origin:"record",issues:l.issues.map((g)=>B(g,i,N())),input:u,path:[u],inst:e});continue}let m=l.value;if(m==="__proto__")continue;let f=t.valueType._zod.run({value:o[u],issues:[]},i);if(f instanceof Promise)s.push(f.then((g)=>{if(g.issues.length)n.issues.push(...V(u,g.issues));n.value[m]=g.value}));else{if(f.issues.length)n.issues.push(...V(u,f.issues));n.value[m]=f.value}}if(c&&c.length>0)n.issues.push({code:"unrecognized_keys",input:o,inst:e,keys:c,continue:!0})}if(s.length)return Promise.all(s).then(()=>n);return n}});var Wt=y("$ZodEnum",(e,t)=>{R.init(e,t);let r=Ze(t.entries),n=new Set(r);e._zod.values=n,K(e,"pattern",(i)=>{let o=Ze(i.def.entries).filter((s)=>ht.has(typeof s));return new RegExp(o.length?`^(${o.map((s)=>yt(s.toString())).join("|")})$`:"^[^\\s\\S]$")}),e._zod.parse=(i,o)=>{let s=i.value;if(n.has(s))return i;return i.issues.push({code:"invalid_value",values:r,input:s,inst:e}),i}});function Ct(e,t){return e.value=t.issues.length?void 0:t.value,e}var Gt=y("$ZodOptional",(e,t)=>{R.init(e,t),K(e,"optin",(r)=>r.def.innerType._zod.optin==="defaulted"?"defaulted":"optional"),e._zod.optout="optional",K(e,"values",(r)=>{let n=r.def.innerType._zod.values;return n?new Set([...n,void 0]):void 0}),K(e,"pattern",(r)=>{let n=r.def.innerType._zod.pattern;return n?new RegExp(`^(${mt(n.source)})?$`):void 0}),e._zod.parse=(r,n)=>{if(r.value===void 0){if(t.innerType._zod.optin!=="defaulted")return r;let i=t.innerType._zod.run({value:r.value,issues:[]},n);if(i instanceof Promise)return i.then((o)=>Ct(r,o));return Ct(r,i)}return t.innerType._zod.run(r,n)}});function Kt(e){if(e.checks)e.checks=[...e.checks];return e}function Ht(e,t){return new e(Kt({type:"string",...A(t)}))}function qt(e,t){return new e(Kt({type:"number",checks:[],...A(t)}))}function Jt(e,t){return new e({type:"boolean",...A(t)})}function Xt(e){return new e({type:"any"})}function Yt(e,t){return new e({type:"date",...A(t)})}function ge(e,t){return new zt({check:"less_than",...A(t),value:e,inclusive:!0})}function te(e,t){return new Pt({check:"greater_than",...A(t),value:e,inclusive:!0})}var z=y("ZodMiniType",(e,t)=>{if(!e._zod)throw Error("Uninitialized schema in ZodMiniType.");R.init(e,t),e.def=t,e.type=t.type},{get with(){return this.check},set with(e){j(this,"with",e)},parse(e,t){return Fe(this,e,t,{callee:this.parse})},parseAsync(e,t){return je(this,e,t,{callee:this.parseAsync})},safeParse(e,t){return Ve(this,e,t)},safeParseAsync(e,t){return We(this,e,t)},check(...e){let t=this.def;return this.clone({...t,checks:[...t.checks??[],...e.map((r)=>typeof r==="function"?{_zod:{check:r,def:{check:"custom"},onattach:[]}}:r)]},{parent:!0})},clone(e,t){return le(this,e,t)},brand(){return this},register(e,t){return e.add(this,t),this},apply(e,...t){return t.length===0?e(this):e(this,...t)}}),dn=y("ZodMiniString",(e,t)=>{Lt.init(e,t),z.init(e,t)});function E(e){return Ht(dn,e)}var mn=y("ZodMiniNumber",(e,t)=>{Bt.init(e,t),z.init(e,t)});function J(e){return qt(mn,e)}var gn=y("ZodMiniBoolean",(e,t)=>{Ot.init(e,t),z.init(e,t)});function fn(e){return Jt(gn,e)}var hn=y("ZodMiniAny",(e,t)=>{Nt.init(e,t),z.init(e,t)});function er(){return Xt(hn)}var yn=y("ZodMiniDate",(e,t)=>{Ut.init(e,t),z.init(e,t)});function fe(e){return Yt(yn,e)}var vn=y("ZodMiniArray",(e,t)=>{Ft.init(e,t),z.init(e,t)});function he(e,t){return new vn({type:"array",element:e,...A(t)})}var xn=y("ZodMiniObject",(e,t)=>{jt.init(e,t),z.init(e,t),_t(e,"shape",(r)=>r._zod.def.shape,!1)});function re(e,t){let r={type:"object",shape:e??{},...A(t)};return new xn(r)}var Qt=y("ZodMiniRecord",(e,t)=>{Vt.init(e,t),z.init(e,t)});function ye(e,t,r){if(!t||!t._zod)return new Qt({type:"record",keyType:E(),valueType:e,...A(t)});return new Qt({type:"record",keyType:e,valueType:t,...A(r)})}var tr=y("ZodMiniEnum",(e,t)=>{Wt.init(e,t),z.init(e,t),e.options=[...e._zod.values]});function ve(e,t){let r=Array.isArray(e)?Object.fromEntries(e.map((n)=>[n,n])):e;return new tr({type:"enum",entries:r,...A(t)})}function Ke(e,t){return new tr({type:"enum",entries:e,...A(t)})}var wn=y("ZodMiniOptional",(e,t)=>{Gt.init(e,t),z.init(e,t)});function I(e){return new wn({type:"optional",innerType:e})}var D;((l)=>{l.MESSAGE_SENT="message_sent";l.MESSAGE_DELIVERED="message_delivered";l.MESSAGE_FAILED="message_failed";l.MESSAGE_CLICKED="message_clicked";l.TEMPLATE_USAGE="template_usage";l.PROVIDER_PERFORMANCE="provider_performance";l.CHANNEL_USAGE="channel_usage";l.ERROR_RATE="error_rate";l.DELIVERY_RATE="delivery_rate";l.CLICK_RATE="click_rate"})(D||={});var _n=ve(["minute","hour","day","week","month"]),An=re({start:fe(),end:fe()}),En=re({field:E(),direction:ve(["asc","desc"])}),yc=re({id:E(),type:Ke(D),timestamp:fe(),value:J(),dimensions:ye(E(),E()),metadata:I(ye(E(),er()))}),vc=re({metrics:he(Ke(D)),dateRange:An,interval:I(_n),filters:I(ye(E(),er())),groupBy:I(he(E())),orderBy:I(he(En)),limit:I(J().check(te(1),ge(1e4))),offset:I(J().check(te(0)))}),xc=re({id:E(),type:ve(["anomaly","trend","recommendation"]),title:E(),description:E(),severity:ve(["low","medium","high","critical"]),metric:Ke(D),dimensions:ye(E(),E()),value:J(),expectedValue:I(J()),confidence:J().check(te(0),ge(1)),actionable:fn(),recommendations:I(he(E())),detectedAt:fe()});class xe{config;buffer=new Map;aggregationCache=new Map;constructor(e){this.config=e,this.startPeriodicFlush()}async addMetric(e){let t=this.getBufferKey(e);if(!this.buffer.has(t))this.buffer.set(t,[]);if(this.buffer.get(t).push(e),this.buffer.get(t).length>=this.config.batchSize)await this.flushBuffer(t)}async addMetrics(e){for(let t of e)await this.addMetric(t)}async aggregateByRules(e){let t=[];for(let r of this.config.rules){let n=this.filterMetricsByRule(e,r);if(n.length===0)continue;let i=await this.applyAggregationRule(n,r);t.push(...i)}return t}async aggregateCustom(e,t,r,n){let i=e;if(n)i=this.applyFilters(e,n);let o=this.groupMetrics(i,t),s=[];for(let[a,c]of o.entries()){let u=JSON.parse(a),l=await this.performAggregation(c,r,u);s.push(...l)}return s}async calculateRates(e,t,r=[]){let n=this.groupMetrics(e,r),i=this.groupMetrics(t,r),o=[];for(let[s,a]of n.entries()){let c=i.get(s)||[],u=JSON.parse(s),l=a.reduce((g,h)=>g+h.value,0),p=c.reduce((g,h)=>g+h.value,0),m=p>0?l/p*100:0,f=new Date(Math.max(...a.map((g)=>g.timestamp.getTime()),...c.map((g)=>g.timestamp.getTime())));o.push({type:a[0]?.type||"delivery_rate",interval:"minute",timestamp:f,dimensions:u,aggregations:{count:a.length+c.length,sum:m,avg:m,min:m,max:m}})}return o}async calculatePercentiles(e,t,r=[]){let n=this.groupMetrics(e,r),i=[];for(let[o,s]of n.entries()){let a=JSON.parse(o),c=s.map((u)=>u.value).sort((u,l)=>u-l);for(let u of t){let l=this.calculatePercentile(c,u);i.push({type:s[0].type,interval:"minute",timestamp:new Date,dimensions:{...a,percentile:u.toString()},aggregations:{count:c.length,sum:l,avg:l,min:l,max:l}})}}return i}async aggregateSlidingWindow(e,t,r,n){let i=[...e].sort((u,l)=>u.timestamp.getTime()-l.timestamp.getTime());if(i.length===0)return[];let o=[],s=i[0].timestamp.getTime(),a=i[i.length-1].timestamp.getTime(),c=s;while(c<=a){let u=new Date(c),l=new Date(c+t),p=i.filter((m)=>m.timestamp>=u&&m.timestamp<l);if(p.length>0){let m=await this.performAggregation(p,n,{});o.push(...m)}c+=r}return o}async normalizeMetrics(e,t){let r=new Map;for(let i of e){if(!r.has(i.type))r.set(i.type,[]);r.get(i.type).push(i)}let n=[];for(let[i,o]of r.entries()){let s=o.map((c)=>c.aggregations.avg),a;switch(t){case"minmax":a=this.minMaxNormalize(s);break;case"zscore":a=this.zScoreNormalize(s);break;case"robust":a=this.robustNormalize(s);break;default:a=s}for(let c=0;c<o.length;c++)n.push({...o[c],aggregations:{...o[c].aggregations,avg:a[c],sum:a[c]*o[c].aggregations.count}})}return n}getBufferKey(e){return`${e.type}_${JSON.stringify(e.dimensions)}`}async flushBuffer(e){let t=this.buffer.get(e);if(!t||t.length===0)return;let r=await this.aggregateByRules(t);if(r.length>0){let n=`${e}_${Date.now()}`;this.aggregationCache.set(n,r)}this.buffer.set(e,[])}filterMetricsByRule(e,t){let r=e.filter((n)=>n.type===t.metricType);if(t.conditions)r=r.filter((n)=>t.conditions.every((i)=>{let o=this.getFieldValue(n,i.field);return this.evaluateCondition(o,i.operator,i.value)}));return r}async applyAggregationRule(e,t){let r=this.groupMetrics(e,t.dimensions),n=[];for(let[i,o]of r.entries()){let s=JSON.parse(i);if(t.aggregationType==="percentile"){if(t.percentile){let a=o.map((u)=>u.value).sort((u,l)=>u-l),c=this.calculatePercentile(a,t.percentile);n.push({type:t.metricType,interval:"minute",timestamp:new Date,dimensions:s,aggregations:{count:a.length,sum:c,avg:c,min:c,max:c}})}}else{let a=await this.performAggregation(o,t.aggregationType,s);n.push(...a)}}return n}groupMetrics(e,t){let r=new Map;for(let n of e){let i=this.createGroupKey(n,t);if(!r.has(i))r.set(i,[]);r.get(i).push(n)}return r}createGroupKey(e,t){let r={};for(let n of t)r[n]=this.getFieldValue(e,n);return JSON.stringify(r)}getFieldValue(e,t){if(t==="type")return e.type.toString();if(t==="timestamp")return e.timestamp.toISOString();return e.dimensions[t]||""}evaluateCondition(e,t,r){switch(t){case"equals":return e===r;case"not_equals":return e!==r;case"gt":return Number(e)>Number(r);case"lt":return Number(e)<Number(r);case"contains":return String(e).includes(String(r));default:return!1}}async performAggregation(e,t,r){if(e.length===0)return[];let n=e.map((o)=>o.value),i;switch(t){case"sum":i=n.reduce((o,s)=>o+s,0);break;case"avg":i=n.reduce((o,s)=>o+s,0)/n.length;break;case"min":i=Math.min(...n);break;case"max":i=Math.max(...n);break;case"count":i=n.length;break;case"rate":i=0;break;default:i=0}return[{type:e[0].type,interval:"minute",timestamp:new Date,dimensions:r,aggregations:{count:n.length,sum:t==="sum"?i:n.reduce((o,s)=>o+s,0),avg:t==="avg"?i:i,min:Math.min(...n),max:Math.max(...n)}}]}applyFilters(e,t){return e.filter((r)=>Object.entries(t).every(([n,i])=>{let o=this.getFieldValue(r,n);return Array.isArray(i)?i.includes(o):o===i}))}calculatePercentile(e,t){if(e.length===0)return 0;let r=t/100*(e.length-1),n=Math.floor(r),i=Math.ceil(r);if(n===i)return e[n];let o=r-n;return e[n]*(1-o)+e[i]*o}minMaxNormalize(e){let t=Math.min(...e),n=Math.max(...e)-t;return n===0?e.map(()=>0):e.map((i)=>(i-t)/n)}zScoreNormalize(e){let t=e.reduce((n,i)=>n+i,0)/e.length,r=Math.sqrt(e.reduce((n,i)=>n+(i-t)**2,0)/e.length);return r===0?e.map(()=>0):e.map((n)=>(n-t)/r)}robustNormalize(e){let t=[...e].sort((i,o)=>i-o),r=this.calculatePercentile(t,50),n=this.calculateMAD(t,r);return n===0?e.map(()=>0):e.map((i)=>(i-r)/n)}calculateMAD(e,t){let r=e.map((n)=>Math.abs(n-t));return this.calculatePercentile(r.sort((n,i)=>n-i),50)}startPeriodicFlush(){setInterval(()=>{this.flushAllBuffers().catch((e)=>{x.error("Periodic metric flush failed",{},e instanceof Error?e:Error(String(e)))})},this.config.flushInterval)}async flushAllBuffers(){for(let e of this.buffer.keys())await this.flushBuffer(e)}}class we{timezone;constructor(e="UTC"){this.timezone=e}async aggregate(e,t,r={fillGaps:!1,fillValue:0}){if(e.length===0)return[];let n=this.groupByType(e),i=[];for(let[o,s]of n.entries()){let a=this.groupByDimensions(s);for(let[c,u]of a.entries()){let l=await this.aggregateByInterval(u,o,t,JSON.parse(c),r);i.push(...l)}}return i.sort((o,s)=>o.timestamp.getTime()-s.timestamp.getTime())}async aggregateRolling(e,t,r=t){if(e.length===0)return[];let n=[...e].sort((p,m)=>p.timestamp.getTime()-m.timestamp.getTime()),i=n[0].timestamp,o=n[n.length-1].timestamp,s=[],a=t*60*1000,c=r*60*1000,u=i.getTime(),l=o.getTime();while(u<=l){let p=new Date(u),m=new Date(u+a),f=n.filter((g)=>g.timestamp>=p&&g.timestamp<m);if(f.length>0){let g=await this.aggregateWindow(f,p);s.push(...g)}u+=c}return s}async decomposeSeasonality(e,t=24){if(e.length<t*2)return{trend:[],seasonal:[],residual:[]};let r=[...e].sort((s,a)=>s.timestamp.getTime()-a.timestamp.getTime()),n=this.calculateMovingAverage(r,t),i=this.calculateSeasonalComponent(r,n,t),o=this.calculateResidual(r,n,i);return{trend:n,seasonal:i,residual:o}}async downsample(e,t){let r=this.groupByTimeInterval(e,t),n=[];for(let[i,o]of r.entries()){let s=new Date(i),a=new Map;for(let c of o){let u=c.type.toString(),l=JSON.stringify(c.dimensions);if(!a.has(u))a.set(u,new Map);if(!a.get(u).has(l))a.get(u).set(l,[]);a.get(u).get(l).push(c)}for(let[c,u]of a.entries())for(let[l,p]of u.entries()){let m=this.calculateAggregations(p.map((f)=>f.aggregations.sum));n.push({type:p[0].type,interval:t,timestamp:s,dimensions:JSON.parse(l),aggregations:m})}}return n.sort((i,o)=>i.timestamp.getTime()-o.timestamp.getTime())}groupByType(e){let t=new Map;for(let r of e){if(!t.has(r.type))t.set(r.type,[]);t.get(r.type).push(r)}return t}groupByDimensions(e){let t=new Map;for(let r of e){let n=JSON.stringify(r.dimensions);if(!t.has(n))t.set(n,[]);t.get(n).push(r)}return t}async aggregateByInterval(e,t,r,n,i){let o=this.groupByTimeInterval(e,r),s=[];if(i.fillGaps&&o.size>0){let a=Array.from(o.keys()).sort((u,l)=>new Date(u).getTime()-new Date(l).getTime()),c=this.fillTimeGaps(a,r,i.fillValue);for(let[u,l]of c.entries())if(!o.has(u))o.set(u,[{id:`filled_${Date.now()}`,type:t,timestamp:new Date(u),value:l,dimensions:n}])}for(let[a,c]of o.entries()){let u=new Date(a),l=c.map((m)=>m.value),p=this.calculateAggregations(l);s.push({type:t,interval:r,timestamp:u,dimensions:n,aggregations:p})}return s}groupByTimeInterval(e,t){let r=new Map;for(let n of e){let i=this.getTimeIntervalKey(n.timestamp,t);if(!r.has(i))r.set(i,[]);r.get(i).push(n)}return r}getTimeIntervalKey(e,t){let r=new Date(e);switch(t){case"minute":r.setSeconds(0,0);break;case"hour":r.setMinutes(0,0,0);break;case"day":r.setHours(0,0,0,0);break;case"week":{let n=r.getDay(),i=r.getDate()-n;r.setDate(i),r.setHours(0,0,0,0);break}case"month":r.setDate(1),r.setHours(0,0,0,0);break}return r.toISOString()}fillTimeGaps(e,t,r){let n=new Map;if(e.length<2)return n;let i=new Date(e[0]),o=new Date(e[e.length-1]),s=new Date(i);while(s<=o){let a=s.toISOString();switch(n.set(a,r),t){case"minute":s.setMinutes(s.getMinutes()+1);break;case"hour":s.setHours(s.getHours()+1);break;case"day":s.setDate(s.getDate()+1);break;case"week":s.setDate(s.getDate()+7);break;case"month":s.setMonth(s.getMonth()+1);break}}return n}calculateAggregations(e){if(e.length===0)return{count:0,sum:0,avg:0,min:0,max:0};let t=e.reduce((s,a)=>s+a,0),r=e.length,n=t/r,i=Math.min(...e),o=Math.max(...e);return{count:r,sum:t,avg:n,min:i,max:o}}async aggregateWindow(e,t){let r=this.groupByType(e),n=[];for(let[i,o]of r.entries()){let s=this.groupByDimensions(o);for(let[a,c]of s.entries()){let u=c.map((p)=>p.value),l=this.calculateAggregations(u);n.push({type:i,interval:"minute",timestamp:t,dimensions:JSON.parse(a),aggregations:l})}}return n}calculateMovingAverage(e,t){let r=[];for(let n=Math.floor(t/2);n<e.length-Math.floor(t/2);n++){let i=e.slice(n-Math.floor(t/2),n+Math.floor(t/2)+1),o=i.reduce((s,a)=>s+a.aggregations.avg,0)/i.length;r.push({...e[n],aggregations:{...e[n].aggregations,avg:o,sum:o*e[n].aggregations.count}})}return r}calculateSeasonalComponent(e,t,r){let n=[],i=Array(r).fill(0),o=Array(r).fill(0);for(let s=0;s<e.length;s++){let a=s%r,c=t.find((u)=>u.timestamp.getTime()===e[s].timestamp.getTime());if(c)i[a]+=e[s].aggregations.avg-c.aggregations.avg,o[a]++}for(let s=0;s<r;s++)if(o[s]>0)i[s]/=o[s];for(let s=0;s<e.length;s++){let a=s%r;n.push({...e[s],aggregations:{...e[s].aggregations,avg:i[a],sum:i[a]*e[s].aggregations.count}})}return n}calculateResidual(e,t,r){let n=[];for(let i=0;i<e.length;i++){let o=t.find((c)=>c.timestamp.getTime()===e[i].timestamp.getTime()),s=r[i],a=e[i].aggregations.avg;if(o)a-=o.aggregations.avg;if(s)a-=s.aggregations.avg;n.push({...e[i],aggregations:{...e[i].aggregations,avg:a,sum:a*e[i].aggregations.count}})}return n}}class ne{listenersMap=new Map;on(e,t){let r=this.listenersMap.get(e)??new Set;return r.add(t),this.listenersMap.set(e,r),this}addListener(e,t){return this.on(e,t)}off(e,t){let r=this.listenersMap.get(e);if(!r)return this;if(r.delete(t),r.size===0)this.listenersMap.delete(e);return this}removeListener(e,t){return this.off(e,t)}once(e,t){let r=(...n)=>{this.off(e,r),t(...n)};return this.on(e,r)}emit(e,...t){let r=this.listenersMap.get(e);if(!r||r.size===0)return!1;for(let n of[...r])n(...t);return!0}removeAllListeners(e){if(e)return this.listenersMap.delete(e),this;return this.listenersMap.clear(),this}}class be extends ne{config;buffer=[];processors=new Map;recentEvents=new Map;metrics=[];defaultConfig={bufferSize:1000,flushInterval:5000,enableDeduplication:!0,deduplicationWindow:60000,enableSampling:!1,samplingRate:1};constructor(e={}){super();this.config={...this.defaultConfig,...e},this.initializeDefaultProcessors(),this.startPeriodicFlush(),this.startCleanup()}async collectEvent(e){if(this.config.enableSampling&&Math.random()>this.config.samplingRate)return;if(this.config.enableDeduplication&&this.isDuplicate(e))return;if(this.validateEvent(e),this.buffer.push(e),this.isHighPriorityEvent(e))await this.processEvent(e);if(this.buffer.length>=this.config.bufferSize)await this.flush();this.emit("event:collected",e)}async collectEvents(e){for(let t of e)await this.collectEvent(t)}registerProcessor(e,t){this.processors.set(e,t),this.emit("processor:registered",{name:e,processor:t})}unregisterProcessor(e){let t=this.processors.delete(e);if(t)this.emit("processor:unregistered",{name:e});return t}getCollectedMetrics(e){if(!e)return[...this.metrics];return this.metrics.filter((t)=>t.timestamp>=e)}async*streamMetrics(){while(!0){if(await new Promise((t)=>setTimeout(t,this.config.flushInterval)),this.buffer.length>0)await this.flush();let e=this.getCollectedMetrics(new Date(Date.now()-this.config.flushInterval));if(e.length>0)yield e}}getEventStats(){let e={},t={};for(let r of this.buffer)e[r.type]=(e[r.type]||0)+1,t[r.source]=(t[r.source]||0)+1;return{totalEvents:this.buffer.length,eventsByType:e,eventsBySource:t,bufferSize:this.buffer.length,metricsGenerated:this.metrics.length}}async flush(){if(this.buffer.length===0)return;let e=[...this.buffer];this.buffer=[];try{let t=[];for(let r of e){let n=await this.processEvent(r);t.push(...n)}if(this.metrics.push(...t),this.metrics.length>1e5)this.metrics=this.metrics.slice(-50000);this.emit("events:flushed",{eventCount:e.length,metricCount:t.length})}catch(t){throw this.buffer.unshift(...e),this.emit("flush:error",t),t}}async processEvent(e){let t=[];for(let[r,n]of this.processors.entries())try{if(n.canProcess(e)){let i=await n.process(e);t.push(...i)}}catch(i){this.emit("processor:error",{processorName:r,event:e,error:i})}return t}validateEvent(e){if(!e.id)throw Error("Event ID is required");if(!e.type)throw Error("Event type is required");if(!e.timestamp||!(e.timestamp instanceof Date))throw Error("Valid event timestamp is required");if(!e.source)throw Error("Event source is required");if(!e.payload||typeof e.payload!=="object")throw Error("Event payload must be an object")}isDuplicate(e){let t=Date.now(),r=`${e.id}_${e.type}_${e.source}`,n=this.recentEvents.get(r);if(n&&t-n<this.config.deduplicationWindow)return!0;return this.recentEvents.set(r,t),!1}isHighPriorityEvent(e){return["message.failed","system.error","security.alert","performance.degradation"].includes(e.type)}initializeDefaultProcessors(){this.registerProcessor("message-sent",{canProcess:(e)=>e.type==="message.sent",process:async(e)=>[{id:`metric_${e.id}`,type:"message_sent",timestamp:e.timestamp,value:1,dimensions:{provider:e.payload.provider||"unknown",channel:e.payload.channel||"unknown",template:e.payload.templateId||"none"},metadata:{messageId:e.payload.messageId,recipientCount:e.payload.recipientCount||1}}]}),this.registerProcessor("message-delivered",{canProcess:(e)=>e.type==="message.delivered",process:async(e)=>[{id:`metric_${e.id}`,type:"message_delivered",timestamp:e.timestamp,value:1,dimensions:{provider:e.payload.provider||"unknown",channel:e.payload.channel||"unknown"},metadata:{messageId:e.payload.messageId,deliveryTime:e.payload.deliveryTime}}]}),this.registerProcessor("message-failed",{canProcess:(e)=>e.type==="message.failed",process:async(e)=>[{id:`metric_${e.id}`,type:"message_failed",timestamp:e.timestamp,value:1,dimensions:{provider:e.payload.provider||"unknown",channel:e.payload.channel||"unknown",errorCode:e.payload.errorCode||"unknown"},metadata:{messageId:e.payload.messageId,errorMessage:e.payload.errorMessage,errorType:e.payload.errorType}}]}),this.registerProcessor("message-clicked",{canProcess:(e)=>e.type==="message.clicked"||e.type==="link.clicked",process:async(e)=>[{id:`metric_${e.id}`,type:"message_clicked",timestamp:e.timestamp,value:1,dimensions:{provider:e.payload.provider||"unknown",channel:e.payload.channel||"unknown",linkType:e.payload.linkType||"unknown"},metadata:{messageId:e.payload.messageId,linkUrl:e.payload.linkUrl,userId:e.context?.userId}}]}),this.registerProcessor("template-used",{canProcess:(e)=>e.type==="template.used",process:async(e)=>[{id:`metric_${e.id}`,type:"template_usage",timestamp:e.timestamp,value:1,dimensions:{templateId:e.payload.templateId||"unknown",provider:e.payload.provider||"unknown",channel:e.payload.channel||"unknown"},metadata:{templateName:e.payload.templateName,version:e.payload.version}}]}),this.registerProcessor("channel-used",{canProcess:(e)=>["message.sent","message.delivered"].includes(e.type),process:async(e)=>[{id:`metric_channel_${e.id}`,type:"channel_usage",timestamp:e.timestamp,value:1,dimensions:{channel:e.payload.channel||"unknown",provider:e.payload.provider||"unknown"}}]})}startPeriodicFlush(){setInterval(()=>{this.flush().catch((e)=>{this.emit("flush:error",e)})},this.config.flushInterval)}startCleanup(){setInterval(()=>{let e=Date.now()-this.config.deduplicationWindow;for(let[t,r]of this.recentEvents.entries())if(r<e)this.recentEvents.delete(t)},600000),setInterval(()=>{if(this.metrics.length>1e5)this.metrics=this.metrics.slice(-50000),this.emit("metrics:cleaned",{remainingCount:this.metrics.length})},3600000)}}class _e extends ne{config;transformers=new Map;requestCounts=new Map;processedWebhooks=[];defaultConfig={enableSignatureValidation:!0,signatureHeader:"x-signature",allowedSources:[],maxPayloadSize:1048576,rateLimitPerMinute:1000};constructor(e={}){super();this.config={...this.defaultConfig,...e},this.initializeDefaultTransformers(),this.startCleanup()}async receiveWebhook(e){if(!this.checkRateLimit(e.source))throw Error(`Rate limit exceeded for source: ${e.source}`);await this.validateWebhook(e);let t=JSON.stringify(e.body).length;if(t>this.config.maxPayloadSize)throw Error(`Payload size ${t} exceeds maximum ${this.config.maxPayloadSize}`);let r=await this.transformWebhook(e);if(this.processedWebhooks.push(e),this.processedWebhooks.length>1000)this.processedWebhooks=this.processedWebhooks.slice(-500);return this.emit("webhook:received",{webhook:e,eventCount:r.length}),r}registerTransformer(e,t){this.transformers.set(e,t),this.emit("transformer:registered",{name:e})}unregisterTransformer(e){let t=this.transformers.delete(e);if(t)this.emit("transformer:unregistered",{name:e});return t}getProcessedWebhooks(e){if(!e)return[...this.processedWebhooks];return this.processedWebhooks.filter((t)=>t.timestamp>=e)}getWebhookStats(){let e={},t=new Date(Date.now()-3600000),r=0;for(let n of this.processedWebhooks)if(e[n.source]=(e[n.source]||0)+1,n.timestamp>=t)r++;return{totalProcessed:this.processedWebhooks.length,bySource:e,recentCount:r,transformerCount:this.transformers.size}}async validateWebhook(e){if(this.config.allowedSources.length>0&&!this.config.allowedSources.includes(e.source))throw Error(`Source ${e.source} is not allowed`);if(this.config.enableSignatureValidation&&this.config.secretKey)await this.validateSignature(e);if(!e.id)throw Error("Webhook ID is required");if(!e.source)throw Error("Webhook source is required");if(!e.timestamp||!(e.timestamp instanceof Date))throw Error("Valid webhook timestamp is required")}async validateSignature(e){let t=e.headers[this.config.signatureHeader]||e.signature;if(!t)throw Error(`Missing signature in header: ${this.config.signatureHeader}`);let r=this.config.secretKey;if(!r)throw Error("secretKey is required for signature validation");let n=await this.generateSignature(e.body,r);if(t!==n)throw Error("Invalid webhook signature")}async generateSignature(e,t){return`sha256=${JSON.stringify(e).length}_${t.length}`}checkRateLimit(e){let t=Date.now(),r=Math.floor(t/60000),n=`${e}_${r}`,i=this.requestCounts.get(n)||{count:0,resetTime:t+60000};if(i.count>=this.config.rateLimitPerMinute)return!1;return i.count++,this.requestCounts.set(n,i),!0}async transformWebhook(e){let t=[];for(let[r,n]of this.transformers.entries())try{if(n.canTransform(e)){let i=await n.transform(e);t.push(...i)}}catch(i){this.emit("transformer:error",{transformerName:r,webhook:e,error:i})}if(t.length===0)t.push(await this.defaultTransform(e));return t}async defaultTransform(e){return{id:`webhook_${e.id}`,type:`webhook.${e.source}`,timestamp:e.timestamp,source:e.source,payload:e.body,context:{requestId:e.id,userAgent:e.headers["user-agent"],ipAddress:e.headers["x-forwarded-for"]||e.headers["x-real-ip"]}}}initializeDefaultTransformers(){this.registerTransformer("sms-provider",{canTransform:(e)=>e.source.includes("sms")||e.source.includes("alimtalk"),transform:async(e)=>{let t=[],r=e.body;if(r.status==="sent"||r.status==="delivered")t.push({id:`sms_delivered_${e.id}`,type:"message.delivered",timestamp:e.timestamp,source:e.source,payload:{messageId:r.messageId||r.id,provider:e.source,channel:r.channel||"sms",recipientNumber:r.to||r.recipient,deliveryTime:r.deliveredAt?new Date(r.deliveredAt):e.timestamp}});if(r.status==="failed"||r.status==="error")t.push({id:`sms_failed_${e.id}`,type:"message.failed",timestamp:e.timestamp,source:e.source,payload:{messageId:r.messageId||r.id,provider:e.source,channel:r.channel||"sms",errorCode:r.errorCode||"unknown",errorMessage:r.errorMessage||r.error,errorType:r.errorType||"delivery"}});return t}}),this.registerTransformer("alimtalk-provider",{canTransform:(e)=>e.source.includes("alimtalk")||e.source.includes("kakao"),transform:async(e)=>{let t=[],r=e.body;if(r.eventType==="click"||r.type==="button_click")t.push({id:`alimtalk_click_${e.id}`,type:"message.clicked",timestamp:e.timestamp,source:e.source,payload:{messageId:r.messageId,provider:e.source,channel:"alimtalk",linkType:r.buttonType||"button",linkUrl:r.buttonUrl||r.url,buttonText:r.buttonText}});if(r.messageStatus||r.status){let n=r.messageStatus||r.status;if(["DELIVERED","READ"].includes(n))t.push({id:`alimtalk_delivered_${e.id}`,type:"message.delivered",timestamp:e.timestamp,source:e.source,payload:{messageId:r.messageId,provider:e.source,channel:"alimtalk",deliveryTime:r.deliveredAt?new Date(r.deliveredAt):e.timestamp}});else if(["FAILED","REJECTED"].includes(n))t.push({id:`alimtalk_failed_${e.id}`,type:"message.failed",timestamp:e.timestamp,source:e.source,payload:{messageId:r.messageId,provider:e.source,channel:"alimtalk",errorCode:r.failureCode||"unknown",errorMessage:r.failureReason||"Unknown error"}})}return t}}),this.registerTransformer("generic-messaging",{canTransform:(e)=>{let t=e.body;return t&&(t.messageId||t.id)&&t.status},transform:async(e)=>{let t=[],r=e.body,n={messageId:r.messageId||r.id,provider:e.source,channel:r.channel||"unknown"};switch(r.status){case"delivered":case"read":t.push({id:`generic_delivered_${e.id}`,type:"message.delivered",timestamp:e.timestamp,source:e.source,payload:{...n,deliveryTime:r.deliveredAt?new Date(r.deliveredAt):e.timestamp}});break;case"failed":case"rejected":case"undelivered":t.push({id:`generic_failed_${e.id}`,type:"message.failed",timestamp:e.timestamp,source:e.source,payload:{...n,errorCode:r.errorCode||r.error_code||"unknown",errorMessage:r.errorMessage||r.error_message||"Unknown error",errorType:r.errorType||"delivery"}});break;case"clicked":t.push({id:`generic_clicked_${e.id}`,type:"message.clicked",timestamp:e.timestamp,source:e.source,payload:{...n,linkUrl:r.clickedUrl||r.url,linkType:r.linkType||"link"}});break}return t}})}startCleanup(){setInterval(()=>{let e=Date.now();for(let[t,r]of this.requestCounts.entries())if(e>r.resetTime)this.requestCounts.delete(t)},300000)}}class Ae{config;historicalData=new Map;seasonalPatterns=new Map;baselines=new Map;defaultConfig={algorithms:[{name:"zscore",type:"statistical",enabled:!0,config:{threshold:3}},{name:"iqr",type:"statistical",enabled:!0,config:{multiplier:1.5}},{name:"isolation",type:"ml",enabled:!1,config:{contamination:0.1}}],sensitivity:"medium",minDataPoints:10,confidenceThreshold:0.7,enableSeasonalAdjustment:!0};constructor(e={}){this.config={...this.defaultConfig,...e}}async detectRealTimeAnomalies(e){let t=this.getMetricKey(e.type,e.dimensions),r=[];this.updateHistoricalData(t,e.value);for(let n of this.config.algorithms){if(!n.enabled)continue;try{let i=await this.runAlgorithm(e,n,t);if(i&&i.confidence>=this.config.confidenceThreshold)r.push(i)}catch(i){x.error(`Anomaly detection failed for algorithm ${n.name}`,{},i instanceof Error?i:Error(String(i)))}}return this.deduplicateAndRankAnomalies(r)}async detectBatchAnomalies(e,t){let r=[],n=this.groupMetricsByTypeAndDimensions(e);for(let[i,o]of n.entries()){let[s,a]=i.split("|"),c=JSON.parse(a),u=o.sort((p,m)=>p.timestamp.getTime()-m.timestamp.getTime()).map((p)=>({timestamp:p.timestamp,value:p.aggregations.avg}));if(u.length<this.config.minDataPoints)continue;let l=u;if(this.config.enableSeasonalAdjustment)l=await this.adjustForSeasonality(u,i);for(let p=Math.floor(l.length*0.3);p<l.length;p++){let m=l[p];if(l.slice(Math.max(0,p-20),p).length<this.config.minDataPoints)continue;let g={id:`batch_${p}`,type:s,timestamp:m.timestamp,value:m.value,dimensions:c},h=await this.detectRealTimeAnomalies(g);r.push(...h)}}return this.deduplicateAndRankAnomalies(r)}async detectTrendChanges(e,t=10){let r=[],n=this.groupMetricsByTypeAndDimensions(e);for(let[i,o]of n.entries()){let[s,a]=i.split("|"),c=JSON.parse(a),u=o.sort((l,p)=>l.timestamp.getTime()-p.timestamp.getTime());if(u.length<t*2)continue;for(let l=t;l<u.length-t;l++){let p=u.slice(l-t,l),m=u.slice(l,l+t),f=this.calculateTrend(p.map((b)=>b.aggregations.avg)),g=this.calculateTrend(m.map((b)=>b.aggregations.avg)),h=Math.abs(g-f),v=this.getSensitivityThreshold("trend");if(h>v)r.push({id:`trend_change_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,type:"trend",title:`Trend Change Detected in ${s}`,description:`Significant trend change from ${f.toFixed(2)} to ${g.toFixed(2)}`,severity:this.calculateTrendSeverity(h,v),metric:s,dimensions:c,value:g,expectedValue:f,confidence:Math.min(0.95,0.5+h/v*0.3),actionable:h>v*2,recommendations:this.generateTrendRecommendations(f,g,s),detectedAt:u[l].timestamp})}}return r}async updateBaselines(e){let t=this.groupMetricsByTypeAndDimensions(e);for(let[r,n]of t.entries()){let i=n.map((l)=>l.aggregations.avg);if(i.length<this.config.minDataPoints)continue;let o=i.reduce((l,p)=>l+p,0)/i.length,s=i.reduce((l,p)=>l+(p-o)**2,0)/i.length,a=Math.sqrt(s),c=Math.min(...i),u=Math.max(...i);this.baselines.set(r,{mean:o,stdDev:a,min:c,max:u})}}async runAlgorithm(e,t,r){let n=this.historicalData.get(r)||[];if(n.length<this.config.minDataPoints)return null;switch(t.name){case"zscore":return this.zScoreDetection(e,n,t.config,r);case"iqr":return this.iqrDetection(e,n,t.config,r);case"isolation":return this.isolationForestDetection(e,n,t.config,r);case"threshold":return this.thresholdDetection(e,t.config,r);default:return null}}zScoreDetection(e,t,r,n){let i=t.reduce((u,l)=>u+l,0)/t.length,o=t.reduce((u,l)=>u+(l-i)**2,0)/t.length,s=Math.sqrt(o);if(s===0)return null;let a=Math.abs((e.value-i)/s),c=r.threshold||3;if(a>c){let u=this.calculateSeverity(a,c),l=Math.min(0.99,a/c*0.8);return{id:`zscore_${e.id}`,metricType:e.type,timestamp:e.timestamp,value:e.value,expectedValue:i,deviation:a,severity:u,confidence:l,algorithm:"zscore",dimensions:e.dimensions,context:{trend:this.detectTrend(t),seasonality:!1,historicalComparison:(e.value-i)/i*100}}}return null}iqrDetection(e,t,r,n){let i=[...t].sort((f,g)=>f-g),o=Math.floor(i.length*0.25),s=Math.floor(i.length*0.75),a=i[o],c=i[s],u=c-a,l=r.multiplier||1.5,p=a-l*u,m=c+l*u;if(e.value<p||e.value>m){let f=(a+c)/2,g=Math.abs(e.value-f)/u,h=this.calculateSeverity(g,l),v=Math.min(0.99,g/l*0.7);return{id:`iqr_${e.id}`,metricType:e.type,timestamp:e.timestamp,value:e.value,expectedValue:f,deviation:g,severity:h,confidence:v,algorithm:"iqr",dimensions:e.dimensions,context:{trend:this.detectTrend(t),seasonality:!1,historicalComparison:(e.value-f)/f*100}}}return null}isolationForestDetection(e,t,r,n){let i=r.contamination||0.1,o=this.calculateIsolationThreshold(t,i),s=this.calculateIsolationScore(e.value,t);if(s>o){let a=t.reduce((l,p)=>l+p,0)/t.length,c=this.calculateSeverity(s,o),u=Math.min(0.99,s/o*0.9);return{id:`isolation_${e.id}`,metricType:e.type,timestamp:e.timestamp,value:e.value,expectedValue:a,deviation:s,severity:c,confidence:u,algorithm:"isolation",dimensions:e.dimensions}}return null}thresholdDetection(e,t,r){let{upperThreshold:n,lowerThreshold:i}=t;if(n!==void 0&&e.value>n)return{id:`threshold_upper_${e.id}`,metricType:e.type,timestamp:e.timestamp,value:e.value,expectedValue:n,deviation:(e.value-n)/n,severity:"high",confidence:1,algorithm:"threshold",dimensions:e.dimensions};if(i!==void 0&&e.value<i)return{id:`threshold_lower_${e.id}`,metricType:e.type,timestamp:e.timestamp,value:e.value,expectedValue:i,deviation:(i-e.value)/i,severity:"high",confidence:1,algorithm:"threshold",dimensions:e.dimensions};return null}calculateSeverity(e,t){let r=e/t;if(r>3)return"critical";if(r>2)return"high";if(r>1.5)return"medium";return"low"}calculateTrendSeverity(e,t){let r=e/t;if(r>4)return"critical";if(r>3)return"high";if(r>2)return"medium";return"low"}getMetricKey(e,t){return`${e}|${JSON.stringify(t)}`}updateHistoricalData(e,t){let r=this.historicalData.get(e)||[];if(r.push(t),r.length>100)r.splice(0,r.length-100);this.historicalData.set(e,r)}groupMetricsByTypeAndDimensions(e){let t=new Map;for(let r of e){let n=`${r.type}|${JSON.stringify(r.dimensions)}`;if(!t.has(n))t.set(n,[]);t.get(n).push(r)}return t}async adjustForSeasonality(e,t){let r=Math.min(24,Math.floor(e.length/4));if(r<3)return e;return e.map((n,i)=>{let o=Math.max(0,i-Math.floor(r/2)),s=Math.min(e.length,o+r),a=e.slice(o,s),c=a.reduce((l,p)=>l+p.value,0)/a.length,u=n.value-c+e.reduce((l,p)=>l+p.value,0)/e.length;return{timestamp:n.timestamp,value:u}})}calculateTrend(e){if(e.length<2)return 0;let t=e.length,r=Array.from({length:t},(a,c)=>c),n=r.reduce((a,c)=>a+c,0),i=e.reduce((a,c)=>a+c,0),o=r.reduce((a,c,u)=>a+c*e[u],0),s=r.reduce((a,c)=>a+c*c,0);return(t*o-n*i)/(t*s-n*n)}detectTrend(e){let t=this.calculateTrend(e),r=0.1;if(Math.abs(t)<0.1)return"stable";return t>0?"increasing":"decreasing"}getSensitivityThreshold(e){return{anomaly:{low:0.5,medium:0.3,high:0.1},trend:{low:2,medium:1,high:0.5}}[e][this.config.sensitivity]}calculateIsolationThreshold(e,t){let r=[...e].sort((i,o)=>i-o),n=Math.floor((1-t)*r.length);return 0.6}calculateIsolationScore(e,t){let r=t.reduce((o,s)=>o+s,0)/t.length,n=t.map((o)=>Math.abs(o-e));return n.reduce((o,s)=>o+s,0)/n.length/(Math.abs(e-r)+1)}deduplicateAndRankAnomalies(e){let t=new Map;for(let r of e){let n=`${r.metricType}_${JSON.stringify(r.dimensions)}_${r.timestamp.toISOString()}`;if(!t.has(n)||t.get(n).confidence<r.confidence)t.set(n,r)}return Array.from(t.values()).sort((r,n)=>n.confidence-r.confidence)}generateTrendRecommendations(e,t,r){let n=[],i=t>e,o=Math.abs(t-e);switch(r){case"message_failed":if(i)n.push("Investigate provider API issues","Review recent template changes","Check recipient data quality");break;case"delivery_rate":if(!i)n.push("Monitor provider performance","Verify network connectivity","Check for carrier-specific issues");break;case"message_sent":if(i)n.push("Monitor system capacity","Prepare for increased load","Check rate limiting settings");else n.push("Investigate traffic decrease","Check for system issues","Review campaign status");break;case"channel_usage":case"click_rate":case"error_rate":case"message_clicked":case"message_delivered":case"provider_performance":case"template_usage":break}if(o>2)n.push("Consider immediate investigation due to significant change");return n}}class Ee{config;recommendations=new Map;ruleExecutionHistory=new Map;defaultConfig={rules:[],enableMachineLearning:!1,confidenceThreshold:0.7,maxRecommendations:10,categories:[{id:"cost",name:"Cost Optimization",description:"Reduce operational costs",weight:0.8},{id:"performance",name:"Performance",description:"Improve system performance",weight:0.9},{id:"reliability",name:"Reliability",description:"Enhance system reliability",weight:1},{id:"security",name:"Security",description:"Strengthen security posture",weight:0.95}]};constructor(e={}){this.config={...this.defaultConfig,...e},this.initializeDefaultRules()}async generateRecommendations(e){let t=[],r=await this.generateRuleBasedRecommendations(e);t.push(...r);let n=await this.generatePatternBasedRecommendations(e);t.push(...n);let i=await this.generateComparisonBasedRecommendations(e);if(t.push(...i),this.config.enableMachineLearning){let s=await this.generateMLBasedRecommendations(e);t.push(...s)}let o=this.deduplicateAndPrioritize(t);for(let s of o)this.recommendations.set(s.id,s);return o.slice(0,this.config.maxRecommendations)}getRecommendationsByCategory(e){return Array.from(this.recommendations.values()).filter((t)=>t.category===e).sort((t,r)=>r.priority-t.priority)}markRecommendationAsImplemented(e){if(!this.recommendations.get(e))return!1;return this.recommendations.delete(e),!0}dismissRecommendation(e,t){if(!this.recommendations.get(e))return!1;return this.recommendations.delete(e),!0}getRecommendationStats(){let e=Array.from(this.recommendations.values()),t={},r={},n={};for(let i of e){t[i.category]=(t[i.category]||0)+1,r[i.impact]=(r[i.impact]||0)+1;let o=i.priority>=8?"high":i.priority>=5?"medium":"low";n[o]=(n[o]||0)+1}return{total:e.length,byCategory:t,byImpact:r,byPriority:n}}async generateRuleBasedRecommendations(e){let t=[];for(let r of this.config.rules){if(!r.enabled)continue;try{let n=this.evaluateRuleConditions(r,e);if(n.length>0){let i=await this.createRecommendationFromRule(r,n);if(i&&i.confidence>=this.config.confidenceThreshold)t.push(i),this.recordRuleExecution(r.id)}}catch(n){x.error(`Rule execution failed for rule ${r.id}`,{},n instanceof Error?n:Error(String(n)))}}return t}async generatePatternBasedRecommendations(e){let t=[],r=this.analyzeTimePatterns(e);t.push(...this.generateTimeBasedRecommendations(r));let n=this.analyzeChannelPatterns(e);t.push(...this.generateChannelBasedRecommendations(n));let i=this.analyzeErrorPatterns(e);return t.push(...this.generateErrorBasedRecommendations(i)),t}async generateComparisonBasedRecommendations(e){let t=[],r=this.compareProviderPerformance(e);t.push(...this.generateProviderRecommendations(r));let n=this.compareChannelEfficiency(e);return t.push(...this.generateChannelEfficiencyRecommendations(n)),t}async generateMLBasedRecommendations(e){let t=[],r=await this.generateCapacityRecommendations(e);return t.push(...r),t}evaluateRuleConditions(e,t){let r=[];for(let n of e.conditions){let i=t.filter((o)=>{if(o.type!==n.metric)return!1;if(n.dimensions){for(let[s,a]of Object.entries(n.dimensions))if(o.dimensions[s]!==a)return!1}return!0});for(let o of i)if(this.evaluateCondition(o,n))r.push(o)}return r}evaluateCondition(e,t){let r=e.aggregations.avg;switch(t.operator){case"gt":return r>t.value;case"lt":return r<t.value;case"gte":return r>=t.value;case"lte":return r<=t.value;case"eq":return r===t.value;case"between":{let[n,i]=t.value;return r>=n&&r<=i}case"trend":return!1;default:return!1}}async createRecommendationFromRule(e,t){if(e.actions.length===0)return null;let r=this.calculateRuleConfidence(e,t),n=this.calculateAggregateImpact(e.actions),i=this.calculateAggregateEffort(e.actions);return{id:`rule_${e.id}_${Date.now()}`,category:e.category,priority:e.priority,title:e.name,description:`Based on analysis of ${t.length} metrics`,rationale:this.generateRationale(e,t),actions:e.actions,confidence:r,impact:n,effort:i,createdAt:new Date,validUntil:new Date(Date.now()+604800000),metadata:{ruleIds:[e.id],triggeredBy:{metrics:t.map((o)=>({type:o.type,value:o.aggregations.avg,timestamp:o.timestamp})),conditions:e.conditions.map((o)=>`${o.metric} ${o.operator} ${o.value}`)}}}}analyzeTimePatterns(e){let t=new Map,r=new Map;for(let n of e){let i=n.timestamp.getHours(),o=n.timestamp.getDay();t.set(i,(t.get(i)||0)+n.aggregations.sum),r.set(o,(r.get(o)||0)+n.aggregations.sum)}return{hourlyUsage:t,dailyUsage:r}}generateTimeBasedRecommendations(e){let t=[],{hourlyUsage:r,dailyUsage:n}=e,i=Array.from(r.entries()).reduce((o,s)=>s[1]>o[1]?s:o,[0,0]);if(i[1]>0)t.push({id:`time_peak_${Date.now()}`,category:"performance",priority:7,title:"Optimize for Peak Hours",description:`Peak usage occurs at ${i[0]}:00. Consider load balancing optimizations.`,rationale:"High traffic concentration during peak hours may impact performance",actions:[{type:"performance",title:"Implement Load Balancing",description:"Configure load balancing to distribute traffic during peak hours",impact:"medium",effort:"medium",steps:["Set up multiple provider connections","Implement round-robin distribution","Monitor performance during peak hours"]}],confidence:0.8,impact:"medium",effort:"medium",createdAt:new Date,metadata:{ruleIds:[],triggeredBy:{metrics:[],conditions:[`Peak hour usage: ${i[1]} at ${i[0]}:00`]}}});return t}analyzeChannelPatterns(e){let t=new Map;for(let r of e){let n=r.dimensions.channel||"unknown",i=t.get(n)||{sent:0,delivered:0,failed:0};if(r.type==="message_sent")i.sent+=r.aggregations.sum;else if(r.type==="message_delivered")i.delivered+=r.aggregations.sum;else if(r.type==="message_failed")i.failed+=r.aggregations.sum;t.set(n,i)}return{channelUsage:t}}generateChannelBasedRecommendations(e){let t=[],{channelUsage:r}=e;for(let[n,i]of r.entries()){let o=i.sent>0?i.delivered/i.sent*100:0,s=i.sent>0?i.failed/i.sent*100:0;if(o<90&&i.sent>100)t.push({id:`channel_delivery_${n}_${Date.now()}`,category:"reliability",priority:8,title:`Improve ${n} Channel Reliability`,description:`${n} channel has ${o.toFixed(1)}% delivery rate`,rationale:"Low delivery rate impacts customer experience and wastes resources",actions:[{type:"reliability",title:"Investigate Channel Issues",description:`Analyze and fix delivery issues for ${n} channel`,impact:"high",effort:"medium",steps:[`Review ${n} provider configuration`,"Check template approval status","Analyze failure patterns","Implement fallback mechanisms"]}],confidence:0.9,impact:"high",effort:"medium",createdAt:new Date,metadata:{ruleIds:[],triggeredBy:{metrics:[],conditions:[`${n} delivery rate: ${o.toFixed(1)}%`]}}})}return t}analyzeErrorPatterns(e){let t=new Map,r=new Map;for(let n of e)if(n.type==="message_failed"){let i=n.dimensions.errorCode||"unknown",o=n.dimensions.provider||"unknown";t.set(i,(t.get(i)||0)+n.aggregations.sum),r.set(o,(r.get(o)||0)+n.aggregations.sum)}return{errorsByCode:t,errorsByProvider:r}}generateErrorBasedRecommendations(e){let t=[],{errorsByCode:r,errorsByProvider:n}=e;if(r.size>0){let i=Array.from(r.entries()).reduce((o,s)=>s[1]>o[1]?s:o);if(i[1]>10)t.push({id:`error_${i[0]}_${Date.now()}`,category:"reliability",priority:9,title:`Address Frequent Error: ${i[0]}`,description:`Error code ${i[0]} occurred ${i[1]} times`,rationale:"Frequent errors indicate systematic issues that need attention",actions:[{type:"reliability",title:"Fix Recurring Error",description:`Investigate and resolve error code ${i[0]}`,impact:"high",effort:"high",steps:["Analyze error logs and patterns","Identify root cause","Implement fix or workaround","Add monitoring for this error type"]}],confidence:0.95,impact:"high",effort:"high",createdAt:new Date,metadata:{ruleIds:[],triggeredBy:{metrics:[],conditions:[`Error ${i[0]}: ${i[1]} occurrences`]}}})}return t}compareProviderPerformance(e){let t=new Map;for(let r of e){let n=r.dimensions.provider;if(!n)continue;let i=t.get(n)||{sent:0,delivered:0,avgResponseTime:0};if(r.type==="message_sent")i.sent+=r.aggregations.sum;else if(r.type==="message_delivered")i.delivered+=r.aggregations.sum;t.set(n,i)}return{providerStats:t}}generateProviderRecommendations(e){let t=[],{providerStats:r}=e,n=Array.from(r.entries()).map(([i,o])=>({provider:i,deliveryRate:o.sent>0?o.delivered/o.sent*100:0,volume:o.sent}));if(n.length>1){let i=n.reduce((s,a)=>a.deliveryRate>s.deliveryRate?a:s),o=n.reduce((s,a)=>a.deliveryRate<s.deliveryRate?a:s);if(i.deliveryRate-o.deliveryRate>10)t.push({id:`provider_optimization_${Date.now()}`,category:"cost",priority:6,title:"Optimize Provider Usage",description:`${i.provider} has ${i.deliveryRate.toFixed(1)}% delivery rate vs ${o.provider} at ${o.deliveryRate.toFixed(1)}%`,rationale:"Shifting traffic to better-performing providers can improve delivery rates and reduce costs",actions:[{type:"optimization",title:"Rebalance Provider Traffic",description:"Increase traffic to high-performing providers",impact:"medium",effort:"low",steps:[`Reduce traffic allocation to ${o.provider}`,`Increase traffic allocation to ${i.provider}`,"Monitor performance changes","Adjust allocation based on results"]}],confidence:0.85,impact:"medium",effort:"low",createdAt:new Date,metadata:{ruleIds:[],triggeredBy:{metrics:[],conditions:[`${i.provider}: ${i.deliveryRate.toFixed(1)}%`,`${o.provider}: ${o.deliveryRate.toFixed(1)}%`]}}})}return t}compareChannelEfficiency(e){return{}}generateChannelEfficiencyRecommendations(e){return[]}async generateCapacityRecommendations(e){let t=[],r=e.filter((n)=>n.type==="message_sent");if(r.length>0){let n=r.filter((o)=>o.timestamp>new Date(Date.now()-86400000)).reduce((o,s)=>o+s.aggregations.sum,0),i=r.reduce((o,s)=>o+s.aggregations.sum,0)/r.length;if(n>i*1.5)t.push({id:`capacity_scale_${Date.now()}`,category:"performance",priority:7,title:"Consider Capacity Scaling",description:`Recent volume (${n}) is 50% above historical average (${i.toFixed(0)})`,rationale:"Sustained high volume may require additional capacity",actions:[{type:"performance",title:"Scale Infrastructure",description:"Prepare for increased load by scaling infrastructure",impact:"high",effort:"high",steps:["Monitor system resource utilization","Prepare additional provider connections","Review rate limiting configurations","Plan for peak capacity scenarios"]}],confidence:0.75,impact:"high",effort:"high",createdAt:new Date,metadata:{ruleIds:[],triggeredBy:{metrics:[],conditions:[`Recent volume: ${n}, Historical average: ${i.toFixed(0)}`]}}})}return t}calculateRuleConfidence(e,t){let n=Math.min(0.3,t.length/10),i=e.priority/10*0.2;return Math.min(0.99,0.5+n+i)}calculateAggregateImpact(e){let t={low:1,medium:2,high:3},r=e.reduce((n,i)=>n+t[i.impact],0)/e.length;if(r>=2.5)return"high";if(r>=1.5)return"medium";return"low"}calculateAggregateEffort(e){let t={low:1,medium:2,high:3},r=e.reduce((n,i)=>n+t[i.effort],0)/e.length;if(r>=2.5)return"high";if(r>=1.5)return"medium";return"low"}generateRationale(e,t){return`${t.length>0?`Based on ${t.length} metrics showing concerning patterns`:"Based on rule evaluation"}. ${e.name} conditions have been met, indicating potential optimization opportunities.`}recordRuleExecution(e){let t=this.ruleExecutionHistory.get(e)||[];if(t.push(new Date),t.length>100)t.splice(0,t.length-100);this.ruleExecutionHistory.set(e,t)}deduplicateAndPrioritize(e){let t=new Map;for(let r of e){let n=`${r.category}_${r.title}`;if(!t.has(n)||t.get(n).confidence<r.confidence)t.set(n,r)}return Array.from(t.values()).sort((r,n)=>{if(r.priority!==n.priority)return n.priority-r.priority;return n.confidence-r.confidence})}initializeDefaultRules(){this.config.rules.push({id:"low-delivery-rate",name:"Low Delivery Rate Alert",category:"reliability",priority:9,conditions:[{metric:"delivery_rate",operator:"lt",value:90}],actions:[{type:"reliability",title:"Improve Delivery Rate",description:"Investigate and fix delivery rate issues",impact:"high",effort:"medium",steps:["Check provider API status","Review template approval status","Validate recipient phone numbers","Consider switching providers"]}],enabled:!0},{id:"high-error-rate",name:"High Error Rate Warning",category:"reliability",priority:8,conditions:[{metric:"error_rate",operator:"gt",value:10}],actions:[{type:"reliability",title:"Reduce Error Rate",description:"Address high error rates",impact:"high",effort:"high",steps:["Analyze error patterns","Fix common error causes","Implement better error handling","Add monitoring and alerts"]}],enabled:!0},{id:"cost-optimization-sms",name:"SMS to AlimTalk Migration",category:"cost",priority:6,conditions:[{metric:"channel_usage",operator:"gt",value:1000,dimensions:{channel:"sms"}}],actions:[{type:"cost-saving",title:"Migrate to AlimTalk",description:"Switch eligible SMS messages to AlimTalk for cost savings",impact:"medium",effort:"medium",steps:["Identify AlimTalk-eligible messages","Create AlimTalk templates","Implement fallback logic","Monitor cost savings"],estimatedBenefit:{metric:"message_sent",improvement:30,unit:"percent cost reduction"}}],enabled:!0})}}class Me{config;dataCache=new Map;defaultConfig={refreshInterval:30000,timeRange:{default:"1h",options:["15m","1h","4h","1d","1w","1m"]},widgets:[],filters:[{id:"provider",name:"Provider",type:"multi-select",field:"provider",options:[]},{id:"channel",name:"Channel",type:"multi-select",field:"channel",options:[]}]};constructor(e={}){this.config={...this.defaultConfig,...e},this.initializeDefaultWidgets()}async generateDashboard(e,t={},r=[]){let n={timestamp:new Date,timeRange:e,kpis:[],widgets:[],insights:[],filters:t};try{n.kpis=await this.calculateKPIs(r,e,t),n.widgets=await this.generateWidgetData(r,e,t),n.insights=[]}catch(i){x.error("Dashboard generation failed",{},i instanceof Error?i:Error(String(i)))}return n}async*streamDashboard(e,t={}){while(!0)yield await this.generateDashboard(e,t),await new Promise((n)=>setTimeout(n,this.config.refreshInterval))}async updateWidget(e,t,r,n={}){let i=this.config.widgets.find((o)=>o.id===e);if(!i)return null;try{return(await this.generateWidgetData([i],t,r,n))[0]||null}catch(o){return{id:e,title:i.title,type:i.type,data:null,lastUpdated:new Date,error:o instanceof Error?o.message:"Unknown error"}}}updateConfig(e){this.config={...this.config,...e}}addWidget(e){this.config.widgets.push(e)}removeWidget(e){let t=this.config.widgets.findIndex((r)=>r.id===e);if(t>=0)return this.config.widgets.splice(t,1),!0;return!1}async calculateKPIs(e,t,r){let n=[],i=t.end.getTime()-t.start.getTime(),o={start:new Date(t.start.getTime()-i),end:t.start},s=this.filterMetrics(e,"message_sent",r),a=s.reduce((_,T)=>_+T.aggregations.sum,0),c=this.calculatePreviousPeriodValue(s,o);n.push({id:"total_sent",name:"Total Messages Sent",value:a,previousValue:c,change:a-c,changePercent:c>0?(a-c)/c*100:0,trend:a>c?"up":a<c?"down":"stable",unit:"messages",status:"good"});let l=this.filterMetrics(e,"message_delivered",r).reduce((_,T)=>_+T.aggregations.sum,0),p=a>0?l/a*100:0;n.push({id:"delivery_rate",name:"Delivery Rate",value:p,trend:p>=95?"up":p>=90?"stable":"down",unit:"%",target:95,status:p>=95?"good":p>=85?"warning":"critical"});let f=this.filterMetrics(e,"message_failed",r).reduce((_,T)=>_+T.aggregations.sum,0),g=a>0?f/a*100:0;n.push({id:"error_rate",name:"Error Rate",value:g,trend:g<=5?"down":g<=10?"stable":"up",unit:"%",target:5,status:g<=5?"good":g<=15?"warning":"critical"});let v=this.filterMetrics(e,"message_clicked",r).reduce((_,T)=>_+T.aggregations.sum,0),b=l>0?v/l*100:0;return n.push({id:"click_rate",name:"Click Rate",value:b,trend:"stable",unit:"%",status:"good"}),n}async generateWidgetData(...e){let t,r,n,i;if(e.length===3)[r,n,i]=e,t=this.config.widgets;else[t,r,n,i]=e;let o=[];for(let s of t)try{let a=await this.generateSingleWidgetData(s,r,n,i);o.push({id:s.id,title:s.title,type:s.type,data:a,lastUpdated:new Date})}catch(a){o.push({id:s.id,title:s.title,type:s.type,data:null,lastUpdated:new Date,error:a instanceof Error?a.message:"Unknown error"})}return o}async generateSingleWidgetData(e,t,r,n){let i=`${e.id}_${JSON.stringify(n)}_${r.start.getTime()}_${r.end.getTime()}`,o=this.dataCache.get(i),s=e.refreshInterval||this.config.refreshInterval;if(o&&Date.now()-o.timestamp.getTime()<s)return o.data;let a=this.applyQueryFilters(t,e.query,n),c;switch(e.type){case"metric":c=this.generateMetricWidgetData(a,e.visualization);break;case"chart":c=this.generateChartWidgetData(a,e.visualization);break;case"table":c=this.generateTableWidgetData(a,e.visualization);break;case"gauge":c=this.generateGaugeWidgetData(a,e.visualization);break;case"heatmap":c=this.generateHeatmapWidgetData(a,e.visualization);break;case"trend":c=this.generateTrendWidgetData(a,e.visualization);break;default:c=null}return this.dataCache.set(i,{data:c,timestamp:new Date}),c}generateMetricWidgetData(e,t){let r=t.aggregation||"sum",n=0;switch(r){case"sum":n=e.reduce((i,o)=>i+o.aggregations.sum,0);break;case"avg":n=e.reduce((i,o)=>i+o.aggregations.avg,0)/Math.max(e.length,1);break;case"min":n=Math.min(...e.map((i)=>i.aggregations.min));break;case"max":n=Math.max(...e.map((i)=>i.aggregations.max));break;case"count":n=e.length;break}return{value:isFinite(n)?n:0,formatted:this.formatValue(n,t),timestamp:new Date}}generateChartWidgetData(e,t){let r=t.chartType||"line";if(t.groupBy&&t.groupBy.length>0)return this.generateGroupedChartData(e,t);let i=e.sort((o,s)=>o.timestamp.getTime()-s.timestamp.getTime()).map((o)=>({x:o.timestamp,y:this.getAggregatedValue(o,t.aggregation||"avg"),label:o.timestamp.toISOString()}));return{type:r,data:[{name:"Series 1",data:i,color:t.colors?.[0]||"#3b82f6"}],options:{xAxis:t.xAxis,yAxis:t.yAxis,showLegend:t.showLegend??!0,showGrid:t.showGrid??!0}}}generateGroupedChartData(e,t){let r=t.groupBy[0],n=new Map;for(let o of e){let s=o.dimensions[r]||"Unknown";if(!n.has(s))n.set(s,[]);n.get(s).push(o)}let i=Array.from(n.entries()).map(([o,s],a)=>({name:o,data:s.sort((c,u)=>c.timestamp.getTime()-u.timestamp.getTime()).map((c)=>({x:c.timestamp,y:this.getAggregatedValue(c,t.aggregation||"avg")})),color:t.colors?.[a%(t.colors?.length||1)]||this.getDefaultColor(a)}));return{type:t.chartType||"line",data:i,options:{xAxis:t.xAxis,yAxis:t.yAxis,showLegend:t.showLegend??!0,showGrid:t.showGrid??!0}}}generateTableWidgetData(e,t){let r=t.groupBy||["provider","channel"],n=new Map;for(let s of e){let a=r.map((c)=>s.dimensions[c]||"Unknown").join("|");if(!n.has(a))n.set(a,[]);n.get(a).push(s)}let i=[...r.map((s)=>({key:s,title:s.charAt(0).toUpperCase()+s.slice(1)})),{key:"count",title:"Count"},{key:"sum",title:"Sum"},{key:"avg",title:"Average"}],o=Array.from(n.entries()).map(([s,a])=>{let c=s.split("|"),u={};return r.forEach((l,p)=>{u[l]=c[p]}),u.count=a.length,u.sum=a.reduce((l,p)=>l+p.aggregations.sum,0),u.avg=a.reduce((l,p)=>l+p.aggregations.avg,0)/a.length,u});return{columns:i,rows:o.sort((s,a)=>a.sum-s.sum)}}generateGaugeWidgetData(e,t){return{value:this.generateMetricWidgetData(e,t).value,min:t.yAxis?.min||0,max:t.yAxis?.max||100,thresholds:[{value:25,color:"#ef4444"},{value:50,color:"#f59e0b"},{value:75,color:"#10b981"},{value:100,color:"#3b82f6"}]}}generateHeatmapWidgetData(e,t){let r=[];for(let n of e){let i=n.timestamp.getHours(),o=n.timestamp.getDay();r.push({x:i,y:o,value:this.getAggregatedValue(n,t.aggregation||"sum")})}return{data:r,xLabels:Array.from({length:24},(n,i)=>`${i}:00`),yLabels:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]}}generateTrendWidgetData(e,t){let r=e.sort((u,l)=>u.timestamp.getTime()-l.timestamp.getTime());if(r.length<2)return{trend:"stable",change:0,changePercent:0};let n=r.map((u)=>this.getAggregatedValue(u,t.aggregation||"avg")),i=n[0],s=n[n.length-1]-i,a=i!==0?s/i*100:0,c="stable";if(Math.abs(a)>5)c=a>0?"up":"down";return{trend:c,change:Math.round(s*100)/100,changePercent:Math.round(a*100)/100,values:n.slice(-10),sparkline:n.map((u,l)=>({x:l,y:u}))}}filterMetrics(e,t,r){return e.filter((n)=>{if(n.type!==t)return!1;for(let[i,o]of Object.entries(r))if(Array.isArray(o)){if(!o.includes(n.dimensions[i]))return!1}else if(o&&n.dimensions[i]!==o)return!1;return!0})}applyQueryFilters(e,t,r){let n=e;if(t.metrics&&t.metrics.length>0)n=n.filter((o)=>t.metrics.includes(o.type));if(t.dateRange)n=n.filter((o)=>o.timestamp>=t.dateRange.start&&o.timestamp<=t.dateRange.end);let i={...t.filters,...r};for(let[o,s]of Object.entries(i)){if(s===void 0||s===null)continue;n=n.filter((a)=>{if(Array.isArray(s))return s.includes(a.dimensions[o]);return a.dimensions[o]===s})}return n}calculatePreviousPeriodValue(e,t){return e.reduce((n,i)=>n+i.aggregations.sum,0)*0.9}getAggregatedValue(e,t){switch(t){case"sum":return e.aggregations.sum;case"avg":return e.aggregations.avg;case"min":return e.aggregations.min;case"max":return e.aggregations.max;case"count":return e.aggregations.count;default:return e.aggregations.avg}}formatValue(e,t){if(!isFinite(e))return"0";if(e>=1e6)return`${(e/1e6).toFixed(1)}M`;else if(e>=1000)return`${(e/1000).toFixed(1)}K`;return e.toFixed(0)}getDefaultColor(e){let t=["#3b82f6","#ef4444","#10b981","#f59e0b","#8b5cf6","#06b6d4","#f97316","#84cc16"];return t[e%t.length]}initializeDefaultWidgets(){this.config.widgets=[{id:"messages_sent_chart",type:"chart",title:"Messages Sent Over Time",position:{x:0,y:0,width:6,height:4},query:{metrics:["message_sent"],dateRange:{start:new Date,end:new Date},interval:"hour"},visualization:{chartType:"line",aggregation:"sum",showGrid:!0}},{id:"delivery_rate_gauge",type:"gauge",title:"Delivery Rate",position:{x:6,y:0,width:3,height:4},query:{metrics:["delivery_rate"],dateRange:{start:new Date,end:new Date}},visualization:{aggregation:"avg",yAxis:{min:0,max:100}}},{id:"provider_performance_table",type:"table",title:"Provider Performance",position:{x:0,y:4,width:12,height:4},query:{metrics:["message_sent","message_delivered","message_failed"],dateRange:{start:new Date,end:new Date}},visualization:{groupBy:["provider"],aggregation:"sum"}}]}}var P=[],S=[],He="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(W=0,rr=He.length;W<rr;++W)P[W]=He[W],S[He.charCodeAt(W)]=W;var W,rr;S[45]=62;S[95]=63;function Mn(e){var t=e.length;if(t%4>0)throw Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");if(r===-1)r=t;var n=r===t?0:4-r%4;return[r,n]}function Dn(e,t){return(e+t)*3/4-t}function $n(e){var t,r=Mn(e),n=r[0],i=r[1],o=new Uint8Array(Dn(n,i)),s=0,a=i>0?n-4:n,c;for(c=0;c<a;c+=4)t=S[e.charCodeAt(c)]<<18|S[e.charCodeAt(c+1)]<<12|S[e.charCodeAt(c+2)]<<6|S[e.charCodeAt(c+3)],o[s++]=t>>16&255,o[s++]=t>>8&255,o[s++]=t&255;if(i===2)t=S[e.charCodeAt(c)]<<2|S[e.charCodeAt(c+1)]>>4,o[s++]=t&255;if(i===1)t=S[e.charCodeAt(c)]<<10|S[e.charCodeAt(c+1)]<<4|S[e.charCodeAt(c+2)]>>2,o[s++]=t>>8&255,o[s++]=t&255;return o}function Rn(e){return P[e>>18&63]+P[e>>12&63]+P[e>>6&63]+P[e&63]}function Sn(e,t,r){var n,i=[];for(var o=t;o<r;o+=3)n=(e[o]<<16&16711680)+(e[o+1]<<8&65280)+(e[o+2]&255),i.push(Rn(n));return i.join("")}function nr(e){var t,r=e.length,n=r%3,i=[],o=16383;for(var s=0,a=r-n;s<a;s+=o)i.push(Sn(e,s,s+o>a?a:s+o));if(n===1)t=e[r-1],i.push(P[t>>2]+P[t<<4&63]+"==");else if(n===2)t=(e[r-2]<<8)+e[r-1],i.push(P[t>>10]+P[t>>4&63]+P[t<<2&63]+"=");return i.join("")}function De(e,t,r,n,i){var o,s,a=i*8-n-1,c=(1<<a)-1,u=c>>1,l=-7,p=r?i-1:0,m=r?-1:1,f=e[t+p];p+=m,o=f&(1<<-l)-1,f>>=-l,l+=a;for(;l>0;o=o*256+e[t+p],p+=m,l-=8);s=o&(1<<-l)-1,o>>=-l,l+=n;for(;l>0;s=s*256+e[t+p],p+=m,l-=8);if(o===0)o=1-u;else if(o===c)return s?NaN:(f?-1:1)*(1/0);else s=s+Math.pow(2,n),o=o-u;return(f?-1:1)*s*Math.pow(2,o-n)}function cr(e,t,r,n,i,o){var s,a,c,u=o*8-i-1,l=(1<<u)-1,p=l>>1,m=i===23?Math.pow(2,-24)-Math.pow(2,-77):0,f=n?0:o-1,g=n?1:-1,h=t<0||t===0&&1/t<0?1:0;if(t=Math.abs(t),isNaN(t)||t===1/0)a=isNaN(t)?1:0,s=l;else{if(s=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-s))<1)s--,c*=2;if(s+p>=1)t+=m/c;else t+=m*Math.pow(2,1-p);if(t*c>=2)s++,c/=2;if(s+p>=l)a=0,s=l;else if(s+p>=1)a=(t*c-1)*Math.pow(2,i),s=s+p;else a=t*Math.pow(2,p-1)*Math.pow(2,i),s=0}for(;i>=8;e[r+f]=a&255,f+=g,a/=256,i-=8);s=s<<i|a,u+=i;for(;u>0;e[r+f]=s&255,f+=g,s/=256,u-=8);e[r+f-g]|=h*128}var ir=typeof Symbol==="function"&&typeof Symbol.for==="function"?Symbol.for("nodejs.util.inspect.custom"):null,Tn=50,qe=2147483647;var{btoa:qc,atob:Jc,File:Xc,Blob:Yc}=globalThis;function C(e){if(e>qe)throw RangeError('The value "'+e+'" is invalid for option "size"');let t=new Uint8Array(e);return Object.setPrototypeOf(t,d.prototype),t}function et(e,t,r){return class extends r{constructor(){super();Object.defineProperty(this,"message",{value:t.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${e}]`,this.stack,delete this.name}get code(){return e}set code(n){Object.defineProperty(this,"code",{configurable:!0,enumerable:!0,value:n,writable:!0})}toString(){return`${this.name} [${e}]: ${this.message}`}}}var zn=et("ERR_BUFFER_OUT_OF_BOUNDS",function(e){if(e)return`${e} is outside of buffer bounds`;return"Attempt to access memory outside buffer bounds"},RangeError),Pn=et("ERR_INVALID_ARG_TYPE",function(e,t){return`The "${e}" argument must be of type number. Received type ${typeof t}`},TypeError),Je=et("ERR_OUT_OF_RANGE",function(e,t,r){let n=`The value of "${e}" is out of range.`,i=r;if(Number.isInteger(r)&&Math.abs(r)>4294967296)i=ar(String(r));else if(typeof r==="bigint"){if(i=String(r),r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))i=ar(i);i+="n"}return n+=` It must be ${t}. Received ${i}`,n},RangeError);function d(e,t,r){if(typeof e==="number"){if(typeof t==="string")throw TypeError('The "string" argument must be of type string. Received type number');return tt(e)}return ur(e,t,r)}Object.defineProperty(d.prototype,"parent",{enumerable:!0,get:function(){if(!d.isBuffer(this))return;return this.buffer}});Object.defineProperty(d.prototype,"offset",{enumerable:!0,get:function(){if(!d.isBuffer(this))return;return this.byteOffset}});d.poolSize=8192;function ur(e,t,r){if(typeof e==="string")return In(e,t);if(ArrayBuffer.isView(e))return Cn(e);if(e==null)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(k(e,ArrayBuffer)||e&&k(e.buffer,ArrayBuffer))return Ye(e,t,r);if(typeof SharedArrayBuffer<"u"&&(k(e,SharedArrayBuffer)||e&&k(e.buffer,SharedArrayBuffer)))return Ye(e,t,r);if(typeof e==="number")throw TypeError('The "value" argument must not be of type number. Received type number');let n=e.valueOf&&e.valueOf();if(n!=null&&n!==e)return d.from(n,t,r);let i=Zn(e);if(i)return i;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof e[Symbol.toPrimitive]==="function")return d.from(e[Symbol.toPrimitive]("string"),t,r);throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}d.from=function(e,t,r){return ur(e,t,r)};Object.setPrototypeOf(d.prototype,Uint8Array.prototype);Object.setPrototypeOf(d,Uint8Array);function lr(e){if(typeof e!=="number")throw TypeError('"size" argument must be of type number');else if(e<0)throw RangeError('The value "'+e+'" is invalid for option "size"')}function kn(e,t,r){if(lr(e),e<=0)return C(e);if(t!==void 0)return typeof r==="string"?C(e).fill(t,r):C(e).fill(t);return C(e)}d.alloc=function(e,t,r){return kn(e,t,r)};function tt(e){return lr(e),C(e<0?0:rt(e)|0)}d.allocUnsafe=function(e){return tt(e)};d.allocUnsafeSlow=function(e){return tt(e)};function In(e,t){if(typeof t!=="string"||t==="")t="utf8";if(!d.isEncoding(t))throw TypeError("Unknown encoding: "+t);let r=pr(e,t)|0,n=C(r),i=n.write(e,t);if(i!==r)n=n.slice(0,i);return n}function Xe(e){let t=e.length<0?0:rt(e.length)|0,r=C(t);for(let n=0;n<t;n+=1)r[n]=e[n]&255;return r}function Cn(e){if(k(e,Uint8Array)){let t=new Uint8Array(e);return Ye(t.buffer,t.byteOffset,t.byteLength)}return Xe(e)}function Ye(e,t,r){if(t<0||e.byteLength<t)throw RangeError('"offset" is outside of buffer bounds');if(e.byteLength<t+(r||0))throw RangeError('"length" is outside of buffer bounds');let n;if(t===void 0&&r===void 0)n=new Uint8Array(e);else if(r===void 0)n=new Uint8Array(e,t);else n=new Uint8Array(e,t,r);return Object.setPrototypeOf(n,d.prototype),n}function Zn(e){if(d.isBuffer(e)){let t=rt(e.length)|0,r=C(t);if(r.length===0)return r;return e.copy(r,0,0,t),r}if(e.length!==void 0){if(typeof e.length!=="number"||Number.isNaN(e.length))return C(0);return Xe(e)}if(e.type==="Buffer"&&Array.isArray(e.data))return Xe(e.data)}function rt(e){if(e>=qe)throw RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+qe.toString(16)+" bytes");return e|0}d.isBuffer=function(e){return e!=null&&e._isBuffer===!0&&e!==d.prototype};d.compare=function(e,t){if(k(e,Uint8Array))e=d.from(e,e.offset,e.byteLength);if(k(t,Uint8Array))t=d.from(t,t.offset,t.byteLength);if(!d.isBuffer(e)||!d.isBuffer(t))throw TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(e===t)return 0;let r=e.length,n=t.length;for(let i=0,o=Math.min(r,n);i<o;++i)if(e[i]!==t[i]){r=e[i],n=t[i];break}if(r<n)return-1;if(n<r)return 1;return 0};d.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}};d.concat=function(e,t){if(!Array.isArray(e))throw TypeError('"list" argument must be an Array of Buffers');if(e.length===0)return d.alloc(0);let r;if(t===void 0){t=0;for(r=0;r<e.length;++r)t+=e[r].length}let n=d.allocUnsafe(t),i=0;for(r=0;r<e.length;++r){let o=e[r];if(k(o,Uint8Array))if(i+o.length>n.length){if(!d.isBuffer(o))o=d.from(o);o.copy(n,i)}else Uint8Array.prototype.set.call(n,o,i);else if(!d.isBuffer(o))throw TypeError('"list" argument must be an Array of Buffers');else o.copy(n,i);i+=o.length}return n};function pr(e,t){if(d.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||k(e,ArrayBuffer))return e.byteLength;if(typeof e!=="string")throw TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);let r=e.length,n=arguments.length>2&&arguments[2]===!0;if(!n&&r===0)return 0;let i=!1;for(;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return Qe(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return r*2;case"hex":return r>>>1;case"base64":return wr(e).length;default:if(i)return n?-1:Qe(e).length;t=(""+t).toLowerCase(),i=!0}}d.byteLength=pr;function Ln(e,t,r){let n=!1;if(t===void 0||t<0)t=0;if(t>this.length)return"";if(r===void 0||r>this.length)r=this.length;if(r<=0)return"";if(r>>>=0,t>>>=0,r<=t)return"";if(!e)e="utf8";while(!0)switch(e){case"hex":return Kn(this,t,r);case"utf8":case"utf-8":return mr(this,t,r);case"ascii":return Wn(this,t,r);case"latin1":case"binary":return Gn(this,t,r);case"base64":return jn(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Hn(this,t,r);default:if(n)throw TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}d.prototype._isBuffer=!0;function G(e,t,r){let n=e[t];e[t]=e[r],e[r]=n}d.prototype.swap16=function(){let e=this.length;if(e%2!==0)throw RangeError("Buffer size must be a multiple of 16-bits");for(let t=0;t<e;t+=2)G(this,t,t+1);return this};d.prototype.swap32=function(){let e=this.length;if(e%4!==0)throw RangeError("Buffer size must be a multiple of 32-bits");for(let t=0;t<e;t+=4)G(this,t,t+3),G(this,t+1,t+2);return this};d.prototype.swap64=function(){let e=this.length;if(e%8!==0)throw RangeError("Buffer size must be a multiple of 64-bits");for(let t=0;t<e;t+=8)G(this,t,t+7),G(this,t+1,t+6),G(this,t+2,t+5),G(this,t+3,t+4);return this};d.prototype.toString=function(){let e=this.length;if(e===0)return"";if(arguments.length===0)return mr(this,0,e);return Ln.apply(this,arguments)};d.prototype.toLocaleString=d.prototype.toString;d.prototype.equals=function(e){if(!d.isBuffer(e))throw TypeError("Argument must be a Buffer");if(this===e)return!0;return d.compare(this,e)===0};d.prototype.inspect=function(){let e="",t=Tn;if(e=this.toString("hex",0,t).replace(/(.{2})/g,"$1 ").trim(),this.length>t)e+=" ... ";return"<Buffer "+e+">"};if(ir)d.prototype[ir]=d.prototype.inspect;d.prototype.compare=function(e,t,r,n,i){if(k(e,Uint8Array))e=d.from(e,e.offset,e.byteLength);if(!d.isBuffer(e))throw TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(t===void 0)t=0;if(r===void 0)r=e?e.length:0;if(n===void 0)n=0;if(i===void 0)i=this.length;if(t<0||r>e.length||n<0||i>this.length)throw RangeError("out of range index");if(n>=i&&t>=r)return 0;if(n>=i)return-1;if(t>=r)return 1;if(t>>>=0,r>>>=0,n>>>=0,i>>>=0,this===e)return 0;let o=i-n,s=r-t,a=Math.min(o,s),c=this.slice(n,i),u=e.slice(t,r);for(let l=0;l<a;++l)if(c[l]!==u[l]){o=c[l],s=u[l];break}if(o<s)return-1;if(s<o)return 1;return 0};function dr(e,t,r,n,i){if(e.length===0)return-1;if(typeof r==="string")n=r,r=0;else if(r>2147483647)r=2147483647;else if(r<-2147483648)r=-2147483648;if(r=+r,Number.isNaN(r))r=i?0:e.length-1;if(r<0)r=e.length+r;if(r>=e.length)if(i)return-1;else r=e.length-1;else if(r<0)if(i)r=0;else return-1;if(typeof t==="string")t=d.from(t,n);if(d.isBuffer(t)){if(t.length===0)return-1;return or(e,t,r,n,i)}else if(typeof t==="number"){if(t=t&255,typeof Uint8Array.prototype.indexOf==="function")if(i)return Uint8Array.prototype.indexOf.call(e,t,r);else return Uint8Array.prototype.lastIndexOf.call(e,t,r);return or(e,[t],r,n,i)}throw TypeError("val must be string, number or Buffer")}function or(e,t,r,n,i){let o=1,s=e.length,a=t.length;if(n!==void 0){if(n=String(n).toLowerCase(),n==="ucs2"||n==="ucs-2"||n==="utf16le"||n==="utf-16le"){if(e.length<2||t.length<2)return-1;o=2,s/=2,a/=2,r/=2}}function c(l,p){if(o===1)return l[p];else return l.readUInt16BE(p*o)}let u;if(i){let l=-1;for(u=r;u<s;u++)if(c(e,u)===c(t,l===-1?0:u-l)){if(l===-1)l=u;if(u-l+1===a)return l*o}else{if(l!==-1)u-=u-l;l=-1}}else{if(r+a>s)r=s-a;for(u=r;u>=0;u--){let l=!0;for(let p=0;p<a;p++)if(c(e,u+p)!==c(t,p)){l=!1;break}if(l)return u}}return-1}d.prototype.includes=function(e,t,r){return this.indexOf(e,t,r)!==-1};d.prototype.indexOf=function(e,t,r){return dr(this,e,t,r,!0)};d.prototype.lastIndexOf=function(e,t,r){return dr(this,e,t,r,!1)};function Bn(e,t,r,n){r=Number(r)||0;let i=e.length-r;if(!n)n=i;else if(n=Number(n),n>i)n=i;let o=t.length;if(n>o/2)n=o/2;let s;for(s=0;s<n;++s){let a=parseInt(t.substr(s*2,2),16);if(Number.isNaN(a))return s;e[r+s]=a}return s}function On(e,t,r,n){return $e(Qe(t,e.length-r),e,r,n)}function Nn(e,t,r,n){return $e(Yn(t),e,r,n)}function Un(e,t,r,n){return $e(wr(t),e,r,n)}function Fn(e,t,r,n){return $e(Qn(t,e.length-r),e,r,n)}d.prototype.write=function(e,t,r,n){if(t===void 0)n="utf8",r=this.length,t=0;else if(r===void 0&&typeof t==="string")n=t,r=this.length,t=0;else if(isFinite(t))if(t=t>>>0,isFinite(r)){if(r=r>>>0,n===void 0)n="utf8"}else n=r,r=void 0;else throw Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");let i=this.length-t;if(r===void 0||r>i)r=i;if(e.length>0&&(r<0||t<0)||t>this.length)throw RangeError("Attempt to write outside buffer bounds");if(!n)n="utf8";let o=!1;for(;;)switch(n){case"hex":return Bn(this,e,t,r);case"utf8":case"utf-8":return On(this,e,t,r);case"ascii":case"latin1":case"binary":return Nn(this,e,t,r);case"base64":return Un(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Fn(this,e,t,r);default:if(o)throw TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}};d.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function jn(e,t,r){if(t===0&&r===e.length)return nr(e);else return nr(e.slice(t,r))}function mr(e,t,r){r=Math.min(e.length,r);let n=[],i=t;while(i<r){let o=e[i],s=null,a=o>239?4:o>223?3:o>191?2:1;if(i+a<=r){let c,u,l,p;switch(a){case 1:if(o<128)s=o;break;case 2:if(c=e[i+1],(c&192)===128){if(p=(o&31)<<6|c&63,p>127)s=p}break;case 3:if(c=e[i+1],u=e[i+2],(c&192)===128&&(u&192)===128){if(p=(o&15)<<12|(c&63)<<6|u&63,p>2047&&(p<55296||p>57343))s=p}break;case 4:if(c=e[i+1],u=e[i+2],l=e[i+3],(c&192)===128&&(u&192)===128&&(l&192)===128){if(p=(o&15)<<18|(c&63)<<12|(u&63)<<6|l&63,p>65535&&p<1114112)s=p}}}if(s===null)s=65533,a=1;else if(s>65535)s-=65536,n.push(s>>>10&1023|55296),s=56320|s&1023;n.push(s),i+=a}return Vn(n)}var sr=4096;function Vn(e){let t=e.length;if(t<=sr)return String.fromCharCode.apply(String,e);let r="",n=0;while(n<t)r+=String.fromCharCode.apply(String,e.slice(n,n+=sr));return r}function Wn(e,t,r){let n="";r=Math.min(e.length,r);for(let i=t;i<r;++i)n+=String.fromCharCode(e[i]&127);return n}function Gn(e,t,r){let n="";r=Math.min(e.length,r);for(let i=t;i<r;++i)n+=String.fromCharCode(e[i]);return n}function Kn(e,t,r){let n=e.length;if(!t||t<0)t=0;if(!r||r<0||r>n)r=n;let i="";for(let o=t;o<r;++o)i+=ei[e[o]];return i}function Hn(e,t,r){let n=e.slice(t,r),i="";for(let o=0;o<n.length-1;o+=2)i+=String.fromCharCode(n[o]+n[o+1]*256);return i}d.prototype.slice=function(e,t){let r=this.length;if(e=~~e,t=t===void 0?r:~~t,e<0){if(e+=r,e<0)e=0}else if(e>r)e=r;if(t<0){if(t+=r,t<0)t=0}else if(t>r)t=r;if(t<e)t=e;let n=this.subarray(e,t);return Object.setPrototypeOf(n,d.prototype),n};function w(e,t,r){if(e%1!==0||e<0)throw RangeError("offset is not uint");if(e+t>r)throw RangeError("Trying to access beyond buffer length")}d.prototype.readUintLE=d.prototype.readUIntLE=function(e,t,r){if(e=e>>>0,t=t>>>0,!r)w(e,t,this.length);let n=this[e],i=1,o=0;while(++o<t&&(i*=256))n+=this[e+o]*i;return n};d.prototype.readUintBE=d.prototype.readUIntBE=function(e,t,r){if(e=e>>>0,t=t>>>0,!r)w(e,t,this.length);let n=this[e+--t],i=1;while(t>0&&(i*=256))n+=this[e+--t]*i;return n};d.prototype.readUint8=d.prototype.readUInt8=function(e,t){if(e=e>>>0,!t)w(e,1,this.length);return this[e]};d.prototype.readUint16LE=d.prototype.readUInt16LE=function(e,t){if(e=e>>>0,!t)w(e,2,this.length);return this[e]|this[e+1]<<8};d.prototype.readUint16BE=d.prototype.readUInt16BE=function(e,t){if(e=e>>>0,!t)w(e,2,this.length);return this[e]<<8|this[e+1]};d.prototype.readUint32LE=d.prototype.readUInt32LE=function(e,t){if(e=e>>>0,!t)w(e,4,this.length);return(this[e]|this[e+1]<<8|this[e+2]<<16)+this[e+3]*16777216};d.prototype.readUint32BE=d.prototype.readUInt32BE=function(e,t){if(e=e>>>0,!t)w(e,4,this.length);return this[e]*16777216+(this[e+1]<<16|this[e+2]<<8|this[e+3])};d.prototype.readBigUInt64LE=U(function(e){e=e>>>0,X(e,"offset");let t=this[e],r=this[e+7];if(t===void 0||r===void 0)ie(e,this.length-8);let n=t+this[++e]*256+this[++e]*65536+this[++e]*16777216,i=this[++e]+this[++e]*256+this[++e]*65536+r*16777216;return BigInt(n)+(BigInt(i)<<BigInt(32))});d.prototype.readBigUInt64BE=U(function(e){e=e>>>0,X(e,"offset");let t=this[e],r=this[e+7];if(t===void 0||r===void 0)ie(e,this.length-8);let n=t*16777216+this[++e]*65536+this[++e]*256+this[++e],i=this[++e]*16777216+this[++e]*65536+this[++e]*256+r;return(BigInt(n)<<BigInt(32))+BigInt(i)});d.prototype.readIntLE=function(e,t,r){if(e=e>>>0,t=t>>>0,!r)w(e,t,this.length);let n=this[e],i=1,o=0;while(++o<t&&(i*=256))n+=this[e+o]*i;if(i*=128,n>=i)n-=Math.pow(2,8*t);return n};d.prototype.readIntBE=function(e,t,r){if(e=e>>>0,t=t>>>0,!r)w(e,t,this.length);let n=t,i=1,o=this[e+--n];while(n>0&&(i*=256))o+=this[e+--n]*i;if(i*=128,o>=i)o-=Math.pow(2,8*t);return o};d.prototype.readInt8=function(e,t){if(e=e>>>0,!t)w(e,1,this.length);if(!(this[e]&128))return this[e];return(255-this[e]+1)*-1};d.prototype.readInt16LE=function(e,t){if(e=e>>>0,!t)w(e,2,this.length);let r=this[e]|this[e+1]<<8;return r&32768?r|4294901760:r};d.prototype.readInt16BE=function(e,t){if(e=e>>>0,!t)w(e,2,this.length);let r=this[e+1]|this[e]<<8;return r&32768?r|4294901760:r};d.prototype.readInt32LE=function(e,t){if(e=e>>>0,!t)w(e,4,this.length);return this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24};d.prototype.readInt32BE=function(e,t){if(e=e>>>0,!t)w(e,4,this.length);return this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]};d.prototype.readBigInt64LE=U(function(e){e=e>>>0,X(e,"offset");let t=this[e],r=this[e+7];if(t===void 0||r===void 0)ie(e,this.length-8);let n=this[e+4]+this[e+5]*256+this[e+6]*65536+(r<<24);return(BigInt(n)<<BigInt(32))+BigInt(t+this[++e]*256+this[++e]*65536+this[++e]*16777216)});d.prototype.readBigInt64BE=U(function(e){e=e>>>0,X(e,"offset");let t=this[e],r=this[e+7];if(t===void 0||r===void 0)ie(e,this.length-8);let n=(t<<24)+this[++e]*65536+this[++e]*256+this[++e];return(BigInt(n)<<BigInt(32))+BigInt(this[++e]*16777216+this[++e]*65536+this[++e]*256+r)});d.prototype.readFloatLE=function(e,t){if(e=e>>>0,!t)w(e,4,this.length);return De(this,e,!0,23,4)};d.prototype.readFloatBE=function(e,t){if(e=e>>>0,!t)w(e,4,this.length);return De(this,e,!1,23,4)};d.prototype.readDoubleLE=function(e,t){if(e=e>>>0,!t)w(e,8,this.length);return De(this,e,!0,52,8)};d.prototype.readDoubleBE=function(e,t){if(e=e>>>0,!t)w(e,8,this.length);return De(this,e,!1,52,8)};function M(e,t,r,n,i,o){if(!d.isBuffer(e))throw TypeError('"buffer" argument must be a Buffer instance');if(t>i||t<o)throw RangeError('"value" argument is out of bounds');if(r+n>e.length)throw RangeError("Index out of range")}d.prototype.writeUintLE=d.prototype.writeUIntLE=function(e,t,r,n){if(e=+e,t=t>>>0,r=r>>>0,!n){let s=Math.pow(2,8*r)-1;M(this,e,t,r,s,0)}let i=1,o=0;this[t]=e&255;while(++o<r&&(i*=256))this[t+o]=e/i&255;return t+r};d.prototype.writeUintBE=d.prototype.writeUIntBE=function(e,t,r,n){if(e=+e,t=t>>>0,r=r>>>0,!n){let s=Math.pow(2,8*r)-1;M(this,e,t,r,s,0)}let i=r-1,o=1;this[t+i]=e&255;while(--i>=0&&(o*=256))this[t+i]=e/o&255;return t+r};d.prototype.writeUint8=d.prototype.writeUInt8=function(e,t,r){if(e=+e,t=t>>>0,!r)M(this,e,t,1,255,0);return this[t]=e&255,t+1};d.prototype.writeUint16LE=d.prototype.writeUInt16LE=function(e,t,r){if(e=+e,t=t>>>0,!r)M(this,e,t,2,65535,0);return this[t]=e&255,this[t+1]=e>>>8,t+2};d.prototype.writeUint16BE=d.prototype.writeUInt16BE=function(e,t,r){if(e=+e,t=t>>>0,!r)M(this,e,t,2,65535,0);return this[t]=e>>>8,this[t+1]=e&255,t+2};d.prototype.writeUint32LE=d.prototype.writeUInt32LE=function(e,t,r){if(e=+e,t=t>>>0,!r)M(this,e,t,4,4294967295,0);return this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=e&255,t+4};d.prototype.writeUint32BE=d.prototype.writeUInt32BE=function(e,t,r){if(e=+e,t=t>>>0,!r)M(this,e,t,4,4294967295,0);return this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=e&255,t+4};function gr(e,t,r,n,i){xr(t,n,i,e,r,7);let o=Number(t&BigInt(4294967295));e[r++]=o,o=o>>8,e[r++]=o,o=o>>8,e[r++]=o,o=o>>8,e[r++]=o;let s=Number(t>>BigInt(32)&BigInt(4294967295));return e[r++]=s,s=s>>8,e[r++]=s,s=s>>8,e[r++]=s,s=s>>8,e[r++]=s,r}function fr(e,t,r,n,i){xr(t,n,i,e,r,7);let o=Number(t&BigInt(4294967295));e[r+7]=o,o=o>>8,e[r+6]=o,o=o>>8,e[r+5]=o,o=o>>8,e[r+4]=o;let s=Number(t>>BigInt(32)&BigInt(4294967295));return e[r+3]=s,s=s>>8,e[r+2]=s,s=s>>8,e[r+1]=s,s=s>>8,e[r]=s,r+8}d.prototype.writeBigUInt64LE=U(function(e,t=0){return gr(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))});d.prototype.writeBigUInt64BE=U(function(e,t=0){return fr(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))});d.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t=t>>>0,!n){let a=Math.pow(2,8*r-1);M(this,e,t,r,a-1,-a)}let i=0,o=1,s=0;this[t]=e&255;while(++i<r&&(o*=256)){if(e<0&&s===0&&this[t+i-1]!==0)s=1;this[t+i]=(e/o>>0)-s&255}return t+r};d.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t=t>>>0,!n){let a=Math.pow(2,8*r-1);M(this,e,t,r,a-1,-a)}let i=r-1,o=1,s=0;this[t+i]=e&255;while(--i>=0&&(o*=256)){if(e<0&&s===0&&this[t+i+1]!==0)s=1;this[t+i]=(e/o>>0)-s&255}return t+r};d.prototype.writeInt8=function(e,t,r){if(e=+e,t=t>>>0,!r)M(this,e,t,1,127,-128);if(e<0)e=255+e+1;return this[t]=e&255,t+1};d.prototype.writeInt16LE=function(e,t,r){if(e=+e,t=t>>>0,!r)M(this,e,t,2,32767,-32768);return this[t]=e&255,this[t+1]=e>>>8,t+2};d.prototype.writeInt16BE=function(e,t,r){if(e=+e,t=t>>>0,!r)M(this,e,t,2,32767,-32768);return this[t]=e>>>8,this[t+1]=e&255,t+2};d.prototype.writeInt32LE=function(e,t,r){if(e=+e,t=t>>>0,!r)M(this,e,t,4,2147483647,-2147483648);return this[t]=e&255,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4};d.prototype.writeInt32BE=function(e,t,r){if(e=+e,t=t>>>0,!r)M(this,e,t,4,2147483647,-2147483648);if(e<0)e=4294967295+e+1;return this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=e&255,t+4};d.prototype.writeBigInt64LE=U(function(e,t=0){return gr(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});d.prototype.writeBigInt64BE=U(function(e,t=0){return fr(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function hr(e,t,r,n,i,o){if(r+n>e.length)throw RangeError("Index out of range");if(r<0)throw RangeError("Index out of range")}function yr(e,t,r,n,i){if(t=+t,r=r>>>0,!i)hr(e,t,r,4,340282346638528860000000000000000000000,-340282346638528860000000000000000000000);return cr(e,t,r,n,23,4),r+4}d.prototype.writeFloatLE=function(e,t,r){return yr(this,e,t,!0,r)};d.prototype.writeFloatBE=function(e,t,r){return yr(this,e,t,!1,r)};function vr(e,t,r,n,i){if(t=+t,r=r>>>0,!i)hr(e,t,r,8,179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,-179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000);return cr(e,t,r,n,52,8),r+8}d.prototype.writeDoubleLE=function(e,t,r){return vr(this,e,t,!0,r)};d.prototype.writeDoubleBE=function(e,t,r){return vr(this,e,t,!1,r)};d.prototype.copy=function(e,t,r,n){if(!d.isBuffer(e))throw TypeError("argument should be a Buffer");if(!r)r=0;if(!n&&n!==0)n=this.length;if(t>=e.length)t=e.length;if(!t)t=0;if(n>0&&n<r)n=r;if(n===r)return 0;if(e.length===0||this.length===0)return 0;if(t<0)throw RangeError("targetStart out of bounds");if(r<0||r>=this.length)throw RangeError("Index out of range");if(n<0)throw RangeError("sourceEnd out of bounds");if(n>this.length)n=this.length;if(e.length-t<n-r)n=e.length-t+r;let i=n-r;if(this===e&&typeof Uint8Array.prototype.copyWithin==="function")this.copyWithin(t,r,n);else Uint8Array.prototype.set.call(e,this.subarray(r,n),t);return i};d.prototype.fill=function(e,t,r,n){if(typeof e==="string"){if(typeof t==="string")n=t,t=0,r=this.length;else if(typeof r==="string")n=r,r=this.length;if(n!==void 0&&typeof n!=="string")throw TypeError("encoding must be a string");if(typeof n==="string"&&!d.isEncoding(n))throw TypeError("Unknown encoding: "+n);if(e.length===1){let o=e.charCodeAt(0);if(n==="utf8"&&o<128||n==="latin1")e=o}}else if(typeof e==="number")e=e&255;else if(typeof e==="boolean")e=Number(e);if(t<0||this.length<t||this.length<r)throw RangeError("Out of range index");if(r<=t)return this;if(t=t>>>0,r=r===void 0?this.length:r>>>0,!e)e=0;let i;if(typeof e==="number")for(i=t;i<r;++i)this[i]=e;else{let o=d.isBuffer(e)?e:d.from(e,n),s=o.length;if(s===0)throw TypeError('The value "'+e+'" is invalid for argument "value"');for(i=0;i<r-t;++i)this[i+t]=o[i%s]}return this};function ar(e){let t="",r=e.length,n=e[0]==="-"?1:0;for(;r>=n+4;r-=3)t=`_${e.slice(r-3,r)}${t}`;return`${e.slice(0,r)}${t}`}function qn(e,t,r){if(X(t,"offset"),e[t]===void 0||e[t+r]===void 0)ie(t,e.length-(r+1))}function xr(e,t,r,n,i,o){if(e>r||e<t){let s=typeof t==="bigint"?"n":"",a;if(o>3)if(t===0||t===BigInt(0))a=`>= 0${s} and < 2${s} ** ${(o+1)*8}${s}`;else a=`>= -(2${s} ** ${(o+1)*8-1}${s}) and < 2 ** ${(o+1)*8-1}${s}`;else a=`>= ${t}${s} and <= ${r}${s}`;throw new Je("value",a,e)}qn(n,i,o)}function X(e,t){if(typeof e!=="number")throw new Pn(t,"number",e)}function ie(e,t,r){if(Math.floor(e)!==e)throw X(e,r),new Je(r||"offset","an integer",e);if(t<0)throw new zn;throw new Je(r||"offset",`>= ${r?1:0} and <= ${t}`,e)}var Jn=/[^+/0-9A-Za-z-_]/g;function Xn(e){if(e=e.split("=")[0],e=e.trim().replace(Jn,""),e.length<2)return"";while(e.length%4!==0)e=e+"=";return e}function Qe(e,t){t=t||1/0;let r,n=e.length,i=null,o=[];for(let s=0;s<n;++s){if(r=e.charCodeAt(s),r>55295&&r<57344){if(!i){if(r>56319){if((t-=3)>-1)o.push(239,191,189);continue}else if(s+1===n){if((t-=3)>-1)o.push(239,191,189);continue}i=r;continue}if(r<56320){if((t-=3)>-1)o.push(239,191,189);i=r;continue}r=(i-55296<<10|r-56320)+65536}else if(i){if((t-=3)>-1)o.push(239,191,189)}if(i=null,r<128){if((t-=1)<0)break;o.push(r)}else if(r<2048){if((t-=2)<0)break;o.push(r>>6|192,r&63|128)}else if(r<65536){if((t-=3)<0)break;o.push(r>>12|224,r>>6&63|128,r&63|128)}else if(r<1114112){if((t-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,r&63|128)}else throw Error("Invalid code point")}return o}function Yn(e){let t=[];for(let r=0;r<e.length;++r)t.push(e.charCodeAt(r)&255);return t}function Qn(e,t){let r,n,i,o=[];for(let s=0;s<e.length;++s){if((t-=2)<0)break;r=e.charCodeAt(s),n=r>>8,i=r%256,o.push(i),o.push(n)}return o}function wr(e){return $n(Xn(e))}function $e(e,t,r,n){let i;for(i=0;i<n;++i){if(i+r>=t.length||i>=e.length)break;t[i+r]=e[i]}return i}function k(e,t){return e instanceof t||e!=null&&e.constructor!=null&&e.constructor.name!=null&&e.constructor.name===t.name}var ei=function(){let e=Array(256);for(let t=0;t<16;++t){let r=t*16;for(let n=0;n<16;++n)e[r+n]="0123456789abcdef"[t]+"0123456789abcdef"[n]}return e}();function U(e){return typeof BigInt>"u"?ti:e}function ti(){throw Error("BigInt not supported")}function nt(e){return()=>{throw Error(e+" is not implemented for node:buffer browser polyfill")}}var Qc=nt("resolveObjectURL"),eu=nt("isUtf8");var tu=nt("transcode");class Re{config;exports=new Map;exportQueue=[];defaultConfig={formats:[{type:"csv",options:{delimiter:",",includeHeaders:!0}},{type:"json"},{type:"pdf",options:{orientation:"portrait",pageSize:"A4"}}],maxFileSize:52428800,compressionEnabled:!0};constructor(e={}){this.config={...this.defaultConfig,...e}}async exportReport(e,t,r={}){let n=this.generateExportId();try{let i;switch(t.type){case"csv":i=await this.exportToCSV(e,{...t.options,...r},n);break;case"excel":i=await this.exportToExcel(e,{...t.options,...r},n);break;case"pdf":i=await this.exportToPDF(e,{...t.options,...r},n);break;case"json":i=await this.exportToJSON(e,{...t.options,...r},n);break;case"xml":i=await this.exportToXML(e,{...t.options,...r},n);break;default:throw Error(`Unsupported export format: ${t.type}`)}return this.exports.set(n,i),i}catch(i){throw Error(`Export failed: ${i instanceof Error?i.message:"Unknown error"}`)}}async exportMetrics(e,t,r={}){let n=this.generateExportId();try{let i;switch(t.type){case"csv":i=await this.exportMetricsToCSV(e,{...t.options,...r},n);break;case"json":i=await this.exportMetricsToJSON(e,{...t.options,...r},n);break;default:throw Error(`Metrics export not supported for format: ${t.type}`)}return this.exports.set(n,i),i}catch(i){throw Error(`Metrics export failed: ${i instanceof Error?i.message:"Unknown error"}`)}}async exportInsights(e,t,r={}){let n=this.generateExportId();try{let i;switch(t.type){case"csv":i=await this.exportInsightsToCSV(e,{...t.options,...r},n);break;case"json":i=await this.exportInsightsToJSON(e,{...t.options,...r},n);break;case"pdf":i=await this.exportInsightsToPDF(e,{...t.options,...r},n);break;default:throw Error(`Insights export not supported for format: ${t.type}`)}return this.exports.set(n,i),i}catch(i){throw Error(`Insights export failed: ${i instanceof Error?i.message:"Unknown error"}`)}}getExportStatus(e){return this.exports.get(e)||null}listExports(e=50){return Array.from(this.exports.values()).sort((r,n)=>n.createdAt.getTime()-r.createdAt.getTime()).slice(0,e)}deleteExport(e){return this.exports.delete(e)}async exportToCSV(e,t,r){let n=t.delimiter||",",i=t.dateFormat||"yyyy-MM-dd HH:mm:ss",o="";if(t.includeHeaders)o+=["Metric Type","Value","Change","Trend","Breakdown"].join(n)+`
3
+ `;for(let u of e.metrics){let l=[u.type.toString(),u.value.toString(),(u.change||0).toString(),u.trend||"stable",u.breakdown?JSON.stringify(u.breakdown):""];o+=l.map((p)=>`"${p}"`).join(n)+`
4
+ `}let s=`report_${e.id}_${Date.now()}.csv`,a=`/exports/${s}`,c=d.byteLength(o,"utf8");if(c>this.config.maxFileSize)throw Error(`File size ${c} exceeds maximum ${this.config.maxFileSize}`);return x.info(`Saving CSV to ${a}, size: ${c} bytes`),{id:r,format:"csv",fileName:s,filePath:a,fileSize:c,createdAt:new Date,downloadUrl:`/api/exports/${r}/download`,expiresAt:new Date(Date.now()+86400000)}}async exportToExcel(e,t,r){let n={name:"Report",data:e.metrics.map((a)=>({"Metric Type":a.type,Value:a.value,Change:a.change||0,Trend:a.trend||"stable"}))},i=`report_${e.id}_${Date.now()}.xlsx`,o=`/exports/${i}`,s=10240;return x.info(`Generating Excel file: ${i}`),{id:r,format:"excel",fileName:i,filePath:o,fileSize:10240,createdAt:new Date,downloadUrl:`/api/exports/${r}/download`,expiresAt:new Date(Date.now()+86400000)}}async exportToPDF(e,t,r){let n=t.template||"standard",i=t.orientation||"portrait";x.info(`Generating PDF report with template: ${n}, orientation: ${i}`);let o=`report_${e.id}_${Date.now()}.pdf`,s=`/exports/${o}`;return{id:r,format:"pdf",fileName:o,filePath:s,fileSize:25600,createdAt:new Date,downloadUrl:`/api/exports/${r}/download`,expiresAt:new Date(Date.now()+86400000)}}async exportToJSON(e,t,r){let n=JSON.stringify(e,null,2),i=`report_${e.id}_${Date.now()}.json`,o=`/exports/${i}`,s=d.byteLength(n,"utf8");return{id:r,format:"json",fileName:i,filePath:o,fileSize:s,createdAt:new Date,downloadUrl:`/api/exports/${r}/download`,expiresAt:new Date(Date.now()+86400000)}}async exportToXML(e,t,r){let n=`<?xml version="1.0" encoding="UTF-8"?>
5
+ `;n+=`<report>
6
+ `,n+=` <id>${e.id}</id>
7
+ `,n+=` <name>${e.name}</name>
8
+ `,n+=` <generatedAt>${e.generatedAt.toISOString()}</generatedAt>
9
+ `,n+=` <metrics>
10
+ `;for(let a of e.metrics)n+=` <metric>
11
+ `,n+=` <type>${a.type}</type>
12
+ `,n+=` <value>${a.value}</value>
13
+ `,n+=` <change>${a.change||0}</change>
14
+ `,n+=` <trend>${a.trend||"stable"}</trend>
15
+ `,n+=` </metric>
16
+ `;n+=` </metrics>
17
+ `,n+=`</report>
18
+ `;let i=`report_${e.id}_${Date.now()}.xml`,o=`/exports/${i}`,s=d.byteLength(n,"utf8");return{id:r,format:"xml",fileName:i,filePath:o,fileSize:s,createdAt:new Date,downloadUrl:`/api/exports/${r}/download`,expiresAt:new Date(Date.now()+86400000)}}async exportMetricsToCSV(e,t,r){let n=t.delimiter||",",i="";if(t.includeHeaders)i+=["Timestamp","Type","Interval","Count","Sum","Average","Min","Max","Dimensions"].join(n)+`
19
+ `;for(let c of e){let u=[c.timestamp.toISOString(),c.type.toString(),c.interval,c.aggregations.count.toString(),c.aggregations.sum.toString(),c.aggregations.avg.toString(),c.aggregations.min.toString(),c.aggregations.max.toString(),JSON.stringify(c.dimensions)];i+=u.map((l)=>`"${l}"`).join(n)+`
20
+ `}let o=`metrics_${Date.now()}.csv`,s=`/exports/${o}`,a=d.byteLength(i,"utf8");return{id:r,format:"csv",fileName:o,filePath:s,fileSize:a,createdAt:new Date,downloadUrl:`/api/exports/${r}/download`,expiresAt:new Date(Date.now()+86400000)}}async exportMetricsToJSON(e,t,r){let n=JSON.stringify({exportedAt:new Date().toISOString(),count:e.length,metrics:e},null,2),i=`metrics_${Date.now()}.json`,o=`/exports/${i}`,s=d.byteLength(n,"utf8");return{id:r,format:"json",fileName:i,filePath:o,fileSize:s,createdAt:new Date,downloadUrl:`/api/exports/${r}/download`,expiresAt:new Date(Date.now()+86400000)}}async exportInsightsToCSV(e,t,r){let n=t.delimiter||",",i="";if(t.includeHeaders)i+=["ID","Type","Title","Description","Severity","Metric","Value","Confidence","Detected At","Recommendations"].join(n)+`
21
+ `;for(let c of e){let u=[c.id,c.type,c.title,c.description,c.severity,c.metric.toString(),c.value.toString(),c.confidence.toString(),c.detectedAt.toISOString(),(c.recommendations||[]).join("; ")];i+=u.map((l)=>`"${l}"`).join(n)+`
22
+ `}let o=`insights_${Date.now()}.csv`,s=`/exports/${o}`,a=d.byteLength(i,"utf8");return{id:r,format:"csv",fileName:o,filePath:s,fileSize:a,createdAt:new Date,downloadUrl:`/api/exports/${r}/download`,expiresAt:new Date(Date.now()+86400000)}}async exportInsightsToJSON(e,t,r){let n=JSON.stringify({exportedAt:new Date().toISOString(),count:e.length,insights:e},null,2),i=`insights_${Date.now()}.json`,o=`/exports/${i}`,s=d.byteLength(n,"utf8");return{id:r,format:"json",fileName:i,filePath:o,fileSize:s,createdAt:new Date,downloadUrl:`/api/exports/${r}/download`,expiresAt:new Date(Date.now()+86400000)}}async exportInsightsToPDF(e,t,r){x.info(`Generating insights PDF with ${e.length} insights`);let n=`insights_${Date.now()}.pdf`,i=`/exports/${n}`;return{id:r,format:"pdf",fileName:n,filePath:i,fileSize:15360,createdAt:new Date,downloadUrl:`/api/exports/${r}/download`,expiresAt:new Date(Date.now()+86400000)}}generateExportId(){return`export_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}}class oe{config;anomalyThresholds=new Map;historicalData=new Map;constructor(e){this.config=e,this.initializeBaselines()}async detectRealTimeAnomalies(e){let t=[],r=this.anomalyThresholds.get(e.type);if(!r)return t;if(e.value>r.max||e.value<r.min)t.push({id:`anomaly_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,type:"anomaly",title:`${e.type} Anomaly Detected`,description:`Value ${e.value} is outside normal range [${r.min}, ${r.max}]`,severity:this.calculateSeverity(e.value,r),metric:e.type,dimensions:e.dimensions,value:e.value,expectedValue:(r.min+r.max)/2,confidence:this.calculateConfidence(e.value,r),actionable:!0,recommendations:this.generateRecommendations(e),detectedAt:new Date});let n=await this.detectTrendChange(e);if(n)t.push(n);return t}async detectAnomalies(e,t){let r=[],n=await this.detectSeasonalAnomalies(e,t);r.push(...n);let i=await this.detectPatternAnomalies(e,t);r.push(...i);let o=await this.detectThresholdAnomalies(e,t);return r.push(...o),r}async generateInsights(e,t){let r=[],n=await this.generatePerformanceInsights(t);r.push(...n);let i=await this.generateTrendInsights(t);r.push(...i);let o=await this.generateComparisonInsights(t);r.push(...o);let s=await this.generateRecommendationInsights(t);return r.push(...s),r.sort((a,c)=>{let u={critical:4,high:3,medium:2,low:1};return u[c.severity]-u[a.severity]})}async predictTrends(e,t){let r=this.historicalData.get(e)||[];if(r.length<7)return[];let n=[],i=r[r.length-1],o=this.calculateTrend(r);for(let s=1;s<=t;s++){let a=i+o*s,c=Math.max(0.1,1-s*0.1);n.push({date:new Date(Date.now()+s*24*60*60*1000),predicted:Math.max(0,a),confidence:c})}return n}initializeBaselines(){this.anomalyThresholds.set("message_sent",{min:0,max:1e4,stdDev:500}),this.anomalyThresholds.set("message_delivered",{min:0,max:1e4,stdDev:500}),this.anomalyThresholds.set("message_failed",{min:0,max:1000,stdDev:100}),this.anomalyThresholds.set("delivery_rate",{min:85,max:99,stdDev:5}),this.anomalyThresholds.set("error_rate",{min:0,max:15,stdDev:3})}async detectTrendChange(e){let t=this.historicalData.get(e.type)||[];if(t.push(e.value),t.length>5)t.shift();if(this.historicalData.set(e.type,t),t.length<3)return null;let r=(t[t.length-1]-t[t.length-2])/t[t.length-2];if(Math.abs(r)>0.5)return{id:`trend_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,type:"trend",title:`Sudden ${r>0?"Increase":"Decrease"} in ${e.type}`,description:`${e.type} changed by ${(r*100).toFixed(1)}% in the last period`,severity:Math.abs(r)>0.8?"high":"medium",metric:e.type,dimensions:e.dimensions,value:e.value,expectedValue:t[t.length-2],confidence:0.8,actionable:!0,recommendations:[`Monitor ${e.type} closely`,"Check for system changes or external factors"],detectedAt:new Date};return null}async detectSeasonalAnomalies(e,t){let r=[],n=t.start.getDay()===0||t.start.getDay()===6,i=t.start.getHours();if(!n&&(i<6||i>22))r.push({id:`seasonal_${Date.now()}`,type:"anomaly",title:"Unusual Activity During Off-Hours",description:`High ${e} activity detected during off-business hours`,severity:"medium",metric:e,dimensions:{timeframe:"off_hours"},value:0,confidence:0.7,actionable:!0,recommendations:["Check for automated systems or bulk operations","Verify if this is expected behavior"],detectedAt:new Date});return r}async detectPatternAnomalies(e,t){return[]}async detectThresholdAnomalies(e,t){return[]}async generatePerformanceInsights(e){let t=[],r=e.filter((n)=>n.type==="delivery_rate");for(let n of r)if(n.aggregations.avg<90)t.push({id:`performance_delivery_${Date.now()}`,type:"recommendation",title:"Low Delivery Rate Detected",description:`Delivery rate of ${n.aggregations.avg.toFixed(1)}% is below optimal threshold`,severity:n.aggregations.avg<80?"high":"medium",metric:"delivery_rate",dimensions:n.dimensions,value:n.aggregations.avg,expectedValue:95,confidence:0.9,actionable:!0,recommendations:["Check provider API status","Review template approval status","Verify recipient phone numbers","Consider switching to backup provider"],detectedAt:new Date});return t}async generateTrendInsights(e){let t=[],r=e.filter((n)=>n.type==="message_sent").sort((n,i)=>n.timestamp.getTime()-i.timestamp.getTime());if(r.length>=3){let n=this.calculateTrend(r.map((i)=>i.aggregations.sum));if(Math.abs(n)>100)t.push({id:`trend_sent_${Date.now()}`,type:"trend",title:`${n>0?"Increasing":"Decreasing"} Message Volume`,description:`Message volume is ${n>0?"increasing":"decreasing"} by approximately ${Math.abs(n).toFixed(0)} messages per day`,severity:"low",metric:"message_sent",dimensions:{},value:r[r.length-1].aggregations.sum,confidence:0.7,actionable:n<-500,recommendations:n<-500?["Investigate cause of volume decrease","Check for system issues or campaign changes"]:void 0,detectedAt:new Date})}return t}async generateComparisonInsights(e){let t=[],r=new Map;for(let i of e){let o=i.dimensions.provider;if(!o)continue;if(!r.has(o))r.set(o,{delivered:0,sent:0});let s=r.get(o);if(i.type==="message_sent")s.sent+=i.aggregations.sum;else if(i.type==="message_delivered")s.delivered+=i.aggregations.sum}let n=Array.from(r.entries());if(n.length>1){let i=n.map(([a,c])=>({provider:a,rate:c.sent>0?c.delivered/c.sent*100:0,volume:c.sent})),o=i.reduce((a,c)=>a+c.rate,0)/i.length,s=i.filter((a)=>a.rate<o-10);for(let a of s)t.push({id:`comparison_provider_${a.provider}_${Date.now()}`,type:"recommendation",title:`Provider ${a.provider} Underperforming`,description:`${a.provider} delivery rate (${a.rate.toFixed(1)}%) is significantly below average (${o.toFixed(1)}%)`,severity:a.rate<o-20?"high":"medium",metric:"provider_performance",dimensions:{provider:a.provider},value:a.rate,expectedValue:o,confidence:0.8,actionable:!0,recommendations:[`Contact ${a.provider} support team`,"Consider reducing traffic to this provider","Check provider-specific settings and configurations"],detectedAt:new Date})}return t}async generateRecommendationInsights(e){let t=[],r=new Map;for(let i of e)if(i.type==="channel_usage"){let o=i.dimensions.channel;if(o)r.set(o,(r.get(o)||0)+i.aggregations.sum)}let n=Array.from(r.values()).reduce((i,o)=>i+o,0);if(n>0){let i=r.get("sms")||0,o=r.get("alimtalk")||0;if(i/n>0.3&&o>0)t.push({id:`recommendation_channel_${Date.now()}`,type:"recommendation",title:"Consider Switching to AlimTalk",description:`${(i/n*100).toFixed(1)}% of messages are sent via SMS. AlimTalk could reduce costs`,severity:"low",metric:"channel_usage",dimensions:{optimization:"cost"},value:i,confidence:0.8,actionable:!0,recommendations:["Evaluate message types suitable for AlimTalk conversion","Create AlimTalk templates for common SMS use cases","Implement fallback logic for failed AlimTalk messages"],detectedAt:new Date})}return t}calculateSeverity(e,t){let r=Math.min(Math.abs(e-t.min)/t.stdDev,Math.abs(e-t.max)/t.stdDev);if(r>3)return"critical";if(r>2)return"high";if(r>1)return"medium";return"low"}calculateConfidence(e,t){let r=Math.min(Math.abs(e-t.min)/t.stdDev,Math.abs(e-t.max)/t.stdDev);return Math.min(0.99,0.5+r*0.15)}generateRecommendations(e){let t=[];switch(e.type){case"message_failed":t.push("Check provider API status and connectivity","Verify template approval status","Validate recipient phone numbers","Review message content for compliance");break;case"delivery_rate":t.push("Monitor provider performance metrics","Check for network connectivity issues","Verify recipient opt-in status");break;case"error_rate":t.push("Investigate error patterns and root causes","Implement retry mechanisms for transient failures","Consider switching to backup provider");break;default:t.push("Monitor the metric closely","Investigate potential causes","Check system health and performance")}return t}calculateTrend(e){if(e.length<2)return 0;let t=e.length,r=Array.from({length:t},(c,u)=>u),n=r.reduce((c,u)=>c+u,0),i=e.reduce((c,u)=>c+u,0),o=r.reduce((c,u,l)=>c+u*e[l],0),s=r.reduce((c,u)=>c+u*u,0);return(t*o-n*i)/(t*s-n*n)}}class se{config;buffer=[];batchSize=1000;flushInterval=5000;storage=new Map;constructor(e){this.config=e,this.startBatchProcessor()}async collect(e){if(this.validateMetric(e),this.buffer.push(e),this.buffer.length>=this.batchSize)await this.flush()}async collectBatch(e){for(let t of e)await this.collect(t)}async getRecentMetrics(e,t){let r=new Date(Date.now()-t),n=[];for(let i of e){let o=i.toString(),a=(this.storage.get(o)||[]).filter((c)=>c.timestamp>=r);n.push(...a)}return n.sort((i,o)=>o.timestamp.getTime()-i.timestamp.getTime())}async getMetricStats(e,t){let r=e.toString(),i=(this.storage.get(r)||[]).filter((a)=>a.timestamp>=t.start&&a.timestamp<=t.end);if(i.length===0)return{count:0,sum:0,avg:0,min:0,max:0};let o=i.map((a)=>a.value),s=o.reduce((a,c)=>a+c,0);return{count:i.length,sum:s,avg:s/i.length,min:Math.min(...o),max:Math.max(...o)}}async incrementCounter(e,t,r=1){let n={id:this.generateMetricId(),type:e,timestamp:new Date,value:r,dimensions:t};await this.collect(n)}async setGauge(e,t,r){let n={id:this.generateMetricId(),type:e,timestamp:new Date,value:r,dimensions:t};await this.collect(n)}async recordHistogram(e,t,r){let n={id:this.generateMetricId(),type:e,timestamp:new Date,value:r,dimensions:t,metadata:{metricClass:"histogram"}};await this.collect(n)}async flush(){if(this.buffer.length===0)return;let e=[...this.buffer];this.buffer=[];try{await this.persistMetrics(e)}catch(t){throw x.error("Failed to persist metrics",{},t instanceof Error?t:Error(String(t))),this.buffer.unshift(...e),t}}async cleanup(){let e=new Date(Date.now()-this.config.retentionDays*24*60*60*1000);for(let[t,r]of this.storage.entries()){let n=r.filter((i)=>i.timestamp>=e);this.storage.set(t,n)}}validateMetric(e){if(!e.id)throw Error("Metric ID is required");if(!e.type)throw Error("Metric type is required");if(typeof e.value!=="number"||isNaN(e.value))throw Error("Metric value must be a valid number");if(!e.timestamp||!(e.timestamp instanceof Date))throw Error("Invalid metric timestamp");if(!e.dimensions||typeof e.dimensions!=="object")throw Error("Metric dimensions must be an object")}async persistMetrics(e){let t=new Map;for(let r of e){let n=r.type.toString();if(!t.has(n))t.set(n,[]);t.get(n).push(r)}for(let[r,n]of t.entries()){let i=this.storage.get(r)||[];if(i.push(...n),i.sort((o,s)=>s.timestamp.getTime()-o.timestamp.getTime()),i.length>1e4)i.splice(1e4);this.storage.set(r,i)}x.info(`Persisted ${e.length} metrics`)}startBatchProcessor(){setInterval(()=>{this.flush().catch((e)=>{x.error("Batch processing failed",{},e instanceof Error?e:Error(String(e)))})},this.flushInterval),setInterval(()=>{this.cleanup().catch((e)=>{x.error("Cleanup failed",{},e instanceof Error?e:Error(String(e)))})},86400000)}generateMetricId(){return`metric_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}}class ae{config;constructor(e){this.config=e}async generateDailySummary(e){let t=new Date(e);t.setHours(0,0,0,0);let r=new Date(e);r.setHours(23,59,59,999);let n=new Date(t);return n.setDate(n.getDate()-1),this.generateReport({id:`daily_${e.toISOString().split("T")[0]}`,name:`Daily Summary - ${e.toISOString().split("T")[0]}`,description:"Daily messaging performance summary",dateRange:{start:t,end:r},filters:{},metrics:await this.calculateDailyMetrics(t,r,n),generatedAt:new Date,format:"json"})}async generateWeeklyReport(e){let t=new Date(e);t.setDate(t.getDate()+6);let r=new Date(e);return r.setDate(r.getDate()-7),this.generateReport({id:`weekly_${e.toISOString().split("T")[0]}`,name:`Weekly Report - Week of ${e.toISOString().split("T")[0]}`,description:"Weekly messaging performance analysis",dateRange:{start:e,end:t},filters:{},metrics:await this.calculateWeeklyMetrics(e,t,r),generatedAt:new Date,format:"json"})}async generateMonthlyReport(e,t){let r=new Date(e,t-1,1),n=new Date(e,t,0),i=new Date(e,t-2,1),o=new Date(e,t-1,0);return this.generateReport({id:`monthly_${e}_${t.toString().padStart(2,"0")}`,name:`Monthly Report - ${e}-${t.toString().padStart(2,"0")}`,description:"Monthly messaging performance analysis",dateRange:{start:r,end:n},filters:{},metrics:await this.calculateMonthlyMetrics(r,n,i,o),generatedAt:new Date,format:"json"})}async generateProviderReport(e,t){return this.generateReport({id:`provider_${e}_${t.start.toISOString().split("T")[0]}`,name:`Provider Performance - ${e}`,description:`Performance analysis for provider ${e}`,dateRange:t,filters:{provider:e},metrics:await this.calculateProviderMetrics(e,t),generatedAt:new Date,format:"json"})}async generateTemplateUsageReport(e){return this.generateReport({id:`template_usage_${e.start.toISOString().split("T")[0]}`,name:"Template Usage Report",description:"Analysis of template usage and performance",dateRange:e,filters:{},metrics:await this.calculateTemplateMetrics(e),generatedAt:new Date,format:"json"})}async generateCustomReport(e,t,r,n){return this.generateReport({id:`custom_${Date.now()}`,name:e,description:"Custom analytics report",dateRange:t,filters:r,metrics:await this.calculateCustomMetrics(t,r,n),generatedAt:new Date,format:"json"})}async exportToCSV(e){let t=["Metric Type","Value","Change (%)","Trend"],r=e.metrics.map((i)=>[i.type.toString(),i.value.toString(),i.change?.toFixed(2)||"0",i.trend||"stable"]);return[t,...r].map((i)=>i.map((o)=>`"${o}"`).join(",")).join(`
23
+ `)}async exportToJSON(e){return JSON.stringify(e,null,2)}async generateReport(e){return this.validateReport(e),e.metrics.sort((t,r)=>this.getMetricPriority(t.type)-this.getMetricPriority(r.type)),e}async calculateDailyMetrics(e,t,r){let n=[],i=await this.getMetricValue("message_sent",e,t),o=await this.getMetricValue("message_delivered",e,t),s=await this.getMetricValue("message_failed",e,t),a=await this.getMetricValue("message_clicked",e,t),c=new Date(r),u=new Date(r);u.setHours(23,59,59,999);let l=await this.getMetricValue("message_sent",c,u);if(n.push({type:"message_sent",value:i,change:this.calculateChange(i,l),trend:this.calculateTrend(i,l)}),i>0){let p=o/i*100,m=s/i*100,f=await this.getMetricValue("message_delivered",c,u),g=await this.getMetricValue("message_failed",c,u),h=l>0?f/l*100:0,v=l>0?g/l*100:0;n.push({type:"delivery_rate",value:p,change:this.calculateChange(p,h),trend:this.calculateTrend(p,h)}),n.push({type:"error_rate",value:m,change:this.calculateChange(m,v),trend:this.calculateTrend(m,v)})}if(o>0){let p=a/o*100,m=await this.getMetricValue("message_clicked",c,u),f=await this.getMetricValue("message_delivered",c,u),g=f>0?m/f*100:0;n.push({type:"click_rate",value:p,change:this.calculateChange(p,g),trend:this.calculateTrend(p,g)})}return n}async calculateWeeklyMetrics(e,t,r){return this.calculateDailyMetrics(e,t,r)}async calculateMonthlyMetrics(e,t,r,n){return this.calculateDailyMetrics(e,t,r)}async calculateProviderMetrics(e,t){let r=[],n=await this.getProviderPerformance(e,t);return r.push({type:"provider_performance",value:n.averageResponseTime,breakdown:{"Success Rate":n.successRate,"Error Rate":n.errorRate,"Avg Response Time":n.averageResponseTime}}),r}async calculateTemplateMetrics(e){let t=[],r=await this.getTemplateUsage(e);return t.push({type:"template_usage",value:r.totalUsage,breakdown:r.byTemplate}),t}async calculateCustomMetrics(e,t,r){let n=[];for(let i of r){let o=await this.getMetricValue(i,e.start,e.end,t),s=new Date(e.start),a=new Date(e.end),c=(e.end.getTime()-e.start.getTime())/86400000;s.setDate(s.getDate()-c),a.setDate(a.getDate()-c);let u=await this.getMetricValue(i,s,a,t);n.push({type:i,value:o,change:this.calculateChange(o,u),trend:this.calculateTrend(o,u)})}return n}async getMetricValue(e,t,r,n){return Math.floor(Math.random()*1e4)}async getProviderPerformance(e,t){return{successRate:95.5,errorRate:4.5,averageResponseTime:250}}async getTemplateUsage(e){return{totalUsage:5000,byTemplate:{auth_otp:2000,welcome:1500,notification:1000,others:500}}}calculateChange(e,t){if(t===0)return e>0?100:0;return(e-t)/t*100}calculateTrend(e,t){let r=this.calculateChange(e,t);if(Math.abs(r)<5)return"stable";return r>0?"up":"down"}getMetricPriority(e){return{message_sent:1,delivery_rate:2,error_rate:3,click_rate:4,message_delivered:5,message_failed:6,message_clicked:7,template_usage:8,provider_performance:9,channel_usage:10}[e]||99}validateReport(e){if(!e.id)throw Error("Report ID is required");if(!e.name)throw Error("Report name is required");if(!e.dateRange||!e.dateRange.start||!e.dateRange.end)throw Error("Valid date range is required");if(e.dateRange.start>=e.dateRange.end)throw Error("Invalid date range: start must be before end")}}class it{config;metricsCollector;reportGenerator;insightEngine;metrics=new Map;aggregatedMetrics=new Map;constructor(e){this.config=e,this.metricsCollector=new se(e),this.reportGenerator=new ae(e),this.insightEngine=new oe(e),this.startAggregationTasks()}async collectMetric(e){if(!this.config.enabledMetrics.includes(e.type))return;if(await this.metricsCollector.collect(e),this.config.enableRealTimeTracking)await this.processRealTimeMetric(e)}async query(e){let t=Date.now();this.validateQuery(e);let r=await this.executeQuery(e),n=await this.generateInsights(e,r),i=Date.now()-t;return{query:e,data:r,summary:{totalRecords:r.length,dateRange:e.dateRange,executionTime:i},insights:n}}async*streamMetrics(e){while(!0){let t=await this.metricsCollector.getRecentMetrics(e,1000);for(let r of t)yield r;await new Promise((r)=>setTimeout(r,1000))}}async getDashboardData(e){let t=new Date,r={start:new Date(e.start.getTime()-(e.end.getTime()-e.start.getTime())),end:e.start},n=await this.query({metrics:this.config.enabledMetrics,dateRange:e,interval:this.getOptimalInterval(e),groupBy:["provider","channel"]}),i=await this.query({metrics:this.config.enabledMetrics,dateRange:r,interval:this.getOptimalInterval(e),groupBy:["provider","channel"]}),o=this.calculateKPIs(n.data,i.data);return{timeRange:e,kpis:o,metrics:n.data,insights:n.insights,trends:this.calculateTrends(n.data,i.data)}}async detectAnomalies(e,t){return this.insightEngine.detectAnomalies(e,t)}async processRealTimeMetric(e){let t=await this.insightEngine.detectRealTimeAnomalies(e);if(t.length>0)await this.notifyAnomalies(t)}validateQuery(e){if(e.dateRange.start>=e.dateRange.end)throw Error("Invalid date range: start must be before end");let t=7776000000;if(e.dateRange.end.getTime()-e.dateRange.start.getTime()>t)throw Error("Date range too large: maximum 90 days");if(e.limit&&e.limit>1e4)throw Error("Limit too large: maximum 10000 records")}async executeQuery(e){let t=e.interval||this.getOptimalInterval(e.dateRange),r=this.generateCacheKey(e);if(this.aggregatedMetrics.has(r))return this.aggregatedMetrics.get(r);let n=await this.performAggregation(e,t);return this.aggregatedMetrics.set(r,n),n}async performAggregation(e,t){return[]}async generateInsights(e,t){return this.insightEngine.generateInsights(e,t)}getOptimalInterval(e){let r=(e.end.getTime()-e.start.getTime())/86400000;if(r<=1)return"minute";if(r<=7)return"hour";if(r<=30)return"day";if(r<=90)return"week";return"month"}calculateKPIs(e,t){return{totalMessages:this.sumMetrics(e,"message_sent"),deliveryRate:this.calculateRate(e,"message_delivered","message_sent"),errorRate:this.calculateRate(e,"message_failed","message_sent"),clickRate:this.calculateRate(e,"message_clicked","message_delivered")}}calculateTrends(e,t){return{}}sumMetrics(e,t){return e.filter((r)=>r.type.toString()===t).reduce((r,n)=>r+n.aggregations.sum,0)}calculateRate(e,t,r){let n=this.sumMetrics(e,t),i=this.sumMetrics(e,r);return i>0?n/i*100:0}generateCacheKey(e){return JSON.stringify({metrics:e.metrics.sort(),dateRange:e.dateRange,interval:e.interval,filters:e.filters,groupBy:e.groupBy?.sort()})}startAggregationTasks(){for(let e of this.config.aggregationIntervals)this.scheduleAggregation(e)}scheduleAggregation(e){let t=this.getScheduleInterval(e);setInterval(()=>{this.runAggregation(e).catch((r)=>{x.error(`Aggregation failed for interval ${e}`,{},r instanceof Error?r:Error(String(r)))})},t)}getScheduleInterval(e){switch(e){case"minute":return 60000;case"hour":return 3600000;case"day":return 86400000;case"week":return 604800000;case"month":return 2592000000;default:return 3600000}}async runAggregation(e){x.info(`Running ${e} aggregation...`)}async notifyAnomalies(e){for(let t of e)if(t.severity==="critical"||t.severity==="high")x.warn("Anomaly detected",{anomaly:t})}}function br(){return{PENDING:0,SENT:0,DELIVERED:0,FAILED:0,CANCELLED:0,UNKNOWN:0}}function _r(e,t){let r={...e};for(let n of t){let i=n.key.status;if(!i)continue;if(!Ie.includes(i))continue;r[i]=Number(n.count)||0}return r}class ot{store;initPromise;constructor(e){this.store=e.store}async init(){await this.ensureInit()}async getSummary(e,t={}){if(await this.ensureInit(),!(e.requestedAt?.start instanceof Date))throw Error("query.requestedAt.start must be a Date");if(!(e.requestedAt?.end instanceof Date))throw Error("query.requestedAt.end must be a Date");if(e.requestedAt.start.getTime()>e.requestedAt.end.getTime())throw Error("query.requestedAt.start must be <= query.requestedAt.end");if(typeof this.store.countRecords!=="function")throw Error("DeliveryTrackingStore does not support countRecords(). Use a built-in store (InMemory/SQLite/Bun.SQL) or implement countRecords().");if(typeof this.store.countBy!=="function")throw Error("DeliveryTrackingStore does not support countBy(). Use a built-in store (InMemory/SQLite/Bun.SQL) or implement countBy().");let r={requestedAtFrom:e.requestedAt.start,requestedAtTo:e.requestedAt.end,...e.providerId?{providerId:e.providerId}:{},...e.type?{type:e.type}:{}},n=await this.store.countRecords(r),i=await this.store.countBy(r,["status"]),o=_r(br(),i),{DELIVERED:s,FAILED:a}=o,c=s+a,u={total:n,byStatus:o,rates:{deliveredOfTotalPct:n>0?s/n*100:0,failedOfTotalPct:n>0?a/n*100:0,deliveredOfFinalizedPct:c>0?s/c*100:0}};if(t.includeByProviderId){let l=await this.store.countBy(r,["providerId","status"]);u.byProviderId=this.buildBreakdownMap(l,"providerId")}if(t.includeByType){let l=await this.store.countBy(r,["type","status"]);u.byType=this.buildBreakdownMap(l,"type")}return u}buildBreakdownMap(e,t){let r=new Map;for(let i of e){let o=i.key[t];if(!o)continue;let s=r.get(o);if(s)s.push(i);else r.set(o,[i])}let n={};for(let[i,o]of r.entries()){let s=o.map((m)=>({key:{status:m.key.status},count:m.count})),a=_r(br(),s),c=Object.values(a).reduce((m,f)=>m+f,0),{DELIVERED:u,FAILED:l}=a,p=u+l;n[i]={total:c,byStatus:a,rates:{deliveredOfTotalPct:c>0?u/c*100:0,failedOfTotalPct:c>0?l/c*100:0,deliveredOfFinalizedPct:p>0?u/p*100:0}}}return n}async ensureInit(){if(!this.initPromise)this.initPromise=this.store.init();await this.initPromise}}
24
+
25
+ //# debugId=A5D741FF7B31F34F64756E2164756E21
26
+ //# sourceMappingURL=index.cjs.map