@lofder/dsers-mcp-product 1.0.2 → 1.3.8
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/README.md +394 -103
- package/dist/auth/browser-finder.d.ts +6 -0
- package/dist/auth/browser-finder.d.ts.map +1 -0
- package/dist/auth/browser-finder.js +104 -0
- package/dist/auth/browser-finder.js.map +1 -0
- package/dist/auth/cdp-session.d.ts +6 -0
- package/dist/auth/cdp-session.d.ts.map +1 -0
- package/dist/auth/cdp-session.js +369 -0
- package/dist/auth/cdp-session.js.map +1 -0
- package/dist/auth/index.d.ts +6 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +6 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/safari-fallback.d.ts +7 -0
- package/dist/auth/safari-fallback.d.ts.map +1 -0
- package/dist/auth/safari-fallback.js +73 -0
- package/dist/auth/safari-fallback.js.map +1 -0
- package/dist/auth/terminal-prompt.d.ts +6 -0
- package/dist/auth/terminal-prompt.d.ts.map +1 -0
- package/dist/auth/terminal-prompt.js +118 -0
- package/dist/auth/terminal-prompt.js.map +1 -0
- package/dist/auth/token-store.d.ts +11 -0
- package/dist/auth/token-store.d.ts.map +1 -0
- package/dist/auth/token-store.js +99 -0
- package/dist/auth/token-store.js.map +1 -0
- package/dist/cli.js +190 -27
- package/dist/cli.js.map +1 -1
- package/dist/dsers/account.d.ts.map +1 -1
- package/dist/dsers/account.js.map +1 -1
- package/dist/dsers/auth.d.ts.map +1 -1
- package/dist/dsers/auth.js +31 -9
- package/dist/dsers/auth.js.map +1 -1
- package/dist/dsers/client.d.ts +2 -0
- package/dist/dsers/client.d.ts.map +1 -1
- package/dist/dsers/client.js +18 -8
- package/dist/dsers/client.js.map +1 -1
- package/dist/dsers/config.d.ts +19 -0
- package/dist/dsers/config.d.ts.map +1 -1
- package/dist/dsers/config.js +19 -3
- package/dist/dsers/config.js.map +1 -1
- package/dist/dsers/product.d.ts.map +1 -1
- package/dist/dsers/product.js +7 -11
- package/dist/dsers/product.js.map +1 -1
- package/dist/dsers/settings.d.ts +1 -0
- package/dist/dsers/settings.d.ts.map +1 -1
- package/dist/dsers/settings.js +5 -0
- package/dist/dsers/settings.js.map +1 -1
- package/dist/error-map.d.ts.map +1 -1
- package/dist/error-map.js +174 -59
- package/dist/error-map.js.map +1 -1
- package/dist/index.d.ts +9 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +34 -21
- package/dist/index.js.map +1 -1
- package/dist/instructions.d.ts +2 -0
- package/dist/instructions.d.ts.map +1 -0
- package/dist/instructions.js +62 -0
- package/dist/instructions.js.map +1 -0
- package/dist/job-store-memory.js +1 -1
- package/dist/job-store-memory.js.map +1 -1
- package/dist/job-store.d.ts.map +1 -1
- package/dist/job-store.js.map +1 -1
- package/dist/oauth/crypto.d.ts +4 -4
- package/dist/oauth/crypto.d.ts.map +1 -1
- package/dist/oauth/crypto.js +10 -10
- package/dist/oauth/crypto.js.map +1 -1
- package/dist/provider/helpers.d.ts +28 -0
- package/dist/provider/helpers.d.ts.map +1 -0
- package/dist/provider/helpers.js +265 -0
- package/dist/provider/helpers.js.map +1 -0
- package/dist/provider/import-ops.d.ts +23 -0
- package/dist/provider/import-ops.d.ts.map +1 -0
- package/dist/provider/import-ops.js +350 -0
- package/dist/provider/import-ops.js.map +1 -0
- package/dist/provider/index.d.ts +38 -0
- package/dist/provider/index.d.ts.map +1 -0
- package/dist/provider/index.js +172 -0
- package/dist/provider/index.js.map +1 -0
- package/dist/provider/normalize.d.ts +7 -0
- package/dist/provider/normalize.d.ts.map +1 -0
- package/dist/provider/normalize.js +239 -0
- package/dist/provider/normalize.js.map +1 -0
- package/dist/provider/push.d.ts +15 -0
- package/dist/provider/push.d.ts.map +1 -0
- package/dist/provider/push.js +420 -0
- package/dist/provider/push.js.map +1 -0
- package/dist/provider/store.d.ts +7 -0
- package/dist/provider/store.d.ts.map +1 -0
- package/dist/provider/store.js +152 -0
- package/dist/provider/store.js.map +1 -0
- package/dist/provider.d.ts +22 -2
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +451 -326
- package/dist/provider.js.map +1 -1
- package/dist/push-guard.d.ts +12 -0
- package/dist/push-guard.d.ts.map +1 -0
- package/dist/push-guard.js +105 -0
- package/dist/push-guard.js.map +1 -0
- package/dist/push-options.js.map +1 -1
- package/dist/resolver.d.ts.map +1 -1
- package/dist/resolver.js +104 -37
- package/dist/resolver.js.map +1 -1
- package/dist/rules.d.ts.map +1 -1
- package/dist/rules.js +455 -25
- package/dist/rules.js.map +1 -1
- package/dist/service/browse-shared.d.ts +6 -0
- package/dist/service/browse-shared.d.ts.map +1 -0
- package/dist/service/browse-shared.js +26 -0
- package/dist/service/browse-shared.js.map +1 -0
- package/dist/service/browse.d.ts +20 -0
- package/dist/service/browse.d.ts.map +1 -0
- package/dist/service/browse.js +159 -0
- package/dist/service/browse.js.map +1 -0
- package/dist/service/find-product.d.ts +12 -0
- package/dist/service/find-product.d.ts.map +1 -0
- package/dist/service/find-product.js +51 -0
- package/dist/service/find-product.js.map +1 -0
- package/dist/service/helpers.d.ts +20 -0
- package/dist/service/helpers.d.ts.map +1 -0
- package/dist/service/helpers.js +163 -0
- package/dist/service/helpers.js.map +1 -0
- package/dist/service/import-flow.d.ts +6 -0
- package/dist/service/import-flow.d.ts.map +1 -0
- package/dist/service/import-flow.js +141 -0
- package/dist/service/import-flow.js.map +1 -0
- package/dist/service/import-list.d.ts +6 -0
- package/dist/service/import-list.d.ts.map +1 -0
- package/dist/service/import-list.js +103 -0
- package/dist/service/import-list.js.map +1 -0
- package/dist/service/index.d.ts +37 -0
- package/dist/service/index.d.ts.map +1 -0
- package/dist/service/index.js +132 -0
- package/dist/service/index.js.map +1 -0
- package/dist/service/my-products.d.ts +7 -0
- package/dist/service/my-products.d.ts.map +1 -0
- package/dist/service/my-products.js +51 -0
- package/dist/service/my-products.js.map +1 -0
- package/dist/service/preview.d.ts +7 -0
- package/dist/service/preview.d.ts.map +1 -0
- package/dist/service/preview.js +235 -0
- package/dist/service/preview.js.map +1 -0
- package/dist/service/push-flow.d.ts +12 -0
- package/dist/service/push-flow.d.ts.map +1 -0
- package/dist/service/push-flow.js +251 -0
- package/dist/service/push-flow.js.map +1 -0
- package/dist/service/status.d.ts +6 -0
- package/dist/service/status.d.ts.map +1 -0
- package/dist/service/status.js +90 -0
- package/dist/service/status.js.map +1 -0
- package/dist/service.d.ts +5 -1
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +580 -143
- package/dist/service.js.map +1 -1
- package/dist/tools.d.ts +2 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +410 -122
- package/dist/tools.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/dsers-api.d.ts +133 -0
- package/dist/types/dsers-api.d.ts.map +1 -0
- package/dist/types/dsers-api.js +2 -0
- package/dist/types/dsers-api.js.map +1 -0
- package/package.json +23 -14
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { execSync } from "node:child_process";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
const MACOS_BROWSERS = [
|
|
5
|
+
["Google Chrome", "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"],
|
|
6
|
+
["Microsoft Edge", "/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge"],
|
|
7
|
+
["Brave Browser", "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser"],
|
|
8
|
+
["Arc", "/Applications/Arc.app/Contents/MacOS/Arc"],
|
|
9
|
+
["Chromium", "/Applications/Chromium.app/Contents/MacOS/Chromium"],
|
|
10
|
+
["Opera", "/Applications/Opera.app/Contents/MacOS/Opera"],
|
|
11
|
+
["Vivaldi", "/Applications/Vivaldi.app/Contents/MacOS/Vivaldi"],
|
|
12
|
+
];
|
|
13
|
+
const LINUX_COMMANDS = [
|
|
14
|
+
["Google Chrome", "google-chrome-stable"],
|
|
15
|
+
["Google Chrome", "google-chrome"],
|
|
16
|
+
["Chromium", "chromium-browser"],
|
|
17
|
+
["Chromium", "chromium"],
|
|
18
|
+
["Microsoft Edge", "microsoft-edge-stable"],
|
|
19
|
+
["Microsoft Edge", "microsoft-edge"],
|
|
20
|
+
["Brave Browser", "brave-browser"],
|
|
21
|
+
["Brave Browser", "brave-browser-stable"],
|
|
22
|
+
["Opera", "opera"],
|
|
23
|
+
["Vivaldi", "vivaldi-stable"],
|
|
24
|
+
["Vivaldi", "vivaldi"],
|
|
25
|
+
];
|
|
26
|
+
const WIN_PATHS = [
|
|
27
|
+
["Google Chrome", "Google\\Chrome\\Application\\chrome.exe"],
|
|
28
|
+
["Microsoft Edge", "Microsoft\\Edge\\Application\\msedge.exe"],
|
|
29
|
+
["Brave Browser", "BraveSoftware\\Brave-Browser\\Application\\brave.exe"],
|
|
30
|
+
["Opera", "Opera\\opera.exe"],
|
|
31
|
+
["Vivaldi", "Vivaldi\\Application\\vivaldi.exe"],
|
|
32
|
+
["Chromium", "Chromium\\Application\\chrome.exe"],
|
|
33
|
+
];
|
|
34
|
+
function whichSync(cmd) {
|
|
35
|
+
if (!/^[a-z0-9._-]+$/i.test(cmd))
|
|
36
|
+
return null;
|
|
37
|
+
try {
|
|
38
|
+
return execSync(`which ${cmd} 2>/dev/null`, { encoding: "utf-8", timeout: 3000 }).trim() || null;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function findOnMacOS() {
|
|
45
|
+
for (const [name, p] of MACOS_BROWSERS) {
|
|
46
|
+
if (existsSync(p))
|
|
47
|
+
return { name, path: p };
|
|
48
|
+
}
|
|
49
|
+
// mdfind fallback for non-standard install locations
|
|
50
|
+
try {
|
|
51
|
+
const result = execSync('mdfind "kMDItemCFBundleIdentifier == com.google.Chrome" 2>/dev/null', {
|
|
52
|
+
encoding: "utf-8",
|
|
53
|
+
timeout: 3000,
|
|
54
|
+
}).trim();
|
|
55
|
+
if (result) {
|
|
56
|
+
const appPath = result.split("\n")[0];
|
|
57
|
+
const execPath = join(appPath, "Contents/MacOS/Google Chrome");
|
|
58
|
+
if (existsSync(execPath))
|
|
59
|
+
return { name: "Google Chrome", path: execPath };
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
/* mdfind unavailable or timed out */
|
|
64
|
+
}
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
function findOnLinux() {
|
|
68
|
+
for (const [name, cmd] of LINUX_COMMANDS) {
|
|
69
|
+
const p = whichSync(cmd);
|
|
70
|
+
if (p)
|
|
71
|
+
return { name, path: p };
|
|
72
|
+
}
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
function findOnWindows() {
|
|
76
|
+
const roots = [
|
|
77
|
+
process.env.PROGRAMFILES ?? "C:\\Program Files",
|
|
78
|
+
process.env["PROGRAMFILES(X86)"] ?? "C:\\Program Files (x86)",
|
|
79
|
+
process.env.LOCALAPPDATA ?? "",
|
|
80
|
+
].filter(Boolean);
|
|
81
|
+
for (const [name, rel] of WIN_PATHS) {
|
|
82
|
+
for (const root of roots) {
|
|
83
|
+
const full = join(root, rel);
|
|
84
|
+
if (existsSync(full))
|
|
85
|
+
return { name, path: full };
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Edge is pre-installed on Windows 10+ in a special location
|
|
89
|
+
const edgeSys = "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe";
|
|
90
|
+
if (existsSync(edgeSys))
|
|
91
|
+
return { name: "Microsoft Edge", path: edgeSys };
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
export function findChromiumBrowser() {
|
|
95
|
+
const platform = process.platform;
|
|
96
|
+
if (platform === "darwin")
|
|
97
|
+
return findOnMacOS();
|
|
98
|
+
if (platform === "linux")
|
|
99
|
+
return findOnLinux();
|
|
100
|
+
if (platform === "win32")
|
|
101
|
+
return findOnWindows();
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=browser-finder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-finder.js","sourceRoot":"","sources":["../../src/auth/browser-finder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cdp-session.d.ts","sourceRoot":"","sources":["../../src/auth/cdp-session.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAyQD,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,GAAG,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAe,GACpC,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAqGhC"}
|
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { request as httpReq } from "node:http";
|
|
3
|
+
import { randomBytes } from "node:crypto";
|
|
4
|
+
import { mkdtempSync, rmSync } from "node:fs";
|
|
5
|
+
import { tmpdir } from "node:os";
|
|
6
|
+
import { join } from "node:path";
|
|
7
|
+
const DSERS_LOGIN_URL = "https://accounts.dsers.com/accounts/login";
|
|
8
|
+
const COOKIE_CHECK_URLS = ["https://accounts.dsers.com", "https://app.dsers.com", "https://www.dsers.com"];
|
|
9
|
+
const POLL_MS = 2_000;
|
|
10
|
+
const PORT_TIMEOUT_MS = 30_000;
|
|
11
|
+
const TARGET_RETRY_MS = 500;
|
|
12
|
+
const TARGET_MAX_RETRIES = 30;
|
|
13
|
+
/* ------------------------------------------------------------------ */
|
|
14
|
+
/* Minimal WebSocket client — text frames only, for CDP on Node 18+ */
|
|
15
|
+
/* ------------------------------------------------------------------ */
|
|
16
|
+
class CDPClient {
|
|
17
|
+
sock;
|
|
18
|
+
nextId = 1;
|
|
19
|
+
pending = new Map();
|
|
20
|
+
buf = Buffer.alloc(0);
|
|
21
|
+
_closed = false;
|
|
22
|
+
constructor(sock) {
|
|
23
|
+
this.sock = sock;
|
|
24
|
+
sock.on("data", (c) => this.onData(c));
|
|
25
|
+
sock.on("close", () => this.shutdown());
|
|
26
|
+
sock.on("error", () => this.shutdown());
|
|
27
|
+
}
|
|
28
|
+
get closed() {
|
|
29
|
+
return this._closed;
|
|
30
|
+
}
|
|
31
|
+
send(method, params) {
|
|
32
|
+
if (this._closed)
|
|
33
|
+
return Promise.reject(new Error("CDP closed"));
|
|
34
|
+
const id = this.nextId++;
|
|
35
|
+
return new Promise((res, rej) => {
|
|
36
|
+
this.pending.set(id, { res, rej });
|
|
37
|
+
this.writeText(JSON.stringify({ id, method, params }));
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
close() {
|
|
41
|
+
if (this._closed)
|
|
42
|
+
return;
|
|
43
|
+
const mask = randomBytes(4);
|
|
44
|
+
const f = Buffer.alloc(6);
|
|
45
|
+
f[0] = 0x88;
|
|
46
|
+
f[1] = 0x80;
|
|
47
|
+
mask.copy(f, 2);
|
|
48
|
+
try {
|
|
49
|
+
this.sock.write(f);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
/* ignore */
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
this.sock.end();
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
/* ignore */
|
|
59
|
+
}
|
|
60
|
+
this._closed = true;
|
|
61
|
+
}
|
|
62
|
+
/* ---- framing ---- */
|
|
63
|
+
writeText(text) {
|
|
64
|
+
const payload = Buffer.from(text, "utf-8");
|
|
65
|
+
const mask = randomBytes(4);
|
|
66
|
+
const masked = Buffer.alloc(payload.length);
|
|
67
|
+
for (let i = 0; i < payload.length; i++)
|
|
68
|
+
masked[i] = payload[i] ^ mask[i & 3];
|
|
69
|
+
let hdr;
|
|
70
|
+
if (payload.length < 126) {
|
|
71
|
+
hdr = Buffer.alloc(6);
|
|
72
|
+
hdr[0] = 0x81;
|
|
73
|
+
hdr[1] = 0x80 | payload.length;
|
|
74
|
+
mask.copy(hdr, 2);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
hdr = Buffer.alloc(8);
|
|
78
|
+
hdr[0] = 0x81;
|
|
79
|
+
hdr[1] = 0xfe;
|
|
80
|
+
hdr.writeUInt16BE(payload.length, 2);
|
|
81
|
+
mask.copy(hdr, 4);
|
|
82
|
+
}
|
|
83
|
+
this.sock.write(Buffer.concat([hdr, masked]));
|
|
84
|
+
}
|
|
85
|
+
onData(chunk) {
|
|
86
|
+
this.buf = Buffer.concat([this.buf, chunk]);
|
|
87
|
+
while (this.parseFrame()) {
|
|
88
|
+
/* keep consuming */
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
parseFrame() {
|
|
92
|
+
if (this.buf.length < 2)
|
|
93
|
+
return false;
|
|
94
|
+
let payloadLen = this.buf[1] & 0x7f;
|
|
95
|
+
let off = 2;
|
|
96
|
+
if (payloadLen === 126) {
|
|
97
|
+
if (this.buf.length < 4)
|
|
98
|
+
return false;
|
|
99
|
+
payloadLen = this.buf.readUInt16BE(2);
|
|
100
|
+
off = 4;
|
|
101
|
+
}
|
|
102
|
+
else if (payloadLen === 127) {
|
|
103
|
+
if (this.buf.length < 10)
|
|
104
|
+
return false;
|
|
105
|
+
payloadLen = Number(this.buf.readBigUInt64BE(2));
|
|
106
|
+
off = 10;
|
|
107
|
+
}
|
|
108
|
+
if (this.buf.length < off + payloadLen)
|
|
109
|
+
return false;
|
|
110
|
+
const opcode = this.buf[0] & 0x0f;
|
|
111
|
+
const data = this.buf.subarray(off, off + payloadLen);
|
|
112
|
+
this.buf = this.buf.subarray(off + payloadLen);
|
|
113
|
+
if (opcode === 0x01) {
|
|
114
|
+
try {
|
|
115
|
+
const msg = JSON.parse(data.toString("utf-8"));
|
|
116
|
+
if (typeof msg.id === "number") {
|
|
117
|
+
const p = this.pending.get(msg.id);
|
|
118
|
+
if (p) {
|
|
119
|
+
this.pending.delete(msg.id);
|
|
120
|
+
msg.error ? p.rej(new Error(msg.error.message)) : p.res(msg.result);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
/* malformed */
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
else if (opcode === 0x08) {
|
|
129
|
+
this.shutdown();
|
|
130
|
+
}
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
shutdown() {
|
|
134
|
+
this._closed = true;
|
|
135
|
+
for (const [, p] of this.pending)
|
|
136
|
+
p.rej(new Error("CDP connection closed"));
|
|
137
|
+
this.pending.clear();
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/* ------------------------------------------------------------------ */
|
|
141
|
+
/* Helpers */
|
|
142
|
+
/* ------------------------------------------------------------------ */
|
|
143
|
+
function httpGetJson(port, path) {
|
|
144
|
+
return new Promise((resolve, reject) => {
|
|
145
|
+
const r = httpReq({ hostname: "127.0.0.1", port, path, method: "GET" }, (res) => {
|
|
146
|
+
let d = "";
|
|
147
|
+
res.on("data", (c) => {
|
|
148
|
+
d += c;
|
|
149
|
+
});
|
|
150
|
+
res.on("end", () => {
|
|
151
|
+
try {
|
|
152
|
+
resolve(JSON.parse(d));
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
reject(new Error("bad json"));
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
r.on("error", reject);
|
|
160
|
+
r.setTimeout(5000, () => {
|
|
161
|
+
r.destroy();
|
|
162
|
+
reject(new Error("http timeout"));
|
|
163
|
+
});
|
|
164
|
+
r.end();
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
function wsConnect(url) {
|
|
168
|
+
return new Promise((resolve, reject) => {
|
|
169
|
+
const u = new URL(url.replace(/^ws:/, "http:"));
|
|
170
|
+
const key = randomBytes(16).toString("base64");
|
|
171
|
+
const r = httpReq({
|
|
172
|
+
hostname: u.hostname,
|
|
173
|
+
port: u.port,
|
|
174
|
+
path: u.pathname + u.search,
|
|
175
|
+
method: "GET",
|
|
176
|
+
headers: { Upgrade: "websocket", Connection: "Upgrade", "Sec-WebSocket-Key": key, "Sec-WebSocket-Version": "13" },
|
|
177
|
+
});
|
|
178
|
+
r.on("upgrade", (_res, socket) => resolve(new CDPClient(socket)));
|
|
179
|
+
r.on("error", reject);
|
|
180
|
+
r.setTimeout(5000, () => {
|
|
181
|
+
r.destroy();
|
|
182
|
+
reject(new Error("ws timeout"));
|
|
183
|
+
});
|
|
184
|
+
r.end();
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
function waitForPort(proc) {
|
|
188
|
+
return new Promise((resolve, reject) => {
|
|
189
|
+
const timer = setTimeout(() => reject(new Error("Browser did not expose debug port within 30 s")), PORT_TIMEOUT_MS);
|
|
190
|
+
let settled = false;
|
|
191
|
+
const fail = (msg) => {
|
|
192
|
+
if (settled)
|
|
193
|
+
return;
|
|
194
|
+
settled = true;
|
|
195
|
+
clearTimeout(timer);
|
|
196
|
+
reject(new Error(msg));
|
|
197
|
+
};
|
|
198
|
+
let acc = "";
|
|
199
|
+
proc.stderr?.on("data", (c) => {
|
|
200
|
+
acc += c.toString();
|
|
201
|
+
const m = acc.match(/DevTools listening on ws:\/\/[\d.]+:(\d+)\//);
|
|
202
|
+
if (m && !settled) {
|
|
203
|
+
settled = true;
|
|
204
|
+
clearTimeout(timer);
|
|
205
|
+
resolve(Number(m[1]));
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
proc.on("exit", (code) => fail(`Browser exited (code ${code}) before debug ready`));
|
|
209
|
+
proc.on("error", (err) => fail(`Browser launch failed: ${err.message}`));
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
async function findPageWs(port) {
|
|
213
|
+
for (let i = 0; i < TARGET_MAX_RETRIES; i++) {
|
|
214
|
+
try {
|
|
215
|
+
const list = await httpGetJson(port, "/json/list");
|
|
216
|
+
const pg = list.find((t) => t.type === "page" && !t.url.startsWith("chrome"));
|
|
217
|
+
if (pg?.webSocketDebuggerUrl)
|
|
218
|
+
return pg.webSocketDebuggerUrl;
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
/* retry */
|
|
222
|
+
}
|
|
223
|
+
await new Promise((r) => setTimeout(r, TARGET_RETRY_MS));
|
|
224
|
+
}
|
|
225
|
+
throw new Error("No page target found in browser");
|
|
226
|
+
}
|
|
227
|
+
/* ------------------------------------------------------------------ */
|
|
228
|
+
/* Session extraction — tries cookies, document.cookie, localStorage */
|
|
229
|
+
/* ------------------------------------------------------------------ */
|
|
230
|
+
async function extractSession(cdp) {
|
|
231
|
+
// 1) CDP Network.getCookies (includes HttpOnly)
|
|
232
|
+
try {
|
|
233
|
+
const { cookies = [] } = await cdp.send("Network.getCookies", { urls: COOKIE_CHECK_URLS });
|
|
234
|
+
const sid = cookies.find((c) => c.name === "session_id" && c.value);
|
|
235
|
+
if (sid) {
|
|
236
|
+
const st = cookies.find((c) => c.name === "state");
|
|
237
|
+
return { session_id: sid.value, state: st?.value ?? "" };
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
catch {
|
|
241
|
+
/* domain not enabled or page navigating */
|
|
242
|
+
}
|
|
243
|
+
// 2) JS document.cookie (non-HttpOnly)
|
|
244
|
+
try {
|
|
245
|
+
const { result } = await cdp.send("Runtime.evaluate", { expression: "document.cookie" });
|
|
246
|
+
const s = (result?.value ?? "");
|
|
247
|
+
const sm = s.match(/session_id=([^;]+)/);
|
|
248
|
+
if (sm?.[1]) {
|
|
249
|
+
const tm = s.match(/state=([^;]+)/);
|
|
250
|
+
return { session_id: sm[1].trim(), state: tm?.[1]?.trim() ?? "" };
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
catch {
|
|
254
|
+
/* context destroyed during navigation */
|
|
255
|
+
}
|
|
256
|
+
// 3) localStorage / sessionStorage
|
|
257
|
+
try {
|
|
258
|
+
const expr = 'JSON.stringify({s:localStorage.getItem("session_id")||localStorage.getItem("sessionId")||sessionStorage.getItem("session_id")||"",t:localStorage.getItem("state")||sessionStorage.getItem("state")||""})';
|
|
259
|
+
const { result } = await cdp.send("Runtime.evaluate", { expression: expr });
|
|
260
|
+
const d = JSON.parse(result?.value ?? "{}");
|
|
261
|
+
if (d.s)
|
|
262
|
+
return { session_id: d.s, state: d.t ?? "" };
|
|
263
|
+
}
|
|
264
|
+
catch {
|
|
265
|
+
/* not available */
|
|
266
|
+
}
|
|
267
|
+
return null;
|
|
268
|
+
}
|
|
269
|
+
/* ------------------------------------------------------------------ */
|
|
270
|
+
/* Public API */
|
|
271
|
+
/* ------------------------------------------------------------------ */
|
|
272
|
+
export async function loginViaCDP(browserPath, log = () => { }) {
|
|
273
|
+
const tempDir = mkdtempSync(join(tmpdir(), "dsers-mcp-"));
|
|
274
|
+
let proc = null;
|
|
275
|
+
let cdp = null;
|
|
276
|
+
let done = false;
|
|
277
|
+
const cleanup = () => {
|
|
278
|
+
if (done)
|
|
279
|
+
return;
|
|
280
|
+
done = true;
|
|
281
|
+
try {
|
|
282
|
+
cdp?.close();
|
|
283
|
+
}
|
|
284
|
+
catch {
|
|
285
|
+
/* ignore */
|
|
286
|
+
}
|
|
287
|
+
if (proc && !proc.killed) {
|
|
288
|
+
try {
|
|
289
|
+
proc.kill();
|
|
290
|
+
}
|
|
291
|
+
catch {
|
|
292
|
+
/* ignore */
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
setTimeout(() => {
|
|
296
|
+
try {
|
|
297
|
+
rmSync(tempDir, { recursive: true, force: true });
|
|
298
|
+
}
|
|
299
|
+
catch {
|
|
300
|
+
/* ignore */
|
|
301
|
+
}
|
|
302
|
+
}, 500);
|
|
303
|
+
};
|
|
304
|
+
const onSig = () => {
|
|
305
|
+
cleanup();
|
|
306
|
+
process.exit(130);
|
|
307
|
+
};
|
|
308
|
+
process.on("SIGINT", onSig);
|
|
309
|
+
process.on("SIGTERM", onSig);
|
|
310
|
+
try {
|
|
311
|
+
const label = browserPath.split("/").pop() ?? "browser";
|
|
312
|
+
log(`Opening DSers login page in ${label}...`);
|
|
313
|
+
proc = spawn(browserPath, [
|
|
314
|
+
"--remote-debugging-port=0",
|
|
315
|
+
`--user-data-dir=${tempDir}`,
|
|
316
|
+
"--no-first-run",
|
|
317
|
+
"--no-default-browser-check",
|
|
318
|
+
"--disable-sync",
|
|
319
|
+
"--disable-extensions",
|
|
320
|
+
"--mute-audio",
|
|
321
|
+
DSERS_LOGIN_URL,
|
|
322
|
+
], { stdio: ["ignore", "pipe", "pipe"], detached: false });
|
|
323
|
+
proc.on("error", () => {
|
|
324
|
+
/* handled by waitForPort exit handler */
|
|
325
|
+
});
|
|
326
|
+
const port = await waitForPort(proc);
|
|
327
|
+
const wsUrl = await findPageWs(port);
|
|
328
|
+
cdp = await wsConnect(wsUrl);
|
|
329
|
+
try {
|
|
330
|
+
await cdp.send("Network.enable");
|
|
331
|
+
}
|
|
332
|
+
catch {
|
|
333
|
+
/* optional */
|
|
334
|
+
}
|
|
335
|
+
log("Waiting for DSers login... (close browser or Ctrl+C to cancel)");
|
|
336
|
+
const result = await new Promise((resolve) => {
|
|
337
|
+
let exited = false;
|
|
338
|
+
proc.on("exit", () => {
|
|
339
|
+
exited = true;
|
|
340
|
+
resolve(null);
|
|
341
|
+
});
|
|
342
|
+
const tick = async () => {
|
|
343
|
+
if (exited || cdp.closed)
|
|
344
|
+
return resolve(null);
|
|
345
|
+
try {
|
|
346
|
+
const session = await extractSession(cdp);
|
|
347
|
+
if (session)
|
|
348
|
+
return resolve(session);
|
|
349
|
+
}
|
|
350
|
+
catch {
|
|
351
|
+
/* polling error, retry */
|
|
352
|
+
}
|
|
353
|
+
setTimeout(tick, POLL_MS);
|
|
354
|
+
};
|
|
355
|
+
tick();
|
|
356
|
+
});
|
|
357
|
+
if (result)
|
|
358
|
+
log("Login detected!");
|
|
359
|
+
else
|
|
360
|
+
log("Browser closed without completing login.");
|
|
361
|
+
return result;
|
|
362
|
+
}
|
|
363
|
+
finally {
|
|
364
|
+
cleanup();
|
|
365
|
+
process.removeListener("SIGINT", onSig);
|
|
366
|
+
process.removeListener("SIGTERM", onSig);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
//# sourceMappingURL=cdp-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cdp-session.js","sourceRoot":"","sources":["../../src/auth/cdp-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { findChromiumBrowser, type BrowserMatch } from "./browser-finder.js";
|
|
2
|
+
export { loginViaCDP, type CDPLoginResult } from "./cdp-session.js";
|
|
3
|
+
export { loginViaSafari, isMacOS, type SafariLoginResult } from "./safari-fallback.js";
|
|
4
|
+
export { loginViaTerminal, type TerminalLoginResult } from "./terminal-prompt.js";
|
|
5
|
+
export { saveToken, loadToken, clearToken, tokenFilePath, type StoredSession } from "./token-store.js";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { findChromiumBrowser } from "./browser-finder.js";
|
|
2
|
+
export { loginViaCDP } from "./cdp-session.js";
|
|
3
|
+
export { loginViaSafari, isMacOS } from "./safari-fallback.js";
|
|
4
|
+
export { loginViaTerminal } from "./terminal-prompt.js";
|
|
5
|
+
export { saveToken, loadToken, clearToken, tokenFilePath } from "./token-store.js";
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAqB,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAuB,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,OAAO,EAA0B,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAA4B,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAsB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface SafariLoginResult {
|
|
2
|
+
session_id: string;
|
|
3
|
+
state: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function isMacOS(): boolean;
|
|
6
|
+
export declare function loginViaSafari(log?: (msg: string) => void): Promise<SafariLoginResult | null>;
|
|
7
|
+
//# sourceMappingURL=safari-fallback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safari-fallback.d.ts","sourceRoot":"","sources":["../../src/auth/safari-fallback.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAID,wBAAgB,OAAO,IAAI,OAAO,CAEjC;AAwCD,wBAAsB,cAAc,CAAC,GAAG,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAe,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CA+B7G"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { execSync, exec } from "node:child_process";
|
|
2
|
+
import { createInterface } from "node:readline";
|
|
3
|
+
const DSERS_LOGIN_URL = "https://accounts.dsers.com/accounts/login";
|
|
4
|
+
export function isMacOS() {
|
|
5
|
+
return process.platform === "darwin";
|
|
6
|
+
}
|
|
7
|
+
function openInDefaultBrowser(url) {
|
|
8
|
+
if (!/^https:\/\/[a-z0-9.-]+/.test(url))
|
|
9
|
+
return;
|
|
10
|
+
execSync(`open "${url}"`, { stdio: "ignore", timeout: 5000 });
|
|
11
|
+
}
|
|
12
|
+
function readSafariCookies() {
|
|
13
|
+
return new Promise((resolve, reject) => {
|
|
14
|
+
const script = `tell application "Safari"
|
|
15
|
+
if (count of windows) > 0 then
|
|
16
|
+
set cookieStr to do JavaScript "document.cookie" in document 1
|
|
17
|
+
return cookieStr
|
|
18
|
+
else
|
|
19
|
+
return ""
|
|
20
|
+
end if
|
|
21
|
+
end tell`;
|
|
22
|
+
exec(`osascript -e '${script.replace(/'/g, "'\\''")}'`, { timeout: 5000 }, (err, stdout) => {
|
|
23
|
+
if (err)
|
|
24
|
+
reject(err);
|
|
25
|
+
else
|
|
26
|
+
resolve(stdout.trim());
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
function waitForEnter(prompt) {
|
|
31
|
+
return new Promise((resolve) => {
|
|
32
|
+
const rl = createInterface({ input: process.stdin, output: process.stderr });
|
|
33
|
+
rl.question(prompt, () => {
|
|
34
|
+
rl.close();
|
|
35
|
+
resolve();
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
function parseCookieValue(cookieStr, name) {
|
|
40
|
+
const re = new RegExp(`(?:^|;\\s*)${name}=([^;]+)`);
|
|
41
|
+
const m = cookieStr.match(re);
|
|
42
|
+
return m?.[1]?.trim() ?? null;
|
|
43
|
+
}
|
|
44
|
+
export async function loginViaSafari(log = () => { }) {
|
|
45
|
+
if (!isMacOS())
|
|
46
|
+
return null;
|
|
47
|
+
log("No Chromium browser found. Opening DSers in Safari...");
|
|
48
|
+
openInDefaultBrowser(DSERS_LOGIN_URL);
|
|
49
|
+
log("Please log in to DSers in your browser.");
|
|
50
|
+
await waitForEnter("Press Enter after you have logged in... ");
|
|
51
|
+
const MAX_ATTEMPTS = 3;
|
|
52
|
+
for (let attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) {
|
|
53
|
+
try {
|
|
54
|
+
const cookies = await readSafariCookies();
|
|
55
|
+
const sid = parseCookieValue(cookies, "session_id");
|
|
56
|
+
if (sid) {
|
|
57
|
+
const state = parseCookieValue(cookies, "state") ?? "";
|
|
58
|
+
log("Login detected from Safari!");
|
|
59
|
+
return { session_id: sid, state };
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
/* AppleScript failed — permission denied or Safari not focused */
|
|
64
|
+
}
|
|
65
|
+
if (attempt < MAX_ATTEMPTS) {
|
|
66
|
+
log(`Could not read session cookie (attempt ${attempt}/${MAX_ATTEMPTS}). Make sure Safari is on the DSers page.`);
|
|
67
|
+
await waitForEnter("Press Enter to retry... ");
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
log("Could not extract DSers session from Safari. session_id cookie may be HttpOnly.");
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=safari-fallback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safari-fallback.js","sourceRoot":"","sources":["../../src/auth/safari-fallback.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-prompt.d.ts","sourceRoot":"","sources":["../../src/auth/terminal-prompt.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AA6ED,wBAAsB,gBAAgB,CAAC,GAAG,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAe,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CA8CjH"}
|