PHP WebShell

Текущая директория: /opt/BitGoJS/modules/sdk-coin-near/dist/test/unit/transactionBuilder

Просмотр файла: transactionBuilder.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 assert_1 = __importDefault(require("assert"));
const should_1 = __importDefault(require("should"));
const getBuilderFactory_1 = require("../getBuilderFactory");
const sdk_core_1 = require("@bitgo/sdk-core");
const testData = __importStar(require("../../resources/near"));
describe('NEAR Transaction Builder', async () => {
    let builders;
    const factory = (0, getBuilderFactory_1.getBuilderFactory)('tnear');
    beforeEach(function (done) {
        builders = [factory.getTransferBuilder()];
        done();
    });
    it('start and build an empty a transfer tx', async () => {
        const txBuilder = factory.getTransferBuilder();
        txBuilder.sender(testData.accounts.account1.address, testData.accounts.account1.publicKey);
        txBuilder.nonce(1);
        txBuilder.receiverId(testData.accounts.account2.address);
        txBuilder.recentBlockHash(testData.blockHash.block1);
        txBuilder.amount(testData.AMOUNT);
        const tx = await txBuilder.build();
        should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
        const txBroadcast = tx.toBroadcastFormat();
        should_1.default.equal(txBroadcast, testData.rawTx.transfer.unsigned);
    });
    it('build and sign a transfer tx', async () => {
        const txBuilder = factory.getTransferBuilder();
        txBuilder.sender(testData.accounts.account1.address, testData.accounts.account1.publicKey);
        txBuilder.nonce(1);
        txBuilder.receiverId(testData.accounts.account2.address);
        txBuilder.recentBlockHash(testData.blockHash.block1);
        txBuilder.amount(testData.AMOUNT);
        txBuilder.sign({ key: testData.accounts.account1.secretKey });
        const tx = await txBuilder.build();
        should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
        const txBroadcast = tx.toBroadcastFormat();
        should_1.default.equal(txBroadcast, testData.rawTx.transfer.signed);
    });
    it('should fail to build if missing sender', async () => {
        for (const txBuilder of builders) {
            txBuilder.nonce(1);
            txBuilder.receiverId(testData.accounts.account2.address);
            txBuilder.recentBlockHash(testData.blockHash.block1);
            txBuilder.amount(testData.AMOUNT);
            await txBuilder.build().should.rejectedWith('sender is required before building');
        }
    });
    it('build a send from rawTx', async () => {
        const txBuilder = factory.from(testData.rawTx.transfer.unsigned);
        const builtTx = await txBuilder.build();
        should_1.default.equal(builtTx.type, sdk_core_1.TransactionType.Send);
        should_1.default.equal(builtTx.id, '5jTEPuDcMCeEgp1iyEbNBKsnhYz4F4c1EPDtRmxm3wCw');
        builtTx.inputs.length.should.equal(1);
        builtTx.inputs[0].should.deepEqual({
            address: testData.accounts.account1.address,
            value: testData.AMOUNT,
            coin: 'tnear',
        });
        builtTx.outputs.length.should.equal(1);
        builtTx.outputs[0].should.deepEqual({
            address: testData.accounts.account2.address,
            value: testData.AMOUNT,
            coin: 'tnear',
        });
        const jsonTx = builtTx.toJson();
        jsonTx.signerId.should.equal(testData.accounts.account1.address);
    });
    it('build a send from signed rawTx', async () => {
        const txBuilder = factory.from(testData.rawTx.transfer.signed);
        const builtTx = await txBuilder.build();
        should_1.default.equal(builtTx.type, sdk_core_1.TransactionType.Send);
        should_1.default.equal(builtTx.id, '5jTEPuDcMCeEgp1iyEbNBKsnhYz4F4c1EPDtRmxm3wCw');
        builtTx.inputs.length.should.equal(1);
        builtTx.inputs[0].should.deepEqual({
            address: testData.accounts.account1.address,
            value: testData.AMOUNT,
            coin: 'tnear',
        });
        builtTx.outputs.length.should.equal(1);
        builtTx.outputs[0].should.deepEqual({
            address: testData.accounts.account2.address,
            value: testData.AMOUNT,
            coin: 'tnear',
        });
        const jsonTx = builtTx.toJson();
        jsonTx.signerId.should.equal(testData.accounts.account1.address);
    });
    it('should fail to build if have invalid blockHash', async () => {
        for (const txBuilder of builders) {
            txBuilder.sender(testData.accounts.account1.address, testData.accounts.account1.publicKey);
            txBuilder.nonce(1);
            txBuilder.receiverId(testData.accounts.account2.address);
            assert_1.default.throws(() => txBuilder.recentBlockHash(testData.errorBlockHash.block1), new RegExp('Invalid blockHash CDEwwp7TjjahErrorriSvX3457qZ5uF3TtgEZHj7o5ssKFNs9'));
        }
    });
    it('should fail to build if have invalid nonce', async () => {
        for (const txBuilder of builders) {
            txBuilder.sender(testData.accounts.account1.address, testData.accounts.account1.publicKey);
            assert_1.default.throws(() => txBuilder.nonce(-1), /Invalid nonce: -1/);
        }
    });
    it('should fail to build if have undefined address', async () => {
        for (const txBuilder of builders) {
            assert_1.default.throws(() => txBuilder.sender(testData.accounts.account1.publicKey), new RegExp('Invalid or missing pubKey, got: undefined'));
        }
    });
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsb0RBQTRCO0FBQzVCLDREQUF5RDtBQUN6RCw4Q0FBa0Q7QUFDbEQsK0RBQWlEO0FBRWpELFFBQVEsQ0FBQywwQkFBMEIsRUFBRSxLQUFLLElBQUksRUFBRTtJQUM5QyxJQUFJLFFBQVEsQ0FBQztJQUViLE1BQU0sT0FBTyxHQUFHLElBQUEscUNBQWlCLEVBQUMsT0FBTyxDQUFDLENBQUM7SUFFM0MsVUFBVSxDQUFDLFVBQVUsSUFBSTtRQUN2QixRQUFRLEdBQUcsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLElBQUksRUFBRSxDQUFDO0lBQ1QsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsd0NBQXdDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDdEQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDL0MsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0YsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQixTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pELFNBQVMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyRCxTQUFTLENBQUMsTUFBTSxDQUFDLFFB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QUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgZ2V0QnVpbGRlckZhY3RvcnkgfSBmcm9tICcuLi9nZXRCdWlsZGVyRmFjdG9yeSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vLi4vcmVzb3VyY2VzL25lYXInO1xuXG5kZXNjcmliZSgnTkVBUiBUcmFuc2FjdGlvbiBCdWlsZGVyJywgYXN5bmMgKCkgPT4ge1xuICBsZXQgYnVpbGRlcnM7XG5cbiAgY29uc3QgZmFjdG9yeSA9IGdldEJ1aWxkZXJGYWN0b3J5KCd0bmVhcicpO1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKGRvbmUpIHtcbiAgICBidWlsZGVycyA9IFtmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpXTtcbiAgICBkb25lKCk7XG4gIH0pO1xuXG4gIGl0KCdzdGFydCBhbmQgYnVpbGQgYW4gZW1wdHkgYSB0cmFuc2ZlciB0eCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5zZW5kZXIodGVzdERhdGEuYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcywgdGVzdERhdGEuYWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5KTtcbiAgICB0eEJ1aWxkZXIubm9uY2UoMSk7XG4gICAgdHhCdWlsZGVyLnJlY2VpdmVySWQodGVzdERhdGEuYWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcyk7XG4gICAgdHhCdWlsZGVyLnJlY2VudEJsb2NrSGFzaCh0ZXN0RGF0YS5ibG9ja0hhc2guYmxvY2sxKTtcbiAgICB0eEJ1aWxkZXIuYW1vdW50KHRlc3REYXRhLkFNT1VOVCk7XG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuXG4gICAgY29uc3QgdHhCcm9hZGNhc3QgPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgIHNob3VsZC5lcXVhbCh0eEJyb2FkY2FzdCwgdGVzdERhdGEucmF3VHgudHJhbnNmZXIudW5zaWduZWQpO1xuICB9KTtcblxuICBpdCgnYnVpbGQgYW5kIHNpZ24gYSB0cmFuc2ZlciB0eCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5zZW5kZXIodGVzdERhdGEuYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcywgdGVzdERhdGEuYWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5KTtcbiAgICB0eEJ1aWxkZXIubm9uY2UoMSk7XG4gICAgdHhCdWlsZGVyLnJlY2VpdmVySWQodGVzdERhdGEuYWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcyk7XG4gICAgdHhCdWlsZGVyLnJlY2VudEJsb2NrSGFzaCh0ZXN0RGF0YS5ibG9ja0hhc2guYmxvY2sxKTtcbiAgICB0eEJ1aWxkZXIuYW1vdW50KHRlc3REYXRhLkFNT1VOVCk7XG4gICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLmFjY291bnRzLmFjY291bnQxLnNlY3JldEtleSB9KTtcbiAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG5cbiAgICBjb25zdCB0eEJyb2FkY2FzdCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgc2hvdWxkLmVxdWFsKHR4QnJvYWRjYXN0LCB0ZXN0RGF0YS5yYXdUeC50cmFuc2Zlci5zaWduZWQpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZhaWwgdG8gYnVpbGQgaWYgbWlzc2luZyBzZW5kZXInLCBhc3luYyAoKSA9PiB7XG4gICAgZm9yIChjb25zdCB0eEJ1aWxkZXIgb2YgYnVpbGRlcnMpIHtcbiAgICAgIHR4QnVpbGRlci5ub25jZSgxKTtcbiAgICAgIHR4QnVpbGRlci5yZWNlaXZlcklkKHRlc3REYXRhLmFjY291bnRzLmFjY291bnQyLmFkZHJlc3MpO1xuICAgICAgdHhCdWlsZGVyLnJlY2VudEJsb2NrSGFzaCh0ZXN0RGF0YS5ibG9ja0hhc2guYmxvY2sxKTtcbiAgICAgIHR4QnVpbGRlci5hbW91bnQodGVzdERhdGEuQU1PVU5UKTtcbiAgICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpLnNob3VsZC5yZWplY3RlZFdpdGgoJ3NlbmRlciBpcyByZXF1aXJlZCBiZWZvcmUgYnVpbGRpbmcnKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdidWlsZCBhIHNlbmQgZnJvbSByYXdUeCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEucmF3VHgudHJhbnNmZXIudW5zaWduZWQpO1xuICAgIGNvbnN0IGJ1aWx0VHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBzaG91bGQuZXF1YWwoYnVpbHRUeC50eXBlLCBUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgc2hvdWxkLmVxdWFsKGJ1aWx0VHguaWQsICc1alRFUHVEY01DZUVncDFpeUViTkJLc25oWXo0RjRjMUVQRHRSbXhtM3dDdycpO1xuICAgIGJ1aWx0VHguaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgYnVpbHRUeC5pbnB1dHNbMF0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5hY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzLFxuICAgICAgdmFsdWU6IHRlc3REYXRhLkFNT1VOVCxcbiAgICAgIGNvaW46ICd0bmVhcicsXG4gICAgfSk7XG4gICAgYnVpbHRUeC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgYnVpbHRUeC5vdXRwdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgYWRkcmVzczogdGVzdERhdGEuYWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcyxcbiAgICAgIHZhbHVlOiB0ZXN0RGF0YS5BTU9VTlQsXG4gICAgICBjb2luOiAndG5lYXInLFxuICAgIH0pO1xuICAgIGNvbnN0IGpzb25UeCA9IGJ1aWx0VHgudG9Kc29uKCk7XG4gICAganNvblR4LnNpZ25lcklkLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5hY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzKTtcbiAgfSk7XG5cbiAgaXQoJ2J1aWxkIGEgc2VuZCBmcm9tIHNpZ25lZCByYXdUeCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEucmF3VHgudHJhbnNmZXIuc2lnbmVkKTtcbiAgICBjb25zdCBidWlsdFR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgc2hvdWxkLmVxdWFsKGJ1aWx0VHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgIHNob3VsZC5lcXVhbChidWlsdFR4LmlkLCAnNWpURVB1RGNNQ2VFZ3AxaXlFYk5CS3NuaFl6NEY0YzFFUER0Um14bTN3Q3cnKTtcbiAgICBidWlsdFR4LmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIGJ1aWx0VHguaW5wdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgYWRkcmVzczogdGVzdERhdGEuYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyxcbiAgICAgIHZhbHVlOiB0ZXN0RGF0YS5BTU9VTlQsXG4gICAgICBjb2luOiAndG5lYXInLFxuICAgIH0pO1xuICAgIGJ1aWx0VHgub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIGJ1aWx0VHgub3V0cHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgIGFkZHJlc3M6IHRlc3REYXRhLmFjY291bnRzLmFjY291bnQyLmFkZHJlc3MsXG4gICAgICB2YWx1ZTogdGVzdERhdGEuQU1PVU5ULFxuICAgICAgY29pbjogJ3RuZWFyJyxcbiAgICB9KTtcbiAgICBjb25zdCBqc29uVHggPSBidWlsdFR4LnRvSnNvbigpO1xuXG4gICAganNvblR4LnNpZ25lcklkLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5hY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIHRvIGJ1aWxkIGlmIGhhdmUgaW52YWxpZCBibG9ja0hhc2gnLCBhc3luYyAoKSA9PiB7XG4gICAgZm9yIChjb25zdCB0eEJ1aWxkZXIgb2YgYnVpbGRlcnMpIHtcbiAgICAgIHR4QnVpbGRlci5zZW5kZXIodGVzdERhdGEuYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcywgdGVzdERhdGEuYWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5KTtcbiAgICAgIHR4QnVpbGRlci5ub25jZSgxKTtcbiAgICAgIHR4QnVpbGRlci5yZWNlaXZlcklkKHRlc3REYXRhLmFjY291bnRzLmFjY291bnQyLmFkZHJlc3MpO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gdHhCdWlsZGVyLnJlY2VudEJsb2NrSGFzaCh0ZXN0RGF0YS5lcnJvckJsb2NrSGFzaC5ibG9jazEpLFxuICAgICAgICBuZXcgUmVnRXhwKCdJbnZhbGlkIGJsb2NrSGFzaCBDREV3d3A3VGpqYWhFcnJvcnJpU3ZYMzQ1N3FaNXVGM1R0Z0VaSGo3bzVzc0tGTnM5JylcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICBpdCgnc2hvdWxkIGZhaWwgdG8gYnVpbGQgaWYgaGF2ZSBpbnZhbGlkIG5vbmNlJywgYXN5bmMgKCkgPT4ge1xuICAgIGZvciAoY29uc3QgdHhCdWlsZGVyIG9mIGJ1aWxkZXJzKSB7XG4gICAgICB0eEJ1aWxkZXIuc2VuZGVyKHRlc3REYXRhLmFjY291bnRzLmFjY291bnQxLmFkZHJlc3MsIHRlc3REYXRhLmFjY291bnRzLmFjY291bnQxLnB1YmxpY0tleSk7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR4QnVpbGRlci5ub25jZSgtMSksIC9JbnZhbGlkIG5vbmNlOiAtMS8pO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIHRvIGJ1aWxkIGlmIGhhdmUgdW5kZWZpbmVkIGFkZHJlc3MnLCBhc3luYyAoKSA9PiB7XG4gICAgZm9yIChjb25zdCB0eEJ1aWxkZXIgb2YgYnVpbGRlcnMpIHtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHR4QnVpbGRlci5zZW5kZXIodGVzdERhdGEuYWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5KSxcbiAgICAgICAgbmV3IFJlZ0V4cCgnSW52YWxpZCBvciBtaXNzaW5nIHB1YktleSwgZ290OiB1bmRlZmluZWQnKVxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufSk7XG4iXX0=

Выполнить команду


Для локальной разработки. Не используйте в интернете!