function H(t,e){return t==e}function X(t,e,r,...n){const o=t.length>>>0;e<0&&(e+=o),e<0&&(e=0);for(let s=e;stypeof t=="function"||Object.prototype.toString.call(t)==="[object Function]";(function(){let t;try{t=Symbol.iterator?Symbol.iterator:"Symbol(Symbol.iterator)"}catch{t="Symbol(Symbol.iterator)"}return e=>Z(e)&&T(e[t])})();function ee(t,e){const r=Q(t,e);r>=0&&t.splice(r,1)}function F(t,...e){if(t)for(const r of t)r.call(null,e)}function te(){return globalThis.CXoneDfo}function re(){return globalThis[te()]}function ne(){return re()?.getBaseLogger()}var oe={};let P;function se(t){return t.withContext({program:"web-storage",version:oe.WEB_MODULE_VERSION})}function J(t){return P=se(t),P}function f(){return P??J(ne())}async function V(t,e,r){return new Promise((n,o)=>{n=t.onabort(n,o),f().debug("deleteRecords: running for keys:",r);const s=t.txn.objectStore(e);let c=0;r.forEach(i=>{const a=`${s.name}-delete-${i}`,d=s.delete(i);t.startOp(a),d.onsuccess=function(u){t.stopOp(a,"success"),c+=1,c===r.length&&(f().debug("deleteRecords: Success in deleting data:",i),n())},d.onerror=function(u){const g=u.target;t.stopOp(a,`error ${g.error}`),f().error(`Error in deleteRecords fn for key: '${i}'`,i,e,g.error),o()}})})}async function ce(t,e,r,n){return new Promise((o,s)=>{const c=`${e}-get-record ${r}`;o=t.onabort(o,s),f().debug("getRecord: running for key:",r);const i=t.txn.objectStore(e),a=n?i.index(n).get(r):i.get(r);t.startOp(c),a.onsuccess=function(d){t.stopOp(c,"success");const u=d.target;o(u.result)},a.onerror=function(d){const u=d.target;t.stopOp(c,`error ${u.error}`),f().error(`Error in getRecord fn for key: '${r}'`,r,e,n,u.error),s()}})}const ie="cxone",G=":";function C(t,e){if(!t)throw new Error(`Invalid value for parameter "${e}".`)}const k={};function j(t,e){if(k[t]!==void 0)return k[t];try{const r="__storage_test__";return e.setItem(r,r),e.removeItem(r),k[t]=!0,!0}catch{return k[t]=!1,!1}}function ae(t){return C(t,"tenantId"),`${ie}${G}${t}${G}`}function ue(t,e){return e?t{c=t.onabort(c,i);const a=t.txn.objectStore(e);o=o&&r==="prev"?o+"_DESC":o,s=s&&r==="prev"?U(s):s;const d=o?a.index(o).getAll(s,n):a.getAll(s,n),u=`${e}-get-all-${s}`;t.startOp(u),d.addEventListener("success",g=>{t.stopOp(u,"success");const l=g.target;c(l.result)}),d.addEventListener("error",g=>{const l=g.target;t.stopOp(u,`error ${l.error}`),f().error("Error in getKeysViaGetAll fn",e,r,n,o,s,l.error),i(l.error)})})}async function fe(t,e,r="prev",n,o,s){return new Promise((c,i)=>{c=t.onabort(c,i);const a=t.txn.objectStore(e);if(!de(r,o)&&!le(a,r,o)){const m=A(t,e,r,n,o,s);c(m)}const d=s?IDBKeyRange.only(s):null,u=o?a.index(o).openCursor(d,r):a.openCursor(null,r),g=`${e}-open-cursor-${d}`;t.startOp(g);const l=[];let h=0;u.onsuccess=function(m){const I=m.target.result;I&&ue(h,n)?(l.push(I.value),h++,I.continue()):(t.stopOp(g,"success"),c(l))},u.onerror=function(m){const b=m.target;t.stopOp(g,`error ${b.error}`),f().error("Error in getKeysViaCursor fn",e,r,n,o,s,b.error,b.readyState),i(b.error)}})}function ge(t,e,r=[]){const n=t.objectStore(e);for(const o of r)if(n.createIndex(o.name,o.name,{unique:o.unique}),!o.disableAutoInvert){const s=o.name+"_DESC";n.createIndex(s,s,{unique:o.unique})}}function he(t,e,r,n=!0,o=[]){const s={keyPath:r,autoIncrement:n},c=t.createObjectStore(e,s);for(const i of o)if(c.createIndex(i.name,i.name,{unique:i.unique}),!i.disableAutoInvert){const a=i.name+"_DESC";c.createIndex(a,a,{unique:i.unique})}}function be(t,e,r=[]){const n=t.objectStore(e);for(const o of r){n.deleteIndex(o);try{n.deleteIndex(o+"_DESC")}catch(s){if(s?.name!=="NotFoundError")throw s}}}function pe(t,e){t.objectStoreNames.contains(e)?t.deleteObjectStore(e):f().warn(`deleteStore: store was already deleted: '${e}'`)}function N(t){return Object.keys(t).map(e=>Number(e)).sort()}function Se(t){const e=t.result,r=t.transaction;return{createStore:(n,o,s,c)=>he(e,n,o,s,c),deleteStore:n=>pe(e,n),createIndexesOnStore:(n,o)=>ge(r,n,o),deleteIndexesOnStore:(n,o)=>be(r,n,o)}}function ye(t,e){for(const r of e){const n=t[r[0]];if(typeof n=="function")n.call(t,...r[1]);else throw new Error(`Invalid Schema Migration function ${r[0]}`)}}function $e(t,e,r,n,o){const s=N(o);C(s.length>0,"At least 1 migration function (starting at version 2) must be specified. Version 1 of the DB has no stores or data."),C(s[0]>1,"Minimum Migration Version must be greater than 1.");for(const c of s)if(!(c<=e)){if(c>r){f().warn(`upgradeSchema[${t}]: migration ${c} is greater then expected new version ${r}`);break}f().warn(`upgradeSchema[${t}]: run migration ${c}`),ye(n,o[c])}}async function Ie(t,e,r){return new Promise((n,o)=>{n=t.onabort(n,o);const s=`${e.name}-count`,c=e.count();t.startOp(s),c.onsuccess=async i=>{const a=i.target,d=Math.max(0,a.result-r.totalRecordsLimit);if(t.stopOp(s,"success"),d>0){f().debug("Excess Records found count:",d);const g=(await A(t,e.name,"next",d,r.timeSeriesColumn)).map(l=>l.id);g.length&&await V(t,e.name,g),f().debug("Excess Records count deleted.:",d)}n()},c.onerror=i=>{t.stopOp(s,`error ${c.error}`),f().debug(`deleteIfOverRecordLimit: error ${c.error}`),o(new Error(`${c.error}`))}})}async function we(t,e,r,n={}){return new Promise((o,s)=>{o=t.onabort(o,s);let c=0;const i=t.txn.objectStore(e);r.forEach((a,d)=>{const u=`putRecord ${d}`;for(const l of i.indexNames)l.match(/_DESC$/)||a[l]&&(typeof a[l]=="number"&&(a[l+"_DESC"]=a[l]*-1),typeof a[l]=="string"&&(a[l+"_DESC"]=U(a[l])));const g=i.put(a);t.startOp(u),g.onsuccess=async l=>{if(t.stopOp(u,"success"),c+=1,c===r.length){if(n[e]){const h=n[e];await Ie(t,i,h)}o()}},g.onerror=l=>{const h=l.target;t.stopOp(u,`error ${h.error}`),f().error(`Error in putRecords fn: for record num ${d+1} of ${r.length}!`,a,h.error),s(h.error)}})})}async function D(t,e,r,n,o){const s=performance.now(),c=e.transaction(r,n,{durability:"relaxed"}),i=[],a=[],d={};let u="";const g=p=>{const S={label:p,start:performance.now()-s};a.push(S),d[p]=S},l=(p,S)=>{const x=d[p];x&&(x.elapsed=performance.now()-s-x.start,x.result=S)};let h;const m=new Promise(p=>{h=p}).finally(()=>{const S=performance.now()-s;!u&&S>o/5&&(u="SLOW"),u&&f().debug(`${t}: txn complete. ${u}: ${S} ms elapsed max=${o}`,a)});let b=0;function I(){b!==0&&(clearTimeout(b),b=0)}function Y(p,S){return i.push(S),x=>{p(x),ee(i,S)}}function z(){u="timeout",I(),c.abort(),F(i,c.error||"timeout"),i.length=0,h()}return b=setTimeout(z,o),c.addEventListener("complete",()=>{I(),h()}),c.addEventListener("abort",()=>{u="abort",I(),F(i,c.error||"aborted"),i.length=0,h()}),c.addEventListener("error",p=>{u="error",I(),h()}),{txn:c,promise:m,onabort:Y,startOp:g,stopOp:l}}class me{constructor(e,r){this.dbName=e,this.dbVersion=0,this.migrations=r,this.versions=N(r)||[],C(this.versions,"At least 1 migration function (starting at version 2) must be specified. Version 1 of the DB has no stores or data.")}}class Re extends me{constructor(e,r,n){super(e,r),this.tenantString=n,this.dbVersion=0,this.minVersion=this.versions[0]}setDBRequest(e){const r=e.target;this.db=r.result,this.dbVersion=this.db.version}init(){return new Promise((e,r)=>{const n=this.versions[this.versions.length-1],o=indexedDB.open(`${this.tenantString}:${this.dbName}`,n);o.onsuccess=s=>{this.setDBRequest(s),f().info(`db, '${this.db.name}', opened at version: ${this.dbVersion}. stores: [${Array.from(this.db.objectStoreNames).join(", ")}]`),e()},o.onupgradeneeded=s=>{const c=s.target;try{const{oldVersion:i,newVersion:a}=s;if(f().debug(`onUpgradeNeeded[${this.dbName}]: upgrade needed ${i} to ${a}`),a>i){const d=Se(c);$e(this.dbName,i,a,d,this.migrations)}}catch(i){f().debug(`onUpgradeNeeded[${this.dbName}]: error thrown performing upgrade`,i),r(i),c.onerror=null,c.transaction.abort()}},o.onblocked=s=>{const c=s.target;f().error(`LocalIndexDbBackend: error in init fn, blocked: indexedDB is no longer available, version changed from ${s.oldVersion} to ${s.newVersion}`,c.error)},o.onerror=s=>{const c=s.target;f().debug(`Error in initializing indexedDB: '${c.error}'`),r(new Error(`${c.error}`))}})}async close(){this.db&&(this.db.close(),delete this.db)}async detach(){return this.close()}clear(){return new Promise((e,r)=>{const n=indexedDB.deleteDatabase(this.dbName);n.onerror=o=>{f().error(`LocalIndexDbBackend: error in clear fn. clear indexedDB: '${this.dbName}' failed.`),r()},n.onsuccess=o=>{f().debug(`LocalIndexDbBackend: clear indexedDB: '${this.dbName}' succeeded.`),e()}})}async putRecords(e,r,n={}){const o=await D(`putRecords('${e}')`,this.db,[e],"readwrite",150);await we(o,e,r,n),await o.promise}async deleteRecord(e,r){const n=await D(`deleteRecord('${e}')`,this.db,[e],"readwrite",150);await V(n,e,[].concat(r)),await n.promise}async deleteRecords(e,r){const n=await D(`deleteRecords('${e}')`,this.db,[e],"readwrite",150);await V(n,e,r),await n.promise}async getRecord(e,r,n){const o=await D(`getRecord('${e}')`,this.db,[e],"readonly",150),s=await ce(o,e,r,n);return await o.promise,s}async getLastRecords(e,r,n,o){const s=await D(`getLastRecords('${e}')`,this.db,[e],"readonly",150),c=fe(s,e,"prev",r,n,o);return await s.promise,c}async getFirstRecords(e,r,n,o){const s=await D(`getFirstRecords('${e}')`,this.db,[e],"readonly",150),c=await A(s,e,"next",r,n,o);return await s.promise,c}}class R{constructor(...e){this.loggers=e}error(e,r,...n){for(const o of this.loggers)o.error(e,r,...n)}warn(e,r,...n){for(const o of this.loggers)o.warn(e,r,...n)}info(e,r,...n){for(const o of this.loggers)o.info(e,r,...n)}debug(e,r,...n){for(const o of this.loggers)o.debug(e,r,...n)}withLoggers(...e){return new R(...this.loggers,...e)}withoutLoggers(e){return new R(...this.loggers.filter(e))}}class w{constructor(e,r){this.logger=e,this.context=r}error(e,...r){this.logger.error(this.context,e,...r)}warn(e,...r){this.logger.warn(this.context,e,...r)}info(e,...r){this.logger.info(this.context,e,...r)}debug(e,...r){this.logger.debug(this.context,e,...r)}withContextLogger(e){const r=this.logger;return r instanceof R?new w(r.withLoggers(e),this.context):new w(new R(r,e),this.context)}withoutContextLoggers(e){const r=this.logger;return r instanceof R?new w(r.withoutLoggers(e),this.context):e(this.logger)===!1?new w(new R,this.context):this}withContext(e){return new w(this.logger,{...this.context,...e})}getContextValue(e,r){return this.context[e]??r}static create(e,r={}){return new w(e,{...r})}}class xe{constructor(e){this.post=e}postToParent(e,r,n,o){this.post({type:"logMessage",ctx:r,level:e,message:n,params:o})}error(e,r,...n){this.postToParent("error",e,r,n)}warn(e,r,...n){this.postToParent("warn",e,r,n)}info(e,r,...n){this.postToParent("info",e,r,n)}debug(e,r,...n){this.postToParent("debug",e,r,n)}}function De(t){J(w.create(new xe(t),{}))}const B=new URL(document.location.href).hash.slice(1),O="_deletedKeys";let K=!1,W="*",$="";const q=new Map;function M(t){let e=q.get(t);if(!e){const r=t.getItem(`${$}${O}`);e=r?new Set(JSON.parse(r)):new Set,q.set(t,e)}return e}function ve(t,e){let r=q.get(t);r||(r=e?new Set(JSON.parse(e)):new Set,q.set(t,r))}function Ee(t,e){const r=M(t);r.has(e)||(r.add(e),t.setItem(`${$}${O}`,JSON.stringify(Array.from(r))))}function Oe(t,e){const r=M(t);r.has(e)&&(r.delete(e),r.size>0?t.setItem(`${$}${O}`,JSON.stringify(Array.from(r))):t.removeItem(`${$}${O}`))}function y(t){const e={sharedId:B,msg:t};parent.postMessage(e,W)}function L(t){y({type:"ack",reqId:t})}function Le(t,e,r){W=e,$=ae(t.tenantId),L(r)}function ke(t,e){const r=_(t.level);Oe(r,t.key),r.setItem(`${$}${t.key}`,t.value),L(e)}function Ce(t,e){const r=_(t.level);r.removeItem(`${$}${t.key}`),Ee(r,t.key),L(e)}function qe(t,e){const r=_(t.level);let n=r.getItem(`${$}${t.key}`);n===null&&M(r).has(t.key)&&(n=void 0),y({reqId:e,type:"response",value:n})}const v={};function E(t,e,r={}){f().error(`SharedStorageServer: ${t}: error`,e,r)}function Pe(t,e){const r=new Re(t.dbName,t.migrations,t.tenantId);r.init().then(()=>{v[t.dbName]=r,y({reqId:e,type:"response",value:r.dbVersion})}).catch(n=>E(`sharedIndexDbInit('${t.dbName}')`,n,t))}function Ve(t,e){v[t.dbName].putRecords(t.storeName,t.records,t.storeLimits).then(()=>L(e)).catch(n=>E(`sharedIndexPutRecords('${t.storeName}')`,n,t))}function _e(t,e){v[t.dbName].deleteRecords(t.storeName,t.keys).then(()=>L(e)).catch(n=>E(`sharedIndexDeleteRecords('${t.storeName}', ${JSON.stringify(t.keys)})`,n,t))}function Ae(t,e){v[t.dbName].getRecord(t.storeName,t.key,t.indexName).then(n=>y({reqId:e,type:"response",value:n})).catch(n=>E(`sharedIndexGetRecord('${t.storeName}', ${JSON.stringify(t.key)}), ${JSON.stringify(t.key)})`,n,t))}function Be(t,e){v[t.dbName].getFirstRecords(t.storeName,t.limit,t.indexName,t.filterKey).then(n=>y({reqId:e,type:"response",value:n})).catch(n=>E(`sharedIndexGetFirstRecords('${t.storeName}')`,n,t))}function Me(t,e){v[t.dbName].getLastRecords(t.storeName,t.limit,t.indexName,t.filterKey).then(n=>y({reqId:e,type:"response",value:n})).catch(n=>E(`sharedIndexGetLastRecords('${t.storeName}')`,n,t))}function Fe(t){if(typeof t.data=="object"&&t.data.sharedId===B){const e=t.data.msg,r=t.data.reqId,n=e.type;switch(e.type){case"init":return Le(e,t.origin,r);case"setItem":return ke(e,r);case"removeItem":return Ce(e,r);case"getItem":return qe(e,r);case"indexDbInit":return Pe(e,r);case"indexDbPutRecords":return Ve(e,r);case"indexDbGetRecord":return Ae(e,r);case"indexDbGetFirstRecords":return Be(e,r);case"indexDbGetLastRecords":return Me(e,r);case"indexDbDeleteRecords":return _e(e,r)}f().warn(`SharedStorageServer: unsupported shared storage message: '${n}'`,e,r)}}function Ge(t){const e=t.key;if(e.startsWith($)){const r=t.storageArea===sessionStorage?"session":"local",n=e.slice($.length);n===O?ve(t.storageArea,t.newValue):y({key:n,level:r,type:"itemChanged",value:t.newValue})}}function je(){return j("localStorage",localStorage)&&j("sessionStorage",sessionStorage)}function Ke(){if(!B){console.warn("Cannot run shared storage iframe without an ID");return}if(De(y),!K){if(K=!0,window.addEventListener("message",Fe),window.addEventListener("storage",Ge),!je()){y({type:"notUsable"});return}y({type:"ready"})}}Ke();