Commit 36213223 authored by Maxim Bogdanov's avatar Maxim Bogdanov 🙉

Fixes and inprovements to work with destream network.

parent cc4ae9ee
......@@ -53,6 +53,9 @@ export class CoinNotationPipe implements PipeTransform {
case "TuSTRAT":
temp = value / 100;
return temp.toFixed(this.decimalLimit);
case "DST":
temp = value / 100000000;
return temp.toFixed(this.decimalLimit);
}
}
}
......
import { Injectable } from '@angular/core';
import { Http, Headers, Response, RequestOptions, URLSearchParams} from '@angular/http';
import { Http, Headers, Response, RequestOptions, URLSearchParams } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/switchMap';
......@@ -23,217 +23,227 @@ import { TransactionSending } from '../classes/transaction-sending';
*/
@Injectable()
export class ApiService {
constructor(private http: Http, private globalService: GlobalService) {};
private headers = new Headers({'Content-Type': 'application/json'});
private pollingInterval = 3000;
private destreamApiUrl = 'http://localhost:56864/api';
private currentApiUrl = 'http://localhost:56864/api';
/**
* Gets available wallets at the default path
*/
getWalletFiles(): Observable<any> {
return this.http
.get(this.destreamApiUrl + '/wallet/files')
.map((response: Response) => response);
}
/**
* Get a new mnemonic
*/
getNewMnemonic(): Observable<any> {
let params: URLSearchParams = new URLSearchParams();
params.set('language', 'English');
params.set('wordCount', '12');
return this.http
.get(this.destreamApiUrl + '/wallet/mnemonic', new RequestOptions({headers: this.headers, search: params}))
.map((response: Response) => response);
}
/**
* Create a new DeStream wallet.
*/
createDeStreamWallet(data: WalletCreation): Observable<any> {
return this.http
.post(this.destreamApiUrl + '/wallet/create/', JSON.stringify(data), {headers: this.headers})
.map((response: Response) => response);
}
/**
* Recover a DeStream wallet.
*/
recoverDeStreamWallet(data: WalletRecovery): Observable<any> {
return this.http
.post(this.destreamApiUrl + '/wallet/recover/', JSON.stringify(data), {headers: this.headers})
.map((response: Response) => response);
}
/**
* Load a DeStream wallet
*/
loadDeStreamWallet(data: WalletLoad): Observable<any> {
return this.http
.post(this.destreamApiUrl + '/wallet/load/', JSON.stringify(data), {headers: this.headers})
.map((response: Response) => response);
}
/**
* Get wallet status info from the API.
*/
getWalletStatus(): Observable<any> {
return this.http
.get(this.currentApiUrl + '/wallet/status')
.map((response: Response) => response);
}
/**
* Get general wallet info from the API.
*/
getGeneralInfo(data: WalletInfo): Observable<any> {
let params: URLSearchParams = new URLSearchParams();
params.set('Name', data.walletName);
return Observable
.interval(this.pollingInterval)
.startWith(0)
.switchMap(() => this.http.get(this.currentApiUrl + '/wallet/general-info', new RequestOptions({headers: this.headers, search: params})))
.map((response: Response) => response);
}
/**
* Get wallet balance info from the API.
*/
getWalletBalance(data: WalletInfo): Observable<any> {
let params: URLSearchParams = new URLSearchParams();
params.set('walletName', data.walletName);
return Observable
.interval(this.pollingInterval)
.startWith(0)
.switchMap(() => this.http.get(this.currentApiUrl + '/wallet/balance', new RequestOptions({headers: this.headers, search: params})))
.map((response: Response) => response);
}
/**
* Get the maximum sendable amount for a given fee from the API
*/
getMaximumBalance(data): Observable<any> {
let params: URLSearchParams = new URLSearchParams();
params.set('walletName', data.walletName);
params.set('accountName', "account 0");
params.set('feeType', data.feeType);
params.set('allowUnconfirmed', "true");
return this.http
.get(this.currentApiUrl + '/wallet/maxbalance', new RequestOptions({headers: this.headers, search: params}))
.map((response: Response) => response);
}
/**
* Get a wallets transaction history info from the API.
*/
getWalletHistory(data: WalletInfo): Observable<any> {
let params: URLSearchParams = new URLSearchParams();
params.set('walletName', data.walletName);
return Observable
.interval(this.pollingInterval)
.startWith(0)
.switchMap(() => this.http.get(this.currentApiUrl + '/wallet/history', new RequestOptions({headers: this.headers, search: params})))
.map((response: Response) => response);
}
/**
* Get an unused receive address for a certain wallet from the API.
*/
getUnusedReceiveAddress(data: WalletInfo): Observable<any> {
let params: URLSearchParams = new URLSearchParams();
params.set('walletName', data.walletName);
params.set('accountName', "account 0"); //temporary
return this.http
.get(this.currentApiUrl + '/wallet/unusedaddress', new RequestOptions({headers: this.headers, search: params}))
.map((response: Response) => response);
}
/**
* Get multiple unused receive addresses for a certain wallet from the API.
*/
getUnusedReceiveAddresses(data: WalletInfo, count: string): Observable<any> {
let params: URLSearchParams = new URLSearchParams();
params.set('walletName', data.walletName);
params.set('accountName', "account 0"); //temporary
params.set('count', count);
return this.http
.get(this.currentApiUrl + '/wallet/unusedaddresses', new RequestOptions({headers: this.headers, search: params}))
.map((response: Response) => response);
}
/**
* Get get all receive addresses for an account of a wallet from the API.
*/
getAllReceiveAddresses(data: WalletInfo): Observable<any> {
let params: URLSearchParams = new URLSearchParams();
params.set('walletName', data.walletName);
params.set('accountName', "account 0"); //temporary
return this.http
.get(this.currentApiUrl + '/wallet/addresses', new RequestOptions({headers: this.headers, search: params}))
.map((response: Response) => response);
}
/**
* Estimate the fee of a transaction
*/
estimateFee(data: FeeEstimation): Observable<any> {
let params: URLSearchParams = new URLSearchParams();
params.set('walletName', data.walletName);
params.set('accountName', data.accountName);
params.set('destinationAddress', data.destinationAddress);
params.set('amount', data.amount);
params.set('feeType', data.feeType);
params.set('allowUnconfirmed', "true");
return this.http
.get(this.currentApiUrl + '/wallet/estimate-txfee', new RequestOptions({headers: this.headers, search: params}))
.map((response: Response) => response);
}
/**
* Build a transaction
*/
buildTransaction(data: TransactionBuilding): Observable<any> {
return this.http
.post(this.currentApiUrl + '/wallet/build-transaction', JSON.stringify(data), {headers: this.headers})
.map((response: Response) => response);
}
/**
* Send transaction
*/
sendTransaction(data: TransactionSending): Observable<any> {
return this.http
.post(this.currentApiUrl + '/wallet/send-transaction', JSON.stringify(data), {headers: this.headers})
.map((response: Response) => response);
}
/**
* Send shutdown signal to the daemon
*/
shutdownNode(): Observable<any> {
return this.http
.post(this.currentApiUrl + '/node/shutdown', '')
.map((response: Response) => response);
}
constructor(private http: Http, private globalService: GlobalService) { };
private headers = new Headers({ 'Content-Type': 'application/json' });
private pollingInterval = 3000;
private destreamApiUrl = 'http://localhost:56864/api';
private currentApiUrl = 'http://localhost:56864/api';
private readonly accountName = 'account 0';
/**
* Gets available wallets at the default path
*/
getWalletFiles(): Observable<any> {
return this.http
.get(this.destreamApiUrl + '/wallet/files')
.map((response: Response) => response);
}
/**
* Get a new mnemonic
*/
getNewMnemonic(): Observable<any> {
let params: URLSearchParams = new URLSearchParams();
params.set('language', 'English');
params.set('wordCount', '12');
return this.http
.get(this.destreamApiUrl + '/wallet/mnemonic', new RequestOptions({ headers: this.headers, search: params }))
.map((response: Response) => response);
}
/**
* Create a new DeStream wallet.
*/
createDeStreamWallet(data: WalletCreation): Observable<any> {
return this.http
.post(this.destreamApiUrl + '/wallet/create/', JSON.stringify(data), { headers: this.headers })
.map((response: Response) => response);
}
/**
* Recover a DeStream wallet.
*/
recoverDeStreamWallet(data: WalletRecovery): Observable<any> {
return this.http
.post(this.destreamApiUrl + '/wallet/recover/', JSON.stringify(data), { headers: this.headers })
.map((response: Response) => response);
}
/**
* Load a DeStream wallet
*/
loadDeStreamWallet(data: WalletLoad): Observable<any> {
return this.http
.post(this.destreamApiUrl + '/wallet/load/', JSON.stringify(data), { headers: this.headers })
.map((response: Response) => response);
}
/**
* Get wallet status info from the API.
*/
getWalletStatus(): Observable<any> {
return this.http
.get(this.currentApiUrl + '/wallet/status')
.map((response: Response) => response);
}
/**
* Get general wallet info from the API.
*/
getGeneralInfo(data: WalletInfo): Observable<any> {
let params: URLSearchParams = new URLSearchParams();
params.set('Name', data.walletName);
return Observable
.interval(this.pollingInterval)
.startWith(0)
.switchMap(() => this.http.get(this.currentApiUrl + '/wallet/general-info', new RequestOptions({ headers: this.headers, search: params })))
.map((response: Response) => response);
}
/**
* Get wallet balance info from the API.
*/
getWalletBalance(data: WalletInfo): Observable<any> {
let params: URLSearchParams = new URLSearchParams();
params.set('walletName', data.walletName);
return Observable
.interval(this.pollingInterval)
.startWith(0)
.switchMap(() => this.http.get(this.currentApiUrl + '/wallet/balance', new RequestOptions({ headers: this.headers, search: params })))
.map((response: Response) => response);
}
/**
* Get the maximum sendable amount for a given fee from the API
*/
getMaximumBalance(data): Observable<any> {
let params: URLSearchParams = new URLSearchParams();
params.set('walletName', data.walletName);
params.set('accountName', this.accountName);
params.set('feeType', data.feeType);
params.set('allowUnconfirmed', "true");
return this.http
.get(this.currentApiUrl + '/wallet/maxbalance', new RequestOptions({ headers: this.headers, search: params }))
.map((response: Response) => response);
}
/**
* Get a wallets transaction history info from the API.
*/
getWalletHistory(data: WalletInfo): Observable<any> {
let params: URLSearchParams = new URLSearchParams();
params.set('walletName', data.walletName);
return Observable
.interval(this.pollingInterval)
.startWith(0)
.switchMap(() => this.http.get(this.currentApiUrl + '/wallet/history', new RequestOptions({ headers: this.headers, search: params })))
.map((response: Response) => response);
}
/**
* Get an unused receive address for a certain wallet from the API.
*/
getUnusedReceiveAddress(data: WalletInfo): Observable<any> {
let params: URLSearchParams = new URLSearchParams();
params.set('walletName', data.walletName);
params.set('accountName', this.accountName); //temporary
return this.http
.get(this.currentApiUrl + '/wallet/unusedaddress', new RequestOptions({ headers: this.headers, search: params }))
.map((response: Response) => response);
}
/**
* Get multiple unused receive addresses for a certain wallet from the API.
*/
getUnusedReceiveAddresses(data: WalletInfo, count: string): Observable<any> {
let params: URLSearchParams = new URLSearchParams();
params.set('walletName', data.walletName);
params.set('accountName', this.accountName); //temporary
params.set('count', count);
return this.http
.get(this.currentApiUrl + '/wallet/unusedaddresses', new RequestOptions({ headers: this.headers, search: params }))
.map((response: Response) => response);
}
/**
* Get get all receive addresses for an account of a wallet from the API.
*/
getAllReceiveAddresses(data: WalletInfo): Observable<any> {
let params: URLSearchParams = new URLSearchParams();
params.set('walletName', data.walletName);
params.set('accountName', this.accountName); //temporary
return this.http
.get(this.currentApiUrl + '/wallet/addresses', new RequestOptions({ headers: this.headers, search: params }))
.map((response: Response) => response);
}
/**
* Estimate the fee of a transaction
*/
estimateFee(data: FeeEstimation): Observable<any> {
let params: URLSearchParams = new URLSearchParams();
params.set('walletName', data.walletName);
params.set('accountName', data.accountName);
params.set('destinationAddress', data.destinationAddress);
params.set('amount', data.amount);
params.set('feeType', data.feeType);
params.set('allowUnconfirmed', "true");
return this.http
.get(this.currentApiUrl + '/wallet/estimate-txfee', new RequestOptions({ headers: this.headers, search: params }))
.map((response: Response) => response);
}
/**
* Build a transaction
*/
buildTransaction(data: TransactionBuilding): Observable<any> {
return this.http
.post(this.currentApiUrl + '/wallet/build-transaction', JSON.stringify(data), { headers: this.headers })
.map((response: Response) => response);
}
/**
* Send transaction
*/
sendTransaction(data: TransactionSending): Observable<any> {
return this.http
.post(this.currentApiUrl + '/wallet/send-transaction', JSON.stringify(data), { headers: this.headers })
.map((response: Response) => response);
}
getExtPubKey(data: WalletInfo): Observable<any> {
let params: URLSearchParams = new URLSearchParams();
params.set('walletName', data.walletName);
params.set('accountName', this.accountName);
return this.http.get(this.currentApiUrl + '/wallet/extpubkey', new RequestOptions({ headers: this.headers, search: params }))
.map((response: Response) => response);
}
/**
* Send shutdown signal to the daemon
*/
shutdownNode(): Observable<any> {
return this.http
.post(this.currentApiUrl + '/node/shutdown', '')
.map((response: Response) => response);
}
}
......@@ -19,5 +19,5 @@ export class NavigationService {
navigation$.filter(x => x === `${this.navBase}/destream-wallet`).subscribe(_ => this.pageSubject.next(Page.DeStream));
}
public pageSubject = new ReplaySubject(1);
public pageSubject = new ReplaySubject(0);
}
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import 'rxjs/add/observable/empty';
import { GlobalService } from '../../shared/services/global.service';
import { NavigationService, Page } from '../../shared/services/navigation.service';
class dateRequest {
constructor(public date: Date){}
constructor(public date: Date) { }
}
@Injectable()
export class AdvancedService {
private urlPrefix = '';
private readonly walletName;
private readonly accountName = 'account 0';
private headers = new HttpHeaders({'Content-Type': 'application/json'});
constructor(private httpClient: HttpClient, private globalService: GlobalService, navigationService: NavigationService) {
this.walletName = this.globalService.getWalletName();
navigationService.pageSubject.subscribe(x => this.urlPrefix = `http://localhost:3722${x}/api/Wallet/`);
}
public getExtPubKey(): Observable<string> {
const url = this.makeUrl(`extpubkey?WalletName=${this.walletName}&AccountName=${this.accountName}`);
return this.httpClient.get(url).map(x => x.toString());
}
public generateAddresses(count: number): Observable<string[]> {
const url = this.makeUrl(`unusedaddresses?WalletName=${this.walletName}&AccountName=${this.accountName}&Count=${count}`);
return this.httpClient.get(url).map(x => this.processAddresses(x));
private urlPrefix = '';
private readonly walletName;
private readonly accountName = 'account 0';
private headers = new HttpHeaders({ 'Content-Type': 'application/json' });
constructor(private httpClient: HttpClient, private globalService: GlobalService, navigationService: NavigationService) {
this.walletName = this.globalService.getWalletName();
this.urlPrefix = "http://localhost:56864/api/Wallet/";
}
public getExtPubKey(): Observable<string> {
console.info(this.urlPrefix);
const url = this.makeUrl(`extpubkey?WalletName=${this.walletName}&AccountName=${this.accountName}`);
return this.httpClient.get(url).map(x => x.toString());
}
public generateAddresses(count: number): Observable<string[]> {
const url = this.makeUrl(`unusedaddresses?WalletName=${this.walletName}&AccountName=${this.accountName}&Count=${count}`);
return this.httpClient.get(url).map(x => this.processAddresses(x));
}
public resyncFromDate(date: Date): Observable<any> {
date = new Date(date.getFullYear(), date.getMonth(), date.getDate()); //<- Strip any time values
const url = this.makeUrl('syncfromdate');
const data = JSON.stringify(new dateRequest(date));
return this.httpClient.post(url, data, { headers: this.headers }).map((x: Response) => x);
}
private processAddresses(response: any): string[] {
const addresses = new Array<string>();
for (const address of response) {
addresses.push(address);
}
return addresses;
}
public resyncFromDate(date: Date): Observable<any> {
date = new Date(date.getFullYear(), date.getMonth(), date.getDate()); //<- Strip any time values
const url = this.makeUrl('syncfromdate');
const data = JSON.stringify(new dateRequest(date));
return this.httpClient.post(url, data, {headers: this.headers}).map((x: Response) => x);
}
private processAddresses(response: any): string[] {
const addresses = new Array<string>();
for (const address of response) {
addresses.push(address);
}
return addresses;
}
private makeUrl(urlPostfix: string): string {
return `${this.urlPrefix}${urlPostfix}`;
}
private makeUrl(urlPostfix: string): string {
return `${this.urlPrefix}${urlPostfix}`;
}
}
......@@ -49,8 +49,8 @@ export class HistoryComponent {
response => {
if (response.status >= 200 && response.status < 400) {
const json = response.json();
if (json && json.transactionsHistory) {
historyResponse = json.transactionsHistory;
if (json && json.history.length) {
historyResponse = json.history[0].transactionsHistory;
this.getTransactionInfo(historyResponse);
}
}
......
......@@ -24,7 +24,7 @@ export class SidebarComponent implements OnInit {
ngOnInit() {
}
public loadDestreamWallet() {
public loadDeStreamWallet() {
this.globalService.setCoinName("DeStreamCoin");
this.globalService.setCoinUnit("DST");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment