@mherod/get-cookie 2.1.1 → 2.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.parcelrc +2 -7
- package/bun.lockb +0 -0
- package/dist/cli.js +18319 -2
- package/dist/index.js +24754 -1300
- package/dist/types.d.ts +361 -30
- package/package-lock.json +3997 -6448
- package/package.json +8 -52
- package/src/CookieRow.ts +35 -7
- package/src/CookieSpec.ts +32 -14
- package/src/SpecialCases.ts +6 -5
- package/src/StringToRegex.ts +4 -4
- package/src/browsers/CompositeCookieQueryStrategy.ts +34 -28
- package/src/browsers/CookieQueryStrategy.ts +1 -1
- package/src/browsers/CookieStoreQueryStrategy.ts +71 -55
- package/src/browsers/QuerySqliteThenTransform.ts +27 -64
- package/src/browsers/chrome/ChromeApplicationSupport.ts +4 -0
- package/src/browsers/chrome/ChromeCookieQueryStrategy.ts +118 -91
- package/src/browsers/chrome/decrypt.ts +133 -97
- package/src/browsers/chrome/getChromePassword.ts +22 -5
- package/src/browsers/firefox/FirefoxCookieQueryStrategy.ts +19 -13
- package/src/browsers/getEncryptedChromeCookie.ts +101 -66
- package/src/browsers/mock/MockCookieQueryStrategy.ts +8 -4
- package/src/browsers/safari/SafariCookieQueryStrategy.ts +34 -3
- package/src/cli.ts +36 -29
- package/src/cliQueryCookies.ts +14 -4
- package/src/comboQueryCookieSpec.ts +7 -10
- package/src/cookieQueryOptions.ts +8 -1
- package/src/cookieSpecsFromUrl.ts +53 -7
- package/src/decodeBinaryCookies.ts +72 -0
- package/src/execSimple.ts +1 -2
- package/src/fetchWithCookies.ts +172 -144
- package/src/findAllFiles.ts +10 -0
- package/src/getChromeCookie.ts +6 -8
- package/src/getCookie.ts +8 -8
- package/src/getFirefoxCookie.ts +13 -9
- package/src/getGroupedRenderedCookies.ts +29 -6
- package/src/getMergedRenderedCookies.ts +4 -2
- package/src/global.ts +2 -2
- package/src/index.ts +16 -6
- package/src/isValidJwt.ts +6 -4
- package/src/listChromeProfiles.ts +18 -10
- package/src/logger.ts +0 -1
- package/src/processBeforeReturn.ts +15 -12
- package/src/queryCookies.ts +22 -17
- package/src/resultsRendered.ts +20 -7
- package/src/unpackHeaders.ts +10 -8
- package/src/util/flatMapAsync.ts +20 -16
- package/tsconfig.json +4 -4
- package/dist/index.js.map +0 -1
- package/dist/module.js +0 -1446
- package/dist/module.js.map +0 -1
- package/dist/prompt.2b8c61c0.js +0 -40
- package/dist/prompt.536a2c51.js +0 -40
- package/dist/prompt.fb2c7dad.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/src/CookieStore.ts +0 -27
- package/src/FileCookieStore.ts +0 -178
package/src/queryCookies.ts
CHANGED
|
@@ -3,34 +3,39 @@ import { parsedArgs } from "./argv";
|
|
|
3
3
|
import CompositeCookieQueryStrategy from "./browsers/CompositeCookieQueryStrategy";
|
|
4
4
|
import CookieQueryStrategy from "./browsers/CookieQueryStrategy";
|
|
5
5
|
import isValidJwt from "./isValidJwt";
|
|
6
|
-
import CookieSpec
|
|
6
|
+
import CookieSpec from "./CookieSpec";
|
|
7
7
|
import ExportedCookie from "./ExportedCookie";
|
|
8
8
|
import { CookieQueryOptions } from "./cookieQueryOptions";
|
|
9
|
+
import consola from "./logger";
|
|
9
10
|
|
|
10
11
|
export async function queryCookies(
|
|
11
|
-
{
|
|
12
|
-
name,
|
|
13
|
-
domain,
|
|
14
|
-
}: //
|
|
15
|
-
CookieSpec,
|
|
12
|
+
{ name, domain }: CookieSpec,
|
|
16
13
|
options?: CookieQueryOptions<CookieQueryStrategy>,
|
|
17
14
|
): Promise<ExportedCookie[]> {
|
|
18
15
|
const strategy: CookieQueryStrategy =
|
|
19
16
|
options?.strategy || new CompositeCookieQueryStrategy();
|
|
20
|
-
|
|
17
|
+
|
|
18
|
+
consola.debug(`Using strategy: ${strategy.browserName}`);
|
|
19
|
+
|
|
21
20
|
const results: ExportedCookie[] = await strategy.queryCookies(name, domain);
|
|
22
21
|
const allCookies: ExportedCookie[] = uniqBy(results, JSON.stringify);
|
|
23
22
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
23
|
+
const filterCookies = (
|
|
24
|
+
cookies: ExportedCookie[],
|
|
25
|
+
filterFn: (value: string) => boolean,
|
|
26
|
+
): ExportedCookie[] => {
|
|
27
|
+
const filteredCookies: ExportedCookie[] = [];
|
|
28
|
+
for (const cookie of cookies) {
|
|
29
|
+
if (filterFn(cookie.value)) {
|
|
30
|
+
filteredCookies.push(cookie);
|
|
30
31
|
}
|
|
31
32
|
}
|
|
32
|
-
return
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
return filteredCookies;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const jwtCookies: ExportedCookie[] = parsedArgs["require-jwt"]
|
|
37
|
+
? filterCookies(allCookies, isValidJwt)
|
|
38
|
+
: allCookies;
|
|
39
|
+
|
|
40
|
+
return parsedArgs["single"] ? [jwtCookies[0]] : jwtCookies;
|
|
36
41
|
}
|
package/src/resultsRendered.ts
CHANGED
|
@@ -1,11 +1,24 @@
|
|
|
1
1
|
import { orderBy, uniqBy } from "lodash";
|
|
2
2
|
import ExportedCookie from "./ExportedCookie";
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
function sortResults(results: ExportedCookie[]): ExportedCookie[] {
|
|
5
|
+
return orderBy(results, ["name", "expiry"], ["asc", "desc"]);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
function getUniqueResults(results: ExportedCookie[]): ExportedCookie[] {
|
|
9
|
+
return uniqBy(results, "name");
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function formatResults(results: ExportedCookie[]): string {
|
|
13
|
+
const resultStrings: string[] = [];
|
|
14
|
+
for (const result of results) {
|
|
15
|
+
resultStrings.push(`${result.name}=${result.value}`);
|
|
16
|
+
}
|
|
17
|
+
return resultStrings.join("; ");
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function resultsRendered(results: ExportedCookie[]): string {
|
|
21
|
+
const orderedResults: ExportedCookie[] = sortResults(results);
|
|
22
|
+
const uniqueResults: ExportedCookie[] = getUniqueResults(orderedResults);
|
|
23
|
+
return formatResults(uniqueResults);
|
|
11
24
|
}
|
package/src/unpackHeaders.ts
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
export function unpackHeaders(
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
export function unpackHeaders(
|
|
2
|
+
headerArgs: string[] | string | null,
|
|
3
|
+
): Record<string, string> {
|
|
4
|
+
const headers: Record<string, string> = {};
|
|
5
|
+
if (headerArgs === null) {
|
|
4
6
|
return headers;
|
|
5
7
|
}
|
|
6
8
|
if (Array.isArray(headerArgs)) {
|
|
7
|
-
for (
|
|
8
|
-
const [key, value] =
|
|
9
|
+
for (let i = 0; i < headerArgs.length; i++) {
|
|
10
|
+
const [key, value] = headerArgs[i].split("=");
|
|
9
11
|
headers[key] = value;
|
|
10
12
|
}
|
|
11
|
-
|
|
13
|
+
} else {
|
|
14
|
+
const [key, value] = headerArgs.split("=");
|
|
15
|
+
headers[key] = value;
|
|
12
16
|
}
|
|
13
|
-
const [key, value] = headerArgs.split("=");
|
|
14
|
-
headers[key] = value;
|
|
15
17
|
return headers;
|
|
16
18
|
}
|
package/src/util/flatMapAsync.ts
CHANGED
|
@@ -3,35 +3,39 @@
|
|
|
3
3
|
|
|
4
4
|
export async function flatMapAsync<T, O>(
|
|
5
5
|
array: T[], // The input array to transform.
|
|
6
|
-
callback: (value: T, index: number, array: T[]) => Promise<O[]>, // The async function to apply to each input array element
|
|
6
|
+
callback: (value: T, index: number, array: T[]) => Promise<O[]>, // The async function to apply to each input array element.
|
|
7
7
|
or?: O[] | ((error: any) => O[] | Promise<O[]>), // An optional callback to handle errors.
|
|
8
8
|
): Promise<O[]> {
|
|
9
9
|
if (or) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
10
|
+
const errorHandlingCallback = async (
|
|
11
|
+
value: T,
|
|
12
|
+
index: number,
|
|
13
|
+
array: T[],
|
|
14
|
+
): Promise<O[]> => {
|
|
15
|
+
try {
|
|
16
|
+
return await callback(value, index, array);
|
|
17
|
+
} catch (error) {
|
|
18
|
+
return typeof or === "function" ? await or(error) : or;
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
return flatMapAsync(array, errorHandlingCallback);
|
|
21
22
|
}
|
|
22
23
|
|
|
23
|
-
// Step 1: Use
|
|
24
|
+
// Step 1: Use a for loop to transform each element of the input array with the provided callback.
|
|
24
25
|
// This will result in an array of promises.
|
|
25
|
-
const
|
|
26
|
+
const promises: Promise<O[]>[] = [];
|
|
27
|
+
for (let i = 0; i < array.length; i++) {
|
|
28
|
+
promises.push(callback(array[i], i, array));
|
|
29
|
+
}
|
|
26
30
|
|
|
27
31
|
// Step 2: Use Promise.all to wait for all promises in the array to fulfill.
|
|
28
32
|
// This will give us an array of fulfilled promise values.
|
|
29
|
-
const awaitedAll:
|
|
33
|
+
const awaitedAll: O[][] = await Promise.all(promises);
|
|
30
34
|
|
|
31
35
|
// Step 3: Flatten the array of fulfilled promise values into a single array.
|
|
32
36
|
// Note: The '@ts-ignore' comment is used to suppress TypeScript compiler warnings, as .flat() method might not be recognized
|
|
33
37
|
// as a valid method for an array of Awaited<O> instances. However, this code assumes that the result of Promise.all
|
|
34
38
|
// is indeed an array that can be flattened.
|
|
35
39
|
// @ts-ignore
|
|
36
|
-
return awaitedAll.flat()
|
|
40
|
+
return awaitedAll.flat();
|
|
37
41
|
}
|
package/tsconfig.json
CHANGED
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
"src/**.js",
|
|
6
6
|
"src/**.jsx",
|
|
7
7
|
"src/**.test.ts",
|
|
8
|
-
"src/**.test.js"
|
|
8
|
+
"src/**.test.js",
|
|
9
9
|
],
|
|
10
10
|
"compilerOptions": {
|
|
11
11
|
"moduleResolution": "node",
|
|
12
12
|
"target": "es6",
|
|
13
|
-
"types": ["node", "jest"],
|
|
13
|
+
"types": ["node", "jest", "bun-types"],
|
|
14
14
|
"lib": ["es2015", "es2017", "es2021", "dom"],
|
|
15
15
|
"strict": true,
|
|
16
16
|
"skipDefaultLibCheck": true,
|
|
@@ -21,6 +21,6 @@
|
|
|
21
21
|
"esModuleInterop": true,
|
|
22
22
|
"module": "commonjs",
|
|
23
23
|
"outDir": "dist",
|
|
24
|
-
"outFile": "dist/types.d.ts"
|
|
25
|
-
}
|
|
24
|
+
"outFile": "dist/types.d.ts",
|
|
25
|
+
},
|
|
26
26
|
}
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"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,Q,I,E,S,O;Y,Q;Q;I;I,O,I,C,K,C,I,O,C,E,S,O,E,M;Q,S,U,K;Y,I;gB,K,U,I,C;Y,E,O,G;gB,O;Y;Q;Q,S,S,K;Y,I;gB,K,S,C,Q,C;Y,E,O,G;gB,O;Y;Q;Q,S,K,M;Y,O,I,G,Q,O,K,I,M,O,K,E,I,C,W;Q;Q,K,A,C,Y,U,K,C,S,c,E,C,E,I;I;A;AEnCM,SAAgB,0CAAW,OAAe;I,O,gC,I,E,K,G,K,G;QAC9C,IAAI;YACF,MAAM,SAAS,CAAA,GAAA,6BAAA,EAAS,SAAS;gBAC/B,UAAU;gBACV,WAAW;YACZ;YACD,OAAO,OAAO,IAAI;QACnB,EAAC,OAAO,OAAO;YACd,MAAM;QACP;IACH;AAAC;;;A,I,kC,a,U,S,I,S,O,E,U,E,C,E,S;I,S,M,K;Q,O,iB,I,Q,I,E,S,O;Y,Q;Q;I;I,O,I,C,K,C,I,O,C,E,S,O,E,M;Q,S,U,K;Y,I;gB,K,U,I,C;Y,E,O,G;gB,O;Y;Q;Q,S,S,K;Y,I;gB,K,S,C,Q,C;Y,E,O,G;gB,O;Y;Q;Q,S,K,M;Y,O,I,G,Q,O,K,I,M,O,K,E,I,C,W;Q;Q,K,A,C,Y,U,K,C,S,c,E,C,E,I;I;A;ADVD,gDAAgD;AAChD,MAAM,uCACJ,QAAQ,QAAQ,IAAI,WAChB,CAAA,GAAA,yCAAA,EAAW,gEACX,QAAQ,MAAM,CAAC,IAAI,MAAM;AAEzB,SAAgB;I,O,gC,I,E,K,G,K,G;QACpB,OAAO,MAAM;IACf;AAAC;;;AEFK,SAAU,0CAAiB,GAAQ;IACvC,OACE,OAAO,IAAI,MAAM,KAAK,YACtB,OAAO,IAAI,IAAI,KAAK,YACpB,OAAO,IAAI,KAAK,KAAK,YACpB,CAAA,IAAI,MAAM,KAAK,aACd,IAAI,MAAM,YAAY,QACtB,IAAI,MAAM,KAAK,UAAA,KAChB,CAAA,IAAI,IAAI,KAAK,aAAa,OAAO,IAAI,IAAI,KAAK,QAAA;AAEnD;;;;;AClBA,sHAAsH;AACtH,2IAA2I;A,I,kC,a,U,S,I,S,O,E,U,E,C,E,S;I,S,M,K;Q,O,iB,I,Q,I,E,S,O;Y,Q;Q;I;I,O,I,C,K,C,I,O,C,E,S,O,E,M;Q,S,U,K;Y,I;gB,K,U,I,C;Y,E,O,G;gB,O;Y;Q;Q,S,S,K;Y,I;gB,K,S,C,Q,C;Y,E,O,G;gB,O;Y;Q;Q,S,K,M;Y,O,I,G,Q,O,K,I,M,O,K,E,I,C,W;Q;Q,K,A,C,Y,U,K,C,S,c,E,C,E,I;I;A;AAErI,SAAgB,0CACpB,KAAU,EACV,QAA+D,EAC/D,EAA+C;I,O,gC,I,E,K,G,K,G;QAE/C,IAAI,IACF,OAAO,0CACL,OACA,CAAO,OAAU,OAAe,QAFlC,gCAAA,IAAA,EAAA,KAAA,GAAA,KAAA,GAAA;gBAGI,IAAI;oBACF,OAAO,MAAM,SAAS,OAAO,OAAO;gBACrC,EAAC,OAAO,OAAO;oBACd,OAAO,OAAO,MAAM,aAAa,GAAG,SAAS;gBAC9C;YACH;QAKJ,2GAA2G;QAC3G,4CAA4C;QAC5C,MAAM,KAAmB,MAAM,GAAG,CAAC;QAEnC,4EAA4E;QAC5E,0DAA0D;QAC1D,MAAM,aAA2B,MAAM,QAAQ,GAAG,CAAC;QAEnD,6EAA6E;QAC7E,6HAA6H;QAC7H,oHAAoH;QACpH,4CAA4C;QAC5C,aAAa;QACb,OAAO,WAAW,IAAI;IACxB;AAAC;;;;;;;;;A,I,kC,a,U,S,I,S,O,E,U,E,C,E,S;I,S,M,K;Q,O,iB,I,Q,I,E,S,O;Y,Q;Q;I;I,O,I,C,K,C,I,O,C,E,S,O,E,M;Q,S,U,K;Y,I;gB,K,U,I,C;Y,E,O,G;gB,O;Y;Q;Q,S,S,K;Y,I;gB,K,S,C,Q,C;Y,E,O,G;gB,O;Y;Q;Q,S,K,M;Y,O,I,G,Q,O,K,I,M,O,K,E,I,C,W;Q;Q,K,A,C,Y,U,K,C,S,c,E,C,E,I;I;A;AEtBD,SAAS,yCAAmB,IAAY;IACtC,IAAI,CAAC,QAAQ,CAAC,CAAA,GAAA,mCAAA,EAAG,UAAU,CAAC,OAC1B,MAAM,IAAI,MAAM,CAAA,KAAA,EAAQ,KAAI,eAAA,CAAiB;AAEjD;AAEA,SAAS,qCAAe,IAAY;IAClC,OAAO,IAAI,CAAA,GAAA,uBAAA,EAAS;AACtB;AAEA,SAAS,oCACP,EAAE;AACF,IAAW,EACX,SAAgC,EAChC,YAAqC,EACrC,IAAY;IAGZ,OAAO,KAAK,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;QACjC,MAAM,WAAW;YACf,MAAM;gBACJ,MA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MAAM,SAAS,UAAU,MAAM;gBAC/B,MAAM,cACJ,UAAU,QAAQ,SAAS,IACvB;oBACE,QAAQ,IAAI,KAAK;gBAClB,IACD;oBACE,QAAQ;gBACT;gBACP,CAAA,GAAA,mBAAA,EAAM,gBAAgB;gBACtB,OAAO;YACT;QACF,MAAM,UAA4B,AAAC,CAAA,MAAM,QAAQ,GAAG,CAAC,UAAS,EAAG,MAAM,CACrE,CAAA,GAAA,yCAAA;QAEF,IAAI,CAAA,GAAA,yCAAA,EAAW,OAAO,EACpB,QAAQ,GAAG,CAAC,WAAW;QAEzB,OAAO;IACT;AAAC;;;;;;;AehIK,SAAU,0CAAa,QAAE,IAAI,UAAE,MAAM,EAAc;IAKvD,MAAM,iBAAiB;IACvB,OAAO;QACL,eAAe,KAAK,KAAK,CAAC,mBAAmB;QAC7C,iBAAiB,OAAO,KAAK,CAAC,mBAAmB;IAElD;AACH;;;;;A,I,kC,a,U,S,I,S,O,E,U,E,C,E,S;I,S,M,K;Q,O,iB,I,Q,I,E,S,O;Y,Q;Q;I;I,O,I,C,K,C,I,O,C,E,S,O,E,M;Q,S,U,K;Y,I;gB,K,U,I,C;Y,E,O,G;gB,O;Y;Q;Q,S,S,K;Y,I;gB,K,S,C,Q,C;Y,E,O,G;gB,O;Y;Q;Q,S,K,M;Y,O,I,G,Q,O,K,I,M,O,K,E,I,C,W;Q;Q,K,A,C,Y,U,K,C,S,c,E,C,E,I;I;A;A,I,+C,a,U,sB,I,S,Q,E,K,E,I,E,C;I,I,S,O,C,G,M,I,U;I,I,O,U,a,a,S,C,I,C,M,G,C,W,M,I,U;I,O,S,M,I,S,M,E,I,C,Y,I,E,K,G,M,G,C;A;A,I,6D,oE;ADDA,MAAqB;IAArB,aAAA;Q,4D,G,C,I;QACE,IAAA,CAAA,WAAW,GAAG;IAyFhB;IAvFQ,aAAa,IAAY,EAAE,MAAc,EAAzC;Q,O,gC,I,E,K,G,K,G;YACJ,IAAI,QAAQ,QAAQ,KAAK,UACvB,kBAAkB;YAClB,OAAO,EAAE;YAEX,IAAI,CAAA,GAAA,yCAAA,EAAW,OAAO,KAAK,WACzB,OAAO,EAAE;YAEX,MAAM,UAAU,MAAM,6CAAA,IAAI,EAAA,6DAAA,KAAA,oEAAkB,IAAA,CAAtB,IAAI,EAAmB;sBAAE;wBAAM;YAAM;YAC3D,IAAI,MAAM,OAAO,CAAC,UAChB,OAAO,QAAQ,GAAG,CAAC,CAAC;gBAClB,OAAO;oBACL,QAAQ,OAAO,MAAM;oBACrB,MAAM,OAAO,IAAI;oBACjB,OAAO,OAAO,KAAK,CAAC,QAAQ,CAAC;gBAC9B;YACH;iBAEA,OAAO,EAAE;QAEb;IAAC;AAmEF;AAhEG,8DAAA,IAAA,WAAA,qEAAA,SAAA,6CAAA,QAAE,IAAI,UAAE,MAAM,EAAc;I,O,gC,I,E,K,G,K,G;QAE5B,MAAM,QAAkB,CAAA,GAAA,yCAAA,EAAa;YACnC,MAAM,iBACJ,CAAA,GAAA,wCAAA,GACA,WACA,uBACA,WACA;YAEF,MAAM;QACP;QACD,MAAM,KAA6C,CAAO,OAA1D,gCAAA,IAAA,EAAA,KAAA,GAAA,KAAA,GAAA;gBACE,OAAO,MAAM,6CAAA,IAAI,EAAA,6DAAA,KAAA,kEAAgB,IAAA,CAApB,IAAI,EAAiB,MAAM,MAAM;YAChD;QACA,MAAM,MAAqB,MAAM,QAAQ,GAAG,CAAC,MAAM,GAAG,CAAC;QACvD,UAAU;QACV,OAAO,IAAI,IAAI;IACjB;AAGE,GAAA,mEAAA,SAAA,2CAAA,IAAY,EACZ,IAAY,EACZ,MAAc;I,O,gC,I,E,K,G,K,G;QAEd,IAAI,QAAQ,CAAC,CAAA,GAAA,oBAAA,EAAW,OACtB,MAAM,IAAI,MAAM,CAAA,KAAA,EAAQ,KAAI,eAAA,CAAiB;QAE/C,IAAI;QACJ,cAAc;QACd,MAAM;QACN,MAAM,iBAAE,aAAa,mBAAE,eAAe,EAAE,GAAG,CAAA,GAAA,yCAAA,EAAa;kBAAE;oBAAM;QAAM;QACtE,IAAI,iBAAiB,iBAAiB;YACpC,OAAO,CAAA,OAAA,CAAS;YAChB,IAAI,eAAe;gBACjB,OAAO,CAAA,QAAA,EAAW,KAAI,CAAA,CAAG;gBACzB,IAAI,iBACF,OAAO,CAAA,KAAA,CAAO;YAEjB;YACD,IAAI,iBACF,OAAO,CAAA,WAAA,EAAc,OAAM,EAAA,CAAI;QAElC;QACD,MAAM,eAAe,CAAC;YACpB,mCAAmC;YACnC,MAAM,QAAQ,IAAI,KAAe;YACjC,OAAO;gBACL,QAAQ,IAAI,MAAgB;gBAC5B,MAAM,IAAI,IAAc;gBACxB,OAAO,OAAO,IAAI,CAAC,OAAO;YAC3B;QACH;QACA,IAAI;YACF,OAAO,MAAM,CAAA,GAAA,yCAAA,EAAyB;sBACpC;qBACA;8BACA;YACD;QACF,EAAC,OAAO,GAAG;YACV,QAAQ,KAAK,CAAC,CAAA,eAAA,EAAkB,KAAI,CAAE,EAAE;YACxC,OAAO,EAAE;QACV;IACH;A;IAzFmB,2CAAA;;;A,I,kC,a,U,S,I,S,O,E,U,E,C,E,S;I,S,M,K;Q,O,iB,I,Q,I,E,S,O;Y,Q;Q;I;I,O,I,C,K,C,I,O,C,E,S,O,E,M;Q,S,U,K;Y,I;gB,K,U,I,C;Y,E,O,G;gB,O;Y;Q;Q,S,S,K;Y,I;gB,K,S,C,Q,C;Y,E,O,G;gB,O;Y;Q;Q,S,K,M;Y,O,I,G,Q,O,K,I,M,O,K,E,I,C,W;Q;Q,K,A,C,Y,U,K,C,S,c,E,C,E,I;I;A;AETP;IAAd,aAAA;QACE,IAAA,CAAA,WAAW,GAAG;IAMhB;IAJQ,aAAa,IAAY,EAAE,MAAc,EAAzC;Q,O,gC,I,E,K,G,K,G;YACJ,kBAAkB;YAClB,OAAO,EAAE;QACX;IAAC;AACF;;;;;;;;A,I,kC,a,U,S,I,S,O,E,U,E,C,E,S;I,S,M,K;Q,O,iB,I,Q,I,E,S,O;Y,Q;Q;I;I,O,I,C,K,C,I,O,C,E,S,O,E,M;Q,S,U,K;Y,I;gB,K,U,I,C;Y,E,O,G;gB,O;Y;Q;Q,S,S,K;Y,I;gB,K,S,C,Q,C;Y,E,O,G;gB,O;Y;Q;Q,S,K,M;Y,O,I,G,Q,O,K,I,M,O,K,E,I,C,W;Q;Q,K,A,C,Y,U,K,C,S,c,E,C,E,I;I;A;AjBCD,MAAM,8BAA4C,IAAI,CAAA,GAAA,yCAAA,EAGpD;IACA,KAAK;IACL,KAAK;AACN;AAEa;IAOZ,aAAA;QAJA,IAAA,CAAA,WAAW,GAAG;QAKZ,IAAI,CAAC,UAAU,GAAG;YAChB,4BAA4B;YAC5B,CAAA,GAAA,wCAAA;YACA,CAAA,GAAA,wCAAA;YACA,CAAA,GAAA,wCAAA;SACD,CAAC,GAAG,CAAC,CAAC;YACL,OAAO,IAAI;QACb;IACF;IAEM,aAAa,IAAY,EAAE,MAAc,EAAzC;Q,O,gC,I,E,K,G,K,G;YACJ,0DAA0D;YAC1D,MAAM,MAAM,CAAA,EAAG,KAAI,CAAA,EAAI,OAAM,CAAE;YAC/B,IAAI,4BAAM,GAAG,CAAC,MAAM;gBAClB,MAAM,SAAS,4BAAM,GAAG,CAAC;gBACzB,IAAI,QACF,OAAO;YAEV;YACD,IAAI,CAAA,GAAA,yCAAA,EAAW,OAAO,EACpB,CAAA,GAAA,wCAAA,EAAQ,GAAG,CAAC,qBAAqB,MAAM;YAEzC,MAAM,UAAU,MAAM,CAAA,GAAA,yCAAA,EAAa,IAAI,CAAC,UAAU,EAAE,CAAO,WAA3D,gCAAA,IAAA,EAAA,KAAA,GAAA,KAAA,GAAA;oBACE,OAAO,SACJ,YAAY,CAAC,MAAM,QACnB,IAAI,CAAC,CAAC;wBACL,OAAO,QAAQ,GAAG,CAAC,CAAC;4BAClB,OAAO,CAAA,GAAA,mBAAA,EAAM,QAAQ;gCACnB,MAAM;oCACJ,SAAS,SAAS,WAAW;gCAC9B;4BACF;wBACH;oBACF,GACC,KAAK,CAAC,CAAC;wBACN,CAAA,GAAA,wCAAA,EAAQ,KAAK,CAAC,CAAA,eAAA,EAAkB,SAAS,WAAW,CAAA,QAAA,CAAU,EAAE;wBAChE,OAAO,EAAE;oBACX;gBACJ;YACA,4BAAM,GAAG,CAAC,CAAA,EAAG,KAAI,CAAA,EAAI,OAAM,CAAE,EAAE;YAC/B,OAAO;QACT;IAAC;AACF;;;;;AkBlEa,kDAAqB,KAAa;IAC9C,IAAI;QACF,MAAM,SAAS,CAAA,GAAA,6CAAA,EAAa,MAAM,CAAC,OAAO;YAAE,UAAU;QAAI;QAC1D,IAAI,CAAA,GAAA,yCAAA,EAAW,OAAO,IAAI,QACxB,QAAQ,KAAK,CAAC;QAEhB,MAAM,UAAsB,WAAM,QAAN,WAAM,KAAA,IAAA,KAAA,IAAN,OAAQ,OAAqB;QACzD,IAAI,SAAS;YACX,MAAM,MAAM,QAAQ,GAAG;YACvB,IAAI,KAAK;gBACP,MAAM,MAAM,IAAI,OAAO,OAAO,KAAK;gBACnC,IAAI,MAAM,KACR,OAAO;YAEV;QACF;QACD,OAAO;IACR,EAAC,OAAO,KAAK;QACZ,OAAO;IACR;AACH;;;A,I,kC,a,U,S,I,S,O,E,U,E,C,E,S;I,S,M,K;Q,O,iB,I,Q,I,E,S,O;Y,Q;Q;I;I,O,I,C,K,C,I,O,C,E,S,O,E,M;Q,S,U,K;Y,I;gB,K,U,I,C;Y,E,O,G;gB,O;Y;Q;Q,S,S,K;Y,I;gB,K,S,C,Q,C;Y,E,O,G;gB,O;Y;Q;Q,S,K,M;Y,O,I,G,Q,O,K,I,M,O,K,E,I,C,W;Q;Q,K,A,C,Y,U,K,C,S,c,E,C,E,I;I;A;ApBdM,SAAgB,0CACpB,QACE,IAAI,UACJ,MAAM,EAEE,EACV,OAAiD;I,O,gC,I,E,K,G,K,G;QAEjD,MAAM,WACJ,AAAA,CAAA,YAAO,QAAP,YAAO,KAAA,IAAA,KAAA,IAAP,QAAS,QAAQ,AAAR,KAAY,IAAI,CAAA,GAAA,wCAAA;QAC3B,EAAE;QACF,MAAM,UAA4B,MAAM,SAAS,YAAY,CAAC,MAAM;QACpE,MAAM,aAA+B,CAAA,GAAA,oBAAA,EAAO,SAAS,KAAK,SAAS;QAEnE,IAAI,CAAA,GAAA,yCAAA,CAAU,CAAC,cAAc,EAAE;YAC7B,MAAM,aAAa,EAAE;YACrB,KAAK,MAAM,UAAU,WAAY;gBAC/B,MAAM,QAAgB,OAAO,KAAK;gBAClC,IAAI,CAAA,GAAA,wCAAA,EAAW,QACb,WAAW,IAAI,CAAC;YAEnB;YACD,OAAO,CAAA,GAAA,yCAAA,CAAU,CAAC,SAAS,GAAG;gBAAC,UAAU,CAAC,EAAE;aAAC,GAAG;QACjD,OACC,OAAO,CAAA,GAAA,yCAAA,CAAU,CAAC,SAAS,GAAG;YAAC,UAAU,CAAC,EAAE;SAAC,GAAG;IAEpD;AAAC;;;;A,I,kC,a,U,S,I,S,O,E,U,E,C,E,S;I,S,M,K;Q,O,iB,I,Q,I,E,S,O;Y,Q;Q;I;I,O,I,C,K,C,I,O,C,E,S,O,E,M;Q,S,U,K;Y,I;gB,K,U,I,C;Y,E,O,G;gB,O;Y;Q;Q,S,S,K;Y,I;gB,K,S,C,Q,C;Y,E,O,G;gB,O;Y;Q;Q,S,K,M;Y,O,I,G,Q,O,K,I,M,O,K,E,I,C,W;Q;Q,K,A,C,Y,U,K,C,S,c,E,C,E,I;I;A;AD9BK,SAAgB,0CACpB,MAAkB;I,O,gC,I,E,K,G,K,G;QAElB,EAAE;QACF,MAAM,UAA4B,MAAM,CAAA,GAAA,yCAAA,EACtC,QACA;YACE,UAAU,IAAI,CAAA,GAAA,wCAAA;QACf;QAGH,IAAI,MAAM,OAAO,CAAC,YAAY,QAAQ,MAAM,GAAG,GAC7C,OAAO,QAAQ,IAAI,CAAC,CAAC,SAAW,UAAU;aAE1C,MAAM,IAAI,MAAM;IAEpB;AAAC;;;;;;A,I,kC,a,U,S,I,S,O,E,U,E,C,E,S;I,S,M,K;Q,O,iB,I,Q,I,E,S,O;Y,Q;Q;I;I,O,I,C,K,C,I,O,C,E,S,O,E,M;Q,S,U,K;Y,I;gB,K,U,I,C;Y,E,O,G;gB,O;Y;Q;Q,S,S,K;Y,I;gB,K,S,C,Q,C;Y,E,O,G;gB,O;Y;Q;Q,S,K,M;Y,O,I,G,Q,O,K,I,M,O,K,E,I,C,W;Q;Q,K,A,C,Y,U,K,C,S,c,E,C,E,I;I;A;AsBfK,SAAgB,0CACpB,MAAkB;I,O,gC,I,E,K,G,K,G;QAElB,MAAM,UAAU,MAAM,CAAA,GAAA,yCAAA,EACpB,QACA;YACE,UAAU,IAAI,CAAA,GAAA,wCAAA;QACf;QAGH,IAAI,QAAQ,MAAM,IAAI,GACpB,MAAM,IAAI,MAAM;QAElB,OAAO,QAAQ,IAAI,CAAC,CAAA,GAAA,yCAAA;IACtB;AAAC;;;;;A,I,kC,a,U,S,I,S,O,E,U,E,C,E,S;I,S,M,K;Q,O,iB,I,Q,I,E,S,O;Y,Q;Q;I;I,O,I,C,K,C,I,O,C,E,S,O,E,M;Q,S,U,K;Y,I;gB,K,U,I,C;Y,E,O,G;gB,O;Y;Q;Q,S,S,K;Y,I;gB,K,S,C,Q,C;Y,E,O,G;gB,O;Y;Q;Q,S,K,M;Y,O,I,G,Q,O,K,I,M,O,K,E,I,C,W;Q;Q,K,A,C,Y,U,K,C,S,c,E,C,E,I;I;A;ACfK,SAAgB,0CACpB,MAAkB;I,O,gC,I,E,K,G,K,G;QAElB,MAAM,UAA4B,MAAM,CAAA,GAAA,yCAAA,EACtC,QACA;YACE,UAAU,IAAI,CAAA,GAAA,wCAAA;QACf;QAGH,IAAI,MAAM,OAAO,CAAC,YAAY,QAAQ,MAAM,GAAG,GAC7C,OAAO,QAAQ,IAAI,CAAC,CAAC,SAAW,UAAU;aAE1C,MAAM,IAAI,MAAM;IAEpB;AAAC;;;;;AEjBK,SAAU,0CAAgB,OAAyB;IACvD,qCAAqC;IACrC,wCAAwC;IACxC,MAAM,iBAAiB,CAAA,GAAA,qBAAA,EAAQ,SAAS;QAAC;QAAQ;KAAS,EAAE;QAAC;QAAO;KAAO;IAC3E,OAAO,CAAA,GAAA,oBAAA,EAAO,gBAAgB,CAAC,IAAsB,EAAE,IAAI,EACxD,GAAG,CAAC,CAAC,IAAsB,EAAE,IAAI,GAAG,MAAM,EAAE,KAAK,EACjD,IAAI,CAAC;AACV;;;;;;;;;AGAO,MAAM,4CACX;IACE,UAAU,IAAI,CAAA,GAAA,wCAAA;AACf;AAEG,SAAU,0CACd,OAA+B;IAE/B,OAAO,CAAA,GAAA,mBAAA,EAAM,2CAA2B;AAC1C;;;;ACdM,SAAU,yCACd,OAAyB,EACzB,OAA+B;IAE/B,IAAI,YAAO,QAAP,YAAO,KAAA,IAAA,KAAA,IAAP,QAAS,aAAa,EACxB,OAAO,QAAQ,MAAM,CAAC,CAAC;QACrB,MAAM,SAAwC,EAAE,MAAM;QACtD,IAAI,WAAW,WACb,OAAO;aACF,IAAI,WAAW,YACpB,OAAO;aAEP,OAAO,OAAO,OAAO,KAAK,KAAK,GAAG;IAEtC;IAEF,IAAI,YAAO,QAAP,YAAO,KAAA,IAAA,KAAA,IAAP,QAAS,KAAK,EAChB,OAAO,QAAQ,KAAK,CAAC,GAAG,QAAQ,KAAK;IAEvC,OAAO,CAAA,GAAA,oBAAA,EAAO,SAAS,KAAK,SAAS;AACvC;;;A,I,kC,a,U,S,I,S,O,E,U,E,C,E,S;I,S,M,K;Q,O,iB,I,Q,I,E,S,O;Y,Q;Q;I;I,O,I,C,K,C,I,O,C,E,S,O,E,M;Q,S,U,K;Y,I;gB,K,U,I,C;Y,E,O,G;gB,O;Y;Q;Q,S,S,K;Y,I;gB,K,S,C,Q,C;Y,E,O,G;gB,O;Y;Q;Q,S,K,M;Y,O,I,G,Q,O,K,I,M,O,K,E,I,C,W;Q;Q,K,A,C,Y,U,K,C,S,c,E,C,E,I;I;A;AHjBM,SAAgB,0CACpB,UAA2B,EAC3B,OAAiD;I,O,gC,I,E,K,G,K,G;QAEjD,MAAM,mBACJ,CAAA,GAAA,yCAAA,EAAmB;QACrB,MAAM,KAAK,CAAC,KAAmB,CAAA,GAAA,yCAAA,EAAa,IAAI;QAEhD,IAAI,MAAM,OAAO,CAAC,aAAa;YAC7B,MAAM,sBAAwC,MAAM,CAAA,GAAA,yCAAA,EAClD,YACA,CAAO,KAFT,gCAAA,IAAA,EAAA,KAAA,GAAA,KAAA,GAAA;oBAGI,OAAO,MAAM,GAAG;gBAClB;YAEF,OAAO,CAAA,GAAA,wCAAA,EAAoB,qBAAqB;QACjD,OAAM;YACL,MAAM,uBAAyC,MAAM,GAAG;YACxD,OAAO,CAAA,GAAA,wCAAA,EAAoB,sBAAsB;QAClD;IACH;AAAC;;;A,I,kC,a,U,S,I,S,O,E,U,E,C,E,S;I,S,M,K;Q,O,iB,I,Q,I,E,S,O;Y,Q;Q;I;I,O,I,C,K,C,I,O,C,E,S,O,E,M;Q,S,U,K;Y,I;gB,K,U,I,C;Y,E,O,G;gB,O;Y;Q;Q,S,S,K;Y,I;gB,K,S,C,Q,C;Y,E,O,G;gB,O;Y;Q;Q,S,K,M;Y,O,I,G,Q,O,K,I,M,O,K,E,I,C,W;Q;Q,K,A,C,Y,U,K,C,S,c,E,C,E,I;I;A;AFtBK,SAAgB,0CACpB,UAA2B;I,O,gC,I,E,K,G,K,G;QAE3B,MAAM,UAA4B,MAAM,CAAA,GAAA,yCAAA,EAAqB;QAC7D,IAAI,QAAQ,MAAM,IAAI,GACpB,MAAM,IAAI,MAAM;QAElB,MAAM,gBAAgB,CAAA,GAAA,qBAAA,EAAQ,SAAS,CAAC;YAAqB,IAAA;YAAC,OAAA,AAAA,CAAA,KAAA,EAAE,IAAI,AAAJ,MAAI,QAAA,OAAA,KAAA,IAAA,KAAA,IAAA,GAAE,IAAI;QAAA;QAC1E,OAAO,OAAO,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;YACrC,MAAM,UAA4B,aAAa,CAAC,KAAK;YACrD,OAAO,CAAA,GAAA,yCAAA,EAAgB;QACzB;IACF;AAAC;;;;;;A,I,kC,a,U,S,I,S,O,E,U,E,C,E,S;I,S,M,K;Q,O,iB,I,Q,I,E,S,O;Y,Q;Q;I;I,O,I,C,K,C,I,O,C,E,S,O,E,M;Q,S,U,K;Y,I;gB,K,U,I,C;Y,E,O,G;gB,O;Y;Q;Q,S,S,K;Y,I;gB,K,S,C,Q,C;Y,E,O,G;gB,O;Y;Q;Q,S,K,M;Y,O,I,G,Q,O,K,I,M,O,K,E,I,C,W;Q;Q,K,A,C,Y,U,K,C,S,c,E,C,E,I;I;A;AMVK,SAAgB,0CACpB,UAA2B,EAC3B,WAAgC,IAAI,CAAA,GAAA,wCAAA,GAA8B;I,O,gC,I,E,K,G,K,G;QAElE,MAAM,UAA4B,M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","sources":["src/index.ts","src/getCookie.ts","src/queryCookies.ts","src/argv.ts","src/browsers/CompositeCookieQueryStrategy.ts","src/browsers/chrome/ChromeCookieQueryStrategy.ts","src/CookieRow.ts","src/browsers/chrome/ChromeApplicationSupport.ts","src/global.ts","src/browsers/chrome/decrypt.ts","src/logger.ts","src/findAllFiles.ts","src/browsers/chrome/getChromePassword.ts","src/execSimple.ts","src/ExportedCookie.ts","src/util/flatMapAsync.ts","src/browsers/getEncryptedChromeCookie.ts","src/browsers/QuerySqliteThenTransform.ts","src/StringToRegex.ts","src/browsers/firefox/FirefoxCookieQueryStrategy.ts","src/SpecialCases.ts","src/browsers/safari/SafariCookieQueryStrategy.ts","src/isValidJwt.ts","src/getChromeCookie.ts","src/getFirefoxCookie.ts","src/getGroupedRenderedCookies.ts","src/resultsRendered.ts","src/comboQueryCookieSpec.ts","src/util/index.ts","src/cookieQueryOptions.ts","src/processBeforeReturn.ts","src/getMergedRenderedCookies.ts","src/fetchWithCookies.ts","src/cookieSpecsFromUrl.ts"],"sourcesContent":["import { getCookie } from \"./getCookie\";\nimport { getChromeCookie } from \"./getChromeCookie\";\nimport { getFirefoxCookie } from \"./getFirefoxCookie\";\nimport { getGroupedRenderedCookies } from \"./getGroupedRenderedCookies\";\nimport { getMergedRenderedCookies } from \"./getMergedRenderedCookies\";\nimport { fetchWithCookies } from \"./fetchWithCookies\";\n\nexport {\n getCookie,\n getChromeCookie,\n getFirefoxCookie,\n getMergedRenderedCookies,\n getGroupedRenderedCookies,\n fetchWithCookies,\n //\n};\n","import CookieSpec from \"./CookieSpec\";\nimport ExportedCookie from \"./ExportedCookie\";\nimport { queryCookies } from \"./queryCookies\";\nimport CompositeCookieQueryStrategy from \"./browsers/CompositeCookieQueryStrategy\";\n\nexport async function getCookie(\n params: CookieSpec,\n): Promise<ExportedCookie | undefined> {\n //\n const cookies: ExportedCookie[] = await queryCookies(\n params,\n {\n strategy: new CompositeCookieQueryStrategy(),\n },\n //\n );\n if (Array.isArray(cookies) && cookies.length > 0) {\n return cookies.find((cookie) => cookie != null);\n } else {\n throw new Error(\"Cookie not found\");\n }\n}\n","import { uniqBy } from \"lodash\";\nimport { parsedArgs } from \"./argv\";\nimport CompositeCookieQueryStrategy from \"./browsers/CompositeCookieQueryStrategy\";\nimport CookieQueryStrategy from \"./browsers/CookieQueryStrategy\";\nimport isValidJwt from \"./isValidJwt\";\nimport CookieSpec, { MultiCookieSpec } from \"./CookieSpec\";\nimport ExportedCookie from \"./ExportedCookie\";\nimport { CookieQueryOptions } from \"./cookieQueryOptions\";\n\nexport async function queryCookies(\n {\n name,\n domain,\n }: //\n CookieSpec,\n options?: CookieQueryOptions<CookieQueryStrategy>,\n): Promise<ExportedCookie[]> {\n const strategy: CookieQueryStrategy =\n options?.strategy || new CompositeCookieQueryStrategy();\n //\n const results: ExportedCookie[] = await strategy.queryCookies(name, domain);\n const allCookies: ExportedCookie[] = uniqBy(results, JSON.stringify);\n\n if (parsedArgs[\"require-jwt\"]) {\n const jwtCookies = [];\n for (const result of allCookies) {\n const value: string = result.value;\n if (isValidJwt(value)) {\n jwtCookies.push(result);\n }\n }\n return parsedArgs[\"single\"] ? [jwtCookies[0]] : jwtCookies;\n } else {\n return parsedArgs[\"single\"] ? [allCookies[0]] : allCookies;\n }\n}\n","import minimist from \"minimist\";\nimport { merge } from \"lodash\";\n\nexport interface MyParsedArgs extends minimist.ParsedArgs {\n verbose: boolean;\n render?: string;\n fetch?: string;\n cs?: string;\n dump?: string;\n \"dump-request-headers\"?: string;\n \"dump-response-headers\"?: string;\n \"dump-response-body\"?: string;\n}\n\n/*\nUsage: get-cookie [name] [domain] [options]\nOptions:\n -h, --help: Show this help\n -v, --verbose: Show verbose output\n -d, --dump: Dump all results\n -D, --dump-grouped: Dump all results, grouped by profile\n -r, --render: Render all results\n */\n\nexport const argv: string[] = process.argv ?? [];\nconst minimistArgs: minimist.ParsedArgs = minimist(argv.slice(2));\nconst defaultOptions = {\n verbose: false,\n};\nexport const parsedArgs: MyParsedArgs = merge(defaultOptions, minimistArgs);\n","import ChromeCookieQueryStrategy from \"./chrome/ChromeCookieQueryStrategy\";\nimport FirefoxCookieQueryStrategy from \"./firefox/FirefoxCookieQueryStrategy\";\nimport SafariCookieQueryStrategy from \"./safari/SafariCookieQueryStrategy\";\nimport CookieQueryStrategy from \"./CookieQueryStrategy\";\nimport ExportedCookie from \"../ExportedCookie\";\nimport LRUCache from \"lru-cache\";\nimport { merge } from \"lodash\";\nimport { parsedArgs } from \"../argv\";\nimport consola from \"consola\";\nimport { flatMapAsync } from \"../util/flatMapAsync\";\n\nconst cache: LRUCache<string, ExportedCookie[]> = new LRUCache<\n string,\n ExportedCookie[]\n>({\n ttl: 1000 * 10, // 10 seconds\n max: 10,\n});\n\nexport default class CompositeCookieQueryStrategy\n implements CookieQueryStrategy\n{\n browserName = \"all\";\n\n private readonly strategies;\n\n constructor() {\n this.strategies = [\n // CookieStoreQueryStrategy,\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 // domain = domain.match(/(\\w+.+\\w+)/gi)?.pop() ?? domain;\n const key = `${name}:${domain}`;\n if (cache.has(key)) {\n const cached = cache.get(key);\n if (cached) {\n return cached;\n }\n }\n if (parsedArgs.verbose) {\n consola.log(\"Querying cookies:\", name, domain);\n }\n const results = await flatMapAsync(this.strategies, async (strategy) => {\n return strategy\n .queryCookies(name, domain)\n .then((cookies: ExportedCookie[]) => {\n return cookies.map((cookie: ExportedCookie) => {\n return merge(cookie, {\n meta: {\n browser: strategy.browserName,\n },\n });\n });\n })\n .catch((e) => {\n consola.error(`Error querying ${strategy.browserName} cookies`, e);\n return [];\n });\n });\n cache.set(`${name}:${domain}`, results);\n return results;\n }\n}\n","import CookieQueryStrategy from \"../CookieQueryStrategy\";\nimport CookieRow, { isCookieRow } from \"../../CookieRow\";\nimport ExportedCookie from \"../../ExportedCookie\";\nimport { chromeApplicationSupport } from \"./ChromeApplicationSupport\";\nimport { decrypt } from \"./decrypt\";\nimport { env } from \"../../global\";\nimport { findAllFiles } from \"../../findAllFiles\";\nimport { getChromePassword } from \"./getChromePassword\";\nimport { isExportedCookie } from \"../../ExportedCookie\";\nimport { merge } from \"lodash\";\nimport { parsedArgs } from \"../../argv\";\nimport { flatMapAsync } from \"../../util/flatMapAsync\";\nimport { getEncryptedChromeCookie } from \"../getEncryptedChromeCookie\";\nimport logger from \"../../logger\";\n\nexport const consola = logger.withTag(\"ChromeCookieQueryStrategy\");\n\nexport default class ChromeCookieQueryStrategy implements CookieQueryStrategy {\n browserName = \"Chrome\";\n\n async queryCookies(name: string, domain: string): Promise<ExportedCookie[]> {\n if (process.platform !== \"darwin\") {\n throw new Error(\"This only works on macOS\");\n }\n if (env.FIREFOX_ONLY) {\n return [];\n }\n return getChromeCookies({\n requireJwt: false,\n name,\n domain,\n });\n }\n}\n\nasync function getPromise1(\n name: string,\n domain: string,\n file: string,\n): Promise<CookieRow[]> {\n try {\n return await getEncryptedChromeCookie({\n name: name,\n domain: domain,\n file: file,\n });\n } catch (e) {\n if (parsedArgs.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[] = findAllFiles({\n path: chromeApplicationSupport,\n name: \"Cookies\",\n });\n const results1: CookieRow[] = await flatMapAsync(files, async (file) => {\n return await getPromise1(name, domain, file);\n });\n return results1.filter(isCookieRow);\n } catch (error) {\n if (parsedArgs.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 (parsedArgs.verbose) {\n console.log(\"Error decrypting cookie\", e);\n }\n d = null;\n }\n return d ?? encryptedValue.toString(\"utf-8\");\n}\n\nasync function getChromeCookies({\n name,\n domain = \"%\",\n requireJwt = false,\n}: {\n name: string;\n domain: string;\n requireJwt: boolean | undefined;\n //\n}): //\nPromise<ExportedCookie[]> {\n const encryptedDataItems: CookieRow[] = await getPromise(name, domain);\n const password: string = await getChromePassword();\n const decrypted: Promise<ExportedCookie | null>[] = encryptedDataItems\n .filter(({ value }) => value != null && value.length > 0)\n .map(async (cookieRow: CookieRow) => {\n const encryptedValue: Buffer = cookieRow.value;\n const decryptedValue = await decryptValue(password, encryptedValue);\n const meta = {};\n merge(meta, cookieRow.meta ?? {});\n const exportedCookie: ExportedCookie = {\n domain: cookieRow.domain,\n name: cookieRow.name,\n value: decryptedValue,\n meta: meta,\n };\n const expiry = cookieRow.expiry;\n const mergeExpiry =\n expiry != null && expiry > 0\n ? {\n expiry: new Date(expiry),\n }\n : {\n expiry: \"Infinity\",\n };\n merge(exportedCookie, mergeExpiry);\n return exportedCookie;\n });\n const results: ExportedCookie[] = (await Promise.all(decrypted)).filter(\n isExportedCookie,\n );\n if (parsedArgs.verbose) {\n console.log(\"results\", results);\n }\n return results;\n}\n","export default interface CookieRow {\n expiry?: number;\n domain: string;\n name: string;\n value: Buffer;\n meta?: any;\n}\n\nexport function isCookieRow(obj: any): obj is CookieRow {\n return (\n obj.domain !== undefined &&\n obj.name !== undefined &&\n obj.value !== undefined\n );\n}\n","import { join } from \"path\";\nimport { HOME } from \"../../global\";\n\nexport const chromeApplicationSupport: string = join(\n HOME,\n \"Library\",\n \"Application Support\",\n \"Google\",\n \"Chrome\",\n);\n","import { merge } from \"lodash\";\n\nexport const env: any = {};\nmerge(env, process?.env ?? {});\nexport const HOME: string = env[\"HOME\"];\nif (!HOME) {\n throw new Error(\"HOME environment variable is not set\");\n}\n","import { BinaryLike, createDecipheriv, pbkdf2 } from \"crypto\";\nimport { parsedArgs } from \"../../argv\";\nimport consola from \"../../logger\";\n\n// Function to decrypt encrypted data using a password\nexport async function decrypt(\n password: BinaryLike, // The password to use for decryption\n encryptedData: Buffer, // The data to decrypt\n): Promise<string> {\n // Returns a promise that resolves with the decrypted string\n // Check if password is a 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 // Check if encryptedData is an object\n if (encryptedData1 == null || typeof encryptedData1 !== \"object\") {\n throw new Error(\"encryptedData must be a object: \" + encryptedData1);\n }\n // Check if encryptedData is a Buffer or an array of Buffers\n if (!(encryptedData1 instanceof Buffer)) {\n if (Array.isArray(encryptedData1) && encryptedData1[0] instanceof Buffer) {\n [encryptedData1] = encryptedData1;\n // Log if encryptedData is an array of buffers\n if (parsedArgs.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 // Log the password being used for decryption\n if (parsedArgs.verbose) {\n consola.start(`Trying to decrypt with password: ${password}`);\n }\n // Return a promise that resolves with the decrypted string\n return new Promise((resolve, reject) => {\n // Use pbkdf2 to derive a key from the password\n pbkdf2(password, \"saltysalt\", 1003, 16, \"sha1\", (error, buffer) => {\n try {\n // Handle any errors from pbkdf2\n if (error) {\n if (parsedArgs.verbose) {\n console.log(\"Error doing pbkdf2\", error);\n }\n reject(error);\n return;\n }\n\n // Check if the buffer length is 16\n if (buffer.length !== 16) {\n if (parsedArgs.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 // Create an initialization vector\n const str = new Array(17).join(\" \");\n const iv = Buffer.from(str, \"binary\");\n // Create a decipher using the derived key and initialization vector\n const decipher = createDecipheriv(\"aes-128-cbc\", buffer, iv);\n decipher.setAutoPadding(false);\n\n // Remove the first 3 bytes from the encrypted data\n if (encryptedData1 && encryptedData1.slice) {\n encryptedData1 = encryptedData1.slice(3);\n }\n\n // Check if the encrypted data length is a multiple of 16\n if (encryptedData1.length % 16 !== 0) {\n if (parsedArgs.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 // Update the decipher with the encrypted data\n let decoded = decipher.update(encryptedData1);\n try {\n // Finalize the decipher\n decipher.final(\"utf-8\");\n } catch (e) {\n if (parsedArgs.verbose) {\n console.log(\"Error doing decipher.final()\", e);\n }\n reject(e);\n return;\n }\n\n // Remove padding from the decoded data\n const padding = decoded[decoded.length - 1];\n if (padding) {\n decoded = decoded.slice(0, 0 - padding);\n }\n // Convert the decoded data to a string\n const decodedString = decoded.toString(\"utf8\");\n // Resolve the promise with the decrypted string\n resolve(decodedString);\n } catch (e) {\n // Reject the promise if there is an error\n reject(e);\n }\n });\n });\n}\n","import { createConsola } from \"consola\";\n\nconst consola = createConsola({\n fancy: true,\n formatOptions: {\n showLogLevel: true,\n colors: true,\n date: false,\n },\n});\nconsola.wrapConsole();\n\nexport default consola;\n","import { existsSync } from \"fs\";\nimport { parsedArgs } from \"./argv\";\nimport consola from \"consola\";\nimport { sync } from \"fast-glob\";\n\ntype FindFilesOptions = {\n path: string;\n name: string;\n maxDepth?: number;\n};\n\nexport function findAllFiles({\n path,\n name,\n maxDepth = 2,\n}: FindFilesOptions): string[] {\n if (!existsSync(path)) {\n throw new Error(`Path ${path} does not exist`);\n }\n\n if (parsedArgs.verbose) {\n consola.start(`Searching for ${name} files in ${path}`);\n }\n\n const files: string[] = sync(`${path}/**/${name}`, {\n onlyFiles: true,\n deep: maxDepth,\n });\n\n if (parsedArgs.verbose) {\n if (files.length > 0) {\n consola.success(`Found ${files.length} ${name} files`);\n consola.info(files);\n }\n }\n\n return files;\n}\n","import { execSimple } from \"../../execSimple\";\n\n// top level so it's only called once and cached\nconst chromePassword: Promise<string> =\n process.platform == \"darwin\"\n ? execSimple('security find-generic-password -w -s \"Chrome Safe Storage\"')\n : Promise.reject(new Error(\"This only works on macOS\"));\n\nexport async function getChromePassword(): Promise<string> {\n return await chromePassword;\n}\n","import { execSync } from \"child_process\";\n\nexport async function execSimple(command: string): Promise<string> {\n try {\n const stdout = execSync(command, {\n encoding: \"binary\",\n maxBuffer: 5 * 1024,\n });\n return stdout.trim();\n } catch (error) {\n throw error;\n }\n}\n","export default interface ExportedCookie {\n domain: string;\n name: string;\n value: string;\n expiry?: Date | \"Infinity\";\n meta?: any;\n}\n\nexport function isExportedCookie(obj: any): obj is ExportedCookie {\n return (\n typeof obj.domain === \"string\" &&\n typeof obj.name === \"string\" &&\n typeof obj.value === \"string\" &&\n (obj.expiry === undefined ||\n obj.expiry instanceof Date ||\n obj.expiry === \"Infinity\") &&\n (obj.meta === undefined || typeof obj.meta === \"object\")\n );\n}\n","// This utility function applies an async callback to each element of the input array (just like Array.prototype.map),\n// waits for all resulting promises to fulfill (similar to Promise.all), and then flattens the resulting array (like Array.prototype.flat).\n\nexport async function flatMapAsync<T, O>(\n array: T[], // The input array to transform.\n callback: (value: T, index: number, array: T[]) => Promise<O[]>, // The async function to apply to each input array element.,\n or?: O[] | ((error: any) => O[] | Promise<O[]>), // An optional callback to handle errors.\n): Promise<O[]> {\n if (or) {\n return flatMapAsync(\n array,\n async (value: T, index: number, array: T[]) => {\n try {\n return await callback(value, index, array);\n } catch (error) {\n return typeof or == \"function\" ? or(error) : or;\n }\n },\n //\n );\n }\n\n // Step 1: Use Array.prototype.map to transform each element of the input array with the provided callback.\n // This will result in an array of promises.\n const ps: Promise<O>[] = array.map(callback) as Promise<O>[];\n\n // Step 2: Use Promise.all to wait for all promises in the array to fulfill.\n // This will give us an array of fulfilled promise values.\n const awaitedAll: Awaited<O>[] = await Promise.all(ps);\n\n // Step 3: Flatten the array of fulfilled promise values into a single array.\n // Note: The '@ts-ignore' comment is used to suppress TypeScript compiler warnings, as .flat() method might not be recognized\n // as a valid method for an array of Awaited<O> instances. However, this code assumes that the result of Promise.all\n // is indeed an array that can be flattened.\n // @ts-ignore\n return awaitedAll.flat() as O[];\n}\n","import { chromeApplicationSupport } from \"./chrome/ChromeApplicationSupport\";\nimport { querySqliteThenTransform } from \"./QuerySqliteThenTransform\";\nimport { existsSync } from \"fs\";\nimport { join } from \"path\";\nimport { parsedArgs } from \"../argv\";\nimport { stringToRegex } from \"../StringToRegex\";\nimport CookieRow from \"../CookieRow\";\nimport consola from \"../logger\";\n\nexport async function getEncryptedChromeCookie({\n name,\n domain,\n file = join(chromeApplicationSupport, \"Default\", \"Cookies\"),\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 (parsedArgs.verbose) {\n const s = file.split(\"/\").slice(-3).join(\"/\");\n consola.start(\n `Trying Chrome (at ${s}) cookie ${name} for domain ${domain}`,\n );\n }\n let sql;\n //language=SQL\n sql = \"SELECT encrypted_value, name, host_key, expires_utc FROM cookies\";\n // Define a regular expression to match wildcard characters\n const wildcardRegexp = /^([*%])$/i;\n // Check if the name does not contain wildcard characters\n const specifiedName = name.match(wildcardRegexp) == null;\n // Check if the domain does not contain wildcard characters\n const specifiedDomain = domain.match(wildcardRegexp) == null;\n // Check if the domain contains wildcard characters\n const wildcardDomain = domain.match(/[%*]/) != null;\n // Determine if we should query the domain based on the previous checks\n const queryDomain = specifiedDomain && !wildcardDomain;\n // if we have a wildcard domain, we need to use a regexp\n // If the name is specified or we need to query the domain, we add a WHERE clause to the SQL query\n if (specifiedName || queryDomain) {\n sql += ` WHERE `;\n // If the name is specified, we add a condition to the SQL query to match the name\n if (specifiedName) {\n sql += `name = '${name}'`;\n // If we also need to query the domain, we add an AND operator to the SQL query\n if (queryDomain) {\n sql += ` AND `;\n }\n }\n // If we need to query the domain, we add a condition to the SQL query to match the domain\n if (queryDomain) {\n // The leading dot is replaced with % to match subdomains\n const sqlEmbedDomain = domain.replace(/^[.%]?/, \"%\");\n sql += `host_key LIKE '${sqlEmbedDomain}';`;\n }\n }\n if (parsedArgs.verbose) {\n consola.info(\"Querying:\", sql);\n }\n const domainRegexp: RegExp = stringToRegex(domain);\n const sqliteQuery1: CookieRow[] = await querySqliteThenTransform({\n file: file,\n sql: sql,\n rowFilter: (row) => {\n return row[\"host_key\"].match(domainRegexp) != null;\n },\n rowTransform: (row) => {\n const cookieRow = {\n expiry: (row[\"expires_utc\"] / 1000000 - 11644473600) * 1000,\n domain: row[\"host_key\"],\n name: row[\"name\"],\n value: row[\"encrypted_value\"],\n };\n if (parsedArgs.verbose) {\n consola.info(\"Found\", cookieRow);\n }\n return cookieRow;\n },\n });\n return sqliteQuery1.filter((row) => {\n // TODO: is this needed?\n return row.domain.match(domainRegexp) != null;\n });\n}\n","import CookieRow from \"../CookieRow\";\nimport fs from \"fs\";\nimport { Database } from \"sqlite3\";\nimport { merge } from \"lodash\";\nimport { parsedArgs } from \"../argv\";\nimport consola from \"../logger\";\n\ninterface FnOptions {\n file: string;\n sql: string;\n rowFilter?: (row: any) => boolean;\n rowTransform: (row: any) => CookieRow;\n}\n\nfunction checkFileExistence(file: string) {\n if (!file || !fs.existsSync(file)) {\n throw new Error(`File ${file} does not exist`);\n }\n}\n\nfunction createDatabase(file: string): Database {\n return new Database(file);\n}\n\nfunction transformRows(\n //\n rows: any[],\n rowFilter: (row: any) => boolean,\n rowTransform: (row: any) => CookieRow,\n file: string,\n //\n): CookieRow[] {\n return rows.filter(rowFilter).map((row: any) => {\n const metaData = {\n meta: {\n file: file,\n },\n };\n\n const cookieRow: CookieRow = rowTransform(row);\n\n return merge(metaData, cookieRow);\n });\n}\n\nexport async function querySqliteThenTransform(\n //\n {\n //\n file,\n sql,\n rowFilter = () => true,\n rowTransform,\n }: FnOptions,\n): //\nPromise<CookieRow[]> {\n checkFileExistence(file);\n\n const db: Database = createDatabase(file);\n\n return new Promise((resolve, reject) => {\n db.all(sql, (err: Error, rows: any[]) => {\n if (err) {\n return reject(err);\n }\n\n if (!rows || rows.length === 0) {\n return resolve([]);\n }\n\n const cookieRows: CookieRow[] = transformRows(\n rows,\n rowFilter,\n rowTransform,\n file,\n );\n\n if (parsedArgs.verbose) {\n consola.log(`Rows: ${JSON.stringify(rows)}`);\n }\n\n return resolve(cookieRows);\n });\n });\n}\n","// This function converts a string into a regular expression\nexport function stringToRegex(s: string): RegExp {\n // Replace all occurrences of '.' with a literal '.'\n const s1 = s.replaceAll(/\\./gi, \".\");\n // Replace all occurrences of '%' with '.*' to match any number of any characters\n const s2 = s1.replace(/%/g, \".*\");\n // Replace all occurrences of '*' with '.*' to match any number of any characters\n const s3 = s2.replace(/\\*/g, \".*\");\n // Return the new string as a RegExp object\n return new RegExp(s3);\n}\n\n/*\n%.example.com -> .*\\.example\\.com\nexample.com -> example\\.com\n*/\n","import * as path from \"path\";\nimport CookieQueryStrategy from \"../CookieQueryStrategy\";\nimport { HOME } from \"../../global\";\nimport { existsSync } from \"fs\";\nimport { findAllFiles } from \"../../findAllFiles\";\nimport ExportedCookie from \"../../ExportedCookie\";\nimport CookieRow from \"../../CookieRow\";\nimport CookieSpec from \"../../CookieSpec\";\nimport { specialCases } from \"../../SpecialCases\";\nimport { parsedArgs } from \"../../argv\";\nimport { querySqliteThenTransform } from \"../QuerySqliteThenTransform\";\n\nexport default class FirefoxCookieQueryStrategy implements CookieQueryStrategy {\n browserName = \"Firefox\";\n\n async queryCookies(name: string, domain: string): Promise<ExportedCookie[]> {\n if (process.platform !== \"darwin\") {\n // TODO: implement\n return [];\n }\n if (parsedArgs.browser !== \"firefox\") {\n return [];\n }\n const cookies = await this.#getFirefoxCookie({ name, domain });\n if (Array.isArray(cookies)) {\n return cookies.map((cookie: CookieRow) => {\n return {\n domain: cookie.domain,\n name: cookie.name,\n value: cookie.value.toString(\"utf8\"),\n };\n });\n } else {\n return [];\n }\n }\n\n async #getFirefoxCookie(\n { name, domain }: CookieSpec, //\n ) {\n const files: string[] = findAllFiles({\n path: path.join(\n HOME,\n \"Library\",\n \"Application Support\",\n \"Firefox\",\n \"Profiles\",\n ),\n name: \"cookies.sqlite\",\n });\n const fn: (file: string) => Promise<CookieRow[]> = async (file: string) => {\n return await this.#queryCookiesDb(file, name, domain);\n };\n const all: CookieRow[][] = await Promise.all(files.map(fn));\n // flatten\n return all.flat();\n }\n\n async #queryCookiesDb(\n file: string,\n name: string,\n domain: string,\n ): Promise<CookieRow[]> {\n if (file && !existsSync(file)) {\n throw new Error(`File ${file} does not exist`);\n }\n let sql;\n //language=SQL\n sql = \"SELECT value, name, host FROM moz_cookies\";\n const { specifiedName, specifiedDomain } = specialCases({ name, domain });\n if (specifiedName || specifiedDomain) {\n sql += ` WHERE `;\n if (specifiedName) {\n sql += `name = '${name}'`;\n if (specifiedDomain) {\n sql += ` AND `;\n }\n }\n if (specifiedDomain) {\n sql += `host LIKE '${domain}';`;\n }\n }\n const rowTransform = (row: any) => {\n // row is object key by column name\n const value = row.value as string;\n return {\n domain: row.domain as string,\n name: row.name as string,\n value: Buffer.from(value, \"utf8\"),\n };\n };\n try {\n return await querySqliteThenTransform({\n file,\n sql,\n rowTransform,\n });\n } catch (e) {\n console.error(`Error querying ${file}`, e);\n return [];\n }\n }\n}\n","import CookieSpec from \"./CookieSpec\";\n\nexport function specialCases({ name, domain }: CookieSpec): {\n specifiedName: boolean;\n specifiedDomain: boolean;\n //\n} {\n const wildcardRegexp = /^([*%])$/i;\n return {\n specifiedName: name.match(wildcardRegexp) == null,\n specifiedDomain: domain.match(wildcardRegexp) == null,\n //\n };\n}\n","import CookieQueryStrategy from \"../CookieQueryStrategy\";\nimport ExportedCookie from \"../../ExportedCookie\";\n\nexport default class SafariCookieQueryStrategy implements CookieQueryStrategy {\n browserName = \"Safari\";\n\n async queryCookies(name: string, domain: string): Promise<ExportedCookie[]> {\n // TODO: implement\n return [];\n }\n}\n","import jsonwebtoken, { JwtPayload } from \"jsonwebtoken\";\nimport { parsedArgs } from \"./argv\";\n\nexport default function isValidJwt(token: string) {\n try {\n const result = jsonwebtoken.decode(token, { complete: true });\n if (parsedArgs.verbose && result) {\n console.debug(result);\n }\n const payload: JwtPayload = result?.payload as JwtPayload;\n if (payload) {\n const exp = payload.exp;\n if (exp) {\n const now = new Date().getTime() / 1000;\n if (now > exp) {\n return false;\n }\n }\n }\n return true;\n } catch (err) {\n return false;\n }\n}\n","import CookieSpec from \"./CookieSpec\";\nimport ExportedCookie from \"./ExportedCookie\";\nimport { queryCookies } from \"./queryCookies\";\nimport ChromeCookieQueryStrategy from \"./browsers/chrome/ChromeCookieQueryStrategy\";\nimport { isExportedCookie } from \"./ExportedCookie\";\n\nexport async function getChromeCookie(\n params: CookieSpec,\n): Promise<ExportedCookie | undefined> {\n const cookies = await queryCookies(\n params,\n {\n strategy: new ChromeCookieQueryStrategy(),\n },\n //\n );\n if (cookies.length == 0) {\n throw new Error(\"Cookie not found\");\n }\n return cookies.find(isExportedCookie);\n}\n","import CookieSpec from \"./CookieSpec\";\nimport ExportedCookie from \"./ExportedCookie\";\nimport { queryCookies } from \"./queryCookies\";\nimport FirefoxCookieQueryStrategy from \"./browsers/firefox/FirefoxCookieQueryStrategy\";\n\nexport async function getFirefoxCookie(\n params: CookieSpec,\n): Promise<ExportedCookie | undefined> {\n const cookies: ExportedCookie[] = await queryCookies(\n params,\n {\n strategy: new FirefoxCookieQueryStrategy(),\n },\n //\n );\n if (Array.isArray(cookies) && cookies.length > 0) {\n return cookies.find((cookie) => cookie != null);\n } else {\n throw new Error(\"Cookie not found\");\n }\n}\n","import { groupBy } from \"lodash\";\nimport { resultsRendered } from \"./resultsRendered\";\nimport { MultiCookieSpec } from \"./CookieSpec\";\nimport ExportedCookie from \"./ExportedCookie\";\nimport { comboQueryCookieSpec } from \"./comboQueryCookieSpec\";\n\nexport async function getGroupedRenderedCookies(\n cookieSpec: MultiCookieSpec,\n): Promise<string[]> {\n const cookies: ExportedCookie[] = await comboQueryCookieSpec(cookieSpec);\n if (cookies.length == 0) {\n throw new Error(\"Cookie not found\");\n }\n const groupedByFile = groupBy(cookies, (r: ExportedCookie) => r.meta?.file);\n return Object.keys(groupedByFile).map((file: string) => {\n const results: ExportedCookie[] = groupedByFile[file];\n return resultsRendered(results);\n });\n}\n","import { orderBy, uniqBy } from \"lodash\";\nimport ExportedCookie from \"./ExportedCookie\";\n\nexport function resultsRendered(results: ExportedCookie[]) {\n // sort by name and expiry descending\n // takes the latest expiry for each name\n const orderedResults = orderBy(results, [\"name\", \"expiry\"], [\"asc\", \"desc\"]);\n return uniqBy(orderedResults, (r: ExportedCookie) => r.name)\n .map((r: ExportedCookie) => r.name + \"=\" + r.value)\n .join(\"; \");\n}\n","import CookieSpec, { MultiCookieSpec } from \"./CookieSpec\";\nimport ExportedCookie from \"./ExportedCookie\";\nimport { queryCookies } from \"./queryCookies\";\nimport { flatMapAsync } from \"./util\";\nimport CookieQueryStrategy from \"./browsers/CookieQueryStrategy\";\nimport { CookieQueryOptions, mergedWithDefaults } from \"./cookieQueryOptions\";\nimport { processBeforeReturn } from \"./processBeforeReturn\";\n\nexport async function comboQueryCookieSpec(\n cookieSpec: MultiCookieSpec,\n options?: CookieQueryOptions<CookieQueryStrategy>,\n): Promise<ExportedCookie[]> {\n const optsWithDefaults: CookieQueryOptions<CookieQueryStrategy> =\n mergedWithDefaults(options);\n const fn = (cs: CookieSpec) => queryCookies(cs, optsWithDefaults);\n\n if (Array.isArray(cookieSpec)) {\n const cookiesForMultiSpec: ExportedCookie[] = await flatMapAsync(\n cookieSpec,\n async (cs: CookieSpec) => {\n return await fn(cs);\n },\n );\n return processBeforeReturn(cookiesForMultiSpec, options);\n } else {\n const cookiesForSingleSpec: ExportedCookie[] = await fn(cookieSpec);\n return processBeforeReturn(cookiesForSingleSpec, options);\n }\n}\n","export * from \"./flatMapAsync\";\n","import CookieQueryStrategy from \"./browsers/CookieQueryStrategy\";\nimport CompositeCookieQueryStrategy from \"./browsers/CompositeCookieQueryStrategy\";\nimport { merge } from \"lodash\";\n\nexport type CookieQueryOptions<T extends CookieQueryStrategy> = {\n strategy?: T;\n limit?: number;\n removeExpired?: boolean;\n};\n\nexport const defaultCookieQueryOptions: CookieQueryOptions<CookieQueryStrategy> =\n {\n strategy: new CompositeCookieQueryStrategy(),\n };\n\nexport function mergedWithDefaults<T extends CookieQueryStrategy>(\n options?: CookieQueryOptions<T>,\n): CookieQueryOptions<T> {\n return merge(defaultCookieQueryOptions, options);\n}\n","import ExportedCookie from \"./ExportedCookie\";\nimport { uniqBy } from \"lodash\";\nimport CookieQueryStrategy from \"./browsers/CookieQueryStrategy\";\nimport { CookieQueryOptions } from \"./cookieQueryOptions\";\n\nexport function processBeforeReturn<T extends CookieQueryStrategy>(\n cookies: ExportedCookie[],\n options?: CookieQueryOptions<T>,\n): ExportedCookie[] {\n if (options?.removeExpired) {\n return cookies.filter((c: ExportedCookie) => {\n const expiry: Date | \"Infinity\" | undefined = c.expiry;\n if (expiry === undefined) {\n return true;\n } else if (expiry === \"Infinity\") {\n return true;\n } else {\n return expiry.getTime() > Date.now();\n }\n });\n }\n if (options?.limit) {\n return cookies.slice(0, options.limit);\n }\n return uniqBy(cookies, JSON.stringify);\n}\n","import { resultsRendered } from \"./resultsRendered\";\nimport { comboQueryCookieSpec } from \"./comboQueryCookieSpec\";\nimport { MultiCookieSpec } from \"./CookieSpec\";\nimport ExportedCookie from \"./ExportedCookie\";\nimport consola from \"consola\";\nimport CookieQueryStrategy from \"./browsers/CookieQueryStrategy\";\nimport CompositeCookieQueryStrategy from \"./browsers/CompositeCookieQueryStrategy\";\n\nexport async function getMergedRenderedCookies(\n cookieSpec: MultiCookieSpec,\n strategy: CookieQueryStrategy = new CompositeCookieQueryStrategy(),\n): Promise<string> {\n const cookies: ExportedCookie[] = await comboQueryCookieSpec(cookieSpec, {\n strategy,\n });\n return cookies.length > 0 ? resultsRendered(cookies) : \"\";\n}\n","// noinspection JSUnusedGlobalSymbols,ExceptionCaughtLocallyJS\n\nimport { fetch as fetchImpl } from \"cross-fetch\";\nimport { merge } from \"lodash\";\n// noinspection SpellCheckingInspection\nimport destr from \"destr\";\nimport { parsedArgs } from \"./argv\";\nimport { getMergedRenderedCookies } from \"./getMergedRenderedCookies\";\nimport { cookieSpecsFromUrl } from \"./cookieSpecsFromUrl\";\nimport CookieSpec from \"./CookieSpec\";\nimport consola from \"consola\";\n\nif (typeof fetchImpl !== \"function\") {\n throw new Error(\"fetch is not a function\");\n}\n\nfunction constructUserAgent(\n platform = \"Macintosh; Intel Mac OS X 10_15_7\",\n engine = \"AppleWebKit/537.36 (KHTML, like Gecko)\",\n browser = \"Chrome/118.0.0.0\",\n layout = \"Safari/537.36\",\n): string {\n return [platform, engine, browser, layout].join(\" \");\n}\n\nconst userAgent = constructUserAgent();\n\ninterface FetchRequestInit {\n url: RequestInfo | URL | string;\n options?: RequestInit;\n}\n\nexport type FetchFn =\n | typeof fetchImpl\n | ((url: URL, options?: RequestInit) => Promise<Response>);\n\nexport async function fetchWithCookies(\n url: RequestInfo | URL | string,\n options: RequestInit | undefined = {},\n fetch: FetchFn = fetchImpl as FetchFn,\n originalRequest?: FetchRequestInit,\n): Promise<Response> {\n if (typeof fetch !== \"function\") {\n const message = \"fetch is not a function\";\n consola.error(message);\n throw new Error(message);\n }\n const originalRequest1 = originalRequest || { url, options };\n const headers: HeadersInit = {\n \"User-Agent\": userAgent,\n };\n const defaultOptions: RequestInit = {\n headers,\n redirect: \"manual\",\n };\n const url2: string = `${url}`;\n const url1: URL = new URL(url2);\n consola.start(\"fetchWithCookies\", url2);\n const cookieSpecs: CookieSpec[] = cookieSpecsFromUrl(url1);\n const renderedCookie = await getMergedRenderedCookies(cookieSpecs).catch(\n (err) => {\n consola.error(err);\n return \"\";\n },\n );\n if (renderedCookie) {\n headers[\"Cookie\"] = renderedCookie;\n } else {\n consola.info(\"No cookies found for this request\");\n }\n if (parsedArgs[\"dump-request-headers\"]) {\n consola.info(\"Request URL:\", url1.href);\n consola.info(\"Request headers:\", headers);\n }\n const newOptions1: RequestInit = merge(defaultOptions, { headers }, options);\n try {\n const res: Response = await fetch(url1, newOptions1);\n // noinspection JSMismatchedCollectionQueryUpdate\n const headers: [string, string][] = [];\n res.headers.forEach((value, key) => {\n headers.push([key, value]);\n });\n // for (const [key, value] of headers) {\n // if (key === \"set-cookie\") {\n // const cookieJar1 = await cookieJarPromise;\n // await cookieJar1.setCookie(value, url2);\n // if (parsedArgs.verbose) {\n // console.log(blue(`Set-Cookie:`), yellow(value), yellow(url2));\n // }\n // }\n // }\n\n const newUrl: string = res.headers.get(\"location\") ?? res.url;\n // const sameHost = new URL(newUrl).host === url1.host;\n if (res.status == 301 || res.status == 302) {\n // follow the redirect\n if (newUrl && newUrl !== url2) {\n if (parsedArgs.verbose || parsedArgs[\"dump-response-headers\"]) {\n consola.info(`Redirected to `, newUrl);\n }\n return fetchWithCookies(\n //\n newUrl,\n newOptions1,\n fetch,\n originalRequest1,\n //\n );\n }\n }\n if (res.status == 303 && newUrl && newUrl !== url2) {\n // follow the redirect with GET\n let newOptions2: RequestInit = {};\n switch (newOptions1.method) {\n case \"POST\":\n case \"PUT\":\n case \"DELETE\":\n merge(newOptions2, newOptions1, { method: \"GET\" });\n newOptions2.body = undefined; // TODO: is this needed?\n break;\n case \"HEAD\":\n case \"GET\":\n merge(newOptions2, newOptions1);\n newOptions2.body = undefined; // TODO: is this needed?\n break;\n default:\n merge(newOptions2, newOptions1);\n break;\n }\n if (parsedArgs.verbose) {\n console.log(`Redirected to `, newUrl);\n }\n return fetchWithCookies(\n //\n newUrl,\n newOptions2,\n fetch,\n originalRequest1,\n //\n );\n }\n\n // all deserialize functions will use the arraybuffer\n const arrayBufferPromise: Promise<ArrayBuffer> = res.arrayBuffer();\n const bufferPromise = arrayBufferPromise.then(Buffer.from);\n\n async function arrayBuffer(): Promise<ArrayBuffer> {\n return arrayBufferPromise;\n }\n\n async function buffer(): Promise<Buffer> {\n return bufferPromise;\n }\n\n async function text(): Promise<string> {\n const buffer1 = await bufferPromise;\n return buffer1.toString(\"utf8\");\n }\n\n async function json(): Promise<any> {\n const text1 = await text();\n return destr(text1);\n }\n\n async function formData(): Promise<FormData> {\n const urlSearchParams: URLSearchParams = await text().then(\n (text) => new URLSearchParams(text),\n );\n const formData = new FormData();\n for (const [key, value] of urlSearchParams.entries()) {\n formData.append(key, value);\n }\n return formData;\n }\n\n const res1: Response = res;\n const source2 = {\n arrayBuffer,\n text,\n json,\n buffer,\n formData,\n //\n };\n return merge(res1, source2);\n } catch (e) {\n throw e;\n }\n}\n","import CookieSpec from \"./CookieSpec\";\nimport { uniqBy } from \"lodash\";\n\n/**\n * Generates a list of cookie specifications from a given URL.\n * Each cookie spec consists of a domain and a name, where the name is a wildcard.\n * The domain is formatted to enable querying against the cookie store for matching cookies.\n * @param url - The URL to generate cookie specs from.\n * @returns An array of unique cookie specifications.\n */\nexport function cookieSpecsFromUrl(url: URL | string): CookieSpec[] {\n if (!url || url === \"\") {\n return [];\n }\n\n const urlObj = typeof url === \"string\" ? new URL(url) : url;\n const hostnameParts = urlObj.hostname.split(\".\");\n const topLevelDomain = hostnameParts.slice(-2).join(\".\");\n\n const cookieSpecs: CookieSpec[] = [\n { name: \"%\", domain: `%.${topLevelDomain}` },\n { name: \"%\", domain: urlObj.hostname },\n { name: \"%\", domain: topLevelDomain },\n ];\n\n return uniqBy(cookieSpecs, JSON.stringify);\n}\n"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../"}
|