123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- "use strict";
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
- }) : (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 (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __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 _ = __importStar(require("lodash"));
- const ripple_binary_codec_1 = __importDefault(require("ripple-binary-codec"));
- const hashes_1 = require("../common/hashes");
- const utils = __importStar(require("./utils"));
- const transaction_1 = __importDefault(require("./parse/transaction"));
- const transaction_2 = __importDefault(require("./transaction"));
- const common_1 = require("../common");
- function parseBinaryTransaction(transaction) {
- const tx = ripple_binary_codec_1.default.decode(transaction.tx_blob);
- tx.hash = hashes_1.computeTransactionHash(tx);
- tx.ledger_index = transaction.ledger_index;
- return {
- tx: tx,
- meta: ripple_binary_codec_1.default.decode(transaction.meta),
- validated: transaction.validated
- };
- }
- function parseAccountTxTransaction(tx, includeRawTransaction) {
- const _tx = tx.tx_blob ? parseBinaryTransaction(tx) : tx;
- return transaction_1.default(Object.assign({}, _tx.tx, { meta: _tx.meta, validated: _tx.validated }), includeRawTransaction);
- }
- function counterpartyFilter(filters, tx) {
- if (tx.address === filters.counterparty) {
- return true;
- }
- const specification = tx.specification;
- if (specification &&
- ((specification.destination &&
- specification.destination.address === filters.counterparty) ||
- specification.counterparty === filters.counterparty)) {
- return true;
- }
- return false;
- }
- function transactionFilter(address, filters, tx) {
- if (filters.excludeFailures && tx.outcome.result !== 'tesSUCCESS') {
- return false;
- }
- if (filters.types && !filters.types.includes(tx.type)) {
- return false;
- }
- if (filters.initiated === true && tx.address !== address) {
- return false;
- }
- if (filters.initiated === false && tx.address === address) {
- return false;
- }
- if (filters.counterparty && !counterpartyFilter(filters, tx)) {
- return false;
- }
- return true;
- }
- function orderFilter(options, tx) {
- return (!options.startTx ||
- (options.earliestFirst
- ? utils.compareTransactions(tx, options.startTx) > 0
- : utils.compareTransactions(tx, options.startTx) < 0));
- }
- function formatPartialResponse(address, options, data) {
- const parse = (tx) => parseAccountTxTransaction(tx, options.includeRawTransactions);
- return {
- marker: data.marker,
- results: data.transactions
- .filter((tx) => tx.validated)
- .map(parse)
- .filter(_.partial(transactionFilter, address, options))
- .filter(_.partial(orderFilter, options))
- };
- }
- function getAccountTx(connection, address, options, marker, limit) {
- const request = {
- command: 'account_tx',
- account: address,
- ledger_index_min: options.minLedgerVersion || -1,
- ledger_index_max: options.maxLedgerVersion || -1,
- forward: options.earliestFirst,
- binary: options.binary,
- limit: utils.clamp(limit, 10, 400),
- marker: marker
- };
- return connection
- .request(request)
- .then((response) => formatPartialResponse(address, options, response));
- }
- function checkForLedgerGaps(connection, options, transactions) {
- let { minLedgerVersion, maxLedgerVersion } = options;
- if (options.limit && transactions.length === options.limit) {
- if (options.earliestFirst) {
- maxLedgerVersion = transactions[transactions.length - 1].outcome.ledgerVersion;
- }
- else {
- minLedgerVersion = transactions[transactions.length - 1].outcome.ledgerVersion;
- }
- }
- return utils
- .hasCompleteLedgerRange(connection, minLedgerVersion, maxLedgerVersion)
- .then((hasCompleteLedgerRange) => {
- if (!hasCompleteLedgerRange) {
- throw new common_1.errors.MissingLedgerHistoryError();
- }
- });
- }
- function formatResponse(connection, options, transactions) {
- const sortedTransactions = options.earliestFirst
- ? transactions.sort(utils.compareTransactions)
- : transactions.sort(utils.compareTransactions).reverse();
- return checkForLedgerGaps(connection, options, sortedTransactions).then(() => sortedTransactions);
- }
- function getTransactionsInternal(connection, address, options) {
- const getter = _.partial(getAccountTx, connection, address, options);
- const format = _.partial(formatResponse, connection, options);
- return utils.getRecursive(getter, options.limit).then(format);
- }
- function getTransactions(address, options = {}) {
- common_1.validate.getTransactions({ address, options });
- address = common_1.ensureClassicAddress(address);
- const defaults = { maxLedgerVersion: -1 };
- if (options.start) {
- return transaction_2.default.call(this, options.start).then((tx) => {
- const ledgerVersion = tx.outcome.ledgerVersion;
- const bound = options.earliestFirst
- ? { minLedgerVersion: ledgerVersion }
- : { maxLedgerVersion: ledgerVersion };
- const startOptions = Object.assign({}, defaults, options, { startTx: tx }, bound);
- return getTransactionsInternal(this.connection, address, startOptions);
- });
- }
- const newOptions = Object.assign({}, defaults, options);
- return getTransactionsInternal(this.connection, address, newOptions);
- }
- exports.default = getTransactions;
- //# sourceMappingURL=transactions.js.map
|