@backtest-kit/ui 5.6.0 → 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 +1172 -188
- package/build/index.mjs +1173 -189
- 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-BGXaqCCj.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-Brhl60Pa.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-BFfvVHkP.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 +84 -1
- package/build/modules/frontend/build/assets/IconPhoto-NqvLnXp7.js +0 -1
- package/build/modules/frontend/build/assets/Refresh-BGkaUatF.js +0 -1
- package/build/modules/frontend/build/assets/hasRouteMatch-7UKYuS0a.js +0 -1
- package/build/modules/frontend/build/assets/html2canvas-D-Nv0RTX.js +0 -1
- package/build/modules/frontend/build/assets/index-4xZ56Pw3.js +0 -231
- package/build/modules/frontend/build/assets/index-9iaIzgTc.js +0 -1331
- package/build/modules/frontend/build/assets/index-BDV9EkEY.js +0 -1
- package/build/modules/frontend/build/assets/index-BYCwoppH.js +0 -1
- package/build/modules/frontend/build/assets/index-CbQBf22x.js +0 -1
- package/build/modules/frontend/build/assets/index-CywcKDZi.js +0 -1
- package/build/modules/frontend/build/assets/index-D3HRM1Jy.js +0 -1
- package/build/modules/frontend/build/assets/index-DG7b0pa9.js +0 -1
- package/build/modules/frontend/build/assets/markdownit-GU6B-6e7.js +0 -1
package/build/index.cjs
CHANGED
|
@@ -11,6 +11,8 @@ var diKit = require('di-kit');
|
|
|
11
11
|
var backtestKit = require('backtest-kit');
|
|
12
12
|
var fs = require('fs/promises');
|
|
13
13
|
var path = require('path');
|
|
14
|
+
var mime = require('mime-types');
|
|
15
|
+
var crypto = require('crypto');
|
|
14
16
|
var module$1 = require('module');
|
|
15
17
|
var fs$1 = require('fs');
|
|
16
18
|
|
|
@@ -20,10 +22,10 @@ const CC_WWWROOT_HOST = process.env.CC_WWWROOT_HOST || "0.0.0.0";
|
|
|
20
22
|
const CC_WWWROOT_PORT = parseInt(process.env.CC_WWWROOT_PORT) || 60050;
|
|
21
23
|
const CC_ENABLE_MOCK = !!parseInt(process.env.CC_ENABLE_MOCK) || false;
|
|
22
24
|
|
|
23
|
-
const router$
|
|
25
|
+
const router$b = Router({
|
|
24
26
|
params: true,
|
|
25
27
|
});
|
|
26
|
-
router$
|
|
28
|
+
router$b.get("/api/v1/health/health_check", async (req, res) => {
|
|
27
29
|
const [cpuLoad] = os.loadavg();
|
|
28
30
|
return await micro.send(res, 200, {
|
|
29
31
|
uptime: process.uptime(),
|
|
@@ -72,6 +74,9 @@ const mockServices$1 = {
|
|
|
72
74
|
logMockService: Symbol("logMockService"),
|
|
73
75
|
statusMockService: Symbol("statusMockService"),
|
|
74
76
|
markdownMockService: Symbol("markdownMockService"),
|
|
77
|
+
explorerMockService: Symbol("explorerMockService"),
|
|
78
|
+
signalMockService: Symbol("signalMockService"),
|
|
79
|
+
heatMockService: Symbol("heatMockService"),
|
|
75
80
|
};
|
|
76
81
|
const viewServices$1 = {
|
|
77
82
|
notificationViewService: Symbol("notificationViewService"),
|
|
@@ -80,6 +85,9 @@ const viewServices$1 = {
|
|
|
80
85
|
logViewService: Symbol("logViewService"),
|
|
81
86
|
statusViewService: Symbol("statusViewService"),
|
|
82
87
|
markdownViewService: Symbol("markdownViewService"),
|
|
88
|
+
explorerViewService: Symbol("explorerViewService"),
|
|
89
|
+
signalViewService: Symbol("signalViewService"),
|
|
90
|
+
heatViewService: Symbol("heatViewService"),
|
|
83
91
|
};
|
|
84
92
|
const TYPES = {
|
|
85
93
|
...baseServices$1,
|
|
@@ -148,6 +156,14 @@ class ExchangeService {
|
|
|
148
156
|
exchangeName: dto.exchangeName,
|
|
149
157
|
}, undefined, sDate, eDate);
|
|
150
158
|
};
|
|
159
|
+
this.getLastCandles = async (dto) => {
|
|
160
|
+
this.loggerService.log("exchangeService getLastCandles", {
|
|
161
|
+
dto,
|
|
162
|
+
});
|
|
163
|
+
return await backtestKit.Exchange.getCandles(dto.symbol, dto.interval, dto.limit, {
|
|
164
|
+
exchangeName: dto.exchangeName,
|
|
165
|
+
});
|
|
166
|
+
};
|
|
151
167
|
}
|
|
152
168
|
}
|
|
153
169
|
|
|
@@ -182,9 +198,9 @@ class LoggerService {
|
|
|
182
198
|
}
|
|
183
199
|
}
|
|
184
200
|
|
|
185
|
-
const MOCK_PATH$
|
|
201
|
+
const MOCK_PATH$5 = "./mock/notifications.json";
|
|
186
202
|
const READ_NOTIFICATION_LIST_FN = functoolsKit.singleshot(async () => {
|
|
187
|
-
const data = await fs.readFile(MOCK_PATH$
|
|
203
|
+
const data = await fs.readFile(MOCK_PATH$5, "utf-8");
|
|
188
204
|
return JSON.parse(data);
|
|
189
205
|
});
|
|
190
206
|
const DEFAULT_LIMIT$3 = 25;
|
|
@@ -244,9 +260,9 @@ class NotificationMockService {
|
|
|
244
260
|
}
|
|
245
261
|
}
|
|
246
262
|
|
|
247
|
-
const MOCK_PATH$
|
|
263
|
+
const MOCK_PATH$4 = "./mock/db";
|
|
248
264
|
const READ_BACKTEST_STORAGE_FN = functoolsKit.singleshot(async () => {
|
|
249
|
-
const dbPath = path.join(process.cwd(), MOCK_PATH$
|
|
265
|
+
const dbPath = path.join(process.cwd(), MOCK_PATH$4);
|
|
250
266
|
const files = await fs.readdir(dbPath);
|
|
251
267
|
const signals = [];
|
|
252
268
|
for (const file of files) {
|
|
@@ -281,7 +297,7 @@ class StorageMockService {
|
|
|
281
297
|
}
|
|
282
298
|
}
|
|
283
299
|
|
|
284
|
-
const
|
|
300
|
+
const HISTORY_LAST_CANDLES_LIMIT$1 = 200;
|
|
285
301
|
class ExchangeMockService {
|
|
286
302
|
constructor() {
|
|
287
303
|
this.loggerService = inject(TYPES.loggerService);
|
|
@@ -314,22 +330,56 @@ class ExchangeMockService {
|
|
|
314
330
|
if (!signal) {
|
|
315
331
|
throw new Error(`Signal with ID ${signalId} not found`);
|
|
316
332
|
}
|
|
317
|
-
const { pendingAt, scheduledAt,
|
|
333
|
+
const { pendingAt, scheduledAt, updatedAt } = signal;
|
|
318
334
|
const eventAt = pendingAt || scheduledAt;
|
|
319
335
|
return await this.exchangeService.getRangeCandles({
|
|
320
336
|
symbol: signal.symbol,
|
|
321
337
|
exchangeName: signal.exchangeName,
|
|
322
338
|
signalStartTime: eventAt,
|
|
323
|
-
signalStopTime:
|
|
339
|
+
signalStopTime: backtestKit.alignToInterval(new Date(updatedAt), interval).getTime(),
|
|
340
|
+
interval,
|
|
341
|
+
});
|
|
342
|
+
};
|
|
343
|
+
this.getLastCandles = async (symbol, interval) => {
|
|
344
|
+
this.loggerService.log("exchangeMockService getLastCandles", {
|
|
345
|
+
symbol,
|
|
324
346
|
interval,
|
|
325
347
|
});
|
|
348
|
+
const [backtestItem] = await backtestKit.Backtest.list();
|
|
349
|
+
const [liveItem] = await backtestKit.Live.list();
|
|
350
|
+
const [exchangeItem] = await backtestKit.listExchangeSchema();
|
|
351
|
+
if (backtestItem) {
|
|
352
|
+
return await this.exchangeService.getLastCandles({
|
|
353
|
+
symbol,
|
|
354
|
+
limit: HISTORY_LAST_CANDLES_LIMIT$1,
|
|
355
|
+
exchangeName: backtestItem.exchangeName,
|
|
356
|
+
interval,
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
if (liveItem) {
|
|
360
|
+
return await this.exchangeService.getLastCandles({
|
|
361
|
+
symbol,
|
|
362
|
+
limit: HISTORY_LAST_CANDLES_LIMIT$1,
|
|
363
|
+
exchangeName: liveItem.exchangeName,
|
|
364
|
+
interval,
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
if (exchangeItem) {
|
|
368
|
+
return await this.exchangeService.getLastCandles({
|
|
369
|
+
symbol,
|
|
370
|
+
limit: HISTORY_LAST_CANDLES_LIMIT$1,
|
|
371
|
+
exchangeName: exchangeItem.exchangeName,
|
|
372
|
+
interval,
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
throw new Error(`exchangeMockService getLastCandles no pending strategy symbol=${symbol} interval=${interval}`);
|
|
326
376
|
};
|
|
327
377
|
}
|
|
328
378
|
}
|
|
329
379
|
|
|
330
|
-
const MOCK_PATH$
|
|
380
|
+
const MOCK_PATH$3 = "./mock/logs.json";
|
|
331
381
|
const READ_LOG_LIST_FN = functoolsKit.singleshot(async () => {
|
|
332
|
-
const data = await fs.readFile(MOCK_PATH$
|
|
382
|
+
const data = await fs.readFile(MOCK_PATH$3, "utf-8");
|
|
333
383
|
return JSON.parse(data);
|
|
334
384
|
});
|
|
335
385
|
const DEFAULT_LIMIT$2 = 25;
|
|
@@ -377,14 +427,24 @@ class LogMockService {
|
|
|
377
427
|
}
|
|
378
428
|
}
|
|
379
429
|
|
|
380
|
-
const MOCK_PATH = "./mock/status.json";
|
|
430
|
+
const MOCK_PATH$2 = "./mock/status.json";
|
|
431
|
+
const MOCK_INFO_PATH = "./mock/status-info.json";
|
|
381
432
|
const READ_STATUS_LIST_FN = functoolsKit.singleshot(async () => {
|
|
382
|
-
const data = await fs.readFile(MOCK_PATH, "utf-8");
|
|
433
|
+
const data = await fs.readFile(MOCK_PATH$2, "utf-8");
|
|
434
|
+
return JSON.parse(data);
|
|
435
|
+
});
|
|
436
|
+
const READ_STATUS_INFO_FN = functoolsKit.singleshot(async () => {
|
|
437
|
+
const data = await fs.readFile(MOCK_INFO_PATH, "utf-8");
|
|
383
438
|
return JSON.parse(data);
|
|
384
439
|
});
|
|
385
440
|
class StatusMockService {
|
|
386
441
|
constructor() {
|
|
387
442
|
this.loggerService = inject(TYPES.loggerService);
|
|
443
|
+
this.signalMockService = inject(TYPES.signalMockService);
|
|
444
|
+
this.getStatusInfo = async () => {
|
|
445
|
+
this.loggerService.log("statusMockService getStatusInfo");
|
|
446
|
+
return await READ_STATUS_INFO_FN();
|
|
447
|
+
};
|
|
388
448
|
this.getStatusList = async () => {
|
|
389
449
|
this.loggerService.log("statusMockService getStatusList");
|
|
390
450
|
const list = await READ_STATUS_LIST_FN();
|
|
@@ -404,33 +464,36 @@ class StatusMockService {
|
|
|
404
464
|
this.getStatusOne = async (id) => {
|
|
405
465
|
this.loggerService.log("statusMockService getStatusOne", { id });
|
|
406
466
|
const list = await READ_STATUS_LIST_FN();
|
|
407
|
-
const
|
|
408
|
-
if (!
|
|
467
|
+
const status = list.find((s) => s.id === id);
|
|
468
|
+
if (!status) {
|
|
409
469
|
return null;
|
|
410
470
|
}
|
|
411
|
-
const
|
|
471
|
+
const updatedAt = await this.signalMockService.getLastUpdateTimestamp(status.signalId);
|
|
472
|
+
const positionEntries = status._entry ?? [];
|
|
412
473
|
const positionLevels = positionEntries.map((e) => e.price);
|
|
413
|
-
const positionPartials =
|
|
474
|
+
const positionPartials = status._partial ?? [];
|
|
414
475
|
return {
|
|
415
|
-
signalId:
|
|
416
|
-
position:
|
|
417
|
-
symbol:
|
|
418
|
-
exchangeName:
|
|
419
|
-
strategyName:
|
|
420
|
-
totalEntries:
|
|
421
|
-
totalPartials:
|
|
422
|
-
originalPriceStopLoss:
|
|
423
|
-
originalPriceTakeProfit:
|
|
424
|
-
originalPriceOpen:
|
|
425
|
-
priceOpen:
|
|
426
|
-
priceTakeProfit:
|
|
427
|
-
priceStopLoss:
|
|
428
|
-
pnlPercentage:
|
|
429
|
-
pnlCost:
|
|
430
|
-
pnlEntries:
|
|
431
|
-
partialExecuted:
|
|
432
|
-
minuteEstimatedTime:
|
|
433
|
-
pendingAt:
|
|
476
|
+
signalId: status.signalId,
|
|
477
|
+
position: status.position,
|
|
478
|
+
symbol: status.symbol,
|
|
479
|
+
exchangeName: status.exchangeName,
|
|
480
|
+
strategyName: status.strategyName,
|
|
481
|
+
totalEntries: status.totalEntries,
|
|
482
|
+
totalPartials: status.totalPartials,
|
|
483
|
+
originalPriceStopLoss: status.originalPriceStopLoss,
|
|
484
|
+
originalPriceTakeProfit: status.originalPriceTakeProfit,
|
|
485
|
+
originalPriceOpen: status.originalPriceOpen,
|
|
486
|
+
priceOpen: status.priceOpen,
|
|
487
|
+
priceTakeProfit: status.priceTakeProfit,
|
|
488
|
+
priceStopLoss: status.priceStopLoss,
|
|
489
|
+
pnlPercentage: status.pnl.pnlPercentage,
|
|
490
|
+
pnlCost: status.pnl.pnlCost,
|
|
491
|
+
pnlEntries: status.pnl.pnlEntries,
|
|
492
|
+
partialExecuted: status.partialExecuted,
|
|
493
|
+
minuteEstimatedTime: status.minuteEstimatedTime,
|
|
494
|
+
pendingAt: status.pendingAt,
|
|
495
|
+
timestamp: status.timestamp,
|
|
496
|
+
updatedAt,
|
|
434
497
|
positionLevels,
|
|
435
498
|
positionEntries,
|
|
436
499
|
positionPartials,
|
|
@@ -443,6 +506,7 @@ const MOCK_DIR = "./mock/markdown";
|
|
|
443
506
|
const makeReader = (fileName) => functoolsKit.singleshot(() => fs.readFile(path.join(MOCK_DIR, fileName), "utf-8"));
|
|
444
507
|
const makeDataReader = (fileName) => functoolsKit.singleshot(async () => JSON.parse(await fs.readFile(path.join(MOCK_DIR, "data", fileName), "utf-8")));
|
|
445
508
|
const readBacktest = makeReader("backtest.md");
|
|
509
|
+
const readStrategy = makeReader("strategy.md");
|
|
446
510
|
const readLive = makeReader("live.md");
|
|
447
511
|
const readBreakeven = makeReader("breakeven.md");
|
|
448
512
|
const readRisk = makeReader("risk.md");
|
|
@@ -454,6 +518,7 @@ const readSync = makeReader("sync.md");
|
|
|
454
518
|
const readHeat = makeReader("heat.md");
|
|
455
519
|
const readWalker = makeReader("walker.md");
|
|
456
520
|
const readBacktestData = makeDataReader("backtest.json");
|
|
521
|
+
const readStrategyData = makeDataReader("strategy.json");
|
|
457
522
|
const readLiveData = makeDataReader("live.json");
|
|
458
523
|
const readBreakevenData = makeDataReader("breakeven.json");
|
|
459
524
|
const readRiskData = makeDataReader("risk.json");
|
|
@@ -467,6 +532,15 @@ const readWalkerData = makeDataReader("walker.json");
|
|
|
467
532
|
class MarkdownMockService {
|
|
468
533
|
constructor() {
|
|
469
534
|
this.loggerService = inject(TYPES.loggerService);
|
|
535
|
+
// Strategy
|
|
536
|
+
this.getStrategyData = async (symbol, strategyName, exchangeName, frameName) => {
|
|
537
|
+
this.loggerService.log("markdownMockService getStrategyData", { symbol, strategyName, exchangeName, frameName });
|
|
538
|
+
return readStrategyData();
|
|
539
|
+
};
|
|
540
|
+
this.getStrategyReport = async (symbol, strategyName, exchangeName, frameName) => {
|
|
541
|
+
this.loggerService.log("markdownMockService getStrategyReport", { symbol, strategyName, exchangeName, frameName });
|
|
542
|
+
return readStrategy();
|
|
543
|
+
};
|
|
470
544
|
// Backtest
|
|
471
545
|
this.getBacktestData = async (symbol, strategyName, exchangeName, frameName) => {
|
|
472
546
|
this.loggerService.log("markdownMockService getBacktestData", { symbol, strategyName, exchangeName, frameName });
|
|
@@ -569,6 +643,127 @@ class MarkdownMockService {
|
|
|
569
643
|
}
|
|
570
644
|
}
|
|
571
645
|
|
|
646
|
+
const deepFlat = (arr) => {
|
|
647
|
+
const result = [];
|
|
648
|
+
const seen = new Set();
|
|
649
|
+
const process = (entries = []) => entries.forEach((entry) => {
|
|
650
|
+
if (seen.has(entry)) {
|
|
651
|
+
return;
|
|
652
|
+
}
|
|
653
|
+
seen.add(entry);
|
|
654
|
+
if (entry.type === "directory") {
|
|
655
|
+
process(entry.nodes);
|
|
656
|
+
}
|
|
657
|
+
result.push(entry);
|
|
658
|
+
});
|
|
659
|
+
process(arr);
|
|
660
|
+
return result;
|
|
661
|
+
};
|
|
662
|
+
const MOCK_PATH$1 = "./mock/explorer.json";
|
|
663
|
+
const READ_EXPLORER_TREE_FN = functoolsKit.singleshot(async () => {
|
|
664
|
+
const data = await fs.readFile(MOCK_PATH$1, "utf-8");
|
|
665
|
+
return JSON.parse(data);
|
|
666
|
+
});
|
|
667
|
+
const READ_EXPLORER_INDEX_FN = functoolsKit.singleshot(async () => {
|
|
668
|
+
const tree = await READ_EXPLORER_TREE_FN();
|
|
669
|
+
const treeList = deepFlat(tree);
|
|
670
|
+
if (treeList.length === 0) {
|
|
671
|
+
return {};
|
|
672
|
+
}
|
|
673
|
+
return treeList.reduce((acm, cur) => {
|
|
674
|
+
if (cur.type === "file" && "content" in cur) {
|
|
675
|
+
return { ...acm, [cur.path]: cur };
|
|
676
|
+
}
|
|
677
|
+
return acm;
|
|
678
|
+
}, {});
|
|
679
|
+
});
|
|
680
|
+
class ExplorerMockService {
|
|
681
|
+
constructor() {
|
|
682
|
+
this.loggerService = inject(TYPES.loggerService);
|
|
683
|
+
this.getNode = async (nodePath) => {
|
|
684
|
+
this.loggerService.log("explorerMockService getNode", {
|
|
685
|
+
nodePath,
|
|
686
|
+
});
|
|
687
|
+
const index = await READ_EXPLORER_INDEX_FN();
|
|
688
|
+
return index[nodePath]?.content ?? "";
|
|
689
|
+
};
|
|
690
|
+
this.getTree = async () => {
|
|
691
|
+
this.loggerService.log("explorerMockService getTree");
|
|
692
|
+
return await READ_EXPLORER_TREE_FN();
|
|
693
|
+
};
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
const MOCK_PATH = "./mock/db";
|
|
698
|
+
const MOCK_SIGNAL_PATH = "./mock/signal.json";
|
|
699
|
+
const READ_SIGNAL_STORAGE_FN = functoolsKit.singleshot(async () => {
|
|
700
|
+
const dbPath = path.join(process.cwd(), MOCK_PATH);
|
|
701
|
+
const files = await fs.readdir(dbPath);
|
|
702
|
+
const signals = [];
|
|
703
|
+
for (const file of files) {
|
|
704
|
+
if (!file.endsWith(".json")) {
|
|
705
|
+
continue;
|
|
706
|
+
}
|
|
707
|
+
const filePath = path.join(dbPath, file);
|
|
708
|
+
signals.push(JSON.parse(await fs.readFile(filePath, "utf-8")));
|
|
709
|
+
}
|
|
710
|
+
return signals;
|
|
711
|
+
});
|
|
712
|
+
const READ_PENDING_SIGNAL_FN = functoolsKit.singleshot(async () => {
|
|
713
|
+
const filePath = path.join(process.cwd(), MOCK_SIGNAL_PATH);
|
|
714
|
+
return JSON.parse(await fs.readFile(filePath, "utf-8"));
|
|
715
|
+
});
|
|
716
|
+
class SignalMockService {
|
|
717
|
+
constructor() {
|
|
718
|
+
this.loggerService = inject(TYPES.loggerService);
|
|
719
|
+
this.getLastUpdateTimestamp = async (signalId) => {
|
|
720
|
+
this.loggerService.log("signalMockService getLastUpdateTimestamp", {
|
|
721
|
+
signalId,
|
|
722
|
+
});
|
|
723
|
+
const signalList = await READ_SIGNAL_STORAGE_FN();
|
|
724
|
+
const signalMap = new Map(signalList.map((signal) => [signal.id, signal]));
|
|
725
|
+
const signal = signalMap.get(signalId);
|
|
726
|
+
if (!signal) {
|
|
727
|
+
throw new Error(`SignalMockService getLastUpdateTimestamp signal not found signalId=${signalId}`);
|
|
728
|
+
}
|
|
729
|
+
return signal.updatedAt;
|
|
730
|
+
};
|
|
731
|
+
this.getPendingSignal = async (symbol) => {
|
|
732
|
+
this.loggerService.log("signalMockService getPendingSignal", {
|
|
733
|
+
symbol,
|
|
734
|
+
});
|
|
735
|
+
const signal = await READ_PENDING_SIGNAL_FN();
|
|
736
|
+
if (signal.symbol !== symbol) {
|
|
737
|
+
return null;
|
|
738
|
+
}
|
|
739
|
+
return signal;
|
|
740
|
+
};
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
const MOCK_DATA_PATH = "./mock/heat.json";
|
|
745
|
+
const MOCK_REPORT_PATH = "./mock/heat-report.md";
|
|
746
|
+
const READ_HEAT_DATA_FN = functoolsKit.singleshot(async () => {
|
|
747
|
+
const data = await fs.readFile(MOCK_DATA_PATH, "utf-8");
|
|
748
|
+
return JSON.parse(data);
|
|
749
|
+
});
|
|
750
|
+
const READ_HEAT_REPORT_FN = functoolsKit.singleshot(async () => {
|
|
751
|
+
return await fs.readFile(MOCK_REPORT_PATH, "utf-8");
|
|
752
|
+
});
|
|
753
|
+
class HeatMockService {
|
|
754
|
+
constructor() {
|
|
755
|
+
this.loggerService = inject(TYPES.loggerService);
|
|
756
|
+
this.getStrategyHeatData = async () => {
|
|
757
|
+
this.loggerService.log("heatMockService getStrategyHeatData");
|
|
758
|
+
return await READ_HEAT_DATA_FN();
|
|
759
|
+
};
|
|
760
|
+
this.getStrategyHeatReport = async () => {
|
|
761
|
+
this.loggerService.log("heatMockService getStrategyHeatReport");
|
|
762
|
+
return await READ_HEAT_REPORT_FN();
|
|
763
|
+
};
|
|
764
|
+
}
|
|
765
|
+
}
|
|
766
|
+
|
|
572
767
|
const DEFAULT_LIMIT$1 = 25;
|
|
573
768
|
const DEFAULT_OFFSET$1 = 0;
|
|
574
769
|
const CREATE_FILTER_LIST_FN$1 = (filterData) => Object.keys(filterData).map((key) => (row) => new RegExp(filterData[key], "i").test(row[key]));
|
|
@@ -713,13 +908,14 @@ class StorageViewService {
|
|
|
713
908
|
}
|
|
714
909
|
}
|
|
715
910
|
|
|
716
|
-
const
|
|
911
|
+
const HISTORY_LAST_CANDLES_LIMIT = 200;
|
|
717
912
|
class ExchangeViewService {
|
|
718
913
|
constructor() {
|
|
719
914
|
this.loggerService = inject(TYPES.loggerService);
|
|
720
915
|
this.storageViewService = inject(TYPES.storageViewService);
|
|
721
916
|
this.exchangeService = inject(TYPES.exchangeService);
|
|
722
917
|
this.exchangeMockService = inject(TYPES.exchangeMockService);
|
|
918
|
+
this.signalViewService = inject(TYPES.signalViewService);
|
|
723
919
|
this.getSignalCandles = async (signalId, interval) => {
|
|
724
920
|
this.loggerService.log("exchangeViewService getCandles", {
|
|
725
921
|
signalId,
|
|
@@ -753,15 +949,53 @@ class ExchangeViewService {
|
|
|
753
949
|
if (!signal) {
|
|
754
950
|
throw new Error(`Signal with ID ${signalId} not found`);
|
|
755
951
|
}
|
|
756
|
-
const { pendingAt, scheduledAt
|
|
952
|
+
const { pendingAt, scheduledAt } = signal;
|
|
757
953
|
const eventAt = pendingAt || scheduledAt;
|
|
954
|
+
const updatedAt = await this.signalViewService.getLastUpdateTimestamp(signalId);
|
|
758
955
|
return await this.exchangeService.getRangeCandles({
|
|
759
956
|
symbol: signal.symbol,
|
|
760
957
|
exchangeName: signal.exchangeName,
|
|
761
958
|
signalStartTime: eventAt,
|
|
762
|
-
signalStopTime:
|
|
959
|
+
signalStopTime: backtestKit.alignToInterval(new Date(updatedAt), interval).getTime(),
|
|
960
|
+
interval,
|
|
961
|
+
});
|
|
962
|
+
};
|
|
963
|
+
this.getLastCandles = async (symbol, interval) => {
|
|
964
|
+
this.loggerService.log("exchangeViewService getLastCandles", {
|
|
965
|
+
symbol,
|
|
763
966
|
interval,
|
|
764
967
|
});
|
|
968
|
+
if (CC_ENABLE_MOCK) {
|
|
969
|
+
return await this.exchangeMockService.getLastCandles(symbol, interval);
|
|
970
|
+
}
|
|
971
|
+
const [backtestItem] = await backtestKit.Backtest.list();
|
|
972
|
+
const [liveItem] = await backtestKit.Live.list();
|
|
973
|
+
const [exchangeItem] = await backtestKit.listExchangeSchema();
|
|
974
|
+
if (backtestItem) {
|
|
975
|
+
return await this.exchangeService.getLastCandles({
|
|
976
|
+
symbol,
|
|
977
|
+
limit: HISTORY_LAST_CANDLES_LIMIT,
|
|
978
|
+
exchangeName: backtestItem.exchangeName,
|
|
979
|
+
interval,
|
|
980
|
+
});
|
|
981
|
+
}
|
|
982
|
+
if (liveItem) {
|
|
983
|
+
return await this.exchangeService.getLastCandles({
|
|
984
|
+
symbol,
|
|
985
|
+
limit: HISTORY_LAST_CANDLES_LIMIT,
|
|
986
|
+
exchangeName: liveItem.exchangeName,
|
|
987
|
+
interval,
|
|
988
|
+
});
|
|
989
|
+
}
|
|
990
|
+
if (exchangeItem) {
|
|
991
|
+
return await this.exchangeService.getLastCandles({
|
|
992
|
+
symbol,
|
|
993
|
+
limit: HISTORY_LAST_CANDLES_LIMIT,
|
|
994
|
+
exchangeName: exchangeItem.exchangeName,
|
|
995
|
+
interval,
|
|
996
|
+
});
|
|
997
|
+
}
|
|
998
|
+
throw new Error(`exchangeViewService getLastCandles no pending strategy symbol=${symbol} interval=${interval}`);
|
|
765
999
|
};
|
|
766
1000
|
}
|
|
767
1001
|
}
|
|
@@ -825,6 +1059,7 @@ class StatusViewService {
|
|
|
825
1059
|
constructor() {
|
|
826
1060
|
this.loggerService = inject(TYPES.loggerService);
|
|
827
1061
|
this.statusMockService = inject(TYPES.statusMockService);
|
|
1062
|
+
this.signalViewService = inject(TYPES.signalViewService);
|
|
828
1063
|
this.getStatusList = async () => {
|
|
829
1064
|
this.loggerService.log("statusViewService getStatusList");
|
|
830
1065
|
if (CC_ENABLE_MOCK) {
|
|
@@ -887,6 +1122,12 @@ class StatusViewService {
|
|
|
887
1122
|
if (!positionPartials) {
|
|
888
1123
|
return null;
|
|
889
1124
|
}
|
|
1125
|
+
const timestamp = await backtestKit.lib.timeMetaService.getTimestamp(pendingSignal.symbol, {
|
|
1126
|
+
strategyName: pendingSignal.strategyName,
|
|
1127
|
+
exchangeName: pendingSignal.exchangeName,
|
|
1128
|
+
frameName: pendingSignal.frameName,
|
|
1129
|
+
}, false);
|
|
1130
|
+
const updatedAt = await this.signalViewService.getLastUpdateTimestamp(pendingSignal.id);
|
|
890
1131
|
return {
|
|
891
1132
|
signalId: pendingSignal.id,
|
|
892
1133
|
position: pendingSignal.position,
|
|
@@ -907,11 +1148,80 @@ class StatusViewService {
|
|
|
907
1148
|
partialExecuted: pendingSignal.partialExecuted,
|
|
908
1149
|
pendingAt: pendingSignal.pendingAt,
|
|
909
1150
|
minuteEstimatedTime: pendingSignal.minuteEstimatedTime,
|
|
1151
|
+
timestamp,
|
|
1152
|
+
updatedAt,
|
|
910
1153
|
positionEntries,
|
|
911
1154
|
positionLevels,
|
|
912
1155
|
positionPartials,
|
|
913
1156
|
};
|
|
914
1157
|
};
|
|
1158
|
+
this.getStatusInfo = async () => {
|
|
1159
|
+
this.loggerService.log("statusViewService getStatusInfo");
|
|
1160
|
+
if (CC_ENABLE_MOCK) {
|
|
1161
|
+
return this.statusMockService.getStatusInfo();
|
|
1162
|
+
}
|
|
1163
|
+
{
|
|
1164
|
+
const [backtestTarget = null] = await backtestKit.Backtest.list();
|
|
1165
|
+
if (backtestTarget) {
|
|
1166
|
+
const currentHeat = await backtestKit.Heat.getData({
|
|
1167
|
+
strategyName: backtestTarget.strategyName,
|
|
1168
|
+
exchangeName: backtestTarget.exchangeName,
|
|
1169
|
+
frameName: backtestTarget.frameName,
|
|
1170
|
+
});
|
|
1171
|
+
return {
|
|
1172
|
+
context: {
|
|
1173
|
+
strategyName: backtestTarget.strategyName,
|
|
1174
|
+
exchangeName: backtestTarget.exchangeName,
|
|
1175
|
+
frameName: backtestTarget.frameName,
|
|
1176
|
+
},
|
|
1177
|
+
portfolioTotalPnl: currentHeat.portfolioTotalPnl,
|
|
1178
|
+
portfolioSharpeRatio: currentHeat.portfolioSharpeRatio,
|
|
1179
|
+
portfolioTotalTrades: currentHeat.portfolioTotalTrades,
|
|
1180
|
+
symbols: currentHeat.symbols.map(({ symbol, totalPnl, winRate, profitFactor, maxDrawdown, expectancy, totalTrades }) => ({
|
|
1181
|
+
symbol,
|
|
1182
|
+
totalPnl,
|
|
1183
|
+
winRate,
|
|
1184
|
+
profitFactor,
|
|
1185
|
+
maxDrawdown,
|
|
1186
|
+
expectancy,
|
|
1187
|
+
totalTrades,
|
|
1188
|
+
})),
|
|
1189
|
+
backtest: true,
|
|
1190
|
+
};
|
|
1191
|
+
}
|
|
1192
|
+
}
|
|
1193
|
+
{
|
|
1194
|
+
const [liveTarget = null] = await backtestKit.Live.list();
|
|
1195
|
+
if (liveTarget) {
|
|
1196
|
+
const currentHeat = await backtestKit.Heat.getData({
|
|
1197
|
+
strategyName: liveTarget.strategyName,
|
|
1198
|
+
exchangeName: liveTarget.exchangeName,
|
|
1199
|
+
frameName: "",
|
|
1200
|
+
});
|
|
1201
|
+
return {
|
|
1202
|
+
context: {
|
|
1203
|
+
strategyName: liveTarget.strategyName,
|
|
1204
|
+
exchangeName: liveTarget.exchangeName,
|
|
1205
|
+
frameName: "",
|
|
1206
|
+
},
|
|
1207
|
+
portfolioTotalPnl: currentHeat.portfolioTotalPnl,
|
|
1208
|
+
portfolioSharpeRatio: currentHeat.portfolioSharpeRatio,
|
|
1209
|
+
portfolioTotalTrades: currentHeat.portfolioTotalTrades,
|
|
1210
|
+
symbols: currentHeat.symbols.map(({ symbol, totalPnl, winRate, profitFactor, maxDrawdown, expectancy, totalTrades }) => ({
|
|
1211
|
+
symbol,
|
|
1212
|
+
totalPnl,
|
|
1213
|
+
winRate,
|
|
1214
|
+
profitFactor,
|
|
1215
|
+
maxDrawdown,
|
|
1216
|
+
expectancy,
|
|
1217
|
+
totalTrades,
|
|
1218
|
+
})),
|
|
1219
|
+
backtest: false,
|
|
1220
|
+
};
|
|
1221
|
+
}
|
|
1222
|
+
}
|
|
1223
|
+
return null;
|
|
1224
|
+
};
|
|
915
1225
|
}
|
|
916
1226
|
}
|
|
917
1227
|
|
|
@@ -919,6 +1229,21 @@ class MarkdownViewService {
|
|
|
919
1229
|
constructor() {
|
|
920
1230
|
this.loggerService = inject(TYPES.loggerService);
|
|
921
1231
|
this.markdownMockService = inject(TYPES.markdownMockService);
|
|
1232
|
+
// Strategy
|
|
1233
|
+
this.getStrategyData = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
|
|
1234
|
+
this.loggerService.log("markdownViewService getStrategyData", { symbol, strategyName, exchangeName, frameName, backtest });
|
|
1235
|
+
if (CC_ENABLE_MOCK) {
|
|
1236
|
+
return await this.markdownMockService.getStrategyData(symbol, strategyName, exchangeName, frameName);
|
|
1237
|
+
}
|
|
1238
|
+
return await backtestKit.Strategy.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
|
|
1239
|
+
};
|
|
1240
|
+
this.getStrategyReport = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
|
|
1241
|
+
this.loggerService.log("markdownViewService getStrategyReport", { symbol, strategyName, exchangeName, frameName, backtest });
|
|
1242
|
+
if (CC_ENABLE_MOCK) {
|
|
1243
|
+
return await this.markdownMockService.getStrategyReport(symbol, strategyName, exchangeName, frameName);
|
|
1244
|
+
}
|
|
1245
|
+
return await backtestKit.Strategy.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
|
|
1246
|
+
};
|
|
922
1247
|
// Backtest
|
|
923
1248
|
this.getBacktestData = async (symbol, strategyName, exchangeName, frameName) => {
|
|
924
1249
|
this.loggerService.log("markdownViewService getBacktestData", { symbol, strategyName, exchangeName, frameName });
|
|
@@ -1087,6 +1412,185 @@ class MarkdownViewService {
|
|
|
1087
1412
|
}
|
|
1088
1413
|
}
|
|
1089
1414
|
|
|
1415
|
+
const pathId = (p) => crypto.createHash("sha1").update(p).digest("hex").slice(0, 16);
|
|
1416
|
+
const buildTree = async (dir, visited) => {
|
|
1417
|
+
const realDir = await fs.realpath(dir);
|
|
1418
|
+
if (visited.has(realDir)) {
|
|
1419
|
+
return [];
|
|
1420
|
+
}
|
|
1421
|
+
visited.add(realDir);
|
|
1422
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
1423
|
+
const nodes = [];
|
|
1424
|
+
for (const entry of entries) {
|
|
1425
|
+
const childPath = path.join(dir, entry.name);
|
|
1426
|
+
const childRelPath = path.relative(process.cwd(), childPath).replace(/\\/g, "/");
|
|
1427
|
+
if (entry.isDirectory()) {
|
|
1428
|
+
nodes.push({
|
|
1429
|
+
id: pathId(childRelPath),
|
|
1430
|
+
path: childRelPath,
|
|
1431
|
+
label: entry.name,
|
|
1432
|
+
type: "directory",
|
|
1433
|
+
nodes: await buildTree(childPath, visited),
|
|
1434
|
+
});
|
|
1435
|
+
}
|
|
1436
|
+
else {
|
|
1437
|
+
nodes.push({
|
|
1438
|
+
id: pathId(childRelPath),
|
|
1439
|
+
path: childRelPath,
|
|
1440
|
+
label: entry.name,
|
|
1441
|
+
type: "file",
|
|
1442
|
+
mimeType: mime.lookup(entry.name) || "application/octet-stream",
|
|
1443
|
+
});
|
|
1444
|
+
}
|
|
1445
|
+
}
|
|
1446
|
+
return nodes;
|
|
1447
|
+
};
|
|
1448
|
+
class ExplorerViewService {
|
|
1449
|
+
constructor() {
|
|
1450
|
+
this.loggerService = inject(TYPES.loggerService);
|
|
1451
|
+
this.explorerMockService = inject(TYPES.explorerMockService);
|
|
1452
|
+
this.getDir = functoolsKit.singleshot(async () => {
|
|
1453
|
+
this.loggerService.log("explorerViewService getDir");
|
|
1454
|
+
const dir = path.join(process.cwd(), "dump");
|
|
1455
|
+
await fs.mkdir(dir, { recursive: true });
|
|
1456
|
+
return dir;
|
|
1457
|
+
});
|
|
1458
|
+
this.getNode = async (nodePath) => {
|
|
1459
|
+
this.loggerService.log("explorerViewService getNode", {
|
|
1460
|
+
nodePath,
|
|
1461
|
+
});
|
|
1462
|
+
if (CC_ENABLE_MOCK) {
|
|
1463
|
+
return await this.explorerMockService.getNode(nodePath);
|
|
1464
|
+
}
|
|
1465
|
+
const dir = await this.getDir();
|
|
1466
|
+
const absPath = path.resolve(process.cwd(), nodePath);
|
|
1467
|
+
if (!absPath.startsWith(dir + path.sep) && !absPath.startsWith(dir + "/") && absPath !== dir) {
|
|
1468
|
+
throw new Error(`Path is outside of dump dir: ${nodePath}`);
|
|
1469
|
+
}
|
|
1470
|
+
return await fs.readFile(absPath, "utf-8");
|
|
1471
|
+
};
|
|
1472
|
+
this.getTree = async () => {
|
|
1473
|
+
this.loggerService.log("explorerViewService getTree");
|
|
1474
|
+
if (CC_ENABLE_MOCK) {
|
|
1475
|
+
return await this.explorerMockService.getTree();
|
|
1476
|
+
}
|
|
1477
|
+
const dir = await this.getDir();
|
|
1478
|
+
const root = path.relative(process.cwd(), dir).replace(/\\/g, "/");
|
|
1479
|
+
const rootNode = {
|
|
1480
|
+
id: pathId(root),
|
|
1481
|
+
path: root,
|
|
1482
|
+
label: path.basename(root),
|
|
1483
|
+
type: "directory",
|
|
1484
|
+
nodes: await buildTree(dir, new Set([path.join(dir, "data")])),
|
|
1485
|
+
};
|
|
1486
|
+
return [rootNode];
|
|
1487
|
+
};
|
|
1488
|
+
}
|
|
1489
|
+
}
|
|
1490
|
+
|
|
1491
|
+
class SignalViewService {
|
|
1492
|
+
constructor() {
|
|
1493
|
+
this.loggerService = inject(TYPES.loggerService);
|
|
1494
|
+
this.signalMockService = inject(TYPES.signalMockService);
|
|
1495
|
+
this.getLastUpdateTimestamp = async (signalId) => {
|
|
1496
|
+
this.loggerService.log("signalViewService getLastUpdateTimestamp", {
|
|
1497
|
+
signalId,
|
|
1498
|
+
});
|
|
1499
|
+
if (CC_ENABLE_MOCK) {
|
|
1500
|
+
return await this.signalMockService.getLastUpdateTimestamp(signalId);
|
|
1501
|
+
}
|
|
1502
|
+
{
|
|
1503
|
+
const liveSignal = await backtestKit.StorageLive.findById(signalId);
|
|
1504
|
+
if (liveSignal) {
|
|
1505
|
+
return liveSignal.updatedAt;
|
|
1506
|
+
}
|
|
1507
|
+
}
|
|
1508
|
+
{
|
|
1509
|
+
const backtestSignal = await backtestKit.StorageBacktest.findById(signalId);
|
|
1510
|
+
if (backtestSignal) {
|
|
1511
|
+
return backtestSignal.updatedAt;
|
|
1512
|
+
}
|
|
1513
|
+
}
|
|
1514
|
+
throw new Error(`SignalViewService getLastUpdateTimestamp signal not found signalId=${signalId}`);
|
|
1515
|
+
};
|
|
1516
|
+
this.getPendingSignal = async (symbol) => {
|
|
1517
|
+
this.loggerService.log("signalViewService getPendingSignal", {
|
|
1518
|
+
symbol,
|
|
1519
|
+
});
|
|
1520
|
+
if (CC_ENABLE_MOCK) {
|
|
1521
|
+
return await this.signalMockService.getPendingSignal(symbol);
|
|
1522
|
+
}
|
|
1523
|
+
{
|
|
1524
|
+
const liveList = await backtestKit.Live.list();
|
|
1525
|
+
const liveTarget = liveList.find((live) => live.symbol === symbol);
|
|
1526
|
+
if (liveTarget) {
|
|
1527
|
+
const currentPrice = await backtestKit.Exchange.getAveragePrice(symbol, {
|
|
1528
|
+
exchangeName: liveTarget.exchangeName,
|
|
1529
|
+
});
|
|
1530
|
+
return await backtestKit.Live.getPendingSignal(symbol, currentPrice, {
|
|
1531
|
+
strategyName: liveTarget.strategyName,
|
|
1532
|
+
exchangeName: liveTarget.exchangeName,
|
|
1533
|
+
});
|
|
1534
|
+
}
|
|
1535
|
+
}
|
|
1536
|
+
return null;
|
|
1537
|
+
};
|
|
1538
|
+
}
|
|
1539
|
+
}
|
|
1540
|
+
|
|
1541
|
+
class HeatViewService {
|
|
1542
|
+
constructor() {
|
|
1543
|
+
this.loggerService = inject(TYPES.loggerService);
|
|
1544
|
+
this.heatMockService = inject(TYPES.heatMockService);
|
|
1545
|
+
this.getStrategyHeatData = async () => {
|
|
1546
|
+
this.loggerService.log("heatViewService getStrategyHeatData");
|
|
1547
|
+
if (CC_ENABLE_MOCK) {
|
|
1548
|
+
return await this.heatMockService.getStrategyHeatData();
|
|
1549
|
+
}
|
|
1550
|
+
const [backtestItem] = await backtestKit.Backtest.list();
|
|
1551
|
+
const [liveItem] = await backtestKit.Live.list();
|
|
1552
|
+
if (backtestItem) {
|
|
1553
|
+
return await backtestKit.Heat.getData({
|
|
1554
|
+
strategyName: backtestItem.strategyName,
|
|
1555
|
+
exchangeName: backtestItem.exchangeName,
|
|
1556
|
+
frameName: backtestItem.frameName,
|
|
1557
|
+
});
|
|
1558
|
+
}
|
|
1559
|
+
if (liveItem) {
|
|
1560
|
+
return await backtestKit.Heat.getData({
|
|
1561
|
+
strategyName: liveItem.strategyName,
|
|
1562
|
+
exchangeName: liveItem.exchangeName,
|
|
1563
|
+
frameName: "",
|
|
1564
|
+
});
|
|
1565
|
+
}
|
|
1566
|
+
return null;
|
|
1567
|
+
};
|
|
1568
|
+
this.getStrategyHeatReport = async () => {
|
|
1569
|
+
this.loggerService.log("heatViewService getStrategyHeatReport");
|
|
1570
|
+
if (CC_ENABLE_MOCK) {
|
|
1571
|
+
return await this.heatMockService.getStrategyHeatReport();
|
|
1572
|
+
}
|
|
1573
|
+
const [backtestItem] = await backtestKit.Backtest.list();
|
|
1574
|
+
const [liveItem] = await backtestKit.Live.list();
|
|
1575
|
+
if (backtestItem) {
|
|
1576
|
+
return await backtestKit.Heat.getReport({
|
|
1577
|
+
strategyName: backtestItem.strategyName,
|
|
1578
|
+
exchangeName: backtestItem.exchangeName,
|
|
1579
|
+
frameName: backtestItem.frameName,
|
|
1580
|
+
});
|
|
1581
|
+
}
|
|
1582
|
+
if (liveItem) {
|
|
1583
|
+
return await backtestKit.Heat.getReport({
|
|
1584
|
+
strategyName: liveItem.strategyName,
|
|
1585
|
+
exchangeName: liveItem.exchangeName,
|
|
1586
|
+
frameName: "",
|
|
1587
|
+
});
|
|
1588
|
+
}
|
|
1589
|
+
return null;
|
|
1590
|
+
};
|
|
1591
|
+
}
|
|
1592
|
+
}
|
|
1593
|
+
|
|
1090
1594
|
const symbol_list = [
|
|
1091
1595
|
{
|
|
1092
1596
|
icon: "/icon/btc.png",
|
|
@@ -1283,6 +1787,9 @@ class LiveMetaService {
|
|
|
1283
1787
|
provide(TYPES.logMockService, () => new LogMockService());
|
|
1284
1788
|
provide(TYPES.statusMockService, () => new StatusMockService());
|
|
1285
1789
|
provide(TYPES.markdownMockService, () => new MarkdownMockService());
|
|
1790
|
+
provide(TYPES.explorerMockService, () => new ExplorerMockService());
|
|
1791
|
+
provide(TYPES.signalMockService, () => new SignalMockService());
|
|
1792
|
+
provide(TYPES.heatMockService, () => new HeatMockService());
|
|
1286
1793
|
}
|
|
1287
1794
|
{
|
|
1288
1795
|
provide(TYPES.notificationViewService, () => new NotificationViewService());
|
|
@@ -1291,6 +1798,9 @@ class LiveMetaService {
|
|
|
1291
1798
|
provide(TYPES.logViewService, () => new LogViewService());
|
|
1292
1799
|
provide(TYPES.statusViewService, () => new StatusViewService());
|
|
1293
1800
|
provide(TYPES.markdownViewService, () => new MarkdownViewService());
|
|
1801
|
+
provide(TYPES.explorerViewService, () => new ExplorerViewService());
|
|
1802
|
+
provide(TYPES.signalViewService, () => new SignalViewService());
|
|
1803
|
+
provide(TYPES.heatViewService, () => new HeatViewService());
|
|
1294
1804
|
}
|
|
1295
1805
|
|
|
1296
1806
|
const baseServices = {
|
|
@@ -1313,6 +1823,9 @@ const mockServices = {
|
|
|
1313
1823
|
logMockService: inject(TYPES.logMockService),
|
|
1314
1824
|
statusMockService: inject(TYPES.statusMockService),
|
|
1315
1825
|
markdownMockService: inject(TYPES.markdownMockService),
|
|
1826
|
+
explorerMockService: inject(TYPES.explorerMockService),
|
|
1827
|
+
signalMockService: inject(TYPES.signalMockService),
|
|
1828
|
+
heatMockService: inject(TYPES.heatMockService),
|
|
1316
1829
|
};
|
|
1317
1830
|
const viewServices = {
|
|
1318
1831
|
notificationViewService: inject(TYPES.notificationViewService),
|
|
@@ -1321,6 +1834,9 @@ const viewServices = {
|
|
|
1321
1834
|
logViewService: inject(TYPES.logViewService),
|
|
1322
1835
|
statusViewService: inject(TYPES.statusViewService),
|
|
1323
1836
|
markdownViewService: inject(TYPES.markdownViewService),
|
|
1837
|
+
explorerViewService: inject(TYPES.explorerViewService),
|
|
1838
|
+
signalViewService: inject(TYPES.signalViewService),
|
|
1839
|
+
heatViewService: inject(TYPES.heatViewService),
|
|
1324
1840
|
};
|
|
1325
1841
|
const ioc = {
|
|
1326
1842
|
...baseServices,
|
|
@@ -1331,11 +1847,11 @@ const ioc = {
|
|
|
1331
1847
|
};
|
|
1332
1848
|
init();
|
|
1333
1849
|
|
|
1334
|
-
const router$
|
|
1850
|
+
const router$a = Router({
|
|
1335
1851
|
params: true,
|
|
1336
1852
|
});
|
|
1337
1853
|
// ExchangeMockService endpoints
|
|
1338
|
-
router$
|
|
1854
|
+
router$a.post("/api/v1/mock/candles_signal", async (req, res) => {
|
|
1339
1855
|
try {
|
|
1340
1856
|
const request = await micro.json(req);
|
|
1341
1857
|
const { signalId, interval, requestId, serviceName } = request;
|
|
@@ -1363,7 +1879,7 @@ router$8.post("/api/v1/mock/candles_signal", async (req, res) => {
|
|
|
1363
1879
|
});
|
|
1364
1880
|
}
|
|
1365
1881
|
});
|
|
1366
|
-
router$
|
|
1882
|
+
router$a.post("/api/v1/mock/candles_point", async (req, res) => {
|
|
1367
1883
|
try {
|
|
1368
1884
|
const request = await micro.json(req);
|
|
1369
1885
|
const { currentTime, interval, requestId, serviceName, symbol, exchangeName } = request;
|
|
@@ -1397,7 +1913,7 @@ router$8.post("/api/v1/mock/candles_point", async (req, res) => {
|
|
|
1397
1913
|
}
|
|
1398
1914
|
});
|
|
1399
1915
|
// NotificationMockService endpoints
|
|
1400
|
-
router$
|
|
1916
|
+
router$a.post("/api/v1/mock/notification_list", async (req, res) => {
|
|
1401
1917
|
try {
|
|
1402
1918
|
const request = await micro.json(req);
|
|
1403
1919
|
const { requestId, serviceName } = request;
|
|
@@ -1425,7 +1941,7 @@ router$8.post("/api/v1/mock/notification_list", async (req, res) => {
|
|
|
1425
1941
|
});
|
|
1426
1942
|
}
|
|
1427
1943
|
});
|
|
1428
|
-
router$
|
|
1944
|
+
router$a.post("/api/v1/mock/notification_one/:id", async (req, res) => {
|
|
1429
1945
|
try {
|
|
1430
1946
|
const request = await micro.json(req);
|
|
1431
1947
|
const { requestId, serviceName } = request;
|
|
@@ -1454,7 +1970,7 @@ router$8.post("/api/v1/mock/notification_one/:id", async (req, res) => {
|
|
|
1454
1970
|
});
|
|
1455
1971
|
}
|
|
1456
1972
|
});
|
|
1457
|
-
router$
|
|
1973
|
+
router$a.post("/api/v1/mock/notification_filter", async (req, res) => {
|
|
1458
1974
|
try {
|
|
1459
1975
|
const request = await micro.json(req);
|
|
1460
1976
|
const { requestId, serviceName, filterData, limit, offset } = request;
|
|
@@ -1483,7 +1999,7 @@ router$8.post("/api/v1/mock/notification_filter", async (req, res) => {
|
|
|
1483
1999
|
}
|
|
1484
2000
|
});
|
|
1485
2001
|
// StorageMockService endpoints
|
|
1486
|
-
router$
|
|
2002
|
+
router$a.post("/api/v1/mock/storage_one/:id", async (req, res) => {
|
|
1487
2003
|
try {
|
|
1488
2004
|
const request = await micro.json(req);
|
|
1489
2005
|
const { requestId, serviceName } = request;
|
|
@@ -1512,7 +2028,7 @@ router$8.post("/api/v1/mock/storage_one/:id", async (req, res) => {
|
|
|
1512
2028
|
});
|
|
1513
2029
|
}
|
|
1514
2030
|
});
|
|
1515
|
-
router$
|
|
2031
|
+
router$a.post("/api/v1/mock/storage_list/live", async (req, res) => {
|
|
1516
2032
|
try {
|
|
1517
2033
|
const request = await micro.json(req);
|
|
1518
2034
|
const { requestId, serviceName } = request;
|
|
@@ -1540,7 +2056,7 @@ router$8.post("/api/v1/mock/storage_list/live", async (req, res) => {
|
|
|
1540
2056
|
});
|
|
1541
2057
|
}
|
|
1542
2058
|
});
|
|
1543
|
-
router$
|
|
2059
|
+
router$a.post("/api/v1/mock/storage_list/backtest", async (req, res) => {
|
|
1544
2060
|
try {
|
|
1545
2061
|
const request = await micro.json(req);
|
|
1546
2062
|
const { requestId, serviceName } = request;
|
|
@@ -1569,7 +2085,7 @@ router$8.post("/api/v1/mock/storage_list/backtest", async (req, res) => {
|
|
|
1569
2085
|
}
|
|
1570
2086
|
});
|
|
1571
2087
|
// LogMockService endpoints
|
|
1572
|
-
router$
|
|
2088
|
+
router$a.post("/api/v1/mock/log_list", async (req, res) => {
|
|
1573
2089
|
try {
|
|
1574
2090
|
const request = await micro.json(req);
|
|
1575
2091
|
const { requestId, serviceName } = request;
|
|
@@ -1597,7 +2113,7 @@ router$8.post("/api/v1/mock/log_list", async (req, res) => {
|
|
|
1597
2113
|
});
|
|
1598
2114
|
}
|
|
1599
2115
|
});
|
|
1600
|
-
router$
|
|
2116
|
+
router$a.post("/api/v1/mock/log_one/:id", async (req, res) => {
|
|
1601
2117
|
try {
|
|
1602
2118
|
const request = await micro.json(req);
|
|
1603
2119
|
const { requestId, serviceName } = request;
|
|
@@ -1626,7 +2142,7 @@ router$8.post("/api/v1/mock/log_one/:id", async (req, res) => {
|
|
|
1626
2142
|
});
|
|
1627
2143
|
}
|
|
1628
2144
|
});
|
|
1629
|
-
router$
|
|
2145
|
+
router$a.post("/api/v1/mock/log_filter", async (req, res) => {
|
|
1630
2146
|
try {
|
|
1631
2147
|
const request = await micro.json(req);
|
|
1632
2148
|
const { requestId, serviceName, filterData, limit, offset } = request;
|
|
@@ -1654,7 +2170,7 @@ router$8.post("/api/v1/mock/log_filter", async (req, res) => {
|
|
|
1654
2170
|
});
|
|
1655
2171
|
}
|
|
1656
2172
|
});
|
|
1657
|
-
router$
|
|
2173
|
+
router$a.post("/api/v1/mock/candles_live", async (req, res) => {
|
|
1658
2174
|
try {
|
|
1659
2175
|
const request = await micro.json(req);
|
|
1660
2176
|
const { signalId, interval, requestId, serviceName } = request;
|
|
@@ -1682,12 +2198,11 @@ router$8.post("/api/v1/mock/candles_live", async (req, res) => {
|
|
|
1682
2198
|
});
|
|
1683
2199
|
}
|
|
1684
2200
|
});
|
|
1685
|
-
|
|
1686
|
-
router$8.post("/api/v1/mock/status_list", async (req, res) => {
|
|
2201
|
+
router$a.post("/api/v1/mock/candles_last", async (req, res) => {
|
|
1687
2202
|
try {
|
|
1688
2203
|
const request = await micro.json(req);
|
|
1689
|
-
const { requestId, serviceName } = request;
|
|
1690
|
-
const data = await ioc.
|
|
2204
|
+
const { symbol, interval, requestId, serviceName } = request;
|
|
2205
|
+
const data = await ioc.exchangeMockService.getLastCandles(symbol, interval);
|
|
1691
2206
|
const result = {
|
|
1692
2207
|
data,
|
|
1693
2208
|
status: "ok",
|
|
@@ -1695,14 +2210,14 @@ router$8.post("/api/v1/mock/status_list", async (req, res) => {
|
|
|
1695
2210
|
requestId,
|
|
1696
2211
|
serviceName,
|
|
1697
2212
|
};
|
|
1698
|
-
ioc.loggerService.log("/api/v1/mock/
|
|
2213
|
+
ioc.loggerService.log("/api/v1/mock/candles_last ok", {
|
|
1699
2214
|
request,
|
|
1700
2215
|
result: omit(result, "data"),
|
|
1701
2216
|
});
|
|
1702
2217
|
return await micro.send(res, 200, result);
|
|
1703
2218
|
}
|
|
1704
2219
|
catch (error) {
|
|
1705
|
-
ioc.loggerService.log("/api/v1/mock/
|
|
2220
|
+
ioc.loggerService.log("/api/v1/mock/candles_last error", {
|
|
1706
2221
|
error: functoolsKit.errorData(error),
|
|
1707
2222
|
});
|
|
1708
2223
|
return await micro.send(res, 200, {
|
|
@@ -1711,12 +2226,13 @@ router$8.post("/api/v1/mock/status_list", async (req, res) => {
|
|
|
1711
2226
|
});
|
|
1712
2227
|
}
|
|
1713
2228
|
});
|
|
1714
|
-
|
|
2229
|
+
// SignalMockService endpoints
|
|
2230
|
+
router$a.post("/api/v1/mock/signal_last_update/:id", async (req, res) => {
|
|
1715
2231
|
try {
|
|
1716
2232
|
const request = await micro.json(req);
|
|
1717
2233
|
const { requestId, serviceName } = request;
|
|
1718
|
-
const
|
|
1719
|
-
const data = await ioc.
|
|
2234
|
+
const signalId = req.params.id;
|
|
2235
|
+
const data = await ioc.signalMockService.getLastUpdateTimestamp(signalId);
|
|
1720
2236
|
const result = {
|
|
1721
2237
|
data,
|
|
1722
2238
|
status: "ok",
|
|
@@ -1724,14 +2240,14 @@ router$8.post("/api/v1/mock/status_one/:id", async (req, res) => {
|
|
|
1724
2240
|
requestId,
|
|
1725
2241
|
serviceName,
|
|
1726
2242
|
};
|
|
1727
|
-
ioc.loggerService.log("/api/v1/mock/
|
|
2243
|
+
ioc.loggerService.log("/api/v1/mock/signal_last_update/:id ok", {
|
|
1728
2244
|
request,
|
|
1729
2245
|
result: omit(result, "data"),
|
|
1730
2246
|
});
|
|
1731
2247
|
return await micro.send(res, 200, result);
|
|
1732
2248
|
}
|
|
1733
2249
|
catch (error) {
|
|
1734
|
-
ioc.loggerService.log("/api/v1/mock/
|
|
2250
|
+
ioc.loggerService.log("/api/v1/mock/signal_last_update/:id error", {
|
|
1735
2251
|
error: functoolsKit.errorData(error),
|
|
1736
2252
|
});
|
|
1737
2253
|
return await micro.send(res, 200, {
|
|
@@ -1740,16 +2256,11 @@ router$8.post("/api/v1/mock/status_one/:id", async (req, res) => {
|
|
|
1740
2256
|
});
|
|
1741
2257
|
}
|
|
1742
2258
|
});
|
|
1743
|
-
|
|
1744
|
-
const router$7 = Router({
|
|
1745
|
-
params: true,
|
|
1746
|
-
});
|
|
1747
|
-
// ExchangeViewService endpoints
|
|
1748
|
-
router$7.post("/api/v1/view/candles_signal", async (req, res) => {
|
|
2259
|
+
router$a.post("/api/v1/mock/signal_pending", async (req, res) => {
|
|
1749
2260
|
try {
|
|
1750
2261
|
const request = await micro.json(req);
|
|
1751
|
-
const {
|
|
1752
|
-
const data = await ioc.
|
|
2262
|
+
const { symbol, requestId, serviceName } = request;
|
|
2263
|
+
const data = await ioc.signalMockService.getPendingSignal(symbol);
|
|
1753
2264
|
const result = {
|
|
1754
2265
|
data,
|
|
1755
2266
|
status: "ok",
|
|
@@ -1757,14 +2268,14 @@ router$7.post("/api/v1/view/candles_signal", async (req, res) => {
|
|
|
1757
2268
|
requestId,
|
|
1758
2269
|
serviceName,
|
|
1759
2270
|
};
|
|
1760
|
-
ioc.loggerService.log("/api/v1/
|
|
2271
|
+
ioc.loggerService.log("/api/v1/mock/signal_pending ok", {
|
|
1761
2272
|
request,
|
|
1762
2273
|
result: omit(result, "data"),
|
|
1763
2274
|
});
|
|
1764
2275
|
return await micro.send(res, 200, result);
|
|
1765
2276
|
}
|
|
1766
2277
|
catch (error) {
|
|
1767
|
-
ioc.loggerService.log("/api/v1/
|
|
2278
|
+
ioc.loggerService.log("/api/v1/mock/signal_pending error", {
|
|
1768
2279
|
error: functoolsKit.errorData(error),
|
|
1769
2280
|
});
|
|
1770
2281
|
return await micro.send(res, 200, {
|
|
@@ -1773,16 +2284,12 @@ router$7.post("/api/v1/view/candles_signal", async (req, res) => {
|
|
|
1773
2284
|
});
|
|
1774
2285
|
}
|
|
1775
2286
|
});
|
|
1776
|
-
|
|
2287
|
+
// StatusMockService endpoints
|
|
2288
|
+
router$a.post("/api/v1/mock/status_list", async (req, res) => {
|
|
1777
2289
|
try {
|
|
1778
2290
|
const request = await micro.json(req);
|
|
1779
|
-
const {
|
|
1780
|
-
const data = await ioc.
|
|
1781
|
-
currentTime,
|
|
1782
|
-
interval,
|
|
1783
|
-
symbol,
|
|
1784
|
-
exchangeName,
|
|
1785
|
-
});
|
|
2291
|
+
const { requestId, serviceName } = request;
|
|
2292
|
+
const data = await ioc.statusMockService.getStatusList();
|
|
1786
2293
|
const result = {
|
|
1787
2294
|
data,
|
|
1788
2295
|
status: "ok",
|
|
@@ -1790,14 +2297,14 @@ router$7.post("/api/v1/view/candles_point", async (req, res) => {
|
|
|
1790
2297
|
requestId,
|
|
1791
2298
|
serviceName,
|
|
1792
2299
|
};
|
|
1793
|
-
ioc.loggerService.log("/api/v1/
|
|
2300
|
+
ioc.loggerService.log("/api/v1/mock/status_list ok", {
|
|
1794
2301
|
request,
|
|
1795
2302
|
result: omit(result, "data"),
|
|
1796
2303
|
});
|
|
1797
2304
|
return await micro.send(res, 200, result);
|
|
1798
2305
|
}
|
|
1799
2306
|
catch (error) {
|
|
1800
|
-
ioc.loggerService.log("/api/v1/
|
|
2307
|
+
ioc.loggerService.log("/api/v1/mock/status_list error", {
|
|
1801
2308
|
error: functoolsKit.errorData(error),
|
|
1802
2309
|
});
|
|
1803
2310
|
return await micro.send(res, 200, {
|
|
@@ -1806,11 +2313,12 @@ router$7.post("/api/v1/view/candles_point", async (req, res) => {
|
|
|
1806
2313
|
});
|
|
1807
2314
|
}
|
|
1808
2315
|
});
|
|
1809
|
-
router$
|
|
2316
|
+
router$a.post("/api/v1/mock/status_one/:id", async (req, res) => {
|
|
1810
2317
|
try {
|
|
1811
2318
|
const request = await micro.json(req);
|
|
1812
|
-
const {
|
|
1813
|
-
const
|
|
2319
|
+
const { requestId, serviceName } = request;
|
|
2320
|
+
const id = req.params.id;
|
|
2321
|
+
const data = await ioc.statusMockService.getStatusOne(id);
|
|
1814
2322
|
const result = {
|
|
1815
2323
|
data,
|
|
1816
2324
|
status: "ok",
|
|
@@ -1818,14 +2326,14 @@ router$7.post("/api/v1/view/candles_live", async (req, res) => {
|
|
|
1818
2326
|
requestId,
|
|
1819
2327
|
serviceName,
|
|
1820
2328
|
};
|
|
1821
|
-
ioc.loggerService.log("/api/v1/
|
|
2329
|
+
ioc.loggerService.log("/api/v1/mock/status_one/:id ok", {
|
|
1822
2330
|
request,
|
|
1823
2331
|
result: omit(result, "data"),
|
|
1824
2332
|
});
|
|
1825
2333
|
return await micro.send(res, 200, result);
|
|
1826
2334
|
}
|
|
1827
2335
|
catch (error) {
|
|
1828
|
-
ioc.loggerService.log("/api/v1/
|
|
2336
|
+
ioc.loggerService.log("/api/v1/mock/status_one/:id error", {
|
|
1829
2337
|
error: functoolsKit.errorData(error),
|
|
1830
2338
|
});
|
|
1831
2339
|
return await micro.send(res, 200, {
|
|
@@ -1834,12 +2342,12 @@ router$7.post("/api/v1/view/candles_live", async (req, res) => {
|
|
|
1834
2342
|
});
|
|
1835
2343
|
}
|
|
1836
2344
|
});
|
|
1837
|
-
//
|
|
1838
|
-
router$
|
|
2345
|
+
// HeatMockService endpoints
|
|
2346
|
+
router$a.post("/api/v1/mock/heat_data", async (req, res) => {
|
|
1839
2347
|
try {
|
|
1840
2348
|
const request = await micro.json(req);
|
|
1841
2349
|
const { requestId, serviceName } = request;
|
|
1842
|
-
const data = await ioc.
|
|
2350
|
+
const data = await ioc.heatMockService.getStrategyHeatData();
|
|
1843
2351
|
const result = {
|
|
1844
2352
|
data,
|
|
1845
2353
|
status: "ok",
|
|
@@ -1847,14 +2355,14 @@ router$7.post("/api/v1/view/notification_list", async (req, res) => {
|
|
|
1847
2355
|
requestId,
|
|
1848
2356
|
serviceName,
|
|
1849
2357
|
};
|
|
1850
|
-
ioc.loggerService.log("/api/v1/
|
|
2358
|
+
ioc.loggerService.log("/api/v1/mock/heat_data ok", {
|
|
1851
2359
|
request,
|
|
1852
2360
|
result: omit(result, "data"),
|
|
1853
2361
|
});
|
|
1854
2362
|
return await micro.send(res, 200, result);
|
|
1855
2363
|
}
|
|
1856
2364
|
catch (error) {
|
|
1857
|
-
ioc.loggerService.log("/api/v1/
|
|
2365
|
+
ioc.loggerService.log("/api/v1/mock/heat_data error", {
|
|
1858
2366
|
error: functoolsKit.errorData(error),
|
|
1859
2367
|
});
|
|
1860
2368
|
return await micro.send(res, 200, {
|
|
@@ -1863,12 +2371,11 @@ router$7.post("/api/v1/view/notification_list", async (req, res) => {
|
|
|
1863
2371
|
});
|
|
1864
2372
|
}
|
|
1865
2373
|
});
|
|
1866
|
-
router$
|
|
2374
|
+
router$a.post("/api/v1/mock/heat_report", async (req, res) => {
|
|
1867
2375
|
try {
|
|
1868
2376
|
const request = await micro.json(req);
|
|
1869
2377
|
const { requestId, serviceName } = request;
|
|
1870
|
-
const
|
|
1871
|
-
const data = await ioc.notificationViewService.getOne(id);
|
|
2378
|
+
const data = await ioc.heatMockService.getStrategyHeatReport();
|
|
1872
2379
|
const result = {
|
|
1873
2380
|
data,
|
|
1874
2381
|
status: "ok",
|
|
@@ -1876,14 +2383,14 @@ router$7.post("/api/v1/view/notification_one/:id", async (req, res) => {
|
|
|
1876
2383
|
requestId,
|
|
1877
2384
|
serviceName,
|
|
1878
2385
|
};
|
|
1879
|
-
ioc.loggerService.log("/api/v1/
|
|
2386
|
+
ioc.loggerService.log("/api/v1/mock/heat_report ok", {
|
|
1880
2387
|
request,
|
|
1881
2388
|
result: omit(result, "data"),
|
|
1882
2389
|
});
|
|
1883
2390
|
return await micro.send(res, 200, result);
|
|
1884
2391
|
}
|
|
1885
2392
|
catch (error) {
|
|
1886
|
-
ioc.loggerService.log("/api/v1/
|
|
2393
|
+
ioc.loggerService.log("/api/v1/mock/heat_report error", {
|
|
1887
2394
|
error: functoolsKit.errorData(error),
|
|
1888
2395
|
});
|
|
1889
2396
|
return await micro.send(res, 200, {
|
|
@@ -1892,11 +2399,11 @@ router$7.post("/api/v1/view/notification_one/:id", async (req, res) => {
|
|
|
1892
2399
|
});
|
|
1893
2400
|
}
|
|
1894
2401
|
});
|
|
1895
|
-
router$
|
|
2402
|
+
router$a.post("/api/v1/mock/status_info", async (req, res) => {
|
|
1896
2403
|
try {
|
|
1897
2404
|
const request = await micro.json(req);
|
|
1898
|
-
const { requestId, serviceName
|
|
1899
|
-
const data = await ioc.
|
|
2405
|
+
const { requestId, serviceName } = request;
|
|
2406
|
+
const data = await ioc.statusMockService.getStatusInfo();
|
|
1900
2407
|
const result = {
|
|
1901
2408
|
data,
|
|
1902
2409
|
status: "ok",
|
|
@@ -1904,14 +2411,14 @@ router$7.post("/api/v1/view/notification_filter", async (req, res) => {
|
|
|
1904
2411
|
requestId,
|
|
1905
2412
|
serviceName,
|
|
1906
2413
|
};
|
|
1907
|
-
ioc.loggerService.log("/api/v1/
|
|
2414
|
+
ioc.loggerService.log("/api/v1/mock/status_info ok", {
|
|
1908
2415
|
request,
|
|
1909
2416
|
result: omit(result, "data"),
|
|
1910
2417
|
});
|
|
1911
2418
|
return await micro.send(res, 200, result);
|
|
1912
2419
|
}
|
|
1913
2420
|
catch (error) {
|
|
1914
|
-
ioc.loggerService.log("/api/v1/
|
|
2421
|
+
ioc.loggerService.log("/api/v1/mock/status_info error", {
|
|
1915
2422
|
error: functoolsKit.errorData(error),
|
|
1916
2423
|
});
|
|
1917
2424
|
return await micro.send(res, 200, {
|
|
@@ -1920,13 +2427,16 @@ router$7.post("/api/v1/view/notification_filter", async (req, res) => {
|
|
|
1920
2427
|
});
|
|
1921
2428
|
}
|
|
1922
2429
|
});
|
|
1923
|
-
|
|
1924
|
-
router$
|
|
2430
|
+
|
|
2431
|
+
const router$9 = Router({
|
|
2432
|
+
params: true,
|
|
2433
|
+
});
|
|
2434
|
+
// ExchangeViewService endpoints
|
|
2435
|
+
router$9.post("/api/v1/view/candles_signal", async (req, res) => {
|
|
1925
2436
|
try {
|
|
1926
2437
|
const request = await micro.json(req);
|
|
1927
|
-
const { requestId, serviceName } = request;
|
|
1928
|
-
const
|
|
1929
|
-
const data = await ioc.storageViewService.findSignalById(signalId);
|
|
2438
|
+
const { signalId, interval, requestId, serviceName } = request;
|
|
2439
|
+
const data = await ioc.exchangeViewService.getSignalCandles(signalId, interval);
|
|
1930
2440
|
const result = {
|
|
1931
2441
|
data,
|
|
1932
2442
|
status: "ok",
|
|
@@ -1934,14 +2444,14 @@ router$7.post("/api/v1/view/storage_one/:id", async (req, res) => {
|
|
|
1934
2444
|
requestId,
|
|
1935
2445
|
serviceName,
|
|
1936
2446
|
};
|
|
1937
|
-
ioc.loggerService.log("/api/v1/view/
|
|
2447
|
+
ioc.loggerService.log("/api/v1/view/candles_signal ok", {
|
|
1938
2448
|
request,
|
|
1939
2449
|
result: omit(result, "data"),
|
|
1940
2450
|
});
|
|
1941
2451
|
return await micro.send(res, 200, result);
|
|
1942
2452
|
}
|
|
1943
2453
|
catch (error) {
|
|
1944
|
-
ioc.loggerService.log("/api/v1/view/
|
|
2454
|
+
ioc.loggerService.log("/api/v1/view/candles_signal error", {
|
|
1945
2455
|
error: functoolsKit.errorData(error),
|
|
1946
2456
|
});
|
|
1947
2457
|
return await micro.send(res, 200, {
|
|
@@ -1950,11 +2460,16 @@ router$7.post("/api/v1/view/storage_one/:id", async (req, res) => {
|
|
|
1950
2460
|
});
|
|
1951
2461
|
}
|
|
1952
2462
|
});
|
|
1953
|
-
router$
|
|
2463
|
+
router$9.post("/api/v1/view/candles_point", async (req, res) => {
|
|
1954
2464
|
try {
|
|
1955
2465
|
const request = await micro.json(req);
|
|
1956
|
-
const { requestId, serviceName } = request;
|
|
1957
|
-
const data = await ioc.
|
|
2466
|
+
const { currentTime, interval, requestId, serviceName, symbol, exchangeName } = request;
|
|
2467
|
+
const data = await ioc.exchangeService.getPointCandles({
|
|
2468
|
+
currentTime,
|
|
2469
|
+
interval,
|
|
2470
|
+
symbol,
|
|
2471
|
+
exchangeName,
|
|
2472
|
+
});
|
|
1958
2473
|
const result = {
|
|
1959
2474
|
data,
|
|
1960
2475
|
status: "ok",
|
|
@@ -1962,14 +2477,14 @@ router$7.post("/api/v1/view/storage_list/live", async (req, res) => {
|
|
|
1962
2477
|
requestId,
|
|
1963
2478
|
serviceName,
|
|
1964
2479
|
};
|
|
1965
|
-
ioc.loggerService.log("/api/v1/view/
|
|
2480
|
+
ioc.loggerService.log("/api/v1/view/candles_point ok", {
|
|
1966
2481
|
request,
|
|
1967
2482
|
result: omit(result, "data"),
|
|
1968
2483
|
});
|
|
1969
2484
|
return await micro.send(res, 200, result);
|
|
1970
2485
|
}
|
|
1971
2486
|
catch (error) {
|
|
1972
|
-
ioc.loggerService.log("/api/v1/view/
|
|
2487
|
+
ioc.loggerService.log("/api/v1/view/candles_point error", {
|
|
1973
2488
|
error: functoolsKit.errorData(error),
|
|
1974
2489
|
});
|
|
1975
2490
|
return await micro.send(res, 200, {
|
|
@@ -1978,11 +2493,11 @@ router$7.post("/api/v1/view/storage_list/live", async (req, res) => {
|
|
|
1978
2493
|
});
|
|
1979
2494
|
}
|
|
1980
2495
|
});
|
|
1981
|
-
router$
|
|
2496
|
+
router$9.post("/api/v1/view/candles_live", async (req, res) => {
|
|
1982
2497
|
try {
|
|
1983
2498
|
const request = await micro.json(req);
|
|
1984
|
-
const { requestId, serviceName } = request;
|
|
1985
|
-
const data = await ioc.
|
|
2499
|
+
const { signalId, interval, requestId, serviceName } = request;
|
|
2500
|
+
const data = await ioc.exchangeViewService.getLiveCandles(signalId, interval);
|
|
1986
2501
|
const result = {
|
|
1987
2502
|
data,
|
|
1988
2503
|
status: "ok",
|
|
@@ -1990,14 +2505,14 @@ router$7.post("/api/v1/view/storage_list/backtest", async (req, res) => {
|
|
|
1990
2505
|
requestId,
|
|
1991
2506
|
serviceName,
|
|
1992
2507
|
};
|
|
1993
|
-
ioc.loggerService.log("/api/v1/view/
|
|
2508
|
+
ioc.loggerService.log("/api/v1/view/candles_live ok", {
|
|
1994
2509
|
request,
|
|
1995
2510
|
result: omit(result, "data"),
|
|
1996
2511
|
});
|
|
1997
2512
|
return await micro.send(res, 200, result);
|
|
1998
2513
|
}
|
|
1999
2514
|
catch (error) {
|
|
2000
|
-
ioc.loggerService.log("/api/v1/view/
|
|
2515
|
+
ioc.loggerService.log("/api/v1/view/candles_live error", {
|
|
2001
2516
|
error: functoolsKit.errorData(error),
|
|
2002
2517
|
});
|
|
2003
2518
|
return await micro.send(res, 200, {
|
|
@@ -2006,11 +2521,211 @@ router$7.post("/api/v1/view/storage_list/backtest", async (req, res) => {
|
|
|
2006
2521
|
});
|
|
2007
2522
|
}
|
|
2008
2523
|
});
|
|
2009
|
-
|
|
2010
|
-
router$7.post("/api/v1/view/log_list", async (req, res) => {
|
|
2524
|
+
router$9.post("/api/v1/view/candles_last", async (req, res) => {
|
|
2011
2525
|
try {
|
|
2012
2526
|
const request = await micro.json(req);
|
|
2013
|
-
const { requestId, serviceName } = request;
|
|
2527
|
+
const { symbol, interval, requestId, serviceName } = request;
|
|
2528
|
+
const data = await ioc.exchangeViewService.getLastCandles(symbol, interval);
|
|
2529
|
+
const result = {
|
|
2530
|
+
data,
|
|
2531
|
+
status: "ok",
|
|
2532
|
+
error: "",
|
|
2533
|
+
requestId,
|
|
2534
|
+
serviceName,
|
|
2535
|
+
};
|
|
2536
|
+
ioc.loggerService.log("/api/v1/view/candles_last ok", {
|
|
2537
|
+
request,
|
|
2538
|
+
result: omit(result, "data"),
|
|
2539
|
+
});
|
|
2540
|
+
return await micro.send(res, 200, result);
|
|
2541
|
+
}
|
|
2542
|
+
catch (error) {
|
|
2543
|
+
ioc.loggerService.log("/api/v1/view/candles_last error", {
|
|
2544
|
+
error: functoolsKit.errorData(error),
|
|
2545
|
+
});
|
|
2546
|
+
return await micro.send(res, 200, {
|
|
2547
|
+
status: "error",
|
|
2548
|
+
error: functoolsKit.getErrorMessage(error),
|
|
2549
|
+
});
|
|
2550
|
+
}
|
|
2551
|
+
});
|
|
2552
|
+
// NotificationViewService endpoints
|
|
2553
|
+
router$9.post("/api/v1/view/notification_list", async (req, res) => {
|
|
2554
|
+
try {
|
|
2555
|
+
const request = await micro.json(req);
|
|
2556
|
+
const { requestId, serviceName } = request;
|
|
2557
|
+
const data = await ioc.notificationViewService.getList();
|
|
2558
|
+
const result = {
|
|
2559
|
+
data,
|
|
2560
|
+
status: "ok",
|
|
2561
|
+
error: "",
|
|
2562
|
+
requestId,
|
|
2563
|
+
serviceName,
|
|
2564
|
+
};
|
|
2565
|
+
ioc.loggerService.log("/api/v1/view/notification_list ok", {
|
|
2566
|
+
request,
|
|
2567
|
+
result: omit(result, "data"),
|
|
2568
|
+
});
|
|
2569
|
+
return await micro.send(res, 200, result);
|
|
2570
|
+
}
|
|
2571
|
+
catch (error) {
|
|
2572
|
+
ioc.loggerService.log("/api/v1/view/notification_list error", {
|
|
2573
|
+
error: functoolsKit.errorData(error),
|
|
2574
|
+
});
|
|
2575
|
+
return await micro.send(res, 200, {
|
|
2576
|
+
status: "error",
|
|
2577
|
+
error: functoolsKit.getErrorMessage(error),
|
|
2578
|
+
});
|
|
2579
|
+
}
|
|
2580
|
+
});
|
|
2581
|
+
router$9.post("/api/v1/view/notification_one/:id", async (req, res) => {
|
|
2582
|
+
try {
|
|
2583
|
+
const request = await micro.json(req);
|
|
2584
|
+
const { requestId, serviceName } = request;
|
|
2585
|
+
const id = req.params.id;
|
|
2586
|
+
const data = await ioc.notificationViewService.getOne(id);
|
|
2587
|
+
const result = {
|
|
2588
|
+
data,
|
|
2589
|
+
status: "ok",
|
|
2590
|
+
error: "",
|
|
2591
|
+
requestId,
|
|
2592
|
+
serviceName,
|
|
2593
|
+
};
|
|
2594
|
+
ioc.loggerService.log("/api/v1/view/notification_one/:id ok", {
|
|
2595
|
+
request,
|
|
2596
|
+
result: omit(result, "data"),
|
|
2597
|
+
});
|
|
2598
|
+
return await micro.send(res, 200, result);
|
|
2599
|
+
}
|
|
2600
|
+
catch (error) {
|
|
2601
|
+
ioc.loggerService.log("/api/v1/view/notification_one/:id error", {
|
|
2602
|
+
error: functoolsKit.errorData(error),
|
|
2603
|
+
});
|
|
2604
|
+
return await micro.send(res, 200, {
|
|
2605
|
+
status: "error",
|
|
2606
|
+
error: functoolsKit.getErrorMessage(error),
|
|
2607
|
+
});
|
|
2608
|
+
}
|
|
2609
|
+
});
|
|
2610
|
+
router$9.post("/api/v1/view/notification_filter", async (req, res) => {
|
|
2611
|
+
try {
|
|
2612
|
+
const request = await micro.json(req);
|
|
2613
|
+
const { requestId, serviceName, filterData, limit, offset } = request;
|
|
2614
|
+
const data = await ioc.notificationViewService.findByFilter(filterData, limit, offset);
|
|
2615
|
+
const result = {
|
|
2616
|
+
data,
|
|
2617
|
+
status: "ok",
|
|
2618
|
+
error: "",
|
|
2619
|
+
requestId,
|
|
2620
|
+
serviceName,
|
|
2621
|
+
};
|
|
2622
|
+
ioc.loggerService.log("/api/v1/view/notification_filter ok", {
|
|
2623
|
+
request,
|
|
2624
|
+
result: omit(result, "data"),
|
|
2625
|
+
});
|
|
2626
|
+
return await micro.send(res, 200, result);
|
|
2627
|
+
}
|
|
2628
|
+
catch (error) {
|
|
2629
|
+
ioc.loggerService.log("/api/v1/view/notification_filter error", {
|
|
2630
|
+
error: functoolsKit.errorData(error),
|
|
2631
|
+
});
|
|
2632
|
+
return await micro.send(res, 200, {
|
|
2633
|
+
status: "error",
|
|
2634
|
+
error: functoolsKit.getErrorMessage(error),
|
|
2635
|
+
});
|
|
2636
|
+
}
|
|
2637
|
+
});
|
|
2638
|
+
// StorageViewService endpoints
|
|
2639
|
+
router$9.post("/api/v1/view/storage_one/:id", async (req, res) => {
|
|
2640
|
+
try {
|
|
2641
|
+
const request = await micro.json(req);
|
|
2642
|
+
const { requestId, serviceName } = request;
|
|
2643
|
+
const signalId = req.params.id;
|
|
2644
|
+
const data = await ioc.storageViewService.findSignalById(signalId);
|
|
2645
|
+
const result = {
|
|
2646
|
+
data,
|
|
2647
|
+
status: "ok",
|
|
2648
|
+
error: "",
|
|
2649
|
+
requestId,
|
|
2650
|
+
serviceName,
|
|
2651
|
+
};
|
|
2652
|
+
ioc.loggerService.log("/api/v1/view/storage_one/:id ok", {
|
|
2653
|
+
request,
|
|
2654
|
+
result: omit(result, "data"),
|
|
2655
|
+
});
|
|
2656
|
+
return await micro.send(res, 200, result);
|
|
2657
|
+
}
|
|
2658
|
+
catch (error) {
|
|
2659
|
+
ioc.loggerService.log("/api/v1/view/storage_one/:id error", {
|
|
2660
|
+
error: functoolsKit.errorData(error),
|
|
2661
|
+
});
|
|
2662
|
+
return await micro.send(res, 200, {
|
|
2663
|
+
status: "error",
|
|
2664
|
+
error: functoolsKit.getErrorMessage(error),
|
|
2665
|
+
});
|
|
2666
|
+
}
|
|
2667
|
+
});
|
|
2668
|
+
router$9.post("/api/v1/view/storage_list/live", async (req, res) => {
|
|
2669
|
+
try {
|
|
2670
|
+
const request = await micro.json(req);
|
|
2671
|
+
const { requestId, serviceName } = request;
|
|
2672
|
+
const data = await ioc.storageViewService.listSignalLive();
|
|
2673
|
+
const result = {
|
|
2674
|
+
data,
|
|
2675
|
+
status: "ok",
|
|
2676
|
+
error: "",
|
|
2677
|
+
requestId,
|
|
2678
|
+
serviceName,
|
|
2679
|
+
};
|
|
2680
|
+
ioc.loggerService.log("/api/v1/view/storage_list/live ok", {
|
|
2681
|
+
request,
|
|
2682
|
+
result: omit(result, "data"),
|
|
2683
|
+
});
|
|
2684
|
+
return await micro.send(res, 200, result);
|
|
2685
|
+
}
|
|
2686
|
+
catch (error) {
|
|
2687
|
+
ioc.loggerService.log("/api/v1/view/storage_list/live error", {
|
|
2688
|
+
error: functoolsKit.errorData(error),
|
|
2689
|
+
});
|
|
2690
|
+
return await micro.send(res, 200, {
|
|
2691
|
+
status: "error",
|
|
2692
|
+
error: functoolsKit.getErrorMessage(error),
|
|
2693
|
+
});
|
|
2694
|
+
}
|
|
2695
|
+
});
|
|
2696
|
+
router$9.post("/api/v1/view/storage_list/backtest", async (req, res) => {
|
|
2697
|
+
try {
|
|
2698
|
+
const request = await micro.json(req);
|
|
2699
|
+
const { requestId, serviceName } = request;
|
|
2700
|
+
const data = await ioc.storageViewService.listSignalBacktest();
|
|
2701
|
+
const result = {
|
|
2702
|
+
data,
|
|
2703
|
+
status: "ok",
|
|
2704
|
+
error: "",
|
|
2705
|
+
requestId,
|
|
2706
|
+
serviceName,
|
|
2707
|
+
};
|
|
2708
|
+
ioc.loggerService.log("/api/v1/view/storage_list/backtest ok", {
|
|
2709
|
+
request,
|
|
2710
|
+
result: omit(result, "data"),
|
|
2711
|
+
});
|
|
2712
|
+
return await micro.send(res, 200, result);
|
|
2713
|
+
}
|
|
2714
|
+
catch (error) {
|
|
2715
|
+
ioc.loggerService.log("/api/v1/view/storage_list/backtest error", {
|
|
2716
|
+
error: functoolsKit.errorData(error),
|
|
2717
|
+
});
|
|
2718
|
+
return await micro.send(res, 200, {
|
|
2719
|
+
status: "error",
|
|
2720
|
+
error: functoolsKit.getErrorMessage(error),
|
|
2721
|
+
});
|
|
2722
|
+
}
|
|
2723
|
+
});
|
|
2724
|
+
// LogViewService endpoints
|
|
2725
|
+
router$9.post("/api/v1/view/log_list", async (req, res) => {
|
|
2726
|
+
try {
|
|
2727
|
+
const request = await micro.json(req);
|
|
2728
|
+
const { requestId, serviceName } = request;
|
|
2014
2729
|
const data = await ioc.logViewService.getList();
|
|
2015
2730
|
const result = {
|
|
2016
2731
|
data,
|
|
@@ -2035,7 +2750,7 @@ router$7.post("/api/v1/view/log_list", async (req, res) => {
|
|
|
2035
2750
|
});
|
|
2036
2751
|
}
|
|
2037
2752
|
});
|
|
2038
|
-
router$
|
|
2753
|
+
router$9.post("/api/v1/view/log_one/:id", async (req, res) => {
|
|
2039
2754
|
try {
|
|
2040
2755
|
const request = await micro.json(req);
|
|
2041
2756
|
const { requestId, serviceName } = request;
|
|
@@ -2064,7 +2779,7 @@ router$7.post("/api/v1/view/log_one/:id", async (req, res) => {
|
|
|
2064
2779
|
});
|
|
2065
2780
|
}
|
|
2066
2781
|
});
|
|
2067
|
-
router$
|
|
2782
|
+
router$9.post("/api/v1/view/log_filter", async (req, res) => {
|
|
2068
2783
|
try {
|
|
2069
2784
|
const request = await micro.json(req);
|
|
2070
2785
|
const { requestId, serviceName, filterData, limit, offset } = request;
|
|
@@ -2092,8 +2807,66 @@ router$7.post("/api/v1/view/log_filter", async (req, res) => {
|
|
|
2092
2807
|
});
|
|
2093
2808
|
}
|
|
2094
2809
|
});
|
|
2810
|
+
// SignalViewService endpoints
|
|
2811
|
+
router$9.post("/api/v1/view/signal_last_update/:id", async (req, res) => {
|
|
2812
|
+
try {
|
|
2813
|
+
const request = await micro.json(req);
|
|
2814
|
+
const { requestId, serviceName } = request;
|
|
2815
|
+
const signalId = req.params.id;
|
|
2816
|
+
const data = await ioc.signalViewService.getLastUpdateTimestamp(signalId);
|
|
2817
|
+
const result = {
|
|
2818
|
+
data,
|
|
2819
|
+
status: "ok",
|
|
2820
|
+
error: "",
|
|
2821
|
+
requestId,
|
|
2822
|
+
serviceName,
|
|
2823
|
+
};
|
|
2824
|
+
ioc.loggerService.log("/api/v1/view/signal_last_update/:id ok", {
|
|
2825
|
+
request,
|
|
2826
|
+
result: omit(result, "data"),
|
|
2827
|
+
});
|
|
2828
|
+
return await micro.send(res, 200, result);
|
|
2829
|
+
}
|
|
2830
|
+
catch (error) {
|
|
2831
|
+
ioc.loggerService.log("/api/v1/view/signal_last_update/:id error", {
|
|
2832
|
+
error: functoolsKit.errorData(error),
|
|
2833
|
+
});
|
|
2834
|
+
return await micro.send(res, 200, {
|
|
2835
|
+
status: "error",
|
|
2836
|
+
error: functoolsKit.getErrorMessage(error),
|
|
2837
|
+
});
|
|
2838
|
+
}
|
|
2839
|
+
});
|
|
2840
|
+
router$9.post("/api/v1/view/signal_pending", async (req, res) => {
|
|
2841
|
+
try {
|
|
2842
|
+
const request = await micro.json(req);
|
|
2843
|
+
const { symbol, requestId, serviceName } = request;
|
|
2844
|
+
const data = await ioc.signalViewService.getPendingSignal(symbol);
|
|
2845
|
+
const result = {
|
|
2846
|
+
data,
|
|
2847
|
+
status: "ok",
|
|
2848
|
+
error: "",
|
|
2849
|
+
requestId,
|
|
2850
|
+
serviceName,
|
|
2851
|
+
};
|
|
2852
|
+
ioc.loggerService.log("/api/v1/view/signal_pending ok", {
|
|
2853
|
+
request,
|
|
2854
|
+
result: omit(result, "data"),
|
|
2855
|
+
});
|
|
2856
|
+
return await micro.send(res, 200, result);
|
|
2857
|
+
}
|
|
2858
|
+
catch (error) {
|
|
2859
|
+
ioc.loggerService.log("/api/v1/view/signal_pending error", {
|
|
2860
|
+
error: functoolsKit.errorData(error),
|
|
2861
|
+
});
|
|
2862
|
+
return await micro.send(res, 200, {
|
|
2863
|
+
status: "error",
|
|
2864
|
+
error: functoolsKit.getErrorMessage(error),
|
|
2865
|
+
});
|
|
2866
|
+
}
|
|
2867
|
+
});
|
|
2095
2868
|
// StatusViewService endpoints
|
|
2096
|
-
router$
|
|
2869
|
+
router$9.post("/api/v1/view/status_list", async (req, res) => {
|
|
2097
2870
|
try {
|
|
2098
2871
|
const request = await micro.json(req);
|
|
2099
2872
|
const { requestId, serviceName } = request;
|
|
@@ -2121,7 +2894,7 @@ router$7.post("/api/v1/view/status_list", async (req, res) => {
|
|
|
2121
2894
|
});
|
|
2122
2895
|
}
|
|
2123
2896
|
});
|
|
2124
|
-
router$
|
|
2897
|
+
router$9.post("/api/v1/view/status_one/:id", async (req, res) => {
|
|
2125
2898
|
try {
|
|
2126
2899
|
const request = await micro.json(req);
|
|
2127
2900
|
const { requestId, serviceName } = request;
|
|
@@ -2150,6 +2923,91 @@ router$7.post("/api/v1/view/status_one/:id", async (req, res) => {
|
|
|
2150
2923
|
});
|
|
2151
2924
|
}
|
|
2152
2925
|
});
|
|
2926
|
+
// HeatViewService endpoints
|
|
2927
|
+
router$9.post("/api/v1/view/heat_data", async (req, res) => {
|
|
2928
|
+
try {
|
|
2929
|
+
const request = await micro.json(req);
|
|
2930
|
+
const { requestId, serviceName } = request;
|
|
2931
|
+
const data = await ioc.heatViewService.getStrategyHeatData();
|
|
2932
|
+
const result = {
|
|
2933
|
+
data,
|
|
2934
|
+
status: "ok",
|
|
2935
|
+
error: "",
|
|
2936
|
+
requestId,
|
|
2937
|
+
serviceName,
|
|
2938
|
+
};
|
|
2939
|
+
ioc.loggerService.log("/api/v1/view/heat_data ok", {
|
|
2940
|
+
request,
|
|
2941
|
+
result: omit(result, "data"),
|
|
2942
|
+
});
|
|
2943
|
+
return await micro.send(res, 200, result);
|
|
2944
|
+
}
|
|
2945
|
+
catch (error) {
|
|
2946
|
+
ioc.loggerService.log("/api/v1/view/heat_data error", {
|
|
2947
|
+
error: functoolsKit.errorData(error),
|
|
2948
|
+
});
|
|
2949
|
+
return await micro.send(res, 200, {
|
|
2950
|
+
status: "error",
|
|
2951
|
+
error: functoolsKit.getErrorMessage(error),
|
|
2952
|
+
});
|
|
2953
|
+
}
|
|
2954
|
+
});
|
|
2955
|
+
router$9.post("/api/v1/view/heat_report", async (req, res) => {
|
|
2956
|
+
try {
|
|
2957
|
+
const request = await micro.json(req);
|
|
2958
|
+
const { requestId, serviceName } = request;
|
|
2959
|
+
const data = await ioc.heatViewService.getStrategyHeatReport();
|
|
2960
|
+
const result = {
|
|
2961
|
+
data,
|
|
2962
|
+
status: "ok",
|
|
2963
|
+
error: "",
|
|
2964
|
+
requestId,
|
|
2965
|
+
serviceName,
|
|
2966
|
+
};
|
|
2967
|
+
ioc.loggerService.log("/api/v1/view/heat_report ok", {
|
|
2968
|
+
request,
|
|
2969
|
+
result: omit(result, "data"),
|
|
2970
|
+
});
|
|
2971
|
+
return await micro.send(res, 200, result);
|
|
2972
|
+
}
|
|
2973
|
+
catch (error) {
|
|
2974
|
+
ioc.loggerService.log("/api/v1/view/heat_report error", {
|
|
2975
|
+
error: functoolsKit.errorData(error),
|
|
2976
|
+
});
|
|
2977
|
+
return await micro.send(res, 200, {
|
|
2978
|
+
status: "error",
|
|
2979
|
+
error: functoolsKit.getErrorMessage(error),
|
|
2980
|
+
});
|
|
2981
|
+
}
|
|
2982
|
+
});
|
|
2983
|
+
router$9.post("/api/v1/view/status_info", async (req, res) => {
|
|
2984
|
+
try {
|
|
2985
|
+
const request = await micro.json(req);
|
|
2986
|
+
const { requestId, serviceName } = request;
|
|
2987
|
+
const data = await ioc.statusViewService.getStatusInfo();
|
|
2988
|
+
const result = {
|
|
2989
|
+
data,
|
|
2990
|
+
status: "ok",
|
|
2991
|
+
error: "",
|
|
2992
|
+
requestId,
|
|
2993
|
+
serviceName,
|
|
2994
|
+
};
|
|
2995
|
+
ioc.loggerService.log("/api/v1/view/status_info ok", {
|
|
2996
|
+
request,
|
|
2997
|
+
result: omit(result, "data"),
|
|
2998
|
+
});
|
|
2999
|
+
return await micro.send(res, 200, result);
|
|
3000
|
+
}
|
|
3001
|
+
catch (error) {
|
|
3002
|
+
ioc.loggerService.log("/api/v1/view/status_info error", {
|
|
3003
|
+
error: functoolsKit.errorData(error),
|
|
3004
|
+
});
|
|
3005
|
+
return await micro.send(res, 200, {
|
|
3006
|
+
status: "error",
|
|
3007
|
+
error: functoolsKit.getErrorMessage(error),
|
|
3008
|
+
});
|
|
3009
|
+
}
|
|
3010
|
+
});
|
|
2153
3011
|
|
|
2154
3012
|
const require$2 = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)));
|
|
2155
3013
|
function getModulesPath() {
|
|
@@ -2158,7 +3016,7 @@ function getModulesPath() {
|
|
|
2158
3016
|
return path.join(basePath, "../../../");
|
|
2159
3017
|
}
|
|
2160
3018
|
|
|
2161
|
-
const router$
|
|
3019
|
+
const router$8 = Router({
|
|
2162
3020
|
params: true,
|
|
2163
3021
|
});
|
|
2164
3022
|
// getModulesPath
|
|
@@ -2175,7 +3033,7 @@ const ASSET_32 = CC_ENABLE_MOCK
|
|
|
2175
3033
|
const cache128 = new Map();
|
|
2176
3034
|
const cache32 = new Map();
|
|
2177
3035
|
const cacheSvg = new Map();
|
|
2178
|
-
router$
|
|
3036
|
+
router$8.get("/icon/128/:filename", async (req, res) => {
|
|
2179
3037
|
const filename = req.params.filename;
|
|
2180
3038
|
// Check cache first
|
|
2181
3039
|
if (cache128.has(filename)) {
|
|
@@ -2191,7 +3049,7 @@ router$6.get("/icon/128/:filename", async (req, res) => {
|
|
|
2191
3049
|
}
|
|
2192
3050
|
return await micro.send(res, 404, "File not found (128)");
|
|
2193
3051
|
});
|
|
2194
|
-
router$
|
|
3052
|
+
router$8.get("/icon/32/:filename", async (req, res) => {
|
|
2195
3053
|
const filename = req.params.filename;
|
|
2196
3054
|
// Check cache first
|
|
2197
3055
|
if (cache32.has(filename)) {
|
|
@@ -2207,7 +3065,7 @@ router$6.get("/icon/32/:filename", async (req, res) => {
|
|
|
2207
3065
|
}
|
|
2208
3066
|
return await micro.send(res, 404, "File not found (32)");
|
|
2209
3067
|
});
|
|
2210
|
-
router$
|
|
3068
|
+
router$8.get("/icon/svg/:filename", async (req, res) => {
|
|
2211
3069
|
const filename = req.params.filename;
|
|
2212
3070
|
// Check cache first
|
|
2213
3071
|
if (cacheSvg.has(filename)) {
|
|
@@ -2223,7 +3081,7 @@ router$6.get("/icon/svg/:filename", async (req, res) => {
|
|
|
2223
3081
|
}
|
|
2224
3082
|
return await micro.send(res, 404, "File not found (svg)");
|
|
2225
3083
|
});
|
|
2226
|
-
router$
|
|
3084
|
+
router$8.get("/icon/:filename", async (req, res) => {
|
|
2227
3085
|
const filename = req.params.filename;
|
|
2228
3086
|
// Check cache first
|
|
2229
3087
|
if (cache32.has(filename)) {
|
|
@@ -2240,10 +3098,10 @@ router$6.get("/icon/:filename", async (req, res) => {
|
|
|
2240
3098
|
return await micro.send(res, 404, "File not found (root)");
|
|
2241
3099
|
});
|
|
2242
3100
|
|
|
2243
|
-
const router$
|
|
3101
|
+
const router$7 = Router({
|
|
2244
3102
|
params: true,
|
|
2245
3103
|
});
|
|
2246
|
-
router$
|
|
3104
|
+
router$7.post("/api/v1/dict/symbol/list", async (req, res) => {
|
|
2247
3105
|
try {
|
|
2248
3106
|
const request = await micro.json(req);
|
|
2249
3107
|
const { requestId, serviceName } = request;
|
|
@@ -2271,7 +3129,7 @@ router$5.post("/api/v1/dict/symbol/list", async (req, res) => {
|
|
|
2271
3129
|
});
|
|
2272
3130
|
}
|
|
2273
3131
|
});
|
|
2274
|
-
router$
|
|
3132
|
+
router$7.post("/api/v1/dict/symbol/map", async (req, res) => {
|
|
2275
3133
|
try {
|
|
2276
3134
|
const request = await micro.json(req);
|
|
2277
3135
|
const { requestId, serviceName } = request;
|
|
@@ -2299,7 +3157,7 @@ router$5.post("/api/v1/dict/symbol/map", async (req, res) => {
|
|
|
2299
3157
|
});
|
|
2300
3158
|
}
|
|
2301
3159
|
});
|
|
2302
|
-
router$
|
|
3160
|
+
router$7.post("/api/v1/dict/symbol/one", async (req, res) => {
|
|
2303
3161
|
try {
|
|
2304
3162
|
const request = await micro.json(req);
|
|
2305
3163
|
const { requestId, serviceName, id } = request;
|
|
@@ -2328,10 +3186,38 @@ router$5.post("/api/v1/dict/symbol/one", async (req, res) => {
|
|
|
2328
3186
|
}
|
|
2329
3187
|
});
|
|
2330
3188
|
|
|
2331
|
-
const router$
|
|
3189
|
+
const router$6 = Router({
|
|
2332
3190
|
params: true,
|
|
2333
3191
|
});
|
|
2334
|
-
router$
|
|
3192
|
+
router$6.post("/api/v1/markdown_mock/strategy_data", async (req, res) => {
|
|
3193
|
+
try {
|
|
3194
|
+
const request = await micro.json(req);
|
|
3195
|
+
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
3196
|
+
const data = await ioc.markdownMockService.getStrategyData(symbol, strategyName, exchangeName, frameName);
|
|
3197
|
+
const result = { data, status: "ok", error: "", requestId, serviceName };
|
|
3198
|
+
ioc.loggerService.log("/api/v1/markdown_mock/strategy_data ok", { request, result: omit(result, "data") });
|
|
3199
|
+
return await micro.send(res, 200, result);
|
|
3200
|
+
}
|
|
3201
|
+
catch (error) {
|
|
3202
|
+
ioc.loggerService.log("/api/v1/markdown_mock/strategy_data error", { error: functoolsKit.errorData(error) });
|
|
3203
|
+
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
3204
|
+
}
|
|
3205
|
+
});
|
|
3206
|
+
router$6.post("/api/v1/markdown_mock/strategy_report", async (req, res) => {
|
|
3207
|
+
try {
|
|
3208
|
+
const request = await micro.json(req);
|
|
3209
|
+
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
3210
|
+
const data = await ioc.markdownMockService.getStrategyReport(symbol, strategyName, exchangeName, frameName);
|
|
3211
|
+
const result = { data, status: "ok", error: "", requestId, serviceName };
|
|
3212
|
+
ioc.loggerService.log("/api/v1/markdown_mock/strategy_report ok", { request, result: omit(result, "data") });
|
|
3213
|
+
return await micro.send(res, 200, result);
|
|
3214
|
+
}
|
|
3215
|
+
catch (error) {
|
|
3216
|
+
ioc.loggerService.log("/api/v1/markdown_mock/strategy_report error", { error: functoolsKit.errorData(error) });
|
|
3217
|
+
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
3218
|
+
}
|
|
3219
|
+
});
|
|
3220
|
+
router$6.post("/api/v1/markdown_mock/backtest_data", async (req, res) => {
|
|
2335
3221
|
try {
|
|
2336
3222
|
const request = await micro.json(req);
|
|
2337
3223
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2345,7 +3231,7 @@ router$4.post("/api/v1/markdown_mock/backtest_data", async (req, res) => {
|
|
|
2345
3231
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2346
3232
|
}
|
|
2347
3233
|
});
|
|
2348
|
-
router$
|
|
3234
|
+
router$6.post("/api/v1/markdown_mock/backtest_report", async (req, res) => {
|
|
2349
3235
|
try {
|
|
2350
3236
|
const request = await micro.json(req);
|
|
2351
3237
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2359,7 +3245,7 @@ router$4.post("/api/v1/markdown_mock/backtest_report", async (req, res) => {
|
|
|
2359
3245
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2360
3246
|
}
|
|
2361
3247
|
});
|
|
2362
|
-
router$
|
|
3248
|
+
router$6.post("/api/v1/markdown_mock/live_data", async (req, res) => {
|
|
2363
3249
|
try {
|
|
2364
3250
|
const request = await micro.json(req);
|
|
2365
3251
|
const { requestId, serviceName, symbol, strategyName, exchangeName } = request;
|
|
@@ -2373,7 +3259,7 @@ router$4.post("/api/v1/markdown_mock/live_data", async (req, res) => {
|
|
|
2373
3259
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2374
3260
|
}
|
|
2375
3261
|
});
|
|
2376
|
-
router$
|
|
3262
|
+
router$6.post("/api/v1/markdown_mock/live_report", async (req, res) => {
|
|
2377
3263
|
try {
|
|
2378
3264
|
const request = await micro.json(req);
|
|
2379
3265
|
const { requestId, serviceName, symbol, strategyName, exchangeName } = request;
|
|
@@ -2387,7 +3273,7 @@ router$4.post("/api/v1/markdown_mock/live_report", async (req, res) => {
|
|
|
2387
3273
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2388
3274
|
}
|
|
2389
3275
|
});
|
|
2390
|
-
router$
|
|
3276
|
+
router$6.post("/api/v1/markdown_mock/breakeven_data", async (req, res) => {
|
|
2391
3277
|
try {
|
|
2392
3278
|
const request = await micro.json(req);
|
|
2393
3279
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2401,7 +3287,7 @@ router$4.post("/api/v1/markdown_mock/breakeven_data", async (req, res) => {
|
|
|
2401
3287
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2402
3288
|
}
|
|
2403
3289
|
});
|
|
2404
|
-
router$
|
|
3290
|
+
router$6.post("/api/v1/markdown_mock/breakeven_report", async (req, res) => {
|
|
2405
3291
|
try {
|
|
2406
3292
|
const request = await micro.json(req);
|
|
2407
3293
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2415,7 +3301,7 @@ router$4.post("/api/v1/markdown_mock/breakeven_report", async (req, res) => {
|
|
|
2415
3301
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2416
3302
|
}
|
|
2417
3303
|
});
|
|
2418
|
-
router$
|
|
3304
|
+
router$6.post("/api/v1/markdown_mock/risk_data", async (req, res) => {
|
|
2419
3305
|
try {
|
|
2420
3306
|
const request = await micro.json(req);
|
|
2421
3307
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2429,7 +3315,7 @@ router$4.post("/api/v1/markdown_mock/risk_data", async (req, res) => {
|
|
|
2429
3315
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2430
3316
|
}
|
|
2431
3317
|
});
|
|
2432
|
-
router$
|
|
3318
|
+
router$6.post("/api/v1/markdown_mock/risk_report", async (req, res) => {
|
|
2433
3319
|
try {
|
|
2434
3320
|
const request = await micro.json(req);
|
|
2435
3321
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2443,7 +3329,7 @@ router$4.post("/api/v1/markdown_mock/risk_report", async (req, res) => {
|
|
|
2443
3329
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2444
3330
|
}
|
|
2445
3331
|
});
|
|
2446
|
-
router$
|
|
3332
|
+
router$6.post("/api/v1/markdown_mock/partial_data", async (req, res) => {
|
|
2447
3333
|
try {
|
|
2448
3334
|
const request = await micro.json(req);
|
|
2449
3335
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2457,7 +3343,7 @@ router$4.post("/api/v1/markdown_mock/partial_data", async (req, res) => {
|
|
|
2457
3343
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2458
3344
|
}
|
|
2459
3345
|
});
|
|
2460
|
-
router$
|
|
3346
|
+
router$6.post("/api/v1/markdown_mock/partial_report", async (req, res) => {
|
|
2461
3347
|
try {
|
|
2462
3348
|
const request = await micro.json(req);
|
|
2463
3349
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2471,7 +3357,7 @@ router$4.post("/api/v1/markdown_mock/partial_report", async (req, res) => {
|
|
|
2471
3357
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2472
3358
|
}
|
|
2473
3359
|
});
|
|
2474
|
-
router$
|
|
3360
|
+
router$6.post("/api/v1/markdown_mock/highest_profit_data", async (req, res) => {
|
|
2475
3361
|
try {
|
|
2476
3362
|
const request = await micro.json(req);
|
|
2477
3363
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2485,7 +3371,7 @@ router$4.post("/api/v1/markdown_mock/highest_profit_data", async (req, res) => {
|
|
|
2485
3371
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2486
3372
|
}
|
|
2487
3373
|
});
|
|
2488
|
-
router$
|
|
3374
|
+
router$6.post("/api/v1/markdown_mock/highest_profit_report", async (req, res) => {
|
|
2489
3375
|
try {
|
|
2490
3376
|
const request = await micro.json(req);
|
|
2491
3377
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2499,7 +3385,7 @@ router$4.post("/api/v1/markdown_mock/highest_profit_report", async (req, res) =>
|
|
|
2499
3385
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2500
3386
|
}
|
|
2501
3387
|
});
|
|
2502
|
-
router$
|
|
3388
|
+
router$6.post("/api/v1/markdown_mock/schedule_data", async (req, res) => {
|
|
2503
3389
|
try {
|
|
2504
3390
|
const request = await micro.json(req);
|
|
2505
3391
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2513,7 +3399,7 @@ router$4.post("/api/v1/markdown_mock/schedule_data", async (req, res) => {
|
|
|
2513
3399
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2514
3400
|
}
|
|
2515
3401
|
});
|
|
2516
|
-
router$
|
|
3402
|
+
router$6.post("/api/v1/markdown_mock/schedule_report", async (req, res) => {
|
|
2517
3403
|
try {
|
|
2518
3404
|
const request = await micro.json(req);
|
|
2519
3405
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2527,7 +3413,7 @@ router$4.post("/api/v1/markdown_mock/schedule_report", async (req, res) => {
|
|
|
2527
3413
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2528
3414
|
}
|
|
2529
3415
|
});
|
|
2530
|
-
router$
|
|
3416
|
+
router$6.post("/api/v1/markdown_mock/performance_data", async (req, res) => {
|
|
2531
3417
|
try {
|
|
2532
3418
|
const request = await micro.json(req);
|
|
2533
3419
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2541,7 +3427,7 @@ router$4.post("/api/v1/markdown_mock/performance_data", async (req, res) => {
|
|
|
2541
3427
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2542
3428
|
}
|
|
2543
3429
|
});
|
|
2544
|
-
router$
|
|
3430
|
+
router$6.post("/api/v1/markdown_mock/performance_report", async (req, res) => {
|
|
2545
3431
|
try {
|
|
2546
3432
|
const request = await micro.json(req);
|
|
2547
3433
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2555,7 +3441,7 @@ router$4.post("/api/v1/markdown_mock/performance_report", async (req, res) => {
|
|
|
2555
3441
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2556
3442
|
}
|
|
2557
3443
|
});
|
|
2558
|
-
router$
|
|
3444
|
+
router$6.post("/api/v1/markdown_mock/sync_data", async (req, res) => {
|
|
2559
3445
|
try {
|
|
2560
3446
|
const request = await micro.json(req);
|
|
2561
3447
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2569,7 +3455,7 @@ router$4.post("/api/v1/markdown_mock/sync_data", async (req, res) => {
|
|
|
2569
3455
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2570
3456
|
}
|
|
2571
3457
|
});
|
|
2572
|
-
router$
|
|
3458
|
+
router$6.post("/api/v1/markdown_mock/sync_report", async (req, res) => {
|
|
2573
3459
|
try {
|
|
2574
3460
|
const request = await micro.json(req);
|
|
2575
3461
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2583,7 +3469,7 @@ router$4.post("/api/v1/markdown_mock/sync_report", async (req, res) => {
|
|
|
2583
3469
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2584
3470
|
}
|
|
2585
3471
|
});
|
|
2586
|
-
router$
|
|
3472
|
+
router$6.post("/api/v1/markdown_mock/heat_data", async (req, res) => {
|
|
2587
3473
|
try {
|
|
2588
3474
|
const request = await micro.json(req);
|
|
2589
3475
|
const { requestId, serviceName, strategyName, exchangeName, frameName } = request;
|
|
@@ -2597,7 +3483,7 @@ router$4.post("/api/v1/markdown_mock/heat_data", async (req, res) => {
|
|
|
2597
3483
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2598
3484
|
}
|
|
2599
3485
|
});
|
|
2600
|
-
router$
|
|
3486
|
+
router$6.post("/api/v1/markdown_mock/heat_report", async (req, res) => {
|
|
2601
3487
|
try {
|
|
2602
3488
|
const request = await micro.json(req);
|
|
2603
3489
|
const { requestId, serviceName, strategyName, exchangeName, frameName } = request;
|
|
@@ -2611,7 +3497,7 @@ router$4.post("/api/v1/markdown_mock/heat_report", async (req, res) => {
|
|
|
2611
3497
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2612
3498
|
}
|
|
2613
3499
|
});
|
|
2614
|
-
router$
|
|
3500
|
+
router$6.post("/api/v1/markdown_mock/walker_data", async (req, res) => {
|
|
2615
3501
|
try {
|
|
2616
3502
|
const request = await micro.json(req);
|
|
2617
3503
|
const { requestId, serviceName, symbol, walkerName } = request;
|
|
@@ -2625,7 +3511,7 @@ router$4.post("/api/v1/markdown_mock/walker_data", async (req, res) => {
|
|
|
2625
3511
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2626
3512
|
}
|
|
2627
3513
|
});
|
|
2628
|
-
router$
|
|
3514
|
+
router$6.post("/api/v1/markdown_mock/walker_report", async (req, res) => {
|
|
2629
3515
|
try {
|
|
2630
3516
|
const request = await micro.json(req);
|
|
2631
3517
|
const { requestId, serviceName, symbol, walkerName } = request;
|
|
@@ -2640,10 +3526,38 @@ router$4.post("/api/v1/markdown_mock/walker_report", async (req, res) => {
|
|
|
2640
3526
|
}
|
|
2641
3527
|
});
|
|
2642
3528
|
|
|
2643
|
-
const router$
|
|
3529
|
+
const router$5 = Router({
|
|
2644
3530
|
params: true,
|
|
2645
3531
|
});
|
|
2646
|
-
router$
|
|
3532
|
+
router$5.post("/api/v1/markdown_view/strategy_data", async (req, res) => {
|
|
3533
|
+
try {
|
|
3534
|
+
const request = await micro.json(req);
|
|
3535
|
+
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
3536
|
+
const data = await ioc.markdownViewService.getStrategyData(symbol, strategyName, exchangeName, frameName, backtest);
|
|
3537
|
+
const result = { data, status: "ok", error: "", requestId, serviceName };
|
|
3538
|
+
ioc.loggerService.log("/api/v1/markdown_view/strategy_data ok", { request, result: omit(result, "data") });
|
|
3539
|
+
return await micro.send(res, 200, result);
|
|
3540
|
+
}
|
|
3541
|
+
catch (error) {
|
|
3542
|
+
ioc.loggerService.log("/api/v1/markdown_view/strategy_data error", { error: functoolsKit.errorData(error) });
|
|
3543
|
+
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
3544
|
+
}
|
|
3545
|
+
});
|
|
3546
|
+
router$5.post("/api/v1/markdown_view/strategy_report", async (req, res) => {
|
|
3547
|
+
try {
|
|
3548
|
+
const request = await micro.json(req);
|
|
3549
|
+
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
3550
|
+
const data = await ioc.markdownViewService.getStrategyReport(symbol, strategyName, exchangeName, frameName, backtest);
|
|
3551
|
+
const result = { data, status: "ok", error: "", requestId, serviceName };
|
|
3552
|
+
ioc.loggerService.log("/api/v1/markdown_view/strategy_report ok", { request, result: omit(result, "data") });
|
|
3553
|
+
return await micro.send(res, 200, result);
|
|
3554
|
+
}
|
|
3555
|
+
catch (error) {
|
|
3556
|
+
ioc.loggerService.log("/api/v1/markdown_view/strategy_report error", { error: functoolsKit.errorData(error) });
|
|
3557
|
+
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
3558
|
+
}
|
|
3559
|
+
});
|
|
3560
|
+
router$5.post("/api/v1/markdown_view/backtest_data", async (req, res) => {
|
|
2647
3561
|
try {
|
|
2648
3562
|
const request = await micro.json(req);
|
|
2649
3563
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2657,7 +3571,7 @@ router$3.post("/api/v1/markdown_view/backtest_data", async (req, res) => {
|
|
|
2657
3571
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2658
3572
|
}
|
|
2659
3573
|
});
|
|
2660
|
-
router$
|
|
3574
|
+
router$5.post("/api/v1/markdown_view/backtest_report", async (req, res) => {
|
|
2661
3575
|
try {
|
|
2662
3576
|
const request = await micro.json(req);
|
|
2663
3577
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2671,7 +3585,7 @@ router$3.post("/api/v1/markdown_view/backtest_report", async (req, res) => {
|
|
|
2671
3585
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2672
3586
|
}
|
|
2673
3587
|
});
|
|
2674
|
-
router$
|
|
3588
|
+
router$5.post("/api/v1/markdown_view/live_data", async (req, res) => {
|
|
2675
3589
|
try {
|
|
2676
3590
|
const request = await micro.json(req);
|
|
2677
3591
|
const { requestId, serviceName, symbol, strategyName, exchangeName } = request;
|
|
@@ -2685,7 +3599,7 @@ router$3.post("/api/v1/markdown_view/live_data", async (req, res) => {
|
|
|
2685
3599
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2686
3600
|
}
|
|
2687
3601
|
});
|
|
2688
|
-
router$
|
|
3602
|
+
router$5.post("/api/v1/markdown_view/live_report", async (req, res) => {
|
|
2689
3603
|
try {
|
|
2690
3604
|
const request = await micro.json(req);
|
|
2691
3605
|
const { requestId, serviceName, symbol, strategyName, exchangeName } = request;
|
|
@@ -2699,7 +3613,7 @@ router$3.post("/api/v1/markdown_view/live_report", async (req, res) => {
|
|
|
2699
3613
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2700
3614
|
}
|
|
2701
3615
|
});
|
|
2702
|
-
router$
|
|
3616
|
+
router$5.post("/api/v1/markdown_view/breakeven_data", async (req, res) => {
|
|
2703
3617
|
try {
|
|
2704
3618
|
const request = await micro.json(req);
|
|
2705
3619
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2713,7 +3627,7 @@ router$3.post("/api/v1/markdown_view/breakeven_data", async (req, res) => {
|
|
|
2713
3627
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2714
3628
|
}
|
|
2715
3629
|
});
|
|
2716
|
-
router$
|
|
3630
|
+
router$5.post("/api/v1/markdown_view/breakeven_report", async (req, res) => {
|
|
2717
3631
|
try {
|
|
2718
3632
|
const request = await micro.json(req);
|
|
2719
3633
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2727,7 +3641,7 @@ router$3.post("/api/v1/markdown_view/breakeven_report", async (req, res) => {
|
|
|
2727
3641
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2728
3642
|
}
|
|
2729
3643
|
});
|
|
2730
|
-
router$
|
|
3644
|
+
router$5.post("/api/v1/markdown_view/risk_data", async (req, res) => {
|
|
2731
3645
|
try {
|
|
2732
3646
|
const request = await micro.json(req);
|
|
2733
3647
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2741,7 +3655,7 @@ router$3.post("/api/v1/markdown_view/risk_data", async (req, res) => {
|
|
|
2741
3655
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2742
3656
|
}
|
|
2743
3657
|
});
|
|
2744
|
-
router$
|
|
3658
|
+
router$5.post("/api/v1/markdown_view/risk_report", async (req, res) => {
|
|
2745
3659
|
try {
|
|
2746
3660
|
const request = await micro.json(req);
|
|
2747
3661
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2755,7 +3669,7 @@ router$3.post("/api/v1/markdown_view/risk_report", async (req, res) => {
|
|
|
2755
3669
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2756
3670
|
}
|
|
2757
3671
|
});
|
|
2758
|
-
router$
|
|
3672
|
+
router$5.post("/api/v1/markdown_view/partial_data", async (req, res) => {
|
|
2759
3673
|
try {
|
|
2760
3674
|
const request = await micro.json(req);
|
|
2761
3675
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2769,7 +3683,7 @@ router$3.post("/api/v1/markdown_view/partial_data", async (req, res) => {
|
|
|
2769
3683
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2770
3684
|
}
|
|
2771
3685
|
});
|
|
2772
|
-
router$
|
|
3686
|
+
router$5.post("/api/v1/markdown_view/partial_report", async (req, res) => {
|
|
2773
3687
|
try {
|
|
2774
3688
|
const request = await micro.json(req);
|
|
2775
3689
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2783,7 +3697,7 @@ router$3.post("/api/v1/markdown_view/partial_report", async (req, res) => {
|
|
|
2783
3697
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2784
3698
|
}
|
|
2785
3699
|
});
|
|
2786
|
-
router$
|
|
3700
|
+
router$5.post("/api/v1/markdown_view/highest_profit_data", async (req, res) => {
|
|
2787
3701
|
try {
|
|
2788
3702
|
const request = await micro.json(req);
|
|
2789
3703
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2797,7 +3711,7 @@ router$3.post("/api/v1/markdown_view/highest_profit_data", async (req, res) => {
|
|
|
2797
3711
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2798
3712
|
}
|
|
2799
3713
|
});
|
|
2800
|
-
router$
|
|
3714
|
+
router$5.post("/api/v1/markdown_view/highest_profit_report", async (req, res) => {
|
|
2801
3715
|
try {
|
|
2802
3716
|
const request = await micro.json(req);
|
|
2803
3717
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2811,7 +3725,7 @@ router$3.post("/api/v1/markdown_view/highest_profit_report", async (req, res) =>
|
|
|
2811
3725
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2812
3726
|
}
|
|
2813
3727
|
});
|
|
2814
|
-
router$
|
|
3728
|
+
router$5.post("/api/v1/markdown_view/schedule_data", async (req, res) => {
|
|
2815
3729
|
try {
|
|
2816
3730
|
const request = await micro.json(req);
|
|
2817
3731
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2825,7 +3739,7 @@ router$3.post("/api/v1/markdown_view/schedule_data", async (req, res) => {
|
|
|
2825
3739
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2826
3740
|
}
|
|
2827
3741
|
});
|
|
2828
|
-
router$
|
|
3742
|
+
router$5.post("/api/v1/markdown_view/schedule_report", async (req, res) => {
|
|
2829
3743
|
try {
|
|
2830
3744
|
const request = await micro.json(req);
|
|
2831
3745
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2839,7 +3753,7 @@ router$3.post("/api/v1/markdown_view/schedule_report", async (req, res) => {
|
|
|
2839
3753
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2840
3754
|
}
|
|
2841
3755
|
});
|
|
2842
|
-
router$
|
|
3756
|
+
router$5.post("/api/v1/markdown_view/performance_data", async (req, res) => {
|
|
2843
3757
|
try {
|
|
2844
3758
|
const request = await micro.json(req);
|
|
2845
3759
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2853,7 +3767,7 @@ router$3.post("/api/v1/markdown_view/performance_data", async (req, res) => {
|
|
|
2853
3767
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2854
3768
|
}
|
|
2855
3769
|
});
|
|
2856
|
-
router$
|
|
3770
|
+
router$5.post("/api/v1/markdown_view/performance_report", async (req, res) => {
|
|
2857
3771
|
try {
|
|
2858
3772
|
const request = await micro.json(req);
|
|
2859
3773
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2867,7 +3781,7 @@ router$3.post("/api/v1/markdown_view/performance_report", async (req, res) => {
|
|
|
2867
3781
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2868
3782
|
}
|
|
2869
3783
|
});
|
|
2870
|
-
router$
|
|
3784
|
+
router$5.post("/api/v1/markdown_view/sync_data", async (req, res) => {
|
|
2871
3785
|
try {
|
|
2872
3786
|
const request = await micro.json(req);
|
|
2873
3787
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2881,7 +3795,7 @@ router$3.post("/api/v1/markdown_view/sync_data", async (req, res) => {
|
|
|
2881
3795
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2882
3796
|
}
|
|
2883
3797
|
});
|
|
2884
|
-
router$
|
|
3798
|
+
router$5.post("/api/v1/markdown_view/sync_report", async (req, res) => {
|
|
2885
3799
|
try {
|
|
2886
3800
|
const request = await micro.json(req);
|
|
2887
3801
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2895,7 +3809,7 @@ router$3.post("/api/v1/markdown_view/sync_report", async (req, res) => {
|
|
|
2895
3809
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2896
3810
|
}
|
|
2897
3811
|
});
|
|
2898
|
-
router$
|
|
3812
|
+
router$5.post("/api/v1/markdown_view/heat_data", async (req, res) => {
|
|
2899
3813
|
try {
|
|
2900
3814
|
const request = await micro.json(req);
|
|
2901
3815
|
const { requestId, serviceName, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2909,7 +3823,7 @@ router$3.post("/api/v1/markdown_view/heat_data", async (req, res) => {
|
|
|
2909
3823
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2910
3824
|
}
|
|
2911
3825
|
});
|
|
2912
|
-
router$
|
|
3826
|
+
router$5.post("/api/v1/markdown_view/heat_report", async (req, res) => {
|
|
2913
3827
|
try {
|
|
2914
3828
|
const request = await micro.json(req);
|
|
2915
3829
|
const { requestId, serviceName, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2923,7 +3837,7 @@ router$3.post("/api/v1/markdown_view/heat_report", async (req, res) => {
|
|
|
2923
3837
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2924
3838
|
}
|
|
2925
3839
|
});
|
|
2926
|
-
router$
|
|
3840
|
+
router$5.post("/api/v1/markdown_view/walker_data", async (req, res) => {
|
|
2927
3841
|
try {
|
|
2928
3842
|
const request = await micro.json(req);
|
|
2929
3843
|
const { requestId, serviceName, symbol, walkerName } = request;
|
|
@@ -2937,7 +3851,7 @@ router$3.post("/api/v1/markdown_view/walker_data", async (req, res) => {
|
|
|
2937
3851
|
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
2938
3852
|
}
|
|
2939
3853
|
});
|
|
2940
|
-
router$
|
|
3854
|
+
router$5.post("/api/v1/markdown_view/walker_report", async (req, res) => {
|
|
2941
3855
|
try {
|
|
2942
3856
|
const request = await micro.json(req);
|
|
2943
3857
|
const { requestId, serviceName, symbol, walkerName } = request;
|
|
@@ -2952,6 +3866,70 @@ router$3.post("/api/v1/markdown_view/walker_report", async (req, res) => {
|
|
|
2952
3866
|
}
|
|
2953
3867
|
});
|
|
2954
3868
|
|
|
3869
|
+
const router$4 = Router({
|
|
3870
|
+
params: true,
|
|
3871
|
+
});
|
|
3872
|
+
router$4.post("/api/v1/explorer_mock/tree", async (req, res) => {
|
|
3873
|
+
try {
|
|
3874
|
+
const request = await micro.json(req);
|
|
3875
|
+
const { requestId, serviceName } = request;
|
|
3876
|
+
const data = await ioc.explorerMockService.getTree();
|
|
3877
|
+
const result = { data, status: "ok", error: "", requestId, serviceName };
|
|
3878
|
+
ioc.loggerService.log("/api/v1/explorer_mock/tree ok", { request, result: omit(result, "data") });
|
|
3879
|
+
return await micro.send(res, 200, result);
|
|
3880
|
+
}
|
|
3881
|
+
catch (error) {
|
|
3882
|
+
ioc.loggerService.log("/api/v1/explorer_mock/tree error", { error: functoolsKit.errorData(error) });
|
|
3883
|
+
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
3884
|
+
}
|
|
3885
|
+
});
|
|
3886
|
+
router$4.post("/api/v1/explorer_mock/node", async (req, res) => {
|
|
3887
|
+
try {
|
|
3888
|
+
const request = await micro.json(req);
|
|
3889
|
+
const { requestId, serviceName, path } = request;
|
|
3890
|
+
const data = await ioc.explorerMockService.getNode(path);
|
|
3891
|
+
const result = { data, status: "ok", error: "", requestId, serviceName };
|
|
3892
|
+
ioc.loggerService.log("/api/v1/explorer_mock/node ok", { request, result: omit(result, "data") });
|
|
3893
|
+
return await micro.send(res, 200, result);
|
|
3894
|
+
}
|
|
3895
|
+
catch (error) {
|
|
3896
|
+
ioc.loggerService.log("/api/v1/explorer_mock/node error", { error: functoolsKit.errorData(error) });
|
|
3897
|
+
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
3898
|
+
}
|
|
3899
|
+
});
|
|
3900
|
+
|
|
3901
|
+
const router$3 = Router({
|
|
3902
|
+
params: true,
|
|
3903
|
+
});
|
|
3904
|
+
router$3.post("/api/v1/explorer_view/tree", async (req, res) => {
|
|
3905
|
+
try {
|
|
3906
|
+
const request = await micro.json(req);
|
|
3907
|
+
const { requestId, serviceName } = request;
|
|
3908
|
+
const data = await ioc.explorerViewService.getTree();
|
|
3909
|
+
const result = { data, status: "ok", error: "", requestId, serviceName };
|
|
3910
|
+
ioc.loggerService.log("/api/v1/explorer_view/tree ok", { request, result: omit(result, "data") });
|
|
3911
|
+
return await micro.send(res, 200, result);
|
|
3912
|
+
}
|
|
3913
|
+
catch (error) {
|
|
3914
|
+
ioc.loggerService.log("/api/v1/explorer_view/tree error", { error: functoolsKit.errorData(error) });
|
|
3915
|
+
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
3916
|
+
}
|
|
3917
|
+
});
|
|
3918
|
+
router$3.post("/api/v1/explorer_view/node", async (req, res) => {
|
|
3919
|
+
try {
|
|
3920
|
+
const request = await micro.json(req);
|
|
3921
|
+
const { requestId, serviceName, path } = request;
|
|
3922
|
+
const data = await ioc.explorerViewService.getNode(path);
|
|
3923
|
+
const result = { data, status: "ok", error: "", requestId, serviceName };
|
|
3924
|
+
ioc.loggerService.log("/api/v1/explorer_view/node ok", { request, result: omit(result, "data") });
|
|
3925
|
+
return await micro.send(res, 200, result);
|
|
3926
|
+
}
|
|
3927
|
+
catch (error) {
|
|
3928
|
+
ioc.loggerService.log("/api/v1/explorer_view/node error", { error: functoolsKit.errorData(error) });
|
|
3929
|
+
return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
|
|
3930
|
+
}
|
|
3931
|
+
});
|
|
3932
|
+
|
|
2955
3933
|
const router$2 = Router({
|
|
2956
3934
|
params: true,
|
|
2957
3935
|
});
|
|
@@ -3023,25 +4001,31 @@ const router = Router({
|
|
|
3023
4001
|
params: true,
|
|
3024
4002
|
});
|
|
3025
4003
|
router.all("/api/v1/health/*", (req, res) => {
|
|
3026
|
-
return router$
|
|
4004
|
+
return router$b(req, res, finalhandler(req, res));
|
|
3027
4005
|
});
|
|
3028
4006
|
router.all("/api/v1/mock/*", (req, res) => {
|
|
3029
|
-
return router$
|
|
4007
|
+
return router$a(req, res, finalhandler(req, res));
|
|
3030
4008
|
});
|
|
3031
4009
|
router.all("/api/v1/view/*", (req, res) => {
|
|
3032
|
-
return router$
|
|
4010
|
+
return router$9(req, res, finalhandler(req, res));
|
|
3033
4011
|
});
|
|
3034
4012
|
router.all("/api/v1/markdown_mock/*", (req, res) => {
|
|
3035
|
-
return router$
|
|
4013
|
+
return router$6(req, res, finalhandler(req, res));
|
|
3036
4014
|
});
|
|
3037
4015
|
router.all("/api/v1/markdown_view/*", (req, res) => {
|
|
4016
|
+
return router$5(req, res, finalhandler(req, res));
|
|
4017
|
+
});
|
|
4018
|
+
router.all("/api/v1/explorer_mock/*", (req, res) => {
|
|
4019
|
+
return router$4(req, res, finalhandler(req, res));
|
|
4020
|
+
});
|
|
4021
|
+
router.all("/api/v1/explorer_view/*", (req, res) => {
|
|
3038
4022
|
return router$3(req, res, finalhandler(req, res));
|
|
3039
4023
|
});
|
|
3040
4024
|
router.all("/icon/*", (req, res) => {
|
|
3041
|
-
return router$
|
|
4025
|
+
return router$8(req, res, finalhandler(req, res));
|
|
3042
4026
|
});
|
|
3043
4027
|
router.all("/api/v1/dict/*", (req, res) => {
|
|
3044
|
-
return router$
|
|
4028
|
+
return router$7(req, res, finalhandler(req, res));
|
|
3045
4029
|
});
|
|
3046
4030
|
router.all("/api/v1/global/*", (req, res) => {
|
|
3047
4031
|
return router$2(req, res, finalhandler(req, res));
|