@cpu-utils/headless 1.0.1 → 1.1.0
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/chromeFetch.js +1 -1
- package/dist/chromeFetch.js.map +1 -1
- package/dist/chromeFetch.test.d.ts +2 -0
- package/dist/chromeFetch.test.d.ts.map +1 -0
- package/dist/chromeFetch.test.js +113 -0
- package/dist/chromeFetch.test.js.map +1 -0
- package/dist/getChromeCookie.d.ts +3 -0
- package/dist/getChromeCookie.d.ts.map +1 -1
- package/dist/getChromeCookie.js +27 -1
- package/dist/getChromeCookie.js.map +1 -1
- package/dist/getChromeCookie.test.d.ts +2 -0
- package/dist/getChromeCookie.test.d.ts.map +1 -0
- package/dist/getChromeCookie.test.js +64 -0
- package/dist/getChromeCookie.test.js.map +1 -0
- package/package.json +2 -2
package/dist/chromeFetch.js
CHANGED
|
@@ -8,7 +8,7 @@ const getChromeCookie_1 = require("./getChromeCookie");
|
|
|
8
8
|
*/
|
|
9
9
|
const CHROME_DEFAULT_HEADERS = {
|
|
10
10
|
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
|
|
11
|
-
Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
|
|
11
|
+
Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,application/json,*/*;q=0.8',
|
|
12
12
|
'Accept-Language': 'en-US,en;q=0.9',
|
|
13
13
|
'Accept-Encoding': 'gzip, deflate, br',
|
|
14
14
|
Connection: 'keep-alive',
|
package/dist/chromeFetch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chromeFetch.js","sourceRoot":"","sources":["../src/chromeFetch.ts"],"names":[],"mappings":";;;AAkCA,kCAiBC;AAnDD,uDAAoD;AAEpD;;GAEG;AACH,MAAM,sBAAsB,GAA2B;IACrD,YAAY,EACV,iHAAiH;IACnH,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"chromeFetch.js","sourceRoot":"","sources":["../src/chromeFetch.ts"],"names":[],"mappings":";;;AAkCA,kCAiBC;AAnDD,uDAAoD;AAEpD;;GAEG;AACH,MAAM,sBAAsB,GAA2B;IACrD,YAAY,EACV,iHAAiH;IACnH,MAAM,EAAE,wGAAwG;IAChH,iBAAiB,EAAE,gBAAgB;IACnC,iBAAiB,EAAE,mBAAmB;IACtC,UAAU,EAAE,YAAY;IACxB,2BAA2B,EAAE,GAAG;IAChC,gBAAgB,EAAE,UAAU;IAC5B,gBAAgB,EAAE,UAAU;IAC5B,gBAAgB,EAAE,MAAM;IACxB,gBAAgB,EAAE,IAAI;CACvB,CAAC;AAEO,wDAAsB;AAE/B;;;;;;;;;;;;GAYG;AACI,KAAK,UAAU,WAAW,CAC/B,GAAW,EACX,IAAkB,EAClB,OAAgB;IAEhB,MAAM,MAAM,GAAG,MAAM,IAAA,iCAAe,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAEnD,MAAM,OAAO,GAA2B;QACtC,GAAG,sBAAsB;QACzB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC;KACjC,CAAC;IAEF,OAAO,KAAK,CAAC,GAAG,EAAE;QAChB,GAAG,IAAI;QACP,OAAO;KACR,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,OAAqB;IAC3C,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,IAAI,OAAO,YAAY,OAAO,EAAE,CAAC;QAC/B,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAC7B,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,OAAiC,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chromeFetch.test.d.ts","sourceRoot":"","sources":["../src/chromeFetch.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const node_test_1 = require("node:test");
|
|
37
|
+
const assert = __importStar(require("node:assert"));
|
|
38
|
+
// Mock chrome-cookies-secure before importing the module under test
|
|
39
|
+
const mockGetCookiesPromised = node_test_1.mock.fn(async (_url, _format, _profile) => 'session=abc123; token=xyz');
|
|
40
|
+
node_test_1.mock.module('chrome-cookies-secure', {
|
|
41
|
+
namedExports: {
|
|
42
|
+
getCookiesPromised: mockGetCookiesPromised,
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
(0, node_test_1.describe)('chromeFetch', () => {
|
|
46
|
+
(0, node_test_1.afterEach)(() => {
|
|
47
|
+
mockGetCookiesPromised.mock.resetCalls();
|
|
48
|
+
node_test_1.mock.restoreAll();
|
|
49
|
+
});
|
|
50
|
+
(0, node_test_1.it)('should fetch with Chrome cookies and default headers', async () => {
|
|
51
|
+
const { chromeFetch, CHROME_DEFAULT_HEADERS } = await Promise.resolve().then(() => __importStar(require('./chromeFetch')));
|
|
52
|
+
mockGetCookiesPromised.mock.mockImplementationOnce(async (_url, _format, _profile) => 'session=abc123; token=xyz; user=张三');
|
|
53
|
+
const mockFetch = node_test_1.mock.method(globalThis, 'fetch', async () => {
|
|
54
|
+
return new Response('ok', { status: 200 });
|
|
55
|
+
});
|
|
56
|
+
await chromeFetch('https://example.com');
|
|
57
|
+
// Verify getCookiesPromised was called
|
|
58
|
+
assert.strictEqual(mockGetCookiesPromised.mock.calls.length, 1);
|
|
59
|
+
assert.strictEqual(mockGetCookiesPromised.mock.calls[0].arguments[0], 'https://example.com');
|
|
60
|
+
// Verify fetch was called
|
|
61
|
+
assert.strictEqual(mockFetch.mock.calls.length, 1);
|
|
62
|
+
const [fetchUrl, fetchInit] = mockFetch.mock.calls[0].arguments;
|
|
63
|
+
assert.strictEqual(fetchUrl, 'https://example.com');
|
|
64
|
+
// Verify headers include defaults and encoded cookies
|
|
65
|
+
const headers = fetchInit?.headers;
|
|
66
|
+
// '张三' should be encoded to '%E5%BC%A0%E4%B8%89'
|
|
67
|
+
assert.strictEqual(headers['Cookie'], 'session=abc123; token=xyz; user=%E5%BC%A0%E4%B8%89');
|
|
68
|
+
assert.strictEqual(headers['User-Agent'], CHROME_DEFAULT_HEADERS['User-Agent']);
|
|
69
|
+
assert.strictEqual(headers['Accept-Language'], CHROME_DEFAULT_HEADERS['Accept-Language']);
|
|
70
|
+
});
|
|
71
|
+
(0, node_test_1.it)('should allow custom headers to override defaults', async () => {
|
|
72
|
+
const { chromeFetch } = await Promise.resolve().then(() => __importStar(require('./chromeFetch')));
|
|
73
|
+
const mockFetch = node_test_1.mock.method(globalThis, 'fetch', async () => {
|
|
74
|
+
return new Response('ok', { status: 200 });
|
|
75
|
+
});
|
|
76
|
+
await chromeFetch('https://example.com', {
|
|
77
|
+
headers: { 'Accept-Language': 'zh-CN,zh;q=0.9' },
|
|
78
|
+
});
|
|
79
|
+
const [, fetchInit] = mockFetch.mock.calls[0].arguments;
|
|
80
|
+
const headers = fetchInit?.headers;
|
|
81
|
+
assert.strictEqual(headers['Accept-Language'], 'zh-CN,zh;q=0.9');
|
|
82
|
+
});
|
|
83
|
+
(0, node_test_1.it)('should pass custom profile to getChromeCookie', async () => {
|
|
84
|
+
const { chromeFetch } = await Promise.resolve().then(() => __importStar(require('./chromeFetch')));
|
|
85
|
+
node_test_1.mock.method(globalThis, 'fetch', async () => {
|
|
86
|
+
return new Response('ok', { status: 200 });
|
|
87
|
+
});
|
|
88
|
+
await chromeFetch('https://example.com', undefined, 'Profile 1');
|
|
89
|
+
const call = mockGetCookiesPromised.mock.calls[0];
|
|
90
|
+
assert.strictEqual(call.arguments[2], 'Profile 1');
|
|
91
|
+
});
|
|
92
|
+
(0, node_test_1.it)('should pass through fetch init options like method and body', async () => {
|
|
93
|
+
const { chromeFetch } = await Promise.resolve().then(() => __importStar(require('./chromeFetch')));
|
|
94
|
+
const mockFetch = node_test_1.mock.method(globalThis, 'fetch', async () => {
|
|
95
|
+
return new Response('ok', { status: 200 });
|
|
96
|
+
});
|
|
97
|
+
await chromeFetch('https://example.com/api', {
|
|
98
|
+
method: 'POST',
|
|
99
|
+
body: JSON.stringify({ key: 'value' }),
|
|
100
|
+
});
|
|
101
|
+
const [, fetchInit] = mockFetch.mock.calls[0].arguments;
|
|
102
|
+
assert.strictEqual(fetchInit?.method, 'POST');
|
|
103
|
+
assert.strictEqual(fetchInit?.body, JSON.stringify({ key: 'value' }));
|
|
104
|
+
});
|
|
105
|
+
(0, node_test_1.it)('should export CHROME_DEFAULT_HEADERS', async () => {
|
|
106
|
+
const { CHROME_DEFAULT_HEADERS } = await Promise.resolve().then(() => __importStar(require('./chromeFetch')));
|
|
107
|
+
assert.ok(CHROME_DEFAULT_HEADERS);
|
|
108
|
+
assert.ok(CHROME_DEFAULT_HEADERS['User-Agent']);
|
|
109
|
+
assert.ok(CHROME_DEFAULT_HEADERS['Accept']);
|
|
110
|
+
assert.ok(CHROME_DEFAULT_HEADERS['Accept-Language']);
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
//# sourceMappingURL=chromeFetch.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chromeFetch.test.js","sourceRoot":"","sources":["../src/chromeFetch.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
* This reads the current user's Chrome cookie store and returns the cookies
|
|
5
5
|
* associated with the given URL as a header string (e.g. "name=value; name2=value2").
|
|
6
6
|
*
|
|
7
|
+
* Note: If cookies contain non-ASCII characters, the values are URL-encoded to ensure
|
|
8
|
+
* compatibility with HTTP header standards (ByteString), which is required by fetch.
|
|
9
|
+
*
|
|
7
10
|
* @param url - The target URL to retrieve cookies for (e.g. "https://example.com")
|
|
8
11
|
* @param profile - Chrome profile to use. Defaults to 'Default'.
|
|
9
12
|
* Use 'Profile 1', 'Profile 2', etc. for additional Chrome profiles.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getChromeCookie.d.ts","sourceRoot":"","sources":["../src/getChromeCookie.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"getChromeCookie.d.ts","sourceRoot":"","sources":["../src/getChromeCookie.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,OAAO,SAAY,GAClB,OAAO,CAAC,MAAM,CAAC,CA0BjB"}
|
package/dist/getChromeCookie.js
CHANGED
|
@@ -8,12 +8,38 @@ const chrome_cookies_secure_1 = require("chrome-cookies-secure");
|
|
|
8
8
|
* This reads the current user's Chrome cookie store and returns the cookies
|
|
9
9
|
* associated with the given URL as a header string (e.g. "name=value; name2=value2").
|
|
10
10
|
*
|
|
11
|
+
* Note: If cookies contain non-ASCII characters, the values are URL-encoded to ensure
|
|
12
|
+
* compatibility with HTTP header standards (ByteString), which is required by fetch.
|
|
13
|
+
*
|
|
11
14
|
* @param url - The target URL to retrieve cookies for (e.g. "https://example.com")
|
|
12
15
|
* @param profile - Chrome profile to use. Defaults to 'Default'.
|
|
13
16
|
* Use 'Profile 1', 'Profile 2', etc. for additional Chrome profiles.
|
|
14
17
|
* @returns A promise that resolves to the cookie header string.
|
|
15
18
|
*/
|
|
16
19
|
async function getChromeCookie(url, profile = 'Default') {
|
|
17
|
-
|
|
20
|
+
const cookieString = await (0, chrome_cookies_secure_1.getCookiesPromised)(url, 'header', profile);
|
|
21
|
+
if (!cookieString)
|
|
22
|
+
return '';
|
|
23
|
+
// Ensure the cookie string is a valid ByteString (ASCII 0-255) for HTTP headers.
|
|
24
|
+
// If it contains Unicode characters (> 255), fetch/undici will throw an error.
|
|
25
|
+
return cookieString
|
|
26
|
+
.split('; ')
|
|
27
|
+
.map((pair) => {
|
|
28
|
+
const [name, ...valueParts] = pair.split('=');
|
|
29
|
+
const value = valueParts.join('=');
|
|
30
|
+
// Only encode if the value contains non-ASCII characters
|
|
31
|
+
// eslint-disable-next-line no-control-regex
|
|
32
|
+
if (/[^\x00-\x7F]/.test(value)) {
|
|
33
|
+
try {
|
|
34
|
+
return `${name}=${encodeURIComponent(value)}`;
|
|
35
|
+
}
|
|
36
|
+
catch (e) {
|
|
37
|
+
// Fallback to original if encoding fails
|
|
38
|
+
return pair;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return pair;
|
|
42
|
+
})
|
|
43
|
+
.join('; ');
|
|
18
44
|
}
|
|
19
45
|
//# sourceMappingURL=getChromeCookie.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getChromeCookie.js","sourceRoot":"","sources":["../src/getChromeCookie.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"getChromeCookie.js","sourceRoot":"","sources":["../src/getChromeCookie.ts"],"names":[],"mappings":";;AAgBA,0CA6BC;AA7CD,iEAA2D;AAE3D;;;;;;;;;;;;;GAaG;AACI,KAAK,UAAU,eAAe,CACnC,GAAW,EACX,OAAO,GAAG,SAAS;IAEnB,MAAM,YAAY,GAAW,MAAM,IAAA,0CAAkB,EAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAE9E,IAAI,CAAC,YAAY;QAAE,OAAO,EAAE,CAAC;IAE7B,iFAAiF;IACjF,+EAA+E;IAC/E,OAAO,YAAY;SAChB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,CAAC,IAAI,EAAE,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEnC,yDAAyD;QACzD,4CAA4C;QAC5C,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,OAAO,GAAG,IAAI,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;YAChD,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,yCAAyC;gBACzC,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getChromeCookie.test.d.ts","sourceRoot":"","sources":["../src/getChromeCookie.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const node_test_1 = require("node:test");
|
|
37
|
+
const assert = __importStar(require("node:assert"));
|
|
38
|
+
// Mock chrome-cookies-secure before importing the module under test
|
|
39
|
+
const mockGetCookiesPromised = node_test_1.mock.fn(async (_url, _format, _profile) => 'cookie1=value1; cookie2=value2');
|
|
40
|
+
node_test_1.mock.module('chrome-cookies-secure', {
|
|
41
|
+
namedExports: {
|
|
42
|
+
getCookiesPromised: mockGetCookiesPromised,
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
(0, node_test_1.describe)('getChromeCookie', () => {
|
|
46
|
+
(0, node_test_1.it)('should call getCookiesPromised with header format and default profile', async () => {
|
|
47
|
+
const { getChromeCookie } = await Promise.resolve().then(() => __importStar(require('./getChromeCookie')));
|
|
48
|
+
const result = await getChromeCookie('https://example.com');
|
|
49
|
+
assert.strictEqual(result, 'cookie1=value1; cookie2=value2');
|
|
50
|
+
assert.strictEqual(mockGetCookiesPromised.mock.calls.length, 1);
|
|
51
|
+
const call = mockGetCookiesPromised.mock.calls[0];
|
|
52
|
+
assert.strictEqual(call.arguments[0], 'https://example.com');
|
|
53
|
+
assert.strictEqual(call.arguments[1], 'header');
|
|
54
|
+
assert.strictEqual(call.arguments[2], 'Default');
|
|
55
|
+
});
|
|
56
|
+
(0, node_test_1.it)('should pass custom profile when provided', async () => {
|
|
57
|
+
mockGetCookiesPromised.mock.resetCalls();
|
|
58
|
+
const { getChromeCookie } = await Promise.resolve().then(() => __importStar(require('./getChromeCookie')));
|
|
59
|
+
await getChromeCookie('https://example.com', 'Profile 1');
|
|
60
|
+
const call = mockGetCookiesPromised.mock.calls[0];
|
|
61
|
+
assert.strictEqual(call.arguments[2], 'Profile 1');
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
//# sourceMappingURL=getChromeCookie.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getChromeCookie.test.js","sourceRoot":"","sources":["../src/getChromeCookie.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAA+C;AAC/C,oDAAsC;AAEtC,oEAAoE;AACpE,MAAM,sBAAsB,GAAG,gBAAI,CAAC,EAAE,CACpC,KAAK,EAAE,IAAY,EAAE,OAAe,EAAE,QAAgB,EAAE,EAAE,CAAC,gCAAgC,CAC5F,CAAC;AAEF,gBAAI,CAAC,MAAM,CAAC,uBAAuB,EAAE;IACnC,YAAY,EAAE;QACZ,kBAAkB,EAAE,sBAAsB;KAC3C;CACF,CAAC,CAAC;AAEH,IAAA,oBAAQ,EAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAA,cAAE,EAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,EAAE,eAAe,EAAE,GAAG,wDAAa,mBAAmB,GAAC,CAAC;QAE9D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,qBAAqB,CAAC,CAAC;QAE5D,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAAC;QAC7D,MAAM,CAAC,WAAW,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAEhE,MAAM,IAAI,GAAG,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC;QAC7D,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,IAAA,cAAE,EAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,sBAAsB,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACzC,MAAM,EAAE,eAAe,EAAE,GAAG,wDAAa,mBAAmB,GAAC,CAAC;QAE9D,MAAM,eAAe,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;QAE1D,MAAM,IAAI,GAAG,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cpu-utils/headless",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Headless browser utilities for the monorepo",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"scripts": {
|
|
9
9
|
"build": "tsc",
|
|
10
10
|
"build:watch": "tsc --watch",
|
|
11
|
-
"test": "node --test dist/**/*.test.js",
|
|
11
|
+
"test": "tsc && node --test --experimental-test-module-mocks dist/**/*.test.js",
|
|
12
12
|
"typecheck": "tsc --noEmit"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|