@backtest-kit/ui 9.5.0 → 9.7.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 (37) hide show
  1. package/README.md +254 -254
  2. package/build/index.cjs +243 -170
  3. package/build/index.mjs +122 -67
  4. package/build/modules/frontend/build/3rdparty/ace_1.4.12/ace.js +21337 -21337
  5. package/build/modules/frontend/build/3rdparty/ace_1.4.12/mode-javascript.js +797 -797
  6. package/build/modules/frontend/build/3rdparty/ace_1.4.12/theme-chrome.js +137 -137
  7. package/build/modules/frontend/build/3rdparty/ace_1.4.12/theme-twilight.js +115 -115
  8. package/build/modules/frontend/build/3rdparty/ace_1.4.12/worker-javascript.js +15012 -15012
  9. package/build/modules/frontend/build/3rdparty/qfchart_0.8.7/echarts.min.js +45 -45
  10. package/build/modules/frontend/build/assets/{Article-CPvMAlis.js → Article-CSLbW4S3.js} +1 -1
  11. package/build/modules/frontend/build/assets/{Background-BcBJxoQM.js → Background-D7AbUVrH.js} +1 -1
  12. package/build/modules/frontend/build/assets/{IconPhoto-C_ikll5b.js → IconPhoto-dJuN2ucb.js} +1 -1
  13. package/build/modules/frontend/build/assets/{KeyboardArrowLeft-wo8yIkQt.js → KeyboardArrowLeft-BC2GbqOB.js} +1 -1
  14. package/build/modules/frontend/build/assets/{PictureAsPdfOutlined-B2Y3DrmN.js → PictureAsPdfOutlined-BkS0a0A0.js} +1 -1
  15. package/build/modules/frontend/build/assets/{Refresh-DWwANC2C.js → Refresh-GywkMeC9.js} +1 -1
  16. package/build/modules/frontend/build/assets/emitters-D2HKeJSt.js +1 -0
  17. package/build/modules/frontend/build/assets/{hasRouteMatch-DxP9EIea.js → hasRouteMatch-DaOdXEtJ.js} +1 -1
  18. package/build/modules/frontend/build/assets/{html2canvas-BEYpPxnI.js → html2canvas-D40IxDXU.js} +1 -1
  19. package/build/modules/frontend/build/assets/{index-Csk3lyh_.js → index-BDWtjw8t.js} +1 -1
  20. package/build/modules/frontend/build/assets/{index-U9wO0mPn.js → index-BjNxXXRd.js} +1 -1
  21. package/build/modules/frontend/build/assets/{index-BLgqZVUW.js → index-BoVUr2mk.js} +5 -5
  22. package/build/modules/frontend/build/assets/{index-Ct4kOSwZ.js → index-C7fDq8VY.js} +1 -1
  23. package/build/modules/frontend/build/assets/{index-xcEpTc6J.js → index-CcP46J0C.js} +1 -1
  24. package/build/modules/frontend/build/assets/{index-DYIV_QwZ.js → index-CcnWYHDR.js} +1 -1
  25. package/build/modules/frontend/build/assets/{index-nQBp5LZR.js → index-CePvvRqq.js} +1 -1
  26. package/build/modules/frontend/build/assets/{index-Bd51gA9H.js → index-CknRQapy.js} +1 -1
  27. package/build/modules/frontend/build/assets/{index-C2FRNjrR.js → index-CyN7sutq.js} +1 -1
  28. package/build/modules/frontend/build/assets/{index-5Dtu864w.js → index-D9GOtTmB.js} +1 -1
  29. package/build/modules/frontend/build/assets/{index-BqQhlvLk.js → index-DWnTHxHy.js} +1 -1
  30. package/build/modules/frontend/build/assets/{index-Q1e8Guut.js → index-IkD99_6_.js} +1 -1
  31. package/build/modules/frontend/build/assets/{index-BW6mJqS7.js → index-zihyCAvY.js} +1 -1
  32. package/build/modules/frontend/build/assets/{index.es-FwYn4ntA.js → index.es-ByhwyzTS.js} +1 -1
  33. package/build/modules/frontend/build/assets/{markdownit-DifHDTjI.js → markdownit-DHhYBfkC.js} +1 -1
  34. package/build/modules/frontend/build/index.html +87 -87
  35. package/build/modules/frontend/build/manifest.json +23 -23
  36. package/package.json +118 -118
  37. package/build/modules/frontend/build/assets/emitters-Dr0rm1Id.js +0 -1
package/build/index.cjs CHANGED
@@ -8,15 +8,38 @@ var finalhandler = require('finalhandler');
8
8
  var serveHandler = require('serve-handler');
9
9
  var os = require('os');
10
10
  var diKit = require('di-kit');
11
- var backtestKit = require('backtest-kit');
11
+ var BacktestKit = require('backtest-kit');
12
12
  var fs = require('fs/promises');
13
13
  var path = require('path');
14
14
  var mime = require('mime-types');
15
15
  var crypto = require('crypto');
16
16
  var module$1 = require('module');
17
17
  var fs$1 = require('fs');
18
+ var node_module = require('node:module');
19
+ var node_path = require('node:path');
20
+ var node_url = require('node:url');
21
+ var vm = require('vm');
18
22
 
19
23
  var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
24
+ function _interopNamespaceDefault(e) {
25
+ var n = Object.create(null);
26
+ if (e) {
27
+ Object.keys(e).forEach(function (k) {
28
+ if (k !== 'default') {
29
+ var d = Object.getOwnPropertyDescriptor(e, k);
30
+ Object.defineProperty(n, k, d.get ? d : {
31
+ enumerable: true,
32
+ get: function () { return e[k]; }
33
+ });
34
+ }
35
+ });
36
+ }
37
+ n.default = e;
38
+ return Object.freeze(n);
39
+ }
40
+
41
+ var BacktestKit__namespace = /*#__PURE__*/_interopNamespaceDefault(BacktestKit);
42
+
20
43
  const CC_WWWROOT_PATH = process.env.CC_WWWROOT_PATH || "";
21
44
  const CC_WWWROOT_HOST = process.env.CC_WWWROOT_HOST || "0.0.0.0";
22
45
  const CC_WWWROOT_PORT = parseInt(process.env.CC_WWWROOT_PORT) || 60050;
@@ -26,10 +49,10 @@ const CC_ENABLE_MOCK = !!parseInt(process.env.CC_ENABLE_MOCK) || false;
26
49
 
27
50
  const serveSubject = new functoolsKit.BehaviorSubject();
28
51
 
29
- const router$b = Router({
52
+ const router$c = Router({
30
53
  params: true,
31
54
  });
32
- router$b.get("/api/v1/health/health_check", async (req, res) => {
55
+ router$c.get("/api/v1/health/health_check", async (req, res) => {
33
56
  const [cpuLoad] = os.loadavg();
34
57
  return await micro.send(res, 200, {
35
58
  uptime: process.uptime(),
@@ -147,8 +170,8 @@ class ExchangeService {
147
170
  }
148
171
  const offsetMs = tick * step * 60 * 1000;
149
172
  const sDate = dto.signalStartTime - offsetMs;
150
- const eDate = Math.min(dto.signalStopTime + offsetMs, backtestKit.alignToInterval(new Date(), "1m").getTime());
151
- return await backtestKit.Exchange.getRawCandles(dto.symbol, dto.interval, {
173
+ const eDate = Math.min(dto.signalStopTime + offsetMs, BacktestKit.alignToInterval(new Date(), "1m").getTime());
174
+ return await BacktestKit.Exchange.getRawCandles(dto.symbol, dto.interval, {
152
175
  exchangeName: dto.exchangeName,
153
176
  }, undefined, sDate, eDate);
154
177
  };
@@ -163,8 +186,8 @@ class ExchangeService {
163
186
  }
164
187
  const offsetMs = tick * step * 60 * 1000;
165
188
  const sDate = dto.currentTime - offsetMs;
166
- const eDate = Math.min(dto.currentTime + offsetMs, backtestKit.alignToInterval(new Date(), "1m").getTime());
167
- return await backtestKit.Exchange.getRawCandles(dto.symbol, dto.interval, {
189
+ const eDate = Math.min(dto.currentTime + offsetMs, BacktestKit.alignToInterval(new Date(), "1m").getTime());
190
+ return await BacktestKit.Exchange.getRawCandles(dto.symbol, dto.interval, {
168
191
  exchangeName: dto.exchangeName,
169
192
  }, undefined, sDate, eDate);
170
193
  };
@@ -172,7 +195,7 @@ class ExchangeService {
172
195
  this.loggerService.log("exchangeService getLastCandles", {
173
196
  dto,
174
197
  });
175
- return await backtestKit.Exchange.getCandles(dto.symbol, dto.interval, dto.limit, {
198
+ return await BacktestKit.Exchange.getCandles(dto.symbol, dto.interval, dto.limit, {
176
199
  exchangeName: dto.exchangeName,
177
200
  });
178
201
  };
@@ -180,11 +203,11 @@ class ExchangeService {
180
203
  this.loggerService.log("exchangeService getRawCandles", {
181
204
  dto,
182
205
  });
183
- const [exchange = null] = await backtestKit.listExchangeSchema();
206
+ const [exchange = null] = await BacktestKit.listExchangeSchema();
184
207
  if (exchange === null) {
185
208
  throw new Error("exchangeService getRawCandles no exchange registered");
186
209
  }
187
- return await backtestKit.Exchange.getRawCandles(dto.symbol, dto.interval, {
210
+ return await BacktestKit.Exchange.getRawCandles(dto.symbol, dto.interval, {
188
211
  exchangeName: exchange.exchangeName,
189
212
  }, dto.limit, dto.sDate, dto.eDate);
190
213
  };
@@ -360,7 +383,7 @@ class ExchangeMockService {
360
383
  symbol: signal.symbol,
361
384
  exchangeName: signal.exchangeName,
362
385
  signalStartTime: eventAt,
363
- signalStopTime: backtestKit.alignToInterval(new Date(updatedAt), interval).getTime(),
386
+ signalStopTime: BacktestKit.alignToInterval(new Date(updatedAt), interval).getTime(),
364
387
  interval,
365
388
  });
366
389
  };
@@ -369,9 +392,9 @@ class ExchangeMockService {
369
392
  symbol,
370
393
  interval,
371
394
  });
372
- const [backtestItem] = await backtestKit.Backtest.list();
373
- const [liveItem] = await backtestKit.Live.list();
374
- const [exchangeItem] = await backtestKit.listExchangeSchema();
395
+ const [backtestItem] = await BacktestKit.Backtest.list();
396
+ const [liveItem] = await BacktestKit.Live.list();
397
+ const [exchangeItem] = await BacktestKit.listExchangeSchema();
375
398
  if (backtestItem) {
376
399
  return await this.exchangeService.getLastCandles({
377
400
  symbol,
@@ -817,7 +840,7 @@ class NotificationViewService {
817
840
  if (CC_ENABLE_MOCK) {
818
841
  return await this.notificationMockService.findByFilter(filterData, limit, offset);
819
842
  }
820
- if (!backtestKit.Notification.enable.hasValue()) {
843
+ if (!BacktestKit.Notification.enable.hasValue()) {
821
844
  console.warn("@backtest-kit/ui notificationViewService findByFilter notifications not enabled");
822
845
  return [];
823
846
  }
@@ -842,15 +865,15 @@ class NotificationViewService {
842
865
  if (CC_ENABLE_MOCK) {
843
866
  return await this.notificationMockService.getList();
844
867
  }
845
- if (!backtestKit.Notification.enable.hasValue()) {
868
+ if (!BacktestKit.Notification.enable.hasValue()) {
846
869
  console.warn("@backtest-kit/ui notificationViewService getList notifications not enabled");
847
870
  return [];
848
871
  }
849
872
  const notificationList = [];
850
- for (const notification of await backtestKit.Notification.getData(false)) {
873
+ for (const notification of await BacktestKit.Notification.getData(false)) {
851
874
  notificationList.push(notification);
852
875
  }
853
- for (const notification of await backtestKit.Notification.getData(true)) {
876
+ for (const notification of await BacktestKit.Notification.getData(true)) {
854
877
  notificationList.push(notification);
855
878
  }
856
879
  notificationList.sort((a, b) => {
@@ -875,7 +898,7 @@ class NotificationViewService {
875
898
  if (CC_ENABLE_MOCK) {
876
899
  return await this.notificationMockService.getOne(id);
877
900
  }
878
- if (!backtestKit.Notification.enable.hasValue()) {
901
+ if (!BacktestKit.Notification.enable.hasValue()) {
879
902
  console.warn("@backtest-kit/ui notificationViewService getOne notifications not enabled");
880
903
  return null;
881
904
  }
@@ -896,22 +919,22 @@ class StorageViewService {
896
919
  if (CC_ENABLE_MOCK) {
897
920
  return await this.storageMockService.findSignalById(signalId);
898
921
  }
899
- if (!backtestKit.Storage.enable.hasValue()) {
922
+ if (!BacktestKit.Storage.enable.hasValue()) {
900
923
  console.warn("@backtest-kit/ui storageViewService findSignalById storage not enabled");
901
924
  return null;
902
925
  }
903
- return await backtestKit.Storage.findSignalById(signalId);
926
+ return await BacktestKit.Storage.findSignalById(signalId);
904
927
  };
905
928
  this.listSignalLive = async () => {
906
929
  this.loggerService.log("storageViewService listSignalLive");
907
930
  if (CC_ENABLE_MOCK) {
908
931
  return await this.storageMockService.listSignalLive();
909
932
  }
910
- if (!backtestKit.Storage.enable.hasValue()) {
933
+ if (!BacktestKit.Storage.enable.hasValue()) {
911
934
  console.warn("@backtest-kit/ui storageViewService listSignalLive storage not enabled");
912
935
  return [];
913
936
  }
914
- const signalList = await backtestKit.Storage.listSignalLive();
937
+ const signalList = await BacktestKit.Storage.listSignalLive();
915
938
  signalList.sort((a, b) => {
916
939
  const aHasTime = "createdAt" in a;
917
940
  const bHasTime = "createdAt" in b;
@@ -932,11 +955,11 @@ class StorageViewService {
932
955
  if (CC_ENABLE_MOCK) {
933
956
  return await this.storageMockService.listSignalBacktest();
934
957
  }
935
- if (!backtestKit.Storage.enable.hasValue()) {
958
+ if (!BacktestKit.Storage.enable.hasValue()) {
936
959
  console.warn("@backtest-kit/ui storageViewService listSignalBacktest storage not enabled");
937
960
  return [];
938
961
  }
939
- const signalList = await backtestKit.Storage.listSignalBacktest();
962
+ const signalList = await BacktestKit.Storage.listSignalBacktest();
940
963
  signalList.sort((a, b) => {
941
964
  const aHasTime = "createdAt" in a;
942
965
  const bHasTime = "createdAt" in b;
@@ -1003,7 +1026,7 @@ class ExchangeViewService {
1003
1026
  symbol: signal.symbol,
1004
1027
  exchangeName: signal.exchangeName,
1005
1028
  signalStartTime: eventAt,
1006
- signalStopTime: backtestKit.alignToInterval(new Date(updatedAt), interval).getTime(),
1029
+ signalStopTime: BacktestKit.alignToInterval(new Date(updatedAt), interval).getTime(),
1007
1030
  interval,
1008
1031
  });
1009
1032
  };
@@ -1015,9 +1038,9 @@ class ExchangeViewService {
1015
1038
  if (CC_ENABLE_MOCK) {
1016
1039
  return await this.exchangeMockService.getLastCandles(symbol, interval);
1017
1040
  }
1018
- const [backtestItem] = await backtestKit.Backtest.list();
1019
- const [liveItem] = await backtestKit.Live.list();
1020
- const [exchangeItem] = await backtestKit.listExchangeSchema();
1041
+ const [backtestItem] = await BacktestKit.Backtest.list();
1042
+ const [liveItem] = await BacktestKit.Live.list();
1043
+ const [exchangeItem] = await BacktestKit.listExchangeSchema();
1021
1044
  if (backtestItem) {
1022
1045
  return await this.exchangeService.getLastCandles({
1023
1046
  symbol,
@@ -1084,7 +1107,7 @@ class LogViewService {
1084
1107
  if (CC_ENABLE_MOCK) {
1085
1108
  return await this.logMockService.getList();
1086
1109
  }
1087
- const logList = await backtestKit.Log.getList();
1110
+ const logList = await BacktestKit.Log.getList();
1088
1111
  logList.sort((a, b) => b.timestamp - a.timestamp);
1089
1112
  return logList;
1090
1113
  };
@@ -1113,14 +1136,14 @@ class StatusViewService {
1113
1136
  const liveList = await this.statusMockService.getStatusList();
1114
1137
  return liveList.filter(({ status }) => status === "pending");
1115
1138
  }
1116
- return await backtestKit.Live.list();
1139
+ return await BacktestKit.Live.list();
1117
1140
  };
1118
1141
  this.getStatusMap = async () => {
1119
1142
  this.loggerService.log("statusViewService getStatusMap");
1120
1143
  if (CC_ENABLE_MOCK) {
1121
1144
  return await this.statusMockService.getStatusMap();
1122
1145
  }
1123
- const liveList = await backtestKit.Live.list();
1146
+ const liveList = await BacktestKit.Live.list();
1124
1147
  return liveList
1125
1148
  .filter(({ status }) => status === "pending")
1126
1149
  .reduce((acm, cur) => ({ ...acm, [cur.id]: cur }), {});
@@ -1132,44 +1155,44 @@ class StatusViewService {
1132
1155
  if (CC_ENABLE_MOCK) {
1133
1156
  return await this.statusMockService.getStatusOne(id);
1134
1157
  }
1135
- const liveList = await backtestKit.Live.list();
1158
+ const liveList = await BacktestKit.Live.list();
1136
1159
  const liveOne = liveList.find((live) => live.id === id);
1137
1160
  if (!liveOne) {
1138
1161
  throw new Error(`Live with id ${id} not found`);
1139
1162
  }
1140
1163
  const { symbol, strategyName, exchangeName } = liveOne;
1141
- const currentPrice = await backtestKit.Exchange.getAveragePrice(symbol, {
1164
+ const currentPrice = await BacktestKit.Exchange.getAveragePrice(symbol, {
1142
1165
  exchangeName,
1143
1166
  });
1144
- const pendingSignal = await backtestKit.Live.getPendingSignal(symbol, currentPrice, {
1167
+ const pendingSignal = await BacktestKit.Live.getPendingSignal(symbol, currentPrice, {
1145
1168
  strategyName,
1146
1169
  exchangeName,
1147
1170
  });
1148
1171
  if (!pendingSignal) {
1149
1172
  return null;
1150
1173
  }
1151
- const positionLevels = await backtestKit.Live.getPositionLevels(symbol, {
1174
+ const positionLevels = await BacktestKit.Live.getPositionLevels(symbol, {
1152
1175
  strategyName,
1153
1176
  exchangeName,
1154
1177
  });
1155
1178
  if (!positionLevels) {
1156
1179
  return null;
1157
1180
  }
1158
- const positionEntries = await backtestKit.Live.getPositionEntries(symbol, {
1181
+ const positionEntries = await BacktestKit.Live.getPositionEntries(symbol, {
1159
1182
  strategyName,
1160
1183
  exchangeName,
1161
1184
  });
1162
1185
  if (!positionEntries) {
1163
1186
  return null;
1164
1187
  }
1165
- const positionPartials = await backtestKit.Live.getPositionPartials(symbol, {
1188
+ const positionPartials = await BacktestKit.Live.getPositionPartials(symbol, {
1166
1189
  strategyName,
1167
1190
  exchangeName,
1168
1191
  });
1169
1192
  if (!positionPartials) {
1170
1193
  return null;
1171
1194
  }
1172
- const timestamp = await backtestKit.lib.timeMetaService.getTimestamp(pendingSignal.symbol, {
1195
+ const timestamp = await BacktestKit.lib.timeMetaService.getTimestamp(pendingSignal.symbol, {
1173
1196
  strategyName: pendingSignal.strategyName,
1174
1197
  exchangeName: pendingSignal.exchangeName,
1175
1198
  frameName: pendingSignal.frameName,
@@ -1210,9 +1233,9 @@ class StatusViewService {
1210
1233
  return this.statusMockService.getStatusInfo();
1211
1234
  }
1212
1235
  {
1213
- const [backtestTarget = null] = await backtestKit.Backtest.list();
1236
+ const [backtestTarget = null] = await BacktestKit.Backtest.list();
1214
1237
  if (backtestTarget) {
1215
- const currentHeat = await backtestKit.Heat.getData({
1238
+ const currentHeat = await BacktestKit.Heat.getData({
1216
1239
  strategyName: backtestTarget.strategyName,
1217
1240
  exchangeName: backtestTarget.exchangeName,
1218
1241
  frameName: backtestTarget.frameName,
@@ -1243,9 +1266,9 @@ class StatusViewService {
1243
1266
  }
1244
1267
  }
1245
1268
  {
1246
- const [liveTarget = null] = await backtestKit.Live.list();
1269
+ const [liveTarget = null] = await BacktestKit.Live.list();
1247
1270
  if (liveTarget) {
1248
- const currentHeat = await backtestKit.Heat.getData({
1271
+ const currentHeat = await BacktestKit.Heat.getData({
1249
1272
  strategyName: liveTarget.strategyName,
1250
1273
  exchangeName: liveTarget.exchangeName,
1251
1274
  frameName: "",
@@ -1290,14 +1313,14 @@ class MarkdownViewService {
1290
1313
  if (CC_ENABLE_MOCK) {
1291
1314
  return await this.markdownMockService.getStrategyData(symbol, strategyName, exchangeName, frameName);
1292
1315
  }
1293
- return await backtestKit.Strategy.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
1316
+ return await BacktestKit.Strategy.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
1294
1317
  };
1295
1318
  this.getStrategyReport = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
1296
1319
  this.loggerService.log("markdownViewService getStrategyReport", { symbol, strategyName, exchangeName, frameName, backtest });
1297
1320
  if (CC_ENABLE_MOCK) {
1298
1321
  return await this.markdownMockService.getStrategyReport(symbol, strategyName, exchangeName, frameName);
1299
1322
  }
1300
- return await backtestKit.Strategy.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
1323
+ return await BacktestKit.Strategy.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
1301
1324
  };
1302
1325
  // Backtest
1303
1326
  this.getBacktestData = async (symbol, strategyName, exchangeName, frameName) => {
@@ -1305,14 +1328,14 @@ class MarkdownViewService {
1305
1328
  if (CC_ENABLE_MOCK) {
1306
1329
  return await this.markdownMockService.getBacktestData(symbol, strategyName, exchangeName, frameName);
1307
1330
  }
1308
- return await backtestKit.Backtest.getData(symbol, { strategyName, exchangeName, frameName });
1331
+ return await BacktestKit.Backtest.getData(symbol, { strategyName, exchangeName, frameName });
1309
1332
  };
1310
1333
  this.getBacktestReport = async (symbol, strategyName, exchangeName, frameName) => {
1311
1334
  this.loggerService.log("markdownViewService getBacktestReport", { symbol, strategyName, exchangeName, frameName });
1312
1335
  if (CC_ENABLE_MOCK) {
1313
1336
  return await this.markdownMockService.getBacktestReport(symbol, strategyName, exchangeName, frameName);
1314
1337
  }
1315
- return await backtestKit.Backtest.getReport(symbol, { strategyName, exchangeName, frameName });
1338
+ return await BacktestKit.Backtest.getReport(symbol, { strategyName, exchangeName, frameName });
1316
1339
  };
1317
1340
  // Live
1318
1341
  this.getLiveData = async (symbol, strategyName, exchangeName) => {
@@ -1320,14 +1343,14 @@ class MarkdownViewService {
1320
1343
  if (CC_ENABLE_MOCK) {
1321
1344
  return await this.markdownMockService.getLiveData(symbol, strategyName, exchangeName);
1322
1345
  }
1323
- return await backtestKit.Live.getData(symbol, { strategyName, exchangeName });
1346
+ return await BacktestKit.Live.getData(symbol, { strategyName, exchangeName });
1324
1347
  };
1325
1348
  this.getLiveReport = async (symbol, strategyName, exchangeName) => {
1326
1349
  this.loggerService.log("markdownViewService getLiveReport", { symbol, strategyName, exchangeName });
1327
1350
  if (CC_ENABLE_MOCK) {
1328
1351
  return await this.markdownMockService.getLiveReport(symbol, strategyName, exchangeName);
1329
1352
  }
1330
- return await backtestKit.Live.getReport(symbol, { strategyName, exchangeName });
1353
+ return await BacktestKit.Live.getReport(symbol, { strategyName, exchangeName });
1331
1354
  };
1332
1355
  // Breakeven
1333
1356
  this.getBreakevenData = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
@@ -1335,14 +1358,14 @@ class MarkdownViewService {
1335
1358
  if (CC_ENABLE_MOCK) {
1336
1359
  return await this.markdownMockService.getBreakevenData(symbol, strategyName, exchangeName, frameName);
1337
1360
  }
1338
- return await backtestKit.Breakeven.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
1361
+ return await BacktestKit.Breakeven.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
1339
1362
  };
1340
1363
  this.getBreakevenReport = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
1341
1364
  this.loggerService.log("markdownViewService getBreakevenReport", { symbol, strategyName, exchangeName, frameName, backtest });
1342
1365
  if (CC_ENABLE_MOCK) {
1343
1366
  return await this.markdownMockService.getBreakevenReport(symbol, strategyName, exchangeName, frameName);
1344
1367
  }
1345
- return await backtestKit.Breakeven.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
1368
+ return await BacktestKit.Breakeven.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
1346
1369
  };
1347
1370
  // Risk
1348
1371
  this.getRiskData = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
@@ -1350,14 +1373,14 @@ class MarkdownViewService {
1350
1373
  if (CC_ENABLE_MOCK) {
1351
1374
  return await this.markdownMockService.getRiskData(symbol, strategyName, exchangeName, frameName);
1352
1375
  }
1353
- return await backtestKit.Risk.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
1376
+ return await BacktestKit.Risk.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
1354
1377
  };
1355
1378
  this.getRiskReport = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
1356
1379
  this.loggerService.log("markdownViewService getRiskReport", { symbol, strategyName, exchangeName, frameName, backtest });
1357
1380
  if (CC_ENABLE_MOCK) {
1358
1381
  return await this.markdownMockService.getRiskReport(symbol, strategyName, exchangeName, frameName);
1359
1382
  }
1360
- return await backtestKit.Risk.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
1383
+ return await BacktestKit.Risk.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
1361
1384
  };
1362
1385
  // Partial
1363
1386
  this.getPartialData = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
@@ -1365,14 +1388,14 @@ class MarkdownViewService {
1365
1388
  if (CC_ENABLE_MOCK) {
1366
1389
  return await this.markdownMockService.getPartialData(symbol, strategyName, exchangeName, frameName);
1367
1390
  }
1368
- return await backtestKit.Partial.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
1391
+ return await BacktestKit.Partial.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
1369
1392
  };
1370
1393
  this.getPartialReport = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
1371
1394
  this.loggerService.log("markdownViewService getPartialReport", { symbol, strategyName, exchangeName, frameName, backtest });
1372
1395
  if (CC_ENABLE_MOCK) {
1373
1396
  return await this.markdownMockService.getPartialReport(symbol, strategyName, exchangeName, frameName);
1374
1397
  }
1375
- return await backtestKit.Partial.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
1398
+ return await BacktestKit.Partial.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
1376
1399
  };
1377
1400
  // HighestProfit
1378
1401
  this.getHighestProfitData = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
@@ -1380,14 +1403,14 @@ class MarkdownViewService {
1380
1403
  if (CC_ENABLE_MOCK) {
1381
1404
  return await this.markdownMockService.getHighestProfitData(symbol, strategyName, exchangeName, frameName);
1382
1405
  }
1383
- return await backtestKit.HighestProfit.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
1406
+ return await BacktestKit.HighestProfit.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
1384
1407
  };
1385
1408
  this.getHighestProfitReport = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
1386
1409
  this.loggerService.log("markdownViewService getHighestProfitReport", { symbol, strategyName, exchangeName, frameName, backtest });
1387
1410
  if (CC_ENABLE_MOCK) {
1388
1411
  return await this.markdownMockService.getHighestProfitReport(symbol, strategyName, exchangeName, frameName);
1389
1412
  }
1390
- return await backtestKit.HighestProfit.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
1413
+ return await BacktestKit.HighestProfit.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
1391
1414
  };
1392
1415
  // MaxDrawdown
1393
1416
  this.getMaxDrawdownData = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
@@ -1395,14 +1418,14 @@ class MarkdownViewService {
1395
1418
  if (CC_ENABLE_MOCK) {
1396
1419
  return await this.markdownMockService.getMaxDrawdownData(symbol, strategyName, exchangeName, frameName);
1397
1420
  }
1398
- return await backtestKit.MaxDrawdown.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
1421
+ return await BacktestKit.MaxDrawdown.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
1399
1422
  };
1400
1423
  this.getMaxDrawdownReport = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
1401
1424
  this.loggerService.log("markdownViewService getMaxDrawdownReport", { symbol, strategyName, exchangeName, frameName, backtest });
1402
1425
  if (CC_ENABLE_MOCK) {
1403
1426
  return await this.markdownMockService.getMaxDrawdownReport(symbol, strategyName, exchangeName, frameName);
1404
1427
  }
1405
- return await backtestKit.MaxDrawdown.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
1428
+ return await BacktestKit.MaxDrawdown.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
1406
1429
  };
1407
1430
  // Schedule
1408
1431
  this.getScheduleData = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
@@ -1410,14 +1433,14 @@ class MarkdownViewService {
1410
1433
  if (CC_ENABLE_MOCK) {
1411
1434
  return await this.markdownMockService.getScheduleData(symbol, strategyName, exchangeName, frameName);
1412
1435
  }
1413
- return await backtestKit.Schedule.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
1436
+ return await BacktestKit.Schedule.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
1414
1437
  };
1415
1438
  this.getScheduleReport = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
1416
1439
  this.loggerService.log("markdownViewService getScheduleReport", { symbol, strategyName, exchangeName, frameName, backtest });
1417
1440
  if (CC_ENABLE_MOCK) {
1418
1441
  return await this.markdownMockService.getScheduleReport(symbol, strategyName, exchangeName, frameName);
1419
1442
  }
1420
- return await backtestKit.Schedule.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
1443
+ return await BacktestKit.Schedule.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
1421
1444
  };
1422
1445
  // Performance
1423
1446
  this.getPerformanceData = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
@@ -1425,14 +1448,14 @@ class MarkdownViewService {
1425
1448
  if (CC_ENABLE_MOCK) {
1426
1449
  return await this.markdownMockService.getPerformanceData(symbol, strategyName, exchangeName, frameName);
1427
1450
  }
1428
- return await backtestKit.Performance.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
1451
+ return await BacktestKit.Performance.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
1429
1452
  };
1430
1453
  this.getPerformanceReport = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
1431
1454
  this.loggerService.log("markdownViewService getPerformanceReport", { symbol, strategyName, exchangeName, frameName, backtest });
1432
1455
  if (CC_ENABLE_MOCK) {
1433
1456
  return await this.markdownMockService.getPerformanceReport(symbol, strategyName, exchangeName, frameName);
1434
1457
  }
1435
- return await backtestKit.Performance.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
1458
+ return await BacktestKit.Performance.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
1436
1459
  };
1437
1460
  // Sync
1438
1461
  this.getSyncData = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
@@ -1440,14 +1463,14 @@ class MarkdownViewService {
1440
1463
  if (CC_ENABLE_MOCK) {
1441
1464
  return await this.markdownMockService.getSyncData(symbol, strategyName, exchangeName, frameName);
1442
1465
  }
1443
- return await backtestKit.Sync.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
1466
+ return await BacktestKit.Sync.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
1444
1467
  };
1445
1468
  this.getSyncReport = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
1446
1469
  this.loggerService.log("markdownViewService getSyncReport", { symbol, strategyName, exchangeName, frameName, backtest });
1447
1470
  if (CC_ENABLE_MOCK) {
1448
1471
  return await this.markdownMockService.getSyncReport(symbol, strategyName, exchangeName, frameName);
1449
1472
  }
1450
- return await backtestKit.Sync.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
1473
+ return await BacktestKit.Sync.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
1451
1474
  };
1452
1475
  // Heat
1453
1476
  this.getHeatData = async (strategyName, exchangeName, frameName, backtest = false) => {
@@ -1455,14 +1478,14 @@ class MarkdownViewService {
1455
1478
  if (CC_ENABLE_MOCK) {
1456
1479
  return await this.markdownMockService.getHeatData(strategyName, exchangeName, frameName);
1457
1480
  }
1458
- return await backtestKit.Heat.getData({ strategyName, exchangeName, frameName }, backtest);
1481
+ return await BacktestKit.Heat.getData({ strategyName, exchangeName, frameName }, backtest);
1459
1482
  };
1460
1483
  this.getHeatReport = async (strategyName, exchangeName, frameName, backtest = false) => {
1461
1484
  this.loggerService.log("markdownViewService getHeatReport", { strategyName, exchangeName, frameName, backtest });
1462
1485
  if (CC_ENABLE_MOCK) {
1463
1486
  return await this.markdownMockService.getHeatReport(strategyName, exchangeName, frameName);
1464
1487
  }
1465
- return await backtestKit.Heat.getReport({ strategyName, exchangeName, frameName }, backtest);
1488
+ return await BacktestKit.Heat.getReport({ strategyName, exchangeName, frameName }, backtest);
1466
1489
  };
1467
1490
  // Walker
1468
1491
  this.getWalkerData = async (symbol, walkerName) => {
@@ -1470,14 +1493,14 @@ class MarkdownViewService {
1470
1493
  if (CC_ENABLE_MOCK) {
1471
1494
  return await this.markdownMockService.getWalkerData(symbol, walkerName);
1472
1495
  }
1473
- return await backtestKit.Walker.getData(symbol, { walkerName });
1496
+ return await BacktestKit.Walker.getData(symbol, { walkerName });
1474
1497
  };
1475
1498
  this.getWalkerReport = async (symbol, walkerName) => {
1476
1499
  this.loggerService.log("markdownViewService getWalkerReport", { symbol, walkerName });
1477
1500
  if (CC_ENABLE_MOCK) {
1478
1501
  return await this.markdownMockService.getWalkerReport(symbol, walkerName);
1479
1502
  }
1480
- return await backtestKit.Walker.getReport(symbol, { walkerName });
1503
+ return await BacktestKit.Walker.getReport(symbol, { walkerName });
1481
1504
  };
1482
1505
  }
1483
1506
  }
@@ -1575,13 +1598,13 @@ class SignalViewService {
1575
1598
  return await this.signalMockService.getLastUpdateTimestamp(signalId);
1576
1599
  }
1577
1600
  {
1578
- const liveSignal = await backtestKit.StorageLive.findById(signalId);
1601
+ const liveSignal = await BacktestKit.StorageLive.findById(signalId);
1579
1602
  if (liveSignal) {
1580
1603
  return liveSignal.updatedAt;
1581
1604
  }
1582
1605
  }
1583
1606
  {
1584
- const backtestSignal = await backtestKit.StorageBacktest.findById(signalId);
1607
+ const backtestSignal = await BacktestKit.StorageBacktest.findById(signalId);
1585
1608
  if (backtestSignal) {
1586
1609
  return backtestSignal.updatedAt;
1587
1610
  }
@@ -1596,13 +1619,13 @@ class SignalViewService {
1596
1619
  return await this.signalMockService.getPendingSignal(symbol);
1597
1620
  }
1598
1621
  {
1599
- const liveList = await backtestKit.Live.list();
1622
+ const liveList = await BacktestKit.Live.list();
1600
1623
  const liveTarget = liveList.find((live) => live.symbol === symbol);
1601
1624
  if (liveTarget) {
1602
- const currentPrice = await backtestKit.Exchange.getAveragePrice(symbol, {
1625
+ const currentPrice = await BacktestKit.Exchange.getAveragePrice(symbol, {
1603
1626
  exchangeName: liveTarget.exchangeName,
1604
1627
  });
1605
- return await backtestKit.Live.getPendingSignal(symbol, currentPrice, {
1628
+ return await BacktestKit.Live.getPendingSignal(symbol, currentPrice, {
1606
1629
  strategyName: liveTarget.strategyName,
1607
1630
  exchangeName: liveTarget.exchangeName,
1608
1631
  });
@@ -1622,17 +1645,17 @@ class HeatViewService {
1622
1645
  if (CC_ENABLE_MOCK) {
1623
1646
  return await this.heatMockService.getStrategyHeatData();
1624
1647
  }
1625
- const [backtestItem] = await backtestKit.Backtest.list();
1626
- const [liveItem] = await backtestKit.Live.list();
1648
+ const [backtestItem] = await BacktestKit.Backtest.list();
1649
+ const [liveItem] = await BacktestKit.Live.list();
1627
1650
  if (backtestItem) {
1628
- return await backtestKit.Heat.getData({
1651
+ return await BacktestKit.Heat.getData({
1629
1652
  strategyName: backtestItem.strategyName,
1630
1653
  exchangeName: backtestItem.exchangeName,
1631
1654
  frameName: backtestItem.frameName,
1632
1655
  }, true);
1633
1656
  }
1634
1657
  if (liveItem) {
1635
- return await backtestKit.Heat.getData({
1658
+ return await BacktestKit.Heat.getData({
1636
1659
  strategyName: liveItem.strategyName,
1637
1660
  exchangeName: liveItem.exchangeName,
1638
1661
  frameName: "",
@@ -1645,17 +1668,17 @@ class HeatViewService {
1645
1668
  if (CC_ENABLE_MOCK) {
1646
1669
  return await this.heatMockService.getStrategyHeatReport();
1647
1670
  }
1648
- const [backtestItem] = await backtestKit.Backtest.list();
1649
- const [liveItem] = await backtestKit.Live.list();
1671
+ const [backtestItem] = await BacktestKit.Backtest.list();
1672
+ const [liveItem] = await BacktestKit.Live.list();
1650
1673
  if (backtestItem) {
1651
- return await backtestKit.Heat.getReport({
1674
+ return await BacktestKit.Heat.getReport({
1652
1675
  strategyName: backtestItem.strategyName,
1653
1676
  exchangeName: backtestItem.exchangeName,
1654
1677
  frameName: backtestItem.frameName,
1655
1678
  }, true);
1656
1679
  }
1657
1680
  if (liveItem) {
1658
- return await backtestKit.Heat.getReport({
1681
+ return await BacktestKit.Heat.getReport({
1659
1682
  strategyName: liveItem.strategyName,
1660
1683
  exchangeName: liveItem.exchangeName,
1661
1684
  frameName: "",
@@ -1810,7 +1833,7 @@ class PriceConnectionService {
1810
1833
  frameName,
1811
1834
  backtest,
1812
1835
  });
1813
- return await backtestKit.lib.priceMetaService.getCurrentPrice(symbol, { strategyName, exchangeName, frameName }, backtest);
1836
+ return await BacktestKit.lib.priceMetaService.getCurrentPrice(symbol, { strategyName, exchangeName, frameName }, backtest);
1814
1837
  };
1815
1838
  }
1816
1839
  }
@@ -1828,7 +1851,7 @@ class BacktestMetaService {
1828
1851
  if (CC_ENABLE_MOCK) {
1829
1852
  return BACKTEST_LIST;
1830
1853
  }
1831
- return await backtestKit.Backtest.list();
1854
+ return await BacktestKit.Backtest.list();
1832
1855
  };
1833
1856
  }
1834
1857
  }
@@ -1845,7 +1868,7 @@ class LiveMetaService {
1845
1868
  if (CC_ENABLE_MOCK) {
1846
1869
  return LIVE_LIST;
1847
1870
  }
1848
- return await backtestKit.Live.list();
1871
+ return await BacktestKit.Live.list();
1849
1872
  };
1850
1873
  }
1851
1874
  }
@@ -1912,17 +1935,17 @@ class PerformanceViewService {
1912
1935
  if (CC_ENABLE_MOCK) {
1913
1936
  return await this.performanceMockService.getPerformanceData();
1914
1937
  }
1915
- const [backtestItem] = await backtestKit.Backtest.list();
1916
- const [liveItem] = await backtestKit.Live.list();
1938
+ const [backtestItem] = await BacktestKit.Backtest.list();
1939
+ const [liveItem] = await BacktestKit.Live.list();
1917
1940
  if (backtestItem) {
1918
- return await backtestKit.Performance.getData(backtestItem.symbol, {
1941
+ return await BacktestKit.Performance.getData(backtestItem.symbol, {
1919
1942
  strategyName: backtestItem.strategyName,
1920
1943
  exchangeName: backtestItem.exchangeName,
1921
1944
  frameName: backtestItem.frameName,
1922
1945
  }, true);
1923
1946
  }
1924
1947
  if (liveItem) {
1925
- return await backtestKit.Performance.getData(liveItem.symbol, {
1948
+ return await BacktestKit.Performance.getData(liveItem.symbol, {
1926
1949
  strategyName: liveItem.strategyName,
1927
1950
  exchangeName: liveItem.exchangeName,
1928
1951
  frameName: "",
@@ -1935,17 +1958,17 @@ class PerformanceViewService {
1935
1958
  if (CC_ENABLE_MOCK) {
1936
1959
  return await this.performanceMockService.getPerformanceReport();
1937
1960
  }
1938
- const [backtestItem] = await backtestKit.Backtest.list();
1939
- const [liveItem] = await backtestKit.Live.list();
1961
+ const [backtestItem] = await BacktestKit.Backtest.list();
1962
+ const [liveItem] = await BacktestKit.Live.list();
1940
1963
  if (backtestItem) {
1941
- return await backtestKit.Performance.getReport(backtestItem.symbol, {
1964
+ return await BacktestKit.Performance.getReport(backtestItem.symbol, {
1942
1965
  strategyName: backtestItem.strategyName,
1943
1966
  exchangeName: backtestItem.exchangeName,
1944
1967
  frameName: backtestItem.frameName,
1945
1968
  }, true);
1946
1969
  }
1947
1970
  if (liveItem) {
1948
- return await backtestKit.Performance.getReport(liveItem.symbol, {
1971
+ return await BacktestKit.Performance.getReport(liveItem.symbol, {
1949
1972
  strategyName: liveItem.strategyName,
1950
1973
  exchangeName: liveItem.exchangeName,
1951
1974
  frameName: "",
@@ -1977,11 +2000,11 @@ class EnvironmentViewService {
1977
2000
  }
1978
2001
 
1979
2002
  const GET_MODE_FN = async () => {
1980
- const [backtestTarget = null] = await backtestKit.Backtest.list();
2003
+ const [backtestTarget = null] = await BacktestKit.Backtest.list();
1981
2004
  if (backtestTarget) {
1982
2005
  return "backtest";
1983
2006
  }
1984
- const [liveTarget = null] = await backtestKit.Live.list();
2007
+ const [liveTarget = null] = await BacktestKit.Live.list();
1985
2008
  if (liveTarget) {
1986
2009
  return "live";
1987
2010
  }
@@ -1996,17 +2019,17 @@ class SetupViewService {
1996
2019
  if (CC_ENABLE_MOCK) {
1997
2020
  return await this.setupMockService.getSetupData();
1998
2021
  }
1999
- const broker_enabled = backtestKit.Broker.enable.hasValue();
2000
- const dump_enabled = backtestKit.Dump.enable.hasValue();
2001
- const markdown_enabled = backtestKit.Markdown.enable.hasValue();
2002
- const memory_enabled = backtestKit.Memory.enable.hasValue();
2003
- const notification_enabled = backtestKit.Notification.enable.hasValue();
2004
- const recent_enabled = backtestKit.Recent.enable.hasValue();
2005
- const report_enabled = backtestKit.Report.enable.hasValue();
2006
- const state_enabled = backtestKit.State.enable.hasValue();
2007
- const storage_enabled = backtestKit.Storage.enable.hasValue();
2022
+ const broker_enabled = BacktestKit.Broker.enable.hasValue();
2023
+ const dump_enabled = BacktestKit.Dump.enable.hasValue();
2024
+ const markdown_enabled = BacktestKit.Markdown.enable.hasValue();
2025
+ const memory_enabled = BacktestKit.Memory.enable.hasValue();
2026
+ const notification_enabled = BacktestKit.Notification.enable.hasValue();
2027
+ const recent_enabled = BacktestKit.Recent.enable.hasValue();
2028
+ const report_enabled = BacktestKit.Report.enable.hasValue();
2029
+ const state_enabled = BacktestKit.State.enable.hasValue();
2030
+ const storage_enabled = BacktestKit.Storage.enable.hasValue();
2008
2031
  const running_mode = await GET_MODE_FN();
2009
- const config = await backtestKit.getConfig();
2032
+ const config = await BacktestKit.getConfig();
2010
2033
  const enable_long = config.CC_ENABLE_LONG_SIGNAL;
2011
2034
  const enable_short = config.CC_ENABLE_SHORT_SIGNAL;
2012
2035
  return {
@@ -2119,11 +2142,11 @@ const ioc = {
2119
2142
  };
2120
2143
  init();
2121
2144
 
2122
- const router$a = Router({
2145
+ const router$b = Router({
2123
2146
  params: true,
2124
2147
  });
2125
2148
  // SetupMockService endpoints
2126
- router$a.post("/api/v1/mock/setup_data", async (req, res) => {
2149
+ router$b.post("/api/v1/mock/setup_data", async (req, res) => {
2127
2150
  try {
2128
2151
  const request = await micro.json(req);
2129
2152
  const { requestId, serviceName } = request;
@@ -2152,7 +2175,7 @@ router$a.post("/api/v1/mock/setup_data", async (req, res) => {
2152
2175
  }
2153
2176
  });
2154
2177
  // ExchangeMockService endpoints
2155
- router$a.post("/api/v1/mock/candles_signal", async (req, res) => {
2178
+ router$b.post("/api/v1/mock/candles_signal", async (req, res) => {
2156
2179
  try {
2157
2180
  const request = await micro.json(req);
2158
2181
  const { signalId, interval, requestId, serviceName } = request;
@@ -2180,7 +2203,7 @@ router$a.post("/api/v1/mock/candles_signal", async (req, res) => {
2180
2203
  });
2181
2204
  }
2182
2205
  });
2183
- router$a.post("/api/v1/mock/candles_point", async (req, res) => {
2206
+ router$b.post("/api/v1/mock/candles_point", async (req, res) => {
2184
2207
  try {
2185
2208
  const request = await micro.json(req);
2186
2209
  const { currentTime, interval, requestId, serviceName, symbol, exchangeName } = request;
@@ -2213,7 +2236,7 @@ router$a.post("/api/v1/mock/candles_point", async (req, res) => {
2213
2236
  });
2214
2237
  }
2215
2238
  });
2216
- router$a.post("/api/v1/mock/candles_range", async (req, res) => {
2239
+ router$b.post("/api/v1/mock/candles_range", async (req, res) => {
2217
2240
  try {
2218
2241
  const request = await micro.json(req);
2219
2242
  const { symbol, interval, limit, sDate, eDate, requestId, serviceName } = request;
@@ -2248,7 +2271,7 @@ router$a.post("/api/v1/mock/candles_range", async (req, res) => {
2248
2271
  }
2249
2272
  });
2250
2273
  // NotificationMockService endpoints
2251
- router$a.post("/api/v1/mock/notification_list", async (req, res) => {
2274
+ router$b.post("/api/v1/mock/notification_list", async (req, res) => {
2252
2275
  try {
2253
2276
  const request = await micro.json(req);
2254
2277
  const { requestId, serviceName } = request;
@@ -2276,7 +2299,7 @@ router$a.post("/api/v1/mock/notification_list", async (req, res) => {
2276
2299
  });
2277
2300
  }
2278
2301
  });
2279
- router$a.post("/api/v1/mock/notification_one/:id", async (req, res) => {
2302
+ router$b.post("/api/v1/mock/notification_one/:id", async (req, res) => {
2280
2303
  try {
2281
2304
  const request = await micro.json(req);
2282
2305
  const { requestId, serviceName } = request;
@@ -2305,7 +2328,7 @@ router$a.post("/api/v1/mock/notification_one/:id", async (req, res) => {
2305
2328
  });
2306
2329
  }
2307
2330
  });
2308
- router$a.post("/api/v1/mock/notification_filter", async (req, res) => {
2331
+ router$b.post("/api/v1/mock/notification_filter", async (req, res) => {
2309
2332
  try {
2310
2333
  const request = await micro.json(req);
2311
2334
  const { requestId, serviceName, filterData, limit, offset } = request;
@@ -2334,7 +2357,7 @@ router$a.post("/api/v1/mock/notification_filter", async (req, res) => {
2334
2357
  }
2335
2358
  });
2336
2359
  // StorageMockService endpoints
2337
- router$a.post("/api/v1/mock/storage_one/:id", async (req, res) => {
2360
+ router$b.post("/api/v1/mock/storage_one/:id", async (req, res) => {
2338
2361
  try {
2339
2362
  const request = await micro.json(req);
2340
2363
  const { requestId, serviceName } = request;
@@ -2363,7 +2386,7 @@ router$a.post("/api/v1/mock/storage_one/:id", async (req, res) => {
2363
2386
  });
2364
2387
  }
2365
2388
  });
2366
- router$a.post("/api/v1/mock/storage_list/live", async (req, res) => {
2389
+ router$b.post("/api/v1/mock/storage_list/live", async (req, res) => {
2367
2390
  try {
2368
2391
  const request = await micro.json(req);
2369
2392
  const { requestId, serviceName } = request;
@@ -2391,7 +2414,7 @@ router$a.post("/api/v1/mock/storage_list/live", async (req, res) => {
2391
2414
  });
2392
2415
  }
2393
2416
  });
2394
- router$a.post("/api/v1/mock/storage_list/backtest", async (req, res) => {
2417
+ router$b.post("/api/v1/mock/storage_list/backtest", async (req, res) => {
2395
2418
  try {
2396
2419
  const request = await micro.json(req);
2397
2420
  const { requestId, serviceName } = request;
@@ -2420,7 +2443,7 @@ router$a.post("/api/v1/mock/storage_list/backtest", async (req, res) => {
2420
2443
  }
2421
2444
  });
2422
2445
  // LogMockService endpoints
2423
- router$a.post("/api/v1/mock/log_list", async (req, res) => {
2446
+ router$b.post("/api/v1/mock/log_list", async (req, res) => {
2424
2447
  try {
2425
2448
  const request = await micro.json(req);
2426
2449
  const { requestId, serviceName } = request;
@@ -2448,7 +2471,7 @@ router$a.post("/api/v1/mock/log_list", async (req, res) => {
2448
2471
  });
2449
2472
  }
2450
2473
  });
2451
- router$a.post("/api/v1/mock/log_one/:id", async (req, res) => {
2474
+ router$b.post("/api/v1/mock/log_one/:id", async (req, res) => {
2452
2475
  try {
2453
2476
  const request = await micro.json(req);
2454
2477
  const { requestId, serviceName } = request;
@@ -2477,7 +2500,7 @@ router$a.post("/api/v1/mock/log_one/:id", async (req, res) => {
2477
2500
  });
2478
2501
  }
2479
2502
  });
2480
- router$a.post("/api/v1/mock/log_filter", async (req, res) => {
2503
+ router$b.post("/api/v1/mock/log_filter", async (req, res) => {
2481
2504
  try {
2482
2505
  const request = await micro.json(req);
2483
2506
  const { requestId, serviceName, filterData, limit, offset } = request;
@@ -2505,7 +2528,7 @@ router$a.post("/api/v1/mock/log_filter", async (req, res) => {
2505
2528
  });
2506
2529
  }
2507
2530
  });
2508
- router$a.post("/api/v1/mock/candles_live", async (req, res) => {
2531
+ router$b.post("/api/v1/mock/candles_live", async (req, res) => {
2509
2532
  try {
2510
2533
  const request = await micro.json(req);
2511
2534
  const { signalId, interval, requestId, serviceName } = request;
@@ -2533,7 +2556,7 @@ router$a.post("/api/v1/mock/candles_live", async (req, res) => {
2533
2556
  });
2534
2557
  }
2535
2558
  });
2536
- router$a.post("/api/v1/mock/candles_last", async (req, res) => {
2559
+ router$b.post("/api/v1/mock/candles_last", async (req, res) => {
2537
2560
  try {
2538
2561
  const request = await micro.json(req);
2539
2562
  const { symbol, interval, requestId, serviceName } = request;
@@ -2562,7 +2585,7 @@ router$a.post("/api/v1/mock/candles_last", async (req, res) => {
2562
2585
  }
2563
2586
  });
2564
2587
  // SignalMockService endpoints
2565
- router$a.post("/api/v1/mock/signal_last_update/:id", async (req, res) => {
2588
+ router$b.post("/api/v1/mock/signal_last_update/:id", async (req, res) => {
2566
2589
  try {
2567
2590
  const request = await micro.json(req);
2568
2591
  const { requestId, serviceName } = request;
@@ -2591,7 +2614,7 @@ router$a.post("/api/v1/mock/signal_last_update/:id", async (req, res) => {
2591
2614
  });
2592
2615
  }
2593
2616
  });
2594
- router$a.post("/api/v1/mock/signal_pending", async (req, res) => {
2617
+ router$b.post("/api/v1/mock/signal_pending", async (req, res) => {
2595
2618
  try {
2596
2619
  const request = await micro.json(req);
2597
2620
  const { symbol, requestId, serviceName } = request;
@@ -2620,7 +2643,7 @@ router$a.post("/api/v1/mock/signal_pending", async (req, res) => {
2620
2643
  }
2621
2644
  });
2622
2645
  // StatusMockService endpoints
2623
- router$a.post("/api/v1/mock/status_list", async (req, res) => {
2646
+ router$b.post("/api/v1/mock/status_list", async (req, res) => {
2624
2647
  try {
2625
2648
  const request = await micro.json(req);
2626
2649
  const { requestId, serviceName } = request;
@@ -2648,7 +2671,7 @@ router$a.post("/api/v1/mock/status_list", async (req, res) => {
2648
2671
  });
2649
2672
  }
2650
2673
  });
2651
- router$a.post("/api/v1/mock/status_one/:id", async (req, res) => {
2674
+ router$b.post("/api/v1/mock/status_one/:id", async (req, res) => {
2652
2675
  try {
2653
2676
  const request = await micro.json(req);
2654
2677
  const { requestId, serviceName } = request;
@@ -2678,7 +2701,7 @@ router$a.post("/api/v1/mock/status_one/:id", async (req, res) => {
2678
2701
  }
2679
2702
  });
2680
2703
  // HeatMockService endpoints
2681
- router$a.post("/api/v1/mock/heat_data", async (req, res) => {
2704
+ router$b.post("/api/v1/mock/heat_data", async (req, res) => {
2682
2705
  try {
2683
2706
  const request = await micro.json(req);
2684
2707
  const { requestId, serviceName } = request;
@@ -2706,7 +2729,7 @@ router$a.post("/api/v1/mock/heat_data", async (req, res) => {
2706
2729
  });
2707
2730
  }
2708
2731
  });
2709
- router$a.post("/api/v1/mock/heat_report", async (req, res) => {
2732
+ router$b.post("/api/v1/mock/heat_report", async (req, res) => {
2710
2733
  try {
2711
2734
  const request = await micro.json(req);
2712
2735
  const { requestId, serviceName } = request;
@@ -2734,7 +2757,7 @@ router$a.post("/api/v1/mock/heat_report", async (req, res) => {
2734
2757
  });
2735
2758
  }
2736
2759
  });
2737
- router$a.post("/api/v1/mock/status_info", async (req, res) => {
2760
+ router$b.post("/api/v1/mock/status_info", async (req, res) => {
2738
2761
  try {
2739
2762
  const request = await micro.json(req);
2740
2763
  const { requestId, serviceName } = request;
@@ -2763,7 +2786,7 @@ router$a.post("/api/v1/mock/status_info", async (req, res) => {
2763
2786
  }
2764
2787
  });
2765
2788
  // PerformanceMockService endpoints
2766
- router$a.post("/api/v1/mock/performance_data", async (req, res) => {
2789
+ router$b.post("/api/v1/mock/performance_data", async (req, res) => {
2767
2790
  try {
2768
2791
  const request = await micro.json(req);
2769
2792
  const { requestId, serviceName } = request;
@@ -2791,7 +2814,7 @@ router$a.post("/api/v1/mock/performance_data", async (req, res) => {
2791
2814
  });
2792
2815
  }
2793
2816
  });
2794
- router$a.post("/api/v1/mock/performance_report", async (req, res) => {
2817
+ router$b.post("/api/v1/mock/performance_report", async (req, res) => {
2795
2818
  try {
2796
2819
  const request = await micro.json(req);
2797
2820
  const { requestId, serviceName } = request;
@@ -2820,7 +2843,7 @@ router$a.post("/api/v1/mock/performance_report", async (req, res) => {
2820
2843
  }
2821
2844
  });
2822
2845
  // EnvironmentMockService endpoints
2823
- router$a.post("/api/v1/mock/environment_data", async (req, res) => {
2846
+ router$b.post("/api/v1/mock/environment_data", async (req, res) => {
2824
2847
  try {
2825
2848
  const request = await micro.json(req);
2826
2849
  const { requestId, serviceName } = request;
@@ -2849,11 +2872,11 @@ router$a.post("/api/v1/mock/environment_data", async (req, res) => {
2849
2872
  }
2850
2873
  });
2851
2874
 
2852
- const router$9 = Router({
2875
+ const router$a = Router({
2853
2876
  params: true,
2854
2877
  });
2855
2878
  // SetupViewService endpoints
2856
- router$9.post("/api/v1/view/setup_data", async (req, res) => {
2879
+ router$a.post("/api/v1/view/setup_data", async (req, res) => {
2857
2880
  try {
2858
2881
  const request = await micro.json(req);
2859
2882
  const { requestId, serviceName } = request;
@@ -2882,7 +2905,7 @@ router$9.post("/api/v1/view/setup_data", async (req, res) => {
2882
2905
  }
2883
2906
  });
2884
2907
  // ExchangeViewService endpoints
2885
- router$9.post("/api/v1/view/candles_signal", async (req, res) => {
2908
+ router$a.post("/api/v1/view/candles_signal", async (req, res) => {
2886
2909
  try {
2887
2910
  const request = await micro.json(req);
2888
2911
  const { signalId, interval, requestId, serviceName } = request;
@@ -2910,7 +2933,7 @@ router$9.post("/api/v1/view/candles_signal", async (req, res) => {
2910
2933
  });
2911
2934
  }
2912
2935
  });
2913
- router$9.post("/api/v1/view/candles_point", async (req, res) => {
2936
+ router$a.post("/api/v1/view/candles_point", async (req, res) => {
2914
2937
  try {
2915
2938
  const request = await micro.json(req);
2916
2939
  const { currentTime, interval, requestId, serviceName, symbol, exchangeName } = request;
@@ -2943,7 +2966,7 @@ router$9.post("/api/v1/view/candles_point", async (req, res) => {
2943
2966
  });
2944
2967
  }
2945
2968
  });
2946
- router$9.post("/api/v1/view/candles_range", async (req, res) => {
2969
+ router$a.post("/api/v1/view/candles_range", async (req, res) => {
2947
2970
  try {
2948
2971
  const request = await micro.json(req);
2949
2972
  const { symbol, interval, limit, sDate, eDate, requestId, serviceName } = request;
@@ -2977,7 +3000,7 @@ router$9.post("/api/v1/view/candles_range", async (req, res) => {
2977
3000
  });
2978
3001
  }
2979
3002
  });
2980
- router$9.post("/api/v1/view/candles_live", async (req, res) => {
3003
+ router$a.post("/api/v1/view/candles_live", async (req, res) => {
2981
3004
  try {
2982
3005
  const request = await micro.json(req);
2983
3006
  const { signalId, interval, requestId, serviceName } = request;
@@ -3005,7 +3028,7 @@ router$9.post("/api/v1/view/candles_live", async (req, res) => {
3005
3028
  });
3006
3029
  }
3007
3030
  });
3008
- router$9.post("/api/v1/view/candles_last", async (req, res) => {
3031
+ router$a.post("/api/v1/view/candles_last", async (req, res) => {
3009
3032
  try {
3010
3033
  const request = await micro.json(req);
3011
3034
  const { symbol, interval, requestId, serviceName } = request;
@@ -3034,7 +3057,7 @@ router$9.post("/api/v1/view/candles_last", async (req, res) => {
3034
3057
  }
3035
3058
  });
3036
3059
  // NotificationViewService endpoints
3037
- router$9.post("/api/v1/view/notification_list", async (req, res) => {
3060
+ router$a.post("/api/v1/view/notification_list", async (req, res) => {
3038
3061
  try {
3039
3062
  const request = await micro.json(req);
3040
3063
  const { requestId, serviceName } = request;
@@ -3062,7 +3085,7 @@ router$9.post("/api/v1/view/notification_list", async (req, res) => {
3062
3085
  });
3063
3086
  }
3064
3087
  });
3065
- router$9.post("/api/v1/view/notification_one/:id", async (req, res) => {
3088
+ router$a.post("/api/v1/view/notification_one/:id", async (req, res) => {
3066
3089
  try {
3067
3090
  const request = await micro.json(req);
3068
3091
  const { requestId, serviceName } = request;
@@ -3091,7 +3114,7 @@ router$9.post("/api/v1/view/notification_one/:id", async (req, res) => {
3091
3114
  });
3092
3115
  }
3093
3116
  });
3094
- router$9.post("/api/v1/view/notification_filter", async (req, res) => {
3117
+ router$a.post("/api/v1/view/notification_filter", async (req, res) => {
3095
3118
  try {
3096
3119
  const request = await micro.json(req);
3097
3120
  const { requestId, serviceName, filterData, limit, offset } = request;
@@ -3120,7 +3143,7 @@ router$9.post("/api/v1/view/notification_filter", async (req, res) => {
3120
3143
  }
3121
3144
  });
3122
3145
  // StorageViewService endpoints
3123
- router$9.post("/api/v1/view/storage_one/:id", async (req, res) => {
3146
+ router$a.post("/api/v1/view/storage_one/:id", async (req, res) => {
3124
3147
  try {
3125
3148
  const request = await micro.json(req);
3126
3149
  const { requestId, serviceName } = request;
@@ -3149,7 +3172,7 @@ router$9.post("/api/v1/view/storage_one/:id", async (req, res) => {
3149
3172
  });
3150
3173
  }
3151
3174
  });
3152
- router$9.post("/api/v1/view/storage_list/live", async (req, res) => {
3175
+ router$a.post("/api/v1/view/storage_list/live", async (req, res) => {
3153
3176
  try {
3154
3177
  const request = await micro.json(req);
3155
3178
  const { requestId, serviceName } = request;
@@ -3177,7 +3200,7 @@ router$9.post("/api/v1/view/storage_list/live", async (req, res) => {
3177
3200
  });
3178
3201
  }
3179
3202
  });
3180
- router$9.post("/api/v1/view/storage_list/backtest", async (req, res) => {
3203
+ router$a.post("/api/v1/view/storage_list/backtest", async (req, res) => {
3181
3204
  try {
3182
3205
  const request = await micro.json(req);
3183
3206
  const { requestId, serviceName } = request;
@@ -3206,7 +3229,7 @@ router$9.post("/api/v1/view/storage_list/backtest", async (req, res) => {
3206
3229
  }
3207
3230
  });
3208
3231
  // LogViewService endpoints
3209
- router$9.post("/api/v1/view/log_list", async (req, res) => {
3232
+ router$a.post("/api/v1/view/log_list", async (req, res) => {
3210
3233
  try {
3211
3234
  const request = await micro.json(req);
3212
3235
  const { requestId, serviceName } = request;
@@ -3234,7 +3257,7 @@ router$9.post("/api/v1/view/log_list", async (req, res) => {
3234
3257
  });
3235
3258
  }
3236
3259
  });
3237
- router$9.post("/api/v1/view/log_one/:id", async (req, res) => {
3260
+ router$a.post("/api/v1/view/log_one/:id", async (req, res) => {
3238
3261
  try {
3239
3262
  const request = await micro.json(req);
3240
3263
  const { requestId, serviceName } = request;
@@ -3263,7 +3286,7 @@ router$9.post("/api/v1/view/log_one/:id", async (req, res) => {
3263
3286
  });
3264
3287
  }
3265
3288
  });
3266
- router$9.post("/api/v1/view/log_filter", async (req, res) => {
3289
+ router$a.post("/api/v1/view/log_filter", async (req, res) => {
3267
3290
  try {
3268
3291
  const request = await micro.json(req);
3269
3292
  const { requestId, serviceName, filterData, limit, offset } = request;
@@ -3292,7 +3315,7 @@ router$9.post("/api/v1/view/log_filter", async (req, res) => {
3292
3315
  }
3293
3316
  });
3294
3317
  // SignalViewService endpoints
3295
- router$9.post("/api/v1/view/signal_last_update/:id", async (req, res) => {
3318
+ router$a.post("/api/v1/view/signal_last_update/:id", async (req, res) => {
3296
3319
  try {
3297
3320
  const request = await micro.json(req);
3298
3321
  const { requestId, serviceName } = request;
@@ -3321,7 +3344,7 @@ router$9.post("/api/v1/view/signal_last_update/:id", async (req, res) => {
3321
3344
  });
3322
3345
  }
3323
3346
  });
3324
- router$9.post("/api/v1/view/signal_pending", async (req, res) => {
3347
+ router$a.post("/api/v1/view/signal_pending", async (req, res) => {
3325
3348
  try {
3326
3349
  const request = await micro.json(req);
3327
3350
  const { symbol, requestId, serviceName } = request;
@@ -3350,7 +3373,7 @@ router$9.post("/api/v1/view/signal_pending", async (req, res) => {
3350
3373
  }
3351
3374
  });
3352
3375
  // StatusViewService endpoints
3353
- router$9.post("/api/v1/view/status_list", async (req, res) => {
3376
+ router$a.post("/api/v1/view/status_list", async (req, res) => {
3354
3377
  try {
3355
3378
  const request = await micro.json(req);
3356
3379
  const { requestId, serviceName } = request;
@@ -3378,7 +3401,7 @@ router$9.post("/api/v1/view/status_list", async (req, res) => {
3378
3401
  });
3379
3402
  }
3380
3403
  });
3381
- router$9.post("/api/v1/view/status_one/:id", async (req, res) => {
3404
+ router$a.post("/api/v1/view/status_one/:id", async (req, res) => {
3382
3405
  try {
3383
3406
  const request = await micro.json(req);
3384
3407
  const { requestId, serviceName } = request;
@@ -3408,7 +3431,7 @@ router$9.post("/api/v1/view/status_one/:id", async (req, res) => {
3408
3431
  }
3409
3432
  });
3410
3433
  // HeatViewService endpoints
3411
- router$9.post("/api/v1/view/heat_data", async (req, res) => {
3434
+ router$a.post("/api/v1/view/heat_data", async (req, res) => {
3412
3435
  try {
3413
3436
  const request = await micro.json(req);
3414
3437
  const { requestId, serviceName } = request;
@@ -3436,7 +3459,7 @@ router$9.post("/api/v1/view/heat_data", async (req, res) => {
3436
3459
  });
3437
3460
  }
3438
3461
  });
3439
- router$9.post("/api/v1/view/heat_report", async (req, res) => {
3462
+ router$a.post("/api/v1/view/heat_report", async (req, res) => {
3440
3463
  try {
3441
3464
  const request = await micro.json(req);
3442
3465
  const { requestId, serviceName } = request;
@@ -3464,7 +3487,7 @@ router$9.post("/api/v1/view/heat_report", async (req, res) => {
3464
3487
  });
3465
3488
  }
3466
3489
  });
3467
- router$9.post("/api/v1/view/status_info", async (req, res) => {
3490
+ router$a.post("/api/v1/view/status_info", async (req, res) => {
3468
3491
  try {
3469
3492
  const request = await micro.json(req);
3470
3493
  const { requestId, serviceName } = request;
@@ -3493,7 +3516,7 @@ router$9.post("/api/v1/view/status_info", async (req, res) => {
3493
3516
  }
3494
3517
  });
3495
3518
  // PerformanceViewService endpoints
3496
- router$9.post("/api/v1/view/performance_data", async (req, res) => {
3519
+ router$a.post("/api/v1/view/performance_data", async (req, res) => {
3497
3520
  try {
3498
3521
  const request = await micro.json(req);
3499
3522
  const { requestId, serviceName } = request;
@@ -3521,7 +3544,7 @@ router$9.post("/api/v1/view/performance_data", async (req, res) => {
3521
3544
  });
3522
3545
  }
3523
3546
  });
3524
- router$9.post("/api/v1/view/performance_report", async (req, res) => {
3547
+ router$a.post("/api/v1/view/performance_report", async (req, res) => {
3525
3548
  try {
3526
3549
  const request = await micro.json(req);
3527
3550
  const { requestId, serviceName } = request;
@@ -3550,7 +3573,7 @@ router$9.post("/api/v1/view/performance_report", async (req, res) => {
3550
3573
  }
3551
3574
  });
3552
3575
  // EnvironmentViewService endpoints
3553
- router$9.post("/api/v1/view/environment_data", async (req, res) => {
3576
+ router$a.post("/api/v1/view/environment_data", async (req, res) => {
3554
3577
  try {
3555
3578
  const request = await micro.json(req);
3556
3579
  const { requestId, serviceName } = request;
@@ -3586,7 +3609,7 @@ function getModulesPath() {
3586
3609
  return path.join(basePath, "../../../");
3587
3610
  }
3588
3611
 
3589
- const router$8 = Router({
3612
+ const router$9 = Router({
3590
3613
  params: true,
3591
3614
  });
3592
3615
  // getModulesPath
@@ -3603,7 +3626,7 @@ const ASSET_32 = CC_ENABLE_MOCK
3603
3626
  const cache128 = new Map();
3604
3627
  const cache32 = new Map();
3605
3628
  const cacheSvg = new Map();
3606
- router$8.get("/icon/128/:filename", async (req, res) => {
3629
+ router$9.get("/icon/128/:filename", async (req, res) => {
3607
3630
  const filename = req.params.filename;
3608
3631
  // Check cache first
3609
3632
  if (cache128.has(filename)) {
@@ -3619,7 +3642,7 @@ router$8.get("/icon/128/:filename", async (req, res) => {
3619
3642
  }
3620
3643
  return await micro.send(res, 404, "File not found (128)");
3621
3644
  });
3622
- router$8.get("/icon/32/:filename", async (req, res) => {
3645
+ router$9.get("/icon/32/:filename", async (req, res) => {
3623
3646
  const filename = req.params.filename;
3624
3647
  // Check cache first
3625
3648
  if (cache32.has(filename)) {
@@ -3635,7 +3658,7 @@ router$8.get("/icon/32/:filename", async (req, res) => {
3635
3658
  }
3636
3659
  return await micro.send(res, 404, "File not found (32)");
3637
3660
  });
3638
- router$8.get("/icon/svg/:filename", async (req, res) => {
3661
+ router$9.get("/icon/svg/:filename", async (req, res) => {
3639
3662
  const filename = req.params.filename;
3640
3663
  // Check cache first
3641
3664
  if (cacheSvg.has(filename)) {
@@ -3651,7 +3674,7 @@ router$8.get("/icon/svg/:filename", async (req, res) => {
3651
3674
  }
3652
3675
  return await micro.send(res, 404, "File not found (svg)");
3653
3676
  });
3654
- router$8.get("/icon/:filename", async (req, res) => {
3677
+ router$9.get("/icon/:filename", async (req, res) => {
3655
3678
  const filename = req.params.filename;
3656
3679
  // Check cache first
3657
3680
  if (cache32.has(filename)) {
@@ -3668,10 +3691,10 @@ router$8.get("/icon/:filename", async (req, res) => {
3668
3691
  return await micro.send(res, 404, "File not found (root)");
3669
3692
  });
3670
3693
 
3671
- const router$7 = Router({
3694
+ const router$8 = Router({
3672
3695
  params: true,
3673
3696
  });
3674
- router$7.post("/api/v1/dict/symbol/list", async (req, res) => {
3697
+ router$8.post("/api/v1/dict/symbol/list", async (req, res) => {
3675
3698
  try {
3676
3699
  const request = await micro.json(req);
3677
3700
  const { requestId, serviceName } = request;
@@ -3699,7 +3722,7 @@ router$7.post("/api/v1/dict/symbol/list", async (req, res) => {
3699
3722
  });
3700
3723
  }
3701
3724
  });
3702
- router$7.post("/api/v1/dict/symbol/map", async (req, res) => {
3725
+ router$8.post("/api/v1/dict/symbol/map", async (req, res) => {
3703
3726
  try {
3704
3727
  const request = await micro.json(req);
3705
3728
  const { requestId, serviceName } = request;
@@ -3727,7 +3750,7 @@ router$7.post("/api/v1/dict/symbol/map", async (req, res) => {
3727
3750
  });
3728
3751
  }
3729
3752
  });
3730
- router$7.post("/api/v1/dict/symbol/one", async (req, res) => {
3753
+ router$8.post("/api/v1/dict/symbol/one", async (req, res) => {
3731
3754
  try {
3732
3755
  const request = await micro.json(req);
3733
3756
  const { requestId, serviceName, id } = request;
@@ -3756,6 +3779,53 @@ router$7.post("/api/v1/dict/symbol/one", async (req, res) => {
3756
3779
  }
3757
3780
  });
3758
3781
 
3782
+ const makeContext = functoolsKit.singleshot(() => {
3783
+ const require = node_module.createRequire(node_url.pathToFileURL(node_path.join(process.cwd(), "noop.js")));
3784
+ const context = vm.createContext({
3785
+ BacktestKitUi: ioc,
3786
+ BacktestKit: BacktestKit__namespace,
3787
+ require,
3788
+ console,
3789
+ });
3790
+ return context;
3791
+ });
3792
+ const router$7 = Router({
3793
+ params: true,
3794
+ });
3795
+ router$7.post("/api/v1/repl/eval", async (req, res) => {
3796
+ const request = await micro.json(req);
3797
+ const { requestId, serviceName } = request;
3798
+ try {
3799
+ const context = makeContext();
3800
+ const output = await vm.runInContext(request.data.command, context);
3801
+ const data = functoolsKit.isObject(output) ? JSON.stringify(output, null, 2) : output;
3802
+ const result = {
3803
+ data,
3804
+ status: "ok",
3805
+ error: "",
3806
+ requestId,
3807
+ serviceName,
3808
+ };
3809
+ ioc.loggerService.log("/api/v1/repl/eval ok", {
3810
+ request,
3811
+ result,
3812
+ });
3813
+ return await micro.send(res, 200, result);
3814
+ }
3815
+ catch (error) {
3816
+ ioc.loggerService.log("/api/v1/repl/eval error", {
3817
+ request,
3818
+ error: functoolsKit.errorData(error),
3819
+ });
3820
+ return await micro.send(res, 200, {
3821
+ status: "error",
3822
+ error: functoolsKit.getErrorMessage(error),
3823
+ requestId,
3824
+ serviceName,
3825
+ });
3826
+ }
3827
+ });
3828
+
3759
3829
  const router$6 = Router({
3760
3830
  params: true,
3761
3831
  });
@@ -4627,13 +4697,13 @@ const router = Router({
4627
4697
  params: true,
4628
4698
  });
4629
4699
  router.all("/api/v1/health/*", (req, res) => {
4630
- return router$b(req, res, finalhandler(req, res));
4700
+ return router$c(req, res, finalhandler(req, res));
4631
4701
  });
4632
4702
  router.all("/api/v1/mock/*", (req, res) => {
4633
- return router$a(req, res, finalhandler(req, res));
4703
+ return router$b(req, res, finalhandler(req, res));
4634
4704
  });
4635
4705
  router.all("/api/v1/view/*", (req, res) => {
4636
- return router$9(req, res, finalhandler(req, res));
4706
+ return router$a(req, res, finalhandler(req, res));
4637
4707
  });
4638
4708
  router.all("/api/v1/markdown_mock/*", (req, res) => {
4639
4709
  return router$6(req, res, finalhandler(req, res));
@@ -4648,9 +4718,12 @@ router.all("/api/v1/explorer_view/*", (req, res) => {
4648
4718
  return router$3(req, res, finalhandler(req, res));
4649
4719
  });
4650
4720
  router.all("/icon/*", (req, res) => {
4651
- return router$8(req, res, finalhandler(req, res));
4721
+ return router$9(req, res, finalhandler(req, res));
4652
4722
  });
4653
4723
  router.all("/api/v1/dict/*", (req, res) => {
4724
+ return router$8(req, res, finalhandler(req, res));
4725
+ });
4726
+ router.all("/api/v1/repl/*", (req, res) => {
4654
4727
  return router$7(req, res, finalhandler(req, res));
4655
4728
  });
4656
4729
  router.all("/api/v1/global/*", (req, res) => {