@bitgo/sdk-core 38.3.0 → 38.5.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/dist/src/bitgo/bitgoBase.d.ts +10 -1
- package/dist/src/bitgo/bitgoBase.d.ts.map +1 -1
- package/dist/src/bitgo/bitgoBase.js +1 -1
- package/dist/src/bitgo/defi/defiVault.d.ts.map +1 -1
- package/dist/src/bitgo/defi/defiVault.js +2 -1
- package/dist/src/bitgo/errors.d.ts +5 -1
- package/dist/src/bitgo/errors.d.ts.map +1 -1
- package/dist/src/bitgo/errors.js +10 -3
- package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/keychains.js +12 -3
- package/dist/src/bitgo/pendingApproval/iPendingApproval.d.ts +3 -0
- package/dist/src/bitgo/pendingApproval/iPendingApproval.d.ts.map +1 -1
- package/dist/src/bitgo/pendingApproval/iPendingApproval.js +1 -1
- package/dist/src/bitgo/pendingApproval/pendingApproval.d.ts.map +1 -1
- package/dist/src/bitgo/pendingApproval/pendingApproval.js +4 -1
- package/dist/src/bitgo/safe/iSafes.d.ts +5 -2
- package/dist/src/bitgo/safe/iSafes.d.ts.map +1 -1
- package/dist/src/bitgo/safe/iSafes.js +1 -1
- package/dist/src/bitgo/safe/safes.d.ts +3 -1
- package/dist/src/bitgo/safe/safes.d.ts.map +1 -1
- package/dist/src/bitgo/safe/safes.js +10 -6
- package/dist/src/bitgo/utils/abstractUtxoCoinUtil.d.ts +2 -0
- package/dist/src/bitgo/utils/abstractUtxoCoinUtil.d.ts.map +1 -1
- package/dist/src/bitgo/utils/abstractUtxoCoinUtil.js +23 -3
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts +3 -9
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTypes.js +1 -1
- package/dist/src/bitgo/v1Wallets.d.ts +170 -0
- package/dist/src/bitgo/v1Wallets.d.ts.map +1 -0
- package/dist/src/bitgo/v1Wallets.js +3 -0
- package/dist/src/bitgo/wallet/iWallet.d.ts +8 -6
- package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallet.js +1 -1
- package/dist/src/bitgo/wallet/iWallets.d.ts +3 -0
- package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallets.js +2 -1
- package/dist/src/bitgo/wallet/wallet.js +15 -14
- package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallets.js +5 -2
- package/dist/test/unit/bitgo/defi/defiVault.js +4 -1
- package/dist/test/unit/bitgo/safe/safes.js +7 -7
- package/dist/test/unit/bitgo/utils/abstractUtxoCoinUtil.js +25 -4
- package/dist/test/unit/bitgo/wallet/prebuildTransactionTypes.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/prebuildTransactionTypes.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/prebuildTransactionTypes.js +20 -0
- package/dist/test/unit/bitgo/wallet/walletsGoAccount.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/walletsGoAccount.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/walletsGoAccount.js +118 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
|
@@ -0,0 +1,20 @@
|
|
|
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
|
+
const assert_1 = __importDefault(require("assert"));
|
|
7
|
+
describe('PrebuildTransactionFeeInfo', () => {
|
|
8
|
+
it('assigns feeInfo on PrebuildTransactionResult', () => {
|
|
9
|
+
const feeInfo = {
|
|
10
|
+
fee: 1000,
|
|
11
|
+
feeString: '1000',
|
|
12
|
+
};
|
|
13
|
+
const prebuild = {
|
|
14
|
+
walletId: 'wallet-id',
|
|
15
|
+
feeInfo,
|
|
16
|
+
};
|
|
17
|
+
assert_1.default.strictEqual(prebuild.feeInfo?.feeString, '1000');
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlYnVpbGRUcmFuc2FjdGlvblR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpdGdvL3dhbGxldC9wcmVidWlsZFRyYW5zYWN0aW9uVHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFJNUIsUUFBUSxDQUFDLDRCQUE0QixFQUFFLEdBQUcsRUFBRTtJQUMxQyxFQUFFLENBQUMsOENBQThDLEVBQUUsR0FBRyxFQUFFO1FBQ3RELE1BQU0sT0FBTyxHQUErQjtZQUMxQyxHQUFHLEVBQUUsSUFBSTtZQUNULFNBQVMsRUFBRSxNQUFNO1NBQ2xCLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBNEQ7WUFDeEUsUUFBUSxFQUFFLFdBQVc7WUFDckIsT0FBTztTQUNSLENBQUM7UUFFRixnQkFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMxRCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgdHlwZSB7IFByZWJ1aWxkVHJhbnNhY3Rpb25GZWVJbmZvLCBQcmVidWlsZFRyYW5zYWN0aW9uUmVzdWx0IH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3dhbGxldC9pV2FsbGV0JztcblxuZGVzY3JpYmUoJ1ByZWJ1aWxkVHJhbnNhY3Rpb25GZWVJbmZvJywgKCkgPT4ge1xuICBpdCgnYXNzaWducyBmZWVJbmZvIG9uIFByZWJ1aWxkVHJhbnNhY3Rpb25SZXN1bHQnLCAoKSA9PiB7XG4gICAgY29uc3QgZmVlSW5mbzogUHJlYnVpbGRUcmFuc2FjdGlvbkZlZUluZm8gPSB7XG4gICAgICBmZWU6IDEwMDAsXG4gICAgICBmZWVTdHJpbmc6ICcxMDAwJyxcbiAgICB9O1xuXG4gICAgY29uc3QgcHJlYnVpbGQ6IFBpY2s8UHJlYnVpbGRUcmFuc2FjdGlvblJlc3VsdCwgJ3dhbGxldElkJyB8ICdmZWVJbmZvJz4gPSB7XG4gICAgICB3YWxsZXRJZDogJ3dhbGxldC1pZCcsXG4gICAgICBmZWVJbmZvLFxuICAgIH07XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocHJlYnVpbGQuZmVlSW5mbz8uZmVlU3RyaW5nLCAnMTAwMCcpO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walletsGoAccount.d.ts","sourceRoot":"","sources":["../../../../../test/unit/bitgo/wallet/walletsGoAccount.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,CAAC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const assert = __importStar(require("assert"));
|
|
37
|
+
const sinon = __importStar(require("sinon"));
|
|
38
|
+
require("should");
|
|
39
|
+
const wallets_1 = require("../../../../src/bitgo/wallet/wallets");
|
|
40
|
+
describe('Wallets - GoAccount (OFC trading) wallet creation', function () {
|
|
41
|
+
let wallets;
|
|
42
|
+
let mockBitGo;
|
|
43
|
+
let mockBaseCoin;
|
|
44
|
+
let mockKeychains;
|
|
45
|
+
let postChain;
|
|
46
|
+
const userPrv = 'xprvSomeUserPrivateKey';
|
|
47
|
+
const userPub = 'xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8';
|
|
48
|
+
beforeEach(function () {
|
|
49
|
+
mockKeychains = {
|
|
50
|
+
create: sinon.stub().returns({ pub: userPub, prv: userPrv }),
|
|
51
|
+
add: sinon.stub().resolves({ id: 'user-key-id', pub: userPub, encryptedPrv: 'encrypted-prv' }),
|
|
52
|
+
};
|
|
53
|
+
const mockWalletData = { id: 'wallet-id', keys: ['user-key-id'] };
|
|
54
|
+
postChain = {
|
|
55
|
+
send: sinon.stub(),
|
|
56
|
+
};
|
|
57
|
+
postChain.send.returns({
|
|
58
|
+
result: sinon.stub().resolves(mockWalletData),
|
|
59
|
+
});
|
|
60
|
+
mockBitGo = {
|
|
61
|
+
post: sinon.stub().returns(postChain),
|
|
62
|
+
encrypt: sinon
|
|
63
|
+
.stub()
|
|
64
|
+
.callsFake(async ({ password, input }) => `encrypted:${password}:${input}`),
|
|
65
|
+
setRequestTracer: sinon.stub(),
|
|
66
|
+
};
|
|
67
|
+
mockBaseCoin = {
|
|
68
|
+
getFamily: sinon.stub().returns('ofc'),
|
|
69
|
+
getChain: sinon.stub().returns('ofc'),
|
|
70
|
+
getDefaultMultisigType: sinon.stub().returns('onchain'),
|
|
71
|
+
supportsTss: sinon.stub().returns(false),
|
|
72
|
+
keychains: sinon.stub().returns(mockKeychains),
|
|
73
|
+
url: sinon.stub().returns('/test/url'),
|
|
74
|
+
};
|
|
75
|
+
wallets = new wallets_1.Wallets(mockBitGo, mockBaseCoin);
|
|
76
|
+
});
|
|
77
|
+
afterEach(function () {
|
|
78
|
+
sinon.restore();
|
|
79
|
+
});
|
|
80
|
+
it('should forward userKeySigningRequired: false in coinSpecific when provided', async function () {
|
|
81
|
+
await wallets.generateWallet({
|
|
82
|
+
label: 'Test OFC Wallet',
|
|
83
|
+
passphrase: 'test-passphrase',
|
|
84
|
+
enterprise: 'enterprise-123',
|
|
85
|
+
passcodeEncryptionCode: 'pce-code',
|
|
86
|
+
type: 'trading',
|
|
87
|
+
userKeySigningRequired: false,
|
|
88
|
+
});
|
|
89
|
+
assert.ok(postChain.send.calledOnce, 'POST /wallet/add should be called once');
|
|
90
|
+
const sentParams = postChain.send.firstCall.args[0];
|
|
91
|
+
sentParams.should.have.property('coinSpecific');
|
|
92
|
+
sentParams.coinSpecific.should.have.property('userKeySigningRequired', false);
|
|
93
|
+
});
|
|
94
|
+
it('should forward userKeySigningRequired: true in coinSpecific when explicitly set', async function () {
|
|
95
|
+
await wallets.generateWallet({
|
|
96
|
+
label: 'Test OFC Wallet',
|
|
97
|
+
passphrase: 'test-passphrase',
|
|
98
|
+
enterprise: 'enterprise-123',
|
|
99
|
+
passcodeEncryptionCode: 'pce-code',
|
|
100
|
+
type: 'trading',
|
|
101
|
+
userKeySigningRequired: true,
|
|
102
|
+
});
|
|
103
|
+
const sentParams = postChain.send.firstCall.args[0];
|
|
104
|
+
sentParams.coinSpecific.should.have.property('userKeySigningRequired', true);
|
|
105
|
+
});
|
|
106
|
+
it('should omit coinSpecific when userKeySigningRequired is not provided', async function () {
|
|
107
|
+
await wallets.generateWallet({
|
|
108
|
+
label: 'Test OFC Wallet',
|
|
109
|
+
passphrase: 'test-passphrase',
|
|
110
|
+
enterprise: 'enterprise-123',
|
|
111
|
+
passcodeEncryptionCode: 'pce-code',
|
|
112
|
+
type: 'trading',
|
|
113
|
+
});
|
|
114
|
+
const sentParams = postChain.send.firstCall.args[0];
|
|
115
|
+
sentParams.should.not.have.property('coinSpecific');
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0c0dvQWNjb3VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby93YWxsZXQvd2FsbGV0c0dvQWNjb3VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyw2Q0FBK0I7QUFDL0Isa0JBQWdCO0FBQ2hCLGtFQUErRDtBQUUvRCxRQUFRLENBQUMsbURBQW1ELEVBQUU7SUFDNUQsSUFBSSxPQUFnQixDQUFDO0lBQ3JCLElBQUksU0FBYyxDQUFDO0lBQ25CLElBQUksWUFBaUIsQ0FBQztJQUN0QixJQUFJLGFBQWtCLENBQUM7SUFDdkIsSUFBSSxTQUFjLENBQUM7SUFFbkIsTUFBTSxPQUFPLEdBQUcsd0JBQXdCLENBQUM7SUFDekMsTUFBTSxPQUFPLEdBQ1gsaUhBQWlILENBQUM7SUFFcEgsVUFBVSxDQUFDO1FBQ1QsYUFBYSxHQUFHO1lBQ2QsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUM1RCxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLENBQUM7U0FDL0YsQ0FBQztRQUVGLE1BQU0sY0FBYyxHQUFHLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1FBRWxFLFNBQVMsR0FBRztZQUNWLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFO1NBQ25CLENBQUM7UUFDRixTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUNyQixNQUFNLEVBQUUsS0FB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QUFLO1FBQzlFLE1BQU0sT0FBTyxDQUFDLGNBQWMsQ0FBQztZQUMzQixLQUFLLEVBQUUsaUJBQWlCO1lBQ3hCLFVBQVUsRUFBRSxpQkFBaUI7WUFDN0IsVUFBVSxFQUFFLGdCQUFnQjtZQUM1QixzQkFBc0IsRUFBRSxVQUFVO1lBQ2xDLElBQUksRUFBRSxTQUFTO1NBQ2hCLENBQUMsQ0FBQztRQUVILE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwRCxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3RELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCAnc2hvdWxkJztcbmltcG9ydCB7IFdhbGxldHMgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvYml0Z28vd2FsbGV0L3dhbGxldHMnO1xuXG5kZXNjcmliZSgnV2FsbGV0cyAtIEdvQWNjb3VudCAoT0ZDIHRyYWRpbmcpIHdhbGxldCBjcmVhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IHdhbGxldHM6IFdhbGxldHM7XG4gIGxldCBtb2NrQml0R286IGFueTtcbiAgbGV0IG1vY2tCYXNlQ29pbjogYW55O1xuICBsZXQgbW9ja0tleWNoYWluczogYW55O1xuICBsZXQgcG9zdENoYWluOiBhbnk7XG5cbiAgY29uc3QgdXNlclBydiA9ICd4cHJ2U29tZVVzZXJQcml2YXRlS2V5JztcbiAgY29uc3QgdXNlclB1YiA9XG4gICAgJ3hwdWI2NjFNeU13QXFSYmNGdFhnUzVzWUpBQnFxRzlZTG1DNFExUmRhcDlnU0U4TnF0d3liR2hlUFkyZ1oyOUVTRmpxSm9DdTFSdXBqZThZdEdxc2VmRDI2NVRNZzd1c1VERmRwNlcxRUdNY2V0OCc7XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgbW9ja0tleWNoYWlucyA9IHtcbiAgICAgIGNyZWF0ZTogc2lub24uc3R1YigpLnJldHVybnMoeyBwdWI6IHVzZXJQdWIsIHBydjogdXNlclBydiB9KSxcbiAgICAgIGFkZDogc2lub24uc3R1YigpLnJlc29sdmVzKHsgaWQ6ICd1c2VyLWtleS1pZCcsIHB1YjogdXNlclB1YiwgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLXBydicgfSksXG4gICAgfTtcblxuICAgIGNvbnN0IG1vY2tXYWxsZXREYXRhID0geyBpZDogJ3dhbGxldC1pZCcsIGtleXM6IFsndXNlci1rZXktaWQnXSB9O1xuXG4gICAgcG9zdENoYWluID0ge1xuICAgICAgc2VuZDogc2lub24uc3R1YigpLFxuICAgIH07XG4gICAgcG9zdENoYWluLnNlbmQucmV0dXJucyh7XG4gICAgICByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhtb2NrV2FsbGV0RGF0YSksXG4gICAgfSk7XG5cbiAgICBtb2NrQml0R28gPSB7XG4gICAgICBwb3N0OiBzaW5vbi5zdHViKCkucmV0dXJucyhwb3N0Q2hhaW4pLFxuICAgICAgZW5jcnlwdDogc2lub25cbiAgICAgICAgLnN0dWIoKVxuICAgICAgICAuY2FsbHNGYWtlKFxuICAgICAgICAgIGFzeW5jICh7IHBhc3N3b3JkLCBpbnB1dCB9OiB7IHBhc3N3b3JkOiBzdHJpbmc7IGlucHV0OiBzdHJpbmcgfSkgPT4gYGVuY3J5cHRlZDoke3Bhc3N3b3JkfToke2lucHV0fWBcbiAgICAgICAgKSxcbiAgICAgIHNldFJlcXVlc3RUcmFjZXI6IHNpbm9uLnN0dWIoKSxcbiAgICB9O1xuXG4gICAgbW9ja0Jhc2VDb2luID0ge1xuICAgICAgZ2V0RmFtaWx5OiBzaW5vbi5zdHViKCkucmV0dXJucygnb2ZjJyksXG4gICAgICBnZXRDaGFpbjogc2lub24uc3R1YigpLnJldHVybnMoJ29mYycpLFxuICAgICAgZ2V0RGVmYXVsdE11bHRpc2lnVHlwZTogc2lub24uc3R1YigpLnJldHVybnMoJ29uY2hhaW4nKSxcbiAgICAgIHN1cHBvcnRzVHNzOiBzaW5vbi5zdHViKCkucmV0dXJucyhmYWxzZSksXG4gICAgICBrZXljaGFpbnM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKG1vY2tLZXljaGFpbnMpLFxuICAgICAgdXJsOiBzaW5vbi5zdHViKCkucmV0dXJucygnL3Rlc3QvdXJsJyksXG4gICAgfTtcblxuICAgIHdhbGxldHMgPSBuZXcgV2FsbGV0cyhtb2NrQml0R28sIG1vY2tCYXNlQ29pbik7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZvcndhcmQgdXNlcktleVNpZ25pbmdSZXF1aXJlZDogZmFsc2UgaW4gY29pblNwZWNpZmljIHdoZW4gcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgd2FsbGV0cy5nZW5lcmF0ZVdhbGxldCh7XG4gICAgICBsYWJlbDogJ1Rlc3QgT0ZDIFdhbGxldCcsXG4gICAgICBwYXNzcGhyYXNlOiAndGVzdC1wYXNzcGhyYXNlJyxcbiAgICAgIGVudGVycHJpc2U6ICdlbnRlcnByaXNlLTEyMycsXG4gICAgICBwYXNzY29kZUVuY3J5cHRpb25Db2RlOiAncGNlLWNvZGUnLFxuICAgICAgdHlwZTogJ3RyYWRpbmcnLFxuICAgICAgdXNlcktleVNpZ25pbmdSZXF1aXJlZDogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBhc3NlcnQub2socG9zdENoYWluLnNlbmQuY2FsbGVkT25jZSwgJ1BPU1QgL3dhbGxldC9hZGQgc2hvdWxkIGJlIGNhbGxlZCBvbmNlJyk7XG4gICAgY29uc3Qgc2VudFBhcmFtcyA9IHBvc3RDaGFpbi5zZW5kLmZpcnN0Q2FsbC5hcmdzWzBdO1xuICAgIHNlbnRQYXJhbXMuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2NvaW5TcGVjaWZpYycpO1xuICAgIHNlbnRQYXJhbXMuY29pblNwZWNpZmljLnNob3VsZC5oYXZlLnByb3BlcnR5KCd1c2VyS2V5U2lnbmluZ1JlcXVpcmVkJywgZmFsc2UpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZvcndhcmQgdXNlcktleVNpZ25pbmdSZXF1aXJlZDogdHJ1ZSBpbiBjb2luU3BlY2lmaWMgd2hlbiBleHBsaWNpdGx5IHNldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhd2FpdCB3YWxsZXRzLmdlbmVyYXRlV2FsbGV0KHtcbiAgICAgIGxhYmVsOiAnVGVzdCBPRkMgV2FsbGV0JyxcbiAgICAgIHBhc3NwaHJhc2U6ICd0ZXN0LXBhc3NwaHJhc2UnLFxuICAgICAgZW50ZXJwcmlzZTogJ2VudGVycHJpc2UtMTIzJyxcbiAgICAgIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6ICdwY2UtY29kZScsXG4gICAgICB0eXBlOiAndHJhZGluZycsXG4gICAgICB1c2VyS2V5U2lnbmluZ1JlcXVpcmVkOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2VudFBhcmFtcyA9IHBvc3RDaGFpbi5zZW5kLmZpcnN0Q2FsbC5hcmdzWzBdO1xuICAgIHNlbnRQYXJhbXMuY29pblNwZWNpZmljLnNob3VsZC5oYXZlLnByb3BlcnR5KCd1c2VyS2V5U2lnbmluZ1JlcXVpcmVkJywgdHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgb21pdCBjb2luU3BlY2lmaWMgd2hlbiB1c2VyS2V5U2lnbmluZ1JlcXVpcmVkIGlzIG5vdCBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhd2FpdCB3YWxsZXRzLmdlbmVyYXRlV2FsbGV0KHtcbiAgICAgIGxhYmVsOiAnVGVzdCBPRkMgV2FsbGV0JyxcbiAgICAgIHBhc3NwaHJhc2U6ICd0ZXN0LXBhc3NwaHJhc2UnLFxuICAgICAgZW50ZXJwcmlzZTogJ2VudGVycHJpc2UtMTIzJyxcbiAgICAgIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6ICdwY2UtY29kZScsXG4gICAgICB0eXBlOiAndHJhZGluZycsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzZW50UGFyYW1zID0gcG9zdENoYWluLnNlbmQuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgc2VudFBhcmFtcy5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ2NvaW5TcGVjaWZpYycpO1xuICB9KTtcbn0pO1xuIl19
|