Skip to content

Commit

Permalink
Implement AtomexRatesProvider
Browse files Browse the repository at this point in the history
  • Loading branch information
maxima-net committed Aug 23, 2022
1 parent c4f0991 commit 416e532
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 3 deletions.
5 changes: 3 additions & 2 deletions src/atomexBuilder/atomexBuilder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { AtomexBlockchainProvider, WalletsManager } from '../blockchain/index';
import type { DeepReadonly } from '../core/index';
import { createDefaultEthereumBlockchainOptions } from '../ethereum/index';
import {
AggregatedRatesProvider, BinanceRatesProvider, ExchangeManager, InMemoryExchangeSymbolsProvider,
AggregatedRatesProvider, AtomexRatesProvider, BinanceRatesProvider, ExchangeManager, InMemoryExchangeSymbolsProvider,
InMemoryOrderBookProvider, KrakenRatesProvider, MixedRatesProvider, RatesProvider
} from '../exchange/index';
import { SwapManager } from '../swaps/swapManager';
Expand Down Expand Up @@ -51,7 +51,6 @@ export class AtomexBuilder {
const blockchainProvider = new AtomexBlockchainProvider();
this.controlledAtomexContext.providers.blockchainProvider = blockchainProvider;
this.controlledAtomexContext.providers.currenciesProvider = blockchainProvider;
this.controlledAtomexContext.providers.ratesProvider = this.createRatesProvider();
this.controlledAtomexContext.providers.exchangeSymbolsProvider = this.createExchangeSymbolsProvider();
this.controlledAtomexContext.providers.orderBookProvider = this.createOrderBookProvider();
this.controlledAtomexContext.managers.walletsManager = this.createWalletsManager();
Expand All @@ -61,6 +60,7 @@ export class AtomexBuilder {
this.controlledAtomexContext.services.swapService = atomexClient;
this.controlledAtomexContext.managers.exchangeManager = this.createExchangeManager();
this.controlledAtomexContext.managers.swapManager = this.createSwapManager();
this.controlledAtomexContext.providers.ratesProvider = this.createRatesProvider();
const blockchains = this.createDefaultBlockchainOptions();

return new Atomex({
Expand Down Expand Up @@ -128,6 +128,7 @@ export class AtomexBuilder {
return new MixedRatesProvider(new Map<string, RatesProvider>([
['binance', new BinanceRatesProvider()],
['kraken', new KrakenRatesProvider()],
['atomex', new AtomexRatesProvider(this.atomexContext.services.exchangeService)]
]));
}
}
2 changes: 1 addition & 1 deletion src/exchange/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,5 @@ export type { ExchangeService, ExchangeServiceEvents } from './exchangeService';

export {
type RatesProvider, type AggregatedRatesProvider,
BinanceRatesProvider, KrakenRatesProvider, MixedRatesProvider,
BinanceRatesProvider, KrakenRatesProvider, MixedRatesProvider, AtomexRatesProvider
} from './ratesProvider/index';
22 changes: 22 additions & 0 deletions src/exchange/ratesProvider/atomex/atomexRatesProvider.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import type BigNumber from 'bignumber.js';

import type { Currency } from '../../../common/index';
import type { ExchangeService } from '../../exchangeService';
import type { Quote } from '../../models/index';
import type { RatesProvider } from '../ratesProvider';

export class AtomexRatesProvider implements RatesProvider {
constructor(
private readonly exchangeService: ExchangeService
) { }

async getPrice(quoteCurrency: Currency['id'], baseCurrency: Currency['id']): Promise<BigNumber | undefined> {
const quote = (await this.exchangeService.getTopOfBook([{ from: quoteCurrency, to: baseCurrency }]))?.[0];

return quote ? this.getMiddlePrice(quote) : undefined;
}

private getMiddlePrice(quote: Quote): BigNumber {
return quote.ask.plus(quote.bid).div(2);
}
}
1 change: 1 addition & 0 deletions src/exchange/ratesProvider/atomex/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { AtomexRatesProvider } from './atomexRatesProvider';
1 change: 1 addition & 0 deletions src/exchange/ratesProvider/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
export type { RatesProvider } from './ratesProvider';
export type { AggregatedRatesProvider } from './aggregatedRatesProvider';
export { AtomexRatesProvider } from './atomex/index';
export { BinanceRatesProvider } from './binance/index';
export { KrakenRatesProvider } from './kraken/index';
export { MixedRatesProvider } from './mixedRatesProvider/index';

0 comments on commit 416e532

Please sign in to comment.