123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- "use strict";
- var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.handleStreamPartialPayment = exports.handlePartialPayment = void 0;
- const bignumber_js_1 = __importDefault(require("bignumber.js"));
- const ripple_binary_codec_1 = require("ripple-binary-codec");
- const transactions_1 = require("../models/transactions");
- const utils_1 = require("../models/utils");
- const WARN_PARTIAL_PAYMENT_CODE = 2001;
- function amountsEqual(amt1, amt2) {
- if (typeof amt1 === 'string' && typeof amt2 === 'string') {
- return amt1 === amt2;
- }
- if (typeof amt1 === 'string' || typeof amt2 === 'string') {
- return false;
- }
- const aValue = new bignumber_js_1.default(amt1.value);
- const bValue = new bignumber_js_1.default(amt2.value);
- return (amt1.currency === amt2.currency &&
- amt1.issuer === amt2.issuer &&
- aValue.isEqualTo(bValue));
- }
- function isPartialPayment(tx, metadata) {
- var _a;
- if (tx == null || metadata == null || tx.TransactionType !== 'Payment') {
- return false;
- }
- let meta = metadata;
- if (typeof meta === 'string') {
- if (meta === 'unavailable') {
- return false;
- }
- meta = (0, ripple_binary_codec_1.decode)(meta);
- }
- const tfPartial = typeof tx.Flags === 'number'
- ? (0, utils_1.isFlagEnabled)(tx.Flags, transactions_1.PaymentFlags.tfPartialPayment)
- : (_a = tx.Flags) === null || _a === void 0 ? void 0 : _a.tfPartialPayment;
- if (!tfPartial) {
- return false;
- }
- const delivered = meta.delivered_amount;
- const amount = tx.Amount;
- if (delivered === undefined) {
- return false;
- }
- return !amountsEqual(delivered, amount);
- }
- function txHasPartialPayment(response) {
- return isPartialPayment(response.result, response.result.meta);
- }
- function txEntryHasPartialPayment(response) {
- return isPartialPayment(response.result.tx_json, response.result.metadata);
- }
- function accountTxHasPartialPayment(response) {
- const { transactions } = response.result;
- const foo = transactions.some((tx) => isPartialPayment(tx.tx, tx.meta));
- return foo;
- }
- function hasPartialPayment(command, response) {
- switch (command) {
- case 'tx':
- return txHasPartialPayment(response);
- case 'transaction_entry':
- return txEntryHasPartialPayment(response);
- case 'account_tx':
- return accountTxHasPartialPayment(response);
- default:
- return false;
- }
- }
- function handlePartialPayment(command, response) {
- var _a;
- if (hasPartialPayment(command, response)) {
- const warnings = (_a = response.warnings) !== null && _a !== void 0 ? _a : [];
- const warning = {
- id: WARN_PARTIAL_PAYMENT_CODE,
- message: 'This response contains a Partial Payment',
- };
- warnings.push(warning);
- response.warnings = warnings;
- }
- }
- exports.handlePartialPayment = handlePartialPayment;
- function handleStreamPartialPayment(stream, log) {
- var _a;
- if (isPartialPayment(stream.transaction, stream.meta)) {
- const warnings = (_a = stream.warnings) !== null && _a !== void 0 ? _a : [];
- const warning = {
- id: WARN_PARTIAL_PAYMENT_CODE,
- message: 'This response contains a Partial Payment',
- };
- warnings.push(warning);
- stream.warnings = warnings;
- log('Partial payment received', JSON.stringify(stream));
- }
- }
- exports.handleStreamPartialPayment = handleStreamPartialPayment;
- //# sourceMappingURL=partialPayment.js.map
|