@mherod/get-cookie 2.0.0-beta.3 → 2.0.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/main.js +29 -31
- package/dist/main.js.map +1 -1
- package/dist/module.js +466 -0
- package/dist/module.js.map +1 -0
- package/dist/types.d.ts +25 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +14 -7
- package/src/{argv.js → argv.ts} +0 -0
- package/src/{cli.js → cli.ts} +3 -8
- package/src/{index.js → index.ts} +3 -8
- package/src/queryCookies.ts +2 -1
package/dist/cli.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var e=require("lodash"),r=require("colorette"),o=require("fs"),n=require("crypto"),t=require("path"),i=require("child_process"),s=require("sqlite3"),l=require("jsonwebtoken");function a(e,r,o,n){Object.defineProperty(e,r,{get:o,set:n,enumerable:!0,configurable:!0})}var c="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},u={},f={},d=c.parcelRequire5c26;null==d&&((d=function(e){if(e in u)return u[e].exports;if(e in f){var r=f[e];delete f[e];var o={id:e,exports:{}};return u[e]=o,r.call(o.exports,o,o.exports),o.exports}var n=new Error("Cannot find module '"+e+"'");throw n.code="MODULE_NOT_FOUND",n}).register=function(e,r){f[e]=r},c.parcelRequire5c26=d),d.register("1rMxC",(function(o,n){var t=d("9MSW1"),i=d("55IAI"),s=d("8KrHy"),l=d("GQt56");function a(o){return(0,r.blue)((0,e.uniqBy)(o,(e=>e.name)).map((e=>e.name+"="+e.value)).join("; "))}if(l.argv&&l.argv.length>2){if(l.argv.includes("--version")||l.argv.includes("-v"))return void console.log(t.version);const o=l.argv[2];let n;n=null!=l.argv[3]&&l.argv[3].indexOf(".")>-1?l.argv[3]:"%";const c="true";l.argv.includes("--require-jwt")&&(i.env.REQUIRE_JWT=c),l.argv.includes("--verbose")&&(i.env.VERBOSE=c),l.argv.includes("--chrome-only")&&(i.env.CHROME_ONLY=c),l.argv.includes("--firefox-only")&&(i.env.FIREFOX_ONLY=c),l.argv.includes("--ignore-expired")&&(i.env.IGNORE_EXPIRED=c),l.argv.includes("--single")&&(i.env.SINGLE=c),i.env.VERBOSE&&console.log("Verbose mode",l.argv),async function(o,n){try{const t=await(0,s.queryCookies)({name:o,domain:n});if(t.length>0)if(l.argv.includes("--combined-string"))console.log(a(t));else if(l.argv.includes("--dump"))console.log(t);else if(l.argv.includes("--dump-grouped")){const o=(0,e.groupBy)(t,(e=>e.meta?.file));console.log((0,r.green)(JSON.stringify(o,null,2)))}else if(l.argv.includes("--combined-string-grouped")){const o=(0,e.groupBy)(t,(e=>e.meta?.file));for(const e of Object.keys(o)){let n=o[e];console.log((0,r.green)(e)+": ",a(n))}}else for(const e of t)console.log(e.value);else console.error("No results")}catch(e){console.error(e)}}(o,n).catch(console.error)}})),d.register("9MSW1",(function(e,r){e.exports=JSON.parse('{"name":"@mherod/get-cookie","version":"2.0.0-beta.2","description":"Node.js module for querying a local user\'s Chrome cookie","source":"src/index.js","bin":"dist/cli.js","main":"dist/main.js","module":"dist/module.js","publishConfig":{"access":"public"},"scripts":{"clean":"git clean -fXd","build":"parcel build","test":"jest","postbuild":"npm run check && npm run install:global","prepublish":"npm run build","install:global":"npm install --force --global .","postinstall:global":"find $NVM_BIN -exec chmod +x {} \\\\; || true","prettier":"prettier --write \'src/{**/*,*}.{js,json,ts}\'","check":"tsc --noEmit"},"targets":{"main":{"source":"src/index.js","distDir":"dist","engines":{"node":"16"}},"cli":{"source":"src/cli.js","distDir":"dist","engines":{"node":"16"}}},"@parcel/transformer-js":{"inlineFS":false,"inlineEnvironment":false},"engines":{"node":"16"},"keywords":[],"author":"Matthew Herod","license":"ISC","dependencies":{"colorette":"^2.0.19","jsonwebtoken":"^8.5.1","lodash":"^4.17.21","sqlite3":"^5.1.1"},"devDependencies":{"@types/jsonwebtoken":"^8.5.9","@types/lodash":"^4.14.186","@types/node":"^18.8.2","jest":"^29.0.3","parcel":"^2.7.0","prettier":"^2.7.1","ts-node":"^10.9.1","typescript":"^4.8.4"}}')})),d.register("55IAI",(function(r,o){a(r.exports,"env",(()=>t)),a(r.exports,"HOME",(()=>i));var n=e.merge;const t={};n(t,process.env);const i=t.HOME;if(!i)throw new Error("HOME environment variable is not set")})),d.register("8KrHy",(function(r,o){a(r.exports,"queryCookies",(()=>s));var n=d("iZFX3"),t=d("55IAI"),i=d("2cjYR");async function s({name:r,domain:o},s=new(0,n.default)){const l=await s.queryCookies(r,o),a=(0,e.uniqBy)(l,JSON.stringify),c=[];for(const e of a){const r=e.value;(0,i.default)(r)&&c.push(e)}const u=t.env.REQUIRE_JWT?c:a;return t.env.SINGLE?[u[0]]:u}})),d.register("iZFX3",(function(e,r){a(e.exports,"default",(()=>s));var o=d("7bmgR"),n=d("dkHa3"),t=d("ch1BD"),i=d("5jRRl");class s extends i.default{#e;constructor(){super(),this.#e=[o.default,n.default,t.default].map((e=>new e))}async queryCookies(e,r){return(await Promise.all(this.#e.map((async o=>o.queryCookies(e,r).catch((()=>[])))))).flat()}}})),d.register("7bmgR",(function(r,i){a(r.exports,"default",(()=>p));var s=d("5jRRl"),l=d("iu7jR"),c=d("55IAI"),u=d("hEJgS"),f=d("6r8BP"),g=d("jldQT");class p extends s.default{async queryCookies(r,i){if("darwin"!==process.platform)throw new Error("This only works on macOS");return c.env.FIREFOX_ONLY?[]:async function({name:r,domain:i="%",requireJwt:s=!1}){const a=await async function(e,r){try{const n=(await(0,u.findAllFiles)({path:m,name:"Cookies"})).map((n=>async function(e,r,n){try{return await async function({name:e,domain:r,file:n=t.join(m,"Default","Cookies")}){if(!(0,o.existsSync)(n))throw new Error(`File ${n} does not exist`);if(c.env.VERBOSE){const o=n.split("/").slice(-3).join("/");console.log(`Trying Chrome (at ${o}) cookie ${e} for domain ${r}`)}let i;i="SELECT encrypted_value, name, host_key FROM cookies";const s=/^([*%])$/i,l=null==e.match(s),a=null==r.match(s);(l||a)&&(i+=" WHERE ",l&&(i+=`name = '${e}'`,a&&(i+=" AND ")),a&&(i+=`host_key LIKE '${r}';`));return(0,g.doSqliteQuery1)(n,i)}({name:e,domain:r,file:n})}catch(e){return c.env.VERBOSE&&console.log("Error getting encrypted cookie",e),[]}}(e,r,n)));return(await Promise.all(n)).flat().filter(f.isCookieRow)}catch(e){return c.env.VERBOSE&&console.log("error",e),[]}}(r,i),d=await async function(){return(0,l.execSimple)('security find-generic-password -w -s "Chrome Safe Storage"')}(),p=a.filter((({value:e})=>null!=e&&e.length>0)).map((async r=>{const o=r.value,t=await async function(e,r){let o;try{o=await async function(e,r){if("string"!=typeof e)throw new Error("password must be a string: "+e);let o;if(o=r,null==o||"object"!=typeof o)throw new Error("encryptedData must be a object: "+o);if(!(o instanceof Buffer)){if(!(Array.isArray(o)&&o[0]instanceof Buffer))throw new Error("encryptedData must be a Buffer: "+o);[o]=o,c.env.VERBOSE&&console.log(`encryptedData is an array of buffers, selected first: ${o}`),o=Buffer.from(o)}c.env.VERBOSE&&console.log(`Trying to decrypt with password ${e}`);return new Promise(((r,t)=>{n.pbkdf2(e,"saltysalt",1003,16,"sha1",((e,i)=>{try{if(e)return c.env.VERBOSE&&console.log("Error doing pbkdf2",e),void t(e);if(16!==i.length)return c.env.VERBOSE&&console.log("Error doing pbkdf2, buffer length is not 16",i.length),void t(new Error("Buffer length is not 16"));const s=new Array(17).join(" "),l=Buffer.from(s,"binary"),a=n.createDecipheriv("aes-128-cbc",i,l);if(a.setAutoPadding(!1),o&&o.slice&&(o=o.slice(3)),o.length%16!=0)return c.env.VERBOSE&&console.log("Error doing pbkdf2, encryptedData length is not a multiple of 16",o.length),void t(new Error("encryptedData length is not a multiple of 16"));let u=a.update(o);try{a.final("utf-8")}catch(e){return c.env.VERBOSE&&console.log("Error doing decipher.final()",e),void t(e)}const f=u[u.length-1];f&&(u=u.slice(0,0-f));const d=u.toString("utf8");r(d)}catch(e){t(e)}}))}))}(e,r)}catch(e){c.env.VERBOSE&&console.log("Error decrypting cookie",e),o=null}return o??r.toString("utf-8")}(d,o),i={};return(0,e.merge)(i,r.meta??{}),{domain:r.domain,name:r.name,value:t,meta:i}})),y=(await Promise.all(p)).filter(f.isExportedCookie);c.env.VERBOSE&&console.log("results",y);return y}({requireJwt:!1,name:r,domain:i})}}const m=t.join(c.HOME,"Library","Application Support","Google","Chrome")})),d.register("5jRRl",(function(e,r){a(e.exports,"default",(()=>o));class o{async queryCookies(e,r){return"development"===process.env.NODE_ENV&&console.log("queryCookie",e,r),[]}}})),d.register("iu7jR",(function(e,r){async function o(e){return process.env.VERBOSE&&console.log(e),new Promise(((r,o)=>{(0,i.exec)(e,{encoding:"binary",maxBuffer:5120},((e,n,t)=>{e||t?o(e):n&&r(n.trim())}))}))}function n(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)}a(e.exports,"execSimple",(()=>o)),a(e.exports,"toStringOrNull",(()=>n))})),d.register("hEJgS",(function(e,r){a(e.exports,"findAllFiles",(()=>t));var n=d("55IAI");async function t({path:e,name:r,maxDepth:i=2}){if("string"!=typeof e)throw new Error("path must be a string");if("string"!=typeof r)throw new Error("name must be a string");const s=e.split("/").length;n.env.VERBOSE&&console.log(`Searching for ${r} in ${e}`);const l=[];let a;try{a=o.readdirSync(e)}catch(r){return n.env.VERBOSE&&console.log(`Error reading ${e}`,r),[]}for(const c of a){const a=e+"/"+c;let u;try{u=o.statSync(a)}catch(e){n.env.VERBOSE&&console.error(`Error getting stat for ${a}`,e);continue}if(u.isDirectory()){if(a.split("/").length<s+i)try{const e=await t({path:a,name:r,maxDepth:2});l.push(...e)}catch(e){n.env.VERBOSE&&console.error(e)}}else c===r&&l.push(a)}return n.env.VERBOSE&&l.length>0&&(console.log(`Found ${l.length} ${r} files`),console.log(l)),l}})),d.register("6r8BP",(function(e,r){function o(e){return void 0!==e.domain&&void 0!==e.name&&void 0!==e.value}function n(e){return void 0!==e.domain&&void 0!==e.name&&void 0!==e.value}a(e.exports,"isCookieRow",(()=>o)),a(e.exports,"isExportedCookie",(()=>n))})),d.register("jldQT",(function(e,r){async function n(e,r){if(!o.existsSync(e))throw new Error(`doSqliteQuery1: file ${e} does not exist`);const n=new s.Database(e);return new Promise(((o,t)=>{n.all(r,((r,n)=>{if(r)return process.env.VERBOSE&&console.log(`doSqliteQuery1: error ${r}`),void t(r);const i=n;if(null==i||0===i.length)return process.env.VERBOSE&&console.log("doSqliteQuery1: no rows"),void o([]);if(Array.isArray(i)){const r=i.map((r=>({domain:r.host_key,name:r.name,value:r.encrypted_value,meta:{file:e}})));o(r)}else process.env.VERBOSE&&console.log(`doSqliteQuery1: rows ${JSON.stringify(i)}`),o([i])}))}))}a(e.exports,"doSqliteQuery1",(()=>n))})),d.register("dkHa3",(function(e,r){a(e.exports,"default",(()=>u));var n=d("5jRRl"),i=d("55IAI"),s=d("iu7jR"),l=d("hEJgS"),c=d("jldQT");class u extends n.default{async queryCookies(e,r){if("darwin"!==process.platform)throw new Error("This only works on macOS");if(i.env.CHROME_ONLY)return[];const o=await this.#r({name:e,domain:r});return Array.isArray(o)?o.map(s.toStringOrNull):[]}async#r({name:e,domain:r}){const o=await(0,l.findAllFiles)({path:t.join(i.HOME,"Library","Application Support","Firefox","Profiles"),name:"cookies.sqlite"});return(await Promise.all(o.map((o=>this.#o(o,e,r))))).flat()}#o(e,r,n){if(e&&!(0,o.existsSync)(e))throw new Error(`File ${e} does not exist`);let t;return i.env.VERBOSE&&console.log(`Trying Firefox cookie ${r} for domain ${n}`),t="SELECT value FROM moz_cookies","string"!=typeof r&&"string"!=typeof n||(t+=" WHERE ","string"==typeof r&&(t+=`name = '${r}'`,"string"==typeof n&&(t+=" AND ")),"string"==typeof n&&(t+=`host LIKE '${n}';`)),(0,c.doSqliteQuery1)(e,t).then((e=>e.map((e=>({domain:e.domain,name:e.name,value:e.value.toString("utf8")}))))).catch((()=>[]))}}})),d.register("ch1BD",(function(e,r){a(e.exports,"default",(()=>n));var o=d("5jRRl");class n extends o.default{}})),d.register("2cjYR",(function(e,r){a(e.exports,"default",(()=>n));var o=d("55IAI");function n(e){try{const n=(r=l,r&&r.__esModule?r.default:r).decode(e,{complete:!0});return o.env.VERBOSE&&console.log(n),!0}catch(e){return!1}var r}})),d.register("GQt56",(function(e,r){a(e.exports,"argv",(()=>o));const o=process.argv??[]})),d("1rMxC");
|
|
2
|
+
var e=require("lodash"),r=require("fs"),o=require("crypto"),n=require("path"),t=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");class u{async queryCookies(e,r){return"development"===process.env.NODE_ENV&&console.log("queryCookie",e,r),[]}}async function f(e){return process.env.VERBOSE&&console.log(e),new Promise(((r,o)=>{(0,t.exec)(e,{encoding:"binary",maxBuffer:5120},((e,n,t)=>{e||t?o(e):n&&r(n.trim())}))}))}function d(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:o,maxDepth:n=2}){const t=e.split("/").length;c.VERBOSE&&console.log(`Searching for ${o} 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<t+n)try{const e=await h({path:s,name:o,maxDepth:2});i.push(...e)}catch(e){c.VERBOSE&&console.error(e)}}else a===o&&i.push(s)}return c.VERBOSE&&i.length>0&&(console.log(`Found ${i.length} ${o} files`),console.log(i)),i}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}async function E(e,o){if(!r.existsSync(e))throw new Error(`doSqliteQuery1: file ${e} does not exist`);const n=new i.Database(e);return new Promise(((r,t)=>{n.all(o,((o,n)=>{if(o)return process.env.VERBOSE&&console.log(`doSqliteQuery1: error ${o}`),void t(o);const i=n;if(null==i||0===i.length)return process.env.VERBOSE&&console.log("doSqliteQuery1: no rows"),void r([]);if(Array.isArray(i)){const o=i.map((r=>({domain:r.host_key,name:r.name,value:r.encrypted_value,meta:{file:e}})));r(o)}else process.env.VERBOSE&&console.log(`doSqliteQuery1: rows ${JSON.stringify(i)}`),r([i])}))}))}class p extends u{async queryCookies(t,i){if("darwin"!==process.platform)throw new Error("This only works on macOS");return c.FIREFOX_ONLY?[]:async function({name:t,domain:i="%",requireJwt:s=!1}){const a=await async function(e,o){try{const t=(await h({path:B,name:"Cookies"})).map((t=>async function(e,o,t){try{return await async function({name:e,domain:o,file:t=n.join(B,"Default","Cookies")}){if(!(0,r.existsSync)(t))throw new Error(`File ${t} does not exist`);if(c.VERBOSE){const r=t.split("/").slice(-3).join("/");console.log(`Trying Chrome (at ${r}) cookie ${e} for domain ${o}`)}let i;i="SELECT encrypted_value, name, host_key FROM cookies";const s=/^([*%])$/i,a=null==e.match(s),l=null==o.match(s);(a||l)&&(i+=" WHERE ",a&&(i+=`name = '${e}'`,l&&(i+=" AND ")),l&&(i+=`host_key LIKE '${o}';`));return E(t,i)}({name:e,domain:o,file:t})}catch(e){return c.VERBOSE&&console.log("Error getting encrypted cookie",e),[]}}(e,o,t)));return(await Promise.all(t)).flat().filter(y)}catch(e){return c.VERBOSE&&console.log("error",e),[]}}(t,i),l=await async function(){return f('security find-generic-password -w -s "Chrome Safe Storage"')}(),g=a.filter((({value:e})=>null!=e&&e.length>0)).map((async r=>{const n=r.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,c.VERBOSE&&console.log(`encryptedData is an array of buffers, selected first: ${n}`),n=Buffer.from(n)}c.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 c.VERBOSE&&console.log("Error doing pbkdf2",e),void t(e);if(16!==i.length)return c.VERBOSE&&console.log("Error doing pbkdf2, buffer length is not 16",i.length),void t(new Error("Buffer length is not 16"));const s=new Array(17).join(" "),a=Buffer.from(s,"binary"),l=o.createDecipheriv("aes-128-cbc",i,a);if(l.setAutoPadding(!1),n&&n.slice&&(n=n.slice(3)),n.length%16!=0)return c.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 g=l.update(n);try{l.final("utf-8")}catch(e){return c.VERBOSE&&console.log("Error doing decipher.final()",e),void t(e)}const u=g[g.length-1];u&&(g=g.slice(0,0-u));const f=g.toString("utf8");r(f)}catch(e){t(e)}}))}))}(e,r)}catch(e){c.VERBOSE&&console.log("Error decrypting cookie",e),n=null}return n??r.toString("utf-8")}(l,n),i={};return(0,e.merge)(i,r.meta??{}),{domain:r.domain,name:r.name,value:t,meta:i}})),u=(await Promise.all(g)).filter(m);c.VERBOSE&&console.log("results",u);return u}({requireJwt:!1,name:t,domain:i})}}const B=n.join(g,"Library","Application Support","Google","Chrome");class b extends u{async queryCookies(e,r){if("darwin"!==process.platform)throw new Error("This only works on macOS");if(c.CHROME_ONLY)return[];const o=await this.#e({name:e,domain:r});return Array.isArray(o)?o.map(d):[]}async#e({name:e,domain:r}){const o=await h({path:n.join(g,"Library","Application Support","Firefox","Profiles"),name:"cookies.sqlite"});return(await Promise.all(o.map((o=>this.#r(o,e,r))))).flat()}#r(e,o,n){if(e&&!(0,r.existsSync)(e))throw new Error(`File ${e} does not exist`);let t;return c.VERBOSE&&console.log(`Trying Firefox cookie ${o} for domain ${n}`),t="SELECT value FROM moz_cookies","string"!=typeof o&&"string"!=typeof n||(t+=" WHERE ","string"==typeof o&&(t+=`name = '${o}'`,"string"==typeof n&&(t+=" AND ")),"string"==typeof n&&(t+=`host LIKE '${n}';`)),E(e,t).then((e=>e.map((e=>({domain:e.domain,name:e.name,value:e.value.toString("utf8")}))))).catch((()=>[]))}}class w extends u{}class O extends u{#o;constructor(){super(),this.#o=[p,b,w].map((e=>new e))}async queryCookies(e,r){return(await Promise.all(this.#o.map((async o=>o.queryCookies(e,r).catch((()=>[])))))).flat()}}function S(e){try{const o=(r=s,r&&r.__esModule?r.default:r).decode(e,{complete:!0});return c.VERBOSE&&console.log(o),!0}catch(e){return!1}var r}const R=process.argv??[],{env:v={},argv:k=[],platform:C=""}="undefined"==typeof process?{}:process,q="NO_COLOR"in v||k.includes("--no-color"),V="FORCE_COLOR"in v||k.includes("--color"),$="win32"===C,x="dumb"===v.TERM,_=a&&a.isatty&&a.isatty(1)&&v.TERM&&!x,D=!q&&(V||$&&!x||_||"CI"in v&&("GITHUB_ACTIONS"in v||"GITLAB_CI"in v||"CIRCLECI"in v)),I=(e,r,o,n,t=r.substring(0,e)+n,i=r.substring(e+o.length),s=i.indexOf(o))=>t+(s<0?i:I(s,i,o,n)),N=(e,r,o=e,n=e.length+1)=>t=>t||""!==t&&void 0!==t?((e,r,o,n,t)=>e<0?o+r+n:o+I(e,r,n,t)+n)((""+t).indexOf(r,n),t,e,r,o):"",L=(e,r,o)=>N(`[${e}m`,`[${r}m`,o),A={reset:L(0,0),bold:L(1,22,"[22m[1m"),dim:L(2,22,"[22m[2m"),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:F,bold:T,dim:M,italic:j,underline:G,inverse:P,hidden:W,strikethrough:Y,black:H,red:J,green:Q,yellow:U,blue:X,magenta:K,cyan:z,white:Z,gray:ee,bgBlack:re,bgRed:oe,bgGreen:ne,bgYellow:te,bgBlue:ie,bgMagenta:se,bgCyan:ae,bgWhite:le,blackBright:ce,redBright:ge,greenBright:ue,yellowBright:fe,blueBright:de,magentaBright:he,cyanBright:ye,whiteBright:me,bgBlackBright:Ee,bgRedBright:pe,bgGreenBright:Be,bgYellowBright:be,bgBlueBright:we,bgMagentaBright:Oe,bgCyanBright:Se,bgWhiteBright:Re}=(({useColor:e=D}={})=>e?A:Object.keys(A).reduce(((e,r)=>({...e,[r]:String})),{}))();function ve(r){return X((0,e.uniqBy)(r,(e=>e.name)).map((e=>e.name+"="+e.value)).join("; "))}if(R&&R.length>2){const r=R[2];let o;o=null!=R[3]&&R[3].indexOf(".")>-1?R[3]:"%";const n="true";R.includes("--require-jwt")&&(c.REQUIRE_JWT=n),R.includes("--verbose")&&(c.VERBOSE=n),R.includes("--chrome-only")&&(c.CHROME_ONLY=n),R.includes("--firefox-only")&&(c.FIREFOX_ONLY=n),R.includes("--ignore-expired")&&(c.IGNORE_EXPIRED=n),R.includes("--single")&&(c.SINGLE=n),c.VERBOSE&&console.log("Verbose mode",R),async function(r,o){try{const n=await async function({name:r,domain:o},n=new O){const t=await n.queryCookies(r,o),i=(0,e.uniqBy)(t,JSON.stringify),s=[];for(const e of i)S(e.value)&&s.push(e);const a=c.REQUIRE_JWT?s:i;return c.SINGLE?[a[0]]:a}({name:r,domain:o});if(n.length>0)if(R.includes("--combined-string"))console.log(ve(n));else if(R.includes("--dump"))console.log(n);else if(R.includes("--dump-grouped")){const r=(0,e.groupBy)(n,(e=>e.meta?.file));console.log(Q(JSON.stringify(r,null,2)))}else if(R.includes("--combined-string-grouped")){const r=(0,e.groupBy)(n,(e=>e.meta?.file));for(const e of Object.keys(r)){let o=r[e];console.log(Q(e)+": ",ve(o))}}else for(const e of n)console.log(e.value);else console.error("No results")}catch(e){console.error(e)}}(r,o).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/cli.js","package.json","src/global.ts","src/queryCookies.ts","src/browsers/CompositeCookieQueryStrategy.ts","src/browsers/ChromeCookieQueryStrategy.ts","src/browsers/AbstractCookieQueryStrategy.ts","src/utils.ts","src/findAllFiles.ts","src/CookieRow.ts","src/doSqliteQuery1.ts","src/browsers/FirefoxCookieQueryStrategy.ts","src/browsers/SafariCookieQueryStrategy.ts","src/isValidJwt.ts","src/argv.js"],"sourcesContent":["#!/usr/bin/env node\n\nimport { version } from \"../package.json\";\nimport { env } from \"./global\";\nimport { queryCookies } from \"./queryCookies\";\nimport { argv } from \"./argv\";\nimport { groupBy, uniqBy } from \"lodash\";\nimport { blue, green } from \"colorette\";\n\nfunction combinedString(results) {\n return blue(\n uniqBy(results, (r) => r.name)\n .map((r) => r.name + \"=\" + r.value)\n .join(\"; \")\n );\n}\n\nasync function cliQueryCookies(name, domain) {\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 if (argv.includes(\"--version\") || argv.includes(\"-v\")) {\n console.log(version);\n return;\n }\n\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","{\n \"name\": \"@mherod/get-cookie\",\n \"version\": \"2.0.0-beta.2\",\n \"description\": \"Node.js module for querying a local user's Chrome cookie\",\n \"source\": \"src/index.js\",\n \"bin\": \"dist/cli.js\",\n \"main\": \"dist/main.js\",\n \"module\": \"dist/module.js\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"scripts\": {\n \"clean\": \"git clean -fXd\",\n \"build\": \"parcel build\",\n \"test\": \"jest\",\n \"postbuild\": \"npm run check && npm run install:global\",\n \"prepublish\": \"npm run build\",\n \"install:global\": \"npm install --force --global .\",\n \"postinstall:global\": \"find $NVM_BIN -exec chmod +x {} \\\\; || true\",\n \"prettier\": \"prettier --write 'src/{**/*,*}.{js,json,ts}'\",\n \"check\": \"tsc --noEmit\"\n },\n \"targets\": {\n \"main\": {\n \"source\": \"src/index.js\",\n \"distDir\": \"dist\",\n \"engines\": {\n \"node\": \"16\"\n }\n },\n \"cli\": {\n \"source\": \"src/cli.js\",\n \"distDir\": \"dist\",\n \"engines\": {\n \"node\": \"16\"\n }\n }\n },\n \"@parcel/transformer-js\": {\n \"inlineFS\": false,\n \"inlineEnvironment\": false\n },\n \"engines\": {\n \"node\": \"16\"\n },\n \"keywords\": [],\n \"author\": \"Matthew Herod\",\n \"license\": \"ISC\",\n \"dependencies\": {\n \"colorette\": \"^2.0.19\",\n \"jsonwebtoken\": \"^8.5.1\",\n \"lodash\": \"^4.17.21\",\n \"sqlite3\": \"^5.1.1\"\n },\n \"devDependencies\": {\n \"@types/jsonwebtoken\": \"^8.5.9\",\n \"@types/lodash\": \"^4.14.186\",\n \"@types/node\": \"^18.8.2\",\n \"jest\": \"^29.0.3\",\n \"parcel\": \"^2.7.0\",\n \"prettier\": \"^2.7.1\",\n \"ts-node\": \"^10.9.1\",\n \"typescript\": \"^4.8.4\"\n }\n}\n","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","import CompositeCookieQueryStrategy from \"./browsers/CompositeCookieQueryStrategy\";\nimport { uniqBy } from \"lodash\";\nimport { env } from \"./global\";\nimport isValidJwt from \"./isValidJwt\";\nimport { ExportedCookie } from \"./CookieRow\";\n\nexport async function queryCookies(\n {\n name,\n domain\n }: {\n name: string;\n domain: string;\n },\n strategy = 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 ChromeCookieQueryStrategy from \"./ChromeCookieQueryStrategy\";\nimport FirefoxCookieQueryStrategy from \"./FirefoxCookieQueryStrategy\";\nimport SafariCookieQueryStrategy from \"./SafariCookieQueryStrategy\";\nimport AbstractCookieQueryStrategy from \"./AbstractCookieQueryStrategy\";\nimport {ExportedCookie} from \"../CookieRow\";\n\nexport default class CompositeCookieQueryStrategy extends AbstractCookieQueryStrategy {\n #strategies;\n\n constructor() {\n super();\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 AbstractCookieQueryStrategy from \"./AbstractCookieQueryStrategy\";\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 { CookieRow, ExportedCookie, isCookieRow, isExportedCookie } from \"../CookieRow\";\nimport { doSqliteQuery1 } from \"../doSqliteQuery1\";\nimport { merge } from \"lodash\";\n\nexport default class ChromeCookieQueryStrategy extends AbstractCookieQueryStrategy {\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 {ExportedCookie} from \"../CookieRow\";\n\nexport default class AbstractCookieQueryStrategy {\n async queryCookies(name: string, domain: string): Promise<ExportedCookie[]> {\n if (process.env.NODE_ENV === \"development\") {\n console.log(\"queryCookie\", name, domain);\n }\n return [];\n }\n}\n","// noinspection JSUnusedGlobalSymbols\n\nimport {exec, ExecException} from \"child_process\";\n\nexport async function execSimple(command: string): Promise<string> {\n if (process.env.VERBOSE) {\n console.log(command);\n }\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// export async function execAsBuffer(command: string) {\n// if (process.env.VERBOSE) {\n// console.log(command);\n// }\n// return await 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// let stdoutAsBuffer: string = stdout;\n// if (typeof stdoutAsBuffer === \"string\" && stdoutAsBuffer.length > 0) {\n// // noinspection JSCheckFunctionSignatures\n// stdoutAsBuffer = Buffer.from(stdoutAsBuffer, \"binary\").slice(0, -1);\n// }\n// if (stdoutAsBuffer && stdoutAsBuffer.length > 0) {\n// resolve(stdoutAsBuffer);\n// }\n// }\n// );\n// });\n// }\n\n// @ts-ignore\nexport function toStringValue(r: any): string {\n if (process.env.VERBOSE) {\n console.log(\"Printing value\", r);\n }\n if (r) {\n if (typeof r === \"string\") {\n return r;\n } else if (r.toString) {\n // noinspection JSCheckFunctionSignatures\n return r.toString(\"utf8\");\n }\n }\n}\n\nexport function printStringValue(r: any) {\n if (process.env.VERBOSE) {\n console.log(\"Printing value\", r);\n }\n if (r) {\n if (typeof r === \"string\") {\n console.log(r);\n } else if (r.toString) {\n // noinspection JSCheckFunctionSignatures\n console.log(r.toString(\"utf8\"));\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 if (typeof path !== \"string\") {\n throw new Error(\"path must be a string\");\n }\n if (typeof name !== \"string\") {\n throw new Error(\"name must be a string\");\n }\n\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","export interface CookieRow {\n domain: string;\n name: string;\n value: Buffer;\n meta?: any;\n}\n\nexport function isCookieRow(obj: any): obj is CookieRow {\n return obj.domain !== undefined && obj.name !== undefined && obj.value !== undefined;\n}\n\nexport interface ExportedCookie {\n domain: string;\n name: string;\n value: string;\n meta?: any;\n}\n\nexport function isExportedCookie(obj: any): obj is ExportedCookie {\n return obj.domain !== undefined && obj.name !== undefined && obj.value !== undefined;\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 if (process.env.VERBOSE) {\n console.log(`doSqliteQuery1: error ${err}`);\n }\n reject(err);\n return;\n }\n const rows1: any[] = rows;\n if (rows1 == null || rows1.length === 0) {\n if (process.env.VERBOSE) {\n console.log(`doSqliteQuery1: no rows`);\n }\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 AbstractCookieQueryStrategy from \"./AbstractCookieQueryStrategy\";\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 \"../CookieRow\";\n\nexport default class FirefoxCookieQueryStrategy extends AbstractCookieQueryStrategy {\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 AbstractCookieQueryStrategy from \"./AbstractCookieQueryStrategy\";\n\nexport default class SafariCookieQueryStrategy extends AbstractCookieQueryStrategy {}\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 = process.argv ?? [];\n"],"names":["$9MSW1","parcelRequire","combinedString","results","$hEvgT$colorette","blue","$hEvgT$lodash","uniqBy","r","name","map","value","join","$GQt56","argv","length","includes","console","log","version","domain","indexOf","tru","$55IAI","env","REQUIRE_JWT","VERBOSE","CHROME_ONLY","FIREFOX_ONLY","IGNORE_EXPIRED","SINGLE","async","$8KrHy","queryCookies","groupedByFile","groupBy","meta","file","green","JSON","stringify","groupedByFile1","Object","keys","results1","result","error","e","cliQueryCookies","catch","module","exports","parse","merge","$d99bf10ae9ada58f$export$a7b6bc01c63cdfc3","$d99bf10ae9ada58f$require$merge","process","$d99bf10ae9ada58f$export$a7c5707626fc90f","Error","$iZFX3","$292bd833f47fab8c$export$e6d428437cf2cacb","strategy","default","jwtCookies","$2cjYR","push","resultsUniq","$7bmgR","$9af735aa1243af13$export$2e2bcd8739ae039","$5jRRl","strategies","constructor","super","this","$dkHa3","$ch1BD","Promise","all","flat","$be5dbdc2930ab757$export$2e2bcd8739ae039","platform","requireJwt","encryptedDataItems","promises","$hEJgS","findAllFiles","path","$be5dbdc2930ab757$var$chromeLocal","$hEvgT$path","$hEvgT$fs","existsSync","s","split","slice","sql","wildcardRegexp","specifiedName","match","specifiedDomain","$jldQT","doSqliteQuery1","$be5dbdc2930ab757$var$getEncryptedChromeCookie","$be5dbdc2930ab757$var$getPromise1","filter","$6r8BP","isCookieRow","$be5dbdc2930ab757$var$getPromise","password","$iu7jR","execSimple","$be5dbdc2930ab757$var$getChromePassword","decrypted","cookieRow","encryptedValue","decryptedValue","d","encryptedData","encryptedData1","Buffer","Array","isArray","from","resolve","reject","$hEvgT$crypto","pbkdf2","buffer","str","iv","decipher","createDecipheriv","setAutoPadding","decoded","update","final","padding","decodedString","toString","e1","$be5dbdc2930ab757$var$decrypt","$be5dbdc2930ab757$var$decryptValue","isExportedCookie","$be5dbdc2930ab757$var$getChromeCookies","HOME","$d56ef6539454f8f4$export$2e2bcd8739ae039","NODE_ENV","$5523dd2bb623c92e$export$8d71c74f97c0202e","command","$hEvgT$child_process","exec","encoding","maxBuffer","stdout","stderr","trim","$5523dd2bb623c92e$export$d53bf2de587a369","$beeaf16ab77d8ef5$export$2c9faf86071156ae","maxDepth","rootSegments","files","readdirSync","filePath","stat","statSync","isDirectory","subFiles","e2","$a65bdf1c96f2984e$export$bc926c43858bd3cb","obj","undefined","$a65bdf1c96f2984e$export$963c8d651337e4a4","$5caa652141c71939$export$f19f611d1fa7c6f3","db","$hEvgT$sqlite3","Database","err","rows","rows1","cookieRows","row","$6cedbf02454a5ca8$export$2e2bcd8739ae039","cookies","getFirefoxCookie","toStringOrNull","queryCookiesDb","name1","domain1","then","$fdb7fdac14d4a561$export$2e2bcd8739ae039","$d434c40a7625fd83$export$2e2bcd8739ae039","token","$hEvgT$jsonwebtoken","decode","complete","$080c9f6bacaf1494$export$6f4ae1207c703045"],"version":3,"file":"cli.js.map","sourceRoot":"../"}
|
|
1
|
+
{"mappings":"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","sources":["src/global.ts","src/browsers/AbstractCookieQueryStrategy.ts","src/utils.ts","src/findAllFiles.ts","src/CookieRow.ts","src/doSqliteQuery1.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/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","import {ExportedCookie} from \"../CookieRow\";\n\nexport default class AbstractCookieQueryStrategy {\n async queryCookies(name: string, domain: string): Promise<ExportedCookie[]> {\n if (process.env.NODE_ENV === \"development\") {\n console.log(\"queryCookie\", name, domain);\n }\n return [];\n }\n}\n","// noinspection JSUnusedGlobalSymbols\n\nimport {exec, ExecException} from \"child_process\";\n\nexport async function execSimple(command: string): Promise<string> {\n if (process.env.VERBOSE) {\n console.log(command);\n }\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// export async function execAsBuffer(command: string) {\n// if (process.env.VERBOSE) {\n// console.log(command);\n// }\n// return await 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// let stdoutAsBuffer: string = stdout;\n// if (typeof stdoutAsBuffer === \"string\" && stdoutAsBuffer.length > 0) {\n// // noinspection JSCheckFunctionSignatures\n// stdoutAsBuffer = Buffer.from(stdoutAsBuffer, \"binary\").slice(0, -1);\n// }\n// if (stdoutAsBuffer && stdoutAsBuffer.length > 0) {\n// resolve(stdoutAsBuffer);\n// }\n// }\n// );\n// });\n// }\n\n// @ts-ignore\nexport function toStringValue(r: any): string {\n if (process.env.VERBOSE) {\n console.log(\"Printing value\", r);\n }\n if (r) {\n if (typeof r === \"string\") {\n return r;\n } else if (r.toString) {\n // noinspection JSCheckFunctionSignatures\n return r.toString(\"utf8\");\n }\n }\n}\n\nexport function printStringValue(r: any) {\n if (process.env.VERBOSE) {\n console.log(\"Printing value\", r);\n }\n if (r) {\n if (typeof r === \"string\") {\n console.log(r);\n } else if (r.toString) {\n // noinspection JSCheckFunctionSignatures\n console.log(r.toString(\"utf8\"));\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","export interface CookieRow {\n domain: string;\n name: string;\n value: Buffer;\n meta?: any;\n}\n\nexport function isCookieRow(obj: any): obj is CookieRow {\n return obj.domain !== undefined && obj.name !== undefined && obj.value !== undefined;\n}\n\nexport interface ExportedCookie {\n domain: string;\n name: string;\n value: string;\n meta?: any;\n}\n\nexport function isExportedCookie(obj: any): obj is ExportedCookie {\n return obj.domain !== undefined && obj.name !== undefined && obj.value !== undefined;\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 if (process.env.VERBOSE) {\n console.log(`doSqliteQuery1: error ${err}`);\n }\n reject(err);\n return;\n }\n const rows1: any[] = rows;\n if (rows1 == null || rows1.length === 0) {\n if (process.env.VERBOSE) {\n console.log(`doSqliteQuery1: no rows`);\n }\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 AbstractCookieQueryStrategy from \"./AbstractCookieQueryStrategy\";\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 { CookieRow, ExportedCookie, isCookieRow, isExportedCookie } from \"../CookieRow\";\nimport { doSqliteQuery1 } from \"../doSqliteQuery1\";\nimport { merge } from \"lodash\";\n\nexport default class ChromeCookieQueryStrategy extends AbstractCookieQueryStrategy {\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 AbstractCookieQueryStrategy from \"./AbstractCookieQueryStrategy\";\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 \"../CookieRow\";\n\nexport default class FirefoxCookieQueryStrategy extends AbstractCookieQueryStrategy {\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 AbstractCookieQueryStrategy from \"./AbstractCookieQueryStrategy\";\n\nexport default class SafariCookieQueryStrategy extends AbstractCookieQueryStrategy {}\n","import ChromeCookieQueryStrategy from \"./ChromeCookieQueryStrategy\";\nimport FirefoxCookieQueryStrategy from \"./FirefoxCookieQueryStrategy\";\nimport SafariCookieQueryStrategy from \"./SafariCookieQueryStrategy\";\nimport AbstractCookieQueryStrategy from \"./AbstractCookieQueryStrategy\";\nimport {ExportedCookie} from \"../CookieRow\";\n\nexport default class CompositeCookieQueryStrategy extends AbstractCookieQueryStrategy {\n #strategies;\n\n constructor() {\n super();\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 = 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","#!/usr/bin/env node\n\nimport { env } from \"./global\";\nimport { queryCookies } from \"./queryCookies\";\nimport { argv } from \"./argv\";\nimport { groupBy, uniqBy } from \"lodash\";\nimport { blue, green } from \"colorette\";\nimport { ExportedCookie } from \"./CookieRow\";\n\nfunction combinedString(results: ExportedCookie[]) {\n return blue(\n uniqBy(results, (r) => r.name)\n .map((r) => r.name + \"=\" + r.value)\n .join(\"; \")\n );\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 CompositeCookieQueryStrategy from \"./browsers/CompositeCookieQueryStrategy\";\nimport { uniqBy } from \"lodash\";\nimport { env } from \"./global\";\nimport isValidJwt from \"./isValidJwt\";\nimport { ExportedCookie } from \"./CookieRow\";\nimport AbstractCookieQueryStrategy from \"./browsers/AbstractCookieQueryStrategy\";\n\nexport async function queryCookies(\n {\n name,\n domain\n }: {\n name: string;\n domain: string;\n },\n strategy: AbstractCookieQueryStrategy = 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","$697fcd92319d90cd$export$2e2bcd8739ae039","async","name","domain","NODE_ENV","console","log","$08b2542d46c201fb$export$8d71c74f97c0202e","command","VERBOSE","Promise","resolve","reject","$3GcJY$child_process","exec","encoding","maxBuffer","error","stdout","stderr","trim","$08b2542d46c201fb$export$d53bf2de587a369","result","length","slice","toString","$50e620a43f85291a$export$2c9faf86071156ae","path","maxDepth","rootSegments","split","files","readdirSync","$3GcJY$fs","e","file","filePath","stat","statSync","e1","isDirectory","subFiles","push","e2","$a09526f577a17ae8$export$bc926c43858bd3cb","obj","undefined","value","$a09526f577a17ae8$export$963c8d651337e4a4","$f5dd4d62c4c3f3b4$export$f19f611d1fa7c6f3","sql","existsSync","db","$3GcJY$sqlite3","Database","all","err","rows","rows1","Array","isArray","cookieRows","map","row","meta","JSON","stringify","$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","super","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","$2a211dfb3a4f388f$var$combinedString","uniqBy","r","tru","REQUIRE_JWT","IGNORE_EXPIRED","SINGLE","results1","jwtCookies","resultsUniq","groupedByFile","groupBy","groupedByFile1","$2a211dfb3a4f388f$var$cliQueryCookies"],"version":3,"file":"cli.js.map","sourceRoot":"../"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
var r=require("lodash"),e=(require("fs"),require("crypto"),require("path"));require("child_process"),require("sqlite3"),require("jsonwebtoken");var o=r.merge;const i={};o(i,process.env);const n=i.HOME;if(!n)throw new Error("HOME environment variable is not set");e.join(n,"Library","Application Support","Google","Chrome");
|
|
3
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":";sJAAMA,EAAAC,MACC,MAAMC,EAAW,GACxBC,EAAMD,EAAKE,QAAQC,KACZ,MAAMC,EAAeJ,EAAU,KACtC,IAAKI,EACH,MAAM,IAAIC,MAAM,wCCuGEC,EAAAC,KAClBH,EACA,UACA,sBACA,SACA","sources":["src/global.ts","src/browsers/ChromeCookieQueryStrategy.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","import AbstractCookieQueryStrategy from \"./AbstractCookieQueryStrategy\";\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 { CookieRow, ExportedCookie, isCookieRow, isExportedCookie } from \"../CookieRow\";\nimport { doSqliteQuery1 } from \"../doSqliteQuery1\";\nimport { merge } from \"lodash\";\n\nexport default class ChromeCookieQueryStrategy extends AbstractCookieQueryStrategy {\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"],"names":["$1RAd3$lodash","merge","$d99bf10ae9ada58f$export$a7b6bc01c63cdfc3","$d99bf10ae9ada58f$require$merge","process","env","$d99bf10ae9ada58f$export$a7c5707626fc90f","Error","$1RAd3$path","join"],"version":3,"file":"index.js.map","sourceRoot":"../"}
|
package/dist/main.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var $
|
|
3
|
-
var $
|
|
4
|
-
var $
|
|
5
|
-
var $
|
|
6
|
-
var $
|
|
7
|
-
var $
|
|
8
|
-
var $
|
|
2
|
+
var $7oI3p$lodash = require("lodash");
|
|
3
|
+
var $7oI3p$fs = require("fs");
|
|
4
|
+
var $7oI3p$crypto = require("crypto");
|
|
5
|
+
var $7oI3p$path = require("path");
|
|
6
|
+
var $7oI3p$child_process = require("child_process");
|
|
7
|
+
var $7oI3p$sqlite3 = require("sqlite3");
|
|
8
|
+
var $7oI3p$jsonwebtoken = require("jsonwebtoken");
|
|
9
9
|
|
|
10
10
|
function $parcel$export(e, n, v, s) {
|
|
11
11
|
Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
|
|
@@ -14,9 +14,9 @@ function $parcel$interopDefault(a) {
|
|
|
14
14
|
return a && a.__esModule ? a.default : a;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
$parcel$export(module.exports, "getCookie", () => $
|
|
18
|
-
$parcel$export(module.exports, "getFirefoxCookie", () => $
|
|
19
|
-
$parcel$export(module.exports, "getChromeCookie", () => $
|
|
17
|
+
$parcel$export(module.exports, "getCookie", () => $cd1ba0160120c006$export$4be65e66cfa2648a);
|
|
18
|
+
$parcel$export(module.exports, "getFirefoxCookie", () => $cd1ba0160120c006$export$c44c5fdef43f0941);
|
|
19
|
+
$parcel$export(module.exports, "getChromeCookie", () => $cd1ba0160120c006$export$e5637297e9eb6f2e);
|
|
20
20
|
class $503d2a3d296fcf21$export$2e2bcd8739ae039 {
|
|
21
21
|
async queryCookies(name, domain) {
|
|
22
22
|
if (process.env.NODE_ENV === "development") console.log("queryCookie", name, domain);
|
|
@@ -29,7 +29,7 @@ class $503d2a3d296fcf21$export$2e2bcd8739ae039 {
|
|
|
29
29
|
async function $25b78d6746d4ad48$export$8d71c74f97c0202e(command) {
|
|
30
30
|
if (process.env.VERBOSE) console.log(command);
|
|
31
31
|
return new Promise((resolve, reject)=>{
|
|
32
|
-
(0, $
|
|
32
|
+
(0, $7oI3p$child_process.exec)(command, {
|
|
33
33
|
encoding: "binary",
|
|
34
34
|
maxBuffer: 5120
|
|
35
35
|
}, (error, stdout, stderr)=>{
|
|
@@ -78,7 +78,7 @@ function $25b78d6746d4ad48$export$5348b46700dd771c(input) {
|
|
|
78
78
|
|
|
79
79
|
|
|
80
80
|
|
|
81
|
-
var $fac425c10fbbada5$require$merge = $
|
|
81
|
+
var $fac425c10fbbada5$require$merge = $7oI3p$lodash.merge;
|
|
82
82
|
const $fac425c10fbbada5$export$a7b6bc01c63cdfc3 = {};
|
|
83
83
|
$fac425c10fbbada5$require$merge($fac425c10fbbada5$export$a7b6bc01c63cdfc3, process.env);
|
|
84
84
|
const $fac425c10fbbada5$export$a7c5707626fc90f = $fac425c10fbbada5$export$a7b6bc01c63cdfc3["HOME"];
|
|
@@ -89,14 +89,12 @@ if (!$fac425c10fbbada5$export$a7c5707626fc90f) throw new Error("HOME environment
|
|
|
89
89
|
|
|
90
90
|
|
|
91
91
|
async function $e62c2c56eb720f29$export$2c9faf86071156ae({ path: path , name: name , maxDepth: maxDepth = 2 }) {
|
|
92
|
-
if (typeof path !== "string") throw new Error("path must be a string");
|
|
93
|
-
if (typeof name !== "string") throw new Error("name must be a string");
|
|
94
92
|
const rootSegments = path.split("/").length;
|
|
95
93
|
if ((0, $fac425c10fbbada5$export$a7b6bc01c63cdfc3).VERBOSE) console.log(`Searching for ${name} in ${path}`);
|
|
96
94
|
const files = [];
|
|
97
95
|
let readdirSync;
|
|
98
96
|
try {
|
|
99
|
-
readdirSync = $
|
|
97
|
+
readdirSync = $7oI3p$fs.readdirSync(path);
|
|
100
98
|
} catch (e) {
|
|
101
99
|
if ((0, $fac425c10fbbada5$export$a7b6bc01c63cdfc3).VERBOSE) console.log(`Error reading ${path}`, e);
|
|
102
100
|
return [];
|
|
@@ -105,7 +103,7 @@ async function $e62c2c56eb720f29$export$2c9faf86071156ae({ path: path , name: na
|
|
|
105
103
|
const filePath = path + "/" + file;
|
|
106
104
|
let stat;
|
|
107
105
|
try {
|
|
108
|
-
stat = $
|
|
106
|
+
stat = $7oI3p$fs.statSync(filePath);
|
|
109
107
|
} catch (e1) {
|
|
110
108
|
if ((0, $fac425c10fbbada5$export$a7b6bc01c63cdfc3).VERBOSE) console.error(`Error getting stat for ${filePath}`, e1);
|
|
111
109
|
continue;
|
|
@@ -146,8 +144,8 @@ function $3d7e27b54f670f46$export$963c8d651337e4a4(obj) {
|
|
|
146
144
|
|
|
147
145
|
|
|
148
146
|
async function $a085b524d8ee9fce$export$f19f611d1fa7c6f3(file, sql) {
|
|
149
|
-
if (!$
|
|
150
|
-
const db = new $
|
|
147
|
+
if (!$7oI3p$fs.existsSync(file)) throw new Error(`doSqliteQuery1: file ${file} does not exist`);
|
|
148
|
+
const db = new $7oI3p$sqlite3.Database(file);
|
|
151
149
|
return new Promise((resolve, reject)=>{
|
|
152
150
|
db.all(sql, (err, rows)=>{
|
|
153
151
|
if (err) {
|
|
@@ -239,7 +237,7 @@ async function $269fe42bfd555305$var$getChromeCookies({ name: name , domain: dom
|
|
|
239
237
|
const encryptedValue = cookieRow.value;
|
|
240
238
|
const decryptedValue = await $269fe42bfd555305$var$decryptValue(password, encryptedValue);
|
|
241
239
|
const meta = {};
|
|
242
|
-
(0, $
|
|
240
|
+
(0, $7oI3p$lodash.merge)(meta, cookieRow.meta ?? {});
|
|
243
241
|
return {
|
|
244
242
|
domain: cookieRow.domain,
|
|
245
243
|
name: cookieRow.name,
|
|
@@ -251,9 +249,9 @@ async function $269fe42bfd555305$var$getChromeCookies({ name: name , domain: dom
|
|
|
251
249
|
if ((0, $fac425c10fbbada5$export$a7b6bc01c63cdfc3).VERBOSE) console.log("results", results);
|
|
252
250
|
return results;
|
|
253
251
|
}
|
|
254
|
-
const $269fe42bfd555305$var$chromeLocal = $
|
|
255
|
-
async function $269fe42bfd555305$var$getEncryptedChromeCookie({ name: name , domain: domain , file: file = $
|
|
256
|
-
if (!(0, $
|
|
252
|
+
const $269fe42bfd555305$var$chromeLocal = $7oI3p$path.join((0, $fac425c10fbbada5$export$a7c5707626fc90f), "Library", "Application Support", "Google", "Chrome");
|
|
253
|
+
async function $269fe42bfd555305$var$getEncryptedChromeCookie({ name: name , domain: domain , file: file = $7oI3p$path.join($269fe42bfd555305$var$chromeLocal, "Default", "Cookies") }) {
|
|
254
|
+
if (!(0, $7oI3p$fs.existsSync)(file)) throw new Error(`File ${file} does not exist`);
|
|
257
255
|
if ((0, $fac425c10fbbada5$export$a7b6bc01c63cdfc3).VERBOSE) {
|
|
258
256
|
const s = file.split("/").slice(-3).join("/");
|
|
259
257
|
console.log(`Trying Chrome (at ${s}) cookie ${name} for domain ${domain}`);
|
|
@@ -290,7 +288,7 @@ async function $269fe42bfd555305$var$decrypt(password, encryptedData) {
|
|
|
290
288
|
}
|
|
291
289
|
if ((0, $fac425c10fbbada5$export$a7b6bc01c63cdfc3).VERBOSE) console.log(`Trying to decrypt with password ${password}`);
|
|
292
290
|
return new Promise((resolve, reject)=>{
|
|
293
|
-
$
|
|
291
|
+
$7oI3p$crypto.pbkdf2(password, "saltysalt", 1003, 16, "sha1", (error, buffer)=>{
|
|
294
292
|
try {
|
|
295
293
|
if (error) {
|
|
296
294
|
if ((0, $fac425c10fbbada5$export$a7b6bc01c63cdfc3).VERBOSE) console.log("Error doing pbkdf2", error);
|
|
@@ -304,7 +302,7 @@ async function $269fe42bfd555305$var$decrypt(password, encryptedData) {
|
|
|
304
302
|
}
|
|
305
303
|
const str = new Array(17).join(" ");
|
|
306
304
|
const iv = Buffer.from(str, "binary");
|
|
307
|
-
const decipher = $
|
|
305
|
+
const decipher = $7oI3p$crypto.createDecipheriv("aes-128-cbc", buffer, iv);
|
|
308
306
|
decipher.setAutoPadding(false);
|
|
309
307
|
if (encryptedData1 && encryptedData1.slice) encryptedData1 = encryptedData1.slice(3);
|
|
310
308
|
if (encryptedData1.length % 16 !== 0) {
|
|
@@ -358,7 +356,7 @@ class $7bb7da9a77b2fd99$export$2e2bcd8739ae039 extends (0, $503d2a3d296fcf21$exp
|
|
|
358
356
|
*/ async #getFirefoxCookie(//
|
|
359
357
|
{ name: name , domain: domain }) {
|
|
360
358
|
const files = await (0, $e62c2c56eb720f29$export$2c9faf86071156ae)({
|
|
361
|
-
path: $
|
|
359
|
+
path: $7oI3p$path.join((0, $fac425c10fbbada5$export$a7c5707626fc90f), "Library", "Application Support", "Firefox", "Profiles"),
|
|
362
360
|
name: "cookies.sqlite"
|
|
363
361
|
});
|
|
364
362
|
const all = await Promise.all(files.map((file)=>{
|
|
@@ -367,7 +365,7 @@ class $7bb7da9a77b2fd99$export$2e2bcd8739ae039 extends (0, $503d2a3d296fcf21$exp
|
|
|
367
365
|
return all.flat();
|
|
368
366
|
}
|
|
369
367
|
#queryCookiesDb(file, name1, domain1) {
|
|
370
|
-
if (file && !(0, $
|
|
368
|
+
if (file && !(0, $7oI3p$fs.existsSync)(file)) throw new Error(`File ${file} does not exist`);
|
|
371
369
|
if ((0, $fac425c10fbbada5$export$a7b6bc01c63cdfc3).VERBOSE) console.log(`Trying Firefox cookie ${name1} for domain ${domain1}`);
|
|
372
370
|
let sql;
|
|
373
371
|
//language=SQL
|
|
@@ -428,7 +426,7 @@ class $f72befa528c23ca7$export$2e2bcd8739ae039 extends (0, $503d2a3d296fcf21$exp
|
|
|
428
426
|
|
|
429
427
|
function $9a6b2ace073cf1d7$export$2e2bcd8739ae039(token) {
|
|
430
428
|
try {
|
|
431
|
-
const result = (0, ($parcel$interopDefault($
|
|
429
|
+
const result = (0, ($parcel$interopDefault($7oI3p$jsonwebtoken))).decode(token, {
|
|
432
430
|
complete: true
|
|
433
431
|
});
|
|
434
432
|
if ((0, $fac425c10fbbada5$export$a7b6bc01c63cdfc3).VERBOSE) console.log(result);
|
|
@@ -441,7 +439,7 @@ function $9a6b2ace073cf1d7$export$2e2bcd8739ae039(token) {
|
|
|
441
439
|
|
|
442
440
|
async function $7a068a32d4710f0b$export$e6d428437cf2cacb({ name: name , domain: domain }, strategy = new (0, $f72befa528c23ca7$export$2e2bcd8739ae039)()) {
|
|
443
441
|
const results = await strategy.queryCookies(name, domain);
|
|
444
|
-
const results1 = (0, $
|
|
442
|
+
const results1 = (0, $7oI3p$lodash.uniqBy)(results, JSON.stringify);
|
|
445
443
|
const jwtCookies = [];
|
|
446
444
|
for (const result of results1){
|
|
447
445
|
const value = result.value;
|
|
@@ -457,17 +455,17 @@ async function $7a068a32d4710f0b$export$e6d428437cf2cacb({ name: name , domain:
|
|
|
457
455
|
|
|
458
456
|
|
|
459
457
|
|
|
460
|
-
async function $
|
|
458
|
+
async function $cd1ba0160120c006$export$4be65e66cfa2648a(params) {
|
|
461
459
|
const cookies = await (0, $7a068a32d4710f0b$export$e6d428437cf2cacb)(params, new (0, $f72befa528c23ca7$export$2e2bcd8739ae039)());
|
|
462
460
|
if (Array.isArray(cookies) && cookies.length > 0) return cookies.find((cookie)=>cookie != null);
|
|
463
461
|
else throw new Error("Cookie not found");
|
|
464
462
|
}
|
|
465
|
-
async function $
|
|
463
|
+
async function $cd1ba0160120c006$export$c44c5fdef43f0941(params) {
|
|
466
464
|
const cookies = await (0, $7a068a32d4710f0b$export$e6d428437cf2cacb)(params, new (0, $7bb7da9a77b2fd99$export$2e2bcd8739ae039)());
|
|
467
465
|
if (Array.isArray(cookies) && cookies.length > 0) return cookies.find((cookie)=>cookie != null);
|
|
468
466
|
else throw new Error("Cookie not found");
|
|
469
467
|
}
|
|
470
|
-
async function $
|
|
468
|
+
async function $cd1ba0160120c006$export$e5637297e9eb6f2e(params) {
|
|
471
469
|
const cookies = await (0, $7a068a32d4710f0b$export$e6d428437cf2cacb)(params, new (0, $269fe42bfd555305$export$2e2bcd8739ae039)());
|
|
472
470
|
if (Array.isArray(cookies) && cookies.length > 0) return cookies.find((cookie)=>cookie != null);
|
|
473
471
|
else throw new Error("Cookie not found");
|