1+ import PromiseUtils from '../../PromiseUtils'
2+ import Coin from '../Coin'
3+ // noinspection NpmUsedModulesInstalled
4+ import request from 'request-promise'
5+ import crypto from 'crypto'
6+ import querystring from 'querystring'
7+
8+ const settings = require ( '../../../settings.json' )
9+
10+ export default class BitgrailWallet {
11+ static getBalance ( ) {
12+ return PromiseUtils . forEachPromise ( settings . accounts . bitgrail , this . _getBalanceForCredential )
13+ }
14+
15+ /**
16+ * Returns the balances for a Bitgrail account.
17+ * @param credential The Bitgrail api credentials.
18+ * @return {Promise } The account balances.
19+ */
20+ static _getBalanceForCredential ( credential ) {
21+ return new Promise ( ( resolve , reject ) => {
22+ let params = {
23+ 'nonce' : new Date ( ) . getTime ( )
24+ }
25+ let options = {
26+ method : 'POST' ,
27+ uri : 'https://bitgrail.com/api/v1/balances' ,
28+ form : params ,
29+ json : true ,
30+ headers : {
31+ 'KEY' : credential . apiKey ,
32+ 'SIGNATURE' : BitgrailWallet . _signParameters ( credential , params )
33+ }
34+ }
35+ return request ( options )
36+ . then ( data => {
37+ let result = [ ]
38+ let balances = data . response
39+ for ( let symbol in balances ) {
40+ let amount = balances [ symbol ] . balance
41+ result . push ( new Coin ( symbol , amount , 'Bitgrail' ) )
42+ }
43+ resolve ( result )
44+
45+ } )
46+ . catch ( err => {
47+ reject ( err )
48+ } )
49+ }
50+ )
51+ }
52+
53+ static _signParameters ( credential , body ) {
54+ body = querystring . stringify ( body )
55+ let hmac = crypto . createHmac ( 'sha512' , credential . apiSecret )
56+ return hmac . update ( body ) . digest ( 'hex' )
57+ }
58+ }
0 commit comments