@mherod/get-cookie 4.3.2 → 4.4.1
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/.claude/settings.local.json +3 -0
- package/.dependency-cruiser.js +277 -0
- package/.husky/commit-msg +0 -1
- package/.husky/pre-commit +0 -1
- package/.husky/pre-push +0 -0
- package/README.md +106 -48
- package/biome.json +39 -16
- package/dist/cli.cjs +76 -3
- package/dist/cli.cjs.map +1 -1
- package/dist/index.cjs +76 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +660 -283
- package/dist/index.d.ts +660 -283
- package/dist/index.js +76 -2
- package/dist/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/eslint.config.js +23 -2
- package/examples/auth-tokens.ts +143 -0
- package/examples/chrome-cookies-demo.sh +117 -0
- package/examples/chrome-profile-demo.sh +126 -0
- package/examples/cli-examples.sh +0 -0
- package/examples/comprehensive-demo.ts +202 -0
- package/examples/curl-demo.sh +102 -0
- package/examples/curl-integration.sh +276 -0
- package/examples/curl-with-url.sh +136 -0
- package/examples/deduplication-demo.sh +110 -0
- package/examples/final-chrome-demo.sh +115 -0
- package/examples/github-api.sh +101 -0
- package/examples/github-private-access.sh +118 -0
- package/examples/list-profiles-demo.sh +120 -0
- package/examples/proper-curl-usage.sh +120 -0
- package/examples/simple-curl.sh +95 -0
- package/examples/test-expired-filtering.sh +68 -0
- package/examples/test-github-access.sh +245 -0
- package/examples/test-github-auth-improved.sh +136 -0
- package/examples/working-curl.sh +117 -0
- package/examples/working-github-auth.sh +87 -0
- package/package.json +72 -50
- package/tsconfig.cli.json +5 -1
- package/tsup.cli.ts +31 -1
- package/tsup.lib.ts +11 -1
package/dist/cli.cjs
CHANGED
|
@@ -1,6 +1,79 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var la=Object.create;var Sr=Object.defineProperty;var ma=Object.getOwnPropertyDescriptor;var ca=Object.getOwnPropertyNames;var da=Object.getPrototypeOf,ga=Object.prototype.hasOwnProperty;var ya=(r,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of ca(e))!ga.call(r,i)&&i!==t&&Sr(r,i,{get:()=>e[i],enumerable:!(o=ma(e,i))||o.enumerable});return r};var $=(r,e,t)=>(t=r!=null?la(da(r)):{},ya(e||!r||!r.__esModule?Sr(t,"default",{value:r,enumerable:!0}):t,r));function ha(r){let e=r.split("."),t=[];t.push({name:"%",domain:r});for(let o=1;o<e.length-1;o++){let i=e.slice(o).join(".");t.push({name:"%",domain:i})}return t}function ir(r){if(!r.includes("://"))try{return ir(`https://${r}`)}catch{return[{name:"%",domain:r}]}try{let e=new URL(r);return ha(e.hostname)}catch{return[{name:"%",domain:r}]}}var kr=$(require("minimist"),1);function vr(r){let e=(0,kr.default)(r,{string:["browser","profile","url","domain","name","output","store"],boolean:["help","version","verbose","dump","dump-grouped","render","render-grouped","force"],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"},unknown:i=>{if(!i.startsWith("-"))return!0;if(!["--browser","-b","--profile","-p","--url","-u","--domain","-D","--name","-n","--output","--store","--help","-h","--version","--verbose","-v","--dump","-d","--dump-grouped","-G","--render","-r","--render-grouped","-R","--force","-f"].some(s=>i.startsWith(s)))throw new Error(`Unknown option: ${i}`);return!0}}),{_:t,...o}=e;return{values:o,positionals:t}}var Pr=require("consola");var Er=require("os"),Or=require("dotenv"),fe=require("zod");(0,Or.config)();var xa=fe.z.object({LOG_LEVEL:fe.z.enum(["debug","info","warn","error"]).default("info"),HOME:fe.z.string().optional().transform(r=>r??process.env.USERPROFILE??"").pipe(fe.z.string().min(1))}),nr=xa.parse({LOG_LEVEL:process.env.LOG_LEVEL,HOME:(0,Er.homedir)()});var ba=(0,Pr.createConsola)({fancy:!0,formatOptions:{showLogLevel:!1,colors:!0,date:!1,compact:!0,columns:typeof process.stdout.columns=="number"?process.stdout.columns:80},level:nr.LOG_LEVEL==="debug"?5:2}),cp=nr.LOG_LEVEL==="debug",Ca=ba,u=Ca;function _r(r,e,t){e?u.success(`${r} succeeded`,t):u.error(`${r} failed`,t)}function R(r,e,t){let o=e instanceof Error?e.message:String(e);u.error(r,{...t,error:o})}function W(r,e,t){u.warn(`[${r}] ${e}`,t)}function h(r){return u.withTag(r)}var pe=class{canHandle(e){return!0}handle(e){let t=new Set(e.map(o=>o.value));for(let o of t)u.log(o)}};var we=class{canHandle(e){return e.dump===!0||e.d===!0}handle(e){u.log(e)}};var wa=typeof global=="object"&&global&&global.Object===Object&&global,Se=wa;var Sa=typeof self=="object"&&self&&self.Object===Object&&self,ka=Se||Sa||Function("return this")(),x=ka;var va=x.Symbol,w=va;var Ar=Object.prototype,Ea=Ar.hasOwnProperty,Oa=Ar.toString,ue=w?w.toStringTag:void 0;function Pa(r){var e=Ea.call(r,ue),t=r[ue];try{r[ue]=void 0;var o=!0}catch{}var i=Oa.call(r);return o&&(e?r[ue]=t:delete r[ue]),i}var Tr=Pa;var _a=Object.prototype,Aa=_a.toString;function Ta(r){return Aa.call(r)}var Rr=Ta;var Ra="[object Null]",Ia="[object Undefined]",Ir=w?w.toStringTag:void 0;function Ba(r){return r==null?r===void 0?Ia:Ra:Ir&&Ir in Object(r)?Tr(r):Rr(r)}var v=Ba;function La(r){return r!=null&&typeof r=="object"}var E=La;var Fa="[object Symbol]";function Da(r){return typeof r=="symbol"||E(r)&&v(r)==Fa}var K=Da;function Na(r,e){for(var t=-1,o=r==null?0:r.length,i=Array(o);++t<o;)i[t]=e(r[t],t,r);return i}var Br=Na;var Ma=Array.isArray,y=Ma;var ja=1/0,Lr=w?w.prototype:void 0,Fr=Lr?Lr.toString:void 0;function Dr(r){if(typeof r=="string")return r;if(y(r))return Br(r,Dr)+"";if(K(r))return Fr?Fr.call(r):"";var e=r+"";return e=="0"&&1/r==-ja?"-0":e}var Nr=Dr;function Ua(r){var e=typeof r;return r!=null&&(e=="object"||e=="function")}var V=Ua;function Ha(r){return r}var Mr=Ha;var qa="[object AsyncFunction]",za="[object Function]",$a="[object GeneratorFunction]",Ga="[object Proxy]";function Qa(r){if(!V(r))return!1;var e=v(r);return e==za||e==$a||e==qa||e==Ga}var ke=Qa;var Wa=x["__core-js_shared__"],ve=Wa;var jr=function(){var r=/[^.]+$/.exec(ve&&ve.keys&&ve.keys.IE_PROTO||"");return r?"Symbol(src)_1."+r:""}();function Ka(r){return!!jr&&jr in r}var Ur=Ka;var Va=Function.prototype,Ja=Va.toString;function Za(r){if(r!=null){try{return Ja.call(r)}catch{}try{return r+""}catch{}}return""}var _=Za;var Xa=/[\\^$.*+?()[\]{}|]/g,Ya=/^\[object .+?Constructor\]$/,ei=Function.prototype,ri=Object.prototype,ti=ei.toString,oi=ri.hasOwnProperty,ai=RegExp("^"+ti.call(oi).replace(Xa,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function ii(r){if(!V(r)||Ur(r))return!1;var e=ke(r)?ai:Ya;return e.test(_(r))}var Hr=ii;function ni(r,e){return r?.[e]}var qr=ni;function si(r,e){var t=qr(r,e);return Hr(t)?t:void 0}var C=si;var fi=C(x,"WeakMap"),Ee=fi;var pi=function(){try{var r=C(Object,"defineProperty");return r({},"",{}),r}catch{}}(),sr=pi;var ui=9007199254740991,li=/^(?:0|[1-9]\d*)$/;function mi(r,e){var t=typeof r;return e=e??ui,!!e&&(t=="number"||t!="symbol"&&li.test(r))&&r>-1&&r%1==0&&r<e}var Oe=mi;function ci(r,e,t){e=="__proto__"&&sr?sr(r,e,{configurable:!0,enumerable:!0,value:t,writable:!0}):r[e]=t}var zr=ci;function di(r,e){return r===e||r!==r&&e!==e}var Pe=di;var gi=9007199254740991;function yi(r){return typeof r=="number"&&r>-1&&r%1==0&&r<=gi}var J=yi;function hi(r){return r!=null&&J(r.length)&&!ke(r)}var _e=hi;var xi=Object.prototype;function bi(r){var e=r&&r.constructor,t=typeof e=="function"&&e.prototype||xi;return r===t}var $r=bi;function Ci(r,e){for(var t=-1,o=Array(r);++t<r;)o[t]=e(t);return o}var Gr=Ci;var wi="[object Arguments]";function Si(r){return E(r)&&v(r)==wi}var fr=Si;var Qr=Object.prototype,ki=Qr.hasOwnProperty,vi=Qr.propertyIsEnumerable,Ei=fr(function(){return arguments}())?fr:function(r){return E(r)&&ki.call(r,"callee")&&!vi.call(r,"callee")},Ae=Ei;function Oi(){return!1}var Wr=Oi;var Jr=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Kr=Jr&&typeof module=="object"&&module&&!module.nodeType&&module,Pi=Kr&&Kr.exports===Jr,Vr=Pi?x.Buffer:void 0,_i=Vr?Vr.isBuffer:void 0,Ai=_i||Wr,le=Ai;var Ti="[object Arguments]",Ri="[object Array]",Ii="[object Boolean]",Bi="[object Date]",Li="[object Error]",Fi="[object Function]",Di="[object Map]",Ni="[object Number]",Mi="[object Object]",ji="[object RegExp]",Ui="[object Set]",Hi="[object String]",qi="[object WeakMap]",zi="[object ArrayBuffer]",$i="[object DataView]",Gi="[object Float32Array]",Qi="[object Float64Array]",Wi="[object Int8Array]",Ki="[object Int16Array]",Vi="[object Int32Array]",Ji="[object Uint8Array]",Zi="[object Uint8ClampedArray]",Xi="[object Uint16Array]",Yi="[object Uint32Array]",g={};g[Gi]=g[Qi]=g[Wi]=g[Ki]=g[Vi]=g[Ji]=g[Zi]=g[Xi]=g[Yi]=!0;g[Ti]=g[Ri]=g[zi]=g[Ii]=g[$i]=g[Bi]=g[Li]=g[Fi]=g[Di]=g[Ni]=g[Mi]=g[ji]=g[Ui]=g[Hi]=g[qi]=!1;function en(r){return E(r)&&J(r.length)&&!!g[v(r)]}var Zr=en;function rn(r){return function(e){return r(e)}}var Xr=rn;var Yr=typeof exports=="object"&&exports&&!exports.nodeType&&exports,me=Yr&&typeof module=="object"&&module&&!module.nodeType&&module,tn=me&&me.exports===Yr,pr=tn&&Se.process,on=function(){try{var r=me&&me.require&&me.require("util").types;return r||pr&&pr.binding&&pr.binding("util")}catch{}}(),ur=on;var et=ur&&ur.isTypedArray,an=et?Xr(et):Zr,Te=an;var nn=Object.prototype,sn=nn.hasOwnProperty;function fn(r,e){var t=y(r),o=!t&&Ae(r),i=!t&&!o&&le(r),a=!t&&!o&&!i&&Te(r),n=t||o||i||a,s=n?Gr(r.length,String):[],p=s.length;for(var f in r)(e||sn.call(r,f))&&!(n&&(f=="length"||i&&(f=="offset"||f=="parent")||a&&(f=="buffer"||f=="byteLength"||f=="byteOffset")||Oe(f,p)))&&s.push(f);return s}var rt=fn;function pn(r,e){return function(t){return r(e(t))}}var tt=pn;var un=tt(Object.keys,Object),ot=un;var ln=Object.prototype,mn=ln.hasOwnProperty;function cn(r){if(!$r(r))return ot(r);var e=[];for(var t in Object(r))mn.call(r,t)&&t!="constructor"&&e.push(t);return e}var at=cn;function dn(r){return _e(r)?rt(r):at(r)}var Z=dn;var gn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,yn=/^\w*$/;function hn(r,e){if(y(r))return!1;var t=typeof r;return t=="number"||t=="symbol"||t=="boolean"||r==null||K(r)?!0:yn.test(r)||!gn.test(r)||e!=null&&r in Object(e)}var X=hn;var xn=C(Object,"create"),A=xn;function bn(){this.__data__=A?A(null):{},this.size=0}var it=bn;function Cn(r){var e=this.has(r)&&delete this.__data__[r];return this.size-=e?1:0,e}var nt=Cn;var wn="__lodash_hash_undefined__",Sn=Object.prototype,kn=Sn.hasOwnProperty;function vn(r){var e=this.__data__;if(A){var t=e[r];return t===wn?void 0:t}return kn.call(e,r)?e[r]:void 0}var st=vn;var En=Object.prototype,On=En.hasOwnProperty;function Pn(r){var e=this.__data__;return A?e[r]!==void 0:On.call(e,r)}var ft=Pn;var _n="__lodash_hash_undefined__";function An(r,e){var t=this.__data__;return this.size+=this.has(r)?0:1,t[r]=A&&e===void 0?_n:e,this}var pt=An;function Y(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])}}Y.prototype.clear=it;Y.prototype.delete=nt;Y.prototype.get=st;Y.prototype.has=ft;Y.prototype.set=pt;var lr=Y;function Tn(){this.__data__=[],this.size=0}var ut=Tn;function Rn(r,e){for(var t=r.length;t--;)if(Pe(r[t][0],e))return t;return-1}var I=Rn;var In=Array.prototype,Bn=In.splice;function Ln(r){var e=this.__data__,t=I(e,r);if(t<0)return!1;var o=e.length-1;return t==o?e.pop():Bn.call(e,t,1),--this.size,!0}var lt=Ln;function Fn(r){var e=this.__data__,t=I(e,r);return t<0?void 0:e[t][1]}var mt=Fn;function Dn(r){return I(this.__data__,r)>-1}var ct=Dn;function Nn(r,e){var t=this.__data__,o=I(t,r);return o<0?(++this.size,t.push([r,e])):t[o][1]=e,this}var dt=Nn;function ee(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])}}ee.prototype.clear=ut;ee.prototype.delete=lt;ee.prototype.get=mt;ee.prototype.has=ct;ee.prototype.set=dt;var B=ee;var Mn=C(x,"Map"),L=Mn;function jn(){this.size=0,this.__data__={hash:new lr,map:new(L||B),string:new lr}}var gt=jn;function Un(r){var e=typeof r;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?r!=="__proto__":r===null}var yt=Un;function Hn(r,e){var t=r.__data__;return yt(e)?t[typeof e=="string"?"string":"hash"]:t.map}var F=Hn;function qn(r){var e=F(this,r).delete(r);return this.size-=e?1:0,e}var ht=qn;function zn(r){return F(this,r).get(r)}var xt=zn;function $n(r){return F(this,r).has(r)}var bt=$n;function Gn(r,e){var t=F(this,r),o=t.size;return t.set(r,e),this.size+=t.size==o?0:1,this}var Ct=Gn;function re(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])}}re.prototype.clear=gt;re.prototype.delete=ht;re.prototype.get=xt;re.prototype.has=bt;re.prototype.set=Ct;var G=re;var Qn="Expected a function";function mr(r,e){if(typeof r!="function"||e!=null&&typeof e!="function")throw new TypeError(Qn);var t=function(){var o=arguments,i=e?e.apply(this,o):o[0],a=t.cache;if(a.has(i))return a.get(i);var n=r.apply(this,o);return t.cache=a.set(i,n)||a,n};return t.cache=new(mr.Cache||G),t}mr.Cache=G;var wt=mr;var Wn=500;function Kn(r){var e=wt(r,function(o){return t.size===Wn&&t.clear(),o}),t=e.cache;return e}var St=Kn;var Vn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Jn=/\\(\\)?/g,Zn=St(function(r){var e=[];return r.charCodeAt(0)===46&&e.push(""),r.replace(Vn,function(t,o,i,a){e.push(i?a.replace(Jn,"$1"):o||t)}),e}),kt=Zn;function Xn(r){return r==null?"":Nr(r)}var vt=Xn;function Yn(r,e){return y(r)?r:X(r,e)?[r]:kt(vt(r))}var Re=Yn;var es=1/0;function rs(r){if(typeof r=="string"||K(r))return r;var e=r+"";return e=="0"&&1/r==-es?"-0":e}var D=rs;function ts(r,e){e=Re(e,r);for(var t=0,o=e.length;r!=null&&t<o;)r=r[D(e[t++])];return t&&t==o?r:void 0}var Ie=ts;function os(r,e,t){var o=r==null?void 0:Ie(r,e);return o===void 0?t:o}var Et=os;function as(r,e){for(var t=-1,o=e.length,i=r.length;++t<o;)r[i+t]=e[t];return r}var Ot=as;function is(){this.__data__=new B,this.size=0}var Pt=is;function ns(r){var e=this.__data__,t=e.delete(r);return this.size=e.size,t}var _t=ns;function ss(r){return this.__data__.get(r)}var At=ss;function fs(r){return this.__data__.has(r)}var Tt=fs;var ps=200;function us(r,e){var t=this.__data__;if(t instanceof B){var o=t.__data__;if(!L||o.length<ps-1)return o.push([r,e]),this.size=++t.size,this;t=this.__data__=new G(o)}return t.set(r,e),this.size=t.size,this}var Rt=us;function te(r){var e=this.__data__=new B(r);this.size=e.size}te.prototype.clear=Pt;te.prototype.delete=_t;te.prototype.get=At;te.prototype.has=Tt;te.prototype.set=Rt;var oe=te;function ls(r,e){for(var t=-1,o=r==null?0:r.length,i=0,a=[];++t<o;){var n=r[t];e(n,t,r)&&(a[i++]=n)}return a}var It=ls;function ms(){return[]}var Bt=ms;var cs=Object.prototype,ds=cs.propertyIsEnumerable,Lt=Object.getOwnPropertySymbols,gs=Lt?function(r){return r==null?[]:(r=Object(r),It(Lt(r),function(e){return ds.call(r,e)}))}:Bt,Ft=gs;function ys(r,e,t){var o=e(r);return y(r)?o:Ot(o,t(r))}var Dt=ys;function hs(r){return Dt(r,Z,Ft)}var cr=hs;var xs=C(x,"DataView"),Be=xs;var bs=C(x,"Promise"),Le=bs;var Cs=C(x,"Set"),Fe=Cs;var Nt="[object Map]",ws="[object Object]",Mt="[object Promise]",jt="[object Set]",Ut="[object WeakMap]",Ht="[object DataView]",Ss=_(Be),ks=_(L),vs=_(Le),Es=_(Fe),Os=_(Ee),Q=v;(Be&&Q(new Be(new ArrayBuffer(1)))!=Ht||L&&Q(new L)!=Nt||Le&&Q(Le.resolve())!=Mt||Fe&&Q(new Fe)!=jt||Ee&&Q(new Ee)!=Ut)&&(Q=function(r){var e=v(r),t=e==ws?r.constructor:void 0,o=t?_(t):"";if(o)switch(o){case Ss:return Ht;case ks:return Nt;case vs:return Mt;case Es:return jt;case Os:return Ut}return e});var dr=Q;var Ps=x.Uint8Array,gr=Ps;var _s="__lodash_hash_undefined__";function As(r){return this.__data__.set(r,_s),this}var qt=As;function Ts(r){return this.__data__.has(r)}var zt=Ts;function De(r){var e=-1,t=r==null?0:r.length;for(this.__data__=new G;++e<t;)this.add(r[e])}De.prototype.add=De.prototype.push=qt;De.prototype.has=zt;var $t=De;function Rs(r,e){for(var t=-1,o=r==null?0:r.length;++t<o;)if(e(r[t],t,r))return!0;return!1}var Gt=Rs;function Is(r,e){return r.has(e)}var Qt=Is;var Bs=1,Ls=2;function Fs(r,e,t,o,i,a){var n=t&Bs,s=r.length,p=e.length;if(s!=p&&!(n&&p>s))return!1;var f=a.get(r),l=a.get(e);if(f&&l)return f==e&&l==r;var c=-1,d=!0,S=t&Ls?new $t:void 0;for(a.set(r,e),a.set(e,r);++c<s;){var b=r[c],k=e[c];if(o)var T=n?o(k,b,c,e,r,a):o(b,k,c,r,e,a);if(T!==void 0){if(T)continue;d=!1;break}if(S){if(!Gt(e,function(q,z){if(!Qt(S,z)&&(b===q||i(b,q,t,o,a)))return S.push(z)})){d=!1;break}}else if(!(b===k||i(b,k,t,o,a))){d=!1;break}}return a.delete(r),a.delete(e),d}var Ne=Fs;function Ds(r){var e=-1,t=Array(r.size);return r.forEach(function(o,i){t[++e]=[i,o]}),t}var Wt=Ds;function Ns(r){var e=-1,t=Array(r.size);return r.forEach(function(o){t[++e]=o}),t}var Kt=Ns;var Ms=1,js=2,Us="[object Boolean]",Hs="[object Date]",qs="[object Error]",zs="[object Map]",$s="[object Number]",Gs="[object RegExp]",Qs="[object Set]",Ws="[object String]",Ks="[object Symbol]",Vs="[object ArrayBuffer]",Js="[object DataView]",Vt=w?w.prototype:void 0,yr=Vt?Vt.valueOf:void 0;function Zs(r,e,t,o,i,a,n){switch(t){case Js:if(r.byteLength!=e.byteLength||r.byteOffset!=e.byteOffset)return!1;r=r.buffer,e=e.buffer;case Vs:return!(r.byteLength!=e.byteLength||!a(new gr(r),new gr(e)));case Us:case Hs:case $s:return Pe(+r,+e);case qs:return r.name==e.name&&r.message==e.message;case Gs:case Ws:return r==e+"";case zs:var s=Wt;case Qs:var p=o&Ms;if(s||(s=Kt),r.size!=e.size&&!p)return!1;var f=n.get(r);if(f)return f==e;o|=js,n.set(r,e);var l=Ne(s(r),s(e),o,i,a,n);return n.delete(r),l;case Ks:if(yr)return yr.call(r)==yr.call(e)}return!1}var Jt=Zs;var Xs=1,Ys=Object.prototype,ef=Ys.hasOwnProperty;function rf(r,e,t,o,i,a){var n=t&Xs,s=cr(r),p=s.length,f=cr(e),l=f.length;if(p!=l&&!n)return!1;for(var c=p;c--;){var d=s[c];if(!(n?d in e:ef.call(e,d)))return!1}var S=a.get(r),b=a.get(e);if(S&&b)return S==e&&b==r;var k=!0;a.set(r,e),a.set(e,r);for(var T=n;++c<p;){d=s[c];var q=r[d],z=e[d];if(o)var wr=n?o(z,q,d,e,r,a):o(q,z,d,r,e,a);if(!(wr===void 0?q===z||i(q,z,t,o,a):wr)){k=!1;break}T||(T=d=="constructor")}if(k&&!T){var be=r.constructor,Ce=e.constructor;be!=Ce&&"constructor"in r&&"constructor"in e&&!(typeof be=="function"&&be instanceof be&&typeof Ce=="function"&&Ce instanceof Ce)&&(k=!1)}return a.delete(r),a.delete(e),k}var Zt=rf;var tf=1,Xt="[object Arguments]",Yt="[object Array]",Me="[object Object]",of=Object.prototype,eo=of.hasOwnProperty;function af(r,e,t,o,i,a){var n=y(r),s=y(e),p=n?Yt:dr(r),f=s?Yt:dr(e);p=p==Xt?Me:p,f=f==Xt?Me:f;var l=p==Me,c=f==Me,d=p==f;if(d&&le(r)){if(!le(e))return!1;n=!0,l=!1}if(d&&!l)return a||(a=new oe),n||Te(r)?Ne(r,e,t,o,i,a):Jt(r,e,p,t,o,i,a);if(!(t&tf)){var S=l&&eo.call(r,"__wrapped__"),b=c&&eo.call(e,"__wrapped__");if(S||b){var k=S?r.value():r,T=b?e.value():e;return a||(a=new oe),i(k,T,t,o,a)}}return d?(a||(a=new oe),Zt(r,e,t,o,i,a)):!1}var ro=af;function to(r,e,t,o,i){return r===e?!0:r==null||e==null||!E(r)&&!E(e)?r!==r&&e!==e:ro(r,e,t,o,to,i)}var je=to;var nf=1,sf=2;function ff(r,e,t,o){var i=t.length,a=i,n=!o;if(r==null)return!a;for(r=Object(r);i--;){var s=t[i];if(n&&s[2]?s[1]!==r[s[0]]:!(s[0]in r))return!1}for(;++i<a;){s=t[i];var p=s[0],f=r[p],l=s[1];if(n&&s[2]){if(f===void 0&&!(p in r))return!1}else{var c=new oe;if(o)var d=o(f,l,p,r,e,c);if(!(d===void 0?je(l,f,nf|sf,o,c):d))return!1}}return!0}var oo=ff;function pf(r){return r===r&&!V(r)}var Ue=pf;function uf(r){for(var e=Z(r),t=e.length;t--;){var o=e[t],i=r[o];e[t]=[o,i,Ue(i)]}return e}var ao=uf;function lf(r,e){return function(t){return t==null?!1:t[r]===e&&(e!==void 0||r in Object(t))}}var He=lf;function mf(r){var e=ao(r);return e.length==1&&e[0][2]?He(e[0][0],e[0][1]):function(t){return t===r||oo(t,r,e)}}var io=mf;function cf(r,e){return r!=null&&e in Object(r)}var no=cf;function df(r,e,t){e=Re(e,r);for(var o=-1,i=e.length,a=!1;++o<i;){var n=D(e[o]);if(!(a=r!=null&&t(r,n)))break;r=r[n]}return a||++o!=i?a:(i=r==null?0:r.length,!!i&&J(i)&&Oe(n,i)&&(y(r)||Ae(r)))}var so=df;function gf(r,e){return r!=null&&so(r,e,no)}var fo=gf;var yf=1,hf=2;function xf(r,e){return X(r)&&Ue(e)?He(D(r),e):function(t){var o=Et(t,r);return o===void 0&&o===e?fo(t,r):je(e,o,yf|hf)}}var po=xf;function bf(r){return function(e){return e?.[r]}}var uo=bf;function Cf(r){return function(e){return Ie(e,r)}}var lo=Cf;function wf(r){return X(r)?uo(D(r)):lo(r)}var mo=wf;function Sf(r){return typeof r=="function"?r:r==null?Mr:typeof r=="object"?y(r)?po(r[0],r[1]):io(r):mo(r)}var co=Sf;function kf(r,e,t,o){for(var i=-1,a=r==null?0:r.length;++i<a;){var n=r[i];e(o,n,t(n),r)}return o}var go=kf;function vf(r){return function(e,t,o){for(var i=-1,a=Object(e),n=o(e),s=n.length;s--;){var p=n[r?s:++i];if(t(a[p],p,a)===!1)break}return e}}var yo=vf;var Ef=yo(),ho=Ef;function Of(r,e){return r&&ho(r,e,Z)}var xo=Of;function Pf(r,e){return function(t,o){if(t==null)return t;if(!_e(t))return r(t,o);for(var i=t.length,a=e?i:-1,n=Object(t);(e?a--:++a<i)&&o(n[a],a,n)!==!1;);return t}}var bo=Pf;var _f=bo(xo),Co=_f;function Af(r,e,t,o){return Co(r,function(i,a,n){e(o,i,t(i),n)}),o}var wo=Af;function Tf(r,e){return function(t,o){var i=y(t)?go:wo,a=e?e():{};return i(t,r,co(o,2),a)}}var So=Tf;var Rf=Object.prototype,If=Rf.hasOwnProperty,Bf=So(function(r,e,t){If.call(r,t)?r[t].push(e):zr(r,t,[e])}),ce=Bf;var qe=class{canHandle(e){return e["dump-grouped"]===!0||e.D===!0}handle(e){let t=ce(e,o=>o.meta?.file??"unknown");u.log(JSON.stringify(t,null,2))}};function ze(r,e={}){let{format:t="merged",showFilePaths:o=!0,separator:i="; "}=e;if(r.length===0)return t==="merged"?"":[];if(t==="merged")return r.map(n=>`${n.name}=${n.value}`).join(i);let a=ce(r,n=>n.meta?.file??"unknown");return Object.entries(a).map(([n,s])=>{let p=s.map(f=>`${f.name}=${f.value}`).join(i);return o?`${n}: ${p}`:p})}var $e=class{canHandle(e){return e["render-grouped"]===!0||e.R===!0}handle(e){u.log(ze(e,{format:"grouped"}))}};var Ge=class{canHandle(e){return e.output==="json"}handle(e){u.log(JSON.stringify(e,null,2))}};var Qe=class{canHandle(e){return e.render===!0||e["render-merged"]===!0||e.r===!0}handle(e){u.log(ze(e,{format:"merged"}))}};var We=class{constructor(){this.validOutputFormats=["json"];this.handlers=[new we,new qe,new Qe,new $e,new Ge,new pe]}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(t=>t.canHandle(e))??new pe}};var Ke=class{constructor(e){this.strategy=e}async queryCookies(e,t){return await this.strategy.queryCookies(e.name,e.domain,t?.store,t?.force)}};var ar=require("fs");async function ko(r,e,t=[]){return r.length===0?t:(await Promise.all(r.map(async i=>{try{return await e(i)}catch{return t}}))).flat()}var de=class{constructor(e){this.strategies=e;this.logger=h("CompositeCookieQueryStrategy");this.browserName="internal"}handleStrategyError(e,t){e instanceof Error?this.logger.error("Strategy failed",{error:e,strategy:t}):this.logger.error("Strategy failed with unknown error",{error:String(e),strategy:t})}async queryCookies(e,t,o,i){try{return this.logger.info("Querying cookies from all strategies",{name:e,domain:t,store:o,force:i,strategyCount:this.strategies.length}),await ko(this.strategies,async a=>{try{return await a.queryCookies(e,t,o,i)}catch(n){return this.handleStrategyError(n,a),[]}},[])}catch(a){return a instanceof Error?this.logger.error("Failed to query cookies",{error:a}):this.logger.error("Failed to query cookies with unknown error",{error:String(a)}),[]}}};function vo(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)}var Lf={info:()=>{},warn:()=>{},error:()=>{},debug:()=>{},success:()=>{},fatal:()=>{},log:()=>{}},N=class{constructor(e,t){this.browserName=t;let o=h(e);this.logger=o||Lf}async queryCookies(e,t,o,i){try{return this.logger.info("Querying cookies",{name:e,domain:t,store:o,force:i}),await this.executeQuery(e,t,o,i)}catch(a){return a instanceof Error?this.logger.error("Failed to query cookies",{error:a.message,browser:this.browserName,strategy:this.constructor.name,name:e,domain:t,store:o,force:i}):this.logger.error("Failed to query cookies",{error:String(a),browser:this.browserName,strategy:this.constructor.name,name:e,domain:t,store:o,force:i}),[]}}};var Oo=require("fs"),Ze=require("path"),Po=$(require("fast-glob"),1);var Eo=$(require("better-sqlite3"),1);var ge=h("QuerySqliteThenTransform");function Ff(r){return new Promise(e=>setTimeout(e,r))}function Df(r){if(r instanceof Error){let e=r.message.toLowerCase();return e.includes("database is locked")||e.includes("database locked")||e.includes("sqlite_busy")}return!1}function Nf(r){try{let e=new Eo.default(r,{readonly:!0,fileMustExist:!0});try{e.pragma("journal_mode = WAL"),ge.debug("Set WAL mode for database",{file:r})}catch(t){let o=t instanceof Error?t.message:String(t);o.includes("readonly")||o.includes("write")?ge.debug("Database is readonly, continuing with default journal mode",{file:r,error:o}):ge.warn("Failed to set WAL mode, continuing with default",{file:r,error:o})}return e}catch(e){throw R("Database open failed",e,{file:r}),e}}function Mf(r){try{return r.close(),Promise.resolve()}catch(e){return R("Database close failed",e),Promise.reject(e instanceof Error?e:new Error("Failed to close database: Unknown error"))}}async function jf(r){let{file:e,sql:t,params:o,rowFilter:i,rowTransform:a}=r,n;try{n=Nf(e);let p=n.prepare(t).all(o),f=i?p.filter(i):p;return a?f.map(a):f}finally{n&&await Mf(n)}}async function Ve(r){let{file:e,sql:t,retryAttempts:o=3}=r,i=[100,500,1e3],a;for(let n=0;n<o;n++)try{let s=await jf(r);return n>0&&ge.info("Database query succeeded after retry",{file:e,attempt:n+1,totalAttempts:o}),s}catch(s){if(a=s,Df(s)&&n<o-1){let p=i[n]||1e3;ge.warn("Database locked, retrying after delay",{file:e,attempt:n+1,totalAttempts:o,delay:p,error:s instanceof Error?s.message:String(s)}),await Ff(p);continue}throw R("Database query failed",s,{file:e,sql:t,attempt:n+1}),s}throw a}var ye=require("os"),Je=require("path"),M=(()=>{let r=(0,ye.homedir)();if(!r)throw new Error("Unable to determine user home directory");switch((0,ye.platform)()){case"darwin":return(0,Je.join)(r,"Library","Application Support","Google","Chrome");case"win32":return(0,Je.join)(r,"AppData","Local","Google","Chrome","User Data");case"linux":return(0,Je.join)(r,".config","google-chrome");default:throw new Error(`Platform ${(0,ye.platform)()} is not supported`)}})();var he=h("getEncryptedChromeCookie");function Uf(r){if(typeof r!="string")return!1;let e=r.trim();return e.length===0?!1:(0,Oo.existsSync)(e)}async function Hf(){let r=[(0,Ze.join)(M,"Default/Cookies"),(0,Ze.join)(M,"Profile */Cookies"),(0,Ze.join)(M,"Profile Default/Cookies")],e=[];for(let t of r){let o=await(0,Po.default)(t);e.push(...o)}return he.debug("ChromeCookies","Found cookie files",{count:e.length,files:e}),e}function qf(r,e){let t=r==="%",o=t?"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=t?[`%${e}%`]:[r,`%${e}%`];return{sql:o,params:i}}async function zf(r,e,t){try{let{sql:o,params:i}=qf(e,t);he.debug("ChromeCookies","Executing query",{sql:o,params:i});let a=await Ve({file:r,sql:o,params:i,rowTransform:n=>({name:n.name,domain:n.host_key,value:n.encrypted_value,expiry:n.expires_utc})});return _r("QueryCookies",!0,{file:r,count:a.length}),a}catch(o){return R("Failed to read cookie file",o,{file:r}),[]}}async function _o({name:r,domain:e,file:t}){let o=typeof t=="string"&&t.length>0?[t]:await Hf();if(o.length===0)return he.debug("ChromeCookies","No cookie files found"),[];let i=[];for(let a of o){if(!Uf(a)){he.debug("ChromeCookies","Cookie file missing or invalid",{file:a});continue}let n=await zf(a,r,e);i.push(...n)}return he.debug("ChromeCookies","Query complete",{totalCookies:i.length}),i}var $f=require("fs"),Gf=require("path"),Ao=$(require("fast-glob"),1);var Qf=h("listChromeProfiles");function To(){let r=Ao.default.sync("./**/Cookies",{cwd:M,absolute:!0});return Qf.debug("Found cookie files:",r),r}var Xe=require("crypto"),hr=require("os");var Ro=require("crypto");function Io(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),i=12,a=16;if(o.length<i+a)throw new Error("Invalid v10 cookie: too short");let n=o.subarray(0,i),s=o.subarray(i,o.length-a),p=o.subarray(o.length-a),f=(0,Ro.createDecipheriv)("aes-256-gcm",e,n);return f.setAuthTag(p),Buffer.concat([f.update(s),f.final()]).toString("utf8")}function Bo(r){let e=Buffer.from("v10");return r.length>=3&&r.subarray(0,3).equals(e)}function Lo(r,e){let t=new Map;return o=>{let i=e?e(o):o.toString("hex");if(t.has(i)){let n=t.get(i);if(n!==void 0)return n}let a=r(o);return t.set(i,a),a}}var Wf=Lo(r=>r.length>=3&&r[0]===118&&r[1]===49&&r[2]===48?r.slice(3):r,r=>r.toString("hex")),Kf=Lo(r=>{let e=r[r.length-1];return e&&e<=16?r.slice(0,-e):r},r=>r.toString("hex"));function Vf(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)return e[1];let t=[/([A-Z]{3})$/,/([a-z]{2}_[A-Z]{2})$/,/(\d{3}-\d{7}-\d{7})$/];for(let i of t){let a=r.match(i);if(a)return a[1]}let o=[/.*?0t(.+)$/,/.*?1e`(.+)$/,/.*?[`'](.+)$/,/[^\x20-\x7E]*([\x20-\x7E]+)$/,/.*?([a-zA-Z0-9_\-\.]+)$/];for(let i of o){let n=r.match(i)?.[1]??"";if(n.length>0)return n}return r}async function Fo(r,e,t){if((0,hr.platform)()==="win32"&&Bo(r)&&r.length>=31&&Buffer.isBuffer(e))return Io(r,e);if((0,hr.platform)()==="darwin"&&!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,i)=>{(0,Xe.pbkdf2)(e,"saltysalt",1003,16,"sha1",(a,n)=>{try{if(a){i(new Error(`Failed to derive key: ${a.message}`));return}let s=Wf(r);if(s.length%16!==0){i(new Error("Encrypted data length is not a multiple of 16"));return}let p=Buffer.alloc(16," "),f=(0,Xe.createDecipheriv)("aes-128-cbc",n,p);f.setAutoPadding(!1);let l=f.update(s);try{f.final()}catch(b){i(new Error(`Failed to finalize decryption: ${b.message}`));return}l=Kf(l);let S=((t||0)>=24&&l.length>32?l.slice(32):l).toString("utf8");o(Vf(S))}catch(s){i(new Error(`Decryption failed: ${s.message}`))}})})}var br=require("os");var Do=require("child_process"),No=require("util");var Jf=(0,No.promisify)(Do.exec),xr=class extends Error{constructor(t,o,i){super(t);this.command=o;this.originalError=i;this.name="CommandExecutionError"}};async function j(r,e){try{let t=await Jf(r,{...e,encoding:"utf8"});return{stdout:t.stdout.toString(),stderr:t.stderr.toString()}}catch(t){throw R("Command execution failed",t,{command:r}),new xr(t instanceof Error?t.message:String(t),r,t instanceof Error?t:void 0)}}async function Mo(){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"}async function jo(){return(await j('security find-generic-password -w -s "Chrome Safe Storage"')).stdout.trim()}var Uo=require("fs"),Ho=require("path");function Zf(encryptedKey){let DPAPI_PREFIX=Buffer.from("DPAPI");if(!encryptedKey.subarray(0,5).equals(DPAPI_PREFIX))throw new Error("Invalid DPAPI key prefix");let encryptedData=encryptedKey.subarray(5);if(process.platform==="win32")try{let moduleName="@primno/dpapi",dpapi=eval(`require("${moduleName}")`);if(dpapi&&typeof dpapi.unprotectData=="function")return dpapi.unprotectData(encryptedData)}catch(r){process.env.VERBOSE&&console.warn("DPAPI module not available:",r)}throw new Error("Windows DPAPI decryption requires native bindings. Install @primno/dpapi package for Windows support.")}function qo(){try{let r=(0,Ho.join)(M,"Local State"),e=(0,Uo.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 Zf(o).toString("latin1")}catch(r){throw new Error(`Failed to retrieve Chrome password on Windows: ${r instanceof Error?r.message:String(r)}`)}}async function zo(){switch((0,br.platform)()){case"darwin":return await jo();case"win32":return qo();case"linux":return await Mo();default:throw new Error(`Platform ${(0,br.platform)()} is not supported`)}}function $o(r,e,t,o,i,a){return{domain:r,name:e,value:t,expiry:vo(o),meta:{file:i,browser:"Chrome",decrypted:a}}}var ae=class extends N{constructor(){super("ChromeCookieQueryStrategy","Chrome")}async executeQuery(e,t,o,i){let a=["darwin","win32","linux"];if(!a.includes(process.platform))return this.logger.warn("Platform not supported",{platform:process.platform,supportedPlatforms:a}),[];let n=o??To(),s=Array.isArray(n)?n:[n];if(s.length===0)return this.logger.warn("No Chrome cookie files found"),[];let p=await zo();return(await Promise.all(s.map(l=>this.processFile(l,e,t,p)))).flat()}async processFile(e,t,o,i){try{let a=await _o({name:t,domain:o,file:e}),n=0;try{let f=await import("better-sqlite3"),l=new f.default(e,{readonly:!0});try{let c=l.prepare("SELECT value FROM meta WHERE key = ?").get("version");n=c?Number.parseInt(c.value,10):0}finally{l.close()}}catch(f){this.logger.debug("Could not retrieve meta version, defaulting to 0",{error:f})}let s={file:e,password:i,metaVersion:n};return(await Promise.allSettled(a.map(f=>this.processCookie(f,s)))).map(f=>f.status==="fulfilled"?f.value:null).filter(f=>f!==null)}catch(a){return a instanceof Error?this.logger.error("Failed to process cookie file",{error:a.message,file:e,name:t,domain:o}):this.logger.error("Failed to process cookie file",{error:String(a),file:e,name:t,domain:o}),[]}}async processCookie(e,t){try{let o=Buffer.isBuffer(e.value)?e.value:Buffer.from(String(e.value)),i=await Fo(o,t.password,t.metaVersion);return $o(e.domain,e.name,i,e.expiry,t.file,!0)}catch(o){return o instanceof Error?this.logger.warn("Failed to decrypt cookie",{error:o}):this.logger.warn("Failed to decrypt cookie",{error:String(o)}),$o(e.domain,e.name,e.value.toString("utf-8"),e.expiry,t.file,!1)}}};var Ko=require("os"),Cr=require("path"),Vo=$(require("fast-glob"),1);var Go=h("ProcessDetector");function Xf(r,e){let t=r.trim().split(/\s+/);if(t.length<2)return null;let o=Number.parseInt(t[1],10);return Number.isNaN(o)?null:{pid:o,command:t.slice(10).join(" ")||e,details:r.trim()}}async function Qo(){try{let r="ps aux | grep -i firefox | grep -v grep",{stdout:e}=await j(r);if(!e||e.trim()==="")return[];let t=[],o=e.split(`
|
|
3
|
-
`).filter(i=>i.trim()!=="");for(let i of o){let a=Xf(i,"firefox");a&&t.push(a)}return Go.debug("Firefox process detection completed",{processCount:t.length,processes:t.map(i=>({pid:i.pid,command:i.command}))}),t}catch(r){return Go.warn("Failed to detect Firefox processes",{error:r instanceof Error?r.message:String(r)}),[]}}function Wo(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.`}function Yf(r){let e=(0,Ko.homedir)();if(!e)return r.warn("Failed to get home directory"),[];let t=[(0,Cr.join)(e,"Library/Application Support/Firefox/Profiles/*/cookies.sqlite"),(0,Cr.join)(e,".mozilla/firefox/*/cookies.sqlite")],o=[];for(let i of t){let a=Vo.default.sync(i);o.push(...a)}return r.debug("Found Firefox cookie files",{files:o}),o}var ie=class extends N{constructor(){super("FirefoxCookieQueryStrategy","Firefox")}async handleDatabaseLockError(e,t){if(e instanceof Error&&e.message.toLowerCase().includes("database is locked"))try{let o=await Qo();if(o.length>0){let i=Wo("firefox",o);this.logger.warn("Firefox process conflict detected",{file:t,processCount:o.length,advice:i})}else this.logger.warn("Database locked but no Firefox processes detected",{file:t,suggestion:"Another process may be accessing the database"})}catch(o){this.logger.debug("Failed to check Firefox processes",{error:o instanceof Error?o.message:String(o)})}}async executeQuery(e,t,o,i){let a=o??Yf(this.logger),n=Array.isArray(a)?a:[a],s=[];for(let p of n)try{let f=await Ve({file:p,sql:"SELECT name, value, host as domain, expiry FROM moz_cookies WHERE name = ? AND host LIKE ?",params:[e,`%${t}%`],rowTransform:l=>({name:l.name,value:l.value,domain:l.domain,expiry:l.expiry>0?new Date(l.expiry*1e3):"Infinity",meta:{file:p,browser:"Firefox",decrypted:!1}})});s.push(...f)}catch(f){await this.handleDatabaseLockError(f,p),f instanceof Error?this.logger.warn(`Error reading Firefox cookie file ${p}`,{error:f.message,file:p,name:e,domain:t}):this.logger.warn(`Error reading Firefox cookie file ${p}`,{error:String(f),file:p,name:e,domain:t})}return s}};var ia=require("os"),na=require("path");var ea=require("buffer"),ra=require("fs"),ta=require("os"),oa=require("path");var xe=require("buffer");var Jo=$(require("destr"),1),m=require("zod"),Ye=m.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"),er=m.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"),Zo=m.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("/"),Xo=m.z.string().trim().transform(r=>(0,Jo.default)(r)).pipe(m.z.any()),Yo=m.z.object({name:er,value:Xo,domain:Ye,path:Zo,expiry:m.z.number().int(),creation:m.z.number().int(),flags:m.z.number().optional(),version:m.z.number().int().optional(),port:m.z.number().int().optional(),comment:m.z.string().optional(),commentURL:m.z.string().optional()}),Uy=m.z.object({name:er,domain:Ye}).strict(),ep=m.z.object({file:m.z.string().trim().min(1,"File path cannot be empty").optional(),browser:m.z.string().trim().optional(),decrypted:m.z.boolean().optional(),secure:m.z.boolean().optional(),httpOnly:m.z.boolean().optional(),path:Zo.optional()}).catchall(m.z.unknown()).strict(),rp=m.z.object({domain:Ye,name:er,value:Xo,expiry:m.z.union([m.z.literal("Infinity"),m.z.date(),m.z.number().int().positive("Expiry must be a positive number")]).optional(),meta:ep.optional()}).strict(),Hy=m.z.object({expiry:m.z.number().int().optional(),domain:Ye,name:er,value:m.z.union([m.z.string(),m.z.instanceof(Buffer)])}).strict(),qy=m.z.object({format:m.z.enum(["merged","grouped"]).optional(),separator:m.z.string().optional(),showFilePaths:m.z.boolean().optional()}).strict(),tp=m.z.enum(["Chrome","Firefox","Safari","internal","unknown"]),zy=m.z.object({browserName:tp,queryCookies:m.z.function().args(m.z.string(),m.z.string(),m.z.string().optional(),m.z.boolean().optional()).returns(m.z.promise(m.z.array(rp)))}).strict();var U=h("BinaryCodableCookie"),rr=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 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=xe.Buffer.from(t[1],"base64").toString("utf8"),i=JSON.parse(o);return JSON.stringify(i)}catch{return null}}parseJsonValue(e){try{let t=JSON.parse(e);return JSON.stringify(t)}catch{return null}}processValue(e){if(e===null)return"null";if(e===void 0)return"undefined";if(xe.Buffer.isBuffer(e))return e.toString();if(typeof e!="string")return String(e);let t=this.decodeUrlValue(e);if(t.match(/^ey[A-Za-z0-9_-]+\.ey[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/)){let o=this.decodeJwtPayload(t);if(typeof o=="string"&&o.length>0)return o}if(t.startsWith("{")||t.startsWith("[")){let o=this.parseJsonValue(t);if(typeof o=="string"&&o.length>0)return o}return t}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),i=this.convertMacTimestamp(this.creation);return Yo.parse({name:this.name.replace(/^: /,""),value:this.processValue(this.value)||"",domain:t,path:this.path||"/",expiry:o,creation:i,flags:e,version:this.version,port:this.port,comment:this.comment,commentURL:this.commentURL})}catch{return null}}readNullTerminatedString(e,t){let o=t;for(;o<e.buffer.length&&e.buffer[o]!==0;)o++;return e.buffer.toString("utf8",t,o)||""}readHeader(e){let t=e.buffer.readUInt32LE(e.offset);U.debug("Cookie size:",t),e.offset+=4;let o=e.buffer.readUInt32LE(e.offset);U.debug("Cookie version:",o),e.offset+=4;let i=e.buffer.readUInt32LE(e.offset);U.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 a=e.buffer.readUInt32LE(e.offset);U.debug("Has port:",a),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 U.debug("String offsets:",n),{size:t,hasPort:a,offsets:n}}readTimestamps(e){let t=xe.Buffer.alloc(8);for(let n=0;n<8;n++)t[n]=e.buffer[e.offset+n];let o=t.readDoubleLE(0);e.offset+=8;let i=xe.Buffer.alloc(8);for(let n=0;n<8;n++)i[n]=e.buffer[e.offset+n];let a=i.readDoubleLE(0);e.offset+=8,this.expiration=o,this.creation=a}readStrings(e,t,o){U.debug("Reading strings from cookie buffer of size:",t);let a=[{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(n=>n.offset>0).sort((n,s)=>n.offset-s.offset);U.debug("Reading strings in order:",a.map(n=>n.field));for(let n=0;n<a.length;n++){let{field:s,offset:p}=a[n],l=(n<a.length-1?a[n+1].offset:t)-p,c=0+p;for(;c<0+p+l&&e.buffer[c]!==0;)c++;let d=e.buffer.toString("utf8",0+p,c);switch(U.debug(`Read ${s}:`,d),s){case"url":this.url=d;break;case"name":this.name=d;break;case"path":this.path=d;break;case"value":this.value=d;break;case"comment":this.comment=d;break}}}decode(e){let{size:t,hasPort:o,offsets:i}=this.readHeader(e),a=e.offset;e.offset=a+24,this.readTimestamps(e),o>0&&(this.port=e.buffer.readUInt16LE(e.offset),e.offset+=2),e.offset=a,this.readStrings(e,t,i)}convertFlags(){return(this.flags.isSecure?1:0)|(this.flags.isHTTPOnly?4:0)|(this.flags.unknown1?8:0)|(this.flags.unknown2?16:0)}};var O=h("BinaryCodablePage"),ne=class ne{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){let i=o instanceof Error?o.message:String(o);W("BinaryCookies","Error converting cookie",{error:i})}return e}decode(e){let t=e.buffer.readUInt32BE(e.offset);if(O.debug("Page header:",t.toString(16)),e.offset+=4,t!==ne.HEADER)throw new Error("Invalid page header");let o=e.buffer.readUInt32LE(e.offset);O.debug("Cookie count:",o),e.offset+=4;let i=e.offset-8;O.debug("Page start offset:",i);let a=[];for(let s=0;s<o;s++){let p=e.buffer.readUInt32LE(e.offset);a.push(p),O.debug(`Cookie ${s} offset:`,p),e.offset+=4}let n=e.buffer.readUInt32BE(e.offset);if(O.debug("Page footer:",n.toString(16)),e.offset+=4,n!==ne.FOOTER)throw new Error("Invalid page footer");for(let s=0;s<o;s++)try{let p=a[s];O.debug(`Reading cookie ${s} at offset:`,p);let f=e.buffer.readUInt32LE(p);if(O.debug(`Cookie ${s} size:`,f),f<48){O.warn(`Invalid cookie size ${f} at index ${s}`);continue}if(p+f>e.buffer.length){O.warn(`Cookie size ${f} at index ${s} would exceed buffer length ${e.buffer.length}`);continue}let l=e.buffer.subarray(p,p+f),c=new rr(l);this.cookies.push(c)}catch(p){O.warn("Invalid cookie data",{error:p instanceof Error?p.message:String(p)})}}};ne.HEADER=256,ne.FOOTER=0;var tr=ne;var H=h("BinaryCodableCookies"),P=class P{constructor(e){let t={offset:0,buffer:e};this.pages=[],this.metadata={},this.decode(t)}static fromFile(e){let t=(0,ra.readFileSync)(e);return new P(t)}static fromDefaultPath(){return P.fromFile(P.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){let i=o instanceof Error?o.message:String(o);W("BinaryCookies","Error converting page cookies",{error:i})}return e}decode(e){try{let t=e.buffer.subarray(e.offset,e.offset+4);if(e.offset+=4,H.debug("Magic bytes:",t.toString()),!t.equals(P.MAGIC))throw new Error("Missing magic value");let o=e.buffer.readUInt32BE(e.offset);H.debug("Page count:",o),e.offset+=4;let i=[];for(let f=0;f<o;f++){let l=e.buffer.readUInt32BE(e.offset);i.push(l),H.debug(`Page ${f} size:`,l),e.offset+=4}let a=e.offset;H.debug("Starting page data at offset:",a);for(let f of i)try{H.debug("Reading page at offset:",a,"with size:",f);let l=e.buffer.subarray(a,a+f),c=new tr(l);this.pages.push(c),a+=f}catch(l){let c=l instanceof Error?l.message:String(l);H.warn("Error decoding page:",{error:c}),a+=f}e.offset=a;let n=e.buffer.readUInt32BE(e.offset);H.debug("Checksum:",n.toString(16)),e.offset+=4;let s=e.buffer.readBigUInt64BE(e.offset);H.debug("Footer:",s.toString(16)),e.offset+=8,s!==P.FOOTER&&W("BinaryCookies","Invalid cookie file format: wrong footer");let p=e.buffer.subarray(e.offset);this.metadata={}}catch(t){let o=t instanceof Error?t.message:String(t);throw W("BinaryCookies","Error decoding binary cookies file",{error:o}),t}}};P.MAGIC=ea.Buffer.from("cook","utf8"),P.FOOTER=BigInt("0x071720050000004b"),P.DEFAULT_COOKIE_PATH=(0,oa.join)((0,ta.homedir)(),"Library/Containers/com.apple.Safari/Data/Library/Cookies/Cookies.binarycookies");var or=P;function aa(r){return or.fromFile(r).toCookieRows()}var se=class extends N{constructor(){super("SafariCookieQueryStrategy","Safari")}getCookieDbPath(e){return(0,na.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==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?!1:(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){return e===null?"null":e===void 0?"undefined":Buffer.isBuffer(e)?e.toString():String(e)}decodeCookies(e,t,o){try{return aa(e).filter(a=>(t==="%"||a.name===t)&&(o==="%"||this.formatDomain(a.domain).includes(o))).map(a=>({domain:this.formatDomain(a.domain),name:a.name,value:this.processValue(a.value),expiry:this.formatExpiry(a.expiry),meta:{file:e,browser:"Safari",decrypted:!1,secure:this.isFlagSet(a.flags,1),httpOnly:this.isFlagSet(a.flags,4),path:a.path,version:a.version,comment:a.comment,commentURL:a.commentURL,port:a.port,creation:this.formatCreation(a.creation)}}))}catch(i){let a=i instanceof Error?i.message:String(i);return a.includes("EPERM")||a.includes("operation not permitted")||a.includes("Permission denied")?this.logger.debug(`Permission denied accessing Safari cookies at ${e}`,{error:a,file:e,name:t,domain:o}):i instanceof Error?this.logger.error(`Error decoding ${e}`,{error:i.message,file:e,name:t,domain:o}):this.logger.error(`Error decoding ${e}`,{error:String(i),file:e,name:t,domain:o}),[]}}executeQuery(e,t,o,i){try{this.logger.info("Querying cookies",{name:e,domain:t,store:o});let a=(0,ia.homedir)();if(typeof a!="string"||a.length===0)return this.logger.error("Failed to get home directory"),Promise.resolve([]);let n=o??this.getCookieDbPath(a);return Promise.resolve(this.decodeCookies(n,e||"%",t||"%"))}catch(a){return a instanceof Error?this.logger.error("Failed to query cookies",{error:a.message,name:e,domain:t}):this.logger.error("Failed to query cookies",{error:String(a),name:e,domain:t}),Promise.resolve([])}}};var sa={strategies:new Map([["safari",se],["firefox",ie],["chrome",ae]]),detectStoreType(r){if(!r||!(0,ar.existsSync)(r))return;try{if((0,ar.readFileSync)(r,{encoding:null}).subarray(0,4).toString("ascii")==="cook")return"safari"}catch{}let e=r.toLowerCase();if(e.includes("binarycookie"))return"safari";if(e.includes("firefox")||e.includes("mozilla"))return"firefox";if(e.includes("chrome")||e.includes("chromium"))return"chrome"},createStrategy(r,e){if(e&&!r){let o=this.detectStoreType(e);if(o){let i=this.strategies.get(o);if(i)return new i}}if(typeof r!="string")return new de([new ae,new ie,new se]);let t=this.strategies.get(r.toLowerCase());return t!==void 0?new t:new de([new ae,new ie,new se])}};async function op(r,e,t){let o=[];for(let i of e){let a=await r.queryCookies(i,t);if(o=[...o,...a],typeof t.limit=="number"&&t.limit>0&&o.length>=t.limit){o=o.slice(0,t.limit);break}}return o}async function fa(r,e,t,o=!1,i){try{let a=typeof r.browser=="string"?r.browser:void 0,n=typeof r.force=="boolean"?r.force:!1,s=sa.createStrategy(a,i),p=new Ke(s),f=Array.isArray(e)?e:[e],l=await op(p,f,{limit:t,removeExpired:o,store:i,strategy:s,force:n});if(l.length===0){u.error("No results");return}new We().getHandler(r).handle(l)}catch(a){a instanceof Error?u.error(a.message):u.error("An unknown error occurred")}}function pa(){u.log("Usage: get-cookie [name] [domain] [options]"),u.log(""),u.log("Examples:"),u.log(" get-cookie auth example.com # Get specific cookie"),u.log(" get-cookie % github.com --output json # Get all cookies as JSON"),u.log(" get-cookie --url https://example.com # Extract from URL"),u.log(""),u.log("Options:"),u.log(" -h, --help Show this help message"),u.log(" -v, --verbose Enable verbose output"),u.log(" -f, --force Force operation despite warnings (e.g., locked databases)"),u.log(""),u.log("Query options:"),u.log(" -n, --name PATTERN Cookie name pattern (% for wildcard)"),u.log(" -D, --domain PATTERN Cookie domain pattern"),u.log(" -u, --url URL URL to extract cookie specs from"),u.log(" --browser BROWSER Target specific browser (chrome|firefox|safari)"),u.log(" --store PATH Path to a specific cookie store file"),u.log(""),u.log("Output options:"),u.log(" --output FORMAT Output format (json)"),u.log(" -d, --dump Dump all cookie details"),u.log(" -G, --dump-grouped Dump all results, grouped by profile"),u.log(" -r, --render Render all results in formatted output")}function ap(r,e){return{name:r||"%",domain:e||"%"}}function ua(r){return r==="*"?"%":r}function ip(r,e){let t=r.url;if(typeof t=="string"){let a=ir(t);return Array.isArray(a)?a:(u.error("Invalid cookie specs from URL"),[])}let o=ua(r.name||e[0]||"%"),i=ua(r.domain||e[1]||"%");return[ap(o,i)]}async function np(r,e){let t=ip(r,e);r.verbose===!0&&u.log("cookieSpecs",t);try{await fa(r,t,void 0,r.removeExpired===!0,r.store)}catch(o){o instanceof Error?u.error("Error querying cookies:",o.message):u.error("An unknown error occurred while querying cookies")}}async function sp(){let r=process.argv.slice(2);if(r.length===0){pa();return}let{values:e,positionals:t}=vr(r);if(e.help===!0){pa();return}await np(e,t)}sp().catch(r=>{r instanceof Error?u.error("Fatal error:",r.message):u.error("An unknown fatal error occurred"),process.exit(1)});
|
|
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'),Ei=require('fast-glob'),Bi=require('minimist'),Wr=require('jsonwebtoken'),oi=require('readline'),crypto=require('crypto'),events=require('events'),Uf=require('better-sqlite3'),buffer=require('buffer'),ec=require('destr');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var Ei__default=/*#__PURE__*/_interopDefault(Ei);var Bi__default=/*#__PURE__*/_interopDefault(Bi);var Wr__default=/*#__PURE__*/_interopDefault(Wr);var oi__default=/*#__PURE__*/_interopDefault(oi);var Uf__default=/*#__PURE__*/_interopDefault(Uf);var ec__default=/*#__PURE__*/_interopDefault(ec);var di=Object.defineProperty;var Be=(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 H=(r,e)=>()=>(r&&(e=r(r=0)),e);var $r=(r,e)=>{for(var t in e)di(r,t,{get:e[t],enumerable:true});};var yi,Qr,Pt=H(()=>{dotenv.config();yi=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=yi.parse({LOG_LEVEL:process.env.LOG_LEVEL,HOME:os$1.homedir()});});var xi,bi,f,I=H(()=>{Pt();xi=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",bi=xi,f=bi;});function Te(r,e,t){let o=e instanceof Error?e.message:String(e);f.error(r,{...t,error:o});}function ue(r,e,t){f.warn(`[${r}] ${e}`,t);}function h(r){return f.withTag(r)}var k=H(()=>{I();I();});function b(){return Bt??(Bt=os$1.platform()),Bt}function j(){return b()==="darwin"}function F(){return b()==="win32"}function qr(){let r=b();return r==="darwin"||r==="win32"||r==="linux"}function fe(){if(!qr())throw new Error(`Unsupported platform: ${b()}. Supported platforms are: darwin, win32, linux`)}var Bt,T=H(()=>{});var Oe,jr=H(()=>{T();Oe=(()=>{let r=os$1.homedir();if(!r)throw new Error("Unable to determine user home directory");switch(fe(),b()){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 ${b()} is not supported`)}})();});async function z(r,e){try{let t=await tf(r,{...e,encoding:"utf8"});return {stdout:t.stdout.toString(),stderr:t.stderr.toString()}}catch(t){throw Te("Command execution failed",t,{command:r}),new nt(t instanceof Error?t.message:String(t),r,t instanceof Error?t:void 0)}}var tf,nt,Tr=H(()=>{k();tf=util.promisify(child_process.exec),nt=class extends Error{constructor(t,o,n){super(t);this.command=o;this.originalError=n;this.name="CommandExecutionError";}};});var Vn={};$r(Vn,{getChromePassword:()=>Ff});async function If(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(F())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 Ff(){try{let r=path.join(Oe,"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 If(o)).toString("latin1")}catch(r){throw new Error(`Failed to retrieve Chrome password on Windows: ${r instanceof Error?r.message:String(r)}`)}}var Kn=H(()=>{T();jr();});var Yn={};$r(Yn,{getChromePassword:()=>Lf});async function Lf(){try{let t=(await z("secret-tool lookup application chrome-libsecret-password-v2 || secret-tool lookup application chrome")).stdout.trim();if(t)return t}catch{}try{let t=(await z(`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 z('kwallet-query kdewallet -f "Chrome Safe Storage" -r Chrome')).stdout.trim();if(t)return t}catch{}return "peanuts"}var Zn=H(()=>{Tr();});var ei={};$r(ei,{CookieQueryBuilder:()=>ee,createQueryBuilder:()=>qf,isSqlBrowser:()=>Hf});function qf(r){return new ee(r)}function Hf(r){return r in Xn}var Xn,ee,dt=H(()=>{Xn={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"}},ee=class{constructor(e){if(this.browser=e,this.schema=Xn[e],!this.schema)throw new Error(`Unsupported browser type: ${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),p=`SELECT ${u} FROM ${a.tableName}`;return l&&(p+=` WHERE ${l}`),p+=` ORDER BY ${a.expiryColumn} DESC`,i&&i>0&&(p+=` LIMIT ${i}`),{sql:p,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:p}=this.buildWhereClause(l.name,l.domain,l.exactDomain,l.includeExpired);c&&(n.push(`(${c})`),i.push(...p));}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&&c.limit>0?l?Math.min(l,c.limit):c.limit:l,void 0);return u&&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&&this.browser!=="firefox"?t.push(e.encryptedValueColumn):t.push(e.valueColumn),e.pathColumn&&t.push(e.pathColumn),e.secureColumn&&t.push(e.secureColumn),e.httpOnlyColumn&&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(", ")}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&&(o?(s.push(`${i.domainColumn} = ?`),a.push(t)):t.startsWith(".")?(s.push(`${i.domainColumn} LIKE ?`),a.push(`%${t}`)):(s.push(`(${i.domainColumn} = ? OR ${i.domainColumn} = ? OR ${i.domainColumn} LIKE ?)`),a.push(t,`.${t}`,`%.${t}`))),!n)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})}};});k();jr();var Tt=h("listChromeProfiles");function Ot(){let r=Ei__default.default.sync("./**/Cookies",{cwd:Oe,absolute:true});return Tt.debug("Found cookie files:",r),r}function At(){try{let r=path.join(Oe,"Local State"),e=JSON.parse(fs$1.readFileSync(r,"utf8"));return Object.values(e.profile.info_cache)}catch(r){return Tt.debug("Failed to access Chrome profiles",{error:r}),[]}}function Pi(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 Ur(r){if(!r.includes("://"))try{return Ur(`https://${r}`)}catch{return [{name:"%",domain:r}]}try{let e=new URL(r);return Pi(e.hostname)}catch{return [{name:"%",domain:r}]}}var Ve={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 Ti(){let r=[];for(let e of Ve.string)r.push(`--${e}`);for(let e of Ve.boolean)r.push(`--${e}`);for(let[e,t]of Object.entries(Ve.alias))r.push(`-${e}`),r.includes(`--${t}`)||r.push(`--${t}`);return r}var Oi=Ti();function Ae(r){let e=Bi__default.default(r,{...Ve,unknown:n=>{if(!n.startsWith("-"))return true;if(!Oi.some(s=>n.startsWith(s)))throw new Error(`Unknown option: ${n}`);return true}}),{_:t,...o}=e;return {values:o,positionals:t}}I();function B(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 Ai(r){let e=B(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 P(r,e){return B(r).toLowerCase().includes(e.toLowerCase())}var Ke={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"]};function Ye(r,e){return e.some(t=>r.includes(t))}function Rt(r){let e=B(r).toLowerCase();return Ye(e,Ke.locked)?"locked":Ye(e,Ke.busy)?"busy":Ye(e,Ke.permission)?"permission":Ye(e,Ke.not_found)?"not_found":null}function ce(r,e){let t=Ai(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}:{}}}k();I();var _t=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/;function Dt(r){return r==null||typeof r!="string"?false:_t.test(r)}function Ri(r){return _t.test(r)?{isValid:true}:{isValid:false,error:"Invalid JWT format - must be three dot-separated base64url-encoded strings"}}function _i(r,e){try{return Wr__default.default.verify(r,e),null}catch(t){let o=t instanceof Error?t.message:"Unknown verification error";return Ae(process.argv).values.verbose===true&&f.debug(`JWT verification failed: ${o}`),{isValid:false,error:o}}}function Di(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 Ii(r,e){try{Ae(process.argv).values.verbose===!0&&f.debug(r,e);}catch{}}function Fi(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 Li(r){let e=Wr__default.default.decode(r,{complete:true});return Ii("Decoded JWT token:",e??"Failed to decode"),e?{...Di(e.payload),header:e.header}:{isValid:false,error:"Failed to decode token"}}function It(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=Fi(r);if(t!==null)return t;let o=Ri(r);if(!o.isValid)return o;if(e!==void 0){let n=_i(r,e);if(n!==null)return n}return Li(r)}catch(t){let o=t instanceof Error?t.message:"Unknown error during JWT validation";return f.debug(`JWT validation error: ${o}`),{isValid:false,error:o}}}function Ft(r){try{let e=Wr__default.default.decode(r,{complete:!0});return e?{payload:e.payload,header:e.header}:null}catch{return null}}k();var zr=h("JwtCookieDetector");function Gr(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"||!Dt(a.value))return a;s&&zr.info(`Detected JWT in cookie: ${a.name}`);let u={...a.meta,isJwt:true};if(t&&o){let l=It(a.value,o);u.jwtValidation=l,l.isValid&&l.decodedPayload?Lt(u,l.decodedPayload,n,s):s&&zr.warn(`JWT validation failed for cookie ${a.name}: ${l.error}`);}else if(i){let l=Ft(a.value);l&&(u.jwtValidation={isValid:true,decodedPayload:l.payload,header:l.header},Lt(u,l.payload,n,s));}return {...a,meta:u}})}function Lt(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&&zr.warn(`JWT in cookie has expired (exp: ${r.jwtExpiry.toISOString()})`));}}function Nt(r,e={}){return Gr(r,e).filter(o=>o.meta?.isJwt&&(!o.meta.jwtValidation||o.meta.jwtValidation.isValid))}I();var Re=class{canHandle(e){return true}handle(e){let t=new Set(e.map(o=>o.value));for(let o of t)f.log(o);}};I();var Ze=class{canHandle(e){return e.dump===true||e.d===true}handle(e){f.log(e);}};var Ni=typeof global=="object"&&global&&global.Object===Object&&global,Xe=Ni;var Mi=typeof self=="object"&&self&&self.Object===Object&&self,$i=Xe||Mi||Function("return this")(),S=$i;var Qi=S.Symbol,R=Qi;var Mt=Object.prototype,qi=Mt.hasOwnProperty,Hi=Mt.toString,_e=R?R.toStringTag:void 0;function ji(r){var e=qi.call(r,_e),t=r[_e];try{r[_e]=void 0;var o=!0;}catch{}var n=Hi.call(r);return o&&(e?r[_e]=t:delete r[_e]),n}var $t=ji;var Ui=Object.prototype,Wi=Ui.toString;function zi(r){return Wi.call(r)}var Qt=zi;var Gi="[object Null]",Ji="[object Undefined]",qt=R?R.toStringTag:void 0;function Vi(r){return r==null?r===void 0?Ji:Gi:qt&&qt in Object(r)?$t(r):Qt(r)}var L=Vi;function Ki(r){return r!=null&&typeof r=="object"}var N=Ki;var Yi="[object Symbol]";function Zi(r){return typeof r=="symbol"||N(r)&&L(r)==Yi}var pe=Zi;function Xi(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 Ht=Xi;var es=Array.isArray,C=es;var jt=R?R.prototype:void 0,Ut=jt?jt.toString:void 0;function Wt(r){if(typeof r=="string")return r;if(C(r))return Ht(r,Wt)+"";if(pe(r))return Ut?Ut.call(r):"";var e=r+"";return e=="0"&&1/r==-Infinity?"-0":e}var zt=Wt;function ts(r){var e=typeof r;return r!=null&&(e=="object"||e=="function")}var me=ts;function os(r){return r}var Gt=os;var ns="[object AsyncFunction]",is="[object Function]",ss="[object GeneratorFunction]",as="[object Proxy]";function ls(r){if(!me(r))return false;var e=L(r);return e==is||e==ss||e==ns||e==as}var er=ls;var us=S["__core-js_shared__"],rr=us;var Jt=(function(){var r=/[^.]+$/.exec(rr&&rr.keys&&rr.keys.IE_PROTO||"");return r?"Symbol(src)_1."+r:""})();function fs(r){return !!Jt&&Jt in r}var Vt=fs;var cs=Function.prototype,ps=cs.toString;function ms(r){if(r!=null){try{return ps.call(r)}catch{}try{return r+""}catch{}}return ""}var U=ms;var ds=/[\\^$.*+?()[\]{}|]/g,gs=/^\[object .+?Constructor\]$/,hs=Function.prototype,ys=Object.prototype,ws=hs.toString,xs=ys.hasOwnProperty,bs=RegExp("^"+ws.call(xs).replace(ds,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function Cs(r){if(!me(r)||Vt(r))return false;var e=er(r)?bs:gs;return e.test(U(r))}var Kt=Cs;function ks(r,e){return r?.[e]}var Yt=ks;function Ss(r,e){var t=Yt(r,e);return Kt(t)?t:void 0}var O=Ss;var vs=O(S,"WeakMap"),tr=vs;var Es=(function(){try{var r=O(Object,"defineProperty");return r({},"",{}),r}catch{}})(),Jr=Es;var Ps=9007199254740991,Bs=/^(?:0|[1-9]\d*)$/;function Ts(r,e){var t=typeof r;return e=e??Ps,!!e&&(t=="number"||t!="symbol"&&Bs.test(r))&&r>-1&&r%1==0&&r<e}var or=Ts;function Os(r,e,t){e=="__proto__"&&Jr?Jr(r,e,{configurable:true,enumerable:true,value:t,writable:true}):r[e]=t;}var Zt=Os;function As(r,e){return r===e||r!==r&&e!==e}var nr=As;var Rs=9007199254740991;function _s(r){return typeof r=="number"&&r>-1&&r%1==0&&r<=Rs}var de=_s;function Ds(r){return r!=null&&de(r.length)&&!er(r)}var ir=Ds;var Is=Object.prototype;function Fs(r){var e=r&&r.constructor,t=typeof e=="function"&&e.prototype||Is;return r===t}var Xt=Fs;function Ls(r,e){for(var t=-1,o=Array(r);++t<r;)o[t]=e(t);return o}var eo=Ls;var Ns="[object Arguments]";function Ms(r){return N(r)&&L(r)==Ns}var Vr=Ms;var ro=Object.prototype,$s=ro.hasOwnProperty,Qs=ro.propertyIsEnumerable,qs=Vr((function(){return arguments})())?Vr:function(r){return N(r)&&$s.call(r,"callee")&&!Qs.call(r,"callee")},sr=qs;function Hs(){return false}var to=Hs;var io=typeof exports=="object"&&exports&&!exports.nodeType&&exports,oo=io&&typeof module=="object"&&module&&!module.nodeType&&module,js=oo&&oo.exports===io,no=js?S.Buffer:void 0,Us=no?no.isBuffer:void 0,Ws=Us||to,De=Ws;var zs="[object Arguments]",Gs="[object Array]",Js="[object Boolean]",Vs="[object Date]",Ks="[object Error]",Ys="[object Function]",Zs="[object Map]",Xs="[object Number]",ea="[object Object]",ra="[object RegExp]",ta="[object Set]",oa="[object String]",na="[object WeakMap]",ia="[object ArrayBuffer]",sa="[object DataView]",aa="[object Float32Array]",la="[object Float64Array]",ua="[object Int8Array]",fa="[object Int16Array]",ca="[object Int32Array]",pa="[object Uint8Array]",ma="[object Uint8ClampedArray]",da="[object Uint16Array]",ga="[object Uint32Array]",x={};x[aa]=x[la]=x[ua]=x[fa]=x[ca]=x[pa]=x[ma]=x[da]=x[ga]=true;x[zs]=x[Gs]=x[ia]=x[Js]=x[sa]=x[Vs]=x[Ks]=x[Ys]=x[Zs]=x[Xs]=x[ea]=x[ra]=x[ta]=x[oa]=x[na]=false;function ha(r){return N(r)&&de(r.length)&&!!x[L(r)]}var so=ha;function ya(r){return function(e){return r(e)}}var ao=ya;var lo=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Ie=lo&&typeof module=="object"&&module&&!module.nodeType&&module,wa=Ie&&Ie.exports===lo,Kr=wa&&Xe.process,xa=(function(){try{var r=Ie&&Ie.require&&Ie.require("util").types;return r||Kr&&Kr.binding&&Kr.binding("util")}catch{}})(),Yr=xa;var uo=Yr&&Yr.isTypedArray,ba=uo?ao(uo):so,ar=ba;var Ca=Object.prototype,ka=Ca.hasOwnProperty;function Sa(r,e){var t=C(r),o=!t&&sr(r),n=!t&&!o&&De(r),i=!t&&!o&&!n&&ar(r),s=t||o||n||i,a=s?eo(r.length,String):[],u=a.length;for(var l in r)(e||ka.call(r,l))&&!(s&&(l=="length"||n&&(l=="offset"||l=="parent")||i&&(l=="buffer"||l=="byteLength"||l=="byteOffset")||or(l,u)))&&a.push(l);return a}var fo=Sa;function va(r,e){return function(t){return r(e(t))}}var co=va;var Ea=co(Object.keys,Object),po=Ea;var Pa=Object.prototype,Ba=Pa.hasOwnProperty;function Ta(r){if(!Xt(r))return po(r);var e=[];for(var t in Object(r))Ba.call(r,t)&&t!="constructor"&&e.push(t);return e}var mo=Ta;function Oa(r){return ir(r)?fo(r):mo(r)}var ge=Oa;var Aa=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Ra=/^\w*$/;function _a(r,e){if(C(r))return false;var t=typeof r;return t=="number"||t=="symbol"||t=="boolean"||r==null||pe(r)?true:Ra.test(r)||!Aa.test(r)||e!=null&&r in Object(e)}var he=_a;var Da=O(Object,"create"),W=Da;function Ia(){this.__data__=W?W(null):{},this.size=0;}var go=Ia;function Fa(r){var e=this.has(r)&&delete this.__data__[r];return this.size-=e?1:0,e}var ho=Fa;var La="__lodash_hash_undefined__",Na=Object.prototype,Ma=Na.hasOwnProperty;function $a(r){var e=this.__data__;if(W){var t=e[r];return t===La?void 0:t}return Ma.call(e,r)?e[r]:void 0}var yo=$a;var Qa=Object.prototype,qa=Qa.hasOwnProperty;function Ha(r){var e=this.__data__;return W?e[r]!==void 0:qa.call(e,r)}var wo=Ha;var ja="__lodash_hash_undefined__";function Ua(r,e){var t=this.__data__;return this.size+=this.has(r)?0:1,t[r]=W&&e===void 0?ja:e,this}var xo=Ua;function ye(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]);}}ye.prototype.clear=go;ye.prototype.delete=ho;ye.prototype.get=yo;ye.prototype.has=wo;ye.prototype.set=xo;var Zr=ye;function Wa(){this.__data__=[],this.size=0;}var bo=Wa;function za(r,e){for(var t=r.length;t--;)if(nr(r[t][0],e))return t;return -1}var G=za;var Ga=Array.prototype,Ja=Ga.splice;function Va(r){var e=this.__data__,t=G(e,r);if(t<0)return false;var o=e.length-1;return t==o?e.pop():Ja.call(e,t,1),--this.size,true}var Co=Va;function Ka(r){var e=this.__data__,t=G(e,r);return t<0?void 0:e[t][1]}var ko=Ka;function Ya(r){return G(this.__data__,r)>-1}var So=Ya;function Za(r,e){var t=this.__data__,o=G(t,r);return o<0?(++this.size,t.push([r,e])):t[o][1]=e,this}var vo=Za;function we(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]);}}we.prototype.clear=bo;we.prototype.delete=Co;we.prototype.get=ko;we.prototype.has=So;we.prototype.set=vo;var J=we;var Xa=O(S,"Map"),V=Xa;function el(){this.size=0,this.__data__={hash:new Zr,map:new(V||J),string:new Zr};}var Eo=el;function rl(r){var e=typeof r;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?r!=="__proto__":r===null}var Po=rl;function tl(r,e){var t=r.__data__;return Po(e)?t[typeof e=="string"?"string":"hash"]:t.map}var K=tl;function ol(r){var e=K(this,r).delete(r);return this.size-=e?1:0,e}var Bo=ol;function nl(r){return K(this,r).get(r)}var To=nl;function il(r){return K(this,r).has(r)}var Oo=il;function sl(r,e){var t=K(this,r),o=t.size;return t.set(r,e),this.size+=t.size==o?0:1,this}var Ao=sl;function xe(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]);}}xe.prototype.clear=Eo;xe.prototype.delete=Bo;xe.prototype.get=To;xe.prototype.has=Oo;xe.prototype.set=Ao;var ie=xe;var al="Expected a function";function Xr(r,e){if(typeof r!="function"||e!=null&&typeof e!="function")throw new TypeError(al);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(Xr.Cache||ie),t}Xr.Cache=ie;var Ro=Xr;var ll=500;function ul(r){var e=Ro(r,function(o){return t.size===ll&&t.clear(),o}),t=e.cache;return e}var _o=ul;var fl=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,cl=/\\(\\)?/g,pl=_o(function(r){var e=[];return r.charCodeAt(0)===46&&e.push(""),r.replace(fl,function(t,o,n,i){e.push(n?i.replace(cl,"$1"):o||t);}),e}),Do=pl;function ml(r){return r==null?"":zt(r)}var Io=ml;function dl(r,e){return C(r)?r:he(r,e)?[r]:Do(Io(r))}var lr=dl;function hl(r){if(typeof r=="string"||pe(r))return r;var e=r+"";return e=="0"&&1/r==-Infinity?"-0":e}var Y=hl;function yl(r,e){e=lr(e,r);for(var t=0,o=e.length;r!=null&&t<o;)r=r[Y(e[t++])];return t&&t==o?r:void 0}var ur=yl;function wl(r,e,t){var o=r==null?void 0:ur(r,e);return o===void 0?t:o}var Fo=wl;function xl(r,e){for(var t=-1,o=e.length,n=r.length;++t<o;)r[n+t]=e[t];return r}var Lo=xl;function bl(){this.__data__=new J,this.size=0;}var No=bl;function Cl(r){var e=this.__data__,t=e.delete(r);return this.size=e.size,t}var Mo=Cl;function kl(r){return this.__data__.get(r)}var $o=kl;function Sl(r){return this.__data__.has(r)}var Qo=Sl;var vl=200;function El(r,e){var t=this.__data__;if(t instanceof J){var o=t.__data__;if(!V||o.length<vl-1)return o.push([r,e]),this.size=++t.size,this;t=this.__data__=new ie(o);}return t.set(r,e),this.size=t.size,this}var qo=El;function be(r){var e=this.__data__=new J(r);this.size=e.size;}be.prototype.clear=No;be.prototype.delete=Mo;be.prototype.get=$o;be.prototype.has=Qo;be.prototype.set=qo;var Ce=be;function Pl(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 Ho=Pl;function Bl(){return []}var jo=Bl;var Tl=Object.prototype,Ol=Tl.propertyIsEnumerable,Uo=Object.getOwnPropertySymbols,Al=Uo?function(r){return r==null?[]:(r=Object(r),Ho(Uo(r),function(e){return Ol.call(r,e)}))}:jo,Wo=Al;function Rl(r,e,t){var o=e(r);return C(r)?o:Lo(o,t(r))}var zo=Rl;function _l(r){return zo(r,ge,Wo)}var et=_l;var Dl=O(S,"DataView"),fr=Dl;var Il=O(S,"Promise"),cr=Il;var Fl=O(S,"Set"),pr=Fl;var Go="[object Map]",Ll="[object Object]",Jo="[object Promise]",Vo="[object Set]",Ko="[object WeakMap]",Yo="[object DataView]",Nl=U(fr),Ml=U(V),$l=U(cr),Ql=U(pr),ql=U(tr),se=L;(fr&&se(new fr(new ArrayBuffer(1)))!=Yo||V&&se(new V)!=Go||cr&&se(cr.resolve())!=Jo||pr&&se(new pr)!=Vo||tr&&se(new tr)!=Ko)&&(se=function(r){var e=L(r),t=e==Ll?r.constructor:void 0,o=t?U(t):"";if(o)switch(o){case Nl:return Yo;case Ml:return Go;case $l:return Jo;case Ql:return Vo;case ql:return Ko}return e});var rt=se;var Hl=S.Uint8Array,tt=Hl;var jl="__lodash_hash_undefined__";function Ul(r){return this.__data__.set(r,jl),this}var Zo=Ul;function Wl(r){return this.__data__.has(r)}var Xo=Wl;function mr(r){var e=-1,t=r==null?0:r.length;for(this.__data__=new ie;++e<t;)this.add(r[e]);}mr.prototype.add=mr.prototype.push=Zo;mr.prototype.has=Xo;var en=mr;function zl(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 rn=zl;function Gl(r,e){return r.has(e)}var tn=Gl;var Jl=1,Vl=2;function Kl(r,e,t,o,n,i){var s=t&Jl,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 p=-1,g=true,d=t&Vl?new en:void 0;for(i.set(r,e),i.set(e,r);++p<a;){var E=r[p],y=e[p];if(o)var D=s?o(y,E,p,e,r,i):o(E,y,p,r,e,i);if(D!==void 0){if(D)continue;g=false;break}if(d){if(!rn(e,function(oe,ne){if(!tn(d,ne)&&(E===oe||n(E,oe,t,o,i)))return d.push(ne)})){g=false;break}}else if(!(E===y||n(E,y,t,o,i))){g=false;break}}return i.delete(r),i.delete(e),g}var dr=Kl;function Yl(r){var e=-1,t=Array(r.size);return r.forEach(function(o,n){t[++e]=[n,o];}),t}var on=Yl;function Zl(r){var e=-1,t=Array(r.size);return r.forEach(function(o){t[++e]=o;}),t}var nn=Zl;var Xl=1,eu=2,ru="[object Boolean]",tu="[object Date]",ou="[object Error]",nu="[object Map]",iu="[object Number]",su="[object RegExp]",au="[object Set]",lu="[object String]",uu="[object Symbol]",fu="[object ArrayBuffer]",cu="[object DataView]",sn=R?R.prototype:void 0,ot=sn?sn.valueOf:void 0;function pu(r,e,t,o,n,i,s){switch(t){case cu:if(r.byteLength!=e.byteLength||r.byteOffset!=e.byteOffset)return false;r=r.buffer,e=e.buffer;case fu:return !(r.byteLength!=e.byteLength||!i(new tt(r),new tt(e)));case ru:case tu:case iu:return nr(+r,+e);case ou:return r.name==e.name&&r.message==e.message;case su:case lu:return r==e+"";case nu:var a=on;case au:var u=o&Xl;if(a||(a=nn),r.size!=e.size&&!u)return false;var l=s.get(r);if(l)return l==e;o|=eu,s.set(r,e);var c=dr(a(r),a(e),o,n,i,s);return s.delete(r),c;case uu:if(ot)return ot.call(r)==ot.call(e)}return false}var an=pu;var mu=1,du=Object.prototype,gu=du.hasOwnProperty;function hu(r,e,t,o,n,i){var s=t&mu,a=et(r),u=a.length,l=et(e),c=l.length;if(u!=c&&!s)return false;for(var p=u;p--;){var g=a[p];if(!(s?g in e:gu.call(e,g)))return false}var d=i.get(r),E=i.get(e);if(d&&E)return d==e&&E==r;var y=true;i.set(r,e),i.set(e,r);for(var D=s;++p<u;){g=a[p];var oe=r[g],ne=e[g];if(o)var Et=s?o(ne,oe,g,e,r,i):o(oe,ne,g,r,e,i);if(!(Et===void 0?oe===ne||n(oe,ne,t,o,i):Et)){y=false;break}D||(D=g=="constructor");}if(y&&!D){var ze=r.constructor,Ge=e.constructor;ze!=Ge&&"constructor"in r&&"constructor"in e&&!(typeof ze=="function"&&ze instanceof ze&&typeof Ge=="function"&&Ge instanceof Ge)&&(y=false);}return i.delete(r),i.delete(e),y}var ln=hu;var yu=1,un="[object Arguments]",fn="[object Array]",gr="[object Object]",wu=Object.prototype,cn=wu.hasOwnProperty;function xu(r,e,t,o,n,i){var s=C(r),a=C(e),u=s?fn:rt(r),l=a?fn:rt(e);u=u==un?gr:u,l=l==un?gr:l;var c=u==gr,p=l==gr,g=u==l;if(g&&De(r)){if(!De(e))return false;s=true,c=false;}if(g&&!c)return i||(i=new Ce),s||ar(r)?dr(r,e,t,o,n,i):an(r,e,u,t,o,n,i);if(!(t&yu)){var d=c&&cn.call(r,"__wrapped__"),E=p&&cn.call(e,"__wrapped__");if(d||E){var y=d?r.value():r,D=E?e.value():e;return i||(i=new Ce),n(y,D,t,o,i)}}return g?(i||(i=new Ce),ln(r,e,t,o,n,i)):false}var pn=xu;function mn(r,e,t,o,n){return r===e?true:r==null||e==null||!N(r)&&!N(e)?r!==r&&e!==e:pn(r,e,t,o,mn,n)}var hr=mn;var bu=1,Cu=2;function ku(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 p=new Ce;if(o)var g=o(l,c,u,r,e,p);if(!(g===void 0?hr(c,l,bu|Cu,o,p):g))return false}}return true}var dn=ku;function Su(r){return r===r&&!me(r)}var yr=Su;function vu(r){for(var e=ge(r),t=e.length;t--;){var o=e[t],n=r[o];e[t]=[o,n,yr(n)];}return e}var gn=vu;function Eu(r,e){return function(t){return t==null?false:t[r]===e&&(e!==void 0||r in Object(t))}}var wr=Eu;function Pu(r){var e=gn(r);return e.length==1&&e[0][2]?wr(e[0][0],e[0][1]):function(t){return t===r||dn(t,r,e)}}var hn=Pu;function Bu(r,e){return r!=null&&e in Object(r)}var yn=Bu;function Tu(r,e,t){e=lr(e,r);for(var o=-1,n=e.length,i=false;++o<n;){var s=Y(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&&de(n)&&or(s,n)&&(C(r)||sr(r)))}var wn=Tu;function Ou(r,e){return r!=null&&wn(r,e,yn)}var xn=Ou;var Au=1,Ru=2;function _u(r,e){return he(r)&&yr(e)?wr(Y(r),e):function(t){var o=Fo(t,r);return o===void 0&&o===e?xn(t,r):hr(e,o,Au|Ru)}}var bn=_u;function Du(r){return function(e){return e?.[r]}}var Cn=Du;function Iu(r){return function(e){return ur(e,r)}}var kn=Iu;function Fu(r){return he(r)?Cn(Y(r)):kn(r)}var Sn=Fu;function Lu(r){return typeof r=="function"?r:r==null?Gt:typeof r=="object"?C(r)?bn(r[0],r[1]):hn(r):Sn(r)}var vn=Lu;function Nu(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 En=Nu;function Mu(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 Pn=Mu;var $u=Pn(),Bn=$u;function Qu(r,e){return r&&Bn(r,e,ge)}var Tn=Qu;function qu(r,e){return function(t,o){if(t==null)return t;if(!ir(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 On=qu;var Hu=On(Tn),An=Hu;function ju(r,e,t,o){return An(r,function(n,i,s){e(o,n,t(n),s);}),o}var Rn=ju;function Uu(r,e){return function(t,o){var n=C(t)?En:Rn,i=e?e():{};return n(t,r,vn(o),i)}}var _n=Uu;var Wu=Object.prototype,zu=Wu.hasOwnProperty,Gu=_n(function(r,e,t){zu.call(r,t)?r[t].push(e):Zt(r,t,[e]);}),Fe=Gu;I();var xr=class{canHandle(e){return e["dump-grouped"]===true||e.D===true}handle(e){let t=Fe(e,o=>o.meta?.file??"unknown");f.log(JSON.stringify(t,null,2));}};function br(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=Fe(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})}I();var Cr=class{canHandle(e){return e["render-grouped"]===true||e.R===true}handle(e){f.log(br(e,{format:"grouped"}));}};I();var kr=class{canHandle(e){return e.output==="json"}handle(e){f.log(JSON.stringify(e,null,2));}};I();var Sr=class{canHandle(e){return e.render===true||e["render-merged"]===true||e.r===true}handle(e){f.log(br(e,{format:"merged"}));}};var vr=class{constructor(){this.validOutputFormats=["json"];this.handlers=[new Ze,new xr,new Sr,new Cr,new kr,new Re];}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(t=>t.canHandle(e))??new Re}};var Er=class{constructor(e){this.strategy=e;}async queryCookies(e,t){return this.strategy.queryCookies(e.name,e.domain,t?.store,t?.force)}};k();var ke=h("BrowserDetector"),Pr={c:99,o1:111,o2:111,k:107},Ku=[{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 Yu(r){try{let e=fs$1.readFileSync(r);return e.length>=4&&e[0]===Pr.c&&e[1]===Pr.o1&&e[2]===Pr.o2&&e[3]===Pr.k}catch(e){return ke.debug("Failed to read file for magic bytes check",{path:r,error:e}),false}}function Zu(r){let e=r.toLowerCase();for(let{browser:t,pattern:o}of Ku)if(o(e))return ke.debug("Detected browser from filename",{browser:t,filename:e}),t}function Br(r){if(!r||!fs$1.existsSync(r)){ke.debug("Store path does not exist",{storePath:r});return}if(Yu(r))return ke.info("Detected Safari binary cookies from magic bytes"),"safari";let e=Zu(r);if(e)return ke.info("Detected browser from filename pattern",{browser:e}),e;ke.debug("Could not detect browser type from store",{storePath:r});}function Dn(r){return ["chrome","firefox","safari","edge","arc","opera","opera-gx"].includes(r)}k();T();function In(r){let e=os$1.homedir();if(!e)throw new Error("Unable to determine user home directory");fe();let t=b(),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`)}}T();Tr();k();T();var Fn=h("ProcessDetector");function of(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 nf(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 it(r,e){try{let t;if(F()){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 z(t);if(!o||o.trim()==="")return [];let n=[],i=o.split(`
|
|
3
|
+
`).filter(s=>s.trim()!=="");for(let s of i){let a=F()?nf(s,r.toLowerCase()):of(s,r.toLowerCase());a&&n.push(a);}return Fn.debug(`${r} process detection completed`,{processCount:n.length,processes:n.map(s=>({pid:s.pid,command:s.command})),platform:b()}),n}catch(t){return Fn.debug(`Failed to detect ${r} processes`,{error:B(t),platform:b()}),[]}}async function Ln(){return it("Firefox","firefox")}async function Nn(){return it("Chrome","google chrome\\|chromium")}async function Mn(){return it("Safari","/Applications/Safari.app/Contents/MacOS/Safari")}function $n(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.`}function Qn(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)}k();var sf={info:()=>{},warn:()=>{},error:()=>{},debug:()=>{},success:()=>{},fatal:()=>{},log:()=>{}},Z=class{constructor(e,t){this.browserName=t;let o=h(e);this.logger=o||sf;}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){return i instanceof Error?this.logger.error("Failed to query cookies",{error:i.message,browser:this.browserName,strategy:this.constructor.name,name:e,domain:t,store:o,force:n}):this.logger.error("Failed to query cookies",{error:String(i),browser:this.browserName,strategy:this.constructor.name,name:e,domain:t,store:o,force:n}),[]}}};k();T();var st=util.promisify(child_process.exec),v=h("BrowserControl");function ff(){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 at={Firefox:"Firefox",Chrome:"Google Chrome",Safari:"Safari"};async function lt(r){try{let e=at[r];if(!e)return v.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 st(`osascript -e '${t}'`);return o.trim()==="true"}catch(e){return v.debug("Failed to check if browser is running",{browserName:r,error:e}),false}}async function cf(r){try{let e=at[r];if(!e)return v.debug("Browser not supported for macOS control",{browserName:r}),!1;let t=`tell application "${e}" to quit`;return await st(`osascript -e '${t}'`),await new Promise(n=>setTimeout(n,2e3)),await lt(r)?(v.warn("Browser did not quit gracefully",{browserName:r}),!1):(v.info("Browser quit successfully",{browserName:r}),!0)}catch(e){return v.error("Failed to quit browser",{browserName:r,error:e}),false}}async function pf(r){try{let e=at[r];if(!e){v.debug("Browser not supported for macOS control",{browserName:r});return}if(r==="Firefox"){let t=`
|
|
4
|
+
tell application "${e}"
|
|
5
|
+
activate
|
|
6
|
+
end tell
|
|
7
|
+
tell application "System Events"
|
|
8
|
+
keystroke "d" using {command down, shift down}
|
|
9
|
+
delay 0.5
|
|
10
|
+
key code 36
|
|
11
|
+
end tell
|
|
12
|
+
`;await st(`osascript -e '${t}'`),v.debug("Attempted to save Firefox session",{browserName:r});}else r==="Chrome"?v.debug("Chrome will restore tabs automatically",{browserName:r}):v.debug("Safari will restore tabs automatically",{browserName:r});}catch(e){v.debug("Failed to save browser session",{browserName:r,error:e});}}async function mf(r){if(!ff())return v.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=oi__default.default.createInterface({input:process.stdin,output:process.stdout});return new Promise(t=>{e.question(`
|
|
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 qn(r,e={}){if(!j())return v.debug("Browser control only supported on macOS"),false;try{if(!await lt(r))return v.debug("Browser is not running",{browserName:r}),!0;if(e.interactive===!0&&e.force!==!0&&!await mf(r))return v.info("User cancelled browser close",{browserName:r}),!1;await pf(r);let o=await cf(r);return o?v.success(`${r} closed successfully. Tabs will be restored on next launch.`):v.warn(`Failed to close ${r}. You may need to close it manually.`),o}catch(t){return v.error("Failed to control browser",{browserName:r,error:t}),false}}async function Hn(r,e=1e4){if(!j())return false;let t=Date.now(),o=500;for(;Date.now()-t<e;){if(!await lt(r))return true;await new Promise(i=>setTimeout(i,o));}return false}k();T();var Or=util.promisify(child_process.execFile),A=h("FileHandleDetector");function hf(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 yf(r){return r!==null&&typeof r=="object"&&"ProcessId"in r&&"ProcessName"in r}function wf(r){let e=[];try{let t=JSON.parse(r),o=Array.isArray(t)?t:[t];for(let n of o){if(!yf(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){A.debug("Failed to parse PowerShell output",{error:B(t)});}return e}async function xf(r){try{let{stdout:e}=await Or("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],u=i[2],l=i[3];if(s!==void 0&&s!==""&&a!==void 0&&a!==""&&i.length>=4){let c=Number.parseInt(a,10);if(!Number.isNaN(c)){let p={command:s,pid:c};u!==void 0&&u!==""&&(p.user=u),l!==void 0&&l!==""&&(p.fd=l,p.mode=l.includes("w")?"write":"read"),o.push(p);}}}return A.debug("Detected file handles with lsof",{file:r,handleCount:o.length}),o}catch(e){let t=B(e);return P(e,"ENOENT")?A.debug("lsof not available on this system"):P(e,"No such file")?A.debug("File does not exist",{file:r}):A.debug("lsof detection failed",{error:t}),[]}}async function bf(r){try{let e=await Or("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=hf(i);s&&o.push(s);}return A.debug("Detected file handles with fuser",{file:r,handleCount:o.length}),o}catch(e){let t=B(e);return P(e,"ENOENT")?A.debug("fuser not available on this system"):A.debug("fuser detection failed",{error:t}),[]}}async function Cf(r){try{let e=r.replace(/'/g,"''"),t=`
|
|
17
|
+
$ErrorActionPreference = 'SilentlyContinue'
|
|
18
|
+
$handles = @()
|
|
19
|
+
|
|
20
|
+
# Try to find processes with the file open
|
|
21
|
+
Get-Process | ForEach-Object {
|
|
22
|
+
try {
|
|
23
|
+
$proc = $_
|
|
24
|
+
# Check if any modules match the file path
|
|
25
|
+
$modules = $proc.Modules | Where-Object { $_.FileName -eq '${e}' }
|
|
26
|
+
if ($modules) {
|
|
27
|
+
$handles += [PSCustomObject]@{
|
|
28
|
+
ProcessName = $proc.ProcessName
|
|
29
|
+
ProcessId = $proc.Id
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
} catch {
|
|
33
|
+
# Skip processes we can't access
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
# Also try using Get-CimInstance for better file handle detection
|
|
38
|
+
try {
|
|
39
|
+
$query = "SELECT * FROM CIM_DataFile WHERE Name='${e.replace(/\\/g,"\\\\")}'"
|
|
40
|
+
$file = Get-CimInstance -Query $query -ErrorAction SilentlyContinue
|
|
41
|
+
if ($file) {
|
|
42
|
+
$assoc = Get-CimAssociatedInstance -InputObject $file -ResultClassName Win32_Process
|
|
43
|
+
foreach ($proc in $assoc) {
|
|
44
|
+
$handles += [PSCustomObject]@{
|
|
45
|
+
ProcessName = $proc.Name
|
|
46
|
+
ProcessId = $proc.ProcessId
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
} catch {
|
|
51
|
+
# WMI query failed, ignore
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
$handles | ConvertTo-Json -Compress
|
|
55
|
+
`,{stdout:o}=await Or("powershell",["-NoProfile","-NonInteractive","-Command",t],{encoding:"utf8",maxBuffer:1024*1024});if(!o||o.trim()===""||o.trim()==="null")return [];let n=wf(o);return A.debug("Detected file handles with PowerShell",{file:r,handleCount:n.length}),n}catch(e){return A.debug("Windows handle detection failed",{error:B(e)}),[]}}async function kf(r){try{let{stdout:e}=await Or("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 A.debug("Detected file handles with handle.exe",{file:r,handleCount:t.length}),t}catch{return []}}async function ut(r){let e=b();if(A.debug("Detecting file handles",{file:r,platform:e}),F()){let o=await kf(r);return o.length>0?o:Cf(r)}let t=await xf(r);return t.length===0&&(t=await bf(r)),t.length>0&&A.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 jn(r){let e=await ut(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}`}T();var Le=util.promisify(child_process.execFile),Se=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=F()?"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)}},ct=class extends Se{initializeBrowserExecutables(){return {Firefox:["Firefox"],Chrome:["Google Chrome"],Safari:["Safari"]}}async launchBrowser(e){let o={Firefox:"Firefox",Chrome:"Google Chrome",Safari:"Safari"}[e];if(!o)throw new Error(`${e} not supported on macOS`);await this.executeCommand("osascript",["-e",`tell application "${o}" to activate`]);}getPlatformName(){return "macOS"}},pt=class extends Se{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"}},Ar=class extends Se{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: ${Se.getErrorMessage(t)}`)}}getPlatformName(){return "Linux"}},ft=null;function Un(r){if(ft!==null&&r===void 0)return ft;let e=b(),t=Ef(e);return (ft=t),t}function Ef(r){switch(r){case "darwin":return new ct;case "win32":return new pt;case "linux":case "freebsd":case "openbsd":return new Ar;default:return new Ar}}var X=class{constructor(e,t,o){this.logger=e;this.browserName=t;this.platformControl=o??Un();}async handleBrowserConflict(e,t,o,n=false){return e instanceof Error?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=Rt(e);return t==="locked"||t==="permission"}async logFileHandleInfo(e,t){try{let o=await ut(e);if(o.length>0){let n=await jn(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=$n(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 qn(this.browserName,{interactive:true,force:false})?(await Hn(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:B(e),platform:this.platformControl.getPlatformName()});}}};T();function Wn(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 zn(r){let e=Buffer.from("v10");return r.length>=3&&r.subarray(0,3).equals(e)}function Gn(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 Of=Gn(r=>r.length>=3&&r[0]===118&&r[1]===49&&r[2]===48?r.slice(3):r,r=>r.toString("hex")),Af=Gn(r=>{let e=r[r.length-1];return e&&e<=16?r.slice(0,-e):r},r=>r.toString("hex"));function Rf(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 Jn(r,e,t){if(F()&&zn(r)&&r.length>=31&&Buffer.isBuffer(e))return Wn(r,e);if(j()&&!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=Of(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(E){n(new Error(`Failed to finalize decryption: ${E.message}`));return}c=Af(c);let d=((t??0)>=24&&c.length>32?c.slice(32):c).toString("utf8");o(Rf(d));}catch(a){n(new Error(`Decryption failed: ${a.message}`));}});})}T();Tr();var Nf={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 Mf(r){let e=Nf[r];if(!e)throw new Error(`Unknown browser type: ${r}`);try{let t=`security find-generic-password -w -s "${e}"`;return (await z(t)).stdout.trim()}catch(t){if(r!=="chrome"){let o='security find-generic-password -w -s "Chrome Safe Storage"';try{return (await z(o)).stdout.trim()}catch{}}throw new Error(`Failed to get ${r} password from keychain: ${t}`)}}async function $f(){let{getChromePassword:r}=await Promise.resolve().then(()=>(Kn(),Vn));return r()}async function Qf(){let{getChromePassword:r}=await Promise.resolve().then(()=>(Zn(),Yn));return r()}async function mt(r="chrome"){switch(fe(),b()){case "darwin":return Mf(r);case "win32":return $f();case "linux":return Qf();default:throw new Error(`Platform ${b()} is not supported`)}}dt();k();var M=h("DatabaseConnectionManager"),ht=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++,M.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=new Uf__default.default(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 M.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)){M.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&&M.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(),M.debug("Released connection",{filepath:e}));}closeConnection(e){let t=this.connections.get(e);if(t)try{t.database.close(),this.connections.delete(e),M.debug("Closed connection",{filepath:e,queryCount:t.queryCount,lifetime:Date.now()-t.created}),this.emit("connection:closed",{filepath:e});}catch(o){Te("Failed to close connection",o,{filepath:e});}}closeAll(){for(let[e,t]of this.connections)try{t.database.close(),M.debug("Closed connection",{filepath:e});}catch(o){Te("Failed to close connection",o,{filepath:e});}this.connections.clear(),M.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&&M.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?(this.closeConnection(e),M.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){if(e instanceof Error){let t=e.message.toLowerCase();return t.includes("database is locked")||t.includes("database locked")||t.includes("sqlite_busy")}return false}async delay(e){return new Promise(t=>setTimeout(t,e))}},Ne=null,gt=null;function ve(r){return Ne||(Ne=new ht(r),gt||(gt=()=>{Ne&&Ne.closeAll();},process.on("exit",gt))),Ne}k();var yt=h("QueryMonitor"),xt=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?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 bt(n,t,this,o)}recordExecution(e){this.totalQueries++,e.duration!==void 0&&(this.totalDuration+=e.duration,e.duration>this.options.slowQueryThreshold&&(this.slowQueries++,yt.debug("Slow query detected",{sql:e.sql,duration:e.duration,rowCount:e.rowCount,filepath:e.filepath}))),e.error?(this.errors++,this.options.verbose&&yt.error("Query failed",{sql:e.sql,error:e.error.message,filepath:e.filepath})):this.options.verbose&&yt.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?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;}},bt=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}},wt=null;function Me(r){return wt||(wt=new xt(r)),wt}function ri(r,e,t,o,n,i,s){return {domain:r,name:e,value:t,expiry:Qn(o),meta:{file:n,browser:i,decrypted:s}}}var Ee=class extends Z{constructor(e,t,o="chrome"){super(e,"Chrome"),this.browserDisplayName=t,this.browserType=o,this.lockHandler=new X(this.logger,"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 mt(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=ve(),i=Me(),s=new ee("chrome"),a=t.map(d=>({name:d.name,domain:d.domain,browser:"chrome"})),u=s.buildBatchSelectQuery(a),l=await n.executeQuery(e,d=>i.executeQuery(d,u.sql,u.params,e).map(y=>({name:y.name,domain:y.domain,value:y.encrypted_value,expiry:y.expiry})),u.description||u.sql),c=await this.getMetaVersion(e),p={file:e,password:o,browser:this.browserDisplayName,metaVersion:c};return (await Promise.allSettled(l.map(async d=>this.processCookie(d,p)))).filter(d=>d.status==="fulfilled").map(d=>d.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 mt(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 qr()?true:(this.logger.warn("Platform not supported",{platform:b(),supportedPlatforms:["darwin","win32","linux"]}),false)}getCookieFiles(e){let t=e??this.getCookieFilePaths();return Array.isArray(t)?t:[t]}getErrorMessage(e){return e instanceof Error?e.message:String(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 Nn(),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=ve(),s=Me(),u=new ee("chrome").buildSelectQuery({name:t,domain:o,browser:"chrome"}),l=await i.executeQuery(e,d=>s.executeQuery(d,u.sql,u.params,e).map(y=>({name:y.name,domain:y.domain,value:y.encrypted_value,expiry:y.expiry})),u.sql),c=await this.getMetaVersion(e),p={file:e,password:n,browser:this.browserDisplayName,metaVersion:c};return (await Promise.allSettled(l.map(async d=>this.processCookie(d,p)))).map(d=>d.status==="fulfilled"?d.value:null).filter(d=>d!==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=ve(),n=new ee("chrome").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 Jn(o,t.password,t.metaVersion);return ri(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)}),ri(e.domain,e.name,e.value.toString("utf-8"),e.expiry,t.file,t.browser,false)}}};var $=class extends Ee{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=In(this.browser),o=Ei__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 $e=class extends ${constructor(){super("arc");}};var ae=class extends Ee{constructor(e){super("ChromeCookieQueryStrategy","Chrome"),e!==void 0&&(this.profileName=e);}getCookieFilePaths(e){if(e!==void 0&&e!=="")return [e];let t=Ot();if(this.profileName)try{let o=Be("fs"),n=Be("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[p,g]of Object.entries(l))if(g.name?.toLowerCase()===this.profileName.toLowerCase()){c=p;break}if(!c){for(let p of Object.keys(l))if(p.toLowerCase()===this.profileName.toLowerCase()){c=p;break}}if(c)t=t.filter(p=>path.dirname(p).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(([p,g])=>({directory:p,name:g.name}))}),[]}}catch(o){this.logger.warn(`Failed to read Chrome profile info: ${o}`);}return Array.isArray(t)?t:[t]}};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()}k();var Rr=class{constructor(e){this.strategies=e;this.logger=h("CompositeCookieQueryStrategy");this.browserName="internal";}handleStrategyError(e,t){e instanceof Error?this.logger.error("Strategy failed",{error:e,strategy:t}):this.logger.error("Strategy failed with unknown error",{error:String(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 i instanceof Error?this.logger.error("Failed to query cookies",{error:i}):this.logger.error("Failed to query cookies with unknown error",{error:String(i)}),[]}}};var Qe=class extends ${constructor(){super("edge");}};T();function Jf(r){let e=os$1.homedir();if(!e)return r.warn("Failed to get home directory"),[];let t=b(),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=Ei__default.default.sync(a);s.push(...u);}return r.debug("Found Firefox cookie files",{files:s}),s}var qe=class extends Z{constructor(){super("FirefoxCookieQueryStrategy","Firefox"),this.lockHandler=new X(this.logger,"Firefox");}async createCookieQueryConfig(e,t,o){let{CookieQueryBuilder:n}=await Promise.resolve().then(()=>(dt(),ei)),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 Ln(),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){let i=e instanceof Error?e.message:String(e);this.logger.debug(`Error reading Firefox cookie file ${t}`,{error:i,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=ve({retryAttempts:1,retryDelay:0,queryTimeout:100,enableMonitoring:true}),o=Me();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??Jf(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 He=class extends ${constructor(){super("opera");}};var je=class extends ${constructor(){super("opera-gx");}};T();k();T();var kt=util.promisify(child_process.exec),Ue=h("SystemPermissions");async function Yf(){try{await kt('open "x-apple.systempreferences:com.apple.preference.security?Privacy_AllFiles"'),Ue.info("Opened System Settings > Privacy & Security > Full Disk Access");}catch{try{await kt('open "x-apple.systempreferences:com.apple.preference.security?Privacy"'),Ue.info("Opened System Settings > Privacy & Security");}catch{await kt("open -b com.apple.systempreferences"),Ue.info("Opened System Settings");}}}function Zf(){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 Xf(r,e){let t=oi__default.default.createInterface({input:process.stdin,output:process.stdout});return new Promise(o=>{console.log(`
|
|
57
|
+
\u26A0\uFE0F ${e} cookie access is blocked by macOS security.
|
|
58
|
+
|
|
59
|
+
To grant access, ${r} needs permission to read ${e} data.
|
|
60
|
+
|
|
61
|
+
Would you like to:
|
|
62
|
+
1. Open System Settings to grant permission (recommended)
|
|
63
|
+
2. Skip ${e} cookies for now
|
|
64
|
+
3. Exit
|
|
65
|
+
|
|
66
|
+
Please enter your choice (1/2/3): `),t.question("",n=>{t.close(),o(n.trim()==="1");});})}async function St(r,e){if(!j()||!(P(r,"eperm")||P(r,"operation not permitted")||P(r,"permission denied")||P(r,"authorization denied")))return false;let o=e.appName||Zf();if(Ue.warn(`${e.browserName} cookie access denied by macOS`,{app:o,error:B(r)}),e.interactive!==false){if(await Xf(o,e.browserName)){await Yf(),console.log(`
|
|
67
|
+
\u2705 System Settings opened to Privacy & Security
|
|
68
|
+
|
|
69
|
+
Please follow these steps:
|
|
70
|
+
1. Look for "${o}" in the list
|
|
71
|
+
2. If not present, click the "+" button and add it
|
|
72
|
+
3. Enable the toggle next to "${o}"
|
|
73
|
+
4. You may need to restart ${o} after granting permission
|
|
74
|
+
5. Then run this command again
|
|
75
|
+
|
|
76
|
+
Press Enter when you've completed these steps...`);let i=oi__default.default.createInterface({input:process.stdin,output:process.stdout});return await new Promise(s=>{i.question("",()=>{i.close(),s();});}),true}}else Ue.info(`To grant ${e.browserName} access, add ${o} to System Settings > Privacy & Security > Full Disk Access`);return false}async function vt(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}}k();k();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"),Ir=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"),ni=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("/"),ii=zod.z.string().trim().transform(r=>ec__default.default(r)).pipe(zod.z.any()),si=zod.z.object({name:Ir,value:ii,domain:Dr,path:ni,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()}),rc=zod.z.object({name:Ir,domain:Dr}).strict(),tc=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:ni.optional()}).catchall(zod.z.unknown());zod.z.object({domain:Dr,name:Ir,value:ii,expiry:zod.z.union([zod.z.literal("Infinity"),zod.z.date(),zod.z.number().int().positive("Expiry must be a positive number")]).optional(),meta:tc.optional()}).strict();zod.z.object({expiry:zod.z.number().int().optional(),domain:Dr,name:Ir,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 oc=zod.z.enum(["Chrome","Firefox","Safari","internal","unknown"]),nc=zod.z.object({browserName:oc,queryCookies:zod.z.function()}).strict(),ic=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()});ic.extend({strategy:nc.optional()});var sc=zod.z.enum(["chrome","chromium","edge","firefox","opera","brave","arc"]);rc.extend({browser:sc,exactDomain:zod.z.boolean().optional(),caseSensitive:zod.z.boolean().optional(),limit:zod.z.number().int().positive().optional(),includeExpired:zod.z.boolean().optional()});k();var re=h("BinaryCodableCookie"),Lr=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 si.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);re.debug("Cookie size:",t),e.offset+=4;let o=e.buffer.readUInt32LE(e.offset);re.debug("Cookie version:",o),e.offset+=4;let n=e.buffer.readUInt32LE(e.offset);re.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);re.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 re.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){re.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);re.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,p=(s<i.length-1?i[s+1].offset:t)-l,g=0+l;for(;g<0+l+p&&e.buffer[g]!==0;)g++;let d=e.buffer.toString("utf8",0+l,g);switch(re.debug(`Read ${u}:`,d),u){case "url":this.url=d;break;case "name":this.name=d;break;case "path":this.path=d;break;case "value":this.value=d;break;case "comment":this.comment=d;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 Q=h("BinaryCodablePage"),Pe=class Pe{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){let n=o instanceof Error?o.message:String(o);ue("BinaryCookies","Error converting cookie",{error:n});}return e}decode(e){let t=e.buffer.readUInt32BE(e.offset);if(Q.debug("Page header:",t.toString(16)),e.offset+=4,t!==Pe.HEADER)throw new Error("Invalid page header");let o=e.buffer.readUInt32LE(e.offset);Q.debug("Cookie count:",o),e.offset+=4;let n=e.offset-8;Q.debug("Page start offset:",n);let i=[];for(let a=0;a<o;a++){let u=e.buffer.readUInt32LE(e.offset);i.push(u),Q.debug(`Cookie ${a} offset:`,u),e.offset+=4;}let s=e.buffer.readUInt32BE(e.offset);if(Q.debug("Page footer:",s.toString(16)),e.offset+=4,s!==Pe.FOOTER)throw new Error("Invalid page footer");for(let a=0;a<o;a++)try{let u=i[a];Q.debug(`Reading cookie ${a} at offset:`,u);let l=e.buffer.readUInt32LE(u);if(Q.debug(`Cookie ${a} size:`,l),l<48){Q.warn(`Invalid cookie size ${l} at index ${a}`);continue}if(u+l>e.buffer.length){Q.warn(`Cookie size ${l} at index ${a} would exceed buffer length ${e.buffer.length}`);continue}let c=e.buffer.subarray(u,u+l),p=new Lr(c);this.cookies.push(p);}catch(u){Q.warn("Invalid cookie data",{error:u instanceof Error?u.message:String(u)});}}};Pe.HEADER=256,Pe.FOOTER=0;var Nr=Pe;var te=h("BinaryCodableCookies"),q=class q{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 q(t)}static fromDefaultPath(){return q.fromFile(q.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){let n=o instanceof Error?o.message:String(o);ue("BinaryCookies","Error converting page cookies",{error:n});}return e}decode(e){try{let t=e.buffer.subarray(e.offset,e.offset+4);if(e.offset+=4,te.debug("Magic bytes:",t.toString()),!t.equals(q.MAGIC))throw new Error("Missing magic value");let o=e.buffer.readUInt32BE(e.offset);te.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),te.debug(`Page ${u} size:`,l),e.offset+=4;}let i=e.offset;te.debug("Starting page data at offset:",i);for(let u of n)try{te.debug("Reading page at offset:",i,"with size:",u);let l=e.buffer.subarray(i,i+u),c=new Nr(l);this.pages.push(c),i+=u;}catch(l){let c=l instanceof Error?l.message:String(l);te.warn("Error decoding page:",{error:c}),i+=u;}e.offset=i;let s=e.buffer.readUInt32BE(e.offset);te.debug("Checksum:",s.toString(16)),e.offset+=4;let a=e.buffer.readBigUInt64BE(e.offset);te.debug("Footer:",a.toString(16)),e.offset+=8,a!==q.FOOTER&&ue("BinaryCookies","Invalid cookie file format: wrong footer"),this.metadata={};}catch(t){let o=t instanceof Error?t.message:String(t);throw ue("BinaryCookies","Error decoding binary cookies file",{error:o}),t}}};q.MAGIC=buffer.Buffer.from("cook","utf8"),q.FOOTER=BigInt("0x071720050000004b"),q.DEFAULT_COOKIE_PATH=path.join(os$1.homedir(),"Library/Containers/com.apple.Safari/Data/Library/Cookies/Cookies.binarycookies");var Mr=q;function ai(r){return Mr.fromFile(r).toCookieRows()}var We=class extends Z{constructor(){super("SafariCookieQueryStrategy","Safari"),this.lockHandler=new X(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=ai(e);return this.processCookies(s,t,o,e)}catch(i){return this.handleDecodingError(i,e,t,o,n)}}async checkAndHandlePermissions(e,t){return await vt(e)?true:(this.logger.warn("Cannot access Safari cookies due to macOS permissions",{file:e,suggestion:"Terminal application needs Full Disk Access permission"}),await St(new Error("EPERM: operation not permitted"),{appName:process.env.TERM_PROGRAM??"Terminal",browserName:"Safari",interactive:t!==true})?await vt(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 P(e,"EPERM")||P(e,"operation not permitted")||P(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 St(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}`,ce(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}`,ce(e,{file:t,name:o,domain:n}));}async executeQuery(e,t,o,n){if(!j())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 Mn(),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",ce(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 P(e,"EPERM")||P(e,"operation not permitted")||P(e,"Permission denied")||P(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",ce(e,{file:t})),o===true&&await this.lockHandler.relaunchBrowser(),[]}logQueryError(e,t,o){this.logger.error("Failed to query cookies",ce(e,{name:t,domain:o}));}};var le=h("StrategyFactory"),mc={safari:We,firefox:qe,chrome:ae,edge:Qe,arc:$e,opera:He,"opera-gx":je};function li(r){let e=mc[r];return e?(le.debug("Creating browser strategy",{browser:r}),new e):(le.warn("Unknown browser type, falling back to default",{browser:r}),new ae)}function dc(){le.debug("Creating composite strategy with all browsers");let r=[new ae,new Qe,new $e,new He,new je,new qe,new We];return new Rr(r)}function ui(r){let{browser:e,storePath:t,profile:o}=r||{};if(t&&!e){let n=Br(t);if(n)return le.info("Auto-detected browser from store path",{browser:n,storePath:t}),li(n)}if(e){let n=e.toLowerCase();if(Dn(n))return n==="chrome"&&o?(le.debug("Creating Chrome strategy with profile",{profile:o}),new ae(o)):li(n);le.warn("Invalid browser type specified",{browser:e});}return le.debug("Creating composite strategy as default"),dc()}var fi={detectStoreType(r){return Br(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),ui(o)}};async function gc(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 hc(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 ci(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=fi.createStrategy(s,n,a),l=new Er(u),c=Array.isArray(e)?e:[e],p=hc(r,u,o,i,t,n),g=await gc(l,c,p);if(r["detect-jwt"]===!0||r["jwt-only"]===!0){let y={decodeClaims:!0,checkExpiration:!0,verbose:r.verbose===!0};typeof r["jwt-secret"]=="string"&&(y.validateSignature=!0,y.secretKey=r["jwt-secret"]),r["jwt-only"]===!0?g=Nt(g,y):g=Gr(g,y);}if(g.length===0){f.error("No results");let y=typeof r.profile=="string"?r.profile:void 0,D=typeof r.browser=="string"?r.browser:void 0;y&&D&&(f.error(`Could not find cookies for profile: ${y}`),f.error(`Try 'get-cookie --browser ${D} --list-profiles' to see available profiles`)),r["jwt-only"]===!0&&f.error("No cookies containing valid JWT tokens were found");return}new vr().getHandler(r).handle(g);}catch(s){f.error(B(s));}}function pi(){f.log("Usage: get-cookie [name] [domain] [options]"),f.log("Build: 2025-12-02 20:07:07 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 yc(r,e){return {name:r||"%",domain:e||"%"}}function mi(r){return r==="*"?"%":r}function wc(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=At();if(t.length===0){f.log(`No ${r} profiles found`);return}f.log(`${r} profiles:`),f.log("");let o=Be("fs"),n=Be("path"),i=Be("os"),s,a=process.platform;if(a==="darwin"){let l=i.homedir();switch(e){case "chrome":s=n.join(l,"Library","Application Support","Google","Chrome");break;case "edge":s=n.join(l,"Library","Application Support","Microsoft Edge");break;case "arc":s=n.join(l,"Library","Application Support","Arc");break;case "opera":s=n.join(l,"Library","Application Support","com.operasoftware.Opera");break;case "opera-gx":s=n.join(l,"Library","Application Support","com.operasoftware.OperaGX");break;default:s=n.join(l,"Library","Application Support","Google","Chrome");}}else if(a==="win32"){let l=process.env.LOCALAPPDATA||n.join(i.homedir(),"AppData","Local");switch(e){case "chrome":s=n.join(l,"Google","Chrome","User Data");break;case "edge":s=n.join(l,"Microsoft","Edge","User Data");break;default:s=n.join(l,"Google","Chrome","User Data");}}else {let l=i.homedir();switch(e){case "chrome":s=n.join(l,".config","google-chrome");break;default:s=n.join(l,".config","google-chrome");}}let u=n.join(s,"Local State");if(o.existsSync(u)){let c=JSON.parse(o.readFileSync(u,"utf8")).profile?.info_cache||{};for(let[p,g]of Object.entries(c)){let d=g;f.log(` \u2022 ${d.name}`),f.log(` Directory: ${p}`),d.user_name&&f.log(` User: ${d.user_name}`),f.log("");}}else t.forEach(l=>{f.log(` \u2022 ${l.name}`),l.user_name&&f.log(` User: ${l.user_name}`),f.log("");});}catch(t){f.error(`Failed to list ${r} profiles:`,t instanceof Error?t.message:"Unknown error");}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 xc(r,e){let t=r.url;if(typeof t=="string"){let i=Ur(t);return Array.isArray(i)?i:(f.error("Invalid cookie specs from URL"),[])}let o=mi(r.name??e[0]??"%"),n=mi(r.domain??e[1]??"%");return [yc(o,n)]}async function bc(r,e){let t=xc(r,e);r.verbose===true&&f.log("cookieSpecs",t);try{let o=r["include-expired"]!==!0,n=r["include-all"]!==!0;await ci(r,t,void 0,o,r.store,n);}catch(o){o instanceof Error?f.error("Error querying cookies:",o.message):f.error("An unknown error occurred while querying cookies");}}async function Cc(){let r=process.argv.slice(2);if(r.length===0){pi();return}let{values:e,positionals:t}=Ae(r);if(e.help===true){pi();return}if(e["list-profiles"]===true){let o=typeof e.browser=="string"?e.browser:void 0;wc(o);return}await bc(e,t);}Cc().catch(r=>{r instanceof Error?f.error("Fatal error:",r.message):f.error("An unknown fatal error occurred"),process.exit(1);});
|
|
4
77
|
/*! Bundled license information:
|
|
5
78
|
|
|
6
79
|
lodash-es/lodash.js:
|
|
@@ -13,5 +86,5 @@ lodash-es/lodash.js:
|
|
|
13
86
|
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
|
|
14
87
|
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
|
|
15
88
|
*)
|
|
16
|
-
|
|
89
|
+
*///# sourceMappingURL=cli.cjs.map
|
|
17
90
|
//# sourceMappingURL=cli.cjs.map
|