UNPKG

bitgo

Version:
126 lines • 19.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const _ = require("lodash"); const nock = require("nock"); const stakingWallet_1 = require("../../fixtures/staking/stakingWallet"); const sdk_core_1 = require("@bitgo/sdk-core"); const sdk_test_1 = require("@bitgo/sdk-test"); const src_1 = require("../../../../src"); const sinon = require("sinon"); describe('TSS Staking Wallet', function () { const microservicesUri = sdk_core_1.Environments['mock'].uri; let bitgo; let nearBaseCoin; let ethBaseCoin; let atomBaseCoin; let enterprise; let ethWalletData; let nearStakingWallet; let ethStakingWallet; let atomStakingWallet; before(function () { bitgo = sdk_test_1.TestBitGo.decorate(src_1.BitGo, { env: 'mock', microservicesUri }); bitgo.initializeTestVars(); nearBaseCoin = bitgo.coin('near'); nearBaseCoin.keychains(); ethBaseCoin = bitgo.coin('eth'); ethBaseCoin.keychains(); atomBaseCoin = bitgo.coin('atom'); atomBaseCoin.keychains(); enterprise = new sdk_core_1.Enterprise(bitgo, nearBaseCoin, { id: '5cf940949449412d00f53b3d92dbcaa3', name: 'TSS Test Enterprise', }); const tssWalletData = { id: 'walletIdTss', coin: 'near', enterprise: enterprise.id, keys: ['5b3424f91bf349930e340175'], multisigType: 'tss', }; const nearWallet = new sdk_core_1.Wallet(bitgo, nearBaseCoin, tssWalletData); nearStakingWallet = nearWallet.toStakingWallet(); ethWalletData = { id: 'walletId', coin: 'eth', enterprise: enterprise.id, keys: ['5b3424f91bf349930e340175'], coinSpecific: { walletVersion: 3 }, }; const ethWallet = new sdk_core_1.Wallet(bitgo, ethBaseCoin, ethWalletData); ethStakingWallet = ethWallet.toStakingWallet(); const atomWallet = new sdk_core_1.Wallet(bitgo, atomBaseCoin, { ...tssWalletData, coin: 'atom' }); atomStakingWallet = atomWallet.toStakingWallet(); }); describe('buildSignAndSend', function () { const sandbox = sinon.createSandbox(); afterEach(function () { sandbox.verifyAndRestore(); }); it('should throw error when txRequestId is not defined', async function () { const transaction = stakingWallet_1.default.transaction('READY'); transaction.txRequestId = undefined; await nearStakingWallet .buildSignAndSend({ walletPassphrase: 'passphrase' }, transaction) .should.rejectedWith('txRequestId is required to sign and send'); }); it('should build, sign and send transaction', async function () { const walletPassphrase = 'passphrase'; const transaction = stakingWallet_1.default.transaction('READY'); const deleteSignatureShares = sandbox.stub(sdk_core_1.TssUtils.prototype, 'deleteSignatureShares'); deleteSignatureShares.resolves([]); deleteSignatureShares.calledOnceWithExactly(transaction.id); const getKeysForSigning = sandbox.stub(sdk_core_1.Keychains.prototype, 'getKeysForSigning'); const keyChain = { id: 'id', pub: 'pub', type: 'tss', }; getKeysForSigning.resolves([keyChain]); getKeysForSigning.calledOnce; const signTransaction = sandbox.stub(sdk_core_1.Wallet.prototype, 'signTransaction'); signTransaction.resolves({ txRequestId: stakingWallet_1.default.txRequestId }); signTransaction.calledOnceWithExactly({ txPrebuild: { txRequestId: stakingWallet_1.default.txRequestId, }, walletPassphrase: walletPassphrase, keychain: keyChain, }); nock(microservicesUri) .post(`/api/staking/v1/${nearStakingWallet.coin}/wallets/${nearStakingWallet.walletId}/requests/${transaction.stakingRequestId}/transactions/${transaction.id}`, _.matches({ txRequestId: stakingWallet_1.default.txRequestId })) .reply(200, transaction); const stakingTransaction = await nearStakingWallet.buildSignAndSend({ walletPassphrase: walletPassphrase }, transaction); stakingTransaction.should.deepEqual(transaction); }); it('should build and sign but not send transaction for ETH TSS or ECDSA based TSS Coin', async function () { [ethStakingWallet, atomStakingWallet].forEach(async (ecdsaStakingWallet) => { const walletPassphrase = 'passphrase'; const transaction = stakingWallet_1.default.transaction('READY'); const deleteSignatureShares = sandbox.stub(sdk_core_1.TssUtils.prototype, 'deleteSignatureShares'); deleteSignatureShares.resolves([]); deleteSignatureShares.calledOnceWithExactly(transaction.id); const getKeysForSigning = sandbox.stub(sdk_core_1.Keychains.prototype, 'getKeysForSigning'); const keyChain = { id: 'id', pub: 'pub', type: 'tss', }; getKeysForSigning.resolves([keyChain]); getKeysForSigning.calledOnce; const signTransaction = sandbox.stub(sdk_core_1.Wallet.prototype, 'signTransaction'); signTransaction.resolves({ txRequestId: stakingWallet_1.default.txRequestId }); signTransaction.calledOnceWithExactly({ txPrebuild: { txRequestId: stakingWallet_1.default.txRequestId, }, walletPassphrase: walletPassphrase, keychain: keyChain, }); const stakingTransaction = await ecdsaStakingWallet.buildSignAndSend({ walletPassphrase: walletPassphrase }, transaction); stakingTransaction.should.deepEqual(transaction); }); }); }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZ1dhbGxldFRTUy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdjIvdW5pdC9zdGFraW5nL3N0YWtpbmdXYWxsZXRUU1MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw0QkFBNEI7QUFFNUIsNkJBQThCO0FBQzlCLHdFQUE0RDtBQUU1RCw4Q0FBaUg7QUFDakgsOENBQTRDO0FBQzVDLHlDQUF3QztBQUV4QywrQkFBK0I7QUFFL0IsUUFBUSxDQUFDLG9CQUFvQixFQUFFO0lBQzdCLE1BQU0sZ0JBQWdCLEdBQUcsdUJBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDbEQsSUFBSSxLQUFLLENBQUM7SUFDVixJQUFJLFlBQVksQ0FBQztJQUNqQixJQUFJLFdBQVcsQ0FBQztJQUNoQixJQUFJLFlBQVksQ0FBQztJQUNqQixJQUFJLFVBQVUsQ0FBQztJQUNmLElBQUksYUFBa0IsQ0FBQztJQUN2QixJQUFJLGlCQUFnQyxDQUFDO0lBQ3JDLElBQUksZ0JBQStCLENBQUM7SUFDcEMsSUFBSSxpQkFBZ0MsQ0FBQztJQUVyQyxNQUFNLENBQUM7UUFDTCxLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsV0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBUyxDQUFDLENBQUM7UUFDNUUsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDM0IsWUFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3pCLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN4QixZQUFZLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQyxZQUFZLENBQUMsU0FB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RUYsa0JBQWtCLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNuRCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IG5vY2sgPSByZXF1aXJlKCdub2NrJyk7XG5pbXBvcnQgZml4dHVyZXMgZnJvbSAnLi4vLi4vZml4dHVyZXMvc3Rha2luZy9zdGFraW5nV2FsbGV0JztcblxuaW1wb3J0IHsgRW50ZXJwcmlzZSwgRW52aXJvbm1lbnRzLCBLZXljaGFpbiwgS2V5Y2hhaW5zLCBTdGFraW5nV2FsbGV0LCBUc3NVdGlscywgV2FsbGV0IH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFRlc3RCaXRHbyB9IGZyb20gJ0BiaXRnby9zZGstdGVzdCc7XG5pbXBvcnQgeyBCaXRHbyB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYyc7XG5cbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcblxuZGVzY3JpYmUoJ1RTUyBTdGFraW5nIFdhbGxldCcsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgbWljcm9zZXJ2aWNlc1VyaSA9IEVudmlyb25tZW50c1snbW9jayddLnVyaTtcbiAgbGV0IGJpdGdvO1xuICBsZXQgbmVhckJhc2VDb2luO1xuICBsZXQgZXRoQmFzZUNvaW47XG4gIGxldCBhdG9tQmFzZUNvaW47XG4gIGxldCBlbnRlcnByaXNlO1xuICBsZXQgZXRoV2FsbGV0RGF0YTogYW55O1xuICBsZXQgbmVhclN0YWtpbmdXYWxsZXQ6IFN0YWtpbmdXYWxsZXQ7XG4gIGxldCBldGhTdGFraW5nV2FsbGV0OiBTdGFraW5nV2FsbGV0O1xuICBsZXQgYXRvbVN0YWtpbmdXYWxsZXQ6IFN0YWtpbmdXYWxsZXQ7XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHbywgeyBlbnY6ICdtb2NrJywgbWljcm9zZXJ2aWNlc1VyaSB9IGFzIGFueSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgbmVhckJhc2VDb2luID0gYml0Z28uY29pbignbmVhcicpO1xuICAgIG5lYXJCYXNlQ29pbi5rZXljaGFpbnMoKTtcbiAgICBldGhCYXNlQ29pbiA9IGJpdGdvLmNvaW4oJ2V0aCcpO1xuICAgIGV0aEJhc2VDb2luLmtleWNoYWlucygpO1xuICAgIGF0b21CYXNlQ29pbiA9IGJpdGdvLmNvaW4oJ2F0b20nKTtcbiAgICBhdG9tQmFzZUNvaW4ua2V5Y2hhaW5zKCk7XG4gICAgZW50ZXJwcmlzZSA9IG5ldyBFbnRlcnByaXNlKGJpdGdvLCBuZWFyQmFzZUNvaW4sIHtcbiAgICAgIGlkOiAnNWNmOTQwOTQ5NDQ5NDEyZDAwZjUzYjNkOTJkYmNhYTMnLFxuICAgICAgbmFtZTogJ1RTUyBUZXN0IEVudGVycHJpc2UnLFxuICAgIH0pO1xuICAgIGNvbnN0IHRzc1dhbGxldERhdGEgPSB7XG4gICAgICBpZDogJ3dhbGxldElkVHNzJyxcbiAgICAgIGNvaW46ICduZWFyJyxcbiAgICAgIGVudGVycHJpc2U6IGVudGVycHJpc2UuaWQsXG4gICAgICBrZXlzOiBbJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NSddLFxuICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICB9O1xuICAgIGNvbnN0IG5lYXJXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBuZWFyQmFzZUNvaW4sIHRzc1dhbGxldERhdGEpO1xuICAgIG5lYXJTdGFraW5nV2FsbGV0ID0gbmVhcldhbGxldC50b1N0YWtpbmdXYWxsZXQoKTtcblxuICAgIGV0aFdhbGxldERhdGEgPSB7XG4gICAgICBpZDogJ3dhbGxldElkJyxcbiAgICAgIGNvaW46ICdldGgnLFxuICAgICAgZW50ZXJwcmlzZTogZW50ZXJwcmlzZS5pZCxcbiAgICAgIGtleXM6IFsnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc1J10sXG4gICAgICBjb2luU3BlY2lmaWM6IHsgd2FsbGV0VmVyc2lvbjogMyB9LFxuICAgIH07XG4gICAgY29uc3QgZXRoV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgZXRoQmFzZUNvaW4sIGV0aFdhbGxldERhdGEpO1xuICAgIGV0aFN0YWtpbmdXYWxsZXQgPSBldGhXYWxsZXQudG9TdGFraW5nV2FsbGV0KCk7XG5cbiAgICBjb25zdCBhdG9tV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYXRvbUJhc2VDb2luLCB7IC4uLnRzc1dhbGxldERhdGEsIGNvaW46ICdhdG9tJyB9KTtcbiAgICBhdG9tU3Rha2luZ1dhbGxldCA9IGF0b21XYWxsZXQudG9TdGFraW5nV2FsbGV0KCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdidWlsZFNpZ25BbmRTZW5kJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNhbmRib3ggPSBzaW5vbi5jcmVhdGVTYW5kYm94KCk7XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgc2FuZGJveC52ZXJpZnlBbmRSZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4gdHhSZXF1ZXN0SWQgaXMgbm90IGRlZmluZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGZpeHR1cmVzLnRyYW5zYWN0aW9uKCdSRUFEWScpO1xuICAgICAgdHJhbnNhY3Rpb24udHhSZXF1ZXN0SWQgPSB1bmRlZmluZWQ7XG4gICAgICBhd2FpdCBuZWFyU3Rha2luZ1dhbGxldFxuICAgICAgICAuYnVpbGRTaWduQW5kU2VuZCh7IHdhbGxldFBhc3NwaHJhc2U6ICdwYXNzcGhyYXNlJyB9LCB0cmFuc2FjdGlvbilcbiAgICAgICAgLnNob3VsZC5yZWplY3RlZFdpdGgoJ3R4UmVxdWVzdElkIGlzIHJlcXVpcmVkIHRvIHNpZ24gYW5kIHNlbmQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQsIHNpZ24gYW5kIHNlbmQgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ3Bhc3NwaHJhc2UnO1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBmaXh0dXJlcy50cmFuc2FjdGlvbignUkVBRFknKTtcbiAgICAgIGNvbnN0IGRlbGV0ZVNpZ25hdHVyZVNoYXJlcyA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdkZWxldGVTaWduYXR1cmVTaGFyZXMnKTtcbiAgICAgIGRlbGV0ZVNpZ25hdHVyZVNoYXJlcy5yZXNvbHZlcyhbXSk7XG4gICAgICBkZWxldGVTaWduYXR1cmVTaGFyZXMuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHRyYW5zYWN0aW9uLmlkKTtcblxuICAgICAgY29uc3QgZ2V0S2V5c0ZvclNpZ25pbmcgPSBzYW5kYm94LnN0dWIoS2V5Y2hhaW5zLnByb3RvdHlwZSwgJ2dldEtleXNGb3JTaWduaW5nJyk7XG4gICAgICBjb25zdCBrZXlDaGFpbjogS2V5Y2hhaW4gPSB7XG4gICAgICAgIGlkOiAnaWQnLFxuICAgICAgICBwdWI6ICdwdWInLFxuICAgICAgICB0eXBlOiAndHNzJyxcbiAgICAgIH07XG4gICAgICBnZXRLZXlzRm9yU2lnbmluZy5yZXNvbHZlcyhba2V5Q2hhaW5dKTtcbiAgICAgIGdldEtleXNGb3JTaWduaW5nLmNhbGxlZE9uY2U7XG5cbiAgICAgIGNvbnN0IHNpZ25UcmFuc2FjdGlvbiA9IHNhbmRib3guc3R1YihXYWxsZXQucHJvdG90eXBlLCAnc2lnblRyYW5zYWN0aW9uJyk7XG4gICAgICBzaWduVHJhbnNhY3Rpb24ucmVzb2x2ZXMoeyB0eFJlcXVlc3RJZDogZml4dHVyZXMudHhSZXF1ZXN0SWQgfSk7XG4gICAgICBzaWduVHJhbnNhY3Rpb24uY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4UmVxdWVzdElkOiBmaXh0dXJlcy50eFJlcXVlc3RJZCxcbiAgICAgICAgfSxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAga2V5Y2hhaW46IGtleUNoYWluLFxuICAgICAgfSk7XG5cbiAgICAgIG5vY2sobWljcm9zZXJ2aWNlc1VyaSlcbiAgICAgICAgLnBvc3QoXG4gICAgICAgICAgYC9hcGkvc3Rha2luZy92MS8ke25lYXJTdGFraW5nV2FsbGV0LmNvaW59L3dhbGxldHMvJHtuZWFyU3Rha2luZ1dhbGxldC53YWxsZXRJZH0vcmVxdWVzdHMvJHt0cmFuc2FjdGlvbi5zdGFraW5nUmVxdWVzdElkfS90cmFuc2FjdGlvbnMvJHt0cmFuc2FjdGlvbi5pZH1gLFxuICAgICAgICAgIF8ubWF0Y2hlcyh7IHR4UmVxdWVzdElkOiBmaXh0dXJlcy50eFJlcXVlc3RJZCB9KVxuICAgICAgICApXG4gICAgICAgIC5yZXBseSgyMDAsIHRyYW5zYWN0aW9uKTtcblxuICAgICAgY29uc3Qgc3Rha2luZ1RyYW5zYWN0aW9uID0gYXdhaXQgbmVhclN0YWtpbmdXYWxsZXQuYnVpbGRTaWduQW5kU2VuZChcbiAgICAgICAgeyB3YWxsZXRQYXNzcGhyYXNlOiB3YWxsZXRQYXNzcGhyYXNlIH0sXG4gICAgICAgIHRyYW5zYWN0aW9uXG4gICAgICApO1xuXG4gICAgICBzdGFraW5nVHJhbnNhY3Rpb24uc2hvdWxkLmRlZXBFcXVhbCh0cmFuc2FjdGlvbik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGFuZCBzaWduIGJ1dCBub3Qgc2VuZCB0cmFuc2FjdGlvbiBmb3IgRVRIIFRTUyBvciBFQ0RTQSBiYXNlZCBUU1MgQ29pbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIFtldGhTdGFraW5nV2FsbGV0LCBhdG9tU3Rha2luZ1dhbGxldF0uZm9yRWFjaChhc3luYyAoZWNkc2FTdGFraW5nV2FsbGV0KSA9PiB7XG4gICAgICAgIGNvbnN0IHdhbGxldFBhc3NwaHJhc2UgPSAncGFzc3BocmFzZSc7XG4gICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gZml4dHVyZXMudHJhbnNhY3Rpb24oJ1JFQURZJyk7XG4gICAgICAgIGNvbnN0IGRlbGV0ZVNpZ25hdHVyZVNoYXJlcyA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdkZWxldGVTaWduYXR1cmVTaGFyZXMnKTtcbiAgICAgICAgZGVsZXRlU2lnbmF0dXJlU2hhcmVzLnJlc29sdmVzKFtdKTtcbiAgICAgICAgZGVsZXRlU2lnbmF0dXJlU2hhcmVzLmNhbGxlZE9uY2VXaXRoRXhhY3RseSh0cmFuc2FjdGlvbi5pZCk7XG5cbiAgICAgICAgY29uc3QgZ2V0S2V5c0ZvclNpZ25pbmcgPSBzYW5kYm94LnN0dWIoS2V5Y2hhaW5zLnByb3RvdHlwZSwgJ2dldEtleXNGb3JTaWduaW5nJyk7XG4gICAgICAgIGNvbnN0IGtleUNoYWluOiBLZXljaGFpbiA9IHtcbiAgICAgICAgICBpZDogJ2lkJyxcbiAgICAgICAgICBwdWI6ICdwdWInLFxuICAgICAgICAgIHR5cGU6ICd0c3MnLFxuICAgICAgICB9O1xuICAgICAgICBnZXRLZXlzRm9yU2lnbmluZy5yZXNvbHZlcyhba2V5Q2hhaW5dKTtcbiAgICAgICAgZ2V0S2V5c0ZvclNpZ25pbmcuY2FsbGVkT25jZTtcblxuICAgICAgICBjb25zdCBzaWduVHJhbnNhY3Rpb24gPSBzYW5kYm94LnN0dWIoV2FsbGV0LnByb3RvdHlwZSwgJ3NpZ25UcmFuc2FjdGlvbicpO1xuICAgICAgICBzaWduVHJhbnNhY3Rpb24ucmVzb2x2ZXMoeyB0eFJlcXVlc3RJZDogZml4dHVyZXMudHhSZXF1ZXN0SWQgfSk7XG4gICAgICAgIHNpZ25UcmFuc2FjdGlvbi5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICAgIHR4UmVxdWVzdElkOiBmaXh0dXJlcy50eFJlcXVlc3RJZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgICAga2V5Y2hhaW46IGtleUNoYWluLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBzdGFraW5nVHJhbnNhY3Rpb24gPSBhd2FpdCBlY2RzYVN0YWtpbmdXYWxsZXQuYnVpbGRTaWduQW5kU2VuZChcbiAgICAgICAgICB7IHdhbGxldFBhc3NwaHJhc2U6IHdhbGxldFBhc3NwaHJhc2UgfSxcbiAgICAgICAgICB0cmFuc2FjdGlvblxuICAgICAgICApO1xuXG4gICAgICAgIHN0YWtpbmdUcmFuc2FjdGlvbi5zaG91bGQuZGVlcEVxdWFsKHRyYW5zYWN0aW9uKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19