diff options
| author | Florian Dold <florian@dold.me> | 2022-09-16 17:04:32 +0200 | 
|---|---|---|
| committer | Florian Dold <florian@dold.me> | 2022-09-16 17:04:32 +0200 | 
| commit | d6c545a0ba68d5fce107779d4b0a2244a137b1aa (patch) | |
| tree | 29eb3b7b5a6483581f35388d0eed990a42296444 /packages/taler-wallet-core/src/operations | |
| parent | 374d3498d8233688fe009db025b4ae0add46bb19 (diff) | |
-prettier, fix type error
Diffstat (limited to 'packages/taler-wallet-core/src/operations')
| -rw-r--r-- | packages/taler-wallet-core/src/operations/transactions.ts | 396 | 
1 files changed, 255 insertions, 141 deletions
| diff --git a/packages/taler-wallet-core/src/operations/transactions.ts b/packages/taler-wallet-core/src/operations/transactions.ts index 4c0ea7663..19f6aee64 100644 --- a/packages/taler-wallet-core/src/operations/transactions.ts +++ b/packages/taler-wallet-core/src/operations/transactions.ts @@ -19,11 +19,14 @@   */  import {    AbsoluteTime, -  addPaytoQueryParams, AmountJson, Amounts, +  addPaytoQueryParams, +  AmountJson, +  Amounts,    constructPayPullUri,    constructPayPushUri,    Logger, -  OrderShortInfo, PaymentStatus, +  OrderShortInfo, +  PaymentStatus,    RefundInfoShort,    TalerProtocolTimestamp,    Transaction, @@ -33,7 +36,7 @@ import {    TransactionsResponse,    TransactionType,    WithdrawalDetails, -  WithdrawalType +  WithdrawalType,  } from "@gnu-taler/taler-util";  import {    AbortStatus, @@ -47,7 +50,7 @@ import {    TipRecord,    WalletRefundItem,    WithdrawalGroupRecord, -  WithdrawalRecordType +  WithdrawalRecordType,  } from "../db.js";  import { InternalWalletState } from "../internal-wallet-state.js";  import { RetryTags } from "../util/retries.js"; @@ -140,55 +143,92 @@ export async function getTransactionById(    ) {      const withdrawalGroupId = rest[0];      return await ws.db -      .mktx((x) => [x.withdrawalGroups, x.exchangeDetails, x.exchanges, x.operationRetries]) +      .mktx((x) => [ +        x.withdrawalGroups, +        x.exchangeDetails, +        x.exchanges, +        x.operationRetries, +      ])        .runReadWrite(async (tx) => {          const withdrawalGroupRecord = await tx.withdrawalGroups.get(            withdrawalGroupId,          ); -        if (!withdrawalGroupRecord) throw Error("not found") +        if (!withdrawalGroupRecord) throw Error("not found");          const opId = RetryTags.forWithdrawal(withdrawalGroupRecord);          const ort = await tx.operationRetries.get(opId); -        if (withdrawalGroupRecord.wgInfo.withdrawalType === WithdrawalRecordType.BankIntegrated) { -          return buildTransactionForBankIntegratedWithdraw(withdrawalGroupRecord, ort); +        if ( +          withdrawalGroupRecord.wgInfo.withdrawalType === +          WithdrawalRecordType.BankIntegrated +        ) { +          return buildTransactionForBankIntegratedWithdraw( +            withdrawalGroupRecord, +            ort, +          );          } -        if (withdrawalGroupRecord.wgInfo.withdrawalType === WithdrawalRecordType.PeerPullCredit) { -          return buildTransactionForPullPaymentCredit(withdrawalGroupRecord, ort); +        if ( +          withdrawalGroupRecord.wgInfo.withdrawalType === +          WithdrawalRecordType.PeerPullCredit +        ) { +          return buildTransactionForPullPaymentCredit( +            withdrawalGroupRecord, +            ort, +          );          } -        if (withdrawalGroupRecord.wgInfo.withdrawalType === WithdrawalRecordType.PeerPushCredit) { -          return buildTransactionForPushPaymentCredit(withdrawalGroupRecord, ort); +        if ( +          withdrawalGroupRecord.wgInfo.withdrawalType === +          WithdrawalRecordType.PeerPushCredit +        ) { +          return buildTransactionForPushPaymentCredit( +            withdrawalGroupRecord, +            ort, +          );          } -        const exchangeDetails = await getExchangeDetails(tx, withdrawalGroupRecord.exchangeBaseUrl,); -        if (!exchangeDetails) throw Error('not exchange details') - -        return buildTransactionForManualWithdraw(withdrawalGroupRecord, exchangeDetails, ort); +        const exchangeDetails = await getExchangeDetails( +          tx, +          withdrawalGroupRecord.exchangeBaseUrl, +        ); +        if (!exchangeDetails) throw Error("not exchange details"); +        return buildTransactionForManualWithdraw( +          withdrawalGroupRecord, +          exchangeDetails, +          ort, +        );        }); -    } else if (type === TransactionType.Payment) {      const proposalId = rest[0];      return await ws.db        .mktx((x) => [x.purchases, x.tombstones, x.operationRetries])        .runReadWrite(async (tx) => {          const purchase = await tx.purchases.get(proposalId); -        if (!purchase) throw Error("not found") - -        const filteredRefunds = await Promise.all(Object.values(purchase.refunds).map(async r => { -          const t = await tx.tombstones.get(makeEventId( -            TombstoneTag.DeleteRefund, -            purchase.proposalId, -            `${r.executionTime.t_s}`, -          )) -          if (!t) return r -          return undefined -        })); +        if (!purchase) throw Error("not found"); + +        const filteredRefunds = await Promise.all( +          Object.values(purchase.refunds).map(async (r) => { +            const t = await tx.tombstones.get( +              makeEventId( +                TombstoneTag.DeleteRefund, +                purchase.proposalId, +                `${r.executionTime.t_s}`, +              ), +            ); +            if (!t) return r; +            return undefined; +          }), +        ); -        const cleanRefunds = filteredRefunds.filter((x): x is WalletRefundItem => !!x); +        const cleanRefunds = filteredRefunds.filter( +          (x): x is WalletRefundItem => !!x, +        );          const contractData = purchase.download.contractData; -        const refunds = mergeRefundByExecutionTime(cleanRefunds, Amounts.getZero(contractData.amount.currency)); +        const refunds = mergeRefundByExecutionTime( +          cleanRefunds, +          Amounts.getZero(contractData.amount.currency), +        );          const payOpId = RetryTags.forPay(purchase);          const refundQueryOpId = RetryTags.forRefundQuery(purchase); @@ -197,24 +237,28 @@ export async function getTransactionById(            refundQueryOpId,          ); -        const err = payRetryRecord !== undefined ? payRetryRecord : refundQueryRetryRecord +        const err = +          payRetryRecord !== undefined +            ? payRetryRecord +            : refundQueryRetryRecord;          return buildTransactionForPurchase(purchase, refunds, err);        });    } else if (type === TransactionType.Refresh) {      const refreshGroupId = rest[0];      throw Error(`no tx for refresh`); -    } else if (type === TransactionType.Tip) {      const tipId = rest[0];      return await ws.db        .mktx((x) => [x.tips, x.operationRetries])        .runReadWrite(async (tx) => {          const tipRecord = await tx.tips.get(tipId); -        if (!tipRecord) throw Error("not found") +        if (!tipRecord) throw Error("not found"); -        const retries = await tx.operationRetries.get(RetryTags.forTipPickup(tipRecord)); -        return buildTransactionForTip(tipRecord, retries) +        const retries = await tx.operationRetries.get( +          RetryTags.forTipPickup(tipRecord), +        ); +        return buildTransactionForTip(tipRecord, retries);        });    } else if (type === TransactionType.Deposit) {      const depositGroupId = rest[0]; @@ -222,10 +266,12 @@ export async function getTransactionById(        .mktx((x) => [x.depositGroups, x.operationRetries])        .runReadWrite(async (tx) => {          const depositRecord = await tx.depositGroups.get(depositGroupId); -        if (!depositRecord) throw Error("not found") +        if (!depositRecord) throw Error("not found"); -        const retries = await tx.operationRetries.get(RetryTags.forDeposit(depositRecord)); -        return buildTransactionForDeposit(depositRecord, retries) +        const retries = await tx.operationRetries.get( +          RetryTags.forDeposit(depositRecord), +        ); +        return buildTransactionForDeposit(depositRecord, retries);        });    } else if (type === TransactionType.Refund) {      const proposalId = rest[0]; @@ -235,27 +281,38 @@ export async function getTransactionById(        .mktx((x) => [x.operationRetries, x.purchases, x.tombstones])        .runReadWrite(async (tx) => {          const purchase = await tx.purchases.get(proposalId); -        if (!purchase) throw Error("not found") +        if (!purchase) throw Error("not found"); -        const theRefund = Object.values(purchase.refunds).find(r => `${r.executionTime.t_s}` === executionTimeStr) -        if (!theRefund) throw Error("not found") +        const theRefund = Object.values(purchase.refunds).find( +          (r) => `${r.executionTime.t_s}` === executionTimeStr, +        ); +        if (!theRefund) throw Error("not found"); -        const t = await tx.tombstones.get(makeEventId( -          TombstoneTag.DeleteRefund, -          purchase.proposalId, -          executionTimeStr, -        )) -        if (t) throw Error("deleted") +        const t = await tx.tombstones.get( +          makeEventId( +            TombstoneTag.DeleteRefund, +            purchase.proposalId, +            executionTimeStr, +          ), +        ); +        if (t) throw Error("deleted");          const contractData = purchase.download.contractData; -        const refunds = mergeRefundByExecutionTime([theRefund], Amounts.getZero(contractData.amount.currency)) +        const refunds = mergeRefundByExecutionTime( +          [theRefund], +          Amounts.getZero(contractData.amount.currency), +        );          const refundQueryOpId = RetryTags.forRefundQuery(purchase);          const refundQueryRetryRecord = await tx.operationRetries.get(            refundQueryOpId,          ); -        return buildTransactionForRefund(purchase, refunds[0], refundQueryRetryRecord); +        return buildTransactionForRefund( +          purchase, +          refunds[0], +          refundQueryRetryRecord, +        );        });    } else if (type === TransactionType.PeerPullDebit) {      const peerPullPaymentIncomingId = rest[0]; @@ -266,7 +323,7 @@ export async function getTransactionById(            peerPullPaymentIncomingId,          );          if (!debit) throw Error("not found"); -        return buildTransactionForPullPaymentDebit(debit) +        return buildTransactionForPullPaymentDebit(debit);        });    } else if (type === TransactionType.PeerPushDebit) {      const pursePub = rest[0]; @@ -275,7 +332,7 @@ export async function getTransactionById(        .runReadWrite(async (tx) => {          const debit = await tx.peerPushPaymentInitiations.get(pursePub);          if (!debit) throw Error("not found"); -        return buildTransactionForPushPaymentDebit(debit) +        return buildTransactionForPushPaymentDebit(debit);        });    } else {      const unknownTxType: never = type; @@ -283,8 +340,10 @@ export async function getTransactionById(    }  } - -function buildTransactionForPushPaymentDebit(pi: PeerPushPaymentInitiationRecord, ort?: OperationRetryRecord): Transaction { +function buildTransactionForPushPaymentDebit( +  pi: PeerPushPaymentInitiationRecord, +  ort?: OperationRetryRecord, +): Transaction {    return {      type: TransactionType.PeerPushDebit,      amountEffective: pi.amount, @@ -301,15 +360,15 @@ function buildTransactionForPushPaymentDebit(pi: PeerPushPaymentInitiationRecord        exchangeBaseUrl: pi.exchangeBaseUrl,        contractPriv: pi.contractPriv,      }), -    transactionId: makeEventId( -      TransactionType.PeerPushDebit, -      pi.pursePub, -    ), +    transactionId: makeEventId(TransactionType.PeerPushDebit, pi.pursePub),      ...(ort?.lastError ? { error: ort.lastError } : {}),    };  } -function buildTransactionForPullPaymentDebit(pi: PeerPullPaymentIncomingRecord, ort?: OperationRetryRecord): Transaction { +function buildTransactionForPullPaymentDebit( +  pi: PeerPullPaymentIncomingRecord, +  ort?: OperationRetryRecord, +): Transaction {    return {      type: TransactionType.PeerPullDebit,      amountEffective: Amounts.stringify(pi.contractTerms.amount), @@ -327,11 +386,15 @@ function buildTransactionForPullPaymentDebit(pi: PeerPullPaymentIncomingRecord,        pi.peerPullPaymentIncomingId,      ),      ...(ort?.lastError ? { error: ort.lastError } : {}), -  } +  };  } -function buildTransactionForPullPaymentCredit(wsr: WithdrawalGroupRecord, ort?: OperationRetryRecord): Transaction { -  if (wsr.wgInfo.withdrawalType !== WithdrawalRecordType.PeerPullCredit) throw Error("") +function buildTransactionForPullPaymentCredit( +  wsr: WithdrawalGroupRecord, +  ort?: OperationRetryRecord, +): Transaction { +  if (wsr.wgInfo.withdrawalType !== WithdrawalRecordType.PeerPullCredit) +    throw Error("");    return {      type: TransactionType.PeerPullCredit,      amountEffective: Amounts.stringify(wsr.denomsSel.totalCoinValue), @@ -353,11 +416,15 @@ function buildTransactionForPullPaymentCredit(wsr: WithdrawalGroupRecord, ort?:      ),      frozen: false,      ...(ort?.lastError ? { error: ort.lastError } : {}), -  } +  };  } -function buildTransactionForPushPaymentCredit(wsr: WithdrawalGroupRecord, ort?: OperationRetryRecord): Transaction { -  if (wsr.wgInfo.withdrawalType !== WithdrawalRecordType.PeerPushCredit) throw Error("") +function buildTransactionForPushPaymentCredit( +  wsr: WithdrawalGroupRecord, +  ort?: OperationRetryRecord, +): Transaction { +  if (wsr.wgInfo.withdrawalType !== WithdrawalRecordType.PeerPushCredit) +    throw Error("");    return {      type: TransactionType.PeerPushCredit,      amountEffective: Amounts.stringify(wsr.denomsSel.totalCoinValue), @@ -375,11 +442,15 @@ function buildTransactionForPushPaymentCredit(wsr: WithdrawalGroupRecord, ort?:      ),      frozen: false,      ...(ort?.lastError ? { error: ort.lastError } : {}), -  } +  };  } -function buildTransactionForBankIntegratedWithdraw(wsr: WithdrawalGroupRecord, ort?: OperationRetryRecord): Transaction { -  if (wsr.wgInfo.withdrawalType !== WithdrawalRecordType.BankIntegrated) throw Error("") +function buildTransactionForBankIntegratedWithdraw( +  wsr: WithdrawalGroupRecord, +  ort?: OperationRetryRecord, +): Transaction { +  if (wsr.wgInfo.withdrawalType !== WithdrawalRecordType.BankIntegrated) +    throw Error("");    return {      type: TransactionType.Withdrawal, @@ -387,9 +458,7 @@ function buildTransactionForBankIntegratedWithdraw(wsr: WithdrawalGroupRecord, o      amountRaw: Amounts.stringify(wsr.rawWithdrawalAmount),      withdrawalDetails: {        type: WithdrawalType.TalerBankIntegrationApi, -      confirmed: wsr.wgInfo.bankInfo.timestampBankConfirmed -        ? true -        : false, +      confirmed: wsr.wgInfo.bankInfo.timestampBankConfirmed ? true : false,        reservePub: wsr.reservePub,        bankConfirmationUrl: wsr.wgInfo.bankInfo.confirmUrl,      }, @@ -402,11 +471,16 @@ function buildTransactionForBankIntegratedWithdraw(wsr: WithdrawalGroupRecord, o      ),      frozen: false,      ...(ort?.lastError ? { error: ort.lastError } : {}), -  } +  };  } -function buildTransactionForManualWithdraw(wsr: WithdrawalGroupRecord, exchangeDetails: ExchangeDetailsRecord, ort?: OperationRetryRecord): Transaction { -  if (wsr.wgInfo.withdrawalType !== WithdrawalRecordType.BankManual) throw Error("") +function buildTransactionForManualWithdraw( +  wsr: WithdrawalGroupRecord, +  exchangeDetails: ExchangeDetailsRecord, +  ort?: OperationRetryRecord, +): Transaction { +  if (wsr.wgInfo.withdrawalType !== WithdrawalRecordType.BankManual) +    throw Error("");    return {      type: TransactionType.Withdrawal, @@ -416,8 +490,8 @@ function buildTransactionForManualWithdraw(wsr: WithdrawalGroupRecord, exchangeD        type: WithdrawalType.ManualTransfer,        reservePub: wsr.reservePub,        exchangePaytoUris: -        exchangeDetails.wireInfo?.accounts.map( -          (x) => addPaytoQueryParams(x.payto_uri, { subject: wsr.reservePub }), +        exchangeDetails.wireInfo?.accounts.map((x) => +          addPaytoQueryParams(x.payto_uri, { subject: wsr.reservePub }),          ) ?? [],      },      exchangeBaseUrl: wsr.exchangeBaseUrl, @@ -429,10 +503,13 @@ function buildTransactionForManualWithdraw(wsr: WithdrawalGroupRecord, exchangeD      ),      frozen: false,      ...(ort?.lastError ? { error: ort.lastError } : {}), -  } +  };  } -function buildTransactionForDeposit(dg: DepositGroupRecord, ort?: OperationRetryRecord): Transaction { +function buildTransactionForDeposit( +  dg: DepositGroupRecord, +  ort?: OperationRetryRecord, +): Transaction {    return {      type: TransactionType.Deposit,      amountRaw: Amounts.stringify(dg.effectiveDepositAmount), @@ -441,17 +518,17 @@ function buildTransactionForDeposit(dg: DepositGroupRecord, ort?: OperationRetry      frozen: false,      timestamp: dg.timestampCreated,      targetPaytoUri: dg.wire.payto_uri, -    transactionId: makeEventId( -      TransactionType.Deposit, -      dg.depositGroupId, -    ), +    transactionId: makeEventId(TransactionType.Deposit, dg.depositGroupId),      depositGroupId: dg.depositGroupId,      ...(ort?.lastError ? { error: ort.lastError } : {}), -  } +  };  } -function buildTransactionForTip(tipRecord: TipRecord, ort?: OperationRetryRecord): Transaction { -  if (!tipRecord.acceptedTimestamp) throw Error("") +function buildTransactionForTip( +  tipRecord: TipRecord, +  ort?: OperationRetryRecord, +): Transaction { +  if (!tipRecord.acceptedTimestamp) throw Error("");    return {      type: TransactionType.Tip, @@ -460,18 +537,15 @@ function buildTransactionForTip(tipRecord: TipRecord, ort?: OperationRetryRecord      pending: !tipRecord.pickedUpTimestamp,      frozen: false,      timestamp: tipRecord.acceptedTimestamp, -    transactionId: makeEventId( -      TransactionType.Tip, -      tipRecord.walletTipId, -    ), +    transactionId: makeEventId(TransactionType.Tip, tipRecord.walletTipId),      merchantBaseUrl: tipRecord.merchantBaseUrl,      ...(ort?.lastError ? { error: ort.lastError } : {}), -  } +  };  }  /**   * For a set of refund with the same executionTime. - *  + *   */  interface MergedRefundInfo {    executionTime: TalerProtocolTimestamp; @@ -480,40 +554,56 @@ interface MergedRefundInfo {    firstTimestamp: TalerProtocolTimestamp;  } -function mergeRefundByExecutionTime(rs: WalletRefundItem[], zero: AmountJson): MergedRefundInfo[] { +function mergeRefundByExecutionTime( +  rs: WalletRefundItem[], +  zero: AmountJson, +): MergedRefundInfo[] {    const refundByExecTime = rs.reduce((prev, refund) => {      const key = `${refund.executionTime.t_s}`;      //refunds counts if applied -    const effective = refund.type === RefundState.Applied ? Amounts.sub( -      refund.refundAmount, -      refund.refundFee, -      refund.totalRefreshCostBound, -    ).amount : zero -    const raw = refund.type === RefundState.Applied ? refund.refundAmount : zero - -    const v = prev.get(key) +    const effective = +      refund.type === RefundState.Applied +        ? Amounts.sub( +            refund.refundAmount, +            refund.refundFee, +            refund.totalRefreshCostBound, +          ).amount +        : zero; +    const raw = +      refund.type === RefundState.Applied ? refund.refundAmount : zero; + +    const v = prev.get(key);      if (!v) {        prev.set(key, {          executionTime: refund.executionTime,          amountAppliedEffective: effective,          amountAppliedRaw: raw, -        firstTimestamp: refund.obtainedTime -      }) +        firstTimestamp: refund.obtainedTime, +      });      } else {        //v.executionTime is the same -      v.amountAppliedEffective = Amounts.add(v.amountAppliedEffective, effective).amount; -      v.amountAppliedRaw = Amounts.add(v.amountAppliedRaw).amount -      v.firstTimestamp = TalerProtocolTimestamp.min(v.firstTimestamp, refund.obtainedTime); +      v.amountAppliedEffective = Amounts.add( +        v.amountAppliedEffective, +        effective, +      ).amount; +      v.amountAppliedRaw = Amounts.add(v.amountAppliedRaw).amount; +      v.firstTimestamp = TalerProtocolTimestamp.min( +        v.firstTimestamp, +        refund.obtainedTime, +      );      } -    return prev -  }, {} as Map<string, MergedRefundInfo>); +    return prev; +  }, new Map<string, MergedRefundInfo>());    return Array.from(refundByExecTime.values());  } -function buildTransactionForRefund(purchaseRecord: PurchaseRecord, refundInfo: MergedRefundInfo, ort?: OperationRetryRecord): Transaction { - +function buildTransactionForRefund( +  purchaseRecord: PurchaseRecord, +  refundInfo: MergedRefundInfo, +  ort?: OperationRetryRecord, +): Transaction {    const contractData = purchaseRecord.download.contractData;    const info: OrderShortInfo = { @@ -550,13 +640,16 @@ function buildTransactionForRefund(purchaseRecord: PurchaseRecord, refundInfo: M      pending: false,      frozen: false,      ...(ort?.lastError ? { error: ort.lastError } : {}), -  } +  };  } -function buildTransactionForPurchase(purchaseRecord: PurchaseRecord, refundsInfo: MergedRefundInfo[], ort?: OperationRetryRecord): Transaction { - +function buildTransactionForPurchase( +  purchaseRecord: PurchaseRecord, +  refundsInfo: MergedRefundInfo[], +  ort?: OperationRetryRecord, +): Transaction {    const contractData = purchaseRecord.download.contractData; -  const zero = Amounts.getZero(contractData.amount.currency) +  const zero = Amounts.getZero(contractData.amount.currency);    const info: OrderShortInfo = {      merchant: contractData.merchant, @@ -571,25 +664,30 @@ function buildTransactionForPurchase(purchaseRecord: PurchaseRecord, refundsInfo      info.fulfillmentUrl = contractData.fulfillmentUrl;    } -  const totalRefund = refundsInfo.reduce((prev, cur) => { -    return { -      raw: Amounts.add(prev.raw, cur.amountAppliedRaw).amount, -      effective: Amounts.add(prev.effective, cur.amountAppliedEffective).amount, -    } -  }, { -    raw: zero, effective: zero -  } as { raw: AmountJson, effective: AmountJson }) +  const totalRefund = refundsInfo.reduce( +    (prev, cur) => { +      return { +        raw: Amounts.add(prev.raw, cur.amountAppliedRaw).amount, +        effective: Amounts.add(prev.effective, cur.amountAppliedEffective) +          .amount, +      }; +    }, +    { +      raw: zero, +      effective: zero, +    } as { raw: AmountJson; effective: AmountJson }, +  ); -  const refunds: RefundInfoShort[] = refundsInfo.map(r => ({ +  const refunds: RefundInfoShort[] = refundsInfo.map((r) => ({      amountEffective: Amounts.stringify(r.amountAppliedEffective),      amountRaw: Amounts.stringify(r.amountAppliedRaw),      timestamp: r.executionTime,      transactionId: makeEventId(        TransactionType.Refund,        purchaseRecord.proposalId, -      `${r.executionTime.t_s}` +      `${r.executionTime.t_s}`,      ), -  })) +  }));    return {      type: TransactionType.Payment, @@ -617,7 +715,7 @@ function buildTransactionForPurchase(purchaseRecord: PurchaseRecord, refundsInfo      info,      frozen: purchaseRecord.payFrozen ?? false,      ...(ort?.lastError ? { error: ort.lastError } : {}), -  } +  };  }  /** @@ -703,7 +801,9 @@ export async function getTransactions(          } else if (            wsr.wgInfo.withdrawalType === WithdrawalRecordType.BankIntegrated          ) { -          transactions.push(buildTransactionForBankIntegratedWithdraw(wsr, ort)); +          transactions.push( +            buildTransactionForBankIntegratedWithdraw(wsr, ort), +          );          } else {            const exchangeDetails = await getExchangeDetails(              tx, @@ -714,7 +814,9 @@ export async function getTransactions(              return;            } -          transactions.push(buildTransactionForManualWithdraw(wsr, exchangeDetails, ort)); +          transactions.push( +            buildTransactionForManualWithdraw(wsr, exchangeDetails, ort), +          );          }        }); @@ -747,19 +849,28 @@ export async function getTransactions(            return;          } -        const filteredRefunds = await Promise.all(Object.values(pr.refunds).map(async r => { -          const t = await tx.tombstones.get(makeEventId( -            TombstoneTag.DeleteRefund, -            pr.proposalId, -            `${r.executionTime.t_s}`, -          )) -          if (!t) return r -          return undefined -        })); +        const filteredRefunds = await Promise.all( +          Object.values(pr.refunds).map(async (r) => { +            const t = await tx.tombstones.get( +              makeEventId( +                TombstoneTag.DeleteRefund, +                pr.proposalId, +                `${r.executionTime.t_s}`, +              ), +            ); +            if (!t) return r; +            return undefined; +          }), +        ); -        const cleanRefunds = filteredRefunds.filter((x): x is WalletRefundItem => !!x); +        const cleanRefunds = filteredRefunds.filter( +          (x): x is WalletRefundItem => !!x, +        ); -        const refunds = mergeRefundByExecutionTime(cleanRefunds, Amounts.getZero(contractData.amount.currency)); +        const refunds = mergeRefundByExecutionTime( +          cleanRefunds, +          Amounts.getZero(contractData.amount.currency), +        );          refunds.forEach(async (refundInfo) => {            const refundQueryOpId = RetryTags.forRefundQuery(pr); @@ -768,9 +879,9 @@ export async function getTransactions(            );            transactions.push( -            buildTransactionForRefund(pr, refundInfo, refundQueryRetryRecord) -          ) -        }) +            buildTransactionForRefund(pr, refundInfo, refundQueryRetryRecord), +          ); +        });          const payOpId = RetryTags.forPay(pr);          const refundQueryOpId = RetryTags.forRefundQuery(pr); @@ -779,7 +890,10 @@ export async function getTransactions(            refundQueryOpId,          ); -        const err = payRetryRecord !== undefined ? payRetryRecord : refundQueryRetryRecord +        const err = +          payRetryRecord !== undefined +            ? payRetryRecord +            : refundQueryRetryRecord;          transactions.push(buildTransactionForPurchase(pr, refunds, err));        }); | 
