PHP WebShell

Текущая директория: /usr/lib/node_modules/bitgo/node_modules/@bitgo/sdk-coin-near/dist/src/lib

Просмотр файла: fungibleTokenTransferBuilder.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 });
exports.FungibleTokenTransferBuilder = void 0;
const assert_1 = __importDefault(require("assert"));
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const NearAPI = __importStar(require("near-api-js"));
const sdk_core_1 = require("@bitgo/sdk-core");
const constants_1 = require("./constants");
const contractCallWrapper_1 = require("./contractCallWrapper");
const transactionBuilder_1 = require("./transactionBuilder");
const utils_1 = __importDefault(require("./utils"));
class FungibleTokenTransferBuilder extends transactionBuilder_1.TransactionBuilder {
    constructor(_coinConfig) {
        super(_coinConfig);
        this.contractCallWrapper = new contractCallWrapper_1.ContractCallWrapper();
        this.contractCallWrapper.methodName = constants_1.FT_TRANSFER;
    }
    /**
     * Check if a transaction is a fungible token transfer
     *
     * @param {NearAPI.transactions.Action[]} actions near transaction actions
     * @returns {Boolean} true if more than 1 action present or first action method name is ft transfer
     */
    static isFungibleTokenTransferTransaction(actions) {
        return actions.length > 1 || actions[0].functionCall?.methodName === constants_1.FT_TRANSFER;
    }
    /**
     * Initialize the transaction builder fields using the decoded transaction data
     *
     * @param {Transaction} tx the transaction data
     */
    initBuilder(tx) {
        super.initBuilder(tx);
        for (const action of tx.nearTransaction.actions) {
            if (action.functionCall && action.functionCall.methodName === constants_1.FT_TRANSFER) {
                this.contractCallWrapper.deposit = action.functionCall.deposit.toString();
                this.contractCallWrapper.gas = action.functionCall.gas.toString();
            }
        }
    }
    /**
     * Sets the gas of this transaction.
     *
     * @param {String} gas the gas of this transaction
     * @returns {TransactionBuilder} This transaction builder
     */
    gas(gas) {
        this.validateValue(new bignumber_js_1.default(gas));
        this.contractCallWrapper.gas = gas;
        return this;
    }
    /**
     * Sets the deposit of at-least 1 yoctoNear
     *
     * @param {string} deposit the deposit in the minimum unit (1 Near = 1e24 yoctoNear) of this transaction
     * @returns {TransactionBuilder} This transaction builder
     */
    deposit(deposit) {
        this.validateValue(new bignumber_js_1.default(deposit));
        this.contractCallWrapper.deposit = deposit;
        return this;
    }
    /**
     * Sets the actual receiver account id inside args
     *
     * @param accountId the receiver account id
     */
    ftReceiverId(accountId) {
        utils_1.default.isValidAddress(accountId);
        this.contractCallWrapper.args = { receiver_id: accountId };
        return this;
    }
    /**
     * Sets the ft amount to be transferred
     *
     * @param amount the amount of fungible token to be transferred
     */
    amount(amount) {
        this.validateValue(new bignumber_js_1.default(amount));
        this.contractCallWrapper.args = { amount };
        return this;
    }
    /**
     * Sets the optional memo for the transfer
     *
     * @param memo
     */
    memo(memo) {
        this.contractCallWrapper.args = { memo };
        return this;
    }
    /**
     * Sets the storage deposit action
     *
     * @param {StorageDepositInput} input contains the deposit value, gas and optional account id
     * if account id is not provided then it is self transfer
     */
    addStorageDeposit(input) {
        const methodName = constants_1.STORAGE_DEPOSIT;
        (0, assert_1.default)(input.deposit, new sdk_core_1.BuildTransactionError('deposit is required before building storage deposit transfer'));
        (0, assert_1.default)(input.gas, new sdk_core_1.BuildTransactionError('gas is required before building fungible token transfer'));
        const args = input.accountId ? { account_id: input.accountId } : {};
        const action = NearAPI.transactions.functionCall(methodName, args, input.gas, input.deposit);
        super.action(action);
    }
    /** @inheritdoc */
    async buildImplementation() {
        const { methodName, args, gas, deposit } = this.contractCallWrapper.getParams();
        (0, assert_1.default)(gas, new sdk_core_1.BuildTransactionError('gas is required before building fungible token transfer'));
        (0, assert_1.default)(deposit, new sdk_core_1.BuildTransactionError('deposit is required before building fungible token transfer'));
        if (!this._actions ||
            this._actions.length === 0 ||
            (this._actions.length === 1 && this._actions[0].functionCall?.methodName !== methodName)) {
            super.action(NearAPI.transactions.functionCall(methodName, args, BigInt(gas), BigInt(deposit)));
        }
        const tx = await super.buildImplementation();
        tx.setTransactionType(sdk_core_1.TransactionType.Send);
        return tx;
    }
}
exports.FungibleTokenTransferBuilder = FungibleTokenTransferBuilder;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvZnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFFNUIsZ0VBQXFDO0FBQ3JDLHFEQUF1QztBQUV2Qyw4Q0FBeUU7QUFHekUsMkNBQTJEO0FBQzNELCtEQUE0RDtBQUc1RCw2REFBMEQ7QUFDMUQsb0RBQTRCO0FBRTVCLE1BQWEsNEJBQTZCLFNBQVEsdUNBQWtCO0lBR2xFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLHlDQUFtQixFQUFFLENBQUM7UUFDckQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsR0FBRyx1QkFBVyxDQUFDO0lBQ3BELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxrQ0FBa0MsQ0FBQyxPQUFzQztRQUNyRixPQUFPLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsVUFBVSxLQUFLLHVCQUFXLENBQUM7SUFDbkYsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxXQUFXLENBQUMsRUFBZTtRQUN6QixLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLEtBQUssTUFBTSxNQUFNLElBQUksRUFBRSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNoRCxJQUFJLE1BQU0sQ0FBQyxZQUFZLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLEtBQUssdUJBQVcsRUFBRSxDQUFDO2dCQUMxRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FB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ZCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQzFCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLFVBQVUsS0FBSyxVQUFVLENBQUMsRUFDeEYsQ0FBQztZQUNELEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRyxDQUFDO1FBQ0QsTUFBTSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUM3QyxFQUFFLENBQUMsa0JBQWtCLENBQUMsMEJBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7Q0FDRjtBQTFIRCxvRUEwSEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCAqIGFzIE5lYXJBUEkgZnJvbSAnbmVhci1hcGktanMnO1xuXG5pbXBvcnQgeyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuXG5pbXBvcnQgeyBGVF9UUkFOU0ZFUiwgU1RPUkFHRV9ERVBPU0lUIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQ29udHJhY3RDYWxsV3JhcHBlciB9IGZyb20gJy4vY29udHJhY3RDYWxsV3JhcHBlcic7XG5pbXBvcnQgeyBTdG9yYWdlRGVwb3NpdElucHV0IH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgRnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByaXZhdGUgY29udHJhY3RDYWxsV3JhcHBlcjogQ29udHJhY3RDYWxsV3JhcHBlcjtcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5jb250cmFjdENhbGxXcmFwcGVyID0gbmV3IENvbnRyYWN0Q2FsbFdyYXBwZXIoKTtcbiAgICB0aGlzLmNvbnRyYWN0Q2FsbFdyYXBwZXIubWV0aG9kTmFtZSA9IEZUX1RSQU5TRkVSO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgdHJhbnNhY3Rpb24gaXMgYSBmdW5naWJsZSB0b2tlbiB0cmFuc2ZlclxuICAgKlxuICAgKiBAcGFyYW0ge05lYXJBUEkudHJhbnNhY3Rpb25zLkFjdGlvbltdfSBhY3Rpb25zIG5lYXIgdHJhbnNhY3Rpb24gYWN0aW9uc1xuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiBtb3JlIHRoYW4gMSBhY3Rpb24gcHJlc2VudCBvciBmaXJzdCBhY3Rpb24gbWV0aG9kIG5hbWUgaXMgZnQgdHJhbnNmZXJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXNGdW5naWJsZVRva2VuVHJhbnNmZXJUcmFuc2FjdGlvbihhY3Rpb25zOiBOZWFyQVBJLnRyYW5zYWN0aW9ucy5BY3Rpb25bXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhY3Rpb25zLmxlbmd0aCA+IDEgfHwgYWN0aW9uc1swXS5mdW5jdGlvbkNhbGw/Lm1ldGhvZE5hbWUgPT09IEZUX1RSQU5TRkVSO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIHRyYW5zYWN0aW9uIGJ1aWxkZXIgZmllbGRzIHVzaW5nIHRoZSBkZWNvZGVkIHRyYW5zYWN0aW9uIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gdHggdGhlIHRyYW5zYWN0aW9uIGRhdGFcbiAgICovXG4gIGluaXRCdWlsZGVyKHR4OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHN1cGVyLmluaXRCdWlsZGVyKHR4KTtcbiAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiB0eC5uZWFyVHJhbnNhY3Rpb24uYWN0aW9ucykge1xuICAgICAgaWYgKGFjdGlvbi5mdW5jdGlvbkNhbGwgJiYgYWN0aW9uLmZ1bmN0aW9uQ2FsbC5tZXRob2ROYW1lID09PSBGVF9UUkFOU0ZFUikge1xuICAgICAgICB0aGlzLmNvbnRyYWN0Q2FsbFdyYXBwZXIuZGVwb3NpdCA9IGFjdGlvbi5mdW5jdGlvbkNhbGwuZGVwb3NpdC50b1N0cmluZygpO1xuICAgICAgICB0aGlzLmNvbnRyYWN0Q2FsbFdyYXBwZXIuZ2FzID0gYWN0aW9uLmZ1bmN0aW9uQ2FsbC5nYXMudG9TdHJpbmcoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZ2FzIG9mIHRoaXMgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBnYXMgdGhlIGdhcyBvZiB0aGlzIHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlclxuICAgKi9cbiAgcHVibGljIGdhcyhnYXM6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVWYWx1ZShuZXcgQmlnTnVtYmVyKGdhcykpO1xuICAgIHRoaXMuY29udHJhY3RDYWxsV3JhcHBlci5nYXMgPSBnYXM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZGVwb3NpdCBvZiBhdC1sZWFzdCAxIHlvY3RvTmVhclxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGVwb3NpdCB0aGUgZGVwb3NpdCBpbiB0aGUgbWluaW11bSB1bml0ICgxIE5lYXIgPSAxZTI0IHlvY3RvTmVhcikgb2YgdGhpcyB0cmFuc2FjdGlvblxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICovXG4gIHB1YmxpYyBkZXBvc2l0KGRlcG9zaXQ6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVWYWx1ZShuZXcgQmlnTnVtYmVyKGRlcG9zaXQpKTtcbiAgICB0aGlzLmNvbnRyYWN0Q2FsbFdyYXBwZXIuZGVwb3NpdCA9IGRlcG9zaXQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgYWN0dWFsIHJlY2VpdmVyIGFjY291bnQgaWQgaW5zaWRlIGFyZ3NcbiAgICpcbiAgICogQHBhcmFtIGFjY291bnRJZCB0aGUgcmVjZWl2ZXIgYWNjb3VudCBpZFxuICAgKi9cbiAgcHVibGljIGZ0UmVjZWl2ZXJJZChhY2NvdW50SWQ6IHN0cmluZyk6IHRoaXMge1xuICAgIHV0aWxzLmlzVmFsaWRBZGRyZXNzKGFjY291bnRJZCk7XG4gICAgdGhpcy5jb250cmFjdENhbGxXcmFwcGVyLmFyZ3MgPSB7IHJlY2VpdmVyX2lkOiBhY2NvdW50SWQgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBmdCBhbW91bnQgdG8gYmUgdHJhbnNmZXJyZWRcbiAgICpcbiAgICogQHBhcmFtIGFtb3VudCB0aGUgYW1vdW50IG9mIGZ1bmdpYmxlIHRva2VuIHRvIGJlIHRyYW5zZmVycmVkXG4gICAqL1xuICBwdWJsaWMgYW1vdW50KGFtb3VudDogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZVZhbHVlKG5ldyBCaWdOdW1iZXIoYW1vdW50KSk7XG4gICAgdGhpcy5jb250cmFjdENhbGxXcmFwcGVyLmFyZ3MgPSB7IGFtb3VudCB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIG9wdGlvbmFsIG1lbW8gZm9yIHRoZSB0cmFuc2ZlclxuICAgKlxuICAgKiBAcGFyYW0gbWVtb1xuICAgKi9cbiAgcHVibGljIG1lbW8obWVtbzogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy5jb250cmFjdENhbGxXcmFwcGVyLmFyZ3MgPSB7IG1lbW8gfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzdG9yYWdlIGRlcG9zaXQgYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7U3RvcmFnZURlcG9zaXRJbnB1dH0gaW5wdXQgY29udGFpbnMgdGhlIGRlcG9zaXQgdmFsdWUsIGdhcyBhbmQgb3B0aW9uYWwgYWNjb3VudCBpZFxuICAgKiBpZiBhY2NvdW50IGlkIGlzIG5vdCBwcm92aWRlZCB0aGVuIGl0IGlzIHNlbGYgdHJhbnNmZXJcbiAgICovXG4gIHB1YmxpYyBhZGRTdG9yYWdlRGVwb3NpdChpbnB1dDogU3RvcmFnZURlcG9zaXRJbnB1dCk6IHZvaWQge1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBTVE9SQUdFX0RFUE9TSVQ7XG4gICAgYXNzZXJ0KGlucHV0LmRlcG9zaXQsIG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ2RlcG9zaXQgaXMgcmVxdWlyZWQgYmVmb3JlIGJ1aWxkaW5nIHN0b3JhZ2UgZGVwb3NpdCB0cmFuc2ZlcicpKTtcbiAgICBhc3NlcnQoaW5wdXQuZ2FzLCBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdnYXMgaXMgcmVxdWlyZWQgYmVmb3JlIGJ1aWxkaW5nIGZ1bmdpYmxlIHRva2VuIHRyYW5zZmVyJykpO1xuICAgIGNvbnN0IGFyZ3MgPSBpbnB1dC5hY2NvdW50SWQgPyB7IGFjY291bnRfaWQ6IGlucHV0LmFjY291bnRJZCB9IDoge307XG4gICAgY29uc3QgYWN0aW9uID0gTmVhckFQSS50cmFuc2FjdGlvbnMuZnVuY3Rpb25DYWxsKG1ldGhvZE5hbWUsIGFyZ3MsIGlucHV0LmdhcywgaW5wdXQuZGVwb3NpdCk7XG4gICAgc3VwZXIuYWN0aW9uKGFjdGlvbik7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHsgbWV0aG9kTmFtZSwgYXJncywgZ2FzLCBkZXBvc2l0IH0gPSB0aGlzLmNvbnRyYWN0Q2FsbFdyYXBwZXIuZ2V0UGFyYW1zKCk7XG4gICAgYXNzZXJ0KGdhcywgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignZ2FzIGlzIHJlcXVpcmVkIGJlZm9yZSBidWlsZGluZyBmdW5naWJsZSB0b2tlbiB0cmFuc2ZlcicpKTtcbiAgICBhc3NlcnQoZGVwb3NpdCwgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignZGVwb3NpdCBpcyByZXF1aXJlZCBiZWZvcmUgYnVpbGRpbmcgZnVuZ2libGUgdG9rZW4gdHJhbnNmZXInKSk7XG5cbiAgICBpZiAoXG4gICAgICAhdGhpcy5fYWN0aW9ucyB8fFxuICAgICAgdGhpcy5fYWN0aW9ucy5sZW5ndGggPT09IDAgfHxcbiAgICAgICh0aGlzLl9hY3Rpb25zLmxlbmd0aCA9PT0gMSAmJiB0aGlzLl9hY3Rpb25zWzBdLmZ1bmN0aW9uQ2FsbD8ubWV0aG9kTmFtZSAhPT0gbWV0aG9kTmFtZSlcbiAgICApIHtcbiAgICAgIHN1cGVyLmFjdGlvbihOZWFyQVBJLnRyYW5zYWN0aW9ucy5mdW5jdGlvbkNhbGwobWV0aG9kTmFtZSwgYXJncywgQmlnSW50KGdhcyksIEJpZ0ludChkZXBvc2l0KSkpO1xuICAgIH1cbiAgICBjb25zdCB0eCA9IGF3YWl0IHN1cGVyLmJ1aWxkSW1wbGVtZW50YXRpb24oKTtcbiAgICB0eC5zZXRUcmFuc2FjdGlvblR5cGUoVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgIHJldHVybiB0eDtcbiAgfVxufVxuIl19

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


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