UNPKG

zipyai

Version:

SDK for zipy

1 lines 177 kB
import{record as e,EventType as n,IncrementalSource as t,pack as r,MouseInteractions as i}from"zipy-rrweb";import{v4 as o}from"uuid";import{strToU8 as s,zlibSync as a,strFromU8 as c}from"fflate";import u from"lz-string";var l,d,f;!function(e){e[e.Mutation=0]="Mutation",e[e.MouseMove=1]="MouseMove",e[e.MouseInteraction=2]="MouseInteraction",e[e.Scroll=3]="Scroll",e[e.ViewportResize=4]="ViewportResize",e[e.Input=5]="Input",e[e.TouchMove=6]="TouchMove",e[e.MediaInteraction=7]="MediaInteraction",e[e.StyleSheetRule=8]="StyleSheetRule",e[e.CanvasMutation=9]="CanvasMutation",e[e.Font=10]="Font",e[e.ReplayerEvent=11]="ReplayerEvent",e[e.ConsoleInfo=50]="ConsoleInfo",e[e.ConsoleError=51]="ConsoleError",e[e.ConsoleWarning=52]="ConsoleWarning",e[e.ConsoleDebug=53]="ConsoleDebug",e[e.Error=70]="Error",e[e.RangeError=71]="RangeError",e[e.ReferenceError=72]="ReferenceError",e[e.TypeError=73]="TypeError",e[e.SyntaxError=74]="SyntaxError",e[e.URIError=75]="URIError",e[e.EvalError=76]="EvalError",e[e.UnhandledRejection=77]="UnhandledRejection",e[e.BROWSERDATA=100]="BROWSERDATA",e[e.NAVIGATION=101]="NAVIGATION",e[e.Online=102]="Online",e[e.Offline=103]="Offline",e[e.XHR=104]="XHR",e[e.WSOPEN=105]="WSOPEN",e[e.WSCLOSE=106]="WSCLOSE",e[e.WSMESSAGE=107]="WSMESSAGE",e[e.WSERROR=108]="WSERROR",e[e.Fonts=109]="Fonts",e[e.Link=110]="Link",e[e.Css=111]="Css",e[e.Image=112]="Image",e[e.Js=113]="Js",e[e.Media=114]="Media",e[e.ZipyLogMessage=115]="ZipyLogMessage",e[e.ZipyLogException=116]="ZipyLogException",e[e.ZipyLogFrontendError=117]="ZipyLogFrontendError",e[e.ZipyLogNetworkError=118]="ZipyLogNetworkError",e[e.Performance=119]="Performance",e[e.PerfNavigation=120]="PerfNavigation",e[e.OtherNetworkCall=121]="OtherNetworkCall",e[e.WebVitals=122]="WebVitals",e[e.NavigationStart=123]="NavigationStart",e[e.DEBUG_INFO=124]="DEBUG_INFO",e[e.CustomEvent=125]="CustomEvent",e[e.CpuUsage=126]="CpuUsage",e[e.MemoryUsage=127]="MemoryUsage"}(l||(l={})),function(e){e[e.MESSAGESEND=0]="MESSAGESEND",e[e.MESSAGERECEIVED=1]="MESSAGERECEIVED",e[e.SOCKETCLOSE=2]="SOCKETCLOSE",e[e.SOCKETERROR=3]="SOCKETERROR",e[e.SOCKETOPEN=4]="SOCKETOPEN"}(d||(d={})),function(e){e[e.ELEMENT=0]="ELEMENT",e[e.EVENT=1]="EVENT",e[e.FIRST_INPUT=2]="FIRST_INPUT",e[e.LARGEST_CONTENTFUL_PAINT=3]="LARGEST_CONTENTFUL_PAINT",e[e.LAYOUT_SHIFT=4]="LAYOUT_SHIFT",e[e.LONGTASK=5]="LONGTASK",e[e.MARK=6]="MARK",e[e.MEASURE=7]="MEASURE",e[e.NAVIGATION=8]="NAVIGATION",e[e.PAINT=9]="PAINT",e[e.RESOURCE=10]="RESOURCE"}(f||(f={}));var p,g,v,m="zipy",h="rrweb";!function(e){e[e.POSTENDUSERINFOANDGETUSERCONFIG=0]="POSTENDUSERINFOANDGETUSERCONFIG",e[e.POSTENDUSERINFO=1]="POSTENDUSERINFO",e[e.GETUSERCONFIG=2]="GETUSERCONFIG"}(p||(p={})),function(e){e[e.ANONYMS=0]="ANONYMS",e[e.IDENTIFIED=1]="IDENTIFIED"}(g||(g={})),function(e){e[e.NORECORDING=0]="NORECORDING",e[e.RECORDINGPENDING=1]="RECORDINGPENDING",e[e.RECORDINGSUCCESSFUL=2]="RECORDINGSUCCESSFUL"}(v||(v={}));var y,w,b,S,E="logEvent",I="exceptionEvent",T="errorEvent",k=1024,C="startIframeRecording",z="stopIframeRecording",R="iframeContentLoaded";(S=y||(y={})).DEBUG="1",S.WARNING="2",S.ERROR="3",S.LOG="4",function(e){e[e.BLOCKING=0]="BLOCKING",e[e.NON_BLOCKING=1]="NON_BLOCKING"}(w||(w={})),function(e){e.session_data="_zsession-data",e.total_data_sent="_ztotal-data-sent",e.enduser_last_activity_time="_zenduser-last-activity-time",e.last_activity_time="_zlast-activity-time",e.utms="_utms"}(b||(b={}));var N,P=/^(?!-)[A-Za-z0-9-]+([\-\.]{1}[a-z0-9]+)*\.[A-Za-z]{2,6}$/,O=/^(https?|ftp):\/\/(([a-z\d]([a-z\d-]*[a-z\d])?\.)+[a-z]{2,}|localhost)(\/[-a-z\d%_.~+]*)*(\?[;&a-z\d%_.~+=-]*)?(\#[-a-z\d_]*)?$/i,x=499;!function(e){e[e.FCP=0]="FCP",e[e.FP=1]="FP",e[e.FID=2]="FID",e[e.CLS=3]="CLS",e[e.LCP=4]="LCP"}(N||(N={}));var U,D,A,L={"Content-Type":"application/json","Content-Encoding":"gzip"};!function(e){e.INIT="init",e.REINIT="reinit",e.PAGE_OUT="pageout"}(U||(U={})),function(e){e.PAGELOAD="pageload",e.VISIBLE="visibility visible",e.VISIBLEFOCUSED="visible and focused",e.HIDDEN="visibility hidden",e.IDENTIFY="identify",e.ANONYMIZE="anonymize",e.STREAMDATARECORDINGPAUSE="streamdata recording paused",e.STREAMDATAEXPIRE="streamdata session expired",e.FOCUS="focus",e.BLUR="blur",e.NA=""}(D||(D={})),function(e){e[e.IDLE=0]="IDLE",e[e.PENDING=1]="PENDING",e[e.SUCCESS=2]="SUCCESS",e[e.FAILED=3]="FAILED"}(A||(A={}));var _,F=["utm_source","utm_medium","utm_term","utm_content","utm_campaign"];!function(e){e[e.STOP=0]="STOP",e[e.START=1]="START"}(_||(_={}));var M={streamMgrUrl:"https://services.zipy.ai/sdk-session-manager/v2/enduser-info",registerSessionUrl:"https://services.zipy.ai/sdk-session-manager/v1/register-sdk-session",notifyUserURL:"https://services.zipy.ai/sdk-session-manager/v1/nu",sdkVersion:"1.0.59",errorUrl:"divolte.collector",streamMgrRetryCount:5,zipyDeploymentEnviornment:"Production",sdkLoopTime:1e3,perfLoopTime:5e3,ignoreEmptyErros:!0,ignoreLargeResponse:!0,debugLogs:!1,sessionLinkUrl:"https://app.zipy.ai",isNPM:!0,streamMgrRetryDelay:100,maxPayloadSize100KB:102400},B=!1;function q(e){B&&console.info(m,e)}function G(e){B&&console.debug(m,e)}function j(e){B&&console.log(m,e)}function W(e){B&&console.error(m,e)}function J(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function H(e,n){var t="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(t)return(t=t.call(e)).next.bind(t);if(Array.isArray(e)||(t=function(e,n){if(e){if("string"==typeof e)return J(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?J(e,n):void 0}}(e))||n&&e&&"number"==typeof e.length){t&&(e=t);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function V(){return V=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)({}).hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},V.apply(null,arguments)}function Z(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(Z=function(){return!!e})()}function K(e,n){return K=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,n){return e.__proto__=n,e},K(e,n)}var X=new Map;function Y(e){try{var n=window.localStorage.getItem(e);return q("inside zLocalStorageGetItem for key :"+e+" and value :"+n),!n&&(q("fetched value from hashmap :"+(n=X.get(e))),n)?(q("Going to update local storage:"),function(){try{q("inside localStorageUpdate function");for(var e,n=H(X.entries());!(e=n()).done;){var t=e.value;window.localStorage.getItem(t[0])||(q("Going inside localStorageUpdate-2 for key :"+t[0]+" and value :"+t[1]),$(t[0],t[1]))}}catch(e){W("inside updateLocalStorage catch block ${e.message}")}}(),n):n}catch(e){return void W("inside zLocalStorageGetItem catch block ${e.message}")}}function $(e,n){try{q("inside zLocalStorageSetItem for key :"+e+" and value :"+n),X.set(e,n),window.localStorage.setItem(e,n)}catch(e){W("inside zLocalStorageSetItem catch block ${e.message}")}}function Q(e){try{q("inside zLocalStorageRemoveItem for key :"+e),X.delete(e),window.localStorage.removeItem(e)}catch(e){W("inside zLocalStorageSetItem catch block ${e.message}")}}function ee(){try{for(var e=Object.keys(localStorage),n=0;n<e.length;n++)["zsession-blocked-info","session-data","zId","zenduser-info-temp","zenduser-info","last-activity-time","pack","zsdk-config","is-api-key-valid","zenduser-last-activity-time","ztotal-data-sent"].includes(e[n])&&(X.set(e[n],localStorage.getItem(e[n])),q("updated value in map is :"+X.get(e[n])))}catch(e){W("inside zLocalStorgeMapUpdate catch block ${e.message}")}}function ne(){var e=Y("zsdk-config");if(e)try{return JSON.parse(e)}catch(e){return void W("Failed to parse sdk Config Data")}}function te(e){if(e)try{q("Updating zsession-blocked-info"+JSON.stringify(e)),$("zsession-blocked-info",JSON.stringify(e))}catch(e){W("Failed to stringify zsession-blocked-info ")}}function re(e){var n=Ge.getInstance(),t={isBlocked:!1,blockedEndTime:0,apiKey:e};try{n.sessionBlockInfo=t,q("Updating zsession-blocked-info"+JSON.stringify(t)),$("zsession-blocked-info",JSON.stringify(t))}catch(e){W("Failed to stringify zsession-blocked-info ")}}function ie(){var e=Y("zsession-blocked-info"),n=Ge.getInstance();if(e)try{var t=JSON.parse(e);return n.sessionBlockInfo=t,t}catch(e){return void W("Failed to parse zsession-blocked-info")}}var oe=/*#__PURE__*/function(){function e(){this.rootDomain="",this.releaseVer="",this.recordOnlyIframe=!1,this.proxyURL="",this.rootDomain="",this.releaseVer="",this.recordOnlyIframe=!1,this.proxyURL=""}var n=e.prototype;return n.saveOptions=function(e){this.releaseVer=e.releaseVer?e.releaseVer:this.releaseVer,this.rootDomain=this.isValidRootDomain(e.rootDomain)?e.rootDomain:this.rootDomain,this.recordOnlyIframe="boolean"==typeof e.recordOnlyIframe?e.recordOnlyIframe:this.recordOnlyIframe,this.proxyURL=this.isValidProxyURL(e.proxyURL)?e.proxyURL:this.proxyURL},n.isValidRootDomain=function(e){return!(!e||!new RegExp(P).test(e))},n.isValidProxyURL=function(e){return!(!e||!new RegExp(O).test(e))},e.getInstance=function(){return this.instance||(this.instance=new e),this.instance},e}();function se(e,n){try{var t=e()}catch(e){return n(e)}return t&&t.then?t.then(void 0,n):t}oe.instance=void 0;var ae=function e(n,t,r){try{return Promise.resolve(se(function(){var i=oe.getInstance(),o=new URL(n+"/"+t.apiKey),s=new URL((i.proxyURL?i.proxyURL:o.origin)+o.pathname);return Promise.resolve(fetch(s.href,{method:"POST",headers:Ve(o.origin,i.proxyURL,{"Content-Type":"application/json"}),body:JSON.stringify(t)})).then(function(i){if(i.ok)return G("Response status = "+i.status),!0;if(G("Error :: Response status = "+i.status),r>0){var o=ve(M.streamMgrRetryCount-r,M.streamMgrRetryDelay);return new Promise(function(i){setTimeout(function(){i(e(n,t,r-1))},o)})}return W("Not able to send data after all retries"),!1})},function(e){return W("Not able to get response from server with ERROR: "+e),!1}))}catch(e){return Promise.reject(e)}},ce=function e(n,t,r){try{return Promise.resolve(se(function(){var i=Qe(),o=oe.getInstance();return Promise.resolve(fetch(n,{method:"POST",headers:Ve(i.customEventUrl,o.proxyURL,L),body:JSON.stringify(t)})).then(function(i){if(i.ok)return G("Response status = "+i.status),!0;if(G("Error :: Response status = "+i.status),r>0){var o=ve(M.streamMgrRetryCount-r,M.streamMgrRetryDelay);return new Promise(function(i){setTimeout(function(){i(e(n,t,r-1))},o)})}return W("Not able to send data after all retries"),!1})},function(e){return W("Not able to get response from server with ERROR: "+e),!1}))}catch(e){return Promise.reject(e)}},ue=function e(n,t,r,i,o){void 0===t&&(t=5),void 0===o&&(o={});try{return Promise.resolve(se(function(){var s=oe.getInstance(),a=new URL(n),c=new URL((s.proxyURL?s.proxyURL:a.origin)+a.pathname);return null!=r&&Object.keys(r).forEach(function(e){return c.searchParams.append(e,r[e])}),Promise.resolve(fetch(c.href,{method:"POST",headers:Ve(a.origin,s.proxyURL,{"Content-Type":"application/json"}),body:JSON.stringify(i)})).then(function(s){if(s.ok)return G("postDataOnServer :: Response status = "+s.status),Promise.resolve(s.json()).then(function(e){return G("postDataOnServer :: Response JSON = "+e),e});if(404==s.status)return $("is-api-key-valid","false"),he(!1),!1;if(G("Error :: Response status = "+s.status),t>0){var a=ve(M.streamMgrRetryCount-t,M.streamMgrRetryDelay);return new Promise(function(s){setTimeout(function(){s(e(n,t-1,r,i,o))},a)})}return W("Not able to post enduser config after multiple retries"),!1})},function(e){return W("Not able to get response from server with ERROR: "+e),!1}))}catch(e){return Promise.reject(e)}},le=function e(n,t,r){try{return Promise.resolve(se(function(){var i=Qe(),o=oe.getInstance();return Promise.resolve(fetch(n,{method:"POST",headers:Ve(i.pagePerfUrl,o.proxyURL,L),body:JSON.stringify(t)})).then(function(i){if(i.ok)return G("Response status = "+i.status),!0;if(G("Error :: Response status = "+i.status),r>0){var o=ve(M.streamMgrRetryCount-r,M.streamMgrRetryDelay);return new Promise(function(i){setTimeout(function(){i(e(n,t,r-1))},o)})}return W("Not able to send data after all retries"),!1})},function(e){return W("Not able to get response from server with ERROR: "+e),!1}))}catch(e){return Promise.reject(e)}},de=function e(n,t,r){try{return Promise.resolve(se(function(){var i=Qe(),o=oe.getInstance();return Promise.resolve(fetch(n,{method:"POST",headers:Ve(i.heatMapUrl,o.proxyURL,L),body:JSON.stringify(t)})).then(function(i){if(i.ok)return G("Response status = "+i.status),!0;if(G("Error :: Response status = "+i.status),r>0){var o=ve(M.streamMgrRetryCount-r,M.streamMgrRetryDelay);return new Promise(function(i){setTimeout(function(){i(e(n,t,r-1))},o)})}return W("Not able to send data after all retries"),!1})},function(e){return W("Not able to get response from server with ERROR: "+e),!1}))}catch(e){return Promise.reject(e)}},fe=function e(n,t,r){try{return Promise.resolve(se(function(){var i=Qe(),o=oe.getInstance();return Promise.resolve(fetch(n,{method:"POST",headers:Ve(i.perfUrl,o.proxyURL,L),body:JSON.stringify(t)})).then(function(i){if(i.ok)return G("Response status = "+i.status),!0;if(G("Error :: Response status = "+i.status),r>0){var o=ve(M.streamMgrRetryCount-r,M.streamMgrRetryDelay);return new Promise(function(i){setTimeout(function(){i(e(n,t,r-1))},o)})}return W("Not able to send data after all retries"),!1})},function(e){return W("Not able to get response from server with ERROR: "+e),!1}))}catch(e){return Promise.reject(e)}},pe=function e(n){var t=n.divolteUrl,r=n.requestData,i=n.failureRetryCount;try{return Promise.resolve(se(function(){var n=Qe(),o=oe.getInstance(),s={"Content-Type":r instanceof Uint8Array?"application/octet-stream":"application/json","Content-Encoding":"gzip"};return Promise.resolve(fetch(t,{method:"POST",headers:Ve(n.streamUrl,o.proxyURL,s),body:r})).then(function(n){if(n.ok)return Qe()&&Qe().splitSessionSize>0&&function(){try{var e=Ge.getInstance(),n=Y("ztotal-data-sent")?Y("ztotal-data-sent"):"0",t=parseInt(n)+e.tempTotalDataSent;j("Current data size "+n),j("Merged data size "+t),e.isCheckoutFlowTriggered&&e.isCheckoutPresentInCurrentChunk?(e.isCheckoutPresentInCurrentChunk=!1,e.tempTotalDataSent=0,e.isCheckoutFlowTriggered=!1,t=0):t>Qe().splitSessionSize&&!e.isCheckoutFlowTriggered&&function(){try{j("Trigger checkout flow triggered");var e=Qe();!function(e){try{Pn(),setTimeout(function(){return Nn(e,void 0,!0)},0)}catch(e){W("failed to restart recording for iframe:")}}(e),Ge.getInstance();var n=window.zRrwebStop;"function"==typeof n&&n(),window.zNextRrwebMetaIsCheckout=!0,jn(e.inputMasking)}catch(e){W("Error in checking full snapshot. Error is - "+e.message)}}(),$("ztotal-data-sent",JSON.stringify(t))}catch(e){W("Error in checking data size. Error is - "+e.message)}}(),G("Response status = "+n.status),!0;if(G("Error :: Response status = "+n.status),i>0){var o=ve(M.streamMgrRetryCount-i,M.streamMgrRetryDelay);return new Promise(function(n){setTimeout(function(){n(e({divolteUrl:t,requestData:r,failureRetryCount:i-1}))},o)})}return W("Not able to send data after all retries"),!1})},function(e){return W("Not able to get response from server with ERROR: "+e),!1}))}catch(e){return Promise.reject(e)}},ge=!0;function ve(e,n,t){return void 0===t&&(t=2),(e>0?e*n:n)+1e3*Math.pow(t,e)}function me(){return ge}function he(e){ge=e}function ye(){var e=Y("zId");return e||($("zId",e=Je()),e)}function we(){var e=Y("zenduser-info");if(e)try{return JSON.parse(e)}catch(e){return void W("Failed to parse end user Info data")}}function be(){var e=Y("zenduser-info-temp");if(e)try{return JSON.parse(e)}catch(e){return void W("Failed to parse end user Info data")}}function Se(e){ye(),we()||q("Creating new enduser-info"+JSON.stringify(e));try{q("Updating enduser-info"+JSON.stringify(e)),$("zenduser-info",JSON.stringify(e))}catch(e){W("Failed to stringify enduser-info ")}}function Ee(e){ye(),we()||q("Creating new enduser-info-temp"+JSON.stringify(e));try{q("Updating enduser-info-temp"+JSON.stringify(e)),$("zenduser-info-temp",JSON.stringify(e))}catch(e){W("Failed to stringify enduser-info-temp ")}}function Ie(){be()?(q("Removing zenduser-info-temp"),Q("zenduser-info-temp")):q("zenduser temp Data dosen't exists")}function Te(){var e=we();return e?e.userType===g.IDENTIFIED:(q("zenduser-info doesn't exists"),!1)}function ke(e,n){e.euId=0,e.euZName="",e.isBlocked=!1,e.zAnonymsUserInfo={euId:0,euZName:"",zId:null!=n?n:""}}function Ce(e,n){var t,r,i=ye();(null==e||null==(t=e.zAnonymsUserInfo)?void 0:t.zId)===i?(q("ZId match"),e.euId=e.zAnonymsUserInfo.euId,e.euZName=e.zAnonymsUserInfo.euZName):(q("ZId dosen't match Zid : "+i+" and Anonyms user Zid: "+(null==e||null==(r=e.zAnonymsUserInfo)?void 0:r.zId)),ke(e,i)),n?Ee(e):Se(e)}function ze(){if(be())return q("Temp storage has some pending data to post"),!0;var e=we();if(!e)return q("zenduser Data dosen't exists"),!0;if(0===e.euId)return q("Euid value is 0, required to fetch data again"),!0;if(e.userType===g.ANONYMS){var n,t;if(null==e||null==(n=e.zExternalUserInfo)?void 0:n.externalId)return q("External User details exists, and userType is ANONYMS need to post data"),!0;var r=ye();if((null==(t=e.zAnonymsUserInfo)?void 0:t.zId)!==r)return q("ZId dosen't match Zid : "+r+" and Anonyms user Zid: "+e.zAnonymsUserInfo.zId),ke(e,r),Se(e),!0;q("ZId match No need to update for anonyms user")}return!1}var Re=function(e){try{var n,t,r=document.cookie,i=null==r?void 0:r.split(";"),o=!1;return i.forEach(function(r){var i=r.split("=");if(i[0].trim()===e){var s=i[1].split(",");s.length>1?(t=Oe(s),o=!0):n=i[1]?i[1]:""}}),o?t:n}catch(e){return void W("inside zGetCookie catch block")}},Ne=function(e,n){var t=oe.getInstance(),r=new Date((new Date).valueOf()+216e5).toUTCString();document.cookie=e+"="+n+"; path=/; domain="+t.rootDomain+"; expires="+r+";"},Pe=function(e){var n=oe.getInstance(),t=new Date((new Date).valueOf()-1e3).toUTCString();document.cookie=e+'=""; path=/; domain='+n.rootDomain+"; expires="+t+";"},Oe=function(e){var n={};return e.forEach(function(e){var t=e.split("#");n[t[0]]=t[1]?t[1]:""}),n||{}},xe=function(e){var n=Re(e+b.enduser_last_activity_time),t=Re(e+b.total_data_sent)?Re(e+b.total_data_sent):"0",r=Re(e+b.session_data),i=Re(e+b.last_activity_time),o=Ge.getInstance();try{if(i){(n||r||i)&&(o.isSessionExpired=!1);var s="0:"+Je().replace("-",":");$("ztotal-data-sent",t),$("last-activity-time",i),$("zenduser-last-activity-time",n),o.enduserLastActivityTime=n,o.lastActivityTime=i;var a=we()||{},c=ie()||{},u=De()||{};a.isBlocked="true"===(null==r?void 0:r.isBlocked),a.euId=Number(null==r?void 0:r.euId),a.zAnonymsUserInfo.zId=(null==r?void 0:r.zId)||"",Te()||(a.zExternalUserInfo.externalId=(null==r?void 0:r.externalId)||""),c.isBlocked="true"===(null==r?void 0:r.isBlocked),u.dSession=s,u.sessionId=(null==r?void 0:r.sessionId)||"",u.sdkKey=(null==r?void 0:r.sdkKey)||"",$("zId",(null==r?void 0:r.zId)||""),te(c),$("zenduser-info",JSON.stringify(a)),$("zenduser-info-temp",JSON.stringify(a)),$("session-data",JSON.stringify(u))}}catch(e){return void W("inside zSetLocalStorageDataFromCookie catch block")}},Ue=function(e){var n=function(){try{var e=we(),n=ie(),t=De()||{},r=Y("zId"),i=Y("last-activity-time"),o=Y("ztotal-data-sent")?Y("ztotal-data-sent"):"0",s=Y("zenduser-last-activity-time");return{sessionId:null==t?void 0:t.sessionId,zId:r,euId:null==e?void 0:e.euId,isBlocked:null==n?void 0:n.isBlocked,sdkKey:null==t?void 0:t.sdkKey,lastActivityTime:i,totalDataSent:o,endUserLastActivityTime:s,externalId:(null==e?void 0:e.zExternalUserInfo.externalId)||""}}catch(e){return void W("inside zGetCookieDatafromLocalStorage catch block")}}();try{var t="sessionId#"+n.sessionId+",isBlocked#"+n.isBlocked+",sdkKey#"+e+",zId#"+n.zId+",euId#"+Number(n.euId)+",externalId#"+n.externalId;Ne(e+b.session_data,t),Ne(e+b.last_activity_time,n.lastActivityTime),Ne(e+b.enduser_last_activity_time,n.endUserLastActivityTime),Ne(e+b.total_data_sent,n.totalDataSent)}catch(e){return void W("inside zSetCookieDataFromLocalStorage catch block")}};function De(){var e=Y("session-data");if(e)try{return JSON.parse(e)}catch(e){return void W("Failed to parse session data")}}function Ae(e){var n=Ge.getInstance();if(n.isSessionExpired)return G("Session is already expired"),!0;var t=(De()||{}).sessionId,r=Number(Y("last-activity-time"));return!t||r+e.sessionTimeout<=Date.now()?(q("Session is expired"),n.isSessionExpired=!0,!0):!function(e){var n=Le();return!(!n||n+e.sessionTimeout<=Date.now())}(e)&&(n.isSessionExpired=!0,!0)}function Le(){try{var e=Ge.getInstance().enduserLastActivityTime;if(!e){if(!(e=Number(Y("zenduser-last-activity-time"))))return 0;e=Number(e)}return e}catch(e){return W("inside getZendUserActivityTime catch block"),0}}function _e(){var e=Y("pack");return e||$("pack",e=Qe().pack?(!0).toString():(!1).toString()),"true"===e}function Fe(e){re(e),$("ztotal-data-sent","0"),Q("zUTMParams"),function(e){var n={sessionId:"",dSession:"",isNewSession:!1,sdkKey:e};try{q("Updating session-data"+JSON.stringify(n)),$("session-data",JSON.stringify(n))}catch(e){W("Failed to stringify zsession-blocked-info ")}}(e),Pe(e+b.utms)}function Me(e){var n=Ge.getInstance(),t=Y("zId");t||$("zId",t=Je());var r=Je(),i="0:"+Je().replace("-",":");Fe(e);var o={sessionId:r,dSession:i,isNewSession:!0,sdkKey:e};$("is-api-key-valid","true"),he(!0);try{q("Created new Session"+JSON.stringify(o)),n.sessionId=o.sessionId,n.apiKey=o.sdkKey,n.isNewSession=o.isNewSession,n.isSessionExpired=!1,n.lastActivityTime=Date.now(),n.enduserLastActivityTime=Date.now(),n.isCheckoutFlowTriggered=!1,$("last-activity-time",n.lastActivityTime.toString()),$("zenduser-last-activity-time",n.enduserLastActivityTime.toString()),$("session-data",JSON.stringify(o)),ee()}catch(e){W("Failed to stringify session data")}}function Be(e){var n=De();return!!n&&e!==(null==n?void 0:n.sdkKey)&&(q("Sdk key is chnaged going to create session data"),!0)}function qe(){window.zEventsPerfData=[],window.zClickEventsData=[],window.zFetchTempData=[],window.zEventsData=[],window.zCustomEventData=[],window.zPagePerfData=[]}var Ge=/*#__PURE__*/function(){function e(){var e;this.sessionId="",this.isSessionExpired=!1,this.lastActivityTime=void 0,this.enduserLastActivityTime=void 0,this.sessionBlockInfo={isBlocked:!1,blockedEndTime:0,apiKey:""},this.apiKey="",this.isNewSession=!1,this.isCheckoutFlowTriggered=!1,this.isCheckoutPresentInCurrentChunk=!1,this.tempTotalDataSent=0,this.sessionId=null==(e=De())?void 0:e.sessionId}return e.getInstance=function(){return this.instance||(this.instance=new e),this.instance},e}();function je(){return Date.now()}function We(e,n,t){var r={capture:!0,passive:!0};return t.addEventListener(e,n,r),function(){return t.removeEventListener(e,n,r)}}function Je(){var e=Math.floor(Date.now()/1e3);return o()+"-"+e}function He(e){var n={externalId:"enduser_external_id",firstName:"eu_first_name",lastName:"eu_last_name",email:"eu_email",age:"eu_age",customerName:"eu_customer_name",avatar:"eu_avatar",phone:"eu_phone"};return e in n?n[e]:e}function Ve(e,n,t){var r=e.split("//")[1];return n&&(t["X-host"]=r),t}Ge.instance=void 0;var Ze,Ke={attributes:!0,childList:!0,characterData:!0,subtree:!0};!function(e){e[e.Progress=0]="Progress",e[e.Completed=1]="Completed",e[e.Failed=2]="Failed"}(Ze||(Ze={}));var Xe={domCapture:!0,consoleCapture:!0,networkCapture:!0,stackTraceCapture:!0,webSocketsCapture:!1,ipCapture:!0,inputMasking:!0,textMasking:!1,paid:!1,apiKey:"",streamUrl:"https://collector.zipy.ai",perfUrl:"https://perfcollector.zipy.ai",heatMapUrl:"https://heatmapcollector.zipy.ai",pagePerfUrl:"https://pageperfcollector.zipy.ai",customEventUrl:"https://customeventcollector.zipy.ai",maxBufferSize:5e6,compression:!0,compressionType:"gzip",timeFrequency:1e3,perfTimeFrequency:5e3,clickTimeFrequency:1e3,encodingType:"",sessionTimeout:18e5,failureRetryCount:5,bufferSizeFrequency:1048576,perfBufferSizeFrequency:1024,clickBufferSizeFrequency:1024,ignoreUrl:["google.com","zipy.ai","mixpanel","extreme-ip-lookup.com","hotjar","smartlook.com","newrelic.com","bugsnag","fullstory","sentry.io","google-analytics.com","bam.nr-data.net","wistia.com","amplitude.com","segment.io","pendo.io","raygun","smartlook.cloud","segment.com","visualstudio.com","stats.g.doubleclick.net","pagead2.googlesyndication.com","r.lr-in.com","clarity.ms","appcues.net","datadoghq.com"],ignoreError:["rrweb","zipy","Script error","pagead2.googlesyndication.com","adsbygoogle"],ignoreConsole:["{}"],isIgnoreUrlError:["google.com","zipy.ai","mixpanel","extreme-ip-lookup.com","hotjar","smartlook.com","newrelic.com","bugsnag","fullstory","sentry.io","google-analytics.com","bam.nr-data.net","wistia.com","amplitude.com","segment.io","pendo.io","raygun","smartlook.cloud","segment.com","visualstudio.com","stats.g.doubleclick.net","pagead2.googlesyndication.com","r.lr-in.com","clarity.ms","appcues.net","datadoghq.com"],isIgnoreConsoleError:["{}"],ip:"",pack:!0,blockClasses:"zipy-block",xhrReqPayloadCapture:!1,xhrRespPayloadCapture:!1,canvasCapture:!1,scrubbingKey:["password","secret","passwd","api_key","apikey","access_token","auth","credentials","mysql_pwd","stripetoken","cardnumber"],requestCapSize:1e6,responseCapSize:1e6,sizeExceededMessage:{message:"size too large",source:"zipy"},eventCountCapInSingleChunk:0,captureCustomZipyLogMessage:!1,captureCustomZipyLogError:!1,captureCustomZipyLogException:!1,startCaptureWithoutUserActivity:!1,consoleLogLevel:"3",recordCrossOriginIframes:!0,splitSessionSize:0,capturePerformance:!1,capturePagePerf:!1,captureClickEvents:!1,captureCustomEvents:!1,isApiIdentifierEnable:!1,apiUniqueIdentifier:[],ignoreUrlErrorCodes:{},ignoreUrlCodes:{},sessionStitching:!1,captureCancelledRequest:!1,clsEventCount:5,clsTimeout:3e4,xhrEventsTimeout:3e4,blockSelector:"",maxCustomEventProperties:10,maxCustomEventPayloadSize:524288,sanitizePayloadResponse:!0,captureUTM:!1,customRecording:!1,tabStateManagement:!1,captureCPU:!1,captureMemory:!1,cpuCapturingFrequency:15e3,memoryCapturingFrequency:15e3,liveAlerts:!1,slimDOMOptions:!0,inlineStylesheet:!1,enableSerialization:!1,enableCompression:!1},Ye=function(e){try{var n=function(){return{requestUrl:t,requestMethod:r,headers:i,request:s,requestByteSize:o}},t="",r="GET",i={},o=0,s={},a=function(n,a){try{var c=function(){function n(){var n=e.length>1&&e[1];n&&(r=n.method||r,n.headers&&(i=rn(n.headers)),n.body&&(o=JSON.stringify(n.body,null,4).length,s=n.body))}q("Going to process fetch arguments.");var a=e.length>0&&e[0],c=function(){if(a){var e=function(){if("string"==typeof a)t=a;else{var e=function(){if(a instanceof URL)t=a.href;else{var e=function(){if(a instanceof Request){var e=a.clone();t=e.url,r=e.method,i=rn(Object.fromEntries(e.headers.entries()));var n=function(){if(window.TextDecoder&&e&&e.body){var n=e.body.getReader(),t=new TextDecoder("utf-8"),r="";return Promise.resolve(n.read().then(function e(i){var o=i.done,s=i.value,a=s?t.decode(s,{stream:!0}):"";return r+=a,o?r:n.read().then(e)})).then(function(e){s=e})}var i=function(n){s=e?n||"":n};return e?Promise.resolve(e.text()).then(i):i("")}();if(n&&n.then)return n.then(function(){})}}();if(e&&e.then)return e.then(function(){})}}();if(e&&e.then)return e.then(function(){})}}();if(e&&e.then)return e.then(function(){})}}();return c&&c.then?c.then(n):n()}()}catch(e){return a(e)}return c&&c.then?c.then(void 0,a):c}(0,function(e){W("Error processing fetch arguments: "+e.message)});return Promise.resolve(a&&a.then?a.then(n):n())}catch(e){return Promise.reject(e)}};function $e(e){var n,t;return V({},e,{timestamp:e.eventType===l.XHR&&null!=e&&null!=(n=e.data)&&n.requestStartTime?null==e||null==(t=e.data)?void 0:t.requestStartTime:je()})}function Qe(){try{return window.sdkConfig?window.sdkConfig:Xe}catch(e){return W("Failed to parse end user Info data"),Xe}}function en(e){try{var n=Qe();return n&&n.hasOwnProperty&&n.hasOwnProperty(e)?n[e]:null}catch(e){return W(e.message?JSON.stringify(e):e),null}}var nn=function(e,n,t){return e&&e.constructor===String&&t.indexOf(e)===n},tn=function(e){return e&&e.constructor===String&&e.trim()};function rn(e){var n=on();if(!e)return{};var t={};for(var r in e)n.includes(r)||(t[r]=e[r]);return t}function on(){var e=en("headersToSanitize");return e&&e.length?e.split(","):[]}function sn(e,n,t){if(void 0===n&&(n=!1),!Array.isArray(e))return[];for(var r,i=[],o=H(e);!(r=o()).done;){var s=r.value;try{s&&"object"==typeof s&&JSON.stringify(s)?s.constructor.name.toLowerCase().includes("error")?i.push({message:s.message,name:s.name,stack:s.stack}):i.push(s):i.push(String(s))}catch(e){i.push("[console log value cannot be serialized]")}}try{n&&t&&t!==l.ConsoleError&&(i=i.map(function(e){return dn(e)}))}catch(e){W("Error in extracting console data")}return i}var an=[];try{an=en("scrubbingKey")||[]}catch(e){W("Error in obtaining scrubbing keys"),an=Xe.scrubbingKey}function cn(e){try{var n=new URL(e);if(e){var t=new URLSearchParams(new URL(e).search);t.forEach(function(e,n){an.includes(n.toLowerCase())&&t.set(n,"xxx")}),n.search=t.toString()}return n.toString()}catch(n){return W("updateQueryStringFromRequestUrl: ERROR WHILE HIDING QUERY PARAM VALUE: "+n),e}}function un(e,n,t){t++;try{e&&"object"==typeof e&&t<=2&&Object.keys(e).forEach(function(r){an.includes(r.toLowerCase())&&(e[r]="xxx"),n.push(r);var i=e[r];"object"==typeof i&&un(i,n,t)})}catch(e){W("error while hiding the sensitive information: "+e)}return JSON.stringify(e)}function ln(e,n,t,r){var i=r?e.request:e.response,o=en(r?"xhrReqPayloadCapture":"xhrRespPayloadCapture"),s=function(n){try{r?(e.request=n,""!=e.request&&(e.requestByteSize=t)):(e.response=n,""!=e.response&&(e.responseByteSize=t))}catch(e){W("error while converting xhr data to string"+e)}};if(o){var a=en("responseCapSize")||1e6,c=en("requestCapSize")||1e6,u=r?c:a,l=en("sizeExceededMessage"),d=en("sanitizePayloadResponse");"string"==typeof i&&i.length>0?(t=t||i.length)<=u?d&&function(){try{s(un(JSON.parse(i),[],n))}catch(n){var e=an.some(function(e){return i.indexOf(e)>=0});s(i=r?e?"No request payload captured for this request as you may have some sensitive information in the payload.":i:e?"No response captured for this request as you may have some sensitive information in the payload.":i)}}():t>0&&s(JSON.stringify(l)):"object"==typeof i?(t=t||JSON.stringify(i,null,4).length)<=u?d&&s(un(i,[],n)):t>0&&s(l):i&&i.length>0&&((t=t||i.length)<=u?d&&s(un(i,[],n)):t>0&&s(JSON.stringify(l)))}else r?e.request="":e.response="";try{if(r&&(null==e?void 0:e.request.length)>0)try{e.request=dn(e.request)}catch(e){W("Error compressing request data:")}else if(!r&&(null==e?void 0:e.response.length)>0)try{e.response=dn(e.response)}catch(e){W("Error compressing response data:")}}catch(e){W("Error compressing data:")}return e}function dn(e){try{if(!e||0===e.length)return"";var n="string"==typeof e?e:JSON.stringify(e),t=s(n),r=a(t);return c(r,!0)}catch(n){return W("Error compressing data:"),e}}function fn(e){if(!e)return!1;var n=e.toLowerCase(),t=en("ignoreError")||[];try{if(t.some(function(e){return n.includes(e.toLowerCase())}))return G("Ignoring error for data: "+e),!0}catch(e){W("Error in ignore errors. Error - "+e.message)}return!1}function pn(){try{return window.self!==window.top}catch(e){return!0}}function gn(e,n){if(e&&null!=e)try{var t="";t="string"!=typeof e?JSON.stringify(e):e;for(var r=l.RangeError;r<=l.EvalError;r++)if(-1!=t.search(l[r]))return r}catch(e){W(e)}return n}function vn(e){switch(e){case"link":case"css":return l.Link;case"img":case"image":return l.Image;case"script":return l.Js;case"fetch":case"beacon":case"xmlhttprequest":return l.XHR;case"other":return l.OtherNetworkCall;default:return 0}}var mn=["img","script","css","link","image","script"];function hn(e,n,t){try{var r=en("isIgnoreUrlError"),i=en("ignoreUrl"),o=en("ignoreUrlErrorCodes"),s=en("ignoreUrlCodes"),a=[],c={};t?(a=r,c=o||{}):(a=i,c=s||{});var u=function(e,t){return!!e.includes(t.toLowerCase())&&function(e){return!c.hasOwnProperty(e)||c[e].includes(n)}(t)},l=e.toLowerCase(),d=wn(l),f=l.indexOf("?"),p=l,g=d;return f>0&&(p=p.substring(0,f),g=wn(p)),a.some(function(e){return e.includes("?")?e.includes("{id}")?u(d,e):u(l,e):e.includes("{id}")?u(g,e):u(p,e)})}catch(n){W("Error in url decoding for url : "+e+" Error is - "+n)}return!1}function yn(e,n,t){return void 0===n&&(n=0),void 0===t&&(t=0),{initiatorType:e.initiatorType,nextHopProtocol:e.nextHopProtocol,workerStart:e.workerStart,redirectStart:e.redirectStart,redirectEnd:e.redirectEnd,fetchStart:e.fetchStart,domainLookupStart:e.domainLookupStart,domainLookupEnd:e.domainLookupEnd,connectStart:e.connectStart,connectEnd:e.connectEnd,secureConnectionStart:e.secureConnectionStart,requestStart:e.requestStart,responseStart:e.responseStart,responseEnd:e.responseEnd,transferSize:e.transferSize,encodedBodySize:e.encodedBodySize||Number(n),decodedBodySize:e.decodedBodySize||Number(t),responseStatus:e.responseStatus,renderBlockingStatus:e.renderBlockingStatus,duration:e.duration,entryType:e.entryType,name:e.name,startTime:e.startTime}}function wn(e){try{var n=e.match(/\/\d+\//g);if(n)for(var t,r=H(n);!(t=r()).done;)e=e.replace(t.value,"/{id}/")}catch(e){W("Error while masking numeric value.")}return e}function bn(e,n){if(!(e.indexOf("http://")>-1||e.indexOf("https://")>-1)){var t=e;e.startsWith("/")||(t="/"+e);var r=new URL(n);return r.pathname+r.search===t}return!1}function Sn(){var e=window.navigator.userAgent;return/Mobi|Android/i.test(e)?"Mobile":/Tablet|iPad/i.test(e)?"Tablet":"Web"}function En(e){try{return window.sessionStorage.getItem(e)||""}catch(e){return W("inside zSessionStorageGetItem catch block "+e.message),""}}function In(e,n){try{window.sessionStorage.setItem(e,n)}catch(e){console.error("inside zSessionStorageSetItem catch block "+e.message)}}function Tn(e){if("online"!=(navigator.onLine?"online":"offline")){if(!window.iszInternetDisconnected)return window.iszInternetDisconnected=!0,G("handleConnectionChange :: send internet disconnected"),e($e({eventType:l.Offline,data:{status:"Offline",type:""},isError:!1}))}else var n=setInterval(function(){fetch("//google.com",{mode:"no-cors"}).then(function(){return window.iszInternetDisconnected&&(window.iszInternetDisconnected=!1,G("handleConnectionChange :: send internet connected"),e($e({eventType:l.Online,data:{status:"Online",type:""},isError:!1}))),clearInterval(n)}).catch(function(){window.iszInternetDisconnected||(window.iszInternetDisconnected=!0,G("handleConnectionChange :: send internet disconnected"),e($e({eventType:l.Offline,data:{status:"Offline",type:""},isError:!1})))})},5e3)}var kn,Cn=function(e){try{var n,t=function(t,r){try{var i="string"==typeof(o=e.data.response)?(n=1,e):"xmlHttpClient"===e.data.sourceLibrary?function(n){if("Blob"===(null==o||null==(n=o.constructor)?void 0:n.name))return Promise.resolve(new Response(o).text()).then(function(n){e.data.response=n});if(o instanceof ArrayBuffer){var t=new Uint8Array(o),r=btoa(String.fromCharCode.apply(String,t));e.data.response=r}else if(o instanceof Document){var i=(new XMLSerializer).serializeToString(o);e.data.response=i}else{if(!(o instanceof Object))throw new Error("Unsupported response type for XMLHttpRequest: "+typeof o);e.data.response=JSON.stringify(o)}}():function(){if("fetch"===e.data.sourceLibrary)return o instanceof Promise?Promise.resolve(o).then(function(n){e.data.response=n}):function(){if(o instanceof Response)return Promise.resolve(o.text()).then(function(n){e.data.response=n});throw new Error("Unsupported response type for fetch: "+typeof o)}();throw new Error("Unsupported source library: "+e.data.sourceLibrary)}()}catch(e){return r(e)}var o;return i&&i.then?i.then(void 0,r):i}(0,function(n){W("Error in resolving response. Error is - "+n.message),e.data.response=""});return Promise.resolve(t&&t.then?t.then(function(t){return n?t:e}):n?t:e)}catch(e){return Promise.reject(e)}},zn=/*#__PURE__*/function(){function e(){this.dataSync=void 0,this.sdkTimer=void 0,this.eventListenersCallback=void 0,this.dataSync=A.IDLE,this.sdkTimer=_.START,this.eventListenersCallback=new Array}var n=e.prototype;return n.isDataProcessingDone=function(){var e=this;return new Promise(function(n,t){var r=setInterval(function(){e.dataSync!==A.PENDING&&(n(!0),clearInterval(r))},1)})},n.removeListeners=function(){this.eventListenersCallback.forEach(function(e){e()})},e.getInstance=function(){return this.instance||(this.instance=new e),this.instance},e}();zn.instance=void 0;var Rn=/*#__PURE__*/function(){function e(){this.worker=null,this.callbacks=new Map,this.idCounter=0,this.ready=!1,this.readyQueue=[],this.initError=null}e.getInstance=function(){return e.instance||(e.instance=new e),e.instance},e.terminate=function(){e.instance&&(e.instance.terminateWorker(),e.instance=null)};var n=e.prototype;return n.initialize=function(){var e=this;try{if(!window.Worker)return;var n=new Blob(['// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n\n// aliases for shorter compressed code (most minifers don\'t do this)\nvar u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array;\n// fixed length extra bits\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n // numbers here are at max 18 bits\n var r = new i32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = ((j - b[i]) << 5) | i;\n }\n }\n return { b: b, r: r };\n};\nvar _a = freb(fleb, 2), fl = _a.b, revfl = _a.r;\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), revfd = _b.r;\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n // reverse table algorithm from SO\n var x = ((i & 0xAAAA) >> 1) | ((i & 0x5555) << 1);\n x = ((x & 0xCCCC) >> 2) | ((x & 0x3333) << 2);\n x = ((x & 0xF0F0) >> 4) | ((x & 0x0F0F) << 4);\n rev[i] = (((x & 0xFF00) >> 8) | ((x & 0x00FF) << 8)) >> 1;\n}\n// create huffman tree from u8 "map": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n var s = cd.length;\n // index\n var i = 0;\n // u16 "map": index -> # of codes with bit length = index\n var l = new u16(mb);\n // length of cd must be 288 (total # of codes)\n for (; i < s; ++i) {\n if (cd[i])\n ++l[cd[i] - 1];\n }\n // u16 "map": index -> minimum code for bit length = index\n var le = new u16(mb);\n for (i = 1; i < mb; ++i) {\n le[i] = (le[i - 1] + l[i - 1]) << 1;\n }\n var co;\n if (r) {\n // u16 "map": index -> number of actual bits, symbol for code\n co = new u16(1 << mb);\n // bits to remove for reverser\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n // ignore 0 lengths\n if (cd[i]) {\n // num encoding both symbol and bits read\n var sv = (i << 4) | cd[i];\n // free bits\n var r_1 = mb - cd[i];\n // start value\n var v = le[cd[i] - 1]++ << r_1;\n // m is end value\n for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n // every 16 bit value starting with the code yields the same result\n co[rev[v] >> rvb] = sv;\n }\n }\n }\n }\n else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >> (15 - cd[i]);\n }\n }\n }\n return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0);\n// get end of byte\nvar shft = function (p) { return ((p + 7) / 8) | 0; };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n // can\'t use .constructor in case user-supplied\n return new u8(v.subarray(s, e));\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n d[o + 2] |= v >> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n // Need extra info to make a tree\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return { t: et, l: 0 };\n if (s == 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return { t: v, l: 1 };\n }\n t.sort(function (a, b) { return a.f - b.f; });\n // after i2 reaches last ind, will be stopped\n // freq must be greater than largest possible number of symbols\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n // efficient algorithm from UZIP.js\n // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n // symbols that combined have high freq, will start processing i2 (high-freq,\n // non-composite) symbols instead\n // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n while (i1 != s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n // code lengths\n var tr = new u16(maxSym + 1);\n // max bits in tree\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n // more algorithms from UZIP.js\n // TODO: find out how this code works (debt)\n // ind debt\n var i = 0, dt = 0;\n // left cost\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << (mbt - tr[i2_1]));\n tr[i2_1] = mb;\n }\n else\n break;\n }\n dt >>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << (mb - tr[i2_2]++ - 1);\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] == mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return { t: new u8(tr), l: mbt };\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n return n.s == -1\n ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n var s = c.length;\n // Note that the semicolon was intentional\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n // ind num streak\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) { cl[cli++] = v; };\n for (var i = 1; i <= s; ++i) {\n if (c[i] == cln && i != s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n cls = 0;\n }\n }\n else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(((cls - 3) << 5) | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return { c: cl.subarray(0, cli), n: s };\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n // no need to write 00 as type: TypedArray defaults to 0\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a = hTree(lf, 15), dlt = _a.t, mlb = _a.l;\n var _b = hTree(df, 15), ddt = _b.t, mdb = _b.l;\n var _c = lc(dlt), lclt = _c.c, nlc = _c.n;\n var _d = lc(ddt), lcdt = _d.c, ndc = _d.n;\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n ++lcfreq[lclt[i] & 31];\n for (var i = 0; i < lcdt.length; ++i)\n ++lcfreq[lcdt[i] & 31];\n var _e = hTree(lcfreq, 7), lct = _e.t, mlcb = _e.l;\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = (bl + 5) << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + 2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18];\n if (bs >= 0 && flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, (clct[i] >> 5) & 127), p += clct[i] >> 12;\n }\n }\n }\n else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n var sym = syms[i];\n if (sym > 255) {\n var len = (sym >> 18) & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, (sym >> 23) & 31), p += fleb[len];\n var dst = sym & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, (sym >> 5) & 8191), p += fdeb[dst];\n }\n else {\n wbits16(out, p, lm[sym]), p += ll[sym];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new i32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, st) {\n var s = st.z || dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7000)) + post);\n // writing to this writes to the output buffer\n var w = o.subarray(pre, o.length - post);\n var lst = st.l;\n var pos = (st.r || 0) & 7;\n if (lvl) {\n if (pos)\n w[0] = st.r >> 3;\n var opt = deo[lvl - 1];\n var n = opt >> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n // prev 2-byte val map curr 2-byte val map\n var prev = st.p || new u16(32768), head = st.h || new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n // 24576 i