PHP WebShell
Текущая директория: /opt/BitGoJS/modules/sdk-coin-near/dist/test/unit/transactionBuilder
Просмотр файла: stakingActivateBuilder.js
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const should_1 = __importDefault(require("should"));
const testData = __importStar(require("../../resources/near"));
const getBuilderFactory_1 = require("../getBuilderFactory");
const sdk_core_1 = require("@bitgo/sdk-core");
const near_1 = require("../../resources/near");
describe('Near Staking Activate Builder', () => {
const factory = (0, getBuilderFactory_1.getBuilderFactory)('tnear');
const gas = '125000000000000';
const amount = '1000000'; // amount to be staked in yoctos
describe('Succeed', () => {
it('build a create and delegate staking signed tx', async () => {
const txBuilder = factory.getStakingActivateBuilder();
txBuilder
.amount(amount)
.gas(gas)
.sender(testData.accounts.account1.address, testData.accounts.account1.publicKey)
.receiverId(near_1.validatorContractAddress)
.recentBlockHash(testData.blockHash.block1)
.nonce(1);
txBuilder.sign({ key: testData.accounts.account1.secretKey });
const tx = await txBuilder.build();
tx.inputs.length.should.equal(1);
tx.inputs[0].should.deepEqual({
address: testData.accounts.account1.address,
value: amount,
coin: 'tnear',
});
tx.outputs.length.should.equal(1);
tx.outputs[0].should.deepEqual({
address: near_1.validatorContractAddress,
value: amount,
coin: 'tnear',
});
should_1.default.equal(tx.type, sdk_core_1.TransactionType.StakingActivate);
const rawTx = tx.toBroadcastFormat();
should_1.default.equal(rawTx, testData.rawTx.stakingActivate.signed);
const txJson = tx.toJson();
txJson.should.have.properties(['id', 'signerId', 'publicKey', 'nonce', 'actions', 'signature']);
txJson.id.should.equal('GpiLLaGs2Fk2bd7SQvhkJaZjj74UnPPdF7cUa9pw15je');
txJson.signerId.should.equal(testData.accounts.account1.address);
txJson.publicKey.should.equal(testData.accounts.account1.publicKeyBase58);
txJson.nonce.should.equal(1);
txJson.receiverId.should.equal('lavenderfive.pool.f863973.m0');
txJson.actions.should.deepEqual([
{
functionCall: {
methodName: 'deposit_and_stake',
args: {},
gas: '125000000000000',
deposit: '1000000',
},
},
]);
});
it('build a create and delegate staking unsigned tx', async () => {
const txBuilder = factory.getStakingActivateBuilder();
txBuilder
.amount(amount)
.gas(gas)
.sender(testData.accounts.account1.address, testData.accounts.account1.publicKey)
.receiverId(near_1.validatorContractAddress)
.recentBlockHash(testData.blockHash.block1)
.nonce(1);
const tx = await txBuilder.build();
tx.inputs.length.should.equal(1);
tx.inputs[0].should.deepEqual({
address: testData.accounts.account1.address,
value: amount,
coin: 'tnear',
});
tx.outputs.length.should.equal(1);
tx.outputs[0].should.deepEqual({
address: near_1.validatorContractAddress,
value: amount,
coin: 'tnear',
});
should_1.default.equal(tx.type, sdk_core_1.TransactionType.StakingActivate);
const rawTx = tx.toBroadcastFormat();
should_1.default.equal(rawTx, testData.rawTx.stakingActivate.unsigned);
});
it('should fail to create and delegate staking with missing gas', async () => {
const txBuilder = factory.getStakingActivateBuilder();
txBuilder
.amount(amount)
.sender(testData.accounts.account1.address, testData.accounts.account1.publicKey)
.receiverId(near_1.validatorContractAddress)
.recentBlockHash(testData.blockHash.block1)
.nonce(1);
await txBuilder.build().should.be.rejectedWith('gas is required before building staking activate');
});
it('should fail to create and delegate staking with missing amount', async () => {
const txBuilder = factory.getStakingActivateBuilder();
txBuilder
.gas(gas)
.sender(testData.accounts.account1.address, testData.accounts.account1.publicKey)
.receiverId(near_1.validatorContractAddress)
.recentBlockHash(testData.blockHash.block1)
.nonce(1);
await txBuilder.build().should.be.rejectedWith('amount is required before building staking activate');
});
it('build from an unsigned staking activate', async () => {
const txBuilder = factory.from(testData.rawTx.stakingActivate.unsigned);
const tx = await txBuilder.build();
tx.inputs.length.should.equal(1);
tx.inputs[0].should.deepEqual({
address: testData.accounts.account1.address,
value: '1000000',
coin: 'tnear',
});
tx.outputs.length.should.equal(1);
tx.outputs[0].should.deepEqual({
address: 'lavenderfive.pool.f863973.m0',
value: '1000000',
coin: 'tnear',
});
tx.id.should.equal('GpiLLaGs2Fk2bd7SQvhkJaZjj74UnPPdF7cUa9pw15je');
});
it('build from an signed staking activate', async () => {
const txBuilder = factory.from(testData.rawTx.stakingActivate.signed);
const tx = await txBuilder.build();
tx.inputs.length.should.equal(1);
tx.inputs[0].should.deepEqual({
address: testData.accounts.account1.address,
value: '1000000',
coin: 'tnear',
});
tx.outputs.length.should.equal(1);
tx.outputs[0].should.deepEqual({
address: 'lavenderfive.pool.f863973.m0',
value: '1000000',
coin: 'tnear',
});
tx.id.should.equal('GpiLLaGs2Fk2bd7SQvhkJaZjj74UnPPdF7cUa9pw15je');
const txJson = tx.toJson();
txJson.should.have.properties(['id', 'signerId', 'publicKey', 'nonce', 'actions', 'signature']);
txJson.id.should.equal('GpiLLaGs2Fk2bd7SQvhkJaZjj74UnPPdF7cUa9pw15je');
txJson.signerId.should.equal(testData.accounts.account1.address);
txJson.publicKey.should.equal(testData.accounts.account1.publicKeyBase58);
txJson.nonce.should.equal(1);
txJson.receiverId.should.equal('lavenderfive.pool.f863973.m0');
txJson.actions.should.deepEqual([
{
functionCall: {
methodName: 'deposit_and_stake',
args: {},
gas: '125000000000000',
deposit: '1000000',
},
},
]);
});
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZ0FjdGl2YXRlQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvc3Rha2luZ0FjdGl2YXRlQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUU1QiwrREFBaUQ7QUFDakQsNERBQXlEO0FBQ3pELDhDQUFrRDtBQUNsRCwrQ0FBZ0U7QUFFaEUsUUFBUSxDQUFDLCtCQUErQixFQUFFLEdBQUcsRUFBRTtJQUM3QyxNQUFNLE9BQU8sR0FBRyxJQUFBLHFDQUFpQixFQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLE1BQU0sR0FBRyxHQUFHLGlCQUFpQixDQUFDO0lBQzlCLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDLGdDQUFnQztJQUUxRCxRQUFRLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtRQUN2QixFQUFFLENBQUMsK0NBQStDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDN0QsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFDdEQsU0FBUztpQkFDTixNQUFNLENBQUMsTUFBTSxDQUFDO2lCQUNkLEdBQUcsQ0FBQyxHQUFHLENBQUM7aUJBQ1IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7aUJBQ2hGLFVBQVUsQ0FBQywrQkFBd0IsQ0FBQztpQkFDcEMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO2lCQUMxQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDWixTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFD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QUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7Z0JBQzlCO29CQUNFLFlBQVksRUFBRTt3QkFDWixVQUFVLEVBQUUsbUJBQW1CO3dCQUMvQixJQUFJLEVBQUUsRUFBRTt3QkFDUixHQUFHLEVBQUUsaUJBQWlCO3dCQUN0QixPQUFPLEVBQUUsU0FBUztxQkFDbkI7aUJBQ0Y7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5cbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4uLy4uL3Jlc291cmNlcy9uZWFyJztcbmltcG9ydCB7IGdldEJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi4vZ2V0QnVpbGRlckZhY3RvcnknO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IHZhbGlkYXRvckNvbnRyYWN0QWRkcmVzcyB9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9uZWFyJztcblxuZGVzY3JpYmUoJ05lYXIgU3Rha2luZyBBY3RpdmF0ZSBCdWlsZGVyJywgKCkgPT4ge1xuICBjb25zdCBmYWN0b3J5ID0gZ2V0QnVpbGRlckZhY3RvcnkoJ3RuZWFyJyk7XG4gIGNvbnN0IGdhcyA9ICcxMjUwMDAwMDAwMDAwMDAnO1xuICBjb25zdCBhbW91bnQgPSAnMTAwMDAwMCc7IC8vIGFtb3VudCB0byBiZSBzdGFrZWQgaW4geW9jdG9zXG5cbiAgZGVzY3JpYmUoJ1N1Y2NlZWQnLCAoKSA9PiB7XG4gICAgaXQoJ2J1aWxkIGEgY3JlYXRlIGFuZCBkZWxlZ2F0ZSBzdGFraW5nIHNpZ25lZCB0eCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0U3Rha2luZ0FjdGl2YXRlQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyXG4gICAgICAgIC5hbW91bnQoYW1vdW50KVxuICAgICAgICAuZ2FzKGdhcylcbiAgICAgICAgLnNlbmRlcih0ZXN0RGF0YS5hY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzLCB0ZXN0RGF0YS5hY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXkpXG4gICAgICAgIC5yZWNlaXZlcklkKHZhbGlkYXRvckNvbnRyYWN0QWRkcmVzcylcbiAgICAgICAgLnJlY2VudEJsb2NrSGFzaCh0ZXN0RGF0YS5ibG9ja0hhc2guYmxvY2sxKVxuICAgICAgICAubm9uY2UoMSk7XG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuYWNjb3VudHMuYWNjb3VudDEuc2VjcmV0S2V5IH0pO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHR4LmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgdHguaW5wdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5hY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzLFxuICAgICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgICBjb2luOiAndG5lYXInLFxuICAgICAgfSk7XG4gICAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICB0eC5vdXRwdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiB2YWxpZGF0b3JDb250cmFjdEFkZHJlc3MsXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46ICd0bmVhcicsXG4gICAgICB9KTtcblxuICAgICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGUpO1xuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5yYXdUeC5zdGFraW5nQWN0aXZhdGUuc2lnbmVkKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgdHhKc29uLnNob3VsZC5oYXZlLnByb3BlcnRpZXMoWydpZCcsICdzaWduZXJJZCcsICdwdWJsaWNLZXknLCAnbm9uY2UnLCAnYWN0aW9ucycsICdzaWduYXR1cmUnXSk7XG4gICAgICB0eEpzb24uaWQuc2hvdWxkLmVxdWFsKCdHcGlMTGFHczJGazJiZDdTUXZoa0phWmpqNzRVblBQZEY3Y1VhOXB3MTVqZScpO1xuICAgICAgdHhKc29uLnNpZ25lcklkLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5hY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzKTtcbiAgICAgIHR4SnNvbi5wdWJsaWNLZXkuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmFjY291bnRzLmFjY291bnQxLnB1YmxpY0tleUJhc2U1OCk7XG4gICAgICB0eEpzb24ubm9uY2Uuc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgdHhKc29uLnJlY2VpdmVySWQuc2hvdWxkLmVxdWFsKCdsYXZlbmRlcmZpdmUucG9vbC5mODYzOTczLm0wJyk7XG4gICAgICB0eEpzb24uYWN0aW9ucy5zaG91bGQuZGVlcEVxdWFsKFtcbiAgICAgICAge1xuICAgICAgICAgIGZ1bmN0aW9uQ2FsbDoge1xuICAgICAgICAgICAgbWV0aG9kTmFtZTogJ2RlcG9zaXRfYW5kX3N0YWtlJyxcbiAgICAgICAgICAgIGFyZ3M6IHt9LFxuICAgICAgICAgICAgZ2FzOiAnMTI1MDAwMDAwMDAwMDAwJyxcbiAgICAgICAgICAgIGRlcG9zaXQ6ICcxMDAwMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYnVpbGQgYSBjcmVhdGUgYW5kIGRlbGVnYXRlIHN0YWtpbmcgdW5zaWduZWQgdHgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFN0YWtpbmdBY3RpdmF0ZUJ1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlclxuICAgICAgICAuYW1vdW50KGFtb3VudClcbiAgICAgICAgLmdhcyhnYXMpXG4gICAgICAgIC5zZW5kZXIodGVzdERhdGEuYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcywgdGVzdERhdGEuYWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5KVxuICAgICAgICAucmVjZWl2ZXJJZCh2YWxpZGF0b3JDb250cmFjdEFkZHJlc3MpXG4gICAgICAgIC5yZWNlbnRCbG9ja0hhc2godGVzdERhdGEuYmxvY2tIYXNoLmJsb2NrMSlcbiAgICAgICAgLm5vbmNlKDEpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHR4LmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgdHguaW5wdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5hY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzLFxuICAgICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgICBjb2luOiAndG5lYXInLFxuICAgICAgfSk7XG4gICAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICB0eC5vdXRwdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiB2YWxpZGF0b3JDb250cmFjdEFkZHJlc3MsXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46ICd0bmVhcicsXG4gICAgICB9KTtcblxuICAgICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGUpO1xuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5yYXdUeC5zdGFraW5nQWN0aXZhdGUudW5zaWduZWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGNyZWF0ZSBhbmQgZGVsZWdhdGUgc3Rha2luZyB3aXRoIG1pc3NpbmcgZ2FzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRTdGFraW5nQWN0aXZhdGVCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXJcbiAgICAgICAgLmFtb3VudChhbW91bnQpXG4gICAgICAgIC5zZW5kZXIodGVzdERhdGEuYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcywgdGVzdERhdGEuYWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5KVxuICAgICAgICAucmVjZWl2ZXJJZCh2YWxpZGF0b3JDb250cmFjdEFkZHJlc3MpXG4gICAgICAgIC5yZWNlbnRCbG9ja0hhc2godGVzdERhdGEuYmxvY2tIYXNoLmJsb2NrMSlcbiAgICAgICAgLm5vbmNlKDEpO1xuICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnZ2FzIGlzIHJlcXVpcmVkIGJlZm9yZSBidWlsZGluZyBzdGFraW5nIGFjdGl2YXRlJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gY3JlYXRlIGFuZCBkZWxlZ2F0ZSBzdGFraW5nIHdpdGggbWlzc2luZyBhbW91bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFN0YWtpbmdBY3RpdmF0ZUJ1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlclxuICAgICAgICAuZ2FzKGdhcylcbiAgICAgICAgLnNlbmRlcih0ZXN0RGF0YS5hY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzLCB0ZXN0RGF0YS5hY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXkpXG4gICAgICAgIC5yZWNlaXZlcklkKHZhbGlkYXRvckNvbnRyYWN0QWRkcmVzcylcbiAgICAgICAgLnJlY2VudEJsb2NrSGFzaCh0ZXN0RGF0YS5ibG9ja0hhc2guYmxvY2sxKVxuICAgICAgICAubm9uY2UoMSk7XG4gICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdhbW91bnQgaXMgcmVxdWlyZWQgYmVmb3JlIGJ1aWxkaW5nIHN0YWtpbmcgYWN0aXZhdGUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdidWlsZCBmcm9tIGFuIHVuc2lnbmVkIHN0YWtpbmcgYWN0aXZhdGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEucmF3VHguc3Rha2luZ0FjdGl2YXRlLnVuc2lnbmVkKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICB0eC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIHR4LmlucHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogdGVzdERhdGEuYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyxcbiAgICAgICAgdmFsdWU6ICcxMDAwMDAwJyxcbiAgICAgICAgY29pbjogJ3RuZWFyJyxcbiAgICAgIH0pO1xuICAgICAgdHgub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgdHgub3V0cHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogJ2xhdmVuZGVyZml2ZS5wb29sLmY4NjM5NzMubTAnLFxuICAgICAgICB2YWx1ZTogJzEwMDAwMDAnLFxuICAgICAgICBjb2luOiAndG5lYXInLFxuICAgICAgfSk7XG4gICAgICB0eC5pZC5zaG91bGQuZXF1YWwoJ0dwaUxMYUdzMkZrMmJkN1NRdmhrSmFaamo3NFVuUFBkRjdjVWE5cHcxNWplJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnYnVpbGQgZnJvbSBhbiBzaWduZWQgc3Rha2luZyBhY3RpdmF0ZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0ZXN0RGF0YS5yYXdUeC5zdGFraW5nQWN0aXZhdGUuc2lnbmVkKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICB0eC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIHR4LmlucHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogdGVzdERhdGEuYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyxcbiAgICAgICAgdmFsdWU6ICcxMDAwMDAwJyxcbiAgICAgICAgY29pbjogJ3RuZWFyJyxcbiAgICAgIH0pO1xuICAgICAgdHgub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgdHgub3V0cHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogJ2xhdmVuZGVyZml2ZS5wb29sLmY4NjM5NzMubTAnLFxuICAgICAgICB2YWx1ZTogJzEwMDAwMDAnLFxuICAgICAgICBjb2luOiAndG5lYXInLFxuICAgICAgfSk7XG4gICAgICB0eC5pZC5zaG91bGQuZXF1YWwoJ0dwaUxMYUdzMkZrMmJkN1NRdmhrSmFaamo3NFVuUFBkRjdjVWE5cHcxNWplJyk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHR4SnNvbi5zaG91bGQuaGF2ZS5wcm9wZXJ0aWVzKFsnaWQnLCAnc2lnbmVySWQnLCAncHVibGljS2V5JywgJ25vbmNlJywgJ2FjdGlvbnMnLCAnc2lnbmF0dXJlJ10pO1xuICAgICAgdHhKc29uLmlkLnNob3VsZC5lcXVhbCgnR3BpTExhR3MyRmsyYmQ3U1F2aGtKYVpqajc0VW5QUGRGN2NVYTlwdzE1amUnKTtcbiAgICAgIHR4SnNvbi5zaWduZXJJZC5zaG91bGQuZXF1YWwodGVzdERhdGEuYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyk7XG4gICAgICB0eEpzb24ucHVibGljS2V5LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5hY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXlCYXNlNTgpO1xuICAgICAgdHhKc29uLm5vbmNlLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIHR4SnNvbi5yZWNlaXZlcklkLnNob3VsZC5lcXVhbCgnbGF2ZW5kZXJmaXZlLnBvb2wuZjg2Mzk3My5tMCcpO1xuICAgICAgdHhKc29uLmFjdGlvbnMuc2hvdWxkLmRlZXBFcXVhbChbXG4gICAgICAgIHtcbiAgICAgICAgICBmdW5jdGlvbkNhbGw6IHtcbiAgICAgICAgICAgIG1ldGhvZE5hbWU6ICdkZXBvc2l0X2FuZF9zdGFrZScsXG4gICAgICAgICAgICBhcmdzOiB7fSxcbiAgICAgICAgICAgIGdhczogJzEyNTAwMDAwMDAwMDAwMCcsXG4gICAgICAgICAgICBkZXBvc2l0OiAnMTAwMDAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19Выполнить команду
Для локальной разработки. Не используйте в интернете!