require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../functions/utils/caseInsensitive.utils.cjs`),t=require(`../../error-handling/logger.cjs`);require(`../../functions/index.cjs`);let n=require(`idb-keyval`);new class{STORAGE_KEY=`contacts`;checkForDuplicate(e,t,n){if(e.find(({ethereumAddress:e,nickname:r})=>(e===t.ethereumAddress||r===t.nickname)&&e!==n)!==void 0)throw Error(`Duplicate Contact attribute`)}async createContact(e,t){let r=e.toLowerCase();await(0,n.update)(this.STORAGE_KEY,e=>{let n=e??{},i=n[r]??[];return this.checkForDuplicate(i,t),i.push(t),n[r]=i,n})}async getContacts(e){try{let t=e.toLowerCase(),r=await(0,n.get)(this.STORAGE_KEY);return!r||!r[t]?[]:r[t]}catch(e){return t.Logger.error(`Error while getting contacts:`,e),[]}}async editContact(t,r,i){let a=t.toLowerCase();await(0,n.update)(this.STORAGE_KEY,t=>{let n=t??{},o=n[a];if(!n||!o)throw Error(`Contacts could not be fetched`);this.checkForDuplicate(o,i,r);let s=o.findIndex(({ethereumAddress:t})=>e.caseInsensitiveEqual(t,r));if(s===-1)throw Error(`Contact to be edited was not found`);return o[s]=i,n[a]=o,n})}async deleteContact(e,t){let r=e.toLowerCase();await(0,n.update)(this.STORAGE_KEY,e=>{let n=e??{},i=n[r];if(!n||!i)throw Error(`Contacts could not be fetched`);return n[r]=i.filter(({ethereumAddress:e})=>e!==t),n})}};