UNPKG

insight-previous-tcr

Version:

A blockchain explorer for Bitcore

89 lines (79 loc) 2.49 kB
import { HttpClient } from "@angular/common/http"; import { Injectable } from "@angular/core"; import { BehaviorSubject, Observable } from "rxjs"; import { DefaultProvider } from "../../providers/default/default"; import { Logger } from "../../providers/logger/logger"; import * as _ from "lodash"; export interface ChainNetwork { chain: string; network: string; } export interface NetworkSettings { availableNetworks: ChainNetwork[]; selectedNetwork: ChainNetwork; } @Injectable() export class ApiProvider { public defaultNetwork = { chain: this.defaults.getDefault('%CHAIN%'), network: this.defaults.getDefault('%NETWORK%') }; public networkSettings = { availableNetworks: [this.defaultNetwork], selectedNetwork: this.defaultNetwork }; public ratesAPI = { btc: 'https://bitpay.com/api/rates', bch: 'https://bitpay.com/api/rates/bch' }; constructor( public httpClient: HttpClient, private defaults: DefaultProvider, private logger: Logger ) { this.getAvailableNetworks().subscribe(data => { const availableNetworks = data; this.networkSettings = { availableNetworks, selectedNetwork: this.networkSettings.selectedNetwork }; }); } public getAvailableNetworks(): Observable<ChainNetwork[]> { return this.httpClient.get<ChainNetwork[]>( this.getUrlPrefix() + '/status/enabled-chains' ); } public getUrlPrefix(): string { const prefix: string = this.defaults.getDefault('%API_PREFIX%'); return prefix; } public getUrl(): string { const prefix: string = this.defaults.getDefault('%API_PREFIX%'); const chain: string = this.networkSettings.selectedNetwork.chain; const network: string = this.networkSettings.selectedNetwork.network; const apiPrefix = `${prefix}/${chain}/${network}`; return apiPrefix; } public getConfig(): ChainNetwork { const config = { chain: this.networkSettings.selectedNetwork.chain, network: this.networkSettings.selectedNetwork.network }; return config; } public changeNetwork(network: ChainNetwork): void { const availableNetworks = this.networkSettings.availableNetworks; const isValid = _.some(availableNetworks, network); if (!isValid) { this.logger.error( 'Invalid URL: missing or invalid COIN or NETWORK param' ); return; } this.networkSettings = { availableNetworks, selectedNetwork: network }; } }