PHP WebShell
Текущая директория: /usr/lib/node_modules/bitgo/node_modules/@bitgo/sdk-coin-polyx/dist/src/lib
Просмотр файла: transaction.js
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Transaction = void 0;
const abstract_substrate_1 = require("@bitgo/abstract-substrate");
const sdk_core_1 = require("@bitgo/sdk-core");
const txwrapper_polkadot_1 = require("@substrate/txwrapper-polkadot");
const keyring_1 = require("@polkadot/keyring");
const utils_1 = __importDefault(require("./utils"));
class Transaction extends abstract_substrate_1.Transaction {
/**
* Override the getAddressFormat method to return different values based on network type
* Returns 12 for mainnet and 42 for testnet
*
* @returns {number} The address format to use
* @override
*/
getAddressFormat() {
return utils_1.default.getAddressFormat(this._coinConfig.name);
}
/** @inheritdoc */
toJson() {
if (!this._substrateTransaction) {
throw new sdk_core_1.InvalidTransactionError('Empty transaction');
}
const decodedTx = (0, txwrapper_polkadot_1.decode)(this._substrateTransaction, {
metadataRpc: this._substrateTransaction.metadataRpc,
registry: this._registry,
isImmortalEra: abstract_substrate_1.utils.isZeroHex(this._substrateTransaction.era),
});
const result = {
id: txwrapper_polkadot_1.construct.txHash(this.toBroadcastFormat()),
sender: decodedTx.address,
referenceBlock: decodedTx.blockHash,
blockNumber: decodedTx.blockNumber,
genesisHash: decodedTx.genesisHash,
nonce: decodedTx.nonce,
specVersion: decodedTx.specVersion,
transactionVersion: decodedTx.transactionVersion,
eraPeriod: decodedTx.eraPeriod,
chainName: this._chainName,
tip: decodedTx.tip ? Number(decodedTx.tip) : 0,
};
const txMethod = decodedTx.method.args;
if (this.type === sdk_core_1.TransactionType.WalletInitialization) {
const { targetAccount } = txMethod;
const keypairDest = new abstract_substrate_1.KeyPair({
pub: Buffer.from((0, keyring_1.decodeAddress)(targetAccount)).toString('hex'),
});
result.to = keypairDest.getAddress(this.getAddressFormat());
result.amount = '0'; // RegisterDidWithCDD does not transfer any value
}
else if (this.type === sdk_core_1.TransactionType.TrustLine) {
const { assetId } = txMethod;
result.assetId = assetId;
result.sender = decodedTx.address;
result.amount = '0'; // Pre-approval does not transfer any value
}
else if (this.type === sdk_core_1.TransactionType.SendToken) {
const sendTokenArgs = txMethod;
result.fromDID = sendTokenArgs.legs[0].fungible.sender.did;
result.toDID = sendTokenArgs.legs[0].fungible.receiver.did;
result.amount = sendTokenArgs.legs[0].fungible.amount.toString();
result.assetId = sendTokenArgs.legs[0].fungible.assetId;
result.memo = sendTokenArgs.instructionMemo;
}
else {
return super.toJson();
}
return result;
}
/**
* Load the input and output data on this transaction.
*/
loadInputsAndOutputs() {
super.loadInputsAndOutputs();
const decodedTx = (0, txwrapper_polkadot_1.decode)(this._substrateTransaction, {
metadataRpc: this._substrateTransaction.metadataRpc,
registry: this._registry,
isImmortalEra: abstract_substrate_1.utils.isZeroHex(this._substrateTransaction.era),
});
if (this.type === sdk_core_1.TransactionType.WalletInitialization) {
this.decodeInputsAndOutputsForRegisterDidWithCDD(decodedTx);
}
else if (this.type === sdk_core_1.TransactionType.TrustLine) {
this.decodeInputsAndOutputsForPreApproveAsset(decodedTx);
}
else if (this.type === sdk_core_1.TransactionType.SendToken) {
this.decodeInputsAndOutputsForSendToken(decodedTx);
}
}
decodeInputsAndOutputsForRegisterDidWithCDD(decodedTx) {
const txMethod = decodedTx.method.args;
const keypairDest = new abstract_substrate_1.KeyPair({
pub: Buffer.from((0, keyring_1.decodeAddress)(txMethod.targetAccount)).toString('hex'),
});
const to = keypairDest.getAddress(this.getAddressFormat());
const value = '0';
const from = decodedTx.address;
this._inputs.push({
address: from,
value,
coin: this._coinConfig.name,
});
this._outputs.push({
address: to,
value,
coin: this._coinConfig.name,
});
}
decodeInputsAndOutputsForPreApproveAsset(decodedTx) {
const sender = decodedTx.address;
const value = '0'; // Pre-approval does not transfer any value
this._inputs.push({
address: sender,
value,
coin: this._coinConfig.name,
});
this._outputs.push({
address: sender, // In pre-approval, the output is the same as the input
value,
coin: this._coinConfig.name,
});
}
decodeInputsAndOutputsForSendToken(decodedTx) {
const txMethod = decodedTx.method.args;
const fromDID = txMethod.legs[0].fungible.sender.did;
const toDID = txMethod.legs[0].fungible.receiver.did;
const amount = txMethod.legs[0].fungible.amount.toString();
this._inputs.push({
address: fromDID,
value: amount,
coin: this._coinConfig.name,
});
this._outputs.push({
address: toDID,
value: amount,
coin: this._coinConfig.name,
});
}
}
exports.Transaction = Transaction;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGtFQUFnRztBQUNoRyw4Q0FBMkU7QUFDM0Usc0VBQWtFO0FBQ2xFLCtDQUFrRDtBQUVsRCxvREFBaUM7QUFFakMsTUFBYSxXQUFZLFNBQVEsZ0NBQW9CO0lBQ25EOzs7Ozs7T0FNRztJQUNPLGdCQUFnQjtRQUN4QixPQUFPLGVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsTUFBTTtRQUNKLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUNoQyxNQUFNLElBQUksa0NBQXVCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBQSwyQkFBTSxFQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUNuRCxXQUFXLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVc7WUFDbkQsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3hCLGFBQWEsRUFBRSwwQkFBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDO1NBQy9ELENBQXlCLENBQUM7UUFFM0IsTUFBTSxNQUFNLEdBQVc7WUFDckIsRUFBRSxFQUFFLDhCQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzlDLE1BQU0sRUFBRSxTQUFTLENBQUMsT0FBTztZQUN6QixjQUFjLEVBQUUsU0FBUyxDQUFDLFNBQVM7WUFDbkMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxXQUFXO1lBQ2xDLFdBQVcsRUFBRSxTQUFTLENBQUMsV0FBVztZQUNsQyxLQUFLLEVBQUUsU0FBUyxDQUFD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RUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDakIsT0FBTyxFQUFFLEtBQUs7WUFDZCxLQUFLLEVBQUUsTUFBTTtZQUNiLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7U0FDNUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBL0lELGtDQStJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zYWN0aW9uIGFzIFN1YnN0cmF0ZVRyYW5zYWN0aW9uLCB1dGlscywgS2V5UGFpciB9IGZyb20gJ0BiaXRnby9hYnN0cmFjdC1zdWJzdHJhdGUnO1xuaW1wb3J0IHsgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBjb25zdHJ1Y3QsIGRlY29kZSB9IGZyb20gJ0BzdWJzdHJhdGUvdHh3cmFwcGVyLXBvbGthZG90JztcbmltcG9ydCB7IGRlY29kZUFkZHJlc3MgfSBmcm9tICdAcG9sa2Fkb3Qva2V5cmluZyc7XG5pbXBvcnQgeyBEZWNvZGVkVHgsIFJlZ2lzdGVyRGlkV2l0aENEREFyZ3MsIFByZUFwcHJvdmVBc3NldEFyZ3MsIFR4RGF0YSwgQWRkQW5kQWZmaXJtV2l0aE1lZGlhdG9yc0FyZ3MgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCBwb2x5eFV0aWxzIGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb24gZXh0ZW5kcyBTdWJzdHJhdGVUcmFuc2FjdGlvbiB7XG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgZ2V0QWRkcmVzc0Zvcm1hdCBtZXRob2QgdG8gcmV0dXJuIGRpZmZlcmVudCB2YWx1ZXMgYmFzZWQgb24gbmV0d29yayB0eXBlXG4gICAqIFJldHVybnMgMTIgZm9yIG1haW5uZXQgYW5kIDQyIGZvciB0ZXN0bmV0XG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBhZGRyZXNzIGZvcm1hdCB0byB1c2VcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0QWRkcmVzc0Zvcm1hdCgpOiBudW1iZXIge1xuICAgIHJldHVybiBwb2x5eFV0aWxzLmdldEFkZHJlc3NGb3JtYXQodGhpcy5fY29pbkNvbmZpZy5uYW1lKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0pzb24oKTogVHhEYXRhIHtcbiAgICBpZiAoIXRoaXMuX3N1YnN0cmF0ZVRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0VtcHR5IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVjb2RlZFR4ID0gZGVjb2RlKHRoaXMuX3N1YnN0cmF0ZVRyYW5zYWN0aW9uLCB7XG4gICAgICBtZXRhZGF0YVJwYzogdGhpcy5fc3Vic3RyYXRlVHJhbnNhY3Rpb24ubWV0YWRhdGFScGMsXG4gICAgICByZWdpc3RyeTogdGhpcy5fcmVnaXN0cnksXG4gICAgICBpc0ltbW9ydGFsRXJhOiB1dGlscy5pc1plcm9IZXgodGhpcy5fc3Vic3RyYXRlVHJhbnNhY3Rpb24uZXJhKSxcbiAgICB9KSBhcyB1bmtub3duIGFzIERlY29kZWRUeDtcblxuICAgIGNvbnN0IHJlc3VsdDogVHhEYXRhID0ge1xuICAgICAgaWQ6IGNvbnN0cnVjdC50eEhhc2godGhpcy50b0Jyb2FkY2FzdEZvcm1hdCgpKSxcbiAgICAgIHNlbmRlcjogZGVjb2RlZFR4LmFkZHJlc3MsXG4gICAgICByZWZlcmVuY2VCbG9jazogZGVjb2RlZFR4LmJsb2NrSGFzaCxcbiAgICAgIGJsb2NrTnVtYmVyOiBkZWNvZGVkVHguYmxvY2tOdW1iZXIsXG4gICAgICBnZW5lc2lzSGFzaDogZGVjb2RlZFR4LmdlbmVzaXNIYXNoLFxuICAgICAgbm9uY2U6IGRlY29kZWRUeC5ub25jZSxcbiAgICAgIHNwZWNWZXJzaW9uOiBkZWNvZGVkVHguc3BlY1ZlcnNpb24sXG4gICAgICB0cmFuc2FjdGlvblZlcnNpb246IGRlY29kZWRUeC50cmFuc2FjdGlvblZlcnNpb24sXG4gICAgICBlcmFQZXJpb2Q6IGRlY29kZWRUeC5lcmFQZXJpb2QsXG4gICAgICBjaGFpbk5hbWU6IHRoaXMuX2NoYWluTmFtZSxcbiAgICAgIHRpcDogZGVjb2RlZFR4LnRpcCA/IE51bWJlcihkZWNvZGVkVHgudGlwKSA6IDAsXG4gICAgfTtcblxuICAgIGNvbnN0IHR4TWV0aG9kID0gZGVjb2RlZFR4Lm1ldGhvZC5hcmdzO1xuICAgIGlmICh0aGlzLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbikge1xuICAgICAgY29uc3QgeyB0YXJnZXRBY2NvdW50IH0gPSB0eE1ldGhvZCBhcyBSZWdpc3RlckRpZFdpdGhDRERBcmdzO1xuICAgICAgY29uc3Qga2V5cGFpckRlc3QgPSBuZXcgS2V5UGFpcih7XG4gICAgICAgIHB1YjogQnVmZmVyLmZyb20oZGVjb2RlQWRkcmVzcyh0YXJnZXRBY2NvdW50KSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgfSk7XG4gICAgICByZXN1bHQudG8gPSBrZXlwYWlyRGVzdC5nZXRBZGRyZXNzKHRoaXMuZ2V0QWRkcmVzc0Zvcm1hdCgpKTtcbiAgICAgIHJlc3VsdC5hbW91bnQgPSAnMCc7IC8vIFJlZ2lzdGVyRGlkV2l0aENERCBkb2VzIG5vdCB0cmFuc2ZlciBhbnkgdmFsdWVcbiAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlRydXN0TGluZSkge1xuICAgICAgY29uc3QgeyBhc3NldElkIH0gPSB0eE1ldGhvZCBhcyBQcmVBcHByb3ZlQXNzZXRBcmdzO1xuICAgICAgcmVzdWx0LmFzc2V0SWQgPSBhc3NldElkO1xuICAgICAgcmVzdWx0LnNlbmRlciA9IGRlY29kZWRUeC5hZGRyZXNzO1xuICAgICAgcmVzdWx0LmFtb3VudCA9ICcwJzsgLy8gUHJlLWFwcHJvdmFsIGRvZXMgbm90IHRyYW5zZmVyIGFueSB2YWx1ZVxuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU2VuZFRva2VuKSB7XG4gICAgICBjb25zdCBzZW5kVG9rZW5BcmdzID0gdHhNZXRob2QgYXMgQWRkQW5kQWZmaXJtV2l0aE1lZGlhdG9yc0FyZ3M7XG4gICAgICByZXN1bHQuZnJvbURJRCA9IHNlbmRUb2tlbkFyZ3MubGVnc1swXS5mdW5naWJsZS5zZW5kZXIuZGlkO1xuICAgICAgcmVzdWx0LnRvRElEID0gc2VuZFRva2VuQXJncy5sZWdzWzBdLmZ1bmdpYmxlLnJlY2VpdmVyLmRpZDtcbiAgICAgIHJlc3VsdC5hbW91bnQgPSBzZW5kVG9rZW5BcmdzLmxlZ3NbMF0uZnVuZ2libGUuYW1vdW50LnRvU3RyaW5nKCk7XG4gICAgICByZXN1bHQuYXNzZXRJZCA9IHNlbmRUb2tlbkFyZ3MubGVnc1swXS5mdW5naWJsZS5hc3NldElkO1xuICAgICAgcmVzdWx0Lm1lbW8gPSBzZW5kVG9rZW5BcmdzLmluc3RydWN0aW9uTWVtbztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHN1cGVyLnRvSnNvbigpIGFzIFR4RGF0YTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBvbiB0aGlzIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgbG9hZElucHV0c0FuZE91dHB1dHMoKTogdm9pZCB7XG4gICAgc3VwZXIubG9hZElucHV0c0FuZE91dHB1dHMoKTtcblxuICAgIGNvbnN0IGRlY29kZWRUeCA9IGRlY29kZSh0aGlzLl9zdWJzdHJhdGVUcmFuc2FjdGlvbiwge1xuICAgICAgbWV0YWRhdGFScGM6IHRoaXMuX3N1YnN0cmF0ZVRyYW5zYWN0aW9uLm1ldGFkYXRhUnBjLFxuICAgICAgcmVnaXN0cnk6IHRoaXMuX3JlZ2lzdHJ5LFxuICAgICAgaXNJbW1vcnRhbEVyYTogdXRpbHMuaXNaZXJvSGV4KHRoaXMuX3N1YnN0cmF0ZVRyYW5zYWN0aW9uLmVyYSksXG4gICAgfSkgYXMgdW5rbm93biBhcyBEZWNvZGVkVHg7XG5cbiAgICBpZiAodGhpcy50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuV2FsbGV0SW5pdGlhbGl6YXRpb24pIHtcbiAgICAgIHRoaXMuZGVjb2RlSW5wdXRzQW5kT3V0cHV0c0ZvclJlZ2lzdGVyRGlkV2l0aENERChkZWNvZGVkVHgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuVHJ1c3RMaW5lKSB7XG4gICAgICB0aGlzLmRlY29kZUlucHV0c0FuZE91dHB1dHNGb3JQcmVBcHByb3ZlQXNzZXQoZGVjb2RlZFR4KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlNlbmRUb2tlbikge1xuICAgICAgdGhpcy5kZWNvZGVJbnB1dHNBbmRPdXRwdXRzRm9yU2VuZFRva2VuKGRlY29kZWRUeCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZWNvZGVJbnB1dHNBbmRPdXRwdXRzRm9yUmVnaXN0ZXJEaWRXaXRoQ0REKGRlY29kZWRUeDogRGVjb2RlZFR4KSB7XG4gICAgY29uc3QgdHhNZXRob2QgPSBkZWNvZGVkVHgubWV0aG9kLmFyZ3MgYXMgUmVnaXN0ZXJEaWRXaXRoQ0REQXJncztcbiAgICBjb25zdCBrZXlwYWlyRGVzdCA9IG5ldyBLZXlQYWlyKHtcbiAgICAgIHB1YjogQnVmZmVyLmZyb20oZGVjb2RlQWRkcmVzcyh0eE1ldGhvZC50YXJnZXRBY2NvdW50KSkudG9TdHJpbmcoJ2hleCcpLFxuICAgIH0pO1xuICAgIGNvbnN0IHRvID0ga2V5cGFpckRlc3QuZ2V0QWRkcmVzcyh0aGlzLmdldEFkZHJlc3NGb3JtYXQoKSk7XG4gICAgY29uc3QgdmFsdWUgPSAnMCc7XG4gICAgY29uc3QgZnJvbSA9IGRlY29kZWRUeC5hZGRyZXNzO1xuXG4gICAgdGhpcy5faW5wdXRzLnB1c2goe1xuICAgICAgYWRkcmVzczogZnJvbSxcbiAgICAgIHZhbHVlLFxuICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fb3V0cHV0cy5wdXNoKHtcbiAgICAgIGFkZHJlc3M6IHRvLFxuICAgICAgdmFsdWUsXG4gICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGRlY29kZUlucHV0c0FuZE91dHB1dHNGb3JQcmVBcHByb3ZlQXNzZXQoZGVjb2RlZFR4OiBEZWNvZGVkVHgpIHtcbiAgICBjb25zdCBzZW5kZXIgPSBkZWNvZGVkVHguYWRkcmVzcztcbiAgICBjb25zdCB2YWx1ZSA9ICcwJzsgLy8gUHJlLWFwcHJvdmFsIGRvZXMgbm90IHRyYW5zZmVyIGFueSB2YWx1ZVxuXG4gICAgdGhpcy5faW5wdXRzLnB1c2goe1xuICAgICAgYWRkcmVzczogc2VuZGVyLFxuICAgICAgdmFsdWUsXG4gICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLl9vdXRwdXRzLnB1c2goe1xuICAgICAgYWRkcmVzczogc2VuZGVyLCAvLyBJbiBwcmUtYXBwcm92YWwsIHRoZSBvdXRwdXQgaXMgdGhlIHNhbWUgYXMgdGhlIGlucHV0XG4gICAgICB2YWx1ZSxcbiAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZGVjb2RlSW5wdXRzQW5kT3V0cHV0c0ZvclNlbmRUb2tlbihkZWNvZGVkVHg6IERlY29kZWRUeCkge1xuICAgIGNvbnN0IHR4TWV0aG9kID0gZGVjb2RlZFR4Lm1ldGhvZC5hcmdzIGFzIEFkZEFuZEFmZmlybVdpdGhNZWRpYXRvcnNBcmdzO1xuICAgIGNvbnN0IGZyb21ESUQgPSB0eE1ldGhvZC5sZWdzWzBdLmZ1bmdpYmxlLnNlbmRlci5kaWQ7XG4gICAgY29uc3QgdG9ESUQgPSB0eE1ldGhvZC5sZWdzWzBdLmZ1bmdpYmxlLnJlY2VpdmVyLmRpZDtcbiAgICBjb25zdCBhbW91bnQgPSB0eE1ldGhvZC5sZWdzWzBdLmZ1bmdpYmxlLmFtb3VudC50b1N0cmluZygpO1xuXG4gICAgdGhpcy5faW5wdXRzLnB1c2goe1xuICAgICAgYWRkcmVzczogZnJvbURJRCxcbiAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLl9vdXRwdXRzLnB1c2goe1xuICAgICAgYWRkcmVzczogdG9ESUQsXG4gICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgIH0pO1xuICB9XG59XG4iXX0=Выполнить команду
Для локальной разработки. Не используйте в интернете!