@mherod/get-cookie 2.0.0-rc.1 → 2.0.0-rc.11

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.
Files changed (44) hide show
  1. package/dist/index.js +413 -156
  2. package/package-lock.json +12295 -0
  3. package/package.json +12 -8
  4. package/src/CookieRow.ts +2 -1
  5. package/src/CookieSpec.ts +4 -2
  6. package/src/CookieStore.ts +11 -0
  7. package/src/ExportedCookie.ts +2 -1
  8. package/src/FetchResponse.ts +2 -0
  9. package/src/IsCookieRow.ts +1 -1
  10. package/src/IsExportedCookie.ts +1 -1
  11. package/src/SpecialCases.ts +1 -1
  12. package/src/StringToRegex.ts +6 -0
  13. package/src/argv.ts +4 -0
  14. package/src/browsers/ChromeCookieQueryStrategy.ts +106 -24
  15. package/src/browsers/CompositeCookieQueryStrategy.ts +32 -8
  16. package/src/browsers/CookieQueryStrategy.ts +3 -1
  17. package/src/browsers/CookieStoreQueryStrategy.ts +94 -0
  18. package/src/browsers/FirefoxCookieQueryStrategy.ts +5 -3
  19. package/src/browsers/SafariCookieQueryStrategy.ts +3 -1
  20. package/src/cli.ts +101 -93
  21. package/src/comboQueryCookieSpec.ts +21 -0
  22. package/src/cookieSpecsFromUrl.ts +26 -0
  23. package/src/doSqliteQuery1.ts +4 -8
  24. package/src/doSqliteQuery1Params.ts +8 -0
  25. package/src/fetchWithCookies.ts +79 -34
  26. package/src/findAllFiles.ts +5 -9
  27. package/src/getChromeCookie.ts +19 -0
  28. package/src/getCookie.ts +19 -0
  29. package/src/getFirefoxCookie.ts +19 -0
  30. package/src/getGroupedRenderedCookies.ts +12 -25
  31. package/src/getMergedRenderedCookies.ts +14 -0
  32. package/src/index.ts +13 -52
  33. package/src/isValidJwt.ts +2 -2
  34. package/src/queryCookies.ts +16 -12
  35. package/src/resultsRendered.ts +7 -4
  36. package/src/unpackHeaders.ts +7 -4
  37. package/src/utils.ts +0 -25
  38. package/dist/cli.js +0 -3
  39. package/dist/cli.js.map +0 -1
  40. package/dist/index.js.map +0 -1
  41. package/dist/module.js +0 -586
  42. package/dist/module.js.map +0 -1
  43. package/dist/types.d.ts +0 -35
  44. package/dist/types.d.ts.map +0 -1
package/src/cli.ts CHANGED
@@ -1,118 +1,126 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import minimist from "minimist";
4
- import { argv } from "./argv";
5
- import { env } from "./global";
6
- import { queryCookies } from "./queryCookies";
3
+ import { argv, parsedArgs } from "./argv";
7
4
  import { groupBy } from "lodash";
8
- import { green, yellow } from "colorette";
5
+ import { green, red, yellow } from "colorette";
9
6
  import { resultsRendered } from "./resultsRendered";
10
7
  import { fetchWithCookies } from "./fetchWithCookies";
11
8
  import { unpackHeaders } from "./unpackHeaders";
9
+ import CookieSpec from "./CookieSpec";
10
+ import { comboQueryCookieSpec } from "./comboQueryCookieSpec";
11
+ import { cookieSpecsFromUrl } from "./cookieSpecsFromUrl";
12
12
 
13
- const parsedArgs: minimist.ParsedArgs = minimist(argv);
14
-
15
- async function cliQueryCookies(name: string, domain: string) {
13
+ async function cliQueryCookies(cookieSpec: CookieSpec | CookieSpec[]) {
16
14
  try {
17
- const results = await queryCookies({ name, domain });
18
- if (results.length > 0) {
19
- if (argv.includes("--combined-string")) {
20
- console.log(yellow(resultsRendered(results)));
21
- } else if (argv.includes("--render") || argv.includes("-r")) {
22
- console.log(yellow(resultsRendered(results)));
23
- } else if (argv.includes("--dump") || argv.includes("-d")) {
24
- console.log(results);
25
- } else if (argv.includes("--dump-grouped")) {
26
- const groupedByFile = groupBy(results, (r) => r.meta?.file);
27
- console.log(green(JSON.stringify(groupedByFile, null, 2)));
28
- } else if (argv.includes("--combined-string-grouped")) {
29
- const groupedByFile = groupBy(results, (r) => r.meta?.file);
30
- for (const file of Object.keys(groupedByFile)) {
31
- let results = groupedByFile[file];
32
- console.log(green(file) + ": ", yellow(resultsRendered(results)));
33
- }
34
- } else {
35
- for (const result of results) {
36
- console.log(result.value);
37
- }
15
+ const results = await comboQueryCookieSpec(cookieSpec);
16
+ if (results == null || results.length == 0) {
17
+ console.error(red("No results"));
18
+ return;
19
+ }
20
+ if (parsedArgs["dump"] || parsedArgs["d"]) {
21
+ console.log(results);
22
+ return;
23
+ }
24
+ if (parsedArgs["dump-grouped"] || parsedArgs["D"]) {
25
+ const groupedByFile = groupBy(results, (r) => r.meta?.file);
26
+ console.log(green(JSON.stringify(groupedByFile, null, 2)));
27
+ return;
28
+ }
29
+ if (
30
+ parsedArgs["render"] ||
31
+ parsedArgs["render-merged"] ||
32
+ parsedArgs["r"]
33
+ ) {
34
+ console.log(yellow(resultsRendered(results)));
35
+ return;
36
+ }
37
+ if (parsedArgs["render-grouped"] || parsedArgs["R"]) {
38
+ const groupedByFile = groupBy(results, (r) => r.meta?.file);
39
+ for (const file of Object.keys(groupedByFile)) {
40
+ let results = groupedByFile[file];
41
+ console.log(green(file) + ": ", yellow(resultsRendered(results)));
38
42
  }
39
- } else {
40
- console.error("No results");
43
+ return;
44
+ }
45
+ for (const result of results) {
46
+ console.log(result.value);
41
47
  }
42
48
  } catch (e) {
43
49
  console.error(e);
44
50
  }
45
51
  }
46
52
 
47
- function main() {
48
- if (argv && argv.length > 2) {
49
- const arg2 = argv[2];
50
- const arg3 = argv[3];
51
- if (arg2 == "--fetch" || arg2 == "-f") {
52
- const f = parsedArgs["f"];
53
- let url: URL;
54
- try {
55
- url = new URL(f);
56
- } catch (e) {
57
- console.error("Invalid URL", arg3);
58
- return;
53
+ async function main() {
54
+ if (parsedArgs["help"] || parsedArgs["h"]) {
55
+ console.log(`Usage: ${argv[1]} [name] [domain] [options] `);
56
+ console.log(`Options:`);
57
+ console.log(` -h, --help: Show this help`);
58
+ console.log(` -v, --verbose: Show verbose output`);
59
+ console.log(` -d, --dump: Dump all results`);
60
+ console.log(` -D, --dump-grouped: Dump all results, grouped by profile`);
61
+ console.log(` -r, --render: Render all results`);
62
+ return;
63
+ }
64
+
65
+ parsedArgs["verbose"] = parsedArgs["verbose"] || parsedArgs["v"];
66
+
67
+ const fetchUrl: string = parsedArgs["fetch"] || parsedArgs["F"];
68
+ if (fetchUrl) {
69
+ let url: URL;
70
+ try {
71
+ url = new URL(<string>fetchUrl);
72
+ } catch (e) {
73
+ console.error("Invalid URL", fetchUrl);
74
+ return;
75
+ }
76
+ const headerArgs: string[] | string = parsedArgs["H"];
77
+ const headers = unpackHeaders(headerArgs);
78
+ const onfulfilled = (res: Response) => {
79
+ if (parsedArgs["dump-response-headers"]) {
80
+ res.headers.forEach((value: string, key: string) => {
81
+ console.log(`${key}: ${value}`);
82
+ });
59
83
  }
60
- const headerArgs: string[] | string = parsedArgs["H"];
61
- const headers = unpackHeaders(headerArgs);
62
- const onfulfilled = (res: Response) => {
63
- return res.text().then((r) => {
84
+ if (parsedArgs["dump-response-body"]) {
85
+ res.text().then((r) => {
64
86
  console.log(r);
65
87
  });
66
- };
67
- fetchWithCookies(
68
- url,
69
- {
70
- //
71
- headers,
72
- }
73
- //
74
- ).then(
75
- onfulfilled,
76
- console.error
77
- //
78
- );
88
+ }
79
89
  return;
80
- }
81
- let domain;
82
- if (arg3 != null && arg3.indexOf(".") > -1) {
83
- domain = arg3;
84
- } else {
85
- domain = "%";
86
- }
87
-
88
- const tru = `${true}`;
89
-
90
- if (argv.includes("--require-jwt")) {
91
- env.REQUIRE_JWT = tru;
92
- }
93
- if (argv.includes("--verbose")) {
94
- env.VERBOSE = tru;
95
- }
96
- if (argv.includes("--chrome-only")) {
97
- env.CHROME_ONLY = tru;
98
- }
99
- if (argv.includes("--firefox-only")) {
100
- env.FIREFOX_ONLY = tru;
101
- }
102
- if (argv.includes("--ignore-expired")) {
103
- env.IGNORE_EXPIRED = tru;
104
- }
105
-
106
- if (argv.includes("--single")) {
107
- env.SINGLE = tru;
108
- }
90
+ };
91
+ fetchWithCookies(
92
+ url,
93
+ {
94
+ //
95
+ headers,
96
+ }
97
+ //
98
+ ).then(
99
+ onfulfilled,
100
+ console.error
101
+ //
102
+ );
103
+ return;
104
+ }
109
105
 
110
- if (env.VERBOSE) {
111
- console.log("Verbose mode", argv);
106
+ const cookieSpecs: CookieSpec[] = [];
107
+ const argUrl: string = parsedArgs["url"] || parsedArgs["u"];
108
+ if (argUrl) {
109
+ for (const cookieSpec of cookieSpecsFromUrl(argUrl)) {
110
+ cookieSpecs.push(cookieSpec);
112
111
  }
112
+ } else {
113
+ cookieSpecs.push({
114
+ name: parsedArgs["name"] || parsedArgs["_"][0] || "%",
115
+ domain: parsedArgs["domain"] || parsedArgs["_"][1] || "%",
116
+ });
117
+ }
113
118
 
114
- cliQueryCookies(arg2, domain).catch(console.error);
119
+ if (parsedArgs.verbose) {
120
+ console.log("cookieSpecs", cookieSpecs);
115
121
  }
122
+
123
+ await cliQueryCookies(cookieSpecs).catch(console.error);
116
124
  }
117
125
 
118
- main();
126
+ main().then((r) => r, console.error);
@@ -0,0 +1,21 @@
1
+ import CookieSpec, { MultiCookieSpec } from "./CookieSpec";
2
+ import ExportedCookie from "./ExportedCookie";
3
+ import { queryCookies } from "./queryCookies";
4
+ import { uniqBy } from "lodash";
5
+
6
+ export async function comboQueryCookieSpec(
7
+ cookieSpec: MultiCookieSpec
8
+ ): Promise<ExportedCookie[]> {
9
+ const cookies: ExportedCookie[] = [];
10
+ if (Array.isArray(cookieSpec)) {
11
+ const cookieSpecs = <CookieSpec[]>cookieSpec;
12
+ for (const cookieSpec1 of cookieSpecs) {
13
+ const cookies1: ExportedCookie[] = await queryCookies(cookieSpec1);
14
+ cookies.push(...cookies1);
15
+ }
16
+ } else {
17
+ const singleQuery = await queryCookies(cookieSpec);
18
+ cookies.push(...singleQuery);
19
+ }
20
+ return uniqBy(cookies, JSON.stringify);
21
+ }
@@ -0,0 +1,26 @@
1
+ import CookieSpec from "./CookieSpec";
2
+ import { uniqBy } from "lodash";
3
+
4
+ export function cookieSpecsFromUrl(url: URL | string): CookieSpec[] {
5
+ const url1 = typeof url == "string" ? new URL(url) : url;
6
+ const cookieSpecs = [];
7
+ const splits = url1.hostname.split(".");
8
+ const tld = splits.slice(-2).join(".");
9
+ const cookieSpec: CookieSpec = {
10
+ name: "%",
11
+ domain: "%." + tld,
12
+ };
13
+ cookieSpecs.push(cookieSpec);
14
+ const cookieSpec1: CookieSpec = {
15
+ name: "%",
16
+ domain: url1.hostname,
17
+ };
18
+ cookieSpecs.push(cookieSpec1);
19
+ // const isWww = splits.slice(-3)[0] === "www";
20
+ const cookieSpec2: CookieSpec = {
21
+ name: "%",
22
+ domain: tld,
23
+ };
24
+ cookieSpecs.push(cookieSpec2);
25
+ return uniqBy(cookieSpecs, JSON.stringify);
26
+ }
@@ -1,13 +1,9 @@
1
1
  import * as fs from "fs";
2
2
  import * as sqlite3 from "sqlite3";
3
- import { CookieRow } from "./CookieRow";
3
+ import CookieRow from "./CookieRow";
4
4
  import { merge } from "lodash";
5
-
6
- interface DoSqliteQuery1Params {
7
- file: string;
8
- sql: string;
9
- rowTransform: (row: any) => CookieRow;
10
- }
5
+ import { parsedArgs } from "./argv";
6
+ import { DoSqliteQuery1Params } from "./doSqliteQuery1Params";
11
7
 
12
8
  export async function doSqliteQuery1({
13
9
  file,
@@ -42,7 +38,7 @@ export async function doSqliteQuery1({
42
38
  resolve(cookieRows);
43
39
  return;
44
40
  }
45
- if (process.env.VERBOSE) {
41
+ if (parsedArgs.verbose) {
46
42
  console.log(`doSqliteQuery1: rows ${JSON.stringify(rows1)}`);
47
43
  }
48
44
  resolve([rows1]);
@@ -0,0 +1,8 @@
1
+ import CookieRow from "./CookieRow";
2
+
3
+ export interface DoSqliteQuery1Params {
4
+ file: string;
5
+ sql: string;
6
+ rowFilter?: (row: any) => boolean;
7
+ rowTransform: (row: any) => CookieRow;
8
+ }
@@ -1,63 +1,108 @@
1
1
  // noinspection JSUnusedGlobalSymbols
2
2
 
3
- import { fetch } from "cross-fetch";
3
+ import { fetch as fetchImpl } from "cross-fetch";
4
4
  import { merge } from "lodash";
5
5
  // noinspection SpellCheckingInspection
6
6
  import destr from "destr";
7
- import FetchResponse from "./FetchResponse";
8
- import { getGroupedRenderedCookies } from "./getGroupedRenderedCookies";
7
+ import { cookieJar } from "./CookieStore";
8
+ import UserAgent from "user-agents";
9
+ import { parsedArgs } from "./argv";
10
+ import { blue, yellow } from "colorette";
11
+ import { getMergedRenderedCookies } from "./getMergedRenderedCookies";
12
+ import { cookieSpecsFromUrl } from "./cookieSpecsFromUrl";
13
+ import CookieSpec from "./CookieSpec";
9
14
 
10
15
  export async function fetchWithCookies(
11
16
  url: RequestInfo | URL,
12
- options: RequestInit | undefined = {}
13
- ): Promise<FetchResponse> {
17
+ options: RequestInit | undefined = {},
18
+ fetch: Function = fetchImpl
19
+ ): Promise<Response> {
20
+ const headers = {
21
+ "User-Agent": new UserAgent().toString(),
22
+ };
14
23
  const defaultOptions: RequestInit = {
15
- headers: {
16
- "User-Agent":
17
- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
18
- },
24
+ headers,
19
25
  redirect: "manual",
20
26
  };
21
27
  const url2: string = `${url}`;
22
28
  const url1: URL = new URL(url2);
23
- const domain = url1.hostname.replace(/^.*(\.\w+\.\w+)$/, (match, p1) => {
24
- return `%${p1}`;
25
- });
26
- const cookies: string[] = await getGroupedRenderedCookies({
27
- name: "%",
28
- domain: domain,
29
- });
30
- const cookie = cookies.pop();
31
- const newOptions1: RequestInit = merge(defaultOptions, options, {
32
- headers: {
29
+ const cookieSpecs: CookieSpec[] = cookieSpecsFromUrl(url1);
30
+ const cookie = await getMergedRenderedCookies(cookieSpecs).catch(() => "");
31
+ if (cookie.length > 0) {
32
+ merge(headers, {
33
33
  Cookie: cookie,
34
- },
35
- });
34
+ });
35
+ }
36
+ if (parsedArgs["dump-request-headers"]) {
37
+ console.log(blue("Request headers:"), headers);
38
+ }
39
+ const newOptions1: RequestInit = merge(defaultOptions, options, { headers });
36
40
  try {
37
41
  const res: Response = await fetch(url2, newOptions1);
38
- const newUrl = res.headers.get("location") as string;
42
+ const headers: [string, string][] = [];
43
+ res.headers.forEach((value, key) => {
44
+ headers.push([key, value]);
45
+ });
46
+ for (const [key, value] of headers) {
47
+ if (key === "set-cookie") {
48
+ await cookieJar.setCookie(value, url2);
49
+ if (parsedArgs.verbose) {
50
+ console.log(blue(`Set-Cookie: ${yellow(value)} ${yellow(url2)}`));
51
+ }
52
+ // const cookie = tough.parse(value);
53
+ // if (cookie instanceof Cookie) {
54
+ // await memoryCookieStore.putCookie(cookie);
55
+ // }
56
+ }
57
+ }
58
+
59
+ const newUrl: string = res.headers.get("location") as string;
39
60
  if (res.redirected || (newUrl && newUrl !== url2)) {
61
+ if (parsedArgs.verbose) {
62
+ console.log(blue(`Redirected to `), yellow(newUrl));
63
+ }
40
64
  return fetchWithCookies(newUrl, newOptions1);
41
65
  }
42
- const arrayBuffer1 = res.arrayBuffer();
43
- const arrayBuffer = async () => arrayBuffer1;
44
- const buffer = async () => arrayBuffer().then(Buffer.from);
45
- const text = async () => buffer().then((buffer) => buffer.toString("utf8"));
46
- const json = async () => text().then(destr);
47
- const formData = async () =>
48
- text().then((text) => new URLSearchParams(text));
66
+
67
+ const arrayBuffer1: Promise<ArrayBuffer> = res.arrayBuffer();
68
+
69
+ async function arrayBuffer(): Promise<ArrayBuffer> {
70
+ return arrayBuffer1;
71
+ }
72
+
73
+ async function buffer(): Promise<Buffer> {
74
+ return arrayBuffer().then(Buffer.from);
75
+ }
76
+
77
+ async function text(): Promise<string> {
78
+ return buffer().then((buffer) => buffer.toString("utf8"));
79
+ }
80
+
81
+ async function json(): Promise<any> {
82
+ return text().then((text) => destr(text));
83
+ }
84
+
85
+ async function formData(): Promise<FormData> {
86
+ const urlSearchParams: URLSearchParams = await text().then(
87
+ (text) => new URLSearchParams(text)
88
+ );
89
+ const formData = new FormData();
90
+ for (const [key, value] of urlSearchParams.entries()) {
91
+ formData.append(key, value);
92
+ }
93
+ return formData;
94
+ }
95
+
96
+ const res1: Response = res;
49
97
  const source2 = {
50
- status: res.status,
51
- statusText: res.statusText,
52
- headers: res.headers,
53
98
  arrayBuffer,
54
- buffer,
55
99
  text,
56
100
  json,
101
+ buffer,
57
102
  formData,
58
103
  //
59
104
  };
60
- return merge({}, res, source2);
105
+ return merge(res1, source2);
61
106
  } catch (e) {
62
107
  throw e;
63
108
  }
@@ -1,5 +1,5 @@
1
- import { env } from "./global";
2
1
  import * as fs from "fs";
2
+ import { parsedArgs } from "./argv";
3
3
 
4
4
  export async function findAllFiles({
5
5
  path,
@@ -12,16 +12,12 @@ export async function findAllFiles({
12
12
  maxDepth?: number;
13
13
  }): Promise<string[]> {
14
14
  const rootSegments = path.split("/").length;
15
-
16
- if (env.VERBOSE) {
17
- console.log(`Searching for ${name} in ${path}`);
18
- }
19
15
  const files: string[] = [];
20
16
  let readdirSync;
21
17
  try {
22
18
  readdirSync = fs.readdirSync(path);
23
19
  } catch (e) {
24
- if (env.VERBOSE) {
20
+ if (parsedArgs.verbose) {
25
21
  console.log(`Error reading ${path}`, e);
26
22
  }
27
23
  return [];
@@ -32,7 +28,7 @@ export async function findAllFiles({
32
28
  try {
33
29
  stat = fs.statSync(filePath);
34
30
  } catch (e) {
35
- if (env.VERBOSE) {
31
+ if (parsedArgs.verbose) {
36
32
  console.error(`Error getting stat for ${filePath}`, e);
37
33
  }
38
34
  continue;
@@ -47,7 +43,7 @@ export async function findAllFiles({
47
43
  });
48
44
  files.push(...subFiles);
49
45
  } catch (e) {
50
- if (env.VERBOSE) {
46
+ if (parsedArgs.verbose) {
51
47
  console.error(e);
52
48
  }
53
49
  }
@@ -56,7 +52,7 @@ export async function findAllFiles({
56
52
  files.push(filePath);
57
53
  }
58
54
  }
59
- if (env.VERBOSE) {
55
+ if (parsedArgs.verbose) {
60
56
  if (files.length > 0) {
61
57
  console.log(`Found ${files.length} ${name} files`);
62
58
  console.log(files);
@@ -0,0 +1,19 @@
1
+ import CookieSpec from "./CookieSpec";
2
+ import ExportedCookie from "./ExportedCookie";
3
+ import { queryCookies } from "./queryCookies";
4
+ import ChromeCookieQueryStrategy from "./browsers/ChromeCookieQueryStrategy";
5
+ import { isExportedCookie } from "./IsExportedCookie";
6
+
7
+ export async function getChromeCookie(
8
+ params: CookieSpec
9
+ ): Promise<ExportedCookie | undefined> {
10
+ const cookies = await queryCookies(
11
+ params,
12
+ new ChromeCookieQueryStrategy()
13
+ //
14
+ );
15
+ if (cookies.length == 0) {
16
+ throw new Error("Cookie not found");
17
+ }
18
+ return cookies.find(isExportedCookie);
19
+ }
@@ -0,0 +1,19 @@
1
+ import CookieSpec from "./CookieSpec";
2
+ import ExportedCookie from "./ExportedCookie";
3
+ import { queryCookies } from "./queryCookies";
4
+ import CompositeCookieQueryStrategy from "./browsers/CompositeCookieQueryStrategy";
5
+
6
+ export async function getCookie(
7
+ params: CookieSpec
8
+ ): Promise<ExportedCookie | undefined> {
9
+ const cookies = await queryCookies(
10
+ params,
11
+ new CompositeCookieQueryStrategy()
12
+ //
13
+ );
14
+ if (Array.isArray(cookies) && cookies.length > 0) {
15
+ return cookies.find((cookie) => cookie != null);
16
+ } else {
17
+ throw new Error("Cookie not found");
18
+ }
19
+ }
@@ -0,0 +1,19 @@
1
+ import CookieSpec from "./CookieSpec";
2
+ import ExportedCookie from "./ExportedCookie";
3
+ import { queryCookies } from "./queryCookies";
4
+ import FirefoxCookieQueryStrategy from "./browsers/FirefoxCookieQueryStrategy";
5
+
6
+ export async function getFirefoxCookie(
7
+ params: CookieSpec
8
+ ): Promise<ExportedCookie | undefined> {
9
+ const cookies = await queryCookies(
10
+ params,
11
+ new FirefoxCookieQueryStrategy()
12
+ //
13
+ );
14
+ if (Array.isArray(cookies) && cookies.length > 0) {
15
+ return cookies.find((cookie) => cookie != null);
16
+ } else {
17
+ throw new Error("Cookie not found");
18
+ }
19
+ }
@@ -1,32 +1,19 @@
1
- import { queryCookies } from "./queryCookies";
2
- import CompositeCookieQueryStrategy from "./browsers/CompositeCookieQueryStrategy";
3
1
  import { groupBy } from "lodash";
4
2
  import { resultsRendered } from "./resultsRendered";
5
- import { CookieSpec } from "./CookieSpec";
6
- import { ExportedCookie } from "./ExportedCookie";
3
+ import { MultiCookieSpec } from "./CookieSpec";
4
+ import ExportedCookie from "./ExportedCookie";
5
+ import { comboQueryCookieSpec } from "./comboQueryCookieSpec";
7
6
 
8
7
  export async function getGroupedRenderedCookies(
9
- //
10
- {
11
- name,
12
- domain,
13
- }: //
14
- CookieSpec
15
- ): //
16
- Promise<string[]> {
17
- const cookies: ExportedCookie[] = await queryCookies(
18
- { name, domain },
19
- new CompositeCookieQueryStrategy()
20
- //
21
- );
22
- if (Array.isArray(cookies) && cookies.length > 0) {
23
- const results: ExportedCookie[] = await queryCookies({ name, domain });
24
- const groupedByFile = groupBy(results, (r) => r.meta?.file);
25
- return Object.keys(groupedByFile).map((file: string) => {
26
- const results: ExportedCookie[] = groupedByFile[file];
27
- return resultsRendered(results);
28
- });
29
- } else {
8
+ cookieSpec: MultiCookieSpec
9
+ ): Promise<string[]> {
10
+ const cookies: ExportedCookie[] = await comboQueryCookieSpec(cookieSpec);
11
+ if (cookies.length == 0) {
30
12
  throw new Error("Cookie not found");
31
13
  }
14
+ const groupedByFile = groupBy(cookies, (r: ExportedCookie) => r.meta?.file);
15
+ return Object.keys(groupedByFile).map((file: string) => {
16
+ const results: ExportedCookie[] = groupedByFile[file];
17
+ return resultsRendered(results);
18
+ });
32
19
  }
@@ -0,0 +1,14 @@
1
+ import { resultsRendered } from "./resultsRendered";
2
+ import { comboQueryCookieSpec } from "./comboQueryCookieSpec";
3
+ import { MultiCookieSpec } from "./CookieSpec";
4
+ import ExportedCookie from "./ExportedCookie";
5
+
6
+ export async function getMergedRenderedCookies(
7
+ cookieSpec: MultiCookieSpec
8
+ ): Promise<string> {
9
+ const cookies: ExportedCookie[] = await comboQueryCookieSpec(cookieSpec);
10
+ if (cookies.length > 0) {
11
+ return resultsRendered(cookies);
12
+ }
13
+ return "";
14
+ }