@mherod/get-cookie 4.2.0 → 4.2.2

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/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var ze=Object.create;var T=Object.defineProperty;var Ae=Object.getOwnPropertyDescriptor;var $e=Object.getOwnPropertyNames;var Qe=Object.getPrototypeOf,Ne=Object.prototype.hasOwnProperty;var B=(o,e)=>()=>(o&&(e=o(o=0)),e);var K=(o,e)=>{for(var r in e)T(o,r,{get:e[r],enumerable:!0})},X=(o,e,r,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of $e(e))!Ne.call(o,i)&&i!==r&&T(o,i,{get:()=>e[i],enumerable:!(t=Ae(e,i))||t.enumerable});return o};var O=(o,e,r)=>(r=o!=null?ze(Qe(o)):{},X(e||!o||!o.__esModule?T(r,"default",{value:o,enumerable:!0}):r,o)),Me=o=>X(T({},"__esModule",{value:!0}),o);var Y,ee,P,je,M,oe=B(()=>{"use strict";Y=require("os"),ee=require("dotenv"),P=require("zod");(0,ee.config)();je=P.z.object({LOG_LEVEL:P.z.enum(["debug","info","warn","error"]).default("info"),HOME:P.z.string().optional().transform(o=>o??process.env.USERPROFILE??"").pipe(P.z.string().min(1))}),M=je.parse({LOG_LEVEL:process.env.LOG_LEVEL,HOME:(0,Y.homedir)()})});var re,Ve,ho,m,C=B(()=>{"use strict";re=require("consola");oe();Ve=(0,re.createConsola)({fancy:!0,formatOptions:{showLogLevel:!1,colors:!0,date:!1,compact:!0,columns:typeof process.stdout.columns=="number"?process.stdout.columns:80},level:M.LOG_LEVEL==="debug"?5:2}),ho=M.LOG_LEVEL==="debug",m=Ve});function te(o,e,r){let i=`${e?"\u2705":"\u274C"} ${o} ${e?"succeeded":"failed"}`;e?m.success(i,r):m.error(i,r)}function l(o,e,r){let t={...r??{},error:e instanceof Error?{name:e.name,message:e.message,stack:e.stack}:e};m.error(o,t)}function y(o,e,r){m.withTag(o).debug(e,r)}function ie(o){return m.withTag(o)}function d(o,e,r){m.withTag(o).warn(e,r)}var h=B(()=>{"use strict";C();C()});function so(o,e){if(o instanceof w)throw l("Command execution failed",o,{command:o.command,originalError:o.originalError}),o;if(o instanceof Error){let t=new w(o.message,e,o);throw l("Failed to execute command",o,{command:e,stack:o.stack}),t}let r=new w("Unknown error occurred during command execution",e);throw l("Failed to execute command",null,{error:o,command:e}),r}async function ye(o,e={}){if(!o||typeof o!="string")throw new w("Command must be a non-empty string",o);let r={encoding:"utf8",maxBuffer:5*1024*1024,timeout:3e4};try{let{stdout:t,stderr:i}=await io(o,{...r,...e}),s=t.trim();if(!s)throw i?new w(`Command failed with stderr: ${i}`,o):new w("Command returned empty result",o);return s}catch(t){so(t,o)}}var de,ge,io,w,he=B(()=>{"use strict";de=require("child_process"),ge=require("util");h();io=(0,ge.promisify)(de.exec),w=class extends Error{constructor(r,t,i){super(r);this.command=t;this.originalError=i;this.name="CommandExecutionError"}}});var Ce={};K(Ce,{getChromePassword:()=>ao});var ke,no,ao,we=B(()=>{"use strict";ke=require("lodash-es");he();no=async()=>ye('security find-generic-password -w -s "Chrome Safe Storage"'),ao=(0,ke.memoize)(no)});var lo={};K(lo,{getChromeCookie:()=>G,getCookie:()=>b,getFirefoxCookie:()=>W,getGroupedRenderedCookies:()=>Z,getMergedRenderedCookies:()=>J});module.exports=Me(lo);C();h();var fe=require("fs"),D=require("path"),ce=O(require("fast-glob"),1);h();var se=require("os"),ne=require("path"),E=(()=>{let o=(0,se.homedir)();if(!o)throw new Error("Unable to determine user home directory");return(0,ne.join)(o,"Library","Application Support","Google","Chrome")})();var ae=O(require("better-sqlite3"),1);h();function He(o){try{return new ae.default(o,{readonly:!0,fileMustExist:!0})}catch(e){throw l("Database open failed",e,{file:o}),e}}function Ge(o){try{return o.close(),Promise.resolve()}catch(e){return l("Database close failed",e),Promise.reject(e instanceof Error?e:new Error("Failed to close database: Unknown error"))}}async function I({file:o,sql:e,params:r,rowFilter:t,rowTransform:i}){let s;try{s=He(o);let c=s.prepare(e).all(r),f=t?c.filter(t):c;return i?f.map(i):f}catch(n){throw l("Database query failed",n,{file:o,sql:e}),n}finally{s&&await Ge(s)}}function We(o){if(typeof o!="string")return!1;let e=o.trim();return e.length===0?!1:(0,fe.existsSync)(e)}async function Ze(){let o=[(0,D.join)(E,"Default/Cookies"),(0,D.join)(E,"Profile */Cookies"),(0,D.join)(E,"Profile Default/Cookies")],e=[];for(let r of o){let t=await(0,ce.default)(r);e.push(...t)}return y("ChromeCookies","Found cookie files",{count:e.length,files:e}),e}function Je(o,e){let r=o==="%",t=r?"SELECT name, encrypted_value, host_key, expires_utc FROM cookies WHERE host_key LIKE ?":"SELECT name, encrypted_value, host_key, expires_utc FROM cookies WHERE name = ? AND host_key LIKE ?",i=r?[`%${e}%`]:[o,`%${e}%`];return{sql:t,params:i}}async function Ke(o,e,r){try{let{sql:t,params:i}=Je(e,r);y("ChromeCookies","Executing query",{sql:t,params:i});let s=await I({file:o,sql:t,params:i,rowTransform:n=>({name:n.name,domain:n.host_key,value:n.encrypted_value,expiry:n.expires_utc})});return te("QueryCookies",!0,{file:o,count:s.length}),s}catch(t){return l("Failed to read cookie file",t,{file:o}),[]}}async function me({name:o,domain:e,file:r}){let t=typeof r=="string"&&r.length>0?[r]:await Ze();if(t.length===0)return y("ChromeCookies","No cookie files found"),[];let i=[];for(let s of t){if(!We(s)){y("ChromeCookies","Cookie file missing or invalid",{file:s});continue}let n=await Ke(s,o,e);i.push(...n)}return y("ChromeCookies","Query complete",{totalCookies:i.length}),i}var Xe=require("fs"),Ye=require("path"),pe=O(require("fast-glob"),1);C();var eo=m.withTag("listChromeProfiles");function le(){let o=pe.default.sync("./**/Cookies",{cwd:E,absolute:!0});return eo.debug("Found cookie files:",o),o}var _=require("crypto"),j=require("lodash-es"),oo=(0,j.memoize)(o=>o.length>=3&&o[0]===118&&o[1]===49&&o[2]===48?o.slice(3):o,o=>o.toString("hex")),ro=(0,j.memoize)(o=>{let e=o[o.length-1];return e&&e<=16?o.slice(0,-e):o},o=>o.toString("hex"));function to(o){let e=[/.*?0t(.+)$/,/.*?1e`(.+)$/,/.*?[`'](.+)$/,/[^\x20-\x7E]*([\x20-\x7E].+)$/];for(let r of e){let i=o.match(r)?.[1]??"";if(i.length>0)return i}return o}async function ue(o,e){if(typeof e!="string")throw new Error("password must be a string");if(!Buffer.isBuffer(o))throw new Error("encryptedData must be a Buffer");return new Promise((r,t)=>{(0,_.pbkdf2)(e,"saltysalt",1003,16,"sha1",(i,s)=>{try{if(i){t(new Error("Failed to derive key: "+i.message));return}let n=oo(o);if(n.length%16!==0){t(new Error("Encrypted data length is not a multiple of 16"));return}let c=Buffer.alloc(16," "),f=(0,_.createDecipheriv)("aes-128-cbc",s,c);f.setAutoPadding(!1);let p=f.update(n);try{f.final()}catch(g){t(new Error("Failed to finalize decryption: "+g.message));return}p=ro(p);let u=p.toString("utf8");r(to(u))}catch(n){t(new Error("Decryption failed: "+n.message))}})})}var xe=require("lodash-es");h();var be=(0,xe.memoize)(async()=>{if(process.platform!=="darwin")throw l("Chrome password retrieval failed",new Error("This only works on macOS"),{platform:process.platform}),new Error("This only works on macOS");try{let{getChromePassword:o}=await Promise.resolve().then(()=>(we(),Ce)),e=await o();return y("ChromePassword","Retrieved password successfully",{platform:"macOS"}),e}catch(o){throw l("Chrome password retrieval failed",o,{platform:"macOS"}),o}});function fo(o){return typeof o!="number"||o<=0?"Infinity":new Date(o)}function Ee(o,e,r,t,i,s){return{domain:o,name:e,value:r,expiry:fo(t),meta:{file:i,browser:"Chrome",decrypted:s}}}var S=class{constructor(){this.logger=ie("ChromeCookieQueryStrategy");this.browserName="Chrome"}async queryCookies(e,r){try{if(this.logger.info("Querying cookies",{name:e,domain:r}),process.platform!=="darwin")return this.logger.warn("Platform not supported",{platform:process.platform}),[];let t=le();if(t.length===0)return this.logger.warn("No Chrome cookie files found"),[];let i=await be();return(await Promise.all(t.map(n=>this.processFile(n,e,r,i)))).flat()}catch(t){return t instanceof Error?l("Failed to query cookies",t,{name:e,domain:r}):l("Failed to query cookies",new Error(String(t)),{name:e,domain:r}),[]}}async processFile(e,r,t,i){try{let s=await me({name:r,domain:t,file:e}),n={file:e,password:i};return(await Promise.allSettled(s.map(f=>this.processCookie(f,n)))).map(f=>f.status==="fulfilled"?f.value:null).filter(f=>f!==null)}catch(s){return s instanceof Error?this.logger.error("Failed to process cookie file",{error:s,file:e}):this.logger.error("Failed to process cookie file",{error:String(s),file:e}),[]}}async processCookie(e,r){try{let t=Buffer.isBuffer(e.value)?e.value:Buffer.from(String(e.value)),i=await ue(t,r.password);return Ee(e.domain,e.name,i,e.expiry,r.file,!0)}catch(t){return t instanceof Error?this.logger.warn("Failed to decrypt cookie",{error:t}):this.logger.warn("Failed to decrypt cookie",{error:String(t)}),Ee(e.domain,e.name,e.value.toString("utf-8"),e.expiry,r.file,!1)}}};var Se=require("os"),V=require("path"),ve=O(require("fast-glob"),1);h();function co(){let o=(0,Se.homedir)();if(!o)return d("FirefoxCookieQuery","Failed to get home directory"),[];let e=[(0,V.join)(o,"Library/Application Support/Firefox/Profiles/*/cookies.sqlite"),(0,V.join)(o,".mozilla/firefox/*/cookies.sqlite")],r=[];for(let t of e){let i=ve.default.sync(t);r.push(...i)}return y("FirefoxCookieQuery","Found Firefox cookie files",{files:r}),r}var v=class{constructor(){this.browserName="Firefox"}async queryCookies(e,r){let t=co(),i=[];for(let s of t)try{let n=await I({file:s,sql:"SELECT name, value, host as domain, expiry FROM moz_cookies WHERE name = ? AND host LIKE ?",params:[e,`%${r}%`],rowTransform:c=>({name:c.name,value:c.value,domain:c.domain,expiry:c.expiry>0?new Date(c.expiry*1e3):"Infinity",meta:{file:s,browser:"Firefox",decrypted:!1}})});i.push(...n)}catch(n){n instanceof Error?d("FirefoxCookieQuery",`Error reading Firefox cookie file ${s}`,{error:n.message}):d("FirefoxCookieQuery",`Error reading Firefox cookie file ${s}`)}return i}};var _e=require("os"),qe=require("path");h();var Fe=require("buffer"),Le=require("fs"),Te=require("os"),Ie=require("path");h();h();var z=require("buffer");var Re=O(require("destr"),1),a=require("zod"),q=a.z.string().trim().min(1,"Domain cannot be empty").refine(o=>/^\.?[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(o),"Invalid domain format"),U=a.z.string().trim().min(1,"Cookie name cannot be empty").refine(o=>o==="%"||/^[!#$%&'()*+\-.:0-9A-Z \^_`a-z|~]+$/.test(o),"Invalid cookie name format - must contain only valid characters (letters, numbers, and certain symbols) or be '%' for wildcard"),Be=a.z.string().trim().min(1,"Path cannot be empty").refine(o=>o.startsWith("/"),"Path must start with /").refine(o=>/^\/[!#$%&'()*+,\-./:=@\w~]*$/.test(o),"Invalid path format - must contain only valid URL path characters").default("/"),Oe=a.z.string().trim().transform(o=>(0,Re.default)(o)).pipe(a.z.any()),Pe=a.z.object({name:U,value:Oe,domain:q,path:Be,expiry:a.z.number().int(),creation:a.z.number().int(),flags:a.z.number().optional(),version:a.z.number().int().optional(),port:a.z.number().int().optional(),comment:a.z.string().optional(),commentURL:a.z.string().optional()}),Zo=a.z.object({name:U,domain:q}).strict(),mo=a.z.object({file:a.z.string().trim().min(1,"File path cannot be empty").optional(),browser:a.z.string().trim().optional(),decrypted:a.z.boolean().optional(),secure:a.z.boolean().optional(),httpOnly:a.z.boolean().optional(),path:Be.optional()}).catchall(a.z.unknown()).strict(),F=a.z.object({domain:q,name:U,value:Oe,expiry:a.z.union([a.z.literal("Infinity"),a.z.date(),a.z.number().int().positive("Expiry must be a positive number")]).optional(),meta:mo.optional()}).strict(),Jo=a.z.object({expiry:a.z.number().int().optional(),domain:q,name:U,value:a.z.union([a.z.string(),a.z.instanceof(Buffer)])}).strict(),Ko=a.z.object({format:a.z.enum(["merged","grouped"]).optional(),separator:a.z.string().optional(),showFilePaths:a.z.boolean().optional()}).strict(),po=a.z.enum(["Chrome","Firefox","Safari","internal","unknown"]),Xo=a.z.object({browserName:po,queryCookies:a.z.function().args(a.z.string(),a.z.string()).returns(a.z.promise(a.z.array(F)))}).strict();var A=class{constructor(e){this.version=0;this.url="";this.name="";this.path="";this.value="";this.flags={isSecure:!1,isHTTPOnly:!1,unknown1:!1,unknown2:!1};this.expiration=0;this.creation=0;let r={offset:0,buffer:e};this.decode(r)}decodeUrlValue(e){let r=e,t;do{t=r;try{r=decodeURIComponent(r)}catch{return t}}while(r!==t&&r.includes("%"));return r}decodeJwtPayload(e){let r=e.split(".");if(r.length!==3)return null;try{let t=z.Buffer.from(r[1],"base64").toString("utf8"),i=JSON.parse(t);return JSON.stringify(i)}catch{return null}}parseJsonValue(e){try{let r=JSON.parse(e);return JSON.stringify(r)}catch{return null}}processValue(e){let r=this.decodeUrlValue(e);if(r.match(/^ey[A-Za-z0-9_-]+\.ey[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/)){let t=this.decodeJwtPayload(r);if(typeof t=="string"&&t.length>0)return t}if(r.startsWith("{")||r.startsWith("[")){let t=this.parseJsonValue(r);if(typeof t=="string"&&t.length>0)return t}return r}toCookieRow(){try{let e=this.convertFlags(),r=this.url.replace(/^https?:\/\//,"").replace(/\/.*$/,"")||"uk";return Pe.parse({name:this.name.replace(/^: /,""),value:this.processValue(this.value)||"",domain:r,path:this.path||"/",expiry:this.expiration,creation:this.creation,flags:e,version:this.version,port:this.port,comment:this.comment,commentURL:this.commentURL})}catch{return null}}readNullTerminatedString(e,r){let t=r;for(;t<e.buffer.length&&e.buffer[t]!==0;)t++;return e.buffer.toString("utf8",r,t)||""}readHeader(e){let r=e.buffer.readUInt32LE(e.offset);e.offset+=4,e.offset+=4;let t=e.buffer.readUInt32LE(e.offset);e.offset+=4,this.flags={isSecure:(t&1)!==0,isHTTPOnly:(t&4)!==0,unknown1:(t&8)!==0,unknown2:(t&16)!==0};let i=e.buffer.readUInt32LE(e.offset);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{size:r,hasPort:i,offsets:s}}readTimestamps(e){let r=z.Buffer.alloc(8);for(let n=0;n<8;n++)r[n]=e.buffer[e.offset+n];let t=r.readDoubleLE(0);e.offset+=8;let i=z.Buffer.alloc(8);for(let n=0;n<8;n++)i[n]=e.buffer[e.offset+n];let s=i.readDoubleLE(0);e.offset+=8,this.expiration=t,this.creation=s}readStrings(e,r,t){let s=[{field:"url",offset:t.urlOffset},{field:"name",offset:t.nameOffset},{field:"path",offset:t.pathOffset},{field:"value",offset:t.valueOffset},{field:"comment",offset:t.commentOffset}].filter(n=>n.offset>0).sort((n,c)=>n.offset-c.offset);for(let n=0;n<s.length;n++){let{field:c,offset:f}=s[n],u=(n<s.length-1?s[n+1].offset:r)-f,g=0+f;for(;g<0+f+u&&e.buffer[g]!==0;)g++;let x=e.buffer.toString("utf8",0+f,g);switch(c){case"url":this.url=x;break;case"name":this.name=x;break;case"path":this.path=x;break;case"value":this.value=x;break;case"comment":this.comment=x;break}}}decode(e){let{size:r,hasPort:t,offsets:i}=this.readHeader(e),s=e.offset;e.offset=s+24,this.readTimestamps(e),t>0&&(this.port=e.buffer.readUInt16LE(e.offset),e.offset+=2),e.offset=s,this.readStrings(e,r,i)}convertFlags(){return(this.flags.isSecure?1:0)|(this.flags.isHTTPOnly?4:0)|(this.flags.unknown1?8:0)|(this.flags.unknown2?16:0)}};var R=class R{constructor(e){this.cookies=[];let r={offset:0,buffer:e};this.decode(r)}toCookieRows(){let e=[];for(let r of this.cookies)try{let t=r.toCookieRow();t!==null&&e.push(t)}catch(t){let i=t instanceof Error?t.message:String(t);d("BinaryCookies","Error converting cookie",{error:i})}return e}decode(e){let r=e.buffer.readUInt32BE(e.offset);if(e.offset+=4,r!==R.HEADER)throw new Error("Invalid page header");let t=e.buffer.readUInt32LE(e.offset);e.offset+=4;let i=e.offset-8,s=[];for(let c=0;c<t;c++){let f=e.buffer.readUInt32LE(e.offset);s.push(f),e.offset+=4}let n=e.buffer.readUInt32BE(e.offset);if(e.offset+=4,n!==R.FOOTER)throw new Error("Invalid page footer");for(let c=0;c<t;c++)try{let f=s[c],p=i+f,u=e.buffer.readUInt32LE(p);if(u<48){d("BinaryCookies",`Invalid cookie size ${u} at index ${c}`);continue}if(p+u>e.buffer.length){d("BinaryCookies",`Cookie size ${u} at index ${c} would exceed buffer length`);continue}let g=e.buffer.subarray(p,p+u),x=new A(g);this.cookies.push(x)}catch(f){let p=f instanceof Error?f.message:String(f);d("BinaryCookies",`Error decoding cookie at index ${c}`,{error:p})}}};R.HEADER=256,R.FOOTER=0;var $=R;var k=class k{constructor(e){let r={offset:0,buffer:e};this.pages=[],this.metadata={},this.decode(r)}static fromFile(e){let r=(0,Le.readFileSync)(e);return new k(r)}static fromDefaultPath(){return k.fromFile(k.DEFAULT_COOKIE_PATH)}toCookieRows(){let e=[];for(let r of this.pages)try{let t=r.toCookieRows();Array.isArray(t)&&e.push(...t)}catch(t){let i=t instanceof Error?t.message:String(t);d("BinaryCookies","Error converting page cookies",{error:i})}return e}decode(e){try{let r=e.buffer.subarray(e.offset,e.offset+4);if(e.offset+=4,!r.equals(k.MAGIC))throw new Error("Missing magic value");let t=e.buffer.readUInt32BE(e.offset);e.offset+=4;let i=[];for(let p=0;p<t;p++)i.push(e.buffer.readUInt32BE(e.offset)),e.offset+=4;let s=e.offset;for(let p of i)try{let u=e.buffer.subarray(s,s+p),g=new $(u);this.pages.push(g),s+=p}catch(u){let g=u instanceof Error?u.message:String(u);d("BinaryCookies","Error decoding page",{error:g}),s+=p}e.offset=s;let n=e.buffer.readUInt32BE(e.offset);e.offset+=4;let c=e.buffer.readBigUInt64BE(e.offset);e.offset+=8,c!==k.FOOTER&&d("BinaryCookies","Invalid cookie file format: wrong footer");let f=e.buffer.subarray(e.offset);this.metadata={}}catch(r){let t=r instanceof Error?r.message:String(r);throw d("BinaryCookies","Error decoding binary cookies file",{error:t}),r}}};k.MAGIC=Fe.Buffer.from("cook","utf8"),k.FOOTER=BigInt("0x071720050000004b"),k.DEFAULT_COOKIE_PATH=(0,Ie.join)((0,Te.homedir)(),"Library/Containers/com.apple.Safari/Data/Library/Cookies/Cookies.binarycookies");var Q=k;function De(o){return Q.fromFile(o).toCookieRows()}var N=class{constructor(){this.browserName="Safari"}getCookieDbPath(e){return(0,qe.join)(e,"Library","Containers","com.apple.Safari","Data","Library","Cookies","Cookies.binarycookies")}decodeCookies(e,r,t){try{return De(e).filter(s=>(r==="%"||s.name===r)&&(t==="%"||s.domain.includes(t))).map(s=>({domain:s.domain,name:s.name,value:Buffer.isBuffer(s.value)?s.value.toString():String(s.value),expiry:typeof s.expiry=="number"&&s.expiry>0?new Date(s.expiry*1e3):"Infinity",meta:{file:e,browser:"Safari",decrypted:!1}}))}catch(i){return i instanceof Error?l("SafariCookieQueryStrategy",`Error decoding ${e}`,{error:i,name:r,domain:t}):l("SafariCookieQueryStrategy",`Error decoding ${e}`,{error:"Unknown error",name:r,domain:t}),[]}}async queryCookies(e,r){let t=(0,_e.homedir)();if(typeof t!="string"||t.length===0)return l("SafariCookieQueryStrategy","Failed to get home directory"),Promise.resolve([]);let i=this.getCookieDbPath(t);return Promise.resolve(this.decodeCookies(i,e||"%",r||"%"))}};async function H(o){if(!o.name||!o.domain)return[];let{name:e,domain:r}=o;if(typeof e!="string"||typeof r!="string")return[];let t=[new S,new v,new N];return(await Promise.allSettled(t.map(s=>s.queryCookies(e,r)))).filter(s=>s.status==="fulfilled").flatMap(s=>s.value)}async function b(o){try{return await H(o)}catch(e){return m.warn("Error querying cookies:",e instanceof Error?e.message:String(e)),[]}}C();async function G(o){try{return await new S().queryCookies(o.name,o.domain)}catch(e){return m.warn("Error querying Chrome cookies:",e),[]}}C();async function W(o){try{return await new v().queryCookies(o.name,o.domain)}catch(e){return m.warn("Error querying Firefox cookies:",e instanceof Error?e.message:String(e)),[]}}C();var Ue=require("lodash-es");function L(o,e={}){let{format:r="merged",showFilePaths:t=!0,separator:i="; "}=e;if(o.length===0)return r==="merged"?"":[];if(r==="merged")return o.map(n=>n.value).join(i);let s=(0,Ue.groupBy)(o,n=>n.meta?.file??"unknown");return Object.entries(s).map(([n,c])=>{let f=c.map(p=>p.value).join(i);return t?`${n}: ${f}`:f})}async function Z(o,e={}){try{let r=await b(o);if(!Array.isArray(r))return[];let t=r.filter(i=>{let s=F.safeParse(i);return s.success?!0:(m.warn("Invalid cookie format:",s.error.format()),!1)});return L(t,{...e,format:"grouped"})}catch(r){return m.warn("Error getting grouped rendered cookies:",r instanceof Error?r.message:String(r)),[]}}C();async function J(o,e){try{let r=await b(o);if(!Array.isArray(r))return"";let t=r.filter(s=>{let n=F.safeParse(s);return n.success?!0:(m.warn("Invalid cookie format:",n.error.format()),!1)}),i=L(t,{...e,format:"merged"});return typeof i=="string"?i:""}catch(r){return m.warn("Error getting merged rendered cookies:",r instanceof Error?r.message:String(r)),""}}0&&(module.exports={getChromeCookie,getCookie,getFirefoxCookie,getGroupedRenderedCookies,getMergedRenderedCookies});
1
+ "use strict";var Ie=Object.create;var T=Object.defineProperty;var De=Object.getOwnPropertyDescriptor;var Ue=Object.getOwnPropertyNames;var _e=Object.getPrototypeOf,ze=Object.prototype.hasOwnProperty;var qe=(r,e)=>{for(var o in e)T(r,o,{get:e[o],enumerable:!0})},Y=(r,e,o,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ue(e))!ze.call(r,i)&&i!==o&&T(r,i,{get:()=>e[i],enumerable:!(t=De(e,i))||t.enumerable});return r};var B=(r,e,o)=>(o=r!=null?Ie(_e(r)):{},Y(e||!r||!r.__esModule?T(o,"default",{value:r,enumerable:!0}):o,r)),Ae=r=>Y(T({},"__esModule",{value:!0}),r);var ao={};qe(ao,{getChromeCookie:()=>Z,getCookie:()=>w,getFirefoxCookie:()=>J,getGroupedRenderedCookies:()=>K,getMergedRenderedCookies:()=>X});module.exports=Ae(ao);var re=require("consola");var ee=require("os"),oe=require("dotenv"),O=require("zod");(0,oe.config)();var $e=O.z.object({LOG_LEVEL:O.z.enum(["debug","info","warn","error"]).default("info"),HOME:O.z.string().optional().transform(r=>r??process.env.USERPROFILE??"").pipe(O.z.string().min(1))}),M=$e.parse({LOG_LEVEL:process.env.LOG_LEVEL,HOME:(0,ee.homedir)()});var Qe=(0,re.createConsola)({fancy:!0,formatOptions:{showLogLevel:!1,colors:!0,date:!1,compact:!0,columns:typeof process.stdout.columns=="number"?process.stdout.columns:80},level:M.LOG_LEVEL==="debug"?5:2}),uo=M.LOG_LEVEL==="debug",Ne=Qe,u=Ne;function te(r,e,o){e?u.success(`${r} succeeded`,o):u.error(`${r} failed`,o)}function p(r,e,o){let t=e instanceof Error?e.message:String(e);u.error(r,{...o,error:t})}function y(r,e,o){u.warn(`[${r}] ${e}`,o)}function g(r){return u.withTag(r)}var ae=require("fs"),D=require("path"),fe=B(require("fast-glob"),1);var ie=require("os"),se=require("path"),E=(()=>{let r=(0,ie.homedir)();if(!r)throw new Error("Unable to determine user home directory");return(0,se.join)(r,"Library","Application Support","Google","Chrome")})();var ne=B(require("better-sqlite3"),1);function Me(r){try{return new ne.default(r,{readonly:!0,fileMustExist:!0})}catch(e){throw p("Database open failed",e,{file:r}),e}}function je(r){try{return r.close(),Promise.resolve()}catch(e){return p("Database close failed",e),Promise.reject(e instanceof Error?e:new Error("Failed to close database: Unknown error"))}}async function I({file:r,sql:e,params:o,rowFilter:t,rowTransform:i}){let s;try{s=Me(r);let c=s.prepare(e).all(o),f=t?c.filter(t):c;return i?f.map(i):f}catch(n){throw p("Database query failed",n,{file:r,sql:e}),n}finally{s&&await je(s)}}var P=g("getEncryptedChromeCookie");function Ve(r){if(typeof r!="string")return!1;let e=r.trim();return e.length===0?!1:(0,ae.existsSync)(e)}async function He(){let r=[(0,D.join)(E,"Default/Cookies"),(0,D.join)(E,"Profile */Cookies"),(0,D.join)(E,"Profile Default/Cookies")],e=[];for(let o of r){let t=await(0,fe.default)(o);e.push(...t)}return P.debug("ChromeCookies","Found cookie files",{count:e.length,files:e}),e}function Ge(r,e){let o=r==="%",t=o?"SELECT name, encrypted_value, host_key, expires_utc FROM cookies WHERE host_key LIKE ?":"SELECT name, encrypted_value, host_key, expires_utc FROM cookies WHERE name = ? AND host_key LIKE ?",i=o?[`%${e}%`]:[r,`%${e}%`];return{sql:t,params:i}}async function We(r,e,o){try{let{sql:t,params:i}=Ge(e,o);P.debug("ChromeCookies","Executing query",{sql:t,params:i});let s=await I({file:r,sql:t,params:i,rowTransform:n=>({name:n.name,domain:n.host_key,value:n.encrypted_value,expiry:n.expires_utc})});return te("QueryCookies",!0,{file:r,count:s.length}),s}catch(t){return p("Failed to read cookie file",t,{file:r}),[]}}async function ce({name:r,domain:e,file:o}){let t=typeof o=="string"&&o.length>0?[o]:await He();if(t.length===0)return P.debug("ChromeCookies","No cookie files found"),[];let i=[];for(let s of t){if(!Ve(s)){P.debug("ChromeCookies","Cookie file missing or invalid",{file:s});continue}let n=await We(s,r,e);i.push(...n)}return P.debug("ChromeCookies","Query complete",{totalCookies:i.length}),i}var Ze=require("fs"),Je=require("path"),me=B(require("fast-glob"),1);var Ke=g("listChromeProfiles");function ue(){let r=me.default.sync("./**/Cookies",{cwd:E,absolute:!0});return Ke.debug("Found cookie files:",r),r}var U=require("crypto"),j=require("lodash-es"),Xe=(0,j.memoize)(r=>r.length>=3&&r[0]===118&&r[1]===49&&r[2]===48?r.slice(3):r,r=>r.toString("hex")),Ye=(0,j.memoize)(r=>{let e=r[r.length-1];return e&&e<=16?r.slice(0,-e):r},r=>r.toString("hex"));function eo(r){let e=[/.*?0t(.+)$/,/.*?1e`(.+)$/,/.*?[`'](.+)$/,/[^\x20-\x7E]*([\x20-\x7E].+)$/];for(let o of e){let i=r.match(o)?.[1]??"";if(i.length>0)return i}return r}async function pe(r,e){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,t)=>{(0,U.pbkdf2)(e,"saltysalt",1003,16,"sha1",(i,s)=>{try{if(i){t(new Error("Failed to derive key: "+i.message));return}let n=Xe(r);if(n.length%16!==0){t(new Error("Encrypted data length is not a multiple of 16"));return}let c=Buffer.alloc(16," "),f=(0,U.createDecipheriv)("aes-128-cbc",s,c);f.setAutoPadding(!1);let m=f.update(n);try{f.final()}catch(d){t(new Error("Failed to finalize decryption: "+d.message));return}m=Ye(m);let l=m.toString("utf8");o(eo(l))}catch(n){t(new Error("Decryption failed: "+n.message))}})})}var H=require("os");var le=require("child_process"),ge=require("util");var oo=(0,ge.promisify)(le.exec),V=class extends Error{constructor(o,t,i){super(o);this.command=t;this.originalError=i;this.name="CommandExecutionError"}};async function de(r,e){try{let o=await oo(r,{...e,encoding:"utf8"});return{stdout:o.stdout.toString(),stderr:o.stderr.toString()}}catch(o){throw p("Command execution failed",o,{command:r}),new V(o instanceof Error?o.message:String(o),r,o instanceof Error?o:void 0)}}async function ye(){return(await de('security find-generic-password -w -s "Chrome Safe Storage"')).stdout.trim()}async function he(){switch((0,H.platform)()){case"darwin":return ye();default:throw new Error(`Platform ${(0,H.platform)()} is not supported`)}}function ro(r){return typeof r!="number"||r<=0?"Infinity":new Date(r)}function Ce(r,e,o,t,i,s){return{domain:r,name:e,value:o,expiry:ro(t),meta:{file:i,browser:"Chrome",decrypted:s}}}var S=class{constructor(){this.logger=g("ChromeCookieQueryStrategy");this.browserName="Chrome"}async queryCookies(e,o,t){try{if(this.logger.info("Querying cookies",{name:e,domain:o,store:t}),process.platform!=="darwin")return this.logger.warn("Platform not supported",{platform:process.platform}),[];let i=t??ue(),s=Array.isArray(i)?i:[i];if(s.length===0)return this.logger.warn("No Chrome cookie files found"),[];let n=await he();return(await Promise.all(s.map(f=>this.processFile(f,e,o,n)))).flat()}catch(i){return i instanceof Error?p("Failed to query cookies",i,{name:e,domain:o}):p("Failed to query cookies",new Error(String(i)),{name:e,domain:o}),[]}}async processFile(e,o,t,i){try{let s=await ce({name:o,domain:t,file:e}),n={file:e,password:i};return(await Promise.allSettled(s.map(f=>this.processCookie(f,n)))).map(f=>f.status==="fulfilled"?f.value:null).filter(f=>f!==null)}catch(s){return s instanceof Error?this.logger.error("Failed to process cookie file",{error:s,file:e}):this.logger.error("Failed to process cookie file",{error:String(s),file:e}),[]}}async processCookie(e,o){try{let t=Buffer.isBuffer(e.value)?e.value:Buffer.from(String(e.value)),i=await pe(t,o.password);return Ce(e.domain,e.name,i,e.expiry,o.file,!0)}catch(t){return t instanceof Error?this.logger.warn("Failed to decrypt cookie",{error:t}):this.logger.warn("Failed to decrypt cookie",{error:String(t)}),Ce(e.domain,e.name,e.value.toString("utf-8"),e.expiry,o.file,!1)}}};var ke=require("os"),G=require("path"),be=B(require("fast-glob"),1);var to=g("FirefoxCookieQueryStrategy");function io(){let r=(0,ke.homedir)();if(!r)return y("FirefoxCookieQuery","Failed to get home directory"),[];let e=[(0,G.join)(r,"Library/Application Support/Firefox/Profiles/*/cookies.sqlite"),(0,G.join)(r,".mozilla/firefox/*/cookies.sqlite")],o=[];for(let t of e){let i=be.default.sync(t);o.push(...i)}return to.debug("Found Firefox cookie files",{files:o}),o}var v=class{constructor(){this.browserName="Firefox"}async queryCookies(e,o,t){let i=t??io(),s=Array.isArray(i)?i:[i],n=[];for(let c of s)try{let f=await I({file:c,sql:"SELECT name, value, host as domain, expiry FROM moz_cookies WHERE name = ? AND host LIKE ?",params:[e,`%${o}%`],rowTransform:m=>({name:m.name,value:m.value,domain:m.domain,expiry:m.expiry>0?new Date(m.expiry*1e3):"Infinity",meta:{file:c,browser:"Firefox",decrypted:!1}})});n.push(...f)}catch(f){f instanceof Error?y("FirefoxCookieQuery",`Error reading Firefox cookie file ${c}`,{error:f.message}):y("FirefoxCookieQuery",`Error reading Firefox cookie file ${c}`)}return n}};var Fe=require("os"),Le=require("path");var ve=require("buffer"),Re=require("fs"),Be=require("os"),Oe=require("path");var q=require("buffer");var we=B(require("destr"),1),a=require("zod"),_=a.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"),z=a.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"),xe=a.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("/"),Ee=a.z.string().trim().transform(r=>(0,we.default)(r)).pipe(a.z.any()),Se=a.z.object({name:z,value:Ee,domain:_,path:xe,expiry:a.z.number().int(),creation:a.z.number().int(),flags:a.z.number().optional(),version:a.z.number().int().optional(),port:a.z.number().int().optional(),comment:a.z.string().optional(),commentURL:a.z.string().optional()}),Vo=a.z.object({name:z,domain:_}).strict(),so=a.z.object({file:a.z.string().trim().min(1,"File path cannot be empty").optional(),browser:a.z.string().trim().optional(),decrypted:a.z.boolean().optional(),secure:a.z.boolean().optional(),httpOnly:a.z.boolean().optional(),path:xe.optional()}).catchall(a.z.unknown()).strict(),F=a.z.object({domain:_,name:z,value:Ee,expiry:a.z.union([a.z.literal("Infinity"),a.z.date(),a.z.number().int().positive("Expiry must be a positive number")]).optional(),meta:so.optional()}).strict(),Ho=a.z.object({expiry:a.z.number().int().optional(),domain:_,name:z,value:a.z.union([a.z.string(),a.z.instanceof(Buffer)])}).strict(),Go=a.z.object({format:a.z.enum(["merged","grouped"]).optional(),separator:a.z.string().optional(),showFilePaths:a.z.boolean().optional()}).strict(),no=a.z.enum(["Chrome","Firefox","Safari","internal","unknown"]),Wo=a.z.object({browserName:no,queryCookies:a.z.function().args(a.z.string(),a.z.string(),a.z.string().optional()).returns(a.z.promise(a.z.array(F)))}).strict();var k=g("BinaryCodableCookie"),A=class{constructor(e){this.version=0;this.url="";this.name="";this.path="";this.value="";this.flags={isSecure:!1,isHTTPOnly:!1,unknown1:!1,unknown2:!1};this.expiration=0;this.creation=0;let o={offset:0,buffer:e};this.decode(o)}decodeUrlValue(e){let o=e,t;do{t=o;try{o=decodeURIComponent(o)}catch{return t}}while(o!==t&&o.includes("%"));return o}decodeJwtPayload(e){let o=e.split(".");if(o.length!==3)return null;try{let t=q.Buffer.from(o[1],"base64").toString("utf8"),i=JSON.parse(t);return JSON.stringify(i)}catch{return null}}parseJsonValue(e){try{let o=JSON.parse(e);return JSON.stringify(o)}catch{return null}}processValue(e){let o=this.decodeUrlValue(e);if(o.match(/^ey[A-Za-z0-9_-]+\.ey[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/)){let t=this.decodeJwtPayload(o);if(typeof t=="string"&&t.length>0)return t}if(o.startsWith("{")||o.startsWith("[")){let t=this.parseJsonValue(o);if(typeof t=="string"&&t.length>0)return t}return o}toCookieRow(){try{let e=this.convertFlags(),o=this.url.replace(/^https?:\/\//,"").replace(/\/.*$/,"")||"uk",t=978307200,i=this.expiration>0?this.expiration+t:this.expiration,s=this.creation>0?this.creation+t:this.creation;return Se.parse({name:this.name.replace(/^: /,""),value:this.processValue(this.value)||"",domain:o,path:this.path||"/",expiry:i,creation:s,flags:e,version:this.version,port:this.port,comment:this.comment,commentURL:this.commentURL})}catch{return null}}readNullTerminatedString(e,o){let t=o;for(;t<e.buffer.length&&e.buffer[t]!==0;)t++;return e.buffer.toString("utf8",o,t)||""}readHeader(e){let o=e.buffer.readUInt32LE(e.offset);k.debug("Cookie size:",o),e.offset+=4;let t=e.buffer.readUInt32LE(e.offset);k.debug("Cookie version:",t),e.offset+=4;let i=e.buffer.readUInt32LE(e.offset);k.debug("Cookie flags:",i.toString(2).padStart(8,"0")),e.offset+=4,this.flags={isSecure:(i&1)!==0,isHTTPOnly:(i&4)!==0,unknown1:(i&8)!==0,unknown2:(i&16)!==0};let s=e.buffer.readUInt32LE(e.offset);k.debug("Has port:",s),e.offset+=4;let n={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 k.debug("String offsets:",n),{size:o,hasPort:s,offsets:n}}readTimestamps(e){let o=q.Buffer.alloc(8);for(let n=0;n<8;n++)o[n]=e.buffer[e.offset+n];let t=o.readDoubleLE(0);e.offset+=8;let i=q.Buffer.alloc(8);for(let n=0;n<8;n++)i[n]=e.buffer[e.offset+n];let s=i.readDoubleLE(0);e.offset+=8,this.expiration=t,this.creation=s}readStrings(e,o,t){k.debug("Reading strings from cookie buffer of size:",o);let s=[{field:"url",offset:t.urlOffset},{field:"name",offset:t.nameOffset},{field:"path",offset:t.pathOffset},{field:"value",offset:t.valueOffset},{field:"comment",offset:t.commentOffset}].filter(n=>n.offset>0).sort((n,c)=>n.offset-c.offset);k.debug("Reading strings in order:",s.map(n=>n.field));for(let n=0;n<s.length;n++){let{field:c,offset:f}=s[n],l=(n<s.length-1?s[n+1].offset:o)-f,d=0+f;for(;d<0+f+l&&e.buffer[d]!==0;)d++;let x=e.buffer.toString("utf8",0+f,d);switch(k.debug(`Read ${c}:`,x),c){case"url":this.url=x;break;case"name":this.name=x;break;case"path":this.path=x;break;case"value":this.value=x;break;case"comment":this.comment=x;break}}}decode(e){let{size:o,hasPort:t,offsets:i}=this.readHeader(e),s=e.offset;e.offset=s+24,this.readTimestamps(e),t>0&&(this.port=e.buffer.readUInt16LE(e.offset),e.offset+=2),e.offset=s,this.readStrings(e,o,i)}convertFlags(){return(this.flags.isSecure?1:0)|(this.flags.isHTTPOnly?4:0)|(this.flags.unknown1?8:0)|(this.flags.unknown2?16:0)}};var h=g("BinaryCodablePage"),R=class R{constructor(e){this.cookies=[];let o={offset:0,buffer:e};this.decode(o)}toCookieRows(){let e=[];for(let o of this.cookies)try{let t=o.toCookieRow();t!==null&&e.push(t)}catch(t){let i=t instanceof Error?t.message:String(t);y("BinaryCookies","Error converting cookie",{error:i})}return e}decode(e){let o=e.buffer.readUInt32BE(e.offset);if(h.debug("Page header:",o.toString(16)),e.offset+=4,o!==R.HEADER)throw new Error("Invalid page header");let t=e.buffer.readUInt32LE(e.offset);h.debug("Cookie count:",t),e.offset+=4;let i=e.offset-8;h.debug("Page start offset:",i);let s=[];for(let c=0;c<t;c++){let f=e.buffer.readUInt32LE(e.offset);s.push(f),h.debug(`Cookie ${c} offset:`,f),e.offset+=4}let n=e.buffer.readUInt32BE(e.offset);if(h.debug("Page footer:",n.toString(16)),e.offset+=4,n!==R.FOOTER)throw new Error("Invalid page footer");for(let c=0;c<t;c++)try{let f=s[c];h.debug(`Reading cookie ${c} at offset:`,f);let m=e.buffer.readUInt32LE(f);if(h.debug(`Cookie ${c} size:`,m),m<48){h.warn(`Invalid cookie size ${m} at index ${c}`);continue}if(f+m>e.buffer.length){h.warn(`Cookie size ${m} at index ${c} would exceed buffer length ${e.buffer.length}`);continue}let l=e.buffer.subarray(f,f+m),d=new A(l);this.cookies.push(d)}catch(f){h.warn("Invalid cookie data",{error:f instanceof Error?f.message:String(f)})}}};R.HEADER=256,R.FOOTER=0;var $=R;var b=g("BinaryCodableCookies"),C=class C{constructor(e){let o={offset:0,buffer:e};this.pages=[],this.metadata={},this.decode(o)}static fromFile(e){let o=(0,Re.readFileSync)(e);return new C(o)}static fromDefaultPath(){return C.fromFile(C.DEFAULT_COOKIE_PATH)}toCookieRows(){let e=[];for(let o of this.pages)try{let t=o.toCookieRows();Array.isArray(t)&&e.push(...t)}catch(t){let i=t instanceof Error?t.message:String(t);y("BinaryCookies","Error converting page cookies",{error:i})}return e}decode(e){try{let o=e.buffer.subarray(e.offset,e.offset+4);if(e.offset+=4,b.debug("Magic bytes:",o.toString()),!o.equals(C.MAGIC))throw new Error("Missing magic value");let t=e.buffer.readUInt32BE(e.offset);b.debug("Page count:",t),e.offset+=4;let i=[];for(let m=0;m<t;m++){let l=e.buffer.readUInt32BE(e.offset);i.push(l),b.debug(`Page ${m} size:`,l),e.offset+=4}let s=e.offset;b.debug("Starting page data at offset:",s);for(let m of i)try{b.debug("Reading page at offset:",s,"with size:",m);let l=e.buffer.subarray(s,s+m),d=new $(l);this.pages.push(d),s+=m}catch(l){let d=l instanceof Error?l.message:String(l);b.warn("Error decoding page:",{error:d}),s+=m}e.offset=s;let n=e.buffer.readUInt32BE(e.offset);b.debug("Checksum:",n.toString(16)),e.offset+=4;let c=e.buffer.readBigUInt64BE(e.offset);b.debug("Footer:",c.toString(16)),e.offset+=8,c!==C.FOOTER&&y("BinaryCookies","Invalid cookie file format: wrong footer");let f=e.buffer.subarray(e.offset);this.metadata={}}catch(o){let t=o instanceof Error?o.message:String(o);throw y("BinaryCookies","Error decoding binary cookies file",{error:t}),o}}};C.MAGIC=ve.Buffer.from("cook","utf8"),C.FOOTER=BigInt("0x071720050000004b"),C.DEFAULT_COOKIE_PATH=(0,Oe.join)((0,Be.homedir)(),"Library/Containers/com.apple.Safari/Data/Library/Cookies/Cookies.binarycookies");var Q=C;function Pe(r){return Q.fromFile(r).toCookieRows()}var N=class{constructor(){this.browserName="Safari"}getCookieDbPath(e){return(0,Le.join)(e,"Library","Containers","com.apple.Safari","Data","Library","Cookies","Cookies.binarycookies")}formatDomain(e){return e.startsWith(".")?e.slice(1):e}formatExpiry(e){return e<=0?"Infinity":new Date(e*1e3)}isFlagSet(e,o){return typeof e!="number"||isNaN(e)||e<=0?!1:(e&o)===o}formatCreation(e){if(!(typeof e!="number"||isNaN(e)||e<=0))return e*1e3}decodeCookies(e,o,t){try{return Pe(e).filter(s=>(o==="%"||s.name===o)&&(t==="%"||this.formatDomain(s.domain).includes(t))).map(s=>({domain:this.formatDomain(s.domain),name:s.name,value:Buffer.isBuffer(s.value)?s.value.toString():String(s.value),expiry:this.formatExpiry(s.expiry),meta:{file:e,browser:"Safari",decrypted:!1,secure:this.isFlagSet(s.flags,1),httpOnly:this.isFlagSet(s.flags,4),path:s.path,version:s.version,comment:s.comment,commentURL:s.commentURL,port:s.port,creation:this.formatCreation(s.creation)}}))}catch(i){return i instanceof Error?p("SafariCookieQueryStrategy",`Error decoding ${e}`,{error:i,name:o,domain:t}):p("SafariCookieQueryStrategy",`Error decoding ${e}`,{error:"Unknown error",name:o,domain:t}),[]}}async queryCookies(e,o,t){let i=(0,Fe.homedir)();if(typeof i!="string"||i.length===0)return p("SafariCookieQueryStrategy","Failed to get home directory"),Promise.resolve([]);let s=t??this.getCookieDbPath(i);return Promise.resolve(this.decodeCookies(s,e||"%",o||"%"))}};async function W(r){if(!r.name||!r.domain)return[];let{name:e,domain:o}=r;if(typeof e!="string"||typeof o!="string")return[];let t=[new S,new v,new N];return(await Promise.allSettled(t.map(s=>s.queryCookies(e,o)))).filter(s=>s.status==="fulfilled").flatMap(s=>s.value)}async function w(r){try{return await W(r)}catch(e){return u.warn("Error querying cookies:",e instanceof Error?e.message:String(e)),[]}}async function Z(r){try{return await new S().queryCookies(r.name,r.domain)}catch(e){return u.warn("Error querying Chrome cookies:",e),[]}}async function J(r){try{return await new v().queryCookies(r.name,r.domain)}catch(e){return u.warn("Error querying Firefox cookies:",e instanceof Error?e.message:String(e)),[]}}var Te=require("lodash-es");function L(r,e={}){let{format:o="merged",showFilePaths:t=!0,separator:i="; "}=e;if(r.length===0)return o==="merged"?"":[];if(o==="merged")return r.map(n=>n.value).join(i);let s=(0,Te.groupBy)(r,n=>n.meta?.file??"unknown");return Object.entries(s).map(([n,c])=>{let f=c.map(m=>m.value).join(i);return t?`${n}: ${f}`:f})}async function K(r,e={}){try{let o=await w(r);if(!Array.isArray(o))return[];let t=o.filter(i=>{let s=F.safeParse(i);return s.success?!0:(u.warn("Invalid cookie format:",s.error.format()),!1)});return L(t,{...e,format:"grouped"})}catch(o){return u.warn("Error getting grouped rendered cookies:",o instanceof Error?o.message:String(o)),[]}}async function X(r,e){try{let o=await w(r);if(!Array.isArray(o))return"";let t=o.filter(s=>{let n=F.safeParse(s);return n.success?!0:(u.warn("Invalid cookie format:",n.error.format()),!1)}),i=L(t,{...e,format:"merged"});return typeof i=="string"?i:""}catch(o){return u.warn("Error getting merged rendered cookies:",o instanceof Error?o.message:String(o)),""}}0&&(module.exports={getChromeCookie,getCookie,getFirefoxCookie,getGroupedRenderedCookies,getMergedRenderedCookies});
2
2
  //# sourceMappingURL=index.cjs.map