@backtest-kit/ui 5.5.3 → 5.6.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.
Files changed (24) hide show
  1. package/build/index.cjs +1053 -46
  2. package/build/index.mjs +1054 -47
  3. package/build/modules/frontend/build/assets/{Background-BnanDjno.js → Background-BGXaqCCj.js} +1 -1
  4. package/build/modules/frontend/build/assets/{IconPhoto-Cf_hSu3z.js → IconPhoto-NqvLnXp7.js} +1 -1
  5. package/build/modules/frontend/build/assets/{KeyboardArrowLeft-C5vKOcAm.js → KeyboardArrowLeft-Brhl60Pa.js} +1 -1
  6. package/build/modules/frontend/build/assets/{Refresh-AyInXuzX.js → Refresh-BGkaUatF.js} +1 -1
  7. package/build/modules/frontend/build/assets/hasRouteMatch-7UKYuS0a.js +1 -0
  8. package/build/modules/frontend/build/assets/html2canvas-D-Nv0RTX.js +1 -0
  9. package/build/modules/frontend/build/assets/{index-yCZPy3N-.js → index-4xZ56Pw3.js} +9 -9
  10. package/build/modules/frontend/build/assets/index-9iaIzgTc.js +1331 -0
  11. package/build/modules/frontend/build/assets/{index-CXkLpGEW.js → index-BDV9EkEY.js} +1 -1
  12. package/build/modules/frontend/build/assets/{index-DoIVKvQl.js → index-BYCwoppH.js} +1 -1
  13. package/build/modules/frontend/build/assets/{index-CE-T-vGF.js → index-CbQBf22x.js} +1 -1
  14. package/build/modules/frontend/build/assets/index-CywcKDZi.js +1 -0
  15. package/build/modules/frontend/build/assets/index-D3HRM1Jy.js +1 -0
  16. package/build/modules/frontend/build/assets/{index-DkX_NvhV.js → index-DG7b0pa9.js} +1 -1
  17. package/build/modules/frontend/build/assets/index.es-BFfvVHkP.js +16 -0
  18. package/build/modules/frontend/build/assets/markdownit-GU6B-6e7.js +1 -0
  19. package/build/modules/frontend/build/assets/purify.es-DpMHVkxQ.js +2 -0
  20. package/build/modules/frontend/build/index.html +1 -1
  21. package/package.json +3 -3
  22. package/types.d.ts +80 -0
  23. package/build/modules/frontend/build/assets/index-Cq_yjKn2.js +0 -1
  24. package/build/modules/frontend/build/assets/index-DLUKIYme.js +0 -1
package/build/index.cjs CHANGED
@@ -20,10 +20,10 @@ const CC_WWWROOT_HOST = process.env.CC_WWWROOT_HOST || "0.0.0.0";
20
20
  const CC_WWWROOT_PORT = parseInt(process.env.CC_WWWROOT_PORT) || 60050;
21
21
  const CC_ENABLE_MOCK = !!parseInt(process.env.CC_ENABLE_MOCK) || false;
22
22
 
23
- const router$7 = Router({
23
+ const router$9 = Router({
24
24
  params: true,
25
25
  });
26
- router$7.get("/api/v1/health/health_check", async (req, res) => {
26
+ router$9.get("/api/v1/health/health_check", async (req, res) => {
27
27
  const [cpuLoad] = os.loadavg();
28
28
  return await micro.send(res, 200, {
29
29
  uptime: process.uptime(),
@@ -62,6 +62,8 @@ const connectionServices$1 = {
62
62
  };
63
63
  const metaServices$1 = {
64
64
  symbolMetaService: Symbol("symbolMetaService"),
65
+ backtestMetaService: Symbol("backtestMetaService"),
66
+ liveMetaService: Symbol("liveMetaService"),
65
67
  };
66
68
  const mockServices$1 = {
67
69
  notificationMockService: Symbol("notificationMockService"),
@@ -69,6 +71,7 @@ const mockServices$1 = {
69
71
  exchangeMockService: Symbol("exchangeMockService"),
70
72
  logMockService: Symbol("logMockService"),
71
73
  statusMockService: Symbol("statusMockService"),
74
+ markdownMockService: Symbol("markdownMockService"),
72
75
  };
73
76
  const viewServices$1 = {
74
77
  notificationViewService: Symbol("notificationViewService"),
@@ -76,6 +79,7 @@ const viewServices$1 = {
76
79
  exchangeViewService: Symbol("exchangeViewService"),
77
80
  logViewService: Symbol("logViewService"),
78
81
  statusViewService: Symbol("statusViewService"),
82
+ markdownViewService: Symbol("markdownViewService"),
79
83
  };
80
84
  const TYPES = {
81
85
  ...baseServices$1,
@@ -435,6 +439,136 @@ class StatusMockService {
435
439
  }
436
440
  }
437
441
 
442
+ const MOCK_DIR = "./mock/markdown";
443
+ const makeReader = (fileName) => functoolsKit.singleshot(() => fs.readFile(path.join(MOCK_DIR, fileName), "utf-8"));
444
+ const makeDataReader = (fileName) => functoolsKit.singleshot(async () => JSON.parse(await fs.readFile(path.join(MOCK_DIR, "data", fileName), "utf-8")));
445
+ const readBacktest = makeReader("backtest.md");
446
+ const readLive = makeReader("live.md");
447
+ const readBreakeven = makeReader("breakeven.md");
448
+ const readRisk = makeReader("risk.md");
449
+ const readPartial = makeReader("partial.md");
450
+ const readHighestProfit = makeReader("highest_profit.md");
451
+ const readSchedule = makeReader("schedule.md");
452
+ const readPerformance = makeReader("performance.md");
453
+ const readSync = makeReader("sync.md");
454
+ const readHeat = makeReader("heat.md");
455
+ const readWalker = makeReader("walker.md");
456
+ const readBacktestData = makeDataReader("backtest.json");
457
+ const readLiveData = makeDataReader("live.json");
458
+ const readBreakevenData = makeDataReader("breakeven.json");
459
+ const readRiskData = makeDataReader("risk.json");
460
+ const readPartialData = makeDataReader("partial.json");
461
+ const readHighestProfitData = makeDataReader("highest_profit.json");
462
+ const readScheduleData = makeDataReader("schedule.json");
463
+ const readPerformanceData = makeDataReader("performance.json");
464
+ const readSyncData = makeDataReader("sync.json");
465
+ const readHeatData = makeDataReader("heat.json");
466
+ const readWalkerData = makeDataReader("walker.json");
467
+ class MarkdownMockService {
468
+ constructor() {
469
+ this.loggerService = inject(TYPES.loggerService);
470
+ // Backtest
471
+ this.getBacktestData = async (symbol, strategyName, exchangeName, frameName) => {
472
+ this.loggerService.log("markdownMockService getBacktestData", { symbol, strategyName, exchangeName, frameName });
473
+ return readBacktestData();
474
+ };
475
+ this.getBacktestReport = async (symbol, strategyName, exchangeName, frameName) => {
476
+ this.loggerService.log("markdownMockService getBacktestReport", { symbol, strategyName, exchangeName, frameName });
477
+ return readBacktest();
478
+ };
479
+ // Live
480
+ this.getLiveData = async (symbol, strategyName, exchangeName) => {
481
+ this.loggerService.log("markdownMockService getLiveData", { symbol, strategyName, exchangeName });
482
+ return readLiveData();
483
+ };
484
+ this.getLiveReport = async (symbol, strategyName, exchangeName) => {
485
+ this.loggerService.log("markdownMockService getLiveReport", { symbol, strategyName, exchangeName });
486
+ return readLive();
487
+ };
488
+ // Breakeven
489
+ this.getBreakevenData = async (symbol, strategyName, exchangeName, frameName) => {
490
+ this.loggerService.log("markdownMockService getBreakevenData", { symbol, strategyName, exchangeName, frameName });
491
+ return readBreakevenData();
492
+ };
493
+ this.getBreakevenReport = async (symbol, strategyName, exchangeName, frameName) => {
494
+ this.loggerService.log("markdownMockService getBreakevenReport", { symbol, strategyName, exchangeName, frameName });
495
+ return readBreakeven();
496
+ };
497
+ // Risk
498
+ this.getRiskData = async (symbol, strategyName, exchangeName, frameName) => {
499
+ this.loggerService.log("markdownMockService getRiskData", { symbol, strategyName, exchangeName, frameName });
500
+ return readRiskData();
501
+ };
502
+ this.getRiskReport = async (symbol, strategyName, exchangeName, frameName) => {
503
+ this.loggerService.log("markdownMockService getRiskReport", { symbol, strategyName, exchangeName, frameName });
504
+ return readRisk();
505
+ };
506
+ // Partial
507
+ this.getPartialData = async (symbol, strategyName, exchangeName, frameName) => {
508
+ this.loggerService.log("markdownMockService getPartialData", { symbol, strategyName, exchangeName, frameName });
509
+ return readPartialData();
510
+ };
511
+ this.getPartialReport = async (symbol, strategyName, exchangeName, frameName) => {
512
+ this.loggerService.log("markdownMockService getPartialReport", { symbol, strategyName, exchangeName, frameName });
513
+ return readPartial();
514
+ };
515
+ // HighestProfit
516
+ this.getHighestProfitData = async (symbol, strategyName, exchangeName, frameName) => {
517
+ this.loggerService.log("markdownMockService getHighestProfitData", { symbol, strategyName, exchangeName, frameName });
518
+ return readHighestProfitData();
519
+ };
520
+ this.getHighestProfitReport = async (symbol, strategyName, exchangeName, frameName) => {
521
+ this.loggerService.log("markdownMockService getHighestProfitReport", { symbol, strategyName, exchangeName, frameName });
522
+ return readHighestProfit();
523
+ };
524
+ // Schedule
525
+ this.getScheduleData = async (symbol, strategyName, exchangeName, frameName) => {
526
+ this.loggerService.log("markdownMockService getScheduleData", { symbol, strategyName, exchangeName, frameName });
527
+ return readScheduleData();
528
+ };
529
+ this.getScheduleReport = async (symbol, strategyName, exchangeName, frameName) => {
530
+ this.loggerService.log("markdownMockService getScheduleReport", { symbol, strategyName, exchangeName, frameName });
531
+ return readSchedule();
532
+ };
533
+ // Performance
534
+ this.getPerformanceData = async (symbol, strategyName, exchangeName, frameName) => {
535
+ this.loggerService.log("markdownMockService getPerformanceData", { symbol, strategyName, exchangeName, frameName });
536
+ return readPerformanceData();
537
+ };
538
+ this.getPerformanceReport = async (symbol, strategyName, exchangeName, frameName) => {
539
+ this.loggerService.log("markdownMockService getPerformanceReport", { symbol, strategyName, exchangeName, frameName });
540
+ return readPerformance();
541
+ };
542
+ // Sync
543
+ this.getSyncData = async (symbol, strategyName, exchangeName, frameName) => {
544
+ this.loggerService.log("markdownMockService getSyncData", { symbol, strategyName, exchangeName, frameName });
545
+ return readSyncData();
546
+ };
547
+ this.getSyncReport = async (symbol, strategyName, exchangeName, frameName) => {
548
+ this.loggerService.log("markdownMockService getSyncReport", { symbol, strategyName, exchangeName, frameName });
549
+ return readSync();
550
+ };
551
+ // Heat
552
+ this.getHeatData = async (strategyName, exchangeName, frameName) => {
553
+ this.loggerService.log("markdownMockService getHeatData", { strategyName, exchangeName, frameName });
554
+ return readHeatData();
555
+ };
556
+ this.getHeatReport = async (strategyName, exchangeName, frameName) => {
557
+ this.loggerService.log("markdownMockService getHeatReport", { strategyName, exchangeName, frameName });
558
+ return readHeat();
559
+ };
560
+ // Walker
561
+ this.getWalkerData = async (symbol, walkerName) => {
562
+ this.loggerService.log("markdownMockService getWalkerData", { symbol, walkerName });
563
+ return readWalkerData();
564
+ };
565
+ this.getWalkerReport = async (symbol, walkerName) => {
566
+ this.loggerService.log("markdownMockService getWalkerReport", { symbol, walkerName });
567
+ return readWalker();
568
+ };
569
+ }
570
+ }
571
+
438
572
  const DEFAULT_LIMIT$1 = 25;
439
573
  const DEFAULT_OFFSET$1 = 0;
440
574
  const CREATE_FILTER_LIST_FN$1 = (filterData) => Object.keys(filterData).map((key) => (row) => new RegExp(filterData[key], "i").test(row[key]));
@@ -781,6 +915,178 @@ class StatusViewService {
781
915
  }
782
916
  }
783
917
 
918
+ class MarkdownViewService {
919
+ constructor() {
920
+ this.loggerService = inject(TYPES.loggerService);
921
+ this.markdownMockService = inject(TYPES.markdownMockService);
922
+ // Backtest
923
+ this.getBacktestData = async (symbol, strategyName, exchangeName, frameName) => {
924
+ this.loggerService.log("markdownViewService getBacktestData", { symbol, strategyName, exchangeName, frameName });
925
+ if (CC_ENABLE_MOCK) {
926
+ return await this.markdownMockService.getBacktestData(symbol, strategyName, exchangeName, frameName);
927
+ }
928
+ return await backtestKit.Backtest.getData(symbol, { strategyName, exchangeName, frameName });
929
+ };
930
+ this.getBacktestReport = async (symbol, strategyName, exchangeName, frameName) => {
931
+ this.loggerService.log("markdownViewService getBacktestReport", { symbol, strategyName, exchangeName, frameName });
932
+ if (CC_ENABLE_MOCK) {
933
+ return await this.markdownMockService.getBacktestReport(symbol, strategyName, exchangeName, frameName);
934
+ }
935
+ return await backtestKit.Backtest.getReport(symbol, { strategyName, exchangeName, frameName });
936
+ };
937
+ // Live
938
+ this.getLiveData = async (symbol, strategyName, exchangeName) => {
939
+ this.loggerService.log("markdownViewService getLiveData", { symbol, strategyName, exchangeName });
940
+ if (CC_ENABLE_MOCK) {
941
+ return await this.markdownMockService.getLiveData(symbol, strategyName, exchangeName);
942
+ }
943
+ return await backtestKit.Live.getData(symbol, { strategyName, exchangeName });
944
+ };
945
+ this.getLiveReport = async (symbol, strategyName, exchangeName) => {
946
+ this.loggerService.log("markdownViewService getLiveReport", { symbol, strategyName, exchangeName });
947
+ if (CC_ENABLE_MOCK) {
948
+ return await this.markdownMockService.getLiveReport(symbol, strategyName, exchangeName);
949
+ }
950
+ return await backtestKit.Live.getReport(symbol, { strategyName, exchangeName });
951
+ };
952
+ // Breakeven
953
+ this.getBreakevenData = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
954
+ this.loggerService.log("markdownViewService getBreakevenData", { symbol, strategyName, exchangeName, frameName, backtest });
955
+ if (CC_ENABLE_MOCK) {
956
+ return await this.markdownMockService.getBreakevenData(symbol, strategyName, exchangeName, frameName);
957
+ }
958
+ return await backtestKit.Breakeven.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
959
+ };
960
+ this.getBreakevenReport = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
961
+ this.loggerService.log("markdownViewService getBreakevenReport", { symbol, strategyName, exchangeName, frameName, backtest });
962
+ if (CC_ENABLE_MOCK) {
963
+ return await this.markdownMockService.getBreakevenReport(symbol, strategyName, exchangeName, frameName);
964
+ }
965
+ return await backtestKit.Breakeven.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
966
+ };
967
+ // Risk
968
+ this.getRiskData = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
969
+ this.loggerService.log("markdownViewService getRiskData", { symbol, strategyName, exchangeName, frameName, backtest });
970
+ if (CC_ENABLE_MOCK) {
971
+ return await this.markdownMockService.getRiskData(symbol, strategyName, exchangeName, frameName);
972
+ }
973
+ return await backtestKit.Risk.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
974
+ };
975
+ this.getRiskReport = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
976
+ this.loggerService.log("markdownViewService getRiskReport", { symbol, strategyName, exchangeName, frameName, backtest });
977
+ if (CC_ENABLE_MOCK) {
978
+ return await this.markdownMockService.getRiskReport(symbol, strategyName, exchangeName, frameName);
979
+ }
980
+ return await backtestKit.Risk.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
981
+ };
982
+ // Partial
983
+ this.getPartialData = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
984
+ this.loggerService.log("markdownViewService getPartialData", { symbol, strategyName, exchangeName, frameName, backtest });
985
+ if (CC_ENABLE_MOCK) {
986
+ return await this.markdownMockService.getPartialData(symbol, strategyName, exchangeName, frameName);
987
+ }
988
+ return await backtestKit.Partial.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
989
+ };
990
+ this.getPartialReport = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
991
+ this.loggerService.log("markdownViewService getPartialReport", { symbol, strategyName, exchangeName, frameName, backtest });
992
+ if (CC_ENABLE_MOCK) {
993
+ return await this.markdownMockService.getPartialReport(symbol, strategyName, exchangeName, frameName);
994
+ }
995
+ return await backtestKit.Partial.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
996
+ };
997
+ // HighestProfit
998
+ this.getHighestProfitData = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
999
+ this.loggerService.log("markdownViewService getHighestProfitData", { symbol, strategyName, exchangeName, frameName, backtest });
1000
+ if (CC_ENABLE_MOCK) {
1001
+ return await this.markdownMockService.getHighestProfitData(symbol, strategyName, exchangeName, frameName);
1002
+ }
1003
+ return await backtestKit.HighestProfit.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
1004
+ };
1005
+ this.getHighestProfitReport = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
1006
+ this.loggerService.log("markdownViewService getHighestProfitReport", { symbol, strategyName, exchangeName, frameName, backtest });
1007
+ if (CC_ENABLE_MOCK) {
1008
+ return await this.markdownMockService.getHighestProfitReport(symbol, strategyName, exchangeName, frameName);
1009
+ }
1010
+ return await backtestKit.HighestProfit.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
1011
+ };
1012
+ // Schedule
1013
+ this.getScheduleData = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
1014
+ this.loggerService.log("markdownViewService getScheduleData", { symbol, strategyName, exchangeName, frameName, backtest });
1015
+ if (CC_ENABLE_MOCK) {
1016
+ return await this.markdownMockService.getScheduleData(symbol, strategyName, exchangeName, frameName);
1017
+ }
1018
+ return await backtestKit.Schedule.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
1019
+ };
1020
+ this.getScheduleReport = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
1021
+ this.loggerService.log("markdownViewService getScheduleReport", { symbol, strategyName, exchangeName, frameName, backtest });
1022
+ if (CC_ENABLE_MOCK) {
1023
+ return await this.markdownMockService.getScheduleReport(symbol, strategyName, exchangeName, frameName);
1024
+ }
1025
+ return await backtestKit.Schedule.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
1026
+ };
1027
+ // Performance
1028
+ this.getPerformanceData = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
1029
+ this.loggerService.log("markdownViewService getPerformanceData", { symbol, strategyName, exchangeName, frameName, backtest });
1030
+ if (CC_ENABLE_MOCK) {
1031
+ return await this.markdownMockService.getPerformanceData(symbol, strategyName, exchangeName, frameName);
1032
+ }
1033
+ return await backtestKit.Performance.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
1034
+ };
1035
+ this.getPerformanceReport = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
1036
+ this.loggerService.log("markdownViewService getPerformanceReport", { symbol, strategyName, exchangeName, frameName, backtest });
1037
+ if (CC_ENABLE_MOCK) {
1038
+ return await this.markdownMockService.getPerformanceReport(symbol, strategyName, exchangeName, frameName);
1039
+ }
1040
+ return await backtestKit.Performance.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
1041
+ };
1042
+ // Sync
1043
+ this.getSyncData = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
1044
+ this.loggerService.log("markdownViewService getSyncData", { symbol, strategyName, exchangeName, frameName, backtest });
1045
+ if (CC_ENABLE_MOCK) {
1046
+ return await this.markdownMockService.getSyncData(symbol, strategyName, exchangeName, frameName);
1047
+ }
1048
+ return await backtestKit.Sync.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
1049
+ };
1050
+ this.getSyncReport = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
1051
+ this.loggerService.log("markdownViewService getSyncReport", { symbol, strategyName, exchangeName, frameName, backtest });
1052
+ if (CC_ENABLE_MOCK) {
1053
+ return await this.markdownMockService.getSyncReport(symbol, strategyName, exchangeName, frameName);
1054
+ }
1055
+ return await backtestKit.Sync.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
1056
+ };
1057
+ // Heat
1058
+ this.getHeatData = async (strategyName, exchangeName, frameName, backtest = false) => {
1059
+ this.loggerService.log("markdownViewService getHeatData", { strategyName, exchangeName, frameName, backtest });
1060
+ if (CC_ENABLE_MOCK) {
1061
+ return await this.markdownMockService.getHeatData(strategyName, exchangeName, frameName);
1062
+ }
1063
+ return await backtestKit.Heat.getData({ strategyName, exchangeName, frameName }, backtest);
1064
+ };
1065
+ this.getHeatReport = async (strategyName, exchangeName, frameName, backtest = false) => {
1066
+ this.loggerService.log("markdownViewService getHeatReport", { strategyName, exchangeName, frameName, backtest });
1067
+ if (CC_ENABLE_MOCK) {
1068
+ return await this.markdownMockService.getHeatReport(strategyName, exchangeName, frameName);
1069
+ }
1070
+ return await backtestKit.Heat.getReport({ strategyName, exchangeName, frameName }, backtest);
1071
+ };
1072
+ // Walker
1073
+ this.getWalkerData = async (symbol, walkerName) => {
1074
+ this.loggerService.log("markdownViewService getWalkerData", { symbol, walkerName });
1075
+ if (CC_ENABLE_MOCK) {
1076
+ return await this.markdownMockService.getWalkerData(symbol, walkerName);
1077
+ }
1078
+ return await backtestKit.Walker.getData(symbol, { walkerName });
1079
+ };
1080
+ this.getWalkerReport = async (symbol, walkerName) => {
1081
+ this.loggerService.log("markdownViewService getWalkerReport", { symbol, walkerName });
1082
+ if (CC_ENABLE_MOCK) {
1083
+ return await this.markdownMockService.getWalkerReport(symbol, walkerName);
1084
+ }
1085
+ return await backtestKit.Walker.getReport(symbol, { walkerName });
1086
+ };
1087
+ }
1088
+ }
1089
+
784
1090
  const symbol_list = [
785
1091
  {
786
1092
  icon: "/icon/btc.png",
@@ -922,6 +1228,41 @@ class PriceConnectionService {
922
1228
  }
923
1229
  }
924
1230
 
1231
+ const BACKTEST_LIST = [
1232
+ { id: "mock-backtest-1", symbol: "BTCUSDT", strategyName: "mock-strategy", exchangeName: "binance", frameName: "1m", status: "done" },
1233
+ { id: "mock-backtest-2", symbol: "ETHUSDT", strategyName: "mock-strategy", exchangeName: "binance", frameName: "1m", status: "running" },
1234
+ { id: "mock-backtest-3", symbol: "BNBUSDT", strategyName: "mock-strategy", exchangeName: "binance", frameName: "1m", status: "idle" },
1235
+ ];
1236
+ class BacktestMetaService {
1237
+ constructor() {
1238
+ this.loggerService = inject(TYPES.loggerService);
1239
+ this.list = async () => {
1240
+ this.loggerService.log("backtestMetaService list");
1241
+ if (CC_ENABLE_MOCK) {
1242
+ return BACKTEST_LIST;
1243
+ }
1244
+ return await backtestKit.Backtest.list();
1245
+ };
1246
+ }
1247
+ }
1248
+
1249
+ const LIVE_LIST = [
1250
+ { id: "mock-live-1", symbol: "BTCUSDT", strategyName: "mock-strategy", exchangeName: "binance", status: "running" },
1251
+ { id: "mock-live-2", symbol: "ETHUSDT", strategyName: "mock-strategy", exchangeName: "binance", status: "idle" },
1252
+ ];
1253
+ class LiveMetaService {
1254
+ constructor() {
1255
+ this.loggerService = inject(TYPES.loggerService);
1256
+ this.list = async () => {
1257
+ this.loggerService.log("liveMetaService list");
1258
+ if (CC_ENABLE_MOCK) {
1259
+ return LIVE_LIST;
1260
+ }
1261
+ return await backtestKit.Live.list();
1262
+ };
1263
+ }
1264
+ }
1265
+
925
1266
  {
926
1267
  provide(TYPES.loggerService, () => new LoggerService());
927
1268
  provide(TYPES.exchangeService, () => new ExchangeService());
@@ -931,7 +1272,9 @@ class PriceConnectionService {
931
1272
  provide(TYPES.priceConnectionService, () => new PriceConnectionService());
932
1273
  }
933
1274
  {
1275
+ provide(TYPES.liveMetaService, () => new LiveMetaService());
934
1276
  provide(TYPES.symbolMetaService, () => new SymbolMetaService());
1277
+ provide(TYPES.backtestMetaService, () => new BacktestMetaService());
935
1278
  }
936
1279
  {
937
1280
  provide(TYPES.notificationMockService, () => new NotificationMockService());
@@ -939,6 +1282,7 @@ class PriceConnectionService {
939
1282
  provide(TYPES.exchangeMockService, () => new ExchangeMockService());
940
1283
  provide(TYPES.logMockService, () => new LogMockService());
941
1284
  provide(TYPES.statusMockService, () => new StatusMockService());
1285
+ provide(TYPES.markdownMockService, () => new MarkdownMockService());
942
1286
  }
943
1287
  {
944
1288
  provide(TYPES.notificationViewService, () => new NotificationViewService());
@@ -946,6 +1290,7 @@ class PriceConnectionService {
946
1290
  provide(TYPES.exchangeViewService, () => new ExchangeViewService());
947
1291
  provide(TYPES.logViewService, () => new LogViewService());
948
1292
  provide(TYPES.statusViewService, () => new StatusViewService());
1293
+ provide(TYPES.markdownViewService, () => new MarkdownViewService());
949
1294
  }
950
1295
 
951
1296
  const baseServices = {
@@ -957,7 +1302,9 @@ const connectionServices = {
957
1302
  priceConnectionService: inject(TYPES.priceConnectionService),
958
1303
  };
959
1304
  const metaServices = {
1305
+ liveMetaService: inject(TYPES.liveMetaService),
960
1306
  symbolMetaService: inject(TYPES.symbolMetaService),
1307
+ backtestMetaService: inject(TYPES.backtestMetaService),
961
1308
  };
962
1309
  const mockServices = {
963
1310
  notificationMockService: inject(TYPES.notificationMockService),
@@ -965,6 +1312,7 @@ const mockServices = {
965
1312
  exchangeMockService: inject(TYPES.exchangeMockService),
966
1313
  logMockService: inject(TYPES.logMockService),
967
1314
  statusMockService: inject(TYPES.statusMockService),
1315
+ markdownMockService: inject(TYPES.markdownMockService),
968
1316
  };
969
1317
  const viewServices = {
970
1318
  notificationViewService: inject(TYPES.notificationViewService),
@@ -972,6 +1320,7 @@ const viewServices = {
972
1320
  exchangeViewService: inject(TYPES.exchangeViewService),
973
1321
  logViewService: inject(TYPES.logViewService),
974
1322
  statusViewService: inject(TYPES.statusViewService),
1323
+ markdownViewService: inject(TYPES.markdownViewService),
975
1324
  };
976
1325
  const ioc = {
977
1326
  ...baseServices,
@@ -982,11 +1331,11 @@ const ioc = {
982
1331
  };
983
1332
  init();
984
1333
 
985
- const router$6 = Router({
1334
+ const router$8 = Router({
986
1335
  params: true,
987
1336
  });
988
1337
  // ExchangeMockService endpoints
989
- router$6.post("/api/v1/mock/candles_signal", async (req, res) => {
1338
+ router$8.post("/api/v1/mock/candles_signal", async (req, res) => {
990
1339
  try {
991
1340
  const request = await micro.json(req);
992
1341
  const { signalId, interval, requestId, serviceName } = request;
@@ -1014,7 +1363,7 @@ router$6.post("/api/v1/mock/candles_signal", async (req, res) => {
1014
1363
  });
1015
1364
  }
1016
1365
  });
1017
- router$6.post("/api/v1/mock/candles_point", async (req, res) => {
1366
+ router$8.post("/api/v1/mock/candles_point", async (req, res) => {
1018
1367
  try {
1019
1368
  const request = await micro.json(req);
1020
1369
  const { currentTime, interval, requestId, serviceName, symbol, exchangeName } = request;
@@ -1048,7 +1397,7 @@ router$6.post("/api/v1/mock/candles_point", async (req, res) => {
1048
1397
  }
1049
1398
  });
1050
1399
  // NotificationMockService endpoints
1051
- router$6.post("/api/v1/mock/notification_list", async (req, res) => {
1400
+ router$8.post("/api/v1/mock/notification_list", async (req, res) => {
1052
1401
  try {
1053
1402
  const request = await micro.json(req);
1054
1403
  const { requestId, serviceName } = request;
@@ -1076,7 +1425,7 @@ router$6.post("/api/v1/mock/notification_list", async (req, res) => {
1076
1425
  });
1077
1426
  }
1078
1427
  });
1079
- router$6.post("/api/v1/mock/notification_one/:id", async (req, res) => {
1428
+ router$8.post("/api/v1/mock/notification_one/:id", async (req, res) => {
1080
1429
  try {
1081
1430
  const request = await micro.json(req);
1082
1431
  const { requestId, serviceName } = request;
@@ -1105,7 +1454,7 @@ router$6.post("/api/v1/mock/notification_one/:id", async (req, res) => {
1105
1454
  });
1106
1455
  }
1107
1456
  });
1108
- router$6.post("/api/v1/mock/notification_filter", async (req, res) => {
1457
+ router$8.post("/api/v1/mock/notification_filter", async (req, res) => {
1109
1458
  try {
1110
1459
  const request = await micro.json(req);
1111
1460
  const { requestId, serviceName, filterData, limit, offset } = request;
@@ -1134,7 +1483,7 @@ router$6.post("/api/v1/mock/notification_filter", async (req, res) => {
1134
1483
  }
1135
1484
  });
1136
1485
  // StorageMockService endpoints
1137
- router$6.post("/api/v1/mock/storage_one/:id", async (req, res) => {
1486
+ router$8.post("/api/v1/mock/storage_one/:id", async (req, res) => {
1138
1487
  try {
1139
1488
  const request = await micro.json(req);
1140
1489
  const { requestId, serviceName } = request;
@@ -1163,7 +1512,7 @@ router$6.post("/api/v1/mock/storage_one/:id", async (req, res) => {
1163
1512
  });
1164
1513
  }
1165
1514
  });
1166
- router$6.post("/api/v1/mock/storage_list/live", async (req, res) => {
1515
+ router$8.post("/api/v1/mock/storage_list/live", async (req, res) => {
1167
1516
  try {
1168
1517
  const request = await micro.json(req);
1169
1518
  const { requestId, serviceName } = request;
@@ -1191,7 +1540,7 @@ router$6.post("/api/v1/mock/storage_list/live", async (req, res) => {
1191
1540
  });
1192
1541
  }
1193
1542
  });
1194
- router$6.post("/api/v1/mock/storage_list/backtest", async (req, res) => {
1543
+ router$8.post("/api/v1/mock/storage_list/backtest", async (req, res) => {
1195
1544
  try {
1196
1545
  const request = await micro.json(req);
1197
1546
  const { requestId, serviceName } = request;
@@ -1220,7 +1569,7 @@ router$6.post("/api/v1/mock/storage_list/backtest", async (req, res) => {
1220
1569
  }
1221
1570
  });
1222
1571
  // LogMockService endpoints
1223
- router$6.post("/api/v1/mock/log_list", async (req, res) => {
1572
+ router$8.post("/api/v1/mock/log_list", async (req, res) => {
1224
1573
  try {
1225
1574
  const request = await micro.json(req);
1226
1575
  const { requestId, serviceName } = request;
@@ -1248,7 +1597,7 @@ router$6.post("/api/v1/mock/log_list", async (req, res) => {
1248
1597
  });
1249
1598
  }
1250
1599
  });
1251
- router$6.post("/api/v1/mock/log_one/:id", async (req, res) => {
1600
+ router$8.post("/api/v1/mock/log_one/:id", async (req, res) => {
1252
1601
  try {
1253
1602
  const request = await micro.json(req);
1254
1603
  const { requestId, serviceName } = request;
@@ -1277,7 +1626,7 @@ router$6.post("/api/v1/mock/log_one/:id", async (req, res) => {
1277
1626
  });
1278
1627
  }
1279
1628
  });
1280
- router$6.post("/api/v1/mock/log_filter", async (req, res) => {
1629
+ router$8.post("/api/v1/mock/log_filter", async (req, res) => {
1281
1630
  try {
1282
1631
  const request = await micro.json(req);
1283
1632
  const { requestId, serviceName, filterData, limit, offset } = request;
@@ -1305,7 +1654,7 @@ router$6.post("/api/v1/mock/log_filter", async (req, res) => {
1305
1654
  });
1306
1655
  }
1307
1656
  });
1308
- router$6.post("/api/v1/mock/candles_live", async (req, res) => {
1657
+ router$8.post("/api/v1/mock/candles_live", async (req, res) => {
1309
1658
  try {
1310
1659
  const request = await micro.json(req);
1311
1660
  const { signalId, interval, requestId, serviceName } = request;
@@ -1334,7 +1683,7 @@ router$6.post("/api/v1/mock/candles_live", async (req, res) => {
1334
1683
  }
1335
1684
  });
1336
1685
  // StatusMockService endpoints
1337
- router$6.post("/api/v1/mock/status_list", async (req, res) => {
1686
+ router$8.post("/api/v1/mock/status_list", async (req, res) => {
1338
1687
  try {
1339
1688
  const request = await micro.json(req);
1340
1689
  const { requestId, serviceName } = request;
@@ -1362,7 +1711,7 @@ router$6.post("/api/v1/mock/status_list", async (req, res) => {
1362
1711
  });
1363
1712
  }
1364
1713
  });
1365
- router$6.post("/api/v1/mock/status_one/:id", async (req, res) => {
1714
+ router$8.post("/api/v1/mock/status_one/:id", async (req, res) => {
1366
1715
  try {
1367
1716
  const request = await micro.json(req);
1368
1717
  const { requestId, serviceName } = request;
@@ -1392,11 +1741,11 @@ router$6.post("/api/v1/mock/status_one/:id", async (req, res) => {
1392
1741
  }
1393
1742
  });
1394
1743
 
1395
- const router$5 = Router({
1744
+ const router$7 = Router({
1396
1745
  params: true,
1397
1746
  });
1398
1747
  // ExchangeViewService endpoints
1399
- router$5.post("/api/v1/view/candles_signal", async (req, res) => {
1748
+ router$7.post("/api/v1/view/candles_signal", async (req, res) => {
1400
1749
  try {
1401
1750
  const request = await micro.json(req);
1402
1751
  const { signalId, interval, requestId, serviceName } = request;
@@ -1424,7 +1773,7 @@ router$5.post("/api/v1/view/candles_signal", async (req, res) => {
1424
1773
  });
1425
1774
  }
1426
1775
  });
1427
- router$5.post("/api/v1/view/candles_point", async (req, res) => {
1776
+ router$7.post("/api/v1/view/candles_point", async (req, res) => {
1428
1777
  try {
1429
1778
  const request = await micro.json(req);
1430
1779
  const { currentTime, interval, requestId, serviceName, symbol, exchangeName } = request;
@@ -1457,7 +1806,7 @@ router$5.post("/api/v1/view/candles_point", async (req, res) => {
1457
1806
  });
1458
1807
  }
1459
1808
  });
1460
- router$5.post("/api/v1/view/candles_live", async (req, res) => {
1809
+ router$7.post("/api/v1/view/candles_live", async (req, res) => {
1461
1810
  try {
1462
1811
  const request = await micro.json(req);
1463
1812
  const { signalId, interval, requestId, serviceName } = request;
@@ -1486,7 +1835,7 @@ router$5.post("/api/v1/view/candles_live", async (req, res) => {
1486
1835
  }
1487
1836
  });
1488
1837
  // NotificationViewService endpoints
1489
- router$5.post("/api/v1/view/notification_list", async (req, res) => {
1838
+ router$7.post("/api/v1/view/notification_list", async (req, res) => {
1490
1839
  try {
1491
1840
  const request = await micro.json(req);
1492
1841
  const { requestId, serviceName } = request;
@@ -1514,7 +1863,7 @@ router$5.post("/api/v1/view/notification_list", async (req, res) => {
1514
1863
  });
1515
1864
  }
1516
1865
  });
1517
- router$5.post("/api/v1/view/notification_one/:id", async (req, res) => {
1866
+ router$7.post("/api/v1/view/notification_one/:id", async (req, res) => {
1518
1867
  try {
1519
1868
  const request = await micro.json(req);
1520
1869
  const { requestId, serviceName } = request;
@@ -1543,7 +1892,7 @@ router$5.post("/api/v1/view/notification_one/:id", async (req, res) => {
1543
1892
  });
1544
1893
  }
1545
1894
  });
1546
- router$5.post("/api/v1/view/notification_filter", async (req, res) => {
1895
+ router$7.post("/api/v1/view/notification_filter", async (req, res) => {
1547
1896
  try {
1548
1897
  const request = await micro.json(req);
1549
1898
  const { requestId, serviceName, filterData, limit, offset } = request;
@@ -1572,7 +1921,7 @@ router$5.post("/api/v1/view/notification_filter", async (req, res) => {
1572
1921
  }
1573
1922
  });
1574
1923
  // StorageViewService endpoints
1575
- router$5.post("/api/v1/view/storage_one/:id", async (req, res) => {
1924
+ router$7.post("/api/v1/view/storage_one/:id", async (req, res) => {
1576
1925
  try {
1577
1926
  const request = await micro.json(req);
1578
1927
  const { requestId, serviceName } = request;
@@ -1601,7 +1950,7 @@ router$5.post("/api/v1/view/storage_one/:id", async (req, res) => {
1601
1950
  });
1602
1951
  }
1603
1952
  });
1604
- router$5.post("/api/v1/view/storage_list/live", async (req, res) => {
1953
+ router$7.post("/api/v1/view/storage_list/live", async (req, res) => {
1605
1954
  try {
1606
1955
  const request = await micro.json(req);
1607
1956
  const { requestId, serviceName } = request;
@@ -1629,7 +1978,7 @@ router$5.post("/api/v1/view/storage_list/live", async (req, res) => {
1629
1978
  });
1630
1979
  }
1631
1980
  });
1632
- router$5.post("/api/v1/view/storage_list/backtest", async (req, res) => {
1981
+ router$7.post("/api/v1/view/storage_list/backtest", async (req, res) => {
1633
1982
  try {
1634
1983
  const request = await micro.json(req);
1635
1984
  const { requestId, serviceName } = request;
@@ -1658,7 +2007,7 @@ router$5.post("/api/v1/view/storage_list/backtest", async (req, res) => {
1658
2007
  }
1659
2008
  });
1660
2009
  // LogViewService endpoints
1661
- router$5.post("/api/v1/view/log_list", async (req, res) => {
2010
+ router$7.post("/api/v1/view/log_list", async (req, res) => {
1662
2011
  try {
1663
2012
  const request = await micro.json(req);
1664
2013
  const { requestId, serviceName } = request;
@@ -1686,7 +2035,7 @@ router$5.post("/api/v1/view/log_list", async (req, res) => {
1686
2035
  });
1687
2036
  }
1688
2037
  });
1689
- router$5.post("/api/v1/view/log_one/:id", async (req, res) => {
2038
+ router$7.post("/api/v1/view/log_one/:id", async (req, res) => {
1690
2039
  try {
1691
2040
  const request = await micro.json(req);
1692
2041
  const { requestId, serviceName } = request;
@@ -1715,7 +2064,7 @@ router$5.post("/api/v1/view/log_one/:id", async (req, res) => {
1715
2064
  });
1716
2065
  }
1717
2066
  });
1718
- router$5.post("/api/v1/view/log_filter", async (req, res) => {
2067
+ router$7.post("/api/v1/view/log_filter", async (req, res) => {
1719
2068
  try {
1720
2069
  const request = await micro.json(req);
1721
2070
  const { requestId, serviceName, filterData, limit, offset } = request;
@@ -1744,7 +2093,7 @@ router$5.post("/api/v1/view/log_filter", async (req, res) => {
1744
2093
  }
1745
2094
  });
1746
2095
  // StatusViewService endpoints
1747
- router$5.post("/api/v1/view/status_list", async (req, res) => {
2096
+ router$7.post("/api/v1/view/status_list", async (req, res) => {
1748
2097
  try {
1749
2098
  const request = await micro.json(req);
1750
2099
  const { requestId, serviceName } = request;
@@ -1772,7 +2121,7 @@ router$5.post("/api/v1/view/status_list", async (req, res) => {
1772
2121
  });
1773
2122
  }
1774
2123
  });
1775
- router$5.post("/api/v1/view/status_one/:id", async (req, res) => {
2124
+ router$7.post("/api/v1/view/status_one/:id", async (req, res) => {
1776
2125
  try {
1777
2126
  const request = await micro.json(req);
1778
2127
  const { requestId, serviceName } = request;
@@ -1809,7 +2158,7 @@ function getModulesPath() {
1809
2158
  return path.join(basePath, "../../../");
1810
2159
  }
1811
2160
 
1812
- const router$4 = Router({
2161
+ const router$6 = Router({
1813
2162
  params: true,
1814
2163
  });
1815
2164
  // getModulesPath
@@ -1826,7 +2175,7 @@ const ASSET_32 = CC_ENABLE_MOCK
1826
2175
  const cache128 = new Map();
1827
2176
  const cache32 = new Map();
1828
2177
  const cacheSvg = new Map();
1829
- router$4.get("/icon/128/:filename", async (req, res) => {
2178
+ router$6.get("/icon/128/:filename", async (req, res) => {
1830
2179
  const filename = req.params.filename;
1831
2180
  // Check cache first
1832
2181
  if (cache128.has(filename)) {
@@ -1842,7 +2191,7 @@ router$4.get("/icon/128/:filename", async (req, res) => {
1842
2191
  }
1843
2192
  return await micro.send(res, 404, "File not found (128)");
1844
2193
  });
1845
- router$4.get("/icon/32/:filename", async (req, res) => {
2194
+ router$6.get("/icon/32/:filename", async (req, res) => {
1846
2195
  const filename = req.params.filename;
1847
2196
  // Check cache first
1848
2197
  if (cache32.has(filename)) {
@@ -1858,7 +2207,7 @@ router$4.get("/icon/32/:filename", async (req, res) => {
1858
2207
  }
1859
2208
  return await micro.send(res, 404, "File not found (32)");
1860
2209
  });
1861
- router$4.get("/icon/svg/:filename", async (req, res) => {
2210
+ router$6.get("/icon/svg/:filename", async (req, res) => {
1862
2211
  const filename = req.params.filename;
1863
2212
  // Check cache first
1864
2213
  if (cacheSvg.has(filename)) {
@@ -1874,7 +2223,7 @@ router$4.get("/icon/svg/:filename", async (req, res) => {
1874
2223
  }
1875
2224
  return await micro.send(res, 404, "File not found (svg)");
1876
2225
  });
1877
- router$4.get("/icon/:filename", async (req, res) => {
2226
+ router$6.get("/icon/:filename", async (req, res) => {
1878
2227
  const filename = req.params.filename;
1879
2228
  // Check cache first
1880
2229
  if (cache32.has(filename)) {
@@ -1891,10 +2240,10 @@ router$4.get("/icon/:filename", async (req, res) => {
1891
2240
  return await micro.send(res, 404, "File not found (root)");
1892
2241
  });
1893
2242
 
1894
- const router$3 = Router({
2243
+ const router$5 = Router({
1895
2244
  params: true,
1896
2245
  });
1897
- router$3.post("/api/v1/dict/symbol/list", async (req, res) => {
2246
+ router$5.post("/api/v1/dict/symbol/list", async (req, res) => {
1898
2247
  try {
1899
2248
  const request = await micro.json(req);
1900
2249
  const { requestId, serviceName } = request;
@@ -1922,7 +2271,7 @@ router$3.post("/api/v1/dict/symbol/list", async (req, res) => {
1922
2271
  });
1923
2272
  }
1924
2273
  });
1925
- router$3.post("/api/v1/dict/symbol/map", async (req, res) => {
2274
+ router$5.post("/api/v1/dict/symbol/map", async (req, res) => {
1926
2275
  try {
1927
2276
  const request = await micro.json(req);
1928
2277
  const { requestId, serviceName } = request;
@@ -1950,7 +2299,7 @@ router$3.post("/api/v1/dict/symbol/map", async (req, res) => {
1950
2299
  });
1951
2300
  }
1952
2301
  });
1953
- router$3.post("/api/v1/dict/symbol/one", async (req, res) => {
2302
+ router$5.post("/api/v1/dict/symbol/one", async (req, res) => {
1954
2303
  try {
1955
2304
  const request = await micro.json(req);
1956
2305
  const { requestId, serviceName, id } = request;
@@ -1979,6 +2328,630 @@ router$3.post("/api/v1/dict/symbol/one", async (req, res) => {
1979
2328
  }
1980
2329
  });
1981
2330
 
2331
+ const router$4 = Router({
2332
+ params: true,
2333
+ });
2334
+ router$4.post("/api/v1/markdown_mock/backtest_data", async (req, res) => {
2335
+ try {
2336
+ const request = await micro.json(req);
2337
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2338
+ const data = await ioc.markdownMockService.getBacktestData(symbol, strategyName, exchangeName, frameName);
2339
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2340
+ ioc.loggerService.log("/api/v1/markdown_mock/backtest_data ok", { request, result: omit(result, "data") });
2341
+ return await micro.send(res, 200, result);
2342
+ }
2343
+ catch (error) {
2344
+ ioc.loggerService.log("/api/v1/markdown_mock/backtest_data error", { error: functoolsKit.errorData(error) });
2345
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2346
+ }
2347
+ });
2348
+ router$4.post("/api/v1/markdown_mock/backtest_report", async (req, res) => {
2349
+ try {
2350
+ const request = await micro.json(req);
2351
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2352
+ const data = await ioc.markdownMockService.getBacktestReport(symbol, strategyName, exchangeName, frameName);
2353
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2354
+ ioc.loggerService.log("/api/v1/markdown_mock/backtest_report ok", { request, result: omit(result, "data") });
2355
+ return await micro.send(res, 200, result);
2356
+ }
2357
+ catch (error) {
2358
+ ioc.loggerService.log("/api/v1/markdown_mock/backtest_report error", { error: functoolsKit.errorData(error) });
2359
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2360
+ }
2361
+ });
2362
+ router$4.post("/api/v1/markdown_mock/live_data", async (req, res) => {
2363
+ try {
2364
+ const request = await micro.json(req);
2365
+ const { requestId, serviceName, symbol, strategyName, exchangeName } = request;
2366
+ const data = await ioc.markdownMockService.getLiveData(symbol, strategyName, exchangeName);
2367
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2368
+ ioc.loggerService.log("/api/v1/markdown_mock/live_data ok", { request, result: omit(result, "data") });
2369
+ return await micro.send(res, 200, result);
2370
+ }
2371
+ catch (error) {
2372
+ ioc.loggerService.log("/api/v1/markdown_mock/live_data error", { error: functoolsKit.errorData(error) });
2373
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2374
+ }
2375
+ });
2376
+ router$4.post("/api/v1/markdown_mock/live_report", async (req, res) => {
2377
+ try {
2378
+ const request = await micro.json(req);
2379
+ const { requestId, serviceName, symbol, strategyName, exchangeName } = request;
2380
+ const data = await ioc.markdownMockService.getLiveReport(symbol, strategyName, exchangeName);
2381
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2382
+ ioc.loggerService.log("/api/v1/markdown_mock/live_report ok", { request, result: omit(result, "data") });
2383
+ return await micro.send(res, 200, result);
2384
+ }
2385
+ catch (error) {
2386
+ ioc.loggerService.log("/api/v1/markdown_mock/live_report error", { error: functoolsKit.errorData(error) });
2387
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2388
+ }
2389
+ });
2390
+ router$4.post("/api/v1/markdown_mock/breakeven_data", async (req, res) => {
2391
+ try {
2392
+ const request = await micro.json(req);
2393
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2394
+ const data = await ioc.markdownMockService.getBreakevenData(symbol, strategyName, exchangeName, frameName);
2395
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2396
+ ioc.loggerService.log("/api/v1/markdown_mock/breakeven_data ok", { request, result: omit(result, "data") });
2397
+ return await micro.send(res, 200, result);
2398
+ }
2399
+ catch (error) {
2400
+ ioc.loggerService.log("/api/v1/markdown_mock/breakeven_data error", { error: functoolsKit.errorData(error) });
2401
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2402
+ }
2403
+ });
2404
+ router$4.post("/api/v1/markdown_mock/breakeven_report", async (req, res) => {
2405
+ try {
2406
+ const request = await micro.json(req);
2407
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2408
+ const data = await ioc.markdownMockService.getBreakevenReport(symbol, strategyName, exchangeName, frameName);
2409
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2410
+ ioc.loggerService.log("/api/v1/markdown_mock/breakeven_report ok", { request, result: omit(result, "data") });
2411
+ return await micro.send(res, 200, result);
2412
+ }
2413
+ catch (error) {
2414
+ ioc.loggerService.log("/api/v1/markdown_mock/breakeven_report error", { error: functoolsKit.errorData(error) });
2415
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2416
+ }
2417
+ });
2418
+ router$4.post("/api/v1/markdown_mock/risk_data", async (req, res) => {
2419
+ try {
2420
+ const request = await micro.json(req);
2421
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2422
+ const data = await ioc.markdownMockService.getRiskData(symbol, strategyName, exchangeName, frameName);
2423
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2424
+ ioc.loggerService.log("/api/v1/markdown_mock/risk_data ok", { request, result: omit(result, "data") });
2425
+ return await micro.send(res, 200, result);
2426
+ }
2427
+ catch (error) {
2428
+ ioc.loggerService.log("/api/v1/markdown_mock/risk_data error", { error: functoolsKit.errorData(error) });
2429
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2430
+ }
2431
+ });
2432
+ router$4.post("/api/v1/markdown_mock/risk_report", async (req, res) => {
2433
+ try {
2434
+ const request = await micro.json(req);
2435
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2436
+ const data = await ioc.markdownMockService.getRiskReport(symbol, strategyName, exchangeName, frameName);
2437
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2438
+ ioc.loggerService.log("/api/v1/markdown_mock/risk_report ok", { request, result: omit(result, "data") });
2439
+ return await micro.send(res, 200, result);
2440
+ }
2441
+ catch (error) {
2442
+ ioc.loggerService.log("/api/v1/markdown_mock/risk_report error", { error: functoolsKit.errorData(error) });
2443
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2444
+ }
2445
+ });
2446
+ router$4.post("/api/v1/markdown_mock/partial_data", async (req, res) => {
2447
+ try {
2448
+ const request = await micro.json(req);
2449
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2450
+ const data = await ioc.markdownMockService.getPartialData(symbol, strategyName, exchangeName, frameName);
2451
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2452
+ ioc.loggerService.log("/api/v1/markdown_mock/partial_data ok", { request, result: omit(result, "data") });
2453
+ return await micro.send(res, 200, result);
2454
+ }
2455
+ catch (error) {
2456
+ ioc.loggerService.log("/api/v1/markdown_mock/partial_data error", { error: functoolsKit.errorData(error) });
2457
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2458
+ }
2459
+ });
2460
+ router$4.post("/api/v1/markdown_mock/partial_report", async (req, res) => {
2461
+ try {
2462
+ const request = await micro.json(req);
2463
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2464
+ const data = await ioc.markdownMockService.getPartialReport(symbol, strategyName, exchangeName, frameName);
2465
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2466
+ ioc.loggerService.log("/api/v1/markdown_mock/partial_report ok", { request, result: omit(result, "data") });
2467
+ return await micro.send(res, 200, result);
2468
+ }
2469
+ catch (error) {
2470
+ ioc.loggerService.log("/api/v1/markdown_mock/partial_report error", { error: functoolsKit.errorData(error) });
2471
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2472
+ }
2473
+ });
2474
+ router$4.post("/api/v1/markdown_mock/highest_profit_data", async (req, res) => {
2475
+ try {
2476
+ const request = await micro.json(req);
2477
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2478
+ const data = await ioc.markdownMockService.getHighestProfitData(symbol, strategyName, exchangeName, frameName);
2479
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2480
+ ioc.loggerService.log("/api/v1/markdown_mock/highest_profit_data ok", { request, result: omit(result, "data") });
2481
+ return await micro.send(res, 200, result);
2482
+ }
2483
+ catch (error) {
2484
+ ioc.loggerService.log("/api/v1/markdown_mock/highest_profit_data error", { error: functoolsKit.errorData(error) });
2485
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2486
+ }
2487
+ });
2488
+ router$4.post("/api/v1/markdown_mock/highest_profit_report", async (req, res) => {
2489
+ try {
2490
+ const request = await micro.json(req);
2491
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2492
+ const data = await ioc.markdownMockService.getHighestProfitReport(symbol, strategyName, exchangeName, frameName);
2493
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2494
+ ioc.loggerService.log("/api/v1/markdown_mock/highest_profit_report ok", { request, result: omit(result, "data") });
2495
+ return await micro.send(res, 200, result);
2496
+ }
2497
+ catch (error) {
2498
+ ioc.loggerService.log("/api/v1/markdown_mock/highest_profit_report error", { error: functoolsKit.errorData(error) });
2499
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2500
+ }
2501
+ });
2502
+ router$4.post("/api/v1/markdown_mock/schedule_data", async (req, res) => {
2503
+ try {
2504
+ const request = await micro.json(req);
2505
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2506
+ const data = await ioc.markdownMockService.getScheduleData(symbol, strategyName, exchangeName, frameName);
2507
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2508
+ ioc.loggerService.log("/api/v1/markdown_mock/schedule_data ok", { request, result: omit(result, "data") });
2509
+ return await micro.send(res, 200, result);
2510
+ }
2511
+ catch (error) {
2512
+ ioc.loggerService.log("/api/v1/markdown_mock/schedule_data error", { error: functoolsKit.errorData(error) });
2513
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2514
+ }
2515
+ });
2516
+ router$4.post("/api/v1/markdown_mock/schedule_report", async (req, res) => {
2517
+ try {
2518
+ const request = await micro.json(req);
2519
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2520
+ const data = await ioc.markdownMockService.getScheduleReport(symbol, strategyName, exchangeName, frameName);
2521
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2522
+ ioc.loggerService.log("/api/v1/markdown_mock/schedule_report ok", { request, result: omit(result, "data") });
2523
+ return await micro.send(res, 200, result);
2524
+ }
2525
+ catch (error) {
2526
+ ioc.loggerService.log("/api/v1/markdown_mock/schedule_report error", { error: functoolsKit.errorData(error) });
2527
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2528
+ }
2529
+ });
2530
+ router$4.post("/api/v1/markdown_mock/performance_data", async (req, res) => {
2531
+ try {
2532
+ const request = await micro.json(req);
2533
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2534
+ const data = await ioc.markdownMockService.getPerformanceData(symbol, strategyName, exchangeName, frameName);
2535
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2536
+ ioc.loggerService.log("/api/v1/markdown_mock/performance_data ok", { request, result: omit(result, "data") });
2537
+ return await micro.send(res, 200, result);
2538
+ }
2539
+ catch (error) {
2540
+ ioc.loggerService.log("/api/v1/markdown_mock/performance_data error", { error: functoolsKit.errorData(error) });
2541
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2542
+ }
2543
+ });
2544
+ router$4.post("/api/v1/markdown_mock/performance_report", async (req, res) => {
2545
+ try {
2546
+ const request = await micro.json(req);
2547
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2548
+ const data = await ioc.markdownMockService.getPerformanceReport(symbol, strategyName, exchangeName, frameName);
2549
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2550
+ ioc.loggerService.log("/api/v1/markdown_mock/performance_report ok", { request, result: omit(result, "data") });
2551
+ return await micro.send(res, 200, result);
2552
+ }
2553
+ catch (error) {
2554
+ ioc.loggerService.log("/api/v1/markdown_mock/performance_report error", { error: functoolsKit.errorData(error) });
2555
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2556
+ }
2557
+ });
2558
+ router$4.post("/api/v1/markdown_mock/sync_data", async (req, res) => {
2559
+ try {
2560
+ const request = await micro.json(req);
2561
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2562
+ const data = await ioc.markdownMockService.getSyncData(symbol, strategyName, exchangeName, frameName);
2563
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2564
+ ioc.loggerService.log("/api/v1/markdown_mock/sync_data ok", { request, result: omit(result, "data") });
2565
+ return await micro.send(res, 200, result);
2566
+ }
2567
+ catch (error) {
2568
+ ioc.loggerService.log("/api/v1/markdown_mock/sync_data error", { error: functoolsKit.errorData(error) });
2569
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2570
+ }
2571
+ });
2572
+ router$4.post("/api/v1/markdown_mock/sync_report", async (req, res) => {
2573
+ try {
2574
+ const request = await micro.json(req);
2575
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2576
+ const data = await ioc.markdownMockService.getSyncReport(symbol, strategyName, exchangeName, frameName);
2577
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2578
+ ioc.loggerService.log("/api/v1/markdown_mock/sync_report ok", { request, result: omit(result, "data") });
2579
+ return await micro.send(res, 200, result);
2580
+ }
2581
+ catch (error) {
2582
+ ioc.loggerService.log("/api/v1/markdown_mock/sync_report error", { error: functoolsKit.errorData(error) });
2583
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2584
+ }
2585
+ });
2586
+ router$4.post("/api/v1/markdown_mock/heat_data", async (req, res) => {
2587
+ try {
2588
+ const request = await micro.json(req);
2589
+ const { requestId, serviceName, strategyName, exchangeName, frameName } = request;
2590
+ const data = await ioc.markdownMockService.getHeatData(strategyName, exchangeName, frameName);
2591
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2592
+ ioc.loggerService.log("/api/v1/markdown_mock/heat_data ok", { request, result: omit(result, "data") });
2593
+ return await micro.send(res, 200, result);
2594
+ }
2595
+ catch (error) {
2596
+ ioc.loggerService.log("/api/v1/markdown_mock/heat_data error", { error: functoolsKit.errorData(error) });
2597
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2598
+ }
2599
+ });
2600
+ router$4.post("/api/v1/markdown_mock/heat_report", async (req, res) => {
2601
+ try {
2602
+ const request = await micro.json(req);
2603
+ const { requestId, serviceName, strategyName, exchangeName, frameName } = request;
2604
+ const data = await ioc.markdownMockService.getHeatReport(strategyName, exchangeName, frameName);
2605
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2606
+ ioc.loggerService.log("/api/v1/markdown_mock/heat_report ok", { request, result: omit(result, "data") });
2607
+ return await micro.send(res, 200, result);
2608
+ }
2609
+ catch (error) {
2610
+ ioc.loggerService.log("/api/v1/markdown_mock/heat_report error", { error: functoolsKit.errorData(error) });
2611
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2612
+ }
2613
+ });
2614
+ router$4.post("/api/v1/markdown_mock/walker_data", async (req, res) => {
2615
+ try {
2616
+ const request = await micro.json(req);
2617
+ const { requestId, serviceName, symbol, walkerName } = request;
2618
+ const data = await ioc.markdownMockService.getWalkerData(symbol, walkerName);
2619
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2620
+ ioc.loggerService.log("/api/v1/markdown_mock/walker_data ok", { request, result: omit(result, "data") });
2621
+ return await micro.send(res, 200, result);
2622
+ }
2623
+ catch (error) {
2624
+ ioc.loggerService.log("/api/v1/markdown_mock/walker_data error", { error: functoolsKit.errorData(error) });
2625
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2626
+ }
2627
+ });
2628
+ router$4.post("/api/v1/markdown_mock/walker_report", async (req, res) => {
2629
+ try {
2630
+ const request = await micro.json(req);
2631
+ const { requestId, serviceName, symbol, walkerName } = request;
2632
+ const data = await ioc.markdownMockService.getWalkerReport(symbol, walkerName);
2633
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2634
+ ioc.loggerService.log("/api/v1/markdown_mock/walker_report ok", { request, result: omit(result, "data") });
2635
+ return await micro.send(res, 200, result);
2636
+ }
2637
+ catch (error) {
2638
+ ioc.loggerService.log("/api/v1/markdown_mock/walker_report error", { error: functoolsKit.errorData(error) });
2639
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2640
+ }
2641
+ });
2642
+
2643
+ const router$3 = Router({
2644
+ params: true,
2645
+ });
2646
+ router$3.post("/api/v1/markdown_view/backtest_data", async (req, res) => {
2647
+ try {
2648
+ const request = await micro.json(req);
2649
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2650
+ const data = await ioc.markdownViewService.getBacktestData(symbol, strategyName, exchangeName, frameName);
2651
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2652
+ ioc.loggerService.log("/api/v1/markdown_view/backtest_data ok", { request, result: omit(result, "data") });
2653
+ return await micro.send(res, 200, result);
2654
+ }
2655
+ catch (error) {
2656
+ ioc.loggerService.log("/api/v1/markdown_view/backtest_data error", { error: functoolsKit.errorData(error) });
2657
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2658
+ }
2659
+ });
2660
+ router$3.post("/api/v1/markdown_view/backtest_report", async (req, res) => {
2661
+ try {
2662
+ const request = await micro.json(req);
2663
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2664
+ const data = await ioc.markdownViewService.getBacktestReport(symbol, strategyName, exchangeName, frameName);
2665
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2666
+ ioc.loggerService.log("/api/v1/markdown_view/backtest_report ok", { request, result: omit(result, "data") });
2667
+ return await micro.send(res, 200, result);
2668
+ }
2669
+ catch (error) {
2670
+ ioc.loggerService.log("/api/v1/markdown_view/backtest_report error", { error: functoolsKit.errorData(error) });
2671
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2672
+ }
2673
+ });
2674
+ router$3.post("/api/v1/markdown_view/live_data", async (req, res) => {
2675
+ try {
2676
+ const request = await micro.json(req);
2677
+ const { requestId, serviceName, symbol, strategyName, exchangeName } = request;
2678
+ const data = await ioc.markdownViewService.getLiveData(symbol, strategyName, exchangeName);
2679
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2680
+ ioc.loggerService.log("/api/v1/markdown_view/live_data ok", { request, result: omit(result, "data") });
2681
+ return await micro.send(res, 200, result);
2682
+ }
2683
+ catch (error) {
2684
+ ioc.loggerService.log("/api/v1/markdown_view/live_data error", { error: functoolsKit.errorData(error) });
2685
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2686
+ }
2687
+ });
2688
+ router$3.post("/api/v1/markdown_view/live_report", async (req, res) => {
2689
+ try {
2690
+ const request = await micro.json(req);
2691
+ const { requestId, serviceName, symbol, strategyName, exchangeName } = request;
2692
+ const data = await ioc.markdownViewService.getLiveReport(symbol, strategyName, exchangeName);
2693
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2694
+ ioc.loggerService.log("/api/v1/markdown_view/live_report ok", { request, result: omit(result, "data") });
2695
+ return await micro.send(res, 200, result);
2696
+ }
2697
+ catch (error) {
2698
+ ioc.loggerService.log("/api/v1/markdown_view/live_report error", { error: functoolsKit.errorData(error) });
2699
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2700
+ }
2701
+ });
2702
+ router$3.post("/api/v1/markdown_view/breakeven_data", async (req, res) => {
2703
+ try {
2704
+ const request = await micro.json(req);
2705
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
2706
+ const data = await ioc.markdownViewService.getBreakevenData(symbol, strategyName, exchangeName, frameName, backtest);
2707
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2708
+ ioc.loggerService.log("/api/v1/markdown_view/breakeven_data ok", { request, result: omit(result, "data") });
2709
+ return await micro.send(res, 200, result);
2710
+ }
2711
+ catch (error) {
2712
+ ioc.loggerService.log("/api/v1/markdown_view/breakeven_data error", { error: functoolsKit.errorData(error) });
2713
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2714
+ }
2715
+ });
2716
+ router$3.post("/api/v1/markdown_view/breakeven_report", async (req, res) => {
2717
+ try {
2718
+ const request = await micro.json(req);
2719
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
2720
+ const data = await ioc.markdownViewService.getBreakevenReport(symbol, strategyName, exchangeName, frameName, backtest);
2721
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2722
+ ioc.loggerService.log("/api/v1/markdown_view/breakeven_report ok", { request, result: omit(result, "data") });
2723
+ return await micro.send(res, 200, result);
2724
+ }
2725
+ catch (error) {
2726
+ ioc.loggerService.log("/api/v1/markdown_view/breakeven_report error", { error: functoolsKit.errorData(error) });
2727
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2728
+ }
2729
+ });
2730
+ router$3.post("/api/v1/markdown_view/risk_data", async (req, res) => {
2731
+ try {
2732
+ const request = await micro.json(req);
2733
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
2734
+ const data = await ioc.markdownViewService.getRiskData(symbol, strategyName, exchangeName, frameName, backtest);
2735
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2736
+ ioc.loggerService.log("/api/v1/markdown_view/risk_data ok", { request, result: omit(result, "data") });
2737
+ return await micro.send(res, 200, result);
2738
+ }
2739
+ catch (error) {
2740
+ ioc.loggerService.log("/api/v1/markdown_view/risk_data error", { error: functoolsKit.errorData(error) });
2741
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2742
+ }
2743
+ });
2744
+ router$3.post("/api/v1/markdown_view/risk_report", async (req, res) => {
2745
+ try {
2746
+ const request = await micro.json(req);
2747
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
2748
+ const data = await ioc.markdownViewService.getRiskReport(symbol, strategyName, exchangeName, frameName, backtest);
2749
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2750
+ ioc.loggerService.log("/api/v1/markdown_view/risk_report ok", { request, result: omit(result, "data") });
2751
+ return await micro.send(res, 200, result);
2752
+ }
2753
+ catch (error) {
2754
+ ioc.loggerService.log("/api/v1/markdown_view/risk_report error", { error: functoolsKit.errorData(error) });
2755
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2756
+ }
2757
+ });
2758
+ router$3.post("/api/v1/markdown_view/partial_data", async (req, res) => {
2759
+ try {
2760
+ const request = await micro.json(req);
2761
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
2762
+ const data = await ioc.markdownViewService.getPartialData(symbol, strategyName, exchangeName, frameName, backtest);
2763
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2764
+ ioc.loggerService.log("/api/v1/markdown_view/partial_data ok", { request, result: omit(result, "data") });
2765
+ return await micro.send(res, 200, result);
2766
+ }
2767
+ catch (error) {
2768
+ ioc.loggerService.log("/api/v1/markdown_view/partial_data error", { error: functoolsKit.errorData(error) });
2769
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2770
+ }
2771
+ });
2772
+ router$3.post("/api/v1/markdown_view/partial_report", async (req, res) => {
2773
+ try {
2774
+ const request = await micro.json(req);
2775
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
2776
+ const data = await ioc.markdownViewService.getPartialReport(symbol, strategyName, exchangeName, frameName, backtest);
2777
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2778
+ ioc.loggerService.log("/api/v1/markdown_view/partial_report ok", { request, result: omit(result, "data") });
2779
+ return await micro.send(res, 200, result);
2780
+ }
2781
+ catch (error) {
2782
+ ioc.loggerService.log("/api/v1/markdown_view/partial_report error", { error: functoolsKit.errorData(error) });
2783
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2784
+ }
2785
+ });
2786
+ router$3.post("/api/v1/markdown_view/highest_profit_data", async (req, res) => {
2787
+ try {
2788
+ const request = await micro.json(req);
2789
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
2790
+ const data = await ioc.markdownViewService.getHighestProfitData(symbol, strategyName, exchangeName, frameName, backtest);
2791
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2792
+ ioc.loggerService.log("/api/v1/markdown_view/highest_profit_data ok", { request, result: omit(result, "data") });
2793
+ return await micro.send(res, 200, result);
2794
+ }
2795
+ catch (error) {
2796
+ ioc.loggerService.log("/api/v1/markdown_view/highest_profit_data error", { error: functoolsKit.errorData(error) });
2797
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2798
+ }
2799
+ });
2800
+ router$3.post("/api/v1/markdown_view/highest_profit_report", async (req, res) => {
2801
+ try {
2802
+ const request = await micro.json(req);
2803
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
2804
+ const data = await ioc.markdownViewService.getHighestProfitReport(symbol, strategyName, exchangeName, frameName, backtest);
2805
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2806
+ ioc.loggerService.log("/api/v1/markdown_view/highest_profit_report ok", { request, result: omit(result, "data") });
2807
+ return await micro.send(res, 200, result);
2808
+ }
2809
+ catch (error) {
2810
+ ioc.loggerService.log("/api/v1/markdown_view/highest_profit_report error", { error: functoolsKit.errorData(error) });
2811
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2812
+ }
2813
+ });
2814
+ router$3.post("/api/v1/markdown_view/schedule_data", async (req, res) => {
2815
+ try {
2816
+ const request = await micro.json(req);
2817
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
2818
+ const data = await ioc.markdownViewService.getScheduleData(symbol, strategyName, exchangeName, frameName, backtest);
2819
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2820
+ ioc.loggerService.log("/api/v1/markdown_view/schedule_data ok", { request, result: omit(result, "data") });
2821
+ return await micro.send(res, 200, result);
2822
+ }
2823
+ catch (error) {
2824
+ ioc.loggerService.log("/api/v1/markdown_view/schedule_data error", { error: functoolsKit.errorData(error) });
2825
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2826
+ }
2827
+ });
2828
+ router$3.post("/api/v1/markdown_view/schedule_report", async (req, res) => {
2829
+ try {
2830
+ const request = await micro.json(req);
2831
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
2832
+ const data = await ioc.markdownViewService.getScheduleReport(symbol, strategyName, exchangeName, frameName, backtest);
2833
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2834
+ ioc.loggerService.log("/api/v1/markdown_view/schedule_report ok", { request, result: omit(result, "data") });
2835
+ return await micro.send(res, 200, result);
2836
+ }
2837
+ catch (error) {
2838
+ ioc.loggerService.log("/api/v1/markdown_view/schedule_report error", { error: functoolsKit.errorData(error) });
2839
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2840
+ }
2841
+ });
2842
+ router$3.post("/api/v1/markdown_view/performance_data", async (req, res) => {
2843
+ try {
2844
+ const request = await micro.json(req);
2845
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
2846
+ const data = await ioc.markdownViewService.getPerformanceData(symbol, strategyName, exchangeName, frameName, backtest);
2847
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2848
+ ioc.loggerService.log("/api/v1/markdown_view/performance_data ok", { request, result: omit(result, "data") });
2849
+ return await micro.send(res, 200, result);
2850
+ }
2851
+ catch (error) {
2852
+ ioc.loggerService.log("/api/v1/markdown_view/performance_data error", { error: functoolsKit.errorData(error) });
2853
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2854
+ }
2855
+ });
2856
+ router$3.post("/api/v1/markdown_view/performance_report", async (req, res) => {
2857
+ try {
2858
+ const request = await micro.json(req);
2859
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
2860
+ const data = await ioc.markdownViewService.getPerformanceReport(symbol, strategyName, exchangeName, frameName, backtest);
2861
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2862
+ ioc.loggerService.log("/api/v1/markdown_view/performance_report ok", { request, result: omit(result, "data") });
2863
+ return await micro.send(res, 200, result);
2864
+ }
2865
+ catch (error) {
2866
+ ioc.loggerService.log("/api/v1/markdown_view/performance_report error", { error: functoolsKit.errorData(error) });
2867
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2868
+ }
2869
+ });
2870
+ router$3.post("/api/v1/markdown_view/sync_data", async (req, res) => {
2871
+ try {
2872
+ const request = await micro.json(req);
2873
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
2874
+ const data = await ioc.markdownViewService.getSyncData(symbol, strategyName, exchangeName, frameName, backtest);
2875
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2876
+ ioc.loggerService.log("/api/v1/markdown_view/sync_data ok", { request, result: omit(result, "data") });
2877
+ return await micro.send(res, 200, result);
2878
+ }
2879
+ catch (error) {
2880
+ ioc.loggerService.log("/api/v1/markdown_view/sync_data error", { error: functoolsKit.errorData(error) });
2881
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2882
+ }
2883
+ });
2884
+ router$3.post("/api/v1/markdown_view/sync_report", async (req, res) => {
2885
+ try {
2886
+ const request = await micro.json(req);
2887
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
2888
+ const data = await ioc.markdownViewService.getSyncReport(symbol, strategyName, exchangeName, frameName, backtest);
2889
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2890
+ ioc.loggerService.log("/api/v1/markdown_view/sync_report ok", { request, result: omit(result, "data") });
2891
+ return await micro.send(res, 200, result);
2892
+ }
2893
+ catch (error) {
2894
+ ioc.loggerService.log("/api/v1/markdown_view/sync_report error", { error: functoolsKit.errorData(error) });
2895
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2896
+ }
2897
+ });
2898
+ router$3.post("/api/v1/markdown_view/heat_data", async (req, res) => {
2899
+ try {
2900
+ const request = await micro.json(req);
2901
+ const { requestId, serviceName, strategyName, exchangeName, frameName, backtest } = request;
2902
+ const data = await ioc.markdownViewService.getHeatData(strategyName, exchangeName, frameName, backtest);
2903
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2904
+ ioc.loggerService.log("/api/v1/markdown_view/heat_data ok", { request, result: omit(result, "data") });
2905
+ return await micro.send(res, 200, result);
2906
+ }
2907
+ catch (error) {
2908
+ ioc.loggerService.log("/api/v1/markdown_view/heat_data error", { error: functoolsKit.errorData(error) });
2909
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2910
+ }
2911
+ });
2912
+ router$3.post("/api/v1/markdown_view/heat_report", async (req, res) => {
2913
+ try {
2914
+ const request = await micro.json(req);
2915
+ const { requestId, serviceName, strategyName, exchangeName, frameName, backtest } = request;
2916
+ const data = await ioc.markdownViewService.getHeatReport(strategyName, exchangeName, frameName, backtest);
2917
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2918
+ ioc.loggerService.log("/api/v1/markdown_view/heat_report ok", { request, result: omit(result, "data") });
2919
+ return await micro.send(res, 200, result);
2920
+ }
2921
+ catch (error) {
2922
+ ioc.loggerService.log("/api/v1/markdown_view/heat_report error", { error: functoolsKit.errorData(error) });
2923
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2924
+ }
2925
+ });
2926
+ router$3.post("/api/v1/markdown_view/walker_data", async (req, res) => {
2927
+ try {
2928
+ const request = await micro.json(req);
2929
+ const { requestId, serviceName, symbol, walkerName } = request;
2930
+ const data = await ioc.markdownViewService.getWalkerData(symbol, walkerName);
2931
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2932
+ ioc.loggerService.log("/api/v1/markdown_view/walker_data ok", { request, result: omit(result, "data") });
2933
+ return await micro.send(res, 200, result);
2934
+ }
2935
+ catch (error) {
2936
+ ioc.loggerService.log("/api/v1/markdown_view/walker_data error", { error: functoolsKit.errorData(error) });
2937
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2938
+ }
2939
+ });
2940
+ router$3.post("/api/v1/markdown_view/walker_report", async (req, res) => {
2941
+ try {
2942
+ const request = await micro.json(req);
2943
+ const { requestId, serviceName, symbol, walkerName } = request;
2944
+ const data = await ioc.markdownViewService.getWalkerReport(symbol, walkerName);
2945
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2946
+ ioc.loggerService.log("/api/v1/markdown_view/walker_report ok", { request, result: omit(result, "data") });
2947
+ return await micro.send(res, 200, result);
2948
+ }
2949
+ catch (error) {
2950
+ ioc.loggerService.log("/api/v1/markdown_view/walker_report error", { error: functoolsKit.errorData(error) });
2951
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2952
+ }
2953
+ });
2954
+
1982
2955
  const router$2 = Router({
1983
2956
  params: true,
1984
2957
  });
@@ -2010,6 +2983,34 @@ router$2.post("/api/v1/global/signal_pending_price", async (req, res) => {
2010
2983
  });
2011
2984
  }
2012
2985
  });
2986
+ router$2.post("/api/v1/global/backtest_list", async (req, res) => {
2987
+ try {
2988
+ const request = await micro.json(req);
2989
+ const { requestId, serviceName } = request;
2990
+ const data = await ioc.backtestMetaService.list();
2991
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2992
+ ioc.loggerService.log("/api/v1/global/backtest_list ok", { request, result: omit(result, "data") });
2993
+ return await micro.send(res, 200, result);
2994
+ }
2995
+ catch (error) {
2996
+ ioc.loggerService.log("/api/v1/global/backtest_list error", { error: functoolsKit.errorData(error) });
2997
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
2998
+ }
2999
+ });
3000
+ router$2.post("/api/v1/global/live_list", async (req, res) => {
3001
+ try {
3002
+ const request = await micro.json(req);
3003
+ const { requestId, serviceName } = request;
3004
+ const data = await ioc.liveMetaService.list();
3005
+ const result = { data, status: "ok", error: "", requestId, serviceName };
3006
+ ioc.loggerService.log("/api/v1/global/live_list ok", { request, result: omit(result, "data") });
3007
+ return await micro.send(res, 200, result);
3008
+ }
3009
+ catch (error) {
3010
+ ioc.loggerService.log("/api/v1/global/live_list error", { error: functoolsKit.errorData(error) });
3011
+ return await micro.send(res, 200, { status: "error", error: functoolsKit.getErrorMessage(error) });
3012
+ }
3013
+ });
2013
3014
 
2014
3015
  const require$1 = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)));
2015
3016
  function getPublicPath() {
@@ -2022,20 +3023,26 @@ const router = Router({
2022
3023
  params: true,
2023
3024
  });
2024
3025
  router.all("/api/v1/health/*", (req, res) => {
2025
- return router$7(req, res, finalhandler(req, res));
3026
+ return router$9(req, res, finalhandler(req, res));
2026
3027
  });
2027
3028
  router.all("/api/v1/mock/*", (req, res) => {
2028
- return router$6(req, res, finalhandler(req, res));
3029
+ return router$8(req, res, finalhandler(req, res));
2029
3030
  });
2030
3031
  router.all("/api/v1/view/*", (req, res) => {
2031
- return router$5(req, res, finalhandler(req, res));
3032
+ return router$7(req, res, finalhandler(req, res));
2032
3033
  });
2033
- router.all("/icon/*", (req, res) => {
3034
+ router.all("/api/v1/markdown_mock/*", (req, res) => {
2034
3035
  return router$4(req, res, finalhandler(req, res));
2035
3036
  });
2036
- router.all("/api/v1/dict/*", (req, res) => {
3037
+ router.all("/api/v1/markdown_view/*", (req, res) => {
2037
3038
  return router$3(req, res, finalhandler(req, res));
2038
3039
  });
3040
+ router.all("/icon/*", (req, res) => {
3041
+ return router$6(req, res, finalhandler(req, res));
3042
+ });
3043
+ router.all("/api/v1/dict/*", (req, res) => {
3044
+ return router$5(req, res, finalhandler(req, res));
3045
+ });
2039
3046
  router.all("/api/v1/global/*", (req, res) => {
2040
3047
  return router$2(req, res, finalhandler(req, res));
2041
3048
  });