@bitgo-beta/sdk-core 8.2.1-beta.1821 → 8.2.1-beta.1823

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.
Files changed (30) hide show
  1. package/dist/src/bitgo/baseCoin/baseCoin.d.ts +14 -1
  2. package/dist/src/bitgo/baseCoin/baseCoin.d.ts.map +1 -1
  3. package/dist/src/bitgo/baseCoin/baseCoin.js +16 -1
  4. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +57 -0
  5. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
  6. package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
  7. package/dist/src/bitgo/utils/tss/addressVerification.d.ts +25 -0
  8. package/dist/src/bitgo/utils/tss/addressVerification.d.ts.map +1 -1
  9. package/dist/src/bitgo/utils/tss/addressVerification.js +31 -13
  10. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +7 -0
  11. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
  12. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +23 -32
  13. package/dist/src/bitgo/utils/tss/index.d.ts +1 -0
  14. package/dist/src/bitgo/utils/tss/index.d.ts.map +1 -1
  15. package/dist/src/bitgo/utils/tss/index.js +2 -1
  16. package/dist/src/bitgo/utils/tss/preHashedSignable.d.ts +23 -0
  17. package/dist/src/bitgo/utils/tss/preHashedSignable.d.ts.map +1 -0
  18. package/dist/src/bitgo/utils/tss/preHashedSignable.js +26 -0
  19. package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
  20. package/dist/src/bitgo/wallet/wallet.js +6 -3
  21. package/dist/test/unit/bitgo/utils/tss/addressVerification.js +45 -1
  22. package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +4 -1
  23. package/dist/test/unit/bitgo/utils/tss/preHashedSignable.d.ts +2 -0
  24. package/dist/test/unit/bitgo/utils/tss/preHashedSignable.d.ts.map +1 -0
  25. package/dist/test/unit/bitgo/utils/tss/preHashedSignable.js +55 -0
  26. package/dist/test/unit/bitgo/wallet/ofcWalletAddressCreation.d.ts +2 -0
  27. package/dist/test/unit/bitgo/wallet/ofcWalletAddressCreation.d.ts.map +1 -0
  28. package/dist/test/unit/bitgo/wallet/ofcWalletAddressCreation.js +141 -0
  29. package/dist/tsconfig.tsbuildinfo +1 -1
  30. package/package.json +8 -8
@@ -0,0 +1,141 @@
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
+ /**
7
+ * @prettier
8
+ */
9
+ const sinon_1 = __importDefault(require("sinon"));
10
+ require("should");
11
+ const wallet_1 = require("../../../../src/bitgo/wallet/wallet");
12
+ const coins_1 = require("../../../../src/coins");
13
+ const OFC_ZEC_CONFIG = {
14
+ coin: 'ofczec',
15
+ decimalPlaces: 8,
16
+ name: 'OFCZEC',
17
+ type: 'ofczec',
18
+ backingCoin: 'zec',
19
+ isFiat: false,
20
+ };
21
+ describe('Wallet - OFC createAddress', function () {
22
+ let mockBitGo;
23
+ let ofcToken;
24
+ let keychainsGetStub;
25
+ function makePostChain(resolved) {
26
+ const chain = {};
27
+ chain.send = sinon_1.default.stub().returns(chain);
28
+ chain.result = sinon_1.default.stub().resolves(resolved);
29
+ return chain;
30
+ }
31
+ beforeEach(function () {
32
+ keychainsGetStub = sinon_1.default.stub().resolves({ id: 'user-key-id', pub: 'xpub-value' });
33
+ mockBitGo = {
34
+ url: sinon_1.default.stub().returns('https://test.bitgo.com/'),
35
+ post: sinon_1.default.stub(),
36
+ setRequestTracer: sinon_1.default.stub(),
37
+ };
38
+ ofcToken = new coins_1.OfcToken(mockBitGo, OFC_ZEC_CONFIG);
39
+ mockBitGo.coin = sinon_1.default.stub().returns(ofcToken);
40
+ sinon_1.default.stub(coins_1.OfcToken.prototype, 'keychains').returns({ get: keychainsGetStub });
41
+ });
42
+ afterEach(function () {
43
+ sinon_1.default.restore();
44
+ });
45
+ const mockAddressResponse = {
46
+ id: 'new-address-id',
47
+ address: 'bg-aabbccddeeff00112233445566778899',
48
+ chain: 0,
49
+ index: 1,
50
+ };
51
+ describe('single-key OFC wallet (userKeySigningRequired: true)', function () {
52
+ it('should create a receive address without fetching any keychains', async function () {
53
+ const walletData = {
54
+ id: 'wallet-id',
55
+ coin: 'ofc',
56
+ keys: ['user-key-id'],
57
+ type: 'trading',
58
+ multisigType: 'onchain',
59
+ enterprise: 'ent-id',
60
+ userKeySigningRequired: true,
61
+ };
62
+ const wallet = new wallet_1.Wallet(mockBitGo, ofcToken, walletData);
63
+ mockBitGo.post.returns(makePostChain(mockAddressResponse));
64
+ const result = await wallet.createAddress({ onToken: 'ofczec' });
65
+ result.should.have.property('id', 'new-address-id');
66
+ result.should.have.property('address', 'bg-aabbccddeeff00112233445566778899');
67
+ keychainsGetStub.called.should.be.false();
68
+ });
69
+ });
70
+ describe('two-key OFC wallet (userKeySigningRequired: false)', function () {
71
+ it('should create a receive address without fetching keychains', async function () {
72
+ const walletData = {
73
+ id: 'wallet-id',
74
+ coin: 'ofc',
75
+ keys: ['user-key-id', 'bitgo-key-id'],
76
+ type: 'trading',
77
+ multisigType: 'onchain',
78
+ enterprise: 'ent-id',
79
+ userKeySigningRequired: false,
80
+ };
81
+ const wallet = new wallet_1.Wallet(mockBitGo, ofcToken, walletData);
82
+ mockBitGo.post.returns(makePostChain(mockAddressResponse));
83
+ const result = await wallet.createAddress({ onToken: 'ofczec' });
84
+ result.should.have.property('id', 'new-address-id');
85
+ keychainsGetStub.called.should.be.false();
86
+ });
87
+ it('should succeed even if keychains().get() would fail for a server-managed key', async function () {
88
+ keychainsGetStub.rejects(new Error('key not found'));
89
+ const walletData = {
90
+ id: 'wallet-id',
91
+ coin: 'ofc',
92
+ keys: ['user-key-id', 'bitgo-key-id'],
93
+ type: 'trading',
94
+ multisigType: 'onchain',
95
+ enterprise: 'ent-id',
96
+ userKeySigningRequired: false,
97
+ };
98
+ const wallet = new wallet_1.Wallet(mockBitGo, ofcToken, walletData);
99
+ mockBitGo.post.returns(makePostChain(mockAddressResponse));
100
+ const result = await wallet.createAddress({ onToken: 'ofczec' });
101
+ result.should.have.property('id', 'new-address-id');
102
+ });
103
+ });
104
+ describe('non-OFC wallet (eth)', function () {
105
+ it('should still fetch keychains for address verification', async function () {
106
+ const mockEthCoin = {
107
+ getFamily: sinon_1.default.stub().returns('eth'),
108
+ isEVM: sinon_1.default.stub().returns(true),
109
+ supportsTss: sinon_1.default.stub().returns(false),
110
+ url: sinon_1.default.stub().returns('/api/v2/eth/wallet/wallet-id/address'),
111
+ isWalletAddress: sinon_1.default.stub().resolves(true),
112
+ keychains: sinon_1.default.stub().returns({ get: keychainsGetStub }),
113
+ };
114
+ const walletData = {
115
+ id: 'wallet-id',
116
+ coin: 'eth',
117
+ keys: ['user-key-id', 'backup-key-id', 'bitgo-key-id'],
118
+ coinSpecific: { pendingChainInitialization: false },
119
+ };
120
+ const wallet = new wallet_1.Wallet(mockBitGo, mockEthCoin, walletData);
121
+ mockBitGo.post.returns(makePostChain({ id: 'eth-addr-id', address: '0xabc', coinSpecific: {} }));
122
+ await wallet.createAddress({});
123
+ keychainsGetStub.callCount.should.equal(3);
124
+ });
125
+ });
126
+ describe('missing onToken parameter', function () {
127
+ it('should throw for OFC wallets when onToken is omitted', async function () {
128
+ const walletData = {
129
+ id: 'wallet-id',
130
+ coin: 'ofc',
131
+ keys: ['user-key-id'],
132
+ type: 'trading',
133
+ multisigType: 'onchain',
134
+ enterprise: 'ent-id',
135
+ };
136
+ const wallet = new wallet_1.Wallet(mockBitGo, ofcToken, walletData);
137
+ await wallet.createAddress({}).should.be.rejectedWith('onToken is a mandatory parameter for OFC wallets');
138
+ });
139
+ });
140
+ });
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2ZjV2FsbGV0QWRkcmVzc0NyZWF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpdGdvL3dhbGxldC9vZmNXYWxsZXRBZGRyZXNzQ3JlYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7R0FFRztBQUNILGtEQUEwQjtBQUMxQixrQkFBZ0I7QUFDaEIsZ0VBQTZEO0FBQzdELGlEQUFpRDtBQUVqRCxNQUFNLGNBQWMsR0FBRztJQUNyQixJQUFJLEVBQUUsUUFBUTtJQUNkLGFBQWEsRUFBRSxDQUFDO0lBQ2hCLElBQUksRUFBRSxRQUFRO0lBQ2QsSUFBSSxFQUFFLFFBQVE7SUFDZCxXQUFXLEVBQUUsS0FBSztJQUNsQixNQUFNLEVBQUUsS0FBSztDQUNkLENBQUM7QUFFRixRQUFRLENBQUMsNEJBQTRCLEVBQUU7SUFDckMsSUFBSSxTQUFjLENBQUM7SUFDbkIsSUFBSSxRQUFrQixDQUFDO0lBQ3ZCLElBQUksZ0JBQWlDLENBQUM7SUFFdEMsU0FBUyxhQUFhLENBQUMsUUFBaUI7UUFDdEMsTUFBTSxLQUFLLEdBQVEsRUFBRSxDQUFDO1FBQ3RCLEtBQUssQ0FBQyxJQUFJLEdBQUcsZUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxLQUFLLENBQUMsTUFBTSxHQUFHLGVBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0MsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsVUFBVSxDQUFDO1FBQ1QsZ0JBQWdCLEdBQUcsZUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDbkYsU0FBUyxHQUFHO1lBQ1YsR0FBRyxFQUFFLGVBQUssQ0FBQyxJQUFJLEVBQUUsQ0FB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c0RBQXNELEVBQUUsS0FBSztZQUM5RCxNQUFNLFVBQVUsR0FBRztnQkFDakIsRUFBRSxFQUFFLFdBQVc7Z0JBQ2YsSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsSUFBSSxFQUFFLENBQUMsYUFBYSxDQUFDO2dCQUNyQixJQUFJLEVBQUUsU0FBUztnQkFDZixZQUFZLEVBQUUsU0FBUztnQkFDdkIsVUFBVSxFQUFFLFFBQVE7YUFDckIsQ0FBQztZQUNGLE1BQU0sTUFBTSxHQUFHLElBQUksZUFBTSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFFM0QsTUFBTSxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGtEQUFrRCxDQUFDLENBQUM7UUFDNUcsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCAnc2hvdWxkJztcbmltcG9ydCB7IFdhbGxldCB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby93YWxsZXQvd2FsbGV0JztcbmltcG9ydCB7IE9mY1Rva2VuIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL2NvaW5zJztcblxuY29uc3QgT0ZDX1pFQ19DT05GSUcgPSB7XG4gIGNvaW46ICdvZmN6ZWMnLFxuICBkZWNpbWFsUGxhY2VzOiA4LFxuICBuYW1lOiAnT0ZDWkVDJyxcbiAgdHlwZTogJ29mY3plYycsXG4gIGJhY2tpbmdDb2luOiAnemVjJyxcbiAgaXNGaWF0OiBmYWxzZSxcbn07XG5cbmRlc2NyaWJlKCdXYWxsZXQgLSBPRkMgY3JlYXRlQWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IG1vY2tCaXRHbzogYW55O1xuICBsZXQgb2ZjVG9rZW46IE9mY1Rva2VuO1xuICBsZXQga2V5Y2hhaW5zR2V0U3R1Yjogc2lub24uU2lub25TdHViO1xuXG4gIGZ1bmN0aW9uIG1ha2VQb3N0Q2hhaW4ocmVzb2x2ZWQ6IHVua25vd24pOiBhbnkge1xuICAgIGNvbnN0IGNoYWluOiBhbnkgPSB7fTtcbiAgICBjaGFpbi5zZW5kID0gc2lub24uc3R1YigpLnJldHVybnMoY2hhaW4pO1xuICAgIGNoYWluLnJlc3VsdCA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhyZXNvbHZlZCk7XG4gICAgcmV0dXJuIGNoYWluO1xuICB9XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAga2V5Y2hhaW5zR2V0U3R1YiA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IGlkOiAndXNlci1rZXktaWQnLCBwdWI6ICd4cHViLXZhbHVlJyB9KTtcbiAgICBtb2NrQml0R28gPSB7XG4gICAgICB1cmw6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdodHRwczovL3Rlc3QuYml0Z28uY29tLycpLFxuICAgICAgcG9zdDogc2lub24uc3R1YigpLFxuICAgICAgc2V0UmVxdWVzdFRyYWNlcjogc2lub24uc3R1YigpLFxuICAgIH07XG4gICAgb2ZjVG9rZW4gPSBuZXcgT2ZjVG9rZW4obW9ja0JpdEdvLCBPRkNfWkVDX0NPTkZJRyk7XG4gICAgbW9ja0JpdEdvLmNvaW4gPSBzaW5vbi5zdHViKCkucmV0dXJucyhvZmNUb2tlbik7XG4gICAgc2lub24uc3R1YihPZmNUb2tlbi5wcm90b3R5cGUsICdrZXljaGFpbnMnKS5yZXR1cm5zKHsgZ2V0OiBrZXljaGFpbnNHZXRTdHViIH0gYXMgYW55KTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzaW5vbi5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGNvbnN0IG1vY2tBZGRyZXNzUmVzcG9uc2UgPSB7XG4gICAgaWQ6ICduZXctYWRkcmVzcy1pZCcsXG4gICAgYWRkcmVzczogJ2JnLWFhYmJjY2RkZWVmZjAwMTEyMjMzNDQ1NTY2Nzc4ODk5JyxcbiAgICBjaGFpbjogMCxcbiAgICBpbmRleDogMSxcbiAgfTtcblxuICBkZXNjcmliZSgnc2luZ2xlLWtleSBPRkMgd2FsbGV0ICh1c2VyS2V5U2lnbmluZ1JlcXVpcmVkOiB0cnVlKScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhIHJlY2VpdmUgYWRkcmVzcyB3aXRob3V0IGZldGNoaW5nIGFueSBrZXljaGFpbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgICBpZDogJ3dhbGxldC1pZCcsXG4gICAgICAgIGNvaW46ICdvZmMnLFxuICAgICAgICBrZXlzOiBbJ3VzZXIta2V5LWlkJ10sXG4gICAgICAgIHR5cGU6ICd0cmFkaW5nJyxcbiAgICAgICAgbXVsdGlzaWdUeXBlOiAnb25jaGFpbicsXG4gICAgICAgIGVudGVycHJpc2U6ICdlbnQtaWQnLFxuICAgICAgICB1c2VyS2V5U2lnbmluZ1JlcXVpcmVkOiB0cnVlLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQobW9ja0JpdEdvLCBvZmNUb2tlbiwgd2FsbGV0RGF0YSk7XG4gICAgICBtb2NrQml0R28ucG9zdC5yZXR1cm5zKG1ha2VQb3N0Q2hhaW4obW9ja0FkZHJlc3NSZXNwb25zZSkpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IG9uVG9rZW46ICdvZmN6ZWMnIH0pO1xuXG4gICAgICByZXN1bHQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2lkJywgJ25ldy1hZGRyZXNzLWlkJyk7XG4gICAgICByZXN1bHQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2FkZHJlc3MnLCAnYmctYWFiYmNjZGRlZWZmMDAxMTIyMzM0NDU1NjY3Nzg4OTknKTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIuY2FsbGVkLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndHdvLWtleSBPRkMgd2FsbGV0ICh1c2VyS2V5U2lnbmluZ1JlcXVpcmVkOiBmYWxzZSknLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBjcmVhdGUgYSByZWNlaXZlIGFkZHJlc3Mgd2l0aG91dCBmZXRjaGluZyBrZXljaGFpbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgICBpZDogJ3dhbGxldC1pZCcsXG4gICAgICAgIGNvaW46ICdvZmMnLFxuICAgICAgICBrZXlzOiBbJ3VzZXIta2V5LWlkJywgJ2JpdGdvLWtleS1pZCddLFxuICAgICAgICB0eXBlOiAndHJhZGluZycsXG4gICAgICAgIG11bHRpc2lnVHlwZTogJ29uY2hhaW4nLFxuICAgICAgICBlbnRlcnByaXNlOiAnZW50LWlkJyxcbiAgICAgICAgdXNlcktleVNpZ25pbmdSZXF1aXJlZDogZmFsc2UsXG4gICAgICB9O1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChtb2NrQml0R28sIG9mY1Rva2VuLCB3YWxsZXREYXRhKTtcbiAgICAgIG1vY2tCaXRHby5wb3N0LnJldHVybnMobWFrZVBvc3RDaGFpbihtb2NrQWRkcmVzc1Jlc3BvbnNlKSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgb25Ub2tlbjogJ29mY3plYycgfSk7XG5cbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnaWQnLCAnbmV3LWFkZHJlc3MtaWQnKTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIuY2FsbGVkLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIGV2ZW4gaWYga2V5Y2hhaW5zKCkuZ2V0KCkgd291bGQgZmFpbCBmb3IgYSBzZXJ2ZXItbWFuYWdlZCBrZXknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBrZXljaGFpbnNHZXRTdHViLnJlamVjdHMobmV3IEVycm9yKCdrZXkgbm90IGZvdW5kJykpO1xuICAgICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgICAgaWQ6ICd3YWxsZXQtaWQnLFxuICAgICAgICBjb2luOiAnb2ZjJyxcbiAgICAgICAga2V5czogWyd1c2VyLWtleS1pZCcsICdiaXRnby1rZXktaWQnXSxcbiAgICAgICAgdHlwZTogJ3RyYWRpbmcnLFxuICAgICAgICBtdWx0aXNpZ1R5cGU6ICdvbmNoYWluJyxcbiAgICAgICAgZW50ZXJwcmlzZTogJ2VudC1pZCcsXG4gICAgICAgIHVzZXJLZXlTaWduaW5nUmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQobW9ja0JpdEdvLCBvZmNUb2tlbiwgd2FsbGV0RGF0YSk7XG4gICAgICBtb2NrQml0R28ucG9zdC5yZXR1cm5zKG1ha2VQb3N0Q2hhaW4obW9ja0FkZHJlc3NSZXNwb25zZSkpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IG9uVG9rZW46ICdvZmN6ZWMnIH0pO1xuICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdpZCcsICduZXctYWRkcmVzcy1pZCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbm9uLU9GQyB3YWxsZXQgKGV0aCknLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzdGlsbCBmZXRjaCBrZXljaGFpbnMgZm9yIGFkZHJlc3MgdmVyaWZpY2F0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbW9ja0V0aENvaW46IGFueSA9IHtcbiAgICAgICAgZ2V0RmFtaWx5OiBzaW5vbi5zdHViKCkucmV0dXJucygnZXRoJyksXG4gICAgICAgIGlzRVZNOiBzaW5vbi5zdHViKCkucmV0dXJucyh0cnVlKSxcbiAgICAgICAgc3VwcG9ydHNUc3M6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKGZhbHNlKSxcbiAgICAgICAgdXJsOiBzaW5vbi5zdHViKCkucmV0dXJucygnL2FwaS92Mi9ldGgvd2FsbGV0L3dhbGxldC1pZC9hZGRyZXNzJyksXG4gICAgICAgIGlzV2FsbGV0QWRkcmVzczogc2lub24uc3R1YigpLnJlc29sdmVzKHRydWUpLFxuICAgICAgICBrZXljaGFpbnM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHsgZ2V0OiBrZXljaGFpbnNHZXRTdHViIH0pLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnd2FsbGV0LWlkJyxcbiAgICAgICAgY29pbjogJ2V0aCcsXG4gICAgICAgIGtleXM6IFsndXNlci1rZXktaWQnLCAnYmFja3VwLWtleS1pZCcsICdiaXRnby1rZXktaWQnXSxcbiAgICAgICAgY29pblNwZWNpZmljOiB7IHBlbmRpbmdDaGFpbkluaXRpYWxpemF0aW9uOiBmYWxzZSB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQobW9ja0JpdEdvLCBtb2NrRXRoQ29pbiwgd2FsbGV0RGF0YSk7XG4gICAgICBtb2NrQml0R28ucG9zdC5yZXR1cm5zKG1ha2VQb3N0Q2hhaW4oeyBpZDogJ2V0aC1hZGRyLWlkJywgYWRkcmVzczogJzB4YWJjJywgY29pblNwZWNpZmljOiB7fSB9KSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHt9KTtcblxuICAgICAga2V5Y2hhaW5zR2V0U3R1Yi5jYWxsQ291bnQuc2hvdWxkLmVxdWFsKDMpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbWlzc2luZyBvblRva2VuIHBhcmFtZXRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciBPRkMgd2FsbGV0cyB3aGVuIG9uVG9rZW4gaXMgb21pdHRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnd2FsbGV0LWlkJyxcbiAgICAgICAgY29pbjogJ29mYycsXG4gICAgICAgIGtleXM6IFsndXNlci1rZXktaWQnXSxcbiAgICAgICAgdHlwZTogJ3RyYWRpbmcnLFxuICAgICAgICBtdWx0aXNpZ1R5cGU6ICdvbmNoYWluJyxcbiAgICAgICAgZW50ZXJwcmlzZTogJ2VudC1pZCcsXG4gICAgICB9O1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChtb2NrQml0R28sIG9mY1Rva2VuLCB3YWxsZXREYXRhKTtcblxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3Moe30pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ29uVG9rZW4gaXMgYSBtYW5kYXRvcnkgcGFyYW1ldGVyIGZvciBPRkMgd2FsbGV0cycpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19