6
6
import pjson = require( '../package.json' ) ;
7
7
import * as _ from 'lodash' ;
8
8
9
- import GlobalCoinFactory from './v2/coinFactory' ;
10
- import { BaseCoin , common } from '@bitgo/sdk-core' ;
9
+ import { BaseCoin , CoinFactory , common } from '@bitgo/sdk-core' ;
11
10
import { BitGoAPI , BitGoAPIOptions } from '@bitgo/sdk-api' ;
11
+ import { createTokenMapUsingTrimmedConfigDetails , TrimmedAmsTokenConfig } from '@bitgo/statics' ;
12
+ import { GlobalCoinFactory , registerCoinConstructors } from './v2/coinFactory' ;
12
13
13
- export type BitGoOptions = BitGoAPIOptions ;
14
+ // constructor params used exclusively for BitGo class
15
+ export type BitGoOptions = BitGoAPIOptions & {
16
+ useAms ?: boolean ;
17
+ } ;
14
18
15
19
export class BitGo extends BitGoAPI {
20
+ private _coinFactory : CoinFactory ;
21
+ private _useAms : boolean ;
16
22
/**
17
23
* Constructor for BitGo Object
18
24
*/
19
- constructor ( params : BitGoAPIOptions = { } ) {
25
+ constructor ( params : BitGoOptions = { } ) {
20
26
super ( params ) ;
21
27
if (
22
28
! common . validateParams (
@@ -34,7 +40,8 @@ export class BitGo extends BitGoAPI {
34
40
'stellarFederationServerUrl' ,
35
41
]
36
42
) ||
37
- ( params . useProduction && ! _ . isBoolean ( params . useProduction ) )
43
+ ( params . useProduction && ! _ . isBoolean ( params . useProduction ) ) ||
44
+ ( params . useAms && ! _ . isBoolean ( params . useAms ) )
38
45
) {
39
46
throw new Error ( 'invalid argument' ) ;
40
47
}
@@ -43,15 +50,27 @@ export class BitGo extends BitGoAPI {
43
50
throw new Error ( 'invalid argument - must provide both client id and secret' ) ;
44
51
}
45
52
53
+ this . _useAms = ! ! params . useAms ;
46
54
this . _version = pjson . version ;
47
55
this . _userAgent = params . userAgent || 'BitGoJS/' + this . version ( ) ;
56
+ this . _coinFactory = new CoinFactory ( ) ;
57
+ }
58
+
59
+ initCoinFactory ( tokenConfigMap : Record < string , TrimmedAmsTokenConfig [ ] > ) : void {
60
+ // TODO(WIN-5057): use AMS endpoint to fetch config details
61
+ const coinMap = createTokenMapUsingTrimmedConfigDetails ( tokenConfigMap ) ;
62
+ this . _coinFactory = new CoinFactory ( ) ;
63
+ registerCoinConstructors ( this . _coinFactory , coinMap ) ;
48
64
}
49
65
50
66
/**
51
67
* Create a basecoin object
52
68
* @param coinName
53
69
*/
54
70
coin ( coinName : string ) : BaseCoin {
71
+ if ( this . _useAms ) {
72
+ return this . _coinFactory . getInstance ( this , coinName ) ;
73
+ }
55
74
return GlobalCoinFactory . getInstance ( this , coinName ) ;
56
75
}
57
76
0 commit comments