@bitgo-beta/sdk-coin-evm 1.0.1-beta.65 → 1.0.1-beta.650

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.
@@ -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==
@@ -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,25 @@ 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>): Promise<Record<string, unknown>>;
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;
35
+ /** @inheritDoc */
36
+ isValidAddress(address: string, isAlternateAddress?: boolean): boolean;
24
37
  }
25
38
  //# 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,EAAsB,MAAM,qBAAqB,CAAC;AACtF,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,cAAc,EAEd,kBAAkB,IAAI,yBAAyB,EAC/C,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAIlC,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;cAIf,wBAAwB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,GAAG,oBAAoB,CAAC;IAOpH;;;;OAIG;IACG,+BAA+B,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAWvG"}
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;IA0BxC,kBAAkB;IAClB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,OAAO,GAAG,OAAO;CAOvE"}
@@ -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,61 @@ 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
- return await (0, abstract_eth_1.recoveryBlockchainExplorerQuery)(query, explorerUrl, apiToken);
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;
101
+ }
102
+ /** @inheritDoc */
103
+ isValidAddress(address, isAlternateAddress) {
104
+ if (isAlternateAddress && this.getFamily() === statics_1.CoinFamily.HBAREVM) {
105
+ const { valid } = (0, utils_1.validateHederaAccountId)(address);
106
+ return valid;
107
+ }
108
+ return super.isValidAddress(address);
54
109
  }
55
110
  }
56
111
  exports.EvmCoin = EvmCoin;
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZtQ29pbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ldm1Db2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOztHQUVHO0FBQ0gsbURBQThHO0FBQzlHLGlEQUFzRjtBQUN0RiwyREFPa0M7QUFDbEMsK0JBQTJDO0FBQzNDLG9EQUE0QjtBQUU1QixNQUFhLE9BQVEsU0FBUSxzQ0FBdUI7SUFDbEQsWUFBc0IsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxLQUFLLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVTLHFCQUFxQjtRQUM3QixPQUFPLElBQUksd0JBQWtCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLHFCQUFXLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxvQkFBb0I7SUFDcEIsc0JBQXNCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLHFCQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLHdCQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyx3QkFBYSxDQUFDLE9BQU8sQ0FBQztJQUMxRyxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGVBQWU7UUFDYixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRVMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLE1BQXNCO1FBQzdELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLHFCQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzRCxPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsK0JBQStCLENBQUMsS0FBNkI7UUFDakUsTUFBTSxTQUFTLEdBQUcsaUJBQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUMvRCxJQUFBLGdCQUFNLEVBQ0osU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxTQUFTLEVBQzFDLDZCQUE2QixJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUMxRSxDQUFDO1FBRUYsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUN0RCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3hELE9BQU8sTUFBTSxJQUFBLDhDQUErQixFQUFDLEtBQUssRUFBRSxXQUFxQixFQUFFLFFBQWtCLENBQUMsQ0FBQztJQUNqRyxDQUFDO0NBQ0Y7QUFuREQsMEJBbURDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IHsgQmFzZUNvaW4sIEJpdEdvQmFzZSwgY29tbW9uLCBNUENBbGdvcml0aG0sIE11bHRpc2lnVHlwZSwgbXVsdGlzaWdUeXBlcyB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiwgQ29pbkZlYXR1cmUsIGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQge1xuICBBYnN0cmFjdEV0aExpa2VOZXdDb2lucyxcbiAgT2ZmbGluZVZhdWx0VHhJbmZvLFxuICBSZWNvdmVyT3B0aW9ucyxcbiAgcmVjb3ZlcnlCbG9ja2NoYWluRXhwbG9yZXJRdWVyeSxcbiAgVHJhbnNhY3Rpb25CdWlsZGVyIGFzIEV0aExpa2VUcmFuc2FjdGlvbkJ1aWxkZXIsXG4gIFVuc2lnbmVkU3dlZXBUeE1QQ3YyLFxufSBmcm9tICdAYml0Z28tYmV0YS9hYnN0cmFjdC1ldGgnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi9saWInO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5leHBvcnQgY2xhc3MgRXZtQ29pbiBleHRlbmRzIEFic3RyYWN0RXRoTGlrZU5ld0NvaW5zIHtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPikge1xuICAgIHN1cGVyKGJpdGdvLCBzdGF0aWNzQ29pbik7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlSW5zdGFuY2UoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KTogQmFzZUNvaW4ge1xuICAgIHJldHVybiBuZXcgRXZtQ29pbihiaXRnbywgc3RhdGljc0NvaW4pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFRyYW5zYWN0aW9uQnVpbGRlcigpOiBFdGhMaWtlVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uQnVpbGRlcihjb2lucy5nZXQodGhpcy5nZXRCYXNlQ2hhaW4oKSkpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHN1cHBvcnRzVHNzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRpY3NDb2luPy5mZWF0dXJlcy5pbmNsdWRlcyhDb2luRmVhdHVyZS5UU1MpID8/IGZhbHNlO1xuICB9XG5cbiAgLyoqIGluaGVyaXRlZCBkb2MgKi9cbiAgZ2V0RGVmYXVsdE11bHRpc2lnVHlwZSgpOiBNdWx0aXNpZ1R5cGUge1xuICAgIHJldHVybiB0aGlzLnN0YXRpY3NDb2luPy5mZWF0dXJlcy5pbmNsdWRlcyhDb2luRmVhdHVyZS5UU1MpID8gbXVsdGlzaWdUeXBlcy50c3MgOiBtdWx0aXNpZ1R5cGVzLm9uY2hhaW47XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZ2V0TVBDQWxnb3JpdGhtKCk6IE1QQ0FsZ29yaXRobSB7XG4gICAgcmV0dXJuICdlY2RzYSc7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRVbnNpZ25lZFN3ZWVwVHhuVFNTKHBhcmFtczogUmVjb3Zlck9wdGlvbnMpOiBQcm9taXNlPE9mZmxpbmVWYXVsdFR4SW5mbyB8IFVuc2lnbmVkU3dlZXBUeE1QQ3YyPiB7XG4gICAgaWYgKHRoaXMuc3RhdGljc0NvaW4/LmZlYXR1cmVzLmluY2x1ZGVzKENvaW5GZWF0dXJlLk1QQ1YyKSkge1xuICAgICAgcmV0dXJuIHRoaXMuYnVpbGRVbnNpZ25lZFN3ZWVwVHhuTVBDdjIocGFyYW1zKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmJ1aWxkVW5zaWduZWRTd2VlcFR4blRTUyhwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYSBxdWVyeSB0byBjaGFpbiBleHBsb3JlciBmb3IgaW5mb3JtYXRpb24gc3VjaCBhcyBiYWxhbmNlLCB0b2tlbiBiYWxhbmNlLCBzb2xpZGl0eSBjYWxsc1xuICAgKiBAcGFyYW0ge09iamVjdH0gcXVlcnkga2V5LXZhbHVlIHBhaXJzIG9mIHBhcmFtZXRlcnMgdG8gYXBwZW5kIGFmdGVyIC9hcGlcbiAgICogQHJldHVybnMge1Byb21pc2U8T2JqZWN0Pn0gcmVzcG9uc2UgZnJvbSBjaGFpbiBleHBsb3JlclxuICAgKi9cbiAgYXN5bmMgcmVjb3ZlcnlCbG9ja2NoYWluRXhwbG9yZXJRdWVyeShxdWVyeTogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgICBjb25zdCBldm1Db25maWcgPSBjb21tb24uRW52aXJvbm1lbnRzW3RoaXMuYml0Z28uZ2V0RW52KCldLmV2bTtcbiAgICBhc3NlcnQoXG4gICAgICBldm1Db25maWcgJiYgdGhpcy5nZXRGYW1pbHkoKSBpbiBldm1Db25maWcsXG4gICAgICBgZW52IGNvbmZpZyBpcyBtaXNzaW5nIGZvciAke3RoaXMuZ2V0RmFtaWx5KCl9IGluICR7dGhpcy5iaXRnby5nZXRFbnYoKX1gXG4gICAgKTtcblxuICAgIGNvbnN0IGFwaVRva2VuID0gZXZtQ29uZmlnW3RoaXMuZ2V0RmFtaWx5KCldLmFwaVRva2VuO1xuICAgIGNvbnN0IGV4cGxvcmVyVXJsID0gZXZtQ29uZmlnW3RoaXMuZ2V0RmFtaWx5KCldLmJhc2VVcmw7XG4gICAgcmV0dXJuIGF3YWl0IHJlY292ZXJ5QmxvY2tjaGFpbkV4cGxvcmVyUXVlcnkocXVlcnksIGV4cGxvcmVyVXJsIGFzIHN0cmluZywgYXBpVG9rZW4gYXMgc3RyaW5nKTtcbiAgfVxufVxuIl19
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZtQ29pbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ldm1Db2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOztHQUVHO0FBQ0gsbURBQThHO0FBQzlHLGlEQUFrRztBQUNsRywyREFRa0M7QUFDbEMsK0JBQTJDO0FBQzNDLHVDQUFnRztBQUNoRyxvREFBNEI7QUFFNUIsTUFBYSxPQUFRLFNBQVEsc0NBQXVCO0lBQ2xELFlBQXNCLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFnQixFQUFFLFdBQXVDO1FBQzdFLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFUyxxQkFBcUI7UUFDN0IsT0FBTyxJQUFJLHdCQUFrQixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxxQkFBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUN2RSxDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCLHNCQUFzQjtRQUNwQixPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxxQkFBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyx3QkFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsd0JBQWEsQ0FBQyxPQUFPLENBQUM7SUFDMUcsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixlQUFlO1FBQ2IsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixzQkFBc0I7UUFDcEIs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LENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQzNHLEVBQ0QsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBRUQsSUFBSSxRQUFRLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUUsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFFRCw2Q0FBNkM7UUFDN0MsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGNBQWMsQ0FBQyxPQUFlLEVBQUUsa0JBQTRCO1FBQzFELElBQUksa0JBQWtCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLG9CQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUEsK0JBQXVCLEVBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7Q0FDRjtBQWhJRCwwQkFnSUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQgeyBCYXNlQ29pbiwgQml0R29CYXNlLCBjb21tb24sIE1QQ0FsZ29yaXRobSwgTXVsdGlzaWdUeXBlLCBtdWx0aXNpZ1R5cGVzIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgU3RhdGljc0Jhc2VDb2luLCBDb2luRmVhdHVyZSwgY29pbnMsIENvaW5GYW1pbHkgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7XG4gIEFic3RyYWN0RXRoTGlrZU5ld0NvaW5zLFxuICBPZmZsaW5lVmF1bHRUeEluZm8sXG4gIFJlY292ZXJPcHRpb25zLFxuICByZWNvdmVyeUJsb2NrY2hhaW5FeHBsb3JlclF1ZXJ5LFxuICBUcmFuc2FjdGlvbkJ1aWxkZXIgYXMgRXRoTGlrZVRyYW5zYWN0aW9uQnVpbGRlcixcbiAgVW5zaWduZWRTd2VlcFR4TVBDdjIsXG4gIFZlcmlmeUV0aFRyYW5zYWN0aW9uT3B0aW9ucyxcbn0gZnJvbSAnQGJpdGdvLWJldGEvYWJzdHJhY3QtZXRoJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vbGliJztcbmltcG9ydCB7IHJlY292ZXJ5X0hCQVJFVk1fQmxvY2tjaGFpbkV4cGxvcmVyUXVlcnksIHZhbGlkYXRlSGVkZXJhQWNjb3VudElkIH0gZnJvbSAnLi9saWIvdXRpbHMnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5leHBvcnQgY2xhc3MgRXZtQ29pbiBleHRlbmRzIEFic3RyYWN0RXRoTGlrZU5ld0NvaW5zIHtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPikge1xuICAgIHN1cGVyKGJpdGdvLCBzdGF0aWNzQ29pbik7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlSW5zdGFuY2UoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KTogQmFzZUNvaW4ge1xuICAgIHJldHVybiBuZXcgRXZtQ29pbihiaXRnbywgc3RhdGljc0NvaW4pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFRyYW5zYWN0aW9uQnVpbGRlcigpOiBFdGhMaWtlVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uQnVpbGRlcihjb2lucy5nZXQodGhpcy5nZXRCYXNlQ2hhaW4oKSkpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHN1cHBvcnRzVHNzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRpY3NDb2luPy5mZWF0dXJlcy5pbmNsdWRlcyhDb2luRmVhdHVyZS5UU1MpID8/IGZhbHNlO1xuICB9XG5cbiAgLyoqIGluaGVyaXRlZCBkb2MgKi9cbiAgZ2V0RGVmYXVsdE11bHRpc2lnVHlwZSgpOiBNdWx0aXNpZ1R5cGUge1xuICAgIHJldHVybiB0aGlzLnN0YXRpY3NDb2luPy5mZWF0dXJlcy5pbmNsdWRlcyhDb2luRmVhdHVyZS5UU1MpID8gbXVsdGlzaWdUeXBlcy50c3MgOiBtdWx0aXNpZ1R5cGVzLm9uY2hhaW47XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZ2V0TVBDQWxnb3JpdGhtKCk6IE1QQ0FsZ29yaXRobSB7XG4gICAgcmV0dXJuICdlY2RzYSc7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgc3VwcG9ydHNNZXNzYWdlU2lnbmluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzdXBwb3J0c1NpZ25pbmdUeXBlZERhdGEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRVbnNpZ25lZFN3ZWVwVHhuVFNTKHBhcmFtczogUmVjb3Zlck9wdGlvbnMpOiBQcm9taXNlPE9mZmxpbmVWYXVsdFR4SW5mbyB8IFVuc2lnbmVkU3dlZXBUeE1QQ3YyPiB7XG4gICAgaWYgKHRoaXMuc3RhdGljc0NvaW4/LmZlYXR1cmVzLmluY2x1ZGVzKENvaW5GZWF0dXJlLk1QQ1YyKSkge1xuICAgICAgcmV0dXJuIHRoaXMuYnVpbGRVbnNpZ25lZFN3ZWVwVHhuTVBDdjIocGFyYW1zKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmJ1aWxkVW5zaWduZWRTd2VlcFR4blRTUyhwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYSBxdWVyeSB0byBjaGFpbiBleHBsb3JlciBmb3IgaW5mb3JtYXRpb24gc3VjaCBhcyBiYWxhbmNlLCB0b2tlbiBiYWxhbmNlLCBzb2xpZGl0eSBjYWxsc1xuICAgKiBAcGFyYW0ge09iamVjdH0gcXVlcnkga2V5LXZhbHVlIHBhaXJzIG9mIHBhcmFtZXRlcnMgdG8gYXBwZW5kIGFmdGVyIC9hcGlcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwaUtleSBvcHRpb25hbCBBUEkga2V5IHRvIHVzZSBmb3IgdGhlIHF1ZXJ5IGZhbGxzIGJhY2sgdG8gRVZNIGNvbmZpZyBpZiBub3QgcHJvdmlkZWRcbiAgICogQHJldHVybnMge1Byb21pc2U8T2JqZWN0Pn0gcmVzcG9uc2UgZnJvbSBjaGFpbiBleHBsb3JlclxuICAgKi9cbiAgYXN5bmMgcmVjb3ZlcnlCbG9ja2NoYWluRXhwbG9yZXJRdWVyeShcbiAgICBxdWVyeTogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICBhcGlLZXk/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAgIGNvbnN0IGV2bUNvbmZpZyA9IGNvbW1vbi5FbnZpcm9ubWVudHNbdGhpcy5iaXRnby5nZXRFbnYoKV0uZXZtO1xuICAgIGFzc2VydChcbiAgICAgIGV2bUNvbmZpZyAmJiB0aGlzLmdldEZhbWlseSgpIGluIGV2bUNvbmZpZyxcbiAgICAgIGBlbnYgY29uZmlnIGlzIG1pc3NpbmcgZm9yICR7dGhpcy5nZXRGYW1pbHkoKX0gaW4gJHt0aGlzLmJpdGdvLmdldEVudigpfWBcbiAgICApO1xuXG4gICAgY29uc3QgYXBpVG9rZW4gPSBhcGlLZXkgfHwgZXZtQ29uZmlnW3RoaXMuZ2V0RmFtaWx5KCldLmFwaVRva2VuO1xuICAgIGNvbnN0IGV4cGxvcmVyVXJsID0gZXZtQ29uZmlnW3RoaXMuZ2V0RmFtaWx5KCldLmJhc2VVcmw7XG4gICAgc3dpdGNoICh0aGlzLmdldEZhbWlseSgpKSB7XG4gICAgICBjYXNlIENvaW5GYW1pbHkuSEJBUkVWTTpcbiAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgIGV2bUNvbmZpZ1t0aGlzLmdldEZhbWlseSgpXS5ycGNVcmwsXG4gICAgICAgICAgYHJwYyB1cmwgY29uZmlnIGlzIG1pc3NpbmcgZm9yICR7dGhpcy5nZXRGYW1pbHkoKX0gaW4gJHt0aGlzLmJpdGdvLmdldEVudigpfWBcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcnBjVXJsID0gZXZtQ29uZmlnW3RoaXMuZ2V0RmFtaWx5KCldLnJwY1VybDtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlY292ZXJ5X0hCQVJFVk1fQmxvY2tjaGFpbkV4cGxvcmVyUXVlcnkoXG4gICAgICAgICAgcXVlcnksXG4gICAgICAgICAgcnBjVXJsIGFzIHN0cmluZyxcbiAgICAgICAgICBleHBsb3JlclVybCBhcyBzdHJpbmcsXG4gICAgICAgICAgYXBpVG9rZW4gYXMgc3RyaW5nXG4gICAgICAgICk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gYXdhaXQgcmVjb3ZlcnlCbG9ja2NoYWluRXhwbG9yZXJRdWVyeShxdWVyeSwgZXhwbG9yZXJVcmwgYXMgc3RyaW5nLCBhcGlUb2tlbiBhcyBzdHJpbmcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBhc3luYyB2ZXJpZnlUc3NUcmFuc2FjdGlvbihwYXJhbXM6IFZlcmlmeUV0aFRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHN1cHBvcnRzRUlQMTU1OSA9IHRoaXMuc3RhdGljc0NvaW4/LmZlYXR1cmVzPy5pbmNsdWRlcyhDb2luRmVhdHVyZS5FSVAxNTU5KTtcbiAgICBpZiAoc3VwcG9ydHNFSVAxNTU5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgc3VwZXIudmVyaWZ5VHNzVHJhbnNhY3Rpb24ocGFyYW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudmVyaWZ5TGVnYWN5VHNzVHJhbnNhY3Rpb24ocGFyYW1zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgbGVnYWN5IChub24tRUlQLTE1NTkpIFRTUyB0cmFuc2FjdGlvbnMgd2l0aCBiYXNpYyB2YWxpZGF0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB2ZXJpZnlMZWdhY3lUc3NUcmFuc2FjdGlvbihwYXJhbXM6IFZlcmlmeUV0aFRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQsIHdhbGxldCB9ID0gcGFyYW1zO1xuXG4gICAgLy8gQmFzaWMgdmFsaWRhdGlvbiBmb3IgbGVnYWN5IHRyYW5zYWN0aW9ucyBvbmx5XG4gICAgaWYgKFxuICAgICAgIXR4UGFyYW1zPy5yZWNpcGllbnRzICYmXG4gICAgICAhKFxuICAgICAgICB0eFBhcmFtcy5wcmVidWlsZFR4Py5jb25zb2xpZGF0ZUlkIHx8XG4gICAgICAgICh0eFBhcmFtcy50eXBlICYmIFsnYWNjZWxlcmF0aW9uJywgJ2ZpbGxOb25jZScsICd0cmFuc2ZlclRva2VuJywgJ3Rva2VuQXBwcm92YWwnXS5pbmNsdWRlcyh0eFBhcmFtcy50eXBlKSlcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbWlzc2luZyB0eFBhcmFtc2ApO1xuICAgIH1cblxuICAgIGlmICghd2FsbGV0IHx8ICF0eFByZWJ1aWxkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG1pc3NpbmcgcGFyYW1zYCk7XG4gICAgfVxuXG4gICAgaWYgKHR4UGFyYW1zLmhvcCAmJiB0eFBhcmFtcy5yZWNpcGllbnRzICYmIHR4UGFyYW1zLnJlY2lwaWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB0eCBjYW5ub3QgYmUgYm90aCBhIGJhdGNoIGFuZCBob3AgdHJhbnNhY3Rpb25gKTtcbiAgICB9XG5cbiAgICAvLyBJZiB2YWxpZGF0aW9uIHBhc3NlcywgY29uc2lkZXIgaXQgdmVyaWZpZWRcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcsIGlzQWx0ZXJuYXRlQWRkcmVzcz86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICBpZiAoaXNBbHRlcm5hdGVBZGRyZXNzICYmIHRoaXMuZ2V0RmFtaWx5KCkgPT09IENvaW5GYW1pbHkuSEJBUkVWTSkge1xuICAgICAgY29uc3QgeyB2YWxpZCB9ID0gdmFsaWRhdGVIZWRlcmFBY2NvdW50SWQoYWRkcmVzcyk7XG4gICAgICByZXR1cm4gdmFsaWQ7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKTtcbiAgfVxufVxuIl19
@@ -1,4 +1,6 @@
1
1
  export * from './evmCoin';
2
2
  export * from './lib';
3
3
  export * from './register';
4
+ export * from './ethLikeErc20Token';
5
+ export * from './ethLikeErc721Token';
4
6
  //# sourceMappingURL=index.d.ts.map
@@ -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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDRDQUEwQjtBQUMxQix3Q0FBc0I7QUFDdEIsNkNBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9ldm1Db2luJztcbmV4cG9ydCAqIGZyb20gJy4vbGliJztcbmV4cG9ydCAqIGZyb20gJy4vcmVnaXN0ZXInO1xuIl19
20
+ __exportStar(require("./ethLikeErc20Token"), exports);
21
+ __exportStar(require("./ethLikeErc721Token"), exports);
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDRDQUEwQjtBQUMxQix3Q0FBc0I7QUFDdEIsNkNBQTJCO0FBQzNCLHNEQUFvQztBQUNwQyx1REFBcUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2V2bUNvaW4nO1xuZXhwb3J0ICogZnJvbSAnLi9saWInO1xuZXhwb3J0ICogZnJvbSAnLi9yZWdpc3Rlcic7XG5leHBvcnQgKiBmcm9tICcuL2V0aExpa2VFcmMyMFRva2VuJztcbmV4cG9ydCAqIGZyb20gJy4vZXRoTGlrZUVyYzcyMVRva2VuJztcbiJdfQ==
@@ -5,4 +5,17 @@ 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
+ };
8
21
  //# 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;AAGhD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,cAAc,CAgBlE"}
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"}
@@ -4,8 +4,11 @@ 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;
7
9
  const statics_1 = require("@bitgo-beta/statics");
8
10
  const common_1 = __importDefault(require("@ethereumjs/common"));
11
+ const superagent_1 = __importDefault(require("superagent"));
9
12
  const sdk_core_1 = require("@bitgo-beta/sdk-core");
10
13
  /**
11
14
  * @param {NetworkType} network either mainnet or testnet
@@ -25,4 +28,191 @@ function getCommon(coin) {
25
28
  eips: coin.features.includes(statics_1.CoinFeature.EIP1559) ? [1559] : undefined,
26
29
  });
27
30
  }
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBUUEsOEJBZ0JDO0FBeEJELGlEQUEwRjtBQUMxRixnRUFBZ0Q7QUFDaEQsbURBQStEO0FBRS9EOzs7R0FHRztBQUNILFNBQWdCLFNBQVMsQ0FBQyxJQUF3QjtJQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMscUJBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1FBQ3hELE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQyw2Q0FBNkMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUNELE9BQU8sZ0JBQWMsQ0FBQyxNQUFNLENBQzFCO1FBQ0UsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSTtRQUN2QixTQUFTLEVBQUcsSUFBSSxDQUFDLE9BQTJCLENBQUMsT0FBTztRQUNwRCxPQUFPLEVBQUcsSUFBSSxDQUFDLE9BQTJCLENBQUMsT0FBTztLQUNuRCxFQUNEO1FBQ0UsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLHFCQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDNUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLHFCQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUM1RSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMscUJBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztLQUN2RSxDQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29pbkZlYXR1cmUsIE5ldHdvcmtUeXBlLCBCYXNlQ29pbiwgRXRoZXJldW1OZXR3b3JrIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgRXRoZXJldW1Db21tb24gZnJvbSAnQGV0aGVyZXVtanMvY29tbW9uJztcbmltcG9ydCB7IEludmFsaWRUcmFuc2FjdGlvbkVycm9yIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuXG4vKipcbiAqIEBwYXJhbSB7TmV0d29ya1R5cGV9IG5ldHdvcmsgZWl0aGVyIG1haW5uZXQgb3IgdGVzdG5ldFxuICogQHJldHVybnMge0V0aGVyZXVtQ29tbW9ufSBFdGhlcmV1bSBjb21tb24gY29uZmlndXJhdGlvbiBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbW1vbihjb2luOiBSZWFkb25seTxCYXNlQ29pbj4pOiBFdGhlcmV1bUNvbW1vbiB7XG4gIGlmICghY29pbi5mZWF0dXJlcy5pbmNsdWRlcyhDb2luRmVhdHVyZS5TSEFSRURfRVZNX1NESykpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoYENhbm5vdCB1c2UgY29tbW9uIHNkayBtb2R1bGUgZm9yIHRoZSBjb2luICR7Y29pbi5uYW1lfWApO1xuICB9XG4gIHJldHVybiBFdGhlcmV1bUNvbW1vbi5jdXN0b20oXG4gICAge1xuICAgICAgbmFtZTogY29pbi5uZXR3b3JrLm5hbWUsXG4gICAgICBuZXR3b3JrSWQ6IChjb2luLm5ldHdvcmsgYXMgRXRoZXJldW1OZXR3b3JrKS5jaGFpbklkLFxuICAgICAgY2hhaW5JZDogKGNvaW4ubmV0d29yayBhcyBFdGhlcmV1bU5ldHdvcmspLmNoYWluSWQsXG4gICAgfSxcbiAgICB7XG4gICAgICBiYXNlQ2hhaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ21haW5uZXQnIDogJ3NlcG9saWEnLFxuICAgICAgaGFyZGZvcms6IGNvaW4uZmVhdHVyZXMuaW5jbHVkZXMoQ29pbkZlYXR1cmUuRUlQMTU1OSkgPyAnbG9uZG9uJyA6IHVuZGVmaW5lZCxcbiAgICAgIGVpcHM6IGNvaW4uZmVhdHVyZXMuaW5jbHVkZXMoQ29pbkZlYXR1cmUuRUlQMTU1OSkgPyBbMTU1OV0gOiB1bmRlZmluZWQsXG4gICAgfVxuICApO1xufVxuIl19
31
+ function tinybarsToWei(tinybars) {
32
+ // Convert from tinybars to wei (1 HBAR = 10^8 tinybars, 1 HBAR = 10^18 wei)
33
+ // So: wei = tinybars * 10^10
34
+ return (BigInt(tinybars) * BigInt('10000000000')).toString();
35
+ }
36
+ /**
37
+ *
38
+ * @param query - etherscan query parameters for the API call
39
+ * @param rpcUrl - RPC URL of the Hedera network
40
+ * @param explorerUrl - base URL of the Hedera Mirror Node API
41
+ * @param token - optional API key to use for the query
42
+ * @returns
43
+ */
44
+ async function recovery_HBAREVM_BlockchainExplorerQuery(query, rpcUrl, explorerUrl, token) {
45
+ // Hedera Mirror Node API does not use API keys, but we keep this for compatibility
46
+ if (token) {
47
+ query.apikey = token;
48
+ }
49
+ const { module, action } = query;
50
+ // Remove trailing slash from explorerUrl if present
51
+ const baseUrl = explorerUrl.replace(/\/$/, '');
52
+ switch (`${module}.${action}`) {
53
+ case 'account.balance':
54
+ return await queryAddressBalanceHedera(query, baseUrl);
55
+ case 'account.txlist':
56
+ return await getAddressNonceHedera(query, baseUrl);
57
+ case 'account.tokenbalance':
58
+ return await queryTokenBalanceHedera(query, baseUrl);
59
+ case 'proxy.eth_gasPrice':
60
+ return await getGasPriceFromRPC(query, rpcUrl);
61
+ case 'proxy.eth_estimateGas':
62
+ return await getGasLimitFromRPC(query, rpcUrl);
63
+ case 'proxy.eth_call':
64
+ return await querySequenceIdFromRPC(query, rpcUrl);
65
+ default:
66
+ throw new Error(`Unsupported API call: ${module}.${action}`);
67
+ }
68
+ }
69
+ /**
70
+ * 1. Gets address balance using Hedera Mirror Node API
71
+ */
72
+ async function queryAddressBalanceHedera(query, baseUrl) {
73
+ const address = query.address;
74
+ const url = `${baseUrl}/accounts/${address}?transactions=false`;
75
+ const response = await superagent_1.default.get(url).send();
76
+ if (!response.ok) {
77
+ throw new Error('could not reach explorer');
78
+ }
79
+ const balance = response.body.balance?.balance || '0';
80
+ const balanceInWei = tinybarsToWei(balance);
81
+ return { result: balanceInWei };
82
+ }
83
+ /**
84
+ * 2. Gets nonce using Hedera Mirror Node API
85
+ */
86
+ async function getAddressNonceHedera(query, baseUrl) {
87
+ const address = query.address;
88
+ const accountUrl = `${baseUrl}/accounts/${address}?transactions=false`;
89
+ const response = await superagent_1.default.get(accountUrl).send();
90
+ if (!response.ok) {
91
+ throw new Error('could not reach explorer');
92
+ }
93
+ const nonce = response.body.ethereum_nonce || 0;
94
+ return { nonce: nonce };
95
+ }
96
+ /**
97
+ * 3. Gets token balance using Hedera Mirror Node API
98
+ */
99
+ async function queryTokenBalanceHedera(query, baseUrl) {
100
+ const contractAddress = query.contractaddress;
101
+ const address = query.address;
102
+ // Get token balances for the account
103
+ const url = `${baseUrl}/accounts/${address}/tokens`;
104
+ const response = await superagent_1.default.get(url).send();
105
+ if (!response.ok) {
106
+ throw new Error('could not reach explorer');
107
+ }
108
+ // Find the specific token balance
109
+ const tokens = response.body.tokens || [];
110
+ const tokenBalance = tokens.find((token) => token.token_id === contractAddress || token.contract_address === contractAddress);
111
+ const balance = tokenBalance && tokenBalance.balance !== null ? tokenBalance.balance.toString() : '0';
112
+ const balanceInWei = tinybarsToWei(balance);
113
+ return { result: balanceInWei };
114
+ }
115
+ /**
116
+ * 4. Gets sequence ID using RPC call
117
+ */
118
+ async function querySequenceIdFromRPC(query, rpcUrl) {
119
+ const { to, data } = query;
120
+ const requestBody = {
121
+ jsonrpc: '2.0',
122
+ method: 'eth_call',
123
+ params: [
124
+ {
125
+ to: to,
126
+ data: data,
127
+ },
128
+ ],
129
+ id: 1,
130
+ };
131
+ const response = await superagent_1.default.post(rpcUrl).send(requestBody).set('Content-Type', 'application/json');
132
+ if (!response.ok) {
133
+ throw new Error('could not fetch sequence ID from RPC');
134
+ }
135
+ return response.body;
136
+ }
137
+ /**
138
+ * 5. getGasPriceFromRPC - Gets gas price using Hedera Mirror Node API
139
+ */
140
+ async function getGasPriceFromRPC(query, rpcUrl) {
141
+ const requestBody = {
142
+ jsonrpc: '2.0',
143
+ method: 'eth_gasPrice',
144
+ params: [],
145
+ id: 1,
146
+ };
147
+ const response = await superagent_1.default.post(rpcUrl).send(requestBody).set('Content-Type', 'application/json');
148
+ if (!response.ok) {
149
+ throw new Error('could not fetch gas price from RPC');
150
+ }
151
+ return response.body;
152
+ }
153
+ /**
154
+ * 6. getGasLimitFromRPC - Gets gas limit estimate using RPC call.
155
+ */
156
+ async function getGasLimitFromRPC(query, rpcUrl) {
157
+ const { from, to, data } = query;
158
+ const requestBody = {
159
+ jsonrpc: '2.0',
160
+ method: 'eth_estimateGas',
161
+ params: [
162
+ {
163
+ from,
164
+ to,
165
+ data,
166
+ },
167
+ ],
168
+ id: 1,
169
+ };
170
+ const response = await superagent_1.default.post(rpcUrl).send(requestBody).set('Content-Type', 'application/json');
171
+ if (!response.ok) {
172
+ throw new Error('could not estimate gas limit from RPC');
173
+ }
174
+ return response.body;
175
+ }
176
+ function validateHederaAccountId(address) {
177
+ const parts = address.split('.');
178
+ if (parts.length !== 3) {
179
+ return {
180
+ valid: false,
181
+ error: 'Invalid Hedera Account ID format. Use format: 0.0.12345',
182
+ };
183
+ }
184
+ const [shardStr, realmStr, accountStr] = parts;
185
+ if (!shardStr || !realmStr || !accountStr) {
186
+ return {
187
+ valid: false,
188
+ error: 'Invalid Hedera Account ID. All parts are required.',
189
+ };
190
+ }
191
+ const shard = Number(shardStr);
192
+ const realm = Number(realmStr);
193
+ const account = Number(accountStr);
194
+ // Validate all parts are valid non-negative integers within safe range
195
+ if (!Number.isInteger(shard) ||
196
+ !Number.isInteger(realm) ||
197
+ !Number.isInteger(account) ||
198
+ shard < 0 ||
199
+ realm < 0 ||
200
+ account < 0) {
201
+ return {
202
+ valid: false,
203
+ error: 'Invalid Hedera Account ID. All parts must be non-negative integers.',
204
+ };
205
+ }
206
+ // Check for JavaScript safe integer limits (prevents precision loss)
207
+ if (!Number.isSafeInteger(shard) || !Number.isSafeInteger(realm) || !Number.isSafeInteger(account)) {
208
+ return {
209
+ valid: false,
210
+ error: 'Invalid Hedera Account ID. Values are too large.',
211
+ };
212
+ }
213
+ return {
214
+ valid: true,
215
+ error: null,
216
+ };
217
+ }
218
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBU0EsOEJBZ0JDO0FBZ0JELDRGQXNDQztBQW1KRCwwREErQ0M7QUFqUkQsaURBQTBGO0FBQzFGLGdFQUFnRDtBQUNoRCw0REFBaUM7QUFDakMsbURBQStEO0FBRS9EOzs7R0FHRztBQUNILFNBQWdCLFNBQVMsQ0FBQyxJQUF3QjtJQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMscUJBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1FBQ3hELE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQyw2Q0FBNkMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUNELE9BQU8sZ0JBQWMsQ0FBQyxNQUFNLENBQzFCO1FBQ0UsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSTtRQUN2QixTQUFTLEVBQUcsSUFBSSxDQUFDLE9BQTJCLENBQUMsT0FBTztRQUNwRCxPQUFPLEVBQUcsSUFBSSxDQUFDLE9BQTJCLENBQUMsT0FBTztLQUNuRCxFQUNEO1FBQ0UsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLHFCQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDNUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLHFCQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUM1RSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMscUJBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztLQUN2RSxDQUNG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cGUsIEJhc2VDb2luLCBFdGhlcmV1bU5ldHdvcmsgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCBFdGhlcmV1bUNvbW1vbiBmcm9tICdAZXRoZXJldW1qcy9jb21tb24nO1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAnc3VwZXJhZ2VudCc7XG5pbXBvcnQgeyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuLyoqXG4gKiBAcGFyYW0ge05ldHdvcmtUeXBlfSBuZXR3b3JrIGVpdGhlciBtYWlubmV0IG9yIHRlc3RuZXRcbiAqIEByZXR1cm5zIHtFdGhlcmV1bUNvbW1vbn0gRXRoZXJldW0gY29tbW9uIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb21tb24oY29pbjogUmVhZG9ubHk8QmFzZUNvaW4+KTogRXRoZXJldW1Db21tb24ge1xuICBpZiAoIWNvaW4uZmVhdHVyZXMuaW5jbHVkZXMoQ29pbkZlYXR1cmUuU0hBUkVEX0VWTV9TREspKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKGBDYW5ub3QgdXNlIGNvbW1vbiBzZGsgbW9kdWxlIGZvciB0aGUgY29pbiAke2NvaW4ubmFtZX1gKTtcbiAgfVxuICByZXR1cm4gRXRoZXJldW1Db21tb24uY3VzdG9tKFxuICAgIHtcbiAgICAgIG5hbWU6IGNvaW4ubmV0d29yay5uYW1lLFxuICAgICAgbmV0d29ya0lkOiAoY29pbi5uZXR3b3JrIGFzIEV0aGVyZXVtTmV0d29yaykuY2hhaW5JZCxcbiAgICAgIGNoYWluSWQ6IChjb2luLm5ldHdvcmsgYXMgRXRoZXJldW1OZXR3b3JrKS5jaGFpbklkLFxuICAgIH0sXG4gICAge1xuICAgICAgYmFzZUNoYWluOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdtYWlubmV0JyA6ICdzZXBvbGlhJyxcbiAgICAgIGhhcmRmb3JrOiBjb2luLmZlYXR1cmVzLmluY2x1ZGVzKENvaW5GZWF0dXJlLkVJUDE1NTkpID8gJ2xvbmRvbicgOiB1bmRlZmluZWQsXG4gICAgICBlaXBzOiBjb2luLmZlYXR1cmVzLmluY2x1ZGVzKENvaW5GZWF0dXJlLkVJUDE1NTkpID8gWzE1NTldIDogdW5kZWZpbmVkLFxuICAgIH1cbiAgKTtcbn1cblxuZnVuY3Rpb24gdGlueWJhcnNUb1dlaSh0aW55YmFyczogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gQ29udmVydCBmcm9tIHRpbnliYXJzIHRvIHdlaSAoMSBIQkFSID0gMTBeOCB0aW55YmFycywgMSBIQkFSID0gMTBeMTggd2VpKVxuICAvLyBTbzogd2VpID0gdGlueWJhcnMgKiAxMF4xMFxuICByZXR1cm4gKEJpZ0ludCh0aW55YmFycykgKiBCaWdJbnQoJzEwMDAwMDAwMDAwJykpLnRvU3RyaW5nKCk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBxdWVyeSAtIGV0aGVyc2NhbiBxdWVyeSBwYXJhbWV0ZXJzIGZvciB0aGUgQVBJIGNhbGxcbiAqIEBwYXJhbSBycGNVcmwgLSBSUEMgVVJMIG9mIHRoZSBIZWRlcmEgbmV0d29ya1xuICogQHBhcmFtIGV4cGxvcmVyVXJsIC0gYmFzZSBVUkwgb2YgdGhlIEhlZGVyYSBNaXJyb3IgTm9kZSBBUElcbiAqIEBwYXJhbSB0b2tlbiAtIG9wdGlvbmFsIEFQSSBrZXkgdG8gdXNlIGZvciB0aGUgcXVlcnlcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWNvdmVyeV9IQkFSRVZNX0Jsb2NrY2hhaW5FeHBsb3JlclF1ZXJ5KFxuICBxdWVyeTogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgcnBjVXJsOiBzdHJpbmcsXG4gIGV4cGxvcmVyVXJsOiBzdHJpbmcsXG4gIHRva2VuPzogc3RyaW5nXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gIC8vIEhlZGVyYSBNaXJyb3IgTm9kZSBBUEkgZG9lcyBub3QgdXNlIEFQSSBrZXlzLCBidXQgd2Uga2VlcCB0aGlzIGZvciBjb21wYXRpYmlsaXR5XG4gIGlmICh0b2tlbikge1xuICAgIHF1ZXJ5LmFwaWtleSA9IHRva2VuO1xuICB9XG5cbiAgY29uc3QgeyBtb2R1bGUsIGFjdGlvbiB9ID0gcXVlcnk7XG5cbiAgLy8gUmVtb3ZlIHRyYWlsaW5nIHNsYXNoIGZyb20gZXhwbG9yZXJVcmwgaWYgcHJlc2VudFxuICBjb25zdCBiYXNlVXJsID0gZXhwbG9yZXJVcmwucmVwbGFjZSgvXFwvJC8sICcnKTtcblxuICBzd2l0Y2ggKGAke21vZHVsZX0uJHthY3Rpb259YCkge1xuICAgIGNhc2UgJ2FjY291bnQuYmFsYW5jZSc6XG4gICAgICByZXR1cm4gYXdhaXQgcXVlcnlBZGRyZXNzQmFsYW5jZUhlZGVyYShxdWVyeSwgYmFzZVVybCk7XG5cbiAgICBjYXNlICdhY2NvdW50LnR4bGlzdCc6XG4gICAgICByZXR1cm4gYXdhaXQgZ2V0QWRkcmVzc05vbmNlSGVkZXJhKHF1ZXJ5LCBiYXNlVXJsKTtcblxuICAgIGNhc2UgJ2FjY291bnQudG9rZW5iYWxhbmNlJzpcbiAgICAgIHJldHVybiBhd2FpdCBxdWVyeVRva2VuQmFsYW5jZUhlZGVyYShxdWVyeSwgYmFzZVVybCk7XG5cbiAgICBjYXNlICdwcm94eS5ldGhfZ2FzUHJpY2UnOlxuICAgICAgcmV0dXJuIGF3YWl0IGdldEdhc1ByaWNlRnJvbVJQQyhxdWVyeSwgcnBjVXJsKTtcblxuICAgIGNhc2UgJ3Byb3h5LmV0aF9lc3RpbWF0ZUdhcyc6XG4gICAgICByZXR1cm4gYXdhaXQgZ2V0R2FzTGltaXRGcm9tUlBDKHF1ZXJ5LCBycGNVcmwpO1xuXG4gICAgY2FzZSAncHJveHkuZXRoX2NhbGwnOlxuICAgICAgcmV0dXJuIGF3YWl0IHF1ZXJ5U2VxdWVuY2VJZEZyb21SUEMocXVlcnksIHJwY1VybCk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBBUEkgY2FsbDogJHttb2R1bGV9LiR7YWN0aW9ufWApO1xuICB9XG59XG5cbi8qKlxuICogMS4gR2V0cyBhZGRyZXNzIGJhbGFuY2UgdXNpbmcgSGVkZXJhIE1pcnJvciBOb2RlIEFQSVxuICovXG5hc3luYyBmdW5jdGlvbiBxdWVyeUFkZHJlc3NCYWxhbmNlSGVkZXJhKFxuICBxdWVyeTogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgYmFzZVVybDogc3RyaW5nXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gIGNvbnN0IGFkZHJlc3MgPSBxdWVyeS5hZGRyZXNzO1xuICBjb25zdCB1cmwgPSBgJHtiYXNlVXJsfS9hY2NvdW50cy8ke2FkZHJlc3N9P3RyYW5zYWN0aW9ucz1mYWxzZWA7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdC5nZXQodXJsKS5zZW5kKCk7XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWNoIGV4cGxvcmVyJyk7XG4gIH1cblxuICBjb25zdCBiYWxhbmNlID0gcmVzcG9uc2UuYm9keS5iYWxhbmNlPy5iYWxhbmNlIHx8ICcwJztcblxuICBjb25zdCBiYWxhbmNlSW5XZWkgPSB0aW55YmFyc1RvV2VpKGJhbGFuY2UpO1xuXG4gIHJldHVybiB7IHJlc3VsdDogYmFsYW5jZUluV2VpIH07XG59XG5cbi8qKlxuICogMi4gR2V0cyBub25jZSB1c2luZyBIZWRlcmEgTWlycm9yIE5vZGUgQVBJXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEFkZHJlc3NOb25jZUhlZGVyYShxdWVyeTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgYmFzZVVybDogc3RyaW5nKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICBjb25zdCBhZGRyZXNzID0gcXVlcnkuYWRkcmVzcztcbiAgY29uc3QgYWNjb3VudFVybCA9IGAke2Jhc2VVcmx9L2FjY291bnRzLyR7YWRkcmVzc30/dHJhbnNhY3Rpb25zPWZhbHNlYDtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0LmdldChhY2NvdW50VXJsKS5zZW5kKCk7XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWNoIGV4cGxvcmVyJyk7XG4gIH1cblxuICBjb25zdCBub25jZSA9IHJlc3BvbnNlLmJvZHkuZXRoZXJldW1fbm9uY2UgfHwgMDtcblxuICByZXR1cm4geyBub25jZTogbm9uY2UgfTtcbn1cblxuLyoqXG4gKiAzLiBHZXRzIHRva2VuIGJhbGFuY2UgdXNpbmcgSGVkZXJhIE1pcnJvciBOb2RlIEFQSVxuICovXG5hc3luYyBmdW5jdGlvbiBxdWVyeVRva2VuQmFsYW5jZUhlZGVyYShcbiAgcXVlcnk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIGJhc2VVcmw6IHN0cmluZ1xuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICBjb25zdCBjb250cmFjdEFkZHJlc3MgPSBxdWVyeS5jb250cmFjdGFkZHJlc3M7XG4gIGNvbnN0IGFkZHJlc3MgPSBxdWVyeS5hZGRyZXNzO1xuXG4gIC8vIEdldCB0b2tlbiBiYWxhbmNlcyBmb3IgdGhlIGFjY291bnRcbiAgY29uc3QgdXJsID0gYCR7YmFzZVVybH0vYWNjb3VudHMvJHthZGRyZXNzfS90b2tlbnNgO1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3QuZ2V0KHVybCkuc2VuZCgpO1xuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFjaCBleHBsb3JlcicpO1xuICB9XG5cbiAgLy8gRmluZCB0aGUgc3BlY2lmaWMgdG9rZW4gYmFsYW5jZVxuICBjb25zdCB0b2tlbnMgPSByZXNwb25zZS5ib2R5LnRva2VucyB8fCBbXTtcbiAgY29uc3QgdG9rZW5CYWxhbmNlID0gdG9rZW5zLmZpbmQoXG4gICAgKHRva2VuOiB7IHRva2VuX2lkOiBzdHJpbmc7IGNvbnRyYWN0X2FkZHJlc3M6IHN0cmluZzsgYmFsYW5jZTogbnVtYmVyIH0pID0+XG4gICAgICB0b2tlbi50b2tlbl9pZCA9PT0gY29udHJhY3RBZGRyZXNzIHx8IHRva2VuLmNvbnRyYWN0X2FkZHJlc3MgPT09IGNvbnRyYWN0QWRkcmVzc1xuICApO1xuXG4gIGNvbnN0IGJhbGFuY2UgPSB0b2tlbkJhbGFuY2UgJiYgdG9rZW5CYWxhbmNlLmJhbGFuY2UgIT09IG51bGwgPyB0b2tlbkJhbGFuY2UuYmFsYW5jZS50b1N0cmluZygpIDogJzAnO1xuXG4gIGNvbnN0IGJhbGFuY2VJbldlaSA9IHRpbnliYXJzVG9XZWkoYmFsYW5jZSk7XG5cbiAgcmV0dXJuIHsgcmVzdWx0OiBiYWxhbmNlSW5XZWkgfTtcbn1cblxuLyoqXG4gKiA0LiBHZXRzIHNlcXVlbmNlIElEIHVzaW5nIFJQQyBjYWxsXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHF1ZXJ5U2VxdWVuY2VJZEZyb21SUEMocXVlcnk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIHJwY1VybDogc3RyaW5nKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICBjb25zdCB7IHRvLCBkYXRhIH0gPSBxdWVyeTtcblxuICBjb25zdCByZXF1ZXN0Qm9keSA9IHtcbiAgICBqc29ucnBjOiAnMi4wJyxcbiAgICBtZXRob2Q6ICdldGhfY2FsbCcsXG4gICAgcGFyYW1zOiBbXG4gICAgICB7XG4gICAgICAgIHRvOiB0byxcbiAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBpZDogMSxcbiAgfTtcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3QucG9zdChycGNVcmwpLnNlbmQocmVxdWVzdEJvZHkpLnNldCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgZmV0Y2ggc2VxdWVuY2UgSUQgZnJvbSBSUEMnKTtcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZS5ib2R5O1xufVxuXG4vKipcbiAqIDUuIGdldEdhc1ByaWNlRnJvbVJQQyAtIEdldHMgZ2FzIHByaWNlIHVzaW5nIEhlZGVyYSBNaXJyb3IgTm9kZSBBUElcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0R2FzUHJpY2VGcm9tUlBDKHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBycGNVcmw6IHN0cmluZyk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XG4gICAganNvbnJwYzogJzIuMCcsXG4gICAgbWV0aG9kOiAnZXRoX2dhc1ByaWNlJyxcbiAgICBwYXJhbXM6IFtdLFxuICAgIGlkOiAxLFxuICB9O1xuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdC5wb3N0KHJwY1VybCkuc2VuZChyZXF1ZXN0Qm9keSkuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCBmZXRjaCBnYXMgcHJpY2UgZnJvbSBSUEMnKTtcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZS5ib2R5O1xufVxuXG4vKipcbiAqIDYuIGdldEdhc0xpbWl0RnJvbVJQQyAtIEdldHMgZ2FzIGxpbWl0IGVzdGltYXRlIHVzaW5nIFJQQyBjYWxsLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRHYXNMaW1pdEZyb21SUEMocXVlcnk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIHJwY1VybDogc3RyaW5nKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICBjb25zdCB7IGZyb20sIHRvLCBkYXRhIH0gPSBxdWVyeTtcblxuICBjb25zdCByZXF1ZXN0Qm9keSA9IHtcbiAgICBqc29ucnBjOiAnMi4wJyxcbiAgICBtZXRob2Q6ICdldGhfZXN0aW1hdGVHYXMnLFxuICAgIHBhcmFtczogW1xuICAgICAge1xuICAgICAgICBmcm9tLFxuICAgICAgICB0byxcbiAgICAgICAgZGF0YSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBpZDogMSxcbiAgfTtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0LnBvc3QocnBjVXJsKS5zZW5kKHJlcXVlc3RCb2R5KS5zZXQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IGVzdGltYXRlIGdhcyBsaW1pdCBmcm9tIFJQQycpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUhlZGVyYUFjY291bnRJZChhZGRyZXNzOiBzdHJpbmcpOiB7IHZhbGlkOiBib29sZWFuOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IHtcbiAgY29uc3QgcGFydHMgPSBhZGRyZXNzLnNwbGl0KCcuJyk7XG4gIGlmIChwYXJ0cy5sZW5ndGggIT09IDMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgZXJyb3I6ICdJbnZhbGlkIEhlZGVyYSBBY2NvdW50IElEIGZvcm1hdC4gVXNlIGZvcm1hdDogMC4wLjEyMzQ1JyxcbiAgICB9O1xuICB9XG4gIGNvbnN0IFtzaGFyZFN0ciwgcmVhbG1TdHIsIGFjY291bnRTdHJdID0gcGFydHM7XG4gIGlmICghc2hhcmRTdHIgfHwgIXJlYWxtU3RyIHx8ICFhY2NvdW50U3RyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgIGVycm9yOiAnSW52YWxpZCBIZWRlcmEgQWNjb3VudCBJRC4gQWxsIHBhcnRzIGFyZSByZXF1aXJlZC4nLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBzaGFyZCA9IE51bWJlcihzaGFyZFN0cik7XG4gIGNvbnN0IHJlYWxtID0gTnVtYmVyKHJlYWxtU3RyKTtcbiAgY29uc3QgYWNjb3VudCA9IE51bWJlcihhY2NvdW50U3RyKTtcblxuICAvLyBWYWxpZGF0ZSBhbGwgcGFydHMgYXJlIHZhbGlkIG5vbi1uZWdhdGl2ZSBpbnRlZ2VycyB3aXRoaW4gc2FmZSByYW5nZVxuICBpZiAoXG4gICAgIU51bWJlci5pc0ludGVnZXIoc2hhcmQpIHx8XG4gICAgIU51bWJlci5pc0ludGVnZXIocmVhbG0pIHx8XG4gICAgIU51bWJlci5pc0ludGVnZXIoYWNjb3VudCkgfHxcbiAgICBzaGFyZCA8IDAgfHxcbiAgICByZWFsbSA8IDAgfHxcbiAgICBhY2NvdW50IDwgMFxuICApIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgZXJyb3I6ICdJbnZhbGlkIEhlZGVyYSBBY2NvdW50IElELiBBbGwgcGFydHMgbXVzdCBiZSBub24tbmVnYXRpdmUgaW50ZWdlcnMuJyxcbiAgICB9O1xuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIEphdmFTY3JpcHQgc2FmZSBpbnRlZ2VyIGxpbWl0cyAocHJldmVudHMgcHJlY2lzaW9uIGxvc3MpXG4gIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIoc2hhcmQpIHx8ICFOdW1iZXIuaXNTYWZlSW50ZWdlcihyZWFsbSkgfHwgIU51bWJlci5pc1NhZmVJbnRlZ2VyKGFjY291bnQpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgIGVycm9yOiAnSW52YWxpZCBIZWRlcmEgQWNjb3VudCBJRC4gVmFsdWVzIGFyZSB0b28gbGFyZ2UuJyxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB2YWxpZDogdHJ1ZSxcbiAgICBlcnJvcjogbnVsbCxcbiAgfTtcbn1cbiJdfQ==
@@ -1,3 +1,4 @@
1
1
  import { BitGoBase } from '@bitgo-beta/sdk-core';
2
- export declare const register: (sdk: BitGoBase) => void;
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;AAIjD,eAAO,MAAM,QAAQ,QAAS,SAAS,KAAG,IAMzC,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"}
@@ -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 register = (sdk) => {
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
- sdk.register(coin.name, evmCoin_1.EvmCoin.createInstance);
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsaURBQXlEO0FBQ3pELHVDQUFvQztBQUU3QixNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQWMsRUFBUSxFQUFFO0lBQy9DLGVBQUs7U0FDRixNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLHFCQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDcEUsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDaEIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGlCQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbEQsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUM7QUFOVyxRQUFBLFFBQVEsWUFNbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCaXRHb0Jhc2UgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBDb2luRmVhdHVyZSwgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEV2bUNvaW4gfSBmcm9tICcuL2V2bUNvaW4nO1xuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXIgPSAoc2RrOiBCaXRHb0Jhc2UpOiB2b2lkID0+IHtcbiAgY29pbnNcbiAgICAuZmlsdGVyKChjb2luKSA9PiBjb2luLmZlYXR1cmVzLmluY2x1ZGVzKENvaW5GZWF0dXJlLlNIQVJFRF9FVk1fU0RLKSlcbiAgICAuZm9yRWFjaCgoY29pbikgPT4ge1xuICAgICAgc2RrLnJlZ2lzdGVyKGNvaW4ubmFtZSwgRXZtQ29pbi5jcmVhdGVJbnN0YW5jZSk7XG4gICAgfSk7XG59O1xuIl19
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.65",
3
+ "version": "1.0.1-beta.650",
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,15 @@
16
16
  "prepare": "npm run build"
17
17
  },
18
18
  "dependencies": {
19
- "@bitgo-beta/abstract-eth": "1.0.2-beta.1236",
20
- "@bitgo-beta/sdk-core": "8.2.1-beta.1006",
21
- "@bitgo-beta/statics": "15.1.1-beta.1009",
22
- "@ethereumjs/common": "^2.6.5"
19
+ "@bitgo-beta/abstract-eth": "1.0.2-beta.1821",
20
+ "@bitgo-beta/sdk-core": "8.2.1-beta.1591",
21
+ "@bitgo-beta/statics": "15.1.1-beta.1594",
22
+ "@ethereumjs/common": "^2.6.5",
23
+ "superagent": "^9.0.1"
24
+ },
25
+ "devDependencies": {
26
+ "@bitgo-beta/sdk-api": "1.10.1-beta.1590",
27
+ "@bitgo-beta/sdk-test": "^9.1.25"
23
28
  },
24
29
  "author": "BitGo SDK Team <sdkteam@bitgo.com>",
25
30
  "license": "MIT",
@@ -45,5 +50,5 @@
45
50
  ".ts"
46
51
  ]
47
52
  },
48
- "gitHead": "11f919564fb1e21b9e482e7a0084d208f750fa03"
53
+ "gitHead": "bbb81fb7139c65414237060a409cbe025ce23d95"
49
54
  }