@bitgo/abstract-cosmos 11.12.3 → 11.13.0
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/.mocharc.yml +1 -1
- package/CHANGELOG.md +6 -0
- package/LICENSE +191 -0
- package/dist/src/cosmosCoin.d.ts +154 -0
- package/dist/src/cosmosCoin.d.ts.map +1 -0
- package/dist/src/cosmosCoin.js +582 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +21 -0
- package/dist/src/lib/ContractCallBuilder.d.ts +13 -0
- package/dist/src/lib/ContractCallBuilder.d.ts.map +1 -0
- package/dist/src/lib/ContractCallBuilder.js +61 -0
- package/dist/src/lib/StakingActivateBuilder.d.ts +13 -0
- package/dist/src/lib/StakingActivateBuilder.d.ts.map +1 -0
- package/dist/src/lib/StakingActivateBuilder.js +61 -0
- package/dist/src/lib/StakingDeactivateBuilder.d.ts +13 -0
- package/dist/src/lib/StakingDeactivateBuilder.d.ts.map +1 -0
- package/dist/src/lib/StakingDeactivateBuilder.js +61 -0
- package/dist/src/lib/StakingRedelegateBuilder.d.ts +13 -0
- package/dist/src/lib/StakingRedelegateBuilder.d.ts.map +1 -0
- package/dist/src/lib/StakingRedelegateBuilder.js +61 -0
- package/dist/src/lib/StakingWithdrawRewardsBuilder.d.ts +13 -0
- package/dist/src/lib/StakingWithdrawRewardsBuilder.d.ts.map +1 -0
- package/dist/src/lib/StakingWithdrawRewardsBuilder.js +61 -0
- package/dist/src/lib/constants.d.ts +11 -0
- package/dist/src/lib/constants.d.ts.map +1 -0
- package/dist/src/lib/constants.js +14 -0
- package/dist/src/lib/iface.d.ts +90 -0
- package/dist/src/lib/iface.d.ts.map +1 -0
- package/dist/src/lib/iface.js +20 -0
- package/dist/src/lib/index.d.ts +14 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +63 -0
- package/dist/src/lib/keyPair.d.ts +18 -0
- package/dist/src/lib/keyPair.d.ts.map +1 -0
- package/dist/src/lib/keyPair.js +51 -0
- package/dist/src/lib/transaction.d.ts +64 -0
- package/dist/src/lib/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction.js +333 -0
- package/dist/src/lib/transactionBuilder.d.ts +86 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder.js +181 -0
- package/dist/src/lib/transferBuilder.d.ts +13 -0
- package/dist/src/lib/transferBuilder.d.ts.map +1 -0
- package/dist/src/lib/transferBuilder.js +61 -0
- package/dist/src/lib/utils.d.ts +351 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +856 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +6 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,eAAe,MAAM,aAAa,CAAC;AAC/C,cAAc,SAAS,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
36
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.CosmosConstants = exports.CosmosUtils = exports.StakingRedelegateBuilder = exports.CosmosTransferBuilder = exports.CosmosTransactionBuilder = exports.CosmosTransaction = exports.CosmosKeyPair = exports.ContractCallBuilder = exports.StakingWithdrawRewardsBuilder = exports.StakingDeactivateBuilder = exports.StakingActivateBuilder = void 0;
|
|
40
|
+
const CosmosConstants = __importStar(require("./constants"));
|
|
41
|
+
exports.CosmosConstants = CosmosConstants;
|
|
42
|
+
__exportStar(require("./iface"), exports);
|
|
43
|
+
var StakingActivateBuilder_1 = require("./StakingActivateBuilder");
|
|
44
|
+
Object.defineProperty(exports, "StakingActivateBuilder", { enumerable: true, get: function () { return StakingActivateBuilder_1.StakingActivateBuilder; } });
|
|
45
|
+
var StakingDeactivateBuilder_1 = require("./StakingDeactivateBuilder");
|
|
46
|
+
Object.defineProperty(exports, "StakingDeactivateBuilder", { enumerable: true, get: function () { return StakingDeactivateBuilder_1.StakingDeactivateBuilder; } });
|
|
47
|
+
var StakingWithdrawRewardsBuilder_1 = require("./StakingWithdrawRewardsBuilder");
|
|
48
|
+
Object.defineProperty(exports, "StakingWithdrawRewardsBuilder", { enumerable: true, get: function () { return StakingWithdrawRewardsBuilder_1.StakingWithdrawRewardsBuilder; } });
|
|
49
|
+
var ContractCallBuilder_1 = require("./ContractCallBuilder");
|
|
50
|
+
Object.defineProperty(exports, "ContractCallBuilder", { enumerable: true, get: function () { return ContractCallBuilder_1.ContractCallBuilder; } });
|
|
51
|
+
var keyPair_1 = require("./keyPair");
|
|
52
|
+
Object.defineProperty(exports, "CosmosKeyPair", { enumerable: true, get: function () { return keyPair_1.CosmosKeyPair; } });
|
|
53
|
+
var transaction_1 = require("./transaction");
|
|
54
|
+
Object.defineProperty(exports, "CosmosTransaction", { enumerable: true, get: function () { return transaction_1.CosmosTransaction; } });
|
|
55
|
+
var transactionBuilder_1 = require("./transactionBuilder");
|
|
56
|
+
Object.defineProperty(exports, "CosmosTransactionBuilder", { enumerable: true, get: function () { return transactionBuilder_1.CosmosTransactionBuilder; } });
|
|
57
|
+
var transferBuilder_1 = require("./transferBuilder");
|
|
58
|
+
Object.defineProperty(exports, "CosmosTransferBuilder", { enumerable: true, get: function () { return transferBuilder_1.CosmosTransferBuilder; } });
|
|
59
|
+
var StakingRedelegateBuilder_1 = require("./StakingRedelegateBuilder");
|
|
60
|
+
Object.defineProperty(exports, "StakingRedelegateBuilder", { enumerable: true, get: function () { return StakingRedelegateBuilder_1.StakingRedelegateBuilder; } });
|
|
61
|
+
var utils_1 = require("./utils");
|
|
62
|
+
Object.defineProperty(exports, "CosmosUtils", { enumerable: true, get: function () { return utils_1.CosmosUtils; } });
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZEQUErQztBQWF0QywwQ0FBZTtBQVp4QiwwQ0FBd0I7QUFFeEIsbUVBQWtFO0FBQXpELGdJQUFBLHNCQUFzQixPQUFBO0FBQy9CLHVFQUFzRTtBQUE3RCxvSUFBQSx3QkFBd0IsT0FBQTtBQUNqQyxpRkFBZ0Y7QUFBdkUsOElBQUEsNkJBQTZCLE9BQUE7QUFDdEMsNkRBQTREO0FBQW5ELDBIQUFBLG1CQUFtQixPQUFBO0FBQzVCLHFDQUEwQztBQUFqQyx3R0FBQSxhQUFhLE9BQUE7QUFDdEIsNkNBQWtEO0FBQXpDLGdIQUFBLGlCQUFpQixPQUFBO0FBQzFCLDJEQUFnRTtBQUF2RCw4SEFBQSx3QkFBd0IsT0FBQTtBQUNqQyxxREFBMEQ7QUFBakQsd0hBQUEscUJBQXFCLE9BQUE7QUFDOUIsdUVBQXNFO0FBQTdELG9JQUFBLHdCQUF3QixPQUFBO0FBQ2pDLGlDQUFzQztBQUE3QixvR0FBQSxXQUFXLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBDb3Ntb3NDb25zdGFudHMgZnJvbSAnLi9jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9pZmFjZSc7XG5cbmV4cG9ydCB7IFN0YWtpbmdBY3RpdmF0ZUJ1aWxkZXIgfSBmcm9tICcuL1N0YWtpbmdBY3RpdmF0ZUJ1aWxkZXInO1xuZXhwb3J0IHsgU3Rha2luZ0RlYWN0aXZhdGVCdWlsZGVyIH0gZnJvbSAnLi9TdGFraW5nRGVhY3RpdmF0ZUJ1aWxkZXInO1xuZXhwb3J0IHsgU3Rha2luZ1dpdGhkcmF3UmV3YXJkc0J1aWxkZXIgfSBmcm9tICcuL1N0YWtpbmdXaXRoZHJhd1Jld2FyZHNCdWlsZGVyJztcbmV4cG9ydCB7IENvbnRyYWN0Q2FsbEJ1aWxkZXIgfSBmcm9tICcuL0NvbnRyYWN0Q2FsbEJ1aWxkZXInO1xuZXhwb3J0IHsgQ29zbW9zS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5leHBvcnQgeyBDb3Ntb3NUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuZXhwb3J0IHsgQ29zbW9zVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuZXhwb3J0IHsgQ29zbW9zVHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi90cmFuc2ZlckJ1aWxkZXInO1xuZXhwb3J0IHsgU3Rha2luZ1JlZGVsZWdhdGVCdWlsZGVyIH0gZnJvbSAnLi9TdGFraW5nUmVkZWxlZ2F0ZUJ1aWxkZXInO1xuZXhwb3J0IHsgQ29zbW9zVXRpbHMgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCB7IENvc21vc0NvbnN0YW50cyB9O1xuIl19
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { DefaultKeys, KeyPairOptions, Secp256k1ExtendedKeyPair } from '@bitgo/sdk-core';
|
|
2
|
+
/**
|
|
3
|
+
* Cosmos keys and address management.
|
|
4
|
+
*/
|
|
5
|
+
export declare class CosmosKeyPair extends Secp256k1ExtendedKeyPair {
|
|
6
|
+
/**
|
|
7
|
+
* Public constructor. By default, creates a key pair with a random master seed.
|
|
8
|
+
* @param { KeyPairOptions } source Either a master seed, a private key (extended or raw), or a public key
|
|
9
|
+
* (extended, compressed, or uncompressed)
|
|
10
|
+
*/
|
|
11
|
+
constructor(source?: KeyPairOptions);
|
|
12
|
+
/**
|
|
13
|
+
* Cosmos default keys format: raw private and compressed public key
|
|
14
|
+
* @returns { DefaultKeys } The keys in the protocol default key format
|
|
15
|
+
*/
|
|
16
|
+
getKeys(): DefaultKeys;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=keyPair.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyPair.d.ts","sourceRoot":"","sources":["../../../src/lib/keyPair.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAIX,cAAc,EACd,wBAAwB,EACzB,MAAM,iBAAiB,CAAC;AAMzB;;GAEG;AACH,qBAAa,aAAc,SAAQ,wBAAwB;IACzD;;;;OAIG;gBACS,MAAM,CAAC,EAAE,cAAc;IAoBnC;;;OAGG;IACH,OAAO,IAAI,WAAW;CAMvB"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CosmosKeyPair = void 0;
|
|
4
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
5
|
+
const secp256k1_1 = require("@bitgo/secp256k1");
|
|
6
|
+
const crypto_1 = require("crypto");
|
|
7
|
+
const constants_1 = require("./constants");
|
|
8
|
+
/**
|
|
9
|
+
* Cosmos keys and address management.
|
|
10
|
+
*/
|
|
11
|
+
class CosmosKeyPair extends sdk_core_1.Secp256k1ExtendedKeyPair {
|
|
12
|
+
/**
|
|
13
|
+
* Public constructor. By default, creates a key pair with a random master seed.
|
|
14
|
+
* @param { KeyPairOptions } source Either a master seed, a private key (extended or raw), or a public key
|
|
15
|
+
* (extended, compressed, or uncompressed)
|
|
16
|
+
*/
|
|
17
|
+
constructor(source) {
|
|
18
|
+
super(source);
|
|
19
|
+
if (!source) {
|
|
20
|
+
const seed = (0, crypto_1.randomBytes)(constants_1.DEFAULT_SEED_SIZE_BYTES);
|
|
21
|
+
this.hdNode = secp256k1_1.bip32.fromSeed(seed);
|
|
22
|
+
}
|
|
23
|
+
else if ((0, sdk_core_1.isSeed)(source)) {
|
|
24
|
+
this.hdNode = secp256k1_1.bip32.fromSeed(source.seed);
|
|
25
|
+
}
|
|
26
|
+
else if ((0, sdk_core_1.isPrivateKey)(source)) {
|
|
27
|
+
this.recordKeysFromPrivateKey(source.prv);
|
|
28
|
+
}
|
|
29
|
+
else if ((0, sdk_core_1.isPublicKey)(source)) {
|
|
30
|
+
this.recordKeysFromPublicKey(source.pub);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
throw new Error('Invalid key pair options');
|
|
34
|
+
}
|
|
35
|
+
if (this.hdNode) {
|
|
36
|
+
this.keyPair = sdk_core_1.Secp256k1ExtendedKeyPair.toKeyPair(this.hdNode);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Cosmos default keys format: raw private and compressed public key
|
|
41
|
+
* @returns { DefaultKeys } The keys in the protocol default key format
|
|
42
|
+
*/
|
|
43
|
+
getKeys() {
|
|
44
|
+
return {
|
|
45
|
+
pub: this.getPublicKey({ compressed: true }).toString('hex'),
|
|
46
|
+
prv: this.getPrivateKey()?.toString('hex'),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.CosmosKeyPair = CosmosKeyPair;
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIva2V5UGFpci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw4Q0FPeUI7QUFDekIsZ0RBQXlDO0FBQ3pDLG1DQUFxQztBQUVyQywyQ0FBc0Q7QUFFdEQ7O0dBRUc7QUFDSCxNQUFhLGFBQWMsU0FBUSxtQ0FBd0I7SUFDekQ7Ozs7T0FJRztJQUNILFlBQVksTUFBdUI7UUFDakMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osTUFBTSxJQUFJLEdBQUcsSUFBQSxvQkFBVyxFQUFDLG1DQUF1QixDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxpQkFBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxDQUFDO2FBQU0sSUFBSSxJQUFBLGlCQUFNLEVBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLGlCQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxDQUFDO2FBQU0sSUFBSSxJQUFBLHVCQUFZLEVBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLENBQUM7YUFBTSxJQUFJLElBQUEsc0JBQVcsRUFBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0MsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxPQUFPLEdBQUcsbUNBQXdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRSxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILE9BQU87UUFDTCxPQUFPO1lBQ0wsR0FBRyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQzVELEdBQUcsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQztTQUMzQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBcENELHNDQW9DQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERlZmF1bHRLZXlzLFxuICBpc1ByaXZhdGVLZXksXG4gIGlzUHVibGljS2V5LFxuICBpc1NlZWQsXG4gIEtleVBhaXJPcHRpb25zLFxuICBTZWNwMjU2azFFeHRlbmRlZEtleVBhaXIsXG59IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBiaXAzMiB9IGZyb20gJ0BiaXRnby9zZWNwMjU2azEnO1xuaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tICdjcnlwdG8nO1xuXG5pbXBvcnQgeyBERUZBVUxUX1NFRURfU0laRV9CWVRFUyB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuLyoqXG4gKiBDb3Ntb3Mga2V5cyBhbmQgYWRkcmVzcyBtYW5hZ2VtZW50LlxuICovXG5leHBvcnQgY2xhc3MgQ29zbW9zS2V5UGFpciBleHRlbmRzIFNlY3AyNTZrMUV4dGVuZGVkS2V5UGFpciB7XG4gIC8qKlxuICAgKiBQdWJsaWMgY29uc3RydWN0b3IuIEJ5IGRlZmF1bHQsIGNyZWF0ZXMgYSBrZXkgcGFpciB3aXRoIGEgcmFuZG9tIG1hc3RlciBzZWVkLlxuICAgKiBAcGFyYW0geyBLZXlQYWlyT3B0aW9ucyB9IHNvdXJjZSBFaXRoZXIgYSBtYXN0ZXIgc2VlZCwgYSBwcml2YXRlIGtleSAoZXh0ZW5kZWQgb3IgcmF3KSwgb3IgYSBwdWJsaWMga2V5XG4gICAqICAgICAoZXh0ZW5kZWQsIGNvbXByZXNzZWQsIG9yIHVuY29tcHJlc3NlZClcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNvdXJjZT86IEtleVBhaXJPcHRpb25zKSB7XG4gICAgc3VwZXIoc291cmNlKTtcbiAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgY29uc3Qgc2VlZCA9IHJhbmRvbUJ5dGVzKERFRkFVTFRfU0VFRF9TSVpFX0JZVEVTKTtcbiAgICAgIHRoaXMuaGROb2RlID0gYmlwMzIuZnJvbVNlZWQoc2VlZCk7XG4gICAgfSBlbHNlIGlmIChpc1NlZWQoc291cmNlKSkge1xuICAgICAgdGhpcy5oZE5vZGUgPSBiaXAzMi5mcm9tU2VlZChzb3VyY2Uuc2VlZCk7XG4gICAgfSBlbHNlIGlmIChpc1ByaXZhdGVLZXkoc291cmNlKSkge1xuICAgICAgdGhpcy5yZWNvcmRLZXlzRnJvbVByaXZhdGVLZXkoc291cmNlLnBydik7XG4gICAgfSBlbHNlIGlmIChpc1B1YmxpY0tleShzb3VyY2UpKSB7XG4gICAgICB0aGlzLnJlY29yZEtleXNGcm9tUHVibGljS2V5KHNvdXJjZS5wdWIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQga2V5IHBhaXIgb3B0aW9ucycpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhkTm9kZSkge1xuICAgICAgdGhpcy5rZXlQYWlyID0gU2VjcDI1NmsxRXh0ZW5kZWRLZXlQYWlyLnRvS2V5UGFpcih0aGlzLmhkTm9kZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvc21vcyBkZWZhdWx0IGtleXMgZm9ybWF0OiByYXcgcHJpdmF0ZSBhbmQgY29tcHJlc3NlZCBwdWJsaWMga2V5XG4gICAqIEByZXR1cm5zIHsgRGVmYXVsdEtleXMgfSBUaGUga2V5cyBpbiB0aGUgcHJvdG9jb2wgZGVmYXVsdCBrZXkgZm9ybWF0XG4gICAqL1xuICBnZXRLZXlzKCk6IERlZmF1bHRLZXlzIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHViOiB0aGlzLmdldFB1YmxpY0tleSh7IGNvbXByZXNzZWQ6IHRydWUgfSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgcHJ2OiB0aGlzLmdldFByaXZhdGVLZXkoKT8udG9TdHJpbmcoJ2hleCcpLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { BaseKey, BaseTransaction, TransactionType } from '@bitgo/sdk-core';
|
|
2
|
+
import { BaseCoin as CoinConfig } from '@bitgo/statics';
|
|
3
|
+
import { CosmosLikeTransaction, TransactionExplanation, TxData } from './iface';
|
|
4
|
+
import { CosmosUtils } from './utils';
|
|
5
|
+
export declare class CosmosTransaction<CustomMessage = never> extends BaseTransaction {
|
|
6
|
+
protected _cosmosLikeTransaction: CosmosLikeTransaction<CustomMessage>;
|
|
7
|
+
protected _accountNumber: number;
|
|
8
|
+
protected _chainId: string;
|
|
9
|
+
protected _utils: CosmosUtils<CustomMessage>;
|
|
10
|
+
constructor(_coinConfig: Readonly<CoinConfig>, utils: CosmosUtils<CustomMessage>);
|
|
11
|
+
get cosmosLikeTransaction(): CosmosLikeTransaction<CustomMessage>;
|
|
12
|
+
set cosmosLikeTransaction(cosmosLikeTransaction: Readonly<CosmosLikeTransaction<CustomMessage>>);
|
|
13
|
+
get chainId(): string;
|
|
14
|
+
set chainId(chainId: string);
|
|
15
|
+
get accountNumber(): number;
|
|
16
|
+
set accountNumber(accountNumber: number);
|
|
17
|
+
/** @inheritDoc **/
|
|
18
|
+
get id(): string;
|
|
19
|
+
/** @inheritdoc */
|
|
20
|
+
canSign(key: BaseKey): boolean;
|
|
21
|
+
/** @inheritdoc */
|
|
22
|
+
toBroadcastFormat(): string;
|
|
23
|
+
/** @inheritdoc */
|
|
24
|
+
toJson(): TxData<CustomMessage>;
|
|
25
|
+
/**
|
|
26
|
+
* Add a signature to the transaction
|
|
27
|
+
* @param {string} signature in hex format
|
|
28
|
+
*/
|
|
29
|
+
addSignature(signature: string): void;
|
|
30
|
+
/** @inheritDoc */
|
|
31
|
+
explainTransaction(): TransactionExplanation;
|
|
32
|
+
/**
|
|
33
|
+
* Set the transaction type.
|
|
34
|
+
* @param {TransactionType} transactionType The transaction type to be set.
|
|
35
|
+
*/
|
|
36
|
+
set transactionType(transactionType: TransactionType);
|
|
37
|
+
/**
|
|
38
|
+
* Serialize the transaction to a JSON string
|
|
39
|
+
* @returns {string} serialized base64 encoded transaction
|
|
40
|
+
*/
|
|
41
|
+
serialize(): string;
|
|
42
|
+
/** @inheritdoc **/
|
|
43
|
+
get signablePayload(): Buffer;
|
|
44
|
+
/**
|
|
45
|
+
* Returns a complete explanation for a transfer transaction
|
|
46
|
+
* Currently only supports one message per transfer.
|
|
47
|
+
* @param {TxData} json The transaction data in json format
|
|
48
|
+
* @param {TransactionExplanation} explanationResult The transaction explanation to be completed
|
|
49
|
+
* @returns {TransactionExplanation}
|
|
50
|
+
*/
|
|
51
|
+
explainTransactionInternal(json: TxData<CustomMessage>, explanationResult: TransactionExplanation): TransactionExplanation;
|
|
52
|
+
/**
|
|
53
|
+
* Load the input and output data on this transaction using the transaction json
|
|
54
|
+
* if there are outputs. For transactions without outputs (e.g. wallet initializations),
|
|
55
|
+
* this function will not do anything
|
|
56
|
+
*/
|
|
57
|
+
loadInputsAndOutputs(): void;
|
|
58
|
+
/**
|
|
59
|
+
* Sets this transaction payload
|
|
60
|
+
* @param rawTransaction raw transaction in base64 encoded string
|
|
61
|
+
*/
|
|
62
|
+
enrichTransactionDetailsFromRawTransaction(rawTransaction: string): void;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=transaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,eAAe,EAKf,eAAe,EAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAKxD,OAAO,EACL,qBAAqB,EAKrB,sBAAsB,EACtB,MAAM,EAEP,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,qBAAa,iBAAiB,CAAC,aAAa,GAAG,KAAK,CAAE,SAAQ,eAAe;IAC3E,SAAS,CAAC,sBAAsB,EAAE,qBAAqB,CAAC,aAAa,CAAC,CAAC;IACvE,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE3B,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;gBAEjC,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,aAAa,CAAC;IAKhF,IAAI,qBAAqB,IAAI,qBAAqB,CAAC,aAAa,CAAC,CAEhE;IAED,IAAI,qBAAqB,CAAC,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC,EAE9F;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,MAAM,EAE1B;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,IAAI,aAAa,CAAC,aAAa,EAAE,MAAM,EAEtC;IAED,mBAAmB;IACnB,IAAI,EAAE,IAAI,MAAM,CAOf;IAED,kBAAkB;IAClB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAI9B,kBAAkB;IAClB,iBAAiB,IAAI,MAAM;IAO3B,kBAAkB;IAClB,MAAM,IAAI,MAAM,CAAC,aAAa,CAAC;IAoB/B;;;OAGG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM;IAK9B,kBAAkB;IAClB,kBAAkB,IAAI,sBAAsB;IAkB5C;;;OAGG;IACH,IAAI,eAAe,CAAC,eAAe,EAAE,eAAe,EAEnD;IAED;;;OAGG;IACH,SAAS,IAAI,MAAM;IAanB,mBAAmB;IACnB,IAAI,eAAe,IAAI,MAAM,CAI5B;IAED;;;;;;OAMG;IACH,0BAA0B,CACxB,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC,EAC3B,iBAAiB,EAAE,sBAAsB,GACxC,sBAAsB;IAyFzB;;;;OAIG;IACH,oBAAoB,IAAI,IAAI;IA2F5B;;;OAGG;IACH,0CAA0C,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;CAiBzE"}
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CosmosTransaction = void 0;
|
|
4
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
5
|
+
const encoding_1 = require("@cosmjs/encoding");
|
|
6
|
+
const proto_signing_1 = require("@cosmjs/proto-signing");
|
|
7
|
+
const tx_1 = require("cosmjs-types/cosmos/tx/v1beta1/tx");
|
|
8
|
+
const constants_1 = require("./constants");
|
|
9
|
+
class CosmosTransaction extends sdk_core_1.BaseTransaction {
|
|
10
|
+
constructor(_coinConfig, utils) {
|
|
11
|
+
super(_coinConfig);
|
|
12
|
+
this._utils = utils;
|
|
13
|
+
}
|
|
14
|
+
get cosmosLikeTransaction() {
|
|
15
|
+
return this._cosmosLikeTransaction;
|
|
16
|
+
}
|
|
17
|
+
set cosmosLikeTransaction(cosmosLikeTransaction) {
|
|
18
|
+
this._cosmosLikeTransaction = cosmosLikeTransaction;
|
|
19
|
+
}
|
|
20
|
+
get chainId() {
|
|
21
|
+
return this._chainId;
|
|
22
|
+
}
|
|
23
|
+
set chainId(chainId) {
|
|
24
|
+
this._chainId = chainId;
|
|
25
|
+
}
|
|
26
|
+
get accountNumber() {
|
|
27
|
+
return this._accountNumber;
|
|
28
|
+
}
|
|
29
|
+
set accountNumber(accountNumber) {
|
|
30
|
+
this._accountNumber = accountNumber;
|
|
31
|
+
}
|
|
32
|
+
/** @inheritDoc **/
|
|
33
|
+
get id() {
|
|
34
|
+
if (this._id) {
|
|
35
|
+
return this._id;
|
|
36
|
+
}
|
|
37
|
+
else if (this._cosmosLikeTransaction?.hash !== undefined) {
|
|
38
|
+
return this._cosmosLikeTransaction.hash;
|
|
39
|
+
}
|
|
40
|
+
return constants_1.UNAVAILABLE_TEXT;
|
|
41
|
+
}
|
|
42
|
+
/** @inheritdoc */
|
|
43
|
+
canSign(key) {
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
/** @inheritdoc */
|
|
47
|
+
toBroadcastFormat() {
|
|
48
|
+
if (!this._cosmosLikeTransaction) {
|
|
49
|
+
throw new sdk_core_1.InvalidTransactionError('Empty transaction');
|
|
50
|
+
}
|
|
51
|
+
return this.serialize();
|
|
52
|
+
}
|
|
53
|
+
/** @inheritdoc */
|
|
54
|
+
toJson() {
|
|
55
|
+
if (!this._cosmosLikeTransaction) {
|
|
56
|
+
throw new sdk_core_1.ParseTransactionError('Empty transaction');
|
|
57
|
+
}
|
|
58
|
+
const tx = this._cosmosLikeTransaction;
|
|
59
|
+
return {
|
|
60
|
+
id: this.id,
|
|
61
|
+
type: this._type,
|
|
62
|
+
sequence: tx.sequence,
|
|
63
|
+
sendMessages: tx.sendMessages,
|
|
64
|
+
gasBudget: tx.gasBudget,
|
|
65
|
+
publicKey: tx.publicKey,
|
|
66
|
+
signature: tx.signature,
|
|
67
|
+
accountNumber: this._accountNumber,
|
|
68
|
+
chainId: this._chainId,
|
|
69
|
+
hash: tx.hash,
|
|
70
|
+
memo: tx.memo,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Add a signature to the transaction
|
|
75
|
+
* @param {string} signature in hex format
|
|
76
|
+
*/
|
|
77
|
+
addSignature(signature) {
|
|
78
|
+
this._signatures = [];
|
|
79
|
+
this._signatures.push(signature);
|
|
80
|
+
}
|
|
81
|
+
/** @inheritDoc */
|
|
82
|
+
explainTransaction() {
|
|
83
|
+
const result = this.toJson();
|
|
84
|
+
const displayOrder = ['id', 'outputs', 'outputAmount', 'changeOutputs', 'changeAmount', 'fee', 'type'];
|
|
85
|
+
const outputs = [];
|
|
86
|
+
const explanationResult = {
|
|
87
|
+
displayOrder,
|
|
88
|
+
id: this.id,
|
|
89
|
+
outputs,
|
|
90
|
+
outputAmount: '0',
|
|
91
|
+
changeOutputs: [],
|
|
92
|
+
changeAmount: '0',
|
|
93
|
+
fee: { fee: this.cosmosLikeTransaction.gasBudget.amount[0].amount },
|
|
94
|
+
type: this.type,
|
|
95
|
+
};
|
|
96
|
+
return this.explainTransactionInternal(result, explanationResult);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Set the transaction type.
|
|
100
|
+
* @param {TransactionType} transactionType The transaction type to be set.
|
|
101
|
+
*/
|
|
102
|
+
set transactionType(transactionType) {
|
|
103
|
+
this._type = transactionType;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Serialize the transaction to a JSON string
|
|
107
|
+
* @returns {string} serialized base64 encoded transaction
|
|
108
|
+
*/
|
|
109
|
+
serialize() {
|
|
110
|
+
const txRaw = this._utils.createTxRawFromCosmosLikeTransaction(this.cosmosLikeTransaction);
|
|
111
|
+
if (this.cosmosLikeTransaction?.publicKey !== undefined && this._signatures.length > 0) {
|
|
112
|
+
const signedRawTx = this._utils.createSignedTxRaw(this.cosmosLikeTransaction.publicKey, this._signatures[0], txRaw);
|
|
113
|
+
return (0, encoding_1.toBase64)(tx_1.TxRaw.encode(signedRawTx).finish());
|
|
114
|
+
}
|
|
115
|
+
return (0, encoding_1.toBase64)(tx_1.TxRaw.encode(txRaw).finish());
|
|
116
|
+
}
|
|
117
|
+
/** @inheritdoc **/
|
|
118
|
+
get signablePayload() {
|
|
119
|
+
return Buffer.from((0, proto_signing_1.makeSignBytes)(this._utils.createSignDoc(this.cosmosLikeTransaction, this._accountNumber, this._chainId)));
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Returns a complete explanation for a transfer transaction
|
|
123
|
+
* Currently only supports one message per transfer.
|
|
124
|
+
* @param {TxData} json The transaction data in json format
|
|
125
|
+
* @param {TransactionExplanation} explanationResult The transaction explanation to be completed
|
|
126
|
+
* @returns {TransactionExplanation}
|
|
127
|
+
*/
|
|
128
|
+
explainTransactionInternal(json, explanationResult) {
|
|
129
|
+
let outputs;
|
|
130
|
+
let outputAmount;
|
|
131
|
+
switch (json.type) {
|
|
132
|
+
case sdk_core_1.TransactionType.Send:
|
|
133
|
+
explanationResult.type = sdk_core_1.TransactionType.Send;
|
|
134
|
+
outputAmount = BigInt(0);
|
|
135
|
+
outputs = json.sendMessages.map((message) => {
|
|
136
|
+
const sendMessage = message.value;
|
|
137
|
+
outputAmount = outputAmount + BigInt(sendMessage.amount[0].amount);
|
|
138
|
+
return {
|
|
139
|
+
address: sendMessage.toAddress,
|
|
140
|
+
amount: sendMessage.amount[0].amount,
|
|
141
|
+
};
|
|
142
|
+
});
|
|
143
|
+
break;
|
|
144
|
+
case sdk_core_1.TransactionType.StakingActivate:
|
|
145
|
+
explanationResult.type = sdk_core_1.TransactionType.StakingActivate;
|
|
146
|
+
outputAmount = BigInt(0);
|
|
147
|
+
outputs = json.sendMessages.map((message) => {
|
|
148
|
+
const delegateMessage = message.value;
|
|
149
|
+
outputAmount = outputAmount + BigInt(delegateMessage.amount.amount);
|
|
150
|
+
return {
|
|
151
|
+
address: delegateMessage.validatorAddress,
|
|
152
|
+
amount: delegateMessage.amount.amount,
|
|
153
|
+
};
|
|
154
|
+
});
|
|
155
|
+
break;
|
|
156
|
+
case sdk_core_1.TransactionType.StakingDeactivate:
|
|
157
|
+
explanationResult.type = sdk_core_1.TransactionType.StakingDeactivate;
|
|
158
|
+
outputAmount = BigInt(0);
|
|
159
|
+
outputs = json.sendMessages.map((message) => {
|
|
160
|
+
const delegateMessage = message.value;
|
|
161
|
+
outputAmount = outputAmount + BigInt(delegateMessage.amount.amount);
|
|
162
|
+
return {
|
|
163
|
+
address: delegateMessage.validatorAddress,
|
|
164
|
+
amount: delegateMessage.amount.amount,
|
|
165
|
+
};
|
|
166
|
+
});
|
|
167
|
+
break;
|
|
168
|
+
case sdk_core_1.TransactionType.StakingWithdraw:
|
|
169
|
+
explanationResult.type = sdk_core_1.TransactionType.StakingWithdraw;
|
|
170
|
+
outputs = json.sendMessages.map((message) => {
|
|
171
|
+
const withdrawMessage = message.value;
|
|
172
|
+
return {
|
|
173
|
+
address: withdrawMessage.validatorAddress,
|
|
174
|
+
amount: constants_1.UNAVAILABLE_TEXT,
|
|
175
|
+
};
|
|
176
|
+
});
|
|
177
|
+
break;
|
|
178
|
+
case sdk_core_1.TransactionType.ContractCall:
|
|
179
|
+
explanationResult.type = sdk_core_1.TransactionType.ContractCall;
|
|
180
|
+
outputAmount = BigInt(0);
|
|
181
|
+
outputs = json.sendMessages.map((message) => {
|
|
182
|
+
const executeContractMessage = message.value;
|
|
183
|
+
outputAmount = outputAmount + BigInt(executeContractMessage.funds?.[0]?.amount ?? '0');
|
|
184
|
+
return {
|
|
185
|
+
address: executeContractMessage.contract,
|
|
186
|
+
amount: executeContractMessage.funds?.[0]?.amount ?? '0',
|
|
187
|
+
};
|
|
188
|
+
});
|
|
189
|
+
break;
|
|
190
|
+
case sdk_core_1.TransactionType.StakingRedelegate:
|
|
191
|
+
explanationResult.type = sdk_core_1.TransactionType.StakingRedelegate;
|
|
192
|
+
outputAmount = BigInt(0);
|
|
193
|
+
outputs = json.sendMessages.map((message) => {
|
|
194
|
+
const redelegateMessage = message.value;
|
|
195
|
+
outputAmount = outputAmount + BigInt(redelegateMessage.amount.amount);
|
|
196
|
+
return {
|
|
197
|
+
address: redelegateMessage.validatorDstAddress,
|
|
198
|
+
amount: redelegateMessage.amount.amount,
|
|
199
|
+
};
|
|
200
|
+
});
|
|
201
|
+
break;
|
|
202
|
+
default:
|
|
203
|
+
throw new sdk_core_1.InvalidTransactionError('Transaction type not supported');
|
|
204
|
+
}
|
|
205
|
+
if (json.memo) {
|
|
206
|
+
outputs.forEach((output) => {
|
|
207
|
+
output.memo = json.memo;
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
return {
|
|
211
|
+
...explanationResult,
|
|
212
|
+
outputAmount: outputAmount?.toString(),
|
|
213
|
+
outputs,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Load the input and output data on this transaction using the transaction json
|
|
218
|
+
* if there are outputs. For transactions without outputs (e.g. wallet initializations),
|
|
219
|
+
* this function will not do anything
|
|
220
|
+
*/
|
|
221
|
+
loadInputsAndOutputs() {
|
|
222
|
+
if (this.type === undefined || !this.cosmosLikeTransaction) {
|
|
223
|
+
throw new sdk_core_1.InvalidTransactionError('Transaction type or cosmosLikeTransaction is not set');
|
|
224
|
+
}
|
|
225
|
+
const outputs = [];
|
|
226
|
+
const inputs = [];
|
|
227
|
+
switch (this.type) {
|
|
228
|
+
case sdk_core_1.TransactionType.Send:
|
|
229
|
+
this.cosmosLikeTransaction.sendMessages.forEach((message) => {
|
|
230
|
+
const sendMessage = message.value;
|
|
231
|
+
inputs.push({
|
|
232
|
+
address: sendMessage.fromAddress,
|
|
233
|
+
value: sendMessage.amount[0].amount,
|
|
234
|
+
coin: this._coinConfig.name,
|
|
235
|
+
});
|
|
236
|
+
outputs.push({
|
|
237
|
+
address: sendMessage.toAddress,
|
|
238
|
+
value: sendMessage.amount[0].amount,
|
|
239
|
+
coin: this._coinConfig.name,
|
|
240
|
+
});
|
|
241
|
+
});
|
|
242
|
+
break;
|
|
243
|
+
case sdk_core_1.TransactionType.StakingActivate:
|
|
244
|
+
case sdk_core_1.TransactionType.StakingDeactivate:
|
|
245
|
+
this.cosmosLikeTransaction.sendMessages.forEach((message) => {
|
|
246
|
+
const delegateMessage = message.value;
|
|
247
|
+
inputs.push({
|
|
248
|
+
address: delegateMessage.delegatorAddress,
|
|
249
|
+
value: delegateMessage.amount.amount,
|
|
250
|
+
coin: this._coinConfig.name,
|
|
251
|
+
});
|
|
252
|
+
outputs.push({
|
|
253
|
+
address: delegateMessage.validatorAddress,
|
|
254
|
+
value: delegateMessage.amount.amount,
|
|
255
|
+
coin: this._coinConfig.name,
|
|
256
|
+
});
|
|
257
|
+
});
|
|
258
|
+
break;
|
|
259
|
+
case sdk_core_1.TransactionType.StakingWithdraw:
|
|
260
|
+
this.cosmosLikeTransaction.sendMessages.forEach((message) => {
|
|
261
|
+
const withdrawMessage = message.value;
|
|
262
|
+
inputs.push({
|
|
263
|
+
address: withdrawMessage.delegatorAddress,
|
|
264
|
+
value: constants_1.UNAVAILABLE_TEXT,
|
|
265
|
+
coin: this._coinConfig.name,
|
|
266
|
+
});
|
|
267
|
+
outputs.push({
|
|
268
|
+
address: withdrawMessage.validatorAddress,
|
|
269
|
+
value: constants_1.UNAVAILABLE_TEXT,
|
|
270
|
+
coin: this._coinConfig.name,
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
break;
|
|
274
|
+
case sdk_core_1.TransactionType.ContractCall:
|
|
275
|
+
this.cosmosLikeTransaction.sendMessages.forEach((message) => {
|
|
276
|
+
const executeContractMessage = message.value;
|
|
277
|
+
inputs.push({
|
|
278
|
+
address: executeContractMessage.sender,
|
|
279
|
+
value: executeContractMessage.funds?.[0]?.amount ?? '0',
|
|
280
|
+
coin: this._coinConfig.name,
|
|
281
|
+
});
|
|
282
|
+
outputs.push({
|
|
283
|
+
address: executeContractMessage.contract,
|
|
284
|
+
value: executeContractMessage.funds?.[0]?.amount ?? '0',
|
|
285
|
+
coin: this._coinConfig.name,
|
|
286
|
+
});
|
|
287
|
+
});
|
|
288
|
+
break;
|
|
289
|
+
case sdk_core_1.TransactionType.StakingRedelegate:
|
|
290
|
+
this.cosmosLikeTransaction.sendMessages.forEach((message) => {
|
|
291
|
+
const redelegateMessage = message.value;
|
|
292
|
+
inputs.push({
|
|
293
|
+
address: redelegateMessage.delegatorAddress,
|
|
294
|
+
value: redelegateMessage.amount.amount,
|
|
295
|
+
coin: this._coinConfig.name,
|
|
296
|
+
});
|
|
297
|
+
outputs.push({
|
|
298
|
+
address: redelegateMessage.validatorDstAddress,
|
|
299
|
+
value: redelegateMessage.amount.amount,
|
|
300
|
+
coin: this._coinConfig.name,
|
|
301
|
+
});
|
|
302
|
+
});
|
|
303
|
+
break;
|
|
304
|
+
default:
|
|
305
|
+
throw new sdk_core_1.InvalidTransactionError('Transaction type not supported');
|
|
306
|
+
}
|
|
307
|
+
this._inputs = inputs;
|
|
308
|
+
this._outputs = outputs;
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Sets this transaction payload
|
|
312
|
+
* @param rawTransaction raw transaction in base64 encoded string
|
|
313
|
+
*/
|
|
314
|
+
enrichTransactionDetailsFromRawTransaction(rawTransaction) {
|
|
315
|
+
if (this._utils.isValidHexString(rawTransaction)) {
|
|
316
|
+
this.cosmosLikeTransaction = this._utils.deserializeTransaction((0, encoding_1.toBase64)((0, encoding_1.fromHex)(rawTransaction)));
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
this.cosmosLikeTransaction = this._utils.deserializeTransaction(rawTransaction);
|
|
320
|
+
}
|
|
321
|
+
if (this.cosmosLikeTransaction.signature) {
|
|
322
|
+
this.addSignature(Buffer.from(this.cosmosLikeTransaction.signature).toString('hex'));
|
|
323
|
+
}
|
|
324
|
+
const typeUrl = this.cosmosLikeTransaction.sendMessages[0].typeUrl;
|
|
325
|
+
const transactionType = this._utils.getTransactionTypeFromTypeUrl(typeUrl);
|
|
326
|
+
if (transactionType === undefined) {
|
|
327
|
+
throw new Error('Transaction type is not supported ' + typeUrl);
|
|
328
|
+
}
|
|
329
|
+
this.transactionType = transactionType;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
exports.CosmosTransaction = CosmosTransaction;
|
|
333
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDhDQVF5QjtBQUV6QiwrQ0FBcUQ7QUFDckQseURBQXNEO0FBQ3RELDBEQUEwRDtBQUMxRCwyQ0FBK0M7QUFhL0MsTUFBYSxpQkFBeUMsU0FBUSwwQkFBZTtJQU8zRSxZQUFZLFdBQWlDLEVBQUUsS0FBaUM7UUFDOUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUFJLHFCQUFxQjtRQUN2QixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBSSxxQkFBcUIsQ0FBQyxxQkFBcUU7UUFDN0YsSUFBSSxDQUFDLHNCQUFzQixHQUFHLHFCQUFxQixDQUFDO0lBQ3RELENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLE9BQWU7UUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxhQUFhLENBQUMsYUFBcUI7UUFDckMsSUFBSSxDQUFDLGNBQWMsR0FBRyxhQUFhLENBQUM7SUFDdEMsQ0FBQztJQUVELG1CQUFtQjtJQUNuQixJQUFJLEVBQUU7UUFDSixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNiLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNsQixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzNELE9BQU8sSUFBSSxD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QUFDO1FBQ2xFLENBQUM7UUFDRCxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztJQUN6QyxDQUFDO0NBQ0Y7QUFwV0QsOENBb1dDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQmFzZUtleSxcbiAgQmFzZVRyYW5zYWN0aW9uLFxuICBFbnRyeSxcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gIFBhcnNlVHJhbnNhY3Rpb25FcnJvcixcbiAgVHJhbnNhY3Rpb25SZWNpcGllbnQsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBmcm9tSGV4LCB0b0Jhc2U2NCB9IGZyb20gJ0Bjb3NtanMvZW5jb2RpbmcnO1xuaW1wb3J0IHsgbWFrZVNpZ25CeXRlcyB9IGZyb20gJ0Bjb3NtanMvcHJvdG8tc2lnbmluZyc7XG5pbXBvcnQgeyBUeFJhdyB9IGZyb20gJ2Nvc21qcy10eXBlcy9jb3Ntb3MvdHgvdjFiZXRhMS90eCc7XG5pbXBvcnQgeyBVTkFWQUlMQUJMRV9URVhUIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgQ29zbW9zTGlrZVRyYW5zYWN0aW9uLFxuICBEZWxlZ2F0ZU9yVW5kZWxlZ2V0ZU1lc3NhZ2UsXG4gIEV4ZWN1dGVDb250cmFjdE1lc3NhZ2UsXG4gIFJlZGVsZWdhdGVNZXNzYWdlLFxuICBTZW5kTWVzc2FnZSxcbiAgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbixcbiAgVHhEYXRhLFxuICBXaXRoZHJhd0RlbGVnYXRvclJld2FyZHNNZXNzYWdlLFxufSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IENvc21vc1V0aWxzIH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBDb3Ntb3NUcmFuc2FjdGlvbjxDdXN0b21NZXNzYWdlID0gbmV2ZXI+IGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uIHtcbiAgcHJvdGVjdGVkIF9jb3Ntb3NMaWtlVHJhbnNhY3Rpb246IENvc21vc0xpa2VUcmFuc2FjdGlvbjxDdXN0b21NZXNzYWdlPjtcbiAgcHJvdGVjdGVkIF9hY2NvdW50TnVtYmVyOiBudW1iZXI7XG4gIHByb3RlY3RlZCBfY2hhaW5JZDogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCBfdXRpbHM6IENvc21vc1V0aWxzPEN1c3RvbU1lc3NhZ2U+O1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPiwgdXRpbHM6IENvc21vc1V0aWxzPEN1c3RvbU1lc3NhZ2U+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMuX3V0aWxzID0gdXRpbHM7XG4gIH1cblxuICBnZXQgY29zbW9zTGlrZVRyYW5zYWN0aW9uKCk6IENvc21vc0xpa2VUcmFuc2FjdGlvbjxDdXN0b21NZXNzYWdlPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Nvc21vc0xpa2VUcmFuc2FjdGlvbjtcbiAgfVxuXG4gIHNldCBjb3Ntb3NMaWtlVHJhbnNhY3Rpb24oY29zbW9zTGlrZVRyYW5zYWN0aW9uOiBSZWFkb25seTxDb3Ntb3NMaWtlVHJhbnNhY3Rpb248Q3VzdG9tTWVzc2FnZT4+KSB7XG4gICAgdGhpcy5fY29zbW9zTGlrZVRyYW5zYWN0aW9uID0gY29zbW9zTGlrZVRyYW5zYWN0aW9uO1xuICB9XG5cbiAgZ2V0IGNoYWluSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2hhaW5JZDtcbiAgfVxuXG4gIHNldCBjaGFpbklkKGNoYWluSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX2NoYWluSWQgPSBjaGFpbklkO1xuICB9XG5cbiAgZ2V0IGFjY291bnROdW1iZXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYWNjb3VudE51bWJlcjtcbiAgfVxuXG4gIHNldCBhY2NvdW50TnVtYmVyKGFjY291bnROdW1iZXI6IG51bWJlcikge1xuICAgIHRoaXMuX2FjY291bnROdW1iZXIgPSBhY2NvdW50TnVtYmVyO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICoqL1xuICBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5faWQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pZDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2Nvc21vc0xpa2VUcmFuc2FjdGlvbj8uaGFzaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY29zbW9zTGlrZVRyYW5zYWN0aW9uLmhhc2g7XG4gICAgfVxuICAgIHJldHVybiBVTkFWQUlMQUJMRV9URVhUO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGNhblNpZ24oa2V5OiBCYXNlS2V5KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX2Nvc21vc0xpa2VUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemUoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0pzb24oKTogVHhEYXRhPEN1c3RvbU1lc3NhZ2U+IHtcbiAgICBpZiAoIXRoaXMuX2Nvc21vc0xpa2VUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgY29uc3QgdHggPSB0aGlzLl9jb3Ntb3NMaWtlVHJhbnNhY3Rpb247XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgdHlwZTogdGhpcy5fdHlwZSxcbiAgICAgIHNlcXVlbmNlOiB0eC5zZXF1ZW5jZSxcbiAgICAgIHNlbmRNZXNzYWdlczogdHguc2VuZE1lc3NhZ2VzLFxuICAgICAgZ2FzQnVkZ2V0OiB0eC5nYXNCdWRnZXQsXG4gICAgICBwdWJsaWNLZXk6IHR4LnB1YmxpY0tleSxcbiAgICAgIHNpZ25hdHVyZTogdHguc2lnbmF0dXJlLFxuICAgICAgYWNjb3VudE51bWJlcjogdGhpcy5fYWNjb3VudE51bWJlcixcbiAgICAgIGNoYWluSWQ6IHRoaXMuX2NoYWluSWQsXG4gICAgICBoYXNoOiB0eC5oYXNoLFxuICAgICAgbWVtbzogdHgubWVtbyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHNpZ25hdHVyZSB0byB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25hdHVyZSBpbiBoZXggZm9ybWF0XG4gICAqL1xuICBhZGRTaWduYXR1cmUoc2lnbmF0dXJlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zaWduYXR1cmVzID0gW107XG4gICAgdGhpcy5fc2lnbmF0dXJlcy5wdXNoKHNpZ25hdHVyZSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZXhwbGFpblRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudG9Kc29uKCk7XG4gICAgY29uc3QgZGlzcGxheU9yZGVyID0gWydpZCcsICdvdXRwdXRzJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VPdXRwdXRzJywgJ2NoYW5nZUFtb3VudCcsICdmZWUnLCAndHlwZSddO1xuICAgIGNvbnN0IG91dHB1dHM6IFRyYW5zYWN0aW9uUmVjaXBpZW50W10gPSBbXTtcblxuICAgIGNvbnN0IGV4cGxhbmF0aW9uUmVzdWx0OiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uID0ge1xuICAgICAgZGlzcGxheU9yZGVyLFxuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBvdXRwdXRzLFxuICAgICAgb3V0cHV0QW1vdW50OiAnMCcsXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgZmVlOiB7IGZlZTogdGhpcy5jb3Ntb3NMaWtlVHJhbnNhY3Rpb24uZ2FzQnVkZ2V0LmFtb3VudFswXS5hbW91bnQgfSxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmV4cGxhaW5UcmFuc2FjdGlvbkludGVybmFsKHJlc3VsdCwgZXhwbGFuYXRpb25SZXN1bHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNhY3Rpb24gdHlwZS5cbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblR5cGV9IHRyYW5zYWN0aW9uVHlwZSBUaGUgdHJhbnNhY3Rpb24gdHlwZSB0byBiZSBzZXQuXG4gICAqL1xuICBzZXQgdHJhbnNhY3Rpb25UeXBlKHRyYW5zYWN0aW9uVHlwZTogVHJhbnNhY3Rpb25UeXBlKSB7XG4gICAgdGhpcy5fdHlwZSA9IHRyYW5zYWN0aW9uVHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgdGhlIHRyYW5zYWN0aW9uIHRvIGEgSlNPTiBzdHJpbmdcbiAgICogQHJldHVybnMge3N0cmluZ30gc2VyaWFsaXplZCBiYXNlNjQgZW5jb2RlZCB0cmFuc2FjdGlvblxuICAgKi9cbiAgc2VyaWFsaXplKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdHhSYXcgPSB0aGlzLl91dGlscy5jcmVhdGVUeFJhd0Zyb21Db3Ntb3NMaWtlVHJhbnNhY3Rpb24odGhpcy5jb3Ntb3NMaWtlVHJhbnNhY3Rpb24pO1xuICAgIGlmICh0aGlzLmNvc21vc0xpa2VUcmFuc2FjdGlvbj8ucHVibGljS2V5ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5fc2lnbmF0dXJlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBzaWduZWRSYXdUeCA9IHRoaXMuX3V0aWxzLmNyZWF0ZVNpZ25lZFR4UmF3KFxuICAgICAgICB0aGlzLmNvc21vc0xpa2VUcmFuc2FjdGlvbi5wdWJsaWNLZXksXG4gICAgICAgIHRoaXMuX3NpZ25hdHVyZXNbMF0sXG4gICAgICAgIHR4UmF3XG4gICAgICApO1xuICAgICAgcmV0dXJuIHRvQmFzZTY0KFR4UmF3LmVuY29kZShzaWduZWRSYXdUeCkuZmluaXNoKCkpO1xuICAgIH1cbiAgICByZXR1cm4gdG9CYXNlNjQoVHhSYXcuZW5jb2RlKHR4UmF3KS5maW5pc2goKSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKiovXG4gIGdldCBzaWduYWJsZVBheWxvYWQoKTogQnVmZmVyIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oXG4gICAgICBtYWtlU2lnbkJ5dGVzKHRoaXMuX3V0aWxzLmNyZWF0ZVNpZ25Eb2ModGhpcy5jb3Ntb3NMaWtlVHJhbnNhY3Rpb24sIHRoaXMuX2FjY291bnROdW1iZXIsIHRoaXMuX2NoYWluSWQpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGNvbXBsZXRlIGV4cGxhbmF0aW9uIGZvciBhIHRyYW5zZmVyIHRyYW5zYWN0aW9uXG4gICAqIEN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIG9uZSBtZXNzYWdlIHBlciB0cmFuc2Zlci5cbiAgICogQHBhcmFtIHtUeERhdGF9IGpzb24gVGhlIHRyYW5zYWN0aW9uIGRhdGEgaW4ganNvbiBmb3JtYXRcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbkV4cGxhbmF0aW9ufSBleHBsYW5hdGlvblJlc3VsdCBUaGUgdHJhbnNhY3Rpb24gZXhwbGFuYXRpb24gdG8gYmUgY29tcGxldGVkXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkV4cGxhbmF0aW9ufVxuICAgKi9cbiAgZXhwbGFpblRyYW5zYWN0aW9uSW50ZXJuYWwoXG4gICAganNvbjogVHhEYXRhPEN1c3RvbU1lc3NhZ2U+LFxuICAgIGV4cGxhbmF0aW9uUmVzdWx0OiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uXG4gICk6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIGxldCBvdXRwdXRzOiBUcmFuc2FjdGlvblJlY2lwaWVudFtdO1xuICAgIGxldCBvdXRwdXRBbW91bnQ7XG4gICAgc3dpdGNoIChqc29uLnR5cGUpIHtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlNlbmQ6XG4gICAgICAgIGV4cGxhbmF0aW9uUmVzdWx0LnR5cGUgPSBUcmFuc2FjdGlvblR5cGUuU2VuZDtcbiAgICAgICAgb3V0cHV0QW1vdW50ID0gQmlnSW50KDApO1xuICAgICAgICBvdXRwdXRzID0ganNvbi5zZW5kTWVzc2FnZXMubWFwKChtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2VuZE1lc3NhZ2UgPSBtZXNzYWdlLnZhbHVlIGFzIFNlbmRNZXNzYWdlO1xuICAgICAgICAgIG91dHB1dEFtb3VudCA9IG91dHB1dEFtb3VudCArIEJpZ0ludChzZW5kTWVzc2FnZS5hbW91bnRbMF0uYW1vdW50KTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWRkcmVzczogc2VuZE1lc3NhZ2UudG9BZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiBzZW5kTWVzc2FnZS5hbW91bnRbMF0uYW1vdW50LFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZTpcbiAgICAgICAgZXhwbGFuYXRpb25SZXN1bHQudHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGU7XG4gICAgICAgIG91dHB1dEFtb3VudCA9IEJpZ0ludCgwKTtcbiAgICAgICAgb3V0cHV0cyA9IGpzb24uc2VuZE1lc3NhZ2VzLm1hcCgobWVzc2FnZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRlbGVnYXRlTWVzc2FnZSA9IG1lc3NhZ2UudmFsdWUgYXMgRGVsZWdhdGVPclVuZGVsZWdldGVNZXNzYWdlO1xuICAgICAgICAgIG91dHB1dEFtb3VudCA9IG91dHB1dEFtb3VudCArIEJpZ0ludChkZWxlZ2F0ZU1lc3NhZ2UuYW1vdW50LmFtb3VudCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IGRlbGVnYXRlTWVzc2FnZS52YWxpZGF0b3JBZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiBkZWxlZ2F0ZU1lc3NhZ2UuYW1vdW50LmFtb3VudCxcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nRGVhY3RpdmF0ZTpcbiAgICAgICAgZXhwbGFuYXRpb25SZXN1bHQudHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nRGVhY3RpdmF0ZTtcbiAgICAgICAgb3V0cHV0QW1vdW50ID0gQmlnSW50KDApO1xuICAgICAgICBvdXRwdXRzID0ganNvbi5zZW5kTWVzc2FnZXMubWFwKChtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgY29uc3QgZGVsZWdhdGVNZXNzYWdlID0gbWVzc2FnZS52YWx1ZSBhcyBEZWxlZ2F0ZU9yVW5kZWxlZ2V0ZU1lc3NhZ2U7XG4gICAgICAgICAgb3V0cHV0QW1vdW50ID0gb3V0cHV0QW1vdW50ICsgQmlnSW50KGRlbGVnYXRlTWVzc2FnZS5hbW91bnQuYW1vdW50KTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWRkcmVzczogZGVsZWdhdGVNZXNzYWdlLnZhbGlkYXRvckFkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6IGRlbGVnYXRlTWVzc2FnZS5hbW91bnQuYW1vdW50LFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdzpcbiAgICAgICAgZXhwbGFuYXRpb25SZXN1bHQudHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXc7XG4gICAgICAgIG91dHB1dHMgPSBqc29uLnNlbmRNZXNzYWdlcy5tYXAoKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICBjb25zdCB3aXRoZHJhd01lc3NhZ2UgPSBtZXNzYWdlLnZhbHVlIGFzIFdpdGhkcmF3RGVsZWdhdG9yUmV3YXJkc01lc3NhZ2U7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHdpdGhkcmF3TWVzc2FnZS52YWxpZGF0b3JBZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiBVTkFWQUlMQUJMRV9URVhULFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbDpcbiAgICAgICAgZXhwbGFuYXRpb25SZXN1bHQudHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGw7XG4gICAgICAgIG91dHB1dEFtb3VudCA9IEJpZ0ludCgwKTtcbiAgICAgICAgb3V0cHV0cyA9IGpzb24uc2VuZE1lc3NhZ2VzLm1hcCgobWVzc2FnZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGV4ZWN1dGVDb250cmFjdE1lc3NhZ2UgPSBtZXNzYWdlLnZhbHVlIGFzIEV4ZWN1dGVDb250cmFjdE1lc3NhZ2U7XG4gICAgICAgICAgb3V0cHV0QW1vdW50ID0gb3V0cHV0QW1vdW50ICsgQmlnSW50KGV4ZWN1dGVDb250cmFjdE1lc3NhZ2UuZnVuZHM/LlswXT8uYW1vdW50ID8/ICcwJyk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IGV4ZWN1dGVDb250cmFjdE1lc3NhZ2UuY29udHJhY3QsXG4gICAgICAgICAgICBhbW91bnQ6IGV4ZWN1dGVDb250cmFjdE1lc3NhZ2UuZnVuZHM/LlswXT8uYW1vdW50ID8/ICcwJyxcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nUmVkZWxlZ2F0ZTpcbiAgICAgICAgZXhwbGFuYXRpb25SZXN1bHQudHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nUmVkZWxlZ2F0ZTtcbiAgICAgICAgb3V0cHV0QW1vdW50ID0gQmlnSW50KDApO1xuICAgICAgICBvdXRwdXRzID0ganNvbi5zZW5kTWVzc2FnZXMubWFwKChtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVkZWxlZ2F0ZU1lc3NhZ2UgPSBtZXNzYWdlLnZhbHVlIGFzIFJlZGVsZWdhdGVNZXNzYWdlO1xuICAgICAgICAgIG91dHB1dEFtb3VudCA9IG91dHB1dEFtb3VudCArIEJpZ0ludChyZWRlbGVnYXRlTWVzc2FnZS5hbW91bnQuYW1vdW50KTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWRkcmVzczogcmVkZWxlZ2F0ZU1lc3NhZ2UudmFsaWRhdG9yRHN0QWRkcmVzcyxcbiAgICAgICAgICAgIGFtb3VudDogcmVkZWxlZ2F0ZU1lc3NhZ2UuYW1vdW50LmFtb3VudCxcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIHR5cGUgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cbiAgICBpZiAoanNvbi5tZW1vKSB7XG4gICAgICBvdXRwdXRzLmZvckVhY2goKG91dHB1dCkgPT4ge1xuICAgICAgICBvdXRwdXQubWVtbyA9IGpzb24ubWVtbztcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZXhwbGFuYXRpb25SZXN1bHQsXG4gICAgICBvdXRwdXRBbW91bnQ6IG91dHB1dEFtb3VudD8udG9TdHJpbmcoKSxcbiAgICAgIG91dHB1dHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgb24gdGhpcyB0cmFuc2FjdGlvbiB1c2luZyB0aGUgdHJhbnNhY3Rpb24ganNvblxuICAgKiBpZiB0aGVyZSBhcmUgb3V0cHV0cy4gRm9yIHRyYW5zYWN0aW9ucyB3aXRob3V0IG91dHB1dHMgKGUuZy4gd2FsbGV0IGluaXRpYWxpemF0aW9ucyksXG4gICAqIHRoaXMgZnVuY3Rpb24gd2lsbCBub3QgZG8gYW55dGhpbmdcbiAgICovXG4gIGxvYWRJbnB1dHNBbmRPdXRwdXRzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnR5cGUgPT09IHVuZGVmaW5lZCB8fCAhdGhpcy5jb3Ntb3NMaWtlVHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gdHlwZSBvciBjb3Ntb3NMaWtlVHJhbnNhY3Rpb24gaXMgbm90IHNldCcpO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dHM6IEVudHJ5W10gPSBbXTtcbiAgICBjb25zdCBpbnB1dHM6IEVudHJ5W10gPSBbXTtcbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU2VuZDpcbiAgICAgICAgdGhpcy5jb3Ntb3NMaWtlVHJhbnNhY3Rpb24uc2VuZE1lc3NhZ2VzLmZvckVhY2goKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICBjb25zdCBzZW5kTWVzc2FnZSA9IG1lc3NhZ2UudmFsdWUgYXMgU2VuZE1lc3NhZ2U7XG4gICAgICAgICAgaW5wdXRzLnB1c2goe1xuICAgICAgICAgICAgYWRkcmVzczogc2VuZE1lc3NhZ2UuZnJvbUFkZHJlc3MsXG4gICAgICAgICAgICB2YWx1ZTogc2VuZE1lc3NhZ2UuYW1vdW50WzBdLmFtb3VudCxcbiAgICAgICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBvdXRwdXRzLnB1c2goe1xuICAgICAgICAgICAgYWRkcmVzczogc2VuZE1lc3NhZ2UudG9BZGRyZXNzLFxuICAgICAgICAgICAgdmFsdWU6IHNlbmRNZXNzYWdlLmFtb3VudFswXS5hbW91bnQsXG4gICAgICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZTpcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdEZWFjdGl2YXRlOlxuICAgICAgICB0aGlzLmNvc21vc0xpa2VUcmFuc2FjdGlvbi5zZW5kTWVzc2FnZXMuZm9yRWFjaCgobWVzc2FnZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRlbGVnYXRlTWVzc2FnZSA9IG1lc3NhZ2UudmFsdWUgYXMgRGVsZWdhdGVPclVuZGVsZWdldGVNZXNzYWdlO1xuICAgICAgICAgIGlucHV0cy5wdXNoKHtcbiAgICAgICAgICAgIGFkZHJlc3M6IGRlbGVnYXRlTWVzc2FnZS5kZWxlZ2F0b3JBZGRyZXNzLFxuICAgICAgICAgICAgdmFsdWU6IGRlbGVnYXRlTWVzc2FnZS5hbW91bnQuYW1vdW50LFxuICAgICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIG91dHB1dHMucHVzaCh7XG4gICAgICAgICAgICBhZGRyZXNzOiBkZWxlZ2F0ZU1lc3NhZ2UudmFsaWRhdG9yQWRkcmVzcyxcbiAgICAgICAgICAgIHZhbHVlOiBkZWxlZ2F0ZU1lc3NhZ2UuYW1vdW50LmFtb3VudCxcbiAgICAgICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1dpdGhkcmF3OlxuICAgICAgICB0aGlzLmNvc21vc0xpa2VUcmFuc2FjdGlvbi5zZW5kTWVzc2FnZXMuZm9yRWFjaCgobWVzc2FnZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHdpdGhkcmF3TWVzc2FnZSA9IG1lc3NhZ2UudmFsdWUgYXMgV2l0aGRyYXdEZWxlZ2F0b3JSZXdhcmRzTWVzc2FnZTtcbiAgICAgICAgICBpbnB1dHMucHVzaCh7XG4gICAgICAgICAgICBhZGRyZXNzOiB3aXRoZHJhd01lc3NhZ2UuZGVsZWdhdG9yQWRkcmVzcyxcbiAgICAgICAgICAgIHZhbHVlOiBVTkFWQUlMQUJMRV9URVhULFxuICAgICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIG91dHB1dHMucHVzaCh7XG4gICAgICAgICAgICBhZGRyZXNzOiB3aXRoZHJhd01lc3NhZ2UudmFsaWRhdG9yQWRkcmVzcyxcbiAgICAgICAgICAgIHZhbHVlOiBVTkFWQUlMQUJMRV9URVhULFxuICAgICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGw6XG4gICAgICAgIHRoaXMuY29zbW9zTGlrZVRyYW5zYWN0aW9uLnNlbmRNZXNzYWdlcy5mb3JFYWNoKChtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXhlY3V0ZUNvbnRyYWN0TWVzc2FnZSA9IG1lc3NhZ2UudmFsdWUgYXMgRXhlY3V0ZUNvbnRyYWN0TWVzc2FnZTtcbiAgICAgICAgICBpbnB1dHMucHVzaCh7XG4gICAgICAgICAgICBhZGRyZXNzOiBleGVjdXRlQ29udHJhY3RNZXNzYWdlLnNlbmRlcixcbiAgICAgICAgICAgIHZhbHVlOiBleGVjdXRlQ29udHJhY3RNZXNzYWdlLmZ1bmRzPy5bMF0/LmFtb3VudCA/PyAnMCcsXG4gICAgICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgICAgIGFkZHJlc3M6IGV4ZWN1dGVDb250cmFjdE1lc3NhZ2UuY29udHJhY3QsXG4gICAgICAgICAgICB2YWx1ZTogZXhlY3V0ZUNvbnRyYWN0TWVzc2FnZS5mdW5kcz8uWzBdPy5hbW91bnQgPz8gJzAnLFxuICAgICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nUmVkZWxlZ2F0ZTpcbiAgICAgICAgdGhpcy5jb3Ntb3NMaWtlVHJhbnNhY3Rpb24uc2VuZE1lc3NhZ2VzLmZvckVhY2goKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICBjb25zdCByZWRlbGVnYXRlTWVzc2FnZSA9IG1lc3NhZ2UudmFsdWUgYXMgUmVkZWxlZ2F0ZU1lc3NhZ2U7XG4gICAgICAgICAgaW5wdXRzLnB1c2goe1xuICAgICAgICAgICAgYWRkcmVzczogcmVkZWxlZ2F0ZU1lc3NhZ2UuZGVsZWdhdG9yQWRkcmVzcyxcbiAgICAgICAgICAgIHZhbHVlOiByZWRlbGVnYXRlTWVzc2FnZS5hbW91bnQuYW1vdW50LFxuICAgICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIG91dHB1dHMucHVzaCh7XG4gICAgICAgICAgICBhZGRyZXNzOiByZWRlbGVnYXRlTWVzc2FnZS52YWxpZGF0b3JEc3RBZGRyZXNzLFxuICAgICAgICAgICAgdmFsdWU6IHJlZGVsZWdhdGVNZXNzYWdlLmFtb3VudC5hbW91bnQsXG4gICAgICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gdHlwZSBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuICAgIHRoaXMuX2lucHV0cyA9IGlucHV0cztcbiAgICB0aGlzLl9vdXRwdXRzID0gb3V0cHV0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoaXMgdHJhbnNhY3Rpb24gcGF5bG9hZFxuICAgKiBAcGFyYW0gcmF3VHJhbnNhY3Rpb24gcmF3IHRyYW5zYWN0aW9uIGluIGJhc2U2NCBlbmNvZGVkIHN0cmluZ1xuICAgKi9cbiAgZW5yaWNoVHJhbnNhY3Rpb25EZXRhaWxzRnJvbVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdXRpbHMuaXNWYWxpZEhleFN0cmluZyhyYXdUcmFuc2FjdGlvbikpIHtcbiAgICAgIHRoaXMuY29zbW9zTGlrZVRyYW5zYWN0aW9uID0gdGhpcy5fdXRpbHMuZGVzZXJpYWxpemVUcmFuc2FjdGlvbih0b0Jhc2U2NChmcm9tSGV4KHJhd1RyYW5zYWN0aW9uKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvc21vc0xpa2VUcmFuc2FjdGlvbiA9IHRoaXMuX3V0aWxzLmRlc2VyaWFsaXplVHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb3Ntb3NMaWtlVHJhbnNhY3Rpb24uc2lnbmF0dXJlKSB7XG4gICAgICB0aGlzLmFkZFNpZ25hdHVyZShCdWZmZXIuZnJvbSh0aGlzLmNvc21vc0xpa2VUcmFuc2FjdGlvbi5zaWduYXR1cmUpLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgfVxuICAgIGNvbnN0IHR5cGVVcmwgPSB0aGlzLmNvc21vc0xpa2VUcmFuc2FjdGlvbi5zZW5kTWVzc2FnZXNbMF0udHlwZVVybDtcbiAgICBjb25zdCB0cmFuc2FjdGlvblR5cGUgPSB0aGlzLl91dGlscy5nZXRUcmFuc2FjdGlvblR5cGVGcm9tVHlwZVVybCh0eXBlVXJsKTtcblxuICAgIGlmICh0cmFuc2FjdGlvblR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUcmFuc2FjdGlvbiB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgJyArIHR5cGVVcmwpO1xuICAgIH1cbiAgICB0aGlzLnRyYW5zYWN0aW9uVHlwZSA9IHRyYW5zYWN0aW9uVHlwZTtcbiAgfVxufVxuIl19
|