1import{t as e}from"./dist-CQS6rvaI.js";import{A as t,C as n,O as r,S as i,X as a,_ as o,b as s,g as c,h as l,l as u,o as d,p as f,s as p,v as m,w as h,x as g,y as _}from"./index-BjsTZRdc.js";import{activateLicense as ee,deactivateLicense as te,getLicenseInfo as ne,getLicenseKey as re,isProUser as v,markCelebrationPlayed as ie,shouldPlayCelebration as ae}from"./license-_bs9pA8t.js";async function y(e,t){return await f({password:e,salt:t,parallelism:4,iterations:3,memorySize:65536,hashLength:32,outputType:`binary`})}function oe(){return crypto.getRandomValues(new Uint8Array(16))}var b=`autolock`,se=5,ce=15;function le(){let e=ve().autoLockMinutes;return typeof e==`number`?e:se}function x(){if(!chrome.alarms?.clear||!chrome.alarms?.create)return;chrome.alarms.clear(b);let e=le();e<=0||chrome.alarms.create(b,{delayInMinutes:e})}function ue(){chrome.alarms?.clear&&chrome.alarms.clear(b)}async function de(){if(await ye(),!chrome.idle?.setDetectionInterval)return;let e=le(),t=e>0?Math.max(ce,e*60):ce;chrome.idle.setDetectionInterval(t)}function fe(){chrome.runtime?.sendMessage?.({type:`VAULT_LOCKED`})?.catch?.(()=>{});try{chrome.tabs.query({},e=>{for(let t of e)t.id!==void 0&&chrome.tabs.sendMessage(t.id,{type:`VAULT_LOCKED`}).catch(()=>{})})}catch{}}chrome.alarms?.onAlarm?.addListener&&chrome.alarms.onAlarm.addListener(e=>{e.name===b&&(H(),fe())}),chrome.idle?.onStateChanged&&chrome.idle.onStateChanged.addListener(e=>{le()<=0||(e===`idle`||e===`locked`)&&(H(),fe())});var S=`peach_vault_a`,C=`peach_vault_b`,pe=`peach_vault`,me=`peach_decoy_vault`,he=`peach_duress`,ge=1024,w=null,T=[],E=new Map,D=`real`,O=!1,_e=!1,k={};function ve(){return k}async function ye(){return await j(),k}async function A(e){await j(),k={...k,...e},await be()}async function be(){try{await chrome.storage.local.set({peach_settings:k})}catch(e){throw xe(e)}}function xe(e){let t=e instanceof Error?e.message:String(e);return/QUOTA_BYTES|quota/i.test(t)?Error(`STORAGE_QUOTA_EXCEEDED`):e instanceof Error?e:Error(t)}async function j(){k=(await chrome.storage.local.get(`peach_settings`)).peach_settings??{}}async function M(e){let t=new TextEncoder,n=await crypto.subtle.digest(`SHA-1`,t.encode(e)),r=Array.from(new Uint8Array(n)).map(e=>e.toString(16).padStart(2,`0`)).join(``).toUpperCase(),i=r.slice(0,5),a=r.slice(5);try{let e=await fetch(`https://api.pwnedpasswords.com/range/${i}`);if(!e.ok)return 0;let t=(await e.text()).split(`\r2`).find(e=>e.startsWith(a));return t?parseInt(t.split(`:`)[1],10):0}catch{return 0}}async function Se(e,t,n){let r=await we(e,t,n);await j(),k={...k,declinedCardFingerprints:[...k.declinedCardFingerprints??[],r]},await be()}async function Ce(e,t,n){await j();let r=await we(e,t,n);return(k.declinedCardFingerprints??[]).includes(r)}async function we(e,t,n){let r=new TextEncoder,i=await crypto.subtle.digest(`SHA-1`,r.encode(`${e}${t}${n}`));return Array.from(new Uint8Array(i)).map(e=>e.toString(16).padStart(2,`0`)).join(``)}function N(e){return Array.from(e).map(e=>e.toString(16).padStart(2,`0`)).join(``)}function P(e){let t=new Uint8Array(e.length/2);for(let n=0;n<e.length;n+=2)t[n/2]=parseInt(e.slice(n,n+2),16);return t}async function F(e){return(await chrome.storage.local.get(e))[e]??null}async function I(e,t){try{await chrome.storage.local.set({[e]:t})}catch(e){throw xe(e)}}async function L(){if(_e)return;_e=!0;let e=[pe,me,he,S,C],t=await chrome.storage.local.get(e),n=t[S]!==void 0,r=t[C]!==void 0,i=t[pe],a=t[me];if(!n&&!i||n&&r&&!i&&!a)return;if(i&&!n&&await I(S,i),!r){let e=i??t[S];a?await I(C,a):e&&await I(C,R(e.ciphertext.length/2))}let o=[];i&&o.push(pe),a&&o.push(me),t[he]!==void 0&&o.push(he),o.length>0&&await chrome.storage.local.remove(o)}function Te(e){let t=new TextEncoder().encode(e),n=Math.max(ge,Math.ceil(t.length/ge)*ge)-t.length;return e+` `.repeat(n)}var Ee=65536;function De(e){for(let t=0;t<e.length;t+=Ee){let n=Math.min(t+Ee,e.length),r=new Uint8Array(n-t);crypto.getRandomValues(r),e.set(r,t)}return e}function R(e){let t=crypto.getRandomValues(new Uint8Array(16)),n=crypto.getRandomValues(new Uint8Array(12)),r=De(new Uint8Array(e)),i=crypto.getRandomValues(new Uint8Array(16));return{version:1,salt:N(t),nonce:N(n),ciphertext:N(r),tag:N(i)}}function z(e,t){return Te(JSON.stringify({entries:e,duressConfigured:t}))}function Oe(e){if(`created`in e||`updated`in e)return!0;let t=e;return t.type===`passkey`||t.rpId!==void 0&&t.passkey===void 0}function ke(e){let t=JSON.parse(e),n=Array.isArray(t)?t:t.entries??[],r=n.some(Oe),i=n.map(tt),{merged:a}=Ae(i);return Array.isArray(t)?{entries:i,duressConfigured:!1,migratedFromLegacy:!0}:{entries:i,duressConfigured:t.duressConfigured===!0,migratedFromLegacy:r||a}}function Ae(e){let t=!1,n=Date.now(),r=e.filter(e=>!e.deletedAt&&e.passkey),i=new Map;for(let e of r){let t=e.passkey.rpId,n=i.get(t);n?n.push(e):i.set(t,[e])}for(let[r,a]of i){if(a.length===0)continue;a.sort((e,t)=>{let n=e.passkey.lastUsedAt??e.passkey.createdAt??e.modifiedAt??e.createdAt;return(t.passkey.lastUsedAt??t.passkey.createdAt??t.modifiedAt??t.createdAt)-n});let i=a[0],o=e.find(e=>{if(e.deletedAt||e.passkey||e.type!==`login`)return!1;if(e.url&&u(e.url)===r)return!0;for(let t of e.additionalUrls??[])if(u(t)===r)return!0;return!1});if(o){o.passkey=i.passkey,o.modifiedAt=n;for(let e of a)e.deletedAt||(e.deletedAt=n,e.modifiedAt=n);t=!0}else if(a.length>1){for(let e=1;e<a.length;e+=1){let t=a[e];t.deletedAt||(t.deletedAt=n,t.modifiedAt=n)}t=!0}}return{merged:t}}async function B(e,t){try{return ke(await l(t,e.nonce,e.ciphertext,e.tag))}catch{return null}}function V(e){E=new Map;for(let t of e){if(t.deletedAt||t.type===`note`||t.type===`card`)continue;let e=new Set,n=u(t.url??``);n&&e.add(n);for(let n of t.additionalUrls??[]){let t=u(n);t&&e.add(t)}if(e.size!==0)for(let n of e){let e=E.get(n)??[];e.push(t),E.set(n,e)}}}async function je(e){await L();let t=oe();w=await y(e,t),T=[],D=`real`,O=!1,V(T);let n=z(T,O),{nonce:r,ciphertext:i,tag:a}=await c(w,n);await I(S,{version:1,salt:N(t),nonce:r,ciphertext:i,tag:a}),await I(C,R(i.length/2)),x()}async function Me(){return await L(),await F(S)!==null}async function Ne(){return D===`real`&&O}async function Pe(e){if(!w||D!==`real`)throw Error(`vault must be unlocked in real mode`);await L();let t=await F(S);if(!t)throw Error(`missing slot A`);let n=oe(),r=await y(e,n);try{let e=t.ciphertext.length/2,i=z([],!1),a=new TextEncoder().encode(i);a.length<e&&(i+=` `.repeat(e-a.length));let{nonce:o,ciphertext:s,tag:l}=await c(r,i);await I(C,{version:1,salt:N(n),nonce:o,ciphertext:s,tag:l})}finally{o(r)}O=!0,await q()}async function Fe(){if(!w||D!==`real`)throw Error(`vault must be unlocked in real mode`);await L();let e=await F(S);e&&await I(C,R(e.ciphertext.length/2)),O=!1,await q()}async function Ie(e){await L();let t=await F(S);if(!t)return!1;let n=await y(e,P(t.salt));try{return await B(t,n)!==null}finally{o(n)}}async function Le(e){await L();let[t,n]=await Promise.all([F(S),F(C)]),[r,i]=await Promise.all([t?y(e,P(t.salt)):Promise.resolve(null),n?y(e,P(n.salt)):Promise.resolve(null)]),[a,s]=await Promise.all([r&&t?B(t,r):Promise.resolve(null),i&&n?B(n,i):Promise.resolve(null)]);return a&&r?(w=r,D=`real`,T=a.entries,O=a.duressConfigured,V(T),await j(),x(),i&&o(i),a.migratedFromLegacy&&await q(),!0):s&&i?(w=i,D=`decoy`,T=s.entries,O=!1,V(T),await j(),x(),r&&o(r),!0):(r&&o(r),i&&o(i),!1)}function H(){w&&=(o(w),null),T=[],E=new Map,D=`real`,O=!1,ue()}function U(){return w!==null}function W(){if(!w)throw Error(`vault locked`);return T.filter(e=>!e.deletedAt)}var Re=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;function ze(){if(!w)throw Error(`vault locked`);let e=T.filter(e=>!e.deletedAt&&e.type===`login`),t=new Map,n=new Map;for(let r of e){let e=r.username?.trim();if(!e)continue;let i=Re.test(e)?t:n,a=i.get(e),o=u(r.url??``)??``,s=r.modifiedAt??r.createdAt??0;!a||s>a.lastUsed?i.set(e,{lastUsed:s,count:(a?.count??0)+1,domain:o}):i.set(e,{...a,count:a.count+1})}let r=e=>([t,n])=>({value:t,type:e,lastUsed:n.lastUsed,useCount:n.count,exampleDomain:n.domain||void 0});return[...[...t.entries()].map(r(`email`)).sort((e,t)=>t.useCount-e.useCount),...[...n.entries()].map(r(`username`)).sort((e,t)=>t.useCount-e.useCount)]}async function Be(e){if(!w)throw Error(`vault locked`);let t=Date.now(),n=[];for(let r of e)try{let e={...$e(r),id:crypto.randomUUID(),createdAt:t,modifiedAt:t};T.push(e),n.push(e)}catch{}return n.length>0&&await J(),n}async function Ve(e,t){if(!w)throw Error(`vault locked`);if(t===`replace`&&e.length===0)throw Error(`refuse to replace with empty entry set`);let n=0,r=0,i=0;if(t===`replace`){T=[];for(let t of e){let e=He(t);if(!e){i+=1;continue}T.push(e),n+=1}}else{let t=new Map;for(let e of T)t.set(e.id,e);for(let a of e){let e=He(a);if(!e){i+=1;continue}let o=t.get(e.id);if(!o)T.push(e),n+=1;else if(e.modifiedAt>o.modifiedAt){let t=T.findIndex(e=>e.id===o.id);t!==-1&&(T[t]=e,r+=1)}else i+=1}}return await J(),{added:n,updated:r,skipped:i}}function He(e){if(!e||typeof e!=`object`)return null;let t=typeof e.title==`string`?e.title.trim():``;if(!t)return null;let n=typeof e.id==`string`&&e.id?e.id:crypto.randomUUID(),r=Date.now(),i=typeof e.createdAt==`number`?e.createdAt:r,a=typeof e.modifiedAt==`number`?e.modifiedAt:i,o=nt({...e,id:n,title:t,type:e.type??`login`,createdAt:i,modifiedAt:a},e);return o.type===`login`&&!o.passkey&&typeof o.password!=`string`||o.passkey&&!o.passkey.credentialId?null:o}async function Ue(e){if(e!==`REPLACE_ALL`)throw Error(`clearVaultEntries requires explicit confirmation`);if(!w)throw Error(`vault locked`);for(let e of T)e.deletedAt||(e.deletedAt=Date.now(),e.modifiedAt=Date.now());await J()}async function We(e){if(!w)throw Error(`vault locked`);let t=$e(e),n=Date.now(),r={...t,id:crypto.randomUUID(),createdAt:n,modifiedAt:n,passwordChangedAt:t.password?n:void 0};return T.push(r),await J(),k.breachMonitoring!==!1&&r.type===`login`&&r.password&&M(r.password).then(async e=>{if(e>0){let t=T.findIndex(e=>e.id===r.id);t!==-1&&(T[t]={...T[t],breach:e,modifiedAt:Date.now()},await J())}}),r}async function G(e,t){if(!w)throw Error(`vault locked`);let n=T.findIndex(t=>t.id===e);if(n===-1||T[n].deletedAt)throw Error(`entry not found`);let r=T[n],i=et(t),a=`password`in t&&typeof i.password==`string`&&i.password!==r.password;if(T[n]={...r,...i,modifiedAt:Date.now(),...a?{passwordChangedAt:Date.now()}:{}},T[n].type===`login`&&!T[n].password&&!T[n].passkey)throw T[n]=r,Error(`password or passkey required`);if(T[n].type===`card`&&!T[n].cardNumber)throw T[n]=r,Error(`card number is required for card entries`);if(await J(),`password`in t&&k.breachMonitoring!==!1&&T[n].type===`login`&&T[n].password){let t=T[n].password;M(t).then(async t=>{let n=T.findIndex(t=>t.id===e);n!==-1&&(T[n]={...T[n],breach:t>0?t:void 0,modifiedAt:Date.now()},await J())})}}async function Ge(e){if(!w)throw Error(`vault locked`);let t=T.find(t=>t.id===e);if(!t||t.deletedAt)throw Error(`entry not found`);t.deletedAt=Date.now(),t.modifiedAt=Date.now(),await J()}function Ke(){return w?T.filter(e=>!!e.deletedAt):[]}async function qe(e){if(!w)throw Error(`vault locked`);let t=T.find(t=>t.id===e&&t.deletedAt);if(!t)throw Error(`deleted entry not found`);delete t.deletedAt,t.modifiedAt=Date.now(),await J(),V(T)}async function Je(e){if(!w)throw Error(`vault locked`);let t=T.findIndex(t=>t.id===e&&t.deletedAt);if(t===-1)throw Error(`deleted entry not found`);T.splice(t,1),await J()}async function Ye(e){if(!w||e===0)return 0;let t=Date.now()-e,n=T.length;T=T.filter(e=>!(e.deletedAt&&e.deletedAt<t));let r=n-T.length;return r>0&&await J(),r}function Xe(e){return E.get(e)??[]}function K(e){return T.find(t=>t.id===e&&!t.deletedAt)}async function q(){if(!w)throw Error(`vault locked`);let e=await F(S);if(!e)throw Error(`missing slot A`);let t=z(T,O),{nonce:n,ciphertext:r,tag:i}=await c(w,t),a={...e,nonce:n,ciphertext:r,tag:i};return await I(S,a),O||await I(C,R(r.length/2)),a}async function Ze(){if(!w)throw Error(`vault locked`);let e=await F(C);if(!e)throw Error(`missing slot B`);let t=z(T,!1),{nonce:n,ciphertext:r,tag:i}=await c(w,t);await I(C,{...e,nonce:n,ciphertext:r,tag:i})}async function J(){if(!w)throw Error(`vault locked`);if(D===`decoy`)await Ze();else{let e=await q(),t=T.filter(e=>!e.deletedAt).length;st(e,t)}V(T)}function Qe(e){if(!Array.isArray(e))return;let t=new Set,n=[];for(let r of e){let e=typeof r==`string`?r.trim():``;if(!e)continue;let i=e.toLowerCase();t.has(i)||(t.add(i),n.push(e))}return n.length>0?n:void 0}function $e(e){let t=e.title.trim(),n=e.type??`login`;if(n===`passkey`&&(n=`login`),!t)throw Error(`title is required`);if(n===`login`&&!e.password?.trim()&&!e.passkey)throw Error(`password or passkey required`);if(e.passkey){let t=e.passkey;if(!t.rpId||!t.credentialId||!t.publicKeyCose||!t.userHandle||!t.userName||t.algorithm!==-7&&t.algorithm!==-8)throw Error(`invalid passkey credential`)}if(n===`card`&&(!e.cardholderName?.trim()||!e.cardNumber?.trim()))throw Error(`cardholder name and card number are required`);return{type:n,title:t,username:n===`login`?e.username?.trim()??``:void 0,password:n===`login`?e.password:void 0,url:n===`login`?e.url?.trim()??``:void 0,additionalUrls:n===`login`?Qe(e.additionalUrls):void 0,totp:n===`login`&&e.totp?.trim()||void 0,notes:e.notes?.trim()||void 0,breach:n===`login`?e.breach:void 0,canary:n===`login`?e.canary:void 0,tags:e.tags,passkey:e.passkey,cardholderName:n===`card`?e.cardholderName?.trim():void 0,cardNumber:n===`card`?e.cardNumber?.trim():void 0,expMonth:n===`card`?e.expMonth?.trim():void 0,expYear:n===`card`?e.expYear?.trim():void 0,cvc:n===`card`?e.cvc?.trim():void 0,cardNickname:n===`card`&&e.cardNickname?.trim()||void 0,network:n===`card`?e.network:void 0,last4:n===`card`?e.last4?.trim():void 0}}function et(e){let t={};if(`type`in e&&(t.type=e.type),`title`in e){let n=e.title?.trim()??``;if(!n)throw Error(`title is required`);t.title=n}if(`url`in e&&(t.url=e.url?.trim()??``),`additionalUrls`in e){let n=Array.isArray(e.additionalUrls)?e.additionalUrls:[],r=new Set,i=[];for(let e of n){let t=typeof e==`string`?e.trim():``;if(!t)continue;let n=t.toLowerCase();r.has(n)||(r.add(n),i.push(t))}t.additionalUrls=i.length>0?i:void 0}return`username`in e&&(t.username=e.username?.trim()??``),`password`in e&&(t.password=(e.password??``)||void 0),`totp`in e&&(t.totp=e.totp?.trim()||void 0),`notes`in e&&(t.notes=e.notes?.trim()||void 0),`breach`in e&&(t.breach=e.breach),`canary`in e&&(t.canary=e.canary),`passkey`in e&&(t.passkey=e.passkey),`tags`in e&&(t.tags=e.tags),`cardholderName`in e&&(t.cardholderName=e.cardholderName?.trim()||void 0),`cardNumber`in e&&(t.cardNumber=(e.cardNumber??``)||void 0),`expMonth`in e&&(t.expMonth=e.expMonth?.trim()||void 0),`expYear`in e&&(t.expYear=e.expYear?.trim()||void 0),`cvc`in e&&(t.cvc=e.cvc?.trim()||void 0),`cardNickname`in e&&(t.cardNickname=e.cardNickname?.trim()||void 0),`network`in e&&(t.network=e.network),`last4`in e&&(t.last4=e.last4?.trim()||void 0),t}function tt(e){let t=`createdAt`in e?e.createdAt:e.created,n=`modifiedAt`in e?e.modifiedAt:e.updated;return nt({id:e.id,type:`type`in e?e.type:`login`,title:e.title,username:e.username,password:e.password,url:e.url,totp:e.totp,notes:e.notes,breach:e.breach,canary:`canary`in e?e.canary:void 0,passkey:`passkey`in e?e.passkey:void 0,createdAt:t,modifiedAt:n,deletedAt:e.deletedAt,tags:`tags`in e?e.tags:void 0,cardholderName:`cardholderName`in e?e.cardholderName:void 0,cardNumber:`cardNumber`in e?e.cardNumber:void 0,expMonth:`expMonth`in e?e.expMonth:void 0,expYear:`expYear`in e?e.expYear:void 0,cvc:`cvc`in e?e.cvc:void 0,cardNickname:`cardNickname`in e?e.cardNickname:void 0,network:`network`in e?e.network:void 0,last4:`last4`in e?e.last4:void 0},e)}function nt(e,t){if(e.passkey)return e;let n=t,r=e.type===`passkey`,i=typeof n.rpId==`string`&&typeof n.credentialId==`string`&&typeof n.publicKeyCose==`string`&&typeof n.userHandle==`string`&&typeof n.userName==`string`;if(!r&&!i||!i)return e;let a=n.algorithm===-8?-8:-7;return e.passkey={rpId:n.rpId,rpName:n.rpName??n.rpId,credentialId:n.credentialId,publicKeyCose:n.publicKeyCose,privateKeyJwk:n.privateKeyJwk,userHandle:n.userHandle,userName:n.userName,userDisplayName:n.userDisplayName??n.userName,algorithm:a,signCount:n.signCount??0,aaguid:n.aaguid??``,backupEligible:n.backupEligible===!0,backupState:n.backupState===!0,lastUsedAt:n.lastUsedAt,browser:n.browser,transports:n.transports,createdAt:e.createdAt},r&&(e.type=`login`),e.username||=n.userName,e.url||=`https://${n.rpId}`,e}function rt(e){return e.type===`note`?`note|${e.title.toLowerCase()}`:e.passkey?`passkey|${e.passkey.rpId.toLowerCase()}|${e.passkey.userName.toLowerCase()}`:`login|${e.title.toLowerCase()}|${(e.url??``).toLowerCase()}|${(e.username??``).toLowerCase()}`}function it(){let e=new Map,t=0;for(let n of T.filter(e=>!e.deletedAt)){let r=rt(n),i=e.get(r);i?(t++,(n.modifiedAt??n.createdAt??0)>(i.modifiedAt??i.createdAt??0)&&e.set(r,n)):e.set(r,n)}return t}async function at(){if(!w)throw Error(`vault locked`);if(D===`decoy`)throw Error(`deduplicate disabled in decoy mode`);let e=new Map;for(let t of T.filter(e=>!e.deletedAt)){let n=rt(t),r=e.get(n);r?(t.modifiedAt??t.createdAt??0)>(r.modifiedAt??r.createdAt??0)&&e.set(n,t):e.set(n,t)}let t=new Set(Array.from(e.values()).map(e=>e.id)),n=Date.now(),r=0;return T=T.map(e=>!e.deletedAt&&!t.has(e.id)?(r++,{...e,deletedAt:n}):e),r>0&&await J(),r}var Y=`peach_vault_snapshots`,ot=6;async function st(e,t){try{let n=(await chrome.storage.local.get(Y))[Y]??[],r=[{timestamp:Date.now(),entryCount:t,slot:e},...n].slice(0,ot);await chrome.storage.local.set({[Y]:r})}catch{}}async function ct(){return((await chrome.storage.local.get(Y))[Y]??[]).map((e,t)=>({index:t,timestamp:e.timestamp,entryCount:e.entryCount}))}async function lt(e,t){let n=((await chrome.storage.local.get(Y))[Y]??[])[e];if(!n)return!1;let r=await y(t,P(n.slot.salt)),i=await B(n.slot,r);return i?(await I(S,n.slot),await I(C,R(n.slot.ciphertext.length/2)),w&&o(w),w=r,T=i.entries,O=i.duressConfigured,D=`real`,V(T),await j(),x(),!0):(o(r),!1)}async function ut(e,t){if(!w||D!==`real`||!await Ie(e))return!1;let n=await F(S);if(!n)return!1;let r=oe(),i=await y(t,r),{nonce:a,ciphertext:s,tag:l}=await c(i,z(T,O)),u={...n,salt:N(r),nonce:a,ciphertext:s,tag:l};await I(S,u),o(w),w=i;let d=T.filter(e=>!e.deletedAt).length;return st(u,d),O||await I(C,R(s.length/2)),!0}var dt=30,ft=null;async function pt(e){try{let[t]=await chrome.tabs.query({active:!0,currentWindow:!0});if(t?.id){await chrome.scripting.executeScript({target:{tabId:t.id},func:e=>navigator.clipboard.writeText(e),args:[e]});return}}catch{}await navigator.clipboard.writeText(e)}async function mt(e,t,n=!1){ft&&=(clearTimeout(ft),null),n||await pt(e);let r=ve().clipboardClearSeconds,i=(typeof r==`number`&&r>0?r:dt)*1e3;ft=setTimeout(async()=>{try{await pt(``)}catch{}ft=null},i)}var ht=(()=>{let e=typeof chrome<`u`?chrome:void 0;if(e?.webAuthenticationProxy)return!1;try{return(e?.runtime?.getURL?.(``)??``).startsWith(`moz-extension://`)}catch{return!1}})(),gt=`passkey_pending_`,_t=6e4,X=!1,Z;__PEACH_E2E_PASSKEYS__;var vt=new Map;function yt(){if(typeof chrome.webAuthenticationProxy?.attach==`function`)return!0;if(d()===`firefox`){let e=p();if(Number.isFinite(e)&&e>=150)return!0}return!1}function bt(){let e=navigator.userAgent;if(/Firefox\/(\d+)/.test(e)){let t=e.match(/Firefox\/(\d+)/)?.[1];return t?`Firefox ${t}`:`Firefox`}let t=e.match(/Chrome\/(\d+)/)?.[1];return t?`Chrome ${t}`:`Chromium`}function xt(e){return`${gt}${e}`}async function St(e){chrome.action?.setBadgeText&&(await chrome.action.setBadgeText({text:e}),e&&await chrome.action.setBadgeBackgroundColor({color:`#D96830`}))}async function Ct(e){chrome.storage.session&&await chrome.storage.session.remove(xt(e)),await St(``)}async function Q(){try{await chrome.action.openPopup()}catch{await St(`PK`)}}async function wt(){if(!chrome.storage.session)return null;let e=await chrome.storage.session.get(null),t=Object.keys(e).find(e=>e.startsWith(gt));if(!t)return null;let n=e[t];return n&&typeof n==`object`?n:null}async function Tt(e,t){let n=vt.get(e);if(!n){await Ct(e),chrome.storage.session&&await chrome.storage.session.remove(Nt);return}clearTimeout(n.timeoutId),vt.delete(e),await Ct(e),n.resolve(t)}async function Et(e){return chrome.storage.session&&await chrome.storage.session.set({[xt(e.requestId)]:e}),await Q(),new Promise(t=>{let n=setTimeout(async()=>{vt.delete(e.requestId),await Ct(e.requestId),t(!1)},_t);vt.set(e.requestId,{resolve:t,timeoutId:n})})}async function Dt(){let e=await ye(),t=yt(),n=e.passkeyProviderEnabled===!0;return{supported:t,enabled:n,attached:t&&X,browserLabel:bt(),statusLabel:t?X?`Active`:Z?`Another provider is active`:n?`Inactive`:`Disabled`:`Interception unavailable`,conflict:Z}}async function Ot(){if(!yt()){X=!1,Z=`This browser does not expose chrome.webAuthenticationProxy.`;return}if(d()===`firefox`){X=!0,Z=void 0;return}if(!X)try{await chrome.webAuthenticationProxy.attach(),X=!0,Z=void 0}catch(e){X=!1,Z=e instanceof Error?e.message:`Another provider is active.`}}async function kt(){if(!yt()){X=!1;return}if(d()===`firefox`){X=!1,Z=void 0;return}try{await chrome.webAuthenticationProxy.detach()}catch{}X=!1,Z=void 0}async function At(e){return await A({passkeyProviderEnabled:e}),e?await Ot():await kt(),Dt()}function jt(e){let t=W().find(t=>t.passkey?.rpId===e&&!t.deletedAt);if(t)return t;let n=Xe(e).filter(e=>e.type===`login`&&!e.passkey);return n.length===0?null:n.reduce((e,t)=>(t.modifiedAt??0)>(e.modifiedAt??0)?t:e)}function Mt(){chrome.tabs.query({},e=>{for(let t of e)t.id!==void 0&&chrome.tabs.sendMessage(t.id,{type:`PASSKEY_PRO_GATE`}).catch(()=>{})})}var Nt=`passkey_pending_firefox`,Pt=`peach_passkey_offer_declined:`,Ft=720*60*60*1e3;async function It(e){if(!await v())return Mt(),{ok:!1,error:`passkey creation requires Peach Pro`};if(!U())return await Q(),{ok:!1,error:`vault locked`};if(!chrome.storage.session)return{ok:!1,error:`session storage unavailable`};let t=Date.now(),n=m(crypto.getRandomValues(new Uint8Array(32))),r=m(crypto.getRandomValues(new Uint8Array(32))),i={requestId:t,type:`create`,rpId:e.rpId,rpName:e.rpName,userName:e.userName,userDisplayName:e.userDisplayName,browser:`firefox`,challenge:n,userHandle:r};return await chrome.storage.session.set({[Nt]:i}),await Q(),{ok:!0}}async function Lt(e){if(!U())return{ok:!1,error:`vault locked`};let t={rpId:e.rpId,rpName:e.rpName,credentialId:e.credentialId,publicKeyCose:e.publicKeyCose,userHandle:e.userHandle,userName:e.userName,userDisplayName:e.userDisplayName??e.userName,algorithm:e.algorithm,signCount:0,aaguid:e.aaguid??m(new Uint8Array(16)),backupEligible:e.backupEligible??!1,backupState:e.backupState??!1,browser:`firefox`,transports:e.transports??[`internal`],createdAt:Date.now()},n=jt(e.rpId);return n?await G(n.id,{passkey:t}):await We({type:`login`,title:e.rpName||e.rpId,url:`https://${e.rpId}`,username:e.userName,passkey:t}),chrome.storage.session&&await chrome.storage.session.remove(Nt),{ok:!0}}function Rt(e){return`${Pt}${e}`}async function zt(e){e&&await chrome.storage.local.set({[Rt(e)]:Date.now()})}async function Bt(e){if(!e)return!1;let t=Rt(e),n=(await chrome.storage.local.get(t))[t];return typeof n==`number`?Date.now()-n>Ft?(await chrome.storage.local.remove(t),!1):!0:!1}function Vt(){return W().filter(e=>e.passkey!==void 0&&!e.deletedAt)}async function Ht(e){if(!ht)return{ok:!1,error:`not_applicable`};if(!U())return{ok:!0,hasCredentials:!1};let t=Vt().filter(t=>t.passkey.rpId===e.rpId);if(t.length===0)return{ok:!0,hasCredentials:!1};let n=e.allowCredentials??[];return n.length===0?{ok:!0,hasCredentials:!0}:{ok:!0,hasCredentials:t.some(e=>n.some(t=>t.id===e.passkey.credentialId))}}async function Ut(e){return Et({requestId:Date.now()+Math.floor(Math.random()*1e3),type:e.type,rpId:e.rpId,rpName:e.rpName??e.rpId,userName:e.userName,userDisplayName:e.userDisplayName})}async function Wt(e){if(!ht)return{ok:!1,error:`not_applicable`};if(!await v())return Mt(),{ok:!1,error:`pro_required`};if(!U())return await Q(),{ok:!1,error:`vault_locked`};let t=n(e.pubKeyCredParams??[]);if(!t)return{ok:!1,error:`internal_error`,message:`No supported algorithm offered`};if(!await Ut({type:`create`,rpId:e.rpId,rpName:e.rpName,userName:e.userName,userDisplayName:e.userDisplayName}))return{ok:!1,error:`user_cancelled`};let{bytes:r,base64url:a}=g(),{publicKeyCose:o,publicKeySpki:c,privateKeyJwk:l}=await i(t),u=await _({rpId:e.rpId,flags:69,signCount:0,credentialId:r,publicKeyCose:o}),d=s(u),f={rpId:e.rpId,rpName:e.rpName??e.rpId,credentialId:a,publicKeyCose:m(o),privateKeyJwk:l,userHandle:e.userId,userName:e.userName,userDisplayName:e.userDisplayName??e.userName,algorithm:t,signCount:0,aaguid:m(new Uint8Array(16)),backupEligible:!1,backupState:!1,browser:`firefox`,transports:[`internal`],createdAt:Date.now()},p=jt(e.rpId);return p?await G(p.id,{passkey:f}):await We({type:`login`,title:e.rpName||e.rpId,url:`https://${e.rpId}`,username:e.userName,passkey:f}),{ok:!0,credential:{type:`create`,id:a,clientDataJSON:e.clientDataJSON,attestationObject:m(d),authenticatorData:m(u),publicKey:m(c),algorithm:t}}}async function Gt(e){if(!ht)return{ok:!1,error:`not_applicable`};if(!await v())return Mt(),{ok:!1,error:`pro_required`};if(!U())return await Q(),{ok:!1,error:`vault_locked`};let t=e.allowCredentials??[],n=Vt().filter(n=>n.passkey.rpId===e.rpId?t.length===0?!0:t.some(e=>e.id===n.passkey.credentialId):!1);if(n.length===0)return{ok:!1,error:`no_credentials`};n.sort((e,t)=>(t.passkey.lastUsedAt??0)-(e.passkey.lastUsedAt??0));let r=n[0],i=r.passkey;if(!i.privateKeyJwk)return{ok:!1,error:`no_credentials`};if(!await Ut({type:`get`,rpId:i.rpId,rpName:i.rpName,userName:i.userName,userDisplayName:i.userDisplayName}))return{ok:!1,error:`user_cancelled`};let a=i.signCount+1,o=5|(i.backupEligible?8:0)|(i.backupState?16:0),s=await _({rpId:i.rpId,flags:o,signCount:a}),c=new Uint8Array(e.clientDataJSON),l=new Uint8Array(await crypto.subtle.digest(`SHA-256`,c)),u=await h(i.privateKeyJwk,i.algorithm,s,l);return await G(r.id,{passkey:{...i,signCount:a,lastUsedAt:Date.now()}}),{ok:!0,credential:{type:`get`,id:i.credentialId,clientDataJSON:e.clientDataJSON,authenticatorData:m(s),signature:m(u),userHandle:i.userHandle}}}var Kt=/bank|pay|finance|invest|mail|gmail|outlook|yahoo|icloud|instagram|twitter|facebook|linkedin/i,qt=2160*60*60*1e3,Jt=4320*60*60*1e3,Yt=60,Xt=25,Zt=15,Qt=20,$t=10;async function en(e){let t=await crypto.subtle.digest(`SHA-256`,new TextEncoder().encode(e));return Array.from(new Uint8Array(t)).map(e=>e.toString(16).padStart(2,`0`)).join(``)}function tn(e){return Kt.test(e)}function nn(e){return tn(e)?qt:Jt}function rn(e){if(e.length<10)return!0;let t=0;return/[a-z]/.test(e)&&(t+=1),/[A-Z]/.test(e)&&(t+=1),/[0-9]/.test(e)&&(t+=1),/[^A-Za-z0-9]/.test(e)&&(t+=1),t<3}async function an(e){let t=Date.now(),n=e.filter(e=>!e.deletedAt&&(e.type===void 0||e.type===`login`)),r=new Map;for(let e of n){if(!e.password)continue;let t=await en(e.password),n=r.get(t)??[];n.push(e.id),r.set(t,n)}let i=new Set,a=0;for(let e of r.values())if(e.length>1){a+=1;for(let t of e)i.add(t)}let o=[],s=0,c=0,l=0;for(let e of n){let n=u(e.url??``)??``,r=n?tn(n):!1,a=t-(e.passwordChangedAt??e.createdAt??t),d=e.password?a>nn(n):!1;d&&(s+=1);let f=(e.breach??0)>0,p=i.has(e.id),m=e.password?rn(e.password):!1,h=r&&!e.totp,g=0;f&&(g+=Yt),p&&(g+=Xt),d&&(g+=Zt),m&&(g+=Qt),h&&(g+=$t),g>100&&(g=100);let _=[];if(f&&_.push(`Breached (${e.breach} exposures)`),p&&_.push(`Reused`),d){let e=Math.floor(a/864e5);_.push(`${e} days old`)}m&&_.push(`Weak`),h&&_.push(`No 2FA on sensitive site`);let ee=r?2:1;c+=g*ee,l+=ee,g>0&&o.push({id:e.id,title:e.title,domain:n,url:e.url,score:g,ageDays:Math.floor(a/864e5),reasons:_,factors:{breached:f,breachCount:e.breach??0,reused:p,aged:d,weak:m,missingTotpOnSensitive:h}})}return o.sort((e,t)=>t.score-e.score),{vaultScore:l>0?Math.round(c/l):0,generatedAt:t,entryCount:n.length,reusedGroups:a,agedCount:s,remediation:o}}function on(e){let t=e.url??``,n=u(t);if(!n)return null;for(let[e,t]of Object.entries({"google.com":`https://myaccount.google.com/security`,"gmail.com":`https://myaccount.google.com/security`,"github.com":`https://github.com/settings/security`,"twitter.com":`https://twitter.com/settings/password`,"x.com":`https://x.com/settings/password`,"facebook.com":`https://www.facebook.com/settings?tab=security`,"instagram.com":`https://www.instagram.com/accounts/password/change/`,"linkedin.com":`https://www.linkedin.com/psettings/change-password`,"amazon.com":`https://www.amazon.com/ap/changepassword`,"apple.com":`https://appleid.apple.com`,"icloud.com":`https://appleid.apple.com`,"microsoft.com":`https://account.microsoft.com/security`,"outlook.com":`https://account.microsoft.com/security`,"live.com":`https://account.microsoft.com/security`,"dropbox.com":`https://www.dropbox.com/account/security`,"netflix.com":`https://www.netflix.com/password`,"spotify.com":`https://www.spotify.com/account/change-password/`,"reddit.com":`https://www.reddit.com/settings/account`}))if(n===e||n.endsWith(`.`+e))return t;try{return`${new URL(t).origin}/account/security`}catch{return null}}async function $(t,n=`user`){return await v()?{allowed:!0}:(n===`user`?e.isNativePlatform()||chrome.runtime.sendMessage({type:`PRO_GATE_TRIGGERED`,payload:{feature:t}}).catch(()=>{}):!e.isNativePlatform()&&chrome.storage.session&&chrome.storage.session.set({pendingProNotice:{feature:t,triggeredAt:Date.now()}}).catch(()=>{}),{allowed:!1})}var sn=[{prefix:`10.`},{prefix:`127.`},{prefix:`169.254.`},{prefix:`192.168.`}];async function cn(n,i={}){try{if(!e.isNativePlatform()&&i.id!==void 0&&i.id!==chrome.runtime.id)return{ok:!1,error:`invalid sender`};switch(un(n.type)&&U()&&x(),n.type){case`CREATE_VAULT`:{let{password:e}=n.payload;return await je(e),await de(),ln({type:`VAULT_UNLOCKED`}),{ok:!0}}case`UNLOCK`:{let{password:e}=n.payload,t=await Le(e);return t&&(await de(),ln({type:`VAULT_UNLOCKED`})),{ok:t}}case`LOCK`:return H(),{ok:!0};case`IS_UNLOCKED`:return{ok:!0,data:U()};case`GET_VAULT_STATUS`:return{ok:!0,unlocked:U()};case`HAS_VAULT`:return{ok:!0,data:await Me()};case`GET_ENTRIES`:return{ok:!0,data:W()};case`ADD_ENTRY`:return U()?{ok:!0,data:await We(n.payload)}:{ok:!1,error:`vault locked`};case`BATCH_ADD_ENTRIES`:{let{entries:e}=n.payload;return{ok:!0,data:await Be(e)}}case`RESTORE_ENTRIES`:{let{entries:e,mode:t,settings:r}=n.payload,i=await Ve(e,t);return r&&typeof r==`object`&&await A(r),{ok:!0,data:i}}case`CLEAR_VAULT_ENTRIES`:return await Ue(`REPLACE_ALL`),{ok:!0};case`LIST_VAULT_SNAPSHOTS`:return{ok:!0,data:await ct()};case`RESTORE_VAULT_SNAPSHOT`:{let{index:e,password:t}=n.payload,r=await lt(e,t);return r&&ln({type:`VAULT_UNLOCKED`}),{ok:r}}case`COUNT_DUPLICATES`:return{ok:!0,data:it()};case`DEDUPLICATE_ENTRIES`:return{ok:!0,data:await at()};case`UPDATE_ENTRY`:{let{id:e,patch:t}=n.payload;return await G(e,t),{ok:!0}}case`ADD_ADDITIONAL_URL`:{let{id:e,url:t}=n.payload,r=typeof t==`string`?t.trim():``;if(!r)return{ok:!1,error:`url required`};let i=K(e);return i?i.type===`login`?(await G(e,{additionalUrls:[...i.additionalUrls??[],r]}),{ok:!0}):{ok:!1,error:`login entries only`}:{ok:!1,error:`entry not found`}}case`DELETE_ENTRY`:{let{id:e}=n.payload;return await Ge(e),{ok:!0}}case`GET_DELETED_ENTRIES`:return{ok:!0,data:Ke()};case`RESTORE_ENTRY`:{let{id:e}=n.payload;return await qe(e),{ok:!0}}case`PURGE_ENTRY`:{let{id:e}=n.payload;return await Je(e),{ok:!0}}case`PURGE_EXPIRED_TRASH`:{let{retentionMs:e}=n.payload;return{ok:!0,data:await Ye(e)}}case`AUTOFILL_QUERY`:{if(!U())return{ok:!1,error:`VAULT_LOCKED`};let{domain:e,includeAll:t,kind:i}=n.payload;return i===`card`?{ok:!0,data:W().filter(e=>e.type===`card`).map(e=>({id:e.id,title:e.cardNickname||e.title,cardholderName:e.cardholderName,last4:e.last4,expMonth:e.expMonth,expYear:e.expYear,network:e.network}))}:{ok:!0,data:(t?W().filter(e=>e.type!==`note`&&e.type!==`card`):Xe(e)).filter(e=>!r(e)).map(e=>t?{id:e.id,title:e.title,hasPasskey:e.passkey!==void 0}:{id:e.id,title:e.title,username:e.username,url:e.url,hasTotp:!!e.totp,hasPasskey:e.passkey!==void 0})}}case`GET_ENTRY_FOR_FILL`:{if(!U())return{ok:!1,error:`vault locked`};let{id:e}=n.payload,t=K(e);if(!t)return{ok:!1,error:`entry not found`};if(r(t))return{ok:!1,error:`passkey not fillable`};let{passkey:i,...a}=t;return{ok:!0,data:a}}case`COPY`:{let{text:e,label:t,alreadyWritten:r}=n.payload;return await mt(e,t,!!r),{ok:!0}}case`CHECK_BREACH`:{let{password:e}=n.payload;return{ok:!0,data:await M(e)}}case`CHECK_ALL_BREACHES`:{let e=W(),t={};for(let n of e)n.type!==`note`&&n.password&&(t[n.id]=await M(n.password),await new Promise(e=>setTimeout(e,200)));for(let[e,n]of Object.entries(t)){let t=K(e);t&&(t.breach??0)!==n&&await G(e,{breach:n>0?n:void 0})}return{ok:!0,data:t}}case`GET_SETTINGS`:return{ok:!0,data:await ye()};case`UPDATE_SETTINGS`:{let e=n.payload;return await A(e),typeof e.autoLockMinutes==`number`&&(await de(),U()&&x()),{ok:!0}}case`GET_PENDING_PASSKEY`:return{ok:!0,data:await wt()};case`APPROVE_PASSKEY`:{let{requestId:e}=n.payload;return await Tt(e,!0),{ok:!0}}case`DENY_PASSKEY`:{let{requestId:e}=n.payload;return await Tt(e,!1),{ok:!0}}case`GET_PASSKEYS`:return{ok:!0,data:W().filter(e=>e.passkey!==void 0)};case`DELETE_PASSKEY`:{let{id:e}=n.payload;return await Ge(e),{ok:!0}}case`GET_PASSKEY_PROVIDER_STATE`:return{ok:!0,data:await Dt()};case`SET_PASSKEY_PROVIDER_ENABLED`:{let{enabled:e}=n.payload;return e&&!(await $(`passkeys`)).allowed?{ok:!1,error:`pro_required`}:{ok:!0,data:await At(e)}}case`FIRE_CANARY_PING`:{let{webhookUrl:e,entryTitle:t,trigger:r}=n.payload;if(!dn(e))return{ok:!1,error:`invalid webhook url`};let i=JSON.stringify({event:r===`test`?`peach_canary_test`:`peach_canary_accessed`,entry:t,trigger:r,timestamp:new Date().toISOString(),source:`peach-extension`});if(r===`test`)try{let t=await fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`},body:i});return{ok:t.ok,error:t.ok?void 0:`HTTP ${t.status}`}}catch(e){return{ok:!1,error:e instanceof Error?e.message:`network error`}}return fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`},body:i}).catch(()=>{}),{ok:!0}}case`ACTIVATE_LICENSE`:{let{key:e}=n.payload;return{ok:!0,data:await ee(e)}}case`GET_LICENSE`:return{ok:!0,data:await ne()};case`GET_LICENSE_KEY`:return{ok:!0,data:await re()};case`DEACTIVATE_LICENSE`:return await te(),{ok:!0};case`SHOULD_PLAY_CELEBRATION`:return{ok:!0,data:await ae()};case`MARK_CELEBRATION_PLAYED`:return await ie(),{ok:!0};case`OPEN_PRO_GATE`:{let{feature:e}=n.payload??{};chrome.storage.session&&await chrome.storage.session.set({pendingProGate:{feature:e??`passkeys`}});try{await chrome.action.openPopup()}catch{}return{ok:!0}}case`GET_IDENTITIES`:return U()?{ok:!0,data:ze()}:{ok:!1,error:`vault locked`};case`GET_ADVANCED_HEALTH_REPORT`:return(await $(`advanced_health`)).allowed?U()?{ok:!0,data:await an(W())}:{ok:!1,error:`vault locked`}:{ok:!1,error:`pro_required`};case`INITIATE_PASSWORD_CHANGE`:{if(!(await $(`smart_password_change`)).allowed)return{ok:!1,error:`pro_required`};if(!U())return{ok:!1,error:`vault locked`};let{id:e}=n.payload,t=K(e);if(!t)return{ok:!1,error:`entry not found`};let r=on(t);if(!r)return{ok:!1,error:`no reset url`};try{return await chrome.tabs.create({url:r}),{ok:!0,data:{url:r}}}catch(e){return{ok:!1,error:e instanceof Error?e.message:`failed to open tab`}}}case`IS_DURESS_ENABLED`:return{ok:!0,data:await Ne()};case`SETUP_DURESS`:{let{duressPassword:e}=n.payload;return await Pe(e),{ok:!0}}case`DISABLE_DURESS`:return await Fe(),{ok:!0};case`VERIFY_MAIN_PASSWORD`:{let{password:e}=n.payload;return{ok:!0,data:await Ie(e)}}case`CHANGE_PASSWORD`:{let{currentPassword:e,newPassword:t}=n.payload;return await ut(e,t)?{ok:!0}:{ok:!1,error:`incorrect current password`}}case`GET_SITE_PASSWORD_POLICY`:{let[e]=await chrome.tabs.query({active:!0,currentWindow:!0});if(!e?.id)return{ok:!0,data:null};try{return await chrome.tabs.sendMessage(e.id,{type:`GET_SITE_PASSWORD_POLICY`})??{ok:!0,data:null}}catch{return{ok:!0,data:null}}}case`GET_SYNC_STATE`:{let{getPairedDevices:e,getTrustedNetworks:t}=await a(async()=>{let{getPairedDevices:e,getTrustedNetworks:t}=await import(`./sync-storage-PafD8JEX.js`);return{getPairedDevices:e,getTrustedNetworks:t}},[]),{isOnTailscale:n}=await a(async()=>{let{isOnTailscale:e}=await import(`./sync-network-BZsxL6LD.js`);return{isOnTailscale:e}},[]),{isProUser:r}=await a(async()=>{let{isProUser:e}=await import(`./license-_bs9pA8t.js`);return{isProUser:e}},[]),i=await e(),o=await t(),s=await n(),c=await r(),l=`offline`;return l=s||o.some(e=>!e.isTailscale)?i.length===0?`no_peers`:`synced`:`not_trusted`,{ok:!0,data:{pairedDevices:i,trustedNetworks:o,status:l,isPro:c}}}case`TRIGGER_SYNC`:return(await $(`sync`)).allowed?{ok:!0}:{ok:!1,error:`pro_required`};case`START_PAIRING`:return(await $(`sync`)).allowed?{ok:!0}:{ok:!1,error:`pro_required`};case`CANCEL_PAIRING`:return{ok:!0};case`ACCEPT_PAIRING`:return(await $(`sync`)).allowed?{ok:!0}:{ok:!1,error:`pro_required`};case`REMOVE_PAIRED_DEVICE`:{let{deviceId:e}=n.payload,{removePairedDevice:t}=await a(async()=>{let{removePairedDevice:e}=await import(`./sync-storage-PafD8JEX.js`);return{removePairedDevice:e}},[]);return await t(e),{ok:!0}}case`REMOVE_TRUSTED_NETWORK`:{let{ssid:e,bssid:t,isTailscale:r}=n.payload,{removeTrustedNetwork:i,getTrustedNetworks:o}=await a(async()=>{let{removeTrustedNetwork:e,getTrustedNetworks:t}=await import(`./sync-storage-PafD8JEX.js`);return{removeTrustedNetwork:e,getTrustedNetworks:t}},[]),s=(await o()).find(n=>(r?n.isTailscale:n.ssid===e)&&(!t||n.bssid===t));return s&&await i(s.addedAt),{ok:!0}}case`MARK_NETWORK_TRUSTED`:{let{addTrustedNetwork:e}=await a(async()=>{let{addTrustedNetwork:e}=await import(`./sync-storage-PafD8JEX.js`);return{addTrustedNetwork:e}},[]),{getCurrentNetwork:t}=await a(async()=>{let{getCurrentNetwork:e}=await import(`./sync-network-BZsxL6LD.js`);return{getCurrentNetwork:e}},[]),n=await t();return await e({ssid:n.ssid,bssid:n.bssid,isTailscale:n.isTailscale,addedAt:Date.now()}),{ok:!0}}case`RECORD_MANUAL_SUMMON`:{let{domain:e}=n.payload,t=ve(),r=t.manualSummonDomains?.[e],i=Date.now();return await A({manualSummonDomains:{...t.manualSummonDomains,[e]:{firstSummonedAt:r?.firstSummonedAt??i,summonCount:(r?.summonCount??0)+1,lastSummonedAt:i}}}),{ok:!0}}case`DECLINE_CARD_SAVE`:{let{last4:e,expMonth:t,expYear:r}=n.payload;return await Se(e,t,r),{ok:!0}}case`IS_CARD_DECLINED`:{let{last4:e,expMonth:t,expYear:r}=n.payload;return{ok:!0,data:await Ce(e,t,r)}}case`INITIATE_FIREFOX_PASSKEY_CREATE`:{let{rpId:e,rpName:t,userName:r,userDisplayName:i}=n.payload??{};return!e||!r?{ok:!1,error:`rpId and userName required`}:await It({rpId:e,rpName:t??e,userName:r,userDisplayName:i})}case`COMPLETE_FIREFOX_PASSKEY_CREATE`:{let e=n.payload;return e?await Lt(e):{ok:!1,error:`missing payload`}}case`PASSKEY_OFFER_DECLINE`:{let{domain:e}=n.payload??{};return e?(await zt(e),{ok:!0}):{ok:!1,error:`domain required`}}case`GET_PASSKEY_OFFER_DECLINED`:{let{domain:e}=n.payload??{};return e?{ok:!0,data:await Bt(e)}:{ok:!1,error:`domain required`}}case`PASSKEY_HAS_CREDENTIALS`:{let e=n.payload;return e?.rpId?await Ht({rpId:e.rpId,allowCredentials:e.allowCredentials??[]}):{ok:!1,error:`rpId required`}}case`PASSKEY_CREATE`:{let e=n.payload;return!e?.rpId||!e?.userName?{ok:!1,error:`rpId and userName required`}:await Wt(e)}case`PASSKEY_GET`:{let e=n.payload;return e?.rpId?await Gt(e):{ok:!1,error:`rpId required`}}case`GET_PASSKEY_FOR_DOMAIN`:{let{domain:e}=n.payload??{};if(!e)return{ok:!1,error:`domain required`};if(!U())return{ok:!0,data:null};let t=W().find(t=>t.passkey?.rpId===e);return!t||!t.passkey?{ok:!0,data:null}:{ok:!0,data:{rpId:t.passkey.rpId,userName:t.passkey.userName,browser:t.passkey.browser}}}case`DESTROY_VAULT`:return H(),await t(),!e.isNativePlatform()&&chrome.storage.session&&await chrome.storage.session.clear(),{ok:!0};case`SUBMIT_FEEDBACK`:{let{category:e,message:t,version:r,browser:i}=n.payload;return t.trim()?{ok:!0}:{ok:!1,error:`message is empty`}}default:return{ok:!1,error:`unknown message type`}}}catch(e){return{ok:!1,error:e instanceof Error?e.message:`operation failed`}}}function ln(t){e.isNativePlatform()||!chrome.tabs?.query||chrome.tabs.query({},e=>{for(let n of e)n.id!==void 0&&chrome.tabs.sendMessage(n.id,t).catch(()=>{})})}function un(e){return e!==`HAS_VAULT`&&e!==`IS_UNLOCKED`&&e!==`GET_VAULT_STATUS`&&e!==`LOCK`&&e!==`UPDATE_SETTINGS`&&e!==`GET_PENDING_PASSKEY`&&e!==`GET_PASSKEY_PROVIDER_STATE`&&e!==`DECLINE_CARD_SAVE`&&e!==`IS_CARD_DECLINED`&&e!==`SUBMIT_FEEDBACK`}function dn(e){try{let t=new URL(e);if(t.protocol!==`https:`)return!1;let n=t.hostname.toLowerCase();return!(n===`localhost`||n.endsWith(`.localhost`)||fn(n)||pn(n))}catch{return!1}}function fn(e){if(sn.some(t=>e.startsWith(t.prefix)))return!0;let t=e.split(`.`).map(e=>Number(e));return t.length!==4||t.some(e=>!Number.isInteger(e)||e<0||e>255)?!1:t[0]===172&&t[1]>=16&&t[1]<=31}function pn(e){let t=e.replace(/^\[|\]$/g,``).toLowerCase();return t===`::1`||t.startsWith(`fc`)||t.startsWith(`fd`)||t.startsWith(`fe80:`)}export{cn as handleMessage};