@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.mjs
CHANGED
|
@@ -6,9 +6,11 @@ import finalhandler from 'finalhandler';
|
|
|
6
6
|
import serveHandler from 'serve-handler';
|
|
7
7
|
import os from 'os';
|
|
8
8
|
import { createActivator } from 'di-kit';
|
|
9
|
-
import { alignToInterval, Exchange, Notification, Storage, Log,
|
|
9
|
+
import { alignToInterval, Exchange, Backtest, Live, listExchangeSchema, Notification, Storage, Log, lib, Heat, Strategy, Breakeven, Risk, Partial, HighestProfit, Schedule, Performance, Sync, Walker, StorageLive, StorageBacktest } from 'backtest-kit';
|
|
10
10
|
import fs, { readdir, readFile } from 'fs/promises';
|
|
11
11
|
import path, { join, dirname } from 'path';
|
|
12
|
+
import mime from 'mime-types';
|
|
13
|
+
import { createHash } from 'crypto';
|
|
12
14
|
import { createRequire } from 'module';
|
|
13
15
|
import { existsSync } from 'fs';
|
|
14
16
|
|
|
@@ -17,10 +19,10 @@ const CC_WWWROOT_HOST = process.env.CC_WWWROOT_HOST || "0.0.0.0";
|
|
|
17
19
|
const CC_WWWROOT_PORT = parseInt(process.env.CC_WWWROOT_PORT) || 60050;
|
|
18
20
|
const CC_ENABLE_MOCK = !!parseInt(process.env.CC_ENABLE_MOCK) || false;
|
|
19
21
|
|
|
20
|
-
const router$
|
|
22
|
+
const router$b = Router({
|
|
21
23
|
params: true,
|
|
22
24
|
});
|
|
23
|
-
router$
|
|
25
|
+
router$b.get("/api/v1/health/health_check", async (req, res) => {
|
|
24
26
|
const [cpuLoad] = os.loadavg();
|
|
25
27
|
return await micro.send(res, 200, {
|
|
26
28
|
uptime: process.uptime(),
|
|
@@ -69,6 +71,9 @@ const mockServices$1 = {
|
|
|
69
71
|
logMockService: Symbol("logMockService"),
|
|
70
72
|
statusMockService: Symbol("statusMockService"),
|
|
71
73
|
markdownMockService: Symbol("markdownMockService"),
|
|
74
|
+
explorerMockService: Symbol("explorerMockService"),
|
|
75
|
+
signalMockService: Symbol("signalMockService"),
|
|
76
|
+
heatMockService: Symbol("heatMockService"),
|
|
72
77
|
};
|
|
73
78
|
const viewServices$1 = {
|
|
74
79
|
notificationViewService: Symbol("notificationViewService"),
|
|
@@ -77,6 +82,9 @@ const viewServices$1 = {
|
|
|
77
82
|
logViewService: Symbol("logViewService"),
|
|
78
83
|
statusViewService: Symbol("statusViewService"),
|
|
79
84
|
markdownViewService: Symbol("markdownViewService"),
|
|
85
|
+
explorerViewService: Symbol("explorerViewService"),
|
|
86
|
+
signalViewService: Symbol("signalViewService"),
|
|
87
|
+
heatViewService: Symbol("heatViewService"),
|
|
80
88
|
};
|
|
81
89
|
const TYPES = {
|
|
82
90
|
...baseServices$1,
|
|
@@ -145,6 +153,14 @@ class ExchangeService {
|
|
|
145
153
|
exchangeName: dto.exchangeName,
|
|
146
154
|
}, undefined, sDate, eDate);
|
|
147
155
|
};
|
|
156
|
+
this.getLastCandles = async (dto) => {
|
|
157
|
+
this.loggerService.log("exchangeService getLastCandles", {
|
|
158
|
+
dto,
|
|
159
|
+
});
|
|
160
|
+
return await Exchange.getCandles(dto.symbol, dto.interval, dto.limit, {
|
|
161
|
+
exchangeName: dto.exchangeName,
|
|
162
|
+
});
|
|
163
|
+
};
|
|
148
164
|
}
|
|
149
165
|
}
|
|
150
166
|
|
|
@@ -179,9 +195,9 @@ class LoggerService {
|
|
|
179
195
|
}
|
|
180
196
|
}
|
|
181
197
|
|
|
182
|
-
const MOCK_PATH$
|
|
198
|
+
const MOCK_PATH$5 = "./mock/notifications.json";
|
|
183
199
|
const READ_NOTIFICATION_LIST_FN = singleshot(async () => {
|
|
184
|
-
const data = await fs.readFile(MOCK_PATH$
|
|
200
|
+
const data = await fs.readFile(MOCK_PATH$5, "utf-8");
|
|
185
201
|
return JSON.parse(data);
|
|
186
202
|
});
|
|
187
203
|
const DEFAULT_LIMIT$3 = 25;
|
|
@@ -241,9 +257,9 @@ class NotificationMockService {
|
|
|
241
257
|
}
|
|
242
258
|
}
|
|
243
259
|
|
|
244
|
-
const MOCK_PATH$
|
|
260
|
+
const MOCK_PATH$4 = "./mock/db";
|
|
245
261
|
const READ_BACKTEST_STORAGE_FN = singleshot(async () => {
|
|
246
|
-
const dbPath = join(process.cwd(), MOCK_PATH$
|
|
262
|
+
const dbPath = join(process.cwd(), MOCK_PATH$4);
|
|
247
263
|
const files = await readdir(dbPath);
|
|
248
264
|
const signals = [];
|
|
249
265
|
for (const file of files) {
|
|
@@ -278,7 +294,7 @@ class StorageMockService {
|
|
|
278
294
|
}
|
|
279
295
|
}
|
|
280
296
|
|
|
281
|
-
const
|
|
297
|
+
const HISTORY_LAST_CANDLES_LIMIT$1 = 200;
|
|
282
298
|
class ExchangeMockService {
|
|
283
299
|
constructor() {
|
|
284
300
|
this.loggerService = inject(TYPES.loggerService);
|
|
@@ -311,22 +327,56 @@ class ExchangeMockService {
|
|
|
311
327
|
if (!signal) {
|
|
312
328
|
throw new Error(`Signal with ID ${signalId} not found`);
|
|
313
329
|
}
|
|
314
|
-
const { pendingAt, scheduledAt,
|
|
330
|
+
const { pendingAt, scheduledAt, updatedAt } = signal;
|
|
315
331
|
const eventAt = pendingAt || scheduledAt;
|
|
316
332
|
return await this.exchangeService.getRangeCandles({
|
|
317
333
|
symbol: signal.symbol,
|
|
318
334
|
exchangeName: signal.exchangeName,
|
|
319
335
|
signalStartTime: eventAt,
|
|
320
|
-
signalStopTime:
|
|
336
|
+
signalStopTime: alignToInterval(new Date(updatedAt), interval).getTime(),
|
|
337
|
+
interval,
|
|
338
|
+
});
|
|
339
|
+
};
|
|
340
|
+
this.getLastCandles = async (symbol, interval) => {
|
|
341
|
+
this.loggerService.log("exchangeMockService getLastCandles", {
|
|
342
|
+
symbol,
|
|
321
343
|
interval,
|
|
322
344
|
});
|
|
345
|
+
const [backtestItem] = await Backtest.list();
|
|
346
|
+
const [liveItem] = await Live.list();
|
|
347
|
+
const [exchangeItem] = await listExchangeSchema();
|
|
348
|
+
if (backtestItem) {
|
|
349
|
+
return await this.exchangeService.getLastCandles({
|
|
350
|
+
symbol,
|
|
351
|
+
limit: HISTORY_LAST_CANDLES_LIMIT$1,
|
|
352
|
+
exchangeName: backtestItem.exchangeName,
|
|
353
|
+
interval,
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
if (liveItem) {
|
|
357
|
+
return await this.exchangeService.getLastCandles({
|
|
358
|
+
symbol,
|
|
359
|
+
limit: HISTORY_LAST_CANDLES_LIMIT$1,
|
|
360
|
+
exchangeName: liveItem.exchangeName,
|
|
361
|
+
interval,
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
if (exchangeItem) {
|
|
365
|
+
return await this.exchangeService.getLastCandles({
|
|
366
|
+
symbol,
|
|
367
|
+
limit: HISTORY_LAST_CANDLES_LIMIT$1,
|
|
368
|
+
exchangeName: exchangeItem.exchangeName,
|
|
369
|
+
interval,
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
throw new Error(`exchangeMockService getLastCandles no pending strategy symbol=${symbol} interval=${interval}`);
|
|
323
373
|
};
|
|
324
374
|
}
|
|
325
375
|
}
|
|
326
376
|
|
|
327
|
-
const MOCK_PATH$
|
|
377
|
+
const MOCK_PATH$3 = "./mock/logs.json";
|
|
328
378
|
const READ_LOG_LIST_FN = singleshot(async () => {
|
|
329
|
-
const data = await fs.readFile(MOCK_PATH$
|
|
379
|
+
const data = await fs.readFile(MOCK_PATH$3, "utf-8");
|
|
330
380
|
return JSON.parse(data);
|
|
331
381
|
});
|
|
332
382
|
const DEFAULT_LIMIT$2 = 25;
|
|
@@ -374,14 +424,24 @@ class LogMockService {
|
|
|
374
424
|
}
|
|
375
425
|
}
|
|
376
426
|
|
|
377
|
-
const MOCK_PATH = "./mock/status.json";
|
|
427
|
+
const MOCK_PATH$2 = "./mock/status.json";
|
|
428
|
+
const MOCK_INFO_PATH = "./mock/status-info.json";
|
|
378
429
|
const READ_STATUS_LIST_FN = singleshot(async () => {
|
|
379
|
-
const data = await fs.readFile(MOCK_PATH, "utf-8");
|
|
430
|
+
const data = await fs.readFile(MOCK_PATH$2, "utf-8");
|
|
431
|
+
return JSON.parse(data);
|
|
432
|
+
});
|
|
433
|
+
const READ_STATUS_INFO_FN = singleshot(async () => {
|
|
434
|
+
const data = await fs.readFile(MOCK_INFO_PATH, "utf-8");
|
|
380
435
|
return JSON.parse(data);
|
|
381
436
|
});
|
|
382
437
|
class StatusMockService {
|
|
383
438
|
constructor() {
|
|
384
439
|
this.loggerService = inject(TYPES.loggerService);
|
|
440
|
+
this.signalMockService = inject(TYPES.signalMockService);
|
|
441
|
+
this.getStatusInfo = async () => {
|
|
442
|
+
this.loggerService.log("statusMockService getStatusInfo");
|
|
443
|
+
return await READ_STATUS_INFO_FN();
|
|
444
|
+
};
|
|
385
445
|
this.getStatusList = async () => {
|
|
386
446
|
this.loggerService.log("statusMockService getStatusList");
|
|
387
447
|
const list = await READ_STATUS_LIST_FN();
|
|
@@ -401,33 +461,36 @@ class StatusMockService {
|
|
|
401
461
|
this.getStatusOne = async (id) => {
|
|
402
462
|
this.loggerService.log("statusMockService getStatusOne", { id });
|
|
403
463
|
const list = await READ_STATUS_LIST_FN();
|
|
404
|
-
const
|
|
405
|
-
if (!
|
|
464
|
+
const status = list.find((s) => s.id === id);
|
|
465
|
+
if (!status) {
|
|
406
466
|
return null;
|
|
407
467
|
}
|
|
408
|
-
const
|
|
468
|
+
const updatedAt = await this.signalMockService.getLastUpdateTimestamp(status.signalId);
|
|
469
|
+
const positionEntries = status._entry ?? [];
|
|
409
470
|
const positionLevels = positionEntries.map((e) => e.price);
|
|
410
|
-
const positionPartials =
|
|
471
|
+
const positionPartials = status._partial ?? [];
|
|
411
472
|
return {
|
|
412
|
-
signalId:
|
|
413
|
-
position:
|
|
414
|
-
symbol:
|
|
415
|
-
exchangeName:
|
|
416
|
-
strategyName:
|
|
417
|
-
totalEntries:
|
|
418
|
-
totalPartials:
|
|
419
|
-
originalPriceStopLoss:
|
|
420
|
-
originalPriceTakeProfit:
|
|
421
|
-
originalPriceOpen:
|
|
422
|
-
priceOpen:
|
|
423
|
-
priceTakeProfit:
|
|
424
|
-
priceStopLoss:
|
|
425
|
-
pnlPercentage:
|
|
426
|
-
pnlCost:
|
|
427
|
-
pnlEntries:
|
|
428
|
-
partialExecuted:
|
|
429
|
-
minuteEstimatedTime:
|
|
430
|
-
pendingAt:
|
|
473
|
+
signalId: status.signalId,
|
|
474
|
+
position: status.position,
|
|
475
|
+
symbol: status.symbol,
|
|
476
|
+
exchangeName: status.exchangeName,
|
|
477
|
+
strategyName: status.strategyName,
|
|
478
|
+
totalEntries: status.totalEntries,
|
|
479
|
+
totalPartials: status.totalPartials,
|
|
480
|
+
originalPriceStopLoss: status.originalPriceStopLoss,
|
|
481
|
+
originalPriceTakeProfit: status.originalPriceTakeProfit,
|
|
482
|
+
originalPriceOpen: status.originalPriceOpen,
|
|
483
|
+
priceOpen: status.priceOpen,
|
|
484
|
+
priceTakeProfit: status.priceTakeProfit,
|
|
485
|
+
priceStopLoss: status.priceStopLoss,
|
|
486
|
+
pnlPercentage: status.pnl.pnlPercentage,
|
|
487
|
+
pnlCost: status.pnl.pnlCost,
|
|
488
|
+
pnlEntries: status.pnl.pnlEntries,
|
|
489
|
+
partialExecuted: status.partialExecuted,
|
|
490
|
+
minuteEstimatedTime: status.minuteEstimatedTime,
|
|
491
|
+
pendingAt: status.pendingAt,
|
|
492
|
+
timestamp: status.timestamp,
|
|
493
|
+
updatedAt,
|
|
431
494
|
positionLevels,
|
|
432
495
|
positionEntries,
|
|
433
496
|
positionPartials,
|
|
@@ -440,6 +503,7 @@ const MOCK_DIR = "./mock/markdown";
|
|
|
440
503
|
const makeReader = (fileName) => singleshot(() => fs.readFile(path.join(MOCK_DIR, fileName), "utf-8"));
|
|
441
504
|
const makeDataReader = (fileName) => singleshot(async () => JSON.parse(await fs.readFile(path.join(MOCK_DIR, "data", fileName), "utf-8")));
|
|
442
505
|
const readBacktest = makeReader("backtest.md");
|
|
506
|
+
const readStrategy = makeReader("strategy.md");
|
|
443
507
|
const readLive = makeReader("live.md");
|
|
444
508
|
const readBreakeven = makeReader("breakeven.md");
|
|
445
509
|
const readRisk = makeReader("risk.md");
|
|
@@ -451,6 +515,7 @@ const readSync = makeReader("sync.md");
|
|
|
451
515
|
const readHeat = makeReader("heat.md");
|
|
452
516
|
const readWalker = makeReader("walker.md");
|
|
453
517
|
const readBacktestData = makeDataReader("backtest.json");
|
|
518
|
+
const readStrategyData = makeDataReader("strategy.json");
|
|
454
519
|
const readLiveData = makeDataReader("live.json");
|
|
455
520
|
const readBreakevenData = makeDataReader("breakeven.json");
|
|
456
521
|
const readRiskData = makeDataReader("risk.json");
|
|
@@ -464,6 +529,15 @@ const readWalkerData = makeDataReader("walker.json");
|
|
|
464
529
|
class MarkdownMockService {
|
|
465
530
|
constructor() {
|
|
466
531
|
this.loggerService = inject(TYPES.loggerService);
|
|
532
|
+
// Strategy
|
|
533
|
+
this.getStrategyData = async (symbol, strategyName, exchangeName, frameName) => {
|
|
534
|
+
this.loggerService.log("markdownMockService getStrategyData", { symbol, strategyName, exchangeName, frameName });
|
|
535
|
+
return readStrategyData();
|
|
536
|
+
};
|
|
537
|
+
this.getStrategyReport = async (symbol, strategyName, exchangeName, frameName) => {
|
|
538
|
+
this.loggerService.log("markdownMockService getStrategyReport", { symbol, strategyName, exchangeName, frameName });
|
|
539
|
+
return readStrategy();
|
|
540
|
+
};
|
|
467
541
|
// Backtest
|
|
468
542
|
this.getBacktestData = async (symbol, strategyName, exchangeName, frameName) => {
|
|
469
543
|
this.loggerService.log("markdownMockService getBacktestData", { symbol, strategyName, exchangeName, frameName });
|
|
@@ -566,6 +640,127 @@ class MarkdownMockService {
|
|
|
566
640
|
}
|
|
567
641
|
}
|
|
568
642
|
|
|
643
|
+
const deepFlat = (arr) => {
|
|
644
|
+
const result = [];
|
|
645
|
+
const seen = new Set();
|
|
646
|
+
const process = (entries = []) => entries.forEach((entry) => {
|
|
647
|
+
if (seen.has(entry)) {
|
|
648
|
+
return;
|
|
649
|
+
}
|
|
650
|
+
seen.add(entry);
|
|
651
|
+
if (entry.type === "directory") {
|
|
652
|
+
process(entry.nodes);
|
|
653
|
+
}
|
|
654
|
+
result.push(entry);
|
|
655
|
+
});
|
|
656
|
+
process(arr);
|
|
657
|
+
return result;
|
|
658
|
+
};
|
|
659
|
+
const MOCK_PATH$1 = "./mock/explorer.json";
|
|
660
|
+
const READ_EXPLORER_TREE_FN = singleshot(async () => {
|
|
661
|
+
const data = await fs.readFile(MOCK_PATH$1, "utf-8");
|
|
662
|
+
return JSON.parse(data);
|
|
663
|
+
});
|
|
664
|
+
const READ_EXPLORER_INDEX_FN = singleshot(async () => {
|
|
665
|
+
const tree = await READ_EXPLORER_TREE_FN();
|
|
666
|
+
const treeList = deepFlat(tree);
|
|
667
|
+
if (treeList.length === 0) {
|
|
668
|
+
return {};
|
|
669
|
+
}
|
|
670
|
+
return treeList.reduce((acm, cur) => {
|
|
671
|
+
if (cur.type === "file" && "content" in cur) {
|
|
672
|
+
return { ...acm, [cur.path]: cur };
|
|
673
|
+
}
|
|
674
|
+
return acm;
|
|
675
|
+
}, {});
|
|
676
|
+
});
|
|
677
|
+
class ExplorerMockService {
|
|
678
|
+
constructor() {
|
|
679
|
+
this.loggerService = inject(TYPES.loggerService);
|
|
680
|
+
this.getNode = async (nodePath) => {
|
|
681
|
+
this.loggerService.log("explorerMockService getNode", {
|
|
682
|
+
nodePath,
|
|
683
|
+
});
|
|
684
|
+
const index = await READ_EXPLORER_INDEX_FN();
|
|
685
|
+
return index[nodePath]?.content ?? "";
|
|
686
|
+
};
|
|
687
|
+
this.getTree = async () => {
|
|
688
|
+
this.loggerService.log("explorerMockService getTree");
|
|
689
|
+
return await READ_EXPLORER_TREE_FN();
|
|
690
|
+
};
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
const MOCK_PATH = "./mock/db";
|
|
695
|
+
const MOCK_SIGNAL_PATH = "./mock/signal.json";
|
|
696
|
+
const READ_SIGNAL_STORAGE_FN = singleshot(async () => {
|
|
697
|
+
const dbPath = join(process.cwd(), MOCK_PATH);
|
|
698
|
+
const files = await readdir(dbPath);
|
|
699
|
+
const signals = [];
|
|
700
|
+
for (const file of files) {
|
|
701
|
+
if (!file.endsWith(".json")) {
|
|
702
|
+
continue;
|
|
703
|
+
}
|
|
704
|
+
const filePath = join(dbPath, file);
|
|
705
|
+
signals.push(JSON.parse(await readFile(filePath, "utf-8")));
|
|
706
|
+
}
|
|
707
|
+
return signals;
|
|
708
|
+
});
|
|
709
|
+
const READ_PENDING_SIGNAL_FN = singleshot(async () => {
|
|
710
|
+
const filePath = join(process.cwd(), MOCK_SIGNAL_PATH);
|
|
711
|
+
return JSON.parse(await readFile(filePath, "utf-8"));
|
|
712
|
+
});
|
|
713
|
+
class SignalMockService {
|
|
714
|
+
constructor() {
|
|
715
|
+
this.loggerService = inject(TYPES.loggerService);
|
|
716
|
+
this.getLastUpdateTimestamp = async (signalId) => {
|
|
717
|
+
this.loggerService.log("signalMockService getLastUpdateTimestamp", {
|
|
718
|
+
signalId,
|
|
719
|
+
});
|
|
720
|
+
const signalList = await READ_SIGNAL_STORAGE_FN();
|
|
721
|
+
const signalMap = new Map(signalList.map((signal) => [signal.id, signal]));
|
|
722
|
+
const signal = signalMap.get(signalId);
|
|
723
|
+
if (!signal) {
|
|
724
|
+
throw new Error(`SignalMockService getLastUpdateTimestamp signal not found signalId=${signalId}`);
|
|
725
|
+
}
|
|
726
|
+
return signal.updatedAt;
|
|
727
|
+
};
|
|
728
|
+
this.getPendingSignal = async (symbol) => {
|
|
729
|
+
this.loggerService.log("signalMockService getPendingSignal", {
|
|
730
|
+
symbol,
|
|
731
|
+
});
|
|
732
|
+
const signal = await READ_PENDING_SIGNAL_FN();
|
|
733
|
+
if (signal.symbol !== symbol) {
|
|
734
|
+
return null;
|
|
735
|
+
}
|
|
736
|
+
return signal;
|
|
737
|
+
};
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
const MOCK_DATA_PATH = "./mock/heat.json";
|
|
742
|
+
const MOCK_REPORT_PATH = "./mock/heat-report.md";
|
|
743
|
+
const READ_HEAT_DATA_FN = singleshot(async () => {
|
|
744
|
+
const data = await fs.readFile(MOCK_DATA_PATH, "utf-8");
|
|
745
|
+
return JSON.parse(data);
|
|
746
|
+
});
|
|
747
|
+
const READ_HEAT_REPORT_FN = singleshot(async () => {
|
|
748
|
+
return await fs.readFile(MOCK_REPORT_PATH, "utf-8");
|
|
749
|
+
});
|
|
750
|
+
class HeatMockService {
|
|
751
|
+
constructor() {
|
|
752
|
+
this.loggerService = inject(TYPES.loggerService);
|
|
753
|
+
this.getStrategyHeatData = async () => {
|
|
754
|
+
this.loggerService.log("heatMockService getStrategyHeatData");
|
|
755
|
+
return await READ_HEAT_DATA_FN();
|
|
756
|
+
};
|
|
757
|
+
this.getStrategyHeatReport = async () => {
|
|
758
|
+
this.loggerService.log("heatMockService getStrategyHeatReport");
|
|
759
|
+
return await READ_HEAT_REPORT_FN();
|
|
760
|
+
};
|
|
761
|
+
}
|
|
762
|
+
}
|
|
763
|
+
|
|
569
764
|
const DEFAULT_LIMIT$1 = 25;
|
|
570
765
|
const DEFAULT_OFFSET$1 = 0;
|
|
571
766
|
const CREATE_FILTER_LIST_FN$1 = (filterData) => Object.keys(filterData).map((key) => (row) => new RegExp(filterData[key], "i").test(row[key]));
|
|
@@ -710,13 +905,14 @@ class StorageViewService {
|
|
|
710
905
|
}
|
|
711
906
|
}
|
|
712
907
|
|
|
713
|
-
const
|
|
908
|
+
const HISTORY_LAST_CANDLES_LIMIT = 200;
|
|
714
909
|
class ExchangeViewService {
|
|
715
910
|
constructor() {
|
|
716
911
|
this.loggerService = inject(TYPES.loggerService);
|
|
717
912
|
this.storageViewService = inject(TYPES.storageViewService);
|
|
718
913
|
this.exchangeService = inject(TYPES.exchangeService);
|
|
719
914
|
this.exchangeMockService = inject(TYPES.exchangeMockService);
|
|
915
|
+
this.signalViewService = inject(TYPES.signalViewService);
|
|
720
916
|
this.getSignalCandles = async (signalId, interval) => {
|
|
721
917
|
this.loggerService.log("exchangeViewService getCandles", {
|
|
722
918
|
signalId,
|
|
@@ -750,15 +946,53 @@ class ExchangeViewService {
|
|
|
750
946
|
if (!signal) {
|
|
751
947
|
throw new Error(`Signal with ID ${signalId} not found`);
|
|
752
948
|
}
|
|
753
|
-
const { pendingAt, scheduledAt
|
|
949
|
+
const { pendingAt, scheduledAt } = signal;
|
|
754
950
|
const eventAt = pendingAt || scheduledAt;
|
|
951
|
+
const updatedAt = await this.signalViewService.getLastUpdateTimestamp(signalId);
|
|
755
952
|
return await this.exchangeService.getRangeCandles({
|
|
756
953
|
symbol: signal.symbol,
|
|
757
954
|
exchangeName: signal.exchangeName,
|
|
758
955
|
signalStartTime: eventAt,
|
|
759
|
-
signalStopTime:
|
|
956
|
+
signalStopTime: alignToInterval(new Date(updatedAt), interval).getTime(),
|
|
957
|
+
interval,
|
|
958
|
+
});
|
|
959
|
+
};
|
|
960
|
+
this.getLastCandles = async (symbol, interval) => {
|
|
961
|
+
this.loggerService.log("exchangeViewService getLastCandles", {
|
|
962
|
+
symbol,
|
|
760
963
|
interval,
|
|
761
964
|
});
|
|
965
|
+
if (CC_ENABLE_MOCK) {
|
|
966
|
+
return await this.exchangeMockService.getLastCandles(symbol, interval);
|
|
967
|
+
}
|
|
968
|
+
const [backtestItem] = await Backtest.list();
|
|
969
|
+
const [liveItem] = await Live.list();
|
|
970
|
+
const [exchangeItem] = await listExchangeSchema();
|
|
971
|
+
if (backtestItem) {
|
|
972
|
+
return await this.exchangeService.getLastCandles({
|
|
973
|
+
symbol,
|
|
974
|
+
limit: HISTORY_LAST_CANDLES_LIMIT,
|
|
975
|
+
exchangeName: backtestItem.exchangeName,
|
|
976
|
+
interval,
|
|
977
|
+
});
|
|
978
|
+
}
|
|
979
|
+
if (liveItem) {
|
|
980
|
+
return await this.exchangeService.getLastCandles({
|
|
981
|
+
symbol,
|
|
982
|
+
limit: HISTORY_LAST_CANDLES_LIMIT,
|
|
983
|
+
exchangeName: liveItem.exchangeName,
|
|
984
|
+
interval,
|
|
985
|
+
});
|
|
986
|
+
}
|
|
987
|
+
if (exchangeItem) {
|
|
988
|
+
return await this.exchangeService.getLastCandles({
|
|
989
|
+
symbol,
|
|
990
|
+
limit: HISTORY_LAST_CANDLES_LIMIT,
|
|
991
|
+
exchangeName: exchangeItem.exchangeName,
|
|
992
|
+
interval,
|
|
993
|
+
});
|
|
994
|
+
}
|
|
995
|
+
throw new Error(`exchangeViewService getLastCandles no pending strategy symbol=${symbol} interval=${interval}`);
|
|
762
996
|
};
|
|
763
997
|
}
|
|
764
998
|
}
|
|
@@ -822,6 +1056,7 @@ class StatusViewService {
|
|
|
822
1056
|
constructor() {
|
|
823
1057
|
this.loggerService = inject(TYPES.loggerService);
|
|
824
1058
|
this.statusMockService = inject(TYPES.statusMockService);
|
|
1059
|
+
this.signalViewService = inject(TYPES.signalViewService);
|
|
825
1060
|
this.getStatusList = async () => {
|
|
826
1061
|
this.loggerService.log("statusViewService getStatusList");
|
|
827
1062
|
if (CC_ENABLE_MOCK) {
|
|
@@ -884,6 +1119,12 @@ class StatusViewService {
|
|
|
884
1119
|
if (!positionPartials) {
|
|
885
1120
|
return null;
|
|
886
1121
|
}
|
|
1122
|
+
const timestamp = await lib.timeMetaService.getTimestamp(pendingSignal.symbol, {
|
|
1123
|
+
strategyName: pendingSignal.strategyName,
|
|
1124
|
+
exchangeName: pendingSignal.exchangeName,
|
|
1125
|
+
frameName: pendingSignal.frameName,
|
|
1126
|
+
}, false);
|
|
1127
|
+
const updatedAt = await this.signalViewService.getLastUpdateTimestamp(pendingSignal.id);
|
|
887
1128
|
return {
|
|
888
1129
|
signalId: pendingSignal.id,
|
|
889
1130
|
position: pendingSignal.position,
|
|
@@ -904,11 +1145,80 @@ class StatusViewService {
|
|
|
904
1145
|
partialExecuted: pendingSignal.partialExecuted,
|
|
905
1146
|
pendingAt: pendingSignal.pendingAt,
|
|
906
1147
|
minuteEstimatedTime: pendingSignal.minuteEstimatedTime,
|
|
1148
|
+
timestamp,
|
|
1149
|
+
updatedAt,
|
|
907
1150
|
positionEntries,
|
|
908
1151
|
positionLevels,
|
|
909
1152
|
positionPartials,
|
|
910
1153
|
};
|
|
911
1154
|
};
|
|
1155
|
+
this.getStatusInfo = async () => {
|
|
1156
|
+
this.loggerService.log("statusViewService getStatusInfo");
|
|
1157
|
+
if (CC_ENABLE_MOCK) {
|
|
1158
|
+
return this.statusMockService.getStatusInfo();
|
|
1159
|
+
}
|
|
1160
|
+
{
|
|
1161
|
+
const [backtestTarget = null] = await Backtest.list();
|
|
1162
|
+
if (backtestTarget) {
|
|
1163
|
+
const currentHeat = await Heat.getData({
|
|
1164
|
+
strategyName: backtestTarget.strategyName,
|
|
1165
|
+
exchangeName: backtestTarget.exchangeName,
|
|
1166
|
+
frameName: backtestTarget.frameName,
|
|
1167
|
+
});
|
|
1168
|
+
return {
|
|
1169
|
+
context: {
|
|
1170
|
+
strategyName: backtestTarget.strategyName,
|
|
1171
|
+
exchangeName: backtestTarget.exchangeName,
|
|
1172
|
+
frameName: backtestTarget.frameName,
|
|
1173
|
+
},
|
|
1174
|
+
portfolioTotalPnl: currentHeat.portfolioTotalPnl,
|
|
1175
|
+
portfolioSharpeRatio: currentHeat.portfolioSharpeRatio,
|
|
1176
|
+
portfolioTotalTrades: currentHeat.portfolioTotalTrades,
|
|
1177
|
+
symbols: currentHeat.symbols.map(({ symbol, totalPnl, winRate, profitFactor, maxDrawdown, expectancy, totalTrades }) => ({
|
|
1178
|
+
symbol,
|
|
1179
|
+
totalPnl,
|
|
1180
|
+
winRate,
|
|
1181
|
+
profitFactor,
|
|
1182
|
+
maxDrawdown,
|
|
1183
|
+
expectancy,
|
|
1184
|
+
totalTrades,
|
|
1185
|
+
})),
|
|
1186
|
+
backtest: true,
|
|
1187
|
+
};
|
|
1188
|
+
}
|
|
1189
|
+
}
|
|
1190
|
+
{
|
|
1191
|
+
const [liveTarget = null] = await Live.list();
|
|
1192
|
+
if (liveTarget) {
|
|
1193
|
+
const currentHeat = await Heat.getData({
|
|
1194
|
+
strategyName: liveTarget.strategyName,
|
|
1195
|
+
exchangeName: liveTarget.exchangeName,
|
|
1196
|
+
frameName: "",
|
|
1197
|
+
});
|
|
1198
|
+
return {
|
|
1199
|
+
context: {
|
|
1200
|
+
strategyName: liveTarget.strategyName,
|
|
1201
|
+
exchangeName: liveTarget.exchangeName,
|
|
1202
|
+
frameName: "",
|
|
1203
|
+
},
|
|
1204
|
+
portfolioTotalPnl: currentHeat.portfolioTotalPnl,
|
|
1205
|
+
portfolioSharpeRatio: currentHeat.portfolioSharpeRatio,
|
|
1206
|
+
portfolioTotalTrades: currentHeat.portfolioTotalTrades,
|
|
1207
|
+
symbols: currentHeat.symbols.map(({ symbol, totalPnl, winRate, profitFactor, maxDrawdown, expectancy, totalTrades }) => ({
|
|
1208
|
+
symbol,
|
|
1209
|
+
totalPnl,
|
|
1210
|
+
winRate,
|
|
1211
|
+
profitFactor,
|
|
1212
|
+
maxDrawdown,
|
|
1213
|
+
expectancy,
|
|
1214
|
+
totalTrades,
|
|
1215
|
+
})),
|
|
1216
|
+
backtest: false,
|
|
1217
|
+
};
|
|
1218
|
+
}
|
|
1219
|
+
}
|
|
1220
|
+
return null;
|
|
1221
|
+
};
|
|
912
1222
|
}
|
|
913
1223
|
}
|
|
914
1224
|
|
|
@@ -916,6 +1226,21 @@ class MarkdownViewService {
|
|
|
916
1226
|
constructor() {
|
|
917
1227
|
this.loggerService = inject(TYPES.loggerService);
|
|
918
1228
|
this.markdownMockService = inject(TYPES.markdownMockService);
|
|
1229
|
+
// Strategy
|
|
1230
|
+
this.getStrategyData = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
|
|
1231
|
+
this.loggerService.log("markdownViewService getStrategyData", { symbol, strategyName, exchangeName, frameName, backtest });
|
|
1232
|
+
if (CC_ENABLE_MOCK) {
|
|
1233
|
+
return await this.markdownMockService.getStrategyData(symbol, strategyName, exchangeName, frameName);
|
|
1234
|
+
}
|
|
1235
|
+
return await Strategy.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
|
|
1236
|
+
};
|
|
1237
|
+
this.getStrategyReport = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
|
|
1238
|
+
this.loggerService.log("markdownViewService getStrategyReport", { symbol, strategyName, exchangeName, frameName, backtest });
|
|
1239
|
+
if (CC_ENABLE_MOCK) {
|
|
1240
|
+
return await this.markdownMockService.getStrategyReport(symbol, strategyName, exchangeName, frameName);
|
|
1241
|
+
}
|
|
1242
|
+
return await Strategy.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
|
|
1243
|
+
};
|
|
919
1244
|
// Backtest
|
|
920
1245
|
this.getBacktestData = async (symbol, strategyName, exchangeName, frameName) => {
|
|
921
1246
|
this.loggerService.log("markdownViewService getBacktestData", { symbol, strategyName, exchangeName, frameName });
|
|
@@ -1084,6 +1409,185 @@ class MarkdownViewService {
|
|
|
1084
1409
|
}
|
|
1085
1410
|
}
|
|
1086
1411
|
|
|
1412
|
+
const pathId = (p) => createHash("sha1").update(p).digest("hex").slice(0, 16);
|
|
1413
|
+
const buildTree = async (dir, visited) => {
|
|
1414
|
+
const realDir = await fs.realpath(dir);
|
|
1415
|
+
if (visited.has(realDir)) {
|
|
1416
|
+
return [];
|
|
1417
|
+
}
|
|
1418
|
+
visited.add(realDir);
|
|
1419
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
1420
|
+
const nodes = [];
|
|
1421
|
+
for (const entry of entries) {
|
|
1422
|
+
const childPath = path.join(dir, entry.name);
|
|
1423
|
+
const childRelPath = path.relative(process.cwd(), childPath).replace(/\\/g, "/");
|
|
1424
|
+
if (entry.isDirectory()) {
|
|
1425
|
+
nodes.push({
|
|
1426
|
+
id: pathId(childRelPath),
|
|
1427
|
+
path: childRelPath,
|
|
1428
|
+
label: entry.name,
|
|
1429
|
+
type: "directory",
|
|
1430
|
+
nodes: await buildTree(childPath, visited),
|
|
1431
|
+
});
|
|
1432
|
+
}
|
|
1433
|
+
else {
|
|
1434
|
+
nodes.push({
|
|
1435
|
+
id: pathId(childRelPath),
|
|
1436
|
+
path: childRelPath,
|
|
1437
|
+
label: entry.name,
|
|
1438
|
+
type: "file",
|
|
1439
|
+
mimeType: mime.lookup(entry.name) || "application/octet-stream",
|
|
1440
|
+
});
|
|
1441
|
+
}
|
|
1442
|
+
}
|
|
1443
|
+
return nodes;
|
|
1444
|
+
};
|
|
1445
|
+
class ExplorerViewService {
|
|
1446
|
+
constructor() {
|
|
1447
|
+
this.loggerService = inject(TYPES.loggerService);
|
|
1448
|
+
this.explorerMockService = inject(TYPES.explorerMockService);
|
|
1449
|
+
this.getDir = singleshot(async () => {
|
|
1450
|
+
this.loggerService.log("explorerViewService getDir");
|
|
1451
|
+
const dir = path.join(process.cwd(), "dump");
|
|
1452
|
+
await fs.mkdir(dir, { recursive: true });
|
|
1453
|
+
return dir;
|
|
1454
|
+
});
|
|
1455
|
+
this.getNode = async (nodePath) => {
|
|
1456
|
+
this.loggerService.log("explorerViewService getNode", {
|
|
1457
|
+
nodePath,
|
|
1458
|
+
});
|
|
1459
|
+
if (CC_ENABLE_MOCK) {
|
|
1460
|
+
return await this.explorerMockService.getNode(nodePath);
|
|
1461
|
+
}
|
|
1462
|
+
const dir = await this.getDir();
|
|
1463
|
+
const absPath = path.resolve(process.cwd(), nodePath);
|
|
1464
|
+
if (!absPath.startsWith(dir + path.sep) && !absPath.startsWith(dir + "/") && absPath !== dir) {
|
|
1465
|
+
throw new Error(`Path is outside of dump dir: ${nodePath}`);
|
|
1466
|
+
}
|
|
1467
|
+
return await fs.readFile(absPath, "utf-8");
|
|
1468
|
+
};
|
|
1469
|
+
this.getTree = async () => {
|
|
1470
|
+
this.loggerService.log("explorerViewService getTree");
|
|
1471
|
+
if (CC_ENABLE_MOCK) {
|
|
1472
|
+
return await this.explorerMockService.getTree();
|
|
1473
|
+
}
|
|
1474
|
+
const dir = await this.getDir();
|
|
1475
|
+
const root = path.relative(process.cwd(), dir).replace(/\\/g, "/");
|
|
1476
|
+
const rootNode = {
|
|
1477
|
+
id: pathId(root),
|
|
1478
|
+
path: root,
|
|
1479
|
+
label: path.basename(root),
|
|
1480
|
+
type: "directory",
|
|
1481
|
+
nodes: await buildTree(dir, new Set([path.join(dir, "data")])),
|
|
1482
|
+
};
|
|
1483
|
+
return [rootNode];
|
|
1484
|
+
};
|
|
1485
|
+
}
|
|
1486
|
+
}
|
|
1487
|
+
|
|
1488
|
+
class SignalViewService {
|
|
1489
|
+
constructor() {
|
|
1490
|
+
this.loggerService = inject(TYPES.loggerService);
|
|
1491
|
+
this.signalMockService = inject(TYPES.signalMockService);
|
|
1492
|
+
this.getLastUpdateTimestamp = async (signalId) => {
|
|
1493
|
+
this.loggerService.log("signalViewService getLastUpdateTimestamp", {
|
|
1494
|
+
signalId,
|
|
1495
|
+
});
|
|
1496
|
+
if (CC_ENABLE_MOCK) {
|
|
1497
|
+
return await this.signalMockService.getLastUpdateTimestamp(signalId);
|
|
1498
|
+
}
|
|
1499
|
+
{
|
|
1500
|
+
const liveSignal = await StorageLive.findById(signalId);
|
|
1501
|
+
if (liveSignal) {
|
|
1502
|
+
return liveSignal.updatedAt;
|
|
1503
|
+
}
|
|
1504
|
+
}
|
|
1505
|
+
{
|
|
1506
|
+
const backtestSignal = await StorageBacktest.findById(signalId);
|
|
1507
|
+
if (backtestSignal) {
|
|
1508
|
+
return backtestSignal.updatedAt;
|
|
1509
|
+
}
|
|
1510
|
+
}
|
|
1511
|
+
throw new Error(`SignalViewService getLastUpdateTimestamp signal not found signalId=${signalId}`);
|
|
1512
|
+
};
|
|
1513
|
+
this.getPendingSignal = async (symbol) => {
|
|
1514
|
+
this.loggerService.log("signalViewService getPendingSignal", {
|
|
1515
|
+
symbol,
|
|
1516
|
+
});
|
|
1517
|
+
if (CC_ENABLE_MOCK) {
|
|
1518
|
+
return await this.signalMockService.getPendingSignal(symbol);
|
|
1519
|
+
}
|
|
1520
|
+
{
|
|
1521
|
+
const liveList = await Live.list();
|
|
1522
|
+
const liveTarget = liveList.find((live) => live.symbol === symbol);
|
|
1523
|
+
if (liveTarget) {
|
|
1524
|
+
const currentPrice = await Exchange.getAveragePrice(symbol, {
|
|
1525
|
+
exchangeName: liveTarget.exchangeName,
|
|
1526
|
+
});
|
|
1527
|
+
return await Live.getPendingSignal(symbol, currentPrice, {
|
|
1528
|
+
strategyName: liveTarget.strategyName,
|
|
1529
|
+
exchangeName: liveTarget.exchangeName,
|
|
1530
|
+
});
|
|
1531
|
+
}
|
|
1532
|
+
}
|
|
1533
|
+
return null;
|
|
1534
|
+
};
|
|
1535
|
+
}
|
|
1536
|
+
}
|
|
1537
|
+
|
|
1538
|
+
class HeatViewService {
|
|
1539
|
+
constructor() {
|
|
1540
|
+
this.loggerService = inject(TYPES.loggerService);
|
|
1541
|
+
this.heatMockService = inject(TYPES.heatMockService);
|
|
1542
|
+
this.getStrategyHeatData = async () => {
|
|
1543
|
+
this.loggerService.log("heatViewService getStrategyHeatData");
|
|
1544
|
+
if (CC_ENABLE_MOCK) {
|
|
1545
|
+
return await this.heatMockService.getStrategyHeatData();
|
|
1546
|
+
}
|
|
1547
|
+
const [backtestItem] = await Backtest.list();
|
|
1548
|
+
const [liveItem] = await Live.list();
|
|
1549
|
+
if (backtestItem) {
|
|
1550
|
+
return await Heat.getData({
|
|
1551
|
+
strategyName: backtestItem.strategyName,
|
|
1552
|
+
exchangeName: backtestItem.exchangeName,
|
|
1553
|
+
frameName: backtestItem.frameName,
|
|
1554
|
+
});
|
|
1555
|
+
}
|
|
1556
|
+
if (liveItem) {
|
|
1557
|
+
return await Heat.getData({
|
|
1558
|
+
strategyName: liveItem.strategyName,
|
|
1559
|
+
exchangeName: liveItem.exchangeName,
|
|
1560
|
+
frameName: "",
|
|
1561
|
+
});
|
|
1562
|
+
}
|
|
1563
|
+
return null;
|
|
1564
|
+
};
|
|
1565
|
+
this.getStrategyHeatReport = async () => {
|
|
1566
|
+
this.loggerService.log("heatViewService getStrategyHeatReport");
|
|
1567
|
+
if (CC_ENABLE_MOCK) {
|
|
1568
|
+
return await this.heatMockService.getStrategyHeatReport();
|
|
1569
|
+
}
|
|
1570
|
+
const [backtestItem] = await Backtest.list();
|
|
1571
|
+
const [liveItem] = await Live.list();
|
|
1572
|
+
if (backtestItem) {
|
|
1573
|
+
return await Heat.getReport({
|
|
1574
|
+
strategyName: backtestItem.strategyName,
|
|
1575
|
+
exchangeName: backtestItem.exchangeName,
|
|
1576
|
+
frameName: backtestItem.frameName,
|
|
1577
|
+
});
|
|
1578
|
+
}
|
|
1579
|
+
if (liveItem) {
|
|
1580
|
+
return await Heat.getReport({
|
|
1581
|
+
strategyName: liveItem.strategyName,
|
|
1582
|
+
exchangeName: liveItem.exchangeName,
|
|
1583
|
+
frameName: "",
|
|
1584
|
+
});
|
|
1585
|
+
}
|
|
1586
|
+
return null;
|
|
1587
|
+
};
|
|
1588
|
+
}
|
|
1589
|
+
}
|
|
1590
|
+
|
|
1087
1591
|
const symbol_list = [
|
|
1088
1592
|
{
|
|
1089
1593
|
icon: "/icon/btc.png",
|
|
@@ -1280,6 +1784,9 @@ class LiveMetaService {
|
|
|
1280
1784
|
provide(TYPES.logMockService, () => new LogMockService());
|
|
1281
1785
|
provide(TYPES.statusMockService, () => new StatusMockService());
|
|
1282
1786
|
provide(TYPES.markdownMockService, () => new MarkdownMockService());
|
|
1787
|
+
provide(TYPES.explorerMockService, () => new ExplorerMockService());
|
|
1788
|
+
provide(TYPES.signalMockService, () => new SignalMockService());
|
|
1789
|
+
provide(TYPES.heatMockService, () => new HeatMockService());
|
|
1283
1790
|
}
|
|
1284
1791
|
{
|
|
1285
1792
|
provide(TYPES.notificationViewService, () => new NotificationViewService());
|
|
@@ -1288,6 +1795,9 @@ class LiveMetaService {
|
|
|
1288
1795
|
provide(TYPES.logViewService, () => new LogViewService());
|
|
1289
1796
|
provide(TYPES.statusViewService, () => new StatusViewService());
|
|
1290
1797
|
provide(TYPES.markdownViewService, () => new MarkdownViewService());
|
|
1798
|
+
provide(TYPES.explorerViewService, () => new ExplorerViewService());
|
|
1799
|
+
provide(TYPES.signalViewService, () => new SignalViewService());
|
|
1800
|
+
provide(TYPES.heatViewService, () => new HeatViewService());
|
|
1291
1801
|
}
|
|
1292
1802
|
|
|
1293
1803
|
const baseServices = {
|
|
@@ -1310,6 +1820,9 @@ const mockServices = {
|
|
|
1310
1820
|
logMockService: inject(TYPES.logMockService),
|
|
1311
1821
|
statusMockService: inject(TYPES.statusMockService),
|
|
1312
1822
|
markdownMockService: inject(TYPES.markdownMockService),
|
|
1823
|
+
explorerMockService: inject(TYPES.explorerMockService),
|
|
1824
|
+
signalMockService: inject(TYPES.signalMockService),
|
|
1825
|
+
heatMockService: inject(TYPES.heatMockService),
|
|
1313
1826
|
};
|
|
1314
1827
|
const viewServices = {
|
|
1315
1828
|
notificationViewService: inject(TYPES.notificationViewService),
|
|
@@ -1318,6 +1831,9 @@ const viewServices = {
|
|
|
1318
1831
|
logViewService: inject(TYPES.logViewService),
|
|
1319
1832
|
statusViewService: inject(TYPES.statusViewService),
|
|
1320
1833
|
markdownViewService: inject(TYPES.markdownViewService),
|
|
1834
|
+
explorerViewService: inject(TYPES.explorerViewService),
|
|
1835
|
+
signalViewService: inject(TYPES.signalViewService),
|
|
1836
|
+
heatViewService: inject(TYPES.heatViewService),
|
|
1321
1837
|
};
|
|
1322
1838
|
const ioc = {
|
|
1323
1839
|
...baseServices,
|
|
@@ -1328,11 +1844,11 @@ const ioc = {
|
|
|
1328
1844
|
};
|
|
1329
1845
|
init();
|
|
1330
1846
|
|
|
1331
|
-
const router$
|
|
1847
|
+
const router$a = Router({
|
|
1332
1848
|
params: true,
|
|
1333
1849
|
});
|
|
1334
1850
|
// ExchangeMockService endpoints
|
|
1335
|
-
router$
|
|
1851
|
+
router$a.post("/api/v1/mock/candles_signal", async (req, res) => {
|
|
1336
1852
|
try {
|
|
1337
1853
|
const request = await micro.json(req);
|
|
1338
1854
|
const { signalId, interval, requestId, serviceName } = request;
|
|
@@ -1360,7 +1876,7 @@ router$8.post("/api/v1/mock/candles_signal", async (req, res) => {
|
|
|
1360
1876
|
});
|
|
1361
1877
|
}
|
|
1362
1878
|
});
|
|
1363
|
-
router$
|
|
1879
|
+
router$a.post("/api/v1/mock/candles_point", async (req, res) => {
|
|
1364
1880
|
try {
|
|
1365
1881
|
const request = await micro.json(req);
|
|
1366
1882
|
const { currentTime, interval, requestId, serviceName, symbol, exchangeName } = request;
|
|
@@ -1394,7 +1910,7 @@ router$8.post("/api/v1/mock/candles_point", async (req, res) => {
|
|
|
1394
1910
|
}
|
|
1395
1911
|
});
|
|
1396
1912
|
// NotificationMockService endpoints
|
|
1397
|
-
router$
|
|
1913
|
+
router$a.post("/api/v1/mock/notification_list", async (req, res) => {
|
|
1398
1914
|
try {
|
|
1399
1915
|
const request = await micro.json(req);
|
|
1400
1916
|
const { requestId, serviceName } = request;
|
|
@@ -1422,7 +1938,7 @@ router$8.post("/api/v1/mock/notification_list", async (req, res) => {
|
|
|
1422
1938
|
});
|
|
1423
1939
|
}
|
|
1424
1940
|
});
|
|
1425
|
-
router$
|
|
1941
|
+
router$a.post("/api/v1/mock/notification_one/:id", async (req, res) => {
|
|
1426
1942
|
try {
|
|
1427
1943
|
const request = await micro.json(req);
|
|
1428
1944
|
const { requestId, serviceName } = request;
|
|
@@ -1451,7 +1967,7 @@ router$8.post("/api/v1/mock/notification_one/:id", async (req, res) => {
|
|
|
1451
1967
|
});
|
|
1452
1968
|
}
|
|
1453
1969
|
});
|
|
1454
|
-
router$
|
|
1970
|
+
router$a.post("/api/v1/mock/notification_filter", async (req, res) => {
|
|
1455
1971
|
try {
|
|
1456
1972
|
const request = await micro.json(req);
|
|
1457
1973
|
const { requestId, serviceName, filterData, limit, offset } = request;
|
|
@@ -1480,7 +1996,7 @@ router$8.post("/api/v1/mock/notification_filter", async (req, res) => {
|
|
|
1480
1996
|
}
|
|
1481
1997
|
});
|
|
1482
1998
|
// StorageMockService endpoints
|
|
1483
|
-
router$
|
|
1999
|
+
router$a.post("/api/v1/mock/storage_one/:id", async (req, res) => {
|
|
1484
2000
|
try {
|
|
1485
2001
|
const request = await micro.json(req);
|
|
1486
2002
|
const { requestId, serviceName } = request;
|
|
@@ -1509,7 +2025,7 @@ router$8.post("/api/v1/mock/storage_one/:id", async (req, res) => {
|
|
|
1509
2025
|
});
|
|
1510
2026
|
}
|
|
1511
2027
|
});
|
|
1512
|
-
router$
|
|
2028
|
+
router$a.post("/api/v1/mock/storage_list/live", async (req, res) => {
|
|
1513
2029
|
try {
|
|
1514
2030
|
const request = await micro.json(req);
|
|
1515
2031
|
const { requestId, serviceName } = request;
|
|
@@ -1537,7 +2053,7 @@ router$8.post("/api/v1/mock/storage_list/live", async (req, res) => {
|
|
|
1537
2053
|
});
|
|
1538
2054
|
}
|
|
1539
2055
|
});
|
|
1540
|
-
router$
|
|
2056
|
+
router$a.post("/api/v1/mock/storage_list/backtest", async (req, res) => {
|
|
1541
2057
|
try {
|
|
1542
2058
|
const request = await micro.json(req);
|
|
1543
2059
|
const { requestId, serviceName } = request;
|
|
@@ -1566,7 +2082,7 @@ router$8.post("/api/v1/mock/storage_list/backtest", async (req, res) => {
|
|
|
1566
2082
|
}
|
|
1567
2083
|
});
|
|
1568
2084
|
// LogMockService endpoints
|
|
1569
|
-
router$
|
|
2085
|
+
router$a.post("/api/v1/mock/log_list", async (req, res) => {
|
|
1570
2086
|
try {
|
|
1571
2087
|
const request = await micro.json(req);
|
|
1572
2088
|
const { requestId, serviceName } = request;
|
|
@@ -1594,7 +2110,7 @@ router$8.post("/api/v1/mock/log_list", async (req, res) => {
|
|
|
1594
2110
|
});
|
|
1595
2111
|
}
|
|
1596
2112
|
});
|
|
1597
|
-
router$
|
|
2113
|
+
router$a.post("/api/v1/mock/log_one/:id", async (req, res) => {
|
|
1598
2114
|
try {
|
|
1599
2115
|
const request = await micro.json(req);
|
|
1600
2116
|
const { requestId, serviceName } = request;
|
|
@@ -1623,7 +2139,7 @@ router$8.post("/api/v1/mock/log_one/:id", async (req, res) => {
|
|
|
1623
2139
|
});
|
|
1624
2140
|
}
|
|
1625
2141
|
});
|
|
1626
|
-
router$
|
|
2142
|
+
router$a.post("/api/v1/mock/log_filter", async (req, res) => {
|
|
1627
2143
|
try {
|
|
1628
2144
|
const request = await micro.json(req);
|
|
1629
2145
|
const { requestId, serviceName, filterData, limit, offset } = request;
|
|
@@ -1651,7 +2167,7 @@ router$8.post("/api/v1/mock/log_filter", async (req, res) => {
|
|
|
1651
2167
|
});
|
|
1652
2168
|
}
|
|
1653
2169
|
});
|
|
1654
|
-
router$
|
|
2170
|
+
router$a.post("/api/v1/mock/candles_live", async (req, res) => {
|
|
1655
2171
|
try {
|
|
1656
2172
|
const request = await micro.json(req);
|
|
1657
2173
|
const { signalId, interval, requestId, serviceName } = request;
|
|
@@ -1679,12 +2195,11 @@ router$8.post("/api/v1/mock/candles_live", async (req, res) => {
|
|
|
1679
2195
|
});
|
|
1680
2196
|
}
|
|
1681
2197
|
});
|
|
1682
|
-
|
|
1683
|
-
router$8.post("/api/v1/mock/status_list", async (req, res) => {
|
|
2198
|
+
router$a.post("/api/v1/mock/candles_last", async (req, res) => {
|
|
1684
2199
|
try {
|
|
1685
2200
|
const request = await micro.json(req);
|
|
1686
|
-
const { requestId, serviceName } = request;
|
|
1687
|
-
const data = await ioc.
|
|
2201
|
+
const { symbol, interval, requestId, serviceName } = request;
|
|
2202
|
+
const data = await ioc.exchangeMockService.getLastCandles(symbol, interval);
|
|
1688
2203
|
const result = {
|
|
1689
2204
|
data,
|
|
1690
2205
|
status: "ok",
|
|
@@ -1692,14 +2207,14 @@ router$8.post("/api/v1/mock/status_list", async (req, res) => {
|
|
|
1692
2207
|
requestId,
|
|
1693
2208
|
serviceName,
|
|
1694
2209
|
};
|
|
1695
|
-
ioc.loggerService.log("/api/v1/mock/
|
|
2210
|
+
ioc.loggerService.log("/api/v1/mock/candles_last ok", {
|
|
1696
2211
|
request,
|
|
1697
2212
|
result: omit(result, "data"),
|
|
1698
2213
|
});
|
|
1699
2214
|
return await micro.send(res, 200, result);
|
|
1700
2215
|
}
|
|
1701
2216
|
catch (error) {
|
|
1702
|
-
ioc.loggerService.log("/api/v1/mock/
|
|
2217
|
+
ioc.loggerService.log("/api/v1/mock/candles_last error", {
|
|
1703
2218
|
error: errorData(error),
|
|
1704
2219
|
});
|
|
1705
2220
|
return await micro.send(res, 200, {
|
|
@@ -1708,12 +2223,13 @@ router$8.post("/api/v1/mock/status_list", async (req, res) => {
|
|
|
1708
2223
|
});
|
|
1709
2224
|
}
|
|
1710
2225
|
});
|
|
1711
|
-
|
|
2226
|
+
// SignalMockService endpoints
|
|
2227
|
+
router$a.post("/api/v1/mock/signal_last_update/:id", async (req, res) => {
|
|
1712
2228
|
try {
|
|
1713
2229
|
const request = await micro.json(req);
|
|
1714
2230
|
const { requestId, serviceName } = request;
|
|
1715
|
-
const
|
|
1716
|
-
const data = await ioc.
|
|
2231
|
+
const signalId = req.params.id;
|
|
2232
|
+
const data = await ioc.signalMockService.getLastUpdateTimestamp(signalId);
|
|
1717
2233
|
const result = {
|
|
1718
2234
|
data,
|
|
1719
2235
|
status: "ok",
|
|
@@ -1721,14 +2237,14 @@ router$8.post("/api/v1/mock/status_one/:id", async (req, res) => {
|
|
|
1721
2237
|
requestId,
|
|
1722
2238
|
serviceName,
|
|
1723
2239
|
};
|
|
1724
|
-
ioc.loggerService.log("/api/v1/mock/
|
|
2240
|
+
ioc.loggerService.log("/api/v1/mock/signal_last_update/:id ok", {
|
|
1725
2241
|
request,
|
|
1726
2242
|
result: omit(result, "data"),
|
|
1727
2243
|
});
|
|
1728
2244
|
return await micro.send(res, 200, result);
|
|
1729
2245
|
}
|
|
1730
2246
|
catch (error) {
|
|
1731
|
-
ioc.loggerService.log("/api/v1/mock/
|
|
2247
|
+
ioc.loggerService.log("/api/v1/mock/signal_last_update/:id error", {
|
|
1732
2248
|
error: errorData(error),
|
|
1733
2249
|
});
|
|
1734
2250
|
return await micro.send(res, 200, {
|
|
@@ -1737,16 +2253,11 @@ router$8.post("/api/v1/mock/status_one/:id", async (req, res) => {
|
|
|
1737
2253
|
});
|
|
1738
2254
|
}
|
|
1739
2255
|
});
|
|
1740
|
-
|
|
1741
|
-
const router$7 = Router({
|
|
1742
|
-
params: true,
|
|
1743
|
-
});
|
|
1744
|
-
// ExchangeViewService endpoints
|
|
1745
|
-
router$7.post("/api/v1/view/candles_signal", async (req, res) => {
|
|
2256
|
+
router$a.post("/api/v1/mock/signal_pending", async (req, res) => {
|
|
1746
2257
|
try {
|
|
1747
2258
|
const request = await micro.json(req);
|
|
1748
|
-
const {
|
|
1749
|
-
const data = await ioc.
|
|
2259
|
+
const { symbol, requestId, serviceName } = request;
|
|
2260
|
+
const data = await ioc.signalMockService.getPendingSignal(symbol);
|
|
1750
2261
|
const result = {
|
|
1751
2262
|
data,
|
|
1752
2263
|
status: "ok",
|
|
@@ -1754,14 +2265,14 @@ router$7.post("/api/v1/view/candles_signal", async (req, res) => {
|
|
|
1754
2265
|
requestId,
|
|
1755
2266
|
serviceName,
|
|
1756
2267
|
};
|
|
1757
|
-
ioc.loggerService.log("/api/v1/
|
|
2268
|
+
ioc.loggerService.log("/api/v1/mock/signal_pending ok", {
|
|
1758
2269
|
request,
|
|
1759
2270
|
result: omit(result, "data"),
|
|
1760
2271
|
});
|
|
1761
2272
|
return await micro.send(res, 200, result);
|
|
1762
2273
|
}
|
|
1763
2274
|
catch (error) {
|
|
1764
|
-
ioc.loggerService.log("/api/v1/
|
|
2275
|
+
ioc.loggerService.log("/api/v1/mock/signal_pending error", {
|
|
1765
2276
|
error: errorData(error),
|
|
1766
2277
|
});
|
|
1767
2278
|
return await micro.send(res, 200, {
|
|
@@ -1770,16 +2281,12 @@ router$7.post("/api/v1/view/candles_signal", async (req, res) => {
|
|
|
1770
2281
|
});
|
|
1771
2282
|
}
|
|
1772
2283
|
});
|
|
1773
|
-
|
|
2284
|
+
// StatusMockService endpoints
|
|
2285
|
+
router$a.post("/api/v1/mock/status_list", async (req, res) => {
|
|
1774
2286
|
try {
|
|
1775
2287
|
const request = await micro.json(req);
|
|
1776
|
-
const {
|
|
1777
|
-
const data = await ioc.
|
|
1778
|
-
currentTime,
|
|
1779
|
-
interval,
|
|
1780
|
-
symbol,
|
|
1781
|
-
exchangeName,
|
|
1782
|
-
});
|
|
2288
|
+
const { requestId, serviceName } = request;
|
|
2289
|
+
const data = await ioc.statusMockService.getStatusList();
|
|
1783
2290
|
const result = {
|
|
1784
2291
|
data,
|
|
1785
2292
|
status: "ok",
|
|
@@ -1787,14 +2294,14 @@ router$7.post("/api/v1/view/candles_point", async (req, res) => {
|
|
|
1787
2294
|
requestId,
|
|
1788
2295
|
serviceName,
|
|
1789
2296
|
};
|
|
1790
|
-
ioc.loggerService.log("/api/v1/
|
|
2297
|
+
ioc.loggerService.log("/api/v1/mock/status_list ok", {
|
|
1791
2298
|
request,
|
|
1792
2299
|
result: omit(result, "data"),
|
|
1793
2300
|
});
|
|
1794
2301
|
return await micro.send(res, 200, result);
|
|
1795
2302
|
}
|
|
1796
2303
|
catch (error) {
|
|
1797
|
-
ioc.loggerService.log("/api/v1/
|
|
2304
|
+
ioc.loggerService.log("/api/v1/mock/status_list error", {
|
|
1798
2305
|
error: errorData(error),
|
|
1799
2306
|
});
|
|
1800
2307
|
return await micro.send(res, 200, {
|
|
@@ -1803,11 +2310,12 @@ router$7.post("/api/v1/view/candles_point", async (req, res) => {
|
|
|
1803
2310
|
});
|
|
1804
2311
|
}
|
|
1805
2312
|
});
|
|
1806
|
-
router$
|
|
2313
|
+
router$a.post("/api/v1/mock/status_one/:id", async (req, res) => {
|
|
1807
2314
|
try {
|
|
1808
2315
|
const request = await micro.json(req);
|
|
1809
|
-
const {
|
|
1810
|
-
const
|
|
2316
|
+
const { requestId, serviceName } = request;
|
|
2317
|
+
const id = req.params.id;
|
|
2318
|
+
const data = await ioc.statusMockService.getStatusOne(id);
|
|
1811
2319
|
const result = {
|
|
1812
2320
|
data,
|
|
1813
2321
|
status: "ok",
|
|
@@ -1815,14 +2323,14 @@ router$7.post("/api/v1/view/candles_live", async (req, res) => {
|
|
|
1815
2323
|
requestId,
|
|
1816
2324
|
serviceName,
|
|
1817
2325
|
};
|
|
1818
|
-
ioc.loggerService.log("/api/v1/
|
|
2326
|
+
ioc.loggerService.log("/api/v1/mock/status_one/:id ok", {
|
|
1819
2327
|
request,
|
|
1820
2328
|
result: omit(result, "data"),
|
|
1821
2329
|
});
|
|
1822
2330
|
return await micro.send(res, 200, result);
|
|
1823
2331
|
}
|
|
1824
2332
|
catch (error) {
|
|
1825
|
-
ioc.loggerService.log("/api/v1/
|
|
2333
|
+
ioc.loggerService.log("/api/v1/mock/status_one/:id error", {
|
|
1826
2334
|
error: errorData(error),
|
|
1827
2335
|
});
|
|
1828
2336
|
return await micro.send(res, 200, {
|
|
@@ -1831,12 +2339,12 @@ router$7.post("/api/v1/view/candles_live", async (req, res) => {
|
|
|
1831
2339
|
});
|
|
1832
2340
|
}
|
|
1833
2341
|
});
|
|
1834
|
-
//
|
|
1835
|
-
router$
|
|
2342
|
+
// HeatMockService endpoints
|
|
2343
|
+
router$a.post("/api/v1/mock/heat_data", async (req, res) => {
|
|
1836
2344
|
try {
|
|
1837
2345
|
const request = await micro.json(req);
|
|
1838
2346
|
const { requestId, serviceName } = request;
|
|
1839
|
-
const data = await ioc.
|
|
2347
|
+
const data = await ioc.heatMockService.getStrategyHeatData();
|
|
1840
2348
|
const result = {
|
|
1841
2349
|
data,
|
|
1842
2350
|
status: "ok",
|
|
@@ -1844,14 +2352,14 @@ router$7.post("/api/v1/view/notification_list", async (req, res) => {
|
|
|
1844
2352
|
requestId,
|
|
1845
2353
|
serviceName,
|
|
1846
2354
|
};
|
|
1847
|
-
ioc.loggerService.log("/api/v1/
|
|
2355
|
+
ioc.loggerService.log("/api/v1/mock/heat_data ok", {
|
|
1848
2356
|
request,
|
|
1849
2357
|
result: omit(result, "data"),
|
|
1850
2358
|
});
|
|
1851
2359
|
return await micro.send(res, 200, result);
|
|
1852
2360
|
}
|
|
1853
2361
|
catch (error) {
|
|
1854
|
-
ioc.loggerService.log("/api/v1/
|
|
2362
|
+
ioc.loggerService.log("/api/v1/mock/heat_data error", {
|
|
1855
2363
|
error: errorData(error),
|
|
1856
2364
|
});
|
|
1857
2365
|
return await micro.send(res, 200, {
|
|
@@ -1860,12 +2368,11 @@ router$7.post("/api/v1/view/notification_list", async (req, res) => {
|
|
|
1860
2368
|
});
|
|
1861
2369
|
}
|
|
1862
2370
|
});
|
|
1863
|
-
router$
|
|
2371
|
+
router$a.post("/api/v1/mock/heat_report", async (req, res) => {
|
|
1864
2372
|
try {
|
|
1865
2373
|
const request = await micro.json(req);
|
|
1866
2374
|
const { requestId, serviceName } = request;
|
|
1867
|
-
const
|
|
1868
|
-
const data = await ioc.notificationViewService.getOne(id);
|
|
2375
|
+
const data = await ioc.heatMockService.getStrategyHeatReport();
|
|
1869
2376
|
const result = {
|
|
1870
2377
|
data,
|
|
1871
2378
|
status: "ok",
|
|
@@ -1873,14 +2380,14 @@ router$7.post("/api/v1/view/notification_one/:id", async (req, res) => {
|
|
|
1873
2380
|
requestId,
|
|
1874
2381
|
serviceName,
|
|
1875
2382
|
};
|
|
1876
|
-
ioc.loggerService.log("/api/v1/
|
|
2383
|
+
ioc.loggerService.log("/api/v1/mock/heat_report ok", {
|
|
1877
2384
|
request,
|
|
1878
2385
|
result: omit(result, "data"),
|
|
1879
2386
|
});
|
|
1880
2387
|
return await micro.send(res, 200, result);
|
|
1881
2388
|
}
|
|
1882
2389
|
catch (error) {
|
|
1883
|
-
ioc.loggerService.log("/api/v1/
|
|
2390
|
+
ioc.loggerService.log("/api/v1/mock/heat_report error", {
|
|
1884
2391
|
error: errorData(error),
|
|
1885
2392
|
});
|
|
1886
2393
|
return await micro.send(res, 200, {
|
|
@@ -1889,11 +2396,11 @@ router$7.post("/api/v1/view/notification_one/:id", async (req, res) => {
|
|
|
1889
2396
|
});
|
|
1890
2397
|
}
|
|
1891
2398
|
});
|
|
1892
|
-
router$
|
|
2399
|
+
router$a.post("/api/v1/mock/status_info", async (req, res) => {
|
|
1893
2400
|
try {
|
|
1894
2401
|
const request = await micro.json(req);
|
|
1895
|
-
const { requestId, serviceName
|
|
1896
|
-
const data = await ioc.
|
|
2402
|
+
const { requestId, serviceName } = request;
|
|
2403
|
+
const data = await ioc.statusMockService.getStatusInfo();
|
|
1897
2404
|
const result = {
|
|
1898
2405
|
data,
|
|
1899
2406
|
status: "ok",
|
|
@@ -1901,14 +2408,14 @@ router$7.post("/api/v1/view/notification_filter", async (req, res) => {
|
|
|
1901
2408
|
requestId,
|
|
1902
2409
|
serviceName,
|
|
1903
2410
|
};
|
|
1904
|
-
ioc.loggerService.log("/api/v1/
|
|
2411
|
+
ioc.loggerService.log("/api/v1/mock/status_info ok", {
|
|
1905
2412
|
request,
|
|
1906
2413
|
result: omit(result, "data"),
|
|
1907
2414
|
});
|
|
1908
2415
|
return await micro.send(res, 200, result);
|
|
1909
2416
|
}
|
|
1910
2417
|
catch (error) {
|
|
1911
|
-
ioc.loggerService.log("/api/v1/
|
|
2418
|
+
ioc.loggerService.log("/api/v1/mock/status_info error", {
|
|
1912
2419
|
error: errorData(error),
|
|
1913
2420
|
});
|
|
1914
2421
|
return await micro.send(res, 200, {
|
|
@@ -1917,13 +2424,16 @@ router$7.post("/api/v1/view/notification_filter", async (req, res) => {
|
|
|
1917
2424
|
});
|
|
1918
2425
|
}
|
|
1919
2426
|
});
|
|
1920
|
-
|
|
1921
|
-
router$
|
|
2427
|
+
|
|
2428
|
+
const router$9 = Router({
|
|
2429
|
+
params: true,
|
|
2430
|
+
});
|
|
2431
|
+
// ExchangeViewService endpoints
|
|
2432
|
+
router$9.post("/api/v1/view/candles_signal", async (req, res) => {
|
|
1922
2433
|
try {
|
|
1923
2434
|
const request = await micro.json(req);
|
|
1924
|
-
const { requestId, serviceName } = request;
|
|
1925
|
-
const
|
|
1926
|
-
const data = await ioc.storageViewService.findSignalById(signalId);
|
|
2435
|
+
const { signalId, interval, requestId, serviceName } = request;
|
|
2436
|
+
const data = await ioc.exchangeViewService.getSignalCandles(signalId, interval);
|
|
1927
2437
|
const result = {
|
|
1928
2438
|
data,
|
|
1929
2439
|
status: "ok",
|
|
@@ -1931,14 +2441,14 @@ router$7.post("/api/v1/view/storage_one/:id", async (req, res) => {
|
|
|
1931
2441
|
requestId,
|
|
1932
2442
|
serviceName,
|
|
1933
2443
|
};
|
|
1934
|
-
ioc.loggerService.log("/api/v1/view/
|
|
2444
|
+
ioc.loggerService.log("/api/v1/view/candles_signal ok", {
|
|
1935
2445
|
request,
|
|
1936
2446
|
result: omit(result, "data"),
|
|
1937
2447
|
});
|
|
1938
2448
|
return await micro.send(res, 200, result);
|
|
1939
2449
|
}
|
|
1940
2450
|
catch (error) {
|
|
1941
|
-
ioc.loggerService.log("/api/v1/view/
|
|
2451
|
+
ioc.loggerService.log("/api/v1/view/candles_signal error", {
|
|
1942
2452
|
error: errorData(error),
|
|
1943
2453
|
});
|
|
1944
2454
|
return await micro.send(res, 200, {
|
|
@@ -1947,11 +2457,16 @@ router$7.post("/api/v1/view/storage_one/:id", async (req, res) => {
|
|
|
1947
2457
|
});
|
|
1948
2458
|
}
|
|
1949
2459
|
});
|
|
1950
|
-
router$
|
|
2460
|
+
router$9.post("/api/v1/view/candles_point", async (req, res) => {
|
|
1951
2461
|
try {
|
|
1952
2462
|
const request = await micro.json(req);
|
|
1953
|
-
const { requestId, serviceName } = request;
|
|
1954
|
-
const data = await ioc.
|
|
2463
|
+
const { currentTime, interval, requestId, serviceName, symbol, exchangeName } = request;
|
|
2464
|
+
const data = await ioc.exchangeService.getPointCandles({
|
|
2465
|
+
currentTime,
|
|
2466
|
+
interval,
|
|
2467
|
+
symbol,
|
|
2468
|
+
exchangeName,
|
|
2469
|
+
});
|
|
1955
2470
|
const result = {
|
|
1956
2471
|
data,
|
|
1957
2472
|
status: "ok",
|
|
@@ -1959,14 +2474,14 @@ router$7.post("/api/v1/view/storage_list/live", async (req, res) => {
|
|
|
1959
2474
|
requestId,
|
|
1960
2475
|
serviceName,
|
|
1961
2476
|
};
|
|
1962
|
-
ioc.loggerService.log("/api/v1/view/
|
|
2477
|
+
ioc.loggerService.log("/api/v1/view/candles_point ok", {
|
|
1963
2478
|
request,
|
|
1964
2479
|
result: omit(result, "data"),
|
|
1965
2480
|
});
|
|
1966
2481
|
return await micro.send(res, 200, result);
|
|
1967
2482
|
}
|
|
1968
2483
|
catch (error) {
|
|
1969
|
-
ioc.loggerService.log("/api/v1/view/
|
|
2484
|
+
ioc.loggerService.log("/api/v1/view/candles_point error", {
|
|
1970
2485
|
error: errorData(error),
|
|
1971
2486
|
});
|
|
1972
2487
|
return await micro.send(res, 200, {
|
|
@@ -1975,11 +2490,11 @@ router$7.post("/api/v1/view/storage_list/live", async (req, res) => {
|
|
|
1975
2490
|
});
|
|
1976
2491
|
}
|
|
1977
2492
|
});
|
|
1978
|
-
router$
|
|
2493
|
+
router$9.post("/api/v1/view/candles_live", async (req, res) => {
|
|
1979
2494
|
try {
|
|
1980
2495
|
const request = await micro.json(req);
|
|
1981
|
-
const { requestId, serviceName } = request;
|
|
1982
|
-
const data = await ioc.
|
|
2496
|
+
const { signalId, interval, requestId, serviceName } = request;
|
|
2497
|
+
const data = await ioc.exchangeViewService.getLiveCandles(signalId, interval);
|
|
1983
2498
|
const result = {
|
|
1984
2499
|
data,
|
|
1985
2500
|
status: "ok",
|
|
@@ -1987,14 +2502,14 @@ router$7.post("/api/v1/view/storage_list/backtest", async (req, res) => {
|
|
|
1987
2502
|
requestId,
|
|
1988
2503
|
serviceName,
|
|
1989
2504
|
};
|
|
1990
|
-
ioc.loggerService.log("/api/v1/view/
|
|
2505
|
+
ioc.loggerService.log("/api/v1/view/candles_live ok", {
|
|
1991
2506
|
request,
|
|
1992
2507
|
result: omit(result, "data"),
|
|
1993
2508
|
});
|
|
1994
2509
|
return await micro.send(res, 200, result);
|
|
1995
2510
|
}
|
|
1996
2511
|
catch (error) {
|
|
1997
|
-
ioc.loggerService.log("/api/v1/view/
|
|
2512
|
+
ioc.loggerService.log("/api/v1/view/candles_live error", {
|
|
1998
2513
|
error: errorData(error),
|
|
1999
2514
|
});
|
|
2000
2515
|
return await micro.send(res, 200, {
|
|
@@ -2003,11 +2518,211 @@ router$7.post("/api/v1/view/storage_list/backtest", async (req, res) => {
|
|
|
2003
2518
|
});
|
|
2004
2519
|
}
|
|
2005
2520
|
});
|
|
2006
|
-
|
|
2007
|
-
router$7.post("/api/v1/view/log_list", async (req, res) => {
|
|
2521
|
+
router$9.post("/api/v1/view/candles_last", async (req, res) => {
|
|
2008
2522
|
try {
|
|
2009
2523
|
const request = await micro.json(req);
|
|
2010
|
-
const { requestId, serviceName } = request;
|
|
2524
|
+
const { symbol, interval, requestId, serviceName } = request;
|
|
2525
|
+
const data = await ioc.exchangeViewService.getLastCandles(symbol, interval);
|
|
2526
|
+
const result = {
|
|
2527
|
+
data,
|
|
2528
|
+
status: "ok",
|
|
2529
|
+
error: "",
|
|
2530
|
+
requestId,
|
|
2531
|
+
serviceName,
|
|
2532
|
+
};
|
|
2533
|
+
ioc.loggerService.log("/api/v1/view/candles_last ok", {
|
|
2534
|
+
request,
|
|
2535
|
+
result: omit(result, "data"),
|
|
2536
|
+
});
|
|
2537
|
+
return await micro.send(res, 200, result);
|
|
2538
|
+
}
|
|
2539
|
+
catch (error) {
|
|
2540
|
+
ioc.loggerService.log("/api/v1/view/candles_last error", {
|
|
2541
|
+
error: errorData(error),
|
|
2542
|
+
});
|
|
2543
|
+
return await micro.send(res, 200, {
|
|
2544
|
+
status: "error",
|
|
2545
|
+
error: getErrorMessage(error),
|
|
2546
|
+
});
|
|
2547
|
+
}
|
|
2548
|
+
});
|
|
2549
|
+
// NotificationViewService endpoints
|
|
2550
|
+
router$9.post("/api/v1/view/notification_list", async (req, res) => {
|
|
2551
|
+
try {
|
|
2552
|
+
const request = await micro.json(req);
|
|
2553
|
+
const { requestId, serviceName } = request;
|
|
2554
|
+
const data = await ioc.notificationViewService.getList();
|
|
2555
|
+
const result = {
|
|
2556
|
+
data,
|
|
2557
|
+
status: "ok",
|
|
2558
|
+
error: "",
|
|
2559
|
+
requestId,
|
|
2560
|
+
serviceName,
|
|
2561
|
+
};
|
|
2562
|
+
ioc.loggerService.log("/api/v1/view/notification_list ok", {
|
|
2563
|
+
request,
|
|
2564
|
+
result: omit(result, "data"),
|
|
2565
|
+
});
|
|
2566
|
+
return await micro.send(res, 200, result);
|
|
2567
|
+
}
|
|
2568
|
+
catch (error) {
|
|
2569
|
+
ioc.loggerService.log("/api/v1/view/notification_list error", {
|
|
2570
|
+
error: errorData(error),
|
|
2571
|
+
});
|
|
2572
|
+
return await micro.send(res, 200, {
|
|
2573
|
+
status: "error",
|
|
2574
|
+
error: getErrorMessage(error),
|
|
2575
|
+
});
|
|
2576
|
+
}
|
|
2577
|
+
});
|
|
2578
|
+
router$9.post("/api/v1/view/notification_one/:id", async (req, res) => {
|
|
2579
|
+
try {
|
|
2580
|
+
const request = await micro.json(req);
|
|
2581
|
+
const { requestId, serviceName } = request;
|
|
2582
|
+
const id = req.params.id;
|
|
2583
|
+
const data = await ioc.notificationViewService.getOne(id);
|
|
2584
|
+
const result = {
|
|
2585
|
+
data,
|
|
2586
|
+
status: "ok",
|
|
2587
|
+
error: "",
|
|
2588
|
+
requestId,
|
|
2589
|
+
serviceName,
|
|
2590
|
+
};
|
|
2591
|
+
ioc.loggerService.log("/api/v1/view/notification_one/:id ok", {
|
|
2592
|
+
request,
|
|
2593
|
+
result: omit(result, "data"),
|
|
2594
|
+
});
|
|
2595
|
+
return await micro.send(res, 200, result);
|
|
2596
|
+
}
|
|
2597
|
+
catch (error) {
|
|
2598
|
+
ioc.loggerService.log("/api/v1/view/notification_one/:id error", {
|
|
2599
|
+
error: errorData(error),
|
|
2600
|
+
});
|
|
2601
|
+
return await micro.send(res, 200, {
|
|
2602
|
+
status: "error",
|
|
2603
|
+
error: getErrorMessage(error),
|
|
2604
|
+
});
|
|
2605
|
+
}
|
|
2606
|
+
});
|
|
2607
|
+
router$9.post("/api/v1/view/notification_filter", async (req, res) => {
|
|
2608
|
+
try {
|
|
2609
|
+
const request = await micro.json(req);
|
|
2610
|
+
const { requestId, serviceName, filterData, limit, offset } = request;
|
|
2611
|
+
const data = await ioc.notificationViewService.findByFilter(filterData, limit, offset);
|
|
2612
|
+
const result = {
|
|
2613
|
+
data,
|
|
2614
|
+
status: "ok",
|
|
2615
|
+
error: "",
|
|
2616
|
+
requestId,
|
|
2617
|
+
serviceName,
|
|
2618
|
+
};
|
|
2619
|
+
ioc.loggerService.log("/api/v1/view/notification_filter ok", {
|
|
2620
|
+
request,
|
|
2621
|
+
result: omit(result, "data"),
|
|
2622
|
+
});
|
|
2623
|
+
return await micro.send(res, 200, result);
|
|
2624
|
+
}
|
|
2625
|
+
catch (error) {
|
|
2626
|
+
ioc.loggerService.log("/api/v1/view/notification_filter error", {
|
|
2627
|
+
error: errorData(error),
|
|
2628
|
+
});
|
|
2629
|
+
return await micro.send(res, 200, {
|
|
2630
|
+
status: "error",
|
|
2631
|
+
error: getErrorMessage(error),
|
|
2632
|
+
});
|
|
2633
|
+
}
|
|
2634
|
+
});
|
|
2635
|
+
// StorageViewService endpoints
|
|
2636
|
+
router$9.post("/api/v1/view/storage_one/:id", async (req, res) => {
|
|
2637
|
+
try {
|
|
2638
|
+
const request = await micro.json(req);
|
|
2639
|
+
const { requestId, serviceName } = request;
|
|
2640
|
+
const signalId = req.params.id;
|
|
2641
|
+
const data = await ioc.storageViewService.findSignalById(signalId);
|
|
2642
|
+
const result = {
|
|
2643
|
+
data,
|
|
2644
|
+
status: "ok",
|
|
2645
|
+
error: "",
|
|
2646
|
+
requestId,
|
|
2647
|
+
serviceName,
|
|
2648
|
+
};
|
|
2649
|
+
ioc.loggerService.log("/api/v1/view/storage_one/:id ok", {
|
|
2650
|
+
request,
|
|
2651
|
+
result: omit(result, "data"),
|
|
2652
|
+
});
|
|
2653
|
+
return await micro.send(res, 200, result);
|
|
2654
|
+
}
|
|
2655
|
+
catch (error) {
|
|
2656
|
+
ioc.loggerService.log("/api/v1/view/storage_one/:id error", {
|
|
2657
|
+
error: errorData(error),
|
|
2658
|
+
});
|
|
2659
|
+
return await micro.send(res, 200, {
|
|
2660
|
+
status: "error",
|
|
2661
|
+
error: getErrorMessage(error),
|
|
2662
|
+
});
|
|
2663
|
+
}
|
|
2664
|
+
});
|
|
2665
|
+
router$9.post("/api/v1/view/storage_list/live", async (req, res) => {
|
|
2666
|
+
try {
|
|
2667
|
+
const request = await micro.json(req);
|
|
2668
|
+
const { requestId, serviceName } = request;
|
|
2669
|
+
const data = await ioc.storageViewService.listSignalLive();
|
|
2670
|
+
const result = {
|
|
2671
|
+
data,
|
|
2672
|
+
status: "ok",
|
|
2673
|
+
error: "",
|
|
2674
|
+
requestId,
|
|
2675
|
+
serviceName,
|
|
2676
|
+
};
|
|
2677
|
+
ioc.loggerService.log("/api/v1/view/storage_list/live ok", {
|
|
2678
|
+
request,
|
|
2679
|
+
result: omit(result, "data"),
|
|
2680
|
+
});
|
|
2681
|
+
return await micro.send(res, 200, result);
|
|
2682
|
+
}
|
|
2683
|
+
catch (error) {
|
|
2684
|
+
ioc.loggerService.log("/api/v1/view/storage_list/live error", {
|
|
2685
|
+
error: errorData(error),
|
|
2686
|
+
});
|
|
2687
|
+
return await micro.send(res, 200, {
|
|
2688
|
+
status: "error",
|
|
2689
|
+
error: getErrorMessage(error),
|
|
2690
|
+
});
|
|
2691
|
+
}
|
|
2692
|
+
});
|
|
2693
|
+
router$9.post("/api/v1/view/storage_list/backtest", async (req, res) => {
|
|
2694
|
+
try {
|
|
2695
|
+
const request = await micro.json(req);
|
|
2696
|
+
const { requestId, serviceName } = request;
|
|
2697
|
+
const data = await ioc.storageViewService.listSignalBacktest();
|
|
2698
|
+
const result = {
|
|
2699
|
+
data,
|
|
2700
|
+
status: "ok",
|
|
2701
|
+
error: "",
|
|
2702
|
+
requestId,
|
|
2703
|
+
serviceName,
|
|
2704
|
+
};
|
|
2705
|
+
ioc.loggerService.log("/api/v1/view/storage_list/backtest ok", {
|
|
2706
|
+
request,
|
|
2707
|
+
result: omit(result, "data"),
|
|
2708
|
+
});
|
|
2709
|
+
return await micro.send(res, 200, result);
|
|
2710
|
+
}
|
|
2711
|
+
catch (error) {
|
|
2712
|
+
ioc.loggerService.log("/api/v1/view/storage_list/backtest error", {
|
|
2713
|
+
error: errorData(error),
|
|
2714
|
+
});
|
|
2715
|
+
return await micro.send(res, 200, {
|
|
2716
|
+
status: "error",
|
|
2717
|
+
error: getErrorMessage(error),
|
|
2718
|
+
});
|
|
2719
|
+
}
|
|
2720
|
+
});
|
|
2721
|
+
// LogViewService endpoints
|
|
2722
|
+
router$9.post("/api/v1/view/log_list", async (req, res) => {
|
|
2723
|
+
try {
|
|
2724
|
+
const request = await micro.json(req);
|
|
2725
|
+
const { requestId, serviceName } = request;
|
|
2011
2726
|
const data = await ioc.logViewService.getList();
|
|
2012
2727
|
const result = {
|
|
2013
2728
|
data,
|
|
@@ -2032,7 +2747,7 @@ router$7.post("/api/v1/view/log_list", async (req, res) => {
|
|
|
2032
2747
|
});
|
|
2033
2748
|
}
|
|
2034
2749
|
});
|
|
2035
|
-
router$
|
|
2750
|
+
router$9.post("/api/v1/view/log_one/:id", async (req, res) => {
|
|
2036
2751
|
try {
|
|
2037
2752
|
const request = await micro.json(req);
|
|
2038
2753
|
const { requestId, serviceName } = request;
|
|
@@ -2061,7 +2776,7 @@ router$7.post("/api/v1/view/log_one/:id", async (req, res) => {
|
|
|
2061
2776
|
});
|
|
2062
2777
|
}
|
|
2063
2778
|
});
|
|
2064
|
-
router$
|
|
2779
|
+
router$9.post("/api/v1/view/log_filter", async (req, res) => {
|
|
2065
2780
|
try {
|
|
2066
2781
|
const request = await micro.json(req);
|
|
2067
2782
|
const { requestId, serviceName, filterData, limit, offset } = request;
|
|
@@ -2089,8 +2804,66 @@ router$7.post("/api/v1/view/log_filter", async (req, res) => {
|
|
|
2089
2804
|
});
|
|
2090
2805
|
}
|
|
2091
2806
|
});
|
|
2807
|
+
// SignalViewService endpoints
|
|
2808
|
+
router$9.post("/api/v1/view/signal_last_update/:id", async (req, res) => {
|
|
2809
|
+
try {
|
|
2810
|
+
const request = await micro.json(req);
|
|
2811
|
+
const { requestId, serviceName } = request;
|
|
2812
|
+
const signalId = req.params.id;
|
|
2813
|
+
const data = await ioc.signalViewService.getLastUpdateTimestamp(signalId);
|
|
2814
|
+
const result = {
|
|
2815
|
+
data,
|
|
2816
|
+
status: "ok",
|
|
2817
|
+
error: "",
|
|
2818
|
+
requestId,
|
|
2819
|
+
serviceName,
|
|
2820
|
+
};
|
|
2821
|
+
ioc.loggerService.log("/api/v1/view/signal_last_update/:id ok", {
|
|
2822
|
+
request,
|
|
2823
|
+
result: omit(result, "data"),
|
|
2824
|
+
});
|
|
2825
|
+
return await micro.send(res, 200, result);
|
|
2826
|
+
}
|
|
2827
|
+
catch (error) {
|
|
2828
|
+
ioc.loggerService.log("/api/v1/view/signal_last_update/:id error", {
|
|
2829
|
+
error: errorData(error),
|
|
2830
|
+
});
|
|
2831
|
+
return await micro.send(res, 200, {
|
|
2832
|
+
status: "error",
|
|
2833
|
+
error: getErrorMessage(error),
|
|
2834
|
+
});
|
|
2835
|
+
}
|
|
2836
|
+
});
|
|
2837
|
+
router$9.post("/api/v1/view/signal_pending", async (req, res) => {
|
|
2838
|
+
try {
|
|
2839
|
+
const request = await micro.json(req);
|
|
2840
|
+
const { symbol, requestId, serviceName } = request;
|
|
2841
|
+
const data = await ioc.signalViewService.getPendingSignal(symbol);
|
|
2842
|
+
const result = {
|
|
2843
|
+
data,
|
|
2844
|
+
status: "ok",
|
|
2845
|
+
error: "",
|
|
2846
|
+
requestId,
|
|
2847
|
+
serviceName,
|
|
2848
|
+
};
|
|
2849
|
+
ioc.loggerService.log("/api/v1/view/signal_pending ok", {
|
|
2850
|
+
request,
|
|
2851
|
+
result: omit(result, "data"),
|
|
2852
|
+
});
|
|
2853
|
+
return await micro.send(res, 200, result);
|
|
2854
|
+
}
|
|
2855
|
+
catch (error) {
|
|
2856
|
+
ioc.loggerService.log("/api/v1/view/signal_pending error", {
|
|
2857
|
+
error: errorData(error),
|
|
2858
|
+
});
|
|
2859
|
+
return await micro.send(res, 200, {
|
|
2860
|
+
status: "error",
|
|
2861
|
+
error: getErrorMessage(error),
|
|
2862
|
+
});
|
|
2863
|
+
}
|
|
2864
|
+
});
|
|
2092
2865
|
// StatusViewService endpoints
|
|
2093
|
-
router$
|
|
2866
|
+
router$9.post("/api/v1/view/status_list", async (req, res) => {
|
|
2094
2867
|
try {
|
|
2095
2868
|
const request = await micro.json(req);
|
|
2096
2869
|
const { requestId, serviceName } = request;
|
|
@@ -2118,7 +2891,7 @@ router$7.post("/api/v1/view/status_list", async (req, res) => {
|
|
|
2118
2891
|
});
|
|
2119
2892
|
}
|
|
2120
2893
|
});
|
|
2121
|
-
router$
|
|
2894
|
+
router$9.post("/api/v1/view/status_one/:id", async (req, res) => {
|
|
2122
2895
|
try {
|
|
2123
2896
|
const request = await micro.json(req);
|
|
2124
2897
|
const { requestId, serviceName } = request;
|
|
@@ -2147,6 +2920,91 @@ router$7.post("/api/v1/view/status_one/:id", async (req, res) => {
|
|
|
2147
2920
|
});
|
|
2148
2921
|
}
|
|
2149
2922
|
});
|
|
2923
|
+
// HeatViewService endpoints
|
|
2924
|
+
router$9.post("/api/v1/view/heat_data", async (req, res) => {
|
|
2925
|
+
try {
|
|
2926
|
+
const request = await micro.json(req);
|
|
2927
|
+
const { requestId, serviceName } = request;
|
|
2928
|
+
const data = await ioc.heatViewService.getStrategyHeatData();
|
|
2929
|
+
const result = {
|
|
2930
|
+
data,
|
|
2931
|
+
status: "ok",
|
|
2932
|
+
error: "",
|
|
2933
|
+
requestId,
|
|
2934
|
+
serviceName,
|
|
2935
|
+
};
|
|
2936
|
+
ioc.loggerService.log("/api/v1/view/heat_data ok", {
|
|
2937
|
+
request,
|
|
2938
|
+
result: omit(result, "data"),
|
|
2939
|
+
});
|
|
2940
|
+
return await micro.send(res, 200, result);
|
|
2941
|
+
}
|
|
2942
|
+
catch (error) {
|
|
2943
|
+
ioc.loggerService.log("/api/v1/view/heat_data error", {
|
|
2944
|
+
error: errorData(error),
|
|
2945
|
+
});
|
|
2946
|
+
return await micro.send(res, 200, {
|
|
2947
|
+
status: "error",
|
|
2948
|
+
error: getErrorMessage(error),
|
|
2949
|
+
});
|
|
2950
|
+
}
|
|
2951
|
+
});
|
|
2952
|
+
router$9.post("/api/v1/view/heat_report", async (req, res) => {
|
|
2953
|
+
try {
|
|
2954
|
+
const request = await micro.json(req);
|
|
2955
|
+
const { requestId, serviceName } = request;
|
|
2956
|
+
const data = await ioc.heatViewService.getStrategyHeatReport();
|
|
2957
|
+
const result = {
|
|
2958
|
+
data,
|
|
2959
|
+
status: "ok",
|
|
2960
|
+
error: "",
|
|
2961
|
+
requestId,
|
|
2962
|
+
serviceName,
|
|
2963
|
+
};
|
|
2964
|
+
ioc.loggerService.log("/api/v1/view/heat_report ok", {
|
|
2965
|
+
request,
|
|
2966
|
+
result: omit(result, "data"),
|
|
2967
|
+
});
|
|
2968
|
+
return await micro.send(res, 200, result);
|
|
2969
|
+
}
|
|
2970
|
+
catch (error) {
|
|
2971
|
+
ioc.loggerService.log("/api/v1/view/heat_report error", {
|
|
2972
|
+
error: errorData(error),
|
|
2973
|
+
});
|
|
2974
|
+
return await micro.send(res, 200, {
|
|
2975
|
+
status: "error",
|
|
2976
|
+
error: getErrorMessage(error),
|
|
2977
|
+
});
|
|
2978
|
+
}
|
|
2979
|
+
});
|
|
2980
|
+
router$9.post("/api/v1/view/status_info", async (req, res) => {
|
|
2981
|
+
try {
|
|
2982
|
+
const request = await micro.json(req);
|
|
2983
|
+
const { requestId, serviceName } = request;
|
|
2984
|
+
const data = await ioc.statusViewService.getStatusInfo();
|
|
2985
|
+
const result = {
|
|
2986
|
+
data,
|
|
2987
|
+
status: "ok",
|
|
2988
|
+
error: "",
|
|
2989
|
+
requestId,
|
|
2990
|
+
serviceName,
|
|
2991
|
+
};
|
|
2992
|
+
ioc.loggerService.log("/api/v1/view/status_info ok", {
|
|
2993
|
+
request,
|
|
2994
|
+
result: omit(result, "data"),
|
|
2995
|
+
});
|
|
2996
|
+
return await micro.send(res, 200, result);
|
|
2997
|
+
}
|
|
2998
|
+
catch (error) {
|
|
2999
|
+
ioc.loggerService.log("/api/v1/view/status_info error", {
|
|
3000
|
+
error: errorData(error),
|
|
3001
|
+
});
|
|
3002
|
+
return await micro.send(res, 200, {
|
|
3003
|
+
status: "error",
|
|
3004
|
+
error: getErrorMessage(error),
|
|
3005
|
+
});
|
|
3006
|
+
}
|
|
3007
|
+
});
|
|
2150
3008
|
|
|
2151
3009
|
const require$1 = createRequire(import.meta.url);
|
|
2152
3010
|
function getModulesPath() {
|
|
@@ -2155,7 +3013,7 @@ function getModulesPath() {
|
|
|
2155
3013
|
return join(basePath, "../../../");
|
|
2156
3014
|
}
|
|
2157
3015
|
|
|
2158
|
-
const router$
|
|
3016
|
+
const router$8 = Router({
|
|
2159
3017
|
params: true,
|
|
2160
3018
|
});
|
|
2161
3019
|
// getModulesPath
|
|
@@ -2172,7 +3030,7 @@ const ASSET_32 = CC_ENABLE_MOCK
|
|
|
2172
3030
|
const cache128 = new Map();
|
|
2173
3031
|
const cache32 = new Map();
|
|
2174
3032
|
const cacheSvg = new Map();
|
|
2175
|
-
router$
|
|
3033
|
+
router$8.get("/icon/128/:filename", async (req, res) => {
|
|
2176
3034
|
const filename = req.params.filename;
|
|
2177
3035
|
// Check cache first
|
|
2178
3036
|
if (cache128.has(filename)) {
|
|
@@ -2188,7 +3046,7 @@ router$6.get("/icon/128/:filename", async (req, res) => {
|
|
|
2188
3046
|
}
|
|
2189
3047
|
return await micro.send(res, 404, "File not found (128)");
|
|
2190
3048
|
});
|
|
2191
|
-
router$
|
|
3049
|
+
router$8.get("/icon/32/:filename", async (req, res) => {
|
|
2192
3050
|
const filename = req.params.filename;
|
|
2193
3051
|
// Check cache first
|
|
2194
3052
|
if (cache32.has(filename)) {
|
|
@@ -2204,7 +3062,7 @@ router$6.get("/icon/32/:filename", async (req, res) => {
|
|
|
2204
3062
|
}
|
|
2205
3063
|
return await micro.send(res, 404, "File not found (32)");
|
|
2206
3064
|
});
|
|
2207
|
-
router$
|
|
3065
|
+
router$8.get("/icon/svg/:filename", async (req, res) => {
|
|
2208
3066
|
const filename = req.params.filename;
|
|
2209
3067
|
// Check cache first
|
|
2210
3068
|
if (cacheSvg.has(filename)) {
|
|
@@ -2220,7 +3078,7 @@ router$6.get("/icon/svg/:filename", async (req, res) => {
|
|
|
2220
3078
|
}
|
|
2221
3079
|
return await micro.send(res, 404, "File not found (svg)");
|
|
2222
3080
|
});
|
|
2223
|
-
router$
|
|
3081
|
+
router$8.get("/icon/:filename", async (req, res) => {
|
|
2224
3082
|
const filename = req.params.filename;
|
|
2225
3083
|
// Check cache first
|
|
2226
3084
|
if (cache32.has(filename)) {
|
|
@@ -2237,10 +3095,10 @@ router$6.get("/icon/:filename", async (req, res) => {
|
|
|
2237
3095
|
return await micro.send(res, 404, "File not found (root)");
|
|
2238
3096
|
});
|
|
2239
3097
|
|
|
2240
|
-
const router$
|
|
3098
|
+
const router$7 = Router({
|
|
2241
3099
|
params: true,
|
|
2242
3100
|
});
|
|
2243
|
-
router$
|
|
3101
|
+
router$7.post("/api/v1/dict/symbol/list", async (req, res) => {
|
|
2244
3102
|
try {
|
|
2245
3103
|
const request = await micro.json(req);
|
|
2246
3104
|
const { requestId, serviceName } = request;
|
|
@@ -2268,7 +3126,7 @@ router$5.post("/api/v1/dict/symbol/list", async (req, res) => {
|
|
|
2268
3126
|
});
|
|
2269
3127
|
}
|
|
2270
3128
|
});
|
|
2271
|
-
router$
|
|
3129
|
+
router$7.post("/api/v1/dict/symbol/map", async (req, res) => {
|
|
2272
3130
|
try {
|
|
2273
3131
|
const request = await micro.json(req);
|
|
2274
3132
|
const { requestId, serviceName } = request;
|
|
@@ -2296,7 +3154,7 @@ router$5.post("/api/v1/dict/symbol/map", async (req, res) => {
|
|
|
2296
3154
|
});
|
|
2297
3155
|
}
|
|
2298
3156
|
});
|
|
2299
|
-
router$
|
|
3157
|
+
router$7.post("/api/v1/dict/symbol/one", async (req, res) => {
|
|
2300
3158
|
try {
|
|
2301
3159
|
const request = await micro.json(req);
|
|
2302
3160
|
const { requestId, serviceName, id } = request;
|
|
@@ -2325,10 +3183,38 @@ router$5.post("/api/v1/dict/symbol/one", async (req, res) => {
|
|
|
2325
3183
|
}
|
|
2326
3184
|
});
|
|
2327
3185
|
|
|
2328
|
-
const router$
|
|
3186
|
+
const router$6 = Router({
|
|
2329
3187
|
params: true,
|
|
2330
3188
|
});
|
|
2331
|
-
router$
|
|
3189
|
+
router$6.post("/api/v1/markdown_mock/strategy_data", async (req, res) => {
|
|
3190
|
+
try {
|
|
3191
|
+
const request = await micro.json(req);
|
|
3192
|
+
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
3193
|
+
const data = await ioc.markdownMockService.getStrategyData(symbol, strategyName, exchangeName, frameName);
|
|
3194
|
+
const result = { data, status: "ok", error: "", requestId, serviceName };
|
|
3195
|
+
ioc.loggerService.log("/api/v1/markdown_mock/strategy_data ok", { request, result: omit(result, "data") });
|
|
3196
|
+
return await micro.send(res, 200, result);
|
|
3197
|
+
}
|
|
3198
|
+
catch (error) {
|
|
3199
|
+
ioc.loggerService.log("/api/v1/markdown_mock/strategy_data error", { error: errorData(error) });
|
|
3200
|
+
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
3201
|
+
}
|
|
3202
|
+
});
|
|
3203
|
+
router$6.post("/api/v1/markdown_mock/strategy_report", async (req, res) => {
|
|
3204
|
+
try {
|
|
3205
|
+
const request = await micro.json(req);
|
|
3206
|
+
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
3207
|
+
const data = await ioc.markdownMockService.getStrategyReport(symbol, strategyName, exchangeName, frameName);
|
|
3208
|
+
const result = { data, status: "ok", error: "", requestId, serviceName };
|
|
3209
|
+
ioc.loggerService.log("/api/v1/markdown_mock/strategy_report ok", { request, result: omit(result, "data") });
|
|
3210
|
+
return await micro.send(res, 200, result);
|
|
3211
|
+
}
|
|
3212
|
+
catch (error) {
|
|
3213
|
+
ioc.loggerService.log("/api/v1/markdown_mock/strategy_report error", { error: errorData(error) });
|
|
3214
|
+
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
3215
|
+
}
|
|
3216
|
+
});
|
|
3217
|
+
router$6.post("/api/v1/markdown_mock/backtest_data", async (req, res) => {
|
|
2332
3218
|
try {
|
|
2333
3219
|
const request = await micro.json(req);
|
|
2334
3220
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2342,7 +3228,7 @@ router$4.post("/api/v1/markdown_mock/backtest_data", async (req, res) => {
|
|
|
2342
3228
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2343
3229
|
}
|
|
2344
3230
|
});
|
|
2345
|
-
router$
|
|
3231
|
+
router$6.post("/api/v1/markdown_mock/backtest_report", async (req, res) => {
|
|
2346
3232
|
try {
|
|
2347
3233
|
const request = await micro.json(req);
|
|
2348
3234
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2356,7 +3242,7 @@ router$4.post("/api/v1/markdown_mock/backtest_report", async (req, res) => {
|
|
|
2356
3242
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2357
3243
|
}
|
|
2358
3244
|
});
|
|
2359
|
-
router$
|
|
3245
|
+
router$6.post("/api/v1/markdown_mock/live_data", async (req, res) => {
|
|
2360
3246
|
try {
|
|
2361
3247
|
const request = await micro.json(req);
|
|
2362
3248
|
const { requestId, serviceName, symbol, strategyName, exchangeName } = request;
|
|
@@ -2370,7 +3256,7 @@ router$4.post("/api/v1/markdown_mock/live_data", async (req, res) => {
|
|
|
2370
3256
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2371
3257
|
}
|
|
2372
3258
|
});
|
|
2373
|
-
router$
|
|
3259
|
+
router$6.post("/api/v1/markdown_mock/live_report", async (req, res) => {
|
|
2374
3260
|
try {
|
|
2375
3261
|
const request = await micro.json(req);
|
|
2376
3262
|
const { requestId, serviceName, symbol, strategyName, exchangeName } = request;
|
|
@@ -2384,7 +3270,7 @@ router$4.post("/api/v1/markdown_mock/live_report", async (req, res) => {
|
|
|
2384
3270
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2385
3271
|
}
|
|
2386
3272
|
});
|
|
2387
|
-
router$
|
|
3273
|
+
router$6.post("/api/v1/markdown_mock/breakeven_data", async (req, res) => {
|
|
2388
3274
|
try {
|
|
2389
3275
|
const request = await micro.json(req);
|
|
2390
3276
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2398,7 +3284,7 @@ router$4.post("/api/v1/markdown_mock/breakeven_data", async (req, res) => {
|
|
|
2398
3284
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2399
3285
|
}
|
|
2400
3286
|
});
|
|
2401
|
-
router$
|
|
3287
|
+
router$6.post("/api/v1/markdown_mock/breakeven_report", async (req, res) => {
|
|
2402
3288
|
try {
|
|
2403
3289
|
const request = await micro.json(req);
|
|
2404
3290
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2412,7 +3298,7 @@ router$4.post("/api/v1/markdown_mock/breakeven_report", async (req, res) => {
|
|
|
2412
3298
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2413
3299
|
}
|
|
2414
3300
|
});
|
|
2415
|
-
router$
|
|
3301
|
+
router$6.post("/api/v1/markdown_mock/risk_data", async (req, res) => {
|
|
2416
3302
|
try {
|
|
2417
3303
|
const request = await micro.json(req);
|
|
2418
3304
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2426,7 +3312,7 @@ router$4.post("/api/v1/markdown_mock/risk_data", async (req, res) => {
|
|
|
2426
3312
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2427
3313
|
}
|
|
2428
3314
|
});
|
|
2429
|
-
router$
|
|
3315
|
+
router$6.post("/api/v1/markdown_mock/risk_report", async (req, res) => {
|
|
2430
3316
|
try {
|
|
2431
3317
|
const request = await micro.json(req);
|
|
2432
3318
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2440,7 +3326,7 @@ router$4.post("/api/v1/markdown_mock/risk_report", async (req, res) => {
|
|
|
2440
3326
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2441
3327
|
}
|
|
2442
3328
|
});
|
|
2443
|
-
router$
|
|
3329
|
+
router$6.post("/api/v1/markdown_mock/partial_data", async (req, res) => {
|
|
2444
3330
|
try {
|
|
2445
3331
|
const request = await micro.json(req);
|
|
2446
3332
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2454,7 +3340,7 @@ router$4.post("/api/v1/markdown_mock/partial_data", async (req, res) => {
|
|
|
2454
3340
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2455
3341
|
}
|
|
2456
3342
|
});
|
|
2457
|
-
router$
|
|
3343
|
+
router$6.post("/api/v1/markdown_mock/partial_report", async (req, res) => {
|
|
2458
3344
|
try {
|
|
2459
3345
|
const request = await micro.json(req);
|
|
2460
3346
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2468,7 +3354,7 @@ router$4.post("/api/v1/markdown_mock/partial_report", async (req, res) => {
|
|
|
2468
3354
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2469
3355
|
}
|
|
2470
3356
|
});
|
|
2471
|
-
router$
|
|
3357
|
+
router$6.post("/api/v1/markdown_mock/highest_profit_data", async (req, res) => {
|
|
2472
3358
|
try {
|
|
2473
3359
|
const request = await micro.json(req);
|
|
2474
3360
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2482,7 +3368,7 @@ router$4.post("/api/v1/markdown_mock/highest_profit_data", async (req, res) => {
|
|
|
2482
3368
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2483
3369
|
}
|
|
2484
3370
|
});
|
|
2485
|
-
router$
|
|
3371
|
+
router$6.post("/api/v1/markdown_mock/highest_profit_report", async (req, res) => {
|
|
2486
3372
|
try {
|
|
2487
3373
|
const request = await micro.json(req);
|
|
2488
3374
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2496,7 +3382,7 @@ router$4.post("/api/v1/markdown_mock/highest_profit_report", async (req, res) =>
|
|
|
2496
3382
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2497
3383
|
}
|
|
2498
3384
|
});
|
|
2499
|
-
router$
|
|
3385
|
+
router$6.post("/api/v1/markdown_mock/schedule_data", async (req, res) => {
|
|
2500
3386
|
try {
|
|
2501
3387
|
const request = await micro.json(req);
|
|
2502
3388
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2510,7 +3396,7 @@ router$4.post("/api/v1/markdown_mock/schedule_data", async (req, res) => {
|
|
|
2510
3396
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2511
3397
|
}
|
|
2512
3398
|
});
|
|
2513
|
-
router$
|
|
3399
|
+
router$6.post("/api/v1/markdown_mock/schedule_report", async (req, res) => {
|
|
2514
3400
|
try {
|
|
2515
3401
|
const request = await micro.json(req);
|
|
2516
3402
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2524,7 +3410,7 @@ router$4.post("/api/v1/markdown_mock/schedule_report", async (req, res) => {
|
|
|
2524
3410
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2525
3411
|
}
|
|
2526
3412
|
});
|
|
2527
|
-
router$
|
|
3413
|
+
router$6.post("/api/v1/markdown_mock/performance_data", async (req, res) => {
|
|
2528
3414
|
try {
|
|
2529
3415
|
const request = await micro.json(req);
|
|
2530
3416
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2538,7 +3424,7 @@ router$4.post("/api/v1/markdown_mock/performance_data", async (req, res) => {
|
|
|
2538
3424
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2539
3425
|
}
|
|
2540
3426
|
});
|
|
2541
|
-
router$
|
|
3427
|
+
router$6.post("/api/v1/markdown_mock/performance_report", async (req, res) => {
|
|
2542
3428
|
try {
|
|
2543
3429
|
const request = await micro.json(req);
|
|
2544
3430
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2552,7 +3438,7 @@ router$4.post("/api/v1/markdown_mock/performance_report", async (req, res) => {
|
|
|
2552
3438
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2553
3439
|
}
|
|
2554
3440
|
});
|
|
2555
|
-
router$
|
|
3441
|
+
router$6.post("/api/v1/markdown_mock/sync_data", async (req, res) => {
|
|
2556
3442
|
try {
|
|
2557
3443
|
const request = await micro.json(req);
|
|
2558
3444
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2566,7 +3452,7 @@ router$4.post("/api/v1/markdown_mock/sync_data", async (req, res) => {
|
|
|
2566
3452
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2567
3453
|
}
|
|
2568
3454
|
});
|
|
2569
|
-
router$
|
|
3455
|
+
router$6.post("/api/v1/markdown_mock/sync_report", async (req, res) => {
|
|
2570
3456
|
try {
|
|
2571
3457
|
const request = await micro.json(req);
|
|
2572
3458
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2580,7 +3466,7 @@ router$4.post("/api/v1/markdown_mock/sync_report", async (req, res) => {
|
|
|
2580
3466
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2581
3467
|
}
|
|
2582
3468
|
});
|
|
2583
|
-
router$
|
|
3469
|
+
router$6.post("/api/v1/markdown_mock/heat_data", async (req, res) => {
|
|
2584
3470
|
try {
|
|
2585
3471
|
const request = await micro.json(req);
|
|
2586
3472
|
const { requestId, serviceName, strategyName, exchangeName, frameName } = request;
|
|
@@ -2594,7 +3480,7 @@ router$4.post("/api/v1/markdown_mock/heat_data", async (req, res) => {
|
|
|
2594
3480
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2595
3481
|
}
|
|
2596
3482
|
});
|
|
2597
|
-
router$
|
|
3483
|
+
router$6.post("/api/v1/markdown_mock/heat_report", async (req, res) => {
|
|
2598
3484
|
try {
|
|
2599
3485
|
const request = await micro.json(req);
|
|
2600
3486
|
const { requestId, serviceName, strategyName, exchangeName, frameName } = request;
|
|
@@ -2608,7 +3494,7 @@ router$4.post("/api/v1/markdown_mock/heat_report", async (req, res) => {
|
|
|
2608
3494
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2609
3495
|
}
|
|
2610
3496
|
});
|
|
2611
|
-
router$
|
|
3497
|
+
router$6.post("/api/v1/markdown_mock/walker_data", async (req, res) => {
|
|
2612
3498
|
try {
|
|
2613
3499
|
const request = await micro.json(req);
|
|
2614
3500
|
const { requestId, serviceName, symbol, walkerName } = request;
|
|
@@ -2622,7 +3508,7 @@ router$4.post("/api/v1/markdown_mock/walker_data", async (req, res) => {
|
|
|
2622
3508
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2623
3509
|
}
|
|
2624
3510
|
});
|
|
2625
|
-
router$
|
|
3511
|
+
router$6.post("/api/v1/markdown_mock/walker_report", async (req, res) => {
|
|
2626
3512
|
try {
|
|
2627
3513
|
const request = await micro.json(req);
|
|
2628
3514
|
const { requestId, serviceName, symbol, walkerName } = request;
|
|
@@ -2637,10 +3523,38 @@ router$4.post("/api/v1/markdown_mock/walker_report", async (req, res) => {
|
|
|
2637
3523
|
}
|
|
2638
3524
|
});
|
|
2639
3525
|
|
|
2640
|
-
const router$
|
|
3526
|
+
const router$5 = Router({
|
|
2641
3527
|
params: true,
|
|
2642
3528
|
});
|
|
2643
|
-
router$
|
|
3529
|
+
router$5.post("/api/v1/markdown_view/strategy_data", async (req, res) => {
|
|
3530
|
+
try {
|
|
3531
|
+
const request = await micro.json(req);
|
|
3532
|
+
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
3533
|
+
const data = await ioc.markdownViewService.getStrategyData(symbol, strategyName, exchangeName, frameName, backtest);
|
|
3534
|
+
const result = { data, status: "ok", error: "", requestId, serviceName };
|
|
3535
|
+
ioc.loggerService.log("/api/v1/markdown_view/strategy_data ok", { request, result: omit(result, "data") });
|
|
3536
|
+
return await micro.send(res, 200, result);
|
|
3537
|
+
}
|
|
3538
|
+
catch (error) {
|
|
3539
|
+
ioc.loggerService.log("/api/v1/markdown_view/strategy_data error", { error: errorData(error) });
|
|
3540
|
+
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
3541
|
+
}
|
|
3542
|
+
});
|
|
3543
|
+
router$5.post("/api/v1/markdown_view/strategy_report", async (req, res) => {
|
|
3544
|
+
try {
|
|
3545
|
+
const request = await micro.json(req);
|
|
3546
|
+
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
3547
|
+
const data = await ioc.markdownViewService.getStrategyReport(symbol, strategyName, exchangeName, frameName, backtest);
|
|
3548
|
+
const result = { data, status: "ok", error: "", requestId, serviceName };
|
|
3549
|
+
ioc.loggerService.log("/api/v1/markdown_view/strategy_report ok", { request, result: omit(result, "data") });
|
|
3550
|
+
return await micro.send(res, 200, result);
|
|
3551
|
+
}
|
|
3552
|
+
catch (error) {
|
|
3553
|
+
ioc.loggerService.log("/api/v1/markdown_view/strategy_report error", { error: errorData(error) });
|
|
3554
|
+
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
3555
|
+
}
|
|
3556
|
+
});
|
|
3557
|
+
router$5.post("/api/v1/markdown_view/backtest_data", async (req, res) => {
|
|
2644
3558
|
try {
|
|
2645
3559
|
const request = await micro.json(req);
|
|
2646
3560
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2654,7 +3568,7 @@ router$3.post("/api/v1/markdown_view/backtest_data", async (req, res) => {
|
|
|
2654
3568
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2655
3569
|
}
|
|
2656
3570
|
});
|
|
2657
|
-
router$
|
|
3571
|
+
router$5.post("/api/v1/markdown_view/backtest_report", async (req, res) => {
|
|
2658
3572
|
try {
|
|
2659
3573
|
const request = await micro.json(req);
|
|
2660
3574
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
|
|
@@ -2668,7 +3582,7 @@ router$3.post("/api/v1/markdown_view/backtest_report", async (req, res) => {
|
|
|
2668
3582
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2669
3583
|
}
|
|
2670
3584
|
});
|
|
2671
|
-
router$
|
|
3585
|
+
router$5.post("/api/v1/markdown_view/live_data", async (req, res) => {
|
|
2672
3586
|
try {
|
|
2673
3587
|
const request = await micro.json(req);
|
|
2674
3588
|
const { requestId, serviceName, symbol, strategyName, exchangeName } = request;
|
|
@@ -2682,7 +3596,7 @@ router$3.post("/api/v1/markdown_view/live_data", async (req, res) => {
|
|
|
2682
3596
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2683
3597
|
}
|
|
2684
3598
|
});
|
|
2685
|
-
router$
|
|
3599
|
+
router$5.post("/api/v1/markdown_view/live_report", async (req, res) => {
|
|
2686
3600
|
try {
|
|
2687
3601
|
const request = await micro.json(req);
|
|
2688
3602
|
const { requestId, serviceName, symbol, strategyName, exchangeName } = request;
|
|
@@ -2696,7 +3610,7 @@ router$3.post("/api/v1/markdown_view/live_report", async (req, res) => {
|
|
|
2696
3610
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2697
3611
|
}
|
|
2698
3612
|
});
|
|
2699
|
-
router$
|
|
3613
|
+
router$5.post("/api/v1/markdown_view/breakeven_data", async (req, res) => {
|
|
2700
3614
|
try {
|
|
2701
3615
|
const request = await micro.json(req);
|
|
2702
3616
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2710,7 +3624,7 @@ router$3.post("/api/v1/markdown_view/breakeven_data", async (req, res) => {
|
|
|
2710
3624
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2711
3625
|
}
|
|
2712
3626
|
});
|
|
2713
|
-
router$
|
|
3627
|
+
router$5.post("/api/v1/markdown_view/breakeven_report", async (req, res) => {
|
|
2714
3628
|
try {
|
|
2715
3629
|
const request = await micro.json(req);
|
|
2716
3630
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2724,7 +3638,7 @@ router$3.post("/api/v1/markdown_view/breakeven_report", async (req, res) => {
|
|
|
2724
3638
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2725
3639
|
}
|
|
2726
3640
|
});
|
|
2727
|
-
router$
|
|
3641
|
+
router$5.post("/api/v1/markdown_view/risk_data", async (req, res) => {
|
|
2728
3642
|
try {
|
|
2729
3643
|
const request = await micro.json(req);
|
|
2730
3644
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2738,7 +3652,7 @@ router$3.post("/api/v1/markdown_view/risk_data", async (req, res) => {
|
|
|
2738
3652
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2739
3653
|
}
|
|
2740
3654
|
});
|
|
2741
|
-
router$
|
|
3655
|
+
router$5.post("/api/v1/markdown_view/risk_report", async (req, res) => {
|
|
2742
3656
|
try {
|
|
2743
3657
|
const request = await micro.json(req);
|
|
2744
3658
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2752,7 +3666,7 @@ router$3.post("/api/v1/markdown_view/risk_report", async (req, res) => {
|
|
|
2752
3666
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2753
3667
|
}
|
|
2754
3668
|
});
|
|
2755
|
-
router$
|
|
3669
|
+
router$5.post("/api/v1/markdown_view/partial_data", async (req, res) => {
|
|
2756
3670
|
try {
|
|
2757
3671
|
const request = await micro.json(req);
|
|
2758
3672
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2766,7 +3680,7 @@ router$3.post("/api/v1/markdown_view/partial_data", async (req, res) => {
|
|
|
2766
3680
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2767
3681
|
}
|
|
2768
3682
|
});
|
|
2769
|
-
router$
|
|
3683
|
+
router$5.post("/api/v1/markdown_view/partial_report", async (req, res) => {
|
|
2770
3684
|
try {
|
|
2771
3685
|
const request = await micro.json(req);
|
|
2772
3686
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2780,7 +3694,7 @@ router$3.post("/api/v1/markdown_view/partial_report", async (req, res) => {
|
|
|
2780
3694
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2781
3695
|
}
|
|
2782
3696
|
});
|
|
2783
|
-
router$
|
|
3697
|
+
router$5.post("/api/v1/markdown_view/highest_profit_data", async (req, res) => {
|
|
2784
3698
|
try {
|
|
2785
3699
|
const request = await micro.json(req);
|
|
2786
3700
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2794,7 +3708,7 @@ router$3.post("/api/v1/markdown_view/highest_profit_data", async (req, res) => {
|
|
|
2794
3708
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2795
3709
|
}
|
|
2796
3710
|
});
|
|
2797
|
-
router$
|
|
3711
|
+
router$5.post("/api/v1/markdown_view/highest_profit_report", async (req, res) => {
|
|
2798
3712
|
try {
|
|
2799
3713
|
const request = await micro.json(req);
|
|
2800
3714
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2808,7 +3722,7 @@ router$3.post("/api/v1/markdown_view/highest_profit_report", async (req, res) =>
|
|
|
2808
3722
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2809
3723
|
}
|
|
2810
3724
|
});
|
|
2811
|
-
router$
|
|
3725
|
+
router$5.post("/api/v1/markdown_view/schedule_data", async (req, res) => {
|
|
2812
3726
|
try {
|
|
2813
3727
|
const request = await micro.json(req);
|
|
2814
3728
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2822,7 +3736,7 @@ router$3.post("/api/v1/markdown_view/schedule_data", async (req, res) => {
|
|
|
2822
3736
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2823
3737
|
}
|
|
2824
3738
|
});
|
|
2825
|
-
router$
|
|
3739
|
+
router$5.post("/api/v1/markdown_view/schedule_report", async (req, res) => {
|
|
2826
3740
|
try {
|
|
2827
3741
|
const request = await micro.json(req);
|
|
2828
3742
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2836,7 +3750,7 @@ router$3.post("/api/v1/markdown_view/schedule_report", async (req, res) => {
|
|
|
2836
3750
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2837
3751
|
}
|
|
2838
3752
|
});
|
|
2839
|
-
router$
|
|
3753
|
+
router$5.post("/api/v1/markdown_view/performance_data", async (req, res) => {
|
|
2840
3754
|
try {
|
|
2841
3755
|
const request = await micro.json(req);
|
|
2842
3756
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2850,7 +3764,7 @@ router$3.post("/api/v1/markdown_view/performance_data", async (req, res) => {
|
|
|
2850
3764
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2851
3765
|
}
|
|
2852
3766
|
});
|
|
2853
|
-
router$
|
|
3767
|
+
router$5.post("/api/v1/markdown_view/performance_report", async (req, res) => {
|
|
2854
3768
|
try {
|
|
2855
3769
|
const request = await micro.json(req);
|
|
2856
3770
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2864,7 +3778,7 @@ router$3.post("/api/v1/markdown_view/performance_report", async (req, res) => {
|
|
|
2864
3778
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2865
3779
|
}
|
|
2866
3780
|
});
|
|
2867
|
-
router$
|
|
3781
|
+
router$5.post("/api/v1/markdown_view/sync_data", async (req, res) => {
|
|
2868
3782
|
try {
|
|
2869
3783
|
const request = await micro.json(req);
|
|
2870
3784
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2878,7 +3792,7 @@ router$3.post("/api/v1/markdown_view/sync_data", async (req, res) => {
|
|
|
2878
3792
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2879
3793
|
}
|
|
2880
3794
|
});
|
|
2881
|
-
router$
|
|
3795
|
+
router$5.post("/api/v1/markdown_view/sync_report", async (req, res) => {
|
|
2882
3796
|
try {
|
|
2883
3797
|
const request = await micro.json(req);
|
|
2884
3798
|
const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2892,7 +3806,7 @@ router$3.post("/api/v1/markdown_view/sync_report", async (req, res) => {
|
|
|
2892
3806
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2893
3807
|
}
|
|
2894
3808
|
});
|
|
2895
|
-
router$
|
|
3809
|
+
router$5.post("/api/v1/markdown_view/heat_data", async (req, res) => {
|
|
2896
3810
|
try {
|
|
2897
3811
|
const request = await micro.json(req);
|
|
2898
3812
|
const { requestId, serviceName, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2906,7 +3820,7 @@ router$3.post("/api/v1/markdown_view/heat_data", async (req, res) => {
|
|
|
2906
3820
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2907
3821
|
}
|
|
2908
3822
|
});
|
|
2909
|
-
router$
|
|
3823
|
+
router$5.post("/api/v1/markdown_view/heat_report", async (req, res) => {
|
|
2910
3824
|
try {
|
|
2911
3825
|
const request = await micro.json(req);
|
|
2912
3826
|
const { requestId, serviceName, strategyName, exchangeName, frameName, backtest } = request;
|
|
@@ -2920,7 +3834,7 @@ router$3.post("/api/v1/markdown_view/heat_report", async (req, res) => {
|
|
|
2920
3834
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2921
3835
|
}
|
|
2922
3836
|
});
|
|
2923
|
-
router$
|
|
3837
|
+
router$5.post("/api/v1/markdown_view/walker_data", async (req, res) => {
|
|
2924
3838
|
try {
|
|
2925
3839
|
const request = await micro.json(req);
|
|
2926
3840
|
const { requestId, serviceName, symbol, walkerName } = request;
|
|
@@ -2934,7 +3848,7 @@ router$3.post("/api/v1/markdown_view/walker_data", async (req, res) => {
|
|
|
2934
3848
|
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
2935
3849
|
}
|
|
2936
3850
|
});
|
|
2937
|
-
router$
|
|
3851
|
+
router$5.post("/api/v1/markdown_view/walker_report", async (req, res) => {
|
|
2938
3852
|
try {
|
|
2939
3853
|
const request = await micro.json(req);
|
|
2940
3854
|
const { requestId, serviceName, symbol, walkerName } = request;
|
|
@@ -2949,6 +3863,70 @@ router$3.post("/api/v1/markdown_view/walker_report", async (req, res) => {
|
|
|
2949
3863
|
}
|
|
2950
3864
|
});
|
|
2951
3865
|
|
|
3866
|
+
const router$4 = Router({
|
|
3867
|
+
params: true,
|
|
3868
|
+
});
|
|
3869
|
+
router$4.post("/api/v1/explorer_mock/tree", async (req, res) => {
|
|
3870
|
+
try {
|
|
3871
|
+
const request = await micro.json(req);
|
|
3872
|
+
const { requestId, serviceName } = request;
|
|
3873
|
+
const data = await ioc.explorerMockService.getTree();
|
|
3874
|
+
const result = { data, status: "ok", error: "", requestId, serviceName };
|
|
3875
|
+
ioc.loggerService.log("/api/v1/explorer_mock/tree ok", { request, result: omit(result, "data") });
|
|
3876
|
+
return await micro.send(res, 200, result);
|
|
3877
|
+
}
|
|
3878
|
+
catch (error) {
|
|
3879
|
+
ioc.loggerService.log("/api/v1/explorer_mock/tree error", { error: errorData(error) });
|
|
3880
|
+
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
3881
|
+
}
|
|
3882
|
+
});
|
|
3883
|
+
router$4.post("/api/v1/explorer_mock/node", async (req, res) => {
|
|
3884
|
+
try {
|
|
3885
|
+
const request = await micro.json(req);
|
|
3886
|
+
const { requestId, serviceName, path } = request;
|
|
3887
|
+
const data = await ioc.explorerMockService.getNode(path);
|
|
3888
|
+
const result = { data, status: "ok", error: "", requestId, serviceName };
|
|
3889
|
+
ioc.loggerService.log("/api/v1/explorer_mock/node ok", { request, result: omit(result, "data") });
|
|
3890
|
+
return await micro.send(res, 200, result);
|
|
3891
|
+
}
|
|
3892
|
+
catch (error) {
|
|
3893
|
+
ioc.loggerService.log("/api/v1/explorer_mock/node error", { error: errorData(error) });
|
|
3894
|
+
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
3895
|
+
}
|
|
3896
|
+
});
|
|
3897
|
+
|
|
3898
|
+
const router$3 = Router({
|
|
3899
|
+
params: true,
|
|
3900
|
+
});
|
|
3901
|
+
router$3.post("/api/v1/explorer_view/tree", async (req, res) => {
|
|
3902
|
+
try {
|
|
3903
|
+
const request = await micro.json(req);
|
|
3904
|
+
const { requestId, serviceName } = request;
|
|
3905
|
+
const data = await ioc.explorerViewService.getTree();
|
|
3906
|
+
const result = { data, status: "ok", error: "", requestId, serviceName };
|
|
3907
|
+
ioc.loggerService.log("/api/v1/explorer_view/tree ok", { request, result: omit(result, "data") });
|
|
3908
|
+
return await micro.send(res, 200, result);
|
|
3909
|
+
}
|
|
3910
|
+
catch (error) {
|
|
3911
|
+
ioc.loggerService.log("/api/v1/explorer_view/tree error", { error: errorData(error) });
|
|
3912
|
+
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
3913
|
+
}
|
|
3914
|
+
});
|
|
3915
|
+
router$3.post("/api/v1/explorer_view/node", async (req, res) => {
|
|
3916
|
+
try {
|
|
3917
|
+
const request = await micro.json(req);
|
|
3918
|
+
const { requestId, serviceName, path } = request;
|
|
3919
|
+
const data = await ioc.explorerViewService.getNode(path);
|
|
3920
|
+
const result = { data, status: "ok", error: "", requestId, serviceName };
|
|
3921
|
+
ioc.loggerService.log("/api/v1/explorer_view/node ok", { request, result: omit(result, "data") });
|
|
3922
|
+
return await micro.send(res, 200, result);
|
|
3923
|
+
}
|
|
3924
|
+
catch (error) {
|
|
3925
|
+
ioc.loggerService.log("/api/v1/explorer_view/node error", { error: errorData(error) });
|
|
3926
|
+
return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
|
|
3927
|
+
}
|
|
3928
|
+
});
|
|
3929
|
+
|
|
2952
3930
|
const router$2 = Router({
|
|
2953
3931
|
params: true,
|
|
2954
3932
|
});
|
|
@@ -3020,25 +3998,31 @@ const router = Router({
|
|
|
3020
3998
|
params: true,
|
|
3021
3999
|
});
|
|
3022
4000
|
router.all("/api/v1/health/*", (req, res) => {
|
|
3023
|
-
return router$
|
|
4001
|
+
return router$b(req, res, finalhandler(req, res));
|
|
3024
4002
|
});
|
|
3025
4003
|
router.all("/api/v1/mock/*", (req, res) => {
|
|
3026
|
-
return router$
|
|
4004
|
+
return router$a(req, res, finalhandler(req, res));
|
|
3027
4005
|
});
|
|
3028
4006
|
router.all("/api/v1/view/*", (req, res) => {
|
|
3029
|
-
return router$
|
|
4007
|
+
return router$9(req, res, finalhandler(req, res));
|
|
3030
4008
|
});
|
|
3031
4009
|
router.all("/api/v1/markdown_mock/*", (req, res) => {
|
|
3032
|
-
return router$
|
|
4010
|
+
return router$6(req, res, finalhandler(req, res));
|
|
3033
4011
|
});
|
|
3034
4012
|
router.all("/api/v1/markdown_view/*", (req, res) => {
|
|
4013
|
+
return router$5(req, res, finalhandler(req, res));
|
|
4014
|
+
});
|
|
4015
|
+
router.all("/api/v1/explorer_mock/*", (req, res) => {
|
|
4016
|
+
return router$4(req, res, finalhandler(req, res));
|
|
4017
|
+
});
|
|
4018
|
+
router.all("/api/v1/explorer_view/*", (req, res) => {
|
|
3035
4019
|
return router$3(req, res, finalhandler(req, res));
|
|
3036
4020
|
});
|
|
3037
4021
|
router.all("/icon/*", (req, res) => {
|
|
3038
|
-
return router$
|
|
4022
|
+
return router$8(req, res, finalhandler(req, res));
|
|
3039
4023
|
});
|
|
3040
4024
|
router.all("/api/v1/dict/*", (req, res) => {
|
|
3041
|
-
return router$
|
|
4025
|
+
return router$7(req, res, finalhandler(req, res));
|
|
3042
4026
|
});
|
|
3043
4027
|
router.all("/api/v1/global/*", (req, res) => {
|
|
3044
4028
|
return router$2(req, res, finalhandler(req, res));
|