@backtest-kit/ui 4.0.1 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/index.cjs +383 -6
- package/build/index.mjs +384 -7
- package/build/modules/frontend/build/assets/Background-hRKtQSrv.js +1 -0
- package/build/modules/frontend/build/assets/{IconPhoto-DuToE4bm.js → IconPhoto-DQlKNGdb.js} +1 -1
- package/build/modules/frontend/build/assets/{KeyboardArrowLeft-D3jtXBuX.js → KeyboardArrowLeft-wYBUTbRV.js} +1 -1
- package/build/modules/frontend/build/assets/{Refresh-Dtm02nVv.js → Refresh-_yMWRw_x.js} +1 -1
- package/build/modules/frontend/build/assets/{index-Bdi8Xt6Q.js → index-3gnGrSPi.js} +8 -8
- package/build/modules/frontend/build/assets/index-BFSXu2bZ.js +1 -0
- package/build/modules/frontend/build/assets/{index-joLw_fAh.js → index-BPJ87g-R.js} +1 -1
- package/build/modules/frontend/build/assets/index-BUme2lKb.js +1 -0
- package/build/modules/frontend/build/assets/index-Bay1AtTY.js +1 -0
- package/build/modules/frontend/build/assets/index-Kwt_oEAl.js +1 -0
- package/build/modules/frontend/build/assets/index-TU650r8r.js +1 -0
- package/build/modules/frontend/build/assets/{markdownit-WGWginA6.js → markdownit-CZc4lN8k.js} +1 -1
- package/build/modules/frontend/build/index.html +1 -1
- package/package.json +3 -3
- package/types.d.ts +65 -0
- package/build/modules/frontend/build/assets/index-BjlWg4VP.js +0 -1
- package/build/modules/frontend/build/assets/index-DbhMxTEj.js +0 -1
- package/build/modules/frontend/build/assets/index-XQYcIYy3.js +0 -1
- package/build/modules/frontend/build/assets/index-vEmMqWZV.js +0 -1
package/build/index.mjs
CHANGED
|
@@ -6,7 +6,7 @@ import finalhandler from 'finalhandler';
|
|
|
6
6
|
import serveHandler from 'serve-handler';
|
|
7
7
|
import os from 'os';
|
|
8
8
|
import { createActivator } from 'di-kit';
|
|
9
|
-
import { Exchange, Notification, Storage, Log, listenSignal } from 'backtest-kit';
|
|
9
|
+
import { Exchange, Notification, Storage, Log, Live, listenSignal } from 'backtest-kit';
|
|
10
10
|
import fs, { readdir, readFile } from 'fs/promises';
|
|
11
11
|
import path, { join, dirname } from 'path';
|
|
12
12
|
import { createRequire } from 'module';
|
|
@@ -65,12 +65,14 @@ const mockServices$1 = {
|
|
|
65
65
|
storageMockService: Symbol("storageMockService"),
|
|
66
66
|
exchangeMockService: Symbol("exchangeMockService"),
|
|
67
67
|
logMockService: Symbol("logMockService"),
|
|
68
|
+
statusMockService: Symbol("statusMockService"),
|
|
68
69
|
};
|
|
69
70
|
const viewServices$1 = {
|
|
70
71
|
notificationViewService: Symbol("notificationViewService"),
|
|
71
72
|
storageViewService: Symbol("storageViewService"),
|
|
72
73
|
exchangeViewService: Symbol("exchangeViewService"),
|
|
73
74
|
logViewService: Symbol("logViewService"),
|
|
75
|
+
statusViewService: Symbol("statusViewService"),
|
|
74
76
|
};
|
|
75
77
|
const TYPES = {
|
|
76
78
|
...baseServices$1,
|
|
@@ -173,9 +175,9 @@ class LoggerService {
|
|
|
173
175
|
}
|
|
174
176
|
}
|
|
175
177
|
|
|
176
|
-
const MOCK_PATH$
|
|
178
|
+
const MOCK_PATH$3 = "./mock/notifications.json";
|
|
177
179
|
const READ_NOTIFICATION_LIST_FN = singleshot(async () => {
|
|
178
|
-
const data = await fs.readFile(MOCK_PATH$
|
|
180
|
+
const data = await fs.readFile(MOCK_PATH$3, "utf-8");
|
|
179
181
|
return JSON.parse(data);
|
|
180
182
|
});
|
|
181
183
|
const DEFAULT_LIMIT$3 = 25;
|
|
@@ -235,9 +237,9 @@ class NotificationMockService {
|
|
|
235
237
|
}
|
|
236
238
|
}
|
|
237
239
|
|
|
238
|
-
const MOCK_PATH$
|
|
240
|
+
const MOCK_PATH$2 = "./mock/db";
|
|
239
241
|
const READ_BACKTEST_STORAGE_FN = singleshot(async () => {
|
|
240
|
-
const dbPath = join(process.cwd(), MOCK_PATH$
|
|
242
|
+
const dbPath = join(process.cwd(), MOCK_PATH$2);
|
|
241
243
|
const files = await readdir(dbPath);
|
|
242
244
|
const signals = [];
|
|
243
245
|
for (const file of files) {
|
|
@@ -272,6 +274,7 @@ class StorageMockService {
|
|
|
272
274
|
}
|
|
273
275
|
}
|
|
274
276
|
|
|
277
|
+
const MS_PER_MINUTE$1 = 60000;
|
|
275
278
|
class ExchangeMockService {
|
|
276
279
|
constructor() {
|
|
277
280
|
this.loggerService = inject(TYPES.loggerService);
|
|
@@ -295,12 +298,31 @@ class ExchangeMockService {
|
|
|
295
298
|
interval,
|
|
296
299
|
});
|
|
297
300
|
};
|
|
301
|
+
this.getLiveCandles = async (signalId, interval) => {
|
|
302
|
+
this.loggerService.log("exchangeMockService getLiveCandles", {
|
|
303
|
+
signalId,
|
|
304
|
+
interval,
|
|
305
|
+
});
|
|
306
|
+
const signal = await this.storageMockService.findSignalById(signalId);
|
|
307
|
+
if (!signal) {
|
|
308
|
+
throw new Error(`Signal with ID ${signalId} not found`);
|
|
309
|
+
}
|
|
310
|
+
const { pendingAt, scheduledAt, minuteEstimatedTime, } = signal;
|
|
311
|
+
const eventAt = pendingAt || scheduledAt;
|
|
312
|
+
return await this.exchangeService.getRangeCandles({
|
|
313
|
+
symbol: signal.symbol,
|
|
314
|
+
exchangeName: signal.exchangeName,
|
|
315
|
+
signalStartTime: eventAt,
|
|
316
|
+
signalStopTime: eventAt + minuteEstimatedTime * MS_PER_MINUTE$1,
|
|
317
|
+
interval,
|
|
318
|
+
});
|
|
319
|
+
};
|
|
298
320
|
}
|
|
299
321
|
}
|
|
300
322
|
|
|
301
|
-
const MOCK_PATH = "./mock/logs.json";
|
|
323
|
+
const MOCK_PATH$1 = "./mock/logs.json";
|
|
302
324
|
const READ_LOG_LIST_FN = singleshot(async () => {
|
|
303
|
-
const data = await fs.readFile(MOCK_PATH, "utf-8");
|
|
325
|
+
const data = await fs.readFile(MOCK_PATH$1, "utf-8");
|
|
304
326
|
return JSON.parse(data);
|
|
305
327
|
});
|
|
306
328
|
const DEFAULT_LIMIT$2 = 25;
|
|
@@ -348,6 +370,68 @@ class LogMockService {
|
|
|
348
370
|
}
|
|
349
371
|
}
|
|
350
372
|
|
|
373
|
+
const MOCK_PATH = "./mock/status.json";
|
|
374
|
+
const READ_STATUS_LIST_FN = singleshot(async () => {
|
|
375
|
+
const data = await fs.readFile(MOCK_PATH, "utf-8");
|
|
376
|
+
return JSON.parse(data);
|
|
377
|
+
});
|
|
378
|
+
class StatusMockService {
|
|
379
|
+
constructor() {
|
|
380
|
+
this.loggerService = inject(TYPES.loggerService);
|
|
381
|
+
this.getStatusList = async () => {
|
|
382
|
+
this.loggerService.log("statusMockService getStatusList");
|
|
383
|
+
const list = await READ_STATUS_LIST_FN();
|
|
384
|
+
return list.map(({ id, symbol, strategyName, exchangeName }) => ({
|
|
385
|
+
id,
|
|
386
|
+
symbol,
|
|
387
|
+
strategyName,
|
|
388
|
+
exchangeName,
|
|
389
|
+
status: "pending",
|
|
390
|
+
}));
|
|
391
|
+
};
|
|
392
|
+
this.getStatusMap = async () => {
|
|
393
|
+
this.loggerService.log("statusMockService getStatusMap");
|
|
394
|
+
const list = await this.getStatusList();
|
|
395
|
+
return list.reduce((acm, cur) => ({ ...acm, [cur.id]: cur }), {});
|
|
396
|
+
};
|
|
397
|
+
this.getStatusOne = async (id) => {
|
|
398
|
+
this.loggerService.log("statusMockService getStatusOne", { id });
|
|
399
|
+
const list = await READ_STATUS_LIST_FN();
|
|
400
|
+
const signal = list.find((s) => s.id === id);
|
|
401
|
+
if (!signal) {
|
|
402
|
+
return null;
|
|
403
|
+
}
|
|
404
|
+
const positionEntries = signal._entry ?? [];
|
|
405
|
+
const positionLevels = positionEntries.map((e) => e.price);
|
|
406
|
+
const positionPartials = signal._partial ?? [];
|
|
407
|
+
return {
|
|
408
|
+
signalId: signal.signalId,
|
|
409
|
+
position: signal.position,
|
|
410
|
+
symbol: signal.symbol,
|
|
411
|
+
exchangeName: signal.exchangeName,
|
|
412
|
+
strategyName: signal.strategyName,
|
|
413
|
+
totalEntries: signal.totalEntries,
|
|
414
|
+
totalPartials: signal.totalPartials,
|
|
415
|
+
originalPriceStopLoss: signal.originalPriceStopLoss,
|
|
416
|
+
originalPriceTakeProfit: signal.originalPriceTakeProfit,
|
|
417
|
+
originalPriceOpen: signal.originalPriceOpen,
|
|
418
|
+
priceOpen: signal.priceOpen,
|
|
419
|
+
priceTakeProfit: signal.priceTakeProfit,
|
|
420
|
+
priceStopLoss: signal.priceStopLoss,
|
|
421
|
+
pnlPercentage: signal.pnl.pnlPercentage,
|
|
422
|
+
pnlCost: signal.pnl.pnlCost,
|
|
423
|
+
pnlEntries: signal.pnl.pnlEntries,
|
|
424
|
+
partialExecuted: signal.partialExecuted,
|
|
425
|
+
minuteEstimatedTime: signal.minuteEstimatedTime,
|
|
426
|
+
pendingAt: signal.pendingAt,
|
|
427
|
+
positionLevels,
|
|
428
|
+
positionEntries,
|
|
429
|
+
positionPartials,
|
|
430
|
+
};
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
|
|
351
435
|
const DEFAULT_LIMIT$1 = 25;
|
|
352
436
|
const DEFAULT_OFFSET$1 = 0;
|
|
353
437
|
const CREATE_FILTER_LIST_FN$1 = (filterData) => Object.keys(filterData).map((key) => (row) => new RegExp(filterData[key], "i").test(row[key]));
|
|
@@ -492,6 +576,7 @@ class StorageViewService {
|
|
|
492
576
|
}
|
|
493
577
|
}
|
|
494
578
|
|
|
579
|
+
const MS_PER_MINUTE = 60000;
|
|
495
580
|
class ExchangeViewService {
|
|
496
581
|
constructor() {
|
|
497
582
|
this.loggerService = inject(TYPES.loggerService);
|
|
@@ -519,6 +604,28 @@ class ExchangeViewService {
|
|
|
519
604
|
interval,
|
|
520
605
|
});
|
|
521
606
|
};
|
|
607
|
+
this.getLiveCandles = async (signalId, interval) => {
|
|
608
|
+
this.loggerService.log("exchangeViewService getLiveCandles", {
|
|
609
|
+
signalId,
|
|
610
|
+
interval,
|
|
611
|
+
});
|
|
612
|
+
if (CC_ENABLE_MOCK) {
|
|
613
|
+
return await this.exchangeMockService.getLiveCandles(signalId, interval);
|
|
614
|
+
}
|
|
615
|
+
const signal = await this.storageViewService.findSignalById(signalId);
|
|
616
|
+
if (!signal) {
|
|
617
|
+
throw new Error(`Signal with ID ${signalId} not found`);
|
|
618
|
+
}
|
|
619
|
+
const { pendingAt, scheduledAt, minuteEstimatedTime, } = signal;
|
|
620
|
+
const eventAt = pendingAt || scheduledAt;
|
|
621
|
+
return await this.exchangeService.getRangeCandles({
|
|
622
|
+
symbol: signal.symbol,
|
|
623
|
+
exchangeName: signal.exchangeName,
|
|
624
|
+
signalStartTime: eventAt,
|
|
625
|
+
signalStopTime: eventAt + minuteEstimatedTime * MS_PER_MINUTE,
|
|
626
|
+
interval,
|
|
627
|
+
});
|
|
628
|
+
};
|
|
522
629
|
}
|
|
523
630
|
}
|
|
524
631
|
|
|
@@ -577,6 +684,100 @@ class LogViewService {
|
|
|
577
684
|
}
|
|
578
685
|
}
|
|
579
686
|
|
|
687
|
+
class StatusViewService {
|
|
688
|
+
constructor() {
|
|
689
|
+
this.loggerService = inject(TYPES.loggerService);
|
|
690
|
+
this.statusMockService = inject(TYPES.statusMockService);
|
|
691
|
+
this.getStatusList = async () => {
|
|
692
|
+
this.loggerService.log("statusViewService getStatusList");
|
|
693
|
+
if (CC_ENABLE_MOCK) {
|
|
694
|
+
const liveList = await this.statusMockService.getStatusList();
|
|
695
|
+
return liveList.filter(({ status }) => status === "pending");
|
|
696
|
+
}
|
|
697
|
+
return await Live.list();
|
|
698
|
+
};
|
|
699
|
+
this.getStatusMap = async () => {
|
|
700
|
+
this.loggerService.log("statusViewService getStatusMap");
|
|
701
|
+
if (CC_ENABLE_MOCK) {
|
|
702
|
+
return await this.statusMockService.getStatusMap();
|
|
703
|
+
}
|
|
704
|
+
const liveList = await Live.list();
|
|
705
|
+
return liveList
|
|
706
|
+
.filter(({ status }) => status === "pending")
|
|
707
|
+
.reduce((acm, cur) => ({ ...acm, [cur.id]: cur }), {});
|
|
708
|
+
};
|
|
709
|
+
this.getStatusOne = async (id) => {
|
|
710
|
+
this.loggerService.log("statusViewService getStatusOne", {
|
|
711
|
+
id,
|
|
712
|
+
});
|
|
713
|
+
if (CC_ENABLE_MOCK) {
|
|
714
|
+
return await this.statusMockService.getStatusOne(id);
|
|
715
|
+
}
|
|
716
|
+
const liveList = await Live.list();
|
|
717
|
+
const liveOne = liveList.find((live) => live.id === id);
|
|
718
|
+
if (!liveOne) {
|
|
719
|
+
throw new Error(`Live with id ${id} not found`);
|
|
720
|
+
}
|
|
721
|
+
const { symbol, strategyName, exchangeName } = liveOne;
|
|
722
|
+
const currentPrice = await Exchange.getAveragePrice(symbol, {
|
|
723
|
+
exchangeName,
|
|
724
|
+
});
|
|
725
|
+
const pendingSignal = await Live.getPendingSignal(symbol, currentPrice, {
|
|
726
|
+
strategyName,
|
|
727
|
+
exchangeName,
|
|
728
|
+
});
|
|
729
|
+
if (!pendingSignal) {
|
|
730
|
+
return null;
|
|
731
|
+
}
|
|
732
|
+
const positionLevels = await Live.getPositionLevels(symbol, {
|
|
733
|
+
strategyName,
|
|
734
|
+
exchangeName,
|
|
735
|
+
});
|
|
736
|
+
if (!positionLevels) {
|
|
737
|
+
return null;
|
|
738
|
+
}
|
|
739
|
+
const positionEntries = await Live.getPositionEntries(symbol, {
|
|
740
|
+
strategyName,
|
|
741
|
+
exchangeName,
|
|
742
|
+
});
|
|
743
|
+
if (!positionEntries) {
|
|
744
|
+
return null;
|
|
745
|
+
}
|
|
746
|
+
const positionPartials = await Live.getPositionPartials(symbol, {
|
|
747
|
+
strategyName,
|
|
748
|
+
exchangeName,
|
|
749
|
+
});
|
|
750
|
+
if (!positionPartials) {
|
|
751
|
+
return null;
|
|
752
|
+
}
|
|
753
|
+
return {
|
|
754
|
+
signalId: pendingSignal.id,
|
|
755
|
+
position: pendingSignal.position,
|
|
756
|
+
symbol: pendingSignal.symbol,
|
|
757
|
+
exchangeName: pendingSignal.exchangeName,
|
|
758
|
+
strategyName: pendingSignal.strategyName,
|
|
759
|
+
totalEntries: pendingSignal.totalEntries,
|
|
760
|
+
totalPartials: pendingSignal.totalPartials,
|
|
761
|
+
originalPriceStopLoss: pendingSignal.originalPriceStopLoss,
|
|
762
|
+
originalPriceTakeProfit: pendingSignal.originalPriceTakeProfit,
|
|
763
|
+
originalPriceOpen: pendingSignal.originalPriceOpen,
|
|
764
|
+
priceOpen: pendingSignal.priceOpen,
|
|
765
|
+
priceTakeProfit: pendingSignal.priceTakeProfit,
|
|
766
|
+
priceStopLoss: pendingSignal.priceStopLoss,
|
|
767
|
+
pnlPercentage: pendingSignal.pnl.pnlPercentage,
|
|
768
|
+
pnlCost: pendingSignal.pnl.pnlCost,
|
|
769
|
+
pnlEntries: pendingSignal.pnl.pnlEntries,
|
|
770
|
+
partialExecuted: pendingSignal.partialExecuted,
|
|
771
|
+
pendingAt: pendingSignal.pendingAt,
|
|
772
|
+
minuteEstimatedTime: pendingSignal.minuteEstimatedTime,
|
|
773
|
+
positionEntries,
|
|
774
|
+
positionLevels,
|
|
775
|
+
positionPartials,
|
|
776
|
+
};
|
|
777
|
+
};
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
|
|
580
781
|
const symbol_list = [
|
|
581
782
|
{
|
|
582
783
|
icon: "/icon/btc.png",
|
|
@@ -761,12 +962,14 @@ class PriceConnectionService {
|
|
|
761
962
|
provide(TYPES.storageMockService, () => new StorageMockService());
|
|
762
963
|
provide(TYPES.exchangeMockService, () => new ExchangeMockService());
|
|
763
964
|
provide(TYPES.logMockService, () => new LogMockService());
|
|
965
|
+
provide(TYPES.statusMockService, () => new StatusMockService());
|
|
764
966
|
}
|
|
765
967
|
{
|
|
766
968
|
provide(TYPES.notificationViewService, () => new NotificationViewService());
|
|
767
969
|
provide(TYPES.storageViewService, () => new StorageViewService());
|
|
768
970
|
provide(TYPES.exchangeViewService, () => new ExchangeViewService());
|
|
769
971
|
provide(TYPES.logViewService, () => new LogViewService());
|
|
972
|
+
provide(TYPES.statusViewService, () => new StatusViewService());
|
|
770
973
|
}
|
|
771
974
|
|
|
772
975
|
const baseServices = {
|
|
@@ -785,12 +988,14 @@ const mockServices = {
|
|
|
785
988
|
storageMockService: inject(TYPES.storageMockService),
|
|
786
989
|
exchangeMockService: inject(TYPES.exchangeMockService),
|
|
787
990
|
logMockService: inject(TYPES.logMockService),
|
|
991
|
+
statusMockService: inject(TYPES.statusMockService),
|
|
788
992
|
};
|
|
789
993
|
const viewServices = {
|
|
790
994
|
notificationViewService: inject(TYPES.notificationViewService),
|
|
791
995
|
storageViewService: inject(TYPES.storageViewService),
|
|
792
996
|
exchangeViewService: inject(TYPES.exchangeViewService),
|
|
793
997
|
logViewService: inject(TYPES.logViewService),
|
|
998
|
+
statusViewService: inject(TYPES.statusViewService),
|
|
794
999
|
};
|
|
795
1000
|
const ioc = {
|
|
796
1001
|
...baseServices,
|
|
@@ -1124,6 +1329,92 @@ router$6.post("/api/v1/mock/log_filter", async (req, res) => {
|
|
|
1124
1329
|
});
|
|
1125
1330
|
}
|
|
1126
1331
|
});
|
|
1332
|
+
router$6.post("/api/v1/mock/candles_live", async (req, res) => {
|
|
1333
|
+
try {
|
|
1334
|
+
const request = await micro.json(req);
|
|
1335
|
+
const { signalId, interval, requestId, serviceName } = request;
|
|
1336
|
+
const data = await ioc.exchangeMockService.getLiveCandles(signalId, interval);
|
|
1337
|
+
const result = {
|
|
1338
|
+
data,
|
|
1339
|
+
status: "ok",
|
|
1340
|
+
error: "",
|
|
1341
|
+
requestId,
|
|
1342
|
+
serviceName,
|
|
1343
|
+
};
|
|
1344
|
+
ioc.loggerService.log("/api/v1/mock/candles_live ok", {
|
|
1345
|
+
request,
|
|
1346
|
+
result: omit(result, "data"),
|
|
1347
|
+
});
|
|
1348
|
+
return await micro.send(res, 200, result);
|
|
1349
|
+
}
|
|
1350
|
+
catch (error) {
|
|
1351
|
+
ioc.loggerService.log("/api/v1/mock/candles_live error", {
|
|
1352
|
+
error: errorData(error),
|
|
1353
|
+
});
|
|
1354
|
+
return await micro.send(res, 200, {
|
|
1355
|
+
status: "error",
|
|
1356
|
+
error: getErrorMessage(error),
|
|
1357
|
+
});
|
|
1358
|
+
}
|
|
1359
|
+
});
|
|
1360
|
+
// StatusMockService endpoints
|
|
1361
|
+
router$6.post("/api/v1/mock/status_list", async (req, res) => {
|
|
1362
|
+
try {
|
|
1363
|
+
const request = await micro.json(req);
|
|
1364
|
+
const { requestId, serviceName } = request;
|
|
1365
|
+
const data = await ioc.statusMockService.getStatusList();
|
|
1366
|
+
const result = {
|
|
1367
|
+
data,
|
|
1368
|
+
status: "ok",
|
|
1369
|
+
error: "",
|
|
1370
|
+
requestId,
|
|
1371
|
+
serviceName,
|
|
1372
|
+
};
|
|
1373
|
+
ioc.loggerService.log("/api/v1/mock/status_list ok", {
|
|
1374
|
+
request,
|
|
1375
|
+
result: omit(result, "data"),
|
|
1376
|
+
});
|
|
1377
|
+
return await micro.send(res, 200, result);
|
|
1378
|
+
}
|
|
1379
|
+
catch (error) {
|
|
1380
|
+
ioc.loggerService.log("/api/v1/mock/status_list error", {
|
|
1381
|
+
error: errorData(error),
|
|
1382
|
+
});
|
|
1383
|
+
return await micro.send(res, 200, {
|
|
1384
|
+
status: "error",
|
|
1385
|
+
error: getErrorMessage(error),
|
|
1386
|
+
});
|
|
1387
|
+
}
|
|
1388
|
+
});
|
|
1389
|
+
router$6.post("/api/v1/mock/status_one/:id", async (req, res) => {
|
|
1390
|
+
try {
|
|
1391
|
+
const request = await micro.json(req);
|
|
1392
|
+
const { requestId, serviceName } = request;
|
|
1393
|
+
const id = req.params.id;
|
|
1394
|
+
const data = await ioc.statusMockService.getStatusOne(id);
|
|
1395
|
+
const result = {
|
|
1396
|
+
data,
|
|
1397
|
+
status: "ok",
|
|
1398
|
+
error: "",
|
|
1399
|
+
requestId,
|
|
1400
|
+
serviceName,
|
|
1401
|
+
};
|
|
1402
|
+
ioc.loggerService.log("/api/v1/mock/status_one/:id ok", {
|
|
1403
|
+
request,
|
|
1404
|
+
result: omit(result, "data"),
|
|
1405
|
+
});
|
|
1406
|
+
return await micro.send(res, 200, result);
|
|
1407
|
+
}
|
|
1408
|
+
catch (error) {
|
|
1409
|
+
ioc.loggerService.log("/api/v1/mock/status_one/:id error", {
|
|
1410
|
+
error: errorData(error),
|
|
1411
|
+
});
|
|
1412
|
+
return await micro.send(res, 200, {
|
|
1413
|
+
status: "error",
|
|
1414
|
+
error: getErrorMessage(error),
|
|
1415
|
+
});
|
|
1416
|
+
}
|
|
1417
|
+
});
|
|
1127
1418
|
|
|
1128
1419
|
const router$5 = Router({
|
|
1129
1420
|
params: true,
|
|
@@ -1190,6 +1481,34 @@ router$5.post("/api/v1/view/candles_point", async (req, res) => {
|
|
|
1190
1481
|
});
|
|
1191
1482
|
}
|
|
1192
1483
|
});
|
|
1484
|
+
router$5.post("/api/v1/view/candles_live", async (req, res) => {
|
|
1485
|
+
try {
|
|
1486
|
+
const request = await micro.json(req);
|
|
1487
|
+
const { signalId, interval, requestId, serviceName } = request;
|
|
1488
|
+
const data = await ioc.exchangeViewService.getLiveCandles(signalId, interval);
|
|
1489
|
+
const result = {
|
|
1490
|
+
data,
|
|
1491
|
+
status: "ok",
|
|
1492
|
+
error: "",
|
|
1493
|
+
requestId,
|
|
1494
|
+
serviceName,
|
|
1495
|
+
};
|
|
1496
|
+
ioc.loggerService.log("/api/v1/view/candles_live ok", {
|
|
1497
|
+
request,
|
|
1498
|
+
result: omit(result, "data"),
|
|
1499
|
+
});
|
|
1500
|
+
return await micro.send(res, 200, result);
|
|
1501
|
+
}
|
|
1502
|
+
catch (error) {
|
|
1503
|
+
ioc.loggerService.log("/api/v1/view/candles_live error", {
|
|
1504
|
+
error: errorData(error),
|
|
1505
|
+
});
|
|
1506
|
+
return await micro.send(res, 200, {
|
|
1507
|
+
status: "error",
|
|
1508
|
+
error: getErrorMessage(error),
|
|
1509
|
+
});
|
|
1510
|
+
}
|
|
1511
|
+
});
|
|
1193
1512
|
// NotificationViewService endpoints
|
|
1194
1513
|
router$5.post("/api/v1/view/notification_list", async (req, res) => {
|
|
1195
1514
|
try {
|
|
@@ -1448,6 +1767,64 @@ router$5.post("/api/v1/view/log_filter", async (req, res) => {
|
|
|
1448
1767
|
});
|
|
1449
1768
|
}
|
|
1450
1769
|
});
|
|
1770
|
+
// StatusViewService endpoints
|
|
1771
|
+
router$5.post("/api/v1/view/status_list", async (req, res) => {
|
|
1772
|
+
try {
|
|
1773
|
+
const request = await micro.json(req);
|
|
1774
|
+
const { requestId, serviceName } = request;
|
|
1775
|
+
const data = await ioc.statusViewService.getStatusList();
|
|
1776
|
+
const result = {
|
|
1777
|
+
data,
|
|
1778
|
+
status: "ok",
|
|
1779
|
+
error: "",
|
|
1780
|
+
requestId,
|
|
1781
|
+
serviceName,
|
|
1782
|
+
};
|
|
1783
|
+
ioc.loggerService.log("/api/v1/view/status_list ok", {
|
|
1784
|
+
request,
|
|
1785
|
+
result: omit(result, "data"),
|
|
1786
|
+
});
|
|
1787
|
+
return await micro.send(res, 200, result);
|
|
1788
|
+
}
|
|
1789
|
+
catch (error) {
|
|
1790
|
+
ioc.loggerService.log("/api/v1/view/status_list error", {
|
|
1791
|
+
error: errorData(error),
|
|
1792
|
+
});
|
|
1793
|
+
return await micro.send(res, 200, {
|
|
1794
|
+
status: "error",
|
|
1795
|
+
error: getErrorMessage(error),
|
|
1796
|
+
});
|
|
1797
|
+
}
|
|
1798
|
+
});
|
|
1799
|
+
router$5.post("/api/v1/view/status_one/:id", async (req, res) => {
|
|
1800
|
+
try {
|
|
1801
|
+
const request = await micro.json(req);
|
|
1802
|
+
const { requestId, serviceName } = request;
|
|
1803
|
+
const id = req.params.id;
|
|
1804
|
+
const data = await ioc.statusViewService.getStatusOne(id);
|
|
1805
|
+
const result = {
|
|
1806
|
+
data,
|
|
1807
|
+
status: "ok",
|
|
1808
|
+
error: "",
|
|
1809
|
+
requestId,
|
|
1810
|
+
serviceName,
|
|
1811
|
+
};
|
|
1812
|
+
ioc.loggerService.log("/api/v1/view/status_one/:id ok", {
|
|
1813
|
+
request,
|
|
1814
|
+
result: omit(result, "data"),
|
|
1815
|
+
});
|
|
1816
|
+
return await micro.send(res, 200, result);
|
|
1817
|
+
}
|
|
1818
|
+
catch (error) {
|
|
1819
|
+
ioc.loggerService.log("/api/v1/view/status_one/:id error", {
|
|
1820
|
+
error: errorData(error),
|
|
1821
|
+
});
|
|
1822
|
+
return await micro.send(res, 200, {
|
|
1823
|
+
status: "error",
|
|
1824
|
+
error: getErrorMessage(error),
|
|
1825
|
+
});
|
|
1826
|
+
}
|
|
1827
|
+
});
|
|
1451
1828
|
|
|
1452
1829
|
const require$1 = createRequire(import.meta.url);
|
|
1453
1830
|
function getModulesPath() {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{f as n,az as o}from"./index-3gnGrSPi.js";const d=()=>n(o,{children:"\n body {\n background-color: #ddd !important;\n }\n "});export{d as B};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{f as e,i as t,B as r,J as s}from"./index-
|
|
1
|
+
import{f as e,i as t,B as r,J as s}from"./index-3gnGrSPi.js";const a=({className:a,symbol:i,style:o,sx:n})=>e(s,{children:async()=>{try{const s=(await t.symbolGlobalService.getSymbolMap())[i],l=null==s?void 0:s.icon,c=(null==s?void 0:s.color)||"#ccc";return e(r,{className:a,sx:{position:"relative",width:24,height:24,borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",background:l?"transparent":c,...n},style:o,children:l?e("img",{loading:"lazy",crossOrigin:"anonymous",src:l,alt:i,style:{width:"100%",height:"100%",borderRadius:"50%",objectFit:"contain"},onError:e=>{const t=e.target,r=t.parentElement;r&&(r.style.background=c,t.style.display="none")}}):e(r,{sx:{width:"60%",height:"60%",borderRadius:"50%",backgroundColor:"rgba(255, 255, 255, 0.2)"}})})}catch(s){return e(r,{className:a,sx:{position:"relative",width:24,height:24,borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",background:"#ccc",...n},style:o,children:e(r,{sx:{width:"60%",height:"60%",borderRadius:"50%",backgroundColor:"rgba(255, 255, 255, 0.2)"}})})}}});export{a as I};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as o,f as r}from"./index-
|
|
1
|
+
import{c as o,f as r}from"./index-3gnGrSPi.js";const a=o(r("path",{d:"M15.41 16.59 10.83 12l4.58-4.59L14 6l-6 6 6 6 1.41-1.41z"}),"KeyboardArrowLeft");export{a as K};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{aA as e,aB as t,r as a,aC as s,f as i,aD as n,aE as o,aF as r,aG as d,aH as m,aI as u,aJ as p,aK as x,c}from"./index-3gnGrSPi.js";const h=e(),l=["className","component","disableGutters","fixed","maxWidth","classes"],b=m(),f=h("div",{name:"MuiContainer",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:a}=e;return[t.root,t[`maxWidth${o(String(a.maxWidth))}`],a.fixed&&t.fixed,a.disableGutters&&t.disableGutters]}}),g=e=>r({props:e,name:"MuiContainer",defaultTheme:b});const W=function(e={}){const{createStyledComponent:r=f,useThemeProps:m=g,componentName:p="MuiContainer"}=e,x=r(({theme:e,ownerState:a})=>t({width:"100%",marginLeft:"auto",boxSizing:"border-box",marginRight:"auto",display:"block"},!a.disableGutters&&{paddingLeft:e.spacing(2),paddingRight:e.spacing(2),[e.breakpoints.up("sm")]:{paddingLeft:e.spacing(3),paddingRight:e.spacing(3)}}),({theme:e,ownerState:t})=>t.fixed&&Object.keys(e.breakpoints.values).reduce((t,a)=>{const s=a,i=e.breakpoints.values[s];return 0!==i&&(t[e.breakpoints.up(s)]={maxWidth:`${i}${e.breakpoints.unit}`}),t},{}),({theme:e,ownerState:a})=>t({},"xs"===a.maxWidth&&{[e.breakpoints.up("xs")]:{maxWidth:Math.max(e.breakpoints.values.xs,444)}},a.maxWidth&&"xs"!==a.maxWidth&&{[e.breakpoints.up(a.maxWidth)]:{maxWidth:`${e.breakpoints.values[a.maxWidth]}${e.breakpoints.unit}`}}));return a.forwardRef(function(e,a){const r=m(e),{className:c,component:h="div",disableGutters:b=!1,fixed:f=!1,maxWidth:g="lg"}=r,W=s(r,l),k=t({},r,{component:h,disableGutters:b,fixed:f,maxWidth:g}),S=((e,t)=>{const{classes:a,fixed:s,disableGutters:i,maxWidth:n}=e,r={root:["root",n&&`maxWidth${o(String(n))}`,s&&"fixed",i&&"disableGutters"]};return d(r,e=>u(t,e),a)})(k,p);return i(x,t({as:h,ownerState:k,className:n(S.root,c),ref:a},W))})}({createStyledComponent:x("div",{name:"MuiContainer",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:a}=e;return[t.root,t[`maxWidth${o(String(a.maxWidth))}`],a.fixed&&t.fixed,a.disableGutters&&t.disableGutters]}}),useThemeProps:e=>p({props:e,name:"MuiContainer"})}),k=c(i("path",{d:"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"}),"Refresh");export{W as C,k as R};
|