@lofder/dsers-mcp-product 1.3.7 → 1.4.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/README.md +164 -74
- package/dist/auth/browser-finder.d.ts +5 -5
- package/dist/auth/browser-finder.d.ts.map +1 -1
- package/dist/auth/browser-finder.js +13 -95
- package/dist/auth/browser-finder.js.map +1 -1
- package/dist/auth/cdp-session.d.ts.map +1 -1
- package/dist/auth/cdp-session.js +89 -38
- package/dist/auth/cdp-session.js.map +1 -1
- package/dist/auth/index.d.ts +3 -5
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +3 -5
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/oauth.d.ts +36 -0
- package/dist/auth/oauth.d.ts.map +1 -0
- package/dist/auth/oauth.js +173 -0
- package/dist/auth/oauth.js.map +1 -0
- package/dist/auth/safari-fallback.d.ts.map +1 -1
- package/dist/auth/safari-fallback.js +7 -2
- package/dist/auth/safari-fallback.js.map +1 -1
- package/dist/auth/terminal-prompt.d.ts.map +1 -1
- package/dist/auth/terminal-prompt.js +6 -3
- package/dist/auth/terminal-prompt.js.map +1 -1
- package/dist/auth/token-store.d.ts +10 -2
- package/dist/auth/token-store.d.ts.map +1 -1
- package/dist/auth/token-store.js +32 -5
- package/dist/auth/token-store.js.map +1 -1
- package/dist/cli.js +51 -68
- 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 +5 -6
- package/dist/dsers/auth.d.ts.map +1 -1
- package/dist/dsers/auth.js +57 -84
- package/dist/dsers/auth.js.map +1 -1
- package/dist/dsers/client.d.ts +0 -1
- package/dist/dsers/client.d.ts.map +1 -1
- package/dist/dsers/client.js +7 -14
- package/dist/dsers/client.js.map +1 -1
- package/dist/dsers/config.d.ts +19 -16
- package/dist/dsers/config.d.ts.map +1 -1
- package/dist/dsers/config.js +22 -30
- package/dist/dsers/config.js.map +1 -1
- package/dist/dsers/product.d.ts.map +1 -1
- package/dist/dsers/product.js +5 -10
- package/dist/dsers/product.js.map +1 -1
- package/dist/dsers/settings.d.ts.map +1 -1
- package/dist/dsers/settings.js.map +1 -1
- package/dist/error-map.d.ts.map +1 -1
- package/dist/error-map.js +4 -6
- package/dist/error-map.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -13
- package/dist/index.js.map +1 -1
- package/dist/instructions.d.ts.map +1 -1
- package/dist/instructions.js +15 -2
- package/dist/instructions.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.map +1 -1
- 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.map +1 -1
- package/dist/provider.js +82 -241
- package/dist/provider.js.map +1 -1
- package/dist/push-guard.d.ts.map +1 -1
- package/dist/push-guard.js +3 -7
- package/dist/push-guard.js.map +1 -1
- package/dist/push-options.js.map +1 -1
- package/dist/resolver.d.ts.map +1 -1
- package/dist/resolver.js +1 -2
- package/dist/resolver.js.map +1 -1
- package/dist/rules.d.ts.map +1 -1
- package/dist/rules.js +39 -13
- 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 +1 -1
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +23 -32
- package/dist/service.js.map +1 -1
- package/dist/tools.d.ts +1 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +162 -114
- package/dist/tools.js.map +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 +15 -5
|
@@ -14,13 +14,15 @@ function askPassword(prompt) {
|
|
|
14
14
|
let pw = "";
|
|
15
15
|
const onData = (buf) => {
|
|
16
16
|
for (const b of buf) {
|
|
17
|
-
if (b === 0x03) {
|
|
17
|
+
if (b === 0x03) {
|
|
18
|
+
// Ctrl+C
|
|
18
19
|
process.stderr.write("\n");
|
|
19
20
|
process.stdin.setRawMode?.(false);
|
|
20
21
|
process.stdin.removeListener("data", onData);
|
|
21
22
|
process.exit(130);
|
|
22
23
|
}
|
|
23
|
-
if (b === 0x0d || b === 0x0a) {
|
|
24
|
+
if (b === 0x0d || b === 0x0a) {
|
|
25
|
+
// Enter
|
|
24
26
|
process.stderr.write("\n");
|
|
25
27
|
process.stdin.setRawMode?.(false);
|
|
26
28
|
process.stdin.removeListener("data", onData);
|
|
@@ -28,7 +30,8 @@ function askPassword(prompt) {
|
|
|
28
30
|
resolve(pw);
|
|
29
31
|
return;
|
|
30
32
|
}
|
|
31
|
-
if (b === 0x7f || b === 0x08) {
|
|
33
|
+
if (b === 0x7f || b === 0x08) {
|
|
34
|
+
// Backspace
|
|
32
35
|
if (pw.length > 0) {
|
|
33
36
|
pw = pw.slice(0, -1);
|
|
34
37
|
process.stderr.write("\b \b");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-prompt.js","sourceRoot":"","sources":["../../src/auth/terminal-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAuC,MAAM,eAAe,CAAC;AAOrF,MAAM,SAAS,GAAG,8DAA8D,CAAC;AAEjF,SAAS,GAAG,CAAC,EAAqB,EAAE,MAAc;IAChD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,WAAW,CAAC,MAAc;IACjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,EAAE,CAAC,CAAC;YACZ,OAAO;QACT,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,EAAE,GAAG,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE;YAC7B,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;gBACpB,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"terminal-prompt.js","sourceRoot":"","sources":["../../src/auth/terminal-prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,19 @@
|
|
|
1
|
+
/** OAuth token storage format (shared with DSClaw) */
|
|
1
2
|
export interface StoredSession {
|
|
2
|
-
|
|
3
|
-
|
|
3
|
+
access_token: string;
|
|
4
|
+
refresh_token: string;
|
|
5
|
+
expires_at: number;
|
|
6
|
+
client_id: string;
|
|
7
|
+
oauth_base: string;
|
|
4
8
|
base_url: string;
|
|
5
9
|
ts: number;
|
|
6
10
|
}
|
|
11
|
+
/** Check if a parsed credential is the old CDP format */
|
|
12
|
+
export declare function isLegacySession(obj: Record<string, unknown>): boolean;
|
|
7
13
|
export declare function saveToken(session: StoredSession): void;
|
|
8
14
|
export declare function loadToken(): StoredSession | null;
|
|
9
15
|
export declare function clearToken(): boolean;
|
|
10
16
|
export declare function tokenFilePath(): string;
|
|
17
|
+
/** Check if a legacy CDP credential file exists (for migration messaging) */
|
|
18
|
+
export declare function hasLegacyCredentials(): boolean;
|
|
11
19
|
//# sourceMappingURL=token-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-store.d.ts","sourceRoot":"","sources":["../../src/auth/token-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"token-store.d.ts","sourceRoot":"","sources":["../../src/auth/token-store.ts"],"names":[],"mappings":"AAWA,sDAAsD;AACtD,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;CACZ;AAsDD,yDAAyD;AACzD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAErE;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAYtD;AAED,wBAAgB,SAAS,IAAI,aAAa,GAAG,IAAI,CAkBhD;AAED,wBAAgB,UAAU,IAAI,OAAO,CASpC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,6EAA6E;AAC7E,wBAAgB,oBAAoB,IAAI,OAAO,CAY9C"}
|
package/dist/auth/token-store.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { randomBytes, createCipheriv, createDecipheriv, createHash
|
|
2
|
-
import { readFileSync, writeFileSync, mkdirSync, unlinkSync, chmodSync
|
|
1
|
+
import { randomBytes, createCipheriv, createDecipheriv, createHash } from "node:crypto";
|
|
2
|
+
import { readFileSync, writeFileSync, mkdirSync, unlinkSync, chmodSync } from "node:fs";
|
|
3
3
|
import { existsSync } from "node:fs";
|
|
4
4
|
import { join } from "node:path";
|
|
5
5
|
import { homedir, hostname, userInfo } from "node:os";
|
|
@@ -49,6 +49,10 @@ function decrypt(encoded) {
|
|
|
49
49
|
return null;
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
|
+
/** Check if a parsed credential is the old CDP format */
|
|
53
|
+
export function isLegacySession(obj) {
|
|
54
|
+
return typeof obj.session_id === "string" && !obj.access_token;
|
|
55
|
+
}
|
|
52
56
|
export function saveToken(session) {
|
|
53
57
|
const dir = getCredDir();
|
|
54
58
|
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
@@ -59,7 +63,9 @@ export function saveToken(session) {
|
|
|
59
63
|
try {
|
|
60
64
|
chmodSync(file, 0o600);
|
|
61
65
|
}
|
|
62
|
-
catch (_chmodErr) {
|
|
66
|
+
catch (_chmodErr) {
|
|
67
|
+
/* Windows: chmod not fully supported */
|
|
68
|
+
}
|
|
63
69
|
}
|
|
64
70
|
export function loadToken() {
|
|
65
71
|
const file = getCredFile();
|
|
@@ -70,8 +76,12 @@ export function loadToken() {
|
|
|
70
76
|
const json = decrypt(encrypted);
|
|
71
77
|
if (!json)
|
|
72
78
|
return null;
|
|
73
|
-
const
|
|
74
|
-
|
|
79
|
+
const parsed = JSON.parse(json);
|
|
80
|
+
// Detect legacy CDP format → caller should prompt re-login
|
|
81
|
+
if (isLegacySession(parsed))
|
|
82
|
+
return null;
|
|
83
|
+
const session = parsed;
|
|
84
|
+
if (!session.access_token)
|
|
75
85
|
return null;
|
|
76
86
|
return session;
|
|
77
87
|
}
|
|
@@ -94,4 +104,21 @@ export function clearToken() {
|
|
|
94
104
|
export function tokenFilePath() {
|
|
95
105
|
return getCredFile();
|
|
96
106
|
}
|
|
107
|
+
/** Check if a legacy CDP credential file exists (for migration messaging) */
|
|
108
|
+
export function hasLegacyCredentials() {
|
|
109
|
+
const file = getCredFile();
|
|
110
|
+
if (!existsSync(file))
|
|
111
|
+
return false;
|
|
112
|
+
try {
|
|
113
|
+
const encrypted = readFileSync(file, "utf-8").trim();
|
|
114
|
+
const json = decrypt(encrypted);
|
|
115
|
+
if (!json)
|
|
116
|
+
return false;
|
|
117
|
+
const parsed = JSON.parse(json);
|
|
118
|
+
return isLegacySession(parsed);
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
97
124
|
//# sourceMappingURL=token-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-store.js","sourceRoot":"","sources":["../../src/auth/token-store.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"token-store.js","sourceRoot":"","sources":["../../src/auth/token-store.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3
3
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
4
|
-
import {
|
|
5
|
-
import { buildProvider } from "./provider.js";
|
|
6
|
-
import { ImportFlowService } from "./service.js";
|
|
4
|
+
import { configFromToken, configFromEnv } from "./dsers/config.js";
|
|
5
|
+
import { buildProvider } from "./provider/index.js";
|
|
6
|
+
import { ImportFlowService } from "./service/index.js";
|
|
7
7
|
import { FileJobStore } from "./job-store.js";
|
|
8
8
|
import { registerTools } from "./tools.js";
|
|
9
9
|
import { SERVER_INSTRUCTIONS } from "./instructions.js";
|
|
@@ -11,6 +11,8 @@ import { resolve, dirname } from "node:path";
|
|
|
11
11
|
import { homedir } from "node:os";
|
|
12
12
|
import { readFileSync, statSync } from "node:fs";
|
|
13
13
|
import { fileURLToPath } from "node:url";
|
|
14
|
+
import { authorizeWithPKCE } from "./auth/oauth.js";
|
|
15
|
+
import { saveToken, loadToken, clearToken, tokenFilePath, hasLegacyCredentials, } from "./auth/token-store.js";
|
|
14
16
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
15
17
|
const PKG_VERSION = (() => {
|
|
16
18
|
try {
|
|
@@ -20,59 +22,25 @@ const PKG_VERSION = (() => {
|
|
|
20
22
|
return "0.0.0";
|
|
21
23
|
}
|
|
22
24
|
})();
|
|
23
|
-
import { findChromiumBrowser, loginViaCDP, isMacOS, loginViaSafari, loginViaTerminal, saveToken, loadToken, clearToken, tokenFilePath, } from "./auth/index.js";
|
|
24
25
|
const log = (msg) => process.stderr.write(`${msg}\n`);
|
|
25
26
|
/* ------------------------------------------------------------------ */
|
|
26
27
|
/* login subcommand */
|
|
27
28
|
/* ------------------------------------------------------------------ */
|
|
28
29
|
async function handleLogin() {
|
|
29
30
|
log("DSers MCP — Login");
|
|
30
|
-
log("Your password never passes through this tool
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
const browser = findChromiumBrowser();
|
|
34
|
-
if (browser) {
|
|
35
|
-
log(`Found: ${browser.name}`);
|
|
36
|
-
try {
|
|
37
|
-
session = await loginViaCDP(browser.path, log);
|
|
38
|
-
}
|
|
39
|
-
catch (err) {
|
|
40
|
-
log(`Browser login failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
log("No Chromium browser (Chrome, Edge, Brave, etc.) found.");
|
|
45
|
-
}
|
|
46
|
-
// Strategy 2: macOS Safari
|
|
47
|
-
if (!session && isMacOS()) {
|
|
48
|
-
try {
|
|
49
|
-
session = await loginViaSafari(log);
|
|
50
|
-
}
|
|
51
|
-
catch (err) {
|
|
52
|
-
log(`Safari login failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
// Strategy 3: Terminal prompt
|
|
56
|
-
if (!session) {
|
|
57
|
-
try {
|
|
58
|
-
session = await loginViaTerminal(log);
|
|
59
|
-
}
|
|
60
|
-
catch (err) {
|
|
61
|
-
log(`Terminal login failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
if (!session) {
|
|
65
|
-
log("\nLogin was not completed. Please try again.");
|
|
66
|
-
process.exit(1);
|
|
31
|
+
log("Your password never passes through this tool.\n");
|
|
32
|
+
if (hasLegacyCredentials()) {
|
|
33
|
+
log("Found old session format (pre-OAuth). It will be replaced with the new OAuth token.\n");
|
|
67
34
|
}
|
|
68
|
-
//
|
|
69
|
-
|
|
35
|
+
// Load existing client_id to reuse (avoid re-registering)
|
|
36
|
+
const existing = loadToken();
|
|
37
|
+
const savedClientId = existing?.client_id;
|
|
38
|
+
const tokens = await authorizeWithPKCE(log, savedClientId);
|
|
39
|
+
// Validate token against DSers API
|
|
40
|
+
log("Validating token...");
|
|
70
41
|
try {
|
|
71
|
-
const resp = await fetch(
|
|
72
|
-
headers: {
|
|
73
|
-
Authorization: `Bearer ${session.session_id}`,
|
|
74
|
-
Cookie: `session_id=${session.session_id}; state=${session.state}`,
|
|
75
|
-
},
|
|
42
|
+
const resp = await fetch(`${tokens.base_url}/account-user-bff/v1/users/info`, {
|
|
43
|
+
headers: { Authorization: `Bearer ${tokens.access_token}` },
|
|
76
44
|
});
|
|
77
45
|
if (!resp.ok)
|
|
78
46
|
throw new Error(`HTTP ${resp.status}`);
|
|
@@ -81,20 +49,14 @@ async function handleLogin() {
|
|
|
81
49
|
log(`Authenticated as: ${email}`);
|
|
82
50
|
}
|
|
83
51
|
catch (err) {
|
|
84
|
-
log(`Warning: could not verify
|
|
52
|
+
log(`Warning: could not verify token (${err instanceof Error ? err.message : String(err)}). Saving anyway.`);
|
|
85
53
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
session_id: session.session_id,
|
|
89
|
-
state: session.state,
|
|
90
|
-
base_url: "https://bff-api-gw.dsers.com",
|
|
91
|
-
ts: Date.now(),
|
|
92
|
-
});
|
|
93
|
-
log(`\nSession saved to: ${tokenFilePath()}`);
|
|
54
|
+
saveToken(tokens);
|
|
55
|
+
log(`\nToken saved to: ${tokenFilePath()}`);
|
|
94
56
|
log("Encrypted with machine-specific key. Cannot be used on other machines.\n");
|
|
95
57
|
log("You can now use the MCP server without any credentials in your config:");
|
|
96
58
|
log("");
|
|
97
|
-
log(
|
|
59
|
+
log(" {");
|
|
98
60
|
log(' "mcpServers": {');
|
|
99
61
|
log(' "dsers-mcp-product": {');
|
|
100
62
|
log(' "command": "npx",');
|
|
@@ -119,37 +81,52 @@ function handleLogout() {
|
|
|
119
81
|
/* MCP server (default) */
|
|
120
82
|
/* ------------------------------------------------------------------ */
|
|
121
83
|
async function startServer() {
|
|
122
|
-
// Credential resolution priority: token file > env vars
|
|
123
|
-
// (HTTP headers always override at runtime, handled by DSersClient)
|
|
124
84
|
let dsersConfig;
|
|
125
85
|
const token = loadToken();
|
|
126
86
|
if (token) {
|
|
127
|
-
dsersConfig = configFromToken(token.
|
|
87
|
+
dsersConfig = configFromToken(token.access_token, token.base_url, token.refresh_token, token.expires_at, token.client_id, token.oauth_base);
|
|
128
88
|
}
|
|
129
89
|
else {
|
|
130
90
|
dsersConfig = configFromEnv();
|
|
91
|
+
if (hasLegacyCredentials()) {
|
|
92
|
+
process.stderr.write("Warning: Found old session format (pre-OAuth). Please re-authenticate:\n" +
|
|
93
|
+
" npx @lofder/dsers-mcp-product login\n\n");
|
|
94
|
+
}
|
|
131
95
|
}
|
|
96
|
+
// Token hot-reload: watch credential file for changes
|
|
132
97
|
let lastTokenMtime = 0;
|
|
133
98
|
try {
|
|
134
99
|
lastTokenMtime = statSync(tokenFilePath()).mtimeMs;
|
|
135
100
|
}
|
|
136
|
-
catch {
|
|
101
|
+
catch {
|
|
102
|
+
/* no token file yet */
|
|
103
|
+
}
|
|
137
104
|
dsersConfig.tokenReloader = () => {
|
|
138
105
|
try {
|
|
139
106
|
const mtime = statSync(tokenFilePath()).mtimeMs;
|
|
140
107
|
if (mtime === lastTokenMtime)
|
|
141
108
|
return null;
|
|
142
109
|
lastTokenMtime = mtime;
|
|
143
|
-
|
|
110
|
+
const fresh = loadToken();
|
|
111
|
+
if (!fresh)
|
|
112
|
+
return null;
|
|
113
|
+
return {
|
|
114
|
+
access_token: fresh.access_token,
|
|
115
|
+
refresh_token: fresh.refresh_token,
|
|
116
|
+
expires_at: fresh.expires_at,
|
|
117
|
+
client_id: fresh.client_id,
|
|
118
|
+
oauth_base: fresh.oauth_base,
|
|
119
|
+
base_url: fresh.base_url,
|
|
120
|
+
};
|
|
144
121
|
}
|
|
145
122
|
catch {
|
|
146
123
|
return null;
|
|
147
124
|
}
|
|
148
125
|
};
|
|
149
|
-
if (!dsersConfig.
|
|
126
|
+
if (!dsersConfig.accessToken) {
|
|
150
127
|
process.stderr.write("Warning: No DSers credentials found.\n" +
|
|
151
128
|
"Run 'npx @lofder/dsers-mcp-product login' to authenticate.\n" +
|
|
152
|
-
"Or set
|
|
129
|
+
"Or set DSERS_ACCESS_TOKEN environment variable for headless environments.\n\n");
|
|
153
130
|
}
|
|
154
131
|
const STATE_DIR = process.env.IMPORT_MCP_STATE_DIR ?? resolve(homedir(), ".dsers-mcp", "state");
|
|
155
132
|
const provider = buildProvider(dsersConfig);
|
|
@@ -167,7 +144,7 @@ function printHelp() {
|
|
|
167
144
|
log("dsers-mcp-product — MCP server for DSers dropshipping product management\n");
|
|
168
145
|
log("Usage:");
|
|
169
146
|
log(" npx @lofder/dsers-mcp-product Start the MCP server (stdio)");
|
|
170
|
-
log(" npx @lofder/dsers-mcp-product login Authenticate with DSers via
|
|
147
|
+
log(" npx @lofder/dsers-mcp-product login Authenticate with DSers via OAuth");
|
|
171
148
|
log(" npx @lofder/dsers-mcp-product logout Clear saved session");
|
|
172
149
|
log(" npx @lofder/dsers-mcp-product --help Show this help message\n");
|
|
173
150
|
log("For more info: https://github.com/lofder/dsers-mcp-product");
|
|
@@ -177,12 +154,18 @@ if (cmd === "--help" || cmd === "-h" || cmd === "help") {
|
|
|
177
154
|
printHelp();
|
|
178
155
|
}
|
|
179
156
|
else if (cmd === "login") {
|
|
180
|
-
handleLogin().catch((e) => {
|
|
157
|
+
handleLogin().catch((e) => {
|
|
158
|
+
log(`Error: ${e.message ?? e}`);
|
|
159
|
+
process.exit(1);
|
|
160
|
+
});
|
|
181
161
|
}
|
|
182
162
|
else if (cmd === "logout") {
|
|
183
163
|
handleLogout();
|
|
184
164
|
}
|
|
185
165
|
else {
|
|
186
|
-
startServer().catch((e) => {
|
|
166
|
+
startServer().catch((e) => {
|
|
167
|
+
process.stderr.write(`Fatal: ${e.message ?? e}\n`);
|
|
168
|
+
process.exit(1);
|
|
169
|
+
});
|
|
187
170
|
}
|
|
188
171
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../src/dsers/account.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,wBAAsB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAEtF;AAED,wBAAsB,cAAc,
|
|
1
|
+
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../src/dsers/account.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,wBAAsB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAEtF;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAE3G;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAEvF;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAElC;AAED,wBAAsB,SAAS,CAC7B,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAElC;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAExG;AAED,wBAAsB,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAErF;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAElC;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAExG;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAElC;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAEzF;AAED,wBAAsB,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAEpF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../src/dsers/account.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAmB;IAClD,OAAO,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../src/dsers/account.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAmB;IAClD,OAAO,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAmB,EAAE,OAAe;IACvE,OAAO,MAAM,CAAC,GAAG,CAAC,oCAAoC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAmB;IACnD,OAAO,MAAM,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAmB,EACnB,IAA6B;IAE7B,OAAO,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE,IAAI,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,MAAmB,EACnB,QAAgB,EAChB,QAAgB;IAEhB,OAAO,MAAM,CAAC,IAAI,CAAC,uCAAuC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;AACtF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAmB,EAAE,OAAe;IACpE,OAAO,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAmB;IACjD,OAAO,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAmB,EACnB,KAAa,EACb,WAAqB;IAErB,OAAO,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;AACnF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAmB,EAAE,OAAe;IACpE,OAAO,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAmB,EACnB,OAAe,EACf,WAAqB;IAErB,OAAO,MAAM,CAAC,IAAI,CAAC,wCAAwC,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;AACzF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAmB;IACrD,OAAO,MAAM,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,MAAmB;IAChD,OAAO,MAAM,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;AACtD,CAAC"}
|
package/dist/dsers/auth.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import type { DSersConfig } from "./config.js";
|
|
2
2
|
export declare class DSersAuth {
|
|
3
3
|
private config;
|
|
4
|
-
private
|
|
5
|
-
private
|
|
6
|
-
private
|
|
4
|
+
private accessToken;
|
|
5
|
+
private refreshToken;
|
|
6
|
+
private expiresAt;
|
|
7
|
+
private clientId;
|
|
8
|
+
private oauthBase;
|
|
7
9
|
constructor(config: DSersConfig);
|
|
8
10
|
getSession(): Promise<[string, string]>;
|
|
9
|
-
login(): Promise<[string, string]>;
|
|
10
11
|
invalidate(): void;
|
|
11
|
-
private readCache;
|
|
12
|
-
private writeCache;
|
|
13
12
|
}
|
|
14
13
|
//# sourceMappingURL=auth.d.ts.map
|
package/dist/dsers/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/dsers/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/dsers/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,SAAS,CAAuB;gBAE5B,MAAM,EAAE,WAAW;IAezB,UAAU,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IA+D7C,UAAU,IAAI,IAAI;CAInB"}
|
package/dist/dsers/auth.js
CHANGED
|
@@ -1,105 +1,78 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { dirname } from "node:path";
|
|
4
|
-
const SESSION_TTL = 3600 * 6 * 1000; // 6 hours in ms
|
|
1
|
+
import { refreshAccessToken } from "../auth/oauth.js";
|
|
2
|
+
import { saveToken } from "../auth/token-store.js";
|
|
5
3
|
export class DSersAuth {
|
|
6
4
|
config;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
accessToken = null;
|
|
6
|
+
refreshToken = null;
|
|
7
|
+
expiresAt = 0;
|
|
8
|
+
clientId = null;
|
|
9
|
+
oauthBase = null;
|
|
10
10
|
constructor(config) {
|
|
11
11
|
this.config = config;
|
|
12
|
-
if (config.
|
|
13
|
-
this.
|
|
14
|
-
this.
|
|
15
|
-
this.
|
|
12
|
+
if (config.accessToken) {
|
|
13
|
+
this.accessToken = config.accessToken;
|
|
14
|
+
this.refreshToken = config.refreshToken ?? null;
|
|
15
|
+
this.expiresAt = config.expiresAt ?? 0;
|
|
16
|
+
this.clientId = config.clientId ?? null;
|
|
17
|
+
this.oauthBase = config.oauthBase ?? null;
|
|
18
|
+
}
|
|
19
|
+
// Legacy: support sessionId field (Vercel route.ts compat)
|
|
20
|
+
if (!this.accessToken && config.sessionId) {
|
|
21
|
+
this.accessToken = config.sessionId;
|
|
16
22
|
}
|
|
17
23
|
}
|
|
18
24
|
async getSession() {
|
|
25
|
+
// Check token reloader (hot-reload from file changes)
|
|
19
26
|
if (this.config.tokenReloader) {
|
|
20
27
|
const fresh = this.config.tokenReloader();
|
|
21
|
-
if (fresh?.
|
|
22
|
-
this.
|
|
23
|
-
this.
|
|
24
|
-
this.
|
|
25
|
-
|
|
28
|
+
if (fresh?.access_token && fresh.access_token !== this.accessToken) {
|
|
29
|
+
this.accessToken = fresh.access_token;
|
|
30
|
+
this.refreshToken = fresh.refresh_token;
|
|
31
|
+
this.expiresAt = fresh.expires_at;
|
|
32
|
+
this.clientId = fresh.client_id;
|
|
33
|
+
this.oauthBase = fresh.oauth_base;
|
|
34
|
+
return [this.accessToken, ""];
|
|
26
35
|
}
|
|
27
36
|
}
|
|
28
|
-
|
|
29
|
-
|
|
37
|
+
// Token still valid
|
|
38
|
+
if (this.accessToken && (this.expiresAt === 0 || Date.now() < this.expiresAt)) {
|
|
39
|
+
return [this.accessToken, ""];
|
|
30
40
|
}
|
|
31
|
-
|
|
32
|
-
if (
|
|
33
|
-
|
|
34
|
-
|
|
41
|
+
// Try refresh
|
|
42
|
+
if (this.refreshToken && this.clientId) {
|
|
43
|
+
try {
|
|
44
|
+
const refreshed = await refreshAccessToken(this.refreshToken, this.clientId, this.oauthBase ?? undefined);
|
|
45
|
+
this.accessToken = refreshed.access_token;
|
|
46
|
+
this.refreshToken = refreshed.refresh_token;
|
|
47
|
+
this.expiresAt = refreshed.expires_at;
|
|
48
|
+
// Persist refreshed tokens so other processes pick them up
|
|
49
|
+
saveToken({
|
|
50
|
+
access_token: this.accessToken,
|
|
51
|
+
refresh_token: this.refreshToken,
|
|
52
|
+
expires_at: this.expiresAt,
|
|
53
|
+
client_id: this.clientId,
|
|
54
|
+
oauth_base: this.oauthBase ?? "https://mcp-oauth-api-gw.dsers.com",
|
|
55
|
+
base_url: this.config.baseUrl,
|
|
56
|
+
ts: Date.now(),
|
|
57
|
+
});
|
|
58
|
+
return [this.accessToken, ""];
|
|
59
|
+
}
|
|
60
|
+
catch (_refreshErr) {
|
|
61
|
+
// Refresh failed — fall through to error
|
|
62
|
+
}
|
|
35
63
|
}
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
async login() {
|
|
39
|
-
if (!this.config.email || !this.config.password) {
|
|
64
|
+
if (!this.accessToken) {
|
|
40
65
|
throw new Error("DSers credentials not configured.\n" +
|
|
41
66
|
"Recommended: run 'npx @lofder/dsers-mcp-product login' to authenticate via browser.\n" +
|
|
42
|
-
"If browser login is not available, set
|
|
43
|
-
}
|
|
44
|
-
const resp = await fetch(`${this.config.baseUrl}/account-user-bff/v1/users/login`, {
|
|
45
|
-
method: "POST",
|
|
46
|
-
headers: { "Content-Type": "application/json" },
|
|
47
|
-
body: JSON.stringify({
|
|
48
|
-
email: this.config.email,
|
|
49
|
-
password: this.config.password,
|
|
50
|
-
}),
|
|
51
|
-
});
|
|
52
|
-
if (!resp.ok) {
|
|
53
|
-
throw new Error(`Login HTTP ${resp.status}: ${await resp.text()}`);
|
|
54
|
-
}
|
|
55
|
-
const data = (await resp.json());
|
|
56
|
-
const inner = data.data;
|
|
57
|
-
if (!inner?.sessionId) {
|
|
58
|
-
throw new Error(`Login failed: ${JSON.stringify(data)}`);
|
|
67
|
+
"If browser login is not available, set DSERS_ACCESS_TOKEN environment variable.");
|
|
59
68
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
this.writeCache();
|
|
64
|
-
return [this.sessionId, this.state];
|
|
69
|
+
// Access token exists but expired and no refresh available
|
|
70
|
+
throw new Error("DSers session expired. Please re-authenticate:\n" +
|
|
71
|
+
" npx @lofder/dsers-mcp-product login");
|
|
65
72
|
}
|
|
66
73
|
invalidate() {
|
|
67
|
-
this.
|
|
68
|
-
this.
|
|
69
|
-
this.fetchedAt = 0;
|
|
70
|
-
}
|
|
71
|
-
readCache() {
|
|
72
|
-
try {
|
|
73
|
-
const p = this.config.sessionFile;
|
|
74
|
-
if (!existsSync(p))
|
|
75
|
-
return null;
|
|
76
|
-
const obj = JSON.parse(readFileSync(p, "utf-8"));
|
|
77
|
-
if (Date.now() - obj.ts > SESSION_TTL)
|
|
78
|
-
return null;
|
|
79
|
-
return [obj.session_id, obj.state ?? "", obj.ts];
|
|
80
|
-
}
|
|
81
|
-
catch (_readErr) {
|
|
82
|
-
return null;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
writeCache() {
|
|
86
|
-
if (this.config.sessionId)
|
|
87
|
-
return;
|
|
88
|
-
try {
|
|
89
|
-
const p = this.config.sessionFile;
|
|
90
|
-
mkdirSync(dirname(p), { recursive: true });
|
|
91
|
-
const payload = {
|
|
92
|
-
session_id: this.sessionId,
|
|
93
|
-
state: this.state ?? "",
|
|
94
|
-
ts: this.fetchedAt,
|
|
95
|
-
};
|
|
96
|
-
writeFileSync(p, JSON.stringify(payload), { encoding: "utf-8", mode: 0o600 });
|
|
97
|
-
try {
|
|
98
|
-
chmodSync(p, 0o600);
|
|
99
|
-
}
|
|
100
|
-
catch (_chmodErr) { /* Windows: chmod not fully supported */ }
|
|
101
|
-
}
|
|
102
|
-
catch (_writeErr) { /* file write failed — continue with in-memory session only */ }
|
|
74
|
+
this.accessToken = null;
|
|
75
|
+
this.expiresAt = 0;
|
|
103
76
|
}
|
|
104
77
|
}
|
|
105
78
|
//# sourceMappingURL=auth.js.map
|