PHP WebShell
Текущая директория: /opt/BitGoJS/modules/sdk-coin-algo/dist/test/unit/lib/transactionBuilder
Просмотр файла: transactionBuilderFactory.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 sdk_core_1 = require("@bitgo/sdk-core");
const statics_1 = require("@bitgo/statics");
const lib_1 = require("../../../../src/lib");
const AlgoResources = __importStar(require("../../../fixtures/resources"));
describe('Algo Transaction Builder Factory', () => {
const factory = new lib_1.TransactionBuilderFactory(statics_1.coins.get('algo'));
const { rawTx } = AlgoResources;
it('should parse a key registration txn and return a key registration builder', () => {
(0, should_1.default)(factory.from(rawTx.keyReg.unsigned)).instanceOf(lib_1.KeyRegistrationBuilder);
(0, should_1.default)(factory.from(rawTx.keyReg.signed)).instanceOf(lib_1.KeyRegistrationBuilder);
});
it('should parse a transfer txn and return a transfer builder', () => {
(0, should_1.default)(factory.from(rawTx.transfer.unsigned)).instanceOf(lib_1.TransferBuilder);
(0, should_1.default)(factory.from(rawTx.transfer.signed)).instanceOf(lib_1.TransferBuilder);
});
it('should parse a asset transfer txn and return a asset transfer builder', () => {
(0, should_1.default)(factory.from(rawTx.transfer.unsigned)).instanceOf(lib_1.TransferBuilder);
(0, should_1.default)(factory.from(rawTx.transfer.signed)).instanceOf(lib_1.TransferBuilder);
});
describe('serialized transactions', () => {
it('a non signed keyreg transaction from serialized', async () => {
const builder = factory.from(AlgoResources.rawTx.keyReg.unsigned);
builder.numberOfRequiredSigners(1).sign({ key: AlgoResources.accounts.account1.prvKey });
const tx = await builder.build();
should_1.default.equal(tx.type, sdk_core_1.TransactionType.WalletInitialization);
should_1.default.equal(Buffer.from(tx.toBroadcastFormat()).toString('hex'), AlgoResources.rawTx.keyReg.signed);
});
it('a signed keyreg transaction from serialized', async () => {
const builder = factory.from(AlgoResources.rawTx.keyReg.signed);
const tx = await builder.build();
should_1.default.equal(tx.type, sdk_core_1.TransactionType.WalletInitialization);
should_1.default.equal(Buffer.from(tx.toBroadcastFormat()).toString('hex'), AlgoResources.rawTx.keyReg.signed);
});
it('a non signed keyreg transaction serialized with old sdk', async () => {
const decodedTx = lib_1.algoUtils.decodeAlgoTxn(AlgoResources.rawTx.keyReg.oldSdkUnsigned);
should_1.default.equal(Buffer.from(decodedTx.rawTransaction).toString('base64'), AlgoResources.rawTx.keyReg.oldSdkUnsigned);
});
it('second non signed keyreg transaction serialized with old sdk', () => {
const tx = lib_1.algoUtils.decodeAlgoTxn(AlgoResources.rawTx.keyReg.oldSdkUnsigned2);
should_1.default.equal(tx.txn.type, 'keyreg');
should_1.default.equal(tx.txn.fee, 1000);
should_1.default.equal(tx.txn.voteFirst, 1);
should_1.default.equal(tx.txn.voteLast, 6000001);
should_1.default.equal(tx.txn.voteKeyDilution, 10000);
should_1.default.equal(tx.signed, false);
});
it('a signed keyreg transaction serialized with old sdk', async () => {
const decodedTx = lib_1.algoUtils.decodeAlgoTxn(AlgoResources.rawTx.keyReg.oldSdkSigned);
decodedTx.signed.should.be.true();
decodedTx.txn.fee.should.equals(1050);
decodedTx.txn.should.have.property('type');
decodedTx.txn.type.should.equals('keyreg');
decodedTx.txn.should.have.property('nonParticipation');
decodedTx.txn.nonParticipation.should.be.true();
});
it('a multisigned transfer transaction from serialized', async () => {
const builder = factory.from(AlgoResources.rawTx.transfer.multisig);
const tx = await builder.build();
should_1.default.equal(Buffer.from(tx.toBroadcastFormat()).toString('hex'), AlgoResources.rawTx.transfer.multisig);
should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
});
it('a signed transfer transaction from serialized', async () => {
const builder = factory.from(AlgoResources.rawTx.transfer.signed);
const tx = await builder.build();
should_1.default.equal(Buffer.from(tx.toBroadcastFormat()).toString('hex'), AlgoResources.rawTx.transfer.signed);
should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
});
it('a halfsigned transfer transaction from serialized', async () => {
const builder = factory.from(AlgoResources.rawTx.transfer.halfSigned);
builder
.numberOfRequiredSigners(2)
.setSigners([AlgoResources.accounts.account1.address, AlgoResources.accounts.account3.address])
.sign({ key: AlgoResources.accounts.account3.prvKey });
const tx = await builder.build();
should_1.default.equal(Buffer.from(tx.toBroadcastFormat()).toString('hex'), AlgoResources.rawTx.transfer.multisig);
should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
});
it('a unsigned transfer transaction from serialized', async () => {
const builder = factory.from(AlgoResources.rawTx.transfer.unsigned);
builder.numberOfRequiredSigners(1).sign({ key: AlgoResources.accounts.account1.prvKey });
const tx = await builder.build();
should_1.default.equal(Buffer.from(tx.toBroadcastFormat()).toString('hex'), AlgoResources.rawTx.transfer.signed);
should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
});
});
it('an unsigned transfer transaction from serialized', async () => {
const builder = factory.from(AlgoResources.rawTx.assetTransfer.unsigned);
const tx = await builder.build();
should_1.default.equal(Buffer.from(tx.toBroadcastFormat()).toString('hex'), AlgoResources.rawTx.assetTransfer.unsigned);
should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
});
it('a signed asset transfer transaction from serialized', async () => {
const builder = factory.from(AlgoResources.rawTx.assetTransfer.signed);
const tx = await builder.build();
should_1.default.equal(Buffer.from(tx.toBroadcastFormat()).toString('hex'), AlgoResources.rawTx.assetTransfer.signed);
should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9saWIvdHJhbnNhY3Rpb25CdWlsZGVyL3RyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsOENBQWtEO0FBQ2xELDRDQUF1QztBQUV2Qyw2Q0FBb0g7QUFDcEgsMkVBQTZEO0FBQzdELFFBQVEsQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7SUFDaEQsTUFBTSxPQUFPLEdBQUcsSUFBSSwrQkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDakUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLGFBQWEsQ0FBQztJQUVoQyxFQUFFLENBQUMsMkVBQTJFLEVBQUUsR0FBRyxFQUFFO1FBQ25GLElBQUEsZ0JBQU0sRUFBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsNEJBQXNCLENBQUMsQ0FBQztRQUMvRSxJQUFBLGdCQUFNLEVBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLDRCQUFzQixDQUFDLENBQUM7SUFDL0UsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMkRBQTJELEVBQUUsR0FBRyxFQUFFO1FBQ25FLElBQUEsZ0JBQU0sRUFBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMscUJBQWUsQ0FBQyxDQUFDO1FBQzFFLElBQUEsZ0JBQU0sRUFBQyxPQUFPLENBQUMsSUFBSSxD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QUN2RSxNQUFNLEVBQUUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVHLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsMEJBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuXG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LCBUcmFuc2ZlckJ1aWxkZXIsIEtleVJlZ2lzdHJhdGlvbkJ1aWxkZXIsIGFsZ29VdGlscyB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9saWInO1xuaW1wb3J0ICogYXMgQWxnb1Jlc291cmNlcyBmcm9tICcuLi8uLi8uLi9maXh0dXJlcy9yZXNvdXJjZXMnO1xuZGVzY3JpYmUoJ0FsZ28gVHJhbnNhY3Rpb24gQnVpbGRlciBGYWN0b3J5JywgKCkgPT4ge1xuICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCdhbGdvJykpO1xuICBjb25zdCB7IHJhd1R4IH0gPSBBbGdvUmVzb3VyY2VzO1xuXG4gIGl0KCdzaG91bGQgcGFyc2UgYSBrZXkgcmVnaXN0cmF0aW9uIHR4biBhbmQgcmV0dXJuIGEga2V5IHJlZ2lzdHJhdGlvbiBidWlsZGVyJywgKCkgPT4ge1xuICAgIHNob3VsZChmYWN0b3J5LmZyb20ocmF3VHgua2V5UmVnLnVuc2lnbmVkKSkuaW5zdGFuY2VPZihLZXlSZWdpc3RyYXRpb25CdWlsZGVyKTtcbiAgICBzaG91bGQoZmFjdG9yeS5mcm9tKHJhd1R4LmtleVJlZy5zaWduZWQpKS5pbnN0YW5jZU9mKEtleVJlZ2lzdHJhdGlvbkJ1aWxkZXIpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHBhcnNlIGEgdHJhbnNmZXIgdHhuIGFuZCByZXR1cm4gYSB0cmFuc2ZlciBidWlsZGVyJywgKCkgPT4ge1xuICAgIHNob3VsZChmYWN0b3J5LmZyb20ocmF3VHgudHJhbnNmZXIudW5zaWduZWQpKS5pbnN0YW5jZU9mKFRyYW5zZmVyQnVpbGRlcik7XG4gICAgc2hvdWxkKGZhY3RvcnkuZnJvbShyYXdUeC50cmFuc2Zlci5zaWduZWQpKS5pbnN0YW5jZU9mKFRyYW5zZmVyQnVpbGRlcik7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcGFyc2UgYSBhc3NldCB0cmFuc2ZlciB0eG4gYW5kIHJldHVybiBhIGFzc2V0IHRyYW5zZmVyIGJ1aWxkZXInLCAoKSA9PiB7XG4gICAgc2hvdWxkKGZhY3RvcnkuZnJvbShyYXdUeC50cmFuc2Zlci51bnNpZ25lZCkpLmluc3RhbmNlT2YoVHJhbnNmZXJCdWlsZGVyKTtcbiAgICBzaG91bGQoZmFjdG9yeS5mcm9tKHJhd1R4LnRyYW5zZmVyLnNpZ25lZCkpLmluc3RhbmNlT2YoVHJhbnNmZXJCdWlsZGVyKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NlcmlhbGl6ZWQgdHJhbnNhY3Rpb25zJywgKCkgPT4ge1xuICAgIGl0KCdhIG5vbiBzaWduZWQga2V5cmVnIHRyYW5zYWN0aW9uIGZyb20gc2VyaWFsaXplZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmZyb20oQWxnb1Jlc291cmNlcy5yYXdUeC5rZXlSZWcudW5zaWduZWQpO1xuICAgICAgYnVpbGRlci5udW1iZXJPZlJlcXVpcmVkU2lnbmVycygxKS5zaWduKHsga2V5OiBBbGdvUmVzb3VyY2VzLmFjY291bnRzLmFjY291bnQxLnBydktleSB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbik7XG4gICAgICBzaG91bGQuZXF1YWwoQnVmZmVyLmZyb20odHgudG9Ccm9hZGNhc3RGb3JtYXQoKSkudG9TdHJpbmcoJ2hleCcpLCBBbGdvUmVzb3VyY2VzLnJhd1R4LmtleVJlZy5zaWduZWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Egc2lnbmVkIGtleXJlZyB0cmFuc2FjdGlvbiBmcm9tIHNlcmlhbGl6ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5mcm9tKEFsZ29SZXNvdXJjZXMucmF3VHgua2V5UmVnLnNpZ25lZCk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuV2FsbGV0SW5pdGlhbGl6YXRpb24pO1xuICAgICAgc2hvdWxkLmVxdWFsKEJ1ZmZlci5mcm9tKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpLnRvU3RyaW5nKCdoZXgnKSwgQWxnb1Jlc291cmNlcy5yYXdUeC5rZXlSZWcuc2lnbmVkKTtcbiAgICB9KTtcblxuICAgIGl0KCdhIG5vbiBzaWduZWQga2V5cmVnIHRyYW5zYWN0aW9uIHNlcmlhbGl6ZWQgd2l0aCBvbGQgc2RrJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZGVjb2RlZFR4ID0gYWxnb1V0aWxzLmRlY29kZUFsZ29UeG4oQWxnb1Jlc291cmNlcy5yYXdUeC5rZXlSZWcub2xkU2RrVW5zaWduZWQpO1xuICAgICAgc2hvdWxkLmVxdWFsKEJ1ZmZlci5mcm9tKGRlY29kZWRUeC5yYXdUcmFuc2FjdGlvbikudG9TdHJpbmcoJ2Jhc2U2NCcpLCBBbGdvUmVzb3VyY2VzLnJhd1R4LmtleVJlZy5vbGRTZGtVbnNpZ25lZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2Vjb25kIG5vbiBzaWduZWQga2V5cmVnIHRyYW5zYWN0aW9uIHNlcmlhbGl6ZWQgd2l0aCBvbGQgc2RrJywgKCkgPT4ge1xuICAgICAgY29uc3QgdHggPSBhbGdvVXRpbHMuZGVjb2RlQWxnb1R4bihBbGdvUmVzb3VyY2VzLnJhd1R4LmtleVJlZy5vbGRTZGtVbnNpZ25lZDIpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnR4bi50eXBlLCAna2V5cmVnJyk7XG4gICAgICBzaG91bGQuZXF1YWwodHgudHhuLmZlZSwgMTAwMCk7XG4gICAgICBzaG91bGQuZXF1YWwodHgudHhuLnZvdGVGaXJzdCwgMSk7XG4gICAgICBzaG91bGQuZXF1YWwodHgudHhuLnZvdGVMYXN0LCA2MDAwMDAxKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC50eG4udm90ZUtleURpbHV0aW9uLCAxMDAwMCk7XG4gICAgICBzaG91bGQuZXF1YWwodHguc2lnbmVkLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYSBzaWduZWQga2V5cmVnIHRyYW5zYWN0aW9uIHNlcmlhbGl6ZWQgd2l0aCBvbGQgc2RrJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZGVjb2RlZFR4ID0gYWxnb1V0aWxzLmRlY29kZUFsZ29UeG4oQWxnb1Jlc291cmNlcy5yYXdUeC5rZXlSZWcub2xkU2RrU2lnbmVkKTtcbiAgICAgIGRlY29kZWRUeC5zaWduZWQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGRlY29kZWRUeC50eG4uZmVlLnNob3VsZC5lcXVhbHMoMTA1MCk7XG4gICAgICBkZWNvZGVkVHgudHhuLnNob3VsZC5oYXZlLnByb3BlcnR5KCd0eXBlJyk7XG4gICAgICBkZWNvZGVkVHgudHhuLnR5cGUhLnNob3VsZC5lcXVhbHMoJ2tleXJlZycpO1xuICAgICAgZGVjb2RlZFR4LnR4bi5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbm9uUGFydGljaXBhdGlvbicpO1xuICAgICAgZGVjb2RlZFR4LnR4bi5ub25QYXJ0aWNpcGF0aW9uIS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2EgbXVsdGlzaWduZWQgdHJhbnNmZXIgdHJhbnNhY3Rpb24gZnJvbSBzZXJpYWxpemVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZnJvbShBbGdvUmVzb3VyY2VzLnJhd1R4LnRyYW5zZmVyLm11bHRpc2lnKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgc2hvdWxkLmVxdWFsKEJ1ZmZlci5mcm9tKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpLnRvU3RyaW5nKCdoZXgnKSwgQWxnb1Jlc291cmNlcy5yYXdUeC50cmFuc2Zlci5tdWx0aXNpZyk7XG4gICAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Egc2lnbmVkIHRyYW5zZmVyIHRyYW5zYWN0aW9uIGZyb20gc2VyaWFsaXplZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmZyb20oQWxnb1Jlc291cmNlcy5yYXdUeC50cmFuc2Zlci5zaWduZWQpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBzaG91bGQuZXF1YWwoQnVmZmVyLmZyb20odHgudG9Ccm9hZGNhc3RGb3JtYXQoKSkudG9TdHJpbmcoJ2hleCcpLCBBbGdvUmVzb3VyY2VzLnJhd1R4LnRyYW5zZmVyLnNpZ25lZCk7XG4gICAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2EgaGFsZnNpZ25lZCB0cmFuc2ZlciB0cmFuc2FjdGlvbiBmcm9tIHNlcmlhbGl6ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5mcm9tKEFsZ29SZXNvdXJjZXMucmF3VHgudHJhbnNmZXIuaGFsZlNpZ25lZCk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5udW1iZXJPZlJlcXVpcmVkU2lnbmVycygyKVxuICAgICAgICAuc2V0U2lnbmVycyhbQWxnb1Jlc291cmNlcy5hY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzLCBBbGdvUmVzb3VyY2VzLmFjY291bnRzLmFjY291bnQzLmFkZHJlc3NdKVxuICAgICAgICAuc2lnbih7IGtleTogQWxnb1Jlc291cmNlcy5hY2NvdW50cy5hY2NvdW50My5wcnZLZXkgfSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgc2hvdWxkLmVxdWFsKEJ1ZmZlci5mcm9tKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpLnRvU3RyaW5nKCdoZXgnKSwgQWxnb1Jlc291cmNlcy5yYXdUeC50cmFuc2Zlci5tdWx0aXNpZyk7XG4gICAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2EgdW5zaWduZWQgdHJhbnNmZXIgdHJhbnNhY3Rpb24gZnJvbSBzZXJpYWxpemVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZnJvbShBbGdvUmVzb3VyY2VzLnJhd1R4LnRyYW5zZmVyLnVuc2lnbmVkKTtcbiAgICAgIGJ1aWxkZXIubnVtYmVyT2ZSZXF1aXJlZFNpZ25lcnMoMSkuc2lnbih7IGtleTogQWxnb1Jlc291cmNlcy5hY2NvdW50cy5hY2NvdW50MS5wcnZLZXkgfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5lcXVhbChCdWZmZXIuZnJvbSh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpKS50b1N0cmluZygnaGV4JyksIEFsZ29SZXNvdXJjZXMucmF3VHgudHJhbnNmZXIuc2lnbmVkKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgfSk7XG4gIH0pO1xuICBpdCgnYW4gdW5zaWduZWQgdHJhbnNmZXIgdHJhbnNhY3Rpb24gZnJvbSBzZXJpYWxpemVkJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmZyb20oQWxnb1Jlc291cmNlcy5yYXdUeC5hc3NldFRyYW5zZmVyLnVuc2lnbmVkKTtcbiAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICBzaG91bGQuZXF1YWwoQnVmZmVyLmZyb20odHgudG9Ccm9hZGNhc3RGb3JtYXQoKSkudG9TdHJpbmcoJ2hleCcpLCBBbGdvUmVzb3VyY2VzLnJhd1R4LmFzc2V0VHJhbnNmZXIudW5zaWduZWQpO1xuICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gIH0pO1xuICBpdCgnYSBzaWduZWQgYXNzZXQgdHJhbnNmZXIgdHJhbnNhY3Rpb24gZnJvbSBzZXJpYWxpemVkJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmZyb20oQWxnb1Jlc291cmNlcy5yYXdUeC5hc3NldFRyYW5zZmVyLnNpZ25lZCk7XG4gICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgc2hvdWxkLmVxdWFsKEJ1ZmZlci5mcm9tKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpLnRvU3RyaW5nKCdoZXgnKSwgQWxnb1Jlc291cmNlcy5yYXdUeC5hc3NldFRyYW5zZmVyLnNpZ25lZCk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgfSk7XG59KTtcbiJdfQ==Выполнить команду
Для локальной разработки. Не используйте в интернете!