diff options
Diffstat (limited to 'packages/taler-wallet-core/src')
| -rw-r--r-- | packages/taler-wallet-core/src/operations/transactions.ts | 53 | 
1 files changed, 53 insertions, 0 deletions
diff --git a/packages/taler-wallet-core/src/operations/transactions.ts b/packages/taler-wallet-core/src/operations/transactions.ts index 8aae2332c..9ebd87cc0 100644 --- a/packages/taler-wallet-core/src/operations/transactions.ts +++ b/packages/taler-wallet-core/src/operations/transactions.ts @@ -56,6 +56,8 @@ import {    PeerPullPaymentIncomingStatus,    TransactionStatus,    WithdrawalGroupStatus, +  RefreshGroupRecord, +  RefreshOperationStatus,  } from "../db.js";  import { InternalWalletState } from "../internal-wallet-state.js";  import { checkDbInvariant } from "../util/invariants.js"; @@ -580,6 +582,45 @@ function buildTransactionForManualWithdraw(    };  } +function buildTransactionForRefresh( +  refreshGroupRecord: RefreshGroupRecord, +  ort?: OperationRetryRecord, +): Transaction { +  let extendedStatus: ExtendedStatus; +  switch (refreshGroupRecord.operationStatus) { +    case RefreshOperationStatus.Finished: +    case RefreshOperationStatus.FinishedWithError: +      extendedStatus = ExtendedStatus.Done; +      break; +    default: +      extendedStatus = ExtendedStatus.Pending; +  } +  return { +    type: TransactionType.Refresh, +    refreshReason: refreshGroupRecord.reason, +    amountEffective: Amounts.stringify( +      Amounts.zeroOfCurrency(refreshGroupRecord.currency), +    ), +    amountRaw: Amounts.stringify( +      Amounts.zeroOfCurrency(refreshGroupRecord.currency), +    ), +    extendedStatus: +      refreshGroupRecord.operationStatus === RefreshOperationStatus.Finished || +      refreshGroupRecord.operationStatus === +        RefreshOperationStatus.FinishedWithError +        ? ExtendedStatus.Done +        : ExtendedStatus.Pending, +    pending: extendedStatus == ExtendedStatus.Pending, +    timestamp: refreshGroupRecord.timestampCreated, +    transactionId: makeTransactionId( +      TransactionType.Refresh, +      refreshGroupRecord.refreshGroupId, +    ), +    frozen: false, +    ...(ort?.lastError ? { error: ort.lastError } : {}), +  }; +} +  function buildTransactionForDeposit(    dg: DepositGroupRecord,    ort?: OperationRetryRecord, @@ -880,6 +921,7 @@ export async function getTransactions(        x.tips,        x.tombstones,        x.withdrawalGroups, +      x.refreshGroups,      ])      .runReadOnly(async (tx) => {        tx.peerPushPaymentInitiations.iter().forEachAsync(async (pi) => { @@ -916,6 +958,17 @@ export async function getTransactions(          transactions.push(buildTransactionForPullPaymentDebit(pi));        }); +      if (transactionsRequest?.includeRefreshes) { +        tx.refreshGroups.iter().forEachAsync(async (rg) => { +          if (shouldSkipCurrency(transactionsRequest, rg.currency)) { +            return; +          } +          const opId = RetryTags.forRefresh(rg); +          const ort = await tx.operationRetries.get(opId); +          transactions.push(buildTransactionForRefresh(rg, ort)); +        }); +      } +        tx.withdrawalGroups.iter().forEachAsync(async (wsr) => {          if (            shouldSkipCurrency(  | 
