import{k as t,A as e,L as s,a as i,l as h,c as a,i as r}from"./rsa-plugins-common.min.js";const c={IN_PROGRESS:"inProgress",QUEUE:"queue",RECLAIM_START:"reclaimStart",RECLAIM_END:"reclaimEnd",ACK:"ack",BATCH_QUEUE:"batchQueue"};let l=function(t){return t[t.ASAP=1]="ASAP",t[t.RESCHEDULE=2]="RESCHEDULE",t[t.ABANDON=3]="ABANDON",t}({});const n={setTimeout:(t,e)=>globalThis.setTimeout(t,e),clearTimeout:t=>globalThis.clearTimeout(t),Date:globalThis.Date,clockLateFactor:2};class o{constructor(){this.tasks={},this.nextId=1,this.clock=n}now(){return+new this.clock.Date}run(t,e,s){const i=(this.nextId+1).toString();return this.tasks[i]=this.clock.setTimeout(this.handle(i,t,e,s||l.ASAP),e),i}handle(t,e,s,i){const h=this.now();return()=>{delete this.tasks[t];const a=h+s*(this.clock.clockLateFactor||2),r=this.now();if(!(i>=l.RESCHEDULE&&at.time-e.time,g="RetryQueue";class b{constructor(t,i,h,a,r=s,l,n){var d;this.storeManager=a,this.logger=l,this.name=t,this.id=e(),this.processQueueCb=h,this.batchSizeCalcCb=n,this.maxItems=i.maxItems||m,this.maxAttempts=i.maxAttempts||u,this.batch={enabled:!1},this.configureBatchMode(i),this.backoff={minRetryDelay:i.minRetryDelay||1e3,maxRetryDelay:i.maxRetryDelay||3e4,factor:i.backoffFactor||2,jitter:i.backoffJitter||0};let E=Math.max(null!==(d=i.timerScaleFactor)&&void 0!==d?d:1,1);E=Math.min(E,10),this.timeouts={ackTimer:Math.round(1e3*E),reclaimTimer:Math.round(3e3*E),reclaimTimeout:Math.round(1e4*E),reclaimWait:Math.round(500*E)},this.schedule=new o,this.processId="0",this.store=this.storeManager.setStore({id:this.id,name:this.name,validKeys:c,type:r}),this.setDefaultQueueEntries(),this.ack=this.ack.bind(this),this.checkReclaim=this.checkReclaim.bind(this),this.processHead=this.processHead.bind(this),this.flushBatch=this.flushBatch.bind(this),this.flushBatchOnPageLeave(),this.scheduleTimeoutActive=!1}setDefaultQueueEntries(){this.setStorageEntry(c.IN_PROGRESS,{}),this.setStorageEntry(c.QUEUE,[]),this.setStorageEntry(c.BATCH_QUEUE,[])}configureBatchMode(t){if(this.batchingInProgress=!1,!i(t.batch))return;const e=t.batch;var s,h,a;(this.batch.enabled=!0===e.enabled,this.batch.enabled)&&(this.batch.maxSize=Math.min(null!==(s=e.maxSize)&&void 0!==s?s:d,d),this.batch.maxItems=null!==(h=e.maxItems)&&void 0!==h?h:100,this.batch.flushInterval=null!==(a=e.flushInterval)&&void 0!==a?a:6e4)}flushBatchOnPageLeave(){this.batch.enabled&&(t=>{let e=!1;function s(){e||(e=!0,t())}globalThis.addEventListener("beforeunload",s),document.addEventListener("pagehide",s),document.addEventListener("visibilitychange",(()=>{"hidden"===document.visibilityState?s():e=!1}))})(this.flushBatch)}getStorageEntry(t){return this.store.get(t)}setStorageEntry(t,e){h(e)?this.store.remove(t):this.store.set(t,e)}stop(){this.schedule.cancelAll(),this.scheduleTimeoutActive=!1}start(){this.scheduleTimeoutActive&&this.stop(),this.scheduleTimeoutActive=!0,this.scheduleFlushBatch(),this.ack(),this.checkReclaim(),this.processHead()}scheduleFlushBatch(){var t;this.batch.enabled&&null!==(t=this.batch)&&void 0!==t&&t.flushInterval&&(this.flushBatchTaskId&&this.schedule.cancel(this.flushBatchTaskId),this.flushBatchTaskId=this.schedule.run(this.flushBatch,this.batch.flushInterval,l.ASAP))}flushBatch(){if(!this.batchingInProgress){var t;this.batchingInProgress=!0;let e=null!==(t=this.getStorageEntry(c.BATCH_QUEUE))&&void 0!==t?t:[];if(e.length>0){e=e.slice(-e.length);const t=this.genQueueItem(e.map((t=>t.item)));this.setStorageEntry(c.BATCH_QUEUE,[]),this.pushToMainQueue(t)}this.batchingInProgress=!1,this.scheduleFlushBatch()}}shouldRetry(t,e){return e<=this.maxAttempts}getDelay(t){let e=this.backoff.minRetryDelay*this.backoff.factor**t;if(this.backoff.jitter){const t=Math.random(),s=Math.floor(t*this.backoff.jitter*e);Math.floor(10*t)<5?e-=s:e+=s}return Number(Math.min(e,this.backoff.maxRetryDelay).toPrecision(1))}enqueue(t){let e;e=this.batch.enabled?this.handleNewItemForBatch(t):t,e&&this.pushToMainQueue(e)}handleNewItemForBatch(t){var e;let s,i=null!==(e=this.getStorageEntry(c.BATCH_QUEUE))&&void 0!==e?e:[];if(this.batchingInProgress)i.push(t);else{this.batchingInProgress=!0,i=i.slice(-i.length),i.push(t);const e=this.getBatchDispatchInfo(i);if(e.criteriaMet||e.criteriaExceeded){let h;e.criteriaExceeded?(h=i.slice(0,i.length-1).map((t=>t.item)),i=[t]):(h=i.map((t=>t.item)),i=[]),h.length>0&&(s=this.genQueueItem(h)),this.scheduleFlushBatch()}this.batchingInProgress=!1}return this.setStorageEntry(c.BATCH_QUEUE,i),s}pushToMainQueue(t){var e;let s=null!==(e=this.getStorageEntry(c.QUEUE))&&void 0!==e?e:[];s=s.slice(-(this.maxItems-1)),s.push(t),s=s.sort(E),this.setStorageEntry(c.QUEUE,s),this.scheduleTimeoutActive&&this.processHead()}addItem(t){this.enqueue(this.genQueueItem(t))}genQueueItem(t){return{item:t,attemptNumber:0,time:this.schedule.now(),id:e()}}requeue(t,s,i,h){this.shouldRetry(t,s)&&this.enqueue({item:t,attemptNumber:s,time:this.schedule.now()+this.getDelay(s),id:null!=h?h:e()})}getBatchDispatchInfo(t){var e,s;let i=!1,h=!1;const r=null===(e=this.batch)||void 0===e?void 0:e.maxItems;if(a(r)&&(i=t.length===r,h=t.length>r),i||h)return{criteriaMet:i,criteriaExceeded:h};let c=!1,l=!1;const n=null===(s=this.batch)||void 0===s?void 0:s.maxSize;if(a(n)&&a(this.batchSizeCalcCb)){const e=this.batchSizeCalcCb(t.map((t=>t.item)));c=e===n,l=e>n}return{criteriaMet:c,criteriaExceeded:l}}processHead(){var s,i,h;this.schedule.cancel(this.processId);let a=null!==(s=this.getStorageEntry(c.QUEUE))&&void 0!==s?s:[];const r=null!==(i=this.getStorageEntry(c.IN_PROGRESS))&&void 0!==i?i:{},n=this.schedule.now(),o=[],u=(t,e)=>(s,i)=>{var h;const a=null!==(h=this.getStorageEntry(c.IN_PROGRESS))&&void 0!==h?h:{};delete a[e],this.setStorageEntry(c.IN_PROGRESS,a),s&&this.requeue(t.item,t.attemptNumber+1,s,t.id)},m=(t,e)=>{o.push({item:t.item,done:u(t,e),attemptNumber:t.attemptNumber})};let d=Object.keys(r).length;for(;a.length>0&&a[0].time<=n&&d++{try{const t=this.shouldRetry(e.item,e.attemptNumber+1);this.processQueueCb(e.item,e.done,e.attemptNumber,this.maxAttempts,t)}catch(e){var s;null===(s=this.logger)||void 0===s||s.error(`${g}${t}Process function threw an error.`,e)}})),a=null!==(h=this.getStorageEntry(c.QUEUE))&&void 0!==h?h:[],this.schedule.cancel(this.processId),a.length>0){const t=a[0].time-n;this.processId=this.schedule.run(this.processHead,t,l.ASAP)}}ack(){this.setStorageEntry(c.ACK,this.schedule.now()),null!=this.reclaimStartVal&&(this.reclaimStartVal=null,this.setStorageEntry(c.RECLAIM_START,null)),null!=this.reclaimEndVal&&(this.reclaimEndVal=null,this.setStorageEntry(c.RECLAIM_END,null)),this.schedule.run(this.ack,this.timeouts.ackTimer,l.ASAP)}reclaim(t){var i,h,a,r;const l=this.storeManager.setStore({id:t,name:this.name,validKeys:c,type:s}),n={queue:null!==(i=this.getStorageEntry(c.QUEUE))&&void 0!==i?i:[]},o={inProgress:null!==(h=l.get(c.IN_PROGRESS))&&void 0!==h?h:{},batchQueue:null!==(a=l.get(c.BATCH_QUEUE))&&void 0!==a?a:[],queue:null!==(r=l.get(c.QUEUE))&&void 0!==r?r:[]},u=[],m=(t,s)=>{const i=t=>{var i;const h=null!==(i=t.id)&&void 0!==i?i:e();u.includes(h)||(n.queue.push({item:t.item,attemptNumber:t.attemptNumber+s,time:this.schedule.now(),id:h}),u.push(h))};Array.isArray(t)?t.forEach(i):t&&Object.values(t).forEach(i)};m(o.queue,0),this.batch.enabled?o.batchQueue.forEach((t=>{var s;const i=null!==(s=t.id)&&void 0!==s?s:e();u.includes(i)||(this.enqueue(t),u.push(i))})):m(o.batchQueue,0),m(o.inProgress,1),n.queue=n.queue.sort(E),this.setStorageEntry(c.QUEUE,n.queue),this.clearQueueEntries(l,1),this.processHead()}clearQueueEntries(t,e){this.removeStorageEntry(t,0,e)}removeStorageEntry(e,s,i,h=1){const a=Object.keys(c),r=c[a[s]];globalThis.setTimeout((()=>{try{e.remove(r),s+1`${e}${t}Failed to remove local storage entry "${s}" (attempt: ${i}.`)(g,r,h),l);2===h&&s+1()=>{t.get(c.RECLAIM_END)===this.id&&t.get(c.RECLAIM_START)===this.id&&this.reclaim(t.id)},e=e=>()=>{e.get(c.RECLAIM_START)===this.id&&(e.set(c.RECLAIM_END,this.id),this.schedule.run(t(e),this.timeouts.reclaimWait,l.ABANDON))},i=t=>{t.set(c.RECLAIM_START,this.id),t.set(c.ACK,this.schedule.now()),this.schedule.run(e(t),this.timeouts.reclaimWait,l.ABANDON)};(t=>{const e=[],i=this.store.getOriginalEngine();let h=[];if(r(i.keys))h=i.keys();else for(let t=0;t{const h=i?i.split("."):[];h.length>=3&&h[0]===t&&h[1]!==this.id&&h[2]===c.ACK&&e.push(this.storeManager.setStore({id:h[1],name:t,validKeys:c,type:s}))})),e})(this.name).forEach((t=>{this.schedule.now()-t.get(c.ACK)