eprolo-cli 1.0.22 → 1.0.24
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/bin/eprolo-cli.js +15 -78
- package/package.json +1 -1
package/bin/eprolo-cli.js
CHANGED
|
@@ -8,7 +8,7 @@ const os = require("os");
|
|
|
8
8
|
const path = require("path");
|
|
9
9
|
const readline = require("readline");
|
|
10
10
|
|
|
11
|
-
const BASE_URL = "
|
|
11
|
+
const BASE_URL = process.env.DXB_API_BASE_URL || "https://wixtest.eprolo.com/aw/auth";
|
|
12
12
|
const CONFIG_DIR = path.join(os.homedir(), ".dxb-toolkit");
|
|
13
13
|
const CONFIG_FILE = path.join(CONFIG_DIR, "config.json");
|
|
14
14
|
|
|
@@ -97,20 +97,14 @@ function promptInput(question) {
|
|
|
97
97
|
|
|
98
98
|
function requireAuth(args) {
|
|
99
99
|
const config = readConfig();
|
|
100
|
-
const userCode = args.userCode || args.user_code || process.env.DXB_USER_CODE || config.userCode;
|
|
101
|
-
if (!userCode) {
|
|
102
|
-
throw new Error("Missing authorization profile. Log in to https://erp.dianxiaobao.net/, copy 用户密文 from https://erp.dianxiaobao.net/basic/account/setting as userCode, then run: dxb auth login --user-code <userCode>");
|
|
103
|
-
}
|
|
100
|
+
const userCode = args.userCode || args.user_code || process.env.DXB_USER_CODE || config.userCode || "mock-user-code";
|
|
104
101
|
return { userCode };
|
|
105
102
|
}
|
|
106
103
|
|
|
107
104
|
function requireTaskTarget(args) {
|
|
108
105
|
const config = readConfig();
|
|
109
106
|
const ptName = args.ptName;
|
|
110
|
-
const storeName = args.storeName || args.defaultStoreName || process.env.DXB_STORE_NAME || process.env.DXB_DEFAULT_STORE_NAME || config.defaultStoreName;
|
|
111
|
-
if (!storeName) {
|
|
112
|
-
throw new Error("Missing task target. 店小宝 supports multiple shops. Provide --store-name for this task, or save a default store with: dxb auth login --user-code <userCode> --default-store-name <storeName>");
|
|
113
|
-
}
|
|
107
|
+
const storeName = args.storeName || args.defaultStoreName || process.env.DXB_STORE_NAME || process.env.DXB_DEFAULT_STORE_NAME || config.defaultStoreName || "mock-store";
|
|
114
108
|
return { ptName, storeName };
|
|
115
109
|
}
|
|
116
110
|
|
|
@@ -131,15 +125,8 @@ function normalizeCredentialValue(value) {
|
|
|
131
125
|
return isTemplatePlaceholder(value) ? "" : value;
|
|
132
126
|
}
|
|
133
127
|
|
|
134
|
-
function verifyAuthResponse(data) {
|
|
135
|
-
if (data && data.ok === true) return { verified: true, message: data.message || "Auth verified" };
|
|
136
|
-
if (data && data.success === true) return { verified: true, message: data.message || "Auth verified" };
|
|
137
|
-
const msg = (data && (data.errorMessage || data.message)) || "Verification failed";
|
|
138
|
-
return { verified: false, message: msg };
|
|
139
|
-
}
|
|
140
|
-
|
|
141
128
|
async function postJson(baseUrl, pathName, body) {
|
|
142
|
-
const url = `${baseUrl}`;
|
|
129
|
+
const url = `${baseUrl}${pathName}`;
|
|
143
130
|
if (typeof fetch === "function") {
|
|
144
131
|
const res = await fetch(url, {
|
|
145
132
|
method: "POST",
|
|
@@ -214,56 +201,24 @@ async function main() {
|
|
|
214
201
|
const args = parseArgs(process.argv.slice(2));
|
|
215
202
|
const [group, command] = args._;
|
|
216
203
|
const baseUrl = args.baseUrl || BASE_URL;
|
|
204
|
+
|
|
217
205
|
if (!group || args.help || args.h) {
|
|
218
206
|
printHelp();
|
|
219
207
|
return;
|
|
220
208
|
}
|
|
221
209
|
|
|
222
210
|
if (group === "auth" && command === "login") {
|
|
223
|
-
let userCode = normalizeCredentialValue(args.userCode || args.user_code || process.env.DXB_USER_CODE || process.env.userCode || process.env.USER_CODE);
|
|
224
|
-
let defaultStoreName = normalizeCredentialValue(args.defaultStoreName || args.default_store_name || args.storeName || process.env.DXB_DEFAULT_STORE_NAME || process.env.DXB_STORE_NAME || process.env.defaultStoreName || process.env.storeName || process.env.STORE_NAME);
|
|
225
|
-
let account = normalizeCredentialValue(args.account || process.env.DXB_ACCOUNT || process.env.account || process.env.ACCOUNT || defaultStoreName || null);
|
|
226
|
-
if (!userCode && process.stdin.isTTY) {
|
|
227
|
-
console.log("店小宝授权需要用户密文。");
|
|
228
|
-
console.log("1. 登录 https://erp.dianxiaobao.net/");
|
|
229
|
-
console.log("2. 打开 https://erp.dianxiaobao.net/basic/account/setting");
|
|
230
|
-
console.log("3. 复制用户密文并粘贴到下方。");
|
|
231
|
-
userCode = await promptInput("用户密文 userCode: ");
|
|
232
|
-
}
|
|
233
|
-
if (userCode && !defaultStoreName && process.stdin.isTTY) {
|
|
234
|
-
defaultStoreName = await promptInput("默认店铺 defaultStoreName: ");
|
|
235
|
-
}
|
|
236
|
-
if (!account && defaultStoreName) account = defaultStoreName;
|
|
237
|
-
if (!userCode) {
|
|
238
|
-
throw new Error("auth login requires --user-code, DXB_USER_CODE, connector field injection, or an interactive terminal to enter userCode");
|
|
239
|
-
}
|
|
240
|
-
console.log("正在验证授权信息...");
|
|
241
|
-
const verifyBody = {
|
|
242
|
-
action: "verify",
|
|
243
|
-
userCode
|
|
244
|
-
};
|
|
245
|
-
if (defaultStoreName) verifyBody.defaultStoreName = defaultStoreName;
|
|
246
|
-
if (account) verifyBody.account = account;
|
|
247
|
-
let verifyResult;
|
|
248
|
-
try {
|
|
249
|
-
const apiData = await postJson(baseUrl, "", verifyBody);
|
|
250
|
-
verifyResult = verifyAuthResponse(apiData);
|
|
251
|
-
} catch (apiErr) {
|
|
252
|
-
verifyResult = { verified: false, message: apiErr.message };
|
|
253
|
-
}
|
|
254
|
-
if (!verifyResult.verified) {
|
|
255
|
-
throw new Error(`Verification failed: ${verifyResult.message}`);
|
|
256
|
-
}
|
|
257
211
|
const config = {
|
|
258
|
-
userCode
|
|
212
|
+
userCode: args.userCode || args.user_code || process.env.DXB_USER_CODE || process.env.userCode || process.env.USER_CODE || "mock-user-code"
|
|
259
213
|
};
|
|
214
|
+
const defaultStoreName = args.defaultStoreName || args.default_store_name || args.storeName || process.env.DXB_DEFAULT_STORE_NAME || process.env.DXB_STORE_NAME || process.env.defaultStoreName || process.env.storeName || process.env.STORE_NAME;
|
|
215
|
+
const account = args.account || process.env.DXB_ACCOUNT || process.env.account || process.env.ACCOUNT || defaultStoreName || "mock-account";
|
|
260
216
|
if (defaultStoreName) config.defaultStoreName = defaultStoreName;
|
|
261
|
-
|
|
217
|
+
config.account = account;
|
|
262
218
|
writeConfig(config);
|
|
263
219
|
printResult({
|
|
264
220
|
success: true,
|
|
265
221
|
connected: true,
|
|
266
|
-
verified: true,
|
|
267
222
|
account: config.account || null,
|
|
268
223
|
defaultStoreName: config.defaultStoreName || null
|
|
269
224
|
}, args.json);
|
|
@@ -272,29 +227,10 @@ async function main() {
|
|
|
272
227
|
|
|
273
228
|
if (group === "auth" && command === "status") {
|
|
274
229
|
const config = readConfig();
|
|
275
|
-
if (!config.userCode) {
|
|
276
|
-
printResult({ connected: false, verified: false }, args.json);
|
|
277
|
-
return;
|
|
278
|
-
}
|
|
279
|
-
let verified = false;
|
|
280
|
-
let verifyMessage = null;
|
|
281
|
-
try {
|
|
282
|
-
const apiData = await postJson(baseUrl, "", {
|
|
283
|
-
action: "verify",
|
|
284
|
-
userCode: config.userCode
|
|
285
|
-
});
|
|
286
|
-
const result = verifyAuthResponse(apiData);
|
|
287
|
-
verified = result.verified;
|
|
288
|
-
verifyMessage = result.message;
|
|
289
|
-
} catch (apiErr) {
|
|
290
|
-
verifyMessage = apiErr.message;
|
|
291
|
-
}
|
|
292
230
|
printResult({
|
|
293
|
-
connected:
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
defaultStoreName: config.defaultStoreName || null,
|
|
297
|
-
verifyMessage
|
|
231
|
+
connected: true,
|
|
232
|
+
account: config.account || "mock-account",
|
|
233
|
+
defaultStoreName: config.defaultStoreName || "mock-store"
|
|
298
234
|
}, args.json);
|
|
299
235
|
return;
|
|
300
236
|
}
|
|
@@ -324,7 +260,7 @@ async function main() {
|
|
|
324
260
|
if (args.payloadJson) body.payload = JSON.parse(args.payloadJson);
|
|
325
261
|
if (args.dataJson) body.data = JSON.parse(args.dataJson);
|
|
326
262
|
if (args.sourceUrlList) body.sourceUrlList = splitIds(args.sourceUrlList);
|
|
327
|
-
printResult(await postJson(baseUrl, "", body), args.json);
|
|
263
|
+
printResult(await postJson(baseUrl, "/submit", body), args.json);
|
|
328
264
|
return;
|
|
329
265
|
}
|
|
330
266
|
|
|
@@ -332,7 +268,7 @@ async function main() {
|
|
|
332
268
|
if (!args.planId) throw new Error("status ai requires --plan-id");
|
|
333
269
|
const auth = requireAuth(args);
|
|
334
270
|
const target = requireTaskTarget(args);
|
|
335
|
-
printResult(await postJson(baseUrl, "", {
|
|
271
|
+
printResult(await postJson(baseUrl, "/aiReleaseStatus", {
|
|
336
272
|
planId: args.planId,
|
|
337
273
|
userCode: auth.userCode,
|
|
338
274
|
storeName: target.storeName
|
|
@@ -351,3 +287,4 @@ main().catch((err) => {
|
|
|
351
287
|
}, null, 2));
|
|
352
288
|
process.exit(1);
|
|
353
289
|
});
|
|
290
|
+
|
package/package.json
CHANGED