@clonegod/ttd-core 3.1.13 → 3.1.14
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/dist/alert/reporter.js
CHANGED
|
@@ -117,8 +117,6 @@ function flushAlerts() {
|
|
|
117
117
|
yield flush();
|
|
118
118
|
});
|
|
119
119
|
}
|
|
120
|
-
process.on('SIGTERM', () => { flushAlerts(); });
|
|
121
|
-
process.on('SIGINT', () => { flushAlerts(); });
|
|
122
120
|
function serializeError(err) {
|
|
123
121
|
return { name: err.name, message: err.message, stack: err.stack };
|
|
124
122
|
}
|
|
@@ -12,6 +12,7 @@ const ENVARGS_KEYS = [
|
|
|
12
12
|
'quote_pair', 'quote_amount_usd', 'quote_pool_address', 'quote_pool_name', 'quote_pool_fee_rate',
|
|
13
13
|
'trade_group_id', 'trade_pair',
|
|
14
14
|
'token_price_cache_seconds', 'wallet_dir',
|
|
15
|
+
'providers_file_path',
|
|
15
16
|
];
|
|
16
17
|
class EnvArgs {
|
|
17
18
|
constructor(chain_id, dex_id) {
|
|
@@ -48,6 +49,7 @@ class EnvArgs {
|
|
|
48
49
|
this.trade_pair = cfg.trade_pair || '';
|
|
49
50
|
this.token_price_cache_seconds = cfg.token_price_cache_seconds || 1200;
|
|
50
51
|
this.wallet_dir = cfg.wallet_dir || '';
|
|
52
|
+
this.providers_file_path = cfg.providers_file_path || '';
|
|
51
53
|
}
|
|
52
54
|
print(moduleName) {
|
|
53
55
|
const cfg = {};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export declare function loadEnvConfig(keys: string[], overrides?: Record<string, any>): Record<string, any>;
|
|
2
|
-
export declare function validateEnvConfig(keys: string[]): string[];
|
|
2
|
+
export declare function validateEnvConfig(keys: string[], overrides?: Record<string, any>): string[];
|
|
3
3
|
export declare function printEnvConfig(moduleName: string, config: Record<string, any>, keys: string[]): void;
|
|
@@ -32,6 +32,12 @@ function getTypeDefault(type) {
|
|
|
32
32
|
}
|
|
33
33
|
function loadEnvConfig(keys, overrides) {
|
|
34
34
|
var _a, _b;
|
|
35
|
+
const missing = validateEnvConfig(keys, overrides);
|
|
36
|
+
if (missing.length > 0) {
|
|
37
|
+
const header = '[EnvConfig] 以下必填环境变量未设置(进程拒绝启动):';
|
|
38
|
+
const detail = missing.map(m => ` - ${m}`).join('\n');
|
|
39
|
+
throw new Error(`${header}\n${detail}`);
|
|
40
|
+
}
|
|
35
41
|
const registry = (0, env_registry_1.getEnvRegistry)();
|
|
36
42
|
const config = {};
|
|
37
43
|
for (const key of keys) {
|
|
@@ -50,14 +56,17 @@ function loadEnvConfig(keys, overrides) {
|
|
|
50
56
|
}
|
|
51
57
|
return config;
|
|
52
58
|
}
|
|
53
|
-
function validateEnvConfig(keys) {
|
|
59
|
+
function validateEnvConfig(keys, overrides) {
|
|
54
60
|
const registry = (0, env_registry_1.getEnvRegistry)();
|
|
55
61
|
const missing = [];
|
|
56
62
|
for (const key of keys) {
|
|
57
63
|
const def = registry[key];
|
|
58
64
|
if (!def)
|
|
59
65
|
continue;
|
|
60
|
-
|
|
66
|
+
const isRequired = def.required === true || !Object.prototype.hasOwnProperty.call(def, 'default');
|
|
67
|
+
if (!isRequired)
|
|
68
|
+
continue;
|
|
69
|
+
if (overrides && key in overrides && overrides[key] !== undefined && overrides[key] !== '')
|
|
61
70
|
continue;
|
|
62
71
|
const val = process.env[def.env];
|
|
63
72
|
if (val === undefined || val === '') {
|
|
@@ -10,10 +10,10 @@ function getEnvRegistry() {
|
|
|
10
10
|
return _registry;
|
|
11
11
|
}
|
|
12
12
|
registerEnvVars({
|
|
13
|
-
app_name: { env: 'APP_NAME', type: 'string', desc: '
|
|
14
|
-
app_base_dir: { env: 'APP_BASE_DIR', type: 'string', desc: '
|
|
13
|
+
app_name: { env: 'APP_NAME', type: 'string', default: '', desc: '应用名称(仅日志展示,可选)' },
|
|
14
|
+
app_base_dir: { env: 'APP_BASE_DIR', type: 'string', default: '', desc: '应用根目录(诊断用,可选)' },
|
|
15
15
|
chain_id: { env: 'CHAIN_ID', type: 'string', required: true, desc: '链标识(BSC/SOLANA/TRON)' },
|
|
16
|
-
dex_id: { env: 'DEX_ID', type: 'string', desc: 'DEX
|
|
16
|
+
dex_id: { env: 'DEX_ID', type: 'string', default: '', desc: 'DEX 标识(业务进程用,可选)' },
|
|
17
17
|
redis_host: { env: 'REDIS_HOST', type: 'string', default: '127.0.0.1', desc: 'Redis 地址' },
|
|
18
18
|
redis_port: { env: 'REDIS_PORT', type: 'number', default: 6379, desc: 'Redis 端口' },
|
|
19
19
|
config_center_host: { env: 'CONFIG_CENTER_HOST', type: 'string', default: '127.0.0.1', desc: 'config-center 地址(IP),端口固定 SERVICE_PORT.CONFIG_CENTER_HTTP' },
|
|
@@ -34,6 +34,7 @@ registerEnvVars({
|
|
|
34
34
|
alert_webhook_system_label: { env: 'ALERT_WEBHOOK_SYSTEM_LABEL', type: 'string', default: '', desc: 'webhook 消息中显示的系统标识,省略时使用 CHAIN_ID' },
|
|
35
35
|
trade_analyze_port: { env: 'TRADE_ANALYZE_PORT', type: 'number', default: 8004, desc: 'analyze 端口' },
|
|
36
36
|
trade_analyze_url: { env: 'TRADE_ANALYZE_URL', type: 'string', default: '', desc: 'analyze URL(旧)' },
|
|
37
|
+
providers_file_path: { env: 'PROVIDERS_FILE_PATH', type: 'string', default: '', desc: '本地 stream-quote providers.json 绝对路径;Provider 增删改同步写入该文件(+ Redis + 广播)' },
|
|
37
38
|
rpc_endpoint: { env: 'RPC_ENDPOINT', type: 'string', default: '', desc: 'RPC HTTP 端点' },
|
|
38
39
|
ws_endpoint: { env: 'WS_ENDPOINT', type: 'string', default: '', desc: 'RPC WebSocket 端点' },
|
|
39
40
|
grpc_endpoint: { env: 'GRPC_ENDPOINT', type: 'string', default: '', desc: 'gRPC 端点' },
|