@mherod/get-cookie 2.0.0-beta.9 → 2.0.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,6 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "npm"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "daily"
package/dist/cli.js CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- var e=require("lodash"),r=require("fs"),n=require("crypto"),t=require("path"),o=require("child_process"),i=require("sqlite3"),s=require("jsonwebtoken"),a=require("tty");var l=e.merge;const c={};l(c,process.env);const g=c.HOME;if(!g)throw new Error("HOME environment variable is not set");async function u(e){return new Promise(((r,n)=>{(0,o.exec)(e,{encoding:"binary",maxBuffer:5120},((e,t,o)=>{e||o?n(e):t&&r(t.trim())}))}))}function f(e){return null==e?null:(process.env.VERBOSE&&console.log("result",e),"string"==typeof e&&e.length>0?e:e.slice&&e.toString?e.toString("utf8"):null)}async function h({path:e,name:n,maxDepth:t=2}){const o=e.split("/").length;c.VERBOSE&&console.log(`Searching for ${n} in ${e}`);const i=[];let s;try{s=r.readdirSync(e)}catch(r){return c.VERBOSE&&console.log(`Error reading ${e}`,r),[]}for(const a of s){const s=e+"/"+a;let l;try{l=r.statSync(s)}catch(e){c.VERBOSE&&console.error(`Error getting stat for ${s}`,e);continue}if(l.isDirectory()){if(s.split("/").length<o+t)try{const e=await h({path:s,name:n,maxDepth:2});i.push(...e)}catch(e){c.VERBOSE&&console.error(e)}}else a===n&&i.push(s)}return c.VERBOSE&&i.length>0&&(console.log(`Found ${i.length} ${n} files`),console.log(i)),i}async function d(e,n){if(!r.existsSync(e))throw new Error(`doSqliteQuery1: file ${e} does not exist`);const t=new i.Database(e);return new Promise(((r,o)=>{t.all(n,((n,t)=>{if(n)return void o(n);const i=t;if(null!=i&&0!==i.length)if(Array.isArray(i)){const n=i.map((r=>({domain:r.host_key,name:r.name,value:r.encrypted_value,meta:{file:e}})));r(n)}else process.env.VERBOSE&&console.log(`doSqliteQuery1: rows ${JSON.stringify(i)}`),r([i]);else r([])}))}))}function y(e){return void 0!==e.domain&&void 0!==e.name&&void 0!==e.value}function m(e){return void 0!==e.domain&&void 0!==e.name&&void 0!==e.value}class E{async queryCookies(o,i){if("darwin"!==process.platform)throw new Error("This only works on macOS");return c.FIREFOX_ONLY?[]:async function({name:o,domain:i="%",requireJwt:s=!1}){const a=await async function(e,n){try{const o=(await h({path:p,name:"Cookies"})).map((o=>async function(e,n,o){try{return await async function({name:e,domain:n,file:o=t.join(p,"Default","Cookies")}){if(!(0,r.existsSync)(o))throw new Error(`File ${o} does not exist`);if(c.VERBOSE){const r=o.split("/").slice(-3).join("/");console.log(`Trying Chrome (at ${r}) cookie ${e} for domain ${n}`)}let i;i="SELECT encrypted_value, name, host_key FROM cookies";const s=/^([*%])$/i,a=null==e.match(s),l=null==n.match(s);(a||l)&&(i+=" WHERE ",a&&(i+=`name = '${e}'`,l&&(i+=" AND ")),l&&(i+=`host_key LIKE '${n}';`));return d(o,i)}({name:e,domain:n,file:o})}catch(e){return c.VERBOSE&&console.log("Error getting encrypted cookie",e),[]}}(e,n,o)));return(await Promise.all(o)).flat().filter(y)}catch(e){return c.VERBOSE&&console.log("error",e),[]}}(o,i),l=await async function(){return u('security find-generic-password -w -s "Chrome Safe Storage"')}(),g=a.filter((({value:e})=>null!=e&&e.length>0)).map((async r=>{const t=r.value,o=await async function(e,r){let t;try{t=await async function(e,r){if("string"!=typeof e)throw new Error("password must be a string: "+e);let t;if(t=r,null==t||"object"!=typeof t)throw new Error("encryptedData must be a object: "+t);if(!(t instanceof Buffer)){if(!(Array.isArray(t)&&t[0]instanceof Buffer))throw new Error("encryptedData must be a Buffer: "+t);[t]=t,c.VERBOSE&&console.log(`encryptedData is an array of buffers, selected first: ${t}`),t=Buffer.from(t)}c.VERBOSE&&console.log(`Trying to decrypt with password ${e}`);return new Promise(((r,o)=>{n.pbkdf2(e,"saltysalt",1003,16,"sha1",((e,i)=>{try{if(e)return c.VERBOSE&&console.log("Error doing pbkdf2",e),void o(e);if(16!==i.length)return c.VERBOSE&&console.log("Error doing pbkdf2, buffer length is not 16",i.length),void o(new Error("Buffer length is not 16"));const s=new Array(17).join(" "),a=Buffer.from(s,"binary"),l=n.createDecipheriv("aes-128-cbc",i,a);if(l.setAutoPadding(!1),t&&t.slice&&(t=t.slice(3)),t.length%16!=0)return c.VERBOSE&&console.log("Error doing pbkdf2, encryptedData length is not a multiple of 16",t.length),void o(new Error("encryptedData length is not a multiple of 16"));let g=l.update(t);try{l.final("utf-8")}catch(e){return c.VERBOSE&&console.log("Error doing decipher.final()",e),void o(e)}const u=g[g.length-1];u&&(g=g.slice(0,0-u));const f=g.toString("utf8");r(f)}catch(e){o(e)}}))}))}(e,r)}catch(e){c.VERBOSE&&console.log("Error decrypting cookie",e),t=null}return t??r.toString("utf-8")}(l,t),i={};return(0,e.merge)(i,r.meta??{}),{domain:r.domain,name:r.name,value:o,meta:i}})),f=(await Promise.all(g)).filter(m);c.VERBOSE&&console.log("results",f);return f}({requireJwt:!1,name:o,domain:i})}}const p=t.join(g,"Library","Application Support","Google","Chrome");class B{async queryCookies(e,r){if("darwin"!==process.platform)throw new Error("This only works on macOS");if(c.CHROME_ONLY)return[];const n=await this.#e({name:e,domain:r});return Array.isArray(n)?n.map(f):[]}async#e({name:e,domain:r}){const n=await h({path:t.join(g,"Library","Application Support","Firefox","Profiles"),name:"cookies.sqlite"});return(await Promise.all(n.map((n=>this.#r(n,e,r))))).flat()}#r(e,n,t){if(e&&!(0,r.existsSync)(e))throw new Error(`File ${e} does not exist`);let o;return c.VERBOSE&&console.log(`Trying Firefox cookie ${n} for domain ${t}`),o="SELECT value FROM moz_cookies","string"!=typeof n&&"string"!=typeof t||(o+=" WHERE ","string"==typeof n&&(o+=`name = '${n}'`,"string"==typeof t&&(o+=" AND ")),"string"==typeof t&&(o+=`host LIKE '${t}';`)),d(e,o).then((e=>e.map((e=>({domain:e.domain,name:e.name,value:e.value.toString("utf8")}))))).catch((()=>[]))}}class b{async queryCookies(e,r){return[]}}class w{#n;constructor(){this.#n=[E,B,b].map((e=>new e))}async queryCookies(e,r){return(await Promise.all(this.#n.map((async n=>n.queryCookies(e,r).catch((()=>[])))))).flat()}}function O(e){try{const n=(r=s,r&&r.__esModule?r.default:r).decode(e,{complete:!0});return c.VERBOSE&&console.log(n),!0}catch(e){return!1}var r}const S=process.argv??[],{env:R={},argv:k=[],platform:v=""}="undefined"==typeof process?{}:process,C="NO_COLOR"in R||k.includes("--no-color"),q="FORCE_COLOR"in R||k.includes("--color"),$="win32"===v,V="dumb"===R.TERM,_=a&&a.isatty&&a.isatty(1)&&R.TERM&&!V,x=!C&&(q||$&&!V||_||"CI"in R&&("GITHUB_ACTIONS"in R||"GITLAB_CI"in R||"CIRCLECI"in R)),I=(e,r,n,t,o=r.substring(0,e)+t,i=r.substring(e+n.length),s=i.indexOf(n))=>o+(s<0?i:I(s,i,n,t)),D=(e,r,n=e,t=e.length+1)=>o=>o||""!==o&&void 0!==o?((e,r,n,t,o)=>e<0?n+r+t:n+I(e,r,t,o)+t)((""+o).indexOf(r,t),o,e,r,n):"",L=(e,r,n)=>D(`[${e}m`,`[${r}m`,n),N={reset:L(0,0),bold:L(1,22,""),dim:L(2,22,""),italic:L(3,23),underline:L(4,24),inverse:L(7,27),hidden:L(8,28),strikethrough:L(9,29),black:L(30,39),red:L(31,39),green:L(32,39),yellow:L(33,39),blue:L(34,39),magenta:L(35,39),cyan:L(36,39),white:L(37,39),gray:L(90,39),bgBlack:L(40,49),bgRed:L(41,49),bgGreen:L(42,49),bgYellow:L(43,49),bgBlue:L(44,49),bgMagenta:L(45,49),bgCyan:L(46,49),bgWhite:L(47,49),blackBright:L(90,39),redBright:L(91,39),greenBright:L(92,39),yellowBright:L(93,39),blueBright:L(94,39),magentaBright:L(95,39),cyanBright:L(96,39),whiteBright:L(97,39),bgBlackBright:L(100,49),bgRedBright:L(101,49),bgGreenBright:L(102,49),bgYellowBright:L(103,49),bgBlueBright:L(104,49),bgMagentaBright:L(105,49),bgCyanBright:L(106,49),bgWhiteBright:L(107,49)},{reset:A,bold:F,dim:T,italic:M,underline:j,inverse:G,hidden:P,strikethrough:W,black:Y,red:H,green:J,yellow:Q,blue:U,magenta:X,cyan:K,white:z,gray:Z,bgBlack:ee,bgRed:re,bgGreen:ne,bgYellow:te,bgBlue:oe,bgMagenta:ie,bgCyan:se,bgWhite:ae,blackBright:le,redBright:ce,greenBright:ge,yellowBright:ue,blueBright:fe,magentaBright:he,cyanBright:de,whiteBright:ye,bgBlackBright:me,bgRedBright:Ee,bgGreenBright:pe,bgYellowBright:Be,bgBlueBright:be,bgMagentaBright:we,bgCyanBright:Oe,bgWhiteBright:Se}=(({useColor:e=x}={})=>e?N:Object.keys(N).reduce(((e,r)=>({...e,[r]:String})),{}))();function Re(r){return(0,e.uniqBy)(r,(e=>e.name)).map((e=>e.name+"="+e.value)).join("; ")}function ke(e){return U(Re(e))}if(S&&S.length>2){const r=S[2];let n;n=null!=S[3]&&S[3].indexOf(".")>-1?S[3]:"%";const t="true";S.includes("--require-jwt")&&(c.REQUIRE_JWT=t),S.includes("--verbose")&&(c.VERBOSE=t),S.includes("--chrome-only")&&(c.CHROME_ONLY=t),S.includes("--firefox-only")&&(c.FIREFOX_ONLY=t),S.includes("--ignore-expired")&&(c.IGNORE_EXPIRED=t),S.includes("--single")&&(c.SINGLE=t),c.VERBOSE&&console.log("Verbose mode",S),async function(r,n){try{const t=await async function({name:r,domain:n},t=new w){const o=await t.queryCookies(r,n),i=(0,e.uniqBy)(o,JSON.stringify),s=[];for(const e of i)O(e.value)&&s.push(e);const a=c.REQUIRE_JWT?s:i;return c.SINGLE?[a[0]]:a}({name:r,domain:n});if(t.length>0)if(S.includes("--combined-string"))console.log(ke(t));else if(S.includes("--dump"))console.log(t);else if(S.includes("--dump-grouped")){const r=(0,e.groupBy)(t,(e=>e.meta?.file));console.log(J(JSON.stringify(r,null,2)))}else if(S.includes("--combined-string-grouped")){const r=(0,e.groupBy)(t,(e=>e.meta?.file));for(const e of Object.keys(r)){let n=r[e];console.log(J(e)+": ",ke(n))}}else for(const e of t)console.log(e.value);else console.error("No results")}catch(e){console.error(e)}}(r,n).catch(console.error)}
2
+ var e=require("minimist"),r=require("lodash"),n=require("lru-cache"),t=require("fs"),o=require("crypto"),i=require("path"),a=require("child_process"),s=require("sqlite3"),c=require("jsonwebtoken"),l=require("tty"),u=require("cross-fetch"),g=require("destr");function f(e){return e&&e.__esModule?e.default:e}const d=process.argv??[],h={};(0,r.merge)(h,process.env);const m=h.HOME;if(!m)throw new Error("HOME environment variable is not set");async function y(e){return new Promise(((r,n)=>{(0,a.exec)(e,{encoding:"binary",maxBuffer:5120},((e,t,o)=>{e||o?n(e):t&&r(t.trim())}))}))}async function w({path:e,name:r,maxDepth:n=2}){const o=e.split("/").length;h.VERBOSE&&console.log(`Searching for ${r} in ${e}`);const i=[];let a;try{a=t.readdirSync(e)}catch(r){return h.VERBOSE&&console.log(`Error reading ${e}`,r),[]}for(const s of a){const a=e+"/"+s;let c;try{c=t.statSync(a)}catch(e){h.VERBOSE&&console.error(`Error getting stat for ${a}`,e);continue}if(c.isDirectory()){if(a.split("/").length<o+n)try{const e=await w({path:a,name:r,maxDepth:2});i.push(...e)}catch(e){h.VERBOSE&&console.error(e)}}else s===r&&i.push(a)}return h.VERBOSE&&i.length>0&&(console.log(`Found ${i.length} ${r} files`),console.log(i)),i}async function E({file:e,sql:n,rowTransform:o}){if(!e||e&&!t.existsSync(e))throw new Error(`doSqliteQuery1: file ${e} does not exist`);const i=new s.Database(e);return new Promise(((t,a)=>{i.all(n,((n,i)=>{if(n)return void a(n);const s=i;if(null!=s&&0!==s.length)if(Array.isArray(s)){const n=s.map((n=>{const t={meta:{file:e}},i=o(n);return(0,r.merge)(t,i)}));t(n)}else process.env.VERBOSE&&console.log(`doSqliteQuery1: rows ${JSON.stringify(s)}`),t([s]);else t([])}))}))}function p(e){return void 0!==e.domain&&void 0!==e.name&&void 0!==e.value}function B(e){return void 0!==e.domain&&void 0!==e.name&&void 0!==e.value}class b{async queryCookies(e,n){if("darwin"!==process.platform)throw new Error("This only works on macOS");return h.FIREFOX_ONLY?[]:async function({name:e,domain:n="%",requireJwt:a=!1}){const s=await async function(e,r){try{const n=(await w({path:O,name:"Cookies"})).map((n=>async function(e,r,n){try{return await async function({name:e,domain:r,file:n=i.join(O,"Default","Cookies")}){if(!(0,t.existsSync)(n))throw new Error(`File ${n} does not exist`);if(h.VERBOSE){const t=n.split("/").slice(-3).join("/");console.log(`Trying Chrome (at ${t}) cookie ${e} for domain ${r}`)}let o;o="SELECT encrypted_value, name, host_key FROM cookies";const a=/^([*%])$/i,s=null==e.match(a),c=null==r.match(a);(s||c)&&(o+=" WHERE ",s&&(o+=`name = '${e}'`,c&&(o+=" AND ")),c&&(o+=`host_key LIKE '${r}';`));return E({file:n,sql:o,rowTransform:e=>({domain:e.host_key,name:e.name,value:e.encrypted_value})})}({name:e,domain:r,file:n})}catch(e){return h.VERBOSE&&console.log("Error getting encrypted cookie",e),[]}}(e,r,n)));return(await Promise.all(n)).flat().filter(p)}catch(e){return h.VERBOSE&&console.log("error",e),[]}}(e,n),c=await async function(){return y('security find-generic-password -w -s "Chrome Safe Storage"')}(),l=s.filter((({value:e})=>null!=e&&e.length>0)).map((async e=>{const n=e.value,t=await async function(e,r){let n;try{n=await async function(e,r){if("string"!=typeof e)throw new Error("password must be a string: "+e);let n;if(n=r,null==n||"object"!=typeof n)throw new Error("encryptedData must be a object: "+n);if(!(n instanceof Buffer)){if(!(Array.isArray(n)&&n[0]instanceof Buffer))throw new Error("encryptedData must be a Buffer: "+n);[n]=n,h.VERBOSE&&console.log(`encryptedData is an array of buffers, selected first: ${n}`),n=Buffer.from(n)}h.VERBOSE&&console.log(`Trying to decrypt with password ${e}`);return new Promise(((r,t)=>{o.pbkdf2(e,"saltysalt",1003,16,"sha1",((e,i)=>{try{if(e)return h.VERBOSE&&console.log("Error doing pbkdf2",e),void t(e);if(16!==i.length)return h.VERBOSE&&console.log("Error doing pbkdf2, buffer length is not 16",i.length),void t(new Error("Buffer length is not 16"));const a=new Array(17).join(" "),s=Buffer.from(a,"binary"),c=o.createDecipheriv("aes-128-cbc",i,s);if(c.setAutoPadding(!1),n&&n.slice&&(n=n.slice(3)),n.length%16!=0)return h.VERBOSE&&console.log("Error doing pbkdf2, encryptedData length is not a multiple of 16",n.length),void t(new Error("encryptedData length is not a multiple of 16"));let l=c.update(n);try{c.final("utf-8")}catch(e){return h.VERBOSE&&console.log("Error doing decipher.final()",e),void t(e)}const u=l[l.length-1];u&&(l=l.slice(0,0-u));const g=l.toString("utf8");r(g)}catch(e){t(e)}}))}))}(e,r)}catch(e){h.VERBOSE&&console.log("Error decrypting cookie",e),n=null}return n??r.toString("utf-8")}(c,n),i={};return(0,r.merge)(i,e.meta??{}),{domain:e.domain,name:e.name,value:t,meta:i}})),u=(await Promise.all(l)).filter(B);h.VERBOSE&&console.log("results",u);return u}({requireJwt:!1,name:e,domain:n})}}const O=i.join(m,"Library","Application Support","Google","Chrome");function S({name:e,domain:r}){const n=/^([*%])$/i;return{specifiedName:null==e.match(n),specifiedDomain:null==r.match(n)}}class R{async queryCookies(e,r){if("darwin"!==process.platform)throw new Error("This only works on macOS");if(h.CHROME_ONLY)return[];const n=await this.#e({name:e,domain:r});return Array.isArray(n)?n.map((e=>({domain:e.domain,name:e.name,value:e.value.toString("utf8")}))):[]}async#e({name:e,domain:r}){const n=await w({path:i.join(m,"Library","Application Support","Firefox","Profiles"),name:"cookies.sqlite"});return(await Promise.all(n.map((async n=>await this.#r(n,e,r))))).flat()}async#r(e,r,n){if(e&&!(0,t.existsSync)(e))throw new Error(`File ${e} does not exist`);let o;o="SELECT value, name, host FROM moz_cookies";const{specifiedName:i,specifiedDomain:a}=S({name:r,domain:n});(i||a)&&(o+=" WHERE ",i&&(o+=`name = '${r}'`,a&&(o+=" AND ")),a&&(o+=`host LIKE '${n}';`));const s=e=>{const r=e.value;return{domain:e.domain,name:e.name,value:Buffer.from(r,"utf8")}};try{return await E({file:e,sql:o,rowTransform:s})}catch(r){return console.error(`Error querying ${e}`,r),[]}}}class k{async queryCookies(e,r){return[]}}const v=new(f(n))({ttl:2e3,max:10});class C{#n;constructor(){this.#n=[b,R,k].map((e=>new e))}async queryCookies(e,r){const n=`${e}:${r}`,t=v.get(n);if(t)return t;const o=(await Promise.all(this.#n.map((async n=>n.queryCookies(e,r).catch((()=>[])))))).flat();return v.set(`${e}:${r}`,o),o}}function q(e){try{const r=f(c).decode(e,{complete:!0});h.VERBOSE&&console.log(r);const n=r?.payload;if(n){const e=n.exp;if(e){if((new Date).getTime()/1e3>e)return!1}}return!0}catch(e){return!1}}async function $({name:e,domain:n},t=new C){const o=await t.queryCookies(e,n),i=(0,r.uniqBy)(o,JSON.stringify),a=[];for(const e of i){q(e.value)&&a.push(e)}const s=h.REQUIRE_JWT?a:i;return h.SINGLE?[s[0]]:s}const{env:x={},argv:L=[],platform:T=""}="undefined"==typeof process?{}:process,V="NO_COLOR"in x||L.includes("--no-color"),A="FORCE_COLOR"in x||L.includes("--color"),D="win32"===T,_="dumb"===x.TERM,I=l&&l.isatty&&l.isatty(1)&&x.TERM&&!_,N=!V&&(A||D&&!_||I||"CI"in x&&("GITHUB_ACTIONS"in x||"GITLAB_CI"in x||"CIRCLECI"in x)),M=(e,r,n,t,o=r.substring(0,e)+t,i=r.substring(e+n.length),a=i.indexOf(n))=>o+(a<0?i:M(a,i,n,t)),j=(e,r,n=e,t=e.length+1)=>o=>o||""!==o&&void 0!==o?((e,r,n,t,o)=>e<0?n+r+t:n+M(e,r,t,o)+t)((""+o).indexOf(r,t),o,e,r,n):"",F=(e,r,n)=>j(`[${e}m`,`[${r}m`,n),G={reset:F(0,0),bold:F(1,22,""),dim:F(2,22,""),italic:F(3,23),underline:F(4,24),inverse:F(7,27),hidden:F(8,28),strikethrough:F(9,29),black:F(30,39),red:F(31,39),green:F(32,39),yellow:F(33,39),blue:F(34,39),magenta:F(35,39),cyan:F(36,39),white:F(37,39),gray:F(90,39),bgBlack:F(40,49),bgRed:F(41,49),bgGreen:F(42,49),bgYellow:F(43,49),bgBlue:F(44,49),bgMagenta:F(45,49),bgCyan:F(46,49),bgWhite:F(47,49),blackBright:F(90,39),redBright:F(91,39),greenBright:F(92,39),yellowBright:F(93,39),blueBright:F(94,39),magentaBright:F(95,39),cyanBright:F(96,39),whiteBright:F(97,39),bgBlackBright:F(100,49),bgRedBright:F(101,49),bgGreenBright:F(102,49),bgYellowBright:F(103,49),bgBlueBright:F(104,49),bgMagentaBright:F(105,49),bgCyanBright:F(106,49),bgWhiteBright:F(107,49)},{reset:P,bold:W,dim:H,italic:U,underline:Y,inverse:J,hidden:K,strikethrough:Q,black:X,red:z,green:Z,yellow:ee,blue:re,magenta:ne,cyan:te,white:oe,gray:ie,bgBlack:ae,bgRed:se,bgGreen:ce,bgYellow:le,bgBlue:ue,bgMagenta:ge,bgCyan:fe,bgWhite:de,blackBright:he,redBright:me,greenBright:ye,yellowBright:we,blueBright:Ee,magentaBright:pe,cyanBright:Be,whiteBright:be,bgBlackBright:Oe,bgRedBright:Se,bgGreenBright:Re,bgYellowBright:ke,bgBlueBright:ve,bgMagentaBright:Ce,bgCyanBright:qe,bgWhiteBright:$e}=(({useColor:e=N}={})=>e?G:Object.keys(G).reduce(((e,r)=>({...e,[r]:String})),{}))();function xe(e){return(0,r.uniqBy)(e,(e=>e.name)).map((e=>e.name+"="+e.value)).join("; ")}async function Le({name:e,domain:n}){const t=await $({name:e,domain:n},new C);if(Array.isArray(t)&&t.length>0){const t=await $({name:e,domain:n}),o=(0,r.groupBy)(t,(e=>e.meta?.file));return Object.keys(o).map((e=>xe(o[e])))}throw new Error("Cookie not found")}async function Te(e,n={}){const t=`${e}`,o=new URL(t).hostname.replace(/^.*(\.\w+\.\w+)$/,((e,r)=>`%${r}`)),i=(await Le({name:"%",domain:o}).catch((()=>[]))).pop(),a=(0,r.merge)({headers:{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"},redirect:"manual"},n,{headers:{Cookie:i}});try{const e=await(0,u.fetch)(t,a),n=e.headers.get("location");if(e.redirected||n&&n!==t)return Te(n,a);const o=e.arrayBuffer(),i=async()=>o,s=async()=>i().then(Buffer.from),c=async()=>s().then((e=>e.toString("utf8"))),l=async()=>c().then(f(g)),d=async()=>c().then((e=>new URLSearchParams(e))),h={status:e.status,statusText:e.statusText,headers:e.headers,arrayBuffer:i,buffer:s,text:c,json:l,formData:d};return(0,r.merge)({},e,h)}catch(e){throw e}}function Ve(e){const r={};if(Array.isArray(e))for(const n of e){const[e,t]=n.split("=");r[e]=t}else{const[n,t]=e.split("=");r[n]=t}return r}const Ae=f(e)(d);!function(){if(d&&d.length>2){const e=d[2],n=d[3];if("--fetch"==e||"-f"==e){const e=Ae.f;let r;try{r=new URL(e)}catch(e){return void console.error("Invalid URL",n)}const t=e=>e.text().then((e=>{console.log(e)}));return void Te(r,{headers:Ve(Ae.H)}).then(t,console.error)}let t;t=null!=n&&n.indexOf(".")>-1?n:"%";const o="true";d.includes("--require-jwt")&&(h.REQUIRE_JWT=o),d.includes("--verbose")&&(h.VERBOSE=o),d.includes("--chrome-only")&&(h.CHROME_ONLY=o),d.includes("--firefox-only")&&(h.FIREFOX_ONLY=o),d.includes("--ignore-expired")&&(h.IGNORE_EXPIRED=o),d.includes("--single")&&(h.SINGLE=o),h.VERBOSE&&console.log("Verbose mode",d),async function(e,n){try{const t=await $({name:e,domain:n});if(t.length>0)if(d.includes("--combined-string"))console.log(ee(xe(t)));else if(d.includes("--render")||d.includes("-r"))console.log(ee(xe(t)));else if(d.includes("--dump")||d.includes("-d"))console.log(t);else if(d.includes("--dump-grouped")){const e=(0,r.groupBy)(t,(e=>e.meta?.file));console.log(Z(JSON.stringify(e,null,2)))}else if(d.includes("--combined-string-grouped")){const e=(0,r.groupBy)(t,(e=>e.meta?.file));for(const r of Object.keys(e)){let n=e[r];console.log(Z(r)+": ",ee(xe(n)))}}else for(const e of t)console.log(e.value);else console.error("No results")}catch(e){console.error(e)}}(e,t).catch(console.error)}}();
3
3
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"mappings":"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","sources":["src/global.ts","src/utils.ts","src/findAllFiles.ts","src/doSqliteQuery1.ts","src/IsCookieRow.ts","src/IsExportedCookie.ts","src/browsers/ChromeCookieQueryStrategy.ts","src/browsers/FirefoxCookieQueryStrategy.ts","src/browsers/SafariCookieQueryStrategy.ts","src/browsers/CompositeCookieQueryStrategy.ts","src/isValidJwt.ts","src/argv.ts","node_modules/colorette/index.js","src/resultsRendered.ts","src/cli.ts","src/queryCookies.ts"],"sourcesContent":["const { merge } = require(\"lodash\");\nexport const env: any = {};\nmerge(env, process.env);\nexport const HOME: string = env[\"HOME\"];\nif (!HOME) {\n throw new Error(\"HOME environment variable is not set\");\n}\n","// noinspection JSUnusedGlobalSymbols\n\nimport {exec, ExecException} from \"child_process\";\n\nexport async function execSimple(command: string): Promise<string> {\n return new Promise((resolve, reject) => {\n exec(\n command,\n { encoding: \"binary\", maxBuffer: 5 * 1024 },\n (error: ExecException | null, stdout: string, stderr: string) => {\n if (error) {\n reject(error);\n return;\n }\n if (stderr) {\n reject(error);\n return;\n }\n if (stdout) {\n resolve(stdout.trim());\n }\n }\n );\n });\n}\n\n/**\n *\n * @param result\n * @returns {string|null}\n */\nexport function toStringOrNull(result: any) {\n if (result == null) {\n return null;\n }\n if (process.env.VERBOSE) {\n console.log(\"result\", result);\n }\n if (typeof result === \"string\" && result.length > 0) {\n return result;\n }\n if (result.slice && result.toString) {\n // noinspection JSCheckFunctionSignatures\n return result.toString(\"utf8\");\n }\n return null;\n}\n\nexport function invalidString(input: any): boolean {\n return typeof input !== \"string\" || input.length === 0;\n}\n\n\nexport function validString(input: any): input is string {\n return typeof input == \"string\" && input.length > 0;\n}\n","import { env } from \"./global\";\nimport * as fs from \"fs\";\n\nexport async function findAllFiles(\n {\n path,\n name,\n maxDepth = 2\n//\n }: {\n path: string;\n name: string;\n maxDepth?: number;\n }\n): Promise<string[]> {\n const rootSegments = path.split(\"/\").length;\n\n if (env.VERBOSE) {\n console.log(`Searching for ${name} in ${path}`);\n }\n const files: string[] = [];\n let readdirSync;\n try {\n readdirSync = fs.readdirSync(path);\n } catch (e) {\n if (env.VERBOSE) {\n console.log(`Error reading ${path}`, e);\n }\n return [];\n }\n for (const file of readdirSync) {\n const filePath = path + \"/\" + file;\n let stat;\n try {\n stat = fs.statSync(filePath);\n } catch (e) {\n if (env.VERBOSE) {\n console.error(`Error getting stat for ${filePath}`, e);\n }\n continue;\n }\n if (stat.isDirectory()) {\n if (filePath.split(\"/\").length < rootSegments + maxDepth) {\n try {\n const subFiles = await findAllFiles({\n path: filePath,\n name: name,\n maxDepth: 2\n });\n files.push(...subFiles);\n } catch (e) {\n if (env.VERBOSE) {\n console.error(e);\n }\n }\n }\n } else if (file === name) {\n files.push(filePath);\n }\n }\n if (env.VERBOSE) {\n if (files.length > 0) {\n console.log(`Found ${files.length} ${name} files`);\n console.log(files);\n }\n }\n return files;\n}\n","import * as fs from \"fs\";\nimport * as sqlite3 from \"sqlite3\";\nimport { CookieRow } from \"./CookieRow\";\n\nexport async function doSqliteQuery1(file: string, sql: string): Promise<CookieRow[]> {\n if (!fs.existsSync(file)) {\n throw new Error(`doSqliteQuery1: file ${file} does not exist`);\n }\n const db = new sqlite3.Database(file);\n return new Promise((resolve, reject) => {\n db.all(sql, (err: Error, rows: any[]) => {\n if (err) {\n reject(err);\n return;\n }\n const rows1: any[] = rows;\n if (rows1 == null || rows1.length === 0) {\n resolve([]);\n return;\n }\n if (Array.isArray(rows1)) {\n const cookieRows: CookieRow[] = rows1.map((row) => {\n return {\n domain: row[\"host_key\"],\n name: row[\"name\"],\n value: row[\"encrypted_value\"],\n meta: {\n file: file\n }\n };\n });\n resolve(cookieRows);\n return;\n }\n if (process.env.VERBOSE) {\n console.log(`doSqliteQuery1: rows ${JSON.stringify(rows1)}`);\n }\n resolve([rows1]);\n });\n });\n}\n","import { CookieRow } from \"./CookieRow\";\n\nexport function isCookieRow(obj: any): obj is CookieRow {\n return obj.domain !== undefined && obj.name !== undefined && obj.value !== undefined;\n}\n","import { ExportedCookie } from \"./ExportedCookie\";\n\nexport function isExportedCookie(obj: any): obj is ExportedCookie {\n return obj.domain !== undefined && obj.name !== undefined && obj.value !== undefined;\n}\n","import CookieQueryStrategy from \"./CookieQueryStrategy\";\nimport { execSimple } from \"../utils\";\nimport { env, HOME } from \"../global\";\nimport { existsSync } from \"fs\";\nimport { findAllFiles } from \"../findAllFiles\";\nimport * as crypto from \"crypto\";\nimport * as path from \"path\";\nimport { doSqliteQuery1 } from \"../doSqliteQuery1\";\nimport { merge } from \"lodash\";\nimport { isCookieRow } from \"../IsCookieRow\";\nimport { isExportedCookie } from \"../IsExportedCookie\";\nimport { CookieRow } from \"../CookieRow\";\nimport { ExportedCookie } from \"../ExportedCookie\";\n\nexport default class ChromeCookieQueryStrategy implements CookieQueryStrategy {\n async queryCookies(name: string, domain: string): Promise<ExportedCookie[]> {\n if (process.platform !== \"darwin\") {\n throw new Error(\"This only works on macOS\");\n }\n if (env.FIREFOX_ONLY) {\n return [];\n }\n return getChromeCookies({\n requireJwt: false,\n name,\n domain\n });\n }\n}\n\nasync function getPromise1(name: string, domain: string, file: string): Promise<CookieRow[]> {\n try {\n return await getEncryptedChromeCookie({\n name: name,\n domain: domain,\n file: file\n });\n } catch (e) {\n if (env.VERBOSE) {\n console.log(\"Error getting encrypted cookie\", e);\n }\n return [];\n }\n}\n\nasync function getPromise(name: string, domain: string): Promise<CookieRow[]> {\n try {\n const files: string[] = await findAllFiles({\n path: chromeLocal,\n name: \"Cookies\"\n });\n const promises: Promise<CookieRow[]>[] = files.map((file) => getPromise1(name, domain, file));\n const results1: Awaited<CookieRow[]>[] = await Promise.all(promises);\n return results1.flat().filter(isCookieRow);\n } catch (error) {\n if (env.VERBOSE) {\n console.log(\"error\", error);\n }\n return [];\n }\n}\n\nasync function decryptValue(password: string, encryptedValue: Buffer) {\n let d: string | null;\n try {\n d = await decrypt(password, encryptedValue);\n } catch (e) {\n if (env.VERBOSE) {\n console.log(\"Error decrypting cookie\", e);\n }\n d = null;\n }\n return d ?? encryptedValue.toString(\"utf-8\");\n}\n\nasync function getChromeCookies(\n {\n name,\n domain = \"%\",\n requireJwt = false\n }: {\n name: string;\n domain: string;\n requireJwt: boolean | undefined;\n //\n }\n //\n): Promise<ExportedCookie[]> {\n const encryptedDataItems: CookieRow[] = await getPromise(name, domain);\n const password: string = await getChromePassword();\n const decrypted: Promise<ExportedCookie | null>[] = encryptedDataItems\n .filter(({ value }) => value != null && value.length > 0)\n .map(async (cookieRow: CookieRow) => {\n const encryptedValue: Buffer = cookieRow.value;\n const decryptedValue = await decryptValue(password, encryptedValue);\n const meta = {};\n merge(meta, cookieRow.meta ?? {});\n return {\n domain: cookieRow.domain,\n name: cookieRow.name,\n value: decryptedValue,\n meta: meta\n };\n });\n const results: ExportedCookie[] = (await Promise.all(decrypted)).filter(isExportedCookie);\n if (env.VERBOSE) {\n console.log(\"results\", results);\n }\n return results;\n}\n\nconst chromeLocal = path.join(\n HOME,\n \"Library\",\n \"Application Support\",\n \"Google\",\n \"Chrome\"\n);\n\nasync function getEncryptedChromeCookie(\n {\n name,\n domain,\n file = path.join(chromeLocal, \"Default\", \"Cookies\")\n //\n }: {\n name: string;\n domain: string;\n file: string;\n }): Promise<CookieRow[]> {\n if (!existsSync(file)) {\n throw new Error(`File ${file} does not exist`);\n }\n if (env.VERBOSE) {\n const s = file.split(\"/\").slice(-3).join(\"/\");\n console.log(`Trying Chrome (at ${s}) cookie ${name} for domain ${domain}`);\n }\n let sql;\n sql = `SELECT encrypted_value, name, host_key FROM cookies`;\n const wildcardRegexp = /^([*%])$/i;\n const specifiedName = name.match(wildcardRegexp) == null;\n const specifiedDomain = domain.match(wildcardRegexp) == null;\n if (specifiedName || specifiedDomain) {\n sql += ` WHERE `;\n if (specifiedName) {\n sql += `name = '${name}'`;\n if (specifiedDomain) {\n sql += ` AND `;\n }\n }\n if (specifiedDomain) {\n sql += `host_key LIKE '${domain}';`;\n }\n }\n return doSqliteQuery1(file, sql);\n}\n\nasync function getChromePassword(): Promise<string> {\n return execSimple(\n \"security find-generic-password -w -s \\\"Chrome Safe Storage\\\"\"\n );\n}\n\nasync function decrypt(password: crypto.BinaryLike, encryptedData: Buffer): Promise<string> {\n if (typeof password !== \"string\") {\n throw new Error(\"password must be a string: \" + password);\n }\n let encryptedData1: any;\n encryptedData1 = encryptedData;\n if (encryptedData1 == null || typeof encryptedData1 !== \"object\") {\n throw new Error(\"encryptedData must be a object: \" + encryptedData1);\n }\n if (!(encryptedData1 instanceof Buffer)) {\n if (Array.isArray(encryptedData1) && encryptedData1[0] instanceof Buffer) {\n [encryptedData1] = encryptedData1;\n if (env.VERBOSE) {\n console.log(\n `encryptedData is an array of buffers, selected first: ${encryptedData1}`\n );\n }\n } else {\n throw new Error(\"encryptedData must be a Buffer: \" + encryptedData1);\n }\n encryptedData1 = Buffer.from(encryptedData1);\n }\n if (env.VERBOSE) {\n console.log(`Trying to decrypt with password ${password}`);\n }\n return new Promise((resolve, reject) => {\n crypto.pbkdf2(password,\n \"saltysalt\",\n 1003,\n 16,\n \"sha1\",\n (error, buffer) => {\n try {\n if (error) {\n if (env.VERBOSE) {\n console.log(\"Error doing pbkdf2\", error);\n }\n reject(error);\n return;\n }\n\n if (buffer.length !== 16) {\n if (env.VERBOSE) {\n console.log(\n \"Error doing pbkdf2, buffer length is not 16\",\n buffer.length\n );\n }\n reject(new Error(\"Buffer length is not 16\"));\n return;\n }\n\n const str = new Array(17).join(\" \");\n const iv = Buffer.from(str, \"binary\");\n const decipher = crypto.createDecipheriv(\"aes-128-cbc\", buffer, iv);\n decipher.setAutoPadding(false);\n\n if (encryptedData1 && encryptedData1.slice) {\n encryptedData1 = encryptedData1.slice(3);\n }\n\n if (encryptedData1.length % 16 !== 0) {\n if (env.VERBOSE) {\n console.log(\n \"Error doing pbkdf2, encryptedData length is not a multiple of 16\",\n encryptedData1.length\n );\n }\n reject(new Error(\"encryptedData length is not a multiple of 16\"));\n return;\n }\n\n let decoded = decipher.update(encryptedData1);\n try {\n decipher.final(\"utf-8\");\n } catch (e) {\n if (env.VERBOSE) {\n console.log(\"Error doing decipher.final()\", e);\n }\n reject(e);\n return;\n }\n\n const padding = decoded[decoded.length - 1];\n if (padding) {\n decoded = decoded.slice(0, 0 - padding);\n }\n // noinspection JSCheckFunctionSignatures\n const decodedString = decoded.toString(\"utf8\");\n resolve(decodedString);\n } catch (e) {\n reject(e);\n }\n });\n });\n}\n","import CookieQueryStrategy from \"./CookieQueryStrategy\";\nimport { env, HOME } from \"../global\";\nimport { existsSync } from \"fs\";\nimport { toStringOrNull } from \"../utils\";\nimport { findAllFiles } from \"../findAllFiles\";\nimport * as path from \"path\";\nimport { doSqliteQuery1 } from \"../doSqliteQuery1\";\nimport { ExportedCookie } from \"../ExportedCookie\";\n\nexport default class FirefoxCookieQueryStrategy implements CookieQueryStrategy {\n async queryCookies(name: string, domain: string): Promise<ExportedCookie[]> {\n if (process.platform !== \"darwin\") {\n throw new Error(\"This only works on macOS\");\n }\n if (env.CHROME_ONLY) {\n return [];\n }\n const cookies = await this.#getFirefoxCookie({ name, domain });\n return Array.isArray(cookies) ? cookies.map(toStringOrNull) : [];\n }\n\n /**\n *\n * @param name\n * @param domain\n * @returns {Promise<Buffer>}\n */\n async #getFirefoxCookie(\n //\n {\n name,\n domain\n }: {\n name: string,\n domain: string\n //\n }\n //\n ) {\n const files: string[] = await findAllFiles({\n path: path.join(\n HOME,\n \"Library\",\n \"Application Support\",\n \"Firefox\",\n \"Profiles\"\n ),\n name: \"cookies.sqlite\"\n });\n const all = await Promise.all(\n files.map((file) => {\n return this.#queryCookiesDb(file, name, domain);\n })\n );\n return all.flat();\n }\n\n #queryCookiesDb(file: string, name: string, domain: string) {\n if (file && !existsSync(file)) {\n throw new Error(`File ${file} does not exist`);\n }\n if (env.VERBOSE) {\n console.log(`Trying Firefox cookie ${name} for domain ${domain}`);\n }\n let sql;\n //language=SQL\n sql = \"SELECT value FROM moz_cookies\";\n if (typeof name === \"string\" || typeof domain === \"string\") {\n sql += ` WHERE `;\n if (typeof name === \"string\") {\n sql += `name = '${name}'`;\n if (typeof domain === \"string\") {\n sql += ` AND `;\n }\n }\n if (typeof domain === \"string\") {\n sql += `host LIKE '${domain}';`;\n }\n }\n return doSqliteQuery1(file, sql)\n .then((rows) => {\n return rows.map((row) => {\n return {\n domain: row.domain,\n name: row.name,\n value: row.value.toString(\"utf8\")\n };\n });\n })\n .catch(() => []);\n }\n}\n","import CookieQueryStrategy from \"./CookieQueryStrategy\";\nimport { ExportedCookie } from \"../ExportedCookie\";\n\nexport default class SafariCookieQueryStrategy implements CookieQueryStrategy {\n async queryCookies(name: string, domain: string): Promise<ExportedCookie[]> {\n return [];\n }\n}\n","import ChromeCookieQueryStrategy from \"./ChromeCookieQueryStrategy\";\nimport FirefoxCookieQueryStrategy from \"./FirefoxCookieQueryStrategy\";\nimport SafariCookieQueryStrategy from \"./SafariCookieQueryStrategy\";\nimport CookieQueryStrategy from \"./CookieQueryStrategy\";\nimport { ExportedCookie } from \"../ExportedCookie\";\n\nexport default class CompositeCookieQueryStrategy implements CookieQueryStrategy {\n #strategies;\n\n constructor() {\n this.#strategies = [\n ChromeCookieQueryStrategy,\n FirefoxCookieQueryStrategy,\n SafariCookieQueryStrategy,\n ].map((strategy) => {\n return new strategy();\n });\n }\n\n async queryCookies(name: string, domain: string): Promise<ExportedCookie[]> {\n const results = await Promise.all(\n this.#strategies.map(async (strategy) => {\n // @ts-ignore\n const cookies: Promise<ExportedCookie[]> = strategy.queryCookies(name, domain);\n return cookies.catch(() => []);\n })\n );\n return results.flat();\n }\n}\n","import jsonwebtoken from \"jsonwebtoken\";\nimport { env } from \"./global\";\n\nexport default function isValidJwt(token: any) {\n try {\n const result = jsonwebtoken.decode(token, { complete: true });\n if (env.VERBOSE) {\n console.log(result);\n }\n return true;\n } catch (err) {\n return false;\n }\n}\n","export const argv: string[] = process.argv ?? [];\n","import * as tty from \"tty\"\n\nconst {\n env = {},\n argv = [],\n platform = \"\",\n} = typeof process === \"undefined\" ? {} : process\n\nconst isDisabled = \"NO_COLOR\" in env || argv.includes(\"--no-color\")\nconst isForced = \"FORCE_COLOR\" in env || argv.includes(\"--color\")\nconst isWindows = platform === \"win32\"\nconst isDumbTerminal = env.TERM === \"dumb\"\n\nconst isCompatibleTerminal =\n tty && tty.isatty && tty.isatty(1) && env.TERM && !isDumbTerminal\n\nconst isCI =\n \"CI\" in env &&\n (\"GITHUB_ACTIONS\" in env || \"GITLAB_CI\" in env || \"CIRCLECI\" in env)\n\nexport const isColorSupported =\n !isDisabled &&\n (isForced || (isWindows && !isDumbTerminal) || isCompatibleTerminal || isCI)\n\nconst replaceClose = (\n index,\n string,\n close,\n replace,\n head = string.substring(0, index) + replace,\n tail = string.substring(index + close.length),\n next = tail.indexOf(close)\n) => head + (next < 0 ? tail : replaceClose(next, tail, close, replace))\n\nconst clearBleed = (index, string, open, close, replace) =>\n index < 0\n ? open + string + close\n : open + replaceClose(index, string, close, replace) + close\n\nconst filterEmpty =\n (open, close, replace = open, at = open.length + 1) =>\n (string) =>\n string || !(string === \"\" || string === undefined)\n ? clearBleed(\n (\"\" + string).indexOf(close, at),\n string,\n open,\n close,\n replace\n )\n : \"\"\n\nconst init = (open, close, replace) =>\n filterEmpty(`\\x1b[${open}m`, `\\x1b[${close}m`, replace)\n\nconst colors = {\n reset: init(0, 0),\n bold: init(1, 22, \"\\x1b[22m\\x1b[1m\"),\n dim: init(2, 22, \"\\x1b[22m\\x1b[2m\"),\n italic: init(3, 23),\n underline: init(4, 24),\n inverse: init(7, 27),\n hidden: init(8, 28),\n strikethrough: init(9, 29),\n black: init(30, 39),\n red: init(31, 39),\n green: init(32, 39),\n yellow: init(33, 39),\n blue: init(34, 39),\n magenta: init(35, 39),\n cyan: init(36, 39),\n white: init(37, 39),\n gray: init(90, 39),\n bgBlack: init(40, 49),\n bgRed: init(41, 49),\n bgGreen: init(42, 49),\n bgYellow: init(43, 49),\n bgBlue: init(44, 49),\n bgMagenta: init(45, 49),\n bgCyan: init(46, 49),\n bgWhite: init(47, 49),\n blackBright: init(90, 39),\n redBright: init(91, 39),\n greenBright: init(92, 39),\n yellowBright: init(93, 39),\n blueBright: init(94, 39),\n magentaBright: init(95, 39),\n cyanBright: init(96, 39),\n whiteBright: init(97, 39),\n bgBlackBright: init(100, 49),\n bgRedBright: init(101, 49),\n bgGreenBright: init(102, 49),\n bgYellowBright: init(103, 49),\n bgBlueBright: init(104, 49),\n bgMagentaBright: init(105, 49),\n bgCyanBright: init(106, 49),\n bgWhiteBright: init(107, 49),\n}\n\nexport const createColors = ({ useColor = isColorSupported } = {}) =>\n useColor\n ? colors\n : Object.keys(colors).reduce(\n (colors, key) => ({ ...colors, [key]: String }),\n {}\n )\n\nexport const {\n reset,\n bold,\n dim,\n italic,\n underline,\n inverse,\n hidden,\n strikethrough,\n black,\n red,\n green,\n yellow,\n blue,\n magenta,\n cyan,\n white,\n gray,\n bgBlack,\n bgRed,\n bgGreen,\n bgYellow,\n bgBlue,\n bgMagenta,\n bgCyan,\n bgWhite,\n blackBright,\n redBright,\n greenBright,\n yellowBright,\n blueBright,\n magentaBright,\n cyanBright,\n whiteBright,\n bgBlackBright,\n bgRedBright,\n bgGreenBright,\n bgYellowBright,\n bgBlueBright,\n bgMagentaBright,\n bgCyanBright,\n bgWhiteBright,\n} = createColors()\n","import { uniqBy } from \"lodash\";\nimport { ExportedCookie } from \"./ExportedCookie\";\n\nexport function resultsRendered(results: ExportedCookie[]) {\n return uniqBy(results, (r) => r.name)\n .map((r) => r.name + \"=\" + r.value)\n .join(\"; \");\n}\n","#!/usr/bin/env node\n\nimport { env } from \"./global\";\nimport { queryCookies } from \"./queryCookies\";\nimport { argv } from \"./argv\";\nimport { groupBy } from \"lodash\";\nimport { blue, green } from \"colorette\";\nimport { resultsRendered } from \"./resultsRendered\";\nimport { ExportedCookie } from \"./ExportedCookie\";\n\nfunction combinedString(results: ExportedCookie[]) {\n return blue(resultsRendered(results));\n}\n\nasync function cliQueryCookies(name: string, domain: string) {\n try {\n const results = await queryCookies({ name, domain });\n if (results.length > 0) {\n if (argv.includes(\"--combined-string\")) {\n console.log(combinedString(results));\n } else if (argv.includes(\"--dump\")) {\n console.log(results);\n } else if (argv.includes(\"--dump-grouped\")) {\n const groupedByFile = groupBy(results, (r) => r.meta?.file);\n console.log(green(JSON.stringify(groupedByFile, null, 2)));\n } else if (argv.includes(\"--combined-string-grouped\")) {\n const groupedByFile = groupBy(results, (r) => r.meta?.file);\n for (const file of Object.keys(groupedByFile)) {\n let results = groupedByFile[file];\n console.log(green(file) + \": \", combinedString(results));\n }\n } else {\n for (const result of results) {\n console.log(result.value);\n }\n }\n } else {\n console.error(\"No results\");\n }\n } catch (e) {\n console.error(e);\n }\n}\n\nif (argv && argv.length > 2) {\n const name = argv[2];\n\n let domain;\n if (argv[3] != null && argv[3].indexOf(\".\") > -1) {\n domain = argv[3];\n } else {\n domain = \"%\";\n }\n\n const tru = `${true}`;\n\n if (argv.includes(\"--require-jwt\")) {\n env.REQUIRE_JWT = tru;\n }\n if (argv.includes(\"--verbose\")) {\n env.VERBOSE = tru;\n }\n if (argv.includes(\"--chrome-only\")) {\n env.CHROME_ONLY = tru;\n }\n if (argv.includes(\"--firefox-only\")) {\n env.FIREFOX_ONLY = tru;\n }\n if (argv.includes(\"--ignore-expired\")) {\n env.IGNORE_EXPIRED = tru;\n }\n\n if (argv.includes(\"--single\")) {\n env.SINGLE = tru;\n }\n\n if (env.VERBOSE) {\n console.log(\"Verbose mode\", argv);\n }\n\n cliQueryCookies(name, domain).catch(console.error);\n}\n","import { env } from \"./global\";\nimport { uniqBy } from \"lodash\";\nimport CompositeCookieQueryStrategy from \"./browsers/CompositeCookieQueryStrategy\";\nimport CookieQueryStrategy from \"./browsers/CookieQueryStrategy\";\nimport isValidJwt from \"./isValidJwt\";\nimport { CookieRequest } from \"./CookieRequest\";\nimport { ExportedCookie } from \"./ExportedCookie\";\n\nexport async function queryCookies(\n {\n name,\n domain\n }: CookieRequest,\n strategy: CookieQueryStrategy = new CompositeCookieQueryStrategy()\n) {\n const results: ExportedCookie[] = await strategy.queryCookies(name, domain);\n const results1: ExportedCookie[] = uniqBy(results, JSON.stringify);\n const jwtCookies = [];\n for (const result of results1) {\n const value = result.value;\n if (isValidJwt(value)) {\n jwtCookies.push(result);\n }\n }\n const resultsUniq = env.REQUIRE_JWT ? jwtCookies : results1;\n return env.SINGLE ? [resultsUniq[0]] : resultsUniq;\n}\n"],"names":["$3GcJY$lodash","merge","$46d5f952bbf1ad16$export$a7b6bc01c63cdfc3","$46d5f952bbf1ad16$require$merge","process","env","$46d5f952bbf1ad16$export$a7c5707626fc90f","Error","async","$08b2542d46c201fb$export$8d71c74f97c0202e","command","Promise","resolve","reject","$3GcJY$child_process","exec","encoding","maxBuffer","error","stdout","stderr","trim","$08b2542d46c201fb$export$d53bf2de587a369","result","VERBOSE","console","log","length","slice","toString","$50e620a43f85291a$export$2c9faf86071156ae","path","name","maxDepth","rootSegments","split","files","readdirSync","$3GcJY$fs","e","file","filePath","stat","statSync","e1","isDirectory","subFiles","push","e2","$f5dd4d62c4c3f3b4$export$f19f611d1fa7c6f3","sql","existsSync","db","$3GcJY$sqlite3","Database","all","err","rows","rows1","Array","isArray","cookieRows","map","row","domain","value","meta","JSON","stringify","$f10944b6cece07ca$export$bc926c43858bd3cb","obj","undefined","$7ce825379b0eda98$export$963c8d651337e4a4","$d96ea452b1675522$export$2e2bcd8739ae039","platform","FIREFOX_ONLY","requireJwt","encryptedDataItems","promises","$d96ea452b1675522$var$chromeLocal","$3GcJY$path","join","s","wildcardRegexp","specifiedName","match","specifiedDomain","$d96ea452b1675522$var$getEncryptedChromeCookie","$d96ea452b1675522$var$getPromise1","flat","filter","$d96ea452b1675522$var$getPromise","password","$d96ea452b1675522$var$getChromePassword","decrypted","cookieRow","encryptedValue","decryptedValue","d","encryptedData","encryptedData1","Buffer","from","$3GcJY$crypto","pbkdf2","buffer","str","iv","decipher","createDecipheriv","setAutoPadding","decoded","update","final","padding","decodedString","$d96ea452b1675522$var$decrypt","$d96ea452b1675522$var$decryptValue","results","$d96ea452b1675522$var$getChromeCookies","$009bb4f99042a7e5$export$2e2bcd8739ae039","CHROME_ONLY","cookies","this","getFirefoxCookie","queryCookiesDb","name1","domain1","then","catch","$1f4fc383cc585db2$export$2e2bcd8739ae039","$47b6161e24f245f2$export$2e2bcd8739ae039","strategies","constructor","strategy","queryCookies","$fde20152a1eed49d$export$2e2bcd8739ae039","token","$3GcJY$jsonwebtoken","decode","complete","$79b52b72feab5f10$export$6f4ae1207c703045","argv","$46332c16e7a967a5$var$env","$46332c16e7a967a5$var$argv","$46332c16e7a967a5$var$platform","$46332c16e7a967a5$var$isDisabled","includes","$46332c16e7a967a5$var$isForced","$46332c16e7a967a5$var$isWindows","$46332c16e7a967a5$var$isDumbTerminal","TERM","$46332c16e7a967a5$var$isCompatibleTerminal","$3GcJY$tty","isatty","$46332c16e7a967a5$export$ba7eaac21c385de8","$46332c16e7a967a5$var$replaceClose","index","string","close","replace","head","substring","tail","next","indexOf","$46332c16e7a967a5$var$filterEmpty","open","at","$46332c16e7a967a5$var$clearBleed","$46332c16e7a967a5$var$init","$46332c16e7a967a5$var$colors","reset","bold","dim","italic","underline","inverse","hidden","strikethrough","black","red","green","yellow","blue","magenta","cyan","white","gray","bgBlack","bgRed","bgGreen","bgYellow","bgBlue","bgMagenta","bgCyan","bgWhite","blackBright","redBright","greenBright","yellowBright","blueBright","magentaBright","cyanBright","whiteBright","bgBlackBright","bgRedBright","bgGreenBright","bgYellowBright","bgBlueBright","bgMagentaBright","bgCyanBright","bgWhiteBright","$46332c16e7a967a5$export$aad8462122ac592b","$46332c16e7a967a5$export$73ba5813cda80a49","$46332c16e7a967a5$export$c96e90b4bcb7d4ca","$46332c16e7a967a5$export$5540da1282cbf565","$46332c16e7a967a5$export$425327af25286e5e","$46332c16e7a967a5$export$70ae2c07e401031b","$46332c16e7a967a5$export$73920f18ca706874","$46332c16e7a967a5$export$19426ff118fe8be","$46332c16e7a967a5$export$c073df10e766abfa","$46332c16e7a967a5$export$a90204d1394caf30","$46332c16e7a967a5$export$955a2ebd2fb142ae","$46332c16e7a967a5$export$594c5a8758200c32","$46332c16e7a967a5$export$2aa0182783e7e9de","$46332c16e7a967a5$export$2a9ca2e383622e18","$46332c16e7a967a5$export$7474046f446842ee","$46332c16e7a967a5$export$8fa4e5556fd77a60","$46332c16e7a967a5$export$3e2c219d3ab79d01","$46332c16e7a967a5$export$a91ca5b79f5fb26c","$46332c16e7a967a5$export$74a89e4512e7c91","$46332c16e7a967a5$export$8137d14243d019b3","$46332c16e7a967a5$export$3d3dcf8beff00fe1","$46332c16e7a967a5$export$ec69fb4048854b4","$46332c16e7a967a5$export$76507b7995de3038","$46332c16e7a967a5$export$1b1236a85ae1b824","$46332c16e7a967a5$export$2fbae6ef3123e0b0","$46332c16e7a967a5$export$c442bbc3ef058f3e","$46332c16e7a967a5$export$6f940151fac4d6e4","$46332c16e7a967a5$export$9e103086f7204459","$46332c16e7a967a5$export$106f17ac3545b17c","$46332c16e7a967a5$export$7aa4c9ef25eb1086","$46332c16e7a967a5$export$76b6abffe88e3179","$46332c16e7a967a5$export$c609d1d25ac1cc71","$46332c16e7a967a5$export$38b81c3a7de495d7","$46332c16e7a967a5$export$5c9c56f63b47e15b","$46332c16e7a967a5$export$26735259ab854b4f","$46332c16e7a967a5$export$d5483c19744b2fc2","$46332c16e7a967a5$export$f8c17ad4aac14a99","$46332c16e7a967a5$export$6038eb5fdc315c12","$46332c16e7a967a5$export$41148066f4812842","$46332c16e7a967a5$export$eb0dc7973d30eea7","$46332c16e7a967a5$export$fde769fa8262c0d6","useColor","Object","keys","reduce","colors","key","String","$46332c16e7a967a5$export$fc3cc093e161d064","$8c51a9568358068a$export$9abc0a414b0d8b8f","uniqBy","r","$2a211dfb3a4f388f$var$combinedString","tru","REQUIRE_JWT","IGNORE_EXPIRED","SINGLE","results1","jwtCookies","resultsUniq","groupedByFile","groupBy","groupedByFile1","$2a211dfb3a4f388f$var$cliQueryCookies"],"version":3,"file":"cli.js.map","sourceRoot":"../"}
1
+ {"mappings":"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","sources":["src/argv.ts","src/global.ts","src/utils.ts","src/findAllFiles.ts","src/doSqliteQuery1.ts","src/IsCookieRow.ts","src/IsExportedCookie.ts","src/browsers/ChromeCookieQueryStrategy.ts","src/SpecialCases.ts","src/browsers/FirefoxCookieQueryStrategy.ts","src/browsers/SafariCookieQueryStrategy.ts","src/browsers/CompositeCookieQueryStrategy.ts","src/isValidJwt.ts","src/queryCookies.ts","node_modules/colorette/index.js","src/resultsRendered.ts","src/getGroupedRenderedCookies.ts","src/fetchWithCookies.ts","src/unpackHeaders.ts","src/cli.ts"],"sourcesContent":["export const argv: string[] = process.argv ?? [];\n","import { merge } from \"lodash\";\n\nexport const env: any = {};\nmerge(env, process.env);\nexport const HOME: string = env[\"HOME\"];\nif (!HOME) {\n throw new Error(\"HOME environment variable is not set\");\n}\n","// noinspection JSUnusedGlobalSymbols\n\nimport { exec, ExecException } from \"child_process\";\n\nexport async function execSimple(command: string): Promise<string> {\n return new Promise((resolve, reject) => {\n exec(\n command,\n { encoding: \"binary\", maxBuffer: 5 * 1024 },\n (error: ExecException | null, stdout: string, stderr: string) => {\n if (error) {\n reject(error);\n return;\n }\n if (stderr) {\n reject(error);\n return;\n }\n if (stdout) {\n resolve(stdout.trim());\n }\n }\n );\n });\n}\n\nexport function toStringOrNull(result: any) {\n if (result == null) {\n return null;\n }\n if (process.env.VERBOSE) {\n console.log(\"result\", result);\n }\n if (typeof result === \"string\" && result.length > 0) {\n return result;\n }\n if (result.slice && result.toString) {\n // noinspection JSCheckFunctionSignatures\n return result.toString(\"utf8\");\n }\n return null;\n}\n\nexport function invalidString(input: any): boolean {\n return typeof input !== \"string\" || input.length === 0;\n}\n\nexport function validString(input: any): input is string {\n return typeof input == \"string\" && input.length > 0;\n}\n","import { env } from \"./global\";\nimport * as fs from \"fs\";\n\nexport async function findAllFiles({\n path,\n name,\n maxDepth = 2,\n}: //\n{\n path: string;\n name: string;\n maxDepth?: number;\n}): Promise<string[]> {\n const rootSegments = path.split(\"/\").length;\n\n if (env.VERBOSE) {\n console.log(`Searching for ${name} in ${path}`);\n }\n const files: string[] = [];\n let readdirSync;\n try {\n readdirSync = fs.readdirSync(path);\n } catch (e) {\n if (env.VERBOSE) {\n console.log(`Error reading ${path}`, e);\n }\n return [];\n }\n for (const file of readdirSync) {\n const filePath = path + \"/\" + file;\n let stat;\n try {\n stat = fs.statSync(filePath);\n } catch (e) {\n if (env.VERBOSE) {\n console.error(`Error getting stat for ${filePath}`, e);\n }\n continue;\n }\n if (stat.isDirectory()) {\n if (filePath.split(\"/\").length < rootSegments + maxDepth) {\n try {\n const subFiles = await findAllFiles({\n path: filePath,\n name: name,\n maxDepth: 2,\n });\n files.push(...subFiles);\n } catch (e) {\n if (env.VERBOSE) {\n console.error(e);\n }\n }\n }\n } else if (file === name) {\n files.push(filePath);\n }\n }\n if (env.VERBOSE) {\n if (files.length > 0) {\n console.log(`Found ${files.length} ${name} files`);\n console.log(files);\n }\n }\n return files;\n}\n","import * as fs from \"fs\";\nimport * as sqlite3 from \"sqlite3\";\nimport { CookieRow } from \"./CookieRow\";\nimport { merge } from \"lodash\";\n\ninterface DoSqliteQuery1Params {\n file: string;\n sql: string;\n rowTransform: (row: any) => CookieRow;\n}\n\nexport async function doSqliteQuery1({\n file,\n sql,\n rowTransform,\n}: DoSqliteQuery1Params): Promise<CookieRow[]> {\n if (!file || (file && !fs.existsSync(file))) {\n throw new Error(`doSqliteQuery1: file ${file} does not exist`);\n }\n const db = new sqlite3.Database(file);\n return new Promise((resolve, reject) => {\n db.all(sql, (err: Error, rows: any[]) => {\n if (err) {\n reject(err);\n return;\n }\n const rows1: any[] = rows;\n if (rows1 == null || rows1.length === 0) {\n resolve([]);\n return;\n }\n if (Array.isArray(rows1)) {\n const cookieRows: CookieRow[] = rows1.map((row: any) => {\n const newVar = {\n meta: {\n file: file,\n },\n };\n const cookieRow: CookieRow = rowTransform(row);\n return merge(newVar, cookieRow);\n });\n resolve(cookieRows);\n return;\n }\n if (process.env.VERBOSE) {\n console.log(`doSqliteQuery1: rows ${JSON.stringify(rows1)}`);\n }\n resolve([rows1]);\n });\n });\n}\n","import { CookieRow } from \"./CookieRow\";\n\nexport function isCookieRow(obj: any): obj is CookieRow {\n return (\n obj.domain !== undefined &&\n obj.name !== undefined &&\n obj.value !== undefined\n );\n}\n","import { ExportedCookie } from \"./ExportedCookie\";\n\nexport function isExportedCookie(obj: any): obj is ExportedCookie {\n return (\n obj.domain !== undefined &&\n obj.name !== undefined &&\n obj.value !== undefined\n );\n}\n","import CookieQueryStrategy from \"./CookieQueryStrategy\";\nimport { execSimple } from \"../utils\";\nimport { env, HOME } from \"../global\";\nimport { existsSync } from \"fs\";\nimport { findAllFiles } from \"../findAllFiles\";\nimport * as crypto from \"crypto\";\nimport * as path from \"path\";\nimport { doSqliteQuery1 } from \"../doSqliteQuery1\";\nimport { merge } from \"lodash\";\nimport { isCookieRow } from \"../IsCookieRow\";\nimport { isExportedCookie } from \"../IsExportedCookie\";\nimport { CookieRow } from \"../CookieRow\";\nimport { ExportedCookie } from \"../ExportedCookie\";\n\nexport default class ChromeCookieQueryStrategy implements CookieQueryStrategy {\n async queryCookies(name: string, domain: string): Promise<ExportedCookie[]> {\n if (process.platform !== \"darwin\") {\n throw new Error(\"This only works on macOS\");\n }\n if (env.FIREFOX_ONLY) {\n return [];\n }\n return getChromeCookies({\n requireJwt: false,\n name,\n domain,\n });\n }\n}\n\nasync function getPromise1(\n name: string,\n domain: string,\n file: string\n): Promise<CookieRow[]> {\n try {\n return await getEncryptedChromeCookie({\n name: name,\n domain: domain,\n file: file,\n });\n } catch (e) {\n if (env.VERBOSE) {\n console.log(\"Error getting encrypted cookie\", e);\n }\n return [];\n }\n}\n\nasync function getPromise(name: string, domain: string): Promise<CookieRow[]> {\n try {\n const files: string[] = await findAllFiles({\n path: chromeLocal,\n name: \"Cookies\",\n });\n const promises: Promise<CookieRow[]>[] = files.map((file) =>\n getPromise1(name, domain, file)\n );\n const results1: Awaited<CookieRow[]>[] = await Promise.all(promises);\n return results1.flat().filter(isCookieRow);\n } catch (error) {\n if (env.VERBOSE) {\n console.log(\"error\", error);\n }\n return [];\n }\n}\n\nasync function decryptValue(password: string, encryptedValue: Buffer) {\n let d: string | null;\n try {\n d = await decrypt(password, encryptedValue);\n } catch (e) {\n if (env.VERBOSE) {\n console.log(\"Error decrypting cookie\", e);\n }\n d = null;\n }\n return d ?? encryptedValue.toString(\"utf-8\");\n}\n\nasync function getChromeCookies({\n name,\n domain = \"%\",\n requireJwt = false,\n}: {\n name: string;\n domain: string;\n requireJwt: boolean | undefined;\n //\n}): //\nPromise<ExportedCookie[]> {\n const encryptedDataItems: CookieRow[] = await getPromise(name, domain);\n const password: string = await getChromePassword();\n const decrypted: Promise<ExportedCookie | null>[] = encryptedDataItems\n .filter(({ value }) => value != null && value.length > 0)\n .map(async (cookieRow: CookieRow) => {\n const encryptedValue: Buffer = cookieRow.value;\n const decryptedValue = await decryptValue(password, encryptedValue);\n const meta = {};\n merge(meta, cookieRow.meta ?? {});\n return {\n domain: cookieRow.domain,\n name: cookieRow.name,\n value: decryptedValue,\n meta: meta,\n };\n });\n const results: ExportedCookie[] = (await Promise.all(decrypted)).filter(\n isExportedCookie\n );\n if (env.VERBOSE) {\n console.log(\"results\", results);\n }\n return results;\n}\n\nconst chromeLocal = path.join(\n HOME,\n \"Library\",\n \"Application Support\",\n \"Google\",\n \"Chrome\"\n);\n\nasync function getEncryptedChromeCookie({\n name,\n domain,\n file = path.join(chromeLocal, \"Default\", \"Cookies\"),\n}: //\n{\n name: string;\n domain: string;\n file: string;\n}): Promise<CookieRow[]> {\n if (!existsSync(file)) {\n throw new Error(`File ${file} does not exist`);\n }\n if (env.VERBOSE) {\n const s = file.split(\"/\").slice(-3).join(\"/\");\n console.log(`Trying Chrome (at ${s}) cookie ${name} for domain ${domain}`);\n }\n let sql;\n //language=SQL\n sql = \"SELECT encrypted_value, name, host_key FROM cookies\";\n const wildcardRegexp = /^([*%])$/i;\n const specifiedName = name.match(wildcardRegexp) == null;\n const specifiedDomain = domain.match(wildcardRegexp) == null;\n if (specifiedName || specifiedDomain) {\n sql += ` WHERE `;\n if (specifiedName) {\n sql += `name = '${name}'`;\n if (specifiedDomain) {\n sql += ` AND `;\n }\n }\n if (specifiedDomain) {\n sql += `host_key LIKE '${domain}';`;\n }\n }\n return doSqliteQuery1({\n file: file,\n sql: sql,\n rowTransform: (row) => {\n return {\n domain: row[\"host_key\"],\n name: row[\"name\"],\n value: row[\"encrypted_value\"],\n };\n },\n });\n}\n\nasync function getChromePassword(): Promise<string> {\n return execSimple(\n 'security find-generic-password -w -s \"Chrome Safe Storage\"'\n );\n}\n\nasync function decrypt(\n password: crypto.BinaryLike,\n encryptedData: Buffer\n): Promise<string> {\n if (typeof password !== \"string\") {\n throw new Error(\"password must be a string: \" + password);\n }\n let encryptedData1: any;\n encryptedData1 = encryptedData;\n if (encryptedData1 == null || typeof encryptedData1 !== \"object\") {\n throw new Error(\"encryptedData must be a object: \" + encryptedData1);\n }\n if (!(encryptedData1 instanceof Buffer)) {\n if (Array.isArray(encryptedData1) && encryptedData1[0] instanceof Buffer) {\n [encryptedData1] = encryptedData1;\n if (env.VERBOSE) {\n console.log(\n `encryptedData is an array of buffers, selected first: ${encryptedData1}`\n );\n }\n } else {\n throw new Error(\"encryptedData must be a Buffer: \" + encryptedData1);\n }\n encryptedData1 = Buffer.from(encryptedData1);\n }\n if (env.VERBOSE) {\n console.log(`Trying to decrypt with password ${password}`);\n }\n return new Promise((resolve, reject) => {\n crypto.pbkdf2(password, \"saltysalt\", 1003, 16, \"sha1\", (error, buffer) => {\n try {\n if (error) {\n if (env.VERBOSE) {\n console.log(\"Error doing pbkdf2\", error);\n }\n reject(error);\n return;\n }\n\n if (buffer.length !== 16) {\n if (env.VERBOSE) {\n console.log(\n \"Error doing pbkdf2, buffer length is not 16\",\n buffer.length\n );\n }\n reject(new Error(\"Buffer length is not 16\"));\n return;\n }\n\n const str = new Array(17).join(\" \");\n const iv = Buffer.from(str, \"binary\");\n const decipher = crypto.createDecipheriv(\"aes-128-cbc\", buffer, iv);\n decipher.setAutoPadding(false);\n\n if (encryptedData1 && encryptedData1.slice) {\n encryptedData1 = encryptedData1.slice(3);\n }\n\n if (encryptedData1.length % 16 !== 0) {\n if (env.VERBOSE) {\n console.log(\n \"Error doing pbkdf2, encryptedData length is not a multiple of 16\",\n encryptedData1.length\n );\n }\n reject(new Error(\"encryptedData length is not a multiple of 16\"));\n return;\n }\n\n let decoded = decipher.update(encryptedData1);\n try {\n decipher.final(\"utf-8\");\n } catch (e) {\n if (env.VERBOSE) {\n console.log(\"Error doing decipher.final()\", e);\n }\n reject(e);\n return;\n }\n\n const padding = decoded[decoded.length - 1];\n if (padding) {\n decoded = decoded.slice(0, 0 - padding);\n }\n // noinspection JSCheckFunctionSignatures\n const decodedString = decoded.toString(\"utf8\");\n resolve(decodedString);\n } catch (e) {\n reject(e);\n }\n });\n });\n}\n","import { CookieSpec } from \"./CookieSpec\";\n\nexport function specialCases({ name, domain }: CookieSpec): {\n specifiedName: boolean;\n specifiedDomain: boolean;\n //\n} {\n const wildcardRegexp = /^([*%])$/i;\n return {\n specifiedName: name.match(wildcardRegexp) == null,\n specifiedDomain: domain.match(wildcardRegexp) == null,\n //\n };\n}\n","import * as path from \"path\";\nimport CookieQueryStrategy from \"./CookieQueryStrategy\";\nimport { env, HOME } from \"../global\";\nimport { existsSync } from \"fs\";\nimport { findAllFiles } from \"../findAllFiles\";\nimport { doSqliteQuery1 } from \"../doSqliteQuery1\";\nimport { ExportedCookie } from \"../ExportedCookie\";\nimport { CookieRow } from \"../CookieRow\";\nimport { CookieSpec } from \"../CookieSpec\";\nimport { specialCases } from \"../SpecialCases\";\n\nexport default class FirefoxCookieQueryStrategy implements CookieQueryStrategy {\n async queryCookies(name: string, domain: string): Promise<ExportedCookie[]> {\n if (process.platform !== \"darwin\") {\n throw new Error(\"This only works on macOS\");\n }\n if (env.CHROME_ONLY) {\n return [];\n }\n const cookies = await this.#getFirefoxCookie({ name, domain });\n if (Array.isArray(cookies)) {\n return cookies.map((cookie: CookieRow) => {\n return {\n domain: cookie.domain,\n name: cookie.name,\n value: cookie.value.toString(\"utf8\"),\n };\n });\n } else {\n return [];\n }\n }\n\n async #getFirefoxCookie(\n { name, domain }: CookieSpec //\n ) {\n const files: string[] = await findAllFiles({\n path: path.join(\n HOME,\n \"Library\",\n \"Application Support\",\n \"Firefox\",\n \"Profiles\"\n ),\n name: \"cookies.sqlite\",\n });\n const fn: (file: string) => Promise<CookieRow[]> = async (file: string) => {\n return await this.#queryCookiesDb(file, name, domain);\n };\n const all: Awaited<CookieRow[]>[] = await Promise.all(files.map(fn));\n return all.flat();\n }\n\n async #queryCookiesDb(\n file: string,\n name: string,\n domain: string\n ): Promise<CookieRow[]> {\n if (file && !existsSync(file)) {\n throw new Error(`File ${file} does not exist`);\n }\n let sql;\n //language=SQL\n sql = \"SELECT value, name, host FROM moz_cookies\";\n const { specifiedName, specifiedDomain } = specialCases({ name, domain });\n if (specifiedName || specifiedDomain) {\n sql += ` WHERE `;\n if (specifiedName) {\n sql += `name = '${name}'`;\n if (specifiedDomain) {\n sql += ` AND `;\n }\n }\n if (specifiedDomain) {\n sql += `host LIKE '${domain}';`;\n }\n }\n const rowTransform = (row: any) => {\n // row is object key by column name\n const value = row.value as string;\n return {\n domain: row.domain as string,\n name: row.name as string,\n value: Buffer.from(value, \"utf8\"),\n };\n };\n try {\n return await doSqliteQuery1({\n file,\n sql,\n rowTransform,\n });\n } catch (e) {\n console.error(`Error querying ${file}`, e);\n return [];\n }\n }\n}\n","import CookieQueryStrategy from \"./CookieQueryStrategy\";\nimport { ExportedCookie } from \"../ExportedCookie\";\n\nexport default class SafariCookieQueryStrategy implements CookieQueryStrategy {\n async queryCookies(name: string, domain: string): Promise<ExportedCookie[]> {\n return [];\n }\n}\n","import ChromeCookieQueryStrategy from \"./ChromeCookieQueryStrategy\";\nimport FirefoxCookieQueryStrategy from \"./FirefoxCookieQueryStrategy\";\nimport SafariCookieQueryStrategy from \"./SafariCookieQueryStrategy\";\nimport CookieQueryStrategy from \"./CookieQueryStrategy\";\nimport { ExportedCookie } from \"../ExportedCookie\";\nimport LRUCache from \"lru-cache\";\n\nconst cache = new LRUCache<string, ExportedCookie[]>({\n ttl: 1000 * 2,\n max: 10,\n});\n\nexport default class CompositeCookieQueryStrategy\n implements CookieQueryStrategy\n{\n #strategies;\n\n constructor() {\n this.#strategies = [\n ChromeCookieQueryStrategy,\n FirefoxCookieQueryStrategy,\n SafariCookieQueryStrategy,\n ].map((strategy) => {\n return new strategy();\n });\n }\n\n async queryCookies(name: string, domain: string): Promise<ExportedCookie[]> {\n const key = `${name}:${domain}`;\n const cached = cache.get(key);\n if (cached) {\n return cached;\n }\n const results = await Promise.all(\n this.#strategies.map(async (strategy) => {\n // @ts-ignore\n const cookies: Promise<ExportedCookie[]> = strategy.queryCookies(\n name,\n domain\n );\n return cookies.catch(() => []);\n })\n );\n const flat: ExportedCookie[] = results.flat();\n cache.set(`${name}:${domain}`, flat);\n return flat;\n }\n}\n","import jsonwebtoken, { JwtPayload } from \"jsonwebtoken\";\nimport { env } from \"./global\";\n\nexport default function isValidJwt(token: any) {\n try {\n const result = jsonwebtoken.decode(token, { complete: true });\n if (env.VERBOSE) {\n console.log(result);\n }\n const payload: JwtPayload = result?.payload as JwtPayload;\n if (payload) {\n const exp = payload.exp;\n if (exp) {\n const now = new Date().getTime() / 1000;\n if (now > exp) {\n return false;\n }\n }\n }\n return true;\n } catch (err) {\n return false;\n }\n}\n","import { env } from \"./global\";\nimport { uniqBy } from \"lodash\";\nimport CompositeCookieQueryStrategy from \"./browsers/CompositeCookieQueryStrategy\";\nimport CookieQueryStrategy from \"./browsers/CookieQueryStrategy\";\nimport isValidJwt from \"./isValidJwt\";\nimport { CookieSpec } from \"./CookieSpec\";\nimport { ExportedCookie } from \"./ExportedCookie\";\n\nexport async function queryCookies(\n { name, domain }: CookieSpec,\n strategy: CookieQueryStrategy = new CompositeCookieQueryStrategy()\n) {\n const results: ExportedCookie[] = await strategy.queryCookies(name, domain);\n const results1: ExportedCookie[] = uniqBy(results, JSON.stringify);\n const jwtCookies = [];\n for (const result of results1) {\n const value = result.value;\n if (isValidJwt(value)) {\n jwtCookies.push(result);\n }\n }\n const resultsUniq = env.REQUIRE_JWT ? jwtCookies : results1;\n return env.SINGLE ? [resultsUniq[0]] : resultsUniq;\n}\n","import * as tty from \"tty\"\n\nconst {\n env = {},\n argv = [],\n platform = \"\",\n} = typeof process === \"undefined\" ? {} : process\n\nconst isDisabled = \"NO_COLOR\" in env || argv.includes(\"--no-color\")\nconst isForced = \"FORCE_COLOR\" in env || argv.includes(\"--color\")\nconst isWindows = platform === \"win32\"\nconst isDumbTerminal = env.TERM === \"dumb\"\n\nconst isCompatibleTerminal =\n tty && tty.isatty && tty.isatty(1) && env.TERM && !isDumbTerminal\n\nconst isCI =\n \"CI\" in env &&\n (\"GITHUB_ACTIONS\" in env || \"GITLAB_CI\" in env || \"CIRCLECI\" in env)\n\nexport const isColorSupported =\n !isDisabled &&\n (isForced || (isWindows && !isDumbTerminal) || isCompatibleTerminal || isCI)\n\nconst replaceClose = (\n index,\n string,\n close,\n replace,\n head = string.substring(0, index) + replace,\n tail = string.substring(index + close.length),\n next = tail.indexOf(close)\n) => head + (next < 0 ? tail : replaceClose(next, tail, close, replace))\n\nconst clearBleed = (index, string, open, close, replace) =>\n index < 0\n ? open + string + close\n : open + replaceClose(index, string, close, replace) + close\n\nconst filterEmpty =\n (open, close, replace = open, at = open.length + 1) =>\n (string) =>\n string || !(string === \"\" || string === undefined)\n ? clearBleed(\n (\"\" + string).indexOf(close, at),\n string,\n open,\n close,\n replace\n )\n : \"\"\n\nconst init = (open, close, replace) =>\n filterEmpty(`\\x1b[${open}m`, `\\x1b[${close}m`, replace)\n\nconst colors = {\n reset: init(0, 0),\n bold: init(1, 22, \"\\x1b[22m\\x1b[1m\"),\n dim: init(2, 22, \"\\x1b[22m\\x1b[2m\"),\n italic: init(3, 23),\n underline: init(4, 24),\n inverse: init(7, 27),\n hidden: init(8, 28),\n strikethrough: init(9, 29),\n black: init(30, 39),\n red: init(31, 39),\n green: init(32, 39),\n yellow: init(33, 39),\n blue: init(34, 39),\n magenta: init(35, 39),\n cyan: init(36, 39),\n white: init(37, 39),\n gray: init(90, 39),\n bgBlack: init(40, 49),\n bgRed: init(41, 49),\n bgGreen: init(42, 49),\n bgYellow: init(43, 49),\n bgBlue: init(44, 49),\n bgMagenta: init(45, 49),\n bgCyan: init(46, 49),\n bgWhite: init(47, 49),\n blackBright: init(90, 39),\n redBright: init(91, 39),\n greenBright: init(92, 39),\n yellowBright: init(93, 39),\n blueBright: init(94, 39),\n magentaBright: init(95, 39),\n cyanBright: init(96, 39),\n whiteBright: init(97, 39),\n bgBlackBright: init(100, 49),\n bgRedBright: init(101, 49),\n bgGreenBright: init(102, 49),\n bgYellowBright: init(103, 49),\n bgBlueBright: init(104, 49),\n bgMagentaBright: init(105, 49),\n bgCyanBright: init(106, 49),\n bgWhiteBright: init(107, 49),\n}\n\nexport const createColors = ({ useColor = isColorSupported } = {}) =>\n useColor\n ? colors\n : Object.keys(colors).reduce(\n (colors, key) => ({ ...colors, [key]: String }),\n {}\n )\n\nexport const {\n reset,\n bold,\n dim,\n italic,\n underline,\n inverse,\n hidden,\n strikethrough,\n black,\n red,\n green,\n yellow,\n blue,\n magenta,\n cyan,\n white,\n gray,\n bgBlack,\n bgRed,\n bgGreen,\n bgYellow,\n bgBlue,\n bgMagenta,\n bgCyan,\n bgWhite,\n blackBright,\n redBright,\n greenBright,\n yellowBright,\n blueBright,\n magentaBright,\n cyanBright,\n whiteBright,\n bgBlackBright,\n bgRedBright,\n bgGreenBright,\n bgYellowBright,\n bgBlueBright,\n bgMagentaBright,\n bgCyanBright,\n bgWhiteBright,\n} = createColors()\n","import { uniqBy } from \"lodash\";\nimport { ExportedCookie } from \"./ExportedCookie\";\n\nexport function resultsRendered(results: ExportedCookie[]) {\n return uniqBy(results, (r) => r.name)\n .map((r) => r.name + \"=\" + r.value)\n .join(\"; \");\n}\n","import { queryCookies } from \"./queryCookies\";\nimport CompositeCookieQueryStrategy from \"./browsers/CompositeCookieQueryStrategy\";\nimport { groupBy } from \"lodash\";\nimport { resultsRendered } from \"./resultsRendered\";\nimport { CookieSpec } from \"./CookieSpec\";\nimport { ExportedCookie } from \"./ExportedCookie\";\n\nexport async function getGroupedRenderedCookies(\n //\n {\n name,\n domain,\n }: //\n CookieSpec\n): //\nPromise<string[]> {\n const cookies: ExportedCookie[] = await queryCookies(\n { name, domain },\n new CompositeCookieQueryStrategy()\n //\n );\n if (Array.isArray(cookies) && cookies.length > 0) {\n const results: ExportedCookie[] = await queryCookies({ name, domain });\n const groupedByFile = groupBy(results, (r) => r.meta?.file);\n return Object.keys(groupedByFile).map((file: string) => {\n const results: ExportedCookie[] = groupedByFile[file];\n return resultsRendered(results);\n });\n } else {\n throw new Error(\"Cookie not found\");\n }\n}\n","// noinspection JSUnusedGlobalSymbols\n\nimport { fetch } from \"cross-fetch\";\nimport { merge } from \"lodash\";\n// noinspection SpellCheckingInspection\nimport destr from \"destr\";\nimport FetchResponse from \"./FetchResponse\";\nimport { getGroupedRenderedCookies } from \"./getGroupedRenderedCookies\";\n\nexport async function fetchWithCookies(\n url: RequestInfo | URL,\n options: RequestInit | undefined = {}\n): Promise<FetchResponse> {\n const defaultOptions: RequestInit = {\n headers: {\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36\",\n },\n redirect: \"manual\",\n };\n const url2: string = `${url}`;\n const url1: URL = new URL(url2);\n const domain = url1.hostname.replace(/^.*(\\.\\w+\\.\\w+)$/, (match, p1) => {\n return `%${p1}`;\n });\n const cookies: string[] = await getGroupedRenderedCookies({\n name: \"%\",\n domain: domain,\n }).catch(() => []);\n const cookie = cookies.pop();\n const newOptions1: RequestInit = merge(defaultOptions, options, {\n headers: {\n Cookie: cookie,\n },\n });\n try {\n const res: Response = await fetch(url2, newOptions1);\n const newUrl = res.headers.get(\"location\") as string;\n if (res.redirected || (newUrl && newUrl !== url2)) {\n return fetchWithCookies(newUrl, newOptions1);\n }\n const arrayBuffer1 = res.arrayBuffer();\n const arrayBuffer = async () => arrayBuffer1;\n const buffer = async () => arrayBuffer().then(Buffer.from);\n const text = async () => buffer().then((buffer) => buffer.toString(\"utf8\"));\n const json = async () => text().then(destr);\n const formData = async () =>\n text().then((text) => new URLSearchParams(text));\n const source2 = {\n status: res.status,\n statusText: res.statusText,\n headers: res.headers,\n arrayBuffer,\n buffer,\n text,\n json,\n formData,\n //\n };\n return merge({}, res, source2);\n } catch (e) {\n throw e;\n }\n}\n","export function unpackHeaders(headerArgs: string[] | string) {\n const headers: any = {};\n if (Array.isArray(headerArgs)) {\n for (const h of headerArgs) {\n const [key, value] = h.split(\"=\");\n headers[key] = value;\n }\n } else {\n const [key, value] = headerArgs.split(\"=\");\n headers[key] = value;\n }\n return headers;\n}\n","#!/usr/bin/env node\n\nimport minimist from \"minimist\";\nimport { argv } from \"./argv\";\nimport { env } from \"./global\";\nimport { queryCookies } from \"./queryCookies\";\nimport { groupBy } from \"lodash\";\nimport { green, yellow } from \"colorette\";\nimport { resultsRendered } from \"./resultsRendered\";\nimport { fetchWithCookies } from \"./fetchWithCookies\";\nimport { unpackHeaders } from \"./unpackHeaders\";\n\nconst parsedArgs: minimist.ParsedArgs = minimist(argv);\n\nasync function cliQueryCookies(name: string, domain: string) {\n try {\n const results = await queryCookies({ name, domain });\n if (results.length > 0) {\n if (argv.includes(\"--combined-string\")) {\n console.log(yellow(resultsRendered(results)));\n } else if (argv.includes(\"--render\") || argv.includes(\"-r\")) {\n console.log(yellow(resultsRendered(results)));\n } else if (argv.includes(\"--dump\") || argv.includes(\"-d\")) {\n console.log(results);\n } else if (argv.includes(\"--dump-grouped\")) {\n const groupedByFile = groupBy(results, (r) => r.meta?.file);\n console.log(green(JSON.stringify(groupedByFile, null, 2)));\n } else if (argv.includes(\"--combined-string-grouped\")) {\n const groupedByFile = groupBy(results, (r) => r.meta?.file);\n for (const file of Object.keys(groupedByFile)) {\n let results = groupedByFile[file];\n console.log(green(file) + \": \", yellow(resultsRendered(results)));\n }\n } else {\n for (const result of results) {\n console.log(result.value);\n }\n }\n } else {\n console.error(\"No results\");\n }\n } catch (e) {\n console.error(e);\n }\n}\n\nfunction main() {\n if (argv && argv.length > 2) {\n const arg2 = argv[2];\n const arg3 = argv[3];\n if (arg2 == \"--fetch\" || arg2 == \"-f\") {\n const f = parsedArgs[\"f\"];\n let url: URL;\n try {\n url = new URL(f);\n } catch (e) {\n console.error(\"Invalid URL\", arg3);\n return;\n }\n const headerArgs: string[] | string = parsedArgs[\"H\"];\n const headers = unpackHeaders(headerArgs);\n const onfulfilled = (res: Response) => {\n return res.text().then((r) => {\n console.log(r);\n });\n };\n fetchWithCookies(\n url,\n {\n //\n headers,\n }\n //\n ).then(\n onfulfilled,\n console.error\n //\n );\n return;\n }\n let domain;\n if (arg3 != null && arg3.indexOf(\".\") > -1) {\n domain = arg3;\n } else {\n domain = \"%\";\n }\n\n const tru = `${true}`;\n\n if (argv.includes(\"--require-jwt\")) {\n env.REQUIRE_JWT = tru;\n }\n if (argv.includes(\"--verbose\")) {\n env.VERBOSE = tru;\n }\n if (argv.includes(\"--chrome-only\")) {\n env.CHROME_ONLY = tru;\n }\n if (argv.includes(\"--firefox-only\")) {\n env.FIREFOX_ONLY = tru;\n }\n if (argv.includes(\"--ignore-expired\")) {\n env.IGNORE_EXPIRED = tru;\n }\n\n if (argv.includes(\"--single\")) {\n env.SINGLE = tru;\n }\n\n if (env.VERBOSE) {\n console.log(\"Verbose mode\", argv);\n }\n\n cliQueryCookies(arg2, domain).catch(console.error);\n }\n}\n\nmain();\n"],"names":["$79b52b72feab5f10$export$6f4ae1207c703045","process","argv","$46d5f952bbf1ad16$export$a7b6bc01c63cdfc3","$3GcJY$lodash","merge","env","$46d5f952bbf1ad16$export$a7c5707626fc90f","Error","async","$08b2542d46c201fb$export$8d71c74f97c0202e","command","Promise","resolve","reject","$3GcJY$child_process","exec","encoding","maxBuffer","error","stdout","stderr","trim","$50e620a43f85291a$export$2c9faf86071156ae","path","name","maxDepth","rootSegments","split","length","VERBOSE","console","log","files","readdirSync","$3GcJY$fs","e","file","filePath","stat","statSync","e1","isDirectory","subFiles","push","e2","$f5dd4d62c4c3f3b4$export$f19f611d1fa7c6f3","sql","rowTransform","existsSync","db","$3GcJY$sqlite3","Database","all","err","rows","rows1","Array","isArray","cookieRows","map","row","newVar","meta","cookieRow","JSON","stringify","$f10944b6cece07ca$export$bc926c43858bd3cb","obj","undefined","domain","value","$7ce825379b0eda98$export$963c8d651337e4a4","$d96ea452b1675522$export$2e2bcd8739ae039","platform","FIREFOX_ONLY","requireJwt","encryptedDataItems","promises","$d96ea452b1675522$var$chromeLocal","$3GcJY$path","join","s","slice","wildcardRegexp","specifiedName","match","specifiedDomain","$d96ea452b1675522$var$getEncryptedChromeCookie","$d96ea452b1675522$var$getPromise1","flat","filter","$d96ea452b1675522$var$getPromise","password","$d96ea452b1675522$var$getChromePassword","decrypted","encryptedValue","decryptedValue","d","encryptedData","encryptedData1","Buffer","from","$3GcJY$crypto","pbkdf2","buffer","str","iv","decipher","createDecipheriv","setAutoPadding","decoded","update","final","padding","decodedString","toString","$d96ea452b1675522$var$decrypt","$d96ea452b1675522$var$decryptValue","results","$d96ea452b1675522$var$getChromeCookies","$86f3edf820a44c89$export$da22813e5a2ec500","$009bb4f99042a7e5$export$2e2bcd8739ae039","CHROME_ONLY","cookies","this","getFirefoxCookie","cookie","queryCookiesDb","name1","domain1","$1f4fc383cc585db2$export$2e2bcd8739ae039","$47b6161e24f245f2$var$cache","$parcel$interopDefault","$3GcJY$lrucache","ttl","max","$47b6161e24f245f2$export$2e2bcd8739ae039","strategies","constructor","strategy","key","cached","get","queryCookies","catch","set","$fde20152a1eed49d$export$2e2bcd8739ae039","token","result","$3GcJY$jsonwebtoken","decode","complete","payload","exp","Date","getTime","$78f2a40e25ad1e6b$export$e6d428437cf2cacb","results1","uniqBy","jwtCookies","resultsUniq","REQUIRE_JWT","SINGLE","$46332c16e7a967a5$var$env","$46332c16e7a967a5$var$argv","$46332c16e7a967a5$var$platform","$46332c16e7a967a5$var$isDisabled","includes","$46332c16e7a967a5$var$isForced","$46332c16e7a967a5$var$isWindows","$46332c16e7a967a5$var$isDumbTerminal","TERM","$46332c16e7a967a5$var$isCompatibleTerminal","$3GcJY$tty","isatty","$46332c16e7a967a5$export$ba7eaac21c385de8","$46332c16e7a967a5$var$replaceClose","index","string","close","replace","head","substring","tail","next","indexOf","$46332c16e7a967a5$var$filterEmpty","open","at","$46332c16e7a967a5$var$clearBleed","$46332c16e7a967a5$var$init","$46332c16e7a967a5$var$colors","reset","bold","dim","italic","underline","inverse","hidden","strikethrough","black","red","green","yellow","blue","magenta","cyan","white","gray","bgBlack","bgRed","bgGreen","bgYellow","bgBlue","bgMagenta","bgCyan","bgWhite","blackBright","redBright","greenBright","yellowBright","blueBright","magentaBright","cyanBright","whiteBright","bgBlackBright","bgRedBright","bgGreenBright","bgYellowBright","bgBlueBright","bgMagentaBright","bgCyanBright","bgWhiteBright","$46332c16e7a967a5$export$aad8462122ac592b","$46332c16e7a967a5$export$73ba5813cda80a49","$46332c16e7a967a5$export$c96e90b4bcb7d4ca","$46332c16e7a967a5$export$5540da1282cbf565","$46332c16e7a967a5$export$425327af25286e5e","$46332c16e7a967a5$export$70ae2c07e401031b","$46332c16e7a967a5$export$73920f18ca706874","$46332c16e7a967a5$export$19426ff118fe8be","$46332c16e7a967a5$export$c073df10e766abfa","$46332c16e7a967a5$export$a90204d1394caf30","$46332c16e7a967a5$export$955a2ebd2fb142ae","$46332c16e7a967a5$export$594c5a8758200c32","$46332c16e7a967a5$export$2aa0182783e7e9de","$46332c16e7a967a5$export$2a9ca2e383622e18","$46332c16e7a967a5$export$7474046f446842ee","$46332c16e7a967a5$export$8fa4e5556fd77a60","$46332c16e7a967a5$export$3e2c219d3ab79d01","$46332c16e7a967a5$export$a91ca5b79f5fb26c","$46332c16e7a967a5$export$74a89e4512e7c91","$46332c16e7a967a5$export$8137d14243d019b3","$46332c16e7a967a5$export$3d3dcf8beff00fe1","$46332c16e7a967a5$export$ec69fb4048854b4","$46332c16e7a967a5$export$76507b7995de3038","$46332c16e7a967a5$export$1b1236a85ae1b824","$46332c16e7a967a5$export$2fbae6ef3123e0b0","$46332c16e7a967a5$export$c442bbc3ef058f3e","$46332c16e7a967a5$export$6f940151fac4d6e4","$46332c16e7a967a5$export$9e103086f7204459","$46332c16e7a967a5$export$106f17ac3545b17c","$46332c16e7a967a5$export$7aa4c9ef25eb1086","$46332c16e7a967a5$export$76b6abffe88e3179","$46332c16e7a967a5$export$c609d1d25ac1cc71","$46332c16e7a967a5$export$38b81c3a7de495d7","$46332c16e7a967a5$export$5c9c56f63b47e15b","$46332c16e7a967a5$export$26735259ab854b4f","$46332c16e7a967a5$export$d5483c19744b2fc2","$46332c16e7a967a5$export$f8c17ad4aac14a99","$46332c16e7a967a5$export$6038eb5fdc315c12","$46332c16e7a967a5$export$41148066f4812842","$46332c16e7a967a5$export$eb0dc7973d30eea7","$46332c16e7a967a5$export$fde769fa8262c0d6","useColor","Object","keys","reduce","colors","String","$46332c16e7a967a5$export$fc3cc093e161d064","$8c51a9568358068a$export$9abc0a414b0d8b8f","r","$42489cc4719fb671$export$4d2e9997e2c23417","groupedByFile","groupBy","$49fe7f29d6958c11$export$b24a545a0b39f491","url","options","url2","URL","hostname","p1","pop","newOptions1","headers","redirect","Cookie","res","$3GcJY$crossfetch","fetch","newUrl","redirected","arrayBuffer1","arrayBuffer","then","text","json","$3GcJY$destr","formData","URLSearchParams","source2","status","statusText","$4920553fb81d91cb$export$e7dabf85f0a9f9c","headerArgs","h","key1","value1","$2a211dfb3a4f388f$var$parsedArgs","$3GcJY$minimist","arg2","arg3","f","onfulfilled","tru","IGNORE_EXPIRED","groupedByFile1","$2a211dfb3a4f388f$var$cliQueryCookies","$2a211dfb3a4f388f$var$main"],"version":3,"file":"cli.js.map","sourceRoot":"../"}
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  var $7oI3p$lodash = require("lodash");
3
+ var $7oI3p$lrucache = require("lru-cache");
3
4
  var $7oI3p$fs = require("fs");
4
5
  var $7oI3p$crypto = require("crypto");
5
6
  var $7oI3p$path = require("path");
@@ -38,9 +39,8 @@ $parcel$export(module.exports, "getChromeCookie", () => $cd1ba0160120c006$export
38
39
  $parcel$export(module.exports, "getGroupedRenderedCookies", () => $300d8b33187a203c$export$4d2e9997e2c23417);
39
40
  $parcel$export(module.exports, "fetchWithCookies", () => $cfc07ae4aa2c7e44$export$b24a545a0b39f491);
40
41
 
41
- var $fac425c10fbbada5$require$merge = $7oI3p$lodash.merge;
42
42
  const $fac425c10fbbada5$export$a7b6bc01c63cdfc3 = {};
43
- $fac425c10fbbada5$require$merge($fac425c10fbbada5$export$a7b6bc01c63cdfc3, process.env);
43
+ (0, $7oI3p$lodash.merge)($fac425c10fbbada5$export$a7b6bc01c63cdfc3, process.env);
44
44
  const $fac425c10fbbada5$export$a7c5707626fc90f = $fac425c10fbbada5$export$a7b6bc01c63cdfc3["HOME"];
45
45
  if (!$fac425c10fbbada5$export$a7c5707626fc90f) throw new Error("HOME environment variable is not set");
46
46
 
@@ -132,8 +132,9 @@ async function $e62c2c56eb720f29$export$2c9faf86071156ae({ path: path , name: na
132
132
 
133
133
 
134
134
 
135
- async function $a085b524d8ee9fce$export$f19f611d1fa7c6f3(file, sql) {
136
- if (!$7oI3p$fs.existsSync(file)) throw new Error(`doSqliteQuery1: file ${file} does not exist`);
135
+
136
+ async function $a085b524d8ee9fce$export$f19f611d1fa7c6f3({ file: file , sql: sql , rowTransform: rowTransform }) {
137
+ if (!file || file && !$7oI3p$fs.existsSync(file)) throw new Error(`doSqliteQuery1: file ${file} does not exist`);
137
138
  const db = new $7oI3p$sqlite3.Database(file);
138
139
  return new Promise((resolve, reject)=>{
139
140
  db.all(sql, (err, rows)=>{
@@ -148,14 +149,13 @@ async function $a085b524d8ee9fce$export$f19f611d1fa7c6f3(file, sql) {
148
149
  }
149
150
  if (Array.isArray(rows1)) {
150
151
  const cookieRows = rows1.map((row)=>{
151
- return {
152
- domain: row["host_key"],
153
- name: row["name"],
154
- value: row["encrypted_value"],
152
+ const newVar = {
155
153
  meta: {
156
154
  file: file
157
155
  }
158
156
  };
157
+ const cookieRow = rowTransform(row);
158
+ return (0, $7oI3p$lodash.merge)(newVar, cookieRow);
159
159
  });
160
160
  resolve(cookieRows);
161
161
  return;
@@ -254,7 +254,8 @@ async function $269fe42bfd555305$var$getEncryptedChromeCookie({ name: name , dom
254
254
  console.log(`Trying Chrome (at ${s}) cookie ${name} for domain ${domain}`);
255
255
  }
256
256
  let sql;
257
- sql = `SELECT encrypted_value, name, host_key FROM cookies`;
257
+ //language=SQL
258
+ sql = "SELECT encrypted_value, name, host_key FROM cookies";
258
259
  const wildcardRegexp = /^([*%])$/i;
259
260
  const specifiedName = name.match(wildcardRegexp) == null;
260
261
  const specifiedDomain = domain.match(wildcardRegexp) == null;
@@ -266,7 +267,17 @@ async function $269fe42bfd555305$var$getEncryptedChromeCookie({ name: name , dom
266
267
  }
267
268
  if (specifiedDomain) sql += `host_key LIKE '${domain}';`;
268
269
  }
269
- return (0, $a085b524d8ee9fce$export$f19f611d1fa7c6f3)(file, sql);
270
+ return (0, $a085b524d8ee9fce$export$f19f611d1fa7c6f3)({
271
+ file: file,
272
+ sql: sql,
273
+ rowTransform: (row)=>{
274
+ return {
275
+ domain: row["host_key"],
276
+ name: row["name"],
277
+ value: row["encrypted_value"]
278
+ };
279
+ }
280
+ });
270
281
  }
271
282
  async function $269fe42bfd555305$var$getChromePassword() {
272
283
  return (0, $25b78d6746d4ad48$export$8d71c74f97c0202e)('security find-generic-password -w -s "Chrome Safe Storage"');
@@ -333,6 +344,14 @@ async function $269fe42bfd555305$var$decrypt(password, encryptedData) {
333
344
 
334
345
 
335
346
 
347
+ function $b744d19cc39f964e$export$da22813e5a2ec500({ name: name , domain: domain }) {
348
+ const wildcardRegexp = /^([*%])$/i;
349
+ return {
350
+ specifiedName: name.match(wildcardRegexp) == null,
351
+ specifiedDomain: domain.match(wildcardRegexp) == null
352
+ };
353
+ }
354
+
336
355
 
337
356
  class $7bb7da9a77b2fd99$export$2e2bcd8739ae039 {
338
357
  async queryCookies(name, domain) {
@@ -342,47 +361,63 @@ class $7bb7da9a77b2fd99$export$2e2bcd8739ae039 {
342
361
  name: name,
343
362
  domain: domain
344
363
  });
345
- return Array.isArray(cookies) ? cookies.map((0, $25b78d6746d4ad48$export$d53bf2de587a369)) : [];
364
+ if (Array.isArray(cookies)) return cookies.map((cookie)=>{
365
+ return {
366
+ domain: cookie.domain,
367
+ name: cookie.name,
368
+ value: cookie.value.toString("utf8")
369
+ };
370
+ });
371
+ else return [];
346
372
  }
347
- /**
348
- *
349
- * @param name
350
- * @param domain
351
- * @returns {Promise<Buffer>}
352
- */ async #getFirefoxCookie(//
353
- { name: name , domain: domain }) {
373
+ async #getFirefoxCookie({ name: name , domain: domain } //
374
+ ) {
354
375
  const files = await (0, $e62c2c56eb720f29$export$2c9faf86071156ae)({
355
376
  path: $7oI3p$path.join((0, $fac425c10fbbada5$export$a7c5707626fc90f), "Library", "Application Support", "Firefox", "Profiles"),
356
377
  name: "cookies.sqlite"
357
378
  });
358
- const all = await Promise.all(files.map((file)=>{
359
- return this.#queryCookiesDb(file, name, domain);
360
- }));
379
+ const fn = async (file)=>{
380
+ return await this.#queryCookiesDb(file, name, domain);
381
+ };
382
+ const all = await Promise.all(files.map(fn));
361
383
  return all.flat();
362
384
  }
363
- #queryCookiesDb(file, name1, domain1) {
385
+ async #queryCookiesDb(file, name1, domain1) {
364
386
  if (file && !(0, $7oI3p$fs.existsSync)(file)) throw new Error(`File ${file} does not exist`);
365
- if ((0, $fac425c10fbbada5$export$a7b6bc01c63cdfc3).VERBOSE) console.log(`Trying Firefox cookie ${name1} for domain ${domain1}`);
366
387
  let sql;
367
388
  //language=SQL
368
- sql = "SELECT value FROM moz_cookies";
369
- if (typeof name1 === "string" || typeof domain1 === "string") {
389
+ sql = "SELECT value, name, host FROM moz_cookies";
390
+ const { specifiedName: specifiedName , specifiedDomain: specifiedDomain } = (0, $b744d19cc39f964e$export$da22813e5a2ec500)({
391
+ name: name1,
392
+ domain: domain1
393
+ });
394
+ if (specifiedName || specifiedDomain) {
370
395
  sql += ` WHERE `;
371
- if (typeof name1 === "string") {
396
+ if (specifiedName) {
372
397
  sql += `name = '${name1}'`;
373
- if (typeof domain1 === "string") sql += ` AND `;
398
+ if (specifiedDomain) sql += ` AND `;
374
399
  }
375
- if (typeof domain1 === "string") sql += `host LIKE '${domain1}';`;
400
+ if (specifiedDomain) sql += `host LIKE '${domain1}';`;
376
401
  }
377
- return (0, $a085b524d8ee9fce$export$f19f611d1fa7c6f3)(file, sql).then((rows)=>{
378
- return rows.map((row)=>{
379
- return {
380
- domain: row.domain,
381
- name: row.name,
382
- value: row.value.toString("utf8")
383
- };
402
+ const rowTransform = (row)=>{
403
+ // row is object key by column name
404
+ const value = row.value;
405
+ return {
406
+ domain: row.domain,
407
+ name: row.name,
408
+ value: Buffer.from(value, "utf8")
409
+ };
410
+ };
411
+ try {
412
+ return await (0, $a085b524d8ee9fce$export$f19f611d1fa7c6f3)({
413
+ file: file,
414
+ sql: sql,
415
+ rowTransform: rowTransform
384
416
  });
385
- }).catch(()=>[]);
417
+ } catch (e) {
418
+ console.error(`Error querying ${file}`, e);
419
+ return [];
420
+ }
386
421
  }
387
422
  }
388
423
 
@@ -394,6 +429,11 @@ class $fad6f51bd5c7bae2$export$2e2bcd8739ae039 {
394
429
  }
395
430
 
396
431
 
432
+
433
+ const $f72befa528c23ca7$var$cache = new (0, ($parcel$interopDefault($7oI3p$lrucache)))({
434
+ ttl: 2000,
435
+ max: 10
436
+ });
397
437
  class $f72befa528c23ca7$export$2e2bcd8739ae039 {
398
438
  #strategies;
399
439
  constructor(){
@@ -406,12 +446,17 @@ class $f72befa528c23ca7$export$2e2bcd8739ae039 {
406
446
  });
407
447
  }
408
448
  async queryCookies(name, domain) {
449
+ const key = `${name}:${domain}`;
450
+ const cached = $f72befa528c23ca7$var$cache.get(key);
451
+ if (cached) return cached;
409
452
  const results = await Promise.all(this.#strategies.map(async (strategy)=>{
410
453
  // @ts-ignore
411
454
  const cookies = strategy.queryCookies(name, domain);
412
455
  return cookies.catch(()=>[]);
413
456
  }));
414
- return results.flat();
457
+ const flat = results.flat();
458
+ $f72befa528c23ca7$var$cache.set(`${name}:${domain}`, flat);
459
+ return flat;
415
460
  }
416
461
  }
417
462
 
@@ -424,6 +469,14 @@ function $9a6b2ace073cf1d7$export$2e2bcd8739ae039(token) {
424
469
  complete: true
425
470
  });
426
471
  if ((0, $fac425c10fbbada5$export$a7b6bc01c63cdfc3).VERBOSE) console.log(result);
472
+ const payload = result?.payload;
473
+ if (payload) {
474
+ const exp = payload.exp;
475
+ if (exp) {
476
+ const now = new Date().getTime() / 1000;
477
+ if (now > exp) return false;
478
+ }
479
+ }
427
480
  return true;
428
481
  } catch (err) {
429
482
  return false;
@@ -497,7 +550,7 @@ async function $cfc07ae4aa2c7e44$export$b24a545a0b39f491(url, options = {}) {
497
550
  const cookies = await (0, $300d8b33187a203c$export$4d2e9997e2c23417)({
498
551
  name: "%",
499
552
  domain: domain
500
- });
553
+ }).catch(()=>[]);
501
554
  const cookie = cookies.pop();
502
555
  const newOptions1 = (0, $7oI3p$lodash.merge)(defaultOptions, options, {
503
556
  headers: {
@@ -531,7 +584,7 @@ async function $cfc07ae4aa2c7e44$export$b24a545a0b39f491(url, options = {}) {
531
584
  }
532
585
 
533
586
 
534
- var $d2b0e8c8c0378e21$exports = {};
587
+ var $d5b6386167d289d2$exports = {};
535
588
 
536
589
 
537
590
  var $3d7e27b54f670f46$exports = {};
@@ -555,8 +608,8 @@ async function $cd1ba0160120c006$export$e5637297e9eb6f2e(params) {
555
608
  if (Array.isArray(cookies) && cookies.length > 0) return cookies.find((cookie)=>cookie != null);
556
609
  else throw new Error("Cookie not found");
557
610
  }
611
+ $parcel$exportWildcard(module.exports, $d5b6386167d289d2$exports);
558
612
  $parcel$exportWildcard(module.exports, $3d7e27b54f670f46$exports);
559
- $parcel$exportWildcard(module.exports, $d2b0e8c8c0378e21$exports);
560
613
  $parcel$exportWildcard(module.exports, $6c197c88880e045c$exports);
561
614
 
562
615