PHP WebShell
Текущая директория: /opt/BitGoJS/modules/account-lib/dist/test/unit/keyPair
Просмотр файла: index.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 });
/**
* @prettier
*/
const assert_1 = __importDefault(require("assert"));
const keyPair_1 = require("../../../src/keyPair");
const coinModules = __importStar(require("../../../src"));
const statics_1 = require("@bitgo/statics");
describe('Key Pair Factory', () => {
describe('coinToKey map initialization', function () {
const supportedCoinsExceptTestnet = Object.keys(coinModules)
// TODO(BG-40990): temporarily disable eth2 from the test for bls not initialized error
.filter((k) => coinModules[k].KeyPair && k.trim().toLowerCase() !== 'eth2');
supportedCoinsExceptTestnet.forEach((coinName) => {
it(`should initialize a ${coinName} keyPair map`, () => {
const keyPair = (0, keyPair_1.register)(coinName);
(typeof keyPair.getKeys).should.equal('function');
(typeof keyPair.getAddress).should.equal('function');
(typeof keyPair.recordKeysFromPrivateKey).should.equal('function');
(typeof keyPair.recordKeysFromPublicKey).should.equal('function');
});
});
it('should fail to instantiate an unsupported coin', () => {
assert_1.default.throws(() => (0, keyPair_1.register)('fakeUnsupported'));
});
});
describe('secp256k1 generation', function () {
it('should initialize eth keyPair map', () => {
const eth = statics_1.coins.get('eth');
const keyPair = (0, keyPair_1.register)(eth.name);
(typeof keyPair.getKeys).should.equal('function');
(typeof keyPair.getAddress).should.equal('function');
(typeof keyPair.getPublicKey).should.equal('function');
});
it('should initialize eth keyPair map with arguments', () => {
const eth = statics_1.coins.get('eth');
const uncompressedPub = '04D63D9FD9FD772A989C5B90EDB37716406356E98273E5F98FE07652247A3A827503E948A2FDBF74A981D4E0054F10EDA7042C2D469F44473D3C7791E0E326E355';
const pubKey = { pub: uncompressedPub };
const keyPair = (0, keyPair_1.register)(eth.name, pubKey);
(typeof keyPair.getKeys).should.equal('function');
(typeof keyPair.getAddress).should.equal('function');
(typeof keyPair.getPublicKey).should.equal('function');
});
});
describe('ed25519 generation', function () {
const fixedKeyPair = {
prv: 'e349d47cd4af4644afbc05b8463c0d0d19a0cc742be5c1646af2e7be8aafbd50',
};
const givenSignature = new Uint8Array(Buffer.from('b2e775827f6b3c9050524a7d2f5344db73eb92044d8e42c38357a30686a9ce3a19b8fbf8c9d1edb0f3c5232441d34b63af92805aed77097ee50076f696eaff0f', 'hex'));
['dot', 'tdot', 'algo', 'talgo', 'hbar', 'thbar', 'sol', 'tsol'].forEach((coinName) => {
describe(`${coinName} keyPair`, function () {
const kp = (0, keyPair_1.register)(coinName, fixedKeyPair);
it(`should initialize ${coinName} keyPair map`, () => {
const keyPair = (0, keyPair_1.register)(coinName);
(typeof keyPair.getKeys).should.equal('function');
(typeof keyPair.getAddress).should.equal('function');
(typeof keyPair.verifySignature).should.equal('function');
(typeof keyPair.signMessage).should.equal('function');
});
it(`should initialize ${coinName} keyPair map with arguments`, () => {
const keyPair = (0, keyPair_1.register)(coinName, fixedKeyPair);
(typeof keyPair.getKeys).should.equal('function');
(typeof keyPair.getAddress).should.equal('function');
(typeof keyPair.verifySignature).should.equal('function');
(typeof keyPair.signMessage).should.equal('function');
});
it('should get same signature from same message', () => {
// When
const signature = kp.signMessage('message');
// Then
signature.should.deepEqual(givenSignature);
});
it('should get different signature form different message', () => {
// When
const signature = kp.signMessage('wrong message');
// Then
signature.should.not.deepEqual(givenSignature);
});
it('should be verified correctly', () => {
// When
const verifyResult = kp.verifySignature('message', givenSignature);
// Then
verifyResult.should.be.True();
});
it('should not be verified wrong message', () => {
// When
const verifyResult = kp.verifySignature('wrong message', givenSignature);
// Then
verifyResult.should.be.False();
});
});
});
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQva2V5UGFpci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztHQUVHO0FBQ0gsb0RBQTRCO0FBQzVCLGtEQUFnRDtBQUNoRCwwREFBNEM7QUFDNUMsNENBQXVDO0FBSXZDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUU7SUFDaEMsUUFBUSxDQUFDLDhCQUE4QixFQUFFO1FBQ3ZDLE1BQU0sMkJBQTJCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDMUQsdUZBQXVGO2FBQ3RGLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUM7UUFFOUUsMkJBQTJCLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDL0MsRUFBRSxDQUFDLHVCQUF1QixRQUFRLGNBQWMsRUFBRSxHQUFHLEVBQUU7Z0JBQ3JELE1BQU0sT0FBTyxHQUFHLElBQUEsa0JBQVEsRUFBQyxRQUFRLENBQUMsQ0FBQztnQkFDbkMsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNsRCxDQUFDLE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3JELENBQUMsT0FBTyxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNuRSxDQUFDLE9BQU8sT0FBTyxDQUFDLHVCQUF1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QkFDL0QsT0FBTztvQkFDUCxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUNsRCxPQUFPO29CQUNQLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDakQsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsRUFBRSxDQUFDLDhCQUE4QixFQUFFLEdBQUcsRUFBRTtvQkFDdEMsT0FBTztvQkFDUCxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztvQkFDbkUsT0FBTztvQkFDUCxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDaEMsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtvQkFDOUMsT0FBTztvQkFDUCxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLGVBQWUsRUFBRSxjQUFjLENBQUMsQ0FBQztvQkFDekUsT0FBTztvQkFDUCxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDakMsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IHJlZ2lzdGVyIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2tleVBhaXInO1xuaW1wb3J0ICogYXMgY29pbk1vZHVsZXMgZnJvbSAnLi4vLi4vLi4vc3JjJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgS2V5UGFpciBhcyBFdGhLZXlQYWlyIH0gZnJvbSAnQGJpdGdvL3Nkay1jb2luLWV0aCc7XG5pbXBvcnQgeyBFZDI1NTE5S2V5UGFpciB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmRlc2NyaWJlKCdLZXkgUGFpciBGYWN0b3J5JywgKCkgPT4ge1xuICBkZXNjcmliZSgnY29pblRvS2V5IG1hcCBpbml0aWFsaXphdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzdXBwb3J0ZWRDb2luc0V4Y2VwdFRlc3RuZXQgPSBPYmplY3Qua2V5cyhjb2luTW9kdWxlcylcbiAgICAgIC8vIFRPRE8oQkctNDA5OTApOiB0ZW1wb3JhcmlseSBkaXNhYmxlIGV0aDIgZnJvbSB0aGUgdGVzdCBmb3IgYmxzIG5vdCBpbml0aWFsaXplZCBlcnJvclxuICAgICAgLmZpbHRlcigoaykgPT4gY29pbk1vZHVsZXNba10uS2V5UGFpciAmJiBrLnRyaW0oKS50b0xvd2VyQ2FzZSgpICE9PSAnZXRoMicpO1xuXG4gICAgc3VwcG9ydGVkQ29pbnNFeGNlcHRUZXN0bmV0LmZvckVhY2goKGNvaW5OYW1lKSA9PiB7XG4gICAgICBpdChgc2hvdWxkIGluaXRpYWxpemUgYSAke2NvaW5OYW1lfSBrZXlQYWlyIG1hcGAsICgpID0+IHtcbiAgICAgICAgY29uc3Qga2V5UGFpciA9IHJlZ2lzdGVyKGNvaW5OYW1lKTtcbiAgICAgICAgKHR5cGVvZiBrZXlQYWlyLmdldEtleXMpLnNob3VsZC5lcXVhbCgnZnVuY3Rpb24nKTtcbiAgICAgICAgKHR5cGVvZiBrZXlQYWlyLmdldEFkZHJlc3MpLnNob3VsZC5lcXVhbCgnZnVuY3Rpb24nKTtcbiAgICAgICAgKHR5cGVvZiBrZXlQYWlyLnJlY29yZEtleXNGcm9tUHJpdmF0ZUtleSkuc2hvdWxkLmVxdWFsKCdmdW5jdGlvbicpO1xuICAgICAgICAodHlwZW9mIGtleVBhaXIucmVjb3JkS2V5c0Zyb21QdWJsaWNLZXkpLnNob3VsZC5lcXVhbCgnZnVuY3Rpb24nKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGluc3RhbnRpYXRlIGFuIHVuc3VwcG9ydGVkIGNvaW4nLCAoKSA9PiB7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHJlZ2lzdGVyKCdmYWtlVW5zdXBwb3J0ZWQnKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzZWNwMjU2azEgZ2VuZXJhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUgZXRoIGtleVBhaXIgbWFwJywgKCkgPT4ge1xuICAgICAgY29uc3QgZXRoID0gY29pbnMuZ2V0KCdldGgnKTtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSByZWdpc3RlcihldGgubmFtZSkgYXMgRXRoS2V5UGFpcjtcbiAgICAgICh0eXBlb2Yga2V5UGFpci5nZXRLZXlzKS5zaG91bGQuZXF1YWwoJ2Z1bmN0aW9uJyk7XG4gICAgICAodHlwZW9mIGtleVBhaXIuZ2V0QWRkcmVzcykuc2hvdWxkLmVxdWFsKCdmdW5jdGlvbicpO1xuICAgICAgKHR5cGVvZiBrZXlQYWlyLmdldFB1YmxpY0tleSkuc2hvdWxkLmVxdWFsKCdmdW5jdGlvbicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIGV0aCBrZXlQYWlyIG1hcCB3aXRoIGFyZ3VtZW50cycsICgpID0+IHtcbiAgICAgIGNvbnN0IGV0aCA9IGNvaW5zLmdldCgnZXRoJyk7XG4gICAgICBjb25zdCB1bmNvbXByZXNzZWRQdWIgPVxuICAgICAgICAnMDRENjNEOUZEOUZENzcyQTk4OUM1QjkwRURCMzc3MTY0MDYzNTZFOTgyNzNFNUY5OEZFMDc2NTIyNDdBM0E4Mjc1MDNFOTQ4QTJGREJGNzRBOTgxRDRFMDA1NEYxMEVEQTcwNDJDMkQ0NjlGNDQ0NzNEM0M3NzkxRTBFMzI2RTM1NSc7XG4gICAgICBjb25zdCBwdWJLZXkgPSB7IHB1YjogdW5jb21wcmVzc2VkUHViIH07XG4gICAgICBjb25zdCBrZXlQYWlyID0gcmVnaXN0ZXIoZXRoLm5hbWUsIHB1YktleSkgYXMgRXRoS2V5UGFpcjtcbiAgICAgICh0eXBlb2Yga2V5UGFpci5nZXRLZXlzKS5zaG91bGQuZXF1YWwoJ2Z1bmN0aW9uJyk7XG4gICAgICAodHlwZW9mIGtleVBhaXIuZ2V0QWRkcmVzcykuc2hvdWxkLmVxdWFsKCdmdW5jdGlvbicpO1xuICAgICAgKHR5cGVvZiBrZXlQYWlyLmdldFB1YmxpY0tleSkuc2hvdWxkLmVxdWFsKCdmdW5jdGlvbicpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZWQyNTUxOSBnZW5lcmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGZpeGVkS2V5UGFpciA9IHtcbiAgICAgIHBydjogJ2UzNDlkNDdjZDRhZjQ2NDRhZmJjMDViODQ2M2MwZDBkMTlhMGNjNzQyYmU1YzE2NDZhZjJlN2JlOGFhZmJkNTAnLFxuICAgIH07XG4gICAgY29uc3QgZ2l2ZW5TaWduYXR1cmUgPSBuZXcgVWludDhBcnJheShcbiAgICAgIEJ1ZmZlci5mcm9tKFxuICAgICAgICAnYjJlNzc1ODI3ZjZiM2M5MDUwNTI0YTdkMmY1MzQ0ZGI3M2ViOTIwNDRkOGU0MmMzODM1N2EzMDY4NmE5Y2UzYTE5YjhmYmY4YzlkMWVkYjBmM2M1MjMyNDQxZDM0YjYzYWY5MjgwNWFlZDc3MDk3ZWU1MDA3NmY2OTZlYWZmMGYnLFxuICAgICAgICAnaGV4JyxcbiAgICAgICksXG4gICAgKTtcblxuICAgIFsnZG90JywgJ3Rkb3QnLCAnYWxnbycsICd0YWxnbycsICdoYmFyJywgJ3RoYmFyJywgJ3NvbCcsICd0c29sJ10uZm9yRWFjaCgoY29pbk5hbWUpID0+IHtcbiAgICAgIGRlc2NyaWJlKGAke2NvaW5OYW1lfSBrZXlQYWlyYCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBrcCA9IHJlZ2lzdGVyKGNvaW5OYW1lLCBmaXhlZEtleVBhaXIpIGFzIEVkMjU1MTlLZXlQYWlyO1xuXG4gICAgICAgIGl0KGBzaG91bGQgaW5pdGlhbGl6ZSAke2NvaW5OYW1lfSBrZXlQYWlyIG1hcGAsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBrZXlQYWlyID0gcmVnaXN0ZXIoY29pbk5hbWUpIGFzIEVkMjU1MTlLZXlQYWlyO1xuICAgICAgICAgICh0eXBlb2Yga2V5UGFpci5nZXRLZXlzKS5zaG91bGQuZXF1YWwoJ2Z1bmN0aW9uJyk7XG4gICAgICAgICAgKHR5cGVvZiBrZXlQYWlyLmdldEFkZHJlc3MpLnNob3VsZC5lcXVhbCgnZnVuY3Rpb24nKTtcbiAgICAgICAgICAodHlwZW9mIGtleVBhaXIudmVyaWZ5U2lnbmF0dXJlKS5zaG91bGQuZXF1YWwoJ2Z1bmN0aW9uJyk7XG4gICAgICAgICAgKHR5cGVvZiBrZXlQYWlyLnNpZ25NZXNzYWdlKS5zaG91bGQuZXF1YWwoJ2Z1bmN0aW9uJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KGBzaG91bGQgaW5pdGlhbGl6ZSAke2NvaW5OYW1lfSBrZXlQYWlyIG1hcCB3aXRoIGFyZ3VtZW50c2AsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBrZXlQYWlyID0gcmVnaXN0ZXIoY29pbk5hbWUsIGZpeGVkS2V5UGFpcikgYXMgRWQyNTUxOUtleVBhaXI7XG4gICAgICAgICAgKHR5cGVvZiBrZXlQYWlyLmdldEtleXMpLnNob3VsZC5lcXVhbCgnZnVuY3Rpb24nKTtcbiAgICAgICAgICAodHlwZW9mIGtleVBhaXIuZ2V0QWRkcmVzcykuc2hvdWxkLmVxdWFsKCdmdW5jdGlvbicpO1xuICAgICAgICAgICh0eXBlb2Yga2V5UGFpci52ZXJpZnlTaWduYXR1cmUpLnNob3VsZC5lcXVhbCgnZnVuY3Rpb24nKTtcbiAgICAgICAgICAodHlwZW9mIGtleVBhaXIuc2lnbk1lc3NhZ2UpLnNob3VsZC5lcXVhbCgnZnVuY3Rpb24nKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBnZXQgc2FtZSBzaWduYXR1cmUgZnJvbSBzYW1lIG1lc3NhZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgLy8gV2hlblxuICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGtwLnNpZ25NZXNzYWdlKCdtZXNzYWdlJyk7XG4gICAgICAgICAgLy8gVGhlblxuICAgICAgICAgIHNpZ25hdHVyZS5zaG91bGQuZGVlcEVxdWFsKGdpdmVuU2lnbmF0dXJlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBnZXQgZGlmZmVyZW50IHNpZ25hdHVyZSBmb3JtIGRpZmZlcmVudCBtZXNzYWdlJywgKCkgPT4ge1xuICAgICAgICAgIC8vIFdoZW5cbiAgICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBrcC5zaWduTWVzc2FnZSgnd3JvbmcgbWVzc2FnZScpO1xuICAgICAgICAgIC8vIFRoZW5cbiAgICAgICAgICBzaWduYXR1cmUuc2hvdWxkLm5vdC5kZWVwRXF1YWwoZ2l2ZW5TaWduYXR1cmUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGJlIHZlcmlmaWVkIGNvcnJlY3RseScsICgpID0+IHtcbiAgICAgICAgICAvLyBXaGVuXG4gICAgICAgICAgY29uc3QgdmVyaWZ5UmVzdWx0ID0ga3AudmVyaWZ5U2lnbmF0dXJlKCdtZXNzYWdlJywgZ2l2ZW5TaWduYXR1cmUpO1xuICAgICAgICAgIC8vIFRoZW5cbiAgICAgICAgICB2ZXJpZnlSZXN1bHQuc2hvdWxkLmJlLlRydWUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBub3QgYmUgdmVyaWZpZWQgd3JvbmcgbWVzc2FnZScsICgpID0+IHtcbiAgICAgICAgICAvLyBXaGVuXG4gICAgICAgICAgY29uc3QgdmVyaWZ5UmVzdWx0ID0ga3AudmVyaWZ5U2lnbmF0dXJlKCd3cm9uZyBtZXNzYWdlJywgZ2l2ZW5TaWduYXR1cmUpO1xuICAgICAgICAgIC8vIFRoZW5cbiAgICAgICAgICB2ZXJpZnlSZXN1bHQuc2hvdWxkLmJlLkZhbHNlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=Выполнить команду
Для локальной разработки. Не используйте в интернете!