1 (()=>{var W={8244(A,l){var u,O;typeof globalThis<"u"?globalThis:typeof self<"u"&&self,void 0!==(O="function"==typeof(u=function(v){"use strict";if(!(globalThis.chrome&&globalThis.chrome.runtime&&globalThis.chrome.runtime.id))throw new Error("This script should only be loaded in a browser extension.");if(globalThis.browser&&globalThis.browser.runtime&&globalThis.browser.runtime.id)v.exports=globalThis.browser;else{const S="The message port closed before a response was received.";v.exports=(p=>{const _={alarms:{clear:{minArgs:0,maxArgs:1},clearAll:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getAll:{minArgs:0,maxArgs:0}},bookmarks:{create:{minArgs:1,maxArgs:1},get:{minArgs:1,maxArgs:1},getChildren:{minArgs:1,maxArgs:1},getRecent:{minArgs:1,maxArgs:1},getSubTree:{minArgs:1,maxArgs:1},getTree:{minArgs:0,maxArgs:0},move:{minArgs:2,maxArgs:2},remove:{minArgs:1,maxArgs:1},removeTree:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1},update:{minArgs:2,maxArgs:2}},browserAction:{disable:{minArgs:0,maxArgs:1,fallbackToNoCallback:!0},enable:{minArgs:0,maxArgs:1,fallbackToNoCallback:!0},getBadgeBackgroundColor:{minArgs:1,maxArgs:1},getBadgeText:{minArgs:1,maxArgs:1},getPopup:{minArgs:1,maxArgs:1},getTitle:{minArgs:1,maxArgs:1},openPopup:{minArgs:0,maxArgs:0},setBadgeBackgroundColor:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setBadgeText:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setIcon:{minArgs:1,maxArgs:1},setPopup:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setTitle:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},browsingData:{remove:{minArgs:2,maxArgs:2},removeCache:{minArgs:1,maxArgs:1},removeCookies:{minArgs:1,maxArgs:1},removeDownloads:{minArgs:1,maxArgs:1},removeFormData:{minArgs:1,maxArgs:1},removeHistory:{minArgs:1,maxArgs:1},removeLocalStorage:{minArgs:1,maxArgs:1},removePasswords:{minArgs:1,maxArgs:1},removePluginData:{minArgs:1,maxArgs:1},settings:{minArgs:0,maxArgs:0}},commands:{getAll:{minArgs:0,maxArgs:0}},contextMenus:{remove:{minArgs:1,maxArgs:1},removeAll:{minArgs:0,maxArgs:0},update:{minArgs:2,maxArgs:2}},cookies:{get:{minArgs:1,maxArgs:1},getAll:{minArgs:1,maxArgs:1},getAllCookieStores:{minArgs:0,maxArgs:0},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}},devtools:{inspectedWindow:{eval:{minArgs:1,maxArgs:2,singleCallbackArg:!1}},panels:{create:{minArgs:3,maxArgs:3,singleCallbackArg:!0},elements:{createSidebarPane:{minArgs:1,maxArgs:1}}}},downloads:{cancel:{minArgs:1,maxArgs:1},download:{minArgs:1,maxArgs:1},erase:{minArgs:1,maxArgs:1},getFileIcon:{minArgs:1,maxArgs:2},open:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},pause:{minArgs:1,maxArgs:1},removeFile:{minArgs:1,maxArgs:1},resume:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1},show:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},extension:{isAllowedFileSchemeAccess:{minArgs:0,maxArgs:0},isAllowedIncognitoAccess:{minArgs:0,maxArgs:0}},history:{addUrl:{minArgs:1,maxArgs:1},deleteAll:{minArgs:0,maxArgs:0},deleteRange:{minArgs:1,maxArgs:1},deleteUrl:{minArgs:1,maxArgs:1},getVisits:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1}},i18n:{detectLanguage:{minArgs:1,maxArgs:1},getAcceptLanguages:{minArgs:0,maxArgs:0}},identity:{launchWebAuthFlow:{minArgs:1,maxArgs:1}},idle:{queryState:{minArgs:1,maxArgs:1}},management:{get:{minArgs:1,maxArgs:1},getAll:{minArgs:0,maxArgs:0},getSelf:{minArgs:0,maxArgs:0},setEnabled:{minArgs:2,maxArgs:2},uninstallSelf:{minArgs:0,maxArgs:1}},notifications:{clear:{minArgs:1,maxArgs:1},create:{minArgs:1,maxArgs:2},getAll:{minArgs:0,maxArgs:0},getPermissionLevel:{minArgs:0,maxArgs:0},update:{minArgs:2,maxArgs:2}},pageAction:{getPopup:{minArgs:1,maxArgs:1},getTitle:{minArgs:1,maxArgs:1},hide:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setIcon:{minArgs:1,maxArgs:1},setPopup:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setTitle:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},show:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},permissions:{contains:{minArgs:1,maxArgs:1},getAll:{minArgs:0,maxArgs:0},remove:{minArgs:1,maxArgs:1},request:{minArgs:1,maxArgs:1}},runtime:{getBackgroundPage:{minArgs:0,maxArgs:0},getPlatformInfo:{minArgs:0,maxArgs:0},openOptionsPage:{minArgs:0,maxArgs:0},requestUpdateCheck:{minArgs:0,maxArgs:0},sendMessage:{minArgs:1,maxArgs:3},sendNativeMessage:{minArgs:2,maxArgs:2},setUninstallURL:{minArgs:1,maxArgs:1}},sessions:{getDevices:{minArgs:0,maxArgs:1},getRecentlyClosed:{minArgs:0,maxArgs:1},restore:{minArgs:0,maxArgs:1}},storage:{local:{clear:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}},managed:{get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1}},sync:{clear:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}}},tabs:{captureVisibleTab:{minArgs:0,maxArgs:2},create:{minArgs:1,maxArgs:1},detectLanguage:{minArgs:0,maxArgs:1},discard:{minArgs:0,maxArgs:1},duplicate:{minArgs:1,maxArgs:1},executeScript:{minArgs:1,maxArgs:2},get:{minArgs:1,maxArgs:1},getCurrent:{minArgs:0,maxArgs:0},getZoom:{minArgs:0,maxArgs:1},getZoomSettings:{minArgs:0,maxArgs:1},goBack:{minArgs:0,maxArgs:1},goForward:{minArgs:0,maxArgs:1},highlight:{minArgs:1,maxArgs:1},insertCSS:{minArgs:1,maxArgs:2},move:{minArgs:2,maxArgs:2},query:{minArgs:1,maxArgs:1},reload:{minArgs:0,maxArgs:2},remove:{minArgs:1,maxArgs:1},removeCSS:{minArgs:1,maxArgs:2},sendMessage:{minArgs:2,maxArgs:3},setZoom:{minArgs:1,maxArgs:2},setZoomSettings:{minArgs:1,maxArgs:2},update:{minArgs:1,maxArgs:2}},topSites:{get:{minArgs:0,maxArgs:0}},webNavigation:{getAllFrames:{minArgs:1,maxArgs:1},getFrame:{minArgs:1,maxArgs:1}},webRequest:{handlerBehaviorChanged:{minArgs:0,maxArgs:0}},windows:{create:{minArgs:0,maxArgs:1},get:{minArgs:1,maxArgs:2},getAll:{minArgs:0,maxArgs:1},getCurrent:{minArgs:0,maxArgs:1},getLastFocused:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},update:{minArgs:2,maxArgs:2}}};if(0===Object.keys(_).length)throw new Error("api-metadata.json has not been included in browser-polyfill");class h extends WeakMap{constructor(r,s=void 0){super(s),this.createItem=r}get(r){return this.has(r)||this.set(r,this.createItem(r)),super.get(r)}}const U=(e,r)=>(...s)=>{p.runtime.lastError?e.reject(new Error(p.runtime.lastError.message)):e.resolve(r.singleCallbackArg||s.length<=1&&!1!==r.singleCallbackArg?s[0]:s)},w=e=>1==e?"argument":"arguments",C=(e,r,s)=>new Proxy(r,{apply:(n,a,g)=>s.call(a,e,...g)});let T=Function.call.bind(Object.prototype.hasOwnProperty);const N=(e,r={},s={})=>{let n=Object.create(null),a={has:(i,t)=>t in e||t in n,get(i,t,m){if(t in n)return n[t];if(!(t in e))return;let o=e[t];if("function"==typeof o)if("function"==typeof r[t])o=C(e,e[t],r[t]);else if(T(s,t)){let d=((e,r)=>function(n,...a){if(a.length<r.minArgs)throw new Error(`Expected at least ${r.minArgs} ${w(r.minArgs)} for ${e}(), got ${a.length}`);if(a.length>r.maxArgs)throw new Error(`Expected at most ${r.maxArgs} ${w(r.maxArgs)} for ${e}(), got ${a.length}`);return new Promise((g,i)=>{if(r.fallbackToNoCallback)try{n[e](...a,U({resolve:g,reject:i},r))}catch(t){console.warn(`${e} API method doesn't seem to support the callback parameter, falling back to call it without a callback: `,t),n[e](...a),r.fallbackToNoCallback=!1,r.noCallback=!0,g()}else r.noCallback?(n[e](...a),g()):n[e](...a,U({resolve:g,reject:i},r))})})(t,s[t]);o=C(e,e[t],d)}else o=o.bind(e);else if("object"==typeof o&&null!==o&&(T(r,t)||T(s,t)))o=N(o,r[t],s[t]);else{if(!T(s,"*"))return Object.defineProperty(n,t,{configurable:!0,enumerable:!0,get:()=>e[t],set(d){e[t]=d}}),o;o=N(o,r[t],s["*"])}return n[t]=o,o},set:(i,t,m,o)=>(t in n?n[t]=m:e[t]=m,!0),defineProperty:(i,t,m)=>Reflect.defineProperty(n,t,m),deleteProperty:(i,t)=>Reflect.deleteProperty(n,t)},g=Object.create(e);return new Proxy(g,a)},k=e=>({addListener(r,s,...n){r.addListener(e.get(s),...n)},hasListener:(r,s)=>r.hasListener(e.get(s)),removeListener(r,s){r.removeListener(e.get(s))}}),$=new h(e=>"function"!=typeof e?e:function(s){const n=N(s,{},{getContent:{minArgs:0,maxArgs:0}});e(n)}),M=new h(e=>"function"!=typeof e?e:function(s,n,a){let i,m,g=!1,t=new Promise(y=>{i=function(x){g=!0,y(x)}});try{m=e(s,n,i)}catch(y){m=Promise.reject(y)}const o=!0!==m&&(e=>e&&"object"==typeof e&&"function"==typeof e.then)(m);return!(!0!==m&&!o&&!g||((o?m:t).then(x=>{a(x)},x=>{let I;I=x&&(x instanceof Error||"string"==typeof x.message)?x.message:"An unexpected error occurred",a({__mozWebExtensionPolyfillReject__:!0,message:I})}).catch(x=>{console.error("Failed to send onMessage rejected reply",x)}),0))}),P=({reject:e,resolve:r},s)=>{p.runtime.lastError?p.runtime.lastError.message===S?r():e(new Error(p.runtime.lastError.message)):s&&s.__mozWebExtensionPolyfillReject__?e(new Error(s.message)):r(s)},B=(e,r,s,...n)=>{if(n.length<r.minArgs)throw new Error(`Expected at least ${r.minArgs} ${w(r.minArgs)} for ${e}(), got ${n.length}`);if(n.length>r.maxArgs)throw new Error(`Expected at most ${r.maxArgs} ${w(r.maxArgs)} for ${e}(), got ${n.length}`);return new Promise((a,g)=>{const i=P.bind(null,{resolve:a,reject:g});n.push(i),s.sendMessage(...n)})},R={devtools:{network:{onRequestFinished:k($)}},runtime:{onMessage:k(M),onMessageExternal:k(M),sendMessage:B.bind(null,"sendMessage",{minArgs:1,maxArgs:3})},tabs:{sendMessage:B.bind(null,"sendMessage",{minArgs:2,maxArgs:3})}},b={clear:{minArgs:1,maxArgs:1},get:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}};return _.privacy={network:{"*":b},services:{"*":b},websites:{"*":b}},N(p,R,_)})(chrome)}})?u.apply(l,[A]):u)&&(A.exports=O)}},j={};function f(A){var l=j[A];if(void 0!==l)return l.exports;var u=j[A]={exports:{}};return W[A].call(u.exports,u,u.exports,f),u.exports}f.n=A=>{var l=A&&A.__esModule?()=>A.default:()=>A;return f.d(l,{a:l}),l},f.d=(A,l)=>{for(var u in l)f.o(l,u)&&!f.o(A,u)&&Object.defineProperty(A,u,{enumerable:!0,get:l[u]})},f.o=(A,l)=>Object.prototype.hasOwnProperty.call(A,l),(()=>{"use strict";function A(e,r,s,n,a,g,i){try{var t=e[g](i),m=t.value}catch(o){return void s(o)}t.done?r(m):Promise.resolve(m).then(n,a)}function l(e){return function(){var r=this,s=arguments;return new Promise(function(n,a){var g=e.apply(r,s);function i(m){A(g,n,a,i,t,"next",m)}function t(m){A(g,n,a,i,t,"throw",m)}i(void 0)})}}const v_vaultSnapshots="vaultSnapshots";Array.prototype.empty||(Array.prototype.empty=function(){return 0===this.length}),Array.prototype.sortBy||(Array.prototype.sortBy=function(e,r){if(0===this.length)return[];let s=!0;"desc"===r&&(s=!1);const n=Array.from(this),a=e(n[0]);if("string"==typeof a)n.sort((g,i)=>s?(""+e(g)).localeCompare(e(i)):(""+e(i)).localeCompare(e(g)));else{if("number"!=typeof a)throw new Error("sortBy is not implemented for that type!");n.sort(s?(g,i)=>Number(e(g))-Number(e(i)):(g,i)=>Number(e(i))-Number(e(g)))}return n}),Array.prototype.groupBy||(Array.prototype.groupBy=function(e,r){const s=new Map,n=new Set(this.map(a=>e(a)));for(const a of n){const g=this.filter(i=>e(i)===a);s.set(a,r(g))}return s});var S=f(8244),E=f.n(S);const _={randomUUID:typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};let h;const L=new Uint8Array(16);function U(){if(!h&&(h=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!h))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return h(L)}const c=[];for(let e=0;e<256;++e)c.push((e+256).toString(16).slice(1));const $=function k(e,r,s){if(_.randomUUID&&!r&&!e)return _.randomUUID();const n=(e=e||{}).random||(e.rng||U)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,r){s=s||0;for(let a=0;a<16;++a)r[s+a]=n[a];return r}return function C(e,r=0){return c[e[r+0]]+c[e[r+1]]+c[e[r+2]]+c[e[r+3]]+"-"+c[e[r+4]]+c[e[r+5]]+"-"+c[e[r+6]]+c[e[r+7]]+"-"+c[e[r+8]]+c[e[r+9]]+"-"+c[e[r+10]]+c[e[r+11]]+c[e[r+12]]+c[e[r+13]]+c[e[r+14]]+c[e[r+15]]}(n)};function M(){return P.apply(this,arguments)}function P(){return(P=l(function*(){const e=yield E().storage.local.get(v_vaultSnapshots);return typeof e.vaultSnapshots>"u"?[]:e.vaultSnapshots.sortBy(r=>r.fileName,"desc")})).apply(this,arguments)}function B(e){return R.apply(this,arguments)}function R(){return(R=l(function*(e){yield E().storage.local.set({vaultSnapshots:e})})).apply(this,arguments)}function b(e){const r=document.getElementById("snapshotsList");if(r){r.innerHTML="";for(const s of e){const n=document.createElement("li");n.innerText='"'+s.fileName+'" -> vault version: '+s.data.version+" -> identities: "+s.data.identities.length+" -> relays: "+s.data.relays.length,r.appendChild(n)}}}document.addEventListener("DOMContentLoaded",l(function*(){const e=document.getElementById("uploadSnapshotsButton"),r=document.getElementById("deleteSnapshotsButton"),s=document.getElementById("uploadSnapshotInput");r?.addEventListener("click",l(function*(){yield B([]),b([])})),e?.addEventListener("click",l(function*(){s?.click()})),s?.addEventListener("change",function(){var a=l(function*(g){const i=g.target.files;if(i)try{const t=yield M(),m=[];for(const d of i){const y=yield d.text(),x=JSON.parse(y);t.some(I=>I.fileName===d.name)||m.push({id:$(),fileName:d.name,createdAt:(new Date).toISOString(),data:x,identityCount:x.identities?.length??0,reason:"manual"})}const o=[...t,...m].sortBy(d=>d.fileName,"desc");yield B(o),b(o)}catch(t){console.log(t)}});return function(g){return a.apply(this,arguments)}}()),b(yield M())}))})()})();