@backtest-kit/ui 5.6.2 → 5.9.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/build/index.cjs +1036 -134
- package/build/index.mjs +1037 -135
- package/build/modules/frontend/build/3rdparty/ace_1.4.12/ace.js +21338 -0
- package/build/modules/frontend/build/3rdparty/ace_1.4.12/mode-javascript.js +798 -0
- package/build/modules/frontend/build/3rdparty/ace_1.4.12/theme-chrome.js +138 -0
- package/build/modules/frontend/build/3rdparty/ace_1.4.12/theme-twilight.js +116 -0
- package/build/modules/frontend/build/3rdparty/ace_1.4.12/worker-javascript.js +15012 -0
- package/build/modules/frontend/build/3rdparty/typeface-roboto_0.0.75/files/roboto-latin-100.woff +0 -0
- package/build/modules/frontend/build/3rdparty/typeface-roboto_0.0.75/files/roboto-latin-100.woff2 +0 -0
- package/build/modules/frontend/build/3rdparty/typeface-roboto_0.0.75/files/roboto-latin-100italic.woff +0 -0
- package/build/modules/frontend/build/3rdparty/typeface-roboto_0.0.75/files/roboto-latin-100italic.woff2 +0 -0
- package/build/modules/frontend/build/3rdparty/typeface-roboto_0.0.75/files/roboto-latin-300.woff +0 -0
- package/build/modules/frontend/build/3rdparty/typeface-roboto_0.0.75/files/roboto-latin-300.woff2 +0 -0
- package/build/modules/frontend/build/3rdparty/typeface-roboto_0.0.75/files/roboto-latin-300italic.woff +0 -0
- package/build/modules/frontend/build/3rdparty/typeface-roboto_0.0.75/files/roboto-latin-300italic.woff2 +0 -0
- package/build/modules/frontend/build/3rdparty/typeface-roboto_0.0.75/files/roboto-latin-400.woff +0 -0
- package/build/modules/frontend/build/3rdparty/typeface-roboto_0.0.75/files/roboto-latin-400.woff2 +0 -0
- package/build/modules/frontend/build/3rdparty/typeface-roboto_0.0.75/files/roboto-latin-400italic.woff +0 -0
- package/build/modules/frontend/build/3rdparty/typeface-roboto_0.0.75/files/roboto-latin-400italic.woff2 +0 -0
- package/build/modules/frontend/build/3rdparty/typeface-roboto_0.0.75/files/roboto-latin-500.woff +0 -0
- package/build/modules/frontend/build/3rdparty/typeface-roboto_0.0.75/files/roboto-latin-500.woff2 +0 -0
- package/build/modules/frontend/build/3rdparty/typeface-roboto_0.0.75/files/roboto-latin-500italic.woff +0 -0
- package/build/modules/frontend/build/3rdparty/typeface-roboto_0.0.75/files/roboto-latin-500italic.woff2 +0 -0
- package/build/modules/frontend/build/3rdparty/typeface-roboto_0.0.75/files/roboto-latin-700.woff +0 -0
- package/build/modules/frontend/build/3rdparty/typeface-roboto_0.0.75/files/roboto-latin-700.woff2 +0 -0
- package/build/modules/frontend/build/3rdparty/typeface-roboto_0.0.75/files/roboto-latin-700italic.woff +0 -0
- package/build/modules/frontend/build/3rdparty/typeface-roboto_0.0.75/files/roboto-latin-700italic.woff2 +0 -0
- package/build/modules/frontend/build/3rdparty/typeface-roboto_0.0.75/files/roboto-latin-900.woff +0 -0
- package/build/modules/frontend/build/3rdparty/typeface-roboto_0.0.75/files/roboto-latin-900.woff2 +0 -0
- package/build/modules/frontend/build/3rdparty/typeface-roboto_0.0.75/files/roboto-latin-900italic.woff +0 -0
- package/build/modules/frontend/build/3rdparty/typeface-roboto_0.0.75/files/roboto-latin-900italic.woff2 +0 -0
- package/build/modules/frontend/build/3rdparty/typeface-roboto_0.0.75/typeface-roboto.css +156 -0
- package/build/modules/frontend/build/assets/Article-DwCWbgig.js +1 -0
- package/build/modules/frontend/build/assets/{Background-B8kVLoJC.js → Background-BUWczIMa.js} +1 -1
- package/build/modules/frontend/build/assets/Container-DgcBaXwp.js +1 -0
- package/build/modules/frontend/build/assets/IconPhoto-Dg1OJT1g.js +1 -0
- package/build/modules/frontend/build/assets/{KeyboardArrowLeft-NcptneCW.js → KeyboardArrowLeft-DqH7VCRG.js} +1 -1
- package/build/modules/frontend/build/assets/Refresh-ASwi3YWH.js +1 -0
- package/build/modules/frontend/build/assets/emitters-EUI31qkt.js +1 -0
- package/build/modules/frontend/build/assets/hasRouteMatch-B_-PodjM.js +1 -0
- package/build/modules/frontend/build/assets/html2canvas-D67h2MXz.js +1 -0
- package/build/modules/frontend/build/assets/index-BXhzoqHB.js +17 -0
- package/build/modules/frontend/build/assets/index-BbMctGny.js +1 -0
- package/build/modules/frontend/build/assets/index-BjGW-SeZ.js +1560 -0
- package/build/modules/frontend/build/assets/index-CGTWcCfJ.js +1 -0
- package/build/modules/frontend/build/assets/index-CQbPy5z-.js +1 -0
- package/build/modules/frontend/build/assets/index-CYVGtlJR.js +1 -0
- package/build/modules/frontend/build/assets/index-CxqvOyvF.js +1 -0
- package/build/modules/frontend/build/assets/index-DoQ6TdNT.js +1 -0
- package/build/modules/frontend/build/assets/index-Dxunm9la.js +1 -0
- package/build/modules/frontend/build/assets/index-lFLkJBoZ.js +1 -0
- package/build/modules/frontend/build/assets/index-nAktdNIS.js +1 -0
- package/build/modules/frontend/build/assets/{index.es-BkDLGtAB.js → index.es-_Mw9_y9J.js} +2 -2
- package/build/modules/frontend/build/assets/markdownit-DnsUyAuX.js +1 -0
- package/build/modules/frontend/build/index.html +8 -2
- package/package.json +3 -3
- package/types.d.ts +80 -1
- package/build/modules/frontend/build/assets/IconPhoto-yqTcSjsj.js +0 -1
- package/build/modules/frontend/build/assets/Refresh-B-6VzYmL.js +0 -1
- package/build/modules/frontend/build/assets/hasRouteMatch-Cap76DHx.js +0 -1
- package/build/modules/frontend/build/assets/html2canvas-AeHV6o40.js +0 -1
- package/build/modules/frontend/build/assets/index-3FabZvCh.js +0 -1
- package/build/modules/frontend/build/assets/index-BSt5rIe0.js +0 -231
- package/build/modules/frontend/build/assets/index-BfdHWVzz.js +0 -1331
- package/build/modules/frontend/build/assets/index-BjR0gQPx.js +0 -1
- package/build/modules/frontend/build/assets/index-Bov2Mvu5.js +0 -1
- package/build/modules/frontend/build/assets/index-DTb7GKw2.js +0 -1
- package/build/modules/frontend/build/assets/index-eGg7QpVp.js +0 -1
- package/build/modules/frontend/build/assets/index-mEY60b54.js +0 -1
- package/build/modules/frontend/build/assets/markdownit-_uLqTUbF.js +0 -1
package/build/index.mjs
CHANGED
|
@@ -6,9 +6,11 @@ import finalhandler from 'finalhandler';
|
|
|
6
6
|
import serveHandler from 'serve-handler';
|
|
7
7
|
import os from 'os';
|
|
8
8
|
import { createActivator } from 'di-kit';
|
|
9
|
-
import { alignToInterval, Exchange, Notification, Storage, Log,
|
|
9
|
+
import { alignToInterval, Exchange, Backtest, Live, listExchangeSchema, Notification, Storage, Log, lib, Heat, Strategy, Breakeven, Risk, Partial, HighestProfit, Schedule, Performance, Sync, Walker, StorageLive, StorageBacktest } from 'backtest-kit';
|
|
10
10
|
import fs, { readdir, readFile } from 'fs/promises';
|
|
11
11
|
import path, { join, dirname } from 'path';
|
|
12
|
+
import mime from 'mime-types';
|
|
13
|
+
import { createHash } from 'crypto';
|
|
12
14
|
import { createRequire } from 'module';
|
|
13
15
|
import { existsSync } from 'fs';
|
|
14
16
|
|
|
@@ -17,10 +19,10 @@ const CC_WWWROOT_HOST = process.env.CC_WWWROOT_HOST || "0.0.0.0";
|
|
|
17
19
|
const CC_WWWROOT_PORT = parseInt(process.env.CC_WWWROOT_PORT) || 60050;
|
|
18
20
|
const CC_ENABLE_MOCK = !!parseInt(process.env.CC_ENABLE_MOCK) || false;
|
|
19
21
|
|
|
20
|
-
const router$
|
|
22
|
+
const router$b = Router({
|
|
21
23
|
params: true,
|
|
22
24
|
});
|
|
23
|
-
router$
|
|
25
|
+
router$b.get("/api/v1/health/health_check", async (req, res) => {
|
|
24
26
|
const [cpuLoad] = os.loadavg();
|
|
25
27
|
return await micro.send(res, 200, {
|
|
26
28
|
uptime: process.uptime(),
|
|
@@ -69,6 +71,9 @@ const mockServices$1 = {
|
|
|
69
71
|
logMockService: Symbol("logMockService"),
|
|
70
72
|
statusMockService: Symbol("statusMockService"),
|
|
71
73
|
markdownMockService: Symbol("markdownMockService"),
|
|
74
|
+
explorerMockService: Symbol("explorerMockService"),
|
|
75
|
+
signalMockService: Symbol("signalMockService"),
|
|
76
|
+
heatMockService: Symbol("heatMockService"),
|
|
72
77
|
};
|
|
73
78
|
const viewServices$1 = {
|
|
74
79
|
notificationViewService: Symbol("notificationViewService"),
|
|
@@ -77,6 +82,9 @@ const viewServices$1 = {
|
|
|
77
82
|
logViewService: Symbol("logViewService"),
|
|
78
83
|
statusViewService: Symbol("statusViewService"),
|
|
79
84
|
markdownViewService: Symbol("markdownViewService"),
|
|
85
|
+
explorerViewService: Symbol("explorerViewService"),
|
|
86
|
+
signalViewService: Symbol("signalViewService"),
|
|
87
|
+
heatViewService: Symbol("heatViewService"),
|
|
80
88
|
};
|
|
81
89
|
const TYPES = {
|
|
82
90
|
...baseServices$1,
|
|
@@ -145,6 +153,14 @@ class ExchangeService {
|
|
|
145
153
|
exchangeName: dto.exchangeName,
|
|
146
154
|
}, undefined, sDate, eDate);
|
|
147
155
|
};
|
|
156
|
+
this.getLastCandles = async (dto) => {
|
|
157
|
+
this.loggerService.log("exchangeService getLastCandles", {
|
|
158
|
+
dto,
|
|
159
|
+
});
|
|
160
|
+
return await Exchange.getCandles(dto.symbol, dto.interval, dto.limit, {
|
|
161
|
+
exchangeName: dto.exchangeName,
|
|
162
|
+
});
|
|
163
|
+
};
|
|
148
164
|
}
|
|
149
165
|
}
|
|
150
166
|
|
|
@@ -179,9 +195,9 @@ class LoggerService {
|
|
|
179
195
|
}
|
|
180
196
|
}
|
|
181
197
|
|
|
182
|
-
const MOCK_PATH$
|
|
198
|
+
const MOCK_PATH$5 = "./mock/notifications.json";
|
|
183
199
|
const READ_NOTIFICATION_LIST_FN = singleshot(async () => {
|
|
184
|
-
const data = await fs.readFile(MOCK_PATH$
|
|
200
|
+
const data = await fs.readFile(MOCK_PATH$5, "utf-8");
|
|
185
201
|
return JSON.parse(data);
|
|
186
202
|
});
|
|
187
203
|
const DEFAULT_LIMIT$3 = 25;
|
|
@@ -241,9 +257,9 @@ class NotificationMockService {
|
|
|
241
257
|
}
|
|
242
258
|
}
|
|
243
259
|
|
|
244
|
-
const MOCK_PATH$
|
|
260
|
+
const MOCK_PATH$4 = "./mock/db";
|
|
245
261
|
const READ_BACKTEST_STORAGE_FN = singleshot(async () => {
|
|
246
|
-
const dbPath = join(process.cwd(), MOCK_PATH$
|
|
262
|
+
const dbPath = join(process.cwd(), MOCK_PATH$4);
|
|
247
263
|
const files = await readdir(dbPath);
|
|
248
264
|
const signals = [];
|
|
249
265
|
for (const file of files) {
|
|
@@ -278,7 +294,7 @@ class StorageMockService {
|
|
|
278
294
|
}
|
|
279
295
|
}
|
|
280
296
|
|
|
281
|
-
const
|
|
297
|
+
const HISTORY_LAST_CANDLES_LIMIT$1 = 200;
|
|
282
298
|
class ExchangeMockService {
|
|
283
299
|
constructor() {
|
|
284
300
|
this.loggerService = inject(TYPES.loggerService);
|
|
@@ -311,22 +327,56 @@ class ExchangeMockService {
|
|
|
311
327
|
if (!signal) {
|
|
312
328
|
throw new Error(`Signal with ID ${signalId} not found`);
|
|
313
329
|
}
|
|
314
|
-
const { pendingAt, scheduledAt,
|
|
330
|
+
const { pendingAt, scheduledAt, updatedAt } = signal;
|
|
315
331
|
const eventAt = pendingAt || scheduledAt;
|
|
316
332
|
return await this.exchangeService.getRangeCandles({
|
|
317
333
|
symbol: signal.symbol,
|
|
318
334
|
exchangeName: signal.exchangeName,
|
|
319
335
|
signalStartTime: eventAt,
|
|
320
|
-
signalStopTime:
|
|
336
|
+
signalStopTime: alignToInterval(new Date(updatedAt), interval).getTime(),
|
|
337
|
+
interval,
|
|
338
|
+
});
|
|
339
|
+
};
|
|
340
|
+
this.getLastCandles = async (symbol, interval) => {
|
|
341
|
+
this.loggerService.log("exchangeMockService getLastCandles", {
|
|
342
|
+
symbol,
|
|
321
343
|
interval,
|
|
322
344
|
});
|
|
345
|
+
const [backtestItem] = await Backtest.list();
|
|
346
|
+
const [liveItem] = await Live.list();
|
|
347
|
+
const [exchangeItem] = await listExchangeSchema();
|
|
348
|
+
if (backtestItem) {
|
|
349
|
+
return await this.exchangeService.getLastCandles({
|
|
350
|
+
symbol,
|
|
351
|
+
limit: HISTORY_LAST_CANDLES_LIMIT$1,
|
|
352
|
+
exchangeName: backtestItem.exchangeName,
|
|
353
|
+
interval,
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
if (liveItem) {
|
|
357
|
+
return await this.exchangeService.getLastCandles({
|
|
358
|
+
symbol,
|
|
359
|
+
limit: HISTORY_LAST_CANDLES_LIMIT$1,
|
|
360
|
+
exchangeName: liveItem.exchangeName,
|
|
361
|
+
interval,
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
if (exchangeItem) {
|
|
365
|
+
return await this.exchangeService.getLastCandles({
|
|
366
|
+
symbol,
|
|
367
|
+
limit: HISTORY_LAST_CANDLES_LIMIT$1,
|
|
368
|
+
exchangeName: exchangeItem.exchangeName,
|
|
369
|
+
interval,
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
throw new Error(`exchangeMockService getLastCandles no pending strategy symbol=${symbol} interval=${interval}`);
|
|
323
373
|
};
|
|
324
374
|
}
|
|
325
375
|
}
|
|
326
376
|
|
|
327
|
-
const MOCK_PATH$
|
|
377
|
+
const MOCK_PATH$3 = "./mock/logs.json";
|
|
328
378
|
const READ_LOG_LIST_FN = singleshot(async () => {
|
|
329
|
-
const data = await fs.readFile(MOCK_PATH$
|
|
379
|
+
const data = await fs.readFile(MOCK_PATH$3, "utf-8");
|
|
330
380
|
return JSON.parse(data);
|
|
331
381
|
});
|
|
332
382
|
const DEFAULT_LIMIT$2 = 25;
|
|
@@ -374,14 +424,24 @@ class LogMockService {
|
|
|
374
424
|
}
|
|
375
425
|
}
|
|
376
426
|
|
|
377
|
-
const MOCK_PATH = "./mock/status.json";
|
|
427
|
+
const MOCK_PATH$2 = "./mock/status.json";
|
|
428
|
+
const MOCK_INFO_PATH = "./mock/status-info.json";
|
|
378
429
|
const READ_STATUS_LIST_FN = singleshot(async () => {
|
|
379
|
-
const data = await fs.readFile(MOCK_PATH, "utf-8");
|
|
430
|
+
const data = await fs.readFile(MOCK_PATH$2, "utf-8");
|
|
431
|
+
return JSON.parse(data);
|
|
432
|
+
});
|
|
433
|
+
const READ_STATUS_INFO_FN = singleshot(async () => {
|
|
434
|
+
const data = await fs.readFile(MOCK_INFO_PATH, "utf-8");
|
|
380
435
|
return JSON.parse(data);
|
|
381
436
|
});
|
|
382
437
|
class StatusMockService {
|
|
383
438
|
constructor() {
|
|
384
439
|
this.loggerService = inject(TYPES.loggerService);
|
|
440
|
+
this.signalMockService = inject(TYPES.signalMockService);
|
|
441
|
+
this.getStatusInfo = async () => {
|
|
442
|
+
this.loggerService.log("statusMockService getStatusInfo");
|
|
443
|
+
return await READ_STATUS_INFO_FN();
|
|
444
|
+
};
|
|
385
445
|
this.getStatusList = async () => {
|
|
386
446
|
this.loggerService.log("statusMockService getStatusList");
|
|
387
447
|
const list = await READ_STATUS_LIST_FN();
|
|
@@ -401,33 +461,36 @@ class StatusMockService {
|
|
|
401
461
|
this.getStatusOne = async (id) => {
|
|
402
462
|
this.loggerService.log("statusMockService getStatusOne", { id });
|
|
403
463
|
const list = await READ_STATUS_LIST_FN();
|
|
404
|
-
const
|
|
405
|
-
if (!
|
|
464
|
+
const status = list.find((s) => s.id === id);
|
|
465
|
+
if (!status) {
|
|
406
466
|
return null;
|
|
407
467
|
}
|
|
408
|
-
const
|
|
468
|
+
const updatedAt = await this.signalMockService.getLastUpdateTimestamp(status.signalId);
|
|
469
|
+
const positionEntries = status._entry ?? [];
|
|
409
470
|
const positionLevels = positionEntries.map((e) => e.price);
|
|
410
|
-
const positionPartials =
|
|
471
|
+
const positionPartials = status._partial ?? [];
|
|
411
472
|
return {
|
|
412
|
-
signalId:
|
|
413
|
-
position:
|
|
414
|
-
symbol:
|
|
415
|
-
exchangeName:
|
|
416
|
-
strategyName:
|
|
417
|
-
totalEntries:
|
|
418
|
-
totalPartials:
|
|
419
|
-
originalPriceStopLoss:
|
|
420
|
-
originalPriceTakeProfit:
|
|
421
|
-
originalPriceOpen:
|
|
422
|
-
priceOpen:
|
|
423
|
-
priceTakeProfit:
|
|
424
|
-
priceStopLoss:
|
|
425
|
-
pnlPercentage:
|
|
426
|
-
pnlCost:
|
|
427
|
-
pnlEntries:
|
|
428
|
-
partialExecuted:
|
|
429
|
-
minuteEstimatedTime:
|
|
430
|
-
pendingAt:
|
|
473
|
+
signalId: status.signalId,
|
|
474
|
+
position: status.position,
|
|
475
|
+
symbol: status.symbol,
|
|
476
|
+
exchangeName: status.exchangeName,
|
|
477
|
+
strategyName: status.strategyName,
|
|
478
|
+
totalEntries: status.totalEntries,
|
|
479
|
+
totalPartials: status.totalPartials,
|
|
480
|
+
originalPriceStopLoss: status.originalPriceStopLoss,
|
|
481
|
+
originalPriceTakeProfit: status.originalPriceTakeProfit,
|
|
482
|
+
originalPriceOpen: status.originalPriceOpen,
|
|
483
|
+
priceOpen: status.priceOpen,
|
|
484
|
+
priceTakeProfit: status.priceTakeProfit,
|
|
485
|
+
priceStopLoss: status.priceStopLoss,
|
|
486
|
+
pnlPercentage: status.pnl.pnlPercentage,
|
|
487
|
+
pnlCost: status.pnl.pnlCost,
|
|
488
|
+
pnlEntries: status.pnl.pnlEntries,
|
|
489
|
+
partialExecuted: status.partialExecuted,
|
|
490
|
+
minuteEstimatedTime: status.minuteEstimatedTime,
|
|
491
|
+
pendingAt: status.pendingAt,
|
|
492
|
+
timestamp: status.timestamp,
|
|
493
|
+
updatedAt,
|
|
431
494
|
positionLevels,
|
|
432
495
|
positionEntries,
|
|
433
496
|
positionPartials,
|
|
@@ -577,6 +640,127 @@ class MarkdownMockService {
|
|
|
577
640
|
}
|
|
578
641
|
}
|
|
579
642
|
|
|
643
|
+
const deepFlat = (arr) => {
|
|
644
|
+
const result = [];
|
|
645
|
+
const seen = new Set();
|
|
646
|
+
const process = (entries = []) => entries.forEach((entry) => {
|
|
647
|
+
if (seen.has(entry)) {
|
|
648
|
+
return;
|
|
649
|
+
}
|
|
650
|
+
seen.add(entry);
|
|
651
|
+
if (entry.type === "directory") {
|
|
652
|
+
process(entry.nodes);
|
|
653
|
+
}
|
|
654
|
+
result.push(entry);
|
|
655
|
+
});
|
|
656
|
+
process(arr);
|
|
657
|
+
return result;
|
|
658
|
+
};
|
|
659
|
+
const MOCK_PATH$1 = "./mock/explorer.json";
|
|
660
|
+
const READ_EXPLORER_TREE_FN = singleshot(async () => {
|
|
661
|
+
const data = await fs.readFile(MOCK_PATH$1, "utf-8");
|
|
662
|
+
return JSON.parse(data);
|
|
663
|
+
});
|
|
664
|
+
const READ_EXPLORER_INDEX_FN = singleshot(async () => {
|
|
665
|
+
const tree = await READ_EXPLORER_TREE_FN();
|
|
666
|
+
const treeList = deepFlat(tree);
|
|
667
|
+
if (treeList.length === 0) {
|
|
668
|
+
return {};
|
|
669
|
+
}
|
|
670
|
+
return treeList.reduce((acm, cur) => {
|
|
671
|
+
if (cur.type === "file" && "content" in cur) {
|
|
672
|
+
return { ...acm, [cur.path]: cur };
|
|
673
|
+
}
|
|
674
|
+
return acm;
|
|
675
|
+
}, {});
|
|
676
|
+
});
|
|
677
|
+
class ExplorerMockService {
|
|
678
|
+
constructor() {
|
|
679
|
+
this.loggerService = inject(TYPES.loggerService);
|
|
680
|
+
this.getNode = async (nodePath) => {
|
|
681
|
+
this.loggerService.log("explorerMockService getNode", {
|
|
682
|
+
nodePath,
|
|
683
|
+
});
|
|
684
|
+
const index = await READ_EXPLORER_INDEX_FN();
|
|
685
|
+
return index[nodePath]?.content ?? "";
|
|
686
|
+
};
|
|
687
|
+
this.getTree = async () => {
|
|
688
|
+
this.loggerService.log("explorerMockService getTree");
|
|
689
|
+
return await READ_EXPLORER_TREE_FN();
|
|
690
|
+
};
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
const MOCK_PATH = "./mock/db";
|
|
695
|
+
const MOCK_SIGNAL_PATH = "./mock/signal.json";
|
|
696
|
+
const READ_SIGNAL_STORAGE_FN = singleshot(async () => {
|
|
697
|
+
const dbPath = join(process.cwd(), MOCK_PATH);
|
|
698
|
+
const files = await readdir(dbPath);
|
|
699
|
+
const signals = [];
|
|
700
|
+
for (const file of files) {
|
|
701
|
+
if (!file.endsWith(".json")) {
|
|
702
|
+
continue;
|
|
703
|
+
}
|
|
704
|
+
const filePath = join(dbPath, file);
|
|
705
|
+
signals.push(JSON.parse(await readFile(filePath, "utf-8")));
|
|
706
|
+
}
|
|
707
|
+
return signals;
|
|
708
|
+
});
|
|
709
|
+
const READ_PENDING_SIGNAL_FN = singleshot(async () => {
|
|
710
|
+
const filePath = join(process.cwd(), MOCK_SIGNAL_PATH);
|
|
711
|
+
return JSON.parse(await readFile(filePath, "utf-8"));
|
|
712
|
+
});
|
|
713
|
+
class SignalMockService {
|
|
714
|
+
constructor() {
|
|
715
|
+
this.loggerService = inject(TYPES.loggerService);
|
|
716
|
+
this.getLastUpdateTimestamp = async (signalId) => {
|
|
717
|
+
this.loggerService.log("signalMockService getLastUpdateTimestamp", {
|
|
718
|
+
signalId,
|
|
719
|
+
});
|
|
720
|
+
const signalList = await READ_SIGNAL_STORAGE_FN();
|
|
721
|
+
const signalMap = new Map(signalList.map((signal) => [signal.id, signal]));
|
|
722
|
+
const signal = signalMap.get(signalId);
|
|
723
|
+
if (!signal) {
|
|
724
|
+
throw new Error(`SignalMockService getLastUpdateTimestamp signal not found signalId=${signalId}`);
|
|
725
|
+
}
|
|
726
|
+
return signal.updatedAt;
|
|
727
|
+
};
|
|
728
|
+
this.getPendingSignal = async (symbol) => {
|
|
729
|
+
this.loggerService.log("signalMockService getPendingSignal", {
|
|
730
|
+
symbol,
|
|
731
|
+
});
|
|
732
|
+
const signal = await READ_PENDING_SIGNAL_FN();
|
|
733
|
+
if (signal.symbol !== symbol) {
|
|
734
|
+
return null;
|
|
735
|
+
}
|
|
736
|
+
return signal;
|
|
737
|
+
};
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
const MOCK_DATA_PATH = "./mock/heat.json";
|
|
742
|
+
const MOCK_REPORT_PATH = "./mock/heat-report.md";
|
|
743
|
+
const READ_HEAT_DATA_FN = singleshot(async () => {
|
|
744
|
+
const data = await fs.readFile(MOCK_DATA_PATH, "utf-8");
|
|
745
|
+
return JSON.parse(data);
|
|
746
|
+
});
|
|
747
|
+
const READ_HEAT_REPORT_FN = singleshot(async () => {
|
|
748
|
+
return await fs.readFile(MOCK_REPORT_PATH, "utf-8");
|
|
749
|
+
});
|
|
750
|
+
class HeatMockService {
|
|
751
|
+
constructor() {
|
|
752
|
+
this.loggerService = inject(TYPES.loggerService);
|
|
753
|
+
this.getStrategyHeatData = async () => {
|
|
754
|
+
this.loggerService.log("heatMockService getStrategyHeatData");
|
|
755
|
+
return await READ_HEAT_DATA_FN();
|
|
756
|
+
};
|
|
757
|
+
this.getStrategyHeatReport = async () => {
|
|
758
|
+
this.loggerService.log("heatMockService getStrategyHeatReport");
|
|
759
|
+
return await READ_HEAT_REPORT_FN();
|
|
760
|
+
};
|
|
761
|
+
}
|
|
762
|
+
}
|
|
763
|
+
|
|
580
764
|
const DEFAULT_LIMIT$1 = 25;
|
|
581
765
|
const DEFAULT_OFFSET$1 = 0;
|
|
582
766
|
const CREATE_FILTER_LIST_FN$1 = (filterData) => Object.keys(filterData).map((key) => (row) => new RegExp(filterData[key], "i").test(row[key]));
|
|
@@ -721,13 +905,14 @@ class StorageViewService {
|
|
|
721
905
|
}
|
|
722
906
|
}
|
|
723
907
|
|
|
724
|
-
const
|
|
908
|
+
const HISTORY_LAST_CANDLES_LIMIT = 200;
|
|
725
909
|
class ExchangeViewService {
|
|
726
910
|
constructor() {
|
|
727
911
|
this.loggerService = inject(TYPES.loggerService);
|
|
728
912
|
this.storageViewService = inject(TYPES.storageViewService);
|
|
729
913
|
this.exchangeService = inject(TYPES.exchangeService);
|
|
730
914
|
this.exchangeMockService = inject(TYPES.exchangeMockService);
|
|
915
|
+
this.signalViewService = inject(TYPES.signalViewService);
|
|
731
916
|
this.getSignalCandles = async (signalId, interval) => {
|
|
732
917
|
this.loggerService.log("exchangeViewService getCandles", {
|
|
733
918
|
signalId,
|
|
@@ -761,15 +946,53 @@ class ExchangeViewService {
|
|
|
761
946
|
if (!signal) {
|
|
762
947
|
throw new Error(`Signal with ID ${signalId} not found`);
|
|
763
948
|
}
|
|
764
|
-
const { pendingAt, scheduledAt
|
|
949
|
+
const { pendingAt, scheduledAt } = signal;
|
|
765
950
|
const eventAt = pendingAt || scheduledAt;
|
|
951
|
+
const updatedAt = await this.signalViewService.getLastUpdateTimestamp(signalId);
|
|
766
952
|
return await this.exchangeService.getRangeCandles({
|
|
767
953
|
symbol: signal.symbol,
|
|
768
954
|
exchangeName: signal.exchangeName,
|
|
769
955
|
signalStartTime: eventAt,
|
|
770
|
-
signalStopTime:
|
|
956
|
+
signalStopTime: alignToInterval(new Date(updatedAt), interval).getTime(),
|
|
957
|
+
interval,
|
|
958
|
+
});
|
|
959
|
+
};
|
|
960
|
+
this.getLastCandles = async (symbol, interval) => {
|
|
961
|
+
this.loggerService.log("exchangeViewService getLastCandles", {
|
|
962
|
+
symbol,
|
|
771
963
|
interval,
|
|
772
964
|
});
|
|
965
|
+
if (CC_ENABLE_MOCK) {
|
|
966
|
+
return await this.exchangeMockService.getLastCandles(symbol, interval);
|
|
967
|
+
}
|
|
968
|
+
const [backtestItem] = await Backtest.list();
|
|
969
|
+
const [liveItem] = await Live.list();
|
|
970
|
+
const [exchangeItem] = await listExchangeSchema();
|
|
971
|
+
if (backtestItem) {
|
|
972
|
+
return await this.exchangeService.getLastCandles({
|
|
973
|
+
symbol,
|
|
974
|
+
limit: HISTORY_LAST_CANDLES_LIMIT,
|
|
975
|
+
exchangeName: backtestItem.exchangeName,
|
|
976
|
+
interval,
|
|
977
|
+
});
|
|
978
|
+
}
|
|
979
|
+
if (liveItem) {
|
|
980
|
+
return await this.exchangeService.getLastCandles({
|
|
981
|
+
symbol,
|
|
982
|
+
limit: HISTORY_LAST_CANDLES_LIMIT,
|
|
983
|
+
exchangeName: liveItem.exchangeName,
|
|
984
|
+
interval,
|
|
985
|
+
});
|
|
986
|
+
}
|
|
987
|
+
if (exchangeItem) {
|
|
988
|
+
return await this.exchangeService.getLastCandles({
|
|
989
|
+
symbol,
|
|
990
|
+
limit: HISTORY_LAST_CANDLES_LIMIT,
|
|
991
|
+
exchangeName: exchangeItem.exchangeName,
|
|
992
|
+
interval,
|
|
993
|
+
});
|
|
994
|
+
}
|
|
995
|
+
throw new Error(`exchangeViewService getLastCandles no pending strategy symbol=${symbol} interval=${interval}`);
|
|
773
996
|
};
|
|
774
997
|
}
|
|
775
998
|
}
|
|
@@ -833,6 +1056,7 @@ class StatusViewService {
|
|
|
833
1056
|
constructor() {
|
|
834
1057
|
this.loggerService = inject(TYPES.loggerService);
|
|
835
1058
|
this.statusMockService = inject(TYPES.statusMockService);
|
|
1059
|
+
this.signalViewService = inject(TYPES.signalViewService);
|
|
836
1060
|
this.getStatusList = async () => {
|
|
837
1061
|
this.loggerService.log("statusViewService getStatusList");
|
|
838
1062
|
if (CC_ENABLE_MOCK) {
|
|
@@ -895,6 +1119,12 @@ class StatusViewService {
|
|
|
895
1119
|
if (!positionPartials) {
|
|
896
1120
|
return null;
|
|
897
1121
|
}
|
|
1122
|
+
const timestamp = await lib.timeMetaService.getTimestamp(pendingSignal.symbol, {
|
|
1123
|
+
strategyName: pendingSignal.strategyName,
|
|
1124
|
+
exchangeName: pendingSignal.exchangeName,
|
|
1125
|
+
frameName: pendingSignal.frameName,
|
|
1126
|
+
}, false);
|
|
1127
|
+
const updatedAt = await this.signalViewService.getLastUpdateTimestamp(pendingSignal.id);
|
|
898
1128
|
return {
|
|
899
1129
|
signalId: pendingSignal.id,
|
|
900
1130
|
position: pendingSignal.position,
|
|
@@ -915,11 +1145,80 @@ class StatusViewService {
|
|
|
915
1145
|
partialExecuted: pendingSignal.partialExecuted,
|
|
916
1146
|
pendingAt: pendingSignal.pendingAt,
|
|
917
1147
|
minuteEstimatedTime: pendingSignal.minuteEstimatedTime,
|
|
1148
|
+
timestamp,
|
|
1149
|
+
updatedAt,
|
|
918
1150
|
positionEntries,
|
|
919
1151
|
positionLevels,
|
|
920
1152
|
positionPartials,
|
|
921
1153
|
};
|
|
922
1154
|
};
|
|
1155
|
+
this.getStatusInfo = async () => {
|
|
1156
|
+
this.loggerService.log("statusViewService getStatusInfo");
|
|
1157
|
+
if (CC_ENABLE_MOCK) {
|
|
1158
|
+
return this.statusMockService.getStatusInfo();
|
|
1159
|
+
}
|
|
1160
|
+
{
|
|
1161
|
+
const [backtestTarget = null] = await Backtest.list();
|
|
1162
|
+
if (backtestTarget) {
|
|
1163
|
+
const currentHeat = await Heat.getData({
|
|
1164
|
+
strategyName: backtestTarget.strategyName,
|
|
1165
|
+
exchangeName: backtestTarget.exchangeName,
|
|
1166
|
+
frameName: backtestTarget.frameName,
|
|
1167
|
+
});
|
|
1168
|
+
return {
|
|
1169
|
+
context: {
|
|
1170
|
+
strategyName: backtestTarget.strategyName,
|
|
1171
|
+
exchangeName: backtestTarget.exchangeName,
|
|
1172
|
+
frameName: backtestTarget.frameName,
|
|
1173
|
+
},
|
|
1174
|
+
portfolioTotalPnl: currentHeat.portfolioTotalPnl,
|
|
1175
|
+
portfolioSharpeRatio: currentHeat.portfolioSharpeRatio,
|
|
1176
|
+
portfolioTotalTrades: currentHeat.portfolioTotalTrades,
|
|
1177
|
+
symbols: currentHeat.symbols.map(({ symbol, totalPnl, winRate, profitFactor, maxDrawdown, expectancy, totalTrades }) => ({
|
|
1178
|
+
symbol,
|
|
1179
|
+
totalPnl,
|
|
1180
|
+
winRate,
|
|
1181
|
+
profitFactor,
|
|
1182
|
+
maxDrawdown,
|
|
1183
|
+
expectancy,
|
|
1184
|
+
totalTrades,
|
|
1185
|
+
})),
|
|
1186
|
+
backtest: true,
|
|
1187
|
+
};
|
|
1188
|
+
}
|
|
1189
|
+
}
|
|
1190
|
+
{
|
|
1191
|
+
const [liveTarget = null] = await Live.list();
|
|
1192
|
+
if (liveTarget) {
|
|
1193
|
+
const currentHeat = await Heat.getData({
|
|
1194
|
+
strategyName: liveTarget.strategyName,
|
|
1195
|
+
exchangeName: liveTarget.exchangeName,
|
|
1196
|
+
frameName: "",
|
|
1197
|
+
});
|
|
1198
|
+
return {
|
|
1199
|
+
context: {
|
|
1200
|
+
strategyName: liveTarget.strategyName,
|
|
1201
|
+
exchangeName: liveTarget.exchangeName,
|
|
1202
|
+
frameName: "",
|
|
1203
|
+
},
|
|
1204
|
+
portfolioTotalPnl: currentHeat.portfolioTotalPnl,
|
|
1205
|
+
portfolioSharpeRatio: currentHeat.portfolioSharpeRatio,
|
|
1206
|
+
portfolioTotalTrades: currentHeat.portfolioTotalTrades,
|
|
1207
|
+
symbols: currentHeat.symbols.map(({ symbol, totalPnl, winRate, profitFactor, maxDrawdown, expectancy, totalTrades }) => ({
|
|
1208
|
+
symbol,
|
|
1209
|
+
totalPnl,
|
|
1210
|
+
winRate,
|
|
1211
|
+
profitFactor,
|
|
1212
|
+
maxDrawdown,
|
|
1213
|
+
expectancy,
|
|
1214
|
+
totalTrades,
|
|
1215
|
+
})),
|
|
1216
|
+
backtest: false,
|
|
1217
|
+
};
|
|
1218
|
+
}
|
|
1219
|
+
}
|
|
1220
|
+
return null;
|
|
1221
|
+
};
|
|
923
1222
|
}
|
|
924
1223
|
}
|
|
925
1224
|
|
|
@@ -1110,6 +1409,185 @@ class MarkdownViewService {
|
|
|
1110
1409
|
}
|
|
1111
1410
|
}
|
|
1112
1411
|
|
|
1412
|
+
const pathId = (p) => createHash("sha1").update(p).digest("hex").slice(0, 16);
|
|
1413
|
+
const buildTree = async (dir, visited) => {
|
|
1414
|
+
const realDir = await fs.realpath(dir);
|
|
1415
|
+
if (visited.has(realDir)) {
|
|
1416
|
+
return [];
|
|
1417
|
+
}
|
|
1418
|
+
visited.add(realDir);
|
|
1419
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
1420
|
+
const nodes = [];
|
|
1421
|
+
for (const entry of entries) {
|
|
1422
|
+
const childPath = path.join(dir, entry.name);
|
|
1423
|
+
const childRelPath = path.relative(process.cwd(), childPath).replace(/\\/g, "/");
|
|
1424
|
+
if (entry.isDirectory()) {
|
|
1425
|
+
nodes.push({
|
|
1426
|
+
id: pathId(childRelPath),
|
|
1427
|
+
path: childRelPath,
|
|
1428
|
+
label: entry.name,
|
|
1429
|
+
type: "directory",
|
|
1430
|
+
nodes: await buildTree(childPath, visited),
|
|
1431
|
+
});
|
|
1432
|
+
}
|
|
1433
|
+
else {
|
|
1434
|
+
nodes.push({
|
|
1435
|
+
id: pathId(childRelPath),
|
|
1436
|
+
path: childRelPath,
|
|
1437
|
+
label: entry.name,
|
|
1438
|
+
type: "file",
|
|
1439
|
+
mimeType: mime.lookup(entry.name) || "application/octet-stream",
|
|
1440
|
+
});
|
|
1441
|
+
}
|
|
1442
|
+
}
|
|
1443
|
+
return nodes;
|
|
1444
|
+
};
|
|
1445
|
+
class ExplorerViewService {
|
|
1446
|
+
constructor() {
|
|
1447
|
+
this.loggerService = inject(TYPES.loggerService);
|
|
1448
|
+
this.explorerMockService = inject(TYPES.explorerMockService);
|
|
1449
|
+
this.getDir = singleshot(async () => {
|
|
1450
|
+
this.loggerService.log("explorerViewService getDir");
|
|
1451
|
+
const dir = path.join(process.cwd(), "dump");
|
|
1452
|
+
await fs.mkdir(dir, { recursive: true });
|
|
1453
|
+
return dir;
|
|
1454
|
+
});
|
|
1455
|
+
this.getNode = async (nodePath) => {
|
|
1456
|
+
this.loggerService.log("explorerViewService getNode", {
|
|
1457
|
+
nodePath,
|
|
1458
|
+
});
|
|
1459
|
+
if (CC_ENABLE_MOCK) {
|
|
1460
|
+
return await this.explorerMockService.getNode(nodePath);
|
|
1461
|
+
}
|
|
1462
|
+
const dir = await this.getDir();
|
|
1463
|
+
const absPath = path.resolve(process.cwd(), nodePath);
|
|
1464
|
+
if (!absPath.startsWith(dir + path.sep) && !absPath.startsWith(dir + "/") && absPath !== dir) {
|
|
1465
|
+
throw new Error(`Path is outside of dump dir: ${nodePath}`);
|
|
1466
|
+
}
|
|
1467
|
+
return await fs.readFile(absPath, "utf-8");
|
|
1468
|
+
};
|
|
1469
|
+
this.getTree = async () => {
|
|
1470
|
+
this.loggerService.log("explorerViewService getTree");
|
|
1471
|
+
if (CC_ENABLE_MOCK) {
|
|
1472
|
+
return await this.explorerMockService.getTree();
|
|
1473
|
+
}
|
|
1474
|
+
const dir = await this.getDir();
|
|
1475
|
+
const root = path.relative(process.cwd(), dir).replace(/\\/g, "/");
|
|
1476
|
+
const rootNode = {
|
|
1477
|
+
id: pathId(root),
|
|
1478
|
+
path: root,
|
|
1479
|
+
label: path.basename(root),
|
|
1480
|
+
type: "directory",
|
|
1481
|
+
nodes: await buildTree(dir, new Set([path.join(dir, "data")])),
|
|
1482
|
+
};
|
|
1483
|
+
return [rootNode];
|
|
1484
|
+
};
|
|
1485
|
+
}
|
|
1486
|
+
}
|
|
1487
|
+
|
|
1488
|
+
class SignalViewService {
|
|
1489
|
+
constructor() {
|
|
1490
|
+
this.loggerService = inject(TYPES.loggerService);
|
|
1491
|
+
this.signalMockService = inject(TYPES.signalMockService);
|
|
1492
|
+
this.getLastUpdateTimestamp = async (signalId) => {
|
|
1493
|
+
this.loggerService.log("signalViewService getLastUpdateTimestamp", {
|
|
1494
|
+
signalId,
|
|
1495
|
+
});
|
|
1496
|
+
if (CC_ENABLE_MOCK) {
|
|
1497
|
+
return await this.signalMockService.getLastUpdateTimestamp(signalId);
|
|
1498
|
+
}
|
|
1499
|
+
{
|
|
1500
|
+
const liveSignal = await StorageLive.findById(signalId);
|
|
1501
|
+
if (liveSignal) {
|
|
1502
|
+
return liveSignal.updatedAt;
|
|
1503
|
+
}
|
|
1504
|
+
}
|
|
1505
|
+
{
|
|
1506
|
+
const backtestSignal = await StorageBacktest.findById(signalId);
|
|
1507
|
+
if (backtestSignal) {
|
|
1508
|
+
return backtestSignal.updatedAt;
|
|
1509
|
+
}
|
|
1510
|
+
}
|
|
1511
|
+
throw new Error(`SignalViewService getLastUpdateTimestamp signal not found signalId=${signalId}`);
|
|
1512
|
+
};
|
|
1513
|
+
this.getPendingSignal = async (symbol) => {
|
|
1514
|
+
this.loggerService.log("signalViewService getPendingSignal", {
|
|
1515
|
+
symbol,
|
|
1516
|
+
});
|
|
1517
|
+
if (CC_ENABLE_MOCK) {
|
|
1518
|
+
return await this.signalMockService.getPendingSignal(symbol);
|
|
1519
|
+
}
|
|
1520
|
+
{
|
|
1521
|
+
const liveList = await Live.list();
|
|
1522
|
+
const liveTarget = liveList.find((live) => live.symbol === symbol);
|
|
1523
|
+
if (liveTarget) {
|
|
1524
|
+
const currentPrice = await Exchange.getAveragePrice(symbol, {
|
|
1525
|
+
exchangeName: liveTarget.exchangeName,
|
|
1526
|
+
});
|
|
1527
|
+
return await Live.getPendingSignal(symbol, currentPrice, {
|
|
1528
|
+
strategyName: liveTarget.strategyName,
|
|
1529
|
+
exchangeName: liveTarget.exchangeName,
|
|
1530
|
+
});
|
|
1531
|
+
}
|
|
1532
|
+
}
|
|
1533
|
+
return null;
|
|
1534
|
+
};
|
|
1535
|
+
}
|
|
1536
|
+
}
|
|
1537
|
+
|
|
1538
|
+
class HeatViewService {
|
|
1539
|
+
constructor() {
|
|
1540
|
+
this.loggerService = inject(TYPES.loggerService);
|
|
1541
|
+
this.heatMockService = inject(TYPES.heatMockService);
|
|
1542
|
+
this.getStrategyHeatData = async () => {
|
|
1543
|
+
this.loggerService.log("heatViewService getStrategyHeatData");
|
|
1544
|
+
if (CC_ENABLE_MOCK) {
|
|
1545
|
+
return await this.heatMockService.getStrategyHeatData();
|
|
1546
|
+
}
|
|
1547
|
+
const [backtestItem] = await Backtest.list();
|
|
1548
|
+
const [liveItem] = await Live.list();
|
|
1549
|
+
if (backtestItem) {
|
|
1550
|
+
return await Heat.getData({
|
|
1551
|
+
strategyName: backtestItem.strategyName,
|
|
1552
|
+
exchangeName: backtestItem.exchangeName,
|
|
1553
|
+
frameName: backtestItem.frameName,
|
|
1554
|
+
});
|
|
1555
|
+
}
|
|
1556
|
+
if (liveItem) {
|
|
1557
|
+
return await Heat.getData({
|
|
1558
|
+
strategyName: liveItem.strategyName,
|
|
1559
|
+
exchangeName: liveItem.exchangeName,
|
|
1560
|
+
frameName: "",
|
|
1561
|
+
});
|
|
1562
|
+
}
|
|
1563
|
+
return null;
|
|
1564
|
+
};
|
|
1565
|
+
this.getStrategyHeatReport = async () => {
|
|
1566
|
+
this.loggerService.log("heatViewService getStrategyHeatReport");
|
|
1567
|
+
if (CC_ENABLE_MOCK) {
|
|
1568
|
+
return await this.heatMockService.getStrategyHeatReport();
|
|
1569
|
+
}
|
|
1570
|
+
const [backtestItem] = await Backtest.list();
|
|
1571
|
+
const [liveItem] = await Live.list();
|
|
1572
|
+
if (backtestItem) {
|
|
1573
|
+
return await Heat.getReport({
|
|
1574
|
+
strategyName: backtestItem.strategyName,
|
|
1575
|
+
exchangeName: backtestItem.exchangeName,
|
|
1576
|
+
frameName: backtestItem.frameName,
|
|
1577
|
+
});
|
|
1578
|
+
}
|
|
1579
|
+
if (liveItem) {
|
|
1580
|
+
return await Heat.getReport({
|
|
1581
|
+
strategyName: liveItem.strategyName,
|
|
1582
|
+
exchangeName: liveItem.exchangeName,
|
|
1583
|
+
frameName: "",
|
|
1584
|
+
});
|
|
1585
|
+
}
|
|
1586
|
+
return null;
|
|
1587
|
+
};
|
|
1588
|
+
}
|
|
1589
|
+
}
|
|
1590
|
+
|
|
1113
1591
|
const symbol_list = [
|
|
1114
1592
|
{
|
|
1115
1593
|
icon: "/icon/btc.png",
|
|
@@ -1306,6 +1784,9 @@ class LiveMetaService {
|
|
|
1306
1784
|
provide(TYPES.logMockService, () => new LogMockService());
|
|
1307
1785
|
provide(TYPES.statusMockService, () => new StatusMockService());
|
|
1308
1786
|
provide(TYPES.markdownMockService, () => new MarkdownMockService());
|
|
1787
|
+
provide(TYPES.explorerMockService, () => new ExplorerMockService());
|
|
1788
|
+
provide(TYPES.signalMockService, () => new SignalMockService());
|
|
1789
|
+
provide(TYPES.heatMockService, () => new HeatMockService());
|
|
1309
1790
|
}
|
|
1310
1791
|
{
|
|
1311
1792
|
provide(TYPES.notificationViewService, () => new NotificationViewService());
|
|
@@ -1314,6 +1795,9 @@ class LiveMetaService {
|
|
|
1314
1795
|
provide(TYPES.logViewService, () => new LogViewService());
|
|
1315
1796
|
provide(TYPES.statusViewService, () => new StatusViewService());
|
|
1316
1797
|
provide(TYPES.markdownViewService, () => new MarkdownViewService());
|
|
1798
|
+
provide(TYPES.explorerViewService, () => new ExplorerViewService());
|
|
1799
|
+
provide(TYPES.signalViewService, () => new SignalViewService());
|
|
1800
|
+
provide(TYPES.heatViewService, () => new HeatViewService());
|
|
1317
1801
|
}
|
|
1318
1802
|
|
|
1319
1803
|
const baseServices = {
|
|
@@ -1336,6 +1820,9 @@ const mockServices = {
|
|
|
1336
1820
|
logMockService: inject(TYPES.logMockService),
|
|
1337
1821
|
statusMockService: inject(TYPES.statusMockService),
|
|
1338
1822
|
markdownMockService: inject(TYPES.markdownMockService),
|
|
1823
|
+
explorerMockService: inject(TYPES.explorerMockService),
|
|
1824
|
+
signalMockService: inject(TYPES.signalMockService),
|
|
1825
|
+
heatMockService: inject(TYPES.heatMockService),
|
|
1339
1826
|
};
|
|
1340
1827
|
const viewServices = {
|
|
1341
1828
|
notificationViewService: inject(TYPES.notificationViewService),
|
|
@@ -1344,6 +1831,9 @@ const viewServices = {
|
|
|
1344
1831
|
logViewService: inject(TYPES.logViewService),
|
|
1345
1832
|
statusViewService: inject(TYPES.statusViewService),
|
|
1346
1833
|
markdownViewService: inject(TYPES.markdownViewService),
|
|
1834
|
+
explorerViewService: inject(TYPES.explorerViewService),
|
|
1835
|
+
signalViewService: inject(TYPES.signalViewService),
|
|
1836
|
+
heatViewService: inject(TYPES.heatViewService),
|
|
1347
1837
|
};
|
|
1348
1838
|
const ioc = {
|
|
1349
1839
|
...baseServices,
|
|
@@ -1354,11 +1844,11 @@ const ioc = {
|
|
|
1354
1844
|
};
|
|
1355
1845
|
init();
|
|
1356
1846
|
|
|
1357
|
-
const router$
|
|
1847
|
+
const router$a = Router({
|
|
1358
1848
|
params: true,
|
|
1359
1849
|
});
|
|
1360
1850
|
// ExchangeMockService endpoints
|
|
1361
|
-
router$
|
|
1851
|
+
router$a.post("/api/v1/mock/candles_signal", async (req, res) => {
|
|
1362
1852
|
try {
|
|
1363
1853
|
const request = await micro.json(req);
|
|
1364
1854
|
const { signalId, interval, requestId, serviceName } = request;
|
|
@@ -1386,7 +1876,7 @@ router$8.post("/api/v1/mock/candles_signal", async (req, res) => {
|
|
|
1386
1876
|
});
|
|
1387
1877
|
}
|
|
1388
1878
|
});
|
|
1389
|
-
router$
|
|
1879
|
+
router$a.post("/api/v1/mock/candles_point", async (req, res) => {
|
|
1390
1880
|
try {
|
|
1391
1881
|
const request = await micro.json(req);
|
|
1392
1882
|
const { currentTime, interval, requestId, serviceName, symbol, exchangeName } = request;
|
|
@@ -1420,7 +1910,7 @@ router$8.post("/api/v1/mock/candles_point", async (req, res) => {
|
|
|
1420
1910
|
}
|
|
1421
1911
|
});
|
|
1422
1912
|
// NotificationMockService endpoints
|
|
1423
|
-
router$
|
|
1913
|
+
router$a.post("/api/v1/mock/notification_list", async (req, res) => {
|
|
1424
1914
|
try {
|
|
1425
1915
|
const request = await micro.json(req);
|
|
1426
1916
|
const { requestId, serviceName } = request;
|
|
@@ -1448,7 +1938,7 @@ router$8.post("/api/v1/mock/notification_list", async (req, res) => {
|
|
|
1448
1938
|
});
|
|
1449
1939
|
}
|
|
1450
1940
|
});
|
|
1451
|
-
router$
|
|
1941
|
+
router$a.post("/api/v1/mock/notification_one/:id", async (req, res) => {
|
|
1452
1942
|
try {
|
|
1453
1943
|
const request = await micro.json(req);
|
|
1454
1944
|
const { requestId, serviceName } = request;
|
|
@@ -1477,7 +1967,7 @@ router$8.post("/api/v1/mock/notification_one/:id", async (req, res) => {
|
|
|
1477
1967
|
});
|
|
1478
1968
|
}
|
|
1479
1969
|
});
|
|
1480
|
-
router$
|
|
1970
|
+
router$a.post("/api/v1/mock/notification_filter", async (req, res) => {
|
|
1481
1971
|
try {
|
|
1482
1972
|
const request = await micro.json(req);
|
|
1483
1973
|
const { requestId, serviceName, filterData, limit, offset } = request;
|
|
@@ -1506,7 +1996,7 @@ router$8.post("/api/v1/mock/notification_filter", async (req, res) => {
|
|
|
1506
1996
|
}
|
|
1507
1997
|
});
|
|
1508
1998
|
// StorageMockService endpoints
|
|
1509
|
-
router$
|
|
1999
|
+
router$a.post("/api/v1/mock/storage_one/:id", async (req, res) => {
|
|
1510
2000
|
try {
|
|
1511
2001
|
const request = await micro.json(req);
|
|
1512
2002
|
const { requestId, serviceName } = request;
|
|
@@ -1535,7 +2025,7 @@ router$8.post("/api/v1/mock/storage_one/:id", async (req, res) => {
|
|
|
1535
2025
|
});
|
|
1536
2026
|
}
|
|
1537
2027
|
});
|
|
1538
|
-
router$
|
|
2028
|
+
router$a.post("/api/v1/mock/storage_list/live", async (req, res) => {
|
|
1539
2029
|
try {
|
|
1540
2030
|
const request = await micro.json(req);
|
|
1541
2031
|
const { requestId, serviceName } = request;
|
|
@@ -1563,7 +2053,7 @@ router$8.post("/api/v1/mock/storage_list/live", async (req, res) => {
|
|
|
1563
2053
|
});
|
|
1564
2054
|
}
|
|
1565
2055
|
});
|
|
1566
|
-
router$
|
|
2056
|
+
router$a.post("/api/v1/mock/storage_list/backtest", async (req, res) => {
|
|
1567
2057
|
try {
|
|
1568
2058
|
const request = await micro.json(req);
|
|
1569
2059
|
const { requestId, serviceName } = request;
|
|
@@ -1592,7 +2082,7 @@ router$8.post("/api/v1/mock/storage_list/backtest", async (req, res) => {
|
|
|
1592
2082
|
}
|
|
1593
2083
|
});
|
|
1594
2084
|
// LogMockService endpoints
|
|
1595
|
-
router$
|
|
2085
|
+
router$a.post("/api/v1/mock/log_list", async (req, res) => {
|
|
1596
2086
|
try {
|
|
1597
2087
|
const request = await micro.json(req);
|
|
1598
2088
|
const { requestId, serviceName } = request;
|
|
@@ -1620,7 +2110,7 @@ router$8.post("/api/v1/mock/log_list", async (req, res) => {
|
|
|
1620
2110
|
});
|
|
1621
2111
|
}
|
|
1622
2112
|
});
|
|
1623
|
-
router$
|
|
2113
|
+
router$a.post("/api/v1/mock/log_one/:id", async (req, res) => {
|
|
1624
2114
|
try {
|
|
1625
2115
|
const request = await micro.json(req);
|
|
1626
2116
|
const { requestId, serviceName } = request;
|
|
@@ -1649,7 +2139,7 @@ router$8.post("/api/v1/mock/log_one/:id", async (req, res) => {
|
|
|
1649
2139
|
});
|
|
1650
2140
|
}
|
|
1651
2141
|
});
|
|
1652
|
-
router$
|
|
2142
|
+
router$a.post("/api/v1/mock/log_filter", async (req, res) => {
|
|
1653
2143
|
try {
|
|
1654
2144
|
const request = await micro.json(req);
|
|
1655
2145
|
const { requestId, serviceName, filterData, limit, offset } = request;
|
|
@@ -1677,7 +2167,7 @@ router$8.post("/api/v1/mock/log_filter", async (req, res) => {
|
|
|
1677
2167
|
});
|
|
1678
2168
|
}
|
|
1679
2169
|
});
|
|
1680
|
-
router$
|
|
2170
|
+
router$a.post("/api/v1/mock/candles_live", async (req, res) => {
|
|
1681
2171
|
try {
|
|
1682
2172
|
const request = await micro.json(req);
|
|
1683
2173
|
const { signalId, interval, requestId, serviceName } = request;
|
|
@@ -1705,8 +2195,94 @@ router$8.post("/api/v1/mock/candles_live", async (req, res) => {
|
|
|
1705
2195
|
});
|
|
1706
2196
|
}
|
|
1707
2197
|
});
|
|
2198
|
+
router$a.post("/api/v1/mock/candles_last", async (req, res) => {
|
|
2199
|
+
try {
|
|
2200
|
+
const request = await micro.json(req);
|
|
2201
|
+
const { symbol, interval, requestId, serviceName } = request;
|
|
2202
|
+
const data = await ioc.exchangeMockService.getLastCandles(symbol, interval);
|
|
2203
|
+
const result = {
|
|
2204
|
+
data,
|
|
2205
|
+
status: "ok",
|
|
2206
|
+
error: "",
|
|
2207
|
+
requestId,
|
|
2208
|
+
serviceName,
|
|
2209
|
+
};
|
|
2210
|
+
ioc.loggerService.log("/api/v1/mock/candles_last ok", {
|
|
2211
|
+
request,
|
|
2212
|
+
result: omit(result, "data"),
|
|
2213
|
+
});
|
|
2214
|
+
return await micro.send(res, 200, result);
|
|
2215
|
+
}
|
|
2216
|
+
catch (error) {
|
|
2217
|
+
ioc.loggerService.log("/api/v1/mock/candles_last error", {
|
|
2218
|
+
error: errorData(error),
|
|
2219
|
+
});
|
|
2220
|
+
return await micro.send(res, 200, {
|
|
2221
|
+
status: "error",
|
|
2222
|
+
error: getErrorMessage(error),
|
|
2223
|
+
});
|
|
2224
|
+
}
|
|
2225
|
+
});
|
|
2226
|
+
// SignalMockService endpoints
|
|
2227
|
+
router$a.post("/api/v1/mock/signal_last_update/:id", async (req, res) => {
|
|
2228
|
+
try {
|
|
2229
|
+
const request = await micro.json(req);
|
|
2230
|
+
const { requestId, serviceName } = request;
|
|
2231
|
+
const signalId = req.params.id;
|
|
2232
|
+
const data = await ioc.signalMockService.getLastUpdateTimestamp(signalId);
|
|
2233
|
+
const result = {
|
|
2234
|
+
data,
|
|
2235
|
+
status: "ok",
|
|
2236
|
+
error: "",
|
|
2237
|
+
requestId,
|
|
2238
|
+
serviceName,
|
|
2239
|
+
};
|
|
2240
|
+
ioc.loggerService.log("/api/v1/mock/signal_last_update/:id ok", {
|
|
2241
|
+
request,
|
|
2242
|
+
result: omit(result, "data"),
|
|
2243
|
+
});
|
|
2244
|
+
return await micro.send(res, 200, result);
|
|
2245
|
+
}
|
|
2246
|
+
catch (error) {
|
|
2247
|
+
ioc.loggerService.log("/api/v1/mock/signal_last_update/:id error", {
|
|
2248
|
+
error: errorData(error),
|
|
2249
|
+
});
|
|
2250
|
+
return await micro.send(res, 200, {
|
|
2251
|
+
status: "error",
|
|
2252
|
+
error: getErrorMessage(error),
|
|
2253
|
+
});
|
|
2254
|
+
}
|
|
2255
|
+
});
|
|
2256
|
+
router$a.post("/api/v1/mock/signal_pending", async (req, res) => {
|
|
2257
|
+
try {
|
|
2258
|
+
const request = await micro.json(req);
|
|
2259
|
+
const { symbol, requestId, serviceName } = request;
|
|
2260
|
+
const data = await ioc.signalMockService.getPendingSignal(symbol);
|
|
2261
|
+
const result = {
|
|
2262
|
+
data,
|
|
2263
|
+
status: "ok",
|
|
2264
|
+
error: "",
|
|
2265
|
+
requestId,
|
|
2266
|
+
serviceName,
|
|
2267
|
+
};
|
|
2268
|
+
ioc.loggerService.log("/api/v1/mock/signal_pending ok", {
|
|
2269
|
+
request,
|
|
2270
|
+
result: omit(result, "data"),
|
|
2271
|
+
});
|
|
2272
|
+
return await micro.send(res, 200, result);
|
|
2273
|
+
}
|
|
2274
|
+
catch (error) {
|
|
2275
|
+
ioc.loggerService.log("/api/v1/mock/signal_pending error", {
|
|
2276
|
+
error: errorData(error),
|
|
2277
|
+
});
|
|
2278
|
+
return await micro.send(res, 200, {
|
|
2279
|
+
status: "error",
|
|
2280
|
+
error: getErrorMessage(error),
|
|
2281
|
+
});
|
|
2282
|
+
}
|
|
2283
|
+
});
|
|
1708
2284
|
// StatusMockService endpoints
|
|
1709
|
-
router$
|
|
2285
|
+
router$a.post("/api/v1/mock/status_list", async (req, res) => {
|
|
1710
2286
|
try {
|
|
1711
2287
|
const request = await micro.json(req);
|
|
1712
2288
|
const { requestId, serviceName } = request;
|
|
@@ -1734,7 +2310,7 @@ router$8.post("/api/v1/mock/status_list", async (req, res) => {
|
|
|
1734
2310
|
});
|
|
1735
2311
|
}
|
|
1736
2312
|
});
|
|
1737
|
-
router$
|
|
2313
|
+
router$a.post("/api/v1/mock/status_one/:id", async (req, res) => {
|
|
1738
2314
|
try {
|
|
1739
2315
|
const request = await micro.json(req);
|
|
1740
2316
|
const { requestId, serviceName } = request;
|
|
@@ -1763,12 +2339,97 @@ router$8.post("/api/v1/mock/status_one/:id", async (req, res) => {
|
|
|
1763
2339
|
});
|
|
1764
2340
|
}
|
|
1765
2341
|
});
|
|
2342
|
+
// HeatMockService endpoints
|
|
2343
|
+
router$a.post("/api/v1/mock/heat_data", async (req, res) => {
|
|
2344
|
+
try {
|
|
2345
|
+
const request = await micro.json(req);
|
|
2346
|
+
const { requestId, serviceName } = request;
|
|
2347
|
+
const data = await ioc.heatMockService.getStrategyHeatData();
|
|
2348
|
+
const result = {
|
|
2349
|
+
data,
|
|
2350
|
+
status: "ok",
|
|
2351
|
+
error: "",
|
|
2352
|
+
requestId,
|
|
2353
|
+
serviceName,
|
|
2354
|
+
};
|
|
2355
|
+
ioc.loggerService.log("/api/v1/mock/heat_data ok", {
|
|
2356
|
+
request,
|
|
2357
|
+
result: omit(result, "data"),
|
|
2358
|
+
});
|
|
2359
|
+
return await micro.send(res, 200, result);
|
|
2360
|
+
}
|
|
2361
|
+
catch (error) {
|
|
2362
|
+
ioc.loggerService.log("/api/v1/mock/heat_data error", {
|
|
2363
|
+
error: errorData(error),
|
|
2364
|
+
});
|
|
2365
|
+
return await micro.send(res, 200, {
|
|
2366
|
+
status: "error",
|
|
2367
|
+
error: getErrorMessage(error),
|
|
2368
|
+
});
|
|
2369
|
+
}
|
|
2370
|
+
});
|
|
2371
|
+
router$a.post("/api/v1/mock/heat_report", async (req, res) => {
|
|
2372
|
+
try {
|
|
2373
|
+
const request = await micro.json(req);
|
|
2374
|
+
const { requestId, serviceName } = request;
|
|
2375
|
+
const data = await ioc.heatMockService.getStrategyHeatReport();
|
|
2376
|
+
const result = {
|
|
2377
|
+
data,
|
|
2378
|
+
status: "ok",
|
|
2379
|
+
error: "",
|
|
2380
|
+
requestId,
|
|
2381
|
+
serviceName,
|
|
2382
|
+
};
|
|
2383
|
+
ioc.loggerService.log("/api/v1/mock/heat_report ok", {
|
|
2384
|
+
request,
|
|
2385
|
+
result: omit(result, "data"),
|
|
2386
|
+
});
|
|
2387
|
+
return await micro.send(res, 200, result);
|
|
2388
|
+
}
|
|
2389
|
+
catch (error) {
|
|
2390
|
+
ioc.loggerService.log("/api/v1/mock/heat_report error", {
|
|
2391
|
+
error: errorData(error),
|
|
2392
|
+
});
|
|
2393
|
+
return await micro.send(res, 200, {
|
|
2394
|
+
status: "error",
|
|
2395
|
+
error: getErrorMessage(error),
|
|
2396
|
+
});
|
|
2397
|
+
}
|
|
2398
|
+
});
|
|
2399
|
+
router$a.post("/api/v1/mock/status_info", async (req, res) => {
|
|
2400
|
+
try {
|
|
2401
|
+
const request = await micro.json(req);
|
|
2402
|
+
const { requestId, serviceName } = request;
|
|
2403
|
+
const data = await ioc.statusMockService.getStatusInfo();
|
|
2404
|
+
const result = {
|
|
2405
|
+
data,
|
|
2406
|
+
status: "ok",
|
|
2407
|
+
error: "",
|
|
2408
|
+
requestId,
|
|
2409
|
+
serviceName,
|
|
2410
|
+
};
|
|
2411
|
+
ioc.loggerService.log("/api/v1/mock/status_info ok", {
|
|
2412
|
+
request,
|
|
2413
|
+
result: omit(result, "data"),
|
|
2414
|
+
});
|
|
2415
|
+
return await micro.send(res, 200, result);
|
|
2416
|
+
}
|
|
2417
|
+
catch (error) {
|
|
2418
|
+
ioc.loggerService.log("/api/v1/mock/status_info error", {
|
|
2419
|
+
error: errorData(error),
|
|
2420
|
+
});
|
|
2421
|
+
return await micro.send(res, 200, {
|
|
2422
|
+
status: "error",
|
|
2423
|
+
error: getErrorMessage(error),
|
|
2424
|
+
});
|
|
2425
|
+
}
|
|
2426
|
+
});
|
|
1766
2427
|
|
|
1767
|
-
const router$
|
|
2428
|
+
const router$9 = Router({
|
|
1768
2429
|
params: true,
|
|
1769
2430
|
});
|
|
1770
2431
|
// ExchangeViewService endpoints
|
|
1771
|
-
router$
|
|
2432
|
+
router$9.post("/api/v1/view/candles_signal", async (req, res) => {
|
|
1772
2433
|
try {
|
|
1773
2434
|
const request = await micro.json(req);
|
|
1774
2435
|
const { signalId, interval, requestId, serviceName } = request;
|
|
@@ -1796,7 +2457,7 @@ router$7.post("/api/v1/view/candles_signal", async (req, res) => {
|
|
|
1796
2457
|
});
|
|
1797
2458
|
}
|
|
1798
2459
|
});
|
|
1799
|
-
router$
|
|
2460
|
+
router$9.post("/api/v1/view/candles_point", async (req, res) => {
|
|
1800
2461
|
try {
|
|
1801
2462
|
const request = await micro.json(req);
|
|
1802
2463
|
const { currentTime, interval, requestId, serviceName, symbol, exchangeName } = request;
|
|
@@ -1829,7 +2490,7 @@ router$7.post("/api/v1/view/candles_point", async (req, res) => {
|
|
|
1829
2490
|
});
|
|
1830
2491
|
}
|
|
1831
2492
|
});
|
|
1832
|
-
router$
|
|
2493
|
+
router$9.post("/api/v1/view/candles_live", async (req, res) => {
|
|
1833
2494
|
try {
|
|
1834
2495
|
const request = await micro.json(req);
|
|
1835
2496
|
const { signalId, interval, requestId, serviceName } = request;
|
|
@@ -1857,8 +2518,36 @@ router$7.post("/api/v1/view/candles_live", async (req, res) => {
|
|
|
1857
2518
|
});
|
|
1858
2519
|
}
|
|
1859
2520
|
});
|
|
2521
|
+
router$9.post("/api/v1/view/candles_last", async (req, res) => {
|
|
2522
|
+
try {
|
|
2523
|
+
const request = await micro.json(req);
|
|
2524
|
+
const { symbol, interval, requestId, serviceName } = request;
|
|
2525
|
+
const data = await ioc.exchangeViewService.getLastCandles(symbol, interval);
|
|
2526
|
+
const result = {
|
|
2527
|
+
data,
|
|
2528
|
+
status: "ok",
|
|
2529
|
+
error: "",
|
|
2530
|
+
requestId,
|
|
2531
|
+
serviceName,
|
|
2532
|
+
};
|
|
2533
|
+
ioc.loggerService.log("/api/v1/view/candles_last ok", {
|
|
2534
|
+
request,
|
|
2535
|
+
result: omit(result, "data"),
|
|
2536
|
+
});
|
|
2537
|
+
return await micro.send(res, 200, result);
|
|
2538
|
+
}
|
|
2539
|
+
catch (error) {
|
|
2540
|
+
ioc.loggerService.log("/api/v1/view/candles_last error", {
|
|
2541
|
+
error: errorData(error),
|
|
2542
|
+
});
|
|
2543
|
+
return await micro.send(res, 200, {
|
|
2544
|
+
status: "error",
|
|
2545
|
+
error: getErrorMessage(error),
|
|
2546
|
+
});
|
|
2547
|
+
}
|
|
2548
|
+
});
|
|
1860
2549
|
// NotificationViewService endpoints
|
|
1861
|
-
router$
|
|
2550
|
+
router$9.post("/api/v1/view/notification_list", async (req, res) => {
|
|
1862
2551
|
try {
|
|
1863
2552
|
const request = await micro.json(req);
|
|
1864
2553
|
const { requestId, serviceName } = request;
|
|
@@ -1886,7 +2575,7 @@ router$7.post("/api/v1/view/notification_list", async (req, res) => {
|
|
|
1886
2575
|
});
|
|
1887
2576
|
}
|
|
1888
2577
|
});
|
|
1889
|
-
router$
|
|
2578
|
+
router$9.post("/api/v1/view/notification_one/:id", async (req, res) => {
|
|
1890
2579
|
try {
|
|
1891
2580
|
const request = await micro.json(req);
|
|
1892
2581
|
const { requestId, serviceName } = request;
|
|
@@ -1915,7 +2604,7 @@ router$7.post("/api/v1/view/notification_one/:id", async (req, res) => {
|
|
|
1915
2604
|
});
|
|
1916
2605
|
}
|
|
1917
2606
|
});
|
|
1918
|
-
router$
|
|
2607
|
+
router$9.post("/api/v1/view/notification_filter", async (req, res) => {
|
|
1919
2608
|
try {
|
|
1920
2609
|
const request = await micro.json(req);
|
|
1921
2610
|
const { requestId, serviceName, filterData, limit, offset } = request;
|
|
@@ -1944,7 +2633,7 @@ router$7.post("/api/v1/view/notification_filter", async (req, res) => {
|
|
|
1944
2633
|
}
|
|
1945
2634
|
});
|
|
1946
2635
|
// StorageViewService endpoints
|
|
1947
|
-
router$
|
|
2636
|
+
router$9.post("/api/v1/view/storage_one/:id", async (req, res) => {
|
|
1948
2637
|
try {
|
|
1949
2638
|
const request = await micro.json(req);
|
|
1950
2639
|
const { requestId, serviceName } = request;
|
|
@@ -1973,7 +2662,7 @@ router$7.post("/api/v1/view/storage_one/:id", async (req, res) => {
|
|
|
1973
2662
|
});
|
|
1974
2663
|
}
|
|
1975
2664
|
});
|
|
1976
|
-
router$
|
|
2665
|
+
router$9.post("/api/v1/view/storage_list/live", async (req, res) => {
|
|
1977
2666
|
try {
|
|
1978
2667
|
const request = await micro.json(req);
|
|
1979
2668
|
const { requestId, serviceName } = request;
|
|
@@ -2001,7 +2690,7 @@ router$7.post("/api/v1/view/storage_list/live", async (req, res) => {
|
|
|
2001
2690
|
});
|
|
2002
2691
|
}
|
|
2003
2692
|
});
|
|
2004
|
-
router$
|
|
2693
|
+
router$9.post("/api/v1/view/storage_list/backtest", async (req, res) => {
|
|
2005
2694
|
try {
|
|
2006
2695
|
const request = await micro.json(req);
|
|
2007
2696
|
const { requestId, serviceName } = request;
|
|
@@ -2030,7 +2719,7 @@ router$7.post("/api/v1/view/storage_list/backtest", async (req, res) => {
|
|
|
2030
2719
|
}
|
|
2031
2720
|
});
|
|
2032
2721
|
// LogViewService endpoints
|
|
2033
|
-
router$
|
|
2722
|
+
router$9.post("/api/v1/view/log_list", async (req, res) => {
|
|
2034
2723
|
try {
|
|
2035
2724
|
const request = await micro.json(req);
|
|
2036
2725
|
const { requestId, serviceName } = request;
|
|
@@ -2058,7 +2747,7 @@ router$7.post("/api/v1/view/log_list", async (req, res) => {
|
|
|
2058
2747
|
});
|
|
2059
2748
|
}
|
|
2060
2749
|
});
|
|
2061
|
-
router$
|
|
2750
|
+
router$9.post("/api/v1/view/log_one/:id", async (req, res) => {
|
|
2062
2751
|
try {
|
|
2063
2752
|
const request = await micro.json(req);
|
|
2064
2753
|
const { requestId, serviceName } = request;
|
|
@@ -2087,7 +2776,7 @@ router$7.post("/api/v1/view/log_one/:id", async (req, res) => {
|
|
|
2087
2776
|
});
|
|
2088
2777
|
}
|
|
2089
2778
|
});
|
|
2090
|
-
router$
|
|
2779
|
+
router$9.post("/api/v1/view/log_filter", async (req, res) => {
|
|
2091
2780
|
try {
|
|
2092
2781
|
const request = await micro.json(req);
|
|
2093
2782
|
const { requestId, serviceName, filterData, limit, offset } = request;
|
|
@@ -2115,8 +2804,66 @@ router$7.post("/api/v1/view/log_filter", async (req, res) => {
|
|
|
2115
2804
|
});
|
|
2116
2805
|
}
|
|
2117
2806
|
});
|
|
2807
|
+
// SignalViewService endpoints
|
|
2808
|
+
router$9.post("/api/v1/view/signal_last_update/:id", async (req, res) => {
|
|
2809
|
+
try {
|
|
2810
|
+
const request = await micro.json(req);
|
|
2811
|
+
const { requestId, serviceName } = request;
|
|
2812
|
+
const signalId = req.params.id;
|
|
2813
|
+
const data = await ioc.signalViewService.getLastUpdateTimestamp(signalId);
|
|
2814
|
+
const result = {
|
|
2815
|
+
data,
|
|
2816
|
+
status: "ok",
|
|
2817
|
+
error: "",
|
|
2818
|
+
requestId,
|
|
2819
|
+
serviceName,
|
|
2820
|
+
};
|
|
2821
|
+
ioc.loggerService.log("/api/v1/view/signal_last_update/:id ok", {
|
|
2822
|
+
request,
|
|
2823
|
+
result: omit(result, "data"),
|
|
2824
|
+
});
|
|
2825
|
+
return await micro.send(res, 200, result);
|
|
2826
|
+
}
|
|
2827
|
+
catch (error) {
|
|
2828
|
+
ioc.loggerService.log("/api/v1/view/signal_last_update/:id error", {
|
|
2829
|
+
error: errorData(error),
|
|
2830
|
+
});
|
|
2831
|
+
return await micro.send(res, 200, {
|
|
2832
|
+
status: "error",
|
|
2833
|
+
error: getErrorMessage(error),
|
|
2834
|
+
});
|
|
2835
|
+
}
|
|
2836
|
+
});
|
|
2837
|
+
router$9.post("/api/v1/view/signal_pending", async (req, res) => {
|
|
2838
|
+
try {
|
|
2839
|
+
const request = await micro.json(req);
|
|
2840
|
+
const { symbol, requestId, serviceName } = request;
|
|
2841
|
+
const data = await ioc.signalViewService.getPendingSignal(symbol);
|
|
2842
|
+
const result = {
|
|
2843
|
+
data,
|
|
2844
|
+
status: "ok",
|
|
2845
|
+
error: "",
|
|
2846
|
+
requestId,
|
|
2847
|
+
serviceName,
|
|
2848
|
+
};
|
|
2849
|
+
ioc.loggerService.log("/api/v1/view/signal_pending ok", {
|
|
2850
|
+
request,
|
|
2851
|
+
result: omit(result, "data"),
|
|
2852
|
+
});
|
|
2853
|
+
return await micro.send(res, 200, result);
|
|
2854
|
+
}
|
|
2855
|
+
catch (error) {
|
|
2856
|
+
ioc.loggerService.log("/api/v1/view/signal_pending error", {
|
|
2857
|
+
error: errorData(error),
|
|
2858
|
+
});
|
|
2859
|
+
return await micro.send(res, 200, {
|
|
2860
|
+
status: "error",
|
|
2861
|
+
error: getErrorMessage(error),
|
|
2862
|
+
});
|
|
2863
|
+
}
|
|
2864
|
+
});
|
|
2118
2865
|
// StatusViewService endpoints
|
|
2119
|
-
router$
|
|
2866
|
+
router$9.post("/api/v1/view/status_list", async (req, res) => {
|
|
2120
2867
|
try {
|
|
2121
2868
|
const request = await micro.json(req);
|
|
2122
2869
|
const { requestId, serviceName } = request;
|
|
@@ -2144,7 +2891,7 @@ router$7.post("/api/v1/view/status_list", async (req, res) => {
|
|
|
2144
2891
|
});
|
|
2145
2892
|
}
|
|
2146
2893
|
});
|
|
2147
|
-
router$
|
|
2894
|
+
router$9.post("/api/v1/view/status_one/:id", async (req, res) => {
|
|
2148
2895
|
try {
|
|
2149
2896
|
const request = await micro.json(req);
|
|
2150
2897
|
const { requestId, serviceName } = request;
|
|
@@ -2173,6 +2920,91 @@ router$7.post("/api/v1/view/status_one/:id", async (req, res) => {
|
|
|
2173
2920
|
});
|
|
2174
2921
|
}
|
|
2175
2922
|
});
|
|
2923
|
+
// HeatViewService endpoints
|
|
2924
|
+
router$9.post("/api/v1/view/heat_data", async (req, res) => {
|
|
2925
|
+
try {
|
|
2926
|
+
const request = await micro.json(req);
|
|
2927
|
+
const { requestId, serviceName } = request;
|
|
2928
|
+
const data = await ioc.heatViewService.getStrategyHeatData();
|
|
2929
|
+
const result = {
|
|
2930
|
+
data,
|
|
2931
|
+
status: "ok",
|
|
2932
|
+
error: "",
|
|
2933
|
+
requestId,
|
|
2934
|
+
serviceName,
|
|
2935
|
+
};
|
|
2936
|
+
ioc.loggerService.log("/api/v1/view/heat_data ok", {
|
|
2937
|
+
request,
|
|
2938
|
+
result: omit(result, "data"),
|
|
2939
|
+
});
|
|
2940
|
+
return await micro.send(res, 200, result);
|
|
2941
|
+
}
|
|
2942
|
+
catch (error) {
|
|
2943
|
+
ioc.loggerService.log("/api/v1/view/heat_data error", {
|
|
2944
|
+
error: errorData(error),
|
|
2945
|
+
});
|
|
2946
|
+
return await micro.send(res, 200, {
|
|
2947
|
+
status: "error",
|
|
2948
|
+
error: getErrorMessage(error),
|
|
2949
|
+
});
|
|
2950
|
+
}
|
|
2951
|
+
});
|
|
2952
|
+
router$9.post("/api/v1/view/heat_report", async (req, res) => {
|
|
2953
|
+
try {
|
|
2954
|
+
const request = await micro.json(req);
|
|
2955
|
+
const { requestId, serviceName } = request;
|
|
2956
|
+
const data = await ioc.heatViewService.getStrategyHeatReport();
|
|
2957
|
+
const result = {
|
|
2958
|
+
data,
|
|
2959
|
+
status: "ok",
|
|
2960
|
+
error: "",
|
|
2961
|
+
requestId,
|
|
2962
|
+
serviceName,
|
|
2963
|
+
};
|
|
2964
|
+
ioc.loggerService.log("/api/v1/view/heat_report ok", {
|
|
2965
|
+
request,
|
|
2966
|
+
result: omit(result, "data"),
|
|
2967
|
+
});
|
|
2968
|
+
return await micro.send(res, 200, result);
|
|
2969
|
+
}
|
|
2970
|
+
catch (error) {
|
|
2971
|
+
ioc.loggerService.log("/api/v1/view/heat_report error", {
|
|
2972
|
+
error: errorData(error),
|
|
2973
|
+
});
|
|
2974
|
+
return await micro.send(res, 200, {
|
|
2975
|
+
status: "error",
|
|
2976
|
+
error: getErrorMessage(error),
|
|
2977
|
+
});
|
|
2978
|
+
}
|
|
2979
|
+
});
|
|
2980
|
+
router$9.post("/api/v1/view/status_info", async (req, res) => {
|
|
2981
|
+
try {
|
|
2982
|
+
const request = await micro.json(req);
|
|
2983
|
+
const { requestId, serviceName } = request;
|
|
2984
|
+
const data = await ioc.statusViewService.getStatusInfo();
|
|
2985
|
+
const result = {
|
|
2986
|
+
data,
|
|
2987
|
+
status: "ok",
|
|
2988
|
+
error: "",
|
|
2989
|
+
requestId,
|
|
2990
|
+
serviceName,
|
|
2991
|
+
};
|
|
2992
|
+
ioc.loggerService.log("/api/v1/view/status_info ok", {
|
|
2993
|
+
request,
|
|
2994
|
+
result: omit(result, "data"),
|
|
2995
|
+
});
|
|
2996
|
+
return await micro.send(res, 200, result);
|
|
2997
|
+
}
|
|
2998
|
+
catch (error) {
|
|
2999
|
+
ioc.loggerService.log("/api/v1/view/status_info error", {
|
|
3000
|
+
error: errorData(error),
|
|
3001
|
+
});
|
|
3002
|
+
return await micro.send(res, 200, {
|
|
3003
|
+
status: "error",
|
|
3004
|
+
error: getErrorMessage(error),
|
|
3005
|
+
});
|
|
3006
|
+
}
|
|
3007
|
+
});
|
|
2176
3008
|
|
|
2177
3009
|
const require$1 = createRequire(import.meta.url);
|
|
2178
3010
|
function getModulesPath() {
|
|
@@ -2181,7 +3013,7 @@ function getModulesPath() {
|
|
|
2181
3013
|
return join(basePath, "../../../");
|
|
2182
3014
|
}
|
|
2183
3015
|
|
|
2184
|
-
const router$
|
|
3016
|
+
const router$8 = Router({
|
|
2185
3017
|
params: true,
|
|
2186
3018
|
});
|
|
2187
3019
|
// getModulesPath
|
|
@@ -2198,7 +3030,7 @@ const ASSET_32 = CC_ENABLE_MOCK
|
|
|
2198
3030
|
const cache128 = new Map();
|
|
2199
3031
|
const cache32 = new Map();
|
|
2200
3032
|
const cacheSvg = new Map();
|
|
2201
|
-
router$
|
|
3033
|
+
router$8.get("/icon/128/:filename", async (req, res) => {
|
|
2202
3034
|
const filename = req.params.filename;
|
|
2203
3035
|
// Check cache first
|
|
2204
3036
|
if (cache128.has(filename)) {
|
|
@@ -2214,7 +3046,7 @@ router$6.get("/icon/128/:filename", async (req, res) => {
|
|
|
2214
3046
|
}
|
|
2215
3047
|
return await micro.send(res, 404, "File not found (128)");
|
|
2216
3048
|
});
|
|
2217
|
-
router$
|
|
3049
|
+
router$8.get("/icon/32/:filename", async (req, res) => {
|
|
2218
3050
|
const filename = req.params.filename;
|
|
2219
3051
|
// Check cache first
|
|
2220
3052
|
if (cache32.has(filename)) {
|
|
@@ -2230,7 +3062,7 @@ router$6.get("/icon/32/:filename", async (req, res) => {
|
|
|
2230
3062
|
}
|
|
2231
3063
|
return await micro.send(res, 404, "File not found (32)");
|
|
2232
3064
|
});
|
|
2233
|
-
router$
|
|
3065
|
+
router$8.get("/icon/svg/:filename", async (req, res) => {
|
|
2234
3066
|
const filename = req.params.filename;
|
|
2235
3067
|
// Check cache first
|
|
2236
3068
|
if (cacheSvg.has(filename)) {
|
|
@@ -2246,7 +3078,7 @@ router$6.get("/icon/svg/:filename", async (req, res) => {
|
|
|
2246
3078
|
}
|
|
2247
3079
|
return await micro.send(res, 404, "File not found (svg)");
|
|
2248
3080
|
});
|
|
2249
|
-
router$
|
|
3081
|
+
router$8.get("/icon/:filename", async (req, res) => {
|
|
2250
3082
|
const filename = req.params.filename;
|
|
2251
3083
|
// Check cache first
|
|
2252
3084
|
if (cache32.has(filename)) {
|
|
@@ -2263,10 +3095,10 @@ router$6.get("/icon/:filename", async (req, res) => {
|
|
|
2263
3095
|
return await micro.send(res, 404, "File not found (root)");
|
|
2264
3096
|
});
|
|
2265
3097
|
|
|
2266
|
-
const router$
|
|
3098
|
+
const router$7 = Router({
|
|
2267
3099
|
params: true,
|
|
2268
3100
|
});
|
|
2269
|
-
router$
|
|
3101
|
+
router$7.post("/api/v1/dict/symbol/list", async (req, res) => {
|
|
2270
3102
|
try {
|
|
2271
3103
|
const request = await micro.json(req);
|
|
2272
3104
|
const { requestId, serviceName } = request;
|
|
@@ -2294,7 +3126,7 @@ router$5.post("/api/v1/dict/symbol/list", async (req, res) => {
|
|
|
2294
3126
|
});
|
|
2295
3127
|
}
|
|
2296
3128
|
});
|
|
2297
|
-
router$
|
|
3129
|
+
router$7.post("/api/v1/dict/symbol/map", async (req, res) => {
|
|
2298
3130
|
try {
|
|
2299
3131
|
const request = await micro.json(req);
|
|
2300
3132
|
const { requestId, serviceName } = request;
|
|
@@ -2322,7 +3154,7 @@ router$5.post("/api/v1/dict/symbol/map", async (req, res) => {
|
|
|
2322
3154
|
});
|
|
2323
3155
|
}
|
|
2324
3156
|
});
|
|
2325
|
-
router$
|
|
3157
|
+
router$7.post("/api/v1/dict/symbol/one", async (req, res) => {
|
|
2326
3158
|
try {
|
|
2327
3159
|
const request = await micro.json(req);
|
|
2328
3160
|
const { requestId, serviceName, id } = request;
|
|
@@ -2351,10 +3183,10 @@ router$5.post("/api/v1/dict/symbol/one", async (req, res) => {
|
|
|
2351
3183
|
}
|
|
2352
3184
|
});
|
|
2353
3185
|
|
|
2354
|
-
const router$
|
|
3186
|
+
const router$6 = Router({
|
|
2355
3187
|
params: true,
|
|
2356
3188
|
});
|
|
2357
|
-
router$
|
|
3189
|
+
router$6.post("/api/v1/markdown_mock/strategy_data", async (req, res) => {
|
|
2358
3190
|
try {
|
|
2359
3191
|
const request = await micro.json(req);
|
|
2360
3192
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2368,7 +3200,7 @@ router$4.post("/api/v1/markdown_mock/strategy_data", async (req, res) => {
|
|
|
2368
3200
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2369
3201
|
}
|
|
2370
3202
|
});
|
|
2371
|
-
router$
|
|
3203
|
+
router$6.post("/api/v1/markdown_mock/strategy_report", async (req, res) => {
|
|
2372
3204
|
try {
|
|
2373
3205
|
const request = await micro.json(req);
|
|
2374
3206
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2382,7 +3214,7 @@ router$4.post("/api/v1/markdown_mock/strategy_report", async (req, res) => {
|
|
|
2382
3214
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2383
3215
|
}
|
|
2384
3216
|
});
|
|
2385
|
-
router$
|
|
3217
|
+
router$6.post("/api/v1/markdown_mock/backtest_data", async (req, res) => {
|
|
2386
3218
|
try {
|
|
2387
3219
|
const request = await micro.json(req);
|
|
2388
3220
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2396,7 +3228,7 @@ router$4.post("/api/v1/markdown_mock/backtest_data", async (req, res) => {
|
|
|
2396
3228
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2397
3229
|
}
|
|
2398
3230
|
});
|
|
2399
|
-
router$
|
|
3231
|
+
router$6.post("/api/v1/markdown_mock/backtest_report", async (req, res) => {
|
|
2400
3232
|
try {
|
|
2401
3233
|
const request = await micro.json(req);
|
|
2402
3234
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2410,7 +3242,7 @@ router$4.post("/api/v1/markdown_mock/backtest_report", async (req, res) => {
|
|
|
2410
3242
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2411
3243
|
}
|
|
2412
3244
|
});
|
|
2413
|
-
router$
|
|
3245
|
+
router$6.post("/api/v1/markdown_mock/live_data", async (req, res) => {
|
|
2414
3246
|
try {
|
|
2415
3247
|
const request = await micro.json(req);
|
|
2416
3248
|
const { requestId, serviceName, symbol, strategyName, exchangeName } = request;
|
|
@@ -2424,7 +3256,7 @@ router$4.post("/api/v1/markdown_mock/live_data", async (req, res) => {
|
|
|
2424
3256
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2425
3257
|
}
|
|
2426
3258
|
});
|
|
2427
|
-
router$
|
|
3259
|
+
router$6.post("/api/v1/markdown_mock/live_report", async (req, res) => {
|
|
2428
3260
|
try {
|
|
2429
3261
|
const request = await micro.json(req);
|
|
2430
3262
|
const { requestId, serviceName, symbol, strategyName, exchangeName } = request;
|
|
@@ -2438,7 +3270,7 @@ router$4.post("/api/v1/markdown_mock/live_report", async (req, res) => {
|
|
|
2438
3270
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2439
3271
|
}
|
|
2440
3272
|
});
|
|
2441
|
-
router$
|
|
3273
|
+
router$6.post("/api/v1/markdown_mock/breakeven_data", async (req, res) => {
|
|
2442
3274
|
try {
|
|
2443
3275
|
const request = await micro.json(req);
|
|
2444
3276
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2452,7 +3284,7 @@ router$4.post("/api/v1/markdown_mock/breakeven_data", async (req, res) => {
|
|
|
2452
3284
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2453
3285
|
}
|
|
2454
3286
|
});
|
|
2455
|
-
router$
|
|
3287
|
+
router$6.post("/api/v1/markdown_mock/breakeven_report", async (req, res) => {
|
|
2456
3288
|
try {
|
|
2457
3289
|
const request = await micro.json(req);
|
|
2458
3290
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2466,7 +3298,7 @@ router$4.post("/api/v1/markdown_mock/breakeven_report", async (req, res) => {
|
|
|
2466
3298
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2467
3299
|
}
|
|
2468
3300
|
});
|
|
2469
|
-
router$
|
|
3301
|
+
router$6.post("/api/v1/markdown_mock/risk_data", async (req, res) => {
|
|
2470
3302
|
try {
|
|
2471
3303
|
const request = await micro.json(req);
|
|
2472
3304
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2480,7 +3312,7 @@ router$4.post("/api/v1/markdown_mock/risk_data", async (req, res) => {
|
|
|
2480
3312
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2481
3313
|
}
|
|
2482
3314
|
});
|
|
2483
|
-
router$
|
|
3315
|
+
router$6.post("/api/v1/markdown_mock/risk_report", async (req, res) => {
|
|
2484
3316
|
try {
|
|
2485
3317
|
const request = await micro.json(req);
|
|
2486
3318
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2494,7 +3326,7 @@ router$4.post("/api/v1/markdown_mock/risk_report", async (req, res) => {
|
|
|
2494
3326
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2495
3327
|
}
|
|
2496
3328
|
});
|
|
2497
|
-
router$
|
|
3329
|
+
router$6.post("/api/v1/markdown_mock/partial_data", async (req, res) => {
|
|
2498
3330
|
try {
|
|
2499
3331
|
const request = await micro.json(req);
|
|
2500
3332
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2508,7 +3340,7 @@ router$4.post("/api/v1/markdown_mock/partial_data", async (req, res) => {
|
|
|
2508
3340
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2509
3341
|
}
|
|
2510
3342
|
});
|
|
2511
|
-
router$
|
|
3343
|
+
router$6.post("/api/v1/markdown_mock/partial_report", async (req, res) => {
|
|
2512
3344
|
try {
|
|
2513
3345
|
const request = await micro.json(req);
|
|
2514
3346
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2522,7 +3354,7 @@ router$4.post("/api/v1/markdown_mock/partial_report", async (req, res) => {
|
|
|
2522
3354
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2523
3355
|
}
|
|
2524
3356
|
});
|
|
2525
|
-
router$
|
|
3357
|
+
router$6.post("/api/v1/markdown_mock/highest_profit_data", async (req, res) => {
|
|
2526
3358
|
try {
|
|
2527
3359
|
const request = await micro.json(req);
|
|
2528
3360
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2536,7 +3368,7 @@ router$4.post("/api/v1/markdown_mock/highest_profit_data", async (req, res) => {
|
|
|
2536
3368
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2537
3369
|
}
|
|
2538
3370
|
});
|
|
2539
|
-
router$
|
|
3371
|
+
router$6.post("/api/v1/markdown_mock/highest_profit_report", async (req, res) => {
|
|
2540
3372
|
try {
|
|
2541
3373
|
const request = await micro.json(req);
|
|
2542
3374
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2550,7 +3382,7 @@ router$4.post("/api/v1/markdown_mock/highest_profit_report", async (req, res) =>
|
|
|
2550
3382
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2551
3383
|
}
|
|
2552
3384
|
});
|
|
2553
|
-
router$
|
|
3385
|
+
router$6.post("/api/v1/markdown_mock/schedule_data", async (req, res) => {
|
|
2554
3386
|
try {
|
|
2555
3387
|
const request = await micro.json(req);
|
|
2556
3388
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2564,7 +3396,7 @@ router$4.post("/api/v1/markdown_mock/schedule_data", async (req, res) => {
|
|
|
2564
3396
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2565
3397
|
}
|
|
2566
3398
|
});
|
|
2567
|
-
router$
|
|
3399
|
+
router$6.post("/api/v1/markdown_mock/schedule_report", async (req, res) => {
|
|
2568
3400
|
try {
|
|
2569
3401
|
const request = await micro.json(req);
|
|
2570
3402
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2578,7 +3410,7 @@ router$4.post("/api/v1/markdown_mock/schedule_report", async (req, res) => {
|
|
|
2578
3410
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2579
3411
|
}
|
|
2580
3412
|
});
|
|
2581
|
-
router$
|
|
3413
|
+
router$6.post("/api/v1/markdown_mock/performance_data", async (req, res) => {
|
|
2582
3414
|
try {
|
|
2583
3415
|
const request = await micro.json(req);
|
|
2584
3416
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2592,7 +3424,7 @@ router$4.post("/api/v1/markdown_mock/performance_data", async (req, res) => {
|
|
|
2592
3424
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2593
3425
|
}
|
|
2594
3426
|
});
|
|
2595
|
-
router$
|
|
3427
|
+
router$6.post("/api/v1/markdown_mock/performance_report", async (req, res) => {
|
|
2596
3428
|
try {
|
|
2597
3429
|
const request = await micro.json(req);
|
|
2598
3430
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2606,7 +3438,7 @@ router$4.post("/api/v1/markdown_mock/performance_report", async (req, res) => {
|
|
|
2606
3438
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2607
3439
|
}
|
|
2608
3440
|
});
|
|
2609
|
-
router$
|
|
3441
|
+
router$6.post("/api/v1/markdown_mock/sync_data", async (req, res) => {
|
|
2610
3442
|
try {
|
|
2611
3443
|
const request = await micro.json(req);
|
|
2612
3444
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2620,7 +3452,7 @@ router$4.post("/api/v1/markdown_mock/sync_data", async (req, res) => {
|
|
|
2620
3452
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2621
3453
|
}
|
|
2622
3454
|
});
|
|
2623
|
-
router$
|
|
3455
|
+
router$6.post("/api/v1/markdown_mock/sync_report", async (req, res) => {
|
|
2624
3456
|
try {
|
|
2625
3457
|
const request = await micro.json(req);
|
|
2626
3458
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2634,7 +3466,7 @@ router$4.post("/api/v1/markdown_mock/sync_report", async (req, res) => {
|
|
|
2634
3466
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2635
3467
|
}
|
|
2636
3468
|
});
|
|
2637
|
-
router$
|
|
3469
|
+
router$6.post("/api/v1/markdown_mock/heat_data", async (req, res) => {
|
|
2638
3470
|
try {
|
|
2639
3471
|
const request = await micro.json(req);
|
|
2640
3472
|
const { requestId, serviceName, strategyName, exchangeName, frameName } = request;
|
|
@@ -2648,7 +3480,7 @@ router$4.post("/api/v1/markdown_mock/heat_data", async (req, res) => {
|
|
|
2648
3480
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2649
3481
|
}
|
|
2650
3482
|
});
|
|
2651
|
-
router$
|
|
3483
|
+
router$6.post("/api/v1/markdown_mock/heat_report", async (req, res) => {
|
|
2652
3484
|
try {
|
|
2653
3485
|
const request = await micro.json(req);
|
|
2654
3486
|
const { requestId, serviceName, strategyName, exchangeName, frameName } = request;
|
|
@@ -2662,7 +3494,7 @@ router$4.post("/api/v1/markdown_mock/heat_report", async (req, res) => {
|
|
|
2662
3494
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2663
3495
|
}
|
|
2664
3496
|
});
|
|
2665
|
-
router$
|
|
3497
|
+
router$6.post("/api/v1/markdown_mock/walker_data", async (req, res) => {
|
|
2666
3498
|
try {
|
|
2667
3499
|
const request = await micro.json(req);
|
|
2668
3500
|
const { requestId, serviceName, symbol, walkerName } = request;
|
|
@@ -2676,7 +3508,7 @@ router$4.post("/api/v1/markdown_mock/walker_data", async (req, res) => {
|
|
|
2676
3508
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2677
3509
|
}
|
|
2678
3510
|
});
|
|
2679
|
-
router$
|
|
3511
|
+
router$6.post("/api/v1/markdown_mock/walker_report", async (req, res) => {
|
|
2680
3512
|
try {
|
|
2681
3513
|
const request = await micro.json(req);
|
|
2682
3514
|
const { requestId, serviceName, symbol, walkerName } = request;
|
|
@@ -2691,10 +3523,10 @@ router$4.post("/api/v1/markdown_mock/walker_report", async (req, res) => {
|
|
|
2691
3523
|
}
|
|
2692
3524
|
});
|
|
2693
3525
|
|
|
2694
|
-
const router$
|
|
3526
|
+
const router$5 = Router({
|
|
2695
3527
|
params: true,
|
|
2696
3528
|
});
|
|
2697
|
-
router$
|
|
3529
|
+
router$5.post("/api/v1/markdown_view/strategy_data", async (req, res) => {
|
|
2698
3530
|
try {
|
|
2699
3531
|
const request = await micro.json(req);
|
|
2700
3532
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2708,7 +3540,7 @@ router$3.post("/api/v1/markdown_view/strategy_data", async (req, res) => {
|
|
|
2708
3540
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2709
3541
|
}
|
|
2710
3542
|
});
|
|
2711
|
-
router$
|
|
3543
|
+
router$5.post("/api/v1/markdown_view/strategy_report", async (req, res) => {
|
|
2712
3544
|
try {
|
|
2713
3545
|
const request = await micro.json(req);
|
|
2714
3546
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2722,7 +3554,7 @@ router$3.post("/api/v1/markdown_view/strategy_report", async (req, res) => {
|
|
|
2722
3554
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2723
3555
|
}
|
|
2724
3556
|
});
|
|
2725
|
-
router$
|
|
3557
|
+
router$5.post("/api/v1/markdown_view/backtest_data", async (req, res) => {
|
|
2726
3558
|
try {
|
|
2727
3559
|
const request = await micro.json(req);
|
|
2728
3560
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2736,7 +3568,7 @@ router$3.post("/api/v1/markdown_view/backtest_data", async (req, res) => {
|
|
|
2736
3568
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2737
3569
|
}
|
|
2738
3570
|
});
|
|
2739
|
-
router$
|
|
3571
|
+
router$5.post("/api/v1/markdown_view/backtest_report", async (req, res) => {
|
|
2740
3572
|
try {
|
|
2741
3573
|
const request = await micro.json(req);
|
|
2742
3574
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2750,7 +3582,7 @@ router$3.post("/api/v1/markdown_view/backtest_report", async (req, res) => {
|
|
|
2750
3582
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2751
3583
|
}
|
|
2752
3584
|
});
|
|
2753
|
-
router$
|
|
3585
|
+
router$5.post("/api/v1/markdown_view/live_data", async (req, res) => {
|
|
2754
3586
|
try {
|
|
2755
3587
|
const request = await micro.json(req);
|
|
2756
3588
|
const { requestId, serviceName, symbol, strategyName, exchangeName } = request;
|
|
@@ -2764,7 +3596,7 @@ router$3.post("/api/v1/markdown_view/live_data", async (req, res) => {
|
|
|
2764
3596
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2765
3597
|
}
|
|
2766
3598
|
});
|
|
2767
|
-
router$
|
|
3599
|
+
router$5.post("/api/v1/markdown_view/live_report", async (req, res) => {
|
|
2768
3600
|
try {
|
|
2769
3601
|
const request = await micro.json(req);
|
|
2770
3602
|
const { requestId, serviceName, symbol, strategyName, exchangeName } = request;
|
|
@@ -2778,7 +3610,7 @@ router$3.post("/api/v1/markdown_view/live_report", async (req, res) => {
|
|
|
2778
3610
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2779
3611
|
}
|
|
2780
3612
|
});
|
|
2781
|
-
router$
|
|
3613
|
+
router$5.post("/api/v1/markdown_view/breakeven_data", async (req, res) => {
|
|
2782
3614
|
try {
|
|
2783
3615
|
const request = await micro.json(req);
|
|
2784
3616
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2792,7 +3624,7 @@ router$3.post("/api/v1/markdown_view/breakeven_data", async (req, res) => {
|
|
|
2792
3624
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2793
3625
|
}
|
|
2794
3626
|
});
|
|
2795
|
-
router$
|
|
3627
|
+
router$5.post("/api/v1/markdown_view/breakeven_report", async (req, res) => {
|
|
2796
3628
|
try {
|
|
2797
3629
|
const request = await micro.json(req);
|
|
2798
3630
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2806,7 +3638,7 @@ router$3.post("/api/v1/markdown_view/breakeven_report", async (req, res) => {
|
|
|
2806
3638
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2807
3639
|
}
|
|
2808
3640
|
});
|
|
2809
|
-
router$
|
|
3641
|
+
router$5.post("/api/v1/markdown_view/risk_data", async (req, res) => {
|
|
2810
3642
|
try {
|
|
2811
3643
|
const request = await micro.json(req);
|
|
2812
3644
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2820,7 +3652,7 @@ router$3.post("/api/v1/markdown_view/risk_data", async (req, res) => {
|
|
|
2820
3652
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2821
3653
|
}
|
|
2822
3654
|
});
|
|
2823
|
-
router$
|
|
3655
|
+
router$5.post("/api/v1/markdown_view/risk_report", async (req, res) => {
|
|
2824
3656
|
try {
|
|
2825
3657
|
const request = await micro.json(req);
|
|
2826
3658
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2834,7 +3666,7 @@ router$3.post("/api/v1/markdown_view/risk_report", async (req, res) => {
|
|
|
2834
3666
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2835
3667
|
}
|
|
2836
3668
|
});
|
|
2837
|
-
router$
|
|
3669
|
+
router$5.post("/api/v1/markdown_view/partial_data", async (req, res) => {
|
|
2838
3670
|
try {
|
|
2839
3671
|
const request = await micro.json(req);
|
|
2840
3672
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2848,7 +3680,7 @@ router$3.post("/api/v1/markdown_view/partial_data", async (req, res) => {
|
|
|
2848
3680
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2849
3681
|
}
|
|
2850
3682
|
});
|
|
2851
|
-
router$
|
|
3683
|
+
router$5.post("/api/v1/markdown_view/partial_report", async (req, res) => {
|
|
2852
3684
|
try {
|
|
2853
3685
|
const request = await micro.json(req);
|
|
2854
3686
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2862,7 +3694,7 @@ router$3.post("/api/v1/markdown_view/partial_report", async (req, res) => {
|
|
|
2862
3694
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2863
3695
|
}
|
|
2864
3696
|
});
|
|
2865
|
-
router$
|
|
3697
|
+
router$5.post("/api/v1/markdown_view/highest_profit_data", async (req, res) => {
|
|
2866
3698
|
try {
|
|
2867
3699
|
const request = await micro.json(req);
|
|
2868
3700
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2876,7 +3708,7 @@ router$3.post("/api/v1/markdown_view/highest_profit_data", async (req, res) => {
|
|
|
2876
3708
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2877
3709
|
}
|
|
2878
3710
|
});
|
|
2879
|
-
router$
|
|
3711
|
+
router$5.post("/api/v1/markdown_view/highest_profit_report", async (req, res) => {
|
|
2880
3712
|
try {
|
|
2881
3713
|
const request = await micro.json(req);
|
|
2882
3714
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2890,7 +3722,7 @@ router$3.post("/api/v1/markdown_view/highest_profit_report", async (req, res) =>
|
|
|
2890
3722
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2891
3723
|
}
|
|
2892
3724
|
});
|
|
2893
|
-
router$
|
|
3725
|
+
router$5.post("/api/v1/markdown_view/schedule_data", async (req, res) => {
|
|
2894
3726
|
try {
|
|
2895
3727
|
const request = await micro.json(req);
|
|
2896
3728
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2904,7 +3736,7 @@ router$3.post("/api/v1/markdown_view/schedule_data", async (req, res) => {
|
|
|
2904
3736
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2905
3737
|
}
|
|
2906
3738
|
});
|
|
2907
|
-
router$
|
|
3739
|
+
router$5.post("/api/v1/markdown_view/schedule_report", async (req, res) => {
|
|
2908
3740
|
try {
|
|
2909
3741
|
const request = await micro.json(req);
|
|
2910
3742
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2918,7 +3750,7 @@ router$3.post("/api/v1/markdown_view/schedule_report", async (req, res) => {
|
|
|
2918
3750
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2919
3751
|
}
|
|
2920
3752
|
});
|
|
2921
|
-
router$
|
|
3753
|
+
router$5.post("/api/v1/markdown_view/performance_data", async (req, res) => {
|
|
2922
3754
|
try {
|
|
2923
3755
|
const request = await micro.json(req);
|
|
2924
3756
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2932,7 +3764,7 @@ router$3.post("/api/v1/markdown_view/performance_data", async (req, res) => {
|
|
|
2932
3764
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2933
3765
|
}
|
|
2934
3766
|
});
|
|
2935
|
-
router$
|
|
3767
|
+
router$5.post("/api/v1/markdown_view/performance_report", async (req, res) => {
|
|
2936
3768
|
try {
|
|
2937
3769
|
const request = await micro.json(req);
|
|
2938
3770
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2946,7 +3778,7 @@ router$3.post("/api/v1/markdown_view/performance_report", async (req, res) => {
|
|
|
2946
3778
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2947
3779
|
}
|
|
2948
3780
|
});
|
|
2949
|
-
router$
|
|
3781
|
+
router$5.post("/api/v1/markdown_view/sync_data", async (req, res) => {
|
|
2950
3782
|
try {
|
|
2951
3783
|
const request = await micro.json(req);
|
|
2952
3784
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2960,7 +3792,7 @@ router$3.post("/api/v1/markdown_view/sync_data", async (req, res) => {
|
|
|
2960
3792
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2961
3793
|
}
|
|
2962
3794
|
});
|
|
2963
|
-
router$
|
|
3795
|
+
router$5.post("/api/v1/markdown_view/sync_report", async (req, res) => {
|
|
2964
3796
|
try {
|
|
2965
3797
|
const request = await micro.json(req);
|
|
2966
3798
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2974,7 +3806,7 @@ router$3.post("/api/v1/markdown_view/sync_report", async (req, res) => {
|
|
|
2974
3806
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2975
3807
|
}
|
|
2976
3808
|
});
|
|
2977
|
-
router$
|
|
3809
|
+
router$5.post("/api/v1/markdown_view/heat_data", async (req, res) => {
|
|
2978
3810
|
try {
|
|
2979
3811
|
const request = await micro.json(req);
|
|
2980
3812
|
const { requestId, serviceName, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2988,7 +3820,7 @@ router$3.post("/api/v1/markdown_view/heat_data", async (req, res) => {
|
|
|
2988
3820
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2989
3821
|
}
|
|
2990
3822
|
});
|
|
2991
|
-
router$
|
|
3823
|
+
router$5.post("/api/v1/markdown_view/heat_report", async (req, res) => {
|
|
2992
3824
|
try {
|
|
2993
3825
|
const request = await micro.json(req);
|
|
2994
3826
|
const { requestId, serviceName, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -3002,7 +3834,7 @@ router$3.post("/api/v1/markdown_view/heat_report", async (req, res) => {
|
|
|
3002
3834
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
3003
3835
|
}
|
|
3004
3836
|
});
|
|
3005
|
-
router$
|
|
3837
|
+
router$5.post("/api/v1/markdown_view/walker_data", async (req, res) => {
|
|
3006
3838
|
try {
|
|
3007
3839
|
const request = await micro.json(req);
|
|
3008
3840
|
const { requestId, serviceName, symbol, walkerName } = request;
|
|
@@ -3016,7 +3848,7 @@ router$3.post("/api/v1/markdown_view/walker_data", async (req, res) => {
|
|
|
3016
3848
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
3017
3849
|
}
|
|
3018
3850
|
});
|
|
3019
|
-
router$
|
|
3851
|
+
router$5.post("/api/v1/markdown_view/walker_report", async (req, res) => {
|
|
3020
3852
|
try {
|
|
3021
3853
|
const request = await micro.json(req);
|
|
3022
3854
|
const { requestId, serviceName, symbol, walkerName } = request;
|
|
@@ -3031,6 +3863,70 @@ router$3.post("/api/v1/markdown_view/walker_report", async (req, res) => {
|
|
|
3031
3863
|
}
|
|
3032
3864
|
});
|
|
3033
3865
|
|
|
3866
|
+
const router$4 = Router({
|
|
3867
|
+
params: true,
|
|
3868
|
+
});
|
|
3869
|
+
router$4.post("/api/v1/explorer_mock/tree", async (req, res) => {
|
|
3870
|
+
try {
|
|
3871
|
+
const request = await micro.json(req);
|
|
3872
|
+
const { requestId, serviceName } = request;
|
|
3873
|
+
const data = await ioc.explorerMockService.getTree();
|
|
3874
|
+
const result = { data, status: "ok", error: "", requestId, serviceName };
|
|
3875
|
+
ioc.loggerService.log("/api/v1/explorer_mock/tree ok", { request, result: omit(result, "data") });
|
|
3876
|
+
return await micro.send(res, 200, result);
|
|
3877
|
+
}
|
|
3878
|
+
catch (error) {
|
|
3879
|
+
ioc.loggerService.log("/api/v1/explorer_mock/tree error", { error: errorData(error) });
|
|
3880
|
+
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
3881
|
+
}
|
|
3882
|
+
});
|
|
3883
|
+
router$4.post("/api/v1/explorer_mock/node", async (req, res) => {
|
|
3884
|
+
try {
|
|
3885
|
+
const request = await micro.json(req);
|
|
3886
|
+
const { requestId, serviceName, path } = request;
|
|
3887
|
+
const data = await ioc.explorerMockService.getNode(path);
|
|
3888
|
+
const result = { data, status: "ok", error: "", requestId, serviceName };
|
|
3889
|
+
ioc.loggerService.log("/api/v1/explorer_mock/node ok", { request, result: omit(result, "data") });
|
|
3890
|
+
return await micro.send(res, 200, result);
|
|
3891
|
+
}
|
|
3892
|
+
catch (error) {
|
|
3893
|
+
ioc.loggerService.log("/api/v1/explorer_mock/node error", { error: errorData(error) });
|
|
3894
|
+
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
3895
|
+
}
|
|
3896
|
+
});
|
|
3897
|
+
|
|
3898
|
+
const router$3 = Router({
|
|
3899
|
+
params: true,
|
|
3900
|
+
});
|
|
3901
|
+
router$3.post("/api/v1/explorer_view/tree", async (req, res) => {
|
|
3902
|
+
try {
|
|
3903
|
+
const request = await micro.json(req);
|
|
3904
|
+
const { requestId, serviceName } = request;
|
|
3905
|
+
const data = await ioc.explorerViewService.getTree();
|
|
3906
|
+
const result = { data, status: "ok", error: "", requestId, serviceName };
|
|
3907
|
+
ioc.loggerService.log("/api/v1/explorer_view/tree ok", { request, result: omit(result, "data") });
|
|
3908
|
+
return await micro.send(res, 200, result);
|
|
3909
|
+
}
|
|
3910
|
+
catch (error) {
|
|
3911
|
+
ioc.loggerService.log("/api/v1/explorer_view/tree error", { error: errorData(error) });
|
|
3912
|
+
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
3913
|
+
}
|
|
3914
|
+
});
|
|
3915
|
+
router$3.post("/api/v1/explorer_view/node", async (req, res) => {
|
|
3916
|
+
try {
|
|
3917
|
+
const request = await micro.json(req);
|
|
3918
|
+
const { requestId, serviceName, path } = request;
|
|
3919
|
+
const data = await ioc.explorerViewService.getNode(path);
|
|
3920
|
+
const result = { data, status: "ok", error: "", requestId, serviceName };
|
|
3921
|
+
ioc.loggerService.log("/api/v1/explorer_view/node ok", { request, result: omit(result, "data") });
|
|
3922
|
+
return await micro.send(res, 200, result);
|
|
3923
|
+
}
|
|
3924
|
+
catch (error) {
|
|
3925
|
+
ioc.loggerService.log("/api/v1/explorer_view/node error", { error: errorData(error) });
|
|
3926
|
+
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
3927
|
+
}
|
|
3928
|
+
});
|
|
3929
|
+
|
|
3034
3930
|
const router$2 = Router({
|
|
3035
3931
|
params: true,
|
|
3036
3932
|
});
|
|
@@ -3102,25 +3998,31 @@ const router = Router({
|
|
|
3102
3998
|
params: true,
|
|
3103
3999
|
});
|
|
3104
4000
|
router.all("/api/v1/health/*", (req, res) => {
|
|
3105
|
-
return router$
|
|
4001
|
+
return router$b(req, res, finalhandler(req, res));
|
|
3106
4002
|
});
|
|
3107
4003
|
router.all("/api/v1/mock/*", (req, res) => {
|
|
3108
|
-
return router$
|
|
4004
|
+
return router$a(req, res, finalhandler(req, res));
|
|
3109
4005
|
});
|
|
3110
4006
|
router.all("/api/v1/view/*", (req, res) => {
|
|
3111
|
-
return router$
|
|
4007
|
+
return router$9(req, res, finalhandler(req, res));
|
|
3112
4008
|
});
|
|
3113
4009
|
router.all("/api/v1/markdown_mock/*", (req, res) => {
|
|
3114
|
-
return router$
|
|
4010
|
+
return router$6(req, res, finalhandler(req, res));
|
|
3115
4011
|
});
|
|
3116
4012
|
router.all("/api/v1/markdown_view/*", (req, res) => {
|
|
4013
|
+
return router$5(req, res, finalhandler(req, res));
|
|
4014
|
+
});
|
|
4015
|
+
router.all("/api/v1/explorer_mock/*", (req, res) => {
|
|
4016
|
+
return router$4(req, res, finalhandler(req, res));
|
|
4017
|
+
});
|
|
4018
|
+
router.all("/api/v1/explorer_view/*", (req, res) => {
|
|
3117
4019
|
return router$3(req, res, finalhandler(req, res));
|
|
3118
4020
|
});
|
|
3119
4021
|
router.all("/icon/*", (req, res) => {
|
|
3120
|
-
return router$
|
|
4022
|
+
return router$8(req, res, finalhandler(req, res));
|
|
3121
4023
|
});
|
|
3122
4024
|
router.all("/api/v1/dict/*", (req, res) => {
|
|
3123
|
-
return router$
|
|
4025
|
+
return router$7(req, res, finalhandler(req, res));
|
|
3124
4026
|
});
|
|
3125
4027
|
router.all("/api/v1/global/*", (req, res) => {
|
|
3126
4028
|
return router$2(req, res, finalhandler(req, res));
|