1688-cli 0.1.41 → 0.1.43
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/AGENTS.md +112 -318
- package/ARCHITECTURE.md +107 -0
- package/CHANGELOG.md +79 -0
- package/README.md +186 -18
- package/dist/cli.js +131 -25
- package/dist/cli.js.map +1 -1
- package/dist/commands/cart-list.js +2 -1
- package/dist/commands/cart-list.js.map +1 -1
- package/dist/commands/checkout-confirm.js +8 -8
- package/dist/commands/checkout-confirm.js.map +1 -1
- package/dist/commands/compare.js +107 -0
- package/dist/commands/compare.js.map +1 -0
- package/dist/commands/doctor.js +64 -47
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/inbox.js +1 -1
- package/dist/commands/inbox.js.map +1 -1
- package/dist/commands/login.js +14 -14
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.js +6 -4
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/offer.js +7 -5
- package/dist/commands/offer.js.map +1 -1
- package/dist/commands/order-list.js +4 -2
- package/dist/commands/order-list.js.map +1 -1
- package/dist/commands/order-logistics.js +4 -2
- package/dist/commands/order-logistics.js.map +1 -1
- package/dist/commands/profile.js +25 -9
- package/dist/commands/profile.js.map +1 -1
- package/dist/commands/research.js +142 -0
- package/dist/commands/research.js.map +1 -0
- package/dist/commands/search.js +59 -18
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/seller-chat.js +1 -1
- package/dist/commands/seller-chat.js.map +1 -1
- package/dist/commands/seller-inquire.js +1 -1
- package/dist/commands/seller-inquire.js.map +1 -1
- package/dist/commands/seller-messages.js +8 -5
- package/dist/commands/seller-messages.js.map +1 -1
- package/dist/commands/sourcing-utils.js +438 -0
- package/dist/commands/sourcing-utils.js.map +1 -0
- package/dist/commands/supplier-inspect.js +559 -0
- package/dist/commands/supplier-inspect.js.map +1 -0
- package/dist/commands/supplier-search.js +522 -0
- package/dist/commands/supplier-search.js.map +1 -0
- package/dist/commands/whoami.js +6 -3
- package/dist/commands/whoami.js.map +1 -1
- package/dist/daemon/client.js +10 -6
- package/dist/daemon/client.js.map +1 -1
- package/dist/daemon/manager.js +53 -37
- package/dist/daemon/manager.js.map +1 -1
- package/dist/daemon/protocol.js +2 -1
- package/dist/daemon/protocol.js.map +1 -1
- package/dist/daemon/server.js +26 -22
- package/dist/daemon/server.js.map +1 -1
- package/dist/session/context.js +1 -1
- package/dist/session/context.js.map +1 -1
- package/dist/session/dispatch.js +25 -22
- package/dist/session/dispatch.js.map +1 -1
- package/dist/session/im-ws.js +8 -5
- package/dist/session/im-ws.js.map +1 -1
- package/dist/session/lock.js +14 -14
- package/dist/session/lock.js.map +1 -1
- package/dist/session/paths.js +50 -16
- package/dist/session/paths.js.map +1 -1
- package/dist/session/search-mtop.js +53 -0
- package/dist/session/search-mtop.js.map +1 -1
- package/dist/session/shared.js +17 -7
- package/dist/session/shared.js.map +1 -1
- package/dist/session/state.js +7 -7
- package/dist/session/state.js.map +1 -1
- package/dist/session/supplier-search.js +403 -0
- package/dist/session/supplier-search.js.map +1 -0
- package/dist/util/encoding.js +8 -0
- package/dist/util/encoding.js.map +1 -0
- package/dist/util/temp.js +6 -0
- package/dist/util/temp.js.map +1 -0
- package/docs/AGENT_MAPS_PLAN.md +171 -0
- package/docs/AGENT_WORKING_PRINCIPLES.md +143 -0
- package/docs/COMMANDS.md +205 -0
- package/docs/FEATURES.md +45 -0
- package/docs/JSON_CONTRACTS.md +476 -0
- package/docs/QUALITY_SCORE.md +61 -0
- package/docs/README.md +36 -0
- package/docs/RELIABILITY.md +69 -0
- package/docs/SAFETY.md +99 -0
- package/docs/WORKFLOW.md +82 -0
- package/docs/exec-plans/README.md +9 -0
- package/docs/exec-plans/active/README.md +4 -0
- package/docs/exec-plans/completed/2026-05-28-sourcing-research-v1.md +125 -0
- package/docs/exec-plans/completed/2026-05-31-supplier-inspect-v1.md +113 -0
- package/docs/exec-plans/completed/2026-06-04-supplier-search-v1.md +81 -0
- package/docs/exec-plans/completed/2026-06-07-windows-cli-compatibility.md +138 -0
- package/docs/exec-plans/completed/2026-06-16-profile-daemon.md +146 -0
- package/docs/exec-plans/completed/README.md +4 -0
- package/docs/exec-plans/tech-debt-tracker.md +5 -0
- package/docs/generated/command-index.md +54 -0
- package/docs/generated/json-shapes.md +111 -0
- package/docs/generated/module-map.md +13 -0
- package/docs/generated/test-index.md +34 -0
- package/docs/playbooks/add-command.md +15 -0
- package/docs/playbooks/add-mtop-capture.md +13 -0
- package/docs/playbooks/change-json-output.md +11 -0
- package/docs/playbooks/debug-risk-control.md +12 -0
- package/docs/playbooks/update-cli-release.md +61 -0
- package/docs/records/release-omissions.md +34 -0
- package/docs/specs/checkout-and-orders.md +30 -0
- package/docs/specs/index.md +9 -0
- package/docs/specs/profile-daemon.md +114 -0
- package/docs/specs/seller-im.md +28 -0
- package/docs/specs/sourcing-research.md +186 -0
- package/docs/specs/supplier-inspect.md +144 -0
- package/docs/specs/supplier-search.md +179 -0
- package/docs/specs/windows-cli-compatibility.md +123 -0
- package/package.json +21 -4
- package/scripts/check_agent_map.mjs +87 -0
- package/scripts/check_release.mjs +40 -0
- package/scripts/fix_bin_mode.mjs +18 -0
- package/scripts/generate_agent_context.mjs +253 -0
- package/scripts/postinstall.mjs +12 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../src/session/dispatch.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../src/session/dispatch.ts"],"names":[],"mappings":"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"}
|
package/dist/session/im-ws.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { writeFileSync } from 'node:fs';
|
|
2
2
|
import { waitUntil } from './wait.js';
|
|
3
|
+
import { debugTmpPath } from '../util/temp.js';
|
|
3
4
|
export const IM_BASE = 'https://air.1688.com/app/ocms-fusion-components-1688/def_cbu_web_im/index.html';
|
|
4
5
|
export function collectWsFrames(page) {
|
|
5
6
|
const frames = [];
|
|
@@ -61,7 +62,7 @@ export async function waitForLwpResponse(frames, method, timeoutMs) {
|
|
|
61
62
|
}, { timeoutMs, intervalMs: 200 });
|
|
62
63
|
}
|
|
63
64
|
/**
|
|
64
|
-
* Probe support: synchronously dump WS frames to
|
|
65
|
+
* Probe support: synchronously dump WS frames to the system temp dir.
|
|
65
66
|
*
|
|
66
67
|
* Call from inside the command's `try` block (NOT from `page.on('close', ...)`)
|
|
67
68
|
* so the dump runs before process exit. Headless `page.close()` does not
|
|
@@ -83,12 +84,14 @@ export function dumpWsFramesForProbe(frames, interestingPattern = /Message|Conve
|
|
|
83
84
|
return payloadHints.test(f.payload);
|
|
84
85
|
});
|
|
85
86
|
try {
|
|
86
|
-
|
|
87
|
-
|
|
87
|
+
const fullPath = debugTmpPath('1688-ws-frames.json');
|
|
88
|
+
const interestingPath = debugTmpPath('1688-ws-interesting.json');
|
|
89
|
+
writeFileSync(fullPath, JSON.stringify(enriched, null, 2));
|
|
90
|
+
writeFileSync(interestingPath, JSON.stringify(interesting, null, 2));
|
|
88
91
|
process.stderr.write(`[ws-frames] total=${frames.length} interesting=${interesting.length}\n` +
|
|
89
92
|
`methods seen: ${[...new Set(frames.map((f) => f.method).filter(Boolean))].join(', ')}\n` +
|
|
90
|
-
`full dump →
|
|
91
|
-
`interesting dump →
|
|
93
|
+
`full dump → ${fullPath} (${enriched.length} frames)\n` +
|
|
94
|
+
`interesting dump → ${interestingPath} (${interesting.length} frames)\n`);
|
|
92
95
|
}
|
|
93
96
|
catch (e) {
|
|
94
97
|
process.stderr.write(`[ws-frames] write failed: ${String(e)}\n`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"im-ws.js","sourceRoot":"","sources":["../../src/session/im-ws.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"im-ws.js","sourceRoot":"","sources":["../../src/session/im-ws.ts"],"names":[],"mappings":"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"}
|
package/dist/session/lock.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
|
-
import path from 'node:path';
|
|
3
2
|
import lockfile from 'proper-lockfile';
|
|
4
|
-
import { lockFile,
|
|
3
|
+
import { defaultProfileName, ensureProfileRuntimeDir, lockFile, pidFile, } from './paths.js';
|
|
5
4
|
import { CliError } from '../io/errors.js';
|
|
6
|
-
export async function acquireLock() {
|
|
7
|
-
|
|
5
|
+
export async function acquireLock(profile) {
|
|
6
|
+
const profileName = defaultProfileName(profile);
|
|
7
|
+
await ensureProfileRuntimeDir(profileName);
|
|
8
|
+
const target = lockFile(profileName);
|
|
8
9
|
// proper-lockfile requires the target file to exist
|
|
9
|
-
await fs.writeFile(
|
|
10
|
+
await fs.writeFile(target, '', { flag: 'a' });
|
|
10
11
|
const lockOpts = { retries: 0, stale: 5 * 60 * 1000 };
|
|
11
12
|
try {
|
|
12
|
-
return await lockfile.lock(
|
|
13
|
+
return await lockfile.lock(target, lockOpts);
|
|
13
14
|
}
|
|
14
15
|
catch (e) {
|
|
15
16
|
if (e.code !== 'ELOCKED')
|
|
@@ -18,22 +19,21 @@ export async function acquireLock() {
|
|
|
18
19
|
// a stale dir left over by an abruptly-killed process (Ctrl+C in
|
|
19
20
|
// --headed flow, SIGKILL on the daemon, etc.). If no daemon is running,
|
|
20
21
|
// we can safely clean up and retry — the dead process can't be using it.
|
|
21
|
-
if (await daemonIsAlive()) {
|
|
22
|
-
throw new CliError(5, 'LOCK_BUSY',
|
|
22
|
+
if (await daemonIsAlive(profileName)) {
|
|
23
|
+
throw new CliError(5, 'LOCK_BUSY', `Another 1688 command is running for profile "${profileName}". Close it and retry.`);
|
|
23
24
|
}
|
|
24
|
-
await fs.rm(
|
|
25
|
+
await fs.rm(target + '.lock', { recursive: true, force: true });
|
|
25
26
|
try {
|
|
26
|
-
return await lockfile.lock(
|
|
27
|
+
return await lockfile.lock(target, lockOpts);
|
|
27
28
|
}
|
|
28
29
|
catch {
|
|
29
|
-
throw new CliError(5, 'LOCK_BUSY',
|
|
30
|
+
throw new CliError(5, 'LOCK_BUSY', `Another 1688 command is running for profile "${profileName}". Close it and retry.`);
|
|
30
31
|
}
|
|
31
32
|
}
|
|
32
33
|
}
|
|
33
|
-
async function daemonIsAlive() {
|
|
34
|
-
const pidFile = path.join(root(), 'daemon.pid');
|
|
34
|
+
async function daemonIsAlive(profile) {
|
|
35
35
|
try {
|
|
36
|
-
const pid = parseInt((await fs.readFile(pidFile, 'utf8')).trim(), 10);
|
|
36
|
+
const pid = parseInt((await fs.readFile(pidFile(profile), 'utf8')).trim(), 10);
|
|
37
37
|
if (!Number.isFinite(pid) || pid <= 0)
|
|
38
38
|
return false;
|
|
39
39
|
try {
|
package/dist/session/lock.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/session/lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,
|
|
1
|
+
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/session/lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AACvC,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,QAAQ,EACR,OAAO,GACR,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAgB;IAChD,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,uBAAuB,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IACrC,oDAAoD;IACpD,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IAE9C,MAAM,QAAQ,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;IAEtD,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAK,CAAuB,CAAC,IAAI,KAAK,SAAS;YAAE,MAAM,CAAC,CAAC;QAEzD,mEAAmE;QACnE,iEAAiE;QACjE,wEAAwE;QACxE,yEAAyE;QACzE,IAAI,MAAM,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,QAAQ,CAChB,CAAC,EACD,WAAW,EACX,gDAAgD,WAAW,wBAAwB,CACpF,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC;YACH,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,QAAQ,CAChB,CAAC,EACD,WAAW,EACX,gDAAgD,WAAW,wBAAwB,CACpF,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,OAAgB;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QACpD,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,6CAA6C;YACnE,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
package/dist/session/paths.js
CHANGED
|
@@ -1,34 +1,65 @@
|
|
|
1
1
|
import os from 'node:os';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import fs from 'node:fs/promises';
|
|
4
|
+
import crypto from 'node:crypto';
|
|
4
5
|
export function root() {
|
|
5
6
|
return process.env.BB1688_HOME ?? path.join(os.homedir(), '.1688');
|
|
6
7
|
}
|
|
7
8
|
export function profilesDir() {
|
|
8
9
|
return path.join(root(), 'profiles');
|
|
9
10
|
}
|
|
10
|
-
export function
|
|
11
|
-
|
|
11
|
+
export function defaultProfileName(profile) {
|
|
12
|
+
const name = profile?.trim();
|
|
13
|
+
return name ? name : 'default';
|
|
12
14
|
}
|
|
13
|
-
export function
|
|
14
|
-
|
|
15
|
+
export function profileRuntimeDir(profile) {
|
|
16
|
+
const name = defaultProfileName(profile);
|
|
17
|
+
return name === 'default' ? root() : profilePath(name);
|
|
15
18
|
}
|
|
16
|
-
export function
|
|
19
|
+
export function stateFile(profile) {
|
|
20
|
+
return path.join(profileRuntimeDir(profile), 'state.json');
|
|
21
|
+
}
|
|
22
|
+
export function lockFile(profile) {
|
|
23
|
+
return path.join(profileRuntimeDir(profile), '.lock');
|
|
24
|
+
}
|
|
25
|
+
export function socketPath(profile) {
|
|
26
|
+
return socketPathForPlatform(process.platform, root(), profile);
|
|
27
|
+
}
|
|
28
|
+
export function socketPathForPlatform(platform, rootPath, profile) {
|
|
29
|
+
const name = defaultProfileName(profile);
|
|
17
30
|
// Windows: Node's net.listen()/createConnection() can't bind a Unix-style
|
|
18
|
-
// filesystem path on win32 (EACCES). Use a named pipe instead.
|
|
19
|
-
|
|
20
|
-
|
|
31
|
+
// filesystem path on win32 (EACCES). Use a named pipe instead. Include a
|
|
32
|
+
// stable root hash so different users and BB1688_HOME values do not collide,
|
|
33
|
+
// and include the profile hash so profiles under one root can run together.
|
|
34
|
+
if (platform === 'win32') {
|
|
35
|
+
const base = `\\\\.\\pipe\\1688-cli-daemon-${rootHash(rootPath)}`;
|
|
36
|
+
return name === 'default' ? base : `${base}-${profileHash(name)}`;
|
|
21
37
|
}
|
|
22
|
-
|
|
38
|
+
const dir = name === 'default' ? rootPath : path.join(rootPath, 'profiles', name);
|
|
39
|
+
return path.join(dir, 'daemon.sock');
|
|
23
40
|
}
|
|
24
|
-
export function
|
|
25
|
-
return
|
|
41
|
+
export function rootHash(rootPath) {
|
|
42
|
+
return crypto
|
|
43
|
+
.createHash('sha1')
|
|
44
|
+
.update(path.resolve(rootPath).toLowerCase())
|
|
45
|
+
.digest('hex')
|
|
46
|
+
.slice(0, 12);
|
|
26
47
|
}
|
|
27
|
-
export function
|
|
28
|
-
return
|
|
48
|
+
export function profileHash(profile) {
|
|
49
|
+
return crypto
|
|
50
|
+
.createHash('sha1')
|
|
51
|
+
.update(defaultProfileName(profile).toLowerCase())
|
|
52
|
+
.digest('hex')
|
|
53
|
+
.slice(0, 12);
|
|
29
54
|
}
|
|
30
|
-
export function
|
|
31
|
-
return path.join(
|
|
55
|
+
export function pidFile(profile) {
|
|
56
|
+
return path.join(profileRuntimeDir(profile), 'daemon.pid');
|
|
57
|
+
}
|
|
58
|
+
export function daemonVersionFile(profile) {
|
|
59
|
+
return path.join(profileRuntimeDir(profile), 'daemon.version');
|
|
60
|
+
}
|
|
61
|
+
export function daemonLogFile(profile) {
|
|
62
|
+
return path.join(profileRuntimeDir(profile), 'daemon.log');
|
|
32
63
|
}
|
|
33
64
|
export function runsDir() {
|
|
34
65
|
return path.join(root(), 'runs');
|
|
@@ -43,9 +74,12 @@ export function loginQrFile() {
|
|
|
43
74
|
return path.join(root(), 'login-qr.png');
|
|
44
75
|
}
|
|
45
76
|
export function profilePath(name = 'default') {
|
|
46
|
-
return path.join(profilesDir(), name);
|
|
77
|
+
return path.join(profilesDir(), defaultProfileName(name));
|
|
47
78
|
}
|
|
48
79
|
export async function ensureRoot() {
|
|
49
80
|
await fs.mkdir(root(), { recursive: true });
|
|
50
81
|
}
|
|
82
|
+
export async function ensureProfileRuntimeDir(profile) {
|
|
83
|
+
await fs.mkdir(profileRuntimeDir(profile), { recursive: true });
|
|
84
|
+
}
|
|
51
85
|
//# sourceMappingURL=paths.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/session/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/session/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,MAAM,UAAU,IAAI;IAClB,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC;IAC7B,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAgB;IAChD,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAgB;IACxC,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAgB;IACvC,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAgB;IACzC,OAAO,qBAAqB,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,QAAyB,EACzB,QAAgB,EAChB,OAAgB;IAEhB,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACzC,0EAA0E;IAC1E,yEAAyE;IACzE,6EAA6E;IAC7E,4EAA4E;IAC5E,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,gCAAgC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClE,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;IACpE,CAAC;IACD,MAAM,GAAG,GACP,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IACxE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,QAAgB;IACvC,OAAO,MAAM;SACV,UAAU,CAAC,MAAM,CAAC;SAClB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;SAC5C,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,MAAM;SACV,UAAU,CAAC,MAAM,CAAC;SAClB,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;SACjD,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAgB;IACtC,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAgB;IAChD,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,cAAc,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,aAAa,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,cAAc,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAI,GAAG,SAAS;IAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,OAAgB;IAC5D,MAAM,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAClE,CAAC"}
|
|
@@ -4,6 +4,42 @@ export const SEARCH_APP_ID = '32517';
|
|
|
4
4
|
function bool(s) {
|
|
5
5
|
return s === 'true';
|
|
6
6
|
}
|
|
7
|
+
function parseCountText(text) {
|
|
8
|
+
if (typeof text === 'number')
|
|
9
|
+
return Number.isFinite(text) ? text : null;
|
|
10
|
+
if (!text)
|
|
11
|
+
return null;
|
|
12
|
+
const compact = text.replace(/,/g, '').replace(/\s+/g, '');
|
|
13
|
+
const match = compact.match(/(\d+(?:\.\d+)?)(万|w|W|亿|k|K)?/);
|
|
14
|
+
if (!match?.[1])
|
|
15
|
+
return null;
|
|
16
|
+
const value = Number(match[1]);
|
|
17
|
+
if (!Number.isFinite(value))
|
|
18
|
+
return null;
|
|
19
|
+
const unit = match[2] ?? '';
|
|
20
|
+
const multiplier = unit === '亿'
|
|
21
|
+
? 100000000
|
|
22
|
+
: unit === '万' || unit === 'w' || unit === 'W'
|
|
23
|
+
? 10000
|
|
24
|
+
: unit === 'k' || unit === 'K'
|
|
25
|
+
? 1000
|
|
26
|
+
: 1;
|
|
27
|
+
return Math.round(value * multiplier);
|
|
28
|
+
}
|
|
29
|
+
function parsePercentText(text) {
|
|
30
|
+
if (!text)
|
|
31
|
+
return null;
|
|
32
|
+
const match = text.match(/(\d+(?:\.\d+)?)\s*%/);
|
|
33
|
+
if (!match?.[1])
|
|
34
|
+
return null;
|
|
35
|
+
const n = Number(match[1]);
|
|
36
|
+
return Number.isFinite(n) ? n : null;
|
|
37
|
+
}
|
|
38
|
+
function textList(items) {
|
|
39
|
+
return (items ?? [])
|
|
40
|
+
.map((t) => t?.text?.trim() ?? '')
|
|
41
|
+
.filter((s) => !!s);
|
|
42
|
+
}
|
|
7
43
|
export function mapOffer(item) {
|
|
8
44
|
const d = item.data;
|
|
9
45
|
if (!d?.offerId)
|
|
@@ -16,6 +52,13 @@ export function mapOffer(item) {
|
|
|
16
52
|
const tags = (d.tags ?? [])
|
|
17
53
|
.map((t) => t?.text?.trim() ?? '')
|
|
18
54
|
.filter((s) => !!s);
|
|
55
|
+
const serviceTags = textList(d.serviceTags);
|
|
56
|
+
const productBadges = textList(d.productBadges);
|
|
57
|
+
const orderCountText = d.orderCountText ??
|
|
58
|
+
(typeof d.orderCount === 'string' ? d.orderCount : undefined) ??
|
|
59
|
+
d.bookedCount ??
|
|
60
|
+
null;
|
|
61
|
+
const repurchaseRateText = d.repurchaseRateText ?? d.repurchaseRate ?? null;
|
|
19
62
|
return {
|
|
20
63
|
offerId: d.offerId,
|
|
21
64
|
title,
|
|
@@ -40,6 +83,16 @@ export function mapOffer(item) {
|
|
|
40
83
|
superFactory: bool(d.superFactory),
|
|
41
84
|
},
|
|
42
85
|
tags,
|
|
86
|
+
...(serviceTags.length ? { serviceTags } : {}),
|
|
87
|
+
...(productBadges.length ? { productBadges } : {}),
|
|
88
|
+
demand: {
|
|
89
|
+
orderCountText,
|
|
90
|
+
orderCount: typeof d.orderCount === 'number'
|
|
91
|
+
? d.orderCount
|
|
92
|
+
: parseCountText(orderCountText),
|
|
93
|
+
repurchaseRateText,
|
|
94
|
+
repurchaseRate: parsePercentText(repurchaseRateText),
|
|
95
|
+
},
|
|
43
96
|
isP4P: bool(d.isP4P),
|
|
44
97
|
turnover: d.bookedCount ?? null,
|
|
45
98
|
url: `https://detail.1688.com/offer/${d.offerId}.html`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-mtop.js","sourceRoot":"","sources":["../../src/session/search-mtop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,MAAM,CAAC,MAAM,eAAe,GAAG,oDAAoD,CAAC;AACpF,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"search-mtop.js","sourceRoot":"","sources":["../../src/session/search-mtop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,MAAM,CAAC,MAAM,eAAe,GAAG,oDAAoD,CAAC;AACpF,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC;AAiErC,SAAS,IAAI,CAAC,CAAU;IACtB,OAAO,CAAC,KAAK,MAAM,CAAC;AACtB,CAAC;AAED,SAAS,cAAc,CAAC,IAAwC;IAC9D,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACzE,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAC7D,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,UAAU,GACd,IAAI,KAAK,GAAG;QACV,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG;YAC9C,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG;gBAC9B,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,CAAC,CAAC;IACR,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,gBAAgB,CAAC,IAA+B;IACvD,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAChD,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,CAAC;AAED,SAAS,QAAQ,CAAC,KAAsC;IACtD,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;SACjB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;SACjC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAkB;IACzC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;IACpB,IAAI,CAAC,CAAC,EAAE,OAAO;QAAE,OAAO,IAAI,CAAC;IAC7B,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACpE,MAAM,QAAQ,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC;IACpC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrD,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC;IAChC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvD,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;SACxB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;SACjC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IAChD,MAAM,cAAc,GAClB,CAAC,CAAC,cAAc;QAChB,CAAC,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7D,CAAC,CAAC,WAAW;QACb,IAAI,CAAC;IACP,MAAM,kBAAkB,GACtB,CAAC,CAAC,kBAAkB,IAAI,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC;IACnD,OAAO;QACL,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,KAAK;QACL,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE;YACpC,GAAG,EAAE,KAAK;YACV,GAAG,EAAE,KAAK;SACX;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI;YAC1B,OAAO,EAAE,CAAC,CAAC,YAAY,EAAE,WAAW,IAAI,CAAC,CAAC,UAAU,IAAI,IAAI;YAC5D,KAAK;SACN;QACD,QAAQ,EAAE;YACR,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,IAAI;YAC5B,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI;SACrB;QACD,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,IAAI;QAC1B,QAAQ,EAAE;YACR,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC;YAClC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC;YACpC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;SACnC;QACD,IAAI;QACJ,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,MAAM,EAAE;YACN,cAAc;YACd,UAAU,EACR,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ;gBAC9B,CAAC,CAAC,CAAC,CAAC,UAAU;gBACd,CAAC,CAAC,cAAc,CAAC,cAAc,CAAC;YACpC,kBAAkB;YAClB,cAAc,EAAE,gBAAgB,CAAC,kBAAkB,CAAC;SACrD;QACD,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QACpB,QAAQ,EAAE,CAAC,CAAC,WAAW,IAAI,IAAI;QAC/B,GAAG,EAAE,iCAAiC,CAAC,CAAC,OAAO,OAAO;QACtD,KAAK,EAAE,CAAC,CAAC,WAAW,IAAI,IAAI;KAC7B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,GAAW;IACnD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC7E,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAGnC,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAG/C,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACxF,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;QAC5B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,SAAS;KACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,IAAY;IACtD,MAAM,IAAI,GAAG,cAAc,CAExB,IAAI,CAAC,CAAC;IACT,MAAM,KAAK,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC;IACnD,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAc,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;AACnE,CAAC"}
|
package/dist/session/shared.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import fs from 'node:fs/promises';
|
|
5
5
|
import { chromium } from 'playwright-extra';
|
|
6
6
|
import stealth from 'puppeteer-extra-plugin-stealth';
|
|
7
|
-
import { profilePath } from './paths.js';
|
|
7
|
+
import { defaultProfileName, profilePath } from './paths.js';
|
|
8
8
|
import { acquireLock } from './lock.js';
|
|
9
9
|
import { CliError } from '../io/errors.js';
|
|
10
10
|
import { clearStaleSingleton } from './context.js';
|
|
@@ -22,14 +22,21 @@ const LAUNCH_OPTS = {
|
|
|
22
22
|
let sharedCtx = null;
|
|
23
23
|
let lockRelease = null;
|
|
24
24
|
let opChain = Promise.resolve();
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
let sharedProfile = null;
|
|
26
|
+
export async function getSharedContext(profile) {
|
|
27
|
+
const profileName = defaultProfileName(profile);
|
|
28
|
+
if (sharedCtx) {
|
|
29
|
+
if (sharedProfile !== profileName) {
|
|
30
|
+
throw new CliError(5, 'DAEMON_PROFILE_MISMATCH', `Daemon shared context is bound to profile "${sharedProfile}", not "${profileName}".`);
|
|
31
|
+
}
|
|
27
32
|
return sharedCtx;
|
|
28
|
-
|
|
29
|
-
|
|
33
|
+
}
|
|
34
|
+
lockRelease = await acquireLock(profileName);
|
|
35
|
+
const dir = profilePath(profileName);
|
|
30
36
|
await fs.mkdir(dir, { recursive: true });
|
|
31
37
|
await clearStaleSingleton(dir);
|
|
32
38
|
sharedCtx = await launchPreferringChrome(dir, true);
|
|
39
|
+
sharedProfile = profileName;
|
|
33
40
|
await sharedCtx.addInitScript(() => {
|
|
34
41
|
try {
|
|
35
42
|
Object.defineProperty(navigator, 'languages', {
|
|
@@ -42,7 +49,7 @@ export async function getSharedContext() {
|
|
|
42
49
|
});
|
|
43
50
|
return sharedCtx;
|
|
44
51
|
}
|
|
45
|
-
export async function runOnSharedCtx(fn, meta) {
|
|
52
|
+
export async function runOnSharedCtx(fn, meta, profile) {
|
|
46
53
|
// Append to serial queue. Each op waits for the previous one to finish.
|
|
47
54
|
const prev = opChain;
|
|
48
55
|
let resolveOp;
|
|
@@ -53,7 +60,7 @@ export async function runOnSharedCtx(fn, meta) {
|
|
|
53
60
|
});
|
|
54
61
|
opChain = prev.then(async () => {
|
|
55
62
|
try {
|
|
56
|
-
const ctx = await getSharedContext();
|
|
63
|
+
const ctx = await getSharedContext(profile);
|
|
57
64
|
resolveOp(await fn(ctx));
|
|
58
65
|
}
|
|
59
66
|
catch (e) {
|
|
@@ -71,6 +78,7 @@ export async function runOnSharedCtx(fn, meta) {
|
|
|
71
78
|
export async function getSharedContextStatus() {
|
|
72
79
|
if (!sharedCtx) {
|
|
73
80
|
return {
|
|
81
|
+
profile: sharedProfile,
|
|
74
82
|
browserAlive: false,
|
|
75
83
|
pageCount: 0,
|
|
76
84
|
currentUrl: null,
|
|
@@ -82,6 +90,7 @@ export async function getSharedContextStatus() {
|
|
|
82
90
|
const page = pages.at(-1) ?? null;
|
|
83
91
|
const pageState = page ? await detectPageState(page).catch(() => null) : null;
|
|
84
92
|
return {
|
|
93
|
+
profile: sharedProfile,
|
|
85
94
|
browserAlive: true,
|
|
86
95
|
pageCount: pages.length,
|
|
87
96
|
currentUrl: page?.url() ?? null,
|
|
@@ -100,6 +109,7 @@ export async function releaseSharedContext() {
|
|
|
100
109
|
await sharedCtx.close().catch(() => { });
|
|
101
110
|
sharedCtx = null;
|
|
102
111
|
}
|
|
112
|
+
sharedProfile = null;
|
|
103
113
|
if (lockRelease) {
|
|
104
114
|
await lockRelease().catch(() => { });
|
|
105
115
|
lockRelease = null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/session/shared.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,0EAA0E;AAC1E,mCAAmC;AAEnC,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,OAAO,MAAM,gCAAgC,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/session/shared.ts"],"names":[],"mappings":"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"}
|
package/dist/session/state.js
CHANGED
|
@@ -2,9 +2,9 @@ import fs from 'node:fs/promises';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { stateFile, ensureRoot } from './paths.js';
|
|
4
4
|
const EMPTY = { version: 1 };
|
|
5
|
-
export async function readState() {
|
|
5
|
+
export async function readState(profile) {
|
|
6
6
|
try {
|
|
7
|
-
const buf = await fs.readFile(stateFile(), 'utf8');
|
|
7
|
+
const buf = await fs.readFile(stateFile(profile), 'utf8');
|
|
8
8
|
const parsed = JSON.parse(buf);
|
|
9
9
|
if (parsed?.version !== 1)
|
|
10
10
|
return { ...EMPTY };
|
|
@@ -16,12 +16,12 @@ export async function readState() {
|
|
|
16
16
|
throw e;
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
|
-
export async function writeState(s) {
|
|
19
|
+
export async function writeState(s, profile) {
|
|
20
20
|
await ensureRoot();
|
|
21
|
-
await fs.mkdir(path.dirname(stateFile()), { recursive: true });
|
|
22
|
-
await fs.writeFile(stateFile(), JSON.stringify(s, null, 2));
|
|
21
|
+
await fs.mkdir(path.dirname(stateFile(profile)), { recursive: true });
|
|
22
|
+
await fs.writeFile(stateFile(profile), JSON.stringify(s, null, 2));
|
|
23
23
|
}
|
|
24
|
-
export async function clearState() {
|
|
25
|
-
await writeState({ ...EMPTY });
|
|
24
|
+
export async function clearState(profile) {
|
|
25
|
+
await writeState({ ...EMPTY }, profile);
|
|
26
26
|
}
|
|
27
27
|
//# sourceMappingURL=state.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/session/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAUnD,MAAM,KAAK,GAAU,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AAEpC,MAAM,CAAC,KAAK,UAAU,SAAS;
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/session/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAUnD,MAAM,KAAK,GAAU,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AAEpC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAgB;IAC9C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;QACjD,IAAI,MAAM,EAAE,OAAO,KAAK,CAAC;YAAE,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC;QAC/C,OAAO,EAAE,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE,CAAC;IACjC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAK,CAA2B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC;QACxE,MAAM,CAAC,CAAC;IACV,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,CAAQ,EAAE,OAAgB;IACzD,MAAM,UAAU,EAAE,CAAC;IACnB,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtE,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAgB;IAC/C,MAAM,UAAU,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC"}
|