@sprig-technologies/sprig-browser 2.30.3 → 2.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.
- package/dist/core-C0coGRtP.js +12 -0
- package/dist/core-rfFWMlyt.cjs +12 -0
- package/dist/core.cjs +1 -1
- package/dist/core.d.ts +3 -8
- package/dist/core.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +3 -8
- package/dist/index.js +1 -1
- package/dist/metricsReporter-D8MMZt8T.cjs +2 -0
- package/dist/metricsReporter-DLAgtaq2.js +2 -0
- package/dist/replay.cjs +1 -7
- package/dist/replay.js +1 -7
- package/dist/{view-CJBVxA0k.js → view-Y4Pp5FJ1.js} +2 -2
- package/dist/{view-Jfb4S82A.cjs → view-hsiavHCt.cjs} +2 -2
- package/package.json +1 -1
- package/dist/core-ChUnpqXT.js +0 -12
- package/dist/core-DL58LekA.cjs +0 -12
- package/dist/metricsReporter-DNUikwDb.js +0 -2
- package/dist/metricsReporter-dYIN7Y-U.cjs +0 -2
package/dist/replay.cjs
CHANGED
|
@@ -1,7 +1 @@
|
|
|
1
|
-
"use strict";var is=Object.defineProperty;var as=(t,e,n)=>e in t?is(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var Ie=(t,e,n)=>(as(t,typeof e!="symbol"?e+"":e,n),n);const b=require("./metricsReporter-dYIN7Y-U.cjs");var ht=(t=>(t[t.DomContentLoaded=0]="DomContentLoaded",t[t.Load=1]="Load",t[t.FullSnapshot=2]="FullSnapshot",t[t.IncrementalSnapshot=3]="IncrementalSnapshot",t[t.Meta=4]="Meta",t[t.Custom=5]="Custom",t[t.Plugin=6]="Plugin",t))(ht||{});class os{constructor(e){Ie(this,"awaitingResolvers",[]);Ie(this,"activeCount",0);this.capacity=e}async acquire(){if(this.activeCount<this.capacity){this.activeCount++;return}return new Promise(e=>{this.awaitingResolvers.push(e)})}release(){const e=this.awaitingResolvers.shift();e&&this.activeCount<=this.capacity?e():this.activeCount--}async execute(e){try{return await this.acquire(),await e()}finally{this.release()}}setLimit(e){this.capacity=e}}const er=new os(2),ls=t=>er.setLimit(t),cs=async t=>er.execute(async()=>{var r;b.info(`Beginning upload of chunk ${t.chunkIndex} for survey: ${t.surveyId}`);const e=await b.sprigFetch(t.uploadUrl,{body:t.data,method:"PUT"});b.info(`Completed upload of chunk ${t.chunkIndex} for survey: ${t.surveyId}`);const n=(r=e.headers)==null?void 0:r.get("ETag");if(!n)throw new Error(`Upload response did not include etag for upload ${t.uploadId}, part ${t.chunkIndex}`);return n}),tr=async({apiUrl:t,surveyId:e,uploadId:n,etags:r,headers:s,responseGroupUuid:i,replayDuration:a,eventDigest:o},l=!1)=>{var c;if(!l&&!n&&!r){b.info(`Cannot mark upload complete: isMobile: ${l} / uploadId: ${n} / etags: ${r}`);return}b.info(`Marking upload complete for survey: ${e}`);const d=await b.sprigFetch(`${t}/sdk/1/completeSessionReplay`,{method:"POST",body:JSON.stringify({etags:r,uploadId:n,responseGroupUuid:i,surveyId:e,replayDuration:a,eventDigest:o,userAgent:(c=window==null?void 0:window.navigator)==null?void 0:c.userAgent}),headers:s,shouldRetryRequest:!0});return b.info(`Done marking upload complete for survey: ${e}`),d},O=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,j=Object.keys,F=Array.isArray;function V(t,e){return typeof e!="object"||j(e).forEach(function(n){t[n]=e[n]}),t}typeof Promise>"u"||O.Promise||(O.Promise=Promise);const Ye=Object.getPrototypeOf,us={}.hasOwnProperty;function W(t,e){return us.call(t,e)}function Be(t,e){typeof e=="function"&&(e=e(Ye(t))),(typeof Reflect>"u"?j:Reflect.ownKeys)(e).forEach(n=>{re(t,n,e[n])})}const nr=Object.defineProperty;function re(t,e,n,r){nr(t,e,V(n&&W(n,"get")&&typeof n.get=="function"?{get:n.get,set:n.set,configurable:!0}:{value:n,configurable:!0,writable:!0},r))}function Re(t){return{from:function(e){return t.prototype=Object.create(e.prototype),re(t.prototype,"constructor",t),{extend:Be.bind(null,t.prototype)}}}}const ds=Object.getOwnPropertyDescriptor;function wn(t,e){let n;return ds(t,e)||(n=Ye(t))&&wn(n,e)}const hs=[].slice;function kt(t,e,n){return hs.call(t,e,n)}function rr(t,e){return e(t)}function Le(t){if(!t)throw new Error("Assertion Failed")}function sr(t){O.setImmediate?setImmediate(t):setTimeout(t,0)}function ir(t,e){return t.reduce((n,r,s)=>{var i=e(r,s);return i&&(n[i[0]]=i[1]),n},{})}function se(t,e){if(typeof e=="string"&&W(t,e))return t[e];if(!e)return t;if(typeof e!="string"){for(var n=[],r=0,s=e.length;r<s;++r){var i=se(t,e[r]);n.push(i)}return n}var a=e.indexOf(".");if(a!==-1){var o=t[e.substr(0,a)];return o==null?void 0:se(o,e.substr(a+1))}}function Y(t,e,n){if(t&&e!==void 0&&(!("isFrozen"in Object)||!Object.isFrozen(t)))if(typeof e!="string"&&"length"in e){Le(typeof n!="string"&&"length"in n);for(var r=0,s=e.length;r<s;++r)Y(t,e[r],n[r])}else{var i=e.indexOf(".");if(i!==-1){var a=e.substr(0,i),o=e.substr(i+1);if(o==="")n===void 0?F(t)&&!isNaN(parseInt(a))?t.splice(a,1):delete t[a]:t[a]=n;else{var l=t[a];l&&W(t,a)||(l=t[a]={}),Y(l,o,n)}}else n===void 0?F(t)&&!isNaN(parseInt(e))?t.splice(e,1):delete t[e]:t[e]=n}}function ar(t){var e={};for(var n in t)W(t,n)&&(e[n]=t[n]);return e}const fs=[].concat;function or(t){return fs.apply([],t)}const lr="BigUint64Array,BigInt64Array,Array,Boolean,String,Date,RegExp,Blob,File,FileList,FileSystemFileHandle,FileSystemDirectoryHandle,ArrayBuffer,DataView,Uint8ClampedArray,ImageBitmap,ImageData,Map,Set,CryptoKey".split(",").concat(or([8,16,32,64].map(t=>["Int","Uint","Float"].map(e=>e+t+"Array")))).filter(t=>O[t]),ps=lr.map(t=>O[t]);ir(lr,t=>[t,!0]);let le=null;function nt(t){le=typeof WeakMap<"u"&&new WeakMap;const e=qt(t);return le=null,e}function qt(t){if(!t||typeof t!="object")return t;let e=le&&le.get(t);if(e)return e;if(F(t)){e=[],le&&le.set(t,e);for(var n=0,r=t.length;n<r;++n)e.push(qt(t[n]))}else if(ps.indexOf(t.constructor)>=0)e=t;else{const i=Ye(t);for(var s in e=i===Object.prototype?{}:Object.create(i),le&&le.set(t,e),t)W(t,s)&&(e[s]=qt(t[s]))}return e}const{toString:ms}={};function Ht(t){return ms.call(t).slice(8,-1)}const Vt=typeof Symbol<"u"?Symbol.iterator:"@@iterator",ys=typeof Vt=="symbol"?function(t){var e;return t!=null&&(e=t[Vt])&&e.apply(t)}:function(){return null},De={};function te(t){var e,n,r,s;if(arguments.length===1){if(F(t))return t.slice();if(this===De&&typeof t=="string")return[t];if(s=ys(t)){for(n=[];!(r=s.next()).done;)n.push(r.value);return n}if(t==null)return[t];if(typeof(e=t.length)=="number"){for(n=new Array(e);e--;)n[e]=t[e];return n}return[t]}for(e=arguments.length,n=new Array(e);e--;)n[e]=arguments[e];return n}const _n=typeof Symbol<"u"?t=>t[Symbol.toStringTag]==="AsyncFunction":()=>!1;var X=typeof location<"u"&&/^(http|https):\/\/(localhost|127\.0\.0\.1)/.test(location.href);function cr(t,e){X=t,ur=e}var ur=()=>!0;const gs=!new Error("").stack;function xe(){if(gs)try{throw xe.arguments,new Error}catch(t){return t}return new Error}function zt(t,e){var n=t.stack;return n?(e=e||0,n.indexOf(t.name)===0&&(e+=(t.name+t.message).split(`
|
|
2
|
-
`).length),n.split(`
|
|
3
|
-
`).slice(e).filter(ur).map(r=>`
|
|
4
|
-
`+r).join("")):""}var dr=["Unknown","Constraint","Data","TransactionInactive","ReadOnly","Version","NotFound","InvalidState","InvalidAccess","Abort","Timeout","QuotaExceeded","Syntax","DataClone"],kn=["Modify","Bulk","OpenFailed","VersionChange","Schema","Upgrade","InvalidTable","MissingAPI","NoSuchDatabase","InvalidArgument","SubTransaction","Unsupported","Internal","DatabaseClosed","PrematureCommit","ForeignAwait"].concat(dr),vs={VersionChanged:"Database version changed by other database connection",DatabaseClosed:"Database has been closed",Abort:"Transaction aborted",TransactionInactive:"Transaction has already completed or failed",MissingAPI:"IndexedDB API missing. Please visit https://tinyurl.com/y2uuvskb"};function Oe(t,e){this._e=xe(),this.name=t,this.message=e}function hr(t,e){return t+". Errors: "+Object.keys(e).map(n=>e[n].toString()).filter((n,r,s)=>s.indexOf(n)===r).join(`
|
|
5
|
-
`)}function Et(t,e,n,r){this._e=xe(),this.failures=e,this.failedKeys=r,this.successCount=n,this.message=hr(t,e)}function He(t,e){this._e=xe(),this.name="BulkError",this.failures=Object.keys(e).map(n=>e[n]),this.failuresByPos=e,this.message=hr(t,e)}Re(Oe).from(Error).extend({stack:{get:function(){return this._stack||(this._stack=this.name+": "+this.message+zt(this._e,2))}},toString:function(){return this.name+": "+this.message}}),Re(Et).from(Oe),Re(He).from(Oe);var En=kn.reduce((t,e)=>(t[e]=e+"Error",t),{});const bs=Oe;var I=kn.reduce((t,e)=>{var n=e+"Error";function r(s,i){this._e=xe(),this.name=n,s?typeof s=="string"?(this.message=`${s}${i?`
|
|
6
|
-
`+i:""}`,this.inner=i||null):typeof s=="object"&&(this.message=`${s.name} ${s.message}`,this.inner=s):(this.message=vs[e]||n,this.inner=null)}return Re(r).from(bs),t[e]=r,t},{});I.Syntax=SyntaxError,I.Type=TypeError,I.Range=RangeError;var Bn=dr.reduce((t,e)=>(t[e+"Error"]=I[e],t),{}),ft=kn.reduce((t,e)=>(["Syntax","Type","Range"].indexOf(e)===-1&&(t[e+"Error"]=I[e]),t),{});function R(){}function Je(t){return t}function ws(t,e){return t==null||t===Je?e:function(n){return e(t(n))}}function _e(t,e){return function(){t.apply(this,arguments),e.apply(this,arguments)}}function _s(t,e){return t===R?e:function(){var n=t.apply(this,arguments);n!==void 0&&(arguments[0]=n);var r=this.onsuccess,s=this.onerror;this.onsuccess=null,this.onerror=null;var i=e.apply(this,arguments);return r&&(this.onsuccess=this.onsuccess?_e(r,this.onsuccess):r),s&&(this.onerror=this.onerror?_e(s,this.onerror):s),i!==void 0?i:n}}function ks(t,e){return t===R?e:function(){t.apply(this,arguments);var n=this.onsuccess,r=this.onerror;this.onsuccess=this.onerror=null,e.apply(this,arguments),n&&(this.onsuccess=this.onsuccess?_e(n,this.onsuccess):n),r&&(this.onerror=this.onerror?_e(r,this.onerror):r)}}function Es(t,e){return t===R?e:function(n){var r=t.apply(this,arguments);V(n,r);var s=this.onsuccess,i=this.onerror;this.onsuccess=null,this.onerror=null;var a=e.apply(this,arguments);return s&&(this.onsuccess=this.onsuccess?_e(s,this.onsuccess):s),i&&(this.onerror=this.onerror?_e(i,this.onerror):i),r===void 0?a===void 0?void 0:a:V(r,a)}}function xs(t,e){return t===R?e:function(){return e.apply(this,arguments)!==!1&&t.apply(this,arguments)}}function xn(t,e){return t===R?e:function(){var n=t.apply(this,arguments);if(n&&typeof n.then=="function"){for(var r=this,s=arguments.length,i=new Array(s);s--;)i[s]=arguments[s];return n.then(function(){return e.apply(r,i)})}return e.apply(this,arguments)}}ft.ModifyError=Et,ft.DexieError=Oe,ft.BulkError=He;var Qe={};const fr=100,[Gt,xt,Wt]=typeof Promise>"u"?[]:(()=>{let t=Promise.resolve();if(typeof crypto>"u"||!crypto.subtle)return[t,Ye(t),t];const e=crypto.subtle.digest("SHA-512",new Uint8Array([0]));return[e,Ye(e),t]})(),pr=xt&&xt.then,pt=Gt&&Gt.constructor,Sn=!!Wt;var Yt=!1,Ss=Wt?()=>{Wt.then(it)}:O.setImmediate?setImmediate.bind(null,it):O.MutationObserver?()=>{var t=document.createElement("div");new MutationObserver(()=>{it(),t=null}).observe(t,{attributes:!0}),t.setAttribute("i","1")}:()=>{setTimeout(it,0)},Ve=function(t,e){qe.push([t,e]),St&&(Ss(),St=!1)},Jt=!0,St=!0,ve=[],mt=[],Qt=null,Xt=Je,Ke={id:"global",global:!0,ref:0,unhandleds:[],onunhandled:Mn,pgp:!1,env:{},finalize:function(){this.unhandleds.forEach(t=>{try{Mn(t[0],t[1])}catch{}})}},P=Ke,qe=[],be=0,yt=[];function S(t){if(typeof this!="object")throw new TypeError("Promises must be constructed via new");this._listeners=[],this.onuncatched=R,this._lib=!1;var e=this._PSD=P;if(X&&(this._stackHolder=xe(),this._prev=null,this._numPrev=0),typeof t!="function"){if(t!==Qe)throw new TypeError("Not a function");return this._state=arguments[1],this._value=arguments[2],void(this._state===!1&&en(this,this._value))}this._state=null,this._value=null,++e.ref,yr(this,t)}const Zt={get:function(){var t=P,e=Ct;function n(r,s){var i=!t.global&&(t!==P||e!==Ct);const a=i&&!ie();var o=new S((l,d)=>{Cn(this,new mr(Pt(r,t,i,a),Pt(s,t,i,a),l,d,t))});return X&&br(o,this),o}return n.prototype=Qe,n},set:function(t){re(this,"then",t&&t.prototype===Qe?Zt:{get:function(){return t},set:Zt.set})}};function mr(t,e,n,r,s){this.onFulfilled=typeof t=="function"?t:null,this.onRejected=typeof e=="function"?e:null,this.resolve=n,this.reject=r,this.psd=s}function yr(t,e){try{e(n=>{if(t._state===null){if(n===t)throw new TypeError("A promise cannot be resolved with itself.");var r=t._lib&&rt();n&&typeof n.then=="function"?yr(t,(s,i)=>{n instanceof S?n._then(s,i):n.then(s,i)}):(t._state=!0,t._value=n,gr(t)),r&&st()}},en.bind(null,t))}catch(n){en(t,n)}}function en(t,e){if(mt.push(e),t._state===null){var n=t._lib&&rt();e=Xt(e),t._state=!1,t._value=e,X&&e!==null&&typeof e=="object"&&!e._promise&&function(r,s,i){try{r.apply(null,i)}catch{}}(()=>{var r=wn(e,"stack");e._promise=t,re(e,"stack",{get:()=>Yt?r&&(r.get?r.get.apply(e):r.value):t.stack})}),function(r){ve.some(s=>s._value===r._value)||ve.push(r)}(t),gr(t),n&&st()}}function gr(t){var e=t._listeners;t._listeners=[];for(var n=0,r=e.length;n<r;++n)Cn(t,e[n]);var s=t._PSD;--s.ref||s.finalize(),be===0&&(++be,Ve(()=>{--be==0&&Pn()},[]))}function Cn(t,e){if(t._state!==null){var n=t._state?e.onFulfilled:e.onRejected;if(n===null)return(t._state?e.resolve:e.reject)(t._value);++e.psd.ref,++be,Ve(Cs,[n,t,e])}else t._listeners.push(e)}function Cs(t,e,n){try{Qt=e;var r,s=e._value;e._state?r=t(s):(mt.length&&(mt=[]),r=t(s),mt.indexOf(s)===-1&&function(i){for(var a=ve.length;a;)if(ve[--a]._value===i._value)return void ve.splice(a,1)}(e)),n.resolve(r)}catch(i){n.reject(i)}finally{Qt=null,--be==0&&Pn(),--n.psd.ref||n.psd.finalize()}}function vr(t,e,n){if(e.length===n)return e;var r="";if(t._state===!1){var s,i,a=t._value;a!=null?(s=a.name||"Error",i=a.message||a,r=zt(a,0)):(s=a,i=""),e.push(s+(i?": "+i:"")+r)}return X&&((r=zt(t._stackHolder,2))&&e.indexOf(r)===-1&&e.push(r),t._prev&&vr(t._prev,e,n)),e}function br(t,e){var n=e?e._numPrev+1:0;n<100&&(t._prev=e,t._numPrev=n)}function it(){rt()&&st()}function rt(){var t=Jt;return Jt=!1,St=!1,t}function st(){var t,e,n;do for(;qe.length>0;)for(t=qe,qe=[],n=t.length,e=0;e<n;++e){var r=t[e];r[0].apply(null,r[1])}while(qe.length>0);Jt=!0,St=!0}function Pn(){var t=ve;ve=[],t.forEach(r=>{r._PSD.onunhandled.call(null,r._value,r)});for(var e=yt.slice(0),n=e.length;n;)e[--n]()}function at(t){return new S(Qe,!1,t)}function K(t,e){var n=P;return function(){var r=rt(),s=P;try{return fe(n,!0),t.apply(this,arguments)}catch(i){e&&e(i)}finally{fe(s,!1),r&&st()}}}Be(S.prototype,{then:Zt,_then:function(t,e){Cn(this,new mr(null,null,t,e,P))},catch:function(t){if(arguments.length===1)return this.then(null,t);var e=arguments[0],n=arguments[1];return typeof e=="function"?this.then(null,r=>r instanceof e?n(r):at(r)):this.then(null,r=>r&&r.name===e?n(r):at(r))},finally:function(t){return this.then(e=>(t(),e),e=>(t(),at(e)))},stack:{get:function(){if(this._stack)return this._stack;try{Yt=!0;var t=vr(this,[],20).join(`
|
|
7
|
-
From previous: `);return this._state!==null&&(this._stack=t),t}finally{Yt=!1}}},timeout:function(t,e){return t<1/0?new S((n,r)=>{var s=setTimeout(()=>r(new I.Timeout(e)),t);this.then(n,r).finally(clearTimeout.bind(null,s))}):this}}),typeof Symbol<"u"&&Symbol.toStringTag&&re(S.prototype,Symbol.toStringTag,"Dexie.Promise"),Ke.env=wr(),Be(S,{all:function(){var t=te.apply(null,arguments).map(ot);return new S(function(e,n){t.length===0&&e([]);var r=t.length;t.forEach((s,i)=>S.resolve(s).then(a=>{t[i]=a,--r||e(t)},n))})},resolve:t=>{if(t instanceof S)return t;if(t&&typeof t.then=="function")return new S((n,r)=>{t.then(n,r)});var e=new S(Qe,!0,t);return br(e,Qt),e},reject:at,race:function(){var t=te.apply(null,arguments).map(ot);return new S((e,n)=>{t.map(r=>S.resolve(r).then(e,n))})},PSD:{get:()=>P,set:t=>P=t},totalEchoes:{get:()=>Ct},newPSD:he,usePSD:Me,scheduler:{get:()=>Ve,set:t=>{Ve=t}},rejectionMapper:{get:()=>Xt,set:t=>{Xt=t}},follow:(t,e)=>new S((n,r)=>he((s,i)=>{var a=P;a.unhandleds=[],a.onunhandled=i,a.finalize=_e(function(){(function(o){function l(){o(),yt.splice(yt.indexOf(l),1)}yt.push(l),++be,Ve(()=>{--be==0&&Pn()},[])})(()=>{this.unhandleds.length===0?s():i(this.unhandleds[0])})},a.finalize),t()},e,n,r))}),pt&&(pt.allSettled&&re(S,"allSettled",function(){const t=te.apply(null,arguments).map(ot);return new S(e=>{t.length===0&&e([]);let n=t.length;const r=new Array(n);t.forEach((s,i)=>S.resolve(s).then(a=>r[i]={status:"fulfilled",value:a},a=>r[i]={status:"rejected",reason:a}).then(()=>--n||e(r)))})}),pt.any&&typeof AggregateError<"u"&&re(S,"any",function(){const t=te.apply(null,arguments).map(ot);return new S((e,n)=>{t.length===0&&n(new AggregateError([]));let r=t.length;const s=new Array(r);t.forEach((i,a)=>S.resolve(i).then(o=>e(o),o=>{s[a]=o,--r||n(new AggregateError(s))}))})}));const U={awaits:0,echoes:0,id:0};var Ps=0,gt=[],Bt=0,Ct=0,Is=0;function he(t,e,n,r){var s=P,i=Object.create(s);i.parent=s,i.ref=0,i.global=!1,i.id=++Is;var a=Ke.env;i.env=Sn?{Promise:S,PromiseProp:{value:S,configurable:!0,writable:!0},all:S.all,race:S.race,allSettled:S.allSettled,any:S.any,resolve:S.resolve,reject:S.reject,nthen:Nn(a.nthen,i),gthen:Nn(a.gthen,i)}:{},e&&V(i,e),++s.ref,i.finalize=function(){--this.parent.ref||this.parent.finalize()};var o=Me(i,t,n,r);return i.ref===0&&i.finalize(),o}function je(){return U.id||(U.id=++Ps),++U.awaits,U.echoes+=fr,U.id}function ie(){return!!U.awaits&&(--U.awaits==0&&(U.id=0),U.echoes=U.awaits*fr,!0)}function ot(t){return U.echoes&&t&&t.constructor===pt?(je(),t.then(e=>(ie(),e),e=>(ie(),M(e)))):t}function As(t){++Ct,U.echoes&&--U.echoes!=0||(U.echoes=U.id=0),gt.push(P),fe(t,!0)}function Ts(){var t=gt[gt.length-1];gt.pop(),fe(t,!1)}function fe(t,e){var n=P;if((e?!U.echoes||Bt++&&t===P:!Bt||--Bt&&t===P)||_r(e?As.bind(null,t):Ts),t!==P&&(P=t,n===Ke&&(Ke.env=wr()),Sn)){var r=Ke.env.Promise,s=t.env;xt.then=s.nthen,r.prototype.then=s.gthen,(n.global||t.global)&&(Object.defineProperty(O,"Promise",s.PromiseProp),r.all=s.all,r.race=s.race,r.resolve=s.resolve,r.reject=s.reject,s.allSettled&&(r.allSettled=s.allSettled),s.any&&(r.any=s.any))}}function wr(){var t=O.Promise;return Sn?{Promise:t,PromiseProp:Object.getOwnPropertyDescriptor(O,"Promise"),all:t.all,race:t.race,allSettled:t.allSettled,any:t.any,resolve:t.resolve,reject:t.reject,nthen:xt.then,gthen:t.prototype.then}:{}}function Me(t,e,n,r,s){var i=P;try{return fe(t,!0),e(n,r,s)}finally{fe(i,!1)}}function _r(t){pr.call(Gt,t)}function Pt(t,e,n,r){return typeof t!="function"?t:function(){var s=P;n&&je(),fe(e,!0);try{return t.apply(this,arguments)}finally{fe(s,!1),r&&_r(ie)}}}function Nn(t,e){return function(n,r){return t.call(this,Pt(n,e),Pt(r,e))}}(""+pr).indexOf("[native code]")===-1&&(je=ie=R);const jn="unhandledrejection";function Mn(t,e){var n;try{n=e.onuncatched(t)}catch{}if(n!==!1)try{var r,s={promise:e,reason:t};if(O.document&&document.createEvent?((r=document.createEvent("Event")).initEvent(jn,!0,!0),V(r,s)):O.CustomEvent&&V(r=new CustomEvent(jn,{detail:s}),s),r&&O.dispatchEvent&&(dispatchEvent(r),!O.PromiseRejectionEvent&&O.onunhandledrejection))try{O.onunhandledrejection(r)}catch{}X&&r&&!r.defaultPrevented&&console.warn(`Unhandled rejection: ${t.stack||t}`)}catch{}}var M=S.reject;function tn(t,e,n,r){if(t.idbdb&&(t._state.openComplete||P.letThrough||t._vip)){var s=t._createTransaction(e,n,t._dbSchema);try{s.create(),t._state.PR1398_maxLoop=3}catch(i){return i.name===En.InvalidState&&t.isOpen()&&--t._state.PR1398_maxLoop>0?(console.warn("Dexie: Need to reopen db"),t._close(),t.open().then(()=>tn(t,e,n,r))):M(i)}return s._promise(e,(i,a)=>he(()=>(P.trans=s,r(i,a,s)))).then(i=>s._completion.then(()=>i))}if(t._state.openComplete)return M(new I.DatabaseClosed(t._state.dbOpenError));if(!t._state.isBeingOpened){if(!t._options.autoOpen)return M(new I.DatabaseClosed);t.open().catch(R)}return t._state.dbReadyPromise.then(()=>tn(t,e,n,r))}const $n="3.2.7",ge="",nn=-1/0,Z="Invalid key provided. Keys must be of type string, number, Date or Array<string | number | Date>.",kr="String expected.",ze=[],Rt=typeof navigator<"u"&&/(MSIE|Trident|Edge)/.test(navigator.userAgent),Ds=Rt,Rs=Rt,Er=t=>!/(dexie\.js|dexie\.min\.js)/.test(t),Ot="__dbnames",Nt="readonly",jt="readwrite";function ke(t,e){return t?e?function(){return t.apply(this,arguments)&&e.apply(this,arguments)}:t:e}const xr={type:3,lower:-1/0,lowerOpen:!1,upper:[[]],upperOpen:!1};function lt(t){return typeof t!="string"||/\./.test(t)?e=>e:e=>(e[t]===void 0&&t in e&&delete(e=nt(e))[t],e)}class Os{_trans(e,n,r){const s=this._tx||P.trans,i=this.name;function a(l,d,c){if(!c.schema[i])throw new I.NotFound("Table "+i+" not part of transaction");return n(c.idbtrans,c)}const o=rt();try{return s&&s.db===this.db?s===P.trans?s._promise(e,a,r):he(()=>s._promise(e,a,r),{trans:s,transless:P.transless||P}):tn(this.db,e,[this.name],a)}finally{o&&st()}}get(e,n){return e&&e.constructor===Object?this.where(e).first(n):this._trans("readonly",r=>this.core.get({trans:r,key:e}).then(s=>this.hook.reading.fire(s))).then(n)}where(e){if(typeof e=="string")return new this.db.WhereClause(this,e);if(F(e))return new this.db.WhereClause(this,`[${e.join("+")}]`);const n=j(e);if(n.length===1)return this.where(n[0]).equals(e[n[0]]);const r=this.schema.indexes.concat(this.schema.primKey).filter(d=>{if(d.compound&&n.every(c=>d.keyPath.indexOf(c)>=0)){for(let c=0;c<n.length;++c)if(n.indexOf(d.keyPath[c])===-1)return!1;return!0}return!1}).sort((d,c)=>d.keyPath.length-c.keyPath.length)[0];if(r&&this.db._maxKey!==ge){const d=r.keyPath.slice(0,n.length);return this.where(d).equals(d.map(c=>e[c]))}!r&&X&&console.warn(`The query ${JSON.stringify(e)} on ${this.name} would benefit of a compound index [${n.join("+")}]`);const{idxByName:s}=this.schema,i=this.db._deps.indexedDB;function a(d,c){try{return i.cmp(d,c)===0}catch{return!1}}const[o,l]=n.reduce(([d,c],h)=>{const u=s[h],f=e[h];return[d||u,d||!u?ke(c,u&&u.multi?g=>{const y=se(g,h);return F(y)&&y.some(v=>a(f,v))}:g=>a(f,se(g,h))):c]},[null,null]);return o?this.where(o.name).equals(e[o.keyPath]).filter(l):r?this.filter(l):this.where(n).equals("")}filter(e){return this.toCollection().and(e)}count(e){return this.toCollection().count(e)}offset(e){return this.toCollection().offset(e)}limit(e){return this.toCollection().limit(e)}each(e){return this.toCollection().each(e)}toArray(e){return this.toCollection().toArray(e)}toCollection(){return new this.db.Collection(new this.db.WhereClause(this))}orderBy(e){return new this.db.Collection(new this.db.WhereClause(this,F(e)?`[${e.join("+")}]`:e))}reverse(){return this.toCollection().reverse()}mapToClass(e){this.schema.mappedClass=e;const n=r=>{if(!r)return r;const s=Object.create(e.prototype);for(var i in r)if(W(r,i))try{s[i]=r[i]}catch{}return s};return this.schema.readHook&&this.hook.reading.unsubscribe(this.schema.readHook),this.schema.readHook=n,this.hook("reading",n),e}defineClass(){return this.mapToClass(function(e){V(this,e)})}add(e,n){const{auto:r,keyPath:s}=this.schema.primKey;let i=e;return s&&r&&(i=lt(s)(e)),this._trans("readwrite",a=>this.core.mutate({trans:a,type:"add",keys:n!=null?[n]:null,values:[i]})).then(a=>a.numFailures?S.reject(a.failures[0]):a.lastResult).then(a=>{if(s)try{Y(e,s,a)}catch{}return a})}update(e,n){if(typeof e!="object"||F(e))return this.where(":id").equals(e).modify(n);{const r=se(e,this.schema.primKey.keyPath);if(r===void 0)return M(new I.InvalidArgument("Given object does not contain its primary key"));try{typeof n!="function"?j(n).forEach(s=>{Y(e,s,n[s])}):n(e,{value:e,primKey:r})}catch{}return this.where(":id").equals(r).modify(n)}}put(e,n){const{auto:r,keyPath:s}=this.schema.primKey;let i=e;return s&&r&&(i=lt(s)(e)),this._trans("readwrite",a=>this.core.mutate({trans:a,type:"put",values:[i],keys:n!=null?[n]:null})).then(a=>a.numFailures?S.reject(a.failures[0]):a.lastResult).then(a=>{if(s)try{Y(e,s,a)}catch{}return a})}delete(e){return this._trans("readwrite",n=>this.core.mutate({trans:n,type:"delete",keys:[e]})).then(n=>n.numFailures?S.reject(n.failures[0]):void 0)}clear(){return this._trans("readwrite",e=>this.core.mutate({trans:e,type:"deleteRange",range:xr})).then(e=>e.numFailures?S.reject(e.failures[0]):void 0)}bulkGet(e){return this._trans("readonly",n=>this.core.getMany({keys:e,trans:n}).then(r=>r.map(s=>this.hook.reading.fire(s))))}bulkAdd(e,n,r){const s=Array.isArray(n)?n:void 0,i=(r=r||(s?void 0:n))?r.allKeys:void 0;return this._trans("readwrite",a=>{const{auto:o,keyPath:l}=this.schema.primKey;if(l&&s)throw new I.InvalidArgument("bulkAdd(): keys argument invalid on tables with inbound keys");if(s&&s.length!==e.length)throw new I.InvalidArgument("Arguments objects and keys must have the same length");const d=e.length;let c=l&&o?e.map(lt(l)):e;return this.core.mutate({trans:a,type:"add",keys:s,values:c,wantResults:i}).then(({numFailures:h,results:u,lastResult:f,failures:g})=>{if(h===0)return i?u:f;throw new He(`${this.name}.bulkAdd(): ${h} of ${d} operations failed`,g)})})}bulkPut(e,n,r){const s=Array.isArray(n)?n:void 0,i=(r=r||(s?void 0:n))?r.allKeys:void 0;return this._trans("readwrite",a=>{const{auto:o,keyPath:l}=this.schema.primKey;if(l&&s)throw new I.InvalidArgument("bulkPut(): keys argument invalid on tables with inbound keys");if(s&&s.length!==e.length)throw new I.InvalidArgument("Arguments objects and keys must have the same length");const d=e.length;let c=l&&o?e.map(lt(l)):e;return this.core.mutate({trans:a,type:"put",keys:s,values:c,wantResults:i}).then(({numFailures:h,results:u,lastResult:f,failures:g})=>{if(h===0)return i?u:f;throw new He(`${this.name}.bulkPut(): ${h} of ${d} operations failed`,g)})})}bulkDelete(e){const n=e.length;return this._trans("readwrite",r=>this.core.mutate({trans:r,type:"delete",keys:e})).then(({numFailures:r,lastResult:s,failures:i})=>{if(r===0)return s;throw new He(`${this.name}.bulkDelete(): ${r} of ${n} operations failed`,i)})}}function Ge(t){var e={},n=function(a,o){if(o){for(var l=arguments.length,d=new Array(l-1);--l;)d[l-1]=arguments[l];return e[a].subscribe.apply(null,d),t}if(typeof a=="string")return e[a]};n.addEventType=i;for(var r=1,s=arguments.length;r<s;++r)i(arguments[r]);return n;function i(a,o,l){if(typeof a!="object"){var d;o||(o=xs),l||(l=R);var c={subscribers:[],fire:l,subscribe:function(h){c.subscribers.indexOf(h)===-1&&(c.subscribers.push(h),c.fire=o(c.fire,h))},unsubscribe:function(h){c.subscribers=c.subscribers.filter(function(u){return u!==h}),c.fire=c.subscribers.reduce(o,l)}};return e[a]=n[a]=c,c}j(d=a).forEach(function(h){var u=d[h];if(F(u))i(h,d[h][0],d[h][1]);else{if(u!=="asap")throw new I.InvalidArgument("Invalid event config");var f=i(h,Je,function(){for(var g=arguments.length,y=new Array(g);g--;)y[g]=arguments[g];f.subscribers.forEach(function(v){sr(function(){v.apply(null,y)})})})}})}}function Ue(t,e){return Re(e).from({prototype:t}),e}function Ae(t,e){return!(t.filter||t.algorithm||t.or)&&(e?t.justLimit:!t.replayFilter)}function Mt(t,e){t.filter=ke(t.filter,e)}function $t(t,e,n){var r=t.replayFilter;t.replayFilter=r?()=>ke(r(),e()):e,t.justLimit=n&&!r}function vt(t,e){if(t.isPrimKey)return e.primaryKey;const n=e.getIndexByKeyPath(t.index);if(!n)throw new I.Schema("KeyPath "+t.index+" on object store "+e.name+" is not indexed");return n}function Un(t,e,n){const r=vt(t,e.schema);return e.openCursor({trans:n,values:!t.keysOnly,reverse:t.dir==="prev",unique:!!t.unique,query:{index:r,range:t.range}})}function ct(t,e,n,r){const s=t.replayFilter?ke(t.filter,t.replayFilter()):t.filter;if(t.or){const i={},a=(o,l,d)=>{if(!s||s(l,d,u=>l.stop(u),u=>l.fail(u))){var c=l.primaryKey,h=""+c;h==="[object ArrayBuffer]"&&(h=""+new Uint8Array(c)),W(i,h)||(i[h]=!0,e(o,l,d))}};return Promise.all([t.or._iterate(a,n),Fn(Un(t,r,n),t.algorithm,a,!t.keysOnly&&t.valueMapper)])}return Fn(Un(t,r,n),ke(t.algorithm,s),e,!t.keysOnly&&t.valueMapper)}function Fn(t,e,n,r){var s=K(r?(i,a,o)=>n(r(i),a,o):n);return t.then(i=>{if(i)return i.start(()=>{var a=()=>i.continue();e&&!e(i,o=>a=o,o=>{i.stop(o),a=R},o=>{i.fail(o),a=R})||s(i.value,i,o=>a=o),a()})})}function H(t,e){try{const n=Ln(t),r=Ln(e);if(n!==r)return n==="Array"?1:r==="Array"?-1:n==="binary"?1:r==="binary"?-1:n==="string"?1:r==="string"?-1:n==="Date"?1:r!=="Date"?NaN:-1;switch(n){case"number":case"Date":case"string":return t>e?1:t<e?-1:0;case"binary":return function(s,i){const a=s.length,o=i.length,l=a<o?a:o;for(let d=0;d<l;++d)if(s[d]!==i[d])return s[d]<i[d]?-1:1;return a===o?0:a<o?-1:1}(qn(t),qn(e));case"Array":return function(s,i){const a=s.length,o=i.length,l=a<o?a:o;for(let d=0;d<l;++d){const c=H(s[d],i[d]);if(c!==0)return c}return a===o?0:a<o?-1:1}(t,e)}}catch{}return NaN}function Ln(t){const e=typeof t;if(e!=="object")return e;if(ArrayBuffer.isView(t))return"binary";const n=Ht(t);return n==="ArrayBuffer"?"binary":n}function qn(t){return t instanceof Uint8Array?t:ArrayBuffer.isView(t)?new Uint8Array(t.buffer,t.byteOffset,t.byteLength):new Uint8Array(t)}class Ks{_read(e,n){var r=this._ctx;return r.error?r.table._trans(null,M.bind(null,r.error)):r.table._trans("readonly",e).then(n)}_write(e){var n=this._ctx;return n.error?n.table._trans(null,M.bind(null,n.error)):n.table._trans("readwrite",e,"locked")}_addAlgorithm(e){var n=this._ctx;n.algorithm=ke(n.algorithm,e)}_iterate(e,n){return ct(this._ctx,e,n,this._ctx.table.core)}clone(e){var n=Object.create(this.constructor.prototype),r=Object.create(this._ctx);return e&&V(r,e),n._ctx=r,n}raw(){return this._ctx.valueMapper=null,this}each(e){var n=this._ctx;return this._read(r=>ct(n,e,r,n.table.core))}count(e){return this._read(n=>{const r=this._ctx,s=r.table.core;if(Ae(r,!0))return s.count({trans:n,query:{index:vt(r,s.schema),range:r.range}}).then(a=>Math.min(a,r.limit));var i=0;return ct(r,()=>(++i,!1),n,s).then(()=>i)}).then(e)}sortBy(e,n){const r=e.split(".").reverse(),s=r[0],i=r.length-1;function a(d,c){return c?a(d[r[c]],c-1):d[s]}var o=this._ctx.dir==="next"?1:-1;function l(d,c){var h=a(d,i),u=a(c,i);return h<u?-o:h>u?o:0}return this.toArray(function(d){return d.sort(l)}).then(n)}toArray(e){return this._read(n=>{var r=this._ctx;if(r.dir==="next"&&Ae(r,!0)&&r.limit>0){const{valueMapper:s}=r,i=vt(r,r.table.core.schema);return r.table.core.query({trans:n,limit:r.limit,values:!0,query:{index:i,range:r.range}}).then(({result:a})=>s?a.map(s):a)}{const s=[];return ct(r,i=>s.push(i),n,r.table.core).then(()=>s)}},e)}offset(e){var n=this._ctx;return e<=0||(n.offset+=e,Ae(n)?$t(n,()=>{var r=e;return(s,i)=>r===0||(r===1?(--r,!1):(i(()=>{s.advance(r),r=0}),!1))}):$t(n,()=>{var r=e;return()=>--r<0})),this}limit(e){return this._ctx.limit=Math.min(this._ctx.limit,e),$t(this._ctx,()=>{var n=e;return function(r,s,i){return--n<=0&&s(i),n>=0}},!0),this}until(e,n){return Mt(this._ctx,function(r,s,i){return!e(r.value)||(s(i),n)}),this}first(e){return this.limit(1).toArray(function(n){return n[0]}).then(e)}last(e){return this.reverse().first(e)}filter(e){var n,r;return Mt(this._ctx,function(s){return e(s.value)}),n=this._ctx,r=e,n.isMatch=ke(n.isMatch,r),this}and(e){return this.filter(e)}or(e){return new this.db.WhereClause(this._ctx.table,e,this)}reverse(){return this._ctx.dir=this._ctx.dir==="prev"?"next":"prev",this._ondirectionchange&&this._ondirectionchange(this._ctx.dir),this}desc(){return this.reverse()}eachKey(e){var n=this._ctx;return n.keysOnly=!n.isMatch,this.each(function(r,s){e(s.key,s)})}eachUniqueKey(e){return this._ctx.unique="unique",this.eachKey(e)}eachPrimaryKey(e){var n=this._ctx;return n.keysOnly=!n.isMatch,this.each(function(r,s){e(s.primaryKey,s)})}keys(e){var n=this._ctx;n.keysOnly=!n.isMatch;var r=[];return this.each(function(s,i){r.push(i.key)}).then(function(){return r}).then(e)}primaryKeys(e){var n=this._ctx;if(n.dir==="next"&&Ae(n,!0)&&n.limit>0)return this._read(s=>{var i=vt(n,n.table.core.schema);return n.table.core.query({trans:s,values:!1,limit:n.limit,query:{index:i,range:n.range}})}).then(({result:s})=>s).then(e);n.keysOnly=!n.isMatch;var r=[];return this.each(function(s,i){r.push(i.primaryKey)}).then(function(){return r}).then(e)}uniqueKeys(e){return this._ctx.unique="unique",this.keys(e)}firstKey(e){return this.limit(1).keys(function(n){return n[0]}).then(e)}lastKey(e){return this.reverse().firstKey(e)}distinct(){var e=this._ctx,n=e.index&&e.table.schema.idxByName[e.index];if(!n||!n.multi)return this;var r={};return Mt(this._ctx,function(s){var i=s.primaryKey.toString(),a=W(r,i);return r[i]=!0,!a}),this}modify(e){var n=this._ctx;return this._write(r=>{var s;if(typeof e=="function")s=e;else{var i=j(e),a=i.length;s=function(y){for(var v=!1,m=0;m<a;++m){var p=i[m],_=e[p];se(y,p)!==_&&(Y(y,p,_),v=!0)}return v}}const o=n.table.core,{outbound:l,extractKey:d}=o.schema.primaryKey,c=this.db._options.modifyChunkSize||200,h=[];let u=0;const f=[],g=(y,v)=>{const{failures:m,numFailures:p}=v;u+=y-p;for(let _ of j(m))h.push(m[_])};return this.clone().primaryKeys().then(y=>{const v=m=>{const p=Math.min(c,y.length-m);return o.getMany({trans:r,keys:y.slice(m,m+p),cache:"immutable"}).then(_=>{const x=[],C=[],E=l?[]:null,w=[];for(let k=0;k<p;++k){const B=_[k],D={value:nt(B),primKey:y[m+k]};s.call(D,D.value,D)!==!1&&(D.value==null?w.push(y[m+k]):l||H(d(B),d(D.value))===0?(C.push(D.value),l&&E.push(y[m+k])):(w.push(y[m+k]),x.push(D.value)))}const T=Ae(n)&&n.limit===1/0&&(typeof e!="function"||e===Ut)&&{index:n.index,range:n.range};return Promise.resolve(x.length>0&&o.mutate({trans:r,type:"add",values:x}).then(k=>{for(let B in k.failures)w.splice(parseInt(B),1);g(x.length,k)})).then(()=>(C.length>0||T&&typeof e=="object")&&o.mutate({trans:r,type:"put",keys:E,values:C,criteria:T,changeSpec:typeof e!="function"&&e}).then(k=>g(C.length,k))).then(()=>(w.length>0||T&&e===Ut)&&o.mutate({trans:r,type:"delete",keys:w,criteria:T}).then(k=>g(w.length,k))).then(()=>y.length>m+p&&v(m+c))})};return v(0).then(()=>{if(h.length>0)throw new Et("Error modifying one or more objects",h,u,f);return y.length})})})}delete(){var e=this._ctx,n=e.range;return Ae(e)&&(e.isPrimKey&&!Rs||n.type===3)?this._write(r=>{const{primaryKey:s}=e.table.core.schema,i=n;return e.table.core.count({trans:r,query:{index:s,range:i}}).then(a=>e.table.core.mutate({trans:r,type:"deleteRange",range:i}).then(({failures:o,lastResult:l,results:d,numFailures:c})=>{if(c)throw new Et("Could not delete some values",Object.keys(o).map(h=>o[h]),a-c);return a-c}))}):this.modify(Ut)}}const Ut=(t,e)=>e.value=null;function Bs(t,e){return t<e?-1:t===e?0:1}function Ns(t,e){return t>e?-1:t===e?0:1}function G(t,e,n){var r=t instanceof Cr?new t.Collection(t):t;return r._ctx.error=n?new n(e):new TypeError(e),r}function Te(t){return new t.Collection(t,()=>Sr("")).limit(0)}function js(t,e,n,r,s,i){for(var a=Math.min(t.length,r.length),o=-1,l=0;l<a;++l){var d=e[l];if(d!==r[l])return s(t[l],n[l])<0?t.substr(0,l)+n[l]+n.substr(l+1):s(t[l],r[l])<0?t.substr(0,l)+r[l]+n.substr(l+1):o>=0?t.substr(0,o)+e[o]+n.substr(o+1):null;s(t[l],d)<0&&(o=l)}return a<r.length&&i==="next"?t+n.substr(t.length):a<t.length&&i==="prev"?t.substr(0,n.length):o<0?null:t.substr(0,o)+r[o]+n.substr(o+1)}function ut(t,e,n,r){var s,i,a,o,l,d,c,h=n.length;if(!n.every(y=>typeof y=="string"))return G(t,kr);function u(y){s=function(m){return m==="next"?p=>p.toUpperCase():p=>p.toLowerCase()}(y),i=function(m){return m==="next"?p=>p.toLowerCase():p=>p.toUpperCase()}(y),a=y==="next"?Bs:Ns;var v=n.map(function(m){return{lower:i(m),upper:s(m)}}).sort(function(m,p){return a(m.lower,p.lower)});o=v.map(function(m){return m.upper}),l=v.map(function(m){return m.lower}),d=y,c=y==="next"?"":r}u("next");var f=new t.Collection(t,()=>oe(o[0],l[h-1]+r));f._ondirectionchange=function(y){u(y)};var g=0;return f._addAlgorithm(function(y,v,m){var p=y.key;if(typeof p!="string")return!1;var _=i(p);if(e(_,l,g))return!0;for(var x=null,C=g;C<h;++C){var E=js(p,_,o[C],l[C],a,d);E===null&&x===null?g=C+1:(x===null||a(x,E)>0)&&(x=E)}return v(x!==null?function(){y.continue(x+c)}:m),!1}),f}function oe(t,e,n,r){return{type:2,lower:t,upper:e,lowerOpen:n,upperOpen:r}}function Sr(t){return{type:1,lower:t,upper:t}}class Cr{get Collection(){return this._ctx.table.db.Collection}between(e,n,r,s){r=r!==!1,s=s===!0;try{return this._cmp(e,n)>0||this._cmp(e,n)===0&&(r||s)&&(!r||!s)?Te(this):new this.Collection(this,()=>oe(e,n,!r,!s))}catch{return G(this,Z)}}equals(e){return e==null?G(this,Z):new this.Collection(this,()=>Sr(e))}above(e){return e==null?G(this,Z):new this.Collection(this,()=>oe(e,void 0,!0))}aboveOrEqual(e){return e==null?G(this,Z):new this.Collection(this,()=>oe(e,void 0,!1))}below(e){return e==null?G(this,Z):new this.Collection(this,()=>oe(void 0,e,!1,!0))}belowOrEqual(e){return e==null?G(this,Z):new this.Collection(this,()=>oe(void 0,e))}startsWith(e){return typeof e!="string"?G(this,kr):this.between(e,e+ge,!0,!0)}startsWithIgnoreCase(e){return e===""?this.startsWith(e):ut(this,(n,r)=>n.indexOf(r[0])===0,[e],ge)}equalsIgnoreCase(e){return ut(this,(n,r)=>n===r[0],[e],"")}anyOfIgnoreCase(){var e=te.apply(De,arguments);return e.length===0?Te(this):ut(this,(n,r)=>r.indexOf(n)!==-1,e,"")}startsWithAnyOfIgnoreCase(){var e=te.apply(De,arguments);return e.length===0?Te(this):ut(this,(n,r)=>r.some(s=>n.indexOf(s)===0),e,ge)}anyOf(){const e=te.apply(De,arguments);let n=this._cmp;try{e.sort(n)}catch{return G(this,Z)}if(e.length===0)return Te(this);const r=new this.Collection(this,()=>oe(e[0],e[e.length-1]));r._ondirectionchange=i=>{n=i==="next"?this._ascending:this._descending,e.sort(n)};let s=0;return r._addAlgorithm((i,a,o)=>{const l=i.key;for(;n(l,e[s])>0;)if(++s,s===e.length)return a(o),!1;return n(l,e[s])===0||(a(()=>{i.continue(e[s])}),!1)}),r}notEqual(e){return this.inAnyRange([[nn,e],[e,this.db._maxKey]],{includeLowers:!1,includeUppers:!1})}noneOf(){const e=te.apply(De,arguments);if(e.length===0)return new this.Collection(this);try{e.sort(this._ascending)}catch{return G(this,Z)}const n=e.reduce((r,s)=>r?r.concat([[r[r.length-1][1],s]]):[[nn,s]],null);return n.push([e[e.length-1],this.db._maxKey]),this.inAnyRange(n,{includeLowers:!1,includeUppers:!1})}inAnyRange(e,n){const r=this._cmp,s=this._ascending,i=this._descending,a=this._min,o=this._max;if(e.length===0)return Te(this);if(!e.every(p=>p[0]!==void 0&&p[1]!==void 0&&s(p[0],p[1])<=0))return G(this,"First argument to inAnyRange() must be an Array of two-value Arrays [lower,upper] where upper must not be lower than lower",I.InvalidArgument);const l=!n||n.includeLowers!==!1,d=n&&n.includeUppers===!0;let c,h=s;function u(p,_){return h(p[0],_[0])}try{c=e.reduce(function(p,_){let x=0,C=p.length;for(;x<C;++x){const E=p[x];if(r(_[0],E[1])<0&&r(_[1],E[0])>0){E[0]=a(E[0],_[0]),E[1]=o(E[1],_[1]);break}}return x===C&&p.push(_),p},[]),c.sort(u)}catch{return G(this,Z)}let f=0;const g=d?p=>s(p,c[f][1])>0:p=>s(p,c[f][1])>=0,y=l?p=>i(p,c[f][0])>0:p=>i(p,c[f][0])>=0;let v=g;const m=new this.Collection(this,()=>oe(c[0][0],c[c.length-1][1],!l,!d));return m._ondirectionchange=p=>{p==="next"?(v=g,h=s):(v=y,h=i),c.sort(u)},m._addAlgorithm((p,_,x)=>{for(var C=p.key;v(C);)if(++f,f===c.length)return _(x),!1;return!!function(E){return!g(E)&&!y(E)}(C)||(this._cmp(C,c[f][1])===0||this._cmp(C,c[f][0])===0||_(()=>{h===s?p.continue(c[f][0]):p.continue(c[f][1])}),!1)}),m}startsWithAnyOf(){const e=te.apply(De,arguments);return e.every(n=>typeof n=="string")?e.length===0?Te(this):this.inAnyRange(e.map(n=>[n,n+ge])):G(this,"startsWithAnyOf() only works with strings")}}function Q(t){return K(function(e){return Xe(e),t(e.target.error),!1})}function Xe(t){t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault()}const Ze="storagemutated",ce="x-storagemutated-1",pe=Ge(null,Ze);class Ms{_lock(){return Le(!P.global),++this._reculock,this._reculock!==1||P.global||(P.lockOwnerFor=this),this}_unlock(){if(Le(!P.global),--this._reculock==0)for(P.global||(P.lockOwnerFor=null);this._blockedFuncs.length>0&&!this._locked();){var e=this._blockedFuncs.shift();try{Me(e[1],e[0])}catch{}}return this}_locked(){return this._reculock&&P.lockOwnerFor!==this}create(e){if(!this.mode)return this;const n=this.db.idbdb,r=this.db._state.dbOpenError;if(Le(!this.idbtrans),!e&&!n)switch(r&&r.name){case"DatabaseClosedError":throw new I.DatabaseClosed(r);case"MissingAPIError":throw new I.MissingAPI(r.message,r);default:throw new I.OpenFailed(r)}if(!this.active)throw new I.TransactionInactive;return Le(this._completion._state===null),(e=this.idbtrans=e||(this.db.core?this.db.core.transaction(this.storeNames,this.mode,{durability:this.chromeTransactionDurability}):n.transaction(this.storeNames,this.mode,{durability:this.chromeTransactionDurability}))).onerror=K(s=>{Xe(s),this._reject(e.error)}),e.onabort=K(s=>{Xe(s),this.active&&this._reject(new I.Abort(e.error)),this.active=!1,this.on("abort").fire(s)}),e.oncomplete=K(()=>{this.active=!1,this._resolve(),"mutatedParts"in e&&pe.storagemutated.fire(e.mutatedParts)}),this}_promise(e,n,r){if(e==="readwrite"&&this.mode!=="readwrite")return M(new I.ReadOnly("Transaction is readonly"));if(!this.active)return M(new I.TransactionInactive);if(this._locked())return new S((i,a)=>{this._blockedFuncs.push([()=>{this._promise(e,n,r).then(i,a)},P])});if(r)return he(()=>{var i=new S((a,o)=>{this._lock();const l=n(a,o,this);l&&l.then&&l.then(a,o)});return i.finally(()=>this._unlock()),i._lib=!0,i});var s=new S((i,a)=>{var o=n(i,a,this);o&&o.then&&o.then(i,a)});return s._lib=!0,s}_root(){return this.parent?this.parent._root():this}waitFor(e){var n=this._root();const r=S.resolve(e);if(n._waitingFor)n._waitingFor=n._waitingFor.then(()=>r);else{n._waitingFor=r,n._waitingQueue=[];var s=n.idbtrans.objectStore(n.storeNames[0]);(function a(){for(++n._spinCount;n._waitingQueue.length;)n._waitingQueue.shift()();n._waitingFor&&(s.get(-1/0).onsuccess=a)})()}var i=n._waitingFor;return new S((a,o)=>{r.then(l=>n._waitingQueue.push(K(a.bind(null,l))),l=>n._waitingQueue.push(K(o.bind(null,l)))).finally(()=>{n._waitingFor===i&&(n._waitingFor=null)})})}abort(){this.active&&(this.active=!1,this.idbtrans&&this.idbtrans.abort(),this._reject(new I.Abort))}table(e){const n=this._memoizedTables||(this._memoizedTables={});if(W(n,e))return n[e];const r=this.schema[e];if(!r)throw new I.NotFound("Table "+e+" not part of transaction");const s=new this.db.Table(e,r,this);return s.core=this.db.core.table(e),n[e]=s,s}}function rn(t,e,n,r,s,i,a){return{name:t,keyPath:e,unique:n,multi:r,auto:s,compound:i,src:(n&&!a?"&":"")+(r?"*":"")+(s?"++":"")+Pr(e)}}function Pr(t){return typeof t=="string"?t:t?"["+[].join.call(t,"+")+"]":""}function Ir(t,e,n){return{name:t,primKey:e,indexes:n,mappedClass:null,idxByName:ir(n,r=>[r.name,r])}}let et=t=>{try{return t.only([[]]),et=()=>[[]],[[]]}catch{return et=()=>ge,ge}};function sn(t){return t==null?()=>{}:typeof t=="string"?function(e){return e.split(".").length===1?r=>r[e]:r=>se(r,e)}(t):e=>se(e,t)}function Hn(t){return[].slice.call(t)}let $s=0;function We(t){return t==null?":id":typeof t=="string"?t:`[${t.join("+")}]`}function Us(t,e,n){function r(l){if(l.type===3)return null;if(l.type===4)throw new Error("Cannot convert never type to IDBKeyRange");const{lower:d,upper:c,lowerOpen:h,upperOpen:u}=l;return d===void 0?c===void 0?null:e.upperBound(c,!!u):c===void 0?e.lowerBound(d,!!h):e.bound(d,c,!!h,!!u)}const{schema:s,hasGetAll:i}=function(l,d){const c=Hn(l.objectStoreNames);return{schema:{name:l.name,tables:c.map(h=>d.objectStore(h)).map(h=>{const{keyPath:u,autoIncrement:f}=h,g=F(u),y=u==null,v={},m={name:h.name,primaryKey:{name:null,isPrimaryKey:!0,outbound:y,compound:g,keyPath:u,autoIncrement:f,unique:!0,extractKey:sn(u)},indexes:Hn(h.indexNames).map(p=>h.index(p)).map(p=>{const{name:_,unique:x,multiEntry:C,keyPath:E}=p,w={name:_,compound:F(E),keyPath:E,unique:x,multiEntry:C,extractKey:sn(E)};return v[We(E)]=w,w}),getIndexByKeyPath:p=>v[We(p)]};return v[":id"]=m.primaryKey,u!=null&&(v[We(u)]=m.primaryKey),m})},hasGetAll:c.length>0&&"getAll"in d.objectStore(c[0])&&!(typeof navigator<"u"&&/Safari/.test(navigator.userAgent)&&!/(Chrome\/|Edge\/)/.test(navigator.userAgent)&&[].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1]<604)}}(t,n),a=s.tables.map(l=>function(d){const c=d.name;return{name:c,schema:d,mutate:function({trans:h,type:u,keys:f,values:g,range:y}){return new Promise((v,m)=>{v=K(v);const p=h.objectStore(c),_=p.keyPath==null,x=u==="put"||u==="add";if(!x&&u!=="delete"&&u!=="deleteRange")throw new Error("Invalid operation type: "+u);const{length:C}=f||g||{length:1};if(f&&g&&f.length!==g.length)throw new Error("Given keys array must have same length as given values array.");if(C===0)return v({numFailures:0,failures:{},results:[],lastResult:void 0});let E;const w=[],T=[];let k=0;const B=q=>{++k,Xe(q)};if(u==="deleteRange"){if(y.type===4)return v({numFailures:k,failures:T,results:[],lastResult:void 0});y.type===3?w.push(E=p.clear()):w.push(E=p.delete(r(y)))}else{const[q,$]=x?_?[g,f]:[g,null]:[f,null];if(x)for(let N=0;N<C;++N)w.push(E=$&&$[N]!==void 0?p[u](q[N],$[N]):p[u](q[N])),E.onerror=B;else for(let N=0;N<C;++N)w.push(E=p[u](q[N])),E.onerror=B}const D=q=>{const $=q.target.result;w.forEach((N,Ce)=>N.error!=null&&(T[Ce]=N.error)),v({numFailures:k,failures:T,results:u==="delete"?f:w.map(N=>N.result),lastResult:$})};E.onerror=q=>{B(q),D(q)},E.onsuccess=D})},getMany:({trans:h,keys:u})=>new Promise((f,g)=>{f=K(f);const y=h.objectStore(c),v=u.length,m=new Array(v);let p,_=0,x=0;const C=w=>{const T=w.target;m[T._pos]=T.result,++x===_&&f(m)},E=Q(g);for(let w=0;w<v;++w)u[w]!=null&&(p=y.get(u[w]),p._pos=w,p.onsuccess=C,p.onerror=E,++_);_===0&&f(m)}),get:({trans:h,key:u})=>new Promise((f,g)=>{f=K(f);const y=h.objectStore(c).get(u);y.onsuccess=v=>f(v.target.result),y.onerror=Q(g)}),query:function(h){return u=>new Promise((f,g)=>{f=K(f);const{trans:y,values:v,limit:m,query:p}=u,_=m===1/0?void 0:m,{index:x,range:C}=p,E=y.objectStore(c),w=x.isPrimaryKey?E:E.index(x.name),T=r(C);if(m===0)return f({result:[]});if(h){const k=v?w.getAll(T,_):w.getAllKeys(T,_);k.onsuccess=B=>f({result:B.target.result}),k.onerror=Q(g)}else{let k=0;const B=v||!("openKeyCursor"in w)?w.openCursor(T):w.openKeyCursor(T),D=[];B.onsuccess=q=>{const $=B.result;return $?(D.push(v?$.value:$.primaryKey),++k===m?f({result:D}):void $.continue()):f({result:D})},B.onerror=Q(g)}})}(i),openCursor:function({trans:h,values:u,query:f,reverse:g,unique:y}){return new Promise((v,m)=>{v=K(v);const{index:p,range:_}=f,x=h.objectStore(c),C=p.isPrimaryKey?x:x.index(p.name),E=g?y?"prevunique":"prev":y?"nextunique":"next",w=u||!("openKeyCursor"in C)?C.openCursor(r(_),E):C.openKeyCursor(r(_),E);w.onerror=Q(m),w.onsuccess=K(T=>{const k=w.result;if(!k)return void v(null);k.___id=++$s,k.done=!1;const B=k.continue.bind(k);let D=k.continuePrimaryKey;D&&(D=D.bind(k));const q=k.advance.bind(k),$=()=>{throw new Error("Cursor not stopped")};k.trans=h,k.stop=k.continue=k.continuePrimaryKey=k.advance=()=>{throw new Error("Cursor not started")},k.fail=K(m),k.next=function(){let N=1;return this.start(()=>N--?this.continue():this.stop()).then(()=>this)},k.start=N=>{const Ce=new Promise((z,me)=>{z=K(z),w.onerror=Q(me),k.fail=me,k.stop=$e=>{k.stop=k.continue=k.continuePrimaryKey=k.advance=$,z($e)}}),Pe=()=>{if(w.result)try{N()}catch(z){k.fail(z)}else k.done=!0,k.start=()=>{throw new Error("Cursor behind last entry")},k.stop()};return w.onsuccess=K(z=>{w.onsuccess=Pe,Pe()}),k.continue=B,k.continuePrimaryKey=D,k.advance=q,Pe(),Ce},v(k)},m)})},count({query:h,trans:u}){const{index:f,range:g}=h;return new Promise((y,v)=>{const m=u.objectStore(c),p=f.isPrimaryKey?m:m.index(f.name),_=r(g),x=_?p.count(_):p.count();x.onsuccess=K(C=>y(C.target.result)),x.onerror=Q(v)})}}}(l)),o={};return a.forEach(l=>o[l.name]=l),{stack:"dbcore",transaction:t.transaction.bind(t),table(l){if(!o[l])throw new Error(`Table '${l}' not found`);return o[l]},MIN_KEY:-1/0,MAX_KEY:et(e),schema:s}}function an({_novip:t},e){const n=e.db,r=function(s,i,{IDBKeyRange:a,indexedDB:o},l){return{dbcore:function(c,h){return h.reduce((u,{create:f})=>({...u,...f(u)}),c)}(Us(i,a,l),s.dbcore)}}(t._middlewares,n,t._deps,e);t.core=r.dbcore,t.tables.forEach(s=>{const i=s.name;t.core.schema.tables.some(a=>a.name===i)&&(s.core=t.core.table(i),t[i]instanceof t.Table&&(t[i].core=s.core))})}function It({_novip:t},e,n,r){n.forEach(s=>{const i=r[s];e.forEach(a=>{const o=wn(a,s);(!o||"value"in o&&o.value===void 0)&&(a===t.Transaction.prototype||a instanceof t.Transaction?re(a,s,{get(){return this.table(s)},set(l){nr(this,s,{value:l,writable:!0,configurable:!0,enumerable:!0})}}):a[s]=new t.Table(s,i))})})}function on({_novip:t},e){e.forEach(n=>{for(let r in n)n[r]instanceof t.Table&&delete n[r]})}function Fs(t,e){return t._cfg.version-e._cfg.version}function Ls(t,e,n,r){const s=t._dbSchema,i=t._createTransaction("readwrite",t._storeNames,s);i.create(n),i._completion.catch(r);const a=i._reject.bind(i),o=P.transless||P;he(()=>{P.trans=i,P.transless=o,e===0?(j(s).forEach(l=>{Ft(n,l,s[l].primKey,s[l].indexes)}),an(t,n),S.follow(()=>t.on.populate.fire(i)).catch(a)):function({_novip:l},d,c,h){const u=[],f=l._versions;let g=l._dbSchema=cn(l,l.idbdb,h),y=!1;const v=f.filter(p=>p._cfg.version>=d);function m(){return u.length?S.resolve(u.shift()(c.idbtrans)).then(m):S.resolve()}return v.forEach(p=>{u.push(()=>{const _=g,x=p._cfg.dbschema;un(l,_,h),un(l,x,h),g=l._dbSchema=x;const C=Ar(_,x);C.add.forEach(w=>{Ft(h,w[0],w[1].primKey,w[1].indexes)}),C.change.forEach(w=>{if(w.recreate)throw new I.Upgrade("Not yet support for changing primary key");{const T=h.objectStore(w.name);w.add.forEach(k=>ln(T,k)),w.change.forEach(k=>{T.deleteIndex(k.name),ln(T,k)}),w.del.forEach(k=>T.deleteIndex(k))}});const E=p._cfg.contentUpgrade;if(E&&p._cfg.version>d){an(l,h),c._memoizedTables={},y=!0;let w=ar(x);C.del.forEach(D=>{w[D]=_[D]}),on(l,[l.Transaction.prototype]),It(l,[l.Transaction.prototype],j(w),w),c.schema=w;const T=_n(E);let k;T&&je();const B=S.follow(()=>{if(k=E(c),k&&T){var D=ie.bind(null,null);k.then(D,D)}});return k&&typeof k.then=="function"?S.resolve(k):B.then(()=>k)}}),u.push(_=>{(!y||!Ds)&&function(x,C){[].slice.call(C.db.objectStoreNames).forEach(E=>x[E]==null&&C.db.deleteObjectStore(E))}(p._cfg.dbschema,_),on(l,[l.Transaction.prototype]),It(l,[l.Transaction.prototype],l._storeNames,l._dbSchema),c.schema=l._dbSchema})}),m().then(()=>{var p,_;_=h,j(p=g).forEach(x=>{_.db.objectStoreNames.contains(x)||Ft(_,x,p[x].primKey,p[x].indexes)})})}(t,e,i,n).catch(a)})}function Ar(t,e){const n={del:[],add:[],change:[]};let r;for(r in t)e[r]||n.del.push(r);for(r in e){const s=t[r],i=e[r];if(s){const a={name:r,def:i,recreate:!1,del:[],add:[],change:[]};if(""+(s.primKey.keyPath||"")!=""+(i.primKey.keyPath||"")||s.primKey.auto!==i.primKey.auto&&!Rt)a.recreate=!0,n.change.push(a);else{const o=s.idxByName,l=i.idxByName;let d;for(d in o)l[d]||a.del.push(d);for(d in l){const c=o[d],h=l[d];c?c.src!==h.src&&a.change.push(h):a.add.push(h)}(a.del.length>0||a.add.length>0||a.change.length>0)&&n.change.push(a)}}else n.add.push([r,i])}return n}function Ft(t,e,n,r){const s=t.db.createObjectStore(e,n.keyPath?{keyPath:n.keyPath,autoIncrement:n.auto}:{autoIncrement:n.auto});return r.forEach(i=>ln(s,i)),s}function ln(t,e){t.createIndex(e.name,e.keyPath,{unique:e.unique,multiEntry:e.multi})}function cn(t,e,n){const r={};return kt(e.objectStoreNames,0).forEach(s=>{const i=n.objectStore(s);let a=i.keyPath;const o=rn(Pr(a),a||"",!1,!1,!!i.autoIncrement,a&&typeof a!="string",!0),l=[];for(let c=0;c<i.indexNames.length;++c){const h=i.index(i.indexNames[c]);a=h.keyPath;var d=rn(h.name,a,!!h.unique,!!h.multiEntry,!1,a&&typeof a!="string",!1);l.push(d)}r[s]=Ir(s,o,l)}),r}function un({_novip:t},e,n){const r=n.db.objectStoreNames;for(let s=0;s<r.length;++s){const i=r[s],a=n.objectStore(i);t._hasGetAll="getAll"in a;for(let o=0;o<a.indexNames.length;++o){const l=a.indexNames[o],d=a.index(l).keyPath,c=typeof d=="string"?d:"["+kt(d).join("+")+"]";if(e[i]){const h=e[i].idxByName[c];h&&(h.name=l,delete e[i].idxByName[c],e[i].idxByName[l]=h)}}}typeof navigator<"u"&&/Safari/.test(navigator.userAgent)&&!/(Chrome\/|Edge\/)/.test(navigator.userAgent)&&O.WorkerGlobalScope&&O instanceof O.WorkerGlobalScope&&[].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1]<604&&(t._hasGetAll=!1)}class qs{_parseStoresSpec(e,n){j(e).forEach(r=>{if(e[r]!==null){var s=e[r].split(",").map((a,o)=>{const l=(a=a.trim()).replace(/([&*]|\+\+)/g,""),d=/^\[/.test(l)?l.match(/^\[(.*)\]$/)[1].split("+"):l;return rn(l,d||null,/\&/.test(a),/\*/.test(a),/\+\+/.test(a),F(d),o===0)}),i=s.shift();if(i.multi)throw new I.Schema("Primary key cannot be multi-valued");s.forEach(a=>{if(a.auto)throw new I.Schema("Only primary key can be marked as autoIncrement (++)");if(!a.keyPath)throw new I.Schema("Index must have a name and cannot be an empty string")}),n[r]=Ir(r,i,s)}})}stores(e){const n=this.db;this._cfg.storesSource=this._cfg.storesSource?V(this._cfg.storesSource,e):e;const r=n._versions,s={};let i={};return r.forEach(a=>{V(s,a._cfg.storesSource),i=a._cfg.dbschema={},a._parseStoresSpec(s,i)}),n._dbSchema=i,on(n,[n._allTables,n,n.Transaction.prototype]),It(n,[n._allTables,n,n.Transaction.prototype,this._cfg.tables],j(i),i),n._storeNames=j(i),this}upgrade(e){return this._cfg.contentUpgrade=xn(this._cfg.contentUpgrade||R,e),this}}function In(t,e){let n=t._dbNamesDB;return n||(n=t._dbNamesDB=new we(Ot,{addons:[],indexedDB:t,IDBKeyRange:e}),n.version(1).stores({dbnames:"name"})),n.table("dbnames")}function An(t){return t&&typeof t.databases=="function"}function dn(t){return he(function(){return P.letThrough=!0,t()})}function Hs(){var t;return!navigator.userAgentData&&/Safari\//.test(navigator.userAgent)&&!/Chrom(e|ium)\//.test(navigator.userAgent)&&indexedDB.databases?new Promise(function(e){var n=function(){return indexedDB.databases().finally(e)};t=setInterval(n,100),n()}).finally(function(){return clearInterval(t)}):Promise.resolve()}function Vs(t){const e=t._state,{indexedDB:n}=t._deps;if(e.isBeingOpened||t.idbdb)return e.dbReadyPromise.then(()=>e.dbOpenError?M(e.dbOpenError):t);X&&(e.openCanceller._stackHolder=xe()),e.isBeingOpened=!0,e.dbOpenError=null,e.openComplete=!1;const r=e.openCanceller;function s(){if(e.openCanceller!==r)throw new I.DatabaseClosed("db.open() was cancelled")}let i=e.dbReadyResolve,a=null,o=!1;const l=()=>new S((d,c)=>{if(s(),!n)throw new I.MissingAPI;const h=t.name,u=e.autoSchema?n.open(h):n.open(h,Math.round(10*t.verno));if(!u)throw new I.MissingAPI;u.onerror=Q(c),u.onblocked=K(t._fireOnBlocked),u.onupgradeneeded=K(f=>{if(a=u.transaction,e.autoSchema&&!t._options.allowEmptyDB){u.onerror=Xe,a.abort(),u.result.close();const y=n.deleteDatabase(h);y.onsuccess=y.onerror=K(()=>{c(new I.NoSuchDatabase(`Database ${h} doesnt exist`))})}else{a.onerror=Q(c);var g=f.oldVersion>Math.pow(2,62)?0:f.oldVersion;o=g<1,t._novip.idbdb=u.result,Ls(t,g/10,a,c)}},c),u.onsuccess=K(()=>{a=null;const f=t._novip.idbdb=u.result,g=kt(f.objectStoreNames);if(g.length>0)try{const v=f.transaction((y=g).length===1?y[0]:y,"readonly");e.autoSchema?function({_novip:m},p,_){m.verno=p.version/10;const x=m._dbSchema=cn(0,p,_);m._storeNames=kt(p.objectStoreNames,0),It(m,[m._allTables],j(x),x)}(t,f,v):(un(t,t._dbSchema,v),function(m,p){const _=Ar(cn(0,m.idbdb,p),m._dbSchema);return!(_.add.length||_.change.some(x=>x.add.length||x.change.length))}(t,v)||console.warn("Dexie SchemaDiff: Schema was extended without increasing the number passed to db.version(). Some queries may fail.")),an(t,v)}catch{}var y;ze.push(t),f.onversionchange=K(v=>{e.vcFired=!0,t.on("versionchange").fire(v)}),f.onclose=K(v=>{t.on("close").fire(v)}),o&&function({indexedDB:v,IDBKeyRange:m},p){!An(v)&&p!==Ot&&In(v,m).put({name:p}).catch(R)}(t._deps,h),d()},c)}).catch(d=>d&&d.name==="UnknownError"&&e.PR1398_maxLoop>0?(e.PR1398_maxLoop--,console.warn("Dexie: Workaround for Chrome UnknownError on open()"),l()):S.reject(d));return S.race([r,(typeof navigator>"u"?S.resolve():Hs()).then(l)]).then(()=>(s(),e.onReadyBeingFired=[],S.resolve(dn(()=>t.on.ready.fire(t.vip))).then(function d(){if(e.onReadyBeingFired.length>0){let c=e.onReadyBeingFired.reduce(xn,R);return e.onReadyBeingFired=[],S.resolve(dn(()=>c(t.vip))).then(d)}}))).finally(()=>{e.onReadyBeingFired=null,e.isBeingOpened=!1}).then(()=>t).catch(d=>{e.dbOpenError=d;try{a&&a.abort()}catch{}return r===e.openCanceller&&t._close(),M(d)}).finally(()=>{e.openComplete=!0,i()})}function hn(t){var e=i=>t.next(i),n=s(e),r=s(i=>t.throw(i));function s(i){return a=>{var o=i(a),l=o.value;return o.done?l:l&&typeof l.then=="function"?l.then(n,r):F(l)?Promise.all(l).then(n,r):n(l)}}return s(e)()}function zs(t,e,n){var r=arguments.length;if(r<2)throw new I.InvalidArgument("Too few arguments");for(var s=new Array(r-1);--r;)s[r-1]=arguments[r];return n=s.pop(),[t,or(s),n]}function Tr(t,e,n,r,s){return S.resolve().then(()=>{const i=P.transless||P,a=t._createTransaction(e,n,t._dbSchema,r),o={trans:a,transless:i};if(r)a.idbtrans=r.idbtrans;else try{a.create(),t._state.PR1398_maxLoop=3}catch(h){return h.name===En.InvalidState&&t.isOpen()&&--t._state.PR1398_maxLoop>0?(console.warn("Dexie: Need to reopen db"),t._close(),t.open().then(()=>Tr(t,e,n,null,s))):M(h)}const l=_n(s);let d;l&&je();const c=S.follow(()=>{if(d=s.call(a,a),d)if(l){var h=ie.bind(null,null);d.then(h,h)}else typeof d.next=="function"&&typeof d.throw=="function"&&(d=hn(d))},o);return(d&&typeof d.then=="function"?S.resolve(d).then(h=>a.active?h:M(new I.PrematureCommit("Transaction committed too early. See http://bit.ly/2kdckMn"))):c.then(()=>d)).then(h=>(r&&a._resolve(),a._completion.then(()=>h))).catch(h=>(a._reject(h),M(h)))})}function dt(t,e,n){const r=F(t)?t.slice():[t];for(let s=0;s<n;++s)r.push(e);return r}const Gs={stack:"dbcore",name:"VirtualIndexMiddleware",level:1,create:function(t){return{...t,table(e){const n=t.table(e),{schema:r}=n,s={},i=[];function a(c,h,u){const f=We(c),g=s[f]=s[f]||[],y=c==null?0:typeof c=="string"?1:c.length,v=h>0,m={...u,isVirtual:v,keyTail:h,keyLength:y,extractKey:sn(c),unique:!v&&u.unique};return g.push(m),m.isPrimaryKey||i.push(m),y>1&&a(y===2?c[0]:c.slice(0,y-1),h+1,u),g.sort((p,_)=>p.keyTail-_.keyTail),m}const o=a(r.primaryKey.keyPath,0,r.primaryKey);s[":id"]=[o];for(const c of r.indexes)a(c.keyPath,0,c);function l(c){const h=c.query.index;return h.isVirtual?{...c,query:{index:h,range:(u=c.query.range,f=h.keyTail,{type:u.type===1?2:u.type,lower:dt(u.lower,u.lowerOpen?t.MAX_KEY:t.MIN_KEY,f),lowerOpen:!0,upper:dt(u.upper,u.upperOpen?t.MIN_KEY:t.MAX_KEY,f),upperOpen:!0})}}:c;var u,f}return{...n,schema:{...r,primaryKey:o,indexes:i,getIndexByKeyPath:function(c){const h=s[We(c)];return h&&h[0]}},count:c=>n.count(l(c)),query:c=>n.query(l(c)),openCursor(c){const{keyTail:h,isVirtual:u,keyLength:f}=c.query.index;return u?n.openCursor(l(c)).then(g=>g&&function(y){return Object.create(y,{continue:{value:function(m){m!=null?y.continue(dt(m,c.reverse?t.MAX_KEY:t.MIN_KEY,h)):c.unique?y.continue(y.key.slice(0,f).concat(c.reverse?t.MIN_KEY:t.MAX_KEY,h)):y.continue()}},continuePrimaryKey:{value(m,p){y.continuePrimaryKey(dt(m,t.MAX_KEY,h),p)}},primaryKey:{get:()=>y.primaryKey},key:{get(){const m=y.key;return f===1?m[0]:m.slice(0,f)}},value:{get:()=>y.value}})}(g)):n.openCursor(c)}}}}}};function Tn(t,e,n,r){return n=n||{},r=r||"",j(t).forEach(s=>{if(W(e,s)){var i=t[s],a=e[s];if(typeof i=="object"&&typeof a=="object"&&i&&a){const o=Ht(i);o!==Ht(a)?n[r+s]=e[s]:o==="Object"?Tn(i,a,n,r+s+"."):i!==a&&(n[r+s]=e[s])}else i!==a&&(n[r+s]=e[s])}else n[r+s]=void 0}),j(e).forEach(s=>{W(t,s)||(n[r+s]=e[s])}),n}const Ws={stack:"dbcore",name:"HooksMiddleware",level:2,create:t=>({...t,table(e){const n=t.table(e),{primaryKey:r}=n.schema;return{...n,mutate(i){const a=P.trans,{deleting:o,creating:l,updating:d}=a.table(e).hook;switch(i.type){case"add":if(l.fire===R)break;return a._promise("readwrite",()=>c(i),!0);case"put":if(l.fire===R&&d.fire===R)break;return a._promise("readwrite",()=>c(i),!0);case"delete":if(o.fire===R)break;return a._promise("readwrite",()=>c(i),!0);case"deleteRange":if(o.fire===R)break;return a._promise("readwrite",()=>function(u){return h(u.trans,u.range,1e4)}(i),!0)}return n.mutate(i);function c(u){const f=P.trans,g=u.keys||function(y,v){return v.type==="delete"?v.keys:v.keys||v.values.map(y.extractKey)}(r,u);if(!g)throw new Error("Keys missing");return(u=u.type==="add"||u.type==="put"?{...u,keys:g}:{...u}).type!=="delete"&&(u.values=[...u.values]),u.keys&&(u.keys=[...u.keys]),function(y,v,m){return v.type==="add"?Promise.resolve([]):y.getMany({trans:v.trans,keys:m,cache:"immutable"})}(n,u,g).then(y=>{const v=g.map((m,p)=>{const _=y[p],x={onerror:null,onsuccess:null};if(u.type==="delete")o.fire.call(x,m,_,f);else if(u.type==="add"||_===void 0){const C=l.fire.call(x,m,u.values[p],f);m==null&&C!=null&&(m=C,u.keys[p]=m,r.outbound||Y(u.values[p],r.keyPath,m))}else{const C=Tn(_,u.values[p]),E=d.fire.call(x,C,m,_,f);if(E){const w=u.values[p];Object.keys(E).forEach(T=>{W(w,T)?w[T]=E[T]:Y(w,T,E[T])})}}return x});return n.mutate(u).then(({failures:m,results:p,numFailures:_,lastResult:x})=>{for(let C=0;C<g.length;++C){const E=p?p[C]:g[C],w=v[C];E==null?w.onerror&&w.onerror(m[C]):w.onsuccess&&w.onsuccess(u.type==="put"&&y[C]?u.values[C]:E)}return{failures:m,results:p,numFailures:_,lastResult:x}}).catch(m=>(v.forEach(p=>p.onerror&&p.onerror(m)),Promise.reject(m)))})}function h(u,f,g){return n.query({trans:u,values:!1,query:{index:r,range:f},limit:g}).then(({result:y})=>c({type:"delete",keys:y,trans:u}).then(v=>v.numFailures>0?Promise.reject(v.failures[0]):y.length<g?{failures:[],numFailures:0,lastResult:void 0}:h(u,{...f,lower:y[y.length-1],lowerOpen:!0},g)))}}}}})};function Dr(t,e,n){try{if(!e||e.keys.length<t.length)return null;const r=[];for(let s=0,i=0;s<e.keys.length&&i<t.length;++s)H(e.keys[s],t[i])===0&&(r.push(n?nt(e.values[s]):e.values[s]),++i);return r.length===t.length?r:null}catch{return null}}const Ys={stack:"dbcore",level:-1,create:t=>({table:e=>{const n=t.table(e);return{...n,getMany:r=>{if(!r.cache)return n.getMany(r);const s=Dr(r.keys,r.trans._cache,r.cache==="clone");return s?S.resolve(s):n.getMany(r).then(i=>(r.trans._cache={keys:r.keys,values:r.cache==="clone"?nt(i):i},i))},mutate:r=>(r.type!=="add"&&(r.trans._cache=null),n.mutate(r))}}})};function Dn(t){return!("from"in t)}const ee=function(t,e){if(!this){const n=new ee;return t&&"d"in t&&V(n,t),n}V(this,arguments.length?{d:1,from:t,to:arguments.length>1?e:t}:{d:0})};function tt(t,e,n){const r=H(e,n);if(isNaN(r))return;if(r>0)throw RangeError();if(Dn(t))return V(t,{from:e,to:n,d:1});const s=t.l,i=t.r;if(H(n,t.from)<0)return s?tt(s,e,n):t.l={from:e,to:n,d:1,l:null,r:null},Vn(t);if(H(e,t.to)>0)return i?tt(i,e,n):t.r={from:e,to:n,d:1,l:null,r:null},Vn(t);H(e,t.from)<0&&(t.from=e,t.l=null,t.d=i?i.d+1:1),H(n,t.to)>0&&(t.to=n,t.r=null,t.d=t.l?t.l.d+1:1);const a=!t.r;s&&!t.l&&At(t,s),i&&a&&At(t,i)}function At(t,e){Dn(e)||function n(r,{from:s,to:i,l:a,r:o}){tt(r,s,i),a&&n(r,a),o&&n(r,o)}(t,e)}function Js(t,e){const n=fn(e);let r=n.next();if(r.done)return!1;let s=r.value;const i=fn(t);let a=i.next(s.from),o=a.value;for(;!r.done&&!a.done;){if(H(o.from,s.to)<=0&&H(o.to,s.from)>=0)return!0;H(s.from,o.from)<0?s=(r=n.next(o.from)).value:o=(a=i.next(s.from)).value}return!1}function fn(t){let e=Dn(t)?null:{s:0,n:t};return{next(n){const r=arguments.length>0;for(;e;)switch(e.s){case 0:if(e.s=1,r)for(;e.n.l&&H(n,e.n.from)<0;)e={up:e,n:e.n.l,s:1};else for(;e.n.l;)e={up:e,n:e.n.l,s:1};case 1:if(e.s=2,!r||H(n,e.n.to)<=0)return{value:e.n,done:!1};case 2:if(e.n.r){e.s=3,e={up:e,n:e.n.r,s:0};continue}case 3:e=e.up}return{done:!0}}}}function Vn(t){var e,n;const r=(((e=t.r)===null||e===void 0?void 0:e.d)||0)-(((n=t.l)===null||n===void 0?void 0:n.d)||0),s=r>1?"r":r<-1?"l":"";if(s){const i=s==="r"?"l":"r",a={...t},o=t[s];t.from=o.from,t.to=o.to,t[s]=o[s],a[s]=o[i],t[i]=a,a.d=zn(a)}t.d=zn(t)}function zn({r:t,l:e}){return(t?e?Math.max(t.d,e.d):t.d:e?e.d:0)+1}Be(ee.prototype,{add(t){return At(this,t),this},addKey(t){return tt(this,t,t),this},addKeys(t){return t.forEach(e=>tt(this,e,e)),this},[Vt](){return fn(this)}});const Qs={stack:"dbcore",level:0,create:t=>{const e=t.schema.name,n=new ee(t.MIN_KEY,t.MAX_KEY);return{...t,table:r=>{const s=t.table(r),{schema:i}=s,{primaryKey:a}=i,{extractKey:o,outbound:l}=a,d={...s,mutate:u=>{const f=u.trans,g=f.mutatedParts||(f.mutatedParts={}),y=E=>{const w=`idb://${e}/${r}/${E}`;return g[w]||(g[w]=new ee)},v=y(""),m=y(":dels"),{type:p}=u;let[_,x]=u.type==="deleteRange"?[u.range]:u.type==="delete"?[u.keys]:u.values.length<50?[[],u.values]:[];const C=u.trans._cache;return s.mutate(u).then(E=>{if(F(_)){p!=="delete"&&(_=E.results),v.addKeys(_);const w=Dr(_,C);w||p==="add"||m.addKeys(_),(w||x)&&function(T,k,B,D){function q($){const N=T($.name||"");function Ce(z){return z!=null?$.extractKey(z):null}const Pe=z=>$.multiEntry&&F(z)?z.forEach(me=>N.addKey(me)):N.addKey(z);(B||D).forEach((z,me)=>{const $e=B&&Ce(B[me]),Kt=D&&Ce(D[me]);H($e,Kt)!==0&&($e!=null&&Pe($e),Kt!=null&&Pe(Kt))})}k.indexes.forEach(q)}(y,i,w,x)}else if(_){const w={from:_.lower,to:_.upper};m.add(w),v.add(w)}else v.add(n),m.add(n),i.indexes.forEach(w=>y(w.name).add(n));return E})}},c=({query:{index:u,range:f}})=>{var g,y;return[u,new ee((g=f.lower)!==null&&g!==void 0?g:t.MIN_KEY,(y=f.upper)!==null&&y!==void 0?y:t.MAX_KEY)]},h={get:u=>[a,new ee(u.key)],getMany:u=>[a,new ee().addKeys(u.keys)],count:c,query:c,openCursor:c};return j(h).forEach(u=>{d[u]=function(f){const{subscr:g}=P;if(g){const y=x=>{const C=`idb://${e}/${r}/${x}`;return g[C]||(g[C]=new ee)},v=y(""),m=y(":dels"),[p,_]=h[u](f);if(y(p.name||"").add(_),!p.isPrimaryKey){if(u!=="count"){const x=u==="query"&&l&&f.values&&s.query({...f,values:!1});return s[u].apply(this,arguments).then(C=>{if(u==="query"){if(l&&f.values)return x.then(({result:w})=>(v.addKeys(w),C));const E=f.values?C.result.map(o):C.result;f.values?v.addKeys(E):m.addKeys(E)}else if(u==="openCursor"){const E=C,w=f.values;return E&&Object.create(E,{key:{get:()=>(m.addKey(E.primaryKey),E.key)},primaryKey:{get(){const T=E.primaryKey;return m.addKey(T),T}},value:{get:()=>(w&&v.addKey(E.primaryKey),E.value)}})}return C})}m.add(n)}}return s[u].apply(this,arguments)}}),d}}}};class we{constructor(e,n){this._middlewares={},this.verno=0;const r=we.dependencies;this._options=n={addons:we.addons,autoOpen:!0,indexedDB:r.indexedDB,IDBKeyRange:r.IDBKeyRange,...n},this._deps={indexedDB:n.indexedDB,IDBKeyRange:n.IDBKeyRange};const{addons:s}=n;this._dbSchema={},this._versions=[],this._storeNames=[],this._allTables={},this.idbdb=null,this._novip=this;const i={dbOpenError:null,isBeingOpened:!1,onReadyBeingFired:null,openComplete:!1,dbReadyResolve:R,dbReadyPromise:null,cancelOpen:R,openCanceller:null,autoSchema:!0,PR1398_maxLoop:3};var a;i.dbReadyPromise=new S(o=>{i.dbReadyResolve=o}),i.openCanceller=new S((o,l)=>{i.cancelOpen=l}),this._state=i,this.name=e,this.on=Ge(this,"populate","blocked","versionchange","close",{ready:[xn,R]}),this.on.ready.subscribe=rr(this.on.ready.subscribe,o=>(l,d)=>{we.vip(()=>{const c=this._state;if(c.openComplete)c.dbOpenError||S.resolve().then(l),d&&o(l);else if(c.onReadyBeingFired)c.onReadyBeingFired.push(l),d&&o(l);else{o(l);const h=this;d||o(function u(){h.on.ready.unsubscribe(l),h.on.ready.unsubscribe(u)})}})}),this.Collection=(a=this,Ue(Ks.prototype,function(o,l){this.db=a;let d=xr,c=null;if(l)try{d=l()}catch(g){c=g}const h=o._ctx,u=h.table,f=u.hook.reading.fire;this._ctx={table:u,index:h.index,isPrimKey:!h.index||u.schema.primKey.keyPath&&h.index===u.schema.primKey.name,range:d,keysOnly:!1,dir:"next",unique:"",algorithm:null,filter:null,replayFilter:null,justLimit:!0,isMatch:null,offset:0,limit:1/0,error:c,or:h.or,valueMapper:f!==Je?f:null}})),this.Table=function(o){return Ue(Os.prototype,function(l,d,c){this.db=o,this._tx=c,this.name=l,this.schema=d,this.hook=o._allTables[l]?o._allTables[l].hook:Ge(null,{creating:[_s,R],reading:[ws,Je],updating:[Es,R],deleting:[ks,R]})})}(this),this.Transaction=function(o){return Ue(Ms.prototype,function(l,d,c,h,u){this.db=o,this.mode=l,this.storeNames=d,this.schema=c,this.chromeTransactionDurability=h,this.idbtrans=null,this.on=Ge(this,"complete","error","abort"),this.parent=u||null,this.active=!0,this._reculock=0,this._blockedFuncs=[],this._resolve=null,this._reject=null,this._waitingFor=null,this._waitingQueue=null,this._spinCount=0,this._completion=new S((f,g)=>{this._resolve=f,this._reject=g}),this._completion.then(()=>{this.active=!1,this.on.complete.fire()},f=>{var g=this.active;return this.active=!1,this.on.error.fire(f),this.parent?this.parent._reject(f):g&&this.idbtrans&&this.idbtrans.abort(),M(f)})})}(this),this.Version=function(o){return Ue(qs.prototype,function(l){this.db=o,this._cfg={version:l,storesSource:null,dbschema:{},tables:{},contentUpgrade:null}})}(this),this.WhereClause=function(o){return Ue(Cr.prototype,function(l,d,c){this.db=o,this._ctx={table:l,index:d===":id"?null:d,or:c};const h=o._deps.indexedDB;if(!h)throw new I.MissingAPI;this._cmp=this._ascending=h.cmp.bind(h),this._descending=(u,f)=>h.cmp(f,u),this._max=(u,f)=>h.cmp(u,f)>0?u:f,this._min=(u,f)=>h.cmp(u,f)<0?u:f,this._IDBKeyRange=o._deps.IDBKeyRange})}(this),this.on("versionchange",o=>{o.newVersion>0?console.warn(`Another connection wants to upgrade database '${this.name}'. Closing db now to resume the upgrade.`):console.warn(`Another connection wants to delete database '${this.name}'. Closing db now to resume the delete request.`),this.close()}),this.on("blocked",o=>{!o.newVersion||o.newVersion<o.oldVersion?console.warn(`Dexie.delete('${this.name}') was blocked`):console.warn(`Upgrade '${this.name}' blocked by other connection holding version ${o.oldVersion/10}`)}),this._maxKey=et(n.IDBKeyRange),this._createTransaction=(o,l,d,c)=>new this.Transaction(o,l,d,this._options.chromeTransactionDurability,c),this._fireOnBlocked=o=>{this.on("blocked").fire(o),ze.filter(l=>l.name===this.name&&l!==this&&!l._state.vcFired).map(l=>l.on("versionchange").fire(o))},this.use(Gs),this.use(Ws),this.use(Qs),this.use(Ys),this.vip=Object.create(this,{_vip:{value:!0}}),s.forEach(o=>o(this))}version(e){if(isNaN(e)||e<.1)throw new I.Type("Given version is not a positive number");if(e=Math.round(10*e)/10,this.idbdb||this._state.isBeingOpened)throw new I.Schema("Cannot add version when database is open");this.verno=Math.max(this.verno,e);const n=this._versions;var r=n.filter(s=>s._cfg.version===e)[0];return r||(r=new this.Version(e),n.push(r),n.sort(Fs),r.stores({}),this._state.autoSchema=!1,r)}_whenReady(e){return this.idbdb&&(this._state.openComplete||P.letThrough||this._vip)?e():new S((n,r)=>{if(this._state.openComplete)return r(new I.DatabaseClosed(this._state.dbOpenError));if(!this._state.isBeingOpened){if(!this._options.autoOpen)return void r(new I.DatabaseClosed);this.open().catch(R)}this._state.dbReadyPromise.then(n,r)}).then(e)}use({stack:e,create:n,level:r,name:s}){s&&this.unuse({stack:e,name:s});const i=this._middlewares[e]||(this._middlewares[e]=[]);return i.push({stack:e,create:n,level:r??10,name:s}),i.sort((a,o)=>a.level-o.level),this}unuse({stack:e,name:n,create:r}){return e&&this._middlewares[e]&&(this._middlewares[e]=this._middlewares[e].filter(s=>r?s.create!==r:!!n&&s.name!==n)),this}open(){return Vs(this)}_close(){const e=this._state,n=ze.indexOf(this);if(n>=0&&ze.splice(n,1),this.idbdb){try{this.idbdb.close()}catch{}this._novip.idbdb=null}e.dbReadyPromise=new S(r=>{e.dbReadyResolve=r}),e.openCanceller=new S((r,s)=>{e.cancelOpen=s})}close(){this._close();const e=this._state;this._options.autoOpen=!1,e.dbOpenError=new I.DatabaseClosed,e.isBeingOpened&&e.cancelOpen(e.dbOpenError)}delete(){const e=arguments.length>0,n=this._state;return new S((r,s)=>{const i=()=>{this.close();var a=this._deps.indexedDB.deleteDatabase(this.name);a.onsuccess=K(()=>{(function({indexedDB:o,IDBKeyRange:l},d){!An(o)&&d!==Ot&&In(o,l).delete(d).catch(R)})(this._deps,this.name),r()}),a.onerror=Q(s),a.onblocked=this._fireOnBlocked};if(e)throw new I.InvalidArgument("Arguments not allowed in db.delete()");n.isBeingOpened?n.dbReadyPromise.then(i):i()})}backendDB(){return this.idbdb}isOpen(){return this.idbdb!==null}hasBeenClosed(){const e=this._state.dbOpenError;return e&&e.name==="DatabaseClosed"}hasFailed(){return this._state.dbOpenError!==null}dynamicallyOpened(){return this._state.autoSchema}get tables(){return j(this._allTables).map(e=>this._allTables[e])}transaction(){const e=zs.apply(this,arguments);return this._transaction.apply(this,e)}_transaction(e,n,r){let s=P.trans;s&&s.db===this&&e.indexOf("!")===-1||(s=null);const i=e.indexOf("?")!==-1;let a,o;e=e.replace("!","").replace("?","");try{if(o=n.map(d=>{var c=d instanceof this.Table?d.name:d;if(typeof c!="string")throw new TypeError("Invalid table argument to Dexie.transaction(). Only Table or String are allowed");return c}),e=="r"||e===Nt)a=Nt;else{if(e!="rw"&&e!=jt)throw new I.InvalidArgument("Invalid transaction mode: "+e);a=jt}if(s){if(s.mode===Nt&&a===jt){if(!i)throw new I.SubTransaction("Cannot enter a sub-transaction with READWRITE mode when parent transaction is READONLY");s=null}s&&o.forEach(d=>{if(s&&s.storeNames.indexOf(d)===-1){if(!i)throw new I.SubTransaction("Table "+d+" not included in parent transaction.");s=null}}),i&&s&&!s.active&&(s=null)}}catch(d){return s?s._promise(null,(c,h)=>{h(d)}):M(d)}const l=Tr.bind(null,this,a,o,s,r);return s?s._promise(a,l,"lock"):P.trans?Me(P.transless,()=>this._whenReady(l)):this._whenReady(l)}table(e){if(!W(this._allTables,e))throw new I.InvalidTable(`Table ${e} does not exist`);return this._allTables[e]}}const Xs=typeof Symbol<"u"&&"observable"in Symbol?Symbol.observable:"@@observable";class Zs{constructor(e){this._subscribe=e}subscribe(e,n,r){return this._subscribe(e&&typeof e!="function"?e:{next:e,error:n,complete:r})}[Xs](){return this}}function Rr(t,e){return j(e).forEach(n=>{At(t[n]||(t[n]=new ee),e[n])}),t}function ei(t){let e,n=!1;const r=new Zs(s=>{const i=_n(t);let a=!1,o={},l={};const d={get closed(){return a},unsubscribe:()=>{a=!0,pe.storagemutated.unsubscribe(f)}};s.start&&s.start(d);let c=!1,h=!1;function u(){return j(l).some(y=>o[y]&&Js(o[y],l[y]))}const f=y=>{Rr(o,y),u()&&g()},g=()=>{if(c||a)return;o={};const y={},v=function(m){i&&je();const p=()=>he(t,{subscr:m,trans:null}),_=P.trans?Me(P.transless,p):p();return i&&_.then(ie,ie),_}(y);h||(pe(Ze,f),h=!0),c=!0,Promise.resolve(v).then(m=>{n=!0,e=m,c=!1,a||(u()?g():(o={},l=y,s.next&&s.next(m)))},m=>{c=!1,n=!1,s.error&&s.error(m),d.unsubscribe()})};return g(),d});return r.hasValue=()=>n,r.getValue=()=>e,r}let pn;try{pn={indexedDB:O.indexedDB||O.mozIndexedDB||O.webkitIndexedDB||O.msIndexedDB,IDBKeyRange:O.IDBKeyRange||O.webkitIDBKeyRange}}catch{pn={indexedDB:null,IDBKeyRange:null}}const ye=we;function bt(t){let e=ne;try{ne=!0,pe.storagemutated.fire(t)}finally{ne=e}}Be(ye,{...ft,delete:t=>new ye(t,{addons:[]}).delete(),exists:t=>new ye(t,{addons:[]}).open().then(e=>(e.close(),!0)).catch("NoSuchDatabaseError",()=>!1),getDatabaseNames(t){try{return function({indexedDB:e,IDBKeyRange:n}){return An(e)?Promise.resolve(e.databases()).then(r=>r.map(s=>s.name).filter(s=>s!==Ot)):In(e,n).toCollection().primaryKeys()}(ye.dependencies).then(t)}catch{return M(new I.MissingAPI)}},defineClass:()=>function(t){V(this,t)},ignoreTransaction:t=>P.trans?Me(P.transless,t):t(),vip:dn,async:function(t){return function(){try{var e=hn(t.apply(this,arguments));return e&&typeof e.then=="function"?e:S.resolve(e)}catch(n){return M(n)}}},spawn:function(t,e,n){try{var r=hn(t.apply(n,e||[]));return r&&typeof r.then=="function"?r:S.resolve(r)}catch(s){return M(s)}},currentTransaction:{get:()=>P.trans||null},waitFor:function(t,e){const n=S.resolve(typeof t=="function"?ye.ignoreTransaction(t):t).timeout(e||6e4);return P.trans?P.trans.waitFor(n):n},Promise:S,debug:{get:()=>X,set:t=>{cr(t,t==="dexie"?()=>!0:Er)}},derive:Re,extend:V,props:Be,override:rr,Events:Ge,on:pe,liveQuery:ei,extendObservabilitySet:Rr,getByKeyPath:se,setByKeyPath:Y,delByKeyPath:function(t,e){typeof e=="string"?Y(t,e,void 0):"length"in e&&[].map.call(e,function(n){Y(t,n,void 0)})},shallowClone:ar,deepClone:nt,getObjectDiff:Tn,cmp:H,asap:sr,minKey:nn,addons:[],connections:ze,errnames:En,dependencies:pn,semVer:$n,version:$n.split(".").map(t=>parseInt(t)).reduce((t,e,n)=>t+e/Math.pow(10,2*n))}),ye.maxKey=et(ye.dependencies.IDBKeyRange),typeof dispatchEvent<"u"&&typeof addEventListener<"u"&&(pe(Ze,t=>{if(!ne){let e;Rt?(e=document.createEvent("CustomEvent"),e.initCustomEvent(ce,!0,!0,t)):e=new CustomEvent(ce,{detail:t}),ne=!0,dispatchEvent(e),ne=!1}}),addEventListener(ce,({detail:t})=>{ne||bt(t)}));let ne=!1;if(typeof BroadcastChannel<"u"){const t=new BroadcastChannel(ce);typeof t.unref=="function"&&t.unref(),pe(Ze,e=>{ne||t.postMessage(e)}),t.onmessage=e=>{e.data&&bt(e.data)}}else if(typeof self<"u"&&typeof navigator<"u"){pe(Ze,e=>{try{ne||(typeof localStorage<"u"&&localStorage.setItem(ce,JSON.stringify({trig:Math.random(),changedParts:e})),typeof self.clients=="object"&&[...self.clients.matchAll({includeUncontrolled:!0})].forEach(n=>n.postMessage({type:ce,changedParts:e})))}catch{}}),typeof addEventListener<"u"&&addEventListener("storage",e=>{if(e.key===ce){const n=JSON.parse(e.newValue);n&&bt(n.changedParts)}});const t=self.document&&navigator.serviceWorker;t&&t.addEventListener("message",function({data:e}){e&&e.type===ce&&bt(e.changedParts)})}S.rejectionMapper=function(t,e){if(!t||t instanceof Oe||t instanceof TypeError||t instanceof SyntaxError||!t.name||!Bn[t.name])return t;var n=new Bn[t.name](e||t.message,t);return"stack"in t&&re(n,"stack",{get:function(){return this.inner.stack}}),n},cr(X,Er);const Or=async(t,e)=>{const n=performance.now();try{await t()}finally{const r=performance.now()-n;let s=b.PerformanceMetrics[e];s||(s=b.registerMetric(e)),s.report(r/1e3)}},Kr=(t,e)=>{const n=performance.now();try{t()}finally{const r=performance.now()-n;let s=b.PerformanceMetrics[e];s||(s=b.registerMetric(e)),s.report(r/1e3)}},ti=30,ni=3e4;let Fe=0;const Br=()=>{b.sessionStorageHelper.setItem("sprig.disableReplayRecording","disabled")},Ee=()=>!!b.sessionStorageHelper.getItem("sprig.disableReplayRecording"),ri=["did not allow mutations","called in an invalid security context"],si=t=>{if(!t)return!0;for(const e of ri)if(t.toLowerCase().includes(e))return!1;return!0},ii=(t,e,{reportError:n=!0,extraInfo:r})=>{Ee()||e instanceof Error&&(Br(),si(e==null?void 0:e.message)&&(n&&window.UserLeap.reportError(t,e,r),li()))},ai=async(t,e,{reportError:n}={reportError:!0})=>{var s;let r;try{if(n&&((s=window.navigator.storage)!=null&&s.estimate)){const{quota:i,usage:a}=await window.navigator.storage.estimate();r={availableSpaceInMB:i&&a?(i-a)/(1024*1024):void 0,quota:i,usage:a}}}catch(i){window.UserLeap.reportError("Error getting storage estimate",i,{originalMessage:t,originalError:e})}ii(t,e,{reportError:n,extraInfo:r})},oi=()=>{const t=b.sessionStorageHelper.getItem("sprig.sessionId");if(t)return b.info(`Found saved session id: ${t}`),b.sessionStorageHelper.removeItem("sprig.sessionId"),t;const e=b.v4();return b.info(`Generating new uuid: ${e}`),e},L=oi();window.addEventListener("beforeunload",()=>{b.info(`Before page unload saving session id: ${L}`),b.sessionStorageHelper.setItem("sprig.sessionId",L)});const li=async()=>{A.transaction("rw",A.events,A.chunkUploads,A.pendingCaptures,()=>{A.events.clear(),A.chunkUploads.clear(),A.pendingCaptures.clear()}).catch(()=>{})},Lt=(t,e,n=()=>!0)=>A.table(e).where("timestamp").below(t).and(n).delete(),ci=async(t,e)=>{let n=[];return await Or(async()=>{n=await A.events.where("[sessionId+timestamp]").between([L,t],[L,e??Date.now()]).toArray()},"sdk_replay_get_events_between_seconds"),n},ui=(t,e,n)=>{const r=new Date,s=r.setMinutes(r.getMinutes()+(n??ti));return A.events.where("[sessionId+timestamp]").between([L,t],[L,e]).modify({expiredAt:s})},di=t=>A.chunkUploads.add({...t,sessionId:t.sessionId??L}),hi=(t,e)=>A.chunkUploads.update(t,{data:null,etag:e,status:"UploadComplete"}),fi=({status:t,uploadId:e})=>e?A.chunkUploads.where({uploadId:e,status:t}).toArray():A.chunkUploads.where({sessionId:L,status:t}).toArray(),pi=t=>A.chunkUploads.where({uploadId:t,status:"UploadComplete"}).toArray(),mi=t=>A.chunkUploads.where({uploadId:t,status:"UploadComplete"}).delete(),yi=t=>A.pendingCaptures.add({...t,sessionId:t.sessionId??L,canUpload:!1}),Nr=async t=>{let e=await A.pendingCaptures.where("sessionId").equals(L).toArray();return t.beforePresent&&(e=e.filter(n=>n.targetTimestamp<Date.now())),t.isHeatmap&&(e=e.filter(n=>n.captureParams.isHeatmap??!1)),e},gi=()=>A.pendingCaptures.where("sessionId").equals(L).toArray(),vi=t=>A.pendingCaptures.where("sessionId").equals(L).and(e=>e.captureParams.responseGroupId===t).modify({canUpload:!0}),bi=async t=>{var e;if((e=window.navigator.storage)!=null&&e.estimate){const{quota:n,usage:r}=await window.navigator.storage.estimate();if(n&&r&&(n-r)/1073741824<t)return!1}return!0},jr=async t=>{if(parseInt(b.sessionStorageHelper.getItem("sprig.pendingCount")??"0")===0)return;const n=Date.now();return ae(async()=>{await A.pendingCaptures.where("sessionId").equals(L).and(r=>r.captureParams.isHeatmap??!1).and(r=>t?t.includes(r.uuid):!0).modify(r=>{r.targetTimestamp=n,r.captureParams.triggerTimestamp=n,r.captureParams.replayParams.replayDurationSeconds=Math.floor((n-r.timestamp)/1e3)})},"Error marking pending heatmaps ready")},wi=async()=>{const e=(await Nr({isHeatmap:!0})).map(r=>({eventId:r.captureParams.eventId,uuid:r.uuid})),n=[];e.forEach(({eventId:r,uuid:s})=>{b.checkUrlStillMatching(r)||n.push(s)}),n.length&&jr(n)},_i=t=>{if(t>1){Fe=0;return}const e=Date.now();if(!Fe){Fe=e;return}e-Fe>=ni&&(jr(),Fe=0)};class ki extends we{constructor(){super("replayStorage",{autoOpen:!1});Ie(this,"events");Ie(this,"chunkUploads");Ie(this,"pendingCaptures")}}const A=new ki;A.version(1).stores({events:"uuid, timestamp, [sessionId+timestamp]",chunkUploads:"uuid, timestamp, [sessionId+status], [uploadId+status], [sessionId+status+uploadId]",pendingCaptures:"uuid, timestamp, [sessionId+targetTimestamp]"});A.open().catch(t=>{b.error(`Error opening replay storage: ${JSON.stringify(t)}`),Br()});const Ei=t=>{if(t instanceof Attr)return null;let e=1;for(let n=t.previousSibling;n;n=n.previousSibling)n.nodeName===t.nodeName&&++e;return e},Mr=t=>{if(t===null)return"";const e=[];if(t instanceof Document)return"/";for(let n=t;n&&!(n instanceof Document)&&n!==null;n=n instanceof Attr?n.ownerElement:n.parentElement){const r=e[e.length]={name:void 0,position:null};switch(n.nodeType){case Node.TEXT_NODE:r.name="text()";break;case Node.ATTRIBUTE_NODE:r.name="@"+n.nodeName;break;case Node.PROCESSING_INSTRUCTION_NODE:r.name="processing-instruction()";break;case Node.COMMENT_NODE:r.name="comment()";break;case Node.ELEMENT_NODE:r.name=n.nodeName;break}r.position=Ei(n)}return"/"+e.reverse().map(n=>n.position!==null?`/${n.name}[${n.position}]`:`/${n.name}`).join("")},ue={capture:!0,passive:!0},xi=["a","button","input","option","li","link"],Si=["Escape","Enter","Backspace","F5","Tab"];let Tt=!1;const Ci=["label","type","role","title","placeholder","errormessage","valuetext","href"],Gn="aria-",Pi=t=>{if(!t.tagName)return"No tagName";const e=t.getAttribute("type");return e?`${e} ${t.tagName.toLowerCase()}`:t.tagName.toLowerCase()},Wn=t=>{var r;if(((r=t.tagName)==null?void 0:r.toLowerCase())==="html")return{element:"html"};const e=t.textContent,n=e?{text:e}:{};n.element=Pi(t);for(const s of t.attributes){let i=s.name;const a=s.value;i.startsWith(Gn)&&(i=i.substring(Gn.length)),Ci.includes(i)&&(n[i]=a)}return n},Ii=t=>{var s;if(!t)return{};const n={...Wn(t)},r=t.parentElement;if(r&&xi.includes((s=r.tagName)==null?void 0:s.toLowerCase())){const i=Wn(r);Object.assign(n,i)}return n},$r=(t,e)=>{var n;es({x:e.x,y:e.y,type:t,elementAttributes:Ii(e.target),windowHeight:window.innerHeight,windowWidth:window.innerWidth,...e.target instanceof HTMLElement?{rect:(n=e.target)==null?void 0:n.getBoundingClientRect(),xPath:Mr(e.target)}:{}})},Ai=t=>e=>$r(t,e),Ur=t=>{Si.includes(t.key)&&rs({key:t.key})},Ti=()=>{window.performance.getEntriesByType("navigation").map(e=>e.type).includes("reload")&&ts({url:window.location.href,currentPageTitle:document.title})},Di=()=>{window.performance.getEntriesByType("navigation").map(e=>e.type).includes("back_forward")&&ns({curUrl:window.location.href,fromUrl:document.referrer,currentPageTitle:document.title})},Ri=(t,e)=>{let n;return r=>{clearTimeout(n),n=window.setTimeout(()=>t(r),e)}},Oi=t=>{if(!(t.target instanceof HTMLElement||t.target instanceof Document))return;let e=t.target;"scrollTop"in e||(e=e.documentElement),ss({xPath:Mr(e),x:e.scrollLeft,y:e.scrollTop,elementAttributes:{targetScrollWidth:e.scrollWidth,targetClientWidth:e.clientWidth,targetScrollHeight:e.scrollHeight,targetClientHeight:e.clientHeight}})},Fr=Ri(Oi,750),Lr=Ai("left_click"),qr=t=>{t.button===2&&$r("right_click",t)},Ki=()=>{Tt||(window.addEventListener("click",Lr,ue),window.addEventListener("mousedown",qr,ue),window.addEventListener("keydown",Ur,ue),window.addEventListener("scroll",Fr,ue),Tt=!0,Ti(),Di())},Bi=()=>{Tt&&(window.removeEventListener("click",Lr,ue),window.removeEventListener("mousedown",qr,ue),window.removeEventListener("keydown",Ur,ue),window.removeEventListener("scroll",Fr,ue),Tt=!1)},Ni=async(t,e,n)=>new Promise((r,s)=>{const i=t.createElement("script");i.src=e,i.onload=r,i.onerror=s,n&&(i.nonce=n),t.head.appendChild(i)});let Yn=1,mn=5e3,wt=6e4;const ji=5,Jn=1e3,Hr=30,Dt=Hr+ji;let yn,gn,Vr,Qn=Date.now(),Ne=!1,_t;const zr={},Mi=async({viewDocument:t,maxReplayDurationSeconds:e,replayNonce:n,maxInflightRequests:r=2,replaySettings:s,teardownAfter:i=!1})=>{Ne||(i&&b.sessionStorageHelper.setItem("sprig.teardownAfterCapture","true"),await ae(async()=>{if(Ee()){b.info("Not initializing replay because recording is disabled");return}if(!e){b.info("Not initializing replay because config didn't specify maxReplayDurationSeconds");return}if(s!=null&&s.minAvailableGb&&(Yn=s.minAvailableGb),!await bi(Yn)){b.warn("Minimum storage not available");return}if(b.info("Initializing replay"),s!=null&&s.minDuration&&(mn=s.minDuration),s!=null&&s.batchDuration&&(wt=s.batchDuration),ls(r),Vi(),Fi(e+Dt,30*60,e+Dt),Li(),!window.rrwebRecord){b.info("Loading recording script");const d=window.UserLeap.replayLibraryURL??"https://cdn.sprig.com/dependencies/record-2.0.0-alpha.6.min.js";await Ni(t,d,n),b.info("Recording script finished loading")}const a=window.rrwebRecord;if(!a){b.warn("Record script failed to set global function");return}let o=!0,l=0;_t=a({checkoutEveryNms:Hr*1e3,sampling:{input:"last",scroll:250,media:800},emit:(d,c)=>{if(Ee())return;if(Qn=Date.now(),c&&d.type===ht.Meta)l=performance.now();else if(c&&l&&d.type===ht.FullSnapshot){const u=performance.now()-l;b.reportAndRegister("sdk_replay_snapshot_seconds",u/1e3)}const h=o||!!c&&d.type===ht.Meta;o=!1,$i({uuid:b.v4(),event:JSON.stringify(d),isValidStart:h,timestamp:Date.now()})},...s}),Ne=!0,gn||(gn=window.setInterval(()=>{Date.now()-Qn>Jn&&J("Sprig_Noop",{})},Jn)),b.eventEmitter.on("survey.complete",d=>{Zr({id:d,userAgent:window.navigator.userAgent})}),Ki()},"Error initializing replay"))};let de=b.sessionStorageHelper.getItem("sprig.pendingCount"),Rn=!!b.sessionStorageHelper.getItem("sprig.isCapturingHeatmap"),vn=!1,bn=[];const $i=t=>{var e,n,r,s;if((e=t.event)!=null&&e.includes("Sprig_Scroll")){const i=(s=(r=(n=JSON.parse(t.event))==null?void 0:n.data)==null?void 0:r.payload)==null?void 0:s.xPath;if(!i)return;const a=b.v4();zr[i]=a,t.uuid=a}bn.push(t),vn||Ui()},Gr=t=>{const e=t.map(n=>({...n,sessionId:n.sessionId??L}));if(Rn&&_i(e.length),e.length!==0)return A.transaction("rw",A.events,()=>{A.events.bulkAdd(e)}).catch(n=>{Se("Error storing replay events",n)})},Ui=()=>{vn=!0,setTimeout(async()=>{if(Ee())return;const t=bn;bn=[],vn=!1,Kr(async()=>{await Gr(t)},"sdk_replay_add_event_batch_seconds")},500)},Fi=(t=6*60,e=30*60,n=4*60)=>{yn=window.setInterval(()=>{const r=Date.now();Ee()||(b.debug(`Performing periodic replay data cleanup / Event Seconds ${t} / Chunk Seconds ${e} / Pending Capture Seconds ${n}`),Or(()=>A.transaction("rw!",A.events,A.chunkUploads,A.pendingCaptures,()=>{Lt(r-t*1e3,"events",s=>s.expiredAt===void 0||s.expiredAt<r-t*1e3),Lt(r-e*1e3,"chunkUploads"),Lt(r-n*1e3,"pendingCaptures",s=>s.canUpload===void 0||s.canUpload===!1)}).catch(s=>{clearInterval(yn),Se("Error deleting table rows",s)}),"sdk_replay_cleanup_seconds"),b.info("Cleanup complete"))},30*1e3)},Li=(t=5)=>{Vr=window.setInterval(async()=>{ae(async()=>{const e=parseInt(de??"0");if(e===0)return;const n=await Nr({beforePresent:!0});n!=null&&n.length&&(await Promise.all(n.map(async r=>(await A.pendingCaptures.delete(r.uuid),Jr(r.captureParams,r.canUpload)))),de=(e-n.length).toString(),b.sessionStorageHelper.setItem("sprig.pendingCount",de))},"Error initiating pending captures")},t*1e3)},qi=async(t,e,n,r,s)=>{const i=Math.min(t+s,n),a=`from: ${new Date(t).toLocaleTimeString()} to ${new Date(i).toLocaleTimeString()}`;b.info(`Getting event batch ${a}`);const o=await ci(t,i);if(!(o!=null&&o.length))return b.info(`No events found ${a}`),{validStartFound:r,events:[]};if(!r){b.info(`Searching for valid start in ${o.length} events ${a}`);let l=-1;if(o==null||o.forEach((c,h)=>{if(!c.isValidStart)return;const u=c.timestamp<=e;(l<0||u)&&(l=h)}),l<0)return b.info(`No valid start found in ${o.length} events ${a}`),{validStartFound:r,events:[]};const d=o[l].timestamp;return b.info(`Found valid start at: ${new Date(d).toLocaleTimeString()} in events ${a}`),{validStartFound:!0,events:o==null?void 0:o.slice(l)}}return{validStartFound:r,events:o}},Hi=(t,e,n)=>{const r=t.length,s=e*1024*1024,i=Math.ceil(r/n),a=Math.max(s,i);b.info(`Total file bytes: ${r} / target chunk size: ${a}`);const o=[];let l=0;for(;l<r;)o.push(t.slice(l,l+a)),l+=a;return o},Wr=t=>Promise.all(t.map(async e=>{const n=await cs(e);return await hi(e.uuid,n),e.uploadId})),Yr=async t=>{b.info(`Marking upload complete if finished: ${t}`);const e=await pi(t);if(!(e!=null&&e.length)){b.info(`No finished chunks found for upload: ${t}`);return}const n=e.reduce((i,a)=>(i.find(o=>o.chunkIndex===a.chunkIndex)||i.push(a),i),[]);n.sort((i,a)=>i.chunkIndex-a.chunkIndex);const r=n.map(i=>({ETag:i.etag,PartNumber:i.chunkIndex})).filter(i=>i.ETag!==null),s=n[0];await tr({apiUrl:s.apiUrl,surveyId:s.surveyId,uploadId:t,responseGroupUuid:s.responseGroupId,etags:r,headers:s.completeUploadHeaders,replayDuration:s.replayDuration}),b.info(`Cleaning up chunks for ${t}`),await mi(t),b.info(`Done cleaning up chunks for ${t}`)},Vi=async()=>{ae(async()=>{const t=await fi({status:"ReadyForUpload"});if(!(t!=null&&t.length))return;const e=await Wr(t);b.info(`Finished uploading unfinished chunks for ${e}`),e!=null&&e.length&&await Promise.all(e.map(n=>{if(n)return Yr(n)}))},"Error uploading unfinished chunks")},zi=async(t,e)=>{await Wr(e),b.info(`Done uploading chunks for uploads: ${t.join(",")}`),await Promise.all(t.map(n=>Yr(n)))},Gi=t=>{let e=0;t.forEach(s=>{e+=s.length});const n=new Uint8Array(e);let r=0;return t.forEach(s=>{n.set(s,r),r+=s.length}),n},Xn=async(t,e,n)=>{const r=new TextEncoder;let s=null,i=null,a=null,o=!1,l=!1,[d,c]=[0,0];const h=t-Dt*1e3,u=[];let f=[];b.info(`Getting events between ${new Date(t).toLocaleTimeString()} and ${new Date(e).toLocaleTimeString()}`),b.info(`Using batch duration: ${wt}ms`);for(let y=h;y<e;y+=wt){if({validStartFound:l,events:f}=await qi(y,t,e,l,wt),!(f!=null&&f.length)){b.info("No events found");continue}d===0&&(d=f[0].timestamp),c=f[f.length-1].timestamp,b.info(`Last event time in batch: ${new Date(c).toLocaleTimeString()}`);const v=`${o?",":"["}${f.map(p=>p.event).join(",")}`,m=r.encode(v);n&&i===null&&(b.debug("Attempting compression"),a=new window.CompressionStream("gzip"),i=a.writable.getWriter()),Kr(()=>{n&&i?i.write(m):u.push(m)},"sdk_replay_compression_seconds"),o=!0}if(c-d<mn)return b.info(`Replay duration is shorter than minimum of ${mn}ms / Start:${d} / End:${c}`),null;const g=r.encode("]");return b.debug("Writing final close brace"),i&&a?(i.write(g),i.close(),s=new Uint8Array(await new Response(a.readable).arrayBuffer())):(u.push(g),s=Gi(u)),b.info("Finished generating file data"),s},Wi=async(t,e)=>{const n=window.CompressionStream!==void 0;let r=null;const s=e??Date.now(),i=s-t;try{r=await Xn(i,s,n)}catch(a){a instanceof Error&&window.UserLeap.reportError("Error compressing replay",a),n&&ae(async()=>{await Xn(i,s,!1)},"fileData fallback failed")}return r},Zn=async t=>{const{surveyId:e,responseGroupId:n,visitorId:r,apiUrl:s,completeUploadHeaders:i,replayParams:a,triggerTimestamp:o}=t,l=await Wi(a.replayDurationSeconds*1e3,o);if(l!=null&&l.length)b.info(`Found file data for survey: ${e}`);else{b.info(`File data is empty for survey: ${e}`);return}const d=Hi(l,a.minimumChunkSizeMb,a.signedUrls.length);b.info(`Got ${d.length} chunks for survey: ${e}`);const c=await Promise.all(d.map(async(h,u)=>{const f=b.v4(),g={apiUrl:s,chunkIndex:u+1,completeUploadHeaders:i,etag:null,responseGroupId:n,status:"ReadyForUpload",surveyId:e,timestamp:o,totalChunks:d.length,data:h,uploadId:a.uploadId,uploadUrl:a.signedUrls[u].url,uuid:f,visitorId:r};return b.info(`Recording chunk upload: ${JSON.stringify({index:g.chunkIndex,surveyId:g.surveyId,uploadId:g.uploadId,size:h.length,id:f},null,2)}`),await di(g),b.info(`Done creating chunk upload: ${f}`),g}));b.info(`All chunk records created. Beginning upload for survey: ${e}`),await zi([a.uploadId],c)},Jr=async(t,e)=>{if(b.info(`Attempting replay capture: ${JSON.stringify({isStandalone:t.isStandalone,duration:t.replayParams.replayDurationSeconds,type:t.replayParams.replayDurationType,responseGroupId:t.responseGroupId,surveyId:t.surveyId,triggerTimestamp:t.triggerTimestamp,visitorId:t.visitorId},null,2)}`),Ee()){b.info(`Replay recording is disabled: ${t.surveyId}`);return}b.info(`Replay recording enabled: ${t.surveyId}`);const{isHeatmap:n,isStandalone:r,replayParams:s,triggerTimestamp:i,responseGroupId:a}=t,o=async()=>{setTimeout(()=>b.eventEmitter.removeListener(b.SprigEvent.QuestionAnswered,o),0),ae(async()=>{s.replayDurationType==="before"?await Zn(t):await vi(a)},"Error in schedule/capture callback")};ae(async()=>{if(s.replayDurationType==="after"||s.replayDurationType==="beforeAndAfter"){!r&&!n&&(b.info("Attaching QuestionAnswered listener for non-standalone replay"),b.eventEmitter.on(b.SprigEvent.QuestionAnswered,o)),b.info(`Scheduling capture for replay of type: ${s.replayDurationType}`),await Xr(t);return}if(r||n||e)b.info(`Proceeding to capture replay for survey: ${t.surveyId} / standalone? ${r} / canUpload? ${e}`),await Zn(t),n&&Yi();else{const d=Dt+s.replayDurationSeconds,c=i-d*1e3,h=i;b.info(`Setting expiry minutes to ${s.expirationTimeLimitMinutes} for events from ${new Date(c).toLocaleTimeString()} to ${new Date(h).toLocaleTimeString()}`),await ui(c,h,s.expirationTimeLimitMinutes),b.info("Attaching QuestionAnswered listener"),b.eventEmitter.on(b.SprigEvent.QuestionAnswered,o)}},"Error in scheduling/capturing replay")},Yi=async()=>{parseInt(de??"0")||(b.sessionStorageHelper.removeItem("sprig.isCapturingHeatmap"),Rn=!1),b.sessionStorageHelper.getItem("sprig.teardownAfterCapture")&&(On(),Qr(),b.sessionStorageHelper.removeItem("sprig.teardownAfterCapture"))},Qr=()=>{if(Ee()){b.debug("Not clearing user data, replay is disabled");return}return A.transaction("rw",A.events,A.pendingCaptures,()=>{A.events.where("sessionId").equals(L).delete(),A.pendingCaptures.where("sessionId").equals(L).delete()}).catch(t=>{Se("Error clearing session event data",t)})},Xr=async t=>{b.info(`Scheduling replay capture: ${JSON.stringify(t)}`);const{isHeatmap:e,surveyId:n}=t,r=await gi(),s=r==null?void 0:r.filter(o=>o.captureParams.surveyId===n);if(s!=null&&s.length){b.info(`Pending capture exists for survey: ${n}`);return}e&&(Qi(),Rn=!0,b.sessionStorageHelper.setItem("sprig.isCapturingHeatmap","true"));const i={...t,replayParams:{...t.replayParams}};t.replayParams.replayDurationType==="beforeAndAfter"&&(i.replayParams.replayDurationSeconds*=2),i.replayParams.replayDurationType="before";const a=t.triggerTimestamp+t.replayParams.replayDurationSeconds*1e3;return i.triggerTimestamp=a,de=de?(parseInt(de)+1).toString():"1",b.sessionStorageHelper.setItem("sprig.pendingCount",de),yi({uuid:b.v4(),targetTimestamp:a,timestamp:Date.now(),captureParams:i})},J=(t,e)=>{var n,r;if(Ne)try{(r=(n=window.rrwebRecord)==null?void 0:n.addCustomEvent)==null||r.call(n,t,e)}catch(s){Se("Error recording custom event",s)}},ae=async(t,e)=>{try{await t()}catch(n){Se(e,n)}},Ji=t=>{t.description&&(t.description=Kn(t.description)),J("Sprig_PageView",t)},Qi=()=>{var t,e;if(!(!Ne||!window.rrwebRecord))try{(e=(t=window.rrwebRecord)==null?void 0:t.takeFullSnapshot)==null||e.call(t,!0)}catch(n){Se("Error recording full snapshot",n)}},Xi=t=>{J("Sprig_TrackEvent",t)},Zi=t=>{J("Sprig_ShowSurvey",t)},Zr=t=>{J("Sprig_SubmitSurvey",t)},es=t=>{var e;(e=t==null?void 0:t.elementAttributes)!=null&&e.text&&(t.elementAttributes.text=Kn(t.elementAttributes.text)),J("Sprig_Click",t)},ts=t=>{J("Sprig_Refresh",t)},ns=t=>{t.currentPageTitle&&(t.currentPageTitle=Kn(t.currentPageTitle)),J("Sprig_BackForward",t)},rs=t=>{J("Sprig_Keystroke",t)},ss=async t=>{const{x:e,xPath:n,y:r}=t,s=zr[n];s?ae(async()=>{var a,o,l,d;const i=await A.events.get(s);if(i!=null&&i.event){const c=JSON.parse(i.event),h=e>((o=(a=c.data)==null?void 0:a.payload)==null?void 0:o.x)||0,u=r>((d=(l=c.data)==null?void 0:l.payload)==null?void 0:d.y)||0;if(!(h||u))return;h&&(c.data.payload.x=e),u&&(c.data.payload.y=r),c.data.payload.elementAttributes=t.elementAttributes,i.event=JSON.stringify(c),A.events.put(i)}else J("Sprig_Scroll",t)},"Error updating scroll event"):J("Sprig_Scroll",t)},On=()=>{_t&&(_t(),_t=void 0),Ne=!1,[yn,gn,Vr].forEach(t=>{t&&clearInterval(t)}),Bi()},Se=(t,e,{reportError:n}={reportError:!0})=>(On(),b.error(`${t} - ${JSON.stringify(e)}`),ai(t,e,{reportError:n})),ea=()=>Ne,Kn=t=>t&&t.trim().substring(0,500).replace(/\s\s+/g," ").replace(/\r?\n|\r/g," ").substring(0,250),ta=async({surveyId:t,responseGroupUuid:e,eventDigest:n,headers:r})=>{if(!t||!e)return!1;const s=window.UserLeap._API_URL;try{const i=await tr({surveyId:t,responseGroupUuid:e,eventDigest:n,apiUrl:s,headers:r},!0);return!(i!=null&&i.error)}catch(i){return console.warn("[Sprig] Error with completing session replay"),i instanceof Error&&window.UserLeap.reportError("completeSessionReplay",i),!1}},na=Object.freeze(Object.defineProperty({__proto__:null,RecordBackForward:ns,RecordClick:es,RecordEvent:Xi,RecordKeystroke:rs,RecordPageView:Ji,RecordRefresh:ts,RecordScroll:ss,RecordSurveyComplete:Zr,RecordSurveyShown:Zi,_completeSessionReplay:ta,batchStoreEvents:Gr,checkPendingHeatmapsUrl:wi,clearUserReplayData:Qr,disableRecording:Se,initializeReplay:Mi,isReplayRecording:ea,scheduleCapture:Xr,scheduleOrCaptureReplay:Jr,teardownReplay:On,tryReplayAction:ae},Symbol.toStringTag,{value:"Module"}));b.registerReplay(na);
|
|
1
|
+
"use strict";var xe=Object.defineProperty;var Te=(e,t,n)=>t in e?xe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var U=(e,t,n)=>(Te(e,typeof t!="symbol"?t+"":t,n),n);const o=require("./metricsReporter-D8MMZt8T.cjs");var P=(e=>(e[e.DomContentLoaded=0]="DomContentLoaded",e[e.Load=1]="Load",e[e.FullSnapshot=2]="FullSnapshot",e[e.IncrementalSnapshot=3]="IncrementalSnapshot",e[e.Meta=4]="Meta",e[e.Custom=5]="Custom",e[e.Plugin=6]="Plugin",e))(P||{});class Ae{constructor(t){U(this,"awaitingResolvers",[]);U(this,"activeCount",0);this.capacity=t}async acquire(){if(this.activeCount<this.capacity){this.activeCount++;return}return new Promise(t=>{this.awaitingResolvers.push(t)})}release(){const t=this.awaitingResolvers.shift();t&&this.activeCount<=this.capacity?t():this.activeCount--}async execute(t){try{return await this.acquire(),await t()}finally{this.release()}}setLimit(t){this.capacity=t}}const oe=new Ae(2),Be=e=>oe.setLimit(e),Ue=async e=>oe.execute(async()=>{var r;o.info(`Beginning upload of chunk ${e.chunkIndex} for survey: ${e.surveyId}`);const t=await o.sprigFetch(e.uploadUrl,{body:e.data,method:"PUT"});o.info(`Completed upload of chunk ${e.chunkIndex} for survey: ${e.surveyId}`);const n=(r=t.headers)==null?void 0:r.get("ETag");if(!n)throw new Error(`Upload response did not include etag for upload ${e.uploadId}, part ${e.chunkIndex}`);return n}),ie=async({apiUrl:e,surveyId:t,uploadId:n,etags:r,headers:a,responseGroupUuid:s,replayDuration:i,eventDigest:c},l=!1)=>{var p;if(!l&&!n&&!r){o.info(`Cannot mark upload complete: isMobile: ${l} / uploadId: ${n} / etags: ${r}`);return}o.info(`Marking upload complete for survey: ${t}`);const d=await o.sprigFetch(`${e}/sdk/1/completeSessionReplay`,{method:"POST",body:JSON.stringify({etags:r,uploadId:n,responseGroupUuid:s,surveyId:t,replayDuration:i,eventDigest:c,userAgent:(p=window==null?void 0:window.navigator)==null?void 0:p.userAgent}),headers:a,shouldRetryRequest:!0});return o.info(`Done marking upload complete for survey: ${t}`),d},_=(e,t)=>t.some(n=>e instanceof n);let z,J;function $e(){return z||(z=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])}function Ne(){return J||(J=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])}const L=new WeakMap,$=new WeakMap,A=new WeakMap;function _e(e){const t=new Promise((n,r)=>{const a=()=>{n(S(e.result))},s=()=>{r(e.error)};e.onsuccess=a,e.onerror=s});return A.set(t,e),t}function Le(e){if(L.has(e))return;const t=new Promise((n,r)=>{const a=()=>{n()},s=()=>{r(e.error||new DOMException("AbortError","AbortError"))};e.oncomplete=a,e.onerror=s,e.onabort=s});L.set(e,t)}let M={get(e,t,n){if(e instanceof IDBTransaction){if(t==="done")return L.get(e);if(t==="store")return n.objectStoreNames[1]?void 0:n.objectStore(n.objectStoreNames[0])}return S(e[t])},set(e,t,n){return e[t]=n,!0},has(e,t){return e instanceof IDBTransaction&&(t==="done"||t==="store")?!0:t in e}};function ce(e){M=e(M)}function Me(e){return Ne().includes(e)?function(...t){return e.apply(H(this),t),S(this.request)}:function(...t){return S(e.apply(H(this),t))}}function He(e){return typeof e=="function"?Me(e):(e instanceof IDBTransaction&&Le(e),_(e,$e())?new Proxy(e,M):e)}function S(e){if(e instanceof IDBRequest)return _e(e);if($.has(e))return $.get(e);const t=He(e);return t!==e&&($.set(e,t),A.set(t,e)),t}const H=e=>A.get(e);function Oe(e,t,{blocked:n,upgrade:r,blocking:a,terminated:s}={}){const i=indexedDB.open(e,t),c=S(i);return r&&(i.onupgradeneeded=l=>{r(S(i.result),l.oldVersion,l.newVersion,S(i.transaction),l)}),n&&(i.onblocked=l=>n(l.oldVersion,l.newVersion,l)),c.then(l=>{s&&(l.onclose=()=>s()),a&&(l.onversionchange=d=>a(d.oldVersion,d.newVersion,d))}).catch(()=>{}),c}function le(e,{blocked:t}={}){const n=indexedDB.deleteDatabase(e);return t&&(n.onblocked=r=>t(r.oldVersion,r)),S(n).then(()=>{})}const Fe=["get","getKey","getAll","getAllKeys","count"],je=["put","add","delete","clear"],N=new Map;function q(e,t){if(!(e instanceof IDBDatabase&&!(t in e)&&typeof t=="string"))return;if(N.get(t))return N.get(t);const n=t.replace(/FromIndex$/,""),r=t!==n,a=je.includes(n);if(!(n in(r?IDBIndex:IDBObjectStore).prototype)||!(a||Fe.includes(n)))return;const s=async function(i,...c){const l=this.transaction(i,a?"readwrite":"readonly");let d=l.store;return r&&(d=d.index(c.shift())),(await Promise.all([d[n](...c),a&&l.done]))[0]};return N.set(t,s),s}ce(e=>({...e,get:(t,n,r)=>q(t,n)||e.get(t,n,r),has:(t,n)=>!!q(t,n)||e.has(t,n)}));const Ve=["continue","continuePrimaryKey","advance"],Q={},O=new WeakMap,de=new WeakMap,Ke={get(e,t){if(!Ve.includes(t))return e[t];let n=Q[t];return n||(n=Q[t]=function(...r){O.set(this,de.get(this)[t](...r))}),n}};async function*Ge(...e){let t=this;if(t instanceof IDBCursor||(t=await t.openCursor(...e)),!t)return;t=t;const n=new Proxy(t,Ke);for(de.set(n,t),A.set(n,H(t));t;)yield n,t=await(O.get(n)||t.continue()),O.delete(n)}function X(e,t){return t===Symbol.asyncIterator&&_(e,[IDBIndex,IDBObjectStore,IDBCursor])||t==="iterate"&&_(e,[IDBIndex,IDBObjectStore])}ce(e=>({...e,get(t,n,r){return X(t,n)?Ge:e.get(t,n,r)},has(t,n){return X(t,n)||e.has(t,n)}}));const We=e=>{if(e instanceof Attr)return null;let t=1;for(let n=e.previousSibling;n;n=n.previousSibling)n.nodeName===e.nodeName&&++t;return t},ue=e=>{if(e===null)return"";const t=[];if(e instanceof Document)return"/";for(let n=e;n&&!(n instanceof Document)&&n!==null;n=n instanceof Attr?n.ownerElement:n.parentElement){const r=t[t.length]={name:void 0,position:null};switch(n.nodeType){case Node.TEXT_NODE:r.name="text()";break;case Node.ATTRIBUTE_NODE:r.name="@"+n.nodeName;break;case Node.PROCESSING_INSTRUCTION_NODE:r.name="processing-instruction()";break;case Node.COMMENT_NODE:r.name="comment()";break;case Node.ELEMENT_NODE:r.name=n.nodeName;break}r.position=We(n)}return"/"+t.reverse().map(n=>n.position!==null?`/${n.name}[${n.position}]`:`/${n.name}`).join("")},v={capture:!0,passive:!0},ze=["a","button","input","option","li","link"],Je=["Escape","Enter","Backspace","F5","Tab"];let x=!1;const qe=["label","type","role","title","placeholder","errormessage","valuetext","href"],Y="aria-",Qe=e=>{if(!e.tagName)return"No tagName";const t=e.getAttribute("type");return t?`${t} ${e.tagName.toLowerCase()}`:e.tagName.toLowerCase()},Z=e=>{var r;if(((r=e.tagName)==null?void 0:r.toLowerCase())==="html")return{element:"html"};const t=e.textContent,n=t?{text:t}:{};n.element=Qe(e);for(const a of e.attributes){let s=a.name;const i=a.value;s.startsWith(Y)&&(s=s.substring(Y.length)),qe.includes(s)&&(n[s]=i)}return n},Xe=e=>{var a;if(!e)return{};const n={...Z(e)},r=e.parentElement;if(r&&ze.includes((a=r.tagName)==null?void 0:a.toLowerCase())){const s=Z(r);Object.assign(n,s)}return n},pe=(e,t)=>{var n;ut({x:t.x,y:t.y,type:e,elementAttributes:Xe(t.target),windowHeight:window.innerHeight,windowWidth:window.innerWidth,...t.target instanceof HTMLElement?{rect:(n=t.target)==null?void 0:n.getBoundingClientRect(),xPath:ue(t.target)}:{}})},Ye=e=>t=>pe(e,t),me=e=>{Je.includes(e.key)&&yt({key:e.key})},Ze=()=>{window.performance.getEntriesByType("navigation").map(t=>t.type).includes("reload")&>({url:window.location.href,currentPageTitle:document.title})},et=()=>{window.performance.getEntriesByType("navigation").map(t=>t.type).includes("back_forward")&&wt({curUrl:window.location.href,fromUrl:document.referrer,currentPageTitle:document.title})},tt=(e,t)=>{let n;return r=>{clearTimeout(n),n=window.setTimeout(()=>e(r),t)}},nt=e=>{if(!(e.target instanceof HTMLElement||e.target instanceof Document))return;let t=e.target;"scrollTop"in t||(t=t.documentElement),ht({xPath:ue(t),x:t.scrollLeft,y:t.scrollTop,elementAttributes:{targetScrollWidth:t.scrollWidth,targetClientWidth:t.clientWidth,targetScrollHeight:t.scrollHeight,targetClientHeight:t.clientHeight}})},fe=tt(nt,750),ge=Ye("left_click"),we=e=>{e.button===2&&pe("right_click",e)},rt=()=>{x||(window.addEventListener("click",ge,v),window.addEventListener("mousedown",we,v),window.addEventListener("keydown",me,v),window.addEventListener("scroll",fe,v),x=!0,Ze(),et())},at=()=>{x&&(window.removeEventListener("click",ge,v),window.removeEventListener("mousedown",we,v),window.removeEventListener("keydown",me,v),window.removeEventListener("scroll",fe,v),x=!1)},st=3e4;let E=0;const m={isRecording:!1,scrollEventUuids:{},stopRecording:()=>{}},ot=()=>{const e=o.sessionStorageHelper.getItem("sprig.sessionId");if(e)return o.info(`Found saved session id: ${e}`),o.sessionStorageHelper.removeItem("sprig.sessionId"),e;const t=o.v4();return o.info(`Generating new uuid: ${t}`),t},w=ot(),it=async e=>{var t;if((t=window.navigator.storage)!=null&&t.estimate){const{quota:n=0,usage:r=0}=await window.navigator.storage.estimate();return(n-r)/1024**3>=e}return!0},ye=()=>{o.sessionStorageHelper.setItem("sprig.disableReplayRecording","disabled")},D=()=>!!o.sessionStorageHelper.getItem("sprig.disableReplayRecording");window.addEventListener("beforeunload",()=>{o.info(`Before page unload saving session id: ${w}`),o.sessionStorageHelper.setItem("sprig.sessionId",w)});const ct=async()=>{const t=(await u.getPendingCaptures({isHeatmap:!0})).map(r=>({eventId:r.captureParams.eventId,uuid:r.uuid})),n=[];t.forEach(({eventId:r,uuid:a})=>{o.checkUrlStillMatching(r)||n.push(a)}),n.length&&h(()=>u.markPendingHeatmapsReady(n),"Error marking pending heatmaps ready")},lt=e=>{if(e>1){E=0;return}const t=Date.now();if(!E){E=t;return}t-E>=st&&(E=0,h(()=>u.markPendingHeatmapsReady(),"Error marking pending heatmaps ready"))},K=e=>e&&e.trim().substring(0,500).replace(/\s\s+/g," ").replace(/\r?\n|\r/g," ").substring(0,250),I=(e,t)=>{var n,r;if(m.isRecording)try{(r=(n=window.rrwebRecord)==null?void 0:n.addCustomEvent)==null||r.call(n,e,t)}catch(a){B("Error recording custom event",a)}},dt=e=>{e.description&&(e.description=K(e.description)),I("Sprig_PageView",e)},ut=e=>{var t;(t=e==null?void 0:e.elementAttributes)!=null&&t.text&&(e.elementAttributes.text=K(e.elementAttributes.text)),I("Sprig_Click",e)},pt=e=>{I("Sprig_TrackEvent",e)},mt=e=>{I("Sprig_ShowSurvey",e)},ft=e=>{I("Sprig_SubmitSurvey",e)},gt=e=>{I("Sprig_Refresh",e)},wt=e=>{e.currentPageTitle&&(e.currentPageTitle=K(e.currentPageTitle)),I("Sprig_BackForward",e)},yt=e=>{I("Sprig_Keystroke",e)},ht=async e=>{const{x:t,xPath:n,y:r}=e,a=m.scrollEventUuids[n];if(a)return h(async()=>{var c,l,d,p;const s=await u.openDB(),i=await s.get("events",a);if(i!=null&&i.event){const f=JSON.parse(i.event),y=t>((l=(c=f.data)==null?void 0:c.payload)==null?void 0:l.x),g=r>((p=(d=f.data)==null?void 0:d.payload)==null?void 0:p.y);if(!(y||g))return null;y&&(f.data.payload.x=t),g&&(f.data.payload.y=r),f.data.payload.elementAttributes=e.elementAttributes,i.event=JSON.stringify(f),await s.put("events",i)}else I("Sprig_Scroll",e)},"Error updating scroll event");I("Sprig_Scroll",e)},It=()=>m.isRecording,he=()=>{m.stopRecording&&(m.stopRecording(),m.stopRecording=void 0),m.isRecording=!1,["cleanupInterval","noopInterval","pendingCheckInterval"].forEach(e=>{m[e]&&(clearInterval(m[e]),m[e]=void 0)}),at()},bt=["did not allow mutations","called in an invalid security context"],vt=e=>{if(!e)return!0;for(const t of bt)if(e.toLowerCase().includes(t))return!1;return!0},St=(e,t,{reportError:n=!0,extraInfo:r})=>{D()||t instanceof Error&&(ye(),vt(t==null?void 0:t.message)&&(n&&window.UserLeap.reportError(e,t,r),u.clearAll()))},Ct=async(e,t,{reportError:n}={reportError:!0})=>{var a;let r;try{if(n&&((a=window.navigator.storage)!=null&&a.estimate)){const{quota:s=0,usage:i=0}=await window.navigator.storage.estimate();r={availableSpaceInMB:(s-i)/2**20,quota:s,usage:i}}}catch(s){window.UserLeap.reportError("Error getting storage estimate",s,{originalMessage:e,originalError:t})}St(e,t,{reportError:n,extraInfo:r})},B=(e,t,{reportError:n}={reportError:!0})=>(he(),o.error(`${e} - ${JSON.stringify(t)}`),Ct(e,t,{reportError:n})),h=async(e,t)=>{try{await e()}catch(n){B(t,n)}},Dt=()=>{m.isRecording&&h(()=>{var e,t;return(t=(e=window.rrwebRecord)==null?void 0:e.takeFullSnapshot)==null?void 0:t.call(e,!0)},"Error recording full snapshot")},Et=async({surveyId:e,responseGroupUuid:t,eventDigest:n,headers:r})=>{if(!e||!t)return!1;const a=window.UserLeap._API_URL,s=await ie({surveyId:e,responseGroupUuid:t,eventDigest:n,apiUrl:a,headers:r},!0);return!(s!=null&&s.error)},ee=30,kt=1;le("replayStorage").catch(console.error);le("sprig.replay").catch(console.error);class Pt{openDB(){return Oe("sprigReplay",kt,{upgrade:(t,n,r)=>{if(r===0&&o.sessionStorageHelper.setItem("sprig.pendingCount","0"),!t.objectStoreNames.contains("events")){const a=t.createObjectStore("events",{keyPath:"uuid"});a.createIndex("sessionId","sessionId"),a.createIndex("timestamp","timestamp"),a.createIndex("[sessionId+timestamp]",["sessionId","timestamp"])}if(!t.objectStoreNames.contains("chunkUploads")){const a=t.createObjectStore("chunkUploads",{keyPath:"uuid"});a.createIndex("sessionId","sessionId"),a.createIndex("timestamp","timestamp"),a.createIndex("[sessionId+status]",["sessionId","status"]),a.createIndex("[uploadId+status]",["uploadId","status"]),a.createIndex("[sessionId+status+uploadId]",["sessionId","status","uploadId"])}if(!t.objectStoreNames.contains("pendingCaptures")){const a=t.createObjectStore("pendingCaptures",{keyPath:"uuid"});a.createIndex("sessionId","sessionId"),a.createIndex("timestamp","timestamp"),a.createIndex("[sessionId+targetTimestamp]",["sessionId","targetTimestamp"])}}}).catch(t=>(o.error(`Error opening replay storage: ${t.message}`),ye(),Promise.reject(t)))}constructor(){this.openDB()}async bulkAdd(t,n){const r=(await this.openDB()).transaction(t,"readwrite");return Promise.all([...n.map(a=>r.store.add(a)),r.done])}async clearAll(){const t=(await this.openDB()).transaction(["events","chunkUploads","pendingCaptures"],"readwrite");return Promise.allSettled([t.objectStore("events").clear(),t.objectStore("chunkUploads").clear(),t.objectStore("pendingCaptures").clear()])}async deleteBySessionId(t,n){const r=IDBKeyRange.only(n),a=(await this.openDB()).transaction(t,"readwrite");let i=await a.store.index("sessionId").openCursor(r);for(;i;)i.delete(),i=await i.continue();await a.done}async updatePartial(t,n,r){const s=(await this.openDB()).transaction(t,"readwrite"),i=await s.store.get(n);i&&await s.store.put({...i,...r}),await s.done}async deleteRowsBefore(t,n,r=()=>!0){const a=IDBKeyRange.upperBound(n,!0),s=(await this.openDB()).transaction(t,"readwrite");let c=await s.store.index("timestamp").openCursor(a);for(;c;)r(c.value)&&c.delete(),c=await c.continue();await s.done}async getEventsBetween(t,n=Date.now()){if(t>=n)return Promise.resolve([]);const r=IDBKeyRange.bound([w,t],[w,n],!1,!0);return(await this.openDB()).getAllFromIndex("events","[sessionId+timestamp]",r)}async updateEventsExpiredAt(t,n,r=ee){const a=new Date,s=a.setMinutes(a.getMinutes()+(r??ee)),i=(await this.openDB()).transaction("events","readwrite"),c=i.store.index("[sessionId+timestamp]"),l=IDBKeyRange.bound([w,t],[w,n],!1,!0);let d=await c.openCursor(l);for(;d;)d.update({...d.value,expiredAt:s}),d=await d.continue();await i.done}async deleteChunkUploads(t,n){const r=IDBKeyRange.only([n,t]),a=(await this.openDB()).transaction("chunkUploads","readwrite");let i=await a.store.index("[uploadId+status]").openCursor(r);for(;i;)i.delete(),i=await i.continue();await a.done}async getChunkUploadsByStatus({sessionId:t,status:n,uploadId:r}){const s=(await this.openDB()).transaction("chunkUploads","readonly"),i=r?s.store.index("[uploadId+status]"):s.store.index("[sessionId+status]"),c=r?IDBKeyRange.only([r,n]):IDBKeyRange.only([t,n]);return i.getAll(c)}async getPendingCaptures(t={}){return(await(await this.openDB()).getAllFromIndex("pendingCaptures","sessionId",w)).filter(a=>!t.beforePresent||a.targetTimestamp<Date.now()).filter(a=>!t.isHeatmap||(a.captureParams.isHeatmap??!1))}async markPendingCaptureToCanUpload(t){const n=(await this.openDB()).transaction("pendingCaptures","readwrite");let a=await n.store.index("sessionId").openCursor(w);for(;a;){const s=a.value;s.captureParams.responseGroupId===t&&a.update({...s,canUpload:!0}),a=await a.continue()}await n.done}async markPendingHeatmapsReady(t){if(parseInt(o.sessionStorageHelper.getItem("sprig.pendingCount")??"0")===0)return null;const r=Date.now(),a=(await this.openDB()).transaction("pendingCaptures","readwrite");let i=await a.store.index("sessionId").openCursor(w);for(;i;){const c=i.value;c.captureParams.isHeatmap&&(!t||t.includes(c.uuid))&&i.update({...c,targetTimestamp:r,captureParams:{...c.captureParams,triggerTimestamp:r,replayParams:{...c.captureParams.replayParams,replayDurationSeconds:Math.floor((r-c.timestamp)/1e3)}}}),i=await i.continue()}await a.done}}const u=new Pt,Rt=async(e,t,n)=>new Promise((r,a)=>{const s=e.createElement("script");s.src=t,s.onload=r,s.onerror=a,n&&(s.nonce=n),e.head.appendChild(s)}),Ie=async(e,t)=>{const n=performance.now();let r;try{r=await e()}finally{const a=performance.now()-n;let s=o.PerformanceMetrics[t];s||(s=o.registerMetric(t)),s.report(a/1e3)}return r},be=(e,t)=>{const n=performance.now();try{e()}finally{const r=performance.now()-n;let a=o.PerformanceMetrics[t];a||(a=o.registerMetric(t)),a.report(r/1e3)}};let te=1,F=5e3,R=6e4;const ne=1e3,xt=5,ve=30,T=ve+xt;let re=Date.now(),C,G=!!o.sessionStorageHelper.getItem("sprig.isCapturingHeatmap"),j=!1,V=[];const Tt=async({viewDocument:e,maxReplayDurationSeconds:t,replayNonce:n,maxInflightRequests:r=2,replaySettings:a,teardownAfter:s=!1})=>{C=o.sessionStorageHelper.getItem("sprig.pendingCount"),!m.isRecording&&(s&&o.sessionStorageHelper.setItem("sprig.teardownAfterCapture","true"),await h(async()=>{if(D()){o.info("Not initializing replay because recording is disabled");return}if(!t){o.info("Not initializing replay because config didn't specify maxReplayDurationSeconds");return}if(a!=null&&a.minAvailableGb&&(te=a.minAvailableGb),!await it(te)){o.warn("Minimum storage not available");return}if(o.info("Initializing replay"),a!=null&&a.minDuration&&(F=a.minDuration),a!=null&&a.batchDuration&&(R=a.batchDuration),Be(r),Mt(),$t(t+T,30*60,t+T),Nt(),!window.rrwebRecord){o.info("Loading recording script");const d=window.UserLeap.replayLibraryURL??"https://cdn.sprig.com/dependencies/record-2.0.0-alpha.6.min.js";await Rt(e,d,n),o.info("Recording script finished loading")}const i=window.rrwebRecord;if(!i){o.warn("Record script failed to set global function");return}let c=!0,l=0;m.stopRecording=i({checkoutEveryNms:ve*1e3,sampling:{input:"last",scroll:250,media:800},emit:(d,p)=>{if(D())return;if(re=Date.now(),p&&d.type===P.Meta)l=performance.now();else if(p&&l&&d.type===P.FullSnapshot){const y=performance.now()-l;o.reportAndRegister("sdk_replay_snapshot_seconds",y/1e3)}const f=c||!!p&&d.type===P.Meta;c=!1,At({uuid:o.v4(),event:JSON.stringify(d),isValidStart:f,timestamp:Date.now()})},...a}),m.isRecording=!!m.stopRecording,m.isRecording&&(m.noopInterval||(m.noopInterval=window.setInterval(()=>{Date.now()-re>ne&&I("Sprig_Noop",{})},ne)),o.eventEmitter.on("survey.complete",d=>{ft({id:d,userAgent:window.navigator.userAgent})}),rt())},"Error initializing replay"))},At=e=>{var t,n,r,a;if((t=e.event)!=null&&t.includes("Sprig_Scroll")){const s=(a=(r=(n=JSON.parse(e.event))==null?void 0:n.data)==null?void 0:r.payload)==null?void 0:a.xPath;if(!s)return;m.scrollEventUuids[s]=e.uuid}V.push(e),j||Ut()},Bt=async e=>{const t=e.map(n=>({...n,sessionId:n.sessionId??w}));if(G&<(t.length),t.length!==0)return h(()=>u.bulkAdd("events",t),"Error storing replay events")},Ut=()=>{j=!0,setTimeout(async()=>{if(D())return;const e=V;V=[],j=!1,be(async()=>{await Bt(e)},"sdk_replay_add_event_batch_seconds")},500)},$t=(e,t,n)=>{m.cleanupInterval=window.setInterval(()=>{const r=Date.now();D()||(o.debug(`Performing periodic replay data cleanup / Event Seconds ${e} / Chunk Seconds ${t} / Pending Capture Seconds ${n}`),Ie(()=>h(async()=>{const s=(await Promise.allSettled([u.deleteRowsBefore("events",r-e*1e3,i=>i.expiredAt===void 0||i.expiredAt<r-e*1e3),u.deleteRowsBefore("chunkUploads",r-t*1e3),u.deleteRowsBefore("pendingCaptures",r-n*1e3,i=>!i.canUpload)])).find(i=>i.status==="rejected");if(s)throw new Error(s.reason)},"Error deleting table rows"),"sdk_replay_cleanup_seconds"),o.info("Cleanup complete"))},3e4)},Nt=()=>{m.pendingCheckInterval=window.setInterval(async()=>{h(async()=>{const e=parseInt(C??"0");if(e===0)return;const t=await u.getPendingCaptures({beforePresent:!0}),n=await u.openDB();await Promise.all(t.map(async r=>(await n.delete("pendingCaptures",r.uuid),De(r.captureParams,r.canUpload)))),C=(e-t.length).toString(),o.sessionStorageHelper.setItem("sprig.pendingCount",C)},"Error initiating pending captures")},5e3)},_t=async(e,t,n,r,a)=>{const s=Math.min(e+a,n),i=`from: ${new Date(e).toLocaleTimeString()} to ${new Date(s).toLocaleTimeString()}`;o.info(`Getting event batch ${i}`);const c=await Ie(()=>u.getEventsBetween(e,s),"sdk_replay_get_events_between_seconds");if(!(c!=null&&c.length))return o.info(`No events found ${i}`),{validStartFound:r,events:[]};if(!r){o.info(`Searching for valid start in ${c.length} events ${i}`);let l=-1;if(c==null||c.forEach((p,f)=>{if(!p.isValidStart)return;const y=p.timestamp<=t;(l<0||y)&&(l=f)}),l<0)return o.info(`No valid start found in ${c.length} events ${i}`),{validStartFound:r,events:[]};const d=c[l].timestamp;return o.info(`Found valid start at: ${new Date(d).toLocaleTimeString()} in events ${i}`),{validStartFound:!0,events:c==null?void 0:c.slice(l)}}return{validStartFound:r,events:c}},Lt=(e,t,n)=>{const r=e.length,a=t*1024*1024,s=Math.ceil(r/n),i=Math.max(a,s);o.info(`Total file bytes: ${r} / target chunk size: ${i}`);const c=[];let l=0;for(;l<r;)c.push(e.slice(l,l+i)),l+=i;return c},Se=e=>Promise.all(e.map(async t=>{const n=await Ue(t);return await u.updatePartial("chunkUploads",t.uuid,{data:null,etag:n,status:"UploadComplete"}),t.uploadId})),Ce=async e=>{o.info(`Marking upload complete if finished: ${e}`);const t=await u.getChunkUploadsByStatus({status:"UploadComplete",uploadId:e});if(!(t!=null&&t.length)){o.info(`No finished chunks found for upload: ${e}`);return}const n=t.reduce((s,i)=>(s.find(c=>c.chunkIndex===i.chunkIndex)||s.push(i),s),[]);n.sort((s,i)=>s.chunkIndex-i.chunkIndex);const r=n.map(s=>({ETag:s.etag,PartNumber:s.chunkIndex})).filter(s=>s.ETag!==null),a=n[0];await ie({apiUrl:a.apiUrl,surveyId:a.surveyId,uploadId:e,responseGroupUuid:a.responseGroupId,etags:r,headers:a.completeUploadHeaders,replayDuration:a.replayDuration}),o.info(`Cleaning up chunks for ${e}`),await u.deleteChunkUploads("UploadComplete",e),o.info(`Done cleaning up chunks for ${e}`)},Mt=async()=>{h(async()=>{const e=await u.getChunkUploadsByStatus({sessionId:w,status:"ReadyForUpload"});if(!(e!=null&&e.length))return;const t=await Se(e);o.info(`Finished uploading unfinished chunks for ${t}`),t!=null&&t.length&&await Promise.all(t.map(n=>{if(n)return Ce(n)}))},"Error uploading unfinished chunks")},Ht=async(e,t)=>{await Se(t),o.info(`Done uploading chunks for uploads: ${e.join(",")}`),await Promise.all(e.map(n=>Ce(n)))},Ot=e=>{let t=0;e.forEach(a=>{t+=a.length});const n=new Uint8Array(t);let r=0;return e.forEach(a=>{n.set(a,r),r+=a.length}),n},ae=async(e,t,n)=>{const r=new TextEncoder;let a=null,s=null,i=null,c=!1,l=!1,[d,p]=[0,0];const f=e-T*1e3,y=[];let g=[];o.info(`Getting events between ${new Date(e).toLocaleTimeString()} and ${new Date(t).toLocaleTimeString()}`),o.info(`Using batch duration: ${R}ms`);for(let k=f;k<t;k+=R){if({validStartFound:l,events:g}=await _t(k,e,t,l,R),!(g!=null&&g.length)){o.info("No events found");continue}d===0&&(d=g[0].timestamp),p=g[g.length-1].timestamp,o.info(`Last event time in batch: ${new Date(p).toLocaleTimeString()}`);const Pe=`${c?",":"["}${g.map(Re=>Re.event).join(",")}`,W=r.encode(Pe);n&&s===null&&(o.debug("Attempting compression"),i=new window.CompressionStream("gzip"),s=i.writable.getWriter()),be(()=>{n&&s?s.write(W):y.push(W)},"sdk_replay_compression_seconds"),c=!0}if(p-d<F)return o.info(`Replay duration is shorter than minimum of ${F}ms / Start:${d} / End:${p}`),null;const b=r.encode("]");return o.debug("Writing final close brace"),s&&i?(s.write(b),s.close(),a=new Uint8Array(await new Response(i.readable).arrayBuffer())):(y.push(b),a=Ot(y)),o.info("Finished generating file data"),a},Ft=async(e,t)=>{const n=window.CompressionStream!==void 0;let r=null;const a=t??Date.now(),s=a-e;try{r=await ae(s,a,n)}catch(i){i instanceof Error&&window.UserLeap.reportError("Error compressing replay",i),n&&h(async()=>{await ae(s,a,!1)},"fileData fallback failed")}return r},se=async e=>{const{surveyId:t,responseGroupId:n,visitorId:r,apiUrl:a,completeUploadHeaders:s,replayParams:i,triggerTimestamp:c}=e,l=await Ft(i.replayDurationSeconds*1e3,c);if(l!=null&&l.length)o.info(`Found file data for survey: ${t}`);else{o.info(`File data is empty for survey: ${t}`);return}const d=Lt(l,i.minimumChunkSizeMb,i.signedUrls.length);o.info(`Got ${d.length} chunks for survey: ${t}`);const p=await Promise.all(d.map(async(f,y)=>{const g=o.v4(),b={apiUrl:a,chunkIndex:y+1,completeUploadHeaders:s,etag:null,responseGroupId:n,status:"ReadyForUpload",surveyId:t,timestamp:c,totalChunks:d.length,data:f,uploadId:i.uploadId,uploadUrl:i.signedUrls[y].url,uuid:g,visitorId:r};return o.info(`Recording chunk upload: ${JSON.stringify({index:b.chunkIndex,surveyId:b.surveyId,uploadId:b.uploadId,size:f.length,id:g},null,2)}`),await(await u.openDB()).add("chunkUploads",{...b,sessionId:b.sessionId??w}),o.info(`Done creating chunk upload: ${g}`),b}));o.info(`All chunk records created. Beginning upload for survey: ${t}`),await Ht([i.uploadId],p)},De=async(e,t)=>{if(o.info(`Attempting replay capture: ${JSON.stringify({isStandalone:e.isStandalone,duration:e.replayParams.replayDurationSeconds,type:e.replayParams.replayDurationType,responseGroupId:e.responseGroupId,surveyId:e.surveyId,triggerTimestamp:e.triggerTimestamp,visitorId:e.visitorId},null,2)}`),D())return o.info(`Replay recording is disabled: ${e.surveyId}`);o.info(`Replay recording enabled: ${e.surveyId}`);const{isHeatmap:n,isStandalone:r,replayParams:a,triggerTimestamp:s,responseGroupId:i}=e,c=async()=>{setTimeout(()=>o.eventEmitter.removeListener(o.SprigEvent.QuestionAnswered,c),0),h(async()=>{a.replayDurationType==="before"?await se(e):await u.markPendingCaptureToCanUpload(i)},"Error in schedule/capture callback")};h(async()=>{if(a.replayDurationType==="after"||a.replayDurationType==="beforeAndAfter"){!r&&!n&&(o.info("Attaching QuestionAnswered listener for non-standalone replay"),o.eventEmitter.on(o.SprigEvent.QuestionAnswered,c)),o.info(`Scheduling capture for replay of type: ${a.replayDurationType}`),await ke(e);return}if(r||n||t)o.info(`Proceeding to capture replay for survey: ${e.surveyId} / standalone? ${r} / canUpload? ${t}`),await se(e),n&&jt();else{const d=T+a.replayDurationSeconds,p=s-d*1e3,f=s;o.info(`Setting expiry minutes to ${a.expirationTimeLimitMinutes} for events from ${new Date(p).toLocaleTimeString()} to ${new Date(f).toLocaleTimeString()}`),await u.updateEventsExpiredAt(p,f,a.expirationTimeLimitMinutes),o.info("Attaching QuestionAnswered listener"),o.eventEmitter.on(o.SprigEvent.QuestionAnswered,c)}},"Error in scheduling/capturing replay")},jt=async()=>{parseInt(C??"0")||(o.sessionStorageHelper.removeItem("sprig.isCapturingHeatmap"),G=!1),o.sessionStorageHelper.getItem("sprig.teardownAfterCapture")&&(he(),Ee(),o.sessionStorageHelper.removeItem("sprig.teardownAfterCapture"))},Ee=()=>{if(D()){o.debug("Not clearing user data, replay is disabled");return}return Promise.allSettled([u.deleteBySessionId("events",w),u.deleteBySessionId("pendingCaptures",w)]).then(e=>{var n;const t=(n=e.find(r=>r.status==="rejected"))==null?void 0:n.reason;t&&B("Error clearing session event data",t)})},ke=async e=>{o.info(`Scheduling replay capture: ${JSON.stringify(e)}`);const{isHeatmap:t,surveyId:n}=e,r=await u.getPendingCaptures(),a=r==null?void 0:r.filter(l=>l.captureParams.surveyId===n);if(a!=null&&a.length){o.info(`Pending capture exists for survey: ${n}`);return}t&&(Dt(),G=!0,o.sessionStorageHelper.setItem("sprig.isCapturingHeatmap","true"));const s={...e,replayParams:{...e.replayParams}};e.replayParams.replayDurationType==="beforeAndAfter"&&(s.replayParams.replayDurationSeconds*=2),s.replayParams.replayDurationType="before";const i=e.triggerTimestamp+e.replayParams.replayDurationSeconds*1e3;s.triggerTimestamp=i,C=(parseInt(C??"0")+1).toString(),o.sessionStorageHelper.setItem("sprig.pendingCount",C),await(await u.openDB()).add("pendingCaptures",{canUpload:!1,captureParams:s,sessionId:w,targetTimestamp:i,timestamp:Date.now(),uuid:o.v4()})},Vt=Object.freeze(Object.defineProperty({__proto__:null,RecordEvent:pt,RecordPageView:dt,RecordSurveyShown:mt,_completeSessionReplay:Et,checkPendingHeatmapsUrl:ct,clearUserReplayData:Ee,disableRecording:B,initializeReplay:Tt,isReplayRecording:It,scheduleCapture:ke,scheduleOrCaptureReplay:De},Symbol.toStringTag,{value:"Module"}));o.registerReplay(Vt);
|