@dhedge/backend-flatcoin-core 0.2.99 → 0.3.1
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/dist/constants/enum.d.ts +4 -0
- package/dist/constants/enum.js +6 -1
- package/dist/contracts/index.d.ts +0 -1
- package/dist/contracts/index.js +1 -3
- package/dist/entity/apy-history.d.ts +1 -0
- package/dist/entity/apy-history.js +5 -0
- package/dist/entity/apy.d.ts +1 -0
- package/dist/entity/apy.js +5 -0
- package/dist/entity/borrowing-rate-apy-history.d.ts +1 -0
- package/dist/entity/borrowing-rate-apy-history.js +5 -0
- package/dist/entity/flatcoin-pnl.d.ts +1 -0
- package/dist/entity/flatcoin-pnl.js +5 -0
- package/dist/entity/flatcoin.price.parent.d.ts +1 -0
- package/dist/entity/flatcoin.price.parent.js +5 -0
- package/dist/entity/leverage-leaderboard.d.ts +1 -0
- package/dist/entity/leverage-leaderboard.js +5 -0
- package/dist/entity/leverage-monthly-pnl.d.ts +1 -0
- package/dist/entity/leverage-monthly-pnl.js +5 -0
- package/dist/entity/leverageBalanceChart/leverage-balance-parent.d.ts +1 -0
- package/dist/entity/leverageBalanceChart/leverage-balance-parent.js +5 -0
- package/dist/entity/limit-order.entity.d.ts +1 -0
- package/dist/entity/limit-order.entity.js +4 -0
- package/dist/entity/order-execution.d.ts +1 -0
- package/dist/entity/order-execution.js +4 -0
- package/dist/entity/period-performance.d.ts +1 -0
- package/dist/entity/period-performance.js +5 -0
- package/dist/entity/position-entity.d.ts +1 -0
- package/dist/entity/position-entity.js +4 -0
- package/dist/entity/protocol-metrics.d.ts +1 -0
- package/dist/entity/protocol-metrics.js +8 -3
- package/dist/entity/unitBalanceChart/unit-balance-parent.d.ts +1 -0
- package/dist/entity/unitBalanceChart/unit-balance-parent.js +5 -0
- package/dist/repository/apy-history.repository.d.ts +1 -1
- package/dist/repository/apy-history.repository.js +3 -3
- package/dist/repository/apy.repository.d.ts +1 -1
- package/dist/repository/apy.repository.js +5 -2
- package/dist/repository/borrowing-rate-apy-history.repository.d.ts +1 -1
- package/dist/repository/borrowing-rate-apy-history.repository.js +3 -3
- package/dist/repository/flatcoin-pnl.repository.d.ts +3 -3
- package/dist/repository/flatcoin-pnl.repository.js +15 -5
- package/dist/repository/leverage-balance.repository.d.ts +1 -1
- package/dist/repository/leverage-balance.repository.js +3 -3
- package/dist/repository/leverage-leaderboard.repository.d.ts +3 -3
- package/dist/repository/leverage-leaderboard.repository.js +6 -3
- package/dist/repository/leverage-monthly-pnl.repository.d.ts +3 -3
- package/dist/repository/leverage-monthly-pnl.repository.js +14 -14
- package/dist/repository/limit-order.repository.d.ts +2 -2
- package/dist/repository/limit-order.repository.js +5 -4
- package/dist/repository/order-execution.repository.d.ts +1 -1
- package/dist/repository/order-execution.repository.js +8 -2
- package/dist/repository/position.repository.d.ts +4 -4
- package/dist/repository/position.repository.js +9 -6
- package/dist/repository/price.repository.d.ts +4 -4
- package/dist/repository/price.repository.js +26 -7
- package/dist/repository/protocol-metrics.repository.d.ts +1 -1
- package/dist/repository/protocol-metrics.repository.js +6 -2
- package/dist/repository/unit-balance.repository.d.ts +1 -1
- package/dist/repository/unit-balance.repository.js +3 -3
- package/dist/service/blockscan.service.d.ts +3 -2
- package/dist/service/blockscan.service.js +10 -3
- package/dist/service/graph-query.service.d.ts +0 -4
- package/dist/service/graph-query.service.js +1 -54
- package/dist/service/notification.service.d.ts +2 -0
- package/dist/service/notification.service.js +15 -0
- package/package.json +3 -5
- package/dist/contracts/abi/pyth-price-feed.d.ts +0 -43
- package/dist/contracts/abi/pyth-price-feed.js +0 -110
|
@@ -21,28 +21,28 @@ let LeverageMonthlyPnlRepository = class LeverageMonthlyPnlRepository {
|
|
|
21
21
|
constructor(repository) {
|
|
22
22
|
this.repository = repository;
|
|
23
23
|
}
|
|
24
|
-
async findAllByAccount(account) {
|
|
24
|
+
async findAllByAccount(account, blockchainCode) {
|
|
25
25
|
return await this.repository
|
|
26
|
-
.createQueryBuilder(
|
|
27
|
-
.where('
|
|
28
|
-
.
|
|
29
|
-
.
|
|
26
|
+
.createQueryBuilder()
|
|
27
|
+
.where('account = :account', { account: account })
|
|
28
|
+
.andWhere('blockchain_code = :blockchainCode', { blockchainCode: blockchainCode })
|
|
29
|
+
.orderBy('timestamp', 'ASC')
|
|
30
30
|
.getMany();
|
|
31
31
|
}
|
|
32
|
-
async findByLastTimestamp() {
|
|
32
|
+
async findByLastTimestamp(blockchainCode) {
|
|
33
33
|
return await this.repository
|
|
34
|
-
.createQueryBuilder(
|
|
35
|
-
.
|
|
34
|
+
.createQueryBuilder()
|
|
35
|
+
.andWhere('blockchain_code = :blockchainCode', { blockchainCode: blockchainCode })
|
|
36
|
+
.orderBy('last_closed_position_timestamp', 'DESC')
|
|
36
37
|
.take(1)
|
|
37
38
|
.getOne();
|
|
38
39
|
}
|
|
39
|
-
async findByAccountAndTimestamp(account, timestamp) {
|
|
40
|
+
async findByAccountAndTimestamp(account, timestamp, blockchainCode) {
|
|
40
41
|
return await this.repository
|
|
41
|
-
.createQueryBuilder(
|
|
42
|
-
.where('
|
|
43
|
-
.andWhere('
|
|
44
|
-
.
|
|
45
|
-
.setParameter('timestamp', timestamp)
|
|
42
|
+
.createQueryBuilder()
|
|
43
|
+
.where('account = :account', { account: account })
|
|
44
|
+
.andWhere('timestamp = :timestamp', { timestamp: timestamp })
|
|
45
|
+
.andWhere('blockchain_code = :blockchainCode', { blockchainCode: blockchainCode })
|
|
46
46
|
.take(1)
|
|
47
47
|
.getOne();
|
|
48
48
|
}
|
|
@@ -5,6 +5,6 @@ export declare class LimitOrderRepository {
|
|
|
5
5
|
constructor(repository: Repository<LimitOrderEntity>);
|
|
6
6
|
save(limitOrder: LimitOrderEntity): Promise<LimitOrderEntity>;
|
|
7
7
|
saveAll(limitOrder: LimitOrderEntity[]): Promise<LimitOrderEntity[]>;
|
|
8
|
-
getAllByStatusOpen(): Promise<LimitOrderEntity[]>;
|
|
9
|
-
getByTokenId(tokenId: number): Promise<LimitOrderEntity | null>;
|
|
8
|
+
getAllByStatusOpen(blockchainCode: string): Promise<LimitOrderEntity[]>;
|
|
9
|
+
getByTokenId(tokenId: number, blockchainCode: string): Promise<LimitOrderEntity | null>;
|
|
10
10
|
}
|
|
@@ -28,18 +28,19 @@ let LimitOrderRepository = class LimitOrderRepository {
|
|
|
28
28
|
async saveAll(limitOrder) {
|
|
29
29
|
return this.repository.save(limitOrder);
|
|
30
30
|
}
|
|
31
|
-
async getAllByStatusOpen() {
|
|
31
|
+
async getAllByStatusOpen(blockchainCode) {
|
|
32
32
|
return this.repository
|
|
33
33
|
.createQueryBuilder()
|
|
34
34
|
.where('status = :status', { status: constants_1.LimitOrderStatus.OPEN })
|
|
35
|
+
.andWhere('blockchain_code = :blockchainCode', { blockchainCode: blockchainCode })
|
|
35
36
|
.orderBy('liquidation_price', 'DESC')
|
|
36
37
|
.getMany();
|
|
37
38
|
}
|
|
38
|
-
async getByTokenId(tokenId) {
|
|
39
|
+
async getByTokenId(tokenId, blockchainCode) {
|
|
39
40
|
return await this.repository
|
|
40
41
|
.createQueryBuilder()
|
|
41
|
-
.where('
|
|
42
|
-
.
|
|
42
|
+
.where('token_id = :tokenId', { tokenId: tokenId })
|
|
43
|
+
.andWhere('blockchain_code = :blockchainCode', { blockchainCode: blockchainCode })
|
|
43
44
|
.where('status = :status', { status: constants_1.LimitOrderStatus.OPEN })
|
|
44
45
|
.take(1)
|
|
45
46
|
.getOne();
|
|
@@ -5,5 +5,5 @@ export declare class OrderExecutionRepository {
|
|
|
5
5
|
constructor(repository: Repository<OrderExecution>);
|
|
6
6
|
save(orderExecution: OrderExecution): Promise<OrderExecution>;
|
|
7
7
|
saveAll(orderExecutions: OrderExecution[]): Promise<OrderExecution[]>;
|
|
8
|
-
getLatestRecord(): Promise<OrderExecution | null>;
|
|
8
|
+
getLatestRecord(blockchainCode: string): Promise<OrderExecution | null>;
|
|
9
9
|
}
|
|
@@ -27,8 +27,14 @@ let OrderExecutionRepository = class OrderExecutionRepository {
|
|
|
27
27
|
async saveAll(orderExecutions) {
|
|
28
28
|
return this.repository.save(orderExecutions);
|
|
29
29
|
}
|
|
30
|
-
async getLatestRecord() {
|
|
31
|
-
return this.repository
|
|
30
|
+
async getLatestRecord(blockchainCode) {
|
|
31
|
+
return this.repository
|
|
32
|
+
.createQueryBuilder()
|
|
33
|
+
.where('blockchain_code = :blockchainCode')
|
|
34
|
+
.setParameter('blockchainCode', blockchainCode)
|
|
35
|
+
.orderBy('executed_at', 'DESC')
|
|
36
|
+
.limit(1)
|
|
37
|
+
.getOne();
|
|
32
38
|
}
|
|
33
39
|
};
|
|
34
40
|
exports.OrderExecutionRepository = OrderExecutionRepository;
|
|
@@ -6,8 +6,8 @@ export declare class PositionRepository {
|
|
|
6
6
|
constructor(repository: Repository<PositionEntity>);
|
|
7
7
|
save(position: PositionEntity): Promise<PositionEntity>;
|
|
8
8
|
saveAll(positions: PositionEntity[]): Promise<PositionEntity[]>;
|
|
9
|
-
getAllByStatusOpen(): Promise<PositionEntity[]>;
|
|
10
|
-
updateLiquidationPrice(tokenId: number, liqPrice: BigNumber): Promise<void>;
|
|
11
|
-
getOneByTokenId(tokenId: number): Promise<PositionEntity | null>;
|
|
12
|
-
getLatestUpdateAtBlock(): Promise<number>;
|
|
9
|
+
getAllByStatusOpen(blockchainCode: string): Promise<PositionEntity[]>;
|
|
10
|
+
updateLiquidationPrice(tokenId: number, blockchainCode: string, liqPrice: BigNumber): Promise<void>;
|
|
11
|
+
getOneByTokenId(tokenId: number, blockchainCode: string): Promise<PositionEntity | null>;
|
|
12
|
+
getLatestUpdateAtBlock(blockchainCode: string): Promise<number>;
|
|
13
13
|
}
|
|
@@ -28,33 +28,36 @@ let PositionRepository = class PositionRepository {
|
|
|
28
28
|
async saveAll(positions) {
|
|
29
29
|
return this.repository.save(positions);
|
|
30
30
|
}
|
|
31
|
-
async getAllByStatusOpen() {
|
|
31
|
+
async getAllByStatusOpen(blockchainCode) {
|
|
32
32
|
return this.repository
|
|
33
33
|
.createQueryBuilder()
|
|
34
34
|
.where('status = :status', { status: constants_1.LeveragePositionStatus.OPEN })
|
|
35
|
+
.andWhere('blockchain_code = :blockchainCode', { blockchainCode: blockchainCode })
|
|
35
36
|
.orderBy('liquidation_price', 'DESC')
|
|
36
37
|
.getMany();
|
|
37
38
|
}
|
|
38
|
-
async updateLiquidationPrice(tokenId, liqPrice) {
|
|
39
|
+
async updateLiquidationPrice(tokenId, blockchainCode, liqPrice) {
|
|
39
40
|
await this.repository
|
|
40
41
|
.createQueryBuilder()
|
|
41
42
|
.update(entity_1.PositionEntity)
|
|
42
43
|
.set({ liquidationPrice: liqPrice })
|
|
43
44
|
.where('token_id = :tokenId', { tokenId: tokenId })
|
|
45
|
+
.andWhere('blockchain_code = :blockchainCode', { blockchainCode: blockchainCode })
|
|
44
46
|
.execute();
|
|
45
47
|
}
|
|
46
|
-
async getOneByTokenId(tokenId) {
|
|
48
|
+
async getOneByTokenId(tokenId, blockchainCode) {
|
|
47
49
|
return await this.repository
|
|
48
50
|
.createQueryBuilder()
|
|
49
|
-
.where('token_id = :tokenId')
|
|
50
|
-
.
|
|
51
|
+
.where('token_id = :tokenId', { tokenId: tokenId })
|
|
52
|
+
.andWhere('blockchain_code = :blockchainCode', { blockchainCode: blockchainCode })
|
|
51
53
|
.take(1)
|
|
52
54
|
.getOne();
|
|
53
55
|
}
|
|
54
|
-
async getLatestUpdateAtBlock() {
|
|
56
|
+
async getLatestUpdateAtBlock(blockchainCode) {
|
|
55
57
|
const p = await this.repository
|
|
56
58
|
.createQueryBuilder('position')
|
|
57
59
|
.select(['position.block_updated_at'])
|
|
60
|
+
.where('blockchain_code = :blockchainCode', { blockchainCode: blockchainCode })
|
|
58
61
|
.orderBy('block_updated_at', 'DESC')
|
|
59
62
|
.getRawOne();
|
|
60
63
|
return p ? parseInt(p.block_updated_at) : 0;
|
|
@@ -7,9 +7,9 @@ export declare class PriceRepository {
|
|
|
7
7
|
private flatcoinPriceOneYearRepository;
|
|
8
8
|
private readonly repository;
|
|
9
9
|
constructor(flatcoinPriceOneDayRepository: Repository<FlatcoinPriceOneDay>, flatcoinPriceOneWeekRepository: Repository<FlatcoinPriceOneWeek>, flatcoinPriceOneMonthRepository: Repository<FlatcoinPriceOneMonth>, flatcoinPriceOneYearRepository: Repository<FlatcoinPriceOneYear>, repository: Repository<FlatcoinPrice>);
|
|
10
|
-
findAllByPeriod(period: string): Promise<FlatcoinPriceParent[]>;
|
|
11
|
-
findLast(): Promise<FlatcoinPrice | null>;
|
|
12
|
-
findFirstByTimestamp(fromTimestamp: number): Promise<FlatcoinPrice | null>;
|
|
13
|
-
findFirst(): Promise<FlatcoinPrice | null>;
|
|
10
|
+
findAllByPeriod(period: string, blockchainCode: string): Promise<FlatcoinPriceParent[]>;
|
|
11
|
+
findLast(blockchainCode: string): Promise<FlatcoinPrice | null>;
|
|
12
|
+
findFirstByTimestamp(fromTimestamp: number, blockchainCode: string): Promise<FlatcoinPrice | null>;
|
|
13
|
+
findFirst(blockchainCode: string): Promise<FlatcoinPrice | null>;
|
|
14
14
|
private getRepository;
|
|
15
15
|
}
|
|
@@ -26,23 +26,42 @@ let PriceRepository = class PriceRepository {
|
|
|
26
26
|
this.flatcoinPriceOneYearRepository = flatcoinPriceOneYearRepository;
|
|
27
27
|
this.repository = repository;
|
|
28
28
|
}
|
|
29
|
-
async findAllByPeriod(period) {
|
|
30
|
-
return this.getRepository(period)
|
|
29
|
+
async findAllByPeriod(period, blockchainCode) {
|
|
30
|
+
return this.getRepository(period)
|
|
31
|
+
.createQueryBuilder('price')
|
|
32
|
+
.where('blockchain_code = :blockchainCode')
|
|
33
|
+
.setParameter('blockchainCode', blockchainCode)
|
|
34
|
+
.orderBy('price.timestamp', 'ASC')
|
|
35
|
+
.getMany();
|
|
31
36
|
}
|
|
32
|
-
async findLast() {
|
|
33
|
-
return this.repository
|
|
37
|
+
async findLast(blockchainCode) {
|
|
38
|
+
return this.repository
|
|
39
|
+
.createQueryBuilder('price')
|
|
40
|
+
.where('blockchain_code = :blockchainCode')
|
|
41
|
+
.setParameter('blockchainCode', blockchainCode)
|
|
42
|
+
.orderBy('price.timestamp', 'DESC')
|
|
43
|
+
.take(1)
|
|
44
|
+
.getOne();
|
|
34
45
|
}
|
|
35
|
-
async findFirstByTimestamp(fromTimestamp) {
|
|
46
|
+
async findFirstByTimestamp(fromTimestamp, blockchainCode) {
|
|
36
47
|
return await this.repository
|
|
37
48
|
.createQueryBuilder('price')
|
|
38
49
|
.where('timestamp > :fromTimestamp')
|
|
50
|
+
.andWhere('blockchain_code = :blockchainCode')
|
|
51
|
+
.setParameter('blockchainCode', blockchainCode)
|
|
39
52
|
.orderBy('price.timestamp', 'ASC')
|
|
40
53
|
.setParameter('fromTimestamp', fromTimestamp)
|
|
41
54
|
.take(1)
|
|
42
55
|
.getOne();
|
|
43
56
|
}
|
|
44
|
-
async findFirst() {
|
|
45
|
-
return await this.repository
|
|
57
|
+
async findFirst(blockchainCode) {
|
|
58
|
+
return await this.repository
|
|
59
|
+
.createQueryBuilder('price')
|
|
60
|
+
.where('blockchain_code = :blockchainCode')
|
|
61
|
+
.setParameter('blockchainCode', blockchainCode)
|
|
62
|
+
.orderBy('price.timestamp', 'ASC')
|
|
63
|
+
.take(1)
|
|
64
|
+
.getOne();
|
|
46
65
|
}
|
|
47
66
|
getRepository(period) {
|
|
48
67
|
switch (period) {
|
|
@@ -4,5 +4,5 @@ export declare class ProtocolMetricsRepository {
|
|
|
4
4
|
private repository;
|
|
5
5
|
constructor(repository: Repository<ProtocolMetrics>);
|
|
6
6
|
save(protocolMetrics: ProtocolMetrics): Promise<ProtocolMetrics>;
|
|
7
|
-
getLatestRecord(): Promise<ProtocolMetrics | null>;
|
|
7
|
+
getLatestRecord(blockchainCode: string): Promise<ProtocolMetrics | null>;
|
|
8
8
|
}
|
|
@@ -24,8 +24,12 @@ let ProtocolMetricsRepository = class ProtocolMetricsRepository {
|
|
|
24
24
|
async save(protocolMetrics) {
|
|
25
25
|
return this.repository.save(protocolMetrics);
|
|
26
26
|
}
|
|
27
|
-
async getLatestRecord() {
|
|
28
|
-
return this.repository
|
|
27
|
+
async getLatestRecord(blockchainCode) {
|
|
28
|
+
return this.repository
|
|
29
|
+
.createQueryBuilder()
|
|
30
|
+
.where('blockchain_code = :blockchainCode', { blockchainCode: blockchainCode })
|
|
31
|
+
.limit(1)
|
|
32
|
+
.getOne();
|
|
29
33
|
}
|
|
30
34
|
};
|
|
31
35
|
exports.ProtocolMetricsRepository = ProtocolMetricsRepository;
|
|
@@ -12,6 +12,6 @@ export declare class UnitBalanceRepository {
|
|
|
12
12
|
private unitBalanceHalfYearRepository;
|
|
13
13
|
private unitBalanceOneYearRepository;
|
|
14
14
|
constructor(unitBalanceOneWeekRepository: Repository<UnitBalanceOneWeek>, unitBalanceOneMonthRepository: Repository<UnitBalanceOneMonth>, unitBalanceThreeMonthsRepository: Repository<UnitBalanceThreeMonths>, unitBalanceHalfYearRepository: Repository<UnitBalanceHalfYear>, unitBalanceOneYearRepository: Repository<UnitBalanceOneYear>);
|
|
15
|
-
findAllByPeriod(account: string, period: string): Promise<UnitBalanceParent[]>;
|
|
15
|
+
findAllByPeriod(account: string, period: string, blockchainCode: string): Promise<UnitBalanceParent[]>;
|
|
16
16
|
getRepository(period: string): Repository<any>;
|
|
17
17
|
}
|
|
@@ -30,11 +30,11 @@ let UnitBalanceRepository = class UnitBalanceRepository {
|
|
|
30
30
|
this.unitBalanceHalfYearRepository = unitBalanceHalfYearRepository;
|
|
31
31
|
this.unitBalanceOneYearRepository = unitBalanceOneYearRepository;
|
|
32
32
|
}
|
|
33
|
-
async findAllByPeriod(account, period) {
|
|
33
|
+
async findAllByPeriod(account, period, blockchainCode) {
|
|
34
34
|
return this.getRepository(period)
|
|
35
35
|
.createQueryBuilder()
|
|
36
|
-
.where('account = :account')
|
|
37
|
-
.
|
|
36
|
+
.where('account = :account', { account: account })
|
|
37
|
+
.andWhere('blockchain_code = :blockchainCode', { blockchainCode: blockchainCode })
|
|
38
38
|
.orderBy('timestamp', 'ASC')
|
|
39
39
|
.getMany();
|
|
40
40
|
}
|
|
@@ -2,7 +2,8 @@ import { Logger } from '@nestjs/common';
|
|
|
2
2
|
import { TokenTransfer } from '../dto';
|
|
3
3
|
export declare class BlockscanService {
|
|
4
4
|
private readonly logger;
|
|
5
|
-
private readonly
|
|
5
|
+
private readonly baseBlockscanUri;
|
|
6
6
|
constructor(logger: Logger);
|
|
7
|
-
getTokenTransfers(contractAddress: string, startBlock: number, endBlock: number): Promise<TokenTransfer[]>;
|
|
7
|
+
getTokenTransfers(contractAddress: string, startBlock: number, endBlock: number, blockChainCode: string): Promise<TokenTransfer[]>;
|
|
8
|
+
private getUri;
|
|
8
9
|
}
|
|
@@ -17,16 +17,17 @@ const common_1 = require("@nestjs/common");
|
|
|
17
17
|
const axios_1 = __importDefault(require("axios"));
|
|
18
18
|
const ethers_1 = require("ethers");
|
|
19
19
|
const dto_1 = require("../dto");
|
|
20
|
+
const constants_1 = require("../constants");
|
|
20
21
|
let BlockscanService = class BlockscanService {
|
|
21
22
|
constructor(logger) {
|
|
22
23
|
this.logger = logger;
|
|
23
24
|
if (process.env.BASE_BLOCKSCAN_URI) {
|
|
24
|
-
this.
|
|
25
|
+
this.baseBlockscanUri = process.env.BASE_BLOCKSCAN_URI;
|
|
25
26
|
}
|
|
26
27
|
}
|
|
27
|
-
async getTokenTransfers(contractAddress, startBlock, endBlock) {
|
|
28
|
+
async getTokenTransfers(contractAddress, startBlock, endBlock, blockChainCode) {
|
|
28
29
|
try {
|
|
29
|
-
const response = await axios_1.default.get(`${this.
|
|
30
|
+
const response = await axios_1.default.get(`${this.getUri(blockChainCode)}&module=account&action=tokentx&contractaddress=${contractAddress}&startblock=${startBlock}&endblock=${endBlock}&page=1&offset=10000&sort=asc`);
|
|
30
31
|
const result = response.data.result.map((r) => {
|
|
31
32
|
const tokenTransfer = new dto_1.TokenTransfer();
|
|
32
33
|
tokenTransfer.blockNumber = +r.blockNumber;
|
|
@@ -45,6 +46,12 @@ let BlockscanService = class BlockscanService {
|
|
|
45
46
|
throw error;
|
|
46
47
|
}
|
|
47
48
|
}
|
|
49
|
+
getUri(blockChainCode) {
|
|
50
|
+
if (constants_1.BlockchainCode.BASE == blockChainCode) {
|
|
51
|
+
return this.baseBlockscanUri;
|
|
52
|
+
}
|
|
53
|
+
throw new Error(`BlockscanService -> blockchain code ${blockChainCode} is not supported`);
|
|
54
|
+
}
|
|
48
55
|
};
|
|
49
56
|
exports.BlockscanService = BlockscanService;
|
|
50
57
|
exports.BlockscanService = BlockscanService = __decorate([
|
|
@@ -8,12 +8,10 @@ export declare class GraphQueryService {
|
|
|
8
8
|
getAnnouncedOrders(timestampFrom: number): Promise<AnnouncedOrder[]>;
|
|
9
9
|
getLeverageOpensFromBLock(blockFrom: number): Promise<LeverageOpen[]>;
|
|
10
10
|
getLeverageOpensByTimestampFrom(timestampFrom: number): Promise<LeverageOpen[]>;
|
|
11
|
-
getLeverageOpensByTokenId(tokenId: number): Promise<LeverageOpen[]>;
|
|
12
11
|
getLeverageClosesFromBlock(blockFrom: number): Promise<LeverageClose[]>;
|
|
13
12
|
getLeverageClosesByTimestampFrom(timestampFrom: number): Promise<LeverageClose[]>;
|
|
14
13
|
getLeverageAdjustsByTimestampFrom(timestampFrom: number): Promise<LeverageAdjust[]>;
|
|
15
14
|
getLeverageAdjustsFromBlock(blockNumber: number): Promise<LeverageAdjust[]>;
|
|
16
|
-
getLeverageAdjustsByTokenId(tokenId: number): Promise<LeverageAdjust[]>;
|
|
17
15
|
getPositionLiquidateds(blockFrom: number): Promise<PositionLiquidated[]>;
|
|
18
16
|
getDeposits(blockFrom: number): Promise<DepositEvent[]>;
|
|
19
17
|
getDepositsByTimestampFrom(timestampFrom: number): Promise<DepositEvent[]>;
|
|
@@ -35,11 +33,9 @@ export declare class GraphQueryService {
|
|
|
35
33
|
export declare const getAnnouncedOrdersQuery: string;
|
|
36
34
|
export declare const getLeverageOpensQuery: string;
|
|
37
35
|
export declare const getLeverageOpensByTimestampFromQuery: string;
|
|
38
|
-
export declare const getLeverageOpensByTokenIdQuery: string;
|
|
39
36
|
export declare const getLeverageClosesQuery: string;
|
|
40
37
|
export declare const getLeverageClosesByTimestampFromQuery: string;
|
|
41
38
|
export declare const getLeverageAdjustsByTimestampFromQuery: string;
|
|
42
|
-
export declare const getLeverageAdjustsByTokenIdQuery: string;
|
|
43
39
|
export declare const getLeverageAdjustsByBlockFromQuery: string;
|
|
44
40
|
export declare const getPositionLiquidatedsQuery: string;
|
|
45
41
|
export declare const getDepositsQuery: string;
|
|
@@ -9,7 +9,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.getUnitHoldersQueryPaginated = exports.getClosedPositionsQueryByCloseBlockFrom = exports.getClosedPositionsQuery = exports.getClosedPositionsQueryPaginated = exports.getOpenPositionsQueryPaginated = exports.getLimitOrderExecutedsByTimestampFromQuery = exports.getLimitOrderAnnouncedsQuery = exports.getWithdrawsByWithdrawerAddressQuery = exports.getWithdrawsByTimestampFromQuery = exports.getWithdrawsQuery = exports.getDepositsByDepositorAddressQuery = exports.getDepositsByTimestampFromQuery = exports.getDepositsQuery = exports.getPositionLiquidatedsQuery = exports.getLeverageAdjustsByBlockFromQuery = exports.
|
|
12
|
+
exports.getUnitHoldersQueryPaginated = exports.getClosedPositionsQueryByCloseBlockFrom = exports.getClosedPositionsQuery = exports.getClosedPositionsQueryPaginated = exports.getOpenPositionsQueryPaginated = exports.getLimitOrderExecutedsByTimestampFromQuery = exports.getLimitOrderAnnouncedsQuery = exports.getWithdrawsByWithdrawerAddressQuery = exports.getWithdrawsByTimestampFromQuery = exports.getWithdrawsQuery = exports.getDepositsByDepositorAddressQuery = exports.getDepositsByTimestampFromQuery = exports.getDepositsQuery = exports.getPositionLiquidatedsQuery = exports.getLeverageAdjustsByBlockFromQuery = exports.getLeverageAdjustsByTimestampFromQuery = exports.getLeverageClosesByTimestampFromQuery = exports.getLeverageClosesQuery = exports.getLeverageOpensByTimestampFromQuery = exports.getLeverageOpensQuery = exports.getAnnouncedOrdersQuery = exports.GraphQueryService = void 0;
|
|
13
13
|
const common_1 = require("@nestjs/common");
|
|
14
14
|
const graphql_request_1 = require("graphql-request");
|
|
15
15
|
let GraphQueryService = class GraphQueryService {
|
|
@@ -53,18 +53,6 @@ let GraphQueryService = class GraphQueryService {
|
|
|
53
53
|
throw error;
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
|
-
async getLeverageOpensByTokenId(tokenId) {
|
|
57
|
-
const variables = { tokenId: tokenId };
|
|
58
|
-
try {
|
|
59
|
-
const response = await this.graphQLClient.request(exports.getLeverageOpensByTokenIdQuery, variables);
|
|
60
|
-
this.logger.log(`Fetched ${response.leverageOpens.length} leverageOpens events from the graph for tokenId: ${tokenId}`);
|
|
61
|
-
return response.leverageOpens;
|
|
62
|
-
}
|
|
63
|
-
catch (error) {
|
|
64
|
-
this.logger.error(`Error fetching leverageOpens events from the graph for tokenId: ${tokenId}`, error);
|
|
65
|
-
throw error;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
56
|
async getLeverageClosesFromBlock(blockFrom) {
|
|
69
57
|
const variables = { fromBlock: blockFrom };
|
|
70
58
|
try {
|
|
@@ -113,18 +101,6 @@ let GraphQueryService = class GraphQueryService {
|
|
|
113
101
|
throw error;
|
|
114
102
|
}
|
|
115
103
|
}
|
|
116
|
-
async getLeverageAdjustsByTokenId(tokenId) {
|
|
117
|
-
const variables = { tokenId: tokenId };
|
|
118
|
-
try {
|
|
119
|
-
const response = await this.graphQLClient.request(exports.getLeverageAdjustsByTokenIdQuery, variables);
|
|
120
|
-
this.logger.log(`Fetched ${response.leverageAdjusts.length} leverageAdjusts events from the graph for tokenId: ${tokenId}`);
|
|
121
|
-
return response.leverageAdjusts;
|
|
122
|
-
}
|
|
123
|
-
catch (error) {
|
|
124
|
-
this.logger.error(`Error fetching leverageAdjusts events from the graph by tokenId: ${tokenId}`, error);
|
|
125
|
-
throw error;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
104
|
async getPositionLiquidateds(blockFrom) {
|
|
129
105
|
const variables = { fromBlock: blockFrom };
|
|
130
106
|
try {
|
|
@@ -385,21 +361,6 @@ exports.getLeverageOpensByTimestampFromQuery = (0, graphql_request_1.gql) `
|
|
|
385
361
|
}
|
|
386
362
|
}
|
|
387
363
|
`;
|
|
388
|
-
exports.getLeverageOpensByTokenIdQuery = (0, graphql_request_1.gql) `
|
|
389
|
-
query GetLeverageOpens($tokenId: Int) {
|
|
390
|
-
leverageOpens(where: { tokenId: $tokenId }, first: 1000) {
|
|
391
|
-
blockNumber
|
|
392
|
-
blockTimestamp
|
|
393
|
-
entryPrice
|
|
394
|
-
tokenId
|
|
395
|
-
account
|
|
396
|
-
margin
|
|
397
|
-
size
|
|
398
|
-
transactionHash
|
|
399
|
-
executedBy
|
|
400
|
-
}
|
|
401
|
-
}
|
|
402
|
-
`;
|
|
403
364
|
exports.getLeverageClosesQuery = (0, graphql_request_1.gql) `
|
|
404
365
|
query GetLeverageCloses($fromBlock: Int) {
|
|
405
366
|
leverageCloses(where: { blockNumber_gt: $fromBlock }, first: 1000) {
|
|
@@ -442,20 +403,6 @@ exports.getLeverageAdjustsByTimestampFromQuery = (0, graphql_request_1.gql) `
|
|
|
442
403
|
}
|
|
443
404
|
}
|
|
444
405
|
`;
|
|
445
|
-
exports.getLeverageAdjustsByTokenIdQuery = (0, graphql_request_1.gql) `
|
|
446
|
-
query GetLeverageAdjusts($tokenId: Int) {
|
|
447
|
-
leverageAdjusts(where: { tokenId: $tokenId }, first: 1000) {
|
|
448
|
-
tokenId
|
|
449
|
-
marginDelta
|
|
450
|
-
sizeDelta
|
|
451
|
-
blockTimestamp
|
|
452
|
-
transactionHash
|
|
453
|
-
adjustPrice
|
|
454
|
-
executedBy
|
|
455
|
-
blockNumber
|
|
456
|
-
}
|
|
457
|
-
}
|
|
458
|
-
`;
|
|
459
406
|
exports.getLeverageAdjustsByBlockFromQuery = (0, graphql_request_1.gql) `
|
|
460
407
|
query GetLeverageAdjusts($blockNumber: Int) {
|
|
461
408
|
leverageAdjusts(where: { blockNumber_gt: $blockNumber }, first: 1000) {
|
|
@@ -3,9 +3,11 @@ export declare class NotificationService {
|
|
|
3
3
|
private readonly logger;
|
|
4
4
|
private readonly slackUri;
|
|
5
5
|
private readonly slackEmergencyUri;
|
|
6
|
+
private readonly slackMonitoringUri;
|
|
6
7
|
private readonly telegramUri;
|
|
7
8
|
constructor(logger: Logger);
|
|
8
9
|
sendSlackNotification(message: string, slackUri?: string): Promise<void>;
|
|
9
10
|
sendSlackEmergencyNotification(message: string, slackUri?: string): Promise<void>;
|
|
11
|
+
sendSlackMonitoringNotification(message: string, slackUri?: string): Promise<void>;
|
|
10
12
|
sendTelegramNotification(message: string): Promise<void>;
|
|
11
13
|
}
|
|
@@ -34,6 +34,11 @@ let NotificationService = class NotificationService {
|
|
|
34
34
|
}
|
|
35
35
|
else
|
|
36
36
|
this.logger.warn('NotificationService -> env property SLACK_EMERGENCY_CHANNEL is not provided');
|
|
37
|
+
if (process.env.SLACK_MONITORING_CHANNEL) {
|
|
38
|
+
this.slackMonitoringUri = process.env.SLACK_MONITORING_CHANNEL;
|
|
39
|
+
}
|
|
40
|
+
else
|
|
41
|
+
this.logger.warn('NotificationService -> env property SLACK_MONITORING_CHANNEL is not provided');
|
|
37
42
|
}
|
|
38
43
|
async sendSlackNotification(message, slackUri = this.slackUri) {
|
|
39
44
|
try {
|
|
@@ -51,6 +56,16 @@ let NotificationService = class NotificationService {
|
|
|
51
56
|
this.logger.error(`Error sending notification '${message}' to slack channel ${process.env.SLACK_EMERGENCY_CHANNEL}`, error);
|
|
52
57
|
}
|
|
53
58
|
}
|
|
59
|
+
async sendSlackMonitoringNotification(message, slackUri = this.slackMonitoringUri) {
|
|
60
|
+
if (this.slackMonitoringUri) {
|
|
61
|
+
try {
|
|
62
|
+
await axios_1.default.post(slackUri, { text: message });
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
this.logger.error(`Error sending notification '${message}' to slack channel ${process.env.SLACK_MONITORING_CHANNEL}`, error);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
54
69
|
async sendTelegramNotification(message) {
|
|
55
70
|
if (this.telegramUri) {
|
|
56
71
|
try {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dhedge/backend-flatcoin-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "Backend Flatcoin Core",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -24,8 +24,7 @@
|
|
|
24
24
|
"nest-winston": "1.9.3",
|
|
25
25
|
"typeorm": "^0.3.17",
|
|
26
26
|
"winston": "3.10.0",
|
|
27
|
-
"graphql-request": "6.1.0"
|
|
28
|
-
"nestjs-ethers": "^2.0.3"
|
|
27
|
+
"graphql-request": "6.1.0"
|
|
29
28
|
},
|
|
30
29
|
"devDependencies": {
|
|
31
30
|
"@nestjs/testing": "^9.4.3",
|
|
@@ -46,8 +45,7 @@
|
|
|
46
45
|
"prettier": "^2.3.2",
|
|
47
46
|
"rimraf": "5.0.5",
|
|
48
47
|
"ts-jest": "29.1.0",
|
|
49
|
-
"typescript": "^5.0.0"
|
|
50
|
-
"@ethersproject/providers": "^5.7.2"
|
|
48
|
+
"typescript": "^5.0.0"
|
|
51
49
|
},
|
|
52
50
|
"repository": {
|
|
53
51
|
"type": "git",
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
export declare const PythPriceFeed: ({
|
|
2
|
-
inputs: {
|
|
3
|
-
internalType: string;
|
|
4
|
-
name: string;
|
|
5
|
-
type: string;
|
|
6
|
-
}[];
|
|
7
|
-
name: string;
|
|
8
|
-
outputs: {
|
|
9
|
-
components: ({
|
|
10
|
-
internalType: string;
|
|
11
|
-
name: string;
|
|
12
|
-
type: string;
|
|
13
|
-
components?: undefined;
|
|
14
|
-
} | {
|
|
15
|
-
components: {
|
|
16
|
-
internalType: string;
|
|
17
|
-
name: string;
|
|
18
|
-
type: string;
|
|
19
|
-
}[];
|
|
20
|
-
internalType: string;
|
|
21
|
-
name: string;
|
|
22
|
-
type: string;
|
|
23
|
-
})[];
|
|
24
|
-
internalType: string;
|
|
25
|
-
name: string;
|
|
26
|
-
type: string;
|
|
27
|
-
}[];
|
|
28
|
-
stateMutability: string;
|
|
29
|
-
type: string;
|
|
30
|
-
anonymous?: undefined;
|
|
31
|
-
} | {
|
|
32
|
-
anonymous: boolean;
|
|
33
|
-
inputs: {
|
|
34
|
-
indexed: boolean;
|
|
35
|
-
internalType: string;
|
|
36
|
-
name: string;
|
|
37
|
-
type: string;
|
|
38
|
-
}[];
|
|
39
|
-
name: string;
|
|
40
|
-
type: string;
|
|
41
|
-
outputs?: undefined;
|
|
42
|
-
stateMutability?: undefined;
|
|
43
|
-
})[];
|