@lofder/dsers-mcp-product 1.4.0 → 1.5.2
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/CHANGELOG.md +264 -0
- package/README.md +65 -7
- package/dist/auth/oauth.d.ts.map +1 -1
- package/dist/auth/oauth.js +97 -57
- package/dist/auth/oauth.js.map +1 -1
- package/dist/auth/token-store.d.ts.map +1 -1
- package/dist/auth/token-store.js +80 -27
- package/dist/auth/token-store.js.map +1 -1
- package/dist/cli.js +39 -25
- package/dist/cli.js.map +1 -1
- package/dist/dsers/auth.d.ts +1 -0
- package/dist/dsers/auth.d.ts.map +1 -1
- package/dist/dsers/auth.js +56 -18
- package/dist/dsers/auth.js.map +1 -1
- package/dist/dsers/client.d.ts +9 -3
- package/dist/dsers/client.d.ts.map +1 -1
- package/dist/dsers/client.js +47 -20
- package/dist/dsers/client.js.map +1 -1
- package/dist/dsers/product.d.ts +60 -1
- package/dist/dsers/product.d.ts.map +1 -1
- package/dist/dsers/product.js +87 -13
- package/dist/dsers/product.js.map +1 -1
- package/dist/dsers/retry.d.ts +59 -0
- package/dist/dsers/retry.d.ts.map +1 -0
- package/dist/dsers/retry.js +214 -0
- package/dist/dsers/retry.js.map +1 -0
- package/dist/error-map.d.ts.map +1 -1
- package/dist/error-map.js +27 -8
- package/dist/error-map.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/instructions.d.ts.map +1 -1
- package/dist/instructions.js +23 -1
- package/dist/instructions.js.map +1 -1
- package/dist/job-store-memory.d.ts.map +1 -1
- package/dist/job-store-memory.js +2 -43
- package/dist/job-store-memory.js.map +1 -1
- package/dist/job-store.d.ts.map +1 -1
- package/dist/job-store.js +5 -1
- package/dist/job-store.js.map +1 -1
- package/dist/logger.d.ts +51 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +125 -0
- package/dist/logger.js.map +1 -0
- package/dist/oauth/crypto.d.ts +4 -1
- package/dist/oauth/crypto.d.ts.map +1 -1
- package/dist/oauth/crypto.js +10 -1
- package/dist/oauth/crypto.js.map +1 -1
- package/dist/provider/helpers.d.ts +2 -2
- package/dist/provider/helpers.d.ts.map +1 -1
- package/dist/provider/helpers.js +28 -10
- package/dist/provider/helpers.js.map +1 -1
- package/dist/provider/import-ops.d.ts.map +1 -1
- package/dist/provider/import-ops.js +7 -4
- package/dist/provider/import-ops.js.map +1 -1
- package/dist/provider/index.d.ts +1 -0
- package/dist/provider/index.d.ts.map +1 -1
- package/dist/provider/index.js +3 -1
- package/dist/provider/index.js.map +1 -1
- package/dist/provider/normalize.d.ts.map +1 -1
- package/dist/provider/normalize.js +13 -9
- package/dist/provider/normalize.js.map +1 -1
- package/dist/provider/push.d.ts.map +1 -1
- package/dist/provider/push.js +4 -3
- package/dist/provider/push.js.map +1 -1
- package/dist/provider/sku-matcher.d.ts +157 -0
- package/dist/provider/sku-matcher.d.ts.map +1 -0
- package/dist/provider/sku-matcher.js +1206 -0
- package/dist/provider/sku-matcher.js.map +1 -0
- package/dist/provider/store.d.ts +1 -1
- package/dist/provider/store.d.ts.map +1 -1
- package/dist/provider/store.js +7 -5
- package/dist/provider/store.js.map +1 -1
- package/dist/rules.d.ts.map +1 -1
- package/dist/rules.js +60 -4
- package/dist/rules.js.map +1 -1
- package/dist/service/browse-shared.d.ts +1 -0
- package/dist/service/browse-shared.d.ts.map +1 -1
- package/dist/service/browse-shared.js +3 -1
- package/dist/service/browse-shared.js.map +1 -1
- package/dist/service/find-product.d.ts.map +1 -1
- package/dist/service/find-product.js +33 -6
- package/dist/service/find-product.js.map +1 -1
- package/dist/service/import-list.d.ts.map +1 -1
- package/dist/service/import-list.js +5 -2
- package/dist/service/import-list.js.map +1 -1
- package/dist/service/index.d.ts +2 -0
- package/dist/service/index.d.ts.map +1 -1
- package/dist/service/index.js +15 -5
- package/dist/service/index.js.map +1 -1
- package/dist/service/preview.d.ts +1 -1
- package/dist/service/preview.d.ts.map +1 -1
- package/dist/service/preview.js +53 -24
- package/dist/service/preview.js.map +1 -1
- package/dist/service/push-flow.d.ts.map +1 -1
- package/dist/service/push-flow.js +23 -15
- package/dist/service/push-flow.js.map +1 -1
- package/dist/service/sku-mapping.d.ts +674 -0
- package/dist/service/sku-mapping.d.ts.map +1 -0
- package/dist/service/sku-mapping.js +1879 -0
- package/dist/service/sku-mapping.js.map +1 -0
- package/dist/tools.d.ts +3 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +329 -5
- package/dist/tools.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/util.d.ts +6 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +25 -0
- package/dist/util.js.map +1 -0
- package/package.json +10 -5
- package/dist/auth/cdp-session.d.ts +0 -6
- package/dist/auth/cdp-session.d.ts.map +0 -1
- package/dist/auth/cdp-session.js +0 -369
- package/dist/auth/cdp-session.js.map +0 -1
- package/dist/auth/safari-fallback.d.ts +0 -7
- package/dist/auth/safari-fallback.d.ts.map +0 -1
- package/dist/auth/safari-fallback.js +0 -73
- package/dist/auth/safari-fallback.js.map +0 -1
- package/dist/auth/terminal-prompt.d.ts +0 -6
- package/dist/auth/terminal-prompt.d.ts.map +0 -1
- package/dist/auth/terminal-prompt.js +0 -118
- package/dist/auth/terminal-prompt.js.map +0 -1
- package/dist/provider.d.ts +0 -90
- package/dist/provider.d.ts.map +0 -1
- package/dist/provider.js +0 -1577
- package/dist/provider.js.map +0 -1
- package/dist/service/browse.d.ts +0 -20
- package/dist/service/browse.d.ts.map +0 -1
- package/dist/service/browse.js +0 -159
- package/dist/service/browse.js.map +0 -1
- package/dist/service.d.ts +0 -27
- package/dist/service.d.ts.map +0 -1
- package/dist/service.js +0 -949
- package/dist/service.js.map +0 -1
package/dist/auth/oauth.js
CHANGED
|
@@ -12,13 +12,13 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import * as http from "node:http";
|
|
14
14
|
import * as crypto from "node:crypto";
|
|
15
|
-
import {
|
|
15
|
+
import { openBrowser } from "./browser-finder.js";
|
|
16
16
|
const DEFAULT_OAUTH_BASE = "https://mcp-oauth-api-gw.dsers.com";
|
|
17
17
|
const DEFAULT_BFF_BASE = "https://bff-api-gw.dsers.com";
|
|
18
|
-
const
|
|
19
|
-
const
|
|
18
|
+
const CB_PORTS = [3001, 3002, 3003];
|
|
19
|
+
const CB_TIMEOUT_MS = 5 * 60 * 1000; // 5 minutes
|
|
20
20
|
const OAUTH_SCOPES = "user:read store:read store:write staff:read supplier:read " +
|
|
21
|
-
"product:read product:import product:push " +
|
|
21
|
+
"product:read product:import product:push product:mapping " +
|
|
22
22
|
"settings:read billing:read plan:read order:read";
|
|
23
23
|
// ── PKCE helpers ──
|
|
24
24
|
function generateVerifier() {
|
|
@@ -36,66 +36,99 @@ async function fetchJSON(url, init) {
|
|
|
36
36
|
}
|
|
37
37
|
return res.json();
|
|
38
38
|
}
|
|
39
|
-
function openBrowser(url, log) {
|
|
40
|
-
const cmd = process.platform === "darwin" ? "open"
|
|
41
|
-
: process.platform === "win32" ? "cmd"
|
|
42
|
-
: "xdg-open";
|
|
43
|
-
try {
|
|
44
|
-
if (process.platform === "win32") {
|
|
45
|
-
spawnSync(cmd, ["/c", "start", "", url], { stdio: "ignore" });
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
spawnSync(cmd, [url], { stdio: "ignore" });
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
catch {
|
|
52
|
-
log(`Please open this URL in your browser:\n${url}`);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
39
|
// ── OAuth flow ──
|
|
56
40
|
async function getASMetadata(oauthBase) {
|
|
57
41
|
return fetchJSON(`${oauthBase}/.well-known/oauth-authorization-server`);
|
|
58
42
|
}
|
|
59
|
-
async function registerClient(registrationEndpoint, log) {
|
|
43
|
+
async function registerClient(registrationEndpoint, redirectUri, log) {
|
|
60
44
|
log("Registering OAuth client...");
|
|
61
45
|
const data = await fetchJSON(registrationEndpoint, {
|
|
62
46
|
method: "POST",
|
|
63
47
|
headers: { "Content-Type": "application/json" },
|
|
64
48
|
body: JSON.stringify({
|
|
65
49
|
client_name: "DSers MCP Product",
|
|
66
|
-
redirect_uris: [
|
|
50
|
+
redirect_uris: [redirectUri],
|
|
67
51
|
}),
|
|
68
52
|
});
|
|
69
53
|
return data.client_id;
|
|
70
54
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
});
|
|
55
|
+
/**
|
|
56
|
+
* Create a callback server and wait for it to bind.
|
|
57
|
+
* Returns the server and a promise that resolves with the auth code.
|
|
58
|
+
*/
|
|
59
|
+
function createCallbackServer(port, expectedState, log) {
|
|
60
|
+
let settled = false;
|
|
61
|
+
let resolveCode;
|
|
62
|
+
let rejectCode;
|
|
63
|
+
const callbackPromise = new Promise((resolve, reject) => {
|
|
64
|
+
resolveCode = resolve;
|
|
65
|
+
rejectCode = reject;
|
|
66
|
+
});
|
|
67
|
+
const settle = (fn, v) => {
|
|
68
|
+
if (settled)
|
|
69
|
+
return;
|
|
70
|
+
settled = true;
|
|
71
|
+
clearTimeout(timer);
|
|
72
|
+
fn(v);
|
|
73
|
+
};
|
|
74
|
+
const server = http.createServer((req, res) => {
|
|
75
|
+
const url = new URL(req.url, `http://localhost:${port}`);
|
|
76
|
+
const code = url.searchParams.get("code");
|
|
77
|
+
const error = url.searchParams.get("error");
|
|
78
|
+
const callbackState = url.searchParams.get("state");
|
|
79
|
+
res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
|
|
80
|
+
res.end("<html><body><h2>Authorization successful. You can close this tab.</h2></body></html>");
|
|
81
|
+
server.close();
|
|
82
|
+
if (error) {
|
|
83
|
+
settle(rejectCode, new Error(`OAuth error: ${error}`));
|
|
84
|
+
}
|
|
85
|
+
else if (callbackState !== expectedState) {
|
|
86
|
+
settle(rejectCode, new Error("OAuth state mismatch — possible CSRF attack. Please retry."));
|
|
87
|
+
}
|
|
88
|
+
else if (code) {
|
|
89
|
+
settle(resolveCode, code);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
settle(rejectCode, new Error("Callback missing authorization code"));
|
|
93
|
+
}
|
|
96
94
|
});
|
|
95
|
+
// Bind to localhost only (P0-09)
|
|
96
|
+
server.listen(port, "127.0.0.1", () => log(`Waiting for OAuth callback on port ${port}...`));
|
|
97
|
+
// Timeout after 5 minutes (P3-02)
|
|
98
|
+
const timer = setTimeout(() => {
|
|
99
|
+
server.close();
|
|
100
|
+
settle(rejectCode, new Error("OAuth callback timed out after 5 minutes. Please retry."));
|
|
101
|
+
}, CB_TIMEOUT_MS);
|
|
102
|
+
timer.unref();
|
|
103
|
+
return { server, callbackPromise };
|
|
97
104
|
}
|
|
98
|
-
|
|
105
|
+
/**
|
|
106
|
+
* Try to listen on a series of ports, returning the first that works.
|
|
107
|
+
* Waits for the `listening` event to confirm the port is bound before returning.
|
|
108
|
+
*/
|
|
109
|
+
async function tryListenWithFallback(expectedState, log) {
|
|
110
|
+
for (const port of CB_PORTS) {
|
|
111
|
+
try {
|
|
112
|
+
const { server, callbackPromise } = createCallbackServer(port, expectedState, log);
|
|
113
|
+
// Wait for listening event to confirm port is actually available
|
|
114
|
+
await new Promise((resolve, reject) => {
|
|
115
|
+
server.once("listening", resolve);
|
|
116
|
+
server.once("error", reject);
|
|
117
|
+
});
|
|
118
|
+
const redirectUri = `http://localhost:${port}/callback`;
|
|
119
|
+
return { port, redirectUri, callbackPromise };
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
if (err?.code === "EADDRINUSE") {
|
|
123
|
+
log(`Port ${port} is in use, trying next...`);
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
throw err;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
throw new Error(`All callback ports (${CB_PORTS.join(", ")}) are in use. Free one and retry.`);
|
|
130
|
+
}
|
|
131
|
+
async function exchangeCode(tokenEndpoint, clientId, code, verifier, redirectUri, oauthBase) {
|
|
99
132
|
return fetchJSON(tokenEndpoint, {
|
|
100
133
|
method: "POST",
|
|
101
134
|
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
@@ -104,7 +137,7 @@ async function exchangeCode(tokenEndpoint, clientId, code, verifier, oauthBase)
|
|
|
104
137
|
code,
|
|
105
138
|
code_verifier: verifier,
|
|
106
139
|
client_id: clientId,
|
|
107
|
-
redirect_uri:
|
|
140
|
+
redirect_uri: redirectUri,
|
|
108
141
|
resource: oauthBase,
|
|
109
142
|
}).toString(),
|
|
110
143
|
});
|
|
@@ -116,28 +149,35 @@ async function exchangeCode(tokenEndpoint, clientId, code, verifier, oauthBase)
|
|
|
116
149
|
export async function authorizeWithPKCE(log, savedClientId, oauthBase) {
|
|
117
150
|
const base = oauthBase || process.env.DSERS_OAUTH_BASE || DEFAULT_OAUTH_BASE;
|
|
118
151
|
const meta = await getASMetadata(base);
|
|
152
|
+
const verifier = generateVerifier();
|
|
153
|
+
const challenge = generateChallenge(verifier);
|
|
154
|
+
const state = crypto.randomBytes(16).toString("hex");
|
|
155
|
+
// Start callback listener first to determine actual port
|
|
156
|
+
const { redirectUri, callbackPromise } = await tryListenWithFallback(state, log);
|
|
119
157
|
// Reuse saved client_id or register new one
|
|
120
158
|
let clientId = savedClientId;
|
|
121
159
|
if (!clientId) {
|
|
122
|
-
clientId = await registerClient(meta.registration_endpoint, log);
|
|
160
|
+
clientId = await registerClient(meta.registration_endpoint, redirectUri, log);
|
|
123
161
|
log(`Client registered: ${clientId}`);
|
|
124
162
|
}
|
|
125
|
-
const verifier = generateVerifier();
|
|
126
|
-
const challenge = generateChallenge(verifier);
|
|
127
|
-
const state = crypto.randomBytes(16).toString("hex");
|
|
128
163
|
const authURL = new URL(meta.authorization_endpoint);
|
|
129
164
|
authURL.searchParams.set("response_type", "code");
|
|
130
165
|
authURL.searchParams.set("client_id", clientId);
|
|
131
|
-
authURL.searchParams.set("redirect_uri",
|
|
166
|
+
authURL.searchParams.set("redirect_uri", redirectUri);
|
|
132
167
|
authURL.searchParams.set("scope", OAUTH_SCOPES);
|
|
133
168
|
authURL.searchParams.set("code_challenge", challenge);
|
|
134
169
|
authURL.searchParams.set("code_challenge_method", "S256");
|
|
135
170
|
authURL.searchParams.set("state", state);
|
|
136
171
|
authURL.searchParams.set("resource", base);
|
|
137
172
|
log("Opening browser for DSers authorization...");
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
173
|
+
try {
|
|
174
|
+
openBrowser(authURL.toString());
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
log(`Please open this URL in your browser:\n${authURL.toString()}`);
|
|
178
|
+
}
|
|
179
|
+
const code = await callbackPromise;
|
|
180
|
+
const tokenData = await exchangeCode(meta.token_endpoint, clientId, code, verifier, redirectUri, base);
|
|
141
181
|
return {
|
|
142
182
|
access_token: tokenData.access_token,
|
|
143
183
|
refresh_token: tokenData.refresh_token,
|
package/dist/auth/oauth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/auth/oauth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/auth/oauth.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"AAaA,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;AAoFD,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,CAStD;AAED,wBAAgB,SAAS,IAAI,aAAa,GAAG,IAAI,CAsChD;AAED,wBAAgB,UAAU,IAAI,OAAO,CASpC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,6EAA6E;AAC7E,wBAAgB,oBAAoB,IAAI,OAAO,CAmB9C"}
|
package/dist/auth/token-store.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { randomBytes, createCipheriv, createDecipheriv, createHash } from "node:crypto";
|
|
2
|
-
import { readFileSync, writeFileSync, mkdirSync, unlinkSync
|
|
1
|
+
import { randomBytes, createCipheriv, createDecipheriv, createHash, pbkdf2Sync } from "node:crypto";
|
|
2
|
+
import { readFileSync, writeFileSync, mkdirSync, unlinkSync } 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";
|
|
@@ -7,13 +7,46 @@ const ALG = "aes-256-gcm";
|
|
|
7
7
|
const IV_LEN = 12;
|
|
8
8
|
const TAG_LEN = 16;
|
|
9
9
|
const PACKAGE_SEED = "dsers-mcp-product-v1";
|
|
10
|
+
const SALT_FILE = "key-salt";
|
|
11
|
+
const PBKDF2_ITERATIONS = 100_000;
|
|
10
12
|
function getCredDir() {
|
|
11
13
|
return join(homedir(), ".dsers-mcp");
|
|
12
14
|
}
|
|
13
15
|
function getCredFile() {
|
|
14
16
|
return join(getCredDir(), "credentials");
|
|
15
17
|
}
|
|
16
|
-
function
|
|
18
|
+
function getSaltFile() {
|
|
19
|
+
return join(getCredDir(), SALT_FILE);
|
|
20
|
+
}
|
|
21
|
+
function getOrCreateSalt() {
|
|
22
|
+
const saltFile = getSaltFile();
|
|
23
|
+
if (existsSync(saltFile)) {
|
|
24
|
+
try {
|
|
25
|
+
return Buffer.from(readFileSync(saltFile, "utf-8").trim(), "hex");
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
// Fall through to generate new salt
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const salt = randomBytes(32);
|
|
32
|
+
const dir = getCredDir();
|
|
33
|
+
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
34
|
+
writeFileSync(saltFile, salt.toString("hex"), { encoding: "utf-8", mode: 0o600 });
|
|
35
|
+
return salt;
|
|
36
|
+
}
|
|
37
|
+
function deriveKeyNew(salt) {
|
|
38
|
+
const host = hostname();
|
|
39
|
+
let user = "";
|
|
40
|
+
try {
|
|
41
|
+
user = userInfo().username;
|
|
42
|
+
}
|
|
43
|
+
catch (_osErr) {
|
|
44
|
+
user = process.env.USER ?? process.env.USERNAME ?? "default";
|
|
45
|
+
}
|
|
46
|
+
return pbkdf2Sync(`${PACKAGE_SEED}:${host}:${user}`, salt, PBKDF2_ITERATIONS, 32, "sha256");
|
|
47
|
+
}
|
|
48
|
+
/** Legacy key derivation (single SHA-256, no salt) — used only for migration */
|
|
49
|
+
function deriveKeyLegacy() {
|
|
17
50
|
const host = hostname();
|
|
18
51
|
let user = "";
|
|
19
52
|
try {
|
|
@@ -24,17 +57,15 @@ function deriveKey() {
|
|
|
24
57
|
}
|
|
25
58
|
return createHash("sha256").update(`${PACKAGE_SEED}:${host}:${user}`).digest();
|
|
26
59
|
}
|
|
27
|
-
function
|
|
28
|
-
const key = deriveKey();
|
|
60
|
+
function encryptWithKey(data, key) {
|
|
29
61
|
const iv = randomBytes(IV_LEN);
|
|
30
62
|
const cipher = createCipheriv(ALG, key, iv, { authTagLength: TAG_LEN });
|
|
31
63
|
const ct = Buffer.concat([cipher.update(data, "utf8"), cipher.final()]);
|
|
32
64
|
const tag = cipher.getAuthTag();
|
|
33
65
|
return Buffer.concat([iv, tag, ct]).toString("base64");
|
|
34
66
|
}
|
|
35
|
-
function
|
|
67
|
+
function decryptWithKey(encoded, key) {
|
|
36
68
|
try {
|
|
37
|
-
const key = deriveKey();
|
|
38
69
|
const buf = Buffer.from(encoded, "base64");
|
|
39
70
|
if (buf.length < IV_LEN + TAG_LEN + 1)
|
|
40
71
|
return null;
|
|
@@ -56,16 +87,12 @@ export function isLegacySession(obj) {
|
|
|
56
87
|
export function saveToken(session) {
|
|
57
88
|
const dir = getCredDir();
|
|
58
89
|
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
90
|
+
const salt = getOrCreateSalt();
|
|
91
|
+
const key = deriveKeyNew(salt);
|
|
59
92
|
const json = JSON.stringify(session);
|
|
60
|
-
const encrypted =
|
|
93
|
+
const encrypted = encryptWithKey(json, key);
|
|
61
94
|
const file = getCredFile();
|
|
62
|
-
writeFileSync(file, encrypted, "utf-8");
|
|
63
|
-
try {
|
|
64
|
-
chmodSync(file, 0o600);
|
|
65
|
-
}
|
|
66
|
-
catch (_chmodErr) {
|
|
67
|
-
/* Windows: chmod not fully supported */
|
|
68
|
-
}
|
|
95
|
+
writeFileSync(file, encrypted, { encoding: "utf-8", mode: 0o600 });
|
|
69
96
|
}
|
|
70
97
|
export function loadToken() {
|
|
71
98
|
const file = getCredFile();
|
|
@@ -73,17 +100,35 @@ export function loadToken() {
|
|
|
73
100
|
return null;
|
|
74
101
|
try {
|
|
75
102
|
const encrypted = readFileSync(file, "utf-8").trim();
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
103
|
+
// Try new key derivation first
|
|
104
|
+
const saltFile = getSaltFile();
|
|
105
|
+
if (existsSync(saltFile)) {
|
|
106
|
+
const salt = Buffer.from(readFileSync(saltFile, "utf-8").trim(), "hex");
|
|
107
|
+
const key = deriveKeyNew(salt);
|
|
108
|
+
const json = decryptWithKey(encrypted, key);
|
|
109
|
+
if (json) {
|
|
110
|
+
const parsed = JSON.parse(json);
|
|
111
|
+
if (isLegacySession(parsed))
|
|
112
|
+
return null;
|
|
113
|
+
const session = parsed;
|
|
114
|
+
return session.access_token ? session : null;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Fallback: try legacy key (auto-migrate on success)
|
|
118
|
+
const legacyKey = deriveKeyLegacy();
|
|
119
|
+
const legacyJson = decryptWithKey(encrypted, legacyKey);
|
|
120
|
+
if (legacyJson) {
|
|
121
|
+
const parsed = JSON.parse(legacyJson);
|
|
122
|
+
if (isLegacySession(parsed))
|
|
123
|
+
return null;
|
|
124
|
+
const session = parsed;
|
|
125
|
+
if (session.access_token) {
|
|
126
|
+
// Auto-migrate: re-encrypt with new key
|
|
127
|
+
saveToken(session);
|
|
128
|
+
return session;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return null;
|
|
87
132
|
}
|
|
88
133
|
catch (_readErr) {
|
|
89
134
|
return null;
|
|
@@ -111,7 +156,15 @@ export function hasLegacyCredentials() {
|
|
|
111
156
|
return false;
|
|
112
157
|
try {
|
|
113
158
|
const encrypted = readFileSync(file, "utf-8").trim();
|
|
114
|
-
|
|
159
|
+
// Try new key first, then legacy
|
|
160
|
+
const saltFile = getSaltFile();
|
|
161
|
+
let json = null;
|
|
162
|
+
if (existsSync(saltFile)) {
|
|
163
|
+
const salt = Buffer.from(readFileSync(saltFile, "utf-8").trim(), "hex");
|
|
164
|
+
json = decryptWithKey(encrypted, deriveKeyNew(salt));
|
|
165
|
+
}
|
|
166
|
+
if (!json)
|
|
167
|
+
json = decryptWithKey(encrypted, deriveKeyLegacy());
|
|
115
168
|
if (!json)
|
|
116
169
|
return false;
|
|
117
170
|
const parsed = JSON.parse(json);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-store.js","sourceRoot":"","sources":["../../src/auth/token-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
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
|
@@ -9,7 +9,7 @@ import { registerTools } from "./tools.js";
|
|
|
9
9
|
import { SERVER_INSTRUCTIONS } from "./instructions.js";
|
|
10
10
|
import { resolve, dirname } from "node:path";
|
|
11
11
|
import { homedir } from "node:os";
|
|
12
|
-
import { readFileSync
|
|
12
|
+
import { readFileSync } from "node:fs";
|
|
13
13
|
import { fileURLToPath } from "node:url";
|
|
14
14
|
import { authorizeWithPKCE } from "./auth/oauth.js";
|
|
15
15
|
import { saveToken, loadToken, clearToken, tokenFilePath, hasLegacyCredentials, } from "./auth/token-store.js";
|
|
@@ -93,35 +93,39 @@ async function startServer() {
|
|
|
93
93
|
" npx @lofder/dsers-mcp-product login\n\n");
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
|
-
// Token hot-reload: watch credential file for changes
|
|
97
|
-
let
|
|
96
|
+
// Token hot-reload: watch credential file for changes (fs.watchFile instead of statSync on hot path)
|
|
97
|
+
let cachedTokenResult = null;
|
|
98
|
+
const tokenPath = tokenFilePath();
|
|
98
99
|
try {
|
|
99
|
-
|
|
100
|
+
const { watchFile } = await import("node:fs");
|
|
101
|
+
watchFile(tokenPath, { interval: 5000 }, () => {
|
|
102
|
+
try {
|
|
103
|
+
const fresh = loadToken();
|
|
104
|
+
if (!fresh) {
|
|
105
|
+
cachedTokenResult = null;
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
cachedTokenResult = {
|
|
109
|
+
access_token: fresh.access_token,
|
|
110
|
+
refresh_token: fresh.refresh_token,
|
|
111
|
+
expires_at: fresh.expires_at,
|
|
112
|
+
client_id: fresh.client_id,
|
|
113
|
+
oauth_base: fresh.oauth_base,
|
|
114
|
+
base_url: fresh.base_url,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
cachedTokenResult = null;
|
|
119
|
+
}
|
|
120
|
+
});
|
|
100
121
|
}
|
|
101
122
|
catch {
|
|
102
|
-
/*
|
|
123
|
+
/* watchFile not available — tokenReloader returns null */
|
|
103
124
|
}
|
|
104
125
|
dsersConfig.tokenReloader = () => {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
return null;
|
|
109
|
-
lastTokenMtime = mtime;
|
|
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
|
-
};
|
|
121
|
-
}
|
|
122
|
-
catch {
|
|
123
|
-
return null;
|
|
124
|
-
}
|
|
126
|
+
const result = cachedTokenResult;
|
|
127
|
+
cachedTokenResult = null;
|
|
128
|
+
return result;
|
|
125
129
|
};
|
|
126
130
|
if (!dsersConfig.accessToken) {
|
|
127
131
|
process.stderr.write("Warning: No DSers credentials found.\n" +
|
|
@@ -136,6 +140,16 @@ async function startServer() {
|
|
|
136
140
|
registerTools(server, service);
|
|
137
141
|
const transport = new StdioServerTransport();
|
|
138
142
|
await server.connect(transport);
|
|
143
|
+
// Graceful shutdown
|
|
144
|
+
const shutdown = () => {
|
|
145
|
+
try {
|
|
146
|
+
transport.close?.();
|
|
147
|
+
}
|
|
148
|
+
catch { /* best effort */ }
|
|
149
|
+
process.exit(0);
|
|
150
|
+
};
|
|
151
|
+
process.on("SIGTERM", shutdown);
|
|
152
|
+
process.on("SIGINT", shutdown);
|
|
139
153
|
}
|
|
140
154
|
/* ------------------------------------------------------------------ */
|
|
141
155
|
/* Entrypoint */
|
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,eAAe,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/dsers/auth.d.ts
CHANGED
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":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/dsers/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/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;IACxC,OAAO,CAAC,eAAe,CAA0C;gBAErD,MAAM,EAAE,WAAW;IAezB,UAAU,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAgG7C,UAAU,IAAI,IAAI;CAQnB"}
|