import*as e from"/uxasset/externals/lodash/latest/index.jsdbx";
import {servicenowUiMetrics as t} from"/uxasset/externals/@servicenow/ui-mega/index.jsdbx";
/*__ESM_BODY_START__*/
var n={105:e=>{function t(){return e.exports=t=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},e.exports.__esModule=!0,e.exports.default=e.exports,t.apply(null,arguments)}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports}},r={};function i(e){var t=r[e];if(void 0!==t)return t.exports;var o=r[e]={exports:{}};return n[e](o,o.exports,i),o.exports}i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},i.d=(e,t)=>{for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var o={};(()=>{i.d(o,{SI:()=>Te,S1:()=>fe,u2:()=>ve,dt:()=>Ee});const n=(e=>{var t={};return i.d(t,e),t})({get:()=>{const t=e.default&&e.__esModule;return t?e.default.get:e.get||e.default&&e.default.get},isEmpty:()=>{const t=e.default&&e.__esModule;return t?e.default.isEmpty:e.isEmpty||e.default&&e.default.isEmpty},isNumber:()=>{const t=e.default&&e.__esModule;return t?e.default.isNumber:e.isNumber||e.default&&e.default.isNumber}});const r=(e=>{var t={};return i.d(t,e),t})({types:()=>{const e=t.default&&t.__esModule;return e?t.default.types:t.types||t.default&&t.default.types}}),s=(0,n.get)(window,["ux_globals","libuxf","sysprops"],{}),a=(0,n.get)(s,"glide.uxf.lib.performance.monitoring.interval",15e3),l=((0,n.get)(s,"glide.uxf.lib.performance.monitoring.enabled"),"PAGE_LOAD"),c="UXF_DIRECT_LOAD_COMPLETE",u="UXF_USER_NAV_LOAD_START",d="UXF_USER_NAV_LOAD_COMPLETE",m="UXF_INTERRUPTION_PAGE_VISIBILITY_CHANGED",p="IFRAME_LOAD_COMPLETE",f="UXF_MACROPONENT_MEASURE_CLIENT_INTERACTION_START",T="UXF_MACROPONENT_MEASURE_CLIENT_INTERACTION_END",v=new Set(["UXF_USER_BROWSER_NAV_START",m,"UXF_INTERRUPTION_MOUSEDOWN","UXF_INTERRUPTION_KEYDOWN"]),E=new Set([...v,c,d,u,p,f,T]),h=(new Set([r.types.HERO_INTERACTIVE,"NAVIGATE","UXF_DB_ENGINE_EXEC_SUCCEEDED","UXF_DB_ENGINE_EXEC_FAILED","UXF_VIEWPORT#SCRIPTED_CONDITIONS_EVALUATION_COMPLETED","UXF_VIEWPORT#ROUTE_SCRIPTED_CONDITIONS_EVALUATION_COMPLETED","CLIENT_SCRIPT",c,d]),Object.freeze({UXF_INTERRUPTION_PAGE_VISIBILITY_CHANGED:"PAGE_VISIBILITY_CHANGED",UXF_USER_BROWSER_NAV_START:"BROWSER_NAVIGATION",UXF_INTERRUPTION_MOUSEDOWN:"MOUSEDOWN",UXF_INTERRUPTION_KEYDOWN:"KEYDOWN",UXF_INTERRUPTION_TIMEOUT:"TIMEOUT"})),_="/api/now/uxmetrics/interactions",I=new Set([c,d,p,T]),g=Object.freeze({NAVIGATION:"navigation",RESOURCE:"resource"});let N=[],w=null;const R=e=>({transferSize:null==e?void 0:e.transferSize,startTime:null==e?void 0:e.startTime,responseStart:null==e?void 0:e.responseStart,responseEnd:null==e?void 0:e.responseEnd}),O=()=>N,S=function(){let{entryTypes:e=[],shouldConsiderTransferSizeZeroEntries:t=!0}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!(0,n.isEmpty)(w))return;const r=performance.now();if(r>0)for(const n of e){performance.getEntriesByType(n).filter((e=>e.startTime<=r)).forEach((e=>{const n=R(e);(t||n.transferSize>0)&&N.push(n)}))}w=new PerformanceObserver((e=>{e.getEntries().forEach((e=>{const n=R(e);(t||n.transferSize>0)&&N.push(n)}))})),w.observe({entryTypes:e})},C=()=>{(0,n.isEmpty)(w)||w.disconnect()};const y=window.requestIdleCallback||function(e){setTimeout((function(){const t=Date.now();e({didTimeout:!1,timeRemaining:()=>Math.max(0,100-(Date.now()-t))})}))};const U=e=>(e=>{if((0,n.isEmpty)(e))return[];e.sort(((e,t)=>e.responseStart-t.responseStart));let t=e[0];const r=[];for(let i=1;i<e.length;i++){if((0,n.isEmpty)(e[i]))continue;const o=e[i];o.responseStart<=t.responseEnd?t={responseStart:t.responseStart,responseEnd:Math.max(o.responseEnd,t.responseEnd)}:(r.push(t),t=o)}return r.push(t),r})(e).reduce(((e,t)=>e+(t.responseEnd-t.responseStart)),0),x=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return(0,n.get)(e,["options",t],r)},P=(e,t)=>{try{const n=e[t];return"string"!=typeof n&&null!==n?JSON.stringify(n):n}catch(n){return console.warn(`Error has occurred while stringifying the ${t}, please validate the passed ${t} JSON, ${n.message} for interaction name, ${e.name} while persisting client interaction`),"{}"}},A="record",b="sub",M="classic";function k(e){let{url:t="",selectedContent:n={},pageTitle:r}=e;const i=function(e){return e.route===M||!1===e.isSeismicApp}(n)?function(e){const t=e?decodeURIComponent(e):null,n=t&&t.match(/[$\w\-]+(?=.do[?]*)/g);return n&&("nav_to"===n[0]?n[1]:n[0])}(t):function(e,t){const{route:n,fields:r,parent:i}=null!=t?t:{},o=null==r?void 0:r.table,s=null==i?void 0:i.route;let a;return(n||s)&&(a=n===A?e?e.includes("/sub/record/")?`${b}-${A}-${o}`:`${A}-${o}`:null:`${s?`${b}-`:""}${n}${o?`-${o}`:""}`),a}(t,n);return i||r}var D=i(105),F=i.n(D);const L=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if(void 0!==i.g)return i.g;throw new Error("Unable to locate global object")}();const X=["/uxasset/externals","/uxgp","/uxpf","/uxsp","/uxab","ux_globals_minimal"],V=["ux_theme","ux_globals_experience","page_fragment_partial","component_driver_partial","uxta"];let H={hits:{},misses:{}},$=null,G=null,B=!1;navigator.serviceWorker&&navigator.serviceWorker.addEventListener("message",(function(e){const{data:t}=e,{action:r}=t;if("clientCacheMetricsResponse"===r){const{cacheMetrics:e}=t;(0,n.isEmpty)(e)||(H=e),G&&G()}}));const W=(e,t)=>{e.transferSize>0?t.push({name:e.name,time:e.startTime,hit:!1}):t.push({name:e.name,time:e.startTime,hit:!0})},j=async(e,t)=>{await async function(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:500;if(navigator.serviceWorker&&null!==(e=navigator.serviceWorker)&&void 0!==e&&e.controller){if(B||(B=!0,$=new Promise((e=>{G=e,navigator.serviceWorker.controller.postMessage({action:"requestClientCacheMetrics"})}))),null!==$){const e=new Promise(((e,n)=>{setTimeout((()=>{n(new Error("Cache metrics snapshot request timed out."))}),t)}));try{await Promise.race([$,e])}catch(e){console.error(e)}finally{B=!1}}}else console.warn("Service worker is not available")}();const n=window.performance.getEntriesByType("resource").filter((n=>n.startTime>=e&&n.startTime<=t));if(n.length<1)return[];const r=(e=>{const t=[];if(e.length<1)return t;for(const n of e)X.some((e=>n.name.includes(e)))?H.hits[n.name]?t.push({name:n.name,time:n.startTime,hit:!0}):H.misses[n.name]?t.push({name:n.name,time:n.startTime,hit:!1}):W(n,t):V.some((e=>n.name.includes(e)))&&W(n,t);return t})(n);return r},z=(e,t,n)=>e.filter((e=>e.time>=t&&e.time<=n));let Y=new Map;const q=new Map,K=new Map;let J=!1,Z=null;const Q=new Map,ee=()=>J;let te=[];const ne=e=>{const t=e.filter((e=>E.has(e.event)));return te=te.concat(t),te};function re(){te.length=0}const ie=(e,t)=>{e.forEach(((n,r)=>{(null==n?void 0:n.markTime)<t-5*a&&e.delete(r)}))},oe=e=>{if(0===e.length)return[];const t=[],n=window.performance.now();return ie(q,n),ie(K,n),e.forEach((e=>{const n=(e=>{var t,n,r;return[u,d].includes(e.event)?`${(null===(t=e.options)||void 0===t?void 0:t.experiencePath)||(null===(n=e.options)||void 0===n?void 0:n.context.path)}~${e.options.screenKey}`:e.event===p?`now/nav/ui~${(null===(r=e.options)||void 0===r?void 0:r.screenRoute)||""}`:null==e?void 0:e.interactionId})(e);if(e.event===u?(Z=e,q.set(n,e)):e.event===f?(Z=e,K.set(n,e)):(e=>{var t;return ee()&&((e.event===d||e.event===T)&&"classic"!==(null==e||null===(t=e.options)||void 0===t?void 0:t.screenRoute)||e.event===p)})(e)&&Q.set(e.markTime,Z),v.has(e.event)){if(ee()&&0===q.size&&0===K.size)return void Y.clear();r=e.markTime,i=e.event,Y.set(r,i)}var r,i;if(se(e.event)){var o;const r=((e,t)=>{return ee()?e.event!==d&&e.event!==p||!q.has(t)?e.event===T&&K.has(t)?null===(r=K.get(t))||void 0===r||null===(i=r.options)||void 0===i?void 0:i.time:-1:null===(n=q.get(t))||void 0===n?void 0:n.markTime:0;var n,r,i})(e,n);if(null!==(o=e.options)&&void 0!==o&&o.isDocumentHidden)e.options.interruption=h.UXF_INTERRUPTION_PAGE_VISIBILITY_CHANGED;else if(e.event===p||-1!==r&&!x(e,"totalUiTimeMeasurementTimedOut",!1)){const t=((e,t)=>{let n="";const r=Y.entries();for(let i of r){const[r,o]=i;if(r>=e&&r<=t){if(o===m)return o;n=o}}return n})(r,e.markTime);e.options.interruption=h[t]}else e.options.interruption=h.UXF_INTERRUPTION_TIMEOUT;var s,a;if(e.event===d)e.options.url=(null===(s=q.get(n))||void 0===s||null===(a=s.options)||void 0===a?void 0:a.url)||e.options.url||"",e.options.startTime=r,q.delete(n);e.event===T&&(e.options.startTime=r,K.delete(n)),e.event===c&&(J=!0),t.push(e)}})),t},se=e=>I.has(e);const ae=async()=>{const e=te,t=[];if(e.length<1)return t;const r=ee(),{start:i,end:o}=((e,t)=>{var r;if(!t)return{start:0,end:e[e.length-1].markTime};const i=e.find((e=>[u,f].includes(e.event)));var o;return(0,n.isEmpty)(i)?{start:(null===(o=Z)||void 0===o?void 0:o.markTime)||0,end:e[e.length-1].markTime}:{start:(null===(r=i.options)||void 0===r?void 0:r.startTime)||0,end:e[e.length-1].markTime}})(e,r),s=oe(e);if(s.length<1)return re(),t;re();return((e,t)=>{for(const r of e){var n;const e=z(t,(null===(n=r.options)||void 0===n?void 0:n.startTime)||0,r.markTime),i=e.length;if(i<1){r.options.clientCacheHitRate=100;continue}const o=e.filter((e=>e.hit)).length;r.options.clientCacheHitRate=o/i*100}return e})(s,await j(i,o)).forEach((e=>{var r,i,o,s,a,u;if((![d,c].includes(e.event)||"classic"!=(null===(r=e.options)||void 0===r?void 0:r.screenRoute))&&se(e.event)){var m;const r={};r.type=(e=>{var t;let n=l;switch(e.event){case T:n="IN_PAGE_INTERACTION";break;case d:n="NAVIGATION";break;case p:n=(null===(t=e.options)||void 0===t?void 0:t.type)||n}return n})(e),r.pageName=function(e){let{options:{url:t,screenRoute:n,screenFields:r,screenParams:i,screenParent:o,screenTitle:s}}=e;return k({url:t,selectedContent:{route:n,fields:r,params:i,parent:o},pageTitle:s})}(e),r.interactionId=x(e,"uxrInteractionId",(0,n.get)(window,"nowUiFramework.uxrInteractionId",""));let c=0;if(r.type===l)r.networkTime=function(){const e=performance.getEntries()[0];return e.responseEnd-e.requestStart}(),r.uxfPageProcessorTime=null!==(o=null===(s=window)||void 0===s||null===(a=s.nowUiFramework)||void 0===a||null===(u=a.metrics)||void 0===u?void 0:u.uxPageProcessorTime)&&void 0!==o?o:0,c=(e=>{var t,n;const r=null!==(t=null===(n=e.options)||void 0===n?void 0:n.totalUiTime)&&void 0!==t?t:0,i=O().filter((e=>e.responseEnd<=r)),o=performance.getEntriesByType(g.NAVIGATION)[0];return i.push(R(o)),U(i)})(e);else{if(Q.has(e.markTime)){c=((e,t)=>{var r,i,o;if((0,n.isEmpty)(e))return 0;const s=(null==e||null===(r=e.options)||void 0===r?void 0:r.time)||e.markTime,a=s+(null!==(i=null==t||null===(o=t.options)||void 0===o?void 0:o.totalUiTime)&&void 0!==i?i:0),l=O().filter((e=>e.startTime>=s&&e.responseEnd<=a));return U(l)})(Q.get(e.markTime),e),Q.delete(e.markTime)}const t=x(e,"totalNetworkTime",0);t&&(r.networkTime=t)}window.__ux_metrics_contentDownloadTime=c,0!==(i=e.markTime)&&(0,n.isNumber)(i)&&(N=N.filter((e=>e.startTime>i))),r.beforeLoadTime=x(e,"beforeLoad",0),r.afterLoadTime=x(e,"afterLoad",0),r.contentDownloadTime=c;const f=x(e,"clientCacheHitRate",100);window.__clientCacheHitRate=f,r.clientCacheHitRate=f,r.screenRoute=x(e,"screenRoute",""),r.screenFields=x(e,"screenFields",""),r.screenParams=x(e,"screenParams",""),r.experienceId=x(e,"experienceId",""),r.experienceName=x(e,"experienceName",""),r.pageVarientSysId=x(e,"macroponentSysId",""),r.totalUiTime=x(e,"totalUiTime",0),"classic"===(null===(m=e.options)||void 0===m?void 0:m.screenRoute)&&(window.coreui_total_ui_time=r.totalUiTime),r.interruption=x(e,"interruption","none"),r.name=x(e,"name",""),r.data=x(e,"data",{}),r.ucCacheHit=x(e,"hit",0),r.ucCacheMiss=x(e,"miss",0),r.ucCacheError=x(e,"error",0),r.ucCacheStale=x(e,"stale",0),r.ucCacheHitRate=x(e,"hitRate",0),r.ucCacheBuildTime=x(e,"buildTime",0),r.timeToInteraction=0,r.referrer=x(e,"url",""),t.push(r)}})),t},le=e=>e.map((e=>(e=>({interactionId:e.interactionId,application:e.experienceName,applicationId:e.experienceId,name:e.name,type:e.type,referrer:e.referrer,uxfPageProcessorTime:e.uxfPageProcessorTime,data:P(e,"data"),clientCacheHitRate:e.clientCacheHitRate,uxfScreenRoute:e.screenRoute,uxfScreenFields:P(e,"screenFields"),uxfScreenParams:P(e,"screenParams"),totalUiTime:e.totalUiTime,interruption:e.interruption,pageName:e.pageName,uiTimeBeforeLoad:e.beforeLoadTime,uiTimeAfterLoad:e.afterLoadTime,networkTime:e.networkTime,contentDownloadTime:e.contentDownloadTime,ucCacheHit:e.ucCacheHit,ucCacheMiss:e.ucCacheMiss,ucCacheStale:e.ucCacheStale,ucCacheError:e.ucCacheError,ucCacheHitRate:e.ucCacheHitRate,ucCacheBuildTime:e.ucCacheBuildTime,pageVarientSysId:e.pageVarientSysId,timeToInteraction:e.timeToInteraction}))(e)));async function ce(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:_;const n=await ae();if(!n.length)return new Promise((e=>{e(null)}));const r=le(n),i=function(){let e=arguments.length>1?arguments[1]:void 0,t=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return fetch(arguments.length>0&&void 0!==arguments[0]?arguments[0]:_,F()({},t&&{keepalive:!0},{method:"POST",headers:{"content-type":"application/json","X-UserToken":L.g_ck},body:e})).then((()=>!0)).catch((e=>(console.warn(`Error has occurred with postClientInteractionRecord, error message: ${e.message}`),!1)))}(t,JSON.stringify(r),e);return i}let ue;const de=()=>{ue=setInterval((()=>y((async()=>await ce()))),a)},me=()=>{clearInterval(ue)};let pe={};function fe(e){let{config:t}=e;return S({entryTypes:[g.RESOURCE],shouldConsiderTransferSizeZeroEntries:!1}),pe=t,new Promise((e=>{de(),e()}))}function Te(e){let{marks:t=[],immediate:n}=e;return async function(e,t){ne(e),t&&(me(),await ce(t),de(),C())}(t,n)}const ve="clientInteraction",Ee="performance"})();var s=o.SI,a=o.S1,l=o.u2,c=o.dt;
/*__ESM_BODY_END__*/
export{s as handleMarks,a as init,l as name,c as type};
//# sourceMappingURL=/uxasset/externals/@devsnc/ux-metrics-client-interaction-subscriber/index.min.js.map.jsdbx