PHP WebShell
Текущая директория: /opt/BitGoJS/node_modules/stellar-sdk/lib
Просмотр файла: server.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Server = exports.SUBMIT_TRANSACTION_TIMEOUT = void 0;
var tslib_1 = require("tslib");
var bignumber_js_1 = tslib_1.__importDefault(require("bignumber.js"));
var isEmpty_1 = tslib_1.__importDefault(require("lodash/isEmpty"));
var merge_1 = tslib_1.__importDefault(require("lodash/merge"));
var stellar_base_1 = require("stellar-base");
var urijs_1 = tslib_1.__importDefault(require("urijs"));
var call_builder_1 = require("./call_builder");
var config_1 = require("./config");
var errors_1 = require("./errors");
var account_call_builder_1 = require("./account_call_builder");
var account_response_1 = require("./account_response");
var assets_call_builder_1 = require("./assets_call_builder");
var claimable_balances_call_builder_1 = require("./claimable_balances_call_builder");
var effect_call_builder_1 = require("./effect_call_builder");
var friendbot_builder_1 = require("./friendbot_builder");
var ledger_call_builder_1 = require("./ledger_call_builder");
var liquidity_pool_call_builder_1 = require("./liquidity_pool_call_builder");
var offer_call_builder_1 = require("./offer_call_builder");
var operation_call_builder_1 = require("./operation_call_builder");
var orderbook_call_builder_1 = require("./orderbook_call_builder");
var payment_call_builder_1 = require("./payment_call_builder");
var strict_receive_path_call_builder_1 = require("./strict_receive_path_call_builder");
var strict_send_path_call_builder_1 = require("./strict_send_path_call_builder");
var trade_aggregation_call_builder_1 = require("./trade_aggregation_call_builder");
var trades_call_builder_1 = require("./trades_call_builder");
var transaction_call_builder_1 = require("./transaction_call_builder");
var horizon_axios_client_1 = tslib_1.__importStar(require("./horizon_axios_client"));
exports.SUBMIT_TRANSACTION_TIMEOUT = 60 * 1000;
var STROOPS_IN_LUMEN = 10000000;
var ACCOUNT_REQUIRES_MEMO = "MQ==";
function _getAmountInLumens(amt) {
return new bignumber_js_1.default(amt).div(STROOPS_IN_LUMEN).toString();
}
var Server = (function () {
function Server(serverURL, opts) {
if (opts === void 0) { opts = {}; }
this.serverURL = urijs_1.default(serverURL);
var allowHttp = typeof opts.allowHttp === "undefined"
? config_1.Config.isAllowHttp()
: opts.allowHttp;
var customHeaders = {};
if (opts.appName) {
customHeaders["X-App-Name"] = opts.appName;
}
if (opts.appVersion) {
customHeaders["X-App-Version"] = opts.appVersion;
}
if (opts.authToken) {
customHeaders["X-Auth-Token"] = opts.authToken;
}
if (!isEmpty_1.default(customHeaders)) {
horizon_axios_client_1.default.interceptors.request.use(function (config) {
config.headers = merge_1.default(customHeaders, config.headers);
return config;
});
}
if (this.serverURL.protocol() !== "https" && !allowHttp) {
throw new Error("Cannot connect to insecure horizon server");
}
}
Server.prototype.fetchTimebounds = function (seconds, _isRetry) {
if (_isRetry === void 0) { _isRetry = false; }
return tslib_1.__awaiter(this, void 0, void 0, function () {
var currentTime;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
currentTime = horizon_axios_client_1.getCurrentServerTime(this.serverURL.hostname());
if (currentTime) {
return [2, {
minTime: 0,
maxTime: currentTime + seconds,
}];
}
if (_isRetry) {
return [2, {
minTime: 0,
maxTime: Math.floor(new Date().getTime() / 1000) + seconds,
}];
}
return [4, horizon_axios_client_1.default.get(urijs_1.default(this.serverURL).toString())];
case 1:
_a.sent();
return [4, this.fetchTimebounds(seconds, true)];
case 2: return [2, _a.sent()];
}
});
});
};
Server.prototype.fetchBaseFee = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var response;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4, this.feeStats()];
case 1:
response = _a.sent();
return [2, parseInt(response.last_ledger_base_fee, 10) || 100];
}
});
});
};
Server.prototype.feeStats = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var cb;
return tslib_1.__generator(this, function (_a) {
cb = new call_builder_1.CallBuilder(urijs_1.default(this.serverURL));
cb.filter.push(["fee_stats"]);
return [2, cb.call()];
});
});
};
Server.prototype.submitTransaction = function (transaction, opts) {
if (opts === void 0) { opts = { skipMemoRequiredCheck: false }; }
return tslib_1.__awaiter(this, void 0, void 0, function () {
var tx;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!!opts.skipMemoRequiredCheck) return [3, 2];
return [4, this.checkMemoRequired(transaction)];
case 1:
_a.sent();
_a.label = 2;
case 2:
tx = encodeURIComponent(transaction
.toEnvelope()
.toXDR()
.toString("base64"));
return [2, horizon_axios_client_1.default.post(urijs_1.default(this.serverURL)
.segment("transactions")
.toString(), "tx=" + tx, { timeout: exports.SUBMIT_TRANSACTION_TIMEOUT })
.then(function (response) {
if (!response.data.result_xdr) {
return response.data;
}
var responseXDR = stellar_base_1.xdr.TransactionResult
.fromXDR(response.data.result_xdr, "base64");
var results = responseXDR.result().value();
var offerResults;
var hasManageOffer;
if (results.length) {
offerResults = results
.map(function (result, i) {
if (result.value().switch().name !== "manageBuyOffer" &&
result.value().switch().name !== "manageSellOffer") {
return null;
}
hasManageOffer = true;
var amountBought = new bignumber_js_1.default(0);
var amountSold = new bignumber_js_1.default(0);
var offerSuccess = result
.value()
.value()
.success();
var offersClaimed = offerSuccess
.offersClaimed()
.map(function (offerClaimedAtom) {
var offerClaimed = offerClaimedAtom.value();
var sellerId = "";
switch (offerClaimedAtom.switch()) {
case stellar_base_1.xdr.ClaimAtomType.claimAtomTypeV0():
sellerId = stellar_base_1.StrKey.encodeEd25519PublicKey(offerClaimed.sellerEd25519());
break;
case stellar_base_1.xdr.ClaimAtomType.claimAtomTypeOrderBook():
sellerId = stellar_base_1.StrKey.encodeEd25519PublicKey(offerClaimed.sellerId().ed25519());
break;
default:
throw new Error("Invalid offer result type: " +
offerClaimedAtom.switch());
}
var claimedOfferAmountBought = new bignumber_js_1.default(offerClaimed.amountBought().toString());
var claimedOfferAmountSold = new bignumber_js_1.default(offerClaimed.amountSold().toString());
amountBought = amountBought.add(claimedOfferAmountSold);
amountSold = amountSold.add(claimedOfferAmountBought);
var sold = stellar_base_1.Asset.fromOperation(offerClaimed.assetSold());
var bought = stellar_base_1.Asset.fromOperation(offerClaimed.assetBought());
var assetSold = {
type: sold.getAssetType(),
assetCode: sold.getCode(),
issuer: sold.getIssuer(),
};
var assetBought = {
type: bought.getAssetType(),
assetCode: bought.getCode(),
issuer: bought.getIssuer(),
};
return {
sellerId: sellerId,
offerId: offerClaimed.offerId().toString(),
assetSold: assetSold,
amountSold: _getAmountInLumens(claimedOfferAmountSold),
assetBought: assetBought,
amountBought: _getAmountInLumens(claimedOfferAmountBought),
};
});
var effect = offerSuccess.offer().switch().name;
var currentOffer;
if (typeof offerSuccess.offer().value === "function" &&
offerSuccess.offer().value()) {
var offerXDR = offerSuccess.offer().value();
currentOffer = {
offerId: offerXDR.offerId().toString(),
selling: {},
buying: {},
amount: _getAmountInLumens(offerXDR.amount().toString()),
price: {
n: offerXDR.price().n(),
d: offerXDR.price().d(),
},
};
var selling = stellar_base_1.Asset.fromOperation(offerXDR.selling());
currentOffer.selling = {
type: selling.getAssetType(),
assetCode: selling.getCode(),
issuer: selling.getIssuer(),
};
var buying = stellar_base_1.Asset.fromOperation(offerXDR.buying());
currentOffer.buying = {
type: buying.getAssetType(),
assetCode: buying.getCode(),
issuer: buying.getIssuer(),
};
}
return {
offersClaimed: offersClaimed,
effect: effect,
operationIndex: i,
currentOffer: currentOffer,
amountBought: _getAmountInLumens(amountBought),
amountSold: _getAmountInLumens(amountSold),
isFullyOpen: !offersClaimed.length && effect !== "manageOfferDeleted",
wasPartiallyFilled: !!offersClaimed.length && effect !== "manageOfferDeleted",
wasImmediatelyFilled: !!offersClaimed.length && effect === "manageOfferDeleted",
wasImmediatelyDeleted: !offersClaimed.length && effect === "manageOfferDeleted",
};
})
.filter(function (result) { return !!result; });
}
return Object.assign({}, response.data, {
offerResults: hasManageOffer ? offerResults : undefined,
});
})
.catch(function (response) {
if (response instanceof Error) {
return Promise.reject(response);
}
return Promise.reject(new errors_1.BadResponseError("Transaction submission failed. Server responded: " + response.status + " " + response.statusText, response.data));
})];
}
});
});
};
Server.prototype.accounts = function () {
return new account_call_builder_1.AccountCallBuilder(urijs_1.default(this.serverURL));
};
Server.prototype.claimableBalances = function () {
return new claimable_balances_call_builder_1.ClaimableBalanceCallBuilder(urijs_1.default(this.serverURL));
};
Server.prototype.ledgers = function () {
return new ledger_call_builder_1.LedgerCallBuilder(urijs_1.default(this.serverURL));
};
Server.prototype.transactions = function () {
return new transaction_call_builder_1.TransactionCallBuilder(urijs_1.default(this.serverURL));
};
Server.prototype.offers = function () {
return new offer_call_builder_1.OfferCallBuilder(urijs_1.default(this.serverURL));
};
Server.prototype.orderbook = function (selling, buying) {
return new orderbook_call_builder_1.OrderbookCallBuilder(urijs_1.default(this.serverURL), selling, buying);
};
Server.prototype.trades = function () {
return new trades_call_builder_1.TradesCallBuilder(urijs_1.default(this.serverURL));
};
Server.prototype.operations = function () {
return new operation_call_builder_1.OperationCallBuilder(urijs_1.default(this.serverURL));
};
Server.prototype.liquidityPools = function () {
return new liquidity_pool_call_builder_1.LiquidityPoolCallBuilder(urijs_1.default(this.serverURL));
};
Server.prototype.strictReceivePaths = function (source, destinationAsset, destinationAmount) {
return new strict_receive_path_call_builder_1.StrictReceivePathCallBuilder(urijs_1.default(this.serverURL), source, destinationAsset, destinationAmount);
};
Server.prototype.strictSendPaths = function (sourceAsset, sourceAmount, destination) {
return new strict_send_path_call_builder_1.StrictSendPathCallBuilder(urijs_1.default(this.serverURL), sourceAsset, sourceAmount, destination);
};
Server.prototype.payments = function () {
return new payment_call_builder_1.PaymentCallBuilder(urijs_1.default(this.serverURL));
};
Server.prototype.effects = function () {
return new effect_call_builder_1.EffectCallBuilder(urijs_1.default(this.serverURL));
};
Server.prototype.friendbot = function (address) {
return new friendbot_builder_1.FriendbotBuilder(urijs_1.default(this.serverURL), address);
};
Server.prototype.assets = function () {
return new assets_call_builder_1.AssetsCallBuilder(urijs_1.default(this.serverURL));
};
Server.prototype.loadAccount = function (accountId) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var res;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4, this.accounts()
.accountId(accountId)
.call()];
case 1:
res = _a.sent();
return [2, new account_response_1.AccountResponse(res)];
}
});
});
};
Server.prototype.tradeAggregation = function (base, counter, start_time, end_time, resolution, offset) {
return new trade_aggregation_call_builder_1.TradeAggregationCallBuilder(urijs_1.default(this.serverURL), base, counter, start_time, end_time, resolution, offset);
};
Server.prototype.checkMemoRequired = function (transaction) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var destinations, i, operation, destination, account, e_1;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
if (transaction instanceof stellar_base_1.FeeBumpTransaction) {
transaction = transaction.innerTransaction;
}
if (transaction.memo.type !== "none") {
return [2];
}
destinations = new Set();
i = 0;
_a.label = 1;
case 1:
if (!(i < transaction.operations.length)) return [3, 6];
operation = transaction.operations[i];
switch (operation.type) {
case "payment":
case "pathPaymentStrictReceive":
case "pathPaymentStrictSend":
case "accountMerge":
break;
default:
return [3, 5];
}
destination = operation.destination;
if (destinations.has(destination)) {
return [3, 5];
}
destinations.add(destination);
if (destination.startsWith("M")) {
return [3, 5];
}
_a.label = 2;
case 2:
_a.trys.push([2, 4, , 5]);
return [4, this.loadAccount(destination)];
case 3:
account = _a.sent();
if (account.data_attr["config.memo_required"] === ACCOUNT_REQUIRES_MEMO) {
throw new errors_1.AccountRequiresMemoError("account requires memo", destination, i);
}
return [3, 5];
case 4:
e_1 = _a.sent();
if (e_1 instanceof errors_1.AccountRequiresMemoError) {
throw e_1;
}
if (!(e_1 instanceof errors_1.NotFoundError)) {
throw e_1;
}
return [3, 5];
case 5:
i++;
return [3, 1];
case 6: return [2];
}
});
});
};
return Server;
}());
exports.Server = Server;
//# sourceMappingURL=server.js.mapВыполнить команду
Для локальной разработки. Не используйте в интернете!