PHP WebShell

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

Просмотр файла: tokenTransferBuilder.js

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.TokenTransferBuilder = void 0;
const abstract_substrate_1 = require("@bitgo/abstract-substrate");
const sdk_core_1 = require("@bitgo/sdk-core");
const txwrapper_core_1 = require("@substrate/txwrapper-core");
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const tokenTransferTransaction_1 = require("./tokenTransferTransaction");
class TokenTransferBuilder extends abstract_substrate_1.TransactionBuilder {
    constructor(_coinConfig) {
        super(_coinConfig);
        this._transaction = new tokenTransferTransaction_1.TokenTransferTransaction(_coinConfig);
    }
    /**
     * Construct a transaction to transfer stake
     * @returns {UnsignedTransaction} an unsigned transfer stake transaction
     */
    buildTransaction() {
        const baseTxInfo = this.createBaseTxInfo();
        return this.transferStake({
            destinationColdkey: this._destinationColdkey,
            hotkey: this._hotkey,
            originNetuid: this._originNetuid,
            destinationNetuid: this._destinationNetuid,
            alphaAmount: this._alphaAmount,
        }, baseTxInfo);
    }
    /** @inheritdoc */
    get transactionType() {
        return sdk_core_1.TransactionType.SendToken;
    }
    /**
     * Set the amount to transfer
     * @param {string} amount to transfer
     * @returns {TokenTransferBuilder} This builder.
     */
    amount(amount) {
        this.validateValue(new bignumber_js_1.default(amount));
        this._alphaAmount = amount;
        return this;
    }
    /**
     * Set the validator hot key address
     * @param {string} hotkey address of validator
     * @returns {TokenTransferBuilder} This builder.
     */
    hotkey(address) {
        this.validateAddress({ address });
        this._hotkey = address;
        return this;
    }
    /**
     * Set the destination cold key address
     * @param {string} address of the destination cold key
     * @returns {TokenTransferBuilder} This builder.
     */
    destinationColdkey(address) {
        this.validateAddress({ address });
        this._destinationColdkey = address;
        return this;
    }
    /**
     * Set the origin netuid of the subnet (root network is 0)
     * @param {string} netuid of subnet
     * @returns {TokenTransferBuilder} This builder.
     */
    originNetuid(netuid) {
        this._originNetuid = netuid;
        return this;
    }
    /**
     * Set the destination netuid of the subnet (root network is 0)
     * @param {string} netuid of subnet
     * @returns {TokenTransferBuilder} This builder.
     */
    destinationNetuid(netuid) {
        this._destinationNetuid = netuid;
        return this;
    }
    /** @inheritdoc */
    fromImplementation(rawTransaction) {
        const tx = super.fromImplementation(rawTransaction);
        if (this._method?.name === abstract_substrate_1.Interface.MethodNames.TransferStake) {
            const txMethod = this._method.args;
            this.amount(txMethod.alphaAmount);
            this.hotkey(txMethod.hotkey);
            this.destinationColdkey(txMethod.destinationColdkey);
            this.originNetuid(txMethod.originNetuid);
            this.destinationNetuid(txMethod.destinationNetuid);
        }
        else {
            throw new sdk_core_1.InvalidTransactionError(`Invalid Transaction Type: ${this._method?.name}. Expected ${abstract_substrate_1.Interface.MethodNames.TransferStake}`);
        }
        return tx;
    }
    /** @inheritdoc */
    validateTransaction(_) {
        super.validateTransaction(_);
        this.validateFields(this._destinationColdkey, this._hotkey, this._originNetuid, this._destinationNetuid, this._alphaAmount);
    }
    /**
     * Helper method to validate whether tx params have the correct type and format
     * @param {string} destinationColdkey destination cold key address
     * @param {string} hotkey hotkey address of the validator
     * @param {string} originNetuid netuid of the origin subnet
     * @param {string} destinationNetuid netuid of the destination subnet
     * @param {string} alphaAmount amount to transfer
     * @throws {InvalidTransactionError} if validation fails
     */
    validateFields(destinationColdkey, hotkey, originNetuid, destinationNetuid, alphaAmount) {
        const validationResult = abstract_substrate_1.Schema.TransferStakeTransactionSchema.validate({
            destinationColdkey,
            hotkey,
            originNetuid,
            destinationNetuid,
            alphaAmount,
        });
        if (validationResult.error) {
            throw new sdk_core_1.InvalidTransactionError(`Transaction validation failed: ${validationResult.error.message}`);
        }
    }
    /** @inheritdoc */
    validateDecodedTransaction(decodedTxn, rawTransaction) {
        if (decodedTxn.method?.name === abstract_substrate_1.Interface.MethodNames.TransferStake) {
            const txMethod = decodedTxn.method.args;
            const validationResult = abstract_substrate_1.Schema.TransferStakeTransactionSchema.validate(txMethod);
            if (validationResult.error) {
                throw new sdk_core_1.InvalidTransactionError(`Transfer Transaction validation failed: ${validationResult.error.message}`);
            }
        }
    }
    /**
     * Construct a transaction to transfer stake
     *
     * @param {Interface.TransferStakeArgs} args arguments to be passed to the transferStake method
     * @param {Interface.CreateBaseTxInfo} info txn info required to construct the transferStake txn
     * @returns {UnsignedTransaction} an unsigned stake transaction
     */
    transferStake(args, info) {
        return (0, txwrapper_core_1.defineMethod)({
            method: {
                args,
                name: 'transferStake',
                pallet: 'subtensorModule',
            },
            ...info.baseTxInfo,
        }, info.options);
    }
}
exports.TokenTransferBuilder = TokenTransferBuilder;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5UcmFuc2ZlckJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Rva2VuVHJhbnNmZXJCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGtFQUErRjtBQUMvRiw4Q0FBMkU7QUFFM0UsOERBQXNIO0FBQ3RILGdFQUFxQztBQUNyQyx5RUFBc0U7QUFFdEUsTUFBYSxvQkFBcUIsU0FBUSx1Q0FBa0I7SUFPMUQsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLG1EQUF3QixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRDs7O09BR0c7SUFDTyxnQkFBZ0I7UUFDeEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDM0MsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUN2QjtZQUNFLGtCQUFrQixFQUFFLElBQUksQ0FBQyxtQkFBbUI7WUFDNUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3BCLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYTtZQUNoQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsa0JBQWtCO1lBQzFDLFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWTtTQUMvQixFQUNELFVBQVUsQ0FDWCxDQUFDO0lBQ0osQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLFNBQVMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxNQUFjO1FBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxzQkFBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7UUFDM0IsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7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LE1BQU0sRUFBRSxJQUFJLEtBQUssOEJBQVMsQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDcEUsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUE4QyxDQUFDO1lBRWxGLE1BQU0sZ0JBQWdCLEdBQUcsMkJBQU0sQ0FBQyw4QkFBOEIsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEYsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDM0IsTUFBTSxJQUFJLGtDQUF1QixDQUFDLDJDQUEyQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNqSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFFSyxhQUFhLENBQUMsSUFBaUMsRUFBRSxJQUFnQztRQUN2RixPQUFPLElBQUEsNkJBQVksRUFDakI7WUFDRSxNQUFNLEVBQUU7Z0JBQ04sSUFBSTtnQkFDSixJQUFJLEVBQUUsZUFBZTtnQkFDckIsTUFBTSxFQUFFLGlCQUFpQjthQUMxQjtZQUNELEdBQUcsSUFBSSxDQUFDLFVBQVU7U0FDbkIsRUFDRCxJQUFJLENBQUMsT0FBTyxDQUNiLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFyTEQsb0RBcUxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW50ZXJmYWNlLCBTY2hlbWEsIFRyYW5zYWN0aW9uLCBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICdAYml0Z28vYWJzdHJhY3Qtc3Vic3RyYXRlJztcbmltcG9ydCB7IEludmFsaWRUcmFuc2FjdGlvbkVycm9yLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IERlY29kZWRTaWduZWRUeCwgRGVjb2RlZFNpZ25pbmdQYXlsb2FkLCBkZWZpbmVNZXRob2QsIFVuc2lnbmVkVHJhbnNhY3Rpb24gfSBmcm9tICdAc3Vic3RyYXRlL3R4d3JhcHBlci1jb3JlJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IFRva2VuVHJhbnNmZXJUcmFuc2FjdGlvbiB9IGZyb20gJy4vdG9rZW5UcmFuc2ZlclRyYW5zYWN0aW9uJztcblxuZXhwb3J0IGNsYXNzIFRva2VuVHJhbnNmZXJCdWlsZGVyIGV4dGVuZHMgVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIF9kZXN0aW5hdGlvbkNvbGRrZXk6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9ob3RrZXk6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9vcmlnaW5OZXR1aWQ6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9kZXN0aW5hdGlvbk5ldHVpZDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX2FscGhhQW1vdW50OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gbmV3IFRva2VuVHJhbnNmZXJUcmFuc2FjdGlvbihfY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgdHJhbnNhY3Rpb24gdG8gdHJhbnNmZXIgc3Rha2VcbiAgICogQHJldHVybnMge1Vuc2lnbmVkVHJhbnNhY3Rpb259IGFuIHVuc2lnbmVkIHRyYW5zZmVyIHN0YWtlIHRyYW5zYWN0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgYnVpbGRUcmFuc2FjdGlvbigpOiBVbnNpZ25lZFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCBiYXNlVHhJbmZvID0gdGhpcy5jcmVhdGVCYXNlVHhJbmZvKCk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNmZXJTdGFrZShcbiAgICAgIHtcbiAgICAgICAgZGVzdGluYXRpb25Db2xka2V5OiB0aGlzLl9kZXN0aW5hdGlvbkNvbGRrZXksXG4gICAgICAgIGhvdGtleTogdGhpcy5faG90a2V5LFxuICAgICAgICBvcmlnaW5OZXR1aWQ6IHRoaXMuX29yaWdpbk5ldHVpZCxcbiAgICAgICAgZGVzdGluYXRpb25OZXR1aWQ6IHRoaXMuX2Rlc3RpbmF0aW9uTmV0dWlkLFxuICAgICAgICBhbHBoYUFtb3VudDogdGhpcy5fYWxwaGFBbW91bnQsXG4gICAgICB9LFxuICAgICAgYmFzZVR4SW5mb1xuICAgICk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLlNlbmRUb2tlbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGFtb3VudCB0byB0cmFuc2ZlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW1vdW50IHRvIHRyYW5zZmVyXG4gICAqIEByZXR1cm5zIHtUb2tlblRyYW5zZmVyQnVpbGRlcn0gVGhpcyBidWlsZGVyLlxuICAgKi9cbiAgYW1vdW50KGFtb3VudDogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZVZhbHVlKG5ldyBCaWdOdW1iZXIoYW1vdW50KSk7XG4gICAgdGhpcy5fYWxwaGFBbW91bnQgPSBhbW91bnQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB2YWxpZGF0b3IgaG90IGtleSBhZGRyZXNzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBob3RrZXkgYWRkcmVzcyBvZiB2YWxpZGF0b3JcbiAgICogQHJldHVybnMge1Rva2VuVHJhbnNmZXJCdWlsZGVyfSBUaGlzIGJ1aWxkZXIuXG4gICAqL1xuICBob3RrZXkoYWRkcmVzczogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZUFkZHJlc3MoeyBhZGRyZXNzIH0pO1xuICAgIHRoaXMuX2hvdGtleSA9IGFkZHJlc3M7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBkZXN0aW5hdGlvbiBjb2xkIGtleSBhZGRyZXNzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyZXNzIG9mIHRoZSBkZXN0aW5hdGlvbiBjb2xkIGtleVxuICAgKiBAcmV0dXJucyB7VG9rZW5UcmFuc2ZlckJ1aWxkZXJ9IFRoaXMgYnVpbGRlci5cbiAgICovXG5cbiAgZGVzdGluYXRpb25Db2xka2V5KGFkZHJlc3M6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHsgYWRkcmVzcyB9KTtcbiAgICB0aGlzLl9kZXN0aW5hdGlvbkNvbGRrZXkgPSBhZGRyZXNzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgb3JpZ2luIG5ldHVpZCBvZiB0aGUgc3VibmV0IChyb290IG5ldHdvcmsgaXMgMClcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5ldHVpZCBvZiBzdWJuZXRcbiAgICogQHJldHVybnMge1Rva2VuVHJhbnNmZXJCdWlsZGVyfSBUaGlzIGJ1aWxkZXIuXG4gICAqL1xuICBvcmlnaW5OZXR1aWQobmV0dWlkOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLl9vcmlnaW5OZXR1aWQgPSBuZXR1aWQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBkZXN0aW5hdGlvbiBuZXR1aWQgb2YgdGhlIHN1Ym5ldCAocm9vdCBuZXR3b3JrIGlzIDApXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXR1aWQgb2Ygc3VibmV0XG4gICAqIEByZXR1cm5zIHtUb2tlblRyYW5zZmVyQnVpbGRlcn0gVGhpcyBidWlsZGVyLlxuICAgKi9cbiAgZGVzdGluYXRpb25OZXR1aWQobmV0dWlkOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLl9kZXN0aW5hdGlvbk5ldHVpZCA9IG5ldHVpZDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgdHggPSBzdXBlci5mcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIGlmICh0aGlzLl9tZXRob2Q/Lm5hbWUgPT09IEludGVyZmFjZS5NZXRob2ROYW1lcy5UcmFuc2ZlclN0YWtlKSB7XG4gICAgICBjb25zdCB0eE1ldGhvZCA9IHRoaXMuX21ldGhvZC5hcmdzIGFzIEludGVyZmFjZS5UcmFuc2ZlclN0YWtlQXJncztcbiAgICAgIHRoaXMuYW1vdW50KHR4TWV0aG9kLmFscGhhQW1vdW50KTtcbiAgICAgIHRoaXMuaG90a2V5KHR4TWV0aG9kLmhvdGtleSk7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uQ29sZGtleSh0eE1ldGhvZC5kZXN0aW5hdGlvbkNvbGRrZXkpO1xuICAgICAgdGhpcy5vcmlnaW5OZXR1aWQodHhNZXRob2Qub3JpZ2luTmV0dWlkKTtcbiAgICAgIHRoaXMuZGVzdGluYXRpb25OZXR1aWQodHhNZXRob2QuZGVzdGluYXRpb25OZXR1aWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIFRyYW5zYWN0aW9uIFR5cGU6ICR7dGhpcy5fbWV0aG9kPy5uYW1lfS4gRXhwZWN0ZWQgJHtJbnRlcmZhY2UuTWV0aG9kTmFtZXMuVHJhbnNmZXJTdGFrZX1gXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdHg7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbihfOiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHN1cGVyLnZhbGlkYXRlVHJhbnNhY3Rpb24oXyk7XG4gICAgdGhpcy52YWxpZGF0ZUZpZWxkcyhcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQ29sZGtleSxcbiAgICAgIHRoaXMuX2hvdGtleSxcbiAgICAgIHRoaXMuX29yaWdpbk5ldHVpZCxcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uTmV0dWlkLFxuICAgICAgdGhpcy5fYWxwaGFBbW91bnRcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgdG8gdmFsaWRhdGUgd2hldGhlciB0eCBwYXJhbXMgaGF2ZSB0aGUgY29ycmVjdCB0eXBlIGFuZCBmb3JtYXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRlc3RpbmF0aW9uQ29sZGtleSBkZXN0aW5hdGlvbiBjb2xkIGtleSBhZGRyZXNzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBob3RrZXkgaG90a2V5IGFkZHJlc3Mgb2YgdGhlIHZhbGlkYXRvclxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3JpZ2luTmV0dWlkIG5ldHVpZCBvZiB0aGUgb3JpZ2luIHN1Ym5ldFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGVzdGluYXRpb25OZXR1aWQgbmV0dWlkIG9mIHRoZSBkZXN0aW5hdGlvbiBzdWJuZXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFscGhhQW1vdW50IGFtb3VudCB0byB0cmFuc2ZlclxuICAgKiBAdGhyb3dzIHtJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcn0gaWYgdmFsaWRhdGlvbiBmYWlsc1xuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUZpZWxkcyhcbiAgICBkZXN0aW5hdGlvbkNvbGRrZXk6IHN0cmluZyxcbiAgICBob3RrZXk6IHN0cmluZyxcbiAgICBvcmlnaW5OZXR1aWQ6IHN0cmluZyxcbiAgICBkZXN0aW5hdGlvbk5ldHVpZDogc3RyaW5nLFxuICAgIGFscGhhQW1vdW50OiBzdHJpbmdcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IFNjaGVtYS5UcmFuc2ZlclN0YWtlVHJhbnNhY3Rpb25TY2hlbWEudmFsaWRhdGUoe1xuICAgICAgZGVzdGluYXRpb25Db2xka2V5LFxuICAgICAgaG90a2V5LFxuICAgICAgb3JpZ2luTmV0dWlkLFxuICAgICAgZGVzdGluYXRpb25OZXR1aWQsXG4gICAgICBhbHBoYUFtb3VudCxcbiAgICB9KTtcblxuICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0LmVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoYFRyYW5zYWN0aW9uIHZhbGlkYXRpb24gZmFpbGVkOiAke3ZhbGlkYXRpb25SZXN1bHQuZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVEZWNvZGVkVHJhbnNhY3Rpb24oZGVjb2RlZFR4bjogRGVjb2RlZFNpZ25pbmdQYXlsb2FkIHwgRGVjb2RlZFNpZ25lZFR4LCByYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGRlY29kZWRUeG4ubWV0aG9kPy5uYW1lID09PSBJbnRlcmZhY2UuTWV0aG9kTmFtZXMuVHJhbnNmZXJTdGFrZSkge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSBkZWNvZGVkVHhuLm1ldGhvZC5hcmdzIGFzIHVua25vd24gYXMgSW50ZXJmYWNlLlRyYW5zZmVyU3Rha2VBcmdzO1xuXG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gU2NoZW1hLlRyYW5zZmVyU3Rha2VUcmFuc2FjdGlvblNjaGVtYS52YWxpZGF0ZSh0eE1ldGhvZCk7XG4gICAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5lcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoYFRyYW5zZmVyIFRyYW5zYWN0aW9uIHZhbGlkYXRpb24gZmFpbGVkOiAke3ZhbGlkYXRpb25SZXN1bHQuZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgdHJhbnNhY3Rpb24gdG8gdHJhbnNmZXIgc3Rha2VcbiAgICpcbiAgICogQHBhcmFtIHtJbnRlcmZhY2UuVHJhbnNmZXJTdGFrZUFyZ3N9IGFyZ3MgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgdHJhbnNmZXJTdGFrZSBtZXRob2RcbiAgICogQHBhcmFtIHtJbnRlcmZhY2UuQ3JlYXRlQmFzZVR4SW5mb30gaW5mbyB0eG4gaW5mbyByZXF1aXJlZCB0byBjb25zdHJ1Y3QgdGhlIHRyYW5zZmVyU3Rha2UgdHhuXG4gICAqIEByZXR1cm5zIHtVbnNpZ25lZFRyYW5zYWN0aW9ufSBhbiB1bnNpZ25lZCBzdGFrZSB0cmFuc2FjdGlvblxuICAgKi9cblxuICBwcml2YXRlIHRyYW5zZmVyU3Rha2UoYXJnczogSW50ZXJmYWNlLlRyYW5zZmVyU3Rha2VBcmdzLCBpbmZvOiBJbnRlcmZhY2UuQ3JlYXRlQmFzZVR4SW5mbyk6IFVuc2lnbmVkVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiBkZWZpbmVNZXRob2QoXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDoge1xuICAgICAgICAgIGFyZ3MsXG4gICAgICAgICAgbmFtZTogJ3RyYW5zZmVyU3Rha2UnLFxuICAgICAgICAgIHBhbGxldDogJ3N1YnRlbnNvck1vZHVsZScsXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmluZm8uYmFzZVR4SW5mbyxcbiAgICAgIH0sXG4gICAgICBpbmZvLm9wdGlvbnNcbiAgICApO1xuICB9XG59XG4iXX0=

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


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