@bitgo-beta/sdk-core 8.2.1-beta.919 → 8.2.1-beta.920

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @prettier
3
3
  */
4
- import { BaseCoin as StaticsBaseCoin } from '@bitgo-beta/statics';
4
+ import { CoinMap, BaseCoin as StaticsBaseCoin } from '@bitgo-beta/statics';
5
5
  import { BaseCoin } from './baseCoin';
6
6
  import { BitGoBase } from './bitgoBase';
7
7
  export type CoinConstructor = (bitgo: BitGoBase, staticsCoin?: Readonly<StaticsBaseCoin>) => BaseCoin;
@@ -11,7 +11,8 @@ export interface NamedCoinConstructor {
11
11
  }
12
12
  export declare class CoinFactory {
13
13
  private coinConstructors;
14
- constructor();
14
+ private coinMap;
15
+ constructor(coinMap?: CoinMap);
15
16
  /**
16
17
  * @param name Name of coin or address
17
18
  * @returns {(Object|undefined)}
@@ -23,6 +24,13 @@ export declare class CoinFactory {
23
24
  * @throws Error
24
25
  */
25
26
  register(name: string, coin: CoinConstructor): void;
27
+ /**
28
+ * Registers a token in the coin map and the constructor map.
29
+ * @param staticsCoin The static coin definition from BitGo Statics
30
+ * @param coinConstructor The constructor for the coin plugin
31
+ * @throws Error
32
+ */
33
+ registerToken(staticsCoin: Readonly<StaticsBaseCoin>, coinConstructor: CoinConstructor): void;
26
34
  /**
27
35
  * @param bitgo Instance of BitGo
28
36
  * @param name Name of coin or address
@@ -1 +1 @@
1
- {"version":3,"file":"coinFactory.d.ts","sourceRoot":"","sources":["../../../src/bitgo/coinFactory.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAS,QAAQ,IAAI,eAAe,EAAuB,MAAM,qBAAqB,CAAC;AAC9F,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,KAAK,QAAQ,CAAC;AAEtG,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,eAAe,CAAC;CAClC;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,gBAAgB,CAA+B;;IAMvD;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAO1B;;;;OAIG;IACI,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,IAAI;IAI1D;;;;;OAKG;IACI,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ;CAmB7D;AAED,eAAO,MAAM,iBAAiB,EAAE,WAA+B,CAAC"}
1
+ {"version":3,"file":"coinFactory.d.ts","sourceRoot":"","sources":["../../../src/bitgo/coinFactory.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAS,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAuB,MAAM,qBAAqB,CAAC;AACvG,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,KAAK,QAAQ,CAAC;AAEtG,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,eAAe,CAAC;CAClC;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,OAAO,CAAU;gBAEb,OAAO,GAAE,OAAe;IAKpC;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAO1B;;;;OAIG;IACI,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,IAAI;IAI1D;;;;;OAKG;IACI,aAAa,CAAC,WAAW,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,eAAe,EAAE,eAAe,GAAG,IAAI;IAapG;;;;;OAKG;IACI,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ;CAmB7D;AAED,eAAO,MAAM,iBAAiB,EAAE,WAA+B,CAAC"}
@@ -7,8 +7,9 @@ exports.GlobalCoinFactory = exports.CoinFactory = void 0;
7
7
  const statics_1 = require("@bitgo-beta/statics");
8
8
  const errors_1 = require("./errors");
9
9
  class CoinFactory {
10
- constructor() {
10
+ constructor(coinMap = statics_1.coins) {
11
11
  this.coinConstructors = new Map();
12
+ this.coinMap = coinMap;
12
13
  }
13
14
  /**
14
15
  * @param name Name of coin or address
@@ -28,6 +29,20 @@ class CoinFactory {
28
29
  register(name, coin) {
29
30
  this.coinConstructors.set(name, coin);
30
31
  }
32
+ /**
33
+ * Registers a token in the coin map and the constructor map.
34
+ * @param staticsCoin The static coin definition from BitGo Statics
35
+ * @param coinConstructor The constructor for the coin plugin
36
+ * @throws Error
37
+ */
38
+ registerToken(staticsCoin, coinConstructor) {
39
+ if (!(this.coinMap.has(staticsCoin.name) ||
40
+ this.coinMap.has(staticsCoin.id) ||
41
+ (staticsCoin.alias && this.coinMap.has(staticsCoin.alias)))) {
42
+ this.coinMap.addCoin(staticsCoin);
43
+ }
44
+ this.register(staticsCoin.name, coinConstructor);
45
+ }
31
46
  /**
32
47
  * @param bitgo Instance of BitGo
33
48
  * @param name Name of coin or address
@@ -37,7 +52,7 @@ class CoinFactory {
37
52
  getInstance(bitgo, name) {
38
53
  let staticsCoin;
39
54
  try {
40
- staticsCoin = statics_1.coins.get(name);
55
+ staticsCoin = this.coinMap.get(name);
41
56
  }
42
57
  catch (e) {
43
58
  if (!(e instanceof statics_1.CoinNotDefinedError)) {
@@ -53,4 +68,4 @@ class CoinFactory {
53
68
  }
54
69
  exports.CoinFactory = CoinFactory;
55
70
  exports.GlobalCoinFactory = new CoinFactory();
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29pbkZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYml0Z28vY29pbkZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7O0dBRUc7QUFDSCxpREFBOEY7QUFHOUYscUNBQWdEO0FBU2hELE1BQWEsV0FBVztJQUd0QjtRQUNFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7O09BR0c7SUFDSyxrQkFBa0IsQ0FBQyxJQUFZO1FBQ3JDLElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3BDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxRQUFRLENBQUMsSUFBWSxFQUFFLElBQXFCO1FBQ2pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLFdBQVcsQ0FBQyxLQUFnQixFQUFFLElBQVk7UUFDL0MsSUFBSSxXQUFXLENBQUM7UUFFaEIsSUFBSSxDQUFDO1lBQ0gsV0FBVyxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksNkJBQW1CLENBQUMsRUFBRSxDQUFDO2dCQUN4QyxNQUFNLENBQUMsQ0FBQztZQUNWLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWxELElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsT0FBTyxXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFFRCxNQUFNLElBQUksNkJBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztDQUNGO0FBcERELGtDQW9EQztBQUVZLFFBQUEsaUJBQWlCLEdBQWdCLElBQUksV0FBVyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQgeyBjb2lucywgQmFzZUNvaW4gYXMgU3RhdGljc0Jhc2VDb2luLCBDb2luTm90RGVmaW5lZEVycm9yIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBCYXNlQ29pbiB9IGZyb20gJy4vYmFzZUNvaW4nO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi9iaXRnb0Jhc2UnO1xuaW1wb3J0IHsgVW5zdXBwb3J0ZWRDb2luRXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XG5cbmV4cG9ydCB0eXBlIENvaW5Db25zdHJ1Y3RvciA9IChiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pID0+IEJhc2VDb2luO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hbWVkQ29pbkNvbnN0cnVjdG9yIHtcbiAgbmFtZTogc3RyaW5nO1xuICBjb2luQ29uc3RydWN0b3I6IENvaW5Db25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGNsYXNzIENvaW5GYWN0b3J5IHtcbiAgcHJpdmF0ZSBjb2luQ29uc3RydWN0b3JzOiBNYXA8c3RyaW5nLCBDb2luQ29uc3RydWN0b3I+O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29pbkNvbnN0cnVjdG9ycyA9IG5ldyBNYXAoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIGNvaW4gb3IgYWRkcmVzc1xuICAgKiBAcmV0dXJucyB7KE9iamVjdHx1bmRlZmluZWQpfVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRDb2luQ29uc3RydWN0b3IobmFtZTogc3RyaW5nKTogQ29pbkNvbnN0cnVjdG9yIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5jb2luQ29uc3RydWN0b3JzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29pbkNvbnN0cnVjdG9ycyA9IG5ldyBNYXAoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29pbkNvbnN0cnVjdG9ycy5nZXQobmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiBjb2luIG9yIGFkZHJlc3NcbiAgICogQHBhcmFtIGNvaW4gQ29pbiBwbHVnaW4ncyBjb25zdHJ1Y3RvclxuICAgKiBAdGhyb3dzIEVycm9yXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXIobmFtZTogc3RyaW5nLCBjb2luOiBDb2luQ29uc3RydWN0b3IpOiB2b2lkIHtcbiAgICB0aGlzLmNvaW5Db25zdHJ1Y3RvcnMuc2V0KG5hbWUsIGNvaW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBiaXRnbyBJbnN0YW5jZSBvZiBCaXRHb1xuICAgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIGNvaW4gb3IgYWRkcmVzc1xuICAgKiBAdGhyb3dzIENvaW5Ob3REZWZpbmVkRXJyb3JcbiAgICogQHRocm93cyBVbnN1cHBvcnRlZENvaW5FcnJvclxuICAgKi9cbiAgcHVibGljIGdldEluc3RhbmNlKGJpdGdvOiBCaXRHb0Jhc2UsIG5hbWU6IHN0cmluZyk6IEJhc2VDb2luIHtcbiAgICBsZXQgc3RhdGljc0NvaW47XG5cbiAgICB0cnkge1xuICAgICAgc3RhdGljc0NvaW4gPSBjb2lucy5nZXQobmFtZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIENvaW5Ob3REZWZpbmVkRXJyb3IpKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY29uc3RydWN0b3IgPSB0aGlzLmdldENvaW5Db25zdHJ1Y3RvcihuYW1lKTtcblxuICAgIGlmIChjb25zdHJ1Y3Rvcikge1xuICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yKGJpdGdvLCBzdGF0aWNzQ29pbik7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkQ29pbkVycm9yKG5hbWUpO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBHbG9iYWxDb2luRmFjdG9yeTogQ29pbkZhY3RvcnkgPSBuZXcgQ29pbkZhY3RvcnkoKTtcbiJdfQ==
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29pbkZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYml0Z28vY29pbkZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7O0dBRUc7QUFDSCxpREFBdUc7QUFHdkcscUNBQWdEO0FBU2hELE1BQWEsV0FBVztJQUl0QixZQUFZLFVBQW1CLGVBQUs7UUFDbEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGtCQUFrQixDQUFDLElBQVk7UUFDckMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDcEMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFFBQVEsQ0FBQyxJQUFZLEVBQUUsSUFBcUI7UUFDakQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksYUFBYSxDQUFDLFdBQXNDLEVBQUUsZUFBZ0M7UUFDM0YsSUFDRSxDQUFDLENBQ0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztZQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ2hDLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDM0QsRUFDRCxDQUFDO1lBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxXQUFXLENBQUMsS0FBZ0IsRUFBRSxJQUFZO1FBQy9DLElBQUksV0FBVyxDQUFDO1FBRWhCLElBQUksQ0FBQztZQUNILFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSw2QkFBbUIsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hDLE1BQU0sQ0FBQyxDQUFDO1lBQ1YsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbEQsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixPQUFPLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUVELE1BQU0sSUFBSSw2QkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDO0NBQ0Y7QUF6RUQsa0NBeUVDO0FBRVksUUFBQSxpQkFBaUIsR0FBZ0IsSUFBSSxXQUFXLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCB7IGNvaW5zLCBDb2luTWFwLCBCYXNlQ29pbiBhcyBTdGF0aWNzQmFzZUNvaW4sIENvaW5Ob3REZWZpbmVkRXJyb3IgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEJhc2VDb2luIH0gZnJvbSAnLi9iYXNlQ29pbic7XG5pbXBvcnQgeyBCaXRHb0Jhc2UgfSBmcm9tICcuL2JpdGdvQmFzZSc7XG5pbXBvcnQgeyBVbnN1cHBvcnRlZENvaW5FcnJvciB9IGZyb20gJy4vZXJyb3JzJztcblxuZXhwb3J0IHR5cGUgQ29pbkNvbnN0cnVjdG9yID0gKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPikgPT4gQmFzZUNvaW47XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmFtZWRDb2luQ29uc3RydWN0b3Ige1xuICBuYW1lOiBzdHJpbmc7XG4gIGNvaW5Db25zdHJ1Y3RvcjogQ29pbkNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgY2xhc3MgQ29pbkZhY3Rvcnkge1xuICBwcml2YXRlIGNvaW5Db25zdHJ1Y3RvcnM6IE1hcDxzdHJpbmcsIENvaW5Db25zdHJ1Y3Rvcj47XG4gIHByaXZhdGUgY29pbk1hcDogQ29pbk1hcDtcblxuICBjb25zdHJ1Y3Rvcihjb2luTWFwOiBDb2luTWFwID0gY29pbnMpIHtcbiAgICB0aGlzLmNvaW5Db25zdHJ1Y3RvcnMgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5jb2luTWFwID0gY29pbk1hcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIGNvaW4gb3IgYWRkcmVzc1xuICAgKiBAcmV0dXJucyB7KE9iamVjdHx1bmRlZmluZWQpfVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRDb2luQ29uc3RydWN0b3IobmFtZTogc3RyaW5nKTogQ29pbkNvbnN0cnVjdG9yIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5jb2luQ29uc3RydWN0b3JzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29pbkNvbnN0cnVjdG9ycyA9IG5ldyBNYXAoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29pbkNvbnN0cnVjdG9ycy5nZXQobmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiBjb2luIG9yIGFkZHJlc3NcbiAgICogQHBhcmFtIGNvaW4gQ29pbiBwbHVnaW4ncyBjb25zdHJ1Y3RvclxuICAgKiBAdGhyb3dzIEVycm9yXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXIobmFtZTogc3RyaW5nLCBjb2luOiBDb2luQ29uc3RydWN0b3IpOiB2b2lkIHtcbiAgICB0aGlzLmNvaW5Db25zdHJ1Y3RvcnMuc2V0KG5hbWUsIGNvaW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHRva2VuIGluIHRoZSBjb2luIG1hcCBhbmQgdGhlIGNvbnN0cnVjdG9yIG1hcC5cbiAgICogQHBhcmFtIHN0YXRpY3NDb2luIFRoZSBzdGF0aWMgY29pbiBkZWZpbml0aW9uIGZyb20gQml0R28gU3RhdGljc1xuICAgKiBAcGFyYW0gY29pbkNvbnN0cnVjdG9yIFRoZSBjb25zdHJ1Y3RvciBmb3IgdGhlIGNvaW4gcGx1Z2luXG4gICAqIEB0aHJvd3MgRXJyb3JcbiAgICovXG4gIHB1YmxpYyByZWdpc3RlclRva2VuKHN0YXRpY3NDb2luOiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+LCBjb2luQ29uc3RydWN0b3I6IENvaW5Db25zdHJ1Y3Rvcik6IHZvaWQge1xuICAgIGlmIChcbiAgICAgICEoXG4gICAgICAgIHRoaXMuY29pbk1hcC5oYXMoc3RhdGljc0NvaW4ubmFtZSkgfHxcbiAgICAgICAgdGhpcy5jb2luTWFwLmhhcyhzdGF0aWNzQ29pbi5pZCkgfHxcbiAgICAgICAgKHN0YXRpY3NDb2luLmFsaWFzICYmIHRoaXMuY29pbk1hcC5oYXMoc3RhdGljc0NvaW4uYWxpYXMpKVxuICAgICAgKVxuICAgICkge1xuICAgICAgdGhpcy5jb2luTWFwLmFkZENvaW4oc3RhdGljc0NvaW4pO1xuICAgIH1cbiAgICB0aGlzLnJlZ2lzdGVyKHN0YXRpY3NDb2luLm5hbWUsIGNvaW5Db25zdHJ1Y3Rvcik7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGJpdGdvIEluc3RhbmNlIG9mIEJpdEdvXG4gICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgY29pbiBvciBhZGRyZXNzXG4gICAqIEB0aHJvd3MgQ29pbk5vdERlZmluZWRFcnJvclxuICAgKiBAdGhyb3dzIFVuc3VwcG9ydGVkQ29pbkVycm9yXG4gICAqL1xuICBwdWJsaWMgZ2V0SW5zdGFuY2UoYml0Z286IEJpdEdvQmFzZSwgbmFtZTogc3RyaW5nKTogQmFzZUNvaW4ge1xuICAgIGxldCBzdGF0aWNzQ29pbjtcblxuICAgIHRyeSB7XG4gICAgICBzdGF0aWNzQ29pbiA9IHRoaXMuY29pbk1hcC5nZXQobmFtZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIENvaW5Ob3REZWZpbmVkRXJyb3IpKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY29uc3RydWN0b3IgPSB0aGlzLmdldENvaW5Db25zdHJ1Y3RvcihuYW1lKTtcblxuICAgIGlmIChjb25zdHJ1Y3Rvcikge1xuICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yKGJpdGdvLCBzdGF0aWNzQ29pbik7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkQ29pbkVycm9yKG5hbWUpO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBHbG9iYWxDb2luRmFjdG9yeTogQ29pbkZhY3RvcnkgPSBuZXcgQ29pbkZhY3RvcnkoKTtcbiJdfQ==