@bitgo-beta/sdk-coin-evm 1.0.1-beta.62 → 1.0.1-beta.621
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.
- package/dist/src/ethLikeErc20Token.d.ts +20 -0
- package/dist/src/ethLikeErc20Token.d.ts.map +1 -0
- package/dist/src/ethLikeErc20Token.js +49 -0
- package/dist/src/ethLikeErc721Token.d.ts +20 -0
- package/dist/src/ethLikeErc721Token.d.ts.map +1 -0
- package/dist/src/ethLikeErc721Token.js +48 -0
- package/dist/src/evmCoin.d.ts +13 -2
- package/dist/src/evmCoin.d.ts.map +1 -1
- package/dist/src/evmCoin.js +51 -4
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -1
- package/dist/src/lib/utils.d.ts +20 -0
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +229 -1
- package/dist/src/register.d.ts +2 -1
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +39 -5
- package/package.json +8 -7
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @prettier
|
|
3
|
+
*/
|
|
4
|
+
import { EthLikeTokenConfig } from '@bitgo-beta/statics';
|
|
5
|
+
import { BitGoBase, CoinConstructor, MPCAlgorithm, NamedCoinConstructor } from '@bitgo-beta/sdk-core';
|
|
6
|
+
import { CoinNames, EthLikeToken } from '@bitgo-beta/abstract-eth';
|
|
7
|
+
import { TransactionBuilder } from './lib';
|
|
8
|
+
export declare class EthLikeErc20Token extends EthLikeToken {
|
|
9
|
+
readonly tokenConfig: EthLikeTokenConfig;
|
|
10
|
+
private readonly coinNames;
|
|
11
|
+
constructor(bitgo: BitGoBase, tokenConfig: EthLikeTokenConfig, coinNames: CoinNames);
|
|
12
|
+
static createTokenConstructor(config: EthLikeTokenConfig, coinNames: CoinNames): CoinConstructor;
|
|
13
|
+
static createTokenConstructors(coinNames: CoinNames): NamedCoinConstructor[];
|
|
14
|
+
protected getTransactionBuilder(): TransactionBuilder;
|
|
15
|
+
getMPCAlgorithm(): MPCAlgorithm;
|
|
16
|
+
supportsTss(): boolean;
|
|
17
|
+
recoveryBlockchainExplorerQuery(query: Record<string, string>): Promise<Record<string, unknown>>;
|
|
18
|
+
getFullName(): string;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=ethLikeErc20Token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ethLikeErc20Token.d.ts","sourceRoot":"","sources":["../../src/ethLikeErc20Token.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAS,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAU,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC9G,OAAO,EAAE,SAAS,EAAE,YAAY,EAAmC,MAAM,0BAA0B,CAAC;AACpG,OAAO,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAG3C,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,SAAgB,WAAW,EAAE,kBAAkB,CAAC;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;gBAE1B,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,kBAAkB,EAAE,SAAS,EAAE,SAAS;IAKnF,MAAM,CAAC,sBAAsB,CAAC,MAAM,EAAE,kBAAkB,EAAE,SAAS,EAAE,SAAS,GAAG,eAAe;IAIhG,MAAM,CAAC,uBAAuB,CAAC,SAAS,EAAE,SAAS,GAAG,oBAAoB,EAAE;IAI5E,SAAS,CAAC,qBAAqB,IAAI,kBAAkB;IAIrD,eAAe,IAAI,YAAY;IAI/B,WAAW,IAAI,OAAO;IAIhB,+BAA+B,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAatG,WAAW,IAAI,MAAM;CAGtB"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.EthLikeErc20Token = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* @prettier
|
|
9
|
+
*/
|
|
10
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
11
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
12
|
+
const abstract_eth_1 = require("@bitgo-beta/abstract-eth");
|
|
13
|
+
const lib_1 = require("./lib");
|
|
14
|
+
const assert_1 = __importDefault(require("assert"));
|
|
15
|
+
class EthLikeErc20Token extends abstract_eth_1.EthLikeToken {
|
|
16
|
+
constructor(bitgo, tokenConfig, coinNames) {
|
|
17
|
+
super(bitgo, tokenConfig, coinNames);
|
|
18
|
+
this.coinNames = coinNames;
|
|
19
|
+
}
|
|
20
|
+
static createTokenConstructor(config, coinNames) {
|
|
21
|
+
return (bitgo) => new this(bitgo, config, coinNames);
|
|
22
|
+
}
|
|
23
|
+
static createTokenConstructors(coinNames) {
|
|
24
|
+
return super.createTokenConstructors(coinNames);
|
|
25
|
+
}
|
|
26
|
+
getTransactionBuilder() {
|
|
27
|
+
return new lib_1.TransactionBuilder(statics_1.coins.get(this.getBaseChain()));
|
|
28
|
+
}
|
|
29
|
+
getMPCAlgorithm() {
|
|
30
|
+
return 'ecdsa';
|
|
31
|
+
}
|
|
32
|
+
supportsTss() {
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
async recoveryBlockchainExplorerQuery(query) {
|
|
36
|
+
const family = this.getFamily();
|
|
37
|
+
const evmConfig = sdk_core_1.common.Environments[this.bitgo.getEnv()].evm;
|
|
38
|
+
(0, assert_1.default)(evmConfig && this.getFamily() in evmConfig, `env config is missing for ${this.getFamily()} in ${this.bitgo.getEnv()}`);
|
|
39
|
+
const explorerUrl = evmConfig[family].baseUrl;
|
|
40
|
+
const apiToken = evmConfig[family].apiToken;
|
|
41
|
+
return await (0, abstract_eth_1.recoveryBlockchainExplorerQuery)(query, explorerUrl, apiToken);
|
|
42
|
+
}
|
|
43
|
+
//TODO: implement a way to return the coin family name or coin name instead of standard ERC20 Token.
|
|
44
|
+
getFullName() {
|
|
45
|
+
return 'ERC20 Token';
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.EthLikeErc20Token = EthLikeErc20Token;
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXRoTGlrZUVyYzIwVG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXRoTGlrZUVyYzIwVG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0dBRUc7QUFDSCxpREFBZ0U7QUFDaEUsbURBQThHO0FBQzlHLDJEQUFvRztBQUNwRywrQkFBMkM7QUFDM0Msb0RBQTRCO0FBRTVCLE1BQWEsaUJBQWtCLFNBQVEsMkJBQVk7SUFJakQsWUFBWSxLQUFnQixFQUFFLFdBQStCLEVBQUUsU0FBb0I7UUFDakYsS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDN0IsQ0FBQztJQUVELE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxNQUEwQixFQUFFLFNBQW9CO1FBQzVFLE9BQU8sQ0FBQyxLQUFnQixFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxNQUFNLENBQUMsdUJBQXVCLENBQUMsU0FBb0I7UUFDakQsT0FBTyxLQUFLLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVTLHFCQUFxQjtRQUM3QixPQUFPLElBQUksd0JBQWtCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxLQUFLLENBQUMsK0JBQStCLENBQUMsS0FBNkI7UUFDakUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sU0FBUyxHQUFHLGlCQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDL0QsSUFBQSxnQkFBTSxFQUNKLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksU0FBUyxFQUMxQyw2QkFBNkIsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDMUUsQ0FBQztRQUNGLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDOUMsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUM1QyxPQUFPLE1BQU0sSUFBQSw4Q0FBK0IsRUFBQyxLQUFLLEVBQUUsV0FBcUIsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsb0dBQW9HO0lBQ3BHLFdBQVc7UUFDVCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0NBQ0Y7QUE3Q0QsOENBNkNDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IHsgY29pbnMsIEV0aExpa2VUb2tlbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgQml0R29CYXNlLCBDb2luQ29uc3RydWN0b3IsIGNvbW1vbiwgTVBDQWxnb3JpdGhtLCBOYW1lZENvaW5Db25zdHJ1Y3RvciB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IENvaW5OYW1lcywgRXRoTGlrZVRva2VuLCByZWNvdmVyeUJsb2NrY2hhaW5FeHBsb3JlclF1ZXJ5IH0gZnJvbSAnQGJpdGdvLWJldGEvYWJzdHJhY3QtZXRoJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vbGliJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuZXhwb3J0IGNsYXNzIEV0aExpa2VFcmMyMFRva2VuIGV4dGVuZHMgRXRoTGlrZVRva2VuIHtcbiAgcHVibGljIHJlYWRvbmx5IHRva2VuQ29uZmlnOiBFdGhMaWtlVG9rZW5Db25maWc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29pbk5hbWVzOiBDb2luTmFtZXM7XG5cbiAgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgdG9rZW5Db25maWc6IEV0aExpa2VUb2tlbkNvbmZpZywgY29pbk5hbWVzOiBDb2luTmFtZXMpIHtcbiAgICBzdXBlcihiaXRnbywgdG9rZW5Db25maWcsIGNvaW5OYW1lcyk7XG4gICAgdGhpcy5jb2luTmFtZXMgPSBjb2luTmFtZXM7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcihjb25maWc6IEV0aExpa2VUb2tlbkNvbmZpZywgY29pbk5hbWVzOiBDb2luTmFtZXMpOiBDb2luQ29uc3RydWN0b3Ige1xuICAgIHJldHVybiAoYml0Z286IEJpdEdvQmFzZSkgPT4gbmV3IHRoaXMoYml0Z28sIGNvbmZpZywgY29pbk5hbWVzKTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVUb2tlbkNvbnN0cnVjdG9ycyhjb2luTmFtZXM6IENvaW5OYW1lcyk6IE5hbWVkQ29pbkNvbnN0cnVjdG9yW10ge1xuICAgIHJldHVybiBzdXBlci5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycyhjb2luTmFtZXMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFRyYW5zYWN0aW9uQnVpbGRlcigpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyKGNvaW5zLmdldCh0aGlzLmdldEJhc2VDaGFpbigpKSk7XG4gIH1cblxuICBnZXRNUENBbGdvcml0aG0oKTogTVBDQWxnb3JpdGhtIHtcbiAgICByZXR1cm4gJ2VjZHNhJztcbiAgfVxuXG4gIHN1cHBvcnRzVHNzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgcmVjb3ZlcnlCbG9ja2NoYWluRXhwbG9yZXJRdWVyeShxdWVyeTogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgICBjb25zdCBmYW1pbHkgPSB0aGlzLmdldEZhbWlseSgpO1xuICAgIGNvbnN0IGV2bUNvbmZpZyA9IGNvbW1vbi5FbnZpcm9ubWVudHNbdGhpcy5iaXRnby5nZXRFbnYoKV0uZXZtO1xuICAgIGFzc2VydChcbiAgICAgIGV2bUNvbmZpZyAmJiB0aGlzLmdldEZhbWlseSgpIGluIGV2bUNvbmZpZyxcbiAgICAgIGBlbnYgY29uZmlnIGlzIG1pc3NpbmcgZm9yICR7dGhpcy5nZXRGYW1pbHkoKX0gaW4gJHt0aGlzLmJpdGdvLmdldEVudigpfWBcbiAgICApO1xuICAgIGNvbnN0IGV4cGxvcmVyVXJsID0gZXZtQ29uZmlnW2ZhbWlseV0uYmFzZVVybDtcbiAgICBjb25zdCBhcGlUb2tlbiA9IGV2bUNvbmZpZ1tmYW1pbHldLmFwaVRva2VuO1xuICAgIHJldHVybiBhd2FpdCByZWNvdmVyeUJsb2NrY2hhaW5FeHBsb3JlclF1ZXJ5KHF1ZXJ5LCBleHBsb3JlclVybCBhcyBzdHJpbmcsIGFwaVRva2VuKTtcbiAgfVxuXG4gIC8vVE9ETzogaW1wbGVtZW50IGEgd2F5IHRvIHJldHVybiB0aGUgY29pbiBmYW1pbHkgbmFtZSBvciBjb2luIG5hbWUgaW5zdGVhZCBvZiBzdGFuZGFyZCBFUkMyMCBUb2tlbi5cbiAgZ2V0RnVsbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ0VSQzIwIFRva2VuJztcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @prettier
|
|
3
|
+
*/
|
|
4
|
+
import { EthLikeTokenConfig } from '@bitgo-beta/statics';
|
|
5
|
+
import { BitGoBase, CoinConstructor, MPCAlgorithm, NamedCoinConstructor } from '@bitgo-beta/sdk-core';
|
|
6
|
+
import { CoinNames, EthLikeToken } from '@bitgo-beta/abstract-eth';
|
|
7
|
+
import { TransactionBuilder } from './lib';
|
|
8
|
+
export declare class EthLikeErc721Token extends EthLikeToken {
|
|
9
|
+
readonly tokenConfig: EthLikeTokenConfig;
|
|
10
|
+
private readonly coinNames;
|
|
11
|
+
constructor(bitgo: BitGoBase, tokenConfig: EthLikeTokenConfig, coinNames: CoinNames);
|
|
12
|
+
static createTokenConstructor(config: EthLikeTokenConfig, coinNames: CoinNames): CoinConstructor;
|
|
13
|
+
static createTokenConstructors(coinNames: CoinNames): NamedCoinConstructor[];
|
|
14
|
+
protected getTransactionBuilder(): TransactionBuilder;
|
|
15
|
+
getMPCAlgorithm(): MPCAlgorithm;
|
|
16
|
+
supportsTss(): boolean;
|
|
17
|
+
recoveryBlockchainExplorerQuery(query: Record<string, string>): Promise<Record<string, unknown>>;
|
|
18
|
+
getFullName(): string;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=ethLikeErc721Token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ethLikeErc721Token.d.ts","sourceRoot":"","sources":["../../src/ethLikeErc721Token.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAS,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAU,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC9G,OAAO,EAAE,SAAS,EAAE,YAAY,EAAmC,MAAM,0BAA0B,CAAC;AACpG,OAAO,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAG3C,qBAAa,kBAAmB,SAAQ,YAAY;IAClD,SAAgB,WAAW,EAAE,kBAAkB,CAAC;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;gBAE1B,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,kBAAkB,EAAE,SAAS,EAAE,SAAS;IAKnF,MAAM,CAAC,sBAAsB,CAAC,MAAM,EAAE,kBAAkB,EAAE,SAAS,EAAE,SAAS,GAAG,eAAe;IAIhG,MAAM,CAAC,uBAAuB,CAAC,SAAS,EAAE,SAAS,GAAG,oBAAoB,EAAE;IAI5E,SAAS,CAAC,qBAAqB,IAAI,kBAAkB;IAIrD,eAAe,IAAI,YAAY;IAI/B,WAAW,IAAI,OAAO;IAIhB,+BAA+B,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAYtG,WAAW,IAAI,MAAM;CAGtB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.EthLikeErc721Token = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* @prettier
|
|
9
|
+
*/
|
|
10
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
11
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
12
|
+
const abstract_eth_1 = require("@bitgo-beta/abstract-eth");
|
|
13
|
+
const lib_1 = require("./lib");
|
|
14
|
+
const assert_1 = __importDefault(require("assert"));
|
|
15
|
+
class EthLikeErc721Token extends abstract_eth_1.EthLikeToken {
|
|
16
|
+
constructor(bitgo, tokenConfig, coinNames) {
|
|
17
|
+
super(bitgo, tokenConfig, coinNames);
|
|
18
|
+
this.coinNames = coinNames;
|
|
19
|
+
}
|
|
20
|
+
static createTokenConstructor(config, coinNames) {
|
|
21
|
+
return (bitgo) => new this(bitgo, config, coinNames);
|
|
22
|
+
}
|
|
23
|
+
static createTokenConstructors(coinNames) {
|
|
24
|
+
return super.createTokenConstructors(coinNames);
|
|
25
|
+
}
|
|
26
|
+
getTransactionBuilder() {
|
|
27
|
+
return new lib_1.TransactionBuilder(statics_1.coins.get(this.getBaseChain()));
|
|
28
|
+
}
|
|
29
|
+
getMPCAlgorithm() {
|
|
30
|
+
return 'ecdsa';
|
|
31
|
+
}
|
|
32
|
+
supportsTss() {
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
async recoveryBlockchainExplorerQuery(query) {
|
|
36
|
+
const family = this.getFamily();
|
|
37
|
+
const evmConfig = sdk_core_1.common.Environments[this.bitgo.getEnv()].evm;
|
|
38
|
+
(0, assert_1.default)(evmConfig && this.getFamily() in evmConfig, `env config is missing for ${this.getFamily()} in ${this.bitgo.getEnv()}`);
|
|
39
|
+
const explorerUrl = evmConfig[family].baseUrl;
|
|
40
|
+
const apiToken = evmConfig[family].apiToken;
|
|
41
|
+
return await (0, abstract_eth_1.recoveryBlockchainExplorerQuery)(query, explorerUrl, apiToken);
|
|
42
|
+
}
|
|
43
|
+
getFullName() {
|
|
44
|
+
return 'ERC721 Token';
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.EthLikeErc721Token = EthLikeErc721Token;
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXRoTGlrZUVyYzcyMVRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V0aExpa2VFcmM3MjFUb2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7R0FFRztBQUNILGlEQUFnRTtBQUNoRSxtREFBOEc7QUFDOUcsMkRBQW9HO0FBQ3BHLCtCQUEyQztBQUMzQyxvREFBNEI7QUFFNUIsTUFBYSxrQkFBbUIsU0FBUSwyQkFBWTtJQUlsRCxZQUFZLEtBQWdCLEVBQUUsV0FBK0IsRUFBRSxTQUFvQjtRQUNqRixLQUFLLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUM3QixDQUFDO0lBRUQsTUFBTSxDQUFDLHNCQUFzQixDQUFDLE1BQTBCLEVBQUUsU0FBb0I7UUFDNUUsT0FBTyxDQUFDLEtBQWdCLEVBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxTQUFvQjtRQUNqRCxPQUFPLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRVMscUJBQXFCO1FBQzdCLE9BQU8sSUFBSSx3QkFBa0IsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxLQUE2QjtRQUNqRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDaEMsTUFBTSxTQUFTLEdBQUcsaUJBQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUMvRCxJQUFBLGdCQUFNLEVBQ0osU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxTQUFTLEVBQzFDLDZCQUE2QixJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUMxRSxDQUFDO1FBQ0YsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUM5QyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDO1FBQzVDLE9BQU8sTUFBTSxJQUFBLDhDQUErQixFQUFDLEtBQUssRUFBRSxXQUFxQixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztDQUNGO0FBNUNELGdEQTRDQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCB7IGNvaW5zLCBFdGhMaWtlVG9rZW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEJpdEdvQmFzZSwgQ29pbkNvbnN0cnVjdG9yLCBjb21tb24sIE1QQ0FsZ29yaXRobSwgTmFtZWRDb2luQ29uc3RydWN0b3IgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBDb2luTmFtZXMsIEV0aExpa2VUb2tlbiwgcmVjb3ZlcnlCbG9ja2NoYWluRXhwbG9yZXJRdWVyeSB9IGZyb20gJ0BiaXRnby1iZXRhL2Fic3RyYWN0LWV0aCc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL2xpYic7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmV4cG9ydCBjbGFzcyBFdGhMaWtlRXJjNzIxVG9rZW4gZXh0ZW5kcyBFdGhMaWtlVG9rZW4ge1xuICBwdWJsaWMgcmVhZG9ubHkgdG9rZW5Db25maWc6IEV0aExpa2VUb2tlbkNvbmZpZztcbiAgcHJpdmF0ZSByZWFkb25seSBjb2luTmFtZXM6IENvaW5OYW1lcztcblxuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCB0b2tlbkNvbmZpZzogRXRoTGlrZVRva2VuQ29uZmlnLCBjb2luTmFtZXM6IENvaW5OYW1lcykge1xuICAgIHN1cGVyKGJpdGdvLCB0b2tlbkNvbmZpZywgY29pbk5hbWVzKTtcbiAgICB0aGlzLmNvaW5OYW1lcyA9IGNvaW5OYW1lcztcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVUb2tlbkNvbnN0cnVjdG9yKGNvbmZpZzogRXRoTGlrZVRva2VuQ29uZmlnLCBjb2luTmFtZXM6IENvaW5OYW1lcyk6IENvaW5Db25zdHJ1Y3RvciB7XG4gICAgcmV0dXJuIChiaXRnbzogQml0R29CYXNlKSA9PiBuZXcgdGhpcyhiaXRnbywgY29uZmlnLCBjb2luTmFtZXMpO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKGNvaW5OYW1lczogQ29pbk5hbWVzKTogTmFtZWRDb2luQ29uc3RydWN0b3JbXSB7XG4gICAgcmV0dXJuIHN1cGVyLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKGNvaW5OYW1lcyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0VHJhbnNhY3Rpb25CdWlsZGVyKCk6IFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXIoY29pbnMuZ2V0KHRoaXMuZ2V0QmFzZUNoYWluKCkpKTtcbiAgfVxuXG4gIGdldE1QQ0FsZ29yaXRobSgpOiBNUENBbGdvcml0aG0ge1xuICAgIHJldHVybiAnZWNkc2EnO1xuICB9XG5cbiAgc3VwcG9ydHNUc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyByZWNvdmVyeUJsb2NrY2hhaW5FeHBsb3JlclF1ZXJ5KHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAgIGNvbnN0IGZhbWlseSA9IHRoaXMuZ2V0RmFtaWx5KCk7XG4gICAgY29uc3QgZXZtQ29uZmlnID0gY29tbW9uLkVudmlyb25tZW50c1t0aGlzLmJpdGdvLmdldEVudigpXS5ldm07XG4gICAgYXNzZXJ0KFxuICAgICAgZXZtQ29uZmlnICYmIHRoaXMuZ2V0RmFtaWx5KCkgaW4gZXZtQ29uZmlnLFxuICAgICAgYGVudiBjb25maWcgaXMgbWlzc2luZyBmb3IgJHt0aGlzLmdldEZhbWlseSgpfSBpbiAke3RoaXMuYml0Z28uZ2V0RW52KCl9YFxuICAgICk7XG4gICAgY29uc3QgZXhwbG9yZXJVcmwgPSBldm1Db25maWdbZmFtaWx5XS5iYXNlVXJsO1xuICAgIGNvbnN0IGFwaVRva2VuID0gZXZtQ29uZmlnW2ZhbWlseV0uYXBpVG9rZW47XG4gICAgcmV0dXJuIGF3YWl0IHJlY292ZXJ5QmxvY2tjaGFpbkV4cGxvcmVyUXVlcnkocXVlcnksIGV4cGxvcmVyVXJsIGFzIHN0cmluZywgYXBpVG9rZW4pO1xuICB9XG5cbiAgZ2V0RnVsbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ0VSQzcyMSBUb2tlbic7XG4gIH1cbn1cbiJdfQ==
|
package/dist/src/evmCoin.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { BaseCoin, BitGoBase, MPCAlgorithm, MultisigType } from '@bitgo-beta/sdk-core';
|
|
5
5
|
import { BaseCoin as StaticsBaseCoin } from '@bitgo-beta/statics';
|
|
6
|
-
import { AbstractEthLikeNewCoins, OfflineVaultTxInfo, RecoverOptions, TransactionBuilder as EthLikeTransactionBuilder, UnsignedSweepTxMPCv2 } from '@bitgo-beta/abstract-eth';
|
|
6
|
+
import { AbstractEthLikeNewCoins, OfflineVaultTxInfo, RecoverOptions, TransactionBuilder as EthLikeTransactionBuilder, UnsignedSweepTxMPCv2, VerifyEthTransactionOptions } from '@bitgo-beta/abstract-eth';
|
|
7
7
|
export declare class EvmCoin extends AbstractEthLikeNewCoins {
|
|
8
8
|
protected constructor(bitgo: BitGoBase, staticsCoin?: Readonly<StaticsBaseCoin>);
|
|
9
9
|
static createInstance(bitgo: BitGoBase, staticsCoin?: Readonly<StaticsBaseCoin>): BaseCoin;
|
|
@@ -14,12 +14,23 @@ export declare class EvmCoin extends AbstractEthLikeNewCoins {
|
|
|
14
14
|
getDefaultMultisigType(): MultisigType;
|
|
15
15
|
/** @inheritDoc */
|
|
16
16
|
getMPCAlgorithm(): MPCAlgorithm;
|
|
17
|
+
/** @inheritDoc */
|
|
18
|
+
supportsMessageSigning(): boolean;
|
|
19
|
+
/** @inheritDoc */
|
|
20
|
+
supportsSigningTypedData(): boolean;
|
|
17
21
|
protected buildUnsignedSweepTxnTSS(params: RecoverOptions): Promise<OfflineVaultTxInfo | UnsignedSweepTxMPCv2>;
|
|
18
22
|
/**
|
|
19
23
|
* Make a query to chain explorer for information such as balance, token balance, solidity calls
|
|
20
24
|
* @param {Object} query key-value pairs of parameters to append after /api
|
|
25
|
+
* @param {string} apiKey optional API key to use for the query falls back to EVM config if not provided
|
|
21
26
|
* @returns {Promise<Object>} response from chain explorer
|
|
22
27
|
*/
|
|
23
|
-
recoveryBlockchainExplorerQuery(query: Record<string, string
|
|
28
|
+
recoveryBlockchainExplorerQuery(query: Record<string, string>, apiKey?: string): Promise<Record<string, unknown>>;
|
|
29
|
+
/** @inheritDoc */
|
|
30
|
+
verifyTssTransaction(params: VerifyEthTransactionOptions): Promise<boolean>;
|
|
31
|
+
/**
|
|
32
|
+
* Verifies legacy (non-EIP-1559) TSS transactions with basic validation.
|
|
33
|
+
*/
|
|
34
|
+
private verifyLegacyTssTransaction;
|
|
24
35
|
}
|
|
25
36
|
//# sourceMappingURL=evmCoin.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evmCoin.d.ts","sourceRoot":"","sources":["../../src/evmCoin.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAU,YAAY,EAAE,YAAY,EAAiB,MAAM,sBAAsB,CAAC;AAC9G,OAAO,EAAE,QAAQ,IAAI,eAAe,
|
|
1
|
+
{"version":3,"file":"evmCoin.d.ts","sourceRoot":"","sources":["../../src/evmCoin.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAU,YAAY,EAAE,YAAY,EAAiB,MAAM,sBAAsB,CAAC;AAC9G,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAkC,MAAM,qBAAqB,CAAC;AAClG,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,cAAc,EAEd,kBAAkB,IAAI,yBAAyB,EAC/C,oBAAoB,EACpB,2BAA2B,EAC5B,MAAM,0BAA0B,CAAC;AAKlC,qBAAa,OAAQ,SAAQ,uBAAuB;IAClD,SAAS,aAAa,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAI/E,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F,SAAS,CAAC,qBAAqB,IAAI,yBAAyB;IAI5D,kBAAkB;IAClB,WAAW,IAAI,OAAO;IAItB,oBAAoB;IACpB,sBAAsB,IAAI,YAAY;IAItC,kBAAkB;IAClB,eAAe,IAAI,YAAY;IAI/B,kBAAkB;IAClB,sBAAsB,IAAI,OAAO;IAIjC,kBAAkB;IAClB,wBAAwB,IAAI,OAAO;cAInB,wBAAwB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,GAAG,oBAAoB,CAAC;IAOpH;;;;;OAKG;IACG,+BAA+B,CACnC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IA2BnC,kBAAkB;IACZ,oBAAoB,CAAC,MAAM,EAAE,2BAA2B,GAAG,OAAO,CAAC,OAAO,CAAC;IASjF;;OAEG;YACW,0BAA0B;CAyBzC"}
|
package/dist/src/evmCoin.js
CHANGED
|
@@ -11,6 +11,7 @@ const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
|
11
11
|
const statics_1 = require("@bitgo-beta/statics");
|
|
12
12
|
const abstract_eth_1 = require("@bitgo-beta/abstract-eth");
|
|
13
13
|
const lib_1 = require("./lib");
|
|
14
|
+
const utils_1 = require("./lib/utils");
|
|
14
15
|
const assert_1 = __importDefault(require("assert"));
|
|
15
16
|
class EvmCoin extends abstract_eth_1.AbstractEthLikeNewCoins {
|
|
16
17
|
constructor(bitgo, staticsCoin) {
|
|
@@ -34,6 +35,14 @@ class EvmCoin extends abstract_eth_1.AbstractEthLikeNewCoins {
|
|
|
34
35
|
getMPCAlgorithm() {
|
|
35
36
|
return 'ecdsa';
|
|
36
37
|
}
|
|
38
|
+
/** @inheritDoc */
|
|
39
|
+
supportsMessageSigning() {
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
/** @inheritDoc */
|
|
43
|
+
supportsSigningTypedData() {
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
37
46
|
async buildUnsignedSweepTxnTSS(params) {
|
|
38
47
|
if (this.staticsCoin?.features.includes(statics_1.CoinFeature.MPCV2)) {
|
|
39
48
|
return this.buildUnsignedSweepTxnMPCv2(params);
|
|
@@ -43,15 +52,53 @@ class EvmCoin extends abstract_eth_1.AbstractEthLikeNewCoins {
|
|
|
43
52
|
/**
|
|
44
53
|
* Make a query to chain explorer for information such as balance, token balance, solidity calls
|
|
45
54
|
* @param {Object} query key-value pairs of parameters to append after /api
|
|
55
|
+
* @param {string} apiKey optional API key to use for the query falls back to EVM config if not provided
|
|
46
56
|
* @returns {Promise<Object>} response from chain explorer
|
|
47
57
|
*/
|
|
48
|
-
async recoveryBlockchainExplorerQuery(query) {
|
|
58
|
+
async recoveryBlockchainExplorerQuery(query, apiKey) {
|
|
49
59
|
const evmConfig = sdk_core_1.common.Environments[this.bitgo.getEnv()].evm;
|
|
50
60
|
(0, assert_1.default)(evmConfig && this.getFamily() in evmConfig, `env config is missing for ${this.getFamily()} in ${this.bitgo.getEnv()}`);
|
|
51
|
-
const apiToken = evmConfig[this.getFamily()].apiToken;
|
|
61
|
+
const apiToken = apiKey || evmConfig[this.getFamily()].apiToken;
|
|
52
62
|
const explorerUrl = evmConfig[this.getFamily()].baseUrl;
|
|
53
|
-
|
|
63
|
+
switch (this.getFamily()) {
|
|
64
|
+
case statics_1.CoinFamily.HBAREVM:
|
|
65
|
+
(0, assert_1.default)(evmConfig[this.getFamily()].rpcUrl, `rpc url config is missing for ${this.getFamily()} in ${this.bitgo.getEnv()}`);
|
|
66
|
+
const rpcUrl = evmConfig[this.getFamily()].rpcUrl;
|
|
67
|
+
return await (0, utils_1.recovery_HBAREVM_BlockchainExplorerQuery)(query, rpcUrl, explorerUrl, apiToken);
|
|
68
|
+
default:
|
|
69
|
+
return await (0, abstract_eth_1.recoveryBlockchainExplorerQuery)(query, explorerUrl, apiToken);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/** @inheritDoc */
|
|
73
|
+
async verifyTssTransaction(params) {
|
|
74
|
+
const supportsEIP1559 = this.staticsCoin?.features?.includes(statics_1.CoinFeature.EIP1559);
|
|
75
|
+
if (supportsEIP1559) {
|
|
76
|
+
return await super.verifyTssTransaction(params);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
return await this.verifyLegacyTssTransaction(params);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Verifies legacy (non-EIP-1559) TSS transactions with basic validation.
|
|
84
|
+
*/
|
|
85
|
+
async verifyLegacyTssTransaction(params) {
|
|
86
|
+
const { txParams, txPrebuild, wallet } = params;
|
|
87
|
+
// Basic validation for legacy transactions only
|
|
88
|
+
if (!txParams?.recipients &&
|
|
89
|
+
!(txParams.prebuildTx?.consolidateId ||
|
|
90
|
+
(txParams.type && ['acceleration', 'fillNonce', 'transferToken', 'tokenApproval'].includes(txParams.type)))) {
|
|
91
|
+
throw new Error(`missing txParams`);
|
|
92
|
+
}
|
|
93
|
+
if (!wallet || !txPrebuild) {
|
|
94
|
+
throw new Error(`missing params`);
|
|
95
|
+
}
|
|
96
|
+
if (txParams.hop && txParams.recipients && txParams.recipients.length > 1) {
|
|
97
|
+
throw new Error(`tx cannot be both a batch and hop transaction`);
|
|
98
|
+
}
|
|
99
|
+
// If validation passes, consider it verified
|
|
100
|
+
return true;
|
|
54
101
|
}
|
|
55
102
|
}
|
|
56
103
|
exports.EvmCoin = EvmCoin;
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZtQ29pbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ldm1Db2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOztHQUVHO0FBQ0gsbURBQThHO0FBQzlHLGlEQUFzRjtBQUN0RiwyREFPa0M7QUFDbEMsK0JBQTJDO0FBQzNDLG9EQUE0QjtBQUU1QixNQUFhLE9BQVEsU0FBUSxzQ0FBdUI7SUFDbEQsWUFBc0IsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxLQUFLLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVTLHFCQUFxQjtRQUM3QixPQUFPLElBQUksd0JBQWtCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLHFCQUFXLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxvQkFBb0I7SUFDcEIsc0JBQXNCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLHFCQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLHdCQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyx3QkFBYSxDQUFDLE9BQU8sQ0FBQztJQUMxRyxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGVBQWU7UUFDYixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRVMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLE1BQXNCO1FBQzdELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLHFCQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzRCxPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsK0JBQStCLENBQUMsS0FBNkI7UUFDakUsTUFBTSxTQUFTLEdBQUcsaUJBQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUMvRCxJQUFBLGdCQUFNLEVBQ0osU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxTQUFTLEVBQzFDLDZCQUE2QixJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUMxRSxDQUFDO1FBRUYsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUN0RCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3hELE9BQU8sTUFBTSxJQUFBLDhDQUErQixFQUFDLEtBQUssRUFBRSxXQUFxQixFQUFFLFFBQWtCLENBQUMsQ0FBQztJQUNqRyxDQUFDO0NBQ0Y7QUFuREQsMEJBbURDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IHsgQmFzZUNvaW4sIEJpdEdvQmFzZSwgY29tbW9uLCBNUENBbGdvcml0aG0sIE11bHRpc2lnVHlwZSwgbXVsdGlzaWdUeXBlcyB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiwgQ29pbkZlYXR1cmUsIGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQge1xuICBBYnN0cmFjdEV0aExpa2VOZXdDb2lucyxcbiAgT2ZmbGluZVZhdWx0VHhJbmZvLFxuICBSZWNvdmVyT3B0aW9ucyxcbiAgcmVjb3ZlcnlCbG9ja2NoYWluRXhwbG9yZXJRdWVyeSxcbiAgVHJhbnNhY3Rpb25CdWlsZGVyIGFzIEV0aExpa2VUcmFuc2FjdGlvbkJ1aWxkZXIsXG4gIFVuc2lnbmVkU3dlZXBUeE1QQ3YyLFxufSBmcm9tICdAYml0Z28tYmV0YS9hYnN0cmFjdC1ldGgnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi9saWInO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5leHBvcnQgY2xhc3MgRXZtQ29pbiBleHRlbmRzIEFic3RyYWN0RXRoTGlrZU5ld0NvaW5zIHtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPikge1xuICAgIHN1cGVyKGJpdGdvLCBzdGF0aWNzQ29pbik7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlSW5zdGFuY2UoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KTogQmFzZUNvaW4ge1xuICAgIHJldHVybiBuZXcgRXZtQ29pbihiaXRnbywgc3RhdGljc0NvaW4pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFRyYW5zYWN0aW9uQnVpbGRlcigpOiBFdGhMaWtlVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uQnVpbGRlcihjb2lucy5nZXQodGhpcy5nZXRCYXNlQ2hhaW4oKSkpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHN1cHBvcnRzVHNzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRpY3NDb2luPy5mZWF0dXJlcy5pbmNsdWRlcyhDb2luRmVhdHVyZS5UU1MpID8/IGZhbHNlO1xuICB9XG5cbiAgLyoqIGluaGVyaXRlZCBkb2MgKi9cbiAgZ2V0RGVmYXVsdE11bHRpc2lnVHlwZSgpOiBNdWx0aXNpZ1R5cGUge1xuICAgIHJldHVybiB0aGlzLnN0YXRpY3NDb2luPy5mZWF0dXJlcy5pbmNsdWRlcyhDb2luRmVhdHVyZS5UU1MpID8gbXVsdGlzaWdUeXBlcy50c3MgOiBtdWx0aXNpZ1R5cGVzLm9uY2hhaW47XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZ2V0TVBDQWxnb3JpdGhtKCk6IE1QQ0FsZ29yaXRobSB7XG4gICAgcmV0dXJuICdlY2RzYSc7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRVbnNpZ25lZFN3ZWVwVHhuVFNTKHBhcmFtczogUmVjb3Zlck9wdGlvbnMpOiBQcm9taXNlPE9mZmxpbmVWYXVsdFR4SW5mbyB8IFVuc2lnbmVkU3dlZXBUeE1QQ3YyPiB7XG4gICAgaWYgKHRoaXMuc3RhdGljc0NvaW4/LmZlYXR1cmVzLmluY2x1ZGVzKENvaW5GZWF0dXJlLk1QQ1YyKSkge1xuICAgICAgcmV0dXJuIHRoaXMuYnVpbGRVbnNpZ25lZFN3ZWVwVHhuTVBDdjIocGFyYW1zKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmJ1aWxkVW5zaWduZWRTd2VlcFR4blRTUyhwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYSBxdWVyeSB0byBjaGFpbiBleHBsb3JlciBmb3IgaW5mb3JtYXRpb24gc3VjaCBhcyBiYWxhbmNlLCB0b2tlbiBiYWxhbmNlLCBzb2xpZGl0eSBjYWxsc1xuICAgKiBAcGFyYW0ge09iamVjdH0gcXVlcnkga2V5LXZhbHVlIHBhaXJzIG9mIHBhcmFtZXRlcnMgdG8gYXBwZW5kIGFmdGVyIC9hcGlcbiAgICogQHJldHVybnMge1Byb21pc2U8T2JqZWN0Pn0gcmVzcG9uc2UgZnJvbSBjaGFpbiBleHBsb3JlclxuICAgKi9cbiAgYXN5bmMgcmVjb3ZlcnlCbG9ja2NoYWluRXhwbG9yZXJRdWVyeShxdWVyeTogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgICBjb25zdCBldm1Db25maWcgPSBjb21tb24uRW52aXJvbm1lbnRzW3RoaXMuYml0Z28uZ2V0RW52KCldLmV2bTtcbiAgICBhc3NlcnQoXG4gICAgICBldm1Db25maWcgJiYgdGhpcy5nZXRGYW1pbHkoKSBpbiBldm1Db25maWcsXG4gICAgICBgZW52IGNvbmZpZyBpcyBtaXNzaW5nIGZvciAke3RoaXMuZ2V0RmFtaWx5KCl9IGluICR7dGhpcy5iaXRnby5nZXRFbnYoKX1gXG4gICAgKTtcblxuICAgIGNvbnN0IGFwaVRva2VuID0gZXZtQ29uZmlnW3RoaXMuZ2V0RmFtaWx5KCldLmFwaVRva2VuO1xuICAgIGNvbnN0IGV4cGxvcmVyVXJsID0gZXZtQ29uZmlnW3RoaXMuZ2V0RmFtaWx5KCldLmJhc2VVcmw7XG4gICAgcmV0dXJuIGF3YWl0IHJlY292ZXJ5QmxvY2tjaGFpbkV4cGxvcmVyUXVlcnkocXVlcnksIGV4cGxvcmVyVXJsIGFzIHN0cmluZywgYXBpVG9rZW4gYXMgc3RyaW5nKTtcbiAgfVxufVxuIl19
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZtQ29pbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ldm1Db2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOztHQUVHO0FBQ0gsbURBQThHO0FBQzlHLGlEQUFrRztBQUNsRywyREFRa0M7QUFDbEMsK0JBQTJDO0FBQzNDLHVDQUF1RTtBQUN2RSxvREFBNEI7QUFFNUIsTUFBYSxPQUFRLFNBQVEsc0NBQXVCO0lBQ2xELFlBQXNCLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFnQixFQUFFLFdBQXVDO1FBQzdFLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFUyxxQkFBcUI7UUFDN0IsT0FBTyxJQUFJLHdCQUFrQixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxxQkFBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUN2RSxDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCLHNCQUFzQjtRQUNwQixPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxxQkFBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyx3QkFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsd0JBQWEsQ0FBQyxPQUFPLENBQUM7SUFDMUcsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixlQUFlO1FBQ2IsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixzQkFBc0I7UUFDcEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLHdCQUF3QjtRQUN0QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFUyxLQUFLLENBQUMsd0JBQXdCLENBQUMsTUFBc0I7UUFDN0QsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMscUJBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNELE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsK0JBQStCLENBQ25DLEtBQTZCLEVBQzdCLE1BQWU7UUFFZixNQUFNLFNBQVMsR0FBRyxpQkFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQy9ELElBQUEsZ0JBQU0sRUFDSixTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLFNBQVMsRUFDMUMsNkJBQTZCLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQzFFLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUNoRSxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3hELFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7WUFDekIsS0FBSyxvQkFBVSxDQUFDLE9BQU87Z0JBQ3JCLElBQUEsZ0JBQU0sRUFDSixTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUNsQyxpQ0FBaUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDOUUsQ0FBQztnQkFDRixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDO2dCQUNsRCxPQUFPLE1BQU0sSUFBQSxnREFBd0MsRUFDbkQsS0FBSyxFQUNMLE1BQWdCLEVBQ2hCLFdBQXFCLEVBQ3JCLFFBQWtCLENBQ25CLENBQUM7WUFDSjtnQkFDRSxPQUFPLE1BQU0sSUFBQSw4Q0FBK0IsRUFBQyxLQUFLLEVBQUUsV0FBcUIsRUFBRSxRQUFrQixDQUFDLENBQUM7UUFDbkcsQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsS0FBSyxDQUFDLG9CQUFvQixDQUFDLE1BQW1DO1FBQzVELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxxQkFBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xGLElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsT0FBTyxNQUFNLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRCxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sTUFBTSxJQUFJLENBQUMsMEJBQTBCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkQsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxNQUFtQztRQUMxRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFFaEQsZ0RBQWdEO1FBQ2hELElBQ0UsQ0FBQyxRQUFRLEVBQUUsVUFBVTtZQUNyQixDQUFDLENBQ0MsUUFBUSxDQUFDLFVBQVUsRUFBRSxhQUFhO2dCQUNsQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQzNHLEVBQ0QsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBRUQsSUFBSSxRQUFRLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUUsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFFRCw2Q0FBNkM7UUFDN0MsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0Y7QUF2SEQsMEJBdUhDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IHsgQmFzZUNvaW4sIEJpdEdvQmFzZSwgY29tbW9uLCBNUENBbGdvcml0aG0sIE11bHRpc2lnVHlwZSwgbXVsdGlzaWdUeXBlcyB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiwgQ29pbkZlYXR1cmUsIGNvaW5zLCBDb2luRmFtaWx5IH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQge1xuICBBYnN0cmFjdEV0aExpa2VOZXdDb2lucyxcbiAgT2ZmbGluZVZhdWx0VHhJbmZvLFxuICBSZWNvdmVyT3B0aW9ucyxcbiAgcmVjb3ZlcnlCbG9ja2NoYWluRXhwbG9yZXJRdWVyeSxcbiAgVHJhbnNhY3Rpb25CdWlsZGVyIGFzIEV0aExpa2VUcmFuc2FjdGlvbkJ1aWxkZXIsXG4gIFVuc2lnbmVkU3dlZXBUeE1QQ3YyLFxuICBWZXJpZnlFdGhUcmFuc2FjdGlvbk9wdGlvbnMsXG59IGZyb20gJ0BiaXRnby1iZXRhL2Fic3RyYWN0LWV0aCc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL2xpYic7XG5pbXBvcnQgeyByZWNvdmVyeV9IQkFSRVZNX0Jsb2NrY2hhaW5FeHBsb3JlclF1ZXJ5IH0gZnJvbSAnLi9saWIvdXRpbHMnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5leHBvcnQgY2xhc3MgRXZtQ29pbiBleHRlbmRzIEFic3RyYWN0RXRoTGlrZU5ld0NvaW5zIHtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPikge1xuICAgIHN1cGVyKGJpdGdvLCBzdGF0aWNzQ29pbik7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlSW5zdGFuY2UoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KTogQmFzZUNvaW4ge1xuICAgIHJldHVybiBuZXcgRXZtQ29pbihiaXRnbywgc3RhdGljc0NvaW4pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFRyYW5zYWN0aW9uQnVpbGRlcigpOiBFdGhMaWtlVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uQnVpbGRlcihjb2lucy5nZXQodGhpcy5nZXRCYXNlQ2hhaW4oKSkpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHN1cHBvcnRzVHNzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRpY3NDb2luPy5mZWF0dXJlcy5pbmNsdWRlcyhDb2luRmVhdHVyZS5UU1MpID8/IGZhbHNlO1xuICB9XG5cbiAgLyoqIGluaGVyaXRlZCBkb2MgKi9cbiAgZ2V0RGVmYXVsdE11bHRpc2lnVHlwZSgpOiBNdWx0aXNpZ1R5cGUge1xuICAgIHJldHVybiB0aGlzLnN0YXRpY3NDb2luPy5mZWF0dXJlcy5pbmNsdWRlcyhDb2luRmVhdHVyZS5UU1MpID8gbXVsdGlzaWdUeXBlcy50c3MgOiBtdWx0aXNpZ1R5cGVzLm9uY2hhaW47XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZ2V0TVBDQWxnb3JpdGhtKCk6IE1QQ0FsZ29yaXRobSB7XG4gICAgcmV0dXJuICdlY2RzYSc7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgc3VwcG9ydHNNZXNzYWdlU2lnbmluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzdXBwb3J0c1NpZ25pbmdUeXBlZERhdGEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRVbnNpZ25lZFN3ZWVwVHhuVFNTKHBhcmFtczogUmVjb3Zlck9wdGlvbnMpOiBQcm9taXNlPE9mZmxpbmVWYXVsdFR4SW5mbyB8IFVuc2lnbmVkU3dlZXBUeE1QQ3YyPiB7XG4gICAgaWYgKHRoaXMuc3RhdGljc0NvaW4/LmZlYXR1cmVzLmluY2x1ZGVzKENvaW5GZWF0dXJlLk1QQ1YyKSkge1xuICAgICAgcmV0dXJuIHRoaXMuYnVpbGRVbnNpZ25lZFN3ZWVwVHhuTVBDdjIocGFyYW1zKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmJ1aWxkVW5zaWduZWRTd2VlcFR4blRTUyhwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYSBxdWVyeSB0byBjaGFpbiBleHBsb3JlciBmb3IgaW5mb3JtYXRpb24gc3VjaCBhcyBiYWxhbmNlLCB0b2tlbiBiYWxhbmNlLCBzb2xpZGl0eSBjYWxsc1xuICAgKiBAcGFyYW0ge09iamVjdH0gcXVlcnkga2V5LXZhbHVlIHBhaXJzIG9mIHBhcmFtZXRlcnMgdG8gYXBwZW5kIGFmdGVyIC9hcGlcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwaUtleSBvcHRpb25hbCBBUEkga2V5IHRvIHVzZSBmb3IgdGhlIHF1ZXJ5IGZhbGxzIGJhY2sgdG8gRVZNIGNvbmZpZyBpZiBub3QgcHJvdmlkZWRcbiAgICogQHJldHVybnMge1Byb21pc2U8T2JqZWN0Pn0gcmVzcG9uc2UgZnJvbSBjaGFpbiBleHBsb3JlclxuICAgKi9cbiAgYXN5bmMgcmVjb3ZlcnlCbG9ja2NoYWluRXhwbG9yZXJRdWVyeShcbiAgICBxdWVyeTogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICBhcGlLZXk/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAgIGNvbnN0IGV2bUNvbmZpZyA9IGNvbW1vbi5FbnZpcm9ubWVudHNbdGhpcy5iaXRnby5nZXRFbnYoKV0uZXZtO1xuICAgIGFzc2VydChcbiAgICAgIGV2bUNvbmZpZyAmJiB0aGlzLmdldEZhbWlseSgpIGluIGV2bUNvbmZpZyxcbiAgICAgIGBlbnYgY29uZmlnIGlzIG1pc3NpbmcgZm9yICR7dGhpcy5nZXRGYW1pbHkoKX0gaW4gJHt0aGlzLmJpdGdvLmdldEVudigpfWBcbiAgICApO1xuXG4gICAgY29uc3QgYXBpVG9rZW4gPSBhcGlLZXkgfHwgZXZtQ29uZmlnW3RoaXMuZ2V0RmFtaWx5KCldLmFwaVRva2VuO1xuICAgIGNvbnN0IGV4cGxvcmVyVXJsID0gZXZtQ29uZmlnW3RoaXMuZ2V0RmFtaWx5KCldLmJhc2VVcmw7XG4gICAgc3dpdGNoICh0aGlzLmdldEZhbWlseSgpKSB7XG4gICAgICBjYXNlIENvaW5GYW1pbHkuSEJBUkVWTTpcbiAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgIGV2bUNvbmZpZ1t0aGlzLmdldEZhbWlseSgpXS5ycGNVcmwsXG4gICAgICAgICAgYHJwYyB1cmwgY29uZmlnIGlzIG1pc3NpbmcgZm9yICR7dGhpcy5nZXRGYW1pbHkoKX0gaW4gJHt0aGlzLmJpdGdvLmdldEVudigpfWBcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcnBjVXJsID0gZXZtQ29uZmlnW3RoaXMuZ2V0RmFtaWx5KCldLnJwY1VybDtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlY292ZXJ5X0hCQVJFVk1fQmxvY2tjaGFpbkV4cGxvcmVyUXVlcnkoXG4gICAgICAgICAgcXVlcnksXG4gICAgICAgICAgcnBjVXJsIGFzIHN0cmluZyxcbiAgICAgICAgICBleHBsb3JlclVybCBhcyBzdHJpbmcsXG4gICAgICAgICAgYXBpVG9rZW4gYXMgc3RyaW5nXG4gICAgICAgICk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gYXdhaXQgcmVjb3ZlcnlCbG9ja2NoYWluRXhwbG9yZXJRdWVyeShxdWVyeSwgZXhwbG9yZXJVcmwgYXMgc3RyaW5nLCBhcGlUb2tlbiBhcyBzdHJpbmcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBhc3luYyB2ZXJpZnlUc3NUcmFuc2FjdGlvbihwYXJhbXM6IFZlcmlmeUV0aFRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHN1cHBvcnRzRUlQMTU1OSA9IHRoaXMuc3RhdGljc0NvaW4/LmZlYXR1cmVzPy5pbmNsdWRlcyhDb2luRmVhdHVyZS5FSVAxNTU5KTtcbiAgICBpZiAoc3VwcG9ydHNFSVAxNTU5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgc3VwZXIudmVyaWZ5VHNzVHJhbnNhY3Rpb24ocGFyYW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudmVyaWZ5TGVnYWN5VHNzVHJhbnNhY3Rpb24ocGFyYW1zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgbGVnYWN5IChub24tRUlQLTE1NTkpIFRTUyB0cmFuc2FjdGlvbnMgd2l0aCBiYXNpYyB2YWxpZGF0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB2ZXJpZnlMZWdhY3lUc3NUcmFuc2FjdGlvbihwYXJhbXM6IFZlcmlmeUV0aFRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQsIHdhbGxldCB9ID0gcGFyYW1zO1xuXG4gICAgLy8gQmFzaWMgdmFsaWRhdGlvbiBmb3IgbGVnYWN5IHRyYW5zYWN0aW9ucyBvbmx5XG4gICAgaWYgKFxuICAgICAgIXR4UGFyYW1zPy5yZWNpcGllbnRzICYmXG4gICAgICAhKFxuICAgICAgICB0eFBhcmFtcy5wcmVidWlsZFR4Py5jb25zb2xpZGF0ZUlkIHx8XG4gICAgICAgICh0eFBhcmFtcy50eXBlICYmIFsnYWNjZWxlcmF0aW9uJywgJ2ZpbGxOb25jZScsICd0cmFuc2ZlclRva2VuJywgJ3Rva2VuQXBwcm92YWwnXS5pbmNsdWRlcyh0eFBhcmFtcy50eXBlKSlcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbWlzc2luZyB0eFBhcmFtc2ApO1xuICAgIH1cblxuICAgIGlmICghd2FsbGV0IHx8ICF0eFByZWJ1aWxkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG1pc3NpbmcgcGFyYW1zYCk7XG4gICAgfVxuXG4gICAgaWYgKHR4UGFyYW1zLmhvcCAmJiB0eFBhcmFtcy5yZWNpcGllbnRzICYmIHR4UGFyYW1zLnJlY2lwaWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB0eCBjYW5ub3QgYmUgYm90aCBhIGJhdGNoIGFuZCBob3AgdHJhbnNhY3Rpb25gKTtcbiAgICB9XG5cbiAgICAvLyBJZiB2YWxpZGF0aW9uIHBhc3NlcywgY29uc2lkZXIgaXQgdmVyaWZpZWRcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIl19
|
package/dist/src/index.d.ts
CHANGED
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,OAAO,CAAC;AACtB,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,OAAO,CAAC;AACtB,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -17,4 +17,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
__exportStar(require("./evmCoin"), exports);
|
|
18
18
|
__exportStar(require("./lib"), exports);
|
|
19
19
|
__exportStar(require("./register"), exports);
|
|
20
|
-
|
|
20
|
+
__exportStar(require("./ethLikeErc20Token"), exports);
|
|
21
|
+
__exportStar(require("./ethLikeErc721Token"), exports);
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDRDQUEwQjtBQUMxQix3Q0FBc0I7QUFDdEIsNkNBQTJCO0FBQzNCLHNEQUFvQztBQUNwQyx1REFBcUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2V2bUNvaW4nO1xuZXhwb3J0ICogZnJvbSAnLi9saWInO1xuZXhwb3J0ICogZnJvbSAnLi9yZWdpc3Rlcic7XG5leHBvcnQgKiBmcm9tICcuL2V0aExpa2VFcmMyMFRva2VuJztcbmV4cG9ydCAqIGZyb20gJy4vZXRoTGlrZUVyYzcyMVRva2VuJztcbiJdfQ==
|
package/dist/src/lib/utils.d.ts
CHANGED
|
@@ -5,4 +5,24 @@ import EthereumCommon from '@ethereumjs/common';
|
|
|
5
5
|
* @returns {EthereumCommon} Ethereum common configuration object
|
|
6
6
|
*/
|
|
7
7
|
export declare function getCommon(coin: Readonly<BaseCoin>): EthereumCommon;
|
|
8
|
+
/**
|
|
9
|
+
*
|
|
10
|
+
* @param query - etherscan query parameters for the API call
|
|
11
|
+
* @param rpcUrl - RPC URL of the Hedera network
|
|
12
|
+
* @param explorerUrl - base URL of the Hedera Mirror Node API
|
|
13
|
+
* @param token - optional API key to use for the query
|
|
14
|
+
* @returns
|
|
15
|
+
*/
|
|
16
|
+
export declare function recovery_HBAREVM_BlockchainExplorerQuery(query: Record<string, string>, rpcUrl: string, explorerUrl: string, token?: string): Promise<Record<string, unknown>>;
|
|
17
|
+
export declare function validateHederaAccountId(address: string): {
|
|
18
|
+
valid: boolean;
|
|
19
|
+
error: string | null;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Convert Hedera Account ID (e.g., 0.0.12345) to EVM address
|
|
23
|
+
*/
|
|
24
|
+
export declare function resolveHederaAccountIdToEvmAddress(accountId: string, isProd: boolean): Promise<{
|
|
25
|
+
address: string | null;
|
|
26
|
+
error?: string;
|
|
27
|
+
}>;
|
|
8
28
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,QAAQ,EAAmB,MAAM,qBAAqB,CAAC;AAC1F,OAAO,cAAc,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,QAAQ,EAAmB,MAAM,qBAAqB,CAAC;AAC1F,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAIhD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,cAAc,CAgBlE;AAQD;;;;;;;GAOG;AACH,wBAAsB,wCAAwC,CAC5D,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAiClC;AAmJD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CA+CjG;AAED;;GAEG;AACH,wBAAsB,kCAAkC,CACtD,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAoCrD"}
|
package/dist/src/lib/utils.js
CHANGED
|
@@ -4,8 +4,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.getCommon = getCommon;
|
|
7
|
+
exports.recovery_HBAREVM_BlockchainExplorerQuery = recovery_HBAREVM_BlockchainExplorerQuery;
|
|
8
|
+
exports.validateHederaAccountId = validateHederaAccountId;
|
|
9
|
+
exports.resolveHederaAccountIdToEvmAddress = resolveHederaAccountIdToEvmAddress;
|
|
7
10
|
const statics_1 = require("@bitgo-beta/statics");
|
|
8
11
|
const common_1 = __importDefault(require("@ethereumjs/common"));
|
|
12
|
+
const superagent_1 = __importDefault(require("superagent"));
|
|
9
13
|
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
10
14
|
/**
|
|
11
15
|
* @param {NetworkType} network either mainnet or testnet
|
|
@@ -25,4 +29,228 @@ function getCommon(coin) {
|
|
|
25
29
|
eips: coin.features.includes(statics_1.CoinFeature.EIP1559) ? [1559] : undefined,
|
|
26
30
|
});
|
|
27
31
|
}
|
|
28
|
-
|
|
32
|
+
function tinybarsToWei(tinybars) {
|
|
33
|
+
// Convert from tinybars to wei (1 HBAR = 10^8 tinybars, 1 HBAR = 10^18 wei)
|
|
34
|
+
// So: wei = tinybars * 10^10
|
|
35
|
+
return (BigInt(tinybars) * BigInt('10000000000')).toString();
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
*
|
|
39
|
+
* @param query - etherscan query parameters for the API call
|
|
40
|
+
* @param rpcUrl - RPC URL of the Hedera network
|
|
41
|
+
* @param explorerUrl - base URL of the Hedera Mirror Node API
|
|
42
|
+
* @param token - optional API key to use for the query
|
|
43
|
+
* @returns
|
|
44
|
+
*/
|
|
45
|
+
async function recovery_HBAREVM_BlockchainExplorerQuery(query, rpcUrl, explorerUrl, token) {
|
|
46
|
+
// Hedera Mirror Node API does not use API keys, but we keep this for compatibility
|
|
47
|
+
if (token) {
|
|
48
|
+
query.apikey = token;
|
|
49
|
+
}
|
|
50
|
+
const { module, action } = query;
|
|
51
|
+
// Remove trailing slash from explorerUrl if present
|
|
52
|
+
const baseUrl = explorerUrl.replace(/\/$/, '');
|
|
53
|
+
switch (`${module}.${action}`) {
|
|
54
|
+
case 'account.balance':
|
|
55
|
+
return await queryAddressBalanceHedera(query, baseUrl);
|
|
56
|
+
case 'account.txlist':
|
|
57
|
+
return await getAddressNonceHedera(query, baseUrl);
|
|
58
|
+
case 'account.tokenbalance':
|
|
59
|
+
return await queryTokenBalanceHedera(query, baseUrl);
|
|
60
|
+
case 'proxy.eth_gasPrice':
|
|
61
|
+
return await getGasPriceFromRPC(query, rpcUrl);
|
|
62
|
+
case 'proxy.eth_estimateGas':
|
|
63
|
+
return await getGasLimitFromRPC(query, rpcUrl);
|
|
64
|
+
case 'proxy.eth_call':
|
|
65
|
+
return await querySequenceIdFromRPC(query, rpcUrl);
|
|
66
|
+
default:
|
|
67
|
+
throw new Error(`Unsupported API call: ${module}.${action}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* 1. Gets address balance using Hedera Mirror Node API
|
|
72
|
+
*/
|
|
73
|
+
async function queryAddressBalanceHedera(query, baseUrl) {
|
|
74
|
+
const address = query.address;
|
|
75
|
+
const url = `${baseUrl}/accounts/${address}?transactions=false`;
|
|
76
|
+
const response = await superagent_1.default.get(url).send();
|
|
77
|
+
if (!response.ok) {
|
|
78
|
+
throw new Error('could not reach explorer');
|
|
79
|
+
}
|
|
80
|
+
const balance = response.body.balance?.balance || '0';
|
|
81
|
+
const balanceInWei = tinybarsToWei(balance);
|
|
82
|
+
return { result: balanceInWei };
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* 2. Gets nonce using Hedera Mirror Node API
|
|
86
|
+
*/
|
|
87
|
+
async function getAddressNonceHedera(query, baseUrl) {
|
|
88
|
+
const address = query.address;
|
|
89
|
+
const accountUrl = `${baseUrl}/accounts/${address}?transactions=false`;
|
|
90
|
+
const response = await superagent_1.default.get(accountUrl).send();
|
|
91
|
+
if (!response.ok) {
|
|
92
|
+
throw new Error('could not reach explorer');
|
|
93
|
+
}
|
|
94
|
+
const nonce = response.body.ethereum_nonce || 0;
|
|
95
|
+
return { nonce: nonce };
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* 3. Gets token balance using Hedera Mirror Node API
|
|
99
|
+
*/
|
|
100
|
+
async function queryTokenBalanceHedera(query, baseUrl) {
|
|
101
|
+
const contractAddress = query.contractaddress;
|
|
102
|
+
const address = query.address;
|
|
103
|
+
// Get token balances for the account
|
|
104
|
+
const url = `${baseUrl}/accounts/${address}/tokens`;
|
|
105
|
+
const response = await superagent_1.default.get(url).send();
|
|
106
|
+
if (!response.ok) {
|
|
107
|
+
throw new Error('could not reach explorer');
|
|
108
|
+
}
|
|
109
|
+
// Find the specific token balance
|
|
110
|
+
const tokens = response.body.tokens || [];
|
|
111
|
+
const tokenBalance = tokens.find((token) => token.token_id === contractAddress || token.contract_address === contractAddress);
|
|
112
|
+
const balance = tokenBalance && tokenBalance.balance !== null ? tokenBalance.balance.toString() : '0';
|
|
113
|
+
const balanceInWei = tinybarsToWei(balance);
|
|
114
|
+
return { result: balanceInWei };
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* 4. Gets sequence ID using RPC call
|
|
118
|
+
*/
|
|
119
|
+
async function querySequenceIdFromRPC(query, rpcUrl) {
|
|
120
|
+
const { to, data } = query;
|
|
121
|
+
const requestBody = {
|
|
122
|
+
jsonrpc: '2.0',
|
|
123
|
+
method: 'eth_call',
|
|
124
|
+
params: [
|
|
125
|
+
{
|
|
126
|
+
to: to,
|
|
127
|
+
data: data,
|
|
128
|
+
},
|
|
129
|
+
],
|
|
130
|
+
id: 1,
|
|
131
|
+
};
|
|
132
|
+
const response = await superagent_1.default.post(rpcUrl).send(requestBody).set('Content-Type', 'application/json');
|
|
133
|
+
if (!response.ok) {
|
|
134
|
+
throw new Error('could not fetch sequence ID from RPC');
|
|
135
|
+
}
|
|
136
|
+
return response.body;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* 5. getGasPriceFromRPC - Gets gas price using Hedera Mirror Node API
|
|
140
|
+
*/
|
|
141
|
+
async function getGasPriceFromRPC(query, rpcUrl) {
|
|
142
|
+
const requestBody = {
|
|
143
|
+
jsonrpc: '2.0',
|
|
144
|
+
method: 'eth_gasPrice',
|
|
145
|
+
params: [],
|
|
146
|
+
id: 1,
|
|
147
|
+
};
|
|
148
|
+
const response = await superagent_1.default.post(rpcUrl).send(requestBody).set('Content-Type', 'application/json');
|
|
149
|
+
if (!response.ok) {
|
|
150
|
+
throw new Error('could not fetch gas price from RPC');
|
|
151
|
+
}
|
|
152
|
+
return response.body;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* 6. getGasLimitFromRPC - Gets gas limit estimate using RPC call.
|
|
156
|
+
*/
|
|
157
|
+
async function getGasLimitFromRPC(query, rpcUrl) {
|
|
158
|
+
const { from, to, data } = query;
|
|
159
|
+
const requestBody = {
|
|
160
|
+
jsonrpc: '2.0',
|
|
161
|
+
method: 'eth_estimateGas',
|
|
162
|
+
params: [
|
|
163
|
+
{
|
|
164
|
+
from,
|
|
165
|
+
to,
|
|
166
|
+
data,
|
|
167
|
+
},
|
|
168
|
+
],
|
|
169
|
+
id: 1,
|
|
170
|
+
};
|
|
171
|
+
const response = await superagent_1.default.post(rpcUrl).send(requestBody).set('Content-Type', 'application/json');
|
|
172
|
+
if (!response.ok) {
|
|
173
|
+
throw new Error('could not estimate gas limit from RPC');
|
|
174
|
+
}
|
|
175
|
+
return response.body;
|
|
176
|
+
}
|
|
177
|
+
function validateHederaAccountId(address) {
|
|
178
|
+
const parts = address.split('.');
|
|
179
|
+
if (parts.length !== 3) {
|
|
180
|
+
return {
|
|
181
|
+
valid: false,
|
|
182
|
+
error: 'Invalid Hedera Account ID format. Use format: 0.0.12345',
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
const [shardStr, realmStr, accountStr] = parts;
|
|
186
|
+
if (!shardStr || !realmStr || !accountStr) {
|
|
187
|
+
return {
|
|
188
|
+
valid: false,
|
|
189
|
+
error: 'Invalid Hedera Account ID. All parts are required.',
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
const shard = Number(shardStr);
|
|
193
|
+
const realm = Number(realmStr);
|
|
194
|
+
const account = Number(accountStr);
|
|
195
|
+
// Validate all parts are valid non-negative integers within safe range
|
|
196
|
+
if (!Number.isInteger(shard) ||
|
|
197
|
+
!Number.isInteger(realm) ||
|
|
198
|
+
!Number.isInteger(account) ||
|
|
199
|
+
shard < 0 ||
|
|
200
|
+
realm < 0 ||
|
|
201
|
+
account < 0) {
|
|
202
|
+
return {
|
|
203
|
+
valid: false,
|
|
204
|
+
error: 'Invalid Hedera Account ID. All parts must be non-negative integers.',
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
// Check for JavaScript safe integer limits (prevents precision loss)
|
|
208
|
+
if (!Number.isSafeInteger(shard) || !Number.isSafeInteger(realm) || !Number.isSafeInteger(account)) {
|
|
209
|
+
return {
|
|
210
|
+
valid: false,
|
|
211
|
+
error: 'Invalid Hedera Account ID. Values are too large.',
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
return {
|
|
215
|
+
valid: true,
|
|
216
|
+
error: null,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Convert Hedera Account ID (e.g., 0.0.12345) to EVM address
|
|
221
|
+
*/
|
|
222
|
+
async function resolveHederaAccountIdToEvmAddress(accountId, isProd) {
|
|
223
|
+
try {
|
|
224
|
+
const mirrorNodeUrl = isProd
|
|
225
|
+
? 'https://mainnet-public.mirrornode.hedera.com'
|
|
226
|
+
: 'https://testnet.mirrornode.hedera.com';
|
|
227
|
+
const response = await fetch(`${mirrorNodeUrl}/api/v1/accounts/${accountId}`);
|
|
228
|
+
if (!response.ok) {
|
|
229
|
+
if (response.status === 404) {
|
|
230
|
+
return {
|
|
231
|
+
address: null,
|
|
232
|
+
error: 'Hedera Account ID not found. Please verify the account exists.',
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
return {
|
|
236
|
+
address: null,
|
|
237
|
+
error: `Failed to resolve Hedera Account ID: ${response.status}`,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
const accountData = (await response.json());
|
|
241
|
+
if (!accountData.evm_address) {
|
|
242
|
+
return {
|
|
243
|
+
address: null,
|
|
244
|
+
error: 'This Hedera account does not have an associated EVM address.',
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
return { address: accountData.evm_address };
|
|
248
|
+
}
|
|
249
|
+
catch (error) {
|
|
250
|
+
return {
|
|
251
|
+
address: null,
|
|
252
|
+
error: 'Failed to resolve Hedera Account ID. Please check your connection.',
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBU0EsOEJBZ0JDO0FBZ0JELDRGQXNDQztBQW1KRCwwREErQ0M7QUFLRCxnRkF1Q0M7QUE3VEQsaURBQTBGO0FBQzFGLGdFQUFnRDtBQUNoRCw0REFBaUM7QUFDakMsbURBQStEO0FBRS9EOzs7R0FHRztBQUNILFNBQWdCLFNBQVMsQ0FBQyxJQUF3QjtJQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMscUJBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1FBQ3hELE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQyw2Q0FBNkMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUNELE9BQU8sZ0JBQWMsQ0FBQyxNQUFNLENBQzFCO1FBQ0UsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSTtRQUN2QixTQUFTLEVBQUcsSUFBSSxDQUFDLE9BQTJCLENBQUMsT0FBTztRQUNwRCxPQUFPLEVBQUcsSUFBSSxDQUFDLE9BQTJCLENBQUMsT0FBTztLQUNuRCxFQUNEO1FBQ0UsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLHFCQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDNUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLHFCQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUM1RSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMscUJBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FB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U0FBaUIsRUFDakIsTUFBZTtJQUVmLElBQUksQ0FBQztRQUNILE1BQU0sYUFBYSxHQUFHLE1BQU07WUFDMUIsQ0FBQyxDQUFDLDhDQUE4QztZQUNoRCxDQUFDLENBQUMsdUNBQXVDLENBQUM7UUFFNUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxhQUFhLG9CQUFvQixTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRTlFLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakIsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUM1QixPQUFPO29CQUNMLE9BQU8sRUFBRSxJQUFJO29CQUNiLEtBQUssRUFBRSxnRUFBZ0U7aUJBQ3hFLENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTztnQkFDTCxPQUFPLEVBQUUsSUFBSTtnQkFDYixLQUFLLEVBQUUsd0NBQXdDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7YUFDakUsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxDQUFDLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUE2QixDQUFDO1FBQ3hFLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDN0IsT0FBTztnQkFDTCxPQUFPLEVBQUUsSUFBSTtnQkFDYixLQUFLLEVBQUUsOERBQThEO2FBQ3RFLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPO1lBQ0wsT0FBTyxFQUFFLElBQUk7WUFDYixLQUFLLEVBQUUsb0VBQW9FO1NBQzVFLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvaW5GZWF0dXJlLCBOZXR3b3JrVHlwZSwgQmFzZUNvaW4sIEV0aGVyZXVtTmV0d29yayB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IEV0aGVyZXVtQ29tbW9uIGZyb20gJ0BldGhlcmV1bWpzL2NvbW1vbic7XG5pbXBvcnQgcmVxdWVzdCBmcm9tICdzdXBlcmFnZW50JztcbmltcG9ydCB7IEludmFsaWRUcmFuc2FjdGlvbkVycm9yIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuXG4vKipcbiAqIEBwYXJhbSB7TmV0d29ya1R5cGV9IG5ldHdvcmsgZWl0aGVyIG1haW5uZXQgb3IgdGVzdG5ldFxuICogQHJldHVybnMge0V0aGVyZXVtQ29tbW9ufSBFdGhlcmV1bSBjb21tb24gY29uZmlndXJhdGlvbiBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbW1vbihjb2luOiBSZWFkb25seTxCYXNlQ29pbj4pOiBFdGhlcmV1bUNvbW1vbiB7XG4gIGlmICghY29pbi5mZWF0dXJlcy5pbmNsdWRlcyhDb2luRmVhdHVyZS5TSEFSRURfRVZNX1NESykpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoYENhbm5vdCB1c2UgY29tbW9uIHNkayBtb2R1bGUgZm9yIHRoZSBjb2luICR7Y29pbi5uYW1lfWApO1xuICB9XG4gIHJldHVybiBFdGhlcmV1bUNvbW1vbi5jdXN0b20oXG4gICAge1xuICAgICAgbmFtZTogY29pbi5uZXR3b3JrLm5hbWUsXG4gICAgICBuZXR3b3JrSWQ6IChjb2luLm5ldHdvcmsgYXMgRXRoZXJldW1OZXR3b3JrKS5jaGFpbklkLFxuICAgICAgY2hhaW5JZDogKGNvaW4ubmV0d29yayBhcyBFdGhlcmV1bU5ldHdvcmspLmNoYWluSWQsXG4gICAgfSxcbiAgICB7XG4gICAgICBiYXNlQ2hhaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ21haW5uZXQnIDogJ3NlcG9saWEnLFxuICAgICAgaGFyZGZvcms6IGNvaW4uZmVhdHVyZXMuaW5jbHVkZXMoQ29pbkZlYXR1cmUuRUlQMTU1OSkgPyAnbG9uZG9uJyA6IHVuZGVmaW5lZCxcbiAgICAgIGVpcHM6IGNvaW4uZmVhdHVyZXMuaW5jbHVkZXMoQ29pbkZlYXR1cmUuRUlQMTU1OSkgPyBbMTU1OV0gOiB1bmRlZmluZWQsXG4gICAgfVxuICApO1xufVxuXG5mdW5jdGlvbiB0aW55YmFyc1RvV2VpKHRpbnliYXJzOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBDb252ZXJ0IGZyb20gdGlueWJhcnMgdG8gd2VpICgxIEhCQVIgPSAxMF44IHRpbnliYXJzLCAxIEhCQVIgPSAxMF4xOCB3ZWkpXG4gIC8vIFNvOiB3ZWkgPSB0aW55YmFycyAqIDEwXjEwXG4gIHJldHVybiAoQmlnSW50KHRpbnliYXJzKSAqIEJpZ0ludCgnMTAwMDAwMDAwMDAnKSkudG9TdHJpbmcoKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHF1ZXJ5IC0gZXRoZXJzY2FuIHF1ZXJ5IHBhcmFtZXRlcnMgZm9yIHRoZSBBUEkgY2FsbFxuICogQHBhcmFtIHJwY1VybCAtIFJQQyBVUkwgb2YgdGhlIEhlZGVyYSBuZXR3b3JrXG4gKiBAcGFyYW0gZXhwbG9yZXJVcmwgLSBiYXNlIFVSTCBvZiB0aGUgSGVkZXJhIE1pcnJvciBOb2RlIEFQSVxuICogQHBhcmFtIHRva2VuIC0gb3B0aW9uYWwgQVBJIGtleSB0byB1c2UgZm9yIHRoZSBxdWVyeVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlY292ZXJ5X0hCQVJFVk1fQmxvY2tjaGFpbkV4cGxvcmVyUXVlcnkoXG4gIHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBycGNVcmw6IHN0cmluZyxcbiAgZXhwbG9yZXJVcmw6IHN0cmluZyxcbiAgdG9rZW4/OiBzdHJpbmdcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgLy8gSGVkZXJhIE1pcnJvciBOb2RlIEFQSSBkb2VzIG5vdCB1c2UgQVBJIGtleXMsIGJ1dCB3ZSBrZWVwIHRoaXMgZm9yIGNvbXBhdGliaWxpdHlcbiAgaWYgKHRva2VuKSB7XG4gICAgcXVlcnkuYXBpa2V5ID0gdG9rZW47XG4gIH1cblxuICBjb25zdCB7IG1vZHVsZSwgYWN0aW9uIH0gPSBxdWVyeTtcblxuICAvLyBSZW1vdmUgdHJhaWxpbmcgc2xhc2ggZnJvbSBleHBsb3JlclVybCBpZiBwcmVzZW50XG4gIGNvbnN0IGJhc2VVcmwgPSBleHBsb3JlclVybC5yZXBsYWNlKC9cXC8kLywgJycpO1xuXG4gIHN3aXRjaCAoYCR7bW9kdWxlfS4ke2FjdGlvbn1gKSB7XG4gICAgY2FzZSAnYWNjb3VudC5iYWxhbmNlJzpcbiAgICAgIHJldHVybiBhd2FpdCBxdWVyeUFkZHJlc3NCYWxhbmNlSGVkZXJhKHF1ZXJ5LCBiYXNlVXJsKTtcblxuICAgIGNhc2UgJ2FjY291bnQudHhsaXN0JzpcbiAgICAgIHJldHVybiBhd2FpdCBnZXRBZGRyZXNzTm9uY2VIZWRlcmEocXVlcnksIGJhc2VVcmwpO1xuXG4gICAgY2FzZSAnYWNjb3VudC50b2tlbmJhbGFuY2UnOlxuICAgICAgcmV0dXJuIGF3YWl0IHF1ZXJ5VG9rZW5CYWxhbmNlSGVkZXJhKHF1ZXJ5LCBiYXNlVXJsKTtcblxuICAgIGNhc2UgJ3Byb3h5LmV0aF9nYXNQcmljZSc6XG4gICAgICByZXR1cm4gYXdhaXQgZ2V0R2FzUHJpY2VGcm9tUlBDKHF1ZXJ5LCBycGNVcmwpO1xuXG4gICAgY2FzZSAncHJveHkuZXRoX2VzdGltYXRlR2FzJzpcbiAgICAgIHJldHVybiBhd2FpdCBnZXRHYXNMaW1pdEZyb21SUEMocXVlcnksIHJwY1VybCk7XG5cbiAgICBjYXNlICdwcm94eS5ldGhfY2FsbCc6XG4gICAgICByZXR1cm4gYXdhaXQgcXVlcnlTZXF1ZW5jZUlkRnJvbVJQQyhxdWVyeSwgcnBjVXJsKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIEFQSSBjYWxsOiAke21vZHVsZX0uJHthY3Rpb259YCk7XG4gIH1cbn1cblxuLyoqXG4gKiAxLiBHZXRzIGFkZHJlc3MgYmFsYW5jZSB1c2luZyBIZWRlcmEgTWlycm9yIE5vZGUgQVBJXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHF1ZXJ5QWRkcmVzc0JhbGFuY2VIZWRlcmEoXG4gIHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBiYXNlVXJsOiBzdHJpbmdcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgY29uc3QgYWRkcmVzcyA9IHF1ZXJ5LmFkZHJlc3M7XG4gIGNvbnN0IHVybCA9IGAke2Jhc2VVcmx9L2FjY291bnRzLyR7YWRkcmVzc30/dHJhbnNhY3Rpb25zPWZhbHNlYDtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0LmdldCh1cmwpLnNlbmQoKTtcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhY2ggZXhwbG9yZXInKTtcbiAgfVxuXG4gIGNvbnN0IGJhbGFuY2UgPSByZXNwb25zZS5ib2R5LmJhbGFuY2U/LmJhbGFuY2UgfHwgJzAnO1xuXG4gIGNvbnN0IGJhbGFuY2VJbldlaSA9IHRpbnliYXJzVG9XZWkoYmFsYW5jZSk7XG5cbiAgcmV0dXJuIHsgcmVzdWx0OiBiYWxhbmNlSW5XZWkgfTtcbn1cblxuLyoqXG4gKiAyLiBHZXRzIG5vbmNlIHVzaW5nIEhlZGVyYSBNaXJyb3IgTm9kZSBBUElcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0QWRkcmVzc05vbmNlSGVkZXJhKHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBiYXNlVXJsOiBzdHJpbmcpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gIGNvbnN0IGFkZHJlc3MgPSBxdWVyeS5hZGRyZXNzO1xuICBjb25zdCBhY2NvdW50VXJsID0gYCR7YmFzZVVybH0vYWNjb3VudHMvJHthZGRyZXNzfT90cmFuc2FjdGlvbnM9ZmFsc2VgO1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3QuZ2V0KGFjY291bnRVcmwpLnNlbmQoKTtcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhY2ggZXhwbG9yZXInKTtcbiAgfVxuXG4gIGNvbnN0IG5vbmNlID0gcmVzcG9uc2UuYm9keS5ldGhlcmV1bV9ub25jZSB8fCAwO1xuXG4gIHJldHVybiB7IG5vbmNlOiBub25jZSB9O1xufVxuXG4vKipcbiAqIDMuIEdldHMgdG9rZW4gYmFsYW5jZSB1c2luZyBIZWRlcmEgTWlycm9yIE5vZGUgQVBJXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHF1ZXJ5VG9rZW5CYWxhbmNlSGVkZXJhKFxuICBxdWVyeTogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgYmFzZVVybDogc3RyaW5nXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gIGNvbnN0IGNvbnRyYWN0QWRkcmVzcyA9IHF1ZXJ5LmNvbnRyYWN0YWRkcmVzcztcbiAgY29uc3QgYWRkcmVzcyA9IHF1ZXJ5LmFkZHJlc3M7XG5cbiAgLy8gR2V0IHRva2VuIGJhbGFuY2VzIGZvciB0aGUgYWNjb3VudFxuICBjb25zdCB1cmwgPSBgJHtiYXNlVXJsfS9hY2NvdW50cy8ke2FkZHJlc3N9L3Rva2Vuc2A7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdC5nZXQodXJsKS5zZW5kKCk7XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWNoIGV4cGxvcmVyJyk7XG4gIH1cblxuICAvLyBGaW5kIHRoZSBzcGVjaWZpYyB0b2tlbiBiYWxhbmNlXG4gIGNvbnN0IHRva2VucyA9IHJlc3BvbnNlLmJvZHkudG9rZW5zIHx8IFtdO1xuICBjb25zdCB0b2tlbkJhbGFuY2UgPSB0b2tlbnMuZmluZChcbiAgICAodG9rZW46IHsgdG9rZW5faWQ6IHN0cmluZzsgY29udHJhY3RfYWRkcmVzczogc3RyaW5nOyBiYWxhbmNlOiBudW1iZXIgfSkgPT5cbiAgICAgIHRva2VuLnRva2VuX2lkID09PSBjb250cmFjdEFkZHJlc3MgfHwgdG9rZW4uY29udHJhY3RfYWRkcmVzcyA9PT0gY29udHJhY3RBZGRyZXNzXG4gICk7XG5cbiAgY29uc3QgYmFsYW5jZSA9IHRva2VuQmFsYW5jZSAmJiB0b2tlbkJhbGFuY2UuYmFsYW5jZSAhPT0gbnVsbCA/IHRva2VuQmFsYW5jZS5iYWxhbmNlLnRvU3RyaW5nKCkgOiAnMCc7XG5cbiAgY29uc3QgYmFsYW5jZUluV2VpID0gdGlueWJhcnNUb1dlaShiYWxhbmNlKTtcblxuICByZXR1cm4geyByZXN1bHQ6IGJhbGFuY2VJbldlaSB9O1xufVxuXG4vKipcbiAqIDQuIEdldHMgc2VxdWVuY2UgSUQgdXNpbmcgUlBDIGNhbGxcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcXVlcnlTZXF1ZW5jZUlkRnJvbVJQQyhxdWVyeTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgcnBjVXJsOiBzdHJpbmcpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gIGNvbnN0IHsgdG8sIGRhdGEgfSA9IHF1ZXJ5O1xuXG4gIGNvbnN0IHJlcXVlc3RCb2R5ID0ge1xuICAgIGpzb25ycGM6ICcyLjAnLFxuICAgIG1ldGhvZDogJ2V0aF9jYWxsJyxcbiAgICBwYXJhbXM6IFtcbiAgICAgIHtcbiAgICAgICAgdG86IHRvLFxuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGlkOiAxLFxuICB9O1xuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdC5wb3N0KHJwY1VybCkuc2VuZChyZXF1ZXN0Qm9keSkuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCBmZXRjaCBzZXF1ZW5jZSBJRCBmcm9tIFJQQycpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XG59XG5cbi8qKlxuICogNS4gZ2V0R2FzUHJpY2VGcm9tUlBDIC0gR2V0cyBnYXMgcHJpY2UgdXNpbmcgSGVkZXJhIE1pcnJvciBOb2RlIEFQSVxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRHYXNQcmljZUZyb21SUEMocXVlcnk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIHJwY1VybDogc3RyaW5nKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICBjb25zdCByZXF1ZXN0Qm9keSA9IHtcbiAgICBqc29ucnBjOiAnMi4wJyxcbiAgICBtZXRob2Q6ICdldGhfZ2FzUHJpY2UnLFxuICAgIHBhcmFtczogW10sXG4gICAgaWQ6IDEsXG4gIH07XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0LnBvc3QocnBjVXJsKS5zZW5kKHJlcXVlc3RCb2R5KS5zZXQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IGZldGNoIGdhcyBwcmljZSBmcm9tIFJQQycpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XG59XG5cbi8qKlxuICogNi4gZ2V0R2FzTGltaXRGcm9tUlBDIC0gR2V0cyBnYXMgbGltaXQgZXN0aW1hdGUgdXNpbmcgUlBDIGNhbGwuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEdhc0xpbWl0RnJvbVJQQyhxdWVyeTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgcnBjVXJsOiBzdHJpbmcpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gIGNvbnN0IHsgZnJvbSwgdG8sIGRhdGEgfSA9IHF1ZXJ5O1xuXG4gIGNvbnN0IHJlcXVlc3RCb2R5ID0ge1xuICAgIGpzb25ycGM6ICcyLjAnLFxuICAgIG1ldGhvZDogJ2V0aF9lc3RpbWF0ZUdhcycsXG4gICAgcGFyYW1zOiBbXG4gICAgICB7XG4gICAgICAgIGZyb20sXG4gICAgICAgIHRvLFxuICAgICAgICBkYXRhLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGlkOiAxLFxuICB9O1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3QucG9zdChycGNVcmwpLnNlbmQocmVxdWVzdEJvZHkpLnNldCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgZXN0aW1hdGUgZ2FzIGxpbWl0IGZyb20gUlBDJyk7XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2UuYm9keTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlSGVkZXJhQWNjb3VudElkKGFkZHJlc3M6IHN0cmluZyk6IHsgdmFsaWQ6IGJvb2xlYW47IGVycm9yOiBzdHJpbmcgfCBudWxsIH0ge1xuICBjb25zdCBwYXJ0cyA9IGFkZHJlc3Muc3BsaXQoJy4nKTtcbiAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMykge1xuICAgIHJldHVybiB7XG4gICAgICB2YWxpZDogZmFsc2UsXG4gICAgICBlcnJvcjogJ0ludmFsaWQgSGVkZXJhIEFjY291bnQgSUQgZm9ybWF0LiBVc2UgZm9ybWF0OiAwLjAuMTIzNDUnLFxuICAgIH07XG4gIH1cbiAgY29uc3QgW3NoYXJkU3RyLCByZWFsbVN0ciwgYWNjb3VudFN0cl0gPSBwYXJ0cztcbiAgaWYgKCFzaGFyZFN0ciB8fCAhcmVhbG1TdHIgfHwgIWFjY291bnRTdHIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgZXJyb3I6ICdJbnZhbGlkIEhlZGVyYSBBY2NvdW50IElELiBBbGwgcGFydHMgYXJlIHJlcXVpcmVkLicsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHNoYXJkID0gTnVtYmVyKHNoYXJkU3RyKTtcbiAgY29uc3QgcmVhbG0gPSBOdW1iZXIocmVhbG1TdHIpO1xuICBjb25zdCBhY2NvdW50ID0gTnVtYmVyKGFjY291bnRTdHIpO1xuXG4gIC8vIFZhbGlkYXRlIGFsbCBwYXJ0cyBhcmUgdmFsaWQgbm9uLW5lZ2F0aXZlIGludGVnZXJzIHdpdGhpbiBzYWZlIHJhbmdlXG4gIGlmIChcbiAgICAhTnVtYmVyLmlzSW50ZWdlcihzaGFyZCkgfHxcbiAgICAhTnVtYmVyLmlzSW50ZWdlcihyZWFsbSkgfHxcbiAgICAhTnVtYmVyLmlzSW50ZWdlcihhY2NvdW50KSB8fFxuICAgIHNoYXJkIDwgMCB8fFxuICAgIHJlYWxtIDwgMCB8fFxuICAgIGFjY291bnQgPCAwXG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICB2YWxpZDogZmFsc2UsXG4gICAgICBlcnJvcjogJ0ludmFsaWQgSGVkZXJhIEFjY291bnQgSUQuIEFsbCBwYXJ0cyBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBpbnRlZ2Vycy4nLFxuICAgIH07XG4gIH1cblxuICAvLyBDaGVjayBmb3IgSmF2YVNjcmlwdCBzYWZlIGludGVnZXIgbGltaXRzIChwcmV2ZW50cyBwcmVjaXNpb24gbG9zcylcbiAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihzaGFyZCkgfHwgIU51bWJlci5pc1NhZmVJbnRlZ2VyKHJlYWxtKSB8fCAhTnVtYmVyLmlzU2FmZUludGVnZXIoYWNjb3VudCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgZXJyb3I6ICdJbnZhbGlkIEhlZGVyYSBBY2NvdW50IElELiBWYWx1ZXMgYXJlIHRvbyBsYXJnZS4nLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHZhbGlkOiB0cnVlLFxuICAgIGVycm9yOiBudWxsLFxuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgSGVkZXJhIEFjY291bnQgSUQgKGUuZy4sIDAuMC4xMjM0NSkgdG8gRVZNIGFkZHJlc3NcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVIZWRlcmFBY2NvdW50SWRUb0V2bUFkZHJlc3MoXG4gIGFjY291bnRJZDogc3RyaW5nLFxuICBpc1Byb2Q6IGJvb2xlYW5cbik6IFByb21pc2U8eyBhZGRyZXNzOiBzdHJpbmcgfCBudWxsOyBlcnJvcj86IHN0cmluZyB9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgbWlycm9yTm9kZVVybCA9IGlzUHJvZFxuICAgICAgPyAnaHR0cHM6Ly9tYWlubmV0LXB1YmxpYy5taXJyb3Jub2RlLmhlZGVyYS5jb20nXG4gICAgICA6ICdodHRwczovL3Rlc3RuZXQubWlycm9ybm9kZS5oZWRlcmEuY29tJztcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7bWlycm9yTm9kZVVybH0vYXBpL3YxL2FjY291bnRzLyR7YWNjb3VudElkfWApO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYWRkcmVzczogbnVsbCxcbiAgICAgICAgICBlcnJvcjogJ0hlZGVyYSBBY2NvdW50IElEIG5vdCBmb3VuZC4gUGxlYXNlIHZlcmlmeSB0aGUgYWNjb3VudCBleGlzdHMuJyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFkZHJlc3M6IG51bGwsXG4gICAgICAgIGVycm9yOiBgRmFpbGVkIHRvIHJlc29sdmUgSGVkZXJhIEFjY291bnQgSUQ6ICR7cmVzcG9uc2Uuc3RhdHVzfWAsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGFjY291bnREYXRhID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMgeyBldm1fYWRkcmVzcz86IHN0cmluZyB9O1xuICAgIGlmICghYWNjb3VudERhdGEuZXZtX2FkZHJlc3MpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFkZHJlc3M6IG51bGwsXG4gICAgICAgIGVycm9yOiAnVGhpcyBIZWRlcmEgYWNjb3VudCBkb2VzIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgRVZNIGFkZHJlc3MuJyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgYWRkcmVzczogYWNjb3VudERhdGEuZXZtX2FkZHJlc3MgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYWRkcmVzczogbnVsbCxcbiAgICAgIGVycm9yOiAnRmFpbGVkIHRvIHJlc29sdmUgSGVkZXJhIEFjY291bnQgSUQuIFBsZWFzZSBjaGVjayB5b3VyIGNvbm5lY3Rpb24uJyxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
package/dist/src/register.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { BitGoBase } from '@bitgo-beta/sdk-core';
|
|
2
|
-
export declare const
|
|
2
|
+
export declare const registerAll: (sdk: BitGoBase) => void;
|
|
3
|
+
export declare const register: (coinFamily: string, sdk: BitGoBase) => void;
|
|
3
4
|
//# sourceMappingURL=register.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAMjD,eAAO,MAAM,WAAW,QAAS,SAAS,KAAG,IAS5C,CAAC;AAEF,eAAO,MAAM,QAAQ,eAAgB,MAAM,OAAO,SAAS,KAAG,IAkC7D,CAAC"}
|
package/dist/src/register.js
CHANGED
|
@@ -1,14 +1,48 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.register = void 0;
|
|
3
|
+
exports.register = exports.registerAll = void 0;
|
|
4
4
|
const statics_1 = require("@bitgo-beta/statics");
|
|
5
5
|
const evmCoin_1 = require("./evmCoin");
|
|
6
|
-
const
|
|
6
|
+
const ethLikeErc20Token_1 = require("./ethLikeErc20Token");
|
|
7
|
+
const ethLikeErc721Token_1 = require("./ethLikeErc721Token");
|
|
8
|
+
const registerAll = (sdk) => {
|
|
7
9
|
statics_1.coins
|
|
8
|
-
.filter((coin) => coin.features.includes(statics_1.CoinFeature.SHARED_EVM_SDK))
|
|
10
|
+
.filter((coin) => coin.features.includes(statics_1.CoinFeature.SHARED_EVM_SDK) && coin.network.type === statics_1.NetworkType.MAINNET && !coin.isToken)
|
|
9
11
|
.forEach((coin) => {
|
|
10
|
-
|
|
12
|
+
(0, exports.register)(coin.family, sdk);
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
exports.registerAll = registerAll;
|
|
16
|
+
const register = (coinFamily, sdk) => {
|
|
17
|
+
const coinFeatures = statics_1.coins.get(coinFamily).features;
|
|
18
|
+
statics_1.coins
|
|
19
|
+
.filter((coin) => coin.family === coinFamily && !coin.isToken)
|
|
20
|
+
.forEach((coin) => {
|
|
21
|
+
// Handle SHARED_EVM_SDK registration
|
|
22
|
+
if (coinFeatures.includes(statics_1.CoinFeature.SHARED_EVM_SDK)) {
|
|
23
|
+
sdk.register(coin.name, evmCoin_1.EvmCoin.createInstance);
|
|
24
|
+
}
|
|
25
|
+
// Handle SUPPORTS_ERC20 registration
|
|
26
|
+
if (coinFeatures.includes(statics_1.CoinFeature.SUPPORTS_ERC20)) {
|
|
27
|
+
const coinNames = {
|
|
28
|
+
Mainnet: `${coin.name}`,
|
|
29
|
+
Testnet: `${coin.name}`,
|
|
30
|
+
};
|
|
31
|
+
ethLikeErc20Token_1.EthLikeErc20Token.createTokenConstructors(coinNames).forEach(({ name, coinConstructor }) => {
|
|
32
|
+
sdk.register(name, coinConstructor);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
// Handle SUPPORTS_ERC721 registration
|
|
36
|
+
if (coinFeatures.includes(statics_1.CoinFeature.SUPPORTS_ERC721)) {
|
|
37
|
+
const coinNames = {
|
|
38
|
+
Mainnet: `${coin.name}`,
|
|
39
|
+
Testnet: `${coin.name}`,
|
|
40
|
+
};
|
|
41
|
+
ethLikeErc721Token_1.EthLikeErc721Token.createTokenConstructors(coinNames).forEach(({ name, coinConstructor }) => {
|
|
42
|
+
sdk.register(name, coinConstructor);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
11
45
|
});
|
|
12
46
|
};
|
|
13
47
|
exports.register = register;
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsaURBQXNFO0FBQ3RFLHVDQUFvQztBQUNwQywyREFBd0Q7QUFDeEQsNkRBQTBEO0FBRW5ELE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBYyxFQUFRLEVBQUU7SUFDbEQsZUFBSztTQUNGLE1BQU0sQ0FDTCxDQUFDLElBQUksRUFBRSxFQUFFLENBQ1AsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMscUJBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxxQkFBVyxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQ25IO1NBQ0EsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDaEIsSUFBQSxnQkFBUSxFQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDN0IsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUM7QUFUVyxRQUFBLFdBQVcsZUFTdEI7QUFFSyxNQUFNLFFBQVEsR0FBRyxDQUFDLFVBQWtCLEVBQUUsR0FBYyxFQUFRLEVBQUU7SUFDbkUsTUFBTSxZQUFZLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDcEQsZUFBSztTQUNGLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQzdELE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ2hCLHFDQUFxQztRQUNyQyxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMscUJBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQ3RELEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxpQkFBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFFRCxxQ0FBcUM7UUFDckMsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLHFCQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUN0RCxNQUFNLFNBQVMsR0FBRztnQkFDaEIsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDdkIsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRTthQUN4QixDQUFDO1lBRUYscUNBQWlCLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRTtnQkFDekYsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsc0NBQXNDO1FBQ3RDLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxxQkFBVyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDdkQsTUFBTSxTQUFTLEdBQUc7Z0JBQ2hCLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ3ZCLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUU7YUFDeEIsQ0FBQztZQUVGLHVDQUFrQixDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUU7Z0JBQzFGLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDO0FBbENXLFFBQUEsUUFBUSxZQWtDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCaXRHb0Jhc2UgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBDb2luRmVhdHVyZSwgY29pbnMsIE5ldHdvcmtUeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBFdm1Db2luIH0gZnJvbSAnLi9ldm1Db2luJztcbmltcG9ydCB7IEV0aExpa2VFcmMyMFRva2VuIH0gZnJvbSAnLi9ldGhMaWtlRXJjMjBUb2tlbic7XG5pbXBvcnQgeyBFdGhMaWtlRXJjNzIxVG9rZW4gfSBmcm9tICcuL2V0aExpa2VFcmM3MjFUb2tlbic7XG5cbmV4cG9ydCBjb25zdCByZWdpc3RlckFsbCA9IChzZGs6IEJpdEdvQmFzZSk6IHZvaWQgPT4ge1xuICBjb2luc1xuICAgIC5maWx0ZXIoXG4gICAgICAoY29pbikgPT5cbiAgICAgICAgY29pbi5mZWF0dXJlcy5pbmNsdWRlcyhDb2luRmVhdHVyZS5TSEFSRURfRVZNX1NESykgJiYgY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgJiYgIWNvaW4uaXNUb2tlblxuICAgIClcbiAgICAuZm9yRWFjaCgoY29pbikgPT4ge1xuICAgICAgcmVnaXN0ZXIoY29pbi5mYW1pbHksIHNkayk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXIgPSAoY29pbkZhbWlseTogc3RyaW5nLCBzZGs6IEJpdEdvQmFzZSk6IHZvaWQgPT4ge1xuICBjb25zdCBjb2luRmVhdHVyZXMgPSBjb2lucy5nZXQoY29pbkZhbWlseSkuZmVhdHVyZXM7XG4gIGNvaW5zXG4gICAgLmZpbHRlcigoY29pbikgPT4gY29pbi5mYW1pbHkgPT09IGNvaW5GYW1pbHkgJiYgIWNvaW4uaXNUb2tlbilcbiAgICAuZm9yRWFjaCgoY29pbikgPT4ge1xuICAgICAgLy8gSGFuZGxlIFNIQVJFRF9FVk1fU0RLIHJlZ2lzdHJhdGlvblxuICAgICAgaWYgKGNvaW5GZWF0dXJlcy5pbmNsdWRlcyhDb2luRmVhdHVyZS5TSEFSRURfRVZNX1NESykpIHtcbiAgICAgICAgc2RrLnJlZ2lzdGVyKGNvaW4ubmFtZSwgRXZtQ29pbi5jcmVhdGVJbnN0YW5jZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBTVVBQT1JUU19FUkMyMCByZWdpc3RyYXRpb25cbiAgICAgIGlmIChjb2luRmVhdHVyZXMuaW5jbHVkZXMoQ29pbkZlYXR1cmUuU1VQUE9SVFNfRVJDMjApKSB7XG4gICAgICAgIGNvbnN0IGNvaW5OYW1lcyA9IHtcbiAgICAgICAgICBNYWlubmV0OiBgJHtjb2luLm5hbWV9YCxcbiAgICAgICAgICBUZXN0bmV0OiBgJHtjb2luLm5hbWV9YCxcbiAgICAgICAgfTtcblxuICAgICAgICBFdGhMaWtlRXJjMjBUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycyhjb2luTmFtZXMpLmZvckVhY2goKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IHtcbiAgICAgICAgICBzZGsucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBTVVBQT1JUU19FUkM3MjEgcmVnaXN0cmF0aW9uXG4gICAgICBpZiAoY29pbkZlYXR1cmVzLmluY2x1ZGVzKENvaW5GZWF0dXJlLlNVUFBPUlRTX0VSQzcyMSkpIHtcbiAgICAgICAgY29uc3QgY29pbk5hbWVzID0ge1xuICAgICAgICAgIE1haW5uZXQ6IGAke2NvaW4ubmFtZX1gLFxuICAgICAgICAgIFRlc3RuZXQ6IGAke2NvaW4ubmFtZX1gLFxuICAgICAgICB9O1xuXG4gICAgICAgIEV0aExpa2VFcmM3MjFUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycyhjb2luTmFtZXMpLmZvckVhY2goKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IHtcbiAgICAgICAgICBzZGsucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG59O1xuIl19
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitgo-beta/sdk-coin-evm",
|
|
3
|
-
"version": "1.0.1-beta.
|
|
3
|
+
"version": "1.0.1-beta.621",
|
|
4
4
|
"description": "Configurable common module for EVM assets, using @bitgo-beta/abstract-eth for reduced coin integration boilerplate.",
|
|
5
5
|
"main": "./dist/src/index.js",
|
|
6
6
|
"types": "./dist/src/index.d.ts",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"build": "yarn tsc --build --incremental --verbose .",
|
|
9
9
|
"fmt": "prettier --write .",
|
|
10
|
-
"check-fmt": "prettier --check
|
|
10
|
+
"check-fmt": "prettier --check '**/*.{ts,js,json}'",
|
|
11
11
|
"clean": "rm -r ./dist",
|
|
12
12
|
"lint": "eslint --quiet .",
|
|
13
13
|
"test": "npm run coverage",
|
|
@@ -16,10 +16,11 @@
|
|
|
16
16
|
"prepare": "npm run build"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@bitgo-beta/abstract-eth": "1.0.2-beta.
|
|
20
|
-
"@bitgo-beta/sdk-core": "8.2.1-beta.
|
|
21
|
-
"@bitgo-beta/statics": "15.1.1-beta.
|
|
22
|
-
"@ethereumjs/common": "^2.6.5"
|
|
19
|
+
"@bitgo-beta/abstract-eth": "1.0.2-beta.1792",
|
|
20
|
+
"@bitgo-beta/sdk-core": "8.2.1-beta.1562",
|
|
21
|
+
"@bitgo-beta/statics": "15.1.1-beta.1565",
|
|
22
|
+
"@ethereumjs/common": "^2.6.5",
|
|
23
|
+
"superagent": "^9.0.1"
|
|
23
24
|
},
|
|
24
25
|
"author": "BitGo SDK Team <sdkteam@bitgo.com>",
|
|
25
26
|
"license": "MIT",
|
|
@@ -45,5 +46,5 @@
|
|
|
45
46
|
".ts"
|
|
46
47
|
]
|
|
47
48
|
},
|
|
48
|
-
"gitHead": "
|
|
49
|
+
"gitHead": "9bc7003a813718caa55238f681bbab1e436802a8"
|
|
49
50
|
}
|