@xbongbong/xbbcli 2.1.1 → 2.2.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 +32 -2
- package/ai-call-add-task.js +3 -15
- package/ai-word-list.js +3 -15
- package/bin/xbbcli.js +15 -2
- package/buyer-inquiry-detail.js +2 -14
- package/buyer-inquiry-list.js +2 -14
- package/clue-add-couser.js +2 -14
- package/clue-add.js +2 -14
- package/clue-back.js +2 -14
- package/clue-del.js +2 -14
- package/clue-delete-couser.js +2 -14
- package/clue-delete-mainuser.js +2 -14
- package/clue-detail.js +2 -14
- package/clue-distribution.js +2 -14
- package/clue-edit.js +2 -14
- package/clue-handover.js +3 -15
- package/clue-list.js +2 -14
- package/clue-thorough-delete.js +2 -14
- package/communicate-add.js +2 -14
- package/communicate-del.js +2 -14
- package/communicate-detail.js +2 -14
- package/communicate-edit.js +2 -14
- package/communicate-list.js +2 -14
- package/communicate-plan-add.js +2 -14
- package/communicate-plan-cancel.js +2 -14
- package/communicate-plan-del.js +2 -14
- package/communicate-plan-detail.js +2 -14
- package/communicate-plan-list.js +2 -14
- package/communicate-plan-single-operate.js +2 -14
- package/contact-add-couser.js +2 -14
- package/contact-add-mainuser.js +2 -14
- package/contact-add.js +2 -14
- package/contact-del.js +2 -14
- package/contact-delete-couser.js +2 -14
- package/contact-delete-mainuser.js +2 -14
- package/contact-detail.js +2 -14
- package/contact-edit.js +2 -14
- package/contact-handover.js +2 -14
- package/contact-list.js +2 -14
- package/contract-add-couser.js +2 -14
- package/contract-add-mainuser.js +2 -14
- package/contract-add.js +2 -14
- package/contract-del.js +2 -14
- package/contract-delete-couser.js +2 -14
- package/contract-delete-mainuser.js +2 -14
- package/contract-detail.js +2 -14
- package/contract-edit.js +2 -14
- package/contract-handover.js +2 -14
- package/contract-list.js +2 -14
- package/contract-outstock-add.js +2 -14
- package/contract-outstock-del.js +2 -14
- package/contract-outstock-detail.js +2 -14
- package/contract-outstock-edit.js +2 -14
- package/contract-outstock-list.js +2 -14
- package/customer-add-couser.js +2 -14
- package/customer-add.js +2 -14
- package/customer-back.js +2 -14
- package/customer-del.js +2 -14
- package/customer-delete-couser.js +2 -14
- package/customer-delete-mainuser.js +2 -14
- package/customer-detail.js +2 -14
- package/customer-distribution.js +2 -14
- package/customer-edit.js +2 -14
- package/customer-handover.js +2 -14
- package/customer-invoice-address-add.js +2 -14
- package/customer-invoice-address-edit.js +2 -14
- package/customer-invoice-address.js +2 -14
- package/customer-invoice-info-add.js +2 -14
- package/customer-invoice-info-edit.js +2 -14
- package/customer-invoice-info.js +2 -14
- package/customer-list.js +2 -14
- package/department-add.js +2 -14
- package/department-del.js +2 -14
- package/department-edit.js +2 -14
- package/department-list.js +2 -14
- package/form-data-add-couser.js +2 -14
- package/form-data-add-mainuser.js +2 -14
- package/form-data-add.js +2 -14
- package/form-data-del.js +2 -14
- package/form-data-delete-couser.js +2 -14
- package/form-data-delete-mainuser.js +2 -14
- package/form-data-detail.js +2 -14
- package/form-data-edit.js +2 -14
- package/form-data-handover.js +2 -14
- package/form-data-list.js +2 -14
- package/form-get.js +2 -14
- package/form-list.js +2 -14
- package/invoice-add.js +3 -15
- package/invoice-cancel.js +3 -15
- package/invoice-del.js +3 -15
- package/invoice-detail.js +3 -15
- package/invoice-edit.js +3 -15
- package/invoice-get-amount-detail.js +3 -15
- package/invoice-list.js +3 -15
- package/invoice-red.js +3 -15
- package/label-add.js +3 -15
- package/label-all-list.js +3 -15
- package/label-batch-add.js +3 -15
- package/label-batch-remove.js +3 -15
- package/label-del-completely.js +3 -15
- package/label-del.js +3 -15
- package/label-edit.js +3 -15
- package/label-group-add.js +3 -15
- package/label-group-del.js +3 -15
- package/label-group-list.js +3 -15
- package/label-group-update.js +3 -15
- package/label-list.js +3 -15
- package/label-reduction.js +3 -15
- package/label-repeat.js +3 -15
- package/market-activity-add.js +2 -14
- package/market-activity-del.js +2 -14
- package/market-activity-detail.js +2 -14
- package/market-activity-edit.js +2 -14
- package/market-activity-handover.js +2 -14
- package/market-activity-list.js +2 -14
- package/opportunity-add-couser.js +2 -14
- package/opportunity-add-mainuser.js +2 -14
- package/opportunity-add.js +2 -14
- package/opportunity-del.js +2 -14
- package/opportunity-delete-couser.js +2 -14
- package/opportunity-delete-mainuser.js +2 -14
- package/opportunity-detail.js +2 -14
- package/opportunity-edit.js +2 -14
- package/opportunity-handover.js +2 -14
- package/opportunity-list.js +2 -14
- package/package.json +1 -1
- package/pay-plan-add-couser.js +2 -14
- package/pay-plan-add-mainuser.js +2 -14
- package/pay-plan-add.js +2 -14
- package/pay-plan-delete-couser.js +2 -14
- package/pay-plan-delete-mainuser.js +2 -14
- package/pay-plan-handover.js +2 -14
- package/pay-sheet-add-bad.js +2 -14
- package/pay-sheet-add-couser.js +2 -14
- package/pay-sheet-add-mainuser.js +2 -14
- package/pay-sheet-add-red.js +2 -14
- package/pay-sheet-add-write-off.js +2 -14
- package/pay-sheet-del.js +2 -14
- package/pay-sheet-delete-couser.js +2 -14
- package/pay-sheet-delete-mainuser.js +2 -14
- package/pay-sheet-detail.js +2 -14
- package/pay-sheet-edit-bad.js +2 -14
- package/pay-sheet-edit-red.js +2 -14
- package/pay-sheet-edit-write-off.js +2 -14
- package/pay-sheet-get-amount-detail.js +2 -14
- package/pay-sheet-list.js +2 -14
- package/payment-add-couser.js +2 -14
- package/payment-add-mainuser.js +2 -14
- package/payment-add.js +2 -14
- package/payment-del.js +2 -14
- package/payment-delete-couser.js +2 -14
- package/payment-delete-mainuser.js +2 -14
- package/payment-detail.js +2 -14
- package/payment-edit.js +2 -14
- package/payment-handover.js +2 -14
- package/payment-list.js +2 -14
- package/payment-sheet-add-bad-debt.js +2 -14
- package/payment-sheet-add-pre.js +2 -14
- package/payment-sheet-add-red.js +2 -14
- package/payment-sheet-add-write-off.js +2 -14
- package/payment-sheet-del.js +2 -14
- package/payment-sheet-detail.js +2 -14
- package/payment-sheet-edit-bad-debt.js +2 -14
- package/payment-sheet-edit-red.js +2 -14
- package/payment-sheet-edit-write-off.js +2 -14
- package/payment-sheet-get-amount-detail.js +2 -14
- package/payment-sheet-handover.js +2 -14
- package/payment-sheet-list.js +2 -14
- package/product-add.js +2 -14
- package/product-category-add.js +2 -14
- package/product-category-del.js +2 -14
- package/product-category-list.js +2 -14
- package/product-category-update.js +2 -14
- package/product-del.js +2 -14
- package/product-detail.js +2 -14
- package/product-edit.js +2 -14
- package/product-list.js +2 -14
- package/product-online.js +2 -14
- package/quotation-add-couser.js +3 -15
- package/quotation-add-mainuser.js +3 -15
- package/quotation-add.js +3 -15
- package/quotation-del.js +3 -15
- package/quotation-delete-couser.js +3 -15
- package/quotation-delete-mainuser.js +3 -15
- package/quotation-detail.js +3 -15
- package/quotation-edit.js +3 -15
- package/quotation-handover.js +2 -14
- package/quotation-list.js +3 -15
- package/refund-add.js +2 -14
- package/refund-del.js +2 -14
- package/refund-detail.js +2 -14
- package/refund-edit.js +2 -14
- package/refund-list.js +2 -14
- package/role-list.js +2 -14
- package/sign-in-list.js +2 -14
- package/stage-get.js +2 -14
- package/stage-jump.js +2 -14
- package/supplier-add.js +2 -14
- package/token-del.js +5 -0
- package/token-generate.js +2 -14
- package/token-list.js +20 -2
- package/token-set.js +19 -3
- package/token-use.js +5 -0
- package/user-add.js +2 -14
- package/user-del.js +2 -14
- package/user-edit.js +2 -14
- package/user-handover.js +2 -14
- package/user-list.js +2 -14
- package/work-order-add.js +2 -14
- package/work-order-asset-add-couser.js +3 -15
- package/work-order-asset-add-mainuser.js +3 -15
- package/work-order-asset-add.js +3 -15
- package/work-order-asset-del-couser.js +3 -15
- package/work-order-asset-del-mainuser.js +3 -15
- package/work-order-asset-del.js +3 -15
- package/work-order-asset-detail.js +3 -15
- package/work-order-asset-edit.js +3 -15
- package/work-order-asset-handover.js +3 -15
- package/work-order-asset-list.js +3 -15
- package/work-order-del.js +2 -14
- package/work-order-detail.js +2 -14
- package/work-order-dynamic-list.js +2 -14
- package/work-order-edit.js +2 -14
- package/work-order-list.js +2 -14
- package/work-order-operate.js +2 -14
- package/work-order-template-detail.js +2 -14
- package/work-order-template-list.js +2 -14
- package/work-report-daily-add.js +2 -14
- package/work-report-daily-del.js +2 -14
- package/work-report-daily-detail.js +2 -14
- package/work-report-daily-edit.js +2 -14
- package/work-report-daily-get-work-plan.js +2 -14
- package/work-report-daily-list.js +2 -14
- package/work-report-monthly-add.js +2 -14
- package/work-report-monthly-del.js +2 -14
- package/work-report-monthly-detail.js +2 -14
- package/work-report-monthly-edit.js +2 -14
- package/work-report-monthly-list.js +2 -14
- package/work-report-weekly-add.js +2 -14
- package/work-report-weekly-del.js +2 -14
- package/work-report-weekly-detail.js +2 -14
- package/work-report-weekly-edit.js +2 -14
- package/work-report-weekly-list.js +2 -14
- package/work-task-add-couser.js +2 -14
- package/work-task-add.js +2 -14
- package/work-task-delete-couser.js +2 -14
- package/work-task-detail.js +2 -14
- package/work-task-edit.js +2 -14
- package/work-task-handover.js +2 -14
- package/workorder-add-couser.js +2 -14
- package/workorder-delete-couser.js +2 -14
- package/workorder-handover.js +2 -14
- package/workorderlist.js +2 -14
- package/workorderproductlist.js +2 -14
- package/worktimerecorddetail.js +2 -14
- package/worktimerecordlist.js +2 -14
- package/xbb-config.js +113 -0
- package/version.js +0 -18
package/xbb-config.js
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { spawnSync } from 'node:child_process';
|
|
5
|
+
|
|
6
|
+
const CONFIG_DIR = path.join(os.homedir(), '.xbbcli');
|
|
7
|
+
const CONFIG_FILE = path.join(CONFIG_DIR, 'config.env');
|
|
8
|
+
const ENV_FILE = path.join(CONFIG_DIR, 'env.sh');
|
|
9
|
+
|
|
10
|
+
// config.env 字段名 -> 对应环境变量名(环境变量模式只支持单公司)
|
|
11
|
+
export const ENV_VAR_NAMES = Object.freeze({
|
|
12
|
+
corpid: 'XBB_CORPID',
|
|
13
|
+
token: 'XBB_TOKEN',
|
|
14
|
+
baseurl: 'XBB_BASEURL',
|
|
15
|
+
userId: 'XBB_USERID',
|
|
16
|
+
corpName: 'XBB_CORPNAME',
|
|
17
|
+
userName: 'XBB_USERNAME',
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
function trim(value) {
|
|
21
|
+
return String(value ?? '').trim();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function isTruthy(value) {
|
|
25
|
+
return ['1', 'true', 'yes', 'on'].includes(trim(value).toLowerCase());
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// 读取环境中非空的 XBB_* 变量,返回与 config.env 单条配置同构的对象
|
|
29
|
+
export function readEnvConfig() {
|
|
30
|
+
const config = {};
|
|
31
|
+
for (const [field, name] of Object.entries(ENV_VAR_NAMES)) {
|
|
32
|
+
const value = trim(process.env[name]);
|
|
33
|
+
if (value) config[field] = value;
|
|
34
|
+
}
|
|
35
|
+
return config;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function hasEnvConfig(config = readEnvConfig()) {
|
|
39
|
+
return Boolean(trim(config.corpid) || trim(config.token));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// XBB_ENV_ONLY=1 时强制只使用环境变量,忽略 config.env
|
|
43
|
+
export function isEnvOnly() {
|
|
44
|
+
return isTruthy(process.env.XBB_ENV_ONLY);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// 与旧版每个命令内联的 readConfig 行为保持一致:优先返回 enable=true 的公司
|
|
48
|
+
function readFileConfig() {
|
|
49
|
+
try {
|
|
50
|
+
const parsed = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf8'));
|
|
51
|
+
const companies = Array.isArray(parsed)
|
|
52
|
+
? parsed
|
|
53
|
+
: Array.isArray(parsed?.companies)
|
|
54
|
+
? parsed.companies
|
|
55
|
+
: null;
|
|
56
|
+
if (companies) {
|
|
57
|
+
return companies.find((item) => item && item.enable) || {};
|
|
58
|
+
}
|
|
59
|
+
return parsed || {};
|
|
60
|
+
} catch {
|
|
61
|
+
return {};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// 配置文件优先:有启用公司就用配置,否则回落到环境变量
|
|
66
|
+
export function readActiveConfig() {
|
|
67
|
+
const envConfig = readEnvConfig();
|
|
68
|
+
if (isEnvOnly()) {
|
|
69
|
+
return envConfig;
|
|
70
|
+
}
|
|
71
|
+
const fileConfig = readFileConfig();
|
|
72
|
+
if (Object.keys(fileConfig).length > 0) {
|
|
73
|
+
return fileConfig;
|
|
74
|
+
}
|
|
75
|
+
return envConfig;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// 当前生效来源是否为环境变量
|
|
79
|
+
export function isEnvActive() {
|
|
80
|
+
if (isEnvOnly()) {
|
|
81
|
+
return hasEnvConfig();
|
|
82
|
+
}
|
|
83
|
+
return Object.keys(readFileConfig()).length === 0 && hasEnvConfig();
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export function getEnvVarNames() {
|
|
87
|
+
return Object.values(ENV_VAR_NAMES);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// token-set 成功后把凭证写入环境变量:Windows 用 setx 写用户级变量,其他平台写 ~/.xbbcli/env.sh
|
|
91
|
+
export function persistEnvVars(values) {
|
|
92
|
+
const entries = Object.entries(ENV_VAR_NAMES)
|
|
93
|
+
.map(([field, name]) => [name, trim(values?.[field])])
|
|
94
|
+
.filter(([, value]) => value !== '');
|
|
95
|
+
if (!entries.length) {
|
|
96
|
+
return { stored: 'none', file: '', failed: [] };
|
|
97
|
+
}
|
|
98
|
+
if (process.platform === 'win32') {
|
|
99
|
+
const failed = [];
|
|
100
|
+
for (const [name, value] of entries) {
|
|
101
|
+
const result = spawnSync('setx', [name, value], { encoding: 'utf8', windowsHide: true });
|
|
102
|
+
if (result.error || result.status !== 0) failed.push(name);
|
|
103
|
+
}
|
|
104
|
+
if (failed.length) {
|
|
105
|
+
throw new Error(`写入用户环境变量失败:${failed.join(', ')}`);
|
|
106
|
+
}
|
|
107
|
+
return { stored: 'user', file: '', failed: [] };
|
|
108
|
+
}
|
|
109
|
+
const lines = entries.map(([name, value]) => `export ${name}='${value.replaceAll("'", "'\\''")}'`);
|
|
110
|
+
fs.mkdirSync(CONFIG_DIR, { recursive: true });
|
|
111
|
+
fs.writeFileSync(ENV_FILE, `${lines.join('\n')}\n`, { encoding: 'utf8', mode: 0o600 });
|
|
112
|
+
return { stored: 'file', file: ENV_FILE, failed: [] };
|
|
113
|
+
}
|
package/version.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { cli, Strategy } from './xbb-registry.js';
|
|
2
|
-
|
|
3
|
-
const VERSION = 'v1.6';
|
|
4
|
-
|
|
5
|
-
cli({
|
|
6
|
-
site: 'xbb',
|
|
7
|
-
name: 'version',
|
|
8
|
-
description: '查看销帮帮插件版本号',
|
|
9
|
-
strategy: Strategy.PUBLIC,
|
|
10
|
-
access: 'read',
|
|
11
|
-
browser: false,
|
|
12
|
-
domain: 'proapi.xbongbong.com',
|
|
13
|
-
args: [],
|
|
14
|
-
columns: ['version'],
|
|
15
|
-
func: async function () {
|
|
16
|
-
return [{ version: VERSION }];
|
|
17
|
-
},
|
|
18
|
-
});
|