@mherod/get-cookie 4.4.3 → 4.5.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/README.md +21 -3
- package/dist/bun.cjs +77 -0
- package/dist/bun.cjs.map +1 -0
- package/dist/bun.d.cts +3 -0
- package/dist/bun.d.ts +3 -0
- package/dist/bun.js +77 -0
- package/dist/bun.js.map +1 -0
- package/dist/cli.cjs +14 -11
- package/dist/cli.cjs.map +1 -1
- package/dist/index.cjs +11 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +98 -38
- package/dist/index.d.ts +98 -38
- package/dist/index.js +11 -11
- package/dist/index.js.map +1 -1
- package/dist/node.cjs +77 -0
- package/dist/node.cjs.map +1 -0
- package/dist/node.d.cts +3 -0
- package/dist/node.d.ts +3 -0
- package/dist/node.js +77 -0
- package/dist/node.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +32 -14
- package/.claude/settings.local.json +0 -3
- package/.dependency-cruiser.js +0 -277
- package/.env.example +0 -5
- package/.husky/commit-msg +0 -19
- package/.husky/pre-commit +0 -29
- package/.husky/pre-push +0 -21
- package/.idea/codeStyles/Project.xml +0 -59
- package/.idea/codeStyles/codeStyleConfig.xml +0 -5
- package/.idea/get-cookie.iml +0 -13
- package/.idea/git_toolbox_prj.xml +0 -15
- package/.idea/jsLibraryMappings.xml +0 -6
- package/.idea/modules.xml +0 -8
- package/.idea/prettier.xml +0 -9
- package/.idea/runConfigurations/build.xml +0 -12
- package/.idea/vcs.xml +0 -6
- package/.nvmrc +0 -1
- package/biome.json +0 -117
- package/commitlint.config.js +0 -12
- package/eslint.config.js +0 -255
- package/examples/README.md +0 -71
- package/examples/advanced-usage.ts +0 -56
- package/examples/auth-tokens.ts +0 -143
- package/examples/basic-usage.ts +0 -43
- package/examples/cli-examples.sh +0 -51
- package/examples/comprehensive-demo.ts +0 -202
- package/examples/curl-integration.sh +0 -311
- package/examples/features-demo.sh +0 -260
- package/examples/github-auth.sh +0 -295
- package/examples/quick-start.sh +0 -115
- package/jest.setup.js +0 -34
- package/tsconfig.build.json +0 -9
- package/tsconfig.cli.json +0 -16
- package/tsconfig.tsup.json +0 -12
- package/tsup.cli.ts +0 -59
- package/tsup.lib.ts +0 -46
- package/typedoc.json +0 -17
package/dist/cli.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
'use strict';var os$1=require('os'),dotenv=require('dotenv'),zod=require('zod'),consola=require('consola'),path=require('path'),child_process=require('child_process'),util=require('util'),fs$1=require('fs'),ac=require('better-sqlite3'),Wi=require('fast-glob'),Gi=require('minimist'),Zr=require('jsonwebtoken'),bi=require('readline'),crypto=require('crypto'),events=require('events'),buffer=require('buffer'),xc=require('destr');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var ac__default=/*#__PURE__*/_interopDefault(ac);var Wi__default=/*#__PURE__*/_interopDefault(Wi);var Gi__default=/*#__PURE__*/_interopDefault(Gi);var Zr__default=/*#__PURE__*/_interopDefault(Zr);var bi__default=/*#__PURE__*/_interopDefault(bi);var xc__default=/*#__PURE__*/_interopDefault(xc);var Wr=Object.defineProperty;var Ri=Object.getOwnPropertyDescriptor;var Di=Object.getOwnPropertyNames;var _i=Object.prototype.hasOwnProperty;var zr=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});var _=(r,e)=>()=>(r&&(e=r(r=0)),e);var Re=(r,e)=>{for(var t in e)Wr(r,t,{get:e[t],enumerable:true});},Ii=(r,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Di(e))!_i.call(r,n)&&n!==t&&Wr(r,n,{get:()=>e[n],enumerable:!(o=Ri(e,n))||o.enumerable});return r};var Lt=r=>Ii(Wr({},"__esModule",{value:true}),r);function d(r){return r instanceof Error?r.message:typeof r=="string"?r:r!=null&&typeof r=="object"&&"message"in r?String(r.message):String(r)}function ce(r){let e=d(r);if(r instanceof Error){let t={message:e};return r.stack!==void 0&&(t.stack=r.stack),r.name!==void 0&&(t.name=r.name),"code"in r&&r.code!==void 0&&(t.code=String(r.code)),t}return {message:e}}function T(r,e){return d(r).toLowerCase().includes(e.toLowerCase())}function Xe(r,e){return e.some(t=>r.includes(t))}function Mt(r){let e=d(r).toLowerCase();return Xe(e,Ze.locked)?"locked":Xe(e,Ze.busy)?"busy":Xe(e,Ze.permission)?"permission":Xe(e,Ze.not_found)?"not_found":null}function pe(r,e){let t=ce(r);return {...e,error:t.message,errorName:t.name,errorCode:t.code,...process.env.NODE_ENV!=="production"&&t.stack!==void 0&&t.stack!==""?{errorStack:t.stack}:{}}}function er(r){return r instanceof Error}var Ze,S=_(()=>{Ze={locked:["database is locked","database locked","sqlite_busy"],busy:["busy"],permission:["eperm","permission denied","operation not permitted","eacces"],not_found:["enoent","no such file","not found"]};});var Mi,Gr,Nt=_(()=>{dotenv.config();Mi=zod.z.object({LOG_LEVEL:zod.z.enum(["debug","info","warn","error"]).default("info"),HOME:zod.z.string().optional().transform(r=>r??process.env.USERPROFILE??"").pipe(zod.z.string().min(1))}),Gr=Mi.parse({LOG_LEVEL:process.env.LOG_LEVEL,HOME:os$1.homedir()});});var $i,qi,f,M=_(()=>{Nt();$i=consola.createConsola({formatOptions:{showLogLevel:false,colors:true,date:false,compact:true,columns:typeof process.stdout.columns=="number"?process.stdout.columns:80},level:Gr.LOG_LEVEL==="debug"?5:2}),Gr.LOG_LEVEL==="debug",qi=$i,f=qi;});function De(r,e,t){let o=d(e);f.error(r,{...t,error:o});}function me(r,e,t){f.warn(`[${r}] ${e}`,t);}function y(r){return f.withTag(r)}var v=_(()=>{S();M();M();});function C(){return $t??($t=os$1.platform()),$t}function W(){return C()==="darwin"}function N(){return C()==="win32"}function Jr(){let r=C();return r==="darwin"||r==="win32"||r==="linux"}function de(){if(!Jr())throw new Error(`Unsupported platform: ${C()}. Supported platforms are: darwin, win32, linux`)}var $t,O=_(()=>{});var _e,Kr=_(()=>{O();_e=(()=>{let r=os$1.homedir();if(!r)throw new Error("Unable to determine user home directory");switch(de(),C()){case "darwin":return path.join(r,"Library","Application Support","Google","Chrome");case "win32":return path.join(r,"AppData","Local","Google","Chrome","User Data");case "linux":return path.join(r,".config","google-chrome");default:throw new Error(`Platform ${C()} is not supported`)}})();});async function J(r,e){try{let t=await Sf(r,{...e,encoding:"utf8"});return {stdout:t.stdout.toString(),stderr:t.stderr.toString()}}catch(t){throw De("Command execution failed",t,{command:r}),new ct(d(t),r,er(t)?t:void 0)}}var Sf,ct,_r=_(()=>{S();v();Sf=util.promisify(child_process.exec),ct=class extends Error{constructor(t,o,n){super(t);this.command=o;this.originalError=n;this.name="CommandExecutionError";}};});var si={};Re(si,{getChromePassword:()=>ec});async function Xf(r){let e=Buffer.from("DPAPI");if(!r.subarray(0,5).equals(e))throw new Error("Invalid DPAPI key prefix");let t=r.subarray(5);if(N())try{let n=await import('@primno/dpapi');if(typeof n.unprotectData=="function")return n.unprotectData(t)}catch(o){process.env.VERBOSE!==void 0&&process.env.VERBOSE!==""&&console.warn("DPAPI module not available:",o);}throw new Error("Windows DPAPI decryption requires native bindings. Install @primno/dpapi package for Windows support.")}async function ec(){try{let r=path.join(_e,"Local State"),e=fs$1.readFileSync(r,"utf8"),t=JSON.parse(e);if(!t.os_crypt.encrypted_key)throw new Error("No encrypted key found in Chrome Local State");let o=Buffer.from(t.os_crypt.encrypted_key,"base64");return (await Xf(o)).toString("latin1")}catch(r){throw new Error(`Failed to retrieve Chrome password on Windows: ${d(r)}`)}}var ai=_(()=>{S();O();Kr();});var li={};Re(li,{getChromePassword:()=>rc});async function rc(){try{let t=(await J("secret-tool lookup application chrome-libsecret-password-v2 || secret-tool lookup application chrome")).stdout.trim();if(t)return t}catch{}try{let t=(await J(`python3 -c "import keyring; print(keyring.get_password('Chrome Safe Storage', 'Chrome'))"`)).stdout.trim();if(t&&t!=="None")return t}catch{}try{let t=(await J('kwallet-query kdewallet -f "Chrome Safe Storage" -r Chrome')).stdout.trim();if(t)return t}catch{}return "peanuts"}var ui=_(()=>{_r();});var ci={};Re(ci,{CookieQueryBuilder:()=>oe,createQueryBuilder:()=>sc,isSqlBrowser:()=>Lr});function sc(r){return new oe(r)}function Lr(r){return r in fi}var fi,oe,Ct=_(()=>{fi={chrome:{tableName:"cookies",nameColumn:"name",valueColumn:"value",domainColumn:"host_key",expiryColumn:"expires_utc",encryptedValueColumn:"encrypted_value",pathColumn:"path",secureColumn:"is_secure",httpOnlyColumn:"is_httponly"},chromium:{tableName:"cookies",nameColumn:"name",valueColumn:"value",domainColumn:"host_key",expiryColumn:"expires_utc",encryptedValueColumn:"encrypted_value",pathColumn:"path",secureColumn:"is_secure",httpOnlyColumn:"is_httponly"},edge:{tableName:"cookies",nameColumn:"name",valueColumn:"value",domainColumn:"host_key",expiryColumn:"expires_utc",encryptedValueColumn:"encrypted_value",pathColumn:"path",secureColumn:"is_secure",httpOnlyColumn:"is_httponly"},opera:{tableName:"cookies",nameColumn:"name",valueColumn:"value",domainColumn:"host_key",expiryColumn:"expires_utc",encryptedValueColumn:"encrypted_value",pathColumn:"path",secureColumn:"is_secure",httpOnlyColumn:"is_httponly"},brave:{tableName:"cookies",nameColumn:"name",valueColumn:"value",domainColumn:"host_key",expiryColumn:"expires_utc",encryptedValueColumn:"encrypted_value",pathColumn:"path",secureColumn:"is_secure",httpOnlyColumn:"is_httponly"},arc:{tableName:"cookies",nameColumn:"name",valueColumn:"value",domainColumn:"host_key",expiryColumn:"expires_utc",encryptedValueColumn:"encrypted_value",pathColumn:"path",secureColumn:"is_secure",httpOnlyColumn:"is_httponly"},firefox:{tableName:"moz_cookies",nameColumn:"name",valueColumn:"value",domainColumn:"host",expiryColumn:"expiry",pathColumn:"path",secureColumn:"isSecure",httpOnlyColumn:"isHttpOnly"}},oe=class{constructor(e){if(this.browser=e,!Lr(e))throw new Error(`Unsupported browser type: ${e}`);this.schema=fi[e];}buildSelectQuery(e){let{name:t,domain:o,exactDomain:n,limit:i,includeExpired:s}=e,a=this.schema,u=this.buildSelectColumns(),{whereClause:l,params:c}=this.buildWhereClause(t,o,n,s),m=`SELECT ${u} FROM ${a.tableName}`;return l&&(m+=` WHERE ${l}`),m+=` ORDER BY ${a.expiryColumn} DESC`,i!==void 0&&i>0&&(m+=` LIMIT ${i}`),{sql:m,params:c,description:`Query ${this.browser} cookies: name=${t}, domain=${o}`}}buildBatchSelectQuery(e){if(e.length===0)throw new Error("At least one spec is required for batch query");let t=this.schema,o=this.buildSelectColumns(),n=[],i=[];for(let l of e){let{whereClause:c,params:m}=this.buildWhereClause(l.name,l.domain,l.exactDomain,l.includeExpired);c&&(n.push(`(${c})`),i.push(...m));}let s=n.join(" OR "),a=`SELECT ${o} FROM ${t.tableName}`;s&&(a+=` WHERE ${s}`),a+=` ORDER BY ${t.expiryColumn} DESC`;let u=e.reduce((l,c)=>c.limit!==void 0&&c.limit>0?l!==void 0?Math.min(l,c.limit):c.limit:l,void 0);return u!==void 0&&u>0&&(a+=` LIMIT ${u*e.length}`),{sql:a,params:i,description:`Batch query ${this.browser} cookies for ${e.length} specs`}}buildMetaQuery(e){if(this.browser==="firefox")throw new Error("Firefox does not have a meta table");return {sql:"SELECT value FROM meta WHERE key = ?",params:[e],description:`Get metadata: ${e}`}}buildTableExistsQuery(){return {sql:"SELECT name FROM sqlite_master WHERE type='table' AND name=?",params:[this.schema.tableName],description:`Check if ${this.schema.tableName} table exists`}}buildSelectColumns(){let e=this.schema,t=[e.nameColumn,e.domainColumn,e.expiryColumn];return e.encryptedValueColumn!==void 0&&this.browser!=="firefox"?t.push(e.encryptedValueColumn):t.push(e.valueColumn),e.pathColumn!==void 0&&t.push(e.pathColumn),e.secureColumn!==void 0&&t.push(e.secureColumn),e.httpOnlyColumn!==void 0&&t.push(e.httpOnlyColumn),t.map(o=>{switch(o){case e.domainColumn:return `${o} AS domain`;case e.expiryColumn:return `${o} AS expiry`;case e.encryptedValueColumn:return `${o} AS encrypted_value`;case e.valueColumn:return `${o} AS value`;case e.nameColumn:return `${o} AS name`;case e.pathColumn:return `${o} AS path`;case e.secureColumn:return `${o} AS is_secure`;case e.httpOnlyColumn:return `${o} AS is_httponly`;default:return o}}).join(", ")}addDomainCondition(e,t,o,n,i){if(i===true){e.push(`${o} = ?`),t.push(n);return}n.startsWith(".")?(e.push(`${o} LIKE ?`),t.push(`%${n}`)):(e.push(`(${o} = ? OR ${o} = ? OR ${o} LIKE ?)`),t.push(n,`.${n}`,`%.${n}`));}buildWhereClause(e,t,o,n){let i=this.schema,s=[],a=[];if(e==="%"||(e.includes("%")||e.includes("_")?(s.push(`${i.nameColumn} LIKE ?`),a.push(e)):(s.push(`${i.nameColumn} = ?`),a.push(e))),t!==""&&this.addDomainCondition(s,a,i.domainColumn,t,o),n!==true)if(this.browser==="firefox"){let u=Math.floor(Date.now()/1e3);s.push(`${i.expiryColumn} > ?`),a.push(u);}else s.push(`${i.expiryColumn} > 0`);return {whereClause:s.join(" AND "),params:a}}static validateQueryParams(e){let{name:t,domain:o,limit:n}=e;if(typeof t!="string"||t.length===0)throw new Error("Cookie name must be a non-empty string");if(typeof o!="string"||o.length===0)throw new Error("Domain must be a non-empty string");let i=["SELECT","INSERT","UPDATE","DELETE","DROP","CREATE","ALTER","--",";"],s=(a,u)=>{let l=a.toUpperCase();for(let c of i)if(l.includes(c))throw new Error(`Invalid ${u}: contains SQL keyword '${c}'`)};if(s(t,"name"),s(o,"domain"),n!==void 0&&(!Number.isInteger(n)||n<=0||n>1e4))throw new Error("Limit must be a positive integer between 1 and 10000")}getBrowserType(){return this.browser}getSchema(){return Object.freeze({...this.schema})}};});var pi={};Re(pi,{BunSqliteAdapter:()=>kt});var St,kt,mi=_(()=>{St=class{constructor(e){this.statement=e;}all(...e){return this.statement.all(...e)}get(...e){return this.statement.get(...e)}run(...e){this.statement.run(...e);}},kt=class{constructor(e,t={}){if(typeof globalThis.Bun>"u")throw new Error("BunSqliteAdapter can only be used in a Bun runtime environment");let{Database:o}=zr("bun:sqlite"),n={readonly:t.readonly??false,...t.fileMustExist?{create:false}:{}};this.db=new o(e,n),this.readonly=t.readonly??false;}prepare(e){let t=this.db.prepare(e);return new St(t)}pragma(e){let t=`PRAGMA ${e}`;this.db.exec(t);}close(){this.db.close();}};});var di={};Re(di,{BetterSqlite3Adapter:()=>Et});var vt,Et,gi=_(()=>{vt=class{constructor(e){this.statement=e;}all(...e){return this.statement.all(...e)}get(...e){return this.statement.get(...e)}run(...e){this.statement.run(...e);}},Et=class{constructor(e,t={}){this.db=new ac__default.default(e,{readonly:t.readonly??false,fileMustExist:t.fileMustExist??false}),this.readonly=t.readonly??false;}prepare(e){let t=this.db.prepare(e);return new vt(t)}pragma(e){return this.db.pragma(e)}close(){this.db.close();}};});v();Kr();var qt=y("listChromeProfiles");function Qt(){let r=Wi__default.default.sync("./**/Cookies",{cwd:_e,absolute:true});return qt.debug("Found cookie files:",r),r}function Ht(){try{let r=path.join(_e,"Local State"),e=JSON.parse(fs$1.readFileSync(r,"utf8"));return Object.values(e.profile.info_cache)}catch(r){return qt.debug("Failed to access Chrome profiles",{error:r}),[]}}function zi(r){let e=r.split("."),t=[];t.push({name:"%",domain:r});for(let o=1;o<e.length-1;o++){let n=e.slice(o).join(".");t.push({name:"%",domain:n});}return t}function Yr(r){if(!r.includes("://"))try{return Yr(`https://${r}`)}catch{return [{name:"%",domain:r}]}try{let e=new URL(r);return zi(e.hostname)}catch{return [{name:"%",domain:r}]}}var tr={string:["browser","profile","url","domain","name","output","store","jwt-secret"],boolean:["help","version","verbose","dump","dump-grouped","render","render-grouped","force","include-expired","include-all","list-profiles","detect-jwt","jwt-only"],alias:{b:"browser",p:"profile",u:"url",d:"dump",D:"domain",n:"name",h:"help",v:"verbose",f:"force",G:"dump-grouped",r:"render",R:"render-grouped",j:"detect-jwt"}};function Ji(){let r=[];for(let e of tr.string)r.push(`--${e}`);for(let e of tr.boolean)r.push(`--${e}`);for(let[e,t]of Object.entries(tr.alias))r.push(`-${e}`),r.includes(`--${t}`)||r.push(`--${t}`);return r}var Vi=Ji();function Ie(r){let e=Gi__default.default(r,{...tr,unknown:n=>{if(!n.startsWith("-"))return true;if(!Vi.some(s=>n.startsWith(s)))throw new Error(`Unknown option: ${n}`);return true}}),{_:t,...o}=e;return {values:o,positionals:t}}S();M();S();v();S();M();var jt=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/;function Ut(r){return r==null||typeof r!="string"?false:jt.test(r)}function Ki(r){return jt.test(r)?{isValid:true}:{isValid:false,error:"Invalid JWT format - must be three dot-separated base64url-encoded strings"}}function Yi(r,e){try{return Zr__default.default.verify(r,e),null}catch(t){let o=t instanceof Error?t.message:"Unknown verification error";return Ie(process.argv).values.verbose===true&&f.debug(`JWT verification failed: ${o}`),{isValid:false,error:o}}}function Zi(r){let e=r.exp;if(e===void 0)return {isValid:true,decodedPayload:r};let t=Math.floor(Date.now()/1e3),o={isValid:t<=e,decodedPayload:r};return t>e&&(o.error="Token has expired"),o}function Xi(r,e){try{Ie(process.argv).values.verbose===!0&&f.debug(r,e);}catch{}}function es(r){return r==null?{isValid:false,error:"Token is null or undefined"}:typeof r!="string"?{isValid:false,error:"Token is not a string"}:r.trim().length===0?{isValid:false,error:"Token is empty or whitespace"}:null}function rs(r){let e=Zr__default.default.decode(r,{complete:true});return Xi("Decoded JWT token:",e??"Failed to decode"),e?{...Zi(e.payload),header:e.header}:{isValid:false,error:"Failed to decode token"}}function Wt(r,e){try{if(r===void 0){let n="Token is undefined";return f.debug(`JWT validation error: ${n}`),{isValid:!1,error:n}}let t=es(r);if(t!==null)return t;let o=Ki(r);if(!o.isValid)return o;if(e!==void 0){let n=Yi(r,e);if(n!==null)return n}return rs(r)}catch(t){let o=d(t)||"Unknown error during JWT validation";return f.debug(`JWT validation error: ${o}`),{isValid:false,error:o}}}function zt(r){try{let e=Zr__default.default.decode(r,{complete:!0});return e?{payload:e.payload,header:e.header}:null}catch{return null}}v();var Xr=y("JwtCookieDetector");function et(r,e={}){let{validateSignature:t=false,secretKey:o,checkExpiration:n=true,decodeClaims:i=true,verbose:s=false}=e;return r.map(a=>{if(typeof a.value!="string"||!Ut(a.value))return a;s&&Xr.info(`Detected JWT in cookie: ${a.name}`);let u={...a.meta,isJwt:true};if(t&&o){let l=Wt(a.value,o);u.jwtValidation=l,l.isValid&&l.decodedPayload?Gt(u,l.decodedPayload,n,s):s&&Xr.warn(`JWT validation failed for cookie ${a.name}: ${l.error}`);}else if(i){let l=zt(a.value);l&&(u.jwtValidation={isValid:true,decodedPayload:l.payload,header:l.header},Gt(u,l.payload,n,s));}return {...a,meta:u}})}function Gt(r,e,t,o){if(r.jwtPayload=e,e.sub&&(r.jwtSubject=e.sub),e.iss&&typeof e.iss=="string"&&(r.jwtIssuer=e.iss),e.exp&&(r.jwtExpiry=new Date(e.exp*1e3),t)){let n=new Date;r.jwtExpiry<n&&(r.jwtValidation={...r.jwtValidation,isValid:false,error:"JWT has expired"},o&&Xr.warn(`JWT in cookie has expired (exp: ${r.jwtExpiry.toISOString()})`));}}function Jt(r,e={}){return et(r,e).filter(o=>o.meta?.isJwt&&(!o.meta.jwtValidation||o.meta.jwtValidation.isValid))}M();var Fe=class{canHandle(e){return true}handle(e){if(e.length===0){f.debug("No cookies found to output");return}let t=new Set;for(let o of e){let n=o.value;typeof n=="string"&&n.length>0&&t.add(n);}for(let o of t)f.log(o);}};M();var or=class{canHandle(e){return e.dump===true||e.d===true}handle(e){e.length!==0&&f.log(e);}};var ts=typeof global=="object"&&global&&global.Object===Object&&global,nr=ts;var os=typeof self=="object"&&self&&self.Object===Object&&self,ns=nr||os||Function("return this")(),E=ns;var is=E.Symbol,I=is;var Vt=Object.prototype,ss=Vt.hasOwnProperty,as=Vt.toString,Le=I?I.toStringTag:void 0;function ls(r){var e=ss.call(r,Le),t=r[Le];try{r[Le]=void 0;var o=!0;}catch{}var n=as.call(r);return o&&(e?r[Le]=t:delete r[Le]),n}var Kt=ls;var us=Object.prototype,fs=us.toString;function cs(r){return fs.call(r)}var Yt=cs;var ps="[object Null]",ms="[object Undefined]",Zt=I?I.toStringTag:void 0;function ds(r){return r==null?r===void 0?ms:ps:Zt&&Zt in Object(r)?Kt(r):Yt(r)}var $=ds;function gs(r){return r!=null&&typeof r=="object"}var q=gs;var hs="[object Symbol]";function ys(r){return typeof r=="symbol"||q(r)&&$(r)==hs}var ge=ys;function ws(r,e){for(var t=-1,o=r==null?0:r.length,n=Array(o);++t<o;)n[t]=e(r[t],t,r);return n}var Xt=ws;var xs=Array.isArray,k=xs;var eo=I?I.prototype:void 0,ro=eo?eo.toString:void 0;function to(r){if(typeof r=="string")return r;if(k(r))return Xt(r,to)+"";if(ge(r))return ro?ro.call(r):"";var e=r+"";return e=="0"&&1/r==-Infinity?"-0":e}var oo=to;function Cs(r){var e=typeof r;return r!=null&&(e=="object"||e=="function")}var he=Cs;function Ss(r){return r}var no=Ss;var ks="[object AsyncFunction]",vs="[object Function]",Es="[object GeneratorFunction]",Ps="[object Proxy]";function Bs(r){if(!he(r))return false;var e=$(r);return e==vs||e==Es||e==ks||e==Ps}var ir=Bs;var Ts=E["__core-js_shared__"],sr=Ts;var io=(function(){var r=/[^.]+$/.exec(sr&&sr.keys&&sr.keys.IE_PROTO||"");return r?"Symbol(src)_1."+r:""})();function Os(r){return !!io&&io in r}var so=Os;var As=Function.prototype,Rs=As.toString;function Ds(r){if(r!=null){try{return Rs.call(r)}catch{}try{return r+""}catch{}}return ""}var z=Ds;var _s=/[\\^$.*+?()[\]{}|]/g,Is=/^\[object .+?Constructor\]$/,Fs=Function.prototype,Ls=Object.prototype,Ms=Fs.toString,Ns=Ls.hasOwnProperty,$s=RegExp("^"+Ms.call(Ns).replace(_s,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function qs(r){if(!he(r)||so(r))return false;var e=ir(r)?$s:Is;return e.test(z(r))}var ao=qs;function Qs(r,e){return r?.[e]}var lo=Qs;function Hs(r,e){var t=lo(r,e);return ao(t)?t:void 0}var A=Hs;var js=A(E,"WeakMap"),ar=js;var Us=(function(){try{var r=A(Object,"defineProperty");return r({},"",{}),r}catch{}})(),rt=Us;var Ws=9007199254740991,zs=/^(?:0|[1-9]\d*)$/;function Gs(r,e){var t=typeof r;return e=e??Ws,!!e&&(t=="number"||t!="symbol"&&zs.test(r))&&r>-1&&r%1==0&&r<e}var lr=Gs;function Js(r,e,t){e=="__proto__"&&rt?rt(r,e,{configurable:true,enumerable:true,value:t,writable:true}):r[e]=t;}var uo=Js;function Vs(r,e){return r===e||r!==r&&e!==e}var ur=Vs;var Ks=9007199254740991;function Ys(r){return typeof r=="number"&&r>-1&&r%1==0&&r<=Ks}var ye=Ys;function Zs(r){return r!=null&&ye(r.length)&&!ir(r)}var fr=Zs;var Xs=Object.prototype;function ea(r){var e=r&&r.constructor,t=typeof e=="function"&&e.prototype||Xs;return r===t}var fo=ea;function ra(r,e){for(var t=-1,o=Array(r);++t<r;)o[t]=e(t);return o}var co=ra;var ta="[object Arguments]";function oa(r){return q(r)&&$(r)==ta}var tt=oa;var po=Object.prototype,na=po.hasOwnProperty,ia=po.propertyIsEnumerable,sa=tt((function(){return arguments})())?tt:function(r){return q(r)&&na.call(r,"callee")&&!ia.call(r,"callee")},cr=sa;function aa(){return false}var mo=aa;var yo=typeof exports=="object"&&exports&&!exports.nodeType&&exports,go=yo&&typeof module=="object"&&module&&!module.nodeType&&module,la=go&&go.exports===yo,ho=la?E.Buffer:void 0,ua=ho?ho.isBuffer:void 0,fa=ua||mo,Me=fa;var ca="[object Arguments]",pa="[object Array]",ma="[object Boolean]",da="[object Date]",ga="[object Error]",ha="[object Function]",ya="[object Map]",wa="[object Number]",xa="[object Object]",ba="[object RegExp]",Ca="[object Set]",Sa="[object String]",ka="[object WeakMap]",va="[object ArrayBuffer]",Ea="[object DataView]",Pa="[object Float32Array]",Ba="[object Float64Array]",Ta="[object Int8Array]",Oa="[object Int16Array]",Aa="[object Int32Array]",Ra="[object Uint8Array]",Da="[object Uint8ClampedArray]",_a="[object Uint16Array]",Ia="[object Uint32Array]",b={};b[Pa]=b[Ba]=b[Ta]=b[Oa]=b[Aa]=b[Ra]=b[Da]=b[_a]=b[Ia]=true;b[ca]=b[pa]=b[va]=b[ma]=b[Ea]=b[da]=b[ga]=b[ha]=b[ya]=b[wa]=b[xa]=b[ba]=b[Ca]=b[Sa]=b[ka]=false;function Fa(r){return q(r)&&ye(r.length)&&!!b[$(r)]}var wo=Fa;function La(r){return function(e){return r(e)}}var xo=La;var bo=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Ne=bo&&typeof module=="object"&&module&&!module.nodeType&&module,Ma=Ne&&Ne.exports===bo,ot=Ma&&nr.process,Na=(function(){try{var r=Ne&&Ne.require&&Ne.require("util").types;return r||ot&&ot.binding&&ot.binding("util")}catch{}})(),nt=Na;var Co=nt&&nt.isTypedArray,$a=Co?xo(Co):wo,pr=$a;var qa=Object.prototype,Qa=qa.hasOwnProperty;function Ha(r,e){var t=k(r),o=!t&&cr(r),n=!t&&!o&&Me(r),i=!t&&!o&&!n&&pr(r),s=t||o||n||i,a=s?co(r.length,String):[],u=a.length;for(var l in r)(e||Qa.call(r,l))&&!(s&&(l=="length"||n&&(l=="offset"||l=="parent")||i&&(l=="buffer"||l=="byteLength"||l=="byteOffset")||lr(l,u)))&&a.push(l);return a}var So=Ha;function ja(r,e){return function(t){return r(e(t))}}var ko=ja;var Ua=ko(Object.keys,Object),vo=Ua;var Wa=Object.prototype,za=Wa.hasOwnProperty;function Ga(r){if(!fo(r))return vo(r);var e=[];for(var t in Object(r))za.call(r,t)&&t!="constructor"&&e.push(t);return e}var Eo=Ga;function Ja(r){return fr(r)?So(r):Eo(r)}var we=Ja;var Va=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Ka=/^\w*$/;function Ya(r,e){if(k(r))return false;var t=typeof r;return t=="number"||t=="symbol"||t=="boolean"||r==null||ge(r)?true:Ka.test(r)||!Va.test(r)||e!=null&&r in Object(e)}var xe=Ya;var Za=A(Object,"create"),G=Za;function Xa(){this.__data__=G?G(null):{},this.size=0;}var Po=Xa;function el(r){var e=this.has(r)&&delete this.__data__[r];return this.size-=e?1:0,e}var Bo=el;var rl="__lodash_hash_undefined__",tl=Object.prototype,ol=tl.hasOwnProperty;function nl(r){var e=this.__data__;if(G){var t=e[r];return t===rl?void 0:t}return ol.call(e,r)?e[r]:void 0}var To=nl;var il=Object.prototype,sl=il.hasOwnProperty;function al(r){var e=this.__data__;return G?e[r]!==void 0:sl.call(e,r)}var Oo=al;var ll="__lodash_hash_undefined__";function ul(r,e){var t=this.__data__;return this.size+=this.has(r)?0:1,t[r]=G&&e===void 0?ll:e,this}var Ao=ul;function be(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var o=r[e];this.set(o[0],o[1]);}}be.prototype.clear=Po;be.prototype.delete=Bo;be.prototype.get=To;be.prototype.has=Oo;be.prototype.set=Ao;var it=be;function fl(){this.__data__=[],this.size=0;}var Ro=fl;function cl(r,e){for(var t=r.length;t--;)if(ur(r[t][0],e))return t;return -1}var K=cl;var pl=Array.prototype,ml=pl.splice;function dl(r){var e=this.__data__,t=K(e,r);if(t<0)return false;var o=e.length-1;return t==o?e.pop():ml.call(e,t,1),--this.size,true}var Do=dl;function gl(r){var e=this.__data__,t=K(e,r);return t<0?void 0:e[t][1]}var _o=gl;function hl(r){return K(this.__data__,r)>-1}var Io=hl;function yl(r,e){var t=this.__data__,o=K(t,r);return o<0?(++this.size,t.push([r,e])):t[o][1]=e,this}var Fo=yl;function Ce(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var o=r[e];this.set(o[0],o[1]);}}Ce.prototype.clear=Ro;Ce.prototype.delete=Do;Ce.prototype.get=_o;Ce.prototype.has=Io;Ce.prototype.set=Fo;var Y=Ce;var wl=A(E,"Map"),Z=wl;function xl(){this.size=0,this.__data__={hash:new it,map:new(Z||Y),string:new it};}var Lo=xl;function bl(r){var e=typeof r;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?r!=="__proto__":r===null}var Mo=bl;function Cl(r,e){var t=r.__data__;return Mo(e)?t[typeof e=="string"?"string":"hash"]:t.map}var X=Cl;function Sl(r){var e=X(this,r).delete(r);return this.size-=e?1:0,e}var No=Sl;function kl(r){return X(this,r).get(r)}var $o=kl;function vl(r){return X(this,r).has(r)}var qo=vl;function El(r,e){var t=X(this,r),o=t.size;return t.set(r,e),this.size+=t.size==o?0:1,this}var Qo=El;function Se(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var o=r[e];this.set(o[0],o[1]);}}Se.prototype.clear=Lo;Se.prototype.delete=No;Se.prototype.get=$o;Se.prototype.has=qo;Se.prototype.set=Qo;var le=Se;var Pl="Expected a function";function st(r,e){if(typeof r!="function"||e!=null&&typeof e!="function")throw new TypeError(Pl);var t=function(){var o=arguments,n=e?e.apply(this,o):o[0],i=t.cache;if(i.has(n))return i.get(n);var s=r.apply(this,o);return t.cache=i.set(n,s)||i,s};return t.cache=new(st.Cache||le),t}st.Cache=le;var Ho=st;var Bl=500;function Tl(r){var e=Ho(r,function(o){return t.size===Bl&&t.clear(),o}),t=e.cache;return e}var jo=Tl;var Ol=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Al=/\\(\\)?/g,Rl=jo(function(r){var e=[];return r.charCodeAt(0)===46&&e.push(""),r.replace(Ol,function(t,o,n,i){e.push(n?i.replace(Al,"$1"):o||t);}),e}),Uo=Rl;function Dl(r){return r==null?"":oo(r)}var Wo=Dl;function _l(r,e){return k(r)?r:xe(r,e)?[r]:Uo(Wo(r))}var mr=_l;function Fl(r){if(typeof r=="string"||ge(r))return r;var e=r+"";return e=="0"&&1/r==-Infinity?"-0":e}var ee=Fl;function Ll(r,e){e=mr(e,r);for(var t=0,o=e.length;r!=null&&t<o;)r=r[ee(e[t++])];return t&&t==o?r:void 0}var dr=Ll;function Ml(r,e,t){var o=r==null?void 0:dr(r,e);return o===void 0?t:o}var zo=Ml;function Nl(r,e){for(var t=-1,o=e.length,n=r.length;++t<o;)r[n+t]=e[t];return r}var Go=Nl;function $l(){this.__data__=new Y,this.size=0;}var Jo=$l;function ql(r){var e=this.__data__,t=e.delete(r);return this.size=e.size,t}var Vo=ql;function Ql(r){return this.__data__.get(r)}var Ko=Ql;function Hl(r){return this.__data__.has(r)}var Yo=Hl;var jl=200;function Ul(r,e){var t=this.__data__;if(t instanceof Y){var o=t.__data__;if(!Z||o.length<jl-1)return o.push([r,e]),this.size=++t.size,this;t=this.__data__=new le(o);}return t.set(r,e),this.size=t.size,this}var Zo=Ul;function ke(r){var e=this.__data__=new Y(r);this.size=e.size;}ke.prototype.clear=Jo;ke.prototype.delete=Vo;ke.prototype.get=Ko;ke.prototype.has=Yo;ke.prototype.set=Zo;var ve=ke;function Wl(r,e){for(var t=-1,o=r==null?0:r.length,n=0,i=[];++t<o;){var s=r[t];e(s,t,r)&&(i[n++]=s);}return i}var Xo=Wl;function zl(){return []}var en=zl;var Gl=Object.prototype,Jl=Gl.propertyIsEnumerable,rn=Object.getOwnPropertySymbols,Vl=rn?function(r){return r==null?[]:(r=Object(r),Xo(rn(r),function(e){return Jl.call(r,e)}))}:en,tn=Vl;function Kl(r,e,t){var o=e(r);return k(r)?o:Go(o,t(r))}var on=Kl;function Yl(r){return on(r,we,tn)}var at=Yl;var Zl=A(E,"DataView"),gr=Zl;var Xl=A(E,"Promise"),hr=Xl;var eu=A(E,"Set"),yr=eu;var nn="[object Map]",ru="[object Object]",sn="[object Promise]",an="[object Set]",ln="[object WeakMap]",un="[object DataView]",tu=z(gr),ou=z(Z),nu=z(hr),iu=z(yr),su=z(ar),ue=$;(gr&&ue(new gr(new ArrayBuffer(1)))!=un||Z&&ue(new Z)!=nn||hr&&ue(hr.resolve())!=sn||yr&&ue(new yr)!=an||ar&&ue(new ar)!=ln)&&(ue=function(r){var e=$(r),t=e==ru?r.constructor:void 0,o=t?z(t):"";if(o)switch(o){case tu:return un;case ou:return nn;case nu:return sn;case iu:return an;case su:return ln}return e});var lt=ue;var au=E.Uint8Array,ut=au;var lu="__lodash_hash_undefined__";function uu(r){return this.__data__.set(r,lu),this}var fn=uu;function fu(r){return this.__data__.has(r)}var cn=fu;function wr(r){var e=-1,t=r==null?0:r.length;for(this.__data__=new le;++e<t;)this.add(r[e]);}wr.prototype.add=wr.prototype.push=fn;wr.prototype.has=cn;var pn=wr;function cu(r,e){for(var t=-1,o=r==null?0:r.length;++t<o;)if(e(r[t],t,r))return true;return false}var mn=cu;function pu(r,e){return r.has(e)}var dn=pu;var mu=1,du=2;function gu(r,e,t,o,n,i){var s=t&mu,a=r.length,u=e.length;if(a!=u&&!(s&&u>a))return false;var l=i.get(r),c=i.get(e);if(l&&c)return l==e&&c==r;var m=-1,g=true,h=t&du?new pn:void 0;for(i.set(r,e),i.set(e,r);++m<a;){var B=r[m],w=e[m];if(o)var L=s?o(w,B,m,e,r,i):o(B,w,m,r,e,i);if(L!==void 0){if(L)continue;g=false;break}if(h){if(!mn(e,function(se,ae){if(!dn(h,ae)&&(B===se||n(B,se,t,o,i)))return h.push(ae)})){g=false;break}}else if(!(B===w||n(B,w,t,o,i))){g=false;break}}return i.delete(r),i.delete(e),g}var xr=gu;function hu(r){var e=-1,t=Array(r.size);return r.forEach(function(o,n){t[++e]=[n,o];}),t}var gn=hu;function yu(r){var e=-1,t=Array(r.size);return r.forEach(function(o){t[++e]=o;}),t}var hn=yu;var wu=1,xu=2,bu="[object Boolean]",Cu="[object Date]",Su="[object Error]",ku="[object Map]",vu="[object Number]",Eu="[object RegExp]",Pu="[object Set]",Bu="[object String]",Tu="[object Symbol]",Ou="[object ArrayBuffer]",Au="[object DataView]",yn=I?I.prototype:void 0,ft=yn?yn.valueOf:void 0;function Ru(r,e,t,o,n,i,s){switch(t){case Au:if(r.byteLength!=e.byteLength||r.byteOffset!=e.byteOffset)return false;r=r.buffer,e=e.buffer;case Ou:return !(r.byteLength!=e.byteLength||!i(new ut(r),new ut(e)));case bu:case Cu:case vu:return ur(+r,+e);case Su:return r.name==e.name&&r.message==e.message;case Eu:case Bu:return r==e+"";case ku:var a=gn;case Pu:var u=o&wu;if(a||(a=hn),r.size!=e.size&&!u)return false;var l=s.get(r);if(l)return l==e;o|=xu,s.set(r,e);var c=xr(a(r),a(e),o,n,i,s);return s.delete(r),c;case Tu:if(ft)return ft.call(r)==ft.call(e)}return false}var wn=Ru;var Du=1,_u=Object.prototype,Iu=_u.hasOwnProperty;function Fu(r,e,t,o,n,i){var s=t&Du,a=at(r),u=a.length,l=at(e),c=l.length;if(u!=c&&!s)return false;for(var m=u;m--;){var g=a[m];if(!(s?g in e:Iu.call(e,g)))return false}var h=i.get(r),B=i.get(e);if(h&&B)return h==e&&B==r;var w=true;i.set(r,e),i.set(e,r);for(var L=s;++m<u;){g=a[m];var se=r[g],ae=e[g];if(o)var Ft=s?o(ae,se,g,e,r,i):o(se,ae,g,r,e,i);if(!(Ft===void 0?se===ae||n(se,ae,t,o,i):Ft)){w=false;break}L||(L=g=="constructor");}if(w&&!L){var Ke=r.constructor,Ye=e.constructor;Ke!=Ye&&"constructor"in r&&"constructor"in e&&!(typeof Ke=="function"&&Ke instanceof Ke&&typeof Ye=="function"&&Ye instanceof Ye)&&(w=false);}return i.delete(r),i.delete(e),w}var xn=Fu;var Lu=1,bn="[object Arguments]",Cn="[object Array]",br="[object Object]",Mu=Object.prototype,Sn=Mu.hasOwnProperty;function Nu(r,e,t,o,n,i){var s=k(r),a=k(e),u=s?Cn:lt(r),l=a?Cn:lt(e);u=u==bn?br:u,l=l==bn?br:l;var c=u==br,m=l==br,g=u==l;if(g&&Me(r)){if(!Me(e))return false;s=true,c=false;}if(g&&!c)return i||(i=new ve),s||pr(r)?xr(r,e,t,o,n,i):wn(r,e,u,t,o,n,i);if(!(t&Lu)){var h=c&&Sn.call(r,"__wrapped__"),B=m&&Sn.call(e,"__wrapped__");if(h||B){var w=h?r.value():r,L=B?e.value():e;return i||(i=new ve),n(w,L,t,o,i)}}return g?(i||(i=new ve),xn(r,e,t,o,n,i)):false}var kn=Nu;function vn(r,e,t,o,n){return r===e?true:r==null||e==null||!q(r)&&!q(e)?r!==r&&e!==e:kn(r,e,t,o,vn,n)}var Cr=vn;var $u=1,qu=2;function Qu(r,e,t,o){var n=t.length,i=n,s=!o;if(r==null)return !i;for(r=Object(r);n--;){var a=t[n];if(s&&a[2]?a[1]!==r[a[0]]:!(a[0]in r))return false}for(;++n<i;){a=t[n];var u=a[0],l=r[u],c=a[1];if(s&&a[2]){if(l===void 0&&!(u in r))return false}else {var m=new ve;if(o)var g=o(l,c,u,r,e,m);if(!(g===void 0?Cr(c,l,$u|qu,o,m):g))return false}}return true}var En=Qu;function Hu(r){return r===r&&!he(r)}var Sr=Hu;function ju(r){for(var e=we(r),t=e.length;t--;){var o=e[t],n=r[o];e[t]=[o,n,Sr(n)];}return e}var Pn=ju;function Uu(r,e){return function(t){return t==null?false:t[r]===e&&(e!==void 0||r in Object(t))}}var kr=Uu;function Wu(r){var e=Pn(r);return e.length==1&&e[0][2]?kr(e[0][0],e[0][1]):function(t){return t===r||En(t,r,e)}}var Bn=Wu;function zu(r,e){return r!=null&&e in Object(r)}var Tn=zu;function Gu(r,e,t){e=mr(e,r);for(var o=-1,n=e.length,i=false;++o<n;){var s=ee(e[o]);if(!(i=r!=null&&t(r,s)))break;r=r[s];}return i||++o!=n?i:(n=r==null?0:r.length,!!n&&ye(n)&&lr(s,n)&&(k(r)||cr(r)))}var On=Gu;function Ju(r,e){return r!=null&&On(r,e,Tn)}var An=Ju;var Vu=1,Ku=2;function Yu(r,e){return xe(r)&&Sr(e)?kr(ee(r),e):function(t){var o=zo(t,r);return o===void 0&&o===e?An(t,r):Cr(e,o,Vu|Ku)}}var Rn=Yu;function Zu(r){return function(e){return e?.[r]}}var Dn=Zu;function Xu(r){return function(e){return dr(e,r)}}var _n=Xu;function ef(r){return xe(r)?Dn(ee(r)):_n(r)}var In=ef;function rf(r){return typeof r=="function"?r:r==null?no:typeof r=="object"?k(r)?Rn(r[0],r[1]):Bn(r):In(r)}var Fn=rf;function tf(r,e,t,o){for(var n=-1,i=r==null?0:r.length;++n<i;){var s=r[n];e(o,s,t(s),r);}return o}var Ln=tf;function of(r){return function(e,t,o){for(var n=-1,i=Object(e),s=o(e),a=s.length;a--;){var u=s[r?a:++n];if(t(i[u],u,i)===false)break}return e}}var Mn=of;var nf=Mn(),Nn=nf;function sf(r,e){return r&&Nn(r,e,we)}var $n=sf;function af(r,e){return function(t,o){if(t==null)return t;if(!fr(t))return r(t,o);for(var n=t.length,i=e?n:-1,s=Object(t);(e?i--:++i<n)&&o(s[i],i,s)!==false;);return t}}var qn=af;var lf=qn($n),Qn=lf;function uf(r,e,t,o){return Qn(r,function(n,i,s){e(o,n,t(n),s);}),o}var Hn=uf;function ff(r,e){return function(t,o){var n=k(t)?Ln:Hn,i=e?e():{};return n(t,r,Fn(o),i)}}var jn=ff;var cf=Object.prototype,pf=cf.hasOwnProperty,mf=jn(function(r,e,t){pf.call(r,t)?r[t].push(e):uo(r,t,[e]);}),$e=mf;M();var vr=class{canHandle(e){return e["dump-grouped"]===true||e.D===true}handle(e){if(e.length===0){f.log("{}");return}let t=$e(e,o=>o.meta?.file??"unknown");f.log(JSON.stringify(t,null,2));}};function Er(r,e={}){let{format:t="merged",showFilePaths:o=true,separator:n="; "}=e;if(r.length===0)return t==="merged"?"":[];if(t==="merged")return r.map(s=>`${s.name}=${s.value}`).join(n);let i=$e(r,s=>s.meta?.file??"unknown");return Object.entries(i).map(([s,a])=>{let u=a.map(l=>`${l.name}=${l.value}`).join(n);return o?`${s}: ${u}`:u})}M();var Pr=class{canHandle(e){return e["render-grouped"]===true||e.R===true}handle(e){e.length!==0&&f.log(Er(e,{format:"grouped"}));}};M();var Br=class{canHandle(e){return e.output==="json"}handle(e){if(e.length===0){f.log("[]");return}f.log(JSON.stringify(e,null,2));}};M();var Tr=class{canHandle(e){return e.render===true||e["render-merged"]===true||e.r===true}handle(e){e.length!==0&&f.log(Er(e,{format:"merged"}));}};var Or=class{constructor(){this.validOutputFormats=["json"];this.handlers=[new or,new vr,new Tr,new Pr,new Br,new Fe];}validateOutputFormat(e){if(e.output!==void 0&&!this.validOutputFormats.includes(e.output)){let t=this.validOutputFormats.join(", ");throw new Error(`Invalid output format: '${e.output}'. Valid formats are: ${t}`)}}getHandler(e){return this.validateOutputFormat(e),this.handlers.find(o=>o.canHandle(e))??new Fe}};var Ar=class{constructor(e){this.strategy=e;}async queryCookies(e,t){return this.strategy.queryCookies(e.name,e.domain,t?.store,t?.force)}};v();var Ee=y("BrowserDetector"),Rr={c:99,o1:111,o2:111,k:107},hf=[{browser:"firefox",pattern:r=>r.includes("cookies.sqlite")},{browser:"chrome",pattern:r=>r.includes("cookies")&&r.endsWith(".db")},{browser:"safari",pattern:r=>r.includes("cookies.binarycookies")}];function yf(r){try{let e=fs$1.readFileSync(r);return e.length>=4&&e[0]===Rr.c&&e[1]===Rr.o1&&e[2]===Rr.o2&&e[3]===Rr.k}catch(e){return Ee.debug("Failed to read file for magic bytes check",{path:r,error:e}),false}}function wf(r){let e=r.toLowerCase();for(let{browser:t,pattern:o}of hf)if(o(e))return Ee.debug("Detected browser from filename",{browser:t,filename:e}),t}function Dr(r){if(!r||!fs$1.existsSync(r)){Ee.debug("Store path does not exist",{storePath:r});return}if(yf(r))return Ee.info("Detected Safari binary cookies from magic bytes"),"safari";let e=wf(r);if(e)return Ee.info("Detected browser from filename pattern",{browser:e}),e;Ee.debug("Could not detect browser type from store",{storePath:r});}function Un(r){return ["chrome","firefox","safari","edge","arc","opera","opera-gx"].includes(r)}v();O();function Wn(r){let e=os$1.homedir();if(!e)throw new Error("Unable to determine user home directory");de();let t=C(),n={chrome:{windows:path.join(e,"AppData","Local","Google","Chrome","User Data"),macos:path.join(e,"Library","Application Support","Google","Chrome"),linux:path.join(e,".config","google-chrome")},chromium:{windows:path.join(e,"AppData","Local","Chromium","User Data"),macos:path.join(e,"Library","Application Support","Chromium"),linux:path.join(e,".config","chromium")},brave:{windows:path.join(e,"AppData","Local","BraveSoftware","Brave-Browser","User Data"),macos:path.join(e,"Library","Application Support","BraveSoftware","Brave-Browser"),linux:path.join(e,".config","BraveSoftware","Brave-Browser")},edge:{windows:path.join(e,"AppData","Local","Microsoft","Edge","User Data"),macos:path.join(e,"Library","Application Support","Microsoft Edge"),linux:path.join(e,".config","microsoft-edge")},arc:{windows:path.join(e,"AppData","Local","Arc","User Data"),macos:path.join(e,"Library","Application Support","Arc","User Data"),linux:path.join(e,".config","arc")},opera:{windows:path.join(e,"AppData","Roaming","Opera Software","Opera Stable"),macos:path.join(e,"Library","Application Support","com.operasoftware.Opera"),linux:path.join(e,".config","opera")},"opera-gx":{windows:path.join(e,"AppData","Roaming","Opera Software","Opera GX Stable"),macos:path.join(e,"Library","Application Support","com.operasoftware.OperaGX"),linux:path.join(e,".config","opera-gx")},vivaldi:{windows:path.join(e,"AppData","Local","Vivaldi","User Data"),macos:path.join(e,"Library","Application Support","Vivaldi"),linux:path.join(e,".config","vivaldi")},whale:{windows:path.join(e,"AppData","Local","Naver","Naver Whale","User Data"),macos:path.join(e,"Library","Application Support","Naver","Whale"),linux:path.join(e,".config","naver-whale")}}[r];switch(t){case "win32":return n.windows;case "darwin":return n.macos;case "linux":return n.linux;default:throw new Error(`Platform ${t} is not supported`)}}S();O();S();_r();v();O();var zn=y("ProcessDetector");function kf(r,e){let t=r.trim().split(/\s+/);if(t.length<2)return null;let o=t[1];if(o===void 0||o==="")return null;let n=Number.parseInt(o,10);if(Number.isNaN(n))return null;let i=t.slice(10).join(" ");return {pid:n,command:i!==""?i:e,details:r.trim()}}function vf(r,e){let t=r.split(",").map(i=>i.replace(/"/g,"").trim());if(t.length<2)return null;let o=t[1];if(o===void 0||o==="")return null;let n=Number.parseInt(o,10);return Number.isNaN(n)?null:{pid:n,command:t[0]??e,details:r.trim()}}async function pt(r,e){try{let t;if(N()){let s={firefox:"firefox.exe",chrome:"chrome.exe","google chrome":"chrome.exe",chromium:"chromium.exe",safari:"safari.exe",edge:"msedge.exe"},a=s[r.toLowerCase()]??s[e.toLowerCase()]??`${r.toLowerCase()}.exe`;t=`tasklist /FI "IMAGENAME eq ${a}" /FO CSV | findstr /i "${a}"`;}else t=`ps aux | grep -i '${e}' | grep -v grep`;let{stdout:o}=await J(t);if(!o||o.trim()==="")return [];let n=[],i=o.split(`
|
|
3
|
-
`).filter(s=>s.trim()!=="");for(let s of i){let a=
|
|
2
|
+
'use strict';var os=require('os'),dotenv=require('dotenv'),zod=require('zod'),consola=require('consola'),child_process=require('child_process'),util=require('util'),fs=require('fs'),qs=require('better-sqlite3'),path=require('path'),Vs=require('fast-glob'),Ri=require('readline'),events=require('events'),ea=require('minimist'),ct=require('jsonwebtoken'),crypto=require('crypto'),promises=require('fs/promises'),buffer=require('buffer'),Xc=require('destr');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var qs__default=/*#__PURE__*/_interopDefault(qs);var Vs__default=/*#__PURE__*/_interopDefault(Vs);var Ri__default=/*#__PURE__*/_interopDefault(Ri);var ea__default=/*#__PURE__*/_interopDefault(ea);var ct__default=/*#__PURE__*/_interopDefault(ct);var Xc__default=/*#__PURE__*/_interopDefault(Xc);var Nr=Object.defineProperty;var Wi=Object.getOwnPropertyDescriptor;var zi=Object.getOwnPropertyNames;var Vi=Object.prototype.hasOwnProperty;var Ji=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});var F=(r,e)=>()=>(r&&(e=r(r=0)),e);var pe=(r,e)=>{for(var t in e)Nr(r,t,{get:e[t],enumerable:true});},Ki=(r,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of zi(e))!Vi.call(r,n)&&n!==t&&Nr(r,n,{get:()=>e[n],enumerable:!(o=Wi(e,n))||o.enumerable});return r};var $r=r=>Ki(Nr({},"__esModule",{value:true}),r);function y(r){return r instanceof Error?r.message:typeof r=="string"?r:r!=null&&typeof r=="object"&&"message"in r?String(r.message):String(r)}function me(r){let e=y(r);if(r instanceof Error){let t={message:e};return r.stack!==void 0&&(t.stack=r.stack),r.name!==void 0&&(t.name=r.name),"code"in r&&r.code!==void 0&&(t.code=String(r.code)),t}return {message:e}}function R(r,e){return y(r).toLowerCase().includes(e.toLowerCase())}function Ke(r,e){return e.some(t=>r.includes(t))}function Mt(r){let e=y(r).toLowerCase();return Ke(e,Je.locked)?"locked":Ke(e,Je.busy)?"busy":Ke(e,Je.permission)?"permission":Ke(e,Je.not_found)?"not_found":null}function de(r,e){let t=me(r);return {...e,error:t.message,errorName:t.name,errorCode:t.code,...process.env.NODE_ENV!=="production"&&t.stack!==void 0&&t.stack!==""?{errorStack:t.stack}:{}}}function Xe(r){return r instanceof Error}var Je,E=F(()=>{Je={locked:["database is locked","database locked","sqlite_busy"],busy:["busy"],permission:["eperm","permission denied","operation not permitted","eacces"],not_found:["enoent","no such file","not found"]};});var Zi,qr,Lt=F(()=>{dotenv.config();Zi=zod.z.object({LOG_LEVEL:zod.z.enum(["debug","info","warn","error"]).default("info"),HOME:zod.z.string().optional().transform(r=>r??process.env.USERPROFILE??"").pipe(zod.z.string().min(1))}),qr=Zi.parse({LOG_LEVEL:process.env.LOG_LEVEL,HOME:os.homedir()});});var rs,ts,c,ge=F(()=>{Lt();rs=consola.createConsola({formatOptions:{showLogLevel:false,colors:true,date:false,compact:true,columns:typeof process.stdout.columns=="number"?process.stdout.columns:80},level:qr.LOG_LEVEL==="debug"?5:2}),qr.LOG_LEVEL==="debug",ts=rs,c=ts;});function _e(r,e,t){let o=y(e);c.error(r,{...t,error:o});}function he(r,e,t){c.warn(`[${r}] ${e}`,t);}function w(r){return c.withTag(r)}var P=F(()=>{E();ge();ge();});async function j(r,e){try{let t=await is(r,{...e,encoding:"utf8"});return {stdout:t.stdout.toString(),stderr:t.stderr.toString()}}catch(t){throw _e("Command execution failed",t,{command:r}),new Qr(y(t),r,Xe(t)?t:void 0)}}var is,Qr,Fe=F(()=>{E();P();is=util.promisify(child_process.exec),Qr=class extends Error{constructor(t,o,n){super(t);this.command=o;this.originalError=n;this.name="CommandExecutionError";}};});function S(){return Nt??(Nt=os.platform()),Nt}function H(){return S()==="darwin"}function L(){return S()==="win32"}function jr(){let r=S();return r==="darwin"||r==="win32"||r==="linux"}function ye(){if(!jr())throw new Error(`Unsupported platform: ${S()}. Supported platforms are: darwin, win32, linux`)}var Nt,D=F(()=>{});var Qt={};pe(Qt,{createNodeFileSystemAdapter:()=>ps});function ps(){return {fileExists(r){return fs.existsSync(r)},getFileModificationTime(r){try{return fs.statSync(r).mtimeMs}catch(e){qt.debug("Failed to read file modification time",{path:r,error:e});return}},readFile(r){return fs.readFileSync(r)},readTextFile(r){return fs.readFileSync(r,"utf8")},readLeadingBytes(r,e){let t;try{t=fs.openSync(r,"r");let o=Buffer.alloc(e),n=fs.readSync(t,o,0,e,0);return n<e?o.subarray(0,n):o}catch(o){return qt.debug("Failed to read leading bytes",{path:r,length:e,error:o}),null}finally{t!==void 0&&fs.closeSync(t);}}}}var qt,jt=F(()=>{P();qt=w("NodeFileSystemAdapter");});function xe(){if(Hr!==void 0)return Hr;let{createNodeFileSystemAdapter:r}=(jt(),$r(Qt)),e=r();return Hr=e,e}function A(r){return xe().fileExists(r)}function Ht(r){return xe().readFile(r)}function U(r){return xe().readTextFile(r)}var Hr,$=F(()=>{});var ro={};pe(ro,{BunSqliteAdapter:()=>rt});var et,rt,to=F(()=>{et=class{constructor(e){this.statement=e;}all(...e){return this.statement.all(...e)}get(...e){return this.statement.get(...e)}run(...e){this.statement.run(...e);}},rt=class{constructor(e,t={}){if(typeof globalThis.Bun>"u")throw new Error("BunSqliteAdapter can only be used in a Bun runtime environment");let{Database:o}=Ji("bun:sqlite"),n={readonly:t.readonly??false,...t.fileMustExist?{create:false}:{}};this.db=new o(e,n),this.readonly=t.readonly??false;}prepare(e){let t=this.db.prepare(e);return new et(t)}pragma(e){let t=`PRAGMA ${e}`;this.db.exec(t);}close(){this.db.close();}};});var oo={};pe(oo,{BetterSqlite3Adapter:()=>ot});var tt,ot,no=F(()=>{tt=class{constructor(e){this.statement=e;}all(...e){return this.statement.all(...e)}get(...e){return this.statement.get(...e)}run(...e){this.statement.run(...e);}},ot=class{constructor(e,t={}){this.db=new qs__default.default(e,{readonly:t.readonly??false,fileMustExist:t.fileMustExist??false}),this.readonly=t.readonly??false;}prepare(e){let t=this.db.prepare(e);return new tt(t)}pragma(e){return this.db.pragma(e)}close(){this.db.close();}};});var co={};pe(co,{CookieQueryBuilder:()=>Z,createQueryBuilder:()=>Ws,isSqlBrowser:()=>nr});function Ws(r){return new Z(r)}function nr(r){return r in fo}var fo,Z,ut=F(()=>{fo={chrome:{tableName:"cookies",nameColumn:"name",valueColumn:"value",domainColumn:"host_key",expiryColumn:"expires_utc",encryptedValueColumn:"encrypted_value",pathColumn:"path",secureColumn:"is_secure",httpOnlyColumn:"is_httponly"},chromium:{tableName:"cookies",nameColumn:"name",valueColumn:"value",domainColumn:"host_key",expiryColumn:"expires_utc",encryptedValueColumn:"encrypted_value",pathColumn:"path",secureColumn:"is_secure",httpOnlyColumn:"is_httponly"},edge:{tableName:"cookies",nameColumn:"name",valueColumn:"value",domainColumn:"host_key",expiryColumn:"expires_utc",encryptedValueColumn:"encrypted_value",pathColumn:"path",secureColumn:"is_secure",httpOnlyColumn:"is_httponly"},opera:{tableName:"cookies",nameColumn:"name",valueColumn:"value",domainColumn:"host_key",expiryColumn:"expires_utc",encryptedValueColumn:"encrypted_value",pathColumn:"path",secureColumn:"is_secure",httpOnlyColumn:"is_httponly"},"opera-gx":{tableName:"cookies",nameColumn:"name",valueColumn:"value",domainColumn:"host_key",expiryColumn:"expires_utc",encryptedValueColumn:"encrypted_value",pathColumn:"path",secureColumn:"is_secure",httpOnlyColumn:"is_httponly"},brave:{tableName:"cookies",nameColumn:"name",valueColumn:"value",domainColumn:"host_key",expiryColumn:"expires_utc",encryptedValueColumn:"encrypted_value",pathColumn:"path",secureColumn:"is_secure",httpOnlyColumn:"is_httponly"},arc:{tableName:"cookies",nameColumn:"name",valueColumn:"value",domainColumn:"host_key",expiryColumn:"expires_utc",encryptedValueColumn:"encrypted_value",pathColumn:"path",secureColumn:"is_secure",httpOnlyColumn:"is_httponly"},vivaldi:{tableName:"cookies",nameColumn:"name",valueColumn:"value",domainColumn:"host_key",expiryColumn:"expires_utc",encryptedValueColumn:"encrypted_value",pathColumn:"path",secureColumn:"is_secure",httpOnlyColumn:"is_httponly"},firefox:{tableName:"moz_cookies",nameColumn:"name",valueColumn:"value",domainColumn:"host",expiryColumn:"expiry",pathColumn:"path",secureColumn:"isSecure",httpOnlyColumn:"isHttpOnly"}},Z=class{constructor(e){if(this.browser=e,!nr(e))throw new Error(`Unsupported browser type: ${e}`);this.schema=fo[e];}buildSelectQuery(e){let{name:t,domain:o,exactDomain:n,limit:i,includeExpired:s,container:a}=e,l=this.schema,u=this.buildSelectColumns(),{whereClause:f,params:m}=this.buildWhereClause(t,o,n,s,a),x=`SELECT ${u} FROM ${l.tableName}`;return f&&(x+=` WHERE ${f}`),x+=` ORDER BY ${l.expiryColumn} DESC`,i!==void 0&&i>0&&(x+=` LIMIT ${i}`),{sql:x,params:m,description:`Query ${this.browser} cookies: name=${t}, domain=${o}`}}buildBatchSelectQuery(e){if(e.length===0)throw new Error("At least one spec is required for batch query");let t=this.schema,o=this.buildSelectColumns(),n=[],i=[];for(let u of e){let{whereClause:f,params:m}=this.buildWhereClause(u.name,u.domain,u.exactDomain,u.includeExpired,u.container);f&&(n.push(`(${f})`),i.push(...m));}let s=n.join(" OR "),a=`SELECT ${o} FROM ${t.tableName}`;s&&(a+=` WHERE ${s}`),a+=` ORDER BY ${t.expiryColumn} DESC`;let l=e.reduce((u,f)=>f.limit!==void 0&&f.limit>0?u!==void 0?Math.min(u,f.limit):f.limit:u,void 0);return l!==void 0&&l>0&&(a+=` LIMIT ${l*e.length}`),{sql:a,params:i,description:`Batch query ${this.browser} cookies for ${e.length} specs`}}buildMetaQuery(e){if(this.browser==="firefox")throw new Error("Firefox does not have a meta table");return {sql:"SELECT value FROM meta WHERE key = ?",params:[e],description:`Get metadata: ${e}`}}buildTableExistsQuery(){return {sql:"SELECT name FROM sqlite_master WHERE type='table' AND name=?",params:[this.schema.tableName],description:`Check if ${this.schema.tableName} table exists`}}buildSelectColumns(){let e=this.schema,t=[e.nameColumn,e.domainColumn,e.expiryColumn];return e.encryptedValueColumn!==void 0&&this.browser!=="firefox"?t.push(e.encryptedValueColumn):t.push(e.valueColumn),e.pathColumn!==void 0&&t.push(e.pathColumn),e.secureColumn!==void 0&&t.push(e.secureColumn),e.httpOnlyColumn!==void 0&&t.push(e.httpOnlyColumn),this.browser==="firefox"&&t.push("originAttributes"),t.map(o=>{switch(o){case e.domainColumn:return `${o} AS domain`;case e.expiryColumn:return `${o} AS expiry`;case e.encryptedValueColumn:return `${o} AS encrypted_value`;case e.valueColumn:return `${o} AS value`;case e.nameColumn:return `${o} AS name`;case e.pathColumn:return `${o} AS path`;case e.secureColumn:return `${o} AS is_secure`;case e.httpOnlyColumn:return `${o} AS is_httponly`;default:return o}}).join(", ")}addDomainCondition(e,t,o,n,i){if(i===true){e.push(`${o} = ?`),t.push(n);return}n.startsWith(".")?(e.push(`${o} LIKE ?`),t.push(`%${n}`)):(e.push(`(${o} = ? OR ${o} = ? OR ${o} LIKE ?)`),t.push(n,`.${n}`,`%.${n}`));}buildWhereClause(e,t,o,n,i){let s=this.schema,a=[],l=[];if(e==="%"||(e.includes("%")||e.includes("_")?(a.push(`${s.nameColumn} LIKE ?`),l.push(e)):(a.push(`${s.nameColumn} = ?`),l.push(e))),t!==""&&this.addDomainCondition(a,l,s.domainColumn,t,o),n!==true)if(this.browser==="firefox"){let u=Math.floor(Date.now()/1e3);a.push(`${s.expiryColumn} > ?`),l.push(u);}else a.push(`${s.expiryColumn} > 0`);if(this.browser==="firefox"&&i!==void 0)if(String(i).toLowerCase()==="none")a.push("(originAttributes IS NULL OR originAttributes NOT LIKE '%userContextId=%')");else {let u=typeof i=="number"?i:Number.parseInt(String(i),10);Number.isNaN(u)||(a.push("(originAttributes LIKE ? OR originAttributes LIKE ?)"),l.push(`%userContextId=${u}`,`%userContextId=${u}&%`));}return {whereClause:a.join(" AND "),params:l}}static validateQueryParams(e){let{name:t,domain:o,limit:n}=e;if(typeof t!="string"||t.length===0)throw new Error("Cookie name must be a non-empty string");if(typeof o!="string"||o.length===0)throw new Error("Domain must be a non-empty string");let i=["SELECT","INSERT","UPDATE","DELETE","DROP","CREATE","ALTER","--",";"],s=(a,l)=>{let u=a.toUpperCase();for(let f of i)if(u.includes(f))throw new Error(`Invalid ${l}: contains SQL keyword '${f}'`)};if(s(t,"name"),s(o,"domain"),n!==void 0&&(!Number.isInteger(n)||n<=0||n>1e4))throw new Error("Limit must be a positive integer between 1 and 10000")}getBrowserType(){return this.browser}getSchema(){return Object.freeze({...this.schema})}};});var Si,ki=F(()=>{D();Si=(()=>{let r=os.homedir();if(!r)throw new Error("Unable to determine user home directory");switch(ye(),S()){case "darwin":return path.join(r,"Library","Application Support","Google","Chrome");case "win32":return path.join(r,"AppData","Local","Google","Chrome","User Data");case "linux":return path.join(r,".config","google-chrome");default:throw new Error(`Platform ${S()} is not supported`)}})();});var Ei={};pe(Ei,{getChromePassword:()=>Ic});async function Fc(r){let e=Buffer.from("DPAPI");if(!r.subarray(0,5).equals(e))throw new Error("Invalid DPAPI key prefix");let t=r.subarray(5);if(L())try{let n=await import('@primno/dpapi');if(typeof n.unprotectData=="function")return n.unprotectData(t)}catch(o){process.env.VERBOSE!==void 0&&process.env.VERBOSE!==""&&console.warn("DPAPI module not available:",o);}throw new Error("Windows DPAPI decryption requires native bindings. Install @primno/dpapi package for Windows support.")}async function Ic(){try{let r=path.join(Si,"Local State"),e=U(r),t=JSON.parse(e);if(!t.os_crypt.encrypted_key)throw new Error("No encrypted key found in Chrome Local State");let o=Buffer.from(t.os_crypt.encrypted_key,"base64");return (await Fc(o)).toString("latin1")}catch(r){throw new Error(`Failed to retrieve Chrome password on Windows: ${y(r)}`)}}var Pi=F(()=>{E();D();$();ki();});var Ai={};pe(Ai,{getChromePassword:()=>Mc});async function Mc(){try{let t=(await j("secret-tool lookup application chrome-libsecret-password-v2 || secret-tool lookup application chrome")).stdout.trim();if(t)return t}catch{}try{let t=(await j(`python3 -c "import keyring; print(keyring.get_password('Chrome Safe Storage', 'Chrome'))"`)).stdout.trim();if(t&&t!=="None")return t}catch{}try{let t=(await j('kwallet-query kdewallet -f "Chrome Safe Storage" -r Chrome')).stdout.trim();if(t)return t}catch{}return "peanuts"}var Bi=F(()=>{Fe();});Fe();P();D();P();$();var Ie=w("BrowserDetector"),Ze={c:99,o1:111,o2:111,k:107},ms=[{browser:"firefox",pattern:r=>r.includes("cookies.sqlite")},{browser:"chrome",pattern:r=>r.includes("cookies")&&r.endsWith(".db")},{browser:"safari",pattern:r=>r.includes("cookies.binarycookies")}];function ds(r){let e=xe().readLeadingBytes(r,4);return e===null?false:e.length===4&&e[0]===Ze.c&&e[1]===Ze.o1&&e[2]===Ze.o2&&e[3]===Ze.k}function gs(r){let e=r.toLowerCase();for(let{browser:t,pattern:o}of ms)if(o(e))return Ie.debug("Detected browser from filename",{browser:t,filename:e}),t}function er(r){if(!r||!xe().fileExists(r)){Ie.debug("Store path does not exist",{storePath:r});return}if(ds(r))return Ie.info("Detected Safari binary cookies from magic bytes"),"safari";let e=gs(r);if(e)return Ie.info("Detected browser from filename pattern",{browser:e}),e;Ie.debug("Could not detect browser type from store",{storePath:r});}function Ut(r){return ["chrome","firefox","safari","edge","arc","brave","opera","opera-gx","vivaldi"].includes(r)}$();w("BrowserAvailability");({darwin:{chrome:["/Applications/Google Chrome.app",`${os.homedir()}/Applications/Google Chrome.app`,`${os.homedir()}/Library/Application Support/Google/Chrome`],firefox:["/Applications/Firefox.app",`${os.homedir()}/Applications/Firefox.app`,`${os.homedir()}/Library/Application Support/Firefox`],safari:["/Applications/Safari.app",`${os.homedir()}/Library/Safari`,`${os.homedir()}/Library/Cookies`],edge:["/Applications/Microsoft Edge.app",`${os.homedir()}/Applications/Microsoft Edge.app`,`${os.homedir()}/Library/Application Support/Microsoft Edge`],arc:["/Applications/Arc.app",`${os.homedir()}/Applications/Arc.app`,`${os.homedir()}/Library/Application Support/Arc`],opera:["/Applications/Opera.app",`${os.homedir()}/Applications/Opera.app`,`${os.homedir()}/Library/Application Support/com.operasoftware.Opera`],"opera-gx":["/Applications/Opera GX.app",`${os.homedir()}/Applications/Opera GX.app`,`${os.homedir()}/Library/Application Support/com.operasoftware.OperaGX`],brave:["/Applications/Brave Browser.app",`${os.homedir()}/Applications/Brave Browser.app`,`${os.homedir()}/Library/Application Support/BraveSoftware/Brave-Browser`],vivaldi:["/Applications/Vivaldi.app",`${os.homedir()}/Applications/Vivaldi.app`,`${os.homedir()}/Library/Application Support/Vivaldi`]},win32:{chrome:[path.join(process.env.LOCALAPPDATA??"","Google","Chrome"),path.join(process.env.PROGRAMFILES??"","Google","Chrome"),path.join(process.env["PROGRAMFILES(X86)"]??"","Google","Chrome")],firefox:[path.join(process.env.APPDATA??"","Mozilla","Firefox"),path.join(process.env.PROGRAMFILES??"","Mozilla Firefox"),path.join(process.env["PROGRAMFILES(X86)"]??"","Mozilla Firefox")],edge:[path.join(process.env.LOCALAPPDATA??"","Microsoft","Edge"),path.join(process.env.PROGRAMFILES??"","Microsoft","Edge"),path.join(process.env["PROGRAMFILES(X86)"]??"","Microsoft","Edge")],opera:[path.join(process.env.APPDATA??"","Opera Software","Opera Stable"),path.join(process.env.PROGRAMFILES??"","Opera"),path.join(process.env["PROGRAMFILES(X86)"]??"","Opera")],"opera-gx":[path.join(process.env.APPDATA??"","Opera Software","Opera GX Stable"),path.join(process.env.PROGRAMFILES??"","Opera GX"),path.join(process.env["PROGRAMFILES(X86)"]??"","Opera GX")],brave:[path.join(process.env.LOCALAPPDATA??"","BraveSoftware","Brave-Browser"),path.join(process.env.PROGRAMFILES??"","BraveSoftware","Brave-Browser")],vivaldi:[path.join(process.env.LOCALAPPDATA??"","Vivaldi","Application"),path.join(process.env.PROGRAMFILES??"","Vivaldi","Application")]},linux:{chrome:[`${os.homedir()}/.config/google-chrome`,"/usr/bin/google-chrome","/usr/bin/google-chrome-stable","/opt/google/chrome"],firefox:[`${os.homedir()}/.mozilla/firefox`,`${os.homedir()}/.config/mozilla/firefox`,"/usr/bin/firefox","/usr/lib/firefox","/snap/firefox"],edge:[`${os.homedir()}/.config/microsoft-edge`,"/usr/bin/microsoft-edge","/opt/microsoft/msedge"],brave:[`${os.homedir()}/.config/BraveSoftware/Brave-Browser`,"/usr/bin/brave-browser","/usr/bin/brave-browser-stable","/opt/brave.com/brave"],opera:[`${os.homedir()}/.config/opera`,"/usr/bin/opera","/usr/lib/opera"],"opera-gx":[`${os.homedir()}/.config/opera-gx`,"/usr/bin/opera-gx"],vivaldi:[`${os.homedir()}/.config/vivaldi`,"/usr/bin/vivaldi","/usr/bin/vivaldi-stable","/opt/vivaldi"]}});var Me={darwin:{chrome:path.join(os.homedir(),"Library","Application Support","Google","Chrome"),edge:path.join(os.homedir(),"Library","Application Support","Microsoft Edge"),arc:path.join(os.homedir(),"Library","Application Support","Arc"),opera:path.join(os.homedir(),"Library","Application Support","com.operasoftware.Opera"),"opera-gx":path.join(os.homedir(),"Library","Application Support","com.operasoftware.OperaGX"),brave:path.join(os.homedir(),"Library","Application Support","BraveSoftware","Brave-Browser"),vivaldi:path.join(os.homedir(),"Library","Application Support","Vivaldi")},win32:{chrome:path.join(process.env.LOCALAPPDATA??"","Google","Chrome","User Data"),edge:path.join(process.env.LOCALAPPDATA??"","Microsoft","Edge","User Data"),opera:path.join(process.env.APPDATA??"","Opera Software","Opera Stable"),"opera-gx":path.join(process.env.APPDATA??"","Opera Software","Opera GX Stable"),arc:path.join(process.env.LOCALAPPDATA??"","Packages","TheBrowserCompany.Arc_ttt1ap7aabd4t","LocalCache"),brave:path.join(process.env.LOCALAPPDATA??"","BraveSoftware","Brave-Browser","User Data"),vivaldi:path.join(process.env.LOCALAPPDATA??"","Vivaldi","User Data")},linux:{chrome:path.join(os.homedir(),".config","google-chrome"),edge:path.join(os.homedir(),".config","microsoft-edge"),opera:path.join(os.homedir(),".config","opera"),"opera-gx":path.join(os.homedir(),".config","opera-gx"),brave:path.join(os.homedir(),".config","BraveSoftware","Brave-Browser"),vivaldi:path.join(os.homedir(),".config","vivaldi")}},hs=process.env.XDG_CONFIG_HOME&&process.env.XDG_CONFIG_HOME.trim()!==""?process.env.XDG_CONFIG_HOME:path.join(os.homedir(),".config"),ys=(()=>{let r=["Firefox","Firefox Developer Edition","Firefox ESR"],e=new Set,t=n=>{for(let i of r)e.add(path.join(n,i));};t(path.join(os.homedir(),"AppData","Roaming","Mozilla"));let o=process.env.APPDATA&&process.env.APPDATA.trim()!==""?process.env.APPDATA:null;return o!==null&&t(path.join(o,"Mozilla")),[...e]})(),rr={darwin:[path.join(os.homedir(),"Library","Application Support","Firefox")],win32:ys,linux:[path.join(os.homedir(),".mozilla","firefox"),path.join(hs,"mozilla","firefox"),path.join(os.homedir(),"snap","firefox","common",".mozilla","firefox"),path.join(os.homedir(),".var","app","org.mozilla.firefox",".mozilla","firefox")]};$();function Ur(r,e){let t=path.join(e,"Local State");if(!A(t))return [];try{let o=U(t),i=JSON.parse(o).profile?.info_cache??{},s=[];for(let[a,l]of Object.entries(i)){if(!l||typeof l!="object")continue;let u=l.name||a;s.push({name:u,directory:a,path:path.join(e,a),...l.user_name&&{userName:l.user_name},browser:r});}return s}catch{return []}}function Gt(r){let e=process.platform,t=Me[e]??{};if(r){let n=r.toLowerCase(),i=t[n];return i?Ur(r,i):A(path.join(r,"Local State"))?Ur("chromium",r):[]}let o=[];for(let[n,i]of Object.entries(t))if(i){let s=Ur(n,i);o.push(...s);}return o}E();D();E();Fe();P();D();var Wt=w("ProcessDetector");function xs(r,e){let t=r.trim().split(/\s+/);if(t.length<2)return null;let o=t[1];if(o===void 0||o==="")return null;let n=Number.parseInt(o,10);if(Number.isNaN(n))return null;let i=t.slice(10).join(" ");return {pid:n,command:i!==""?i:e,details:r.trim()}}function ws(r,e){let t=r.split(",").map(i=>i.replace(/"/g,"").trim());if(t.length<2)return null;let o=t[1];if(o===void 0||o==="")return null;let n=Number.parseInt(o,10);return Number.isNaN(n)?null:{pid:n,command:t[0]??e,details:r.trim()}}async function Wr(r,e){try{let t;if(L()){let s={firefox:"firefox.exe",chrome:"chrome.exe","google chrome":"chrome.exe",chromium:"chromium.exe",safari:"safari.exe",edge:"msedge.exe"},a=s[r.toLowerCase()]??s[e.toLowerCase()]??`${r.toLowerCase()}.exe`;t=`tasklist /FI "IMAGENAME eq ${a}" /FO CSV | findstr /i "${a}"`;}else t=`ps aux | grep -i '${e}' | grep -v grep`;let{stdout:o}=await j(t);if(!o||o.trim()==="")return [];let n=[],i=o.split(`
|
|
3
|
+
`).filter(s=>s.trim()!=="");for(let s of i){let a=L()?ws(s,r.toLowerCase()):xs(s,r.toLowerCase());a&&n.push(a);}return Wt.debug(`${r} process detection completed`,{processCount:n.length,processes:n.map(s=>({pid:s.pid,command:s.command})),platform:S()}),n}catch(t){return Wt.debug(`Failed to detect ${r} processes`,{error:y(t),platform:S()}),[]}}async function zt(){return Wr("Firefox","firefox")}async function Vt(){return Wr("Chrome","google chrome\\|chromium")}async function Jt(){return Wr("Safari","/Applications/Safari.app/Contents/MacOS/Safari")}function Kt(r,e){if(e.length===0)return "";let t=e.length,o=r.charAt(0).toUpperCase()+r.slice(1);return `${o} is currently running (${t} process${t>1?"es":""} detected). For reliable cookie access, consider closing ${o} and trying again. Alternatively, use the --force flag to attempt access despite the lock.`}E();P();var bs={info:()=>{},warn:()=>{},error:()=>{},debug:()=>{},success:()=>{},fatal:()=>{},log:()=>{}},X=class{constructor(e,t){this.browserName=t;let o=w(e);this.logger=o||bs;}async queryCookies(e,t,o,n){try{return this.logger.info("Querying cookies",{name:e,domain:t,store:o,force:n}),await this.executeQuery(e,t,o,n)}catch(i){let s=me(i);return this.logger.error("Failed to query cookies",{...s,browser:this.browserName,strategy:this.constructor.name,name:e,domain:t,store:o,force:n}),[]}}};P();D();var zr=util.promisify(child_process.exec),O=w("BrowserControl");function ks(){let r=process.env.CI==="true"||process.env.CI==="1",e=process.env.NODE_ENV==="test"||process.env.JEST_WORKER_ID!==void 0;return process.stdin.isTTY&&process.stdout.isTTY&&!r&&!e}var Vr={Firefox:"Firefox",Chrome:"Google Chrome",Safari:"Safari"};async function Jr(r){try{let e=Vr[r];if(!e)return O.debug("Browser not supported for macOS control",{browserName:r}),!1;let t=`tell application "System Events" to (name of processes) contains "${e}"`,{stdout:o}=await zr(`osascript -e '${t}'`);return o.trim()==="true"}catch(e){return O.debug("Failed to check if browser is running",{browserName:r,error:e}),false}}async function Es(r){try{let e=Vr[r];if(!e)return O.debug("Browser not supported for macOS control",{browserName:r}),!1;let t=`tell application "${e}" to quit`;return await zr(`osascript -e '${t}'`),await new Promise(n=>setTimeout(n,2e3)),await Jr(r)?(O.warn("Browser did not quit gracefully",{browserName:r}),!1):(O.info("Browser quit successfully",{browserName:r}),!0)}catch(e){return O.error("Failed to quit browser",{browserName:r,error:e}),false}}async function Ps(r){try{let e=Vr[r];if(!e){O.debug("Browser not supported for macOS control",{browserName:r});return}if(r==="Firefox"){let t=`
|
|
4
4
|
tell application "${e}"
|
|
5
5
|
activate
|
|
6
6
|
end tell
|
|
@@ -9,11 +9,11 @@
|
|
|
9
9
|
delay 0.5
|
|
10
10
|
key code 36
|
|
11
11
|
end tell
|
|
12
|
-
`;await
|
|
12
|
+
`;await zr(`osascript -e '${t}'`),O.debug("Attempted to save Firefox session",{browserName:r});}else r==="Chrome"?O.debug("Chrome will restore tabs automatically",{browserName:r}):O.debug("Safari will restore tabs automatically",{browserName:r});}catch(e){O.debug("Failed to save browser session",{browserName:r,error:e});}}async function As(r){if(!ks())return O.debug("Non-interactive environment detected, skipping prompt",{browserName:r,CI:process.env.CI,NODE_ENV:process.env.NODE_ENV,JEST_WORKER_ID:process.env.JEST_WORKER_ID,stdin_tty:process.stdin.isTTY,stdout_tty:process.stdout.isTTY}),false;let e=Ri__default.default.createInterface({input:process.stdin,output:process.stdout});return new Promise(t=>{e.question(`
|
|
13
13
|
\u26A0\uFE0F ${r} is currently running and blocking cookie access.
|
|
14
|
-
Would you like to close ${r}? Your tabs will be restored when you reopen it. (y/N): `,o=>{e.close(),t(o.toLowerCase()==="y"||o.toLowerCase()==="yes");});})}async function
|
|
15
|
-
`).slice(1),o=[];for(let n of t){let i=n.trim().split(/\s+/),s=i[0],a=i[1],
|
|
16
|
-
`).slice(1);for(let i of n){let s=
|
|
14
|
+
Would you like to close ${r}? Your tabs will be restored when you reopen it. (y/N): `,o=>{e.close(),t(o.toLowerCase()==="y"||o.toLowerCase()==="yes");});})}async function Xt(r,e={}){if(!H())return O.debug("Browser control only supported on macOS"),false;try{if(!await Jr(r))return O.debug("Browser is not running",{browserName:r}),!0;if(e.interactive===!0&&e.force!==!0&&!await As(r))return O.info("User cancelled browser close",{browserName:r}),!1;await Ps(r);let o=await Es(r);return o?O.success(`${r} closed successfully. Tabs will be restored on next launch.`):O.warn(`Failed to close ${r}. You may need to close it manually.`),o}catch(t){return O.error("Failed to control browser",{browserName:r,error:t}),false}}async function Yt(r,e=1e4){if(!H())return false;let t=Date.now(),o=500;for(;Date.now()-t<e;){if(!await Jr(r))return true;await new Promise(i=>setTimeout(i,o));}return false}E();E();P();D();var tr=util.promisify(child_process.execFile),M=w("FileHandleDetector");function Ts(r){let e=r.trim().split(/\s+/);if(e.length<2)return null;let t=e[1];if(t===void 0||t==="")return null;let o=Number.parseInt(t,10);if(Number.isNaN(o))return null;let n={pid:o,command:e[2]??"unknown"},i=e[0];i!==void 0&&i!==""&&(n.user=i);let s=e[3];return s!==void 0&&s!==""&&(n.mode=s),n}function Rs(r){return r!==null&&typeof r=="object"&&"ProcessId"in r&&"ProcessName"in r}function Ds(r){let e=[];try{let t=JSON.parse(r),o=Array.isArray(t)?t:[t];for(let n of o){if(!Rs(n))continue;let i=n.ProcessId,s=n.ProcessName;typeof i=="string"&&i!==""&&e.push({command:typeof s=="string"?s:"unknown",pid:Number.parseInt(i,10)});}}catch(t){M.debug("Failed to parse PowerShell output",{error:y(t)});}return e}async function _s(r){try{let{stdout:e}=await tr("lsof",[r],{encoding:"utf8"});if(!e||e.trim()==="")return [];let t=e.split(`
|
|
15
|
+
`).slice(1),o=[];for(let n of t){let i=n.trim().split(/\s+/),s=i[0],a=i[1],l=i[2],u=i[3];if(s!==void 0&&s!==""&&a!==void 0&&a!==""&&i.length>=4){let f=Number.parseInt(a,10);if(!Number.isNaN(f)){let m={command:s,pid:f};l!==void 0&&l!==""&&(m.user=l),u!==void 0&&u!==""&&(m.fd=u,m.mode=u.includes("w")?"write":"read"),o.push(m);}}}return M.debug("Detected file handles with lsof",{file:r,handleCount:o.length}),o}catch(e){let t=y(e);return R(e,"ENOENT")?M.debug("lsof not available on this system"):R(e,"No such file")?M.debug("File does not exist",{file:r}):M.debug("lsof detection failed",{error:t}),[]}}async function Fs(r){try{let e=await tr("fuser",["-v",r],{encoding:"utf8"}),t=e.stderr||e.stdout||"";if(t.trim()==="")return [];let o=[],n=t.split(`
|
|
16
|
+
`).slice(1);for(let i of n){let s=Ts(i);s&&o.push(s);}return M.debug("Detected file handles with fuser",{file:r,handleCount:o.length}),o}catch(e){let t=y(e);return R(e,"ENOENT")?M.debug("fuser not available on this system"):M.debug("fuser detection failed",{error:t}),[]}}async function Is(r){try{let e=r.replace(/'/g,"''"),t=`
|
|
17
17
|
$ErrorActionPreference = 'SilentlyContinue'
|
|
18
18
|
$handles = @()
|
|
19
19
|
|
|
@@ -52,8 +52,11 @@ Would you like to close ${r}? Your tabs will be restored when you reopen it. (y/
|
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
$handles | ConvertTo-Json -Compress
|
|
55
|
-
`,{stdout:o}=await
|
|
56
|
-
`);for(let n of o){let i=n.match(/^(.+?)\s+pid:\s+(\d+)\s+type:\s+(\w+)\s+.+:\s+(.+)$/i);if(i?.[1]!==void 0&&i?.[1]!==""&&i?.[2]!==void 0&&i?.[2]!==""){let s=Number.parseInt(i[2],10);if(!Number.isNaN(s)){let a={command:i[1],pid:s};i?.[3]!==void 0&&i[3]!==""&&(a.fd=i[3]),a.mode="unknown",t.push(a);}}}return D.debug("Detected file handles with handle.exe",{file:r,handleCount:t.length}),t}catch{return []}}async function ht(r){let e=C();if(D.debug("Detecting file handles",{file:r,platform:e}),N()){let o=await Qf(r);return o.length>0?o:qf(r)}let t=await Nf(r);return t.length===0&&(t=await $f(r)),t.length>0&&D.info("File has open handles",{file:r,handleCount:t.length,processes:t.map(o=>({pid:o.pid,command:o.command,mode:o.mode}))}),t}async function ei(r){let e=await ht(r);if(e.length===0)return "File is not locked";let t=e.map(o=>`${o.command} (PID: ${o.pid}${o.user!==void 0&&o.user!==""?`, User: ${o.user}`:""}${o.mode!==void 0&&o.mode!==""?`, Mode: ${o.mode}`:""})`).join(", ");return `File is locked by ${e.length} process${e.length>1?"es":""}: ${t}`}O();var qe=util.promisify(child_process.execFile),Pe=class r{constructor(){this.browserExecutables=this.initializeBrowserExecutables();}isBrowserSupported(e){let t=this.browserExecutables[e];return !!(t&&t.length>0)}getBrowserExecutables(e){return this.browserExecutables[e]??[]}async isBrowserInstalled(e){let t=this.getBrowserExecutables(e);for(let o of t)try{let n=N()?"where":"which";return await qe(n,[o],{timeout:1e3}),!0}catch{}return false}async executeCommand(e,t=[]){try{await qe(e,t,{timeout:5e3,windowsHide:!0});}catch(o){this.isNodeError(o)&&o.code!=="ENOENT"&&console.debug(`Browser launch warning: ${r.getErrorMessage(o)}`);}}isNodeError(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"}static getErrorMessage(e){return e instanceof Error?e.message:typeof e=="string"?e:String(e)}},wt=class extends Pe{initializeBrowserExecutables(){return {Firefox:["Firefox"],Chrome:["Google Chrome"],Safari:["Safari"]}}async launchBrowser(e){let o={Firefox:"Firefox",Chrome:"Google Chrome",Safari:"Safari"}[e];if(o===void 0||o==="")throw new Error(`${e} not supported on macOS`);await this.executeCommand("osascript",["-e",`tell application "${o}" to activate`]);}getPlatformName(){return "macOS"}},xt=class extends Pe{initializeBrowserExecutables(){return {Firefox:["firefox.exe","Firefox"],Chrome:["chrome.exe","Google Chrome"],Safari:[]}}async launchBrowser(e){let t=this.getBrowserExecutables(e);if(t.length===0)throw new Error(`${e} not available on Windows`);for(let o of t)if(await this.tryLaunchExecutable(o))return;throw new Error(`Failed to launch ${e} on Windows`)}async tryLaunchExecutable(e){try{return await qe("cmd.exe",["/c","start","",e],{timeout:5e3,windowsHide:!0}),!0}catch{return false}}getPlatformName(){return "Windows"}},Fr=class extends Pe{initializeBrowserExecutables(){return {Firefox:["firefox","firefox-bin"],Chrome:["google-chrome","google-chrome-stable","chromium","chromium-browser"],Safari:[]}}async launchBrowser(e){let t=this.getBrowserExecutables(e);if(t.length===0)throw new Error(`${e} not available on Linux`);await this.tryLaunchExecutables(t)||await this.tryXdgOpenFallback(e);}async tryLaunchExecutables(e){for(let t of e)try{return await qe(t,[],{timeout:5e3}),!0}catch{}return false}async tryXdgOpenFallback(e){try{await qe("xdg-open",["http://localhost"],{timeout:5e3});}catch(t){throw new Error(`Failed to launch ${e} on Linux: ${Pe.getErrorMessage(t)}`)}}getPlatformName(){return "Linux"}},yt=null;function ri(r){if(yt!==null&&r===void 0)return yt;let e=C(),t=Uf(e);return (yt=t),t}function Uf(r){switch(r){case "darwin":return new wt;case "win32":return new xt;case "linux":case "freebsd":case "openbsd":return new Fr;default:return new Fr}}var te=class{constructor(e,t,o){this.logger=e;this.browserName=t;this.platformControl=o??ri();}async handleBrowserConflict(e,t,o,n=false){return er(e)?this.isLockError(e)?(await this.logFileHandleInfo(t,o),this.handleProcessConflict(t,o,n)):{resolved:false,shouldRelaunch:false}:{resolved:false,shouldRelaunch:false}}isLockError(e){let t=Mt(e);return t==="locked"||t==="permission"}async logFileHandleInfo(e,t){try{let o=await ht(e);if(o.length>0){let n=await ei(e);this.logger.debug("Database locked by specific processes",{file:e,lockInfo:n,handleCount:o.length,handles:o.map(i=>({pid:i.pid,command:i.command,mode:i.mode,user:i.user}))}),t.length===0&&this.logger.info("File is locked but no browser processes detected - another tool may be accessing the database",{lockingProcesses:o.map(i=>`${i.command} (PID: ${i.pid})`).join(", ")});}}catch(o){this.logger.debug("Could not detect file handles",{error:o instanceof Error?o.message:String(o)});}}async handleProcessConflict(e,t,o){try{if(t.length>0)return await this.handleBrowserProcesses(e,t,o);this.logger.debug("Database/file locked but no browser processes detected",{file:e,browserName:this.browserName,suggestion:"Another process may be accessing the file"});}catch(n){this.logger.debug("Failed to check browser processes",{error:n instanceof Error?n.message:String(n)});}return {resolved:false,shouldRelaunch:false}}async handleBrowserProcesses(e,t,o){let n=t.map(s=>({...s,details:`PID: ${s.pid}, Command: ${s.command}`})),i=Kn(this.browserName.toLowerCase(),n);return this.logger.debug(`${this.browserName} process conflict detected`,{file:e,processCount:t.length,advice:i}),o?this.attemptBrowserClose():Promise.resolve({resolved:false,shouldRelaunch:false})}async attemptBrowserClose(){return this.logger.info(`Attempting to close ${this.browserName} gracefully...`),await Zn(this.browserName,{interactive:true,force:false})?(await Xn(this.browserName,5e3),{resolved:true,shouldRelaunch:true}):{resolved:false,shouldRelaunch:false}}async relaunchBrowser(){this.logger.info(`Relaunching ${this.browserName}...`);try{if(!this.platformControl.isBrowserSupported(this.browserName)){this.logger.debug(`${this.browserName} is not available on ${this.platformControl.getPlatformName()}`);return}await this.platformControl.launchBrowser(this.browserName),this.logger.success(`${this.browserName} has been relaunched with your tabs restored`);}catch(e){this.logger.debug(`Could not relaunch ${this.browserName} automatically`,{error:d(e),platform:this.platformControl.getPlatformName()});}}};O();function ti(r,e){let t=Buffer.from("v10");if(!r.subarray(0,3).equals(t))throw new Error("Not a v10 encrypted cookie");let o=r.subarray(3),n=12,i=16;if(o.length<n+i)throw new Error("Invalid v10 cookie: too short");let s=o.subarray(0,n),a=o.subarray(n,o.length-i),u=o.subarray(o.length-i),l=crypto.createDecipheriv("aes-256-gcm",e,s);return l.setAuthTag(u),Buffer.concat([l.update(a),l.final()]).toString("utf8")}function oi(r){let e=Buffer.from("v10");return r.length>=3&&r.subarray(0,3).equals(e)}function ni(r,e){let t=new Map;return o=>{let n=e?e(o):o.toString("hex");if(t.has(n)){let s=t.get(n);if(s!==void 0)return s}let i=r(o);return t.set(n,i),i}}var Jf=ni(r=>r.length>=3&&r[0]===118&&r[1]===49&&r[2]===48?r.slice(3):r,r=>r.toString("hex")),Vf=ni(r=>{let e=r[r.length-1];return e&&e<=16?r.slice(0,-e):r},r=>r.toString("hex"));function Kf(r){let e=r.match(/([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})/i);if(e?.[1])return e[1];let t=[/([A-Z]{3})$/,/([a-z]{2}_[A-Z]{2})$/,/(\d{3}-\d{7}-\d{7})$/];for(let n of t){let i=r.match(n);if(i?.[1])return i[1]}let o=[/.*?0t(.+)$/,/.*?1e`(.+)$/,/.*?[`'](.+)$/,/[^\x20-\x7E]*([\x20-\x7E]+)$/,/.*?([a-zA-Z0-9_\-.]+)$/];for(let n of o){let s=r.match(n)?.[1]??"";if(s.length>0)return s}return r}async function ii(r,e,t){if(N()&&oi(r)&&r.length>=31&&Buffer.isBuffer(e))return ti(r,e);if(W()&&!r.slice(0,3).toString().match(/^v\d\d$/))return Promise.resolve(r.toString("utf8"));if(typeof e!="string")throw new Error("password must be a string");if(!Buffer.isBuffer(r))throw new Error("encryptedData must be a Buffer");return new Promise((o,n)=>{crypto.pbkdf2(e,"saltysalt",1003,16,"sha1",(i,s)=>{try{if(i){n(new Error(`Failed to derive key: ${i.message}`));return}let a=Jf(r);if(a.length%16!==0){n(new Error("Encrypted data length is not a multiple of 16"));return}let u=Buffer.alloc(16," "),l=crypto.createDecipheriv("aes-128-cbc",s,u);l.setAutoPadding(!1);let c=l.update(a);try{l.final();}catch(B){n(new Error(`Failed to finalize decryption: ${B.message}`));return}c=Vf(c);let h=((t??0)>=24&&c.length>32?c.slice(32):c).toString("utf8");o(Kf(h));}catch(a){n(new Error(`Decryption failed: ${a.message}`));}});})}O();_r();var tc={chrome:"Chrome Safe Storage",chromium:"Chromium Safe Storage",brave:"Brave Safe Storage",edge:"Microsoft Edge Safe Storage",arc:"Arc Safe Storage",opera:"Opera Safe Storage","opera-gx":"Opera Safe Storage",vivaldi:"Vivaldi Safe Storage",whale:"Whale Safe Storage"};async function oc(r){let e=tc[r];if(!e)throw new Error(`Unknown browser type: ${r}`);try{let t=`security find-generic-password -w -s "${e}"`;return (await J(t)).stdout.trim()}catch(t){if(r!=="chrome"){let o='security find-generic-password -w -s "Chrome Safe Storage"';try{return (await J(o)).stdout.trim()}catch{}}throw new Error(`Failed to get ${r} password from keychain: ${t}`)}}async function nc(){let{getChromePassword:r}=await Promise.resolve().then(()=>(ai(),si));return r()}async function ic(){let{getChromePassword:r}=await Promise.resolve().then(()=>(ui(),li));return r()}async function bt(r="chrome"){switch(de(),C()){case "darwin":return oc(r);case "win32":return nc();case "linux":return ic();default:throw new Error(`Platform ${C()} is not supported`)}}Ct();function lc(){return typeof globalThis.Bun<"u"?"bun":"node"}function hi(r,e={}){if(lc()==="bun")try{let n=(mi(),Lt(pi)).BunSqliteAdapter;return new n(r,e)}catch{}let o=(gi(),Lt(di)).BetterSqlite3Adapter;return new o(r,e)}S();v();var Q=y("DatabaseConnectionManager"),Bt=class extends events.EventEmitter{constructor(e={}){super(),this.connections=new Map,this.queryMetrics=[],this.totalQueries=0,this.cacheHits=0,this.connectionReuses=0,this.lastCleanupTime=Date.now(),this.config={maxConnections:e.maxConnections??5,connectionTimeout:e.connectionTimeout??5e3,idleTimeout:e.idleTimeout??3e4,enableMonitoring:e.enableMonitoring??true,retryAttempts:e.retryAttempts??3,retryDelay:e.retryDelay??100,queryTimeout:e.queryTimeout??3e3};}async getConnection(e){let t=Date.now();t-this.lastCleanupTime>3e4&&(this.cleanupIdleConnections(),this.lastCleanupTime=t);let o=this.connections.get(e);return o&&!o.inUse?(o.inUse=true,o.lastAccessed=Date.now(),this.connectionReuses++,Q.debug("Reusing existing connection",{filepath:e,queryCount:o.queryCount}),o.database):(this.connections.size>=this.config.maxConnections&&await this.evictLeastRecentlyUsed(),this.createConnection(e))}async createConnection(e){let t=Date.now(),o;for(let n=0;n<this.config.retryAttempts;n++)try{let i=hi(e,{readonly:!0,fileMustExist:!0});i.pragma(`busy_timeout = ${this.config.queryTimeout}`);let s={database:i,filepath:e,inUse:!0,lastAccessed:Date.now(),queryCount:0,totalQueryTime:0,created:Date.now()};this.connections.set(e,s);let a=Date.now()-t;return Q.debug("Created new connection",{filepath:e,connectionTime:a,attempt:n+1}),this.emit("connection:created",{filepath:e,connectionTime:a}),i}catch(i){if(o=i,this.isDatabaseLocked(i)){Q.warn("Database locked, retrying",{filepath:e,attempt:n+1,maxAttempts:this.config.retryAttempts}),await this.delay(this.config.retryDelay*2**n);continue}throw i}throw o||new Error(`Failed to connect to database: ${e}`)}async executeQuery(e,t,o){let n=Date.now(),i=await this.getConnection(e),s=this.connections.get(e);try{let a=t(i),u=Date.now()-n;if(s&&(s.queryCount++,s.totalQueryTime+=u),this.totalQueries++,this.cacheHits++,u>100&&Q.debug("Slow query detected",{query:o??"Unknown query",duration:u,filepath:e}),this.config.enableMonitoring){let l={query:o??"Unknown query",duration:u,rowCount:Array.isArray(a)?a.length:1,filepath:e,timestamp:Date.now(),success:!0};this.recordMetrics(l);}return a}catch(a){let u=Date.now()-n;if(this.totalQueries++,this.config.enableMonitoring){let l={query:o??"Unknown query",duration:u,rowCount:0,filepath:e,timestamp:Date.now(),success:false,error:a.message};this.recordMetrics(l);}throw a}finally{s&&(s.inUse=false,s.lastAccessed=Date.now());}}releaseConnection(e){let t=this.connections.get(e);t&&(t.inUse=false,t.lastAccessed=Date.now(),Q.debug("Released connection",{filepath:e}));}closeConnection(e){let t=this.connections.get(e);if(t)try{t.database.close(),this.connections.delete(e),Q.debug("Closed connection",{filepath:e,queryCount:t.queryCount,lifetime:Date.now()-t.created}),this.emit("connection:closed",{filepath:e});}catch(o){De("Failed to close connection",o,{filepath:e});}}closeAll(){for(let[e,t]of this.connections)try{t.database.close(),Q.debug("Closed connection",{filepath:e});}catch(o){De("Failed to close connection",o,{filepath:e});}this.connections.clear(),Q.info("Closed all connections",{totalQueries:this.totalQueries,connectionReuses:this.connectionReuses});}getStatistics(){let e=0,t=0,o=0;for(let n of this.connections.values())e+=n.totalQueryTime,t+=n.queryCount,n.inUse&&o++;return {totalConnections:this.connections.size,activeConnections:o,idleConnections:this.connections.size-o,totalQueries:this.totalQueries,averageQueryTime:t>0?e/t:0,cacheHitRate:this.totalQueries>0?this.cacheHits/this.totalQueries:0,connectionReuse:this.connectionReuses}}getQueryMetrics(e=100){return this.queryMetrics.slice(-e)}clearMetrics(){this.queryMetrics.length=0;}cleanupIdleConnections(){let e=Date.now(),t=[];for(let[o,n]of this.connections)!n.inUse&&e-n.lastAccessed>this.config.idleTimeout&&t.push(o);for(let o of t)this.closeConnection(o);t.length>0&&Q.debug("Cleaned up idle connections",{count:t.length});}async evictLeastRecentlyUsed(){let e=null,t=Date.now();for(let[o,n]of this.connections)!n.inUse&&n.lastAccessed<t&&(e=o,t=n.lastAccessed);e!==null?(this.closeConnection(e),Q.debug("Evicted LRU connection",{filepath:e})):await this.delay(100);}recordMetrics(e){this.queryMetrics.push(e),this.queryMetrics.length>1e3&&this.queryMetrics.splice(0,this.queryMetrics.length-1e3),this.emit("query:executed",e);}isDatabaseLocked(e){let t=d(e).toLowerCase();return t.includes("database is locked")||t.includes("database locked")||t.includes("sqlite_busy")}async delay(e){return new Promise(t=>setTimeout(t,e))}},Qe=null,Pt=null;function Be(r){return Qe||(Qe=new Bt(r),Pt||(Pt=()=>{Qe&&Qe.closeAll();},process.on("exit",Pt))),Qe}v();var Tt=y("QueryMonitor"),Ot=class{constructor(e={}){this.options={slowQueryThreshold:e.slowQueryThreshold??100,verbose:e.verbose??false,trackHistory:e.trackHistory??true,maxHistorySize:e.maxHistorySize??1e3},this.queryHistory=[],this.totalQueries=0,this.totalDuration=0,this.slowQueries=0,this.errors=0;}executeQuery(e,t,o=[],n){let i={sql:t,params:o,startTime:Date.now()};n!==void 0&&(i.filepath=n);try{let a=e.prepare(t).all(...o);return i.endTime=Date.now(),i.duration=i.endTime-i.startTime,i.rowCount=a.length,this.recordExecution(i),a}catch(s){throw i.endTime=Date.now(),i.duration=i.endTime-i.startTime,i.error=s,this.recordExecution(i),s}}executeGet(e,t,o=[],n){let i={sql:t,params:o,startTime:Date.now()};n!==void 0&&(i.filepath=n);try{let a=e.prepare(t).get(...o);return i.endTime=Date.now(),i.duration=i.endTime-i.startTime,i.rowCount=a!==void 0?1:0,this.recordExecution(i),a}catch(s){throw i.endTime=Date.now(),i.duration=i.endTime-i.startTime,i.error=s,this.recordExecution(i),s}}prepareStatement(e,t,o){let n=e.prepare(t);return new At(n,t,this,o)}recordExecution(e){this.totalQueries++,e.duration!==void 0&&(this.totalDuration+=e.duration,e.duration>this.options.slowQueryThreshold&&(this.slowQueries++,Tt.debug("Slow query detected",{sql:e.sql,duration:e.duration,rowCount:e.rowCount,filepath:e.filepath}))),e.error?(this.errors++,this.options.verbose&&Tt.error("Query failed",{sql:e.sql,error:e.error.message,filepath:e.filepath})):this.options.verbose&&Tt.debug("Query executed",{sql:e.sql,duration:e.duration,rowCount:e.rowCount}),this.options.trackHistory&&(this.queryHistory.push(e),this.queryHistory.length>this.options.maxHistorySize&&this.queryHistory.splice(0,this.queryHistory.length-this.options.maxHistorySize));}getStatistics(){return {totalQueries:this.totalQueries,averageDuration:this.totalQueries>0?this.totalDuration/this.totalQueries:0,slowQueries:this.slowQueries,slowQueryRate:this.totalQueries>0?this.slowQueries/this.totalQueries:0,errors:this.errors,errorRate:this.totalQueries>0?this.errors/this.totalQueries:0,historySize:this.queryHistory.length}}getHistory(e){return e!==void 0&&e>0?this.queryHistory.slice(-e):[...this.queryHistory]}clearHistory(){this.queryHistory.length=0;}reset(){this.clearHistory(),this.totalQueries=0,this.totalDuration=0,this.slowQueries=0,this.errors=0;}},At=class{constructor(e,t,o,n){this.statement=e;this.sql=t;this.monitor=o;this.filepath=n;}all(...e){return this.monitor.executeQuery({prepare:()=>this.statement},this.sql,e,this.filepath)}get(...e){return this.monitor.executeGet({prepare:()=>this.statement},this.sql,e,this.filepath)}getStatement(){return this.statement}},yi=null;function He(r){return yi??(yi=new Ot(r)),yi}function wi(r,e,t,o,n,i,s){return {domain:r,name:e,value:t,expiry:Yn(o),meta:{file:n,browser:i,decrypted:s}}}var Te=class extends re{constructor(e,t,o="chrome"){super(e,"Chrome"),this.browserDisplayName=t,this.browserType=o,this.lockHandler=new te(this.logger,"Chrome");}get sqlBrowserType(){return Lr(this.browserType)?this.browserType:"chrome"}async batchQueryCookies(e){if(!this.isPlatformSupported())return [];let t=this.getCookieFiles();if(t.length===0)return this.logger.debug(`No ${this.browserDisplayName} cookie files found`),[];try{let o=await bt(this.browserType),n=[];for(let i of t){let s=await this.processBatchFile(i,e,o);n.push(...s);}return n}catch(o){return this.logger.error(`Failed to get ${this.browserDisplayName} password for batch query`,{error:this.getErrorMessage(o)}),[]}}async processBatchFile(e,t,o){try{let n=Be(),i=He(),s=new oe(this.sqlBrowserType),a=t.map(h=>({name:h.name,domain:h.domain,browser:this.sqlBrowserType})),u=s.buildBatchSelectQuery(a),l=await n.executeQuery(e,h=>i.executeQuery(h,u.sql,u.params,e).map(w=>({name:w.name,domain:w.domain,value:w.encrypted_value,expiry:w.expiry})),u.description||u.sql),c=await this.getMetaVersion(e),m={file:e,password:o,browser:this.browserDisplayName,metaVersion:c};return (await Promise.allSettled(l.map(async h=>this.processCookie(h,m)))).filter(h=>h.status==="fulfilled").map(h=>h.value)}catch(n){return this.logger.warn(`Error batch processing ${this.browserDisplayName} cookie file ${e}`,{error:this.getErrorMessage(n),file:e,specsCount:t.length}),[]}}getBrowserName(){return this.browserDisplayName}async executeQuery(e,t,o,n){if(!this.isPlatformSupported())return [];let i=this.getCookieFiles(o);if(i.length===0)return this.logger.debug(`No ${this.browserDisplayName} cookie files found`),[];try{let s=await bt(this.browserType),a=[];for(let u of i){let l=await this.processFileWithRetry(u,e,t,s,n);a.push(...l);}return a}catch(s){return this.logger.error(`Failed to get ${this.browserDisplayName} password`,{error:this.getErrorMessage(s)}),[]}}isPlatformSupported(){return Jr()?true:(this.logger.warn("Platform not supported",{platform:C(),supportedPlatforms:["darwin","win32","linux"]}),false)}getCookieFiles(e){let t=e??this.getCookieFilePaths();return Array.isArray(t)?t:[t]}getErrorMessage(e){return d(e)}async processFileWithRetry(e,t,o,n,i){try{return await this.processFile(e,t,o,n)}catch(s){let a=await this.handleFileError(s,e,t,o,i);return a.resolved?this.retryAfterBrowserClose(e,t,o,n,a.shouldRelaunch):[]}}async handleFileError(e,t,o,n,i){let s=await Jn(),a=await this.lockHandler.handleBrowserConflict(e,t,s,i!==true);return a.resolved||this.logger.warn(`Error reading ${this.browserDisplayName} cookie file ${t}`,{error:this.getErrorMessage(e),file:t,name:o,domain:n}),a}async retryAfterBrowserClose(e,t,o,n,i){try{this.logger.info(`Retrying ${this.browserDisplayName} cookie extraction after browser close...`);let s=await this.processFile(e,t,o,n);return this.logger.success(`Successfully extracted cookies after closing ${this.browserDisplayName}`),i&&await this.lockHandler.relaunchBrowser(),s}catch(s){return this.logger.error(`Failed to extract cookies even after closing ${this.browserDisplayName}`,{error:this.getErrorMessage(s),file:e}),i&&await this.lockHandler.relaunchBrowser(),[]}}async processFile(e,t,o,n){try{let i=Be(),s=He(),u=new oe(this.sqlBrowserType).buildSelectQuery({name:t,domain:o,browser:this.sqlBrowserType}),l=await i.executeQuery(e,h=>s.executeQuery(h,u.sql,u.params,e).map(w=>({name:w.name,domain:w.domain,value:w.encrypted_value,expiry:w.expiry})),u.sql),c=await this.getMetaVersion(e),m={file:e,password:n,browser:this.browserDisplayName,metaVersion:c};return (await Promise.allSettled(l.map(async h=>this.processCookie(h,m)))).map(h=>h.status==="fulfilled"?h.value:null).filter(h=>h!==null)}catch(i){return this.logger.error(`Failed to process ${this.browserDisplayName} cookie file`,{error:this.getErrorMessage(i),file:e,name:t,domain:o}),[]}}async getMetaVersion(e){try{let t=Be(),n=new oe(this.sqlBrowserType).buildMetaQuery("version"),i=await t.executeQuery(e,s=>s.prepare(n.sql).get(...n.params),"Get meta version");return i?Number.parseInt(i.value,10):0}catch(t){return this.logger.debug("Could not retrieve meta version, defaulting to 0",{error:this.getErrorMessage(t)}),0}}async processCookie(e,t){try{let o=Buffer.isBuffer(e.value)?e.value:Buffer.from(String(e.value)),n=await ii(o,t.password,t.metaVersion);return wi(e.domain,e.name,n,e.expiry,t.file,t.browser,!0)}catch(o){return this.logger.warn(`Failed to decrypt ${t.browser} cookie`,{error:this.getErrorMessage(o)}),wi(e.domain,e.name,e.value.toString("utf-8"),e.expiry,t.file,t.browser,false)}}};var H=class extends Te{constructor(e="chrome"){let t=e.charAt(0).toUpperCase()+e.slice(1);super(`${t}CookieQueryStrategy`,t,e),this.browser=e;}getCookieFilePaths(e){if(e!==void 0&&e!=="")return [e];try{let t=Wn(this.browser),o=Wi__default.default.sync("./**/Cookies",{cwd:t,absolute:!0});return this.logger.debug(`Found ${o.length} cookie files for ${this.browser}`),o}catch(t){return this.logger.warn(`Failed to find ${this.browser} cookie files`,{error:this.getErrorMessage(t)}),[]}}};var je=class extends H{constructor(){super("arc");}};var fe=class extends Te{constructor(e){super("ChromeCookieQueryStrategy","Chrome"),e!==void 0&&(this.profileName=e);}getCookieFilePaths(e){if(e!==void 0&&e!=="")return [e];let t=Qt();if(this.profileName)try{let o=zr("fs"),n=zr("path");if(t.length===0)return this.logger.warn("No Chrome cookie files found"),[];let i=t[0];if(!i)return [];let s=path.dirname(path.dirname(i)),a=n.join(s,"Local State");if(o.existsSync(a)){let l=JSON.parse(o.readFileSync(a,"utf8")).profile?.info_cache||{},c;for(let[m,g]of Object.entries(l))if(g.name?.toLowerCase()===this.profileName.toLowerCase()){c=m;break}if(!c){for(let m of Object.keys(l))if(m.toLowerCase()===this.profileName.toLowerCase()){c=m;break}}if(c)t=t.filter(m=>path.dirname(m).endsWith(c)),t.length===0?this.logger.warn(`No cookie files found for profile: ${this.profileName} (directory: ${c})`):this.logger.debug(`Found ${t.length} cookie file(s) for profile: ${this.profileName}`);else return this.logger.debug("Profile not found in Chrome Local State",{requestedProfile:this.profileName,availableProfiles:Object.entries(l).map(([m,g])=>({directory:m,name:g.name}))}),[]}}catch(o){this.logger.warn(`Failed to read Chrome profile info: ${o}`);}return Array.isArray(t)?t:[t]}};S();async function xi(r,e,t=[]){return r.length===0?t:(await Promise.all(r.map(async n=>{try{return await e(n)}catch{return t}}))).flat()}v();var Mr=class{constructor(e){this.strategies=e;this.logger=y("CompositeCookieQueryStrategy");this.browserName="internal";}handleStrategyError(e,t){this.logger.error("Strategy failed",{...ce(e),strategy:t});}async queryCookies(e,t,o,n){try{return this.logger.info("Querying cookies from all strategies",{name:e,domain:t,store:o,force:n,strategyCount:this.strategies.length}),await xi(this.strategies,async i=>{try{return await i.queryCookies(e,t,o,n)}catch(s){return this.handleStrategyError(s,i),[]}},[])}catch(i){return this.logger.error("Failed to query cookies",{...ce(i)}),[]}}};var Ue=class extends H{constructor(){super("edge");}};S();O();function mc(r){let e=os$1.homedir();if(!e)return r.warn("Failed to get home directory"),[];let t=C(),o=[],n=[];switch(t){case "darwin":o.push(path.join(e,"Library/Application Support/Firefox")),n.push(path.join(e,"Library/Application Support/Firefox/Profiles/*/cookies.sqlite"));break;case "win32":{o.push(path.join(e,"AppData","Roaming","Mozilla","Firefox")),n.push(path.join(e,"AppData","Roaming","Mozilla","Firefox","Profiles","*","cookies.sqlite"));let a=path.join(e,"AppData","Roaming","Mozilla","Firefox Developer Edition");fs$1.existsSync(a)&&(o.push(a),n.push(path.join(a,"Profiles","*","cookies.sqlite")));let u=path.join(e,"AppData","Roaming","Mozilla","Firefox ESR");fs$1.existsSync(u)&&(o.push(u),n.push(path.join(u,"Profiles","*","cookies.sqlite")));let l=path.join(e,"AppData","Local","Mozilla","Firefox");fs$1.existsSync(l)&&(o.push(l),n.push(path.join(l,"Profiles","*","cookies.sqlite")));break}case "linux":o.push(path.join(e,".mozilla/firefox")),n.push(path.join(e,".mozilla/firefox/*/cookies.sqlite"));break;default:return r.debug("Unsupported platform for Firefox cookie extraction",{platform:t}),[]}if(o.filter(a=>fs$1.existsSync(a)).length===0)return r.debug("No Firefox profile directories found - Firefox may not be installed",{checked:o,platform:t}),[];let s=[];for(let a of n){let u=Wi__default.default.sync(a);s.push(...u);}return r.debug("Found Firefox cookie files",{files:s}),s}var We=class extends re{constructor(){super("FirefoxCookieQueryStrategy","Firefox"),this.lockHandler=new te(this.logger,"Firefox");}async createCookieQueryConfig(e,t,o){let{CookieQueryBuilder:n}=await Promise.resolve().then(()=>(Ct(),ci)),s=new n("firefox").buildSelectQuery({name:e,domain:t,browser:"firefox"});return {file:o,sql:s.sql,params:s.params,rowTransform:a=>({name:a.name,value:a.value,domain:a.domain,expiry:a.expiry>0?new Date(a.expiry*1e3):"Infinity",meta:{file:o,browser:"Firefox",decrypted:false}})}}async handleCookieExtractionError(e,t,o,n,i){let s=await Gn(),a=await this.lockHandler.handleBrowserConflict(e,t,s,o!==true);return a.resolved?{retryAfterClose:true,shouldRelaunch:a.shouldRelaunch}:(this.logExtractError(e,t,n,i),{retryAfterClose:false,shouldRelaunch:false})}logExtractError(e,t,o,n){this.logger.debug(`Error reading Firefox cookie file ${t}`,{error:d(e),file:t,name:o,domain:n});}async performRetryAfterClose(e,t){this.logger.info("Retrying Firefox cookie extraction after browser close...");try{let o=await this.executeQueryWithNewUtilities(e);return this.logger.success("Successfully extracted cookies after closing Firefox"),t&&await this.lockHandler.relaunchBrowser(),o}catch(o){return this.logger.error("Failed to extract cookies even after closing Firefox",{error:o instanceof Error?o.message:String(o),file:e.file}),t&&await this.lockHandler.relaunchBrowser(),[]}}async processCookieFile(e,t,o,n){let i=await this.createCookieQueryConfig(t,o,e);try{return await this.executeQueryWithNewUtilities(i)}catch(s){let a=await this.handleCookieExtractionError(s,e,n,t,o);return a.retryAfterClose?this.performRetryAfterClose(i,a.shouldRelaunch):[]}}async executeQueryWithNewUtilities(e){let t=Be({retryAttempts:1,retryDelay:0,queryTimeout:100,enableMonitoring:true}),o=He();return t.executeQuery(e.file,n=>o.executeQuery(n,e.sql,e.params,e.file).map(e.rowTransform),e.sql)}async executeQuery(e,t,o,n){let i=o??mc(this.logger),s=Array.isArray(i)?i:[i];if(s.length===0)return this.logger.debug("No Firefox cookie files to query"),[];let a=[];for(let u of s){let l=await this.processCookieFile(u,e,t,n);a.push(...l);}return a}};var ze=class extends H{constructor(){super("opera");}};var Ge=class extends H{constructor(){super("opera-gx");}};S();O();S();v();O();var Dt=util.promisify(child_process.exec),Je=y("SystemPermissions");async function hc(){try{await Dt('open "x-apple.systempreferences:com.apple.preference.security?Privacy_AllFiles"'),Je.info("Opened System Settings > Privacy & Security > Full Disk Access");}catch{try{await Dt('open "x-apple.systempreferences:com.apple.preference.security?Privacy"'),Je.info("Opened System Settings > Privacy & Security");}catch{await Dt("open -b com.apple.systempreferences"),Je.info("Opened System Settings");}}}function yc(){let r=process.env.TERM_PROGRAM;return r==="iTerm.app"?"iTerm":r==="Apple_Terminal"?"Terminal":r==="vscode"?"Visual Studio Code":r??"your terminal application"}async function wc(r,e){let t=bi__default.default.createInterface({input:process.stdin,output:process.stdout});return new Promise(o=>{console.log(`
|
|
55
|
+
`,{stdout:o}=await tr("powershell",["-NoProfile","-NonInteractive","-Command",t],{encoding:"utf8",maxBuffer:1024*1024});if(!o||o.trim()===""||o.trim()==="null")return [];let n=Ds(o);return M.debug("Detected file handles with PowerShell",{file:r,handleCount:n.length}),n}catch(e){return M.debug("Windows handle detection failed",{error:y(e)}),[]}}async function Ms(r){try{let{stdout:e}=await tr("handle",["-nobanner",r],{encoding:"utf8"});if(!e||e.trim()==="")return [];let t=[],o=e.split(`
|
|
56
|
+
`);for(let n of o){let i=n.match(/^(.+?)\s+pid:\s+(\d+)\s+type:\s+(\w+)\s+.+:\s+(.+)$/i);if(i?.[1]!==void 0&&i?.[1]!==""&&i?.[2]!==void 0&&i?.[2]!==""){let s=Number.parseInt(i[2],10);if(!Number.isNaN(s)){let a={command:i[1],pid:s};i?.[3]!==void 0&&i[3]!==""&&(a.fd=i[3]),a.mode="unknown",t.push(a);}}}return M.debug("Detected file handles with handle.exe",{file:r,handleCount:t.length}),t}catch{return []}}async function Kr(r){let e=S();if(M.debug("Detecting file handles",{file:r,platform:e}),L()){let o=await Ms(r);return o.length>0?o:Is(r)}let t=await _s(r);return t.length===0&&(t=await Fs(r)),t.length>0&&M.info("File has open handles",{file:r,handleCount:t.length,processes:t.map(o=>({pid:o.pid,command:o.command,mode:o.mode}))}),t}async function Zt(r){let e=await Kr(r);if(e.length===0)return "File is not locked";let t=e.map(o=>`${o.command} (PID: ${o.pid}${o.user!==void 0&&o.user!==""?`, User: ${o.user}`:""}${o.mode!==void 0&&o.mode!==""?`, Mode: ${o.mode}`:""})`).join(", ");return `File is locked by ${e.length} process${e.length>1?"es":""}: ${t}`}D();var Le=util.promisify(child_process.execFile),we=class r{constructor(){this.browserExecutables=this.initializeBrowserExecutables();}isBrowserSupported(e){let t=this.browserExecutables[e];return !!(t&&t.length>0)}getBrowserExecutables(e){return this.browserExecutables[e]??[]}async isBrowserInstalled(e){let t=this.getBrowserExecutables(e);for(let o of t)try{let n=L()?"where":"which";return await Le(n,[o],{timeout:1e3}),!0}catch{}return false}async executeCommand(e,t=[]){try{await Le(e,t,{timeout:5e3,windowsHide:!0});}catch(o){this.isNodeError(o)&&o.code!=="ENOENT"&&console.debug(`Browser launch warning: ${r.getErrorMessage(o)}`);}}isNodeError(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"}static getErrorMessage(e){return e instanceof Error?e.message:typeof e=="string"?e:String(e)}},Yr=class extends we{initializeBrowserExecutables(){return {Firefox:["Firefox"],Chrome:["Google Chrome"],Safari:["Safari"]}}async launchBrowser(e){let o={Firefox:"Firefox",Chrome:"Google Chrome",Safari:"Safari"}[e];if(o===void 0||o==="")throw new Error(`${e} not supported on macOS`);await this.executeCommand("osascript",["-e",`tell application "${o}" to activate`]);}getPlatformName(){return "macOS"}},Zr=class extends we{initializeBrowserExecutables(){return {Firefox:["firefox.exe","Firefox"],Chrome:["chrome.exe","Google Chrome"],Safari:[]}}async launchBrowser(e){let t=this.getBrowserExecutables(e);if(t.length===0)throw new Error(`${e} not available on Windows`);for(let o of t)if(await this.tryLaunchExecutable(o))return;throw new Error(`Failed to launch ${e} on Windows`)}async tryLaunchExecutable(e){try{return await Le("cmd.exe",["/c","start","",e],{timeout:5e3,windowsHide:!0}),!0}catch{return false}}getPlatformName(){return "Windows"}},or=class extends we{initializeBrowserExecutables(){return {Firefox:["firefox","firefox-bin"],Chrome:["google-chrome","google-chrome-stable","chromium","chromium-browser"],Safari:[]}}async launchBrowser(e){let t=this.getBrowserExecutables(e);if(t.length===0)throw new Error(`${e} not available on Linux`);await this.tryLaunchExecutables(t)||await this.tryXdgOpenFallback(e);}async tryLaunchExecutables(e){for(let t of e)try{return await Le(t,[],{timeout:5e3}),!0}catch{}return false}async tryXdgOpenFallback(e){try{await Le("xdg-open",["http://localhost"],{timeout:5e3});}catch(t){throw new Error(`Failed to launch ${e} on Linux: ${we.getErrorMessage(t)}`)}}getPlatformName(){return "Linux"}},Xr=null;function eo(r){if(Xr!==null&&r===void 0)return Xr;let e=S(),t=$s(e);return (Xr=t),t}function $s(r){switch(r){case "darwin":return new Yr;case "win32":return new Zr;case "linux":case "freebsd":case "openbsd":return new or;default:return new or}}var Y=class{constructor(e,t,o){this.logger=e;this.browserName=t;this.platformControl=o??eo();}async handleBrowserConflict(e,t,o,n=false){return Xe(e)?this.isLockError(e)?(await this.logFileHandleInfo(t,o),this.handleProcessConflict(t,o,n)):{resolved:false,shouldRelaunch:false}:{resolved:false,shouldRelaunch:false}}isLockError(e){let t=Mt(e);return t==="locked"||t==="permission"}async logFileHandleInfo(e,t){try{let o=await Kr(e);if(o.length>0){let n=await Zt(e);this.logger.debug("Database locked by specific processes",{file:e,lockInfo:n,handleCount:o.length,handles:o.map(i=>({pid:i.pid,command:i.command,mode:i.mode,user:i.user}))}),t.length===0&&this.logger.info("File is locked but no browser processes detected - another tool may be accessing the database",{lockingProcesses:o.map(i=>`${i.command} (PID: ${i.pid})`).join(", ")});}}catch(o){this.logger.debug("Could not detect file handles",{error:o instanceof Error?o.message:String(o)});}}async handleProcessConflict(e,t,o){try{if(t.length>0)return await this.handleBrowserProcesses(e,t,o);this.logger.debug("Database/file locked but no browser processes detected",{file:e,browserName:this.browserName,suggestion:"Another process may be accessing the file"});}catch(n){this.logger.debug("Failed to check browser processes",{error:n instanceof Error?n.message:String(n)});}return {resolved:false,shouldRelaunch:false}}async handleBrowserProcesses(e,t,o){let n=t.map(s=>({...s,details:`PID: ${s.pid}, Command: ${s.command}`})),i=Kt(this.browserName.toLowerCase(),n);return this.logger.debug(`${this.browserName} process conflict detected`,{file:e,processCount:t.length,advice:i}),o?this.attemptBrowserClose():Promise.resolve({resolved:false,shouldRelaunch:false})}async attemptBrowserClose(){return this.logger.info(`Attempting to close ${this.browserName} gracefully...`),await Xt(this.browserName,{interactive:true,force:false})?(await Yt(this.browserName,5e3),{resolved:true,shouldRelaunch:true}):{resolved:false,shouldRelaunch:false}}async relaunchBrowser(){this.logger.info(`Relaunching ${this.browserName}...`);try{if(!this.platformControl.isBrowserSupported(this.browserName)){this.logger.debug(`${this.browserName} is not available on ${this.platformControl.getPlatformName()}`);return}await this.platformControl.launchBrowser(this.browserName),this.logger.success(`${this.browserName} has been relaunched with your tabs restored`);}catch(e){this.logger.debug(`Could not relaunch ${this.browserName} automatically`,{error:y(e),platform:this.platformControl.getPlatformName()});}}};$();E();P();function Qs(){return typeof globalThis.Bun<"u"?"bun":"node"}function so(r,e={}){if(Qs()==="bun")try{let n=(to(),$r(ro)).BunSqliteAdapter;return new n(r,e)}catch{}let o=(no(),$r(oo)).BetterSqlite3Adapter;return new o(r,e)}var G=w("DatabaseConnectionManager"),it=class extends events.EventEmitter{constructor(e={}){super(),this.connections=new Map,this.queryMetrics=[],this.totalQueries=0,this.cacheHits=0,this.connectionReuses=0,this.lastCleanupTime=Date.now(),this.config={maxConnections:e.maxConnections??5,connectionTimeout:e.connectionTimeout??5e3,idleTimeout:e.idleTimeout??3e4,enableMonitoring:e.enableMonitoring??true,retryAttempts:e.retryAttempts??3,retryDelay:e.retryDelay??100,queryTimeout:e.queryTimeout??3e3};}async getConnection(e){let t=Date.now();t-this.lastCleanupTime>3e4&&(this.cleanupIdleConnections(),this.lastCleanupTime=t);let o=this.connections.get(e);return o&&!o.inUse?(o.inUse=true,o.lastAccessed=Date.now(),this.connectionReuses++,G.debug("Reusing existing connection",{filepath:e,queryCount:o.queryCount}),o.database):(this.connections.size>=this.config.maxConnections&&await this.evictLeastRecentlyUsed(),this.createConnection(e))}async createConnection(e){let t=Date.now(),o;for(let n=0;n<this.config.retryAttempts;n++)try{let i=so(e,{readonly:!0,fileMustExist:!0});i.pragma(`busy_timeout = ${this.config.queryTimeout}`);let s={database:i,filepath:e,inUse:!0,lastAccessed:Date.now(),queryCount:0,totalQueryTime:0,created:Date.now()};this.connections.set(e,s);let a=Date.now()-t;return G.debug("Created new connection",{filepath:e,connectionTime:a,attempt:n+1}),this.emit("connection:created",{filepath:e,connectionTime:a}),i}catch(i){if(o=i,this.isDatabaseLocked(i)){G.warn("Database locked, retrying",{filepath:e,attempt:n+1,maxAttempts:this.config.retryAttempts}),await this.delay(this.config.retryDelay*2**n);continue}throw i}throw o||new Error(`Failed to connect to database: ${e}`)}async executeQuery(e,t,o){let n=Date.now(),i=await this.getConnection(e),s=this.connections.get(e);try{let a=t(i),l=Date.now()-n;if(s&&(s.queryCount++,s.totalQueryTime+=l),this.totalQueries++,this.cacheHits++,l>100&&G.debug("Slow query detected",{query:o??"Unknown query",duration:l,filepath:e}),this.config.enableMonitoring){let u={query:o??"Unknown query",duration:l,rowCount:Array.isArray(a)?a.length:1,filepath:e,timestamp:Date.now(),success:!0};this.recordMetrics(u);}return a}catch(a){let l=Date.now()-n;if(this.totalQueries++,this.config.enableMonitoring){let u={query:o??"Unknown query",duration:l,rowCount:0,filepath:e,timestamp:Date.now(),success:false,error:a.message};this.recordMetrics(u);}throw a}finally{s&&(s.inUse=false,s.lastAccessed=Date.now());}}releaseConnection(e){let t=this.connections.get(e);t&&(t.inUse=false,t.lastAccessed=Date.now(),G.debug("Released connection",{filepath:e}));}closeConnection(e){let t=this.connections.get(e);if(t)try{t.database.close(),this.connections.delete(e),G.debug("Closed connection",{filepath:e,queryCount:t.queryCount,lifetime:Date.now()-t.created}),this.emit("connection:closed",{filepath:e});}catch(o){_e("Failed to close connection",o,{filepath:e});}}closeAll(){for(let[e,t]of this.connections)try{t.database.close(),G.debug("Closed connection",{filepath:e});}catch(o){_e("Failed to close connection",o,{filepath:e});}this.connections.clear(),G.info("Closed all connections",{totalQueries:this.totalQueries,connectionReuses:this.connectionReuses});}getStatistics(){let e=0,t=0,o=0;for(let n of this.connections.values())e+=n.totalQueryTime,t+=n.queryCount,n.inUse&&o++;return {totalConnections:this.connections.size,activeConnections:o,idleConnections:this.connections.size-o,totalQueries:this.totalQueries,averageQueryTime:t>0?e/t:0,cacheHitRate:this.totalQueries>0?this.cacheHits/this.totalQueries:0,connectionReuse:this.connectionReuses}}getQueryMetrics(e=100){return this.queryMetrics.slice(-e)}clearMetrics(){this.queryMetrics.length=0;}cleanupIdleConnections(){let e=Date.now(),t=[];for(let[o,n]of this.connections)!n.inUse&&e-n.lastAccessed>this.config.idleTimeout&&t.push(o);for(let o of t)this.closeConnection(o);t.length>0&&G.debug("Cleaned up idle connections",{count:t.length});}async evictLeastRecentlyUsed(){let e=null,t=Date.now();for(let[o,n]of this.connections)!n.inUse&&n.lastAccessed<t&&(e=o,t=n.lastAccessed);e!==null?(this.closeConnection(e),G.debug("Evicted LRU connection",{filepath:e})):await this.delay(100);}recordMetrics(e){this.queryMetrics.push(e),this.queryMetrics.length>1e3&&this.queryMetrics.splice(0,this.queryMetrics.length-1e3),this.emit("query:executed",e);}isDatabaseLocked(e){let t=y(e).toLowerCase();return t.includes("database is locked")||t.includes("database locked")||t.includes("sqlite_busy")}async delay(e){return new Promise(t=>setTimeout(t,e))}},Ne=null,nt=null;function be(r){return Ne||(Ne=new it(r),nt||(nt=()=>{Ne&&Ne.closeAll();},process.on("exit",nt))),Ne}P();var st=w("QueryMonitor"),at=class{constructor(e={}){this.options={slowQueryThreshold:e.slowQueryThreshold??100,verbose:e.verbose??false,trackHistory:e.trackHistory??true,maxHistorySize:e.maxHistorySize??1e3},this.queryHistory=[],this.totalQueries=0,this.totalDuration=0,this.slowQueries=0,this.errors=0;}executeQuery(e,t,o=[],n){let i={sql:t,params:o,startTime:Date.now()};n!==void 0&&(i.filepath=n);try{let a=e.prepare(t).all(...o);return i.endTime=Date.now(),i.duration=i.endTime-i.startTime,i.rowCount=a.length,this.recordExecution(i),a}catch(s){throw i.endTime=Date.now(),i.duration=i.endTime-i.startTime,i.error=s,this.recordExecution(i),s}}executeGet(e,t,o=[],n){let i={sql:t,params:o,startTime:Date.now()};n!==void 0&&(i.filepath=n);try{let a=e.prepare(t).get(...o);return i.endTime=Date.now(),i.duration=i.endTime-i.startTime,i.rowCount=a!==void 0?1:0,this.recordExecution(i),a}catch(s){throw i.endTime=Date.now(),i.duration=i.endTime-i.startTime,i.error=s,this.recordExecution(i),s}}prepareStatement(e,t,o){let n=e.prepare(t);return new lt(n,t,this,o)}recordExecution(e){this.totalQueries++,e.duration!==void 0&&(this.totalDuration+=e.duration,e.duration>this.options.slowQueryThreshold&&(this.slowQueries++,st.debug("Slow query detected",{sql:e.sql,duration:e.duration,rowCount:e.rowCount,filepath:e.filepath}))),e.error?(this.errors++,this.options.verbose&&st.error("Query failed",{sql:e.sql,error:e.error.message,filepath:e.filepath})):this.options.verbose&&st.debug("Query executed",{sql:e.sql,duration:e.duration,rowCount:e.rowCount}),this.options.trackHistory&&(this.queryHistory.push(e),this.queryHistory.length>this.options.maxHistorySize&&this.queryHistory.splice(0,this.queryHistory.length-this.options.maxHistorySize));}getStatistics(){return {totalQueries:this.totalQueries,averageDuration:this.totalQueries>0?this.totalDuration/this.totalQueries:0,slowQueries:this.slowQueries,slowQueryRate:this.totalQueries>0?this.slowQueries/this.totalQueries:0,errors:this.errors,errorRate:this.totalQueries>0?this.errors/this.totalQueries:0,historySize:this.queryHistory.length}}getHistory(e){return e!==void 0&&e>0?this.queryHistory.slice(-e):[...this.queryHistory]}clearHistory(){this.queryHistory.length=0;}reset(){this.clearHistory(),this.totalQueries=0,this.totalDuration=0,this.slowQueries=0,this.errors=0;}},lt=class{constructor(e,t,o,n){this.statement=e;this.sql=t;this.monitor=o;this.filepath=n;}all(...e){return this.monitor.executeQuery({prepare:()=>this.statement},this.sql,e,this.filepath)}get(...e){return this.monitor.executeGet({prepare:()=>this.statement},this.sql,e,this.filepath)}getStatement(){return this.statement}},ao=null;function $e(r){return ao??(ao=new at(r)),ao}$();function lo(r){if(!r)return;let e=r.match(/userContextId=(\d+)/);if(e?.[1])return Number.parseInt(e[1],10)}function Gs(r){let e=new Map;if(!A(r))return e;try{let t=U(r),o=JSON.parse(t);if(Array.isArray(o.containers))for(let n of o.containers)typeof n.name=="string"&&typeof n.userContextId=="number"&&e.set(n.name.toLowerCase(),n.userContextId);}catch{}return e}function uo(r,e){if(typeof r=="number")return r;let t=String(r).trim();if(t.toLowerCase()==="none")return "none";if(/^\d+$/.test(t))return Number.parseInt(t,10);if(e){let o=path.join(path.dirname(e),"containers.json"),i=Gs(o).get(t.toLowerCase());if(i!==void 0)return i}throw new Error(`Unknown Firefox container: '${r}'`)}function Js(r,e){let t=os.homedir();if(!t)return r.warn("Failed to get home directory"),[];let o=S(),n=[],i=[];switch(o){case "darwin":n.push(path.join(t,"Library/Application Support/Firefox")),i.push(path.join(t,"Library/Application Support/Firefox/Profiles/*/cookies.sqlite"));break;case "win32":{n.push(path.join(t,"AppData","Roaming","Mozilla","Firefox")),i.push(path.join(t,"AppData","Roaming","Mozilla","Firefox","Profiles","*","cookies.sqlite"));let l=path.join(t,"AppData","Roaming","Mozilla","Firefox Developer Edition");A(l)&&(n.push(l),i.push(path.join(l,"Profiles","*","cookies.sqlite")));let u=path.join(t,"AppData","Roaming","Mozilla","Firefox ESR");A(u)&&(n.push(u),i.push(path.join(u,"Profiles","*","cookies.sqlite")));let f=path.join(t,"AppData","Local","Mozilla","Firefox");A(f)&&(n.push(f),i.push(path.join(f,"Profiles","*","cookies.sqlite")));break}case "linux":{let l=rr.linux??[];for(let u of l)n.push(u),i.push(path.join(u,"*","cookies.sqlite"));break}default:return r.debug("Unsupported platform for Firefox cookie extraction",{platform:o}),[]}let s=n.filter(l=>A(l));if(s.length===0)return r.debug("No Firefox profile directories found - Firefox may not be installed",{checked:n,platform:o}),[];let a=[];for(let l of i){let u=Vs__default.default.sync(l);a.push(...u);}return r.debug("Found Firefox cookie files",{files:a}),e!==void 0&&a.length>0?Ks(a,e,s,r):a}function ir(r){try{let t=U(r).split(/\r?\n/),o=[],n,i,s=!0;for(let a of t){let l=a.trim();if(l.startsWith("[")){n!==void 0&&i!==void 0&&o.push({name:n,path:i,isRelative:s}),n=void 0,i=void 0,s=!0;continue}let u=l.indexOf("=");if(u===-1)continue;let f=l.slice(0,u).trim(),m=l.slice(u+1).trim();f==="Name"?n=m:f==="Path"?i=m:f==="IsRelative"&&(s=m==="1");}return n!==void 0&&i!==void 0&&o.push({name:n,path:i,isRelative:s}),o}catch{return []}}function Ks(r,e,t,o){let n=new Set;for(let s of t){let a=path.join(s,"profiles.ini");if(!A(a))continue;let l=ir(a);for(let u of l)if(u.name.toLowerCase()===e.toLowerCase()){let f=u.isRelative?path.join(s,u.path):u.path;n.add(path.basename(f));}}if(n.size===0){let s=new Set;for(let l of t){let u=path.join(l,"profiles.ini");if(A(u))for(let f of ir(u))s.add(f.name);}let a=s.size>0?` Available profiles: ${[...s].join(", ")}`:"";return o.warn(`No Firefox profile matching "${e}" found.${a}`),[]}let i=r.filter(s=>{let a=path.basename(path.join(s,".."));return n.has(a)});return i.length===0?o.warn(`No cookie files found for Firefox profile: ${e}`):o.debug(`Found ${i.length} cookie file(s) for Firefox profile: ${e}`),i}function Xs(r,e){return r===null||!(r>0)?"Infinity":new Date(e>=16?r:r*1e3)}function Ys(r,e,t=Date.now()){if(r===null)return false;let o=e>=16?t:Math.floor(t/1e3);return r>o}var sr=class extends X{constructor(e,t){super("FirefoxCookieQueryStrategy","Firefox"),this.lockHandler=new Y(this.logger,"Firefox"),e!==void 0&&(this.profileName=e),t!==void 0&&(this.container=t);}async createCookieQueryConfig(e,t,o){let{CookieQueryBuilder:n}=await Promise.resolve().then(()=>(ut(),co)),i=new n("firefox"),s;this.container!==void 0&&(s=uo(this.container,o));let a=i.buildSelectQuery({name:e,domain:t,browser:"firefox",includeExpired:true,...s!==void 0&&{container:s}});return {file:o,sql:a.sql,params:a.params,rowTransform:(l,u)=>{let f=lo(l.originAttributes);return {name:l.name,value:l.value,domain:l.domain,expiry:Xs(l.expiry,u),meta:{file:o,browser:"Firefox",decrypted:false,...f!==void 0&&{containerId:f}}}}}}async handleCookieExtractionError(e,t,o,n,i){let s=await zt(),a=await this.lockHandler.handleBrowserConflict(e,t,s,o!==true);return a.resolved?{retryAfterClose:true,shouldRelaunch:a.shouldRelaunch}:(this.logExtractError(e,t,n,i),{retryAfterClose:false,shouldRelaunch:false})}logExtractError(e,t,o,n){this.logger.debug(`Error reading Firefox cookie file ${t}`,{error:y(e),file:t,name:o,domain:n});}async performRetryAfterClose(e,t){this.logger.info("Retrying Firefox cookie extraction after browser close...");try{let o=await this.executeQueryWithNewUtilities(e);return this.logger.success("Successfully extracted cookies after closing Firefox"),t&&await this.lockHandler.relaunchBrowser(),o}catch(o){return this.logger.error("Failed to extract cookies even after closing Firefox",{error:o instanceof Error?o.message:String(o),file:e.file}),t&&await this.lockHandler.relaunchBrowser(),[]}}async processCookieFile(e,t,o,n){let i=await this.createCookieQueryConfig(t,o,e);try{return await this.executeQueryWithNewUtilities(i)}catch(s){let a=await this.handleCookieExtractionError(s,e,n,t,o);return a.retryAfterClose?this.performRetryAfterClose(i,a.shouldRelaunch):[]}}async executeQueryWithNewUtilities(e){let t=be({retryAttempts:1,retryDelay:0,queryTimeout:100,enableMonitoring:true}),o=$e();return t.executeQuery(e.file,n=>{let s=n.prepare("PRAGMA user_version").get()?.user_version??0,a=o.executeQuery(n,e.sql,e.params,e.file),l=Date.now();return a.filter(u=>Ys(u.expiry,s,l)).map(u=>e.rowTransform(u,s))},e.sql)}async executeQuery(e,t,o,n){let i=o??Js(this.logger,this.profileName),s=Array.isArray(i)?i:[i];if(s.length===0)return this.logger.debug("No Firefox cookie files to query"),[];let a=[];for(let l of s){let u=await this.processCookieFile(l,e,t,n);a.push(...u);}return a}};$();function Zs(r){let e=r.split("."),t=[];t.push({name:"%",domain:r});for(let o=1;o<e.length-1;o++){let n=e.slice(o).join(".");t.push({name:"%",domain:n});}return t}function ft(r){if(!r.includes("://"))try{return ft(`https://${r}`)}catch{return [{name:"%",domain:r}]}try{let e=new URL(r);return Zs(e.hostname)}catch{return [{name:"%",domain:r}]}}var ar={string:["browser","profile","container","url","domain","name","output","store","jwt-secret"],boolean:["help","version","verbose","dump","dump-grouped","render","render-grouped","force","include-expired","include-all","list-profiles","detect-jwt","jwt-only"],alias:{b:"browser",p:"profile",c:"container",u:"url",d:"dump",D:"domain",n:"name",h:"help",v:"verbose",f:"force",G:"dump-grouped",r:"render",R:"render-grouped",j:"detect-jwt"}};function ra(){let r=[];for(let e of ar.string)r.push(`--${e}`);for(let e of ar.boolean)r.push(`--${e}`);for(let[e,t]of Object.entries(ar.alias))r.push(`-${e}`),r.includes(`--${t}`)||r.push(`--${t}`);return r}var ta=ra();function mo(r){let e=ea__default.default(r,{...ar,unknown:n=>{if(!n.startsWith("-"))return true;if(!ta.some(s=>n.startsWith(s)))throw new Error(`Unknown option: ${n}`);return true}}),{_:t,...o}=e;return {values:o,positionals:t}}E();ge();E();ge();var go=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/;function ho(r){return r==null||typeof r!="string"?false:go.test(r)}function oa(r){return go.test(r)?{isValid:true}:{isValid:false,error:"Invalid JWT format - must be three dot-separated base64url-encoded strings"}}function na(r,e){try{return ct__default.default.verify(r,e),null}catch(t){let o=t instanceof Error?t.message:"Unknown verification error";return c.debug(`JWT verification failed: ${o}`),{isValid:false,error:o}}}function ia(r){let e=r.exp;if(e===void 0)return {isValid:true,decodedPayload:r};let t=Math.floor(Date.now()/1e3),o={isValid:t<=e,decodedPayload:r};return t>e&&(o.error="Token has expired"),o}function sa(r,e){c.debug(r,e);}function aa(r){return r==null?{isValid:false,error:"Token is null or undefined"}:typeof r!="string"?{isValid:false,error:"Token is not a string"}:r.trim().length===0?{isValid:false,error:"Token is empty or whitespace"}:null}function la(r){let e=ct__default.default.decode(r,{complete:true});return sa("Decoded JWT token:",e??"Failed to decode"),e?{...ia(e.payload),header:e.header}:{isValid:false,error:"Failed to decode token"}}function yo(r,e){try{if(r===void 0){let n="Token is undefined";return c.debug(`JWT validation error: ${n}`),{isValid:!1,error:n}}let t=aa(r);if(t!==null)return t;let o=oa(r);if(!o.isValid)return o;if(e!==void 0){let n=na(r,e);if(n!==null)return n}return la(r)}catch(t){let o=y(t)||"Unknown error during JWT validation";return c.debug(`JWT validation error: ${o}`),{isValid:false,error:o}}}function xo(r){try{let e=ct__default.default.decode(r,{complete:!0});return e?{payload:e.payload,header:e.header}:null}catch{return null}}P();var pt=w("JwtCookieDetector");function mt(r,e={}){let{validateSignature:t=false,secretKey:o,checkExpiration:n=true,decodeClaims:i=true,verbose:s=false}=e;return r.map(a=>{if(typeof a.value!="string"||!ho(a.value))return a;s&&pt.info(`Detected JWT in cookie: ${a.name}`);let l={...a.meta,isJwt:true};if(t&&o){let u=yo(a.value,o);l.jwtValidation=u,u.isValid&&u.decodedPayload?wo(l,u.decodedPayload,n,s):s&&pt.warn(`JWT validation failed for cookie ${a.name}: ${u.error}`);}else if(i){let u=xo(a.value);u&&(l.jwtValidation={isValid:true,decodedPayload:u.payload,header:u.header},wo(l,u.payload,n,s));}return {...a,meta:l}})}function wo(r,e,t,o){if(r.jwtPayload=e,e.sub&&(r.jwtSubject=e.sub),e.iss&&typeof e.iss=="string"&&(r.jwtIssuer=e.iss),e.exp&&(r.jwtExpiry=new Date(e.exp*1e3),t)){let n=new Date;r.jwtExpiry<n&&(r.jwtValidation={...r.jwtValidation,isValid:false,error:"JWT has expired"},o&&pt.warn(`JWT in cookie has expired (exp: ${r.jwtExpiry.toISOString()})`));}}function bo(r,e={}){return mt(r,e).filter(o=>o.meta?.isJwt&&(!o.meta.jwtValidation||o.meta.jwtValidation.isValid))}E();P();var ua=typeof global=="object"&&global&&global.Object===Object&&global,lr=ua;var fa=typeof self=="object"&&self&&self.Object===Object&&self,ca=lr||fa||Function("return this")(),T=ca;var pa=T.Symbol,N=pa;var Co=Object.prototype,ma=Co.hasOwnProperty,da=Co.toString,qe=N?N.toStringTag:void 0;function ga(r){var e=ma.call(r,qe),t=r[qe];try{r[qe]=void 0;var o=!0;}catch{}var n=da.call(r);return o&&(e?r[qe]=t:delete r[qe]),n}var vo=ga;var ha=Object.prototype,ya=ha.toString;function xa(r){return ya.call(r)}var So=xa;var wa="[object Null]",ba="[object Undefined]",ko=N?N.toStringTag:void 0;function Ca(r){return r==null?r===void 0?ba:wa:ko&&ko in Object(r)?vo(r):So(r)}var q=Ca;function va(r){return r!=null&&typeof r=="object"}var Q=va;var Sa="[object Symbol]";function ka(r){return typeof r=="symbol"||Q(r)&&q(r)==Sa}var Ce=ka;function Ea(r,e){for(var t=-1,o=r==null?0:r.length,n=Array(o);++t<o;)n[t]=e(r[t],t,r);return n}var Eo=Ea;var Pa=Array.isArray,B=Pa;var Po=N?N.prototype:void 0,Ao=Po?Po.toString:void 0;function Bo(r){if(typeof r=="string")return r;if(B(r))return Eo(r,Bo)+"";if(Ce(r))return Ao?Ao.call(r):"";var e=r+"";return e=="0"&&1/r==-Infinity?"-0":e}var Oo=Bo;function Ba(r){var e=typeof r;return r!=null&&(e=="object"||e=="function")}var ve=Ba;function Oa(r){return r}var To=Oa;var Ta="[object AsyncFunction]",Ra="[object Function]",Da="[object GeneratorFunction]",_a="[object Proxy]";function Fa(r){if(!ve(r))return false;var e=q(r);return e==Ra||e==Da||e==Ta||e==_a}var ur=Fa;var Ia=T["__core-js_shared__"],fr=Ia;var Ro=(function(){var r=/[^.]+$/.exec(fr&&fr.keys&&fr.keys.IE_PROTO||"");return r?"Symbol(src)_1."+r:""})();function Ma(r){return !!Ro&&Ro in r}var Do=Ma;var La=Function.prototype,Na=La.toString;function $a(r){if(r!=null){try{return Na.call(r)}catch{}try{return r+""}catch{}}return ""}var V=$a;var qa=/[\\^$.*+?()[\]{}|]/g,Qa=/^\[object .+?Constructor\]$/,ja=Function.prototype,Ha=Object.prototype,Ua=ja.toString,Ga=Ha.hasOwnProperty,Wa=RegExp("^"+Ua.call(Ga).replace(qa,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function za(r){if(!ve(r)||Do(r))return false;var e=ur(r)?Wa:Qa;return e.test(V(r))}var _o=za;function Va(r,e){return r?.[e]}var Fo=Va;function Ja(r,e){var t=Fo(r,e);return _o(t)?t:void 0}var I=Ja;var Ka=I(T,"WeakMap"),cr=Ka;var Xa=(function(){try{var r=I(Object,"defineProperty");return r({},"",{}),r}catch{}})(),dt=Xa;var Ya=9007199254740991,Za=/^(?:0|[1-9]\d*)$/;function el(r,e){var t=typeof r;return e=e??Ya,!!e&&(t=="number"||t!="symbol"&&Za.test(r))&&r>-1&&r%1==0&&r<e}var pr=el;function rl(r,e,t){e=="__proto__"&&dt?dt(r,e,{configurable:true,enumerable:true,value:t,writable:true}):r[e]=t;}var Io=rl;function tl(r,e){return r===e||r!==r&&e!==e}var mr=tl;var ol=9007199254740991;function nl(r){return typeof r=="number"&&r>-1&&r%1==0&&r<=ol}var Se=nl;function il(r){return r!=null&&Se(r.length)&&!ur(r)}var dr=il;var sl=Object.prototype;function al(r){var e=r&&r.constructor,t=typeof e=="function"&&e.prototype||sl;return r===t}var Mo=al;function ll(r,e){for(var t=-1,o=Array(r);++t<r;)o[t]=e(t);return o}var Lo=ll;var ul="[object Arguments]";function fl(r){return Q(r)&&q(r)==ul}var gt=fl;var No=Object.prototype,cl=No.hasOwnProperty,pl=No.propertyIsEnumerable,ml=gt((function(){return arguments})())?gt:function(r){return Q(r)&&cl.call(r,"callee")&&!pl.call(r,"callee")},gr=ml;function dl(){return false}var $o=dl;var jo=typeof exports=="object"&&exports&&!exports.nodeType&&exports,qo=jo&&typeof module=="object"&&module&&!module.nodeType&&module,gl=qo&&qo.exports===jo,Qo=gl?T.Buffer:void 0,hl=Qo?Qo.isBuffer:void 0,yl=hl||$o,Qe=yl;var xl="[object Arguments]",wl="[object Array]",bl="[object Boolean]",Cl="[object Date]",vl="[object Error]",Sl="[object Function]",kl="[object Map]",El="[object Number]",Pl="[object Object]",Al="[object RegExp]",Bl="[object Set]",Ol="[object String]",Tl="[object WeakMap]",Rl="[object ArrayBuffer]",Dl="[object DataView]",_l="[object Float32Array]",Fl="[object Float64Array]",Il="[object Int8Array]",Ml="[object Int16Array]",Ll="[object Int32Array]",Nl="[object Uint8Array]",$l="[object Uint8ClampedArray]",ql="[object Uint16Array]",Ql="[object Uint32Array]",C={};C[_l]=C[Fl]=C[Il]=C[Ml]=C[Ll]=C[Nl]=C[$l]=C[ql]=C[Ql]=true;C[xl]=C[wl]=C[Rl]=C[bl]=C[Dl]=C[Cl]=C[vl]=C[Sl]=C[kl]=C[El]=C[Pl]=C[Al]=C[Bl]=C[Ol]=C[Tl]=false;function jl(r){return Q(r)&&Se(r.length)&&!!C[q(r)]}var Ho=jl;function Hl(r){return function(e){return r(e)}}var Uo=Hl;var Go=typeof exports=="object"&&exports&&!exports.nodeType&&exports,je=Go&&typeof module=="object"&&module&&!module.nodeType&&module,Ul=je&&je.exports===Go,ht=Ul&&lr.process,Gl=(function(){try{var r=je&&je.require&&je.require("util").types;return r||ht&&ht.binding&&ht.binding("util")}catch{}})(),yt=Gl;var Wo=yt&&yt.isTypedArray,Wl=Wo?Uo(Wo):Ho,hr=Wl;var zl=Object.prototype,Vl=zl.hasOwnProperty;function Jl(r,e){var t=B(r),o=!t&&gr(r),n=!t&&!o&&Qe(r),i=!t&&!o&&!n&&hr(r),s=t||o||n||i,a=s?Lo(r.length,String):[],l=a.length;for(var u in r)(e||Vl.call(r,u))&&!(s&&(u=="length"||n&&(u=="offset"||u=="parent")||i&&(u=="buffer"||u=="byteLength"||u=="byteOffset")||pr(u,l)))&&a.push(u);return a}var zo=Jl;function Kl(r,e){return function(t){return r(e(t))}}var Vo=Kl;var Xl=Vo(Object.keys,Object),Jo=Xl;var Yl=Object.prototype,Zl=Yl.hasOwnProperty;function eu(r){if(!Mo(r))return Jo(r);var e=[];for(var t in Object(r))Zl.call(r,t)&&t!="constructor"&&e.push(t);return e}var Ko=eu;function ru(r){return dr(r)?zo(r):Ko(r)}var ke=ru;var tu=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ou=/^\w*$/;function nu(r,e){if(B(r))return false;var t=typeof r;return t=="number"||t=="symbol"||t=="boolean"||r==null||Ce(r)?true:ou.test(r)||!tu.test(r)||e!=null&&r in Object(e)}var Ee=nu;var iu=I(Object,"create"),J=iu;function su(){this.__data__=J?J(null):{},this.size=0;}var Xo=su;function au(r){var e=this.has(r)&&delete this.__data__[r];return this.size-=e?1:0,e}var Yo=au;var lu="__lodash_hash_undefined__",uu=Object.prototype,fu=uu.hasOwnProperty;function cu(r){var e=this.__data__;if(J){var t=e[r];return t===lu?void 0:t}return fu.call(e,r)?e[r]:void 0}var Zo=cu;var pu=Object.prototype,mu=pu.hasOwnProperty;function du(r){var e=this.__data__;return J?e[r]!==void 0:mu.call(e,r)}var en=du;var gu="__lodash_hash_undefined__";function hu(r,e){var t=this.__data__;return this.size+=this.has(r)?0:1,t[r]=J&&e===void 0?gu:e,this}var rn=hu;function Pe(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var o=r[e];this.set(o[0],o[1]);}}Pe.prototype.clear=Xo;Pe.prototype.delete=Yo;Pe.prototype.get=Zo;Pe.prototype.has=en;Pe.prototype.set=rn;var xt=Pe;function yu(){this.__data__=[],this.size=0;}var tn=yu;function xu(r,e){for(var t=r.length;t--;)if(mr(r[t][0],e))return t;return -1}var ee=xu;var wu=Array.prototype,bu=wu.splice;function Cu(r){var e=this.__data__,t=ee(e,r);if(t<0)return false;var o=e.length-1;return t==o?e.pop():bu.call(e,t,1),--this.size,true}var on=Cu;function vu(r){var e=this.__data__,t=ee(e,r);return t<0?void 0:e[t][1]}var nn=vu;function Su(r){return ee(this.__data__,r)>-1}var sn=Su;function ku(r,e){var t=this.__data__,o=ee(t,r);return o<0?(++this.size,t.push([r,e])):t[o][1]=e,this}var an=ku;function Ae(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var o=r[e];this.set(o[0],o[1]);}}Ae.prototype.clear=tn;Ae.prototype.delete=on;Ae.prototype.get=nn;Ae.prototype.has=sn;Ae.prototype.set=an;var re=Ae;var Eu=I(T,"Map"),te=Eu;function Pu(){this.size=0,this.__data__={hash:new xt,map:new(te||re),string:new xt};}var ln=Pu;function Au(r){var e=typeof r;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?r!=="__proto__":r===null}var un=Au;function Bu(r,e){var t=r.__data__;return un(e)?t[typeof e=="string"?"string":"hash"]:t.map}var oe=Bu;function Ou(r){var e=oe(this,r).delete(r);return this.size-=e?1:0,e}var fn=Ou;function Tu(r){return oe(this,r).get(r)}var cn=Tu;function Ru(r){return oe(this,r).has(r)}var pn=Ru;function Du(r,e){var t=oe(this,r),o=t.size;return t.set(r,e),this.size+=t.size==o?0:1,this}var mn=Du;function Be(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var o=r[e];this.set(o[0],o[1]);}}Be.prototype.clear=ln;Be.prototype.delete=fn;Be.prototype.get=cn;Be.prototype.has=pn;Be.prototype.set=mn;var ue=Be;var _u="Expected a function";function wt(r,e){if(typeof r!="function"||e!=null&&typeof e!="function")throw new TypeError(_u);var t=function(){var o=arguments,n=e?e.apply(this,o):o[0],i=t.cache;if(i.has(n))return i.get(n);var s=r.apply(this,o);return t.cache=i.set(n,s)||i,s};return t.cache=new(wt.Cache||ue),t}wt.Cache=ue;var dn=wt;var Fu=500;function Iu(r){var e=dn(r,function(o){return t.size===Fu&&t.clear(),o}),t=e.cache;return e}var gn=Iu;var Mu=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Lu=/\\(\\)?/g,Nu=gn(function(r){var e=[];return r.charCodeAt(0)===46&&e.push(""),r.replace(Mu,function(t,o,n,i){e.push(n?i.replace(Lu,"$1"):o||t);}),e}),hn=Nu;function $u(r){return r==null?"":Oo(r)}var yn=$u;function qu(r,e){return B(r)?r:Ee(r,e)?[r]:hn(yn(r))}var yr=qu;function ju(r){if(typeof r=="string"||Ce(r))return r;var e=r+"";return e=="0"&&1/r==-Infinity?"-0":e}var ne=ju;function Hu(r,e){e=yr(e,r);for(var t=0,o=e.length;r!=null&&t<o;)r=r[ne(e[t++])];return t&&t==o?r:void 0}var xr=Hu;function Uu(r,e,t){var o=r==null?void 0:xr(r,e);return o===void 0?t:o}var xn=Uu;function Gu(r,e){for(var t=-1,o=e.length,n=r.length;++t<o;)r[n+t]=e[t];return r}var wn=Gu;function Wu(){this.__data__=new re,this.size=0;}var bn=Wu;function zu(r){var e=this.__data__,t=e.delete(r);return this.size=e.size,t}var Cn=zu;function Vu(r){return this.__data__.get(r)}var vn=Vu;function Ju(r){return this.__data__.has(r)}var Sn=Ju;var Ku=200;function Xu(r,e){var t=this.__data__;if(t instanceof re){var o=t.__data__;if(!te||o.length<Ku-1)return o.push([r,e]),this.size=++t.size,this;t=this.__data__=new ue(o);}return t.set(r,e),this.size=t.size,this}var kn=Xu;function Oe(r){var e=this.__data__=new re(r);this.size=e.size;}Oe.prototype.clear=bn;Oe.prototype.delete=Cn;Oe.prototype.get=vn;Oe.prototype.has=Sn;Oe.prototype.set=kn;var Te=Oe;function Yu(r,e){for(var t=-1,o=r==null?0:r.length,n=0,i=[];++t<o;){var s=r[t];e(s,t,r)&&(i[n++]=s);}return i}var En=Yu;function Zu(){return []}var Pn=Zu;var ef=Object.prototype,rf=ef.propertyIsEnumerable,An=Object.getOwnPropertySymbols,tf=An?function(r){return r==null?[]:(r=Object(r),En(An(r),function(e){return rf.call(r,e)}))}:Pn,Bn=tf;function of(r,e,t){var o=e(r);return B(r)?o:wn(o,t(r))}var On=of;function nf(r){return On(r,ke,Bn)}var bt=nf;var sf=I(T,"DataView"),wr=sf;var af=I(T,"Promise"),br=af;var lf=I(T,"Set"),Cr=lf;var Tn="[object Map]",uf="[object Object]",Rn="[object Promise]",Dn="[object Set]",_n="[object WeakMap]",Fn="[object DataView]",ff=V(wr),cf=V(te),pf=V(br),mf=V(Cr),df=V(cr),fe=q;(wr&&fe(new wr(new ArrayBuffer(1)))!=Fn||te&&fe(new te)!=Tn||br&&fe(br.resolve())!=Rn||Cr&&fe(new Cr)!=Dn||cr&&fe(new cr)!=_n)&&(fe=function(r){var e=q(r),t=e==uf?r.constructor:void 0,o=t?V(t):"";if(o)switch(o){case ff:return Fn;case cf:return Tn;case pf:return Rn;case mf:return Dn;case df:return _n}return e});var Ct=fe;var gf=T.Uint8Array,vt=gf;var hf="__lodash_hash_undefined__";function yf(r){return this.__data__.set(r,hf),this}var In=yf;function xf(r){return this.__data__.has(r)}var Mn=xf;function vr(r){var e=-1,t=r==null?0:r.length;for(this.__data__=new ue;++e<t;)this.add(r[e]);}vr.prototype.add=vr.prototype.push=In;vr.prototype.has=Mn;var Ln=vr;function wf(r,e){for(var t=-1,o=r==null?0:r.length;++t<o;)if(e(r[t],t,r))return true;return false}var Nn=wf;function bf(r,e){return r.has(e)}var $n=bf;var Cf=1,vf=2;function Sf(r,e,t,o,n,i){var s=t&Cf,a=r.length,l=e.length;if(a!=l&&!(s&&l>a))return false;var u=i.get(r),f=i.get(e);if(u&&f)return u==e&&f==r;var m=-1,x=true,h=t&vf?new Ln:void 0;for(i.set(r,e),i.set(e,r);++m<a;){var k=r[m],v=e[m];if(o)var K=s?o(v,k,m,e,r,i):o(k,v,m,r,e,i);if(K!==void 0){if(K)continue;x=false;break}if(h){if(!Nn(e,function(ae,le){if(!$n(h,le)&&(k===ae||n(k,ae,t,o,i)))return h.push(le)})){x=false;break}}else if(!(k===v||n(k,v,t,o,i))){x=false;break}}return i.delete(r),i.delete(e),x}var Sr=Sf;function kf(r){var e=-1,t=Array(r.size);return r.forEach(function(o,n){t[++e]=[n,o];}),t}var qn=kf;function Ef(r){var e=-1,t=Array(r.size);return r.forEach(function(o){t[++e]=o;}),t}var Qn=Ef;var Pf=1,Af=2,Bf="[object Boolean]",Of="[object Date]",Tf="[object Error]",Rf="[object Map]",Df="[object Number]",_f="[object RegExp]",Ff="[object Set]",If="[object String]",Mf="[object Symbol]",Lf="[object ArrayBuffer]",Nf="[object DataView]",jn=N?N.prototype:void 0,St=jn?jn.valueOf:void 0;function $f(r,e,t,o,n,i,s){switch(t){case Nf:if(r.byteLength!=e.byteLength||r.byteOffset!=e.byteOffset)return false;r=r.buffer,e=e.buffer;case Lf:return !(r.byteLength!=e.byteLength||!i(new vt(r),new vt(e)));case Bf:case Of:case Df:return mr(+r,+e);case Tf:return r.name==e.name&&r.message==e.message;case _f:case If:return r==e+"";case Rf:var a=qn;case Ff:var l=o&Pf;if(a||(a=Qn),r.size!=e.size&&!l)return false;var u=s.get(r);if(u)return u==e;o|=Af,s.set(r,e);var f=Sr(a(r),a(e),o,n,i,s);return s.delete(r),f;case Mf:if(St)return St.call(r)==St.call(e)}return false}var Hn=$f;var qf=1,Qf=Object.prototype,jf=Qf.hasOwnProperty;function Hf(r,e,t,o,n,i){var s=t&qf,a=bt(r),l=a.length,u=bt(e),f=u.length;if(l!=f&&!s)return false;for(var m=l;m--;){var x=a[m];if(!(s?x in e:jf.call(e,x)))return false}var h=i.get(r),k=i.get(e);if(h&&k)return h==e&&k==r;var v=true;i.set(r,e),i.set(e,r);for(var K=s;++m<l;){x=a[m];var ae=r[x],le=e[x];if(o)var It=s?o(le,ae,x,e,r,i):o(ae,le,x,r,e,i);if(!(It===void 0?ae===le||n(ae,le,t,o,i):It)){v=false;break}K||(K=x=="constructor");}if(v&&!K){var ze=r.constructor,Ve=e.constructor;ze!=Ve&&"constructor"in r&&"constructor"in e&&!(typeof ze=="function"&&ze instanceof ze&&typeof Ve=="function"&&Ve instanceof Ve)&&(v=false);}return i.delete(r),i.delete(e),v}var Un=Hf;var Uf=1,Gn="[object Arguments]",Wn="[object Array]",kr="[object Object]",Gf=Object.prototype,zn=Gf.hasOwnProperty;function Wf(r,e,t,o,n,i){var s=B(r),a=B(e),l=s?Wn:Ct(r),u=a?Wn:Ct(e);l=l==Gn?kr:l,u=u==Gn?kr:u;var f=l==kr,m=u==kr,x=l==u;if(x&&Qe(r)){if(!Qe(e))return false;s=true,f=false;}if(x&&!f)return i||(i=new Te),s||hr(r)?Sr(r,e,t,o,n,i):Hn(r,e,l,t,o,n,i);if(!(t&Uf)){var h=f&&zn.call(r,"__wrapped__"),k=m&&zn.call(e,"__wrapped__");if(h||k){var v=h?r.value():r,K=k?e.value():e;return i||(i=new Te),n(v,K,t,o,i)}}return x?(i||(i=new Te),Un(r,e,t,o,n,i)):false}var Vn=Wf;function Jn(r,e,t,o,n){return r===e?true:r==null||e==null||!Q(r)&&!Q(e)?r!==r&&e!==e:Vn(r,e,t,o,Jn,n)}var Er=Jn;var zf=1,Vf=2;function Jf(r,e,t,o){var n=t.length,i=n,s=!o;if(r==null)return !i;for(r=Object(r);n--;){var a=t[n];if(s&&a[2]?a[1]!==r[a[0]]:!(a[0]in r))return false}for(;++n<i;){a=t[n];var l=a[0],u=r[l],f=a[1];if(s&&a[2]){if(u===void 0&&!(l in r))return false}else {var m=new Te;if(o)var x=o(u,f,l,r,e,m);if(!(x===void 0?Er(f,u,zf|Vf,o,m):x))return false}}return true}var Kn=Jf;function Kf(r){return r===r&&!ve(r)}var Pr=Kf;function Xf(r){for(var e=ke(r),t=e.length;t--;){var o=e[t],n=r[o];e[t]=[o,n,Pr(n)];}return e}var Xn=Xf;function Yf(r,e){return function(t){return t==null?false:t[r]===e&&(e!==void 0||r in Object(t))}}var Ar=Yf;function Zf(r){var e=Xn(r);return e.length==1&&e[0][2]?Ar(e[0][0],e[0][1]):function(t){return t===r||Kn(t,r,e)}}var Yn=Zf;function ec(r,e){return r!=null&&e in Object(r)}var Zn=ec;function rc(r,e,t){e=yr(e,r);for(var o=-1,n=e.length,i=false;++o<n;){var s=ne(e[o]);if(!(i=r!=null&&t(r,s)))break;r=r[s];}return i||++o!=n?i:(n=r==null?0:r.length,!!n&&Se(n)&&pr(s,n)&&(B(r)||gr(r)))}var ei=rc;function tc(r,e){return r!=null&&ei(r,e,Zn)}var ri=tc;var oc=1,nc=2;function ic(r,e){return Ee(r)&&Pr(e)?Ar(ne(r),e):function(t){var o=xn(t,r);return o===void 0&&o===e?ri(t,r):Er(e,o,oc|nc)}}var ti=ic;function sc(r){return function(e){return e?.[r]}}var oi=sc;function ac(r){return function(e){return xr(e,r)}}var ni=ac;function lc(r){return Ee(r)?oi(ne(r)):ni(r)}var ii=lc;function uc(r){return typeof r=="function"?r:r==null?To:typeof r=="object"?B(r)?ti(r[0],r[1]):Yn(r):ii(r)}var si=uc;function fc(r,e,t,o){for(var n=-1,i=r==null?0:r.length;++n<i;){var s=r[n];e(o,s,t(s),r);}return o}var ai=fc;function cc(r){return function(e,t,o){for(var n=-1,i=Object(e),s=o(e),a=s.length;a--;){var l=s[r?a:++n];if(t(i[l],l,i)===false)break}return e}}var li=cc;var pc=li(),ui=pc;function mc(r,e){return r&&ui(r,e,ke)}var fi=mc;function dc(r,e){return function(t,o){if(t==null)return t;if(!dr(t))return r(t,o);for(var n=t.length,i=e?n:-1,s=Object(t);(e?i--:++i<n)&&o(s[i],i,s)!==false;);return t}}var ci=dc;var gc=ci(fi),pi=gc;function hc(r,e,t,o){return pi(r,function(n,i,s){e(o,n,t(n),s);}),o}var mi=hc;function yc(r,e){return function(t,o){var n=B(t)?ai:mi,i=e?e():{};return n(t,r,si(o),i)}}var di=yc;var xc=Object.prototype,wc=xc.hasOwnProperty,bc=di(function(r,e,t){wc.call(r,t)?r[t].push(e):Io(r,t,[e]);}),He=bc;function kt(r,e={}){let{format:t="merged",showFilePaths:o=true,separator:n="; "}=e;if(r.length===0)return t==="merged"?"":[];if(t==="merged")return r.map(s=>`${s.name}=${s.value}`).join(n);let i=He(r,s=>s.meta?.file??"unknown");return Object.entries(i).map(([s,a])=>{let l=a.map(u=>`${u.name}=${u.value}`).join(n);return o?`${s}: ${l}`:l})}ge();function Cc(r){if(r.output!==void 0&&r.output!=="json")throw new Error(`Invalid output format: '${r.output}'. Valid formats are: json`)}function vc(r,e={}){if(Cc(e),e.output==="json")return r.length===0?"[]":JSON.stringify(r,null,2);if(e["dump-grouped"]===true||e.D===true){if(r.length===0)return "{}";let o=He(r,n=>n.meta?.file??"unknown");return JSON.stringify(o,null,2)}if(e["render-grouped"]===true||e.R===true){if(r.length===0)return "";let o=kt(r,{format:"grouped"});return Array.isArray(o)?o.join(`
|
|
57
|
+
`):o}if(e.render===true||e["render-merged"]===true||e.r===true){if(r.length===0)return "";let o=kt(r,{format:"merged"});return Array.isArray(o)?o.join(`
|
|
58
|
+
`):o}if(e.dump===true||e.d===true)return r.length===0?"":JSON.stringify(r,null,2);if(r.length===0)return "";let t=new Set;for(let o of r){let n=o.value;typeof n=="string"&&n.length>0&&t.add(n);}return Array.from(t).join(`
|
|
59
|
+
`)}function gi(r,e={}){let t=vc(r,e);t.length>0&&c.log(t);}var Br=class{constructor(e){this.strategy=e;}async queryCookies(e,t){return this.strategy.queryCookies(e.name,e.domain,t?.store,t?.force)}};P();D();function hi(r){let e=os.homedir();if(!e)throw new Error("Unable to determine user home directory");ye();let t=S(),n={chrome:{windows:path.join(e,"AppData","Local","Google","Chrome","User Data"),macos:path.join(e,"Library","Application Support","Google","Chrome"),linux:path.join(e,".config","google-chrome")},chromium:{windows:path.join(e,"AppData","Local","Chromium","User Data"),macos:path.join(e,"Library","Application Support","Chromium"),linux:path.join(e,".config","chromium")},brave:{windows:path.join(e,"AppData","Local","BraveSoftware","Brave-Browser","User Data"),macos:path.join(e,"Library","Application Support","BraveSoftware","Brave-Browser"),linux:path.join(e,".config","BraveSoftware","Brave-Browser")},edge:{windows:path.join(e,"AppData","Local","Microsoft","Edge","User Data"),macos:path.join(e,"Library","Application Support","Microsoft Edge"),linux:path.join(e,".config","microsoft-edge")},arc:{windows:path.join(e,"AppData","Local","Arc","User Data"),macos:path.join(e,"Library","Application Support","Arc","User Data"),linux:path.join(e,".config","arc")},opera:{windows:path.join(e,"AppData","Roaming","Opera Software","Opera Stable"),macos:path.join(e,"Library","Application Support","com.operasoftware.Opera"),linux:path.join(e,".config","opera")},"opera-gx":{windows:path.join(e,"AppData","Roaming","Opera Software","Opera GX Stable"),macos:path.join(e,"Library","Application Support","com.operasoftware.OperaGX"),linux:path.join(e,".config","opera-gx")},vivaldi:{windows:path.join(e,"AppData","Local","Vivaldi","User Data"),macos:path.join(e,"Library","Application Support","Vivaldi"),linux:path.join(e,".config","vivaldi")},whale:{windows:path.join(e,"AppData","Local","Naver","Naver Whale","User Data"),macos:path.join(e,"Library","Application Support","Naver","Whale"),linux:path.join(e,".config","naver-whale")}}[r];switch(t){case "win32":return n.windows;case "darwin":return n.macos;case "linux":return n.linux;default:throw new Error(`Platform ${t} is not supported`)}}$();E();D();function yi(r){if(r==null||typeof r!="number"||Number.isNaN(r))return;if(r<=0)return "Infinity";let e=r/1e6-11644473600;return e<0||e>3250368e4?"Infinity":new Date(e*1e3)}D();var Et=24,Ue=32,xi=32;function wi(r,e,t){let o=Buffer.from("v10");if(!r.subarray(0,3).equals(o))throw new Error("Not a v10 encrypted cookie");let n=r.subarray(3),i=12,s=16;if(n.length<i+s)throw new Error("Invalid v10 cookie: too short");let a=n.subarray(0,i),l=n.subarray(i,n.length-s),u=n.subarray(n.length-s),f=crypto.createDecipheriv("aes-256-gcm",e,a);f.setAuthTag(u);let m=Buffer.concat([f.update(l),f.final()]);return (t??0)>=Et&&m.length>=Ue?m.subarray(Ue).toString("utf8"):m.toString("utf8")}function bi(r){let e=Buffer.from("v10");return r.length>=3&&r.subarray(0,3).equals(e)}function Ci(r,e){let t=new Map;return o=>{let n=e?e(o):o.toString("hex");if(t.has(n)){let s=t.get(n);if(s!==void 0)return s}let i=r(o);return t.set(n,i),i}}var Ac=Ci(r=>r.length>=3&&r[0]===118&&r[1]===49&&r[2]===48?r.slice(3):r,r=>r.toString("hex")),Bc=Ci(r=>{let e=r[r.length-1];return e&&e<=16?r.slice(0,-e):r},r=>r.toString("hex"));function Oc(r){let e=r.match(/([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})/i);if(e?.[1])return e[1];let t=[/([A-Z]{3})$/,/([a-z]{2}_[A-Z]{2})$/,/(\d{3}-\d{7}-\d{7})$/];for(let n of t){let i=r.match(n);if(i?.[1])return i[1]}let o=[/.*?0t(.+)$/,/.*?1e`(.+)$/,/.*?[`'](.+)$/,/[^\x20-\x7E]*([\x20-\x7E]+)$/,/.*?([a-zA-Z0-9_\-.]+)$/];for(let n of o){let s=r.match(n)?.[1]??"";if(s.length>0)return s}return r}var Pt=new Map;async function Tc(r){let e=Pt.get(r);if(e!==void 0)return e;let t=new Promise((o,n)=>{crypto.pbkdf2(r,"saltysalt",1003,16,"sha1",(i,s)=>{if(i){n(new Error(`Failed to derive key: ${i.message}`));return}o(s);});}).catch(o=>{throw Pt.delete(r),o});return Pt.set(r,t),t}function Rc(r){return Buffer.isBuffer(r)?r:typeof r!="string"?null:Buffer.from(r,"latin1")}async function vi(r,e,t){if(L()&&bi(r)&&r.length>=31){let i=Rc(e);if(i?.length===xi)return wi(r,i,t)}if(H()&&!r.slice(0,3).toString().match(/^v\d\d$/))return Promise.resolve(r.toString("utf8"));if(typeof e!="string")throw new Error("password must be a string");if(!Buffer.isBuffer(r))throw new Error("encryptedData must be a Buffer");let o=await Tc(e),n=Ac(r);if(n.length%16!==0)throw new Error("Encrypted data length is not a multiple of 16");try{let i=Buffer.alloc(16," "),s=crypto.createDecipheriv("aes-128-cbc",o,i);s.setAutoPadding(!1);let a=s.update(n);try{s.final();}catch(m){throw new Error(`Failed to finalize decryption: ${m.message}`)}a=Bc(a);let f=((t??0)>=Et&&a.length>=Ue?a.slice(Ue):a).toString("utf8");return Oc(f)}catch(i){throw i instanceof Error&&i.message.startsWith("Failed to finalize decryption")?i:new Error(`Decryption failed: ${i.message}`)}}D();Fe();var Lc={chrome:"Chrome Safe Storage",chromium:"Chromium Safe Storage",brave:"Brave Safe Storage",edge:"Microsoft Edge Safe Storage",arc:"Arc Safe Storage",opera:"Opera Safe Storage","opera-gx":"Opera Safe Storage",vivaldi:"Vivaldi Safe Storage",whale:"Whale Safe Storage"};async function Nc(r){let e=Lc[r];if(!e)throw new Error(`Unknown browser type: ${r}`);try{let t=`security find-generic-password -w -s "${e}"`;return (await j(t)).stdout.trim()}catch(t){if(r!=="chrome"){let o='security find-generic-password -w -s "Chrome Safe Storage"';try{return (await j(o)).stdout.trim()}catch{}}throw new Error(`Failed to get ${r} password from keychain: ${t}`)}}async function $c(){let{getChromePassword:r}=await Promise.resolve().then(()=>(Pi(),Ei));return r()}async function qc(){let{getChromePassword:r}=await Promise.resolve().then(()=>(Bi(),Ai));return r()}async function Qc(r){switch(ye(),S()){case "darwin":return Nc(r);case "win32":return $c();case "linux":return qc();default:throw new Error(`Platform ${S()} is not supported`)}}var Bt=new Map;function Ot(r="chrome"){let e=Bt.get(r);if(e!==void 0)return e;let t=Qc(r).catch(o=>{throw Bt.delete(r),o});return Bt.set(r,t),t}ut();function Oi(r,e,t,o,n,i,s){return {domain:r,name:e,value:t,expiry:yi(o),meta:{file:n,browser:i,decrypted:s}}}var Ge=class Ge extends X{constructor(e,t,o="chrome"){super(e,"Chrome"),this.browserDisplayName=t,this.browserType=o,this.lockHandler=new Y(this.logger,"Chrome");}get sqlBrowserType(){return nr(this.browserType)?this.browserType:"chrome"}async batchQueryCookies(e){if(!this.isPlatformSupported())return [];let t=this.getCookieFiles();if(t.length===0)return this.logger.debug(`No ${this.browserDisplayName} cookie files found`),[];try{let o=await Ot(this.browserType),n=[];for(let i=0;i<t.length;i+=Ge.MAX_CONCURRENT_PROFILE_READS){let s=t.slice(i,i+Ge.MAX_CONCURRENT_PROFILE_READS),a=await Promise.allSettled(s.map(async l=>this.processBatchFile(l,e,o)));for(let l of a)l.status==="fulfilled"&&n.push(...l.value);}return n}catch(o){return this.logger.error(`Failed to get ${this.browserDisplayName} password for batch query`,{error:this.getErrorMessage(o)}),[]}}async processBatchFile(e,t,o){try{let n=be(),i=$e(),s=new Z(this.sqlBrowserType),a=t.map(h=>({name:h.name,domain:h.domain,browser:this.sqlBrowserType})),l=s.buildBatchSelectQuery(a),u=await n.executeQuery(e,h=>i.executeQuery(h,l.sql,l.params,e).map(v=>({name:v.name,domain:v.domain,value:v.encrypted_value,expiry:v.expiry})),l.description||l.sql),f=await this.getMetaVersion(e),m={file:e,password:o,browser:this.browserDisplayName,metaVersion:f};return (await Promise.allSettled(u.map(async h=>this.processCookie(h,m)))).filter(h=>h.status==="fulfilled").map(h=>h.value)}catch(n){return this.logger.warn(`Error batch processing ${this.browserDisplayName} cookie file ${e}`,{error:this.getErrorMessage(n),file:e,specsCount:t.length}),[]}}getBrowserName(){return this.browserDisplayName}async executeQuery(e,t,o,n){if(!this.isPlatformSupported())return [];let i=this.getCookieFiles(o);if(i.length===0)return this.logger.debug(`No ${this.browserDisplayName} cookie files found`),[];try{let s=await Ot(this.browserType),a=[];for(let l of i){let u=await this.processFileWithRetry(l,e,t,s,n);a.push(...u);}return a}catch(s){return this.logger.error(`Failed to get ${this.browserDisplayName} password`,{error:this.getErrorMessage(s)}),[]}}isPlatformSupported(){return jr()?true:(this.logger.warn("Platform not supported",{platform:S(),supportedPlatforms:["darwin","win32","linux"]}),false)}getCookieFiles(e){let t=e??this.getCookieFilePaths();return Array.isArray(t)?t:[t]}getErrorMessage(e){return y(e)}async processFileWithRetry(e,t,o,n,i){try{return await this.processFile(e,t,o,n)}catch(s){let a=await this.handleFileError(s,e,t,o,i);return a.resolved?this.retryAfterBrowserClose(e,t,o,n,a.shouldRelaunch):[]}}async handleFileError(e,t,o,n,i){let s=await Vt(),a=await this.lockHandler.handleBrowserConflict(e,t,s,i!==true);return a.resolved||this.logger.warn(`Error reading ${this.browserDisplayName} cookie file ${t}`,{error:this.getErrorMessage(e),file:t,name:o,domain:n}),a}async retryAfterBrowserClose(e,t,o,n,i){try{this.logger.info(`Retrying ${this.browserDisplayName} cookie extraction after browser close...`);let s=await this.processFile(e,t,o,n);return this.logger.success(`Successfully extracted cookies after closing ${this.browserDisplayName}`),i&&await this.lockHandler.relaunchBrowser(),s}catch(s){return this.logger.error(`Failed to extract cookies even after closing ${this.browserDisplayName}`,{error:this.getErrorMessage(s),file:e}),i&&await this.lockHandler.relaunchBrowser(),[]}}async processFile(e,t,o,n){try{let i=be(),s=$e(),l=new Z(this.sqlBrowserType).buildSelectQuery({name:t,domain:o,browser:this.sqlBrowserType}),u=await i.executeQuery(e,h=>s.executeQuery(h,l.sql,l.params,e).map(v=>({name:v.name,domain:v.domain,value:v.encrypted_value,expiry:v.expiry})),l.sql),f=await this.getMetaVersion(e),m={file:e,password:n,browser:this.browserDisplayName,metaVersion:f};return (await Promise.allSettled(u.map(async h=>this.processCookie(h,m)))).map(h=>h.status==="fulfilled"?h.value:null).filter(h=>h!==null)}catch(i){return this.logger.error(`Failed to process ${this.browserDisplayName} cookie file`,{error:this.getErrorMessage(i),file:e,name:t,domain:o}),[]}}async getMetaVersion(e){try{let t=be(),n=new Z(this.sqlBrowserType).buildMetaQuery("version"),i=await t.executeQuery(e,s=>s.prepare(n.sql).get(...n.params),"Get meta version");return i?Number.parseInt(i.value,10):0}catch(t){return this.logger.debug("Could not retrieve meta version, defaulting to 0",{error:this.getErrorMessage(t)}),0}}async processCookie(e,t){try{let o=Buffer.isBuffer(e.value)?e.value:Buffer.from(String(e.value)),n=await vi(o,t.password,t.metaVersion);return Oi(e.domain,e.name,n,e.expiry,t.file,t.browser,!0)}catch(o){return this.logger.warn(`Failed to decrypt ${t.browser} cookie`,{error:this.getErrorMessage(o)}),Oi(e.domain,e.name,e.value.toString("utf-8"),e.expiry,t.file,t.browser,false)}}};Ge.MAX_CONCURRENT_PROFILE_READS=5;var Or=Ge;var ce=class extends Or{constructor(e="chrome",t){let o=e.charAt(0).toUpperCase()+e.slice(1);super(`${o}CookieQueryStrategy`,o,e),this.browser=e,t!==void 0&&(this.profileName=t);}getCookieFilePaths(e){if(e!==void 0&&e!=="")return [e];let t;try{let o=hi(this.browser);t=Vs__default.default.sync("./**/Cookies",{cwd:o,absolute:!0}),this.logger.debug(`Found ${t.length} cookie files for ${this.browser}`);}catch(o){return this.logger.warn(`Failed to find ${this.browser} cookie files`,{error:this.getErrorMessage(o)}),[]}return this.profileName?this.filterByProfileName(t):t}filterByProfileName(e){try{if(e.length===0)return this.logger.warn(`No ${this.browser} cookie files found`),[];let t=e[0];if(!t)return [];let o=path.dirname(path.dirname(t)),n=path.join(o,"Local State");if(!A(n))return e;let s=JSON.parse(U(n)).profile?.info_cache||{},a;for(let[f,m]of Object.entries(s))if(m.name?.toLowerCase()===this.profileName?.toLowerCase()){a=f;break}if(!a){for(let f of Object.keys(s))if(f.toLowerCase()===this.profileName?.toLowerCase()){a=f;break}}if(a){let f=e.filter(m=>path.dirname(m).endsWith(a));return f.length===0?this.logger.warn(`No cookie files found for profile: ${this.profileName} (directory: ${a})`):this.logger.debug(`Found ${f.length} cookie file(s) for profile: ${this.profileName}`),f}let l=Object.entries(s).map(([,f])=>f.name).filter(Boolean),u=l.length>0?` Available profiles: ${l.join(", ")}`:"";return this.logger.warn(`No ${this.browser} profile matching "${this.profileName}" found.${u}`),[]}catch(t){return this.logger.warn(`Failed to read ${this.browser} profile info: ${t}`),e}}};var Tr=class extends ce{constructor(e){super("chrome",e);}};E();async function Ti(r,e,t=[]){return r.length===0?t:(await Promise.all(r.map(async n=>{try{return await e(n)}catch{return t}}))).flat()}P();var Rr=class{constructor(e){this.strategies=e;this.logger=w("CompositeCookieQueryStrategy");this.browserName="internal";}handleStrategyError(e,t){this.logger.error("Strategy failed",{...me(e),strategy:t});}async queryCookies(e,t,o,n){try{return this.logger.info("Querying cookies from all strategies",{name:e,domain:t,store:o,force:n,strategyCount:this.strategies.length}),await Ti(this.strategies,async i=>{try{return await i.queryCookies(e,t,o,n)}catch(s){return this.handleStrategyError(s,i),[]}},[])}catch(i){return this.logger.error("Failed to query cookies",{...me(i)}),[]}}};E();D();E();P();D();var Rt=util.promisify(child_process.exec),We=w("SystemPermissions");async function Vc(){try{await Rt('open "x-apple.systempreferences:com.apple.preference.security?Privacy_AllFiles"'),We.info("Opened System Settings > Privacy & Security > Full Disk Access");}catch{try{await Rt('open "x-apple.systempreferences:com.apple.preference.security?Privacy"'),We.info("Opened System Settings > Privacy & Security");}catch{await Rt("open -b com.apple.systempreferences"),We.info("Opened System Settings");}}}function Jc(){let r=process.env.TERM_PROGRAM;return r==="iTerm.app"?"iTerm":r==="Apple_Terminal"?"Terminal":r==="vscode"?"Visual Studio Code":r??"your terminal application"}async function Kc(r,e){let t=Ri__default.default.createInterface({input:process.stdin,output:process.stdout});return new Promise(o=>{console.log(`
|
|
57
60
|
\u26A0\uFE0F ${e} cookie access is blocked by macOS security.
|
|
58
61
|
|
|
59
62
|
To grant access, ${r} needs permission to read ${e} data.
|
|
@@ -63,7 +66,7 @@ Would you like to:
|
|
|
63
66
|
2. Skip ${e} cookies for now
|
|
64
67
|
3. Exit
|
|
65
68
|
|
|
66
|
-
Please enter your choice (1/2/3): `),t.question("",n=>{t.close(),o(n.trim()==="1");});})}async function
|
|
69
|
+
Please enter your choice (1/2/3): `),t.question("",n=>{t.close(),o(n.trim()==="1");});})}async function Dt(r,e){if(!H()||!(R(r,"eperm")||R(r,"operation not permitted")||R(r,"permission denied")||R(r,"authorization denied")))return false;let o=e.appName||Jc();if(We.warn(`${e.browserName} cookie access denied by macOS`,{app:o,error:y(r)}),e.interactive!==false){if(await Kc(o,e.browserName)){await Vc(),console.log(`
|
|
67
70
|
\u2705 System Settings opened to Privacy & Security
|
|
68
71
|
|
|
69
72
|
Please follow these steps:
|
|
@@ -73,14 +76,14 @@ Please follow these steps:
|
|
|
73
76
|
4. You may need to restart ${o} after granting permission
|
|
74
77
|
5. Then run this command again
|
|
75
78
|
|
|
76
|
-
Press Enter when you've completed these steps...`);let i=bi__default.default.createInterface({input:process.stdin,output:process.stdout});return await new Promise(s=>{i.question("",()=>{i.close(),s();});}),true}}else Je.info(`To grant ${e.browserName} access, add ${o} to System Settings > Privacy & Security > Full Disk Access`);return false}async function It(r){try{let{exec:e}=await import('child_process'),{promisify:t}=await import('util');return await t(e)(`cat "${r}" > /dev/null 2>&1`),!0}catch{return false}}S();v();S();v();var $r=zod.z.string().trim().min(1,"Domain cannot be empty").refine(r=>/^\.?[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(r),"Invalid domain format"),qr=zod.z.string().trim().min(1,"Cookie name cannot be empty").refine(r=>r==="%"||/^[!#$%&'()*+\-.:0-9A-Z ^_`a-z|~]+$/.test(r),"Invalid cookie name format - must contain only valid characters (letters, numbers, and certain symbols) or be '%' for wildcard"),Ci=zod.z.string().trim().min(1,"Path cannot be empty").refine(r=>r.startsWith("/"),"Path must start with /").refine(r=>/^\/[!#$%&'()*+,\-./:=@\w~]*$/.test(r),"Invalid path format - must contain only valid URL path characters").default("/"),Si=zod.z.string().trim().transform(r=>xc__default.default(r)).pipe(zod.z.any()),ki=zod.z.object({name:qr,value:Si,domain:$r,path:Ci,expiry:zod.z.number().int(),creation:zod.z.number().int(),flags:zod.z.number().optional(),version:zod.z.number().int().optional(),port:zod.z.number().int().optional(),comment:zod.z.string().optional(),commentURL:zod.z.string().optional()}),bc=zod.z.object({name:qr,domain:$r}).strict(),Cc=zod.z.object({file:zod.z.string().trim().min(1,"File path cannot be empty").optional(),browser:zod.z.string().trim().optional(),decrypted:zod.z.boolean().optional(),secure:zod.z.boolean().optional(),httpOnly:zod.z.boolean().optional(),path:Ci.optional()}).catchall(zod.z.unknown());zod.z.object({domain:$r,name:qr,value:Si,expiry:zod.z.union([zod.z.literal("Infinity"),zod.z.date(),zod.z.number().int().positive("Expiry must be a positive number")]).optional(),meta:Cc.optional()}).strict();zod.z.object({expiry:zod.z.number().int().optional(),domain:$r,name:qr,value:zod.z.union([zod.z.string(),zod.z.instanceof(Buffer)])}).strict();zod.z.object({format:zod.z.enum(["merged","grouped"]).optional(),separator:zod.z.string().optional(),showFilePaths:zod.z.boolean().optional()}).strict();var Sc=zod.z.enum(["Chrome","Firefox","Safari","internal","unknown"]),kc=zod.z.object({browserName:Sc,queryCookies:zod.z.function()}).strict(),vc=zod.z.object({limit:zod.z.number().int().positive().optional(),removeExpired:zod.z.boolean().optional(),includeExpired:zod.z.boolean().optional(),store:zod.z.string().optional(),force:zod.z.boolean().optional()});vc.extend({strategy:kc.optional()});var Ec=zod.z.enum(["chrome","chromium","edge","firefox","opera","brave","arc"]);bc.extend({browser:Ec,exactDomain:zod.z.boolean().optional(),caseSensitive:zod.z.boolean().optional(),limit:zod.z.number().int().positive().optional(),includeExpired:zod.z.boolean().optional()});v();var ne=y("BinaryCodableCookie"),Hr=class{constructor(e){this.version=0;this.url="";this.name="";this.path="";this.value="";this.flags={isSecure:false,isHTTPOnly:false,unknown1:false,unknown2:false};this.expiration=0;this.creation=0;let t={offset:0,buffer:e};this.decode(t);}decodeUrlValue(e){let t=e,o;do{o=t;try{t=decodeURIComponent(t);}catch{return o}}while(t!==o&&t.includes("%"));return t}decodeJwtPayload(e){let t=e.split(".");if(t.length!==3)return null;try{let o=t[1];if(!o)return null;let n=buffer.Buffer.from(o,"base64").toString("utf8"),i=JSON.parse(n);return JSON.stringify(i)}catch{return null}}parseJsonValue(e){try{let t=JSON.parse(e);return JSON.stringify(t)}catch{return null}}processValue(e){let t=this.handlePrimitiveValues(e);if(t!==null)return t;let o=e,n=this.decodeUrlValue(o);return this.trySpecializedDecoding(n)}handlePrimitiveValues(e){return e===null?"null":e===void 0?"undefined":buffer.Buffer.isBuffer(e)?e.toString():typeof e!="string"?this.safeStringify(e):null}trySpecializedDecoding(e){let t=this.tryJwtDecoding(e);if(t!==null)return t;let o=this.tryJsonDecoding(e);return o!==null?o:e}tryJwtDecoding(e){if(e.match(/^ey[A-Za-z0-9_-]+\.ey[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/)){let t=this.decodeJwtPayload(e);if(typeof t=="string"&&t.length>0)return t}return null}tryJsonDecoding(e){if(e.startsWith("{")||e.startsWith("[")){let t=this.parseJsonValue(e);if(typeof t=="string"&&t.length>0)return t}return null}safeStringify(e){try{return typeof e=="object"&&e!==null?JSON.stringify(e):String(e)}catch{return String(e)}}convertMacTimestamp(e){return e<=0?e:e>=0&&e<=1e9&&Number.isFinite(e)?e+978307200:0}toCookieRow(){try{let e=this.convertFlags(),t=this.url.replace(/^https?:\/\//,"").replace(/\/.*$/,"")||"uk",o=this.convertMacTimestamp(this.expiration),n=this.convertMacTimestamp(this.creation);return ki.parse({name:this.name.replace(/^: /,""),value:this.processValue(this.value)||"",domain:t,path:this.path||"/",expiry:o,creation:n,flags:e,version:this.version,port:this.port,comment:this.comment,commentURL:this.commentURL})}catch{return null}}readHeader(e){let t=e.buffer.readUInt32LE(e.offset);ne.debug("Cookie size:",t),e.offset+=4;let o=e.buffer.readUInt32LE(e.offset);ne.debug("Cookie version:",o),e.offset+=4;let n=e.buffer.readUInt32LE(e.offset);ne.debug("Cookie flags:",n.toString(2).padStart(8,"0")),e.offset+=4,this.flags={isSecure:(n&1)!==0,isHTTPOnly:(n&4)!==0,unknown1:(n&8)!==0,unknown2:(n&16)!==0};let i=e.buffer.readUInt32LE(e.offset);ne.debug("Has port:",i),e.offset+=4;let s={urlOffset:e.buffer.readUInt32LE(e.offset),nameOffset:e.buffer.readUInt32LE(e.offset+4),pathOffset:e.buffer.readUInt32LE(e.offset+8),valueOffset:e.buffer.readUInt32LE(e.offset+12),commentOffset:e.buffer.readUInt32LE(e.offset+16),commentURLOffset:e.buffer.readUInt32LE(e.offset+20)};return ne.debug("String offsets:",s),{size:t,hasPort:i,offsets:s}}readTimestamps(e){let t=buffer.Buffer.alloc(8);for(let s=0;s<8;s++)t[s]=e.buffer[e.offset+s];let o=t.readDoubleLE(0);e.offset+=8;let n=buffer.Buffer.alloc(8);for(let s=0;s<8;s++)n[s]=e.buffer[e.offset+s];let i=n.readDoubleLE(0);e.offset+=8,this.expiration=o,this.creation=i;}readStrings(e,t,o){ne.debug("Reading strings from cookie buffer of size:",t);let i=[{field:"url",offset:o.urlOffset},{field:"name",offset:o.nameOffset},{field:"path",offset:o.pathOffset},{field:"value",offset:o.valueOffset},{field:"comment",offset:o.commentOffset}].filter(s=>s.offset>0).sort((s,a)=>s.offset-a.offset);ne.debug("Reading strings in order:",i.map(s=>s.field));for(let s=0;s<i.length;s++){let a=i[s],{field:u,offset:l}=a,m=(s<i.length-1?i[s+1].offset:t)-l,g=0+l;for(;g<0+l+m&&e.buffer[g]!==0;)g++;let h=e.buffer.toString("utf8",0+l,g);switch(ne.debug(`Read ${u}:`,h),u){case "url":this.url=h;break;case "name":this.name=h;break;case "path":this.path=h;break;case "value":this.value=h;break;case "comment":this.comment=h;break}}}decode(e){let{size:t,hasPort:o,offsets:n}=this.readHeader(e),i=e.offset;e.offset=i+24,this.readTimestamps(e),o>0&&(this.port=e.buffer.readUInt16LE(e.offset),e.offset+=2),e.offset=i,this.readStrings(e,t,n);}convertFlags(){return (this.flags.isSecure?1:0)|(this.flags.isHTTPOnly?4:0)|(this.flags.unknown1?8:0)|(this.flags.unknown2?16:0)}};var j=y("BinaryCodablePage"),Oe=class Oe{constructor(e){this.cookies=[];let t={offset:0,buffer:e};this.decode(t);}toCookieRows(){let e=[];for(let t of this.cookies)try{let o=t.toCookieRow();o!==null&&e.push(o);}catch(o){me("BinaryCookies","Error converting cookie",{error:d(o)});}return e}decode(e){let t=e.buffer.readUInt32BE(e.offset);if(j.debug("Page header:",t.toString(16)),e.offset+=4,t!==Oe.HEADER)throw new Error("Invalid page header");let o=e.buffer.readUInt32LE(e.offset);j.debug("Cookie count:",o),e.offset+=4;let n=e.offset-8;j.debug("Page start offset:",n);let i=[];for(let a=0;a<o;a++){let u=e.buffer.readUInt32LE(e.offset);i.push(u),j.debug(`Cookie ${a} offset:`,u),e.offset+=4;}let s=e.buffer.readUInt32BE(e.offset);if(j.debug("Page footer:",s.toString(16)),e.offset+=4,s!==Oe.FOOTER)throw new Error("Invalid page footer");for(let a=0;a<o;a++)try{let u=i[a];j.debug(`Reading cookie ${a} at offset:`,u);let l=e.buffer.readUInt32LE(u);if(j.debug(`Cookie ${a} size:`,l),l<48){j.warn(`Invalid cookie size ${l} at index ${a}`);continue}if(u+l>e.buffer.length){j.warn(`Cookie size ${l} at index ${a} would exceed buffer length ${e.buffer.length}`);continue}let c=e.buffer.subarray(u,u+l),m=new Hr(c);this.cookies.push(m);}catch(u){j.warn("Invalid cookie data",{error:d(u)});}}};Oe.HEADER=256,Oe.FOOTER=0;var jr=Oe;var ie=y("BinaryCodableCookies"),U=class U{constructor(e){let t={offset:0,buffer:e};this.pages=[],this.metadata={},this.decode(t);}static fromFile(e){let t=fs$1.readFileSync(e);return new U(t)}static fromDefaultPath(){return U.fromFile(U.DEFAULT_COOKIE_PATH)}toCookieRows(){let e=[];for(let t of this.pages)try{let o=t.toCookieRows();Array.isArray(o)&&e.push(...o);}catch(o){me("BinaryCookies","Error converting page cookies",{error:d(o)});}return e}decode(e){try{let t=e.buffer.subarray(e.offset,e.offset+4);if(e.offset+=4,ie.debug("Magic bytes:",t.toString()),!t.equals(U.MAGIC))throw new Error("Missing magic value");let o=e.buffer.readUInt32BE(e.offset);ie.debug("Page count:",o),e.offset+=4;let n=[];for(let u=0;u<o;u++){let l=e.buffer.readUInt32BE(e.offset);n.push(l),ie.debug(`Page ${u} size:`,l),e.offset+=4;}let i=e.offset;ie.debug("Starting page data at offset:",i);for(let u of n)try{ie.debug("Reading page at offset:",i,"with size:",u);let l=e.buffer.subarray(i,i+u),c=new jr(l);this.pages.push(c),i+=u;}catch(l){ie.warn("Error decoding page:",{error:d(l)}),i+=u;}e.offset=i;let s=e.buffer.readUInt32BE(e.offset);ie.debug("Checksum:",s.toString(16)),e.offset+=4;let a=e.buffer.readBigUInt64BE(e.offset);ie.debug("Footer:",a.toString(16)),e.offset+=8,a!==U.FOOTER&&me("BinaryCookies","Invalid cookie file format: wrong footer"),this.metadata={};}catch(t){throw me("BinaryCookies","Error decoding binary cookies file",{error:d(t)}),t}}};U.MAGIC=buffer.Buffer.from("cook","utf8"),U.FOOTER=BigInt("0x071720050000004b"),U.DEFAULT_COOKIE_PATH=path.join(os$1.homedir(),"Library/Containers/com.apple.Safari/Data/Library/Cookies/Cookies.binarycookies");var Ur=U;function vi(r){return Ur.fromFile(r).toCookieRows()}var Ve=class extends re{constructor(){super("SafariCookieQueryStrategy","Safari"),this.lockHandler=new te(this.logger,"Safari");}getCookieDbPath(e){return path.join(e,"Library","Containers","com.apple.Safari","Data","Library","Cookies","Cookies.binarycookies")}formatDomain(e){return e==null||typeof e!="string"?"":e.startsWith(".")?e.slice(1):e}formatExpiry(e){return e==null?void 0:typeof e!="number"||Number.isNaN(e)||e<=0?"Infinity":e<0||e>4102444800?(this.logger.warn("Invalid expiry timestamp, treating as session cookie",{expiry:e}),"Infinity"):new Date(e*1e3)}isFlagSet(e,t){return typeof e!="number"||Number.isNaN(e)||e<=0?false:(e&t)===t}formatCreation(e){if(typeof e!="number"||Number.isNaN(e)||e<=0)return;if(e<0||e>4102444800){this.logger.warn("Invalid creation timestamp, ignoring",{creation:e});return}return e*1e3}processValue(e){if(e===null)return "null";if(e===void 0)return "undefined";if(Buffer.isBuffer(e))return e.toString();if(typeof e=="object")try{return JSON.stringify(e)}catch{return "[object]"}return typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):"[unknown value]"}async decodeCookies(e,t,o,n){try{if(!await this.checkAndHandlePermissions(e,n))return [];let s=vi(e);return this.processCookies(s,t,o,e)}catch(i){return this.handleDecodingError(i,e,t,o,n)}}async checkAndHandlePermissions(e,t){return await It(e)?true:(this.logger.warn("Cannot access Safari cookies due to macOS permissions",{file:e,suggestion:"Terminal application needs Full Disk Access permission"}),await _t(new Error("EPERM: operation not permitted"),{appName:process.env.TERM_PROGRAM??"Terminal",browserName:"Safari",interactive:t!==true})?await It(e)?true:(this.logger.error("Still cannot access Safari cookies after permission attempt",{file:e,advice:"Please restart your terminal application after granting Full Disk Access"}),false):false)}processCookies(e,t,o,n){return e.filter(i=>this.matchesCriteria(i,t,o)).map(i=>this.mapToExportedCookie(i,n))}matchesCriteria(e,t,o){if(!this.isCookieObject(e))return false;let n=this.formatDomain(e.domain);if(n==="")return false;let i=t==="%"||e.name===t,s=o==="%"||n.includes(o);return i&&s}isCookieObject(e){return typeof e=="object"&&e!==null&&"name"in e&&typeof e.name=="string"}mapToExportedCookie(e,t){let o=e;return {domain:this.formatDomain(o.domain),name:o.name,value:this.processValue(o.value),expiry:this.formatExpiry(o.expiry),meta:{file:t,browser:"Safari",decrypted:false,secure:this.isFlagSet(o.flags,1),httpOnly:this.isFlagSet(o.flags,4),path:o.path??void 0,version:o.version===void 0?void 0:o.version,comment:o.comment??void 0,commentURL:o.commentURL??void 0,port:o.port===void 0?void 0:o.port,creation:this.formatCreation(o.creation)}}}async handleDecodingError(e,t,o,n,i){return T(e,"EPERM")||T(e,"operation not permitted")||T(e,"Permission denied")?await this.handlePermissionError(e,t,o,n,i):this.logDecodingError(e,t,o,n),[]}async handlePermissionError(e,t,o,n,i){await _t(e,{appName:process.env.TERM_PROGRAM??"Terminal",browserName:"Safari",interactive:i!==true})?this.logger.info("Permission flow completed. Please run the command again after granting access."):this.logger.warn(`Permission denied accessing Safari cookies at ${t}`,pe(e,{file:t,name:o,domain:n,advice:"Grant Full Disk Access to your terminal in System Settings > Privacy & Security"}));}logDecodingError(e,t,o,n){this.logger.error(`Error decoding ${t}`,pe(e,{file:t,name:o,domain:n}));}async executeQuery(e,t,o,n){if(!W())return this.logger.debug("Safari strategy skipped on non-macOS platform"),[];try{this.logger.info("Querying cookies",{name:e,domain:t,store:o});let i=os$1.homedir();if(!this.isValidHomeDirectory(i))return [];let s=o??this.getCookieDbPath(i),a=e||"%",u=t||"%",l=await this.attemptDecodeWithLockHandling(s,a,u,n);return l.success?l.cookies:l.shouldRetry?this.retryAfterBrowserClose(s,a,u,n,l.shouldRelaunch):[]}catch(i){return this.logQueryError(i,e,t),[]}}isValidHomeDirectory(e){return typeof e!="string"||e.length===0?(this.logger.error("Failed to get home directory"),false):true}async attemptDecodeWithLockHandling(e,t,o,n){try{return {success:!0,cookies:await this.decodeCookies(e,t,o,n),shouldRetry:!1,shouldRelaunch:!1}}catch(i){return this.handleLockConflict(i,e,n)}}async handleLockConflict(e,t,o){if(!this.isLockError(e))throw e;let n=await Vn(),i=await this.lockHandler.handleBrowserConflict(e,t,n,o!==true);return i.resolved?{success:false,cookies:[],shouldRetry:true,shouldRelaunch:i.shouldRelaunch}:(this.logger.warn("Safari cookie file locked",pe(e,{file:t,advice:"Safari may be accessing the cookie file. Try closing Safari and running again."})),{success:false,cookies:[],shouldRetry:false,shouldRelaunch:false})}isLockError(e){return T(e,"EPERM")||T(e,"operation not permitted")||T(e,"Permission denied")||T(e,"EBUSY")}async retryAfterBrowserClose(e,t,o,n,i){try{this.logger.info("Retrying Safari cookie extraction after browser close...");let s=await this.decodeCookies(e,t,o,n);return this.logger.success("Successfully extracted cookies after closing Safari"),i===!0&&await this.lockHandler.relaunchBrowser(),s}catch(s){return this.handleRetryFailure(s,e,i)}}async handleRetryFailure(e,t,o){return this.logger.error("Failed to extract cookies even after closing Safari",pe(e,{file:t})),o===true&&await this.lockHandler.relaunchBrowser(),[]}logQueryError(e,t,o){this.logger.error("Failed to query cookies",pe(e,{name:t,domain:o}));}};var Ae=y("StrategyFactory"),Dc={safari:Ve,firefox:We,chrome:fe,edge:Ue,arc:je,opera:ze,"opera-gx":Ge};function Ei(r){let e=Dc[r];return Ae.debug("Creating browser strategy",{browser:r}),new e}function _c(){Ae.debug("Creating composite strategy with all browsers");let r=[new fe,new Ue,new je,new ze,new Ge,new We,new Ve];return new Mr(r)}function Ic(r){return r!==void 0?(Ae.debug("Creating Chrome strategy with profile",{profile:r}),new fe(r)):new fe}function Pi(r){let{browser:e,storePath:t,profile:o}=r??{};if(t!==void 0&&e===void 0){let n=Dr(t);if(n!==void 0)return Ae.info("Auto-detected browser from store path",{browser:n,storePath:t}),Ei(n)}if(e!==void 0){let n=e.toLowerCase();if(Un(n))return n==="chrome"?Ic(o):Ei(n);Ae.warn("Invalid browser type specified",{browser:e});}return Ae.debug("Creating composite strategy as default"),_c()}var Bi={detectStoreType(r){return Dr(r)},createStrategy(r,e,t){let o={};return r!==void 0&&(o.browser=r),e!==void 0&&(o.storePath=e),t!==void 0&&(o.profile=t),Pi(o)}};async function Fc(r,e,t){let o=[];for(let n of e){let i=await r.queryCookies(n,t);if(o=[...o,...i],typeof t.limit=="number"&&t.limit>0&&o.length>=t.limit){o=o.slice(0,t.limit);break}}if(t.deduplicateCookies&&o.length>0){let n=new Map;for(let i of o){let s=`${i.name}:${i.domain}`,a=n.get(s);a?i.value.length>a.value.length&&n.set(s,i):n.set(s,i);}o=Array.from(n.values());}return o}function Lc(r,e,t,o,n,i){let s={removeExpired:t,deduplicateCookies:o,strategy:e},a=typeof r.force=="boolean"?r.force:false;return i!==void 0&&(s.store=i),a&&(s.force=a),s}async function Ti(r,e,t,o=false,n,i=true){try{let s=typeof r.browser=="string"?r.browser:void 0,a=typeof r.profile=="string"?r.profile:void 0,u=Bi.createStrategy(s,n,a),l=new Ar(u),c=Array.isArray(e)?e:[e],m=Lc(r,u,o,i,t,n),g=await Fc(l,c,m);if(r["detect-jwt"]===!0||r["jwt-only"]===!0){let w={decodeClaims:!0,checkExpiration:!0,verbose:r.verbose===!0};typeof r["jwt-secret"]=="string"&&(w.validateSignature=!0,w.secretKey=r["jwt-secret"]),r["jwt-only"]===!0?g=Jt(g,w):g=et(g,w);}if(g.length===0){f.error("No results");let w=typeof r.profile=="string"?r.profile:void 0,L=typeof r.browser=="string"?r.browser:void 0;w&&L&&(f.error(`Could not find cookies for profile: ${w}`),f.error(`Try 'get-cookie --browser ${L} --list-profiles' to see available profiles`)),r["jwt-only"]===!0&&f.error("No cookies containing valid JWT tokens were found");return}new Or().getHandler(r).handle(g);}catch(s){f.error(d(s));}}function Oi(){f.log("Usage: get-cookie [name] [domain] [options]"),f.log("Build: 2026-02-24 10:07:21 UTC (main)"),f.log(""),f.log("Examples:"),f.log(" get-cookie auth example.com # Get specific cookie"),f.log(" get-cookie % github.com --output json # Get all cookies as JSON"),f.log(" get-cookie --url https://example.com # Extract from URL"),f.log(""),f.log("Options:"),f.log(" -h, --help Show this help message"),f.log(" -v, --verbose Enable verbose output"),f.log(" -f, --force Force operation despite warnings (e.g., locked databases)"),f.log(" --list-profiles List available browser profiles (use with --browser)"),f.log(""),f.log("Query options:"),f.log(" -n, --name PATTERN Cookie name pattern (% for wildcard)"),f.log(" -D, --domain PATTERN Cookie domain pattern"),f.log(" -u, --url URL URL to extract cookie specs from"),f.log(" --browser BROWSER Target specific browser (chrome|edge|arc|opera|opera-gx|firefox|safari)"),f.log(" --profile NAME Target specific Chrome profile by name (e.g., 'Default', 'Profile 1')"),f.log(" --store PATH Path to a specific cookie store file"),f.log(" --include-expired Include expired cookies (filtered by default)"),f.log(" --include-all Include all duplicate cookies (newest only by default)"),f.log(""),f.log("JWT detection options:"),f.log(" -j, --detect-jwt Detect and decode JWT tokens in cookies"),f.log(" --jwt-only Only show cookies containing valid JWTs"),f.log(" --jwt-secret KEY Validate JWT signatures with provided secret"),f.log(""),f.log("Output options:"),f.log(" --output FORMAT Output format (json)"),f.log(" -d, --dump Dump all cookie details"),f.log(" -G, --dump-grouped Dump all results, grouped by profile"),f.log(" -r, --render Render all results in formatted output");}function $c(r,e){return {name:r||"%",domain:e||"%"}}function Ai(r){return r==="*"?"%":r}var qc={darwin:{chrome:path.join(os$1.homedir(),"Library","Application Support","Google","Chrome"),edge:path.join(os$1.homedir(),"Library","Application Support","Microsoft Edge"),arc:path.join(os$1.homedir(),"Library","Application Support","Arc"),opera:path.join(os$1.homedir(),"Library","Application Support","com.operasoftware.Opera"),"opera-gx":path.join(os$1.homedir(),"Library","Application Support","com.operasoftware.OperaGX")},win32:{chrome:path.join(process.env.LOCALAPPDATA??"","Google","Chrome","User Data"),edge:path.join(process.env.LOCALAPPDATA??"","Microsoft","Edge","User Data"),opera:path.join(process.env.APPDATA??"","Opera Software","Opera Stable"),"opera-gx":path.join(process.env.APPDATA??"","Opera Software","Opera GX Stable")},linux:{chrome:path.join(os$1.homedir(),".config","google-chrome"),edge:path.join(os$1.homedir(),".config","microsoft-edge"),opera:path.join(os$1.homedir(),".config","opera"),"opera-gx":path.join(os$1.homedir(),".config","opera-gx")}};function Qc(r){return qc[process.platform]?.[r]}function Hc(r){if(!r){f.error("Please specify a browser with --browser"),f.log("Example: get-cookie --browser chrome --list-profiles");return}let e=r.toLowerCase();if(e==="chrome"||e==="edge"||e==="arc"||e==="opera"||e==="opera-gx")try{let t=Ht();if(t.length===0){f.log(`No ${r} profiles found`);return}f.log(`${r} profiles:`),f.log("");let o=Qc(e);if(!o){f.error(`Unsupported browser for profile listing: ${r}`);return}let n=path.join(o,"Local State");if(fs$1.existsSync(n)){let s=JSON.parse(fs$1.readFileSync(n,"utf8")).profile?.info_cache??{};for(let[a,u]of Object.entries(s)){let l=u;f.log(` \u2022 ${l.name}`),f.log(` Directory: ${a}`),l.user_name&&f.log(` User: ${l.user_name}`),f.log("");}}else t.forEach(i=>{f.log(` \u2022 ${i.name}`),i.user_name&&f.log(` User: ${i.user_name}`),f.log("");});}catch(t){f.error(`Failed to list ${r} profiles:`,d(t));}else e==="firefox"?(f.log("Firefox profile listing is not yet implemented"),f.log("Firefox stores profiles in different locations based on the platform")):e==="safari"?(f.log("Safari does not use named profiles"),f.log("Safari uses the system keychain for the current user")):f.error(`Unknown browser: ${r}`);}function jc(r,e){let t=r.url;if(typeof t=="string"){let i=Yr(t);return Array.isArray(i)?i:(f.error("Invalid cookie specs from URL"),[])}let o=Ai(r.name??e[0]??"%"),n=Ai(r.domain??e[1]??"%");return [$c(o,n)]}async function Uc(r,e){let t=jc(r,e);r.verbose===true&&f.log("cookieSpecs",t);try{let o=r["include-expired"]!==!0,n=r["include-all"]!==!0;await Ti(r,t,void 0,o,r.store,n);}catch(o){f.error("Error querying cookies:",d(o));}}async function Wc(){let r=process.argv.slice(2);if(r.length===0){Oi();return}let{values:e,positionals:t}=Ie(r);if(e.help===true){Oi();return}if(e["list-profiles"]===true){let o=typeof e.browser=="string"?e.browser:void 0;Hc(o);return}await Uc(e,t);}Wc().catch(r=>{f.error("Fatal error:",d(r)),process.exit(1);});
|
|
79
|
+
Press Enter when you've completed these steps...`);let i=Ri__default.default.createInterface({input:process.stdin,output:process.stdout});return await new Promise(s=>{i.question("",()=>{i.close(),s();});}),true}}else We.info(`To grant ${e.browserName} access, add ${o} to System Settings > Privacy & Security > Full Disk Access`);return false}async function _t(r){try{return await promises.access(r,promises.constants.R_OK),!0}catch{return false}}$();E();P();$();E();P();var Dr=zod.z.string().trim().min(1,"Domain cannot be empty").refine(r=>/^\.?[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(r),"Invalid domain format"),_r=zod.z.string().trim().min(1,"Cookie name cannot be empty").refine(r=>r==="%"||/^[!#$%&'()*+\-.:0-9A-Z ^_`a-z|~]+$/.test(r),"Invalid cookie name format - must contain only valid characters (letters, numbers, and certain symbols) or be '%' for wildcard"),Di=zod.z.string().trim().min(1,"Path cannot be empty").refine(r=>r.startsWith("/"),"Path must start with /").refine(r=>/^\/[!#$%&'()*+,\-./:=@\w~]*$/.test(r),"Invalid path format - must contain only valid URL path characters").default("/"),_i=zod.z.string().trim().transform(r=>Xc__default.default(r)).pipe(zod.z.any()),Fi=zod.z.object({name:_r,value:_i,domain:Dr,path:Di,expiry:zod.z.number().int(),creation:zod.z.number().int(),flags:zod.z.number().optional(),version:zod.z.number().int().optional(),port:zod.z.number().int().optional(),comment:zod.z.string().optional(),commentURL:zod.z.string().optional()}),Yc=zod.z.object({name:_r,domain:Dr}).strict(),Zc=zod.z.object({file:zod.z.string().trim().min(1,"File path cannot be empty").optional(),browser:zod.z.string().trim().optional(),decrypted:zod.z.boolean().optional(),secure:zod.z.boolean().optional(),httpOnly:zod.z.boolean().optional(),path:Di.optional(),containerId:zod.z.number().int().optional()}).catchall(zod.z.unknown());zod.z.object({domain:Dr,name:_r,value:_i,expiry:zod.z.union([zod.z.literal("Infinity"),zod.z.date(),zod.z.number().int().positive("Expiry must be a positive number")]).optional(),meta:Zc.optional()}).strict();zod.z.object({expiry:zod.z.number().int().optional(),domain:Dr,name:_r,value:zod.z.union([zod.z.string(),zod.z.instanceof(Buffer)])}).strict();zod.z.object({format:zod.z.enum(["merged","grouped"]).optional(),separator:zod.z.string().optional(),showFilePaths:zod.z.boolean().optional()}).strict();var ep=zod.z.enum(["Chrome","Firefox","Safari","internal","unknown"]),rp=zod.z.object({browserName:ep,queryCookies:zod.z.function()}).strict(),tp=zod.z.object({limit:zod.z.number().int().positive().optional(),removeExpired:zod.z.boolean().optional(),includeExpired:zod.z.boolean().optional(),store:zod.z.string().optional(),force:zod.z.boolean().optional(),container:zod.z.union([zod.z.string(),zod.z.number()]).optional()});tp.extend({strategy:rp.optional()});var op=zod.z.enum(["chrome","chromium","edge","firefox","opera","opera-gx","brave","arc","vivaldi"]);Yc.extend({browser:op,exactDomain:zod.z.boolean().optional(),caseSensitive:zod.z.boolean().optional(),limit:zod.z.number().int().positive().optional(),includeExpired:zod.z.boolean().optional(),container:zod.z.union([zod.z.string(),zod.z.number()]).optional()});P();var ie=w("BinaryCodableCookie"),Fr=class{constructor(e){this.version=0;this.url="";this.name="";this.path="";this.value="";this.flags={isSecure:false,isHTTPOnly:false,unknown1:false,unknown2:false};this.expiration=0;this.creation=0;let t={offset:0,buffer:e};this.decode(t);}decodeUrlValue(e){let t=e,o;do{o=t;try{t=decodeURIComponent(t);}catch{return o}}while(t!==o&&t.includes("%"));return t}decodeJwtPayload(e){let t=e.split(".");if(t.length!==3)return null;try{let o=t[1];if(!o)return null;let n=buffer.Buffer.from(o,"base64").toString("utf8"),i=JSON.parse(n);return JSON.stringify(i)}catch{return null}}parseJsonValue(e){try{let t=JSON.parse(e);return JSON.stringify(t)}catch{return null}}processValue(e){let t=this.handlePrimitiveValues(e);if(t!==null)return t;let o=e,n=this.decodeUrlValue(o);return this.trySpecializedDecoding(n)}handlePrimitiveValues(e){return e===null?"null":e===void 0?"undefined":buffer.Buffer.isBuffer(e)?e.toString():typeof e!="string"?this.safeStringify(e):null}trySpecializedDecoding(e){let t=this.tryJwtDecoding(e);if(t!==null)return t;let o=this.tryJsonDecoding(e);return o!==null?o:e}tryJwtDecoding(e){if(e.match(/^ey[A-Za-z0-9_-]+\.ey[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/)){let t=this.decodeJwtPayload(e);if(typeof t=="string"&&t.length>0)return t}return null}tryJsonDecoding(e){if(e.startsWith("{")||e.startsWith("[")){let t=this.parseJsonValue(e);if(typeof t=="string"&&t.length>0)return t}return null}safeStringify(e){try{return typeof e=="object"&&e!==null?JSON.stringify(e):String(e)}catch{return String(e)}}convertMacTimestamp(e){return e<=0?e:e>=0&&e<=1e9&&Number.isFinite(e)?e+978307200:0}toCookieRow(){try{let e=this.convertFlags(),t=this.url.replace(/^https?:\/\//,"").replace(/\/.*$/,"")||"uk",o=this.convertMacTimestamp(this.expiration),n=this.convertMacTimestamp(this.creation);return Fi.parse({name:this.name.replace(/^: /,""),value:this.processValue(this.value)||"",domain:t,path:this.path||"/",expiry:o,creation:n,flags:e,version:this.version,port:this.port,comment:this.comment,commentURL:this.commentURL})}catch{return null}}readHeader(e){let t=e.buffer.readUInt32LE(e.offset);ie.debug("Cookie size:",t),e.offset+=4;let o=e.buffer.readUInt32LE(e.offset);ie.debug("Cookie version:",o),e.offset+=4;let n=e.buffer.readUInt32LE(e.offset);ie.debug("Cookie flags:",n.toString(2).padStart(8,"0")),e.offset+=4,this.flags={isSecure:(n&1)!==0,isHTTPOnly:(n&4)!==0,unknown1:(n&8)!==0,unknown2:(n&16)!==0};let i=e.buffer.readUInt32LE(e.offset);ie.debug("Has port:",i),e.offset+=4;let s={urlOffset:e.buffer.readUInt32LE(e.offset),nameOffset:e.buffer.readUInt32LE(e.offset+4),pathOffset:e.buffer.readUInt32LE(e.offset+8),valueOffset:e.buffer.readUInt32LE(e.offset+12),commentOffset:e.buffer.readUInt32LE(e.offset+16),commentURLOffset:e.buffer.readUInt32LE(e.offset+20)};return ie.debug("String offsets:",s),{size:t,hasPort:i,offsets:s}}readTimestamps(e){let t=e.buffer.readDoubleLE(e.offset);e.offset+=8;let o=e.buffer.readDoubleLE(e.offset);e.offset+=8,this.expiration=t,this.creation=o;}readStrings(e,t,o){ie.debug("Reading strings from cookie buffer of size:",t);let i=[{field:"url",offset:o.urlOffset},{field:"name",offset:o.nameOffset},{field:"path",offset:o.pathOffset},{field:"value",offset:o.valueOffset},{field:"comment",offset:o.commentOffset}].filter(s=>s.offset>0).sort((s,a)=>s.offset-a.offset);ie.debug("Reading strings in order:",i.map(s=>s.field));for(let s=0;s<i.length;s++){let a=i[s],{field:l,offset:u}=a,m=(s<i.length-1?i[s+1].offset:t)-u,x=0+u;for(;x<0+u+m&&e.buffer[x]!==0;)x++;let h=e.buffer.toString("utf8",0+u,x);switch(ie.debug(`Read ${l}:`,h),l){case "url":this.url=h;break;case "name":this.name=h;break;case "path":this.path=h;break;case "value":this.value=h;break;case "comment":this.comment=h;break}}}decode(e){let{size:t,hasPort:o,offsets:n}=this.readHeader(e),i=e.offset;e.offset=i+24,this.readTimestamps(e),o>0&&(this.port=e.buffer.readUInt16LE(e.offset),e.offset+=2),e.offset=i,this.readStrings(e,t,n);}convertFlags(){return (this.flags.isSecure?1:0)|(this.flags.isHTTPOnly?4:0)|(this.flags.unknown1?8:0)|(this.flags.unknown2?16:0)}};var W=w("BinaryCodablePage"),Re=class Re{constructor(e){this.cookies=[];let t={offset:0,buffer:e};this.decode(t);}toCookieRows(){let e=[];for(let t of this.cookies)try{let o=t.toCookieRow();o!==null&&e.push(o);}catch(o){he("BinaryCookies","Error converting cookie",{error:y(o)});}return e}decode(e){let t=e.buffer.readUInt32BE(e.offset);if(W.debug("Page header:",t.toString(16)),e.offset+=4,t!==Re.HEADER)throw new Error("Invalid page header");let o=e.buffer.readUInt32LE(e.offset);W.debug("Cookie count:",o),e.offset+=4;let n=e.offset-8;W.debug("Page start offset:",n);let i=[];for(let a=0;a<o;a++){let l=e.buffer.readUInt32LE(e.offset);i.push(l),W.debug(`Cookie ${a} offset:`,l),e.offset+=4;}let s=e.buffer.readUInt32BE(e.offset);if(W.debug("Page footer:",s.toString(16)),e.offset+=4,s!==Re.FOOTER)throw new Error("Invalid page footer");for(let a=0;a<o;a++)try{let l=i[a];W.debug(`Reading cookie ${a} at offset:`,l);let u=e.buffer.readUInt32LE(l);if(W.debug(`Cookie ${a} size:`,u),u<48){W.warn(`Invalid cookie size ${u} at index ${a}`);continue}if(l+u>e.buffer.length){W.warn(`Cookie size ${u} at index ${a} would exceed buffer length ${e.buffer.length}`);continue}let f=e.buffer.subarray(l,l+u),m=new Fr(f);this.cookies.push(m);}catch(l){W.warn("Invalid cookie data",{error:y(l)});}}};Re.HEADER=256,Re.FOOTER=0;var Ir=Re;var se=w("BinaryCodableCookies"),z=class z{constructor(e){let t={offset:0,buffer:e};this.pages=[],this.metadata={},this.decode(t);}static fromFile(e){let t=Ht(e);return new z(t)}static fromDefaultPath(){return z.fromFile(z.DEFAULT_COOKIE_PATH)}toCookieRows(){let e=[];for(let t of this.pages)try{let o=t.toCookieRows();Array.isArray(o)&&e.push(...o);}catch(o){he("BinaryCookies","Error converting page cookies",{error:y(o)});}return e}decode(e){try{let t=e.buffer.subarray(e.offset,e.offset+4);if(e.offset+=4,se.debug("Magic bytes:",t.toString()),!t.equals(z.MAGIC))throw new Error("Missing magic value");let o=e.buffer.readUInt32BE(e.offset);se.debug("Page count:",o),e.offset+=4;let n=[];for(let l=0;l<o;l++){let u=e.buffer.readUInt32BE(e.offset);n.push(u),se.debug(`Page ${l} size:`,u),e.offset+=4;}let i=e.offset;se.debug("Starting page data at offset:",i);for(let l of n)try{se.debug("Reading page at offset:",i,"with size:",l);let u=e.buffer.subarray(i,i+l),f=new Ir(u);this.pages.push(f),i+=l;}catch(u){se.warn("Error decoding page:",{error:y(u)}),i+=l;}e.offset=i;let s=e.buffer.readUInt32BE(e.offset);se.debug("Checksum:",s.toString(16)),e.offset+=4;let a=e.buffer.readBigUInt64BE(e.offset);se.debug("Footer:",a.toString(16)),e.offset+=8,a!==z.FOOTER&&he("BinaryCookies","Invalid cookie file format: wrong footer"),this.metadata={};}catch(t){throw he("BinaryCookies","Error decoding binary cookies file",{error:y(t)}),t}}};z.MAGIC=buffer.Buffer.from("cook","utf8"),z.FOOTER=BigInt("0x071720050000004b"),z.DEFAULT_COOKIE_PATH=path.join(os.homedir(),"Library/Containers/com.apple.Safari/Data/Library/Cookies/Cookies.binarycookies");var Mr=z;function Mi(r){return Mr.fromFile(r).toCookieRows()}function lp(r,e){let t=path.join(r,"Library","Containers","com.apple.Safari","Data","Library","Cookies","Cookies.binarycookies"),o=path.join(r,"Library","Cookies","Cookies.binarycookies"),n=e(t),i=e(o);return !n&&i?o:t}var Lr=class extends X{constructor(e){super("SafariCookieQueryStrategy","Safari"),this.lockHandler=new Y(this.logger,"Safari"),e!==void 0&&(this.profileName=e);}getCookieDbPath(e){return lp(e,A)}formatDomain(e){return e==null||typeof e!="string"?"":e.startsWith(".")?e.slice(1):e}formatExpiry(e){return e==null?void 0:typeof e!="number"||Number.isNaN(e)||e<=0?"Infinity":e<0||e>4102444800?(this.logger.warn("Invalid expiry timestamp, treating as session cookie",{expiry:e}),"Infinity"):new Date(e*1e3)}isFlagSet(e,t){return typeof e!="number"||Number.isNaN(e)||e<=0?false:(e&t)===t}formatCreation(e){if(typeof e!="number"||Number.isNaN(e)||e<=0)return;if(e<0||e>4102444800){this.logger.warn("Invalid creation timestamp, ignoring",{creation:e});return}return e*1e3}processValue(e){if(e===null)return "null";if(e===void 0)return "undefined";if(Buffer.isBuffer(e))return e.toString();if(typeof e=="object")try{return JSON.stringify(e)}catch{return "[object]"}return typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):"[unknown value]"}async decodeCookies(e,t,o,n){try{if(!await this.checkAndHandlePermissions(e,n))return [];let s=Mi(e);return this.processCookies(s,t,o,e)}catch(i){return this.handleDecodingError(i,e,t,o,n)}}async checkAndHandlePermissions(e,t){return await _t(e)?true:(this.logger.warn("Cannot access Safari cookies due to macOS permissions",{file:e,suggestion:"Terminal application needs Full Disk Access permission"}),await Dt(new Error("EPERM: operation not permitted"),{appName:process.env.TERM_PROGRAM??"Terminal",browserName:"Safari",interactive:t!==true})?await _t(e)?true:(this.logger.error("Still cannot access Safari cookies after permission attempt",{file:e,advice:"Please restart your terminal application after granting Full Disk Access"}),false):false)}processCookies(e,t,o,n){return e.filter(i=>this.matchesCriteria(i,t,o)).map(i=>this.mapToExportedCookie(i,n))}matchesCriteria(e,t,o){if(!this.isCookieObject(e))return false;let n=this.formatDomain(e.domain);if(n==="")return false;let i=t==="%"||e.name===t,s=o==="%"||n.includes(o);return i&&s}isCookieObject(e){return typeof e=="object"&&e!==null&&"name"in e&&typeof e.name=="string"}mapToExportedCookie(e,t){let o=e;return {domain:this.formatDomain(o.domain),name:o.name,value:this.processValue(o.value),expiry:this.formatExpiry(o.expiry),meta:{file:t,browser:"Safari",decrypted:false,secure:this.isFlagSet(o.flags,1),httpOnly:this.isFlagSet(o.flags,4),path:o.path??void 0,version:o.version===void 0?void 0:o.version,comment:o.comment??void 0,commentURL:o.commentURL??void 0,port:o.port===void 0?void 0:o.port,creation:this.formatCreation(o.creation)}}}async handleDecodingError(e,t,o,n,i){return R(e,"EPERM")||R(e,"operation not permitted")||R(e,"Permission denied")?await this.handlePermissionError(e,t,o,n,i):this.logDecodingError(e,t,o,n),[]}async handlePermissionError(e,t,o,n,i){await Dt(e,{appName:process.env.TERM_PROGRAM??"Terminal",browserName:"Safari",interactive:i!==true})?this.logger.info("Permission flow completed. Please run the command again after granting access."):this.logger.warn(`Permission denied accessing Safari cookies at ${t}`,de(e,{file:t,name:o,domain:n,advice:"Grant Full Disk Access to your terminal in System Settings > Privacy & Security"}));}logDecodingError(e,t,o,n){this.logger.error(`Error decoding ${t}`,de(e,{file:t,name:o,domain:n}));}async executeQuery(e,t,o,n){if(this.profileName!==void 0&&this.logger.warn(`Safari does not support profile filtering. --profile "${this.profileName}" will be ignored; all Safari cookies will be returned.`),!H())return this.logger.debug("Safari strategy skipped on non-macOS platform"),[];try{this.logger.info("Querying cookies",{name:e,domain:t,store:o});let i=os.homedir();if(!this.isValidHomeDirectory(i))return [];let s=o??this.getCookieDbPath(i),a=e||"%",l=t||"%",u=await this.attemptDecodeWithLockHandling(s,a,l,n);return u.success?u.cookies:u.shouldRetry?this.retryAfterBrowserClose(s,a,l,n,u.shouldRelaunch):[]}catch(i){return this.logQueryError(i,e,t),[]}}isValidHomeDirectory(e){return typeof e!="string"||e.length===0?(this.logger.error("Failed to get home directory"),false):true}async attemptDecodeWithLockHandling(e,t,o,n){try{return {success:!0,cookies:await this.decodeCookies(e,t,o,n),shouldRetry:!1,shouldRelaunch:!1}}catch(i){return this.handleLockConflict(i,e,n)}}async handleLockConflict(e,t,o){if(!this.isLockError(e))throw e;let n=await Jt(),i=await this.lockHandler.handleBrowserConflict(e,t,n,o!==true);return i.resolved?{success:false,cookies:[],shouldRetry:true,shouldRelaunch:i.shouldRelaunch}:(this.logger.warn("Safari cookie file locked",de(e,{file:t,advice:"Safari may be accessing the cookie file. Try closing Safari and running again."})),{success:false,cookies:[],shouldRetry:false,shouldRelaunch:false})}isLockError(e){return R(e,"EPERM")||R(e,"operation not permitted")||R(e,"Permission denied")||R(e,"EBUSY")}async retryAfterBrowserClose(e,t,o,n,i){try{this.logger.info("Retrying Safari cookie extraction after browser close...");let s=await this.decodeCookies(e,t,o,n);return this.logger.success("Successfully extracted cookies after closing Safari"),i===!0&&await this.lockHandler.relaunchBrowser(),s}catch(s){return this.handleRetryFailure(s,e,i)}}async handleRetryFailure(e,t,o){return this.logger.error("Failed to extract cookies even after closing Safari",de(e,{file:t})),o===true&&await this.lockHandler.relaunchBrowser(),[]}logQueryError(e,t,o){this.logger.error("Failed to query cookies",de(e,{name:t,domain:o}));}};var De=w("StrategyFactory"),up=["chrome","edge","arc","brave","opera","opera-gx","vivaldi","firefox","safari"],fp=new Set(["chrome","edge","arc","brave","opera","opera-gx","vivaldi"]);function Ft(r,e,t){return De.debug("Creating browser strategy",{browser:r,profile:e,container:t}),t!==void 0&&r!=="firefox"&&De.warn(`--container option is only supported for Firefox, ignoring for ${r}`),r==="safari"?new Lr:r==="firefox"?new sr(e,t):r==="chrome"?new Tr(e):fp.has(r)?new ce(r,e):new ce("chrome",e)}function cp(){De.debug("Creating composite strategy with all browsers");let r=up.map(e=>Ft(e));return new Rr(r)}function Ni(r){let{browser:e,storePath:t,profile:o,container:n}=r??{};if(t!==void 0&&e===void 0){let i=er(t);if(i!==void 0)return De.info("Auto-detected browser from store path",{browser:i,storePath:t}),Ft(i,o,n)}if(e!==void 0){let i=e.toLowerCase();if(Ut(i))return Ft(i,o,n);De.warn("Invalid browser type specified",{browser:e});}return De.debug("Creating composite strategy as default"),cp()}var $i={detectStoreType(r){return er(r)},createStrategy(r,e,t,o){let n={};return r!==void 0&&(n.browser=r),e!==void 0&&(n.storePath=e),t!==void 0&&(n.profile=t),o!==void 0&&(n.container=o),Ni(n)}};async function pp(r,e,t){let o=[];for(let n of e){let i=await r.queryCookies(n,t);if(o=[...o,...i],typeof t.limit=="number"&&t.limit>0&&o.length>=t.limit){o=o.slice(0,t.limit);break}}if(t.deduplicateCookies&&o.length>0){let n=new Map;for(let i of o){let s=`${i.name}:${i.domain}`,a=n.get(s);a?i.value.length>a.value.length&&n.set(s,i):n.set(s,i);}o=Array.from(n.values());}return o}function mp(r,e,t,o,n,i){let s={removeExpired:t,deduplicateCookies:o,strategy:e},a=typeof r.force=="boolean"?r.force:false;return i!==void 0&&(s.store=i),a&&(s.force=a),s}async function qi(r,e,t,o=false,n,i=true){try{let s=typeof r.browser=="string"?r.browser:void 0,a=typeof r.profile=="string"?r.profile:void 0,l=typeof r.container=="string"||typeof r.container=="number"?r.container:void 0,u=$i.createStrategy(s,n,a,l),f=new Br(u),m=Array.isArray(e)?e:[e],x=mp(r,u,o,i,t,n),h=await pp(f,m,x);if(r["detect-jwt"]===!0||r["jwt-only"]===!0){let k={decodeClaims:!0,checkExpiration:!0,verbose:r.verbose===!0};typeof r["jwt-secret"]=="string"&&(k.validateSignature=!0,k.secretKey=r["jwt-secret"]),r["jwt-only"]===!0?h=bo(h,k):h=mt(h,k);}if(h.length===0){c.error("No results");let k=typeof r.profile=="string"?r.profile:void 0,v=typeof r.browser=="string"?r.browser:void 0;k&&v&&(c.error(`Could not find cookies for profile: ${k}`),c.error(`Try 'get-cookie --browser ${v} --list-profiles' to see available profiles`)),r["jwt-only"]===!0&&c.error("No cookies containing valid JWT tokens were found");return}gi(h,r);}catch(s){c.error(y(s));}}function ji(){c.log("Usage: get-cookie [name] [domain] [options]"),c.log("Build: 2026-08-23 21:50:34 UTC (main)"),c.log(""),c.log("Examples:"),c.log(" get-cookie auth example.com # Get specific cookie"),c.log(" get-cookie % github.com --output json # Get all cookies as JSON"),c.log(" get-cookie --url https://example.com # Extract from URL"),c.log(""),c.log("Options:"),c.log(" -h, --help Show this help message"),c.log(" -v, --verbose Enable verbose output"),c.log(" -f, --force Force operation despite warnings (e.g., locked databases)"),c.log(" --list-profiles List available browser profiles (optionally filter with --browser)"),c.log(""),c.log("Query options:"),c.log(" -n, --name PATTERN Cookie name pattern (% for wildcard)"),c.log(" -D, --domain PATTERN Cookie domain pattern"),c.log(" -u, --url URL URL to extract cookie specs from"),c.log(" --browser BROWSER Target specific browser (chrome|edge|arc|opera|opera-gx|firefox|safari)"),c.log(" --profile NAME Target specific browser profile by name (e.g., 'Default', 'Profile 1')"),c.log(" -c, --container NAME|ID Target Firefox container name, userContextId, or 'none'"),c.log(" --store PATH Path to a specific cookie store file"),c.log(" --include-expired Include expired cookies (filtered by default)"),c.log(" --include-all Include all duplicate cookies (newest only by default)"),c.log(""),c.log("JWT detection options:"),c.log(" -j, --detect-jwt Detect and decode JWT tokens in cookies"),c.log(" --jwt-only Only show cookies containing valid JWTs"),c.log(" --jwt-secret KEY Validate JWT signatures with provided secret"),c.log(""),c.log("Output options:"),c.log(" --output FORMAT Output format (json)"),c.log(" -d, --dump Dump all cookie details"),c.log(" -G, --dump-grouped Dump all results, grouped by profile"),c.log(" -r, --render Render all results in formatted output");}function dp(r,e){return {name:r||"%",domain:e||"%"}}function Hi(r){return r==="*"?"%":r}function Ui(r){try{let e=Gt(r);if(e.length===0)return;c.log(`${r} profiles:`);for(let t of e){let o=t.userName?` (${t.userName})`:"";c.log(` \u2022 ${t.name}${o} [${t.directory}]`);}c.log("");}catch(e){c.error(`Failed to list ${r} profiles:`,y(e));}}function Gi(){let r=rr[process.platform]??[],e=false;for(let t of r){let o=path.join(t,"profiles.ini");if(!A(o))continue;let n=ir(o);if(n.length!==0){e||(c.log("Firefox profiles:"),e=true);for(let i of n){let s=i.isRelative?path.join(t,i.path):i.path;c.log(` \u2022 ${i.name} [${s}]`);}}}e&&c.log("");}function gp(r){if(r){let t=r.toLowerCase();if(t==="safari"){c.log("Safari does not use named profiles");return}if(t==="firefox"){Gi();return}(Me[process.platform]??{})[t]?Ui(r):c.error(`Unknown browser: ${r}`);return}let e=Me[process.platform]??{};for(let t of Object.keys(e))Ui(t);Gi();}function hp(r,e){let t=r.url;if(typeof t=="string"){let i=ft(t);return Array.isArray(i)?i:(c.error("Invalid cookie specs from URL"),[])}let o=Hi(r.name??e[0]??"%"),n=Hi(r.domain??e[1]??"%");return [dp(o,n)]}async function yp(r,e){let t=hp(r,e);r.verbose===true&&c.log("cookieSpecs",t);try{let o=r["include-expired"]!==!0,n=r["include-all"]!==!0;await qi(r,t,void 0,o,r.store,n);}catch(o){c.error("Error querying cookies:",y(o));}}async function xp(){let r=process.argv.slice(2);if(r.length===0){ji();return}let{values:e,positionals:t}=mo(r);if(e.help===true){ji();return}if(e["list-profiles"]===true){let o=typeof e.browser=="string"?e.browser:void 0;gp(o);return}await yp(e,t);}xp().catch(r=>{c.error("Fatal error:",y(r)),process.exit(1);});
|
|
77
80
|
/*! Bundled license information:
|
|
78
81
|
|
|
79
82
|
lodash-es/lodash.js:
|
|
80
83
|
(**
|
|
81
84
|
* @license
|
|
82
85
|
* Lodash (Custom Build) <https://lodash.com/>
|
|
83
|
-
* Build: `lodash modularize exports="es" -o ./`
|
|
86
|
+
* Build: `lodash modularize exports="es" --repo lodash/lodash#4.18.1 -o ./`
|
|
84
87
|
* Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
|
|
85
88
|
* Released under MIT license <https://lodash.com/license>
|
|
86
89
|
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
|