aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-wallet-core/src/operations
diff options
context:
space:
mode:
Diffstat (limited to 'packages/taler-wallet-core/src/operations')
-rw-r--r--packages/taler-wallet-core/src/operations/balance.ts31
-rw-r--r--packages/taler-wallet-core/src/operations/common.ts51
-rw-r--r--packages/taler-wallet-core/src/operations/deposits.ts43
-rw-r--r--packages/taler-wallet-core/src/operations/exchanges.ts99
-rw-r--r--packages/taler-wallet-core/src/operations/pay-merchant.ts17
-rw-r--r--packages/taler-wallet-core/src/operations/pay-peer-common.ts12
-rw-r--r--packages/taler-wallet-core/src/operations/pay-peer-pull-credit.ts355
-rw-r--r--packages/taler-wallet-core/src/operations/pay-peer-pull-debit.ts178
-rw-r--r--packages/taler-wallet-core/src/operations/pay-peer-push-credit.ts316
-rw-r--r--packages/taler-wallet-core/src/operations/pay-peer-push-debit.ts321
-rw-r--r--packages/taler-wallet-core/src/operations/pending.ts93
-rw-r--r--packages/taler-wallet-core/src/operations/refresh.ts134
-rw-r--r--packages/taler-wallet-core/src/operations/reward.ts14
-rw-r--r--packages/taler-wallet-core/src/operations/testing.ts4
-rw-r--r--packages/taler-wallet-core/src/operations/transactions.ts175
-rw-r--r--packages/taler-wallet-core/src/operations/withdraw.test.ts22
-rw-r--r--packages/taler-wallet-core/src/operations/withdraw.ts117
17 files changed, 931 insertions, 1051 deletions
diff --git a/packages/taler-wallet-core/src/operations/balance.ts b/packages/taler-wallet-core/src/operations/balance.ts
index 0fcab0542..a20ded2af 100644
--- a/packages/taler-wallet-core/src/operations/balance.ts
+++ b/packages/taler-wallet-core/src/operations/balance.ts
@@ -95,14 +95,7 @@ function computeRefreshGroupAvailableAmount(r: RefreshGroupRecord): AmountJson {
return available;
}
for (let i = 0; i < r.oldCoinPubs.length; i++) {
- const session = r.refreshSessionPerCoin[i];
- if (session) {
- // We are always assuming the refresh will succeed, thus we
- // report the output as available balance.
- available = Amounts.add(available, session.amountRefreshOutput).amount;
- } else {
- available = Amounts.add(available, r.estimatedOutputPerCoin[i]).amount;
- }
+ available = Amounts.add(available, r.expectedOutputPerCoin[i]).amount;
}
return available;
}
@@ -140,11 +133,7 @@ export async function getBalancesInsideTransaction(
const b = initBalance(ca.currency);
const count = ca.visibleCoinCount ?? 0;
for (let i = 0; i < count; i++) {
- b.available = Amounts.add(b.available, {
- currency: ca.currency,
- fraction: ca.amountFrac,
- value: ca.amountVal,
- }).amount;
+ b.available = Amounts.add(b.available, ca.value).amount;
}
});
@@ -163,7 +152,7 @@ export async function getBalancesInsideTransaction(
case WithdrawalGroupStatus.AbortedExchange:
case WithdrawalGroupStatus.FailedAbortingBank:
case WithdrawalGroupStatus.FailedBankAborted:
- case WithdrawalGroupStatus.Finished:
+ case WithdrawalGroupStatus.Done:
// Does not count as pendingIncoming
return;
case WithdrawalGroupStatus.PendingReady:
@@ -281,7 +270,7 @@ export async function getAcceptableExchangeBaseUrls(
const acceptableExchangeUrls = new Set<string>();
const depositableExchangeUrls = new Set<string>();
await ws.db
- .mktx((x) => [x.exchanges, x.exchangeDetails, x.auditorTrust])
+ .mktx((x) => [x.exchanges, x.exchangeDetails])
.runReadOnly(async (tx) => {
// FIXME: We should have a DB index to look up all exchanges
// for a particular auditor ...
@@ -415,11 +404,7 @@ export async function getMerchantPaymentBalanceDetails(
if (ca.currency != req.currency) {
return;
}
- const singleCoinAmount: AmountJson = {
- currency: ca.currency,
- fraction: ca.amountFrac,
- value: ca.amountVal,
- };
+ const singleCoinAmount: AmountJson = Amounts.parseOrThrow(ca.value);
const coinAmount: AmountJson = Amounts.mult(
singleCoinAmount,
ca.freshCoinCount,
@@ -537,11 +522,7 @@ export async function getPeerPaymentBalanceDetailsInTx(
) {
return;
}
- const singleCoinAmount: AmountJson = {
- currency: ca.currency,
- fraction: ca.amountFrac,
- value: ca.amountVal,
- };
+ const singleCoinAmount: AmountJson = Amounts.parseOrThrow(ca.value);
const coinAmount: AmountJson = Amounts.mult(
singleCoinAmount,
ca.freshCoinCount,
diff --git a/packages/taler-wallet-core/src/operations/common.ts b/packages/taler-wallet-core/src/operations/common.ts
index e96beb5b2..50dd3dc5c 100644
--- a/packages/taler-wallet-core/src/operations/common.ts
+++ b/packages/taler-wallet-core/src/operations/common.ts
@@ -26,7 +26,6 @@ import {
CoinRefreshRequest,
CoinStatus,
Duration,
- ErrorInfoSummary,
ExchangeEntryStatus,
ExchangeListItem,
ExchangeTosStatus,
@@ -34,9 +33,11 @@ import {
getErrorDetailFromException,
j2s,
Logger,
+ makeErrorDetail,
NotificationType,
OperationErrorInfo,
RefreshReason,
+ TalerError,
TalerErrorCode,
TalerErrorDetail,
TombstoneIdStr,
@@ -44,32 +45,31 @@ import {
TransactionType,
WalletNotification,
} from "@gnu-taler/taler-util";
+import { CryptoApiStoppedError } from "../crypto/workers/crypto-dispatcher.js";
import {
- WalletStoresV1,
+ BackupProviderRecord,
CoinRecord,
+ DepositGroupRecord,
ExchangeDetailsRecord,
+ ExchangeEntryDbRecordStatus,
+ ExchangeEntryDbUpdateStatus,
ExchangeEntryRecord,
- BackupProviderRecord,
- DepositGroupRecord,
+ PeerPullCreditRecord,
PeerPullPaymentIncomingRecord,
- PeerPullPaymentInitiationRecord,
+ PeerPushDebitRecord,
PeerPushPaymentIncomingRecord,
- PeerPushPaymentInitiationRecord,
PurchaseRecord,
RecoupGroupRecord,
RefreshGroupRecord,
RewardRecord,
+ WalletStoresV1,
WithdrawalGroupRecord,
- ExchangeEntryDbUpdateStatus,
- ExchangeEntryDbRecordStatus,
} from "../db.js";
-import { makeErrorDetail, TalerError } from "@gnu-taler/taler-util";
import { InternalWalletState } from "../internal-wallet-state.js";
-import { checkDbInvariant, checkLogicInvariant } from "../util/invariants.js";
-import { GetReadOnlyAccess, GetReadWriteAccess } from "../util/query.js";
-import { CryptoApiStoppedError } from "../crypto/workers/crypto-dispatcher.js";
import { PendingTaskType, TaskId } from "../pending-types.js";
import { assertUnreachable } from "../util/assertUnreachable.js";
+import { checkDbInvariant, checkLogicInvariant } from "../util/invariants.js";
+import { GetReadOnlyAccess, GetReadWriteAccess } from "../util/query.js";
import { constructTransactionIdentifier } from "./transactions.js";
const logger = new Logger("operations/common.ts");
@@ -144,8 +144,7 @@ export async function makeCoinAvailable(
if (!car) {
car = {
maxAge: ageRestriction,
- amountFrac: denom.amountFrac,
- amountVal: denom.amountVal,
+ value: denom.value,
currency: denom.currency,
denomPubHash: denom.denomPubHash,
exchangeBaseUrl: denom.exchangeBaseUrl,
@@ -271,7 +270,7 @@ function convertTaskToTransactionId(
case PendingTaskType.PeerPullDebit:
return constructTransactionIdentifier({
tag: TransactionType.PeerPullDebit,
- peerPullPaymentIncomingId: parsedTaskId.peerPullPaymentIncomingId,
+ peerPullDebitId: parsedTaskId.peerPullDebitId,
});
// FIXME: This doesn't distinguish internal-withdrawal.
// Maybe we should have a different task type for that as well?
@@ -284,7 +283,7 @@ function convertTaskToTransactionId(
case PendingTaskType.PeerPushCredit:
return constructTransactionIdentifier({
tag: TransactionType.PeerPushCredit,
- peerPushPaymentIncomingId: parsedTaskId.peerPushPaymentIncomingId,
+ peerPushCreditId: parsedTaskId.peerPushCreditId,
});
case PendingTaskType.Deposit:
return constructTransactionIdentifier({
@@ -836,9 +835,9 @@ export type ParsedTaskIdentifier =
| { tag: PendingTaskType.Deposit; depositGroupId: string }
| { tag: PendingTaskType.ExchangeCheckRefresh; exchangeBaseUrl: string }
| { tag: PendingTaskType.ExchangeUpdate; exchangeBaseUrl: string }
- | { tag: PendingTaskType.PeerPullDebit; peerPullPaymentIncomingId: string }
+ | { tag: PendingTaskType.PeerPullDebit; peerPullDebitId: string }
| { tag: PendingTaskType.PeerPullCredit; pursePub: string }
- | { tag: PendingTaskType.PeerPushCredit; peerPushPaymentIncomingId: string }
+ | { tag: PendingTaskType.PeerPushCredit; peerPushCreditId: string }
| { tag: PendingTaskType.PeerPushDebit; pursePub: string }
| { tag: PendingTaskType.Purchase; proposalId: string }
| { tag: PendingTaskType.Recoup; recoupGroupId: string }
@@ -865,9 +864,9 @@ export function parseTaskIdentifier(x: string): ParsedTaskIdentifier {
case PendingTaskType.PeerPullCredit:
return { tag: type, pursePub: rest[0] };
case PendingTaskType.PeerPullDebit:
- return { tag: type, peerPullPaymentIncomingId: rest[0] };
+ return { tag: type, peerPullDebitId: rest[0] };
case PendingTaskType.PeerPushCredit:
- return { tag: type, peerPushPaymentIncomingId: rest[0] };
+ return { tag: type, peerPushCreditId: rest[0] };
case PendingTaskType.PeerPushDebit:
return { tag: type, pursePub: rest[0] };
case PendingTaskType.Purchase:
@@ -896,9 +895,9 @@ export function constructTaskIdentifier(p: ParsedTaskIdentifier): TaskId {
case PendingTaskType.ExchangeUpdate:
return `${p.tag}:${p.exchangeBaseUrl}` as TaskId;
case PendingTaskType.PeerPullDebit:
- return `${p.tag}:${p.peerPullPaymentIncomingId}` as TaskId;
+ return `${p.tag}:${p.peerPullDebitId}` as TaskId;
case PendingTaskType.PeerPushCredit:
- return `${p.tag}:${p.peerPushPaymentIncomingId}` as TaskId;
+ return `${p.tag}:${p.peerPushCreditId}` as TaskId;
case PendingTaskType.PeerPullCredit:
return `${p.tag}:${p.pursePub}` as TaskId;
case PendingTaskType.PeerPushDebit:
@@ -950,23 +949,23 @@ export namespace TaskIdentifiers {
return `${PendingTaskType.Backup}:${backupRecord.baseUrl}` as TaskId;
}
export function forPeerPushPaymentInitiation(
- ppi: PeerPushPaymentInitiationRecord,
+ ppi: PeerPushDebitRecord,
): TaskId {
return `${PendingTaskType.PeerPushDebit}:${ppi.pursePub}` as TaskId;
}
export function forPeerPullPaymentInitiation(
- ppi: PeerPullPaymentInitiationRecord,
+ ppi: PeerPullCreditRecord,
): TaskId {
return `${PendingTaskType.PeerPullCredit}:${ppi.pursePub}` as TaskId;
}
export function forPeerPullPaymentDebit(
ppi: PeerPullPaymentIncomingRecord,
): TaskId {
- return `${PendingTaskType.PeerPullDebit}:${ppi.peerPullPaymentIncomingId}` as TaskId;
+ return `${PendingTaskType.PeerPullDebit}:${ppi.peerPullDebitId}` as TaskId;
}
export function forPeerPushCredit(
ppi: PeerPushPaymentIncomingRecord,
): TaskId {
- return `${PendingTaskType.PeerPushCredit}:${ppi.peerPushPaymentIncomingId}` as TaskId;
+ return `${PendingTaskType.PeerPushCredit}:${ppi.peerPushCreditId}` as TaskId;
}
}
diff --git a/packages/taler-wallet-core/src/operations/deposits.ts b/packages/taler-wallet-core/src/operations/deposits.ts
index a8ec859cf..8ea792d91 100644
--- a/packages/taler-wallet-core/src/operations/deposits.ts
+++ b/packages/taler-wallet-core/src/operations/deposits.ts
@@ -510,10 +510,10 @@ async function refundDepositGroup(
ws: InternalWalletState,
depositGroup: DepositGroupRecord,
): Promise<TaskRunResult> {
- const newTxPerCoin = [...depositGroup.transactionPerCoin];
- logger.info(`status per coin: ${j2s(depositGroup.transactionPerCoin)}`);
- for (let i = 0; i < depositGroup.transactionPerCoin.length; i++) {
- const st = depositGroup.transactionPerCoin[i];
+ const newTxPerCoin = [...depositGroup.statusPerCoin];
+ logger.info(`status per coin: ${j2s(depositGroup.statusPerCoin)}`);
+ for (let i = 0; i < depositGroup.statusPerCoin.length; i++) {
+ const st = depositGroup.statusPerCoin[i];
switch (st) {
case DepositElementStatus.RefundFailed:
case DepositElementStatus.RefundSuccess:
@@ -593,7 +593,7 @@ async function refundDepositGroup(
if (!newDg) {
return;
}
- newDg.transactionPerCoin = newTxPerCoin;
+ newDg.statusPerCoin = newTxPerCoin;
const refreshCoins: CoinRefreshRequest[] = [];
for (let i = 0; i < newTxPerCoin.length; i++) {
refreshCoins.push({
@@ -766,7 +766,7 @@ async function processDepositGroupPendingTrack(
cancellationToken?: CancellationToken,
): Promise<TaskRunResult> {
const { depositGroupId } = depositGroup;
- for (let i = 0; i < depositGroup.depositedPerCoin.length; i++) {
+ for (let i = 0; i < depositGroup.statusPerCoin.length; i++) {
const coinPub = depositGroup.payCoinSelection.coinPubs[i];
// FIXME: Make the URL part of the coin selection?
const exchangeBaseUrl = await ws.db
@@ -785,7 +785,7 @@ async function processDepositGroupPendingTrack(
}
| undefined;
- if (depositGroup.transactionPerCoin[i] !== DepositElementStatus.Wired) {
+ if (depositGroup.statusPerCoin[i] !== DepositElementStatus.Wired) {
const track = await trackDeposit(
ws,
depositGroup,
@@ -810,7 +810,7 @@ async function processDepositGroupPendingTrack(
exchangeBaseUrl,
);
} else {
- updatedTxStatus = DepositElementStatus.Accepted;
+ updatedTxStatus = DepositElementStatus.Tracking;
}
} else if (track.type === "wired") {
updatedTxStatus = DepositElementStatus.Wired;
@@ -840,7 +840,7 @@ async function processDepositGroupPendingTrack(
id: track.exchange_sig,
};
} else {
- updatedTxStatus = DepositElementStatus.Unknown;
+ updatedTxStatus = DepositElementStatus.DepositPending;
}
}
@@ -853,7 +853,7 @@ async function processDepositGroupPendingTrack(
return;
}
if (updatedTxStatus !== undefined) {
- dg.transactionPerCoin[i] = updatedTxStatus;
+ dg.statusPerCoin[i] = updatedTxStatus;
}
if (newWiredCoin) {
/**
@@ -885,8 +885,8 @@ async function processDepositGroupPendingTrack(
return undefined;
}
const oldTxState = computeDepositTransactionStatus(dg);
- for (let i = 0; i < depositGroup.depositedPerCoin.length; i++) {
- if (depositGroup.transactionPerCoin[i] !== DepositElementStatus.Wired) {
+ for (let i = 0; i < depositGroup.statusPerCoin.length; i++) {
+ if (depositGroup.statusPerCoin[i] !== DepositElementStatus.Wired) {
allWired = false;
break;
}
@@ -943,7 +943,7 @@ async function processDepositGroupPendingDeposit(
for (let i = 0; i < depositPermissions.length; i++) {
const perm = depositPermissions[i];
- if (depositGroup.depositedPerCoin[i]) {
+ if (depositGroup.statusPerCoin[i] !== DepositElementStatus.DepositPending) {
continue;
}
@@ -980,8 +980,12 @@ async function processDepositGroupPendingDeposit(
if (!dg) {
return;
}
- dg.depositedPerCoin[i] = true;
- await tx.depositGroups.put(dg);
+ const coinStatus = dg.statusPerCoin[i];
+ switch (coinStatus) {
+ case DepositElementStatus.DepositPending:
+ dg.statusPerCoin[i] = DepositElementStatus.Tracking;
+ await tx.depositGroups.put(dg);
+ }
});
}
@@ -1373,16 +1377,15 @@ export async function createDepositGroup(
noncePub: noncePair.pub,
timestampCreated: AbsoluteTime.toPreciseTimestamp(now),
timestampFinished: undefined,
- transactionPerCoin: payCoinSel.coinSel.coinPubs.map(
- () => DepositElementStatus.Unknown,
+ statusPerCoin: payCoinSel.coinSel.coinPubs.map(
+ () => DepositElementStatus.DepositPending,
),
payCoinSelection: payCoinSel.coinSel,
payCoinSelectionUid: encodeCrock(getRandomBytes(32)),
- depositedPerCoin: payCoinSel.coinSel.coinPubs.map(() => false),
merchantPriv: merchantPair.priv,
merchantPub: merchantPair.pub,
totalPayCost: Amounts.stringify(totalDepositCost),
- effectiveDepositAmount: Amounts.stringify(
+ counterpartyEffectiveDepositAmount: Amounts.stringify(
counterpartyEffectiveDepositAmount,
),
wire: {
@@ -1536,7 +1539,7 @@ async function getTotalFeesForDepositAmount(
.iter(coin.exchangeBaseUrl)
.filter((x) =>
Amounts.isSameCurrency(
- DenominationRecord.getValue(x),
+ x.value,
pcs.coinContributions[i],
),
);
diff --git a/packages/taler-wallet-core/src/operations/exchanges.ts b/packages/taler-wallet-core/src/operations/exchanges.ts
index 311a71a6e..43a08ed3b 100644
--- a/packages/taler-wallet-core/src/operations/exchanges.ts
+++ b/packages/taler-wallet-core/src/operations/exchanges.ts
@@ -158,35 +158,6 @@ getExchangeDetails.makeContext = (db: DbAccess<typeof WalletStoresV1>) =>
db.mktx((x) => [x.exchanges, x.exchangeDetails]);
/**
- * Update the database based on the download of the terms of service.
- */
-export async function updateExchangeTermsOfService(
- ws: InternalWalletState,
- exchangeBaseUrl: string,
- tos: ExchangeTosDownloadResult,
-): Promise<void> {
- await ws.db
- .mktx((x) => [x.exchanges, x.exchangeTos, x.exchangeDetails])
- .runReadWrite(async (tx) => {
- const d = await getExchangeDetails(tx, exchangeBaseUrl);
- let tosRecord = await tx.exchangeTos.get([exchangeBaseUrl, tos.tosEtag]);
- if (!tosRecord) {
- tosRecord = {
- etag: tos.tosEtag,
- exchangeBaseUrl,
- termsOfServiceContentType: tos.tosContentType,
- termsOfServiceText: tos.tosText,
- };
- await tx.exchangeTos.put(tosRecord);
- }
- if (d) {
- d.tosCurrentEtag = tos.tosEtag;
- await tx.exchangeDetails.put(d);
- }
- });
-}
-
-/**
* Mark a ToS version as accepted by the user.
*
* @param etag version of the ToS to accept, or current ToS version of not given
@@ -472,8 +443,7 @@ async function downloadExchangeKeysInfo(
exchangeMasterPub: exchangeKeysJsonUnchecked.master_public_key,
isOffered: true,
isRevoked: false,
- amountFrac: value.fraction,
- amountVal: value.value,
+ value: Amounts.stringify(value),
currency: value.currency,
stampExpireDeposit: denomIn.stamp_expire_deposit,
stampExpireLegal: denomIn.stamp_expire_legal,
@@ -740,7 +710,6 @@ export async function updateExchangeFromUrlHandler(
const updated = await ws.db
.mktx((x) => [
x.exchanges,
- x.exchangeTos,
x.exchangeDetails,
x.exchangeSignKeys,
x.denominations,
@@ -801,21 +770,6 @@ export async function updateExchangeFromUrlHandler(
const drRowId = await tx.exchangeDetails.put(newDetails);
checkDbInvariant(typeof drRowId.key === "number");
- let tosRecord = await tx.exchangeTos.get([
- exchangeBaseUrl,
- tosDownload.tosEtag,
- ]);
-
- if (!tosRecord || tosRecord.etag !== existingTosAccepted?.etag) {
- tosRecord = {
- etag: tosDownload.tosEtag,
- exchangeBaseUrl,
- termsOfServiceContentType: tosDownload.tosContentType,
- termsOfServiceText: tosDownload.tosText,
- };
- await tx.exchangeTos.put(tosRecord);
- }
-
for (const sk of keysInfo.signingKeys) {
// FIXME: validate signing keys before inserting them
await tx.exchangeSignKeys.put({
@@ -972,54 +926,3 @@ export async function getExchangePaytoUri(
)}`,
);
}
-
-/**
- * Check if and how an exchange is trusted and/or audited.
- */
-export async function getExchangeTrust(
- ws: InternalWalletState,
- exchangeInfo: ExchangeEntryRecord,
-): Promise<TrustInfo> {
- let isTrusted = false;
- let isAudited = false;
-
- return await ws.db
- .mktx((x) => [
- x.exchanges,
- x.exchangeDetails,
- x.exchangeTrust,
- x.auditorTrust,
- ])
- .runReadOnly(async (tx) => {
- const exchangeDetails = await getExchangeDetails(
- tx,
- exchangeInfo.baseUrl,
- );
-
- if (!exchangeDetails) {
- throw Error(`exchange ${exchangeInfo.baseUrl} details not available`);
- }
- const exchangeTrustRecord =
- await tx.exchangeTrust.indexes.byExchangeMasterPub.get(
- exchangeDetails.masterPublicKey,
- );
- if (
- exchangeTrustRecord &&
- exchangeTrustRecord.uids.length > 0 &&
- exchangeTrustRecord.currency === exchangeDetails.currency
- ) {
- isTrusted = true;
- }
-
- for (const auditor of exchangeDetails.auditors) {
- const auditorTrustRecord =
- await tx.auditorTrust.indexes.byAuditorPub.get(auditor.auditor_pub);
- if (auditorTrustRecord && auditorTrustRecord.uids.length > 0) {
- isAudited = true;
- break;
- }
- }
-
- return { isTrusted, isAudited };
- });
-}
diff --git a/packages/taler-wallet-core/src/operations/pay-merchant.ts b/packages/taler-wallet-core/src/operations/pay-merchant.ts
index 2580c97f5..57367bb20 100644
--- a/packages/taler-wallet-core/src/operations/pay-merchant.ts
+++ b/packages/taler-wallet-core/src/operations/pay-merchant.ts
@@ -174,12 +174,12 @@ export async function getTotalPaymentCost(
.iter(coin.exchangeBaseUrl)
.filter((x) =>
Amounts.isSameCurrency(
- DenominationRecord.getValue(x),
+ x.value,
pcs.coinContributions[i],
),
);
const amountLeft = Amounts.sub(
- DenominationRecord.getValue(denom),
+ denom.value,
pcs.coinContributions[i],
).amount;
const refreshCost = getTotalRefreshCost(
@@ -317,11 +317,8 @@ export function extractContractData(
wireInfoHash: parsedContractTerms.h_wire,
maxDepositFee: Amounts.stringify(parsedContractTerms.max_fee),
merchant: parsedContractTerms.merchant,
- products: parsedContractTerms.products,
summaryI18n: parsedContractTerms.summary_i18n,
minimumAge: parsedContractTerms.minimum_age,
- deliveryDate: parsedContractTerms.delivery_date,
- deliveryLocation: parsedContractTerms.delivery_location,
};
}
@@ -541,7 +538,7 @@ async function processDownloadProposal(
// if original order is refunded.
if (otherPurchase && otherPurchase.refundAmountAwaiting === undefined) {
logger.warn("repurchase detected");
- p.purchaseStatus = PurchaseStatus.RepurchaseDetected;
+ p.purchaseStatus = PurchaseStatus.DoneRepurchaseDetected;
p.repurchaseProposalId = otherPurchase.proposalId;
await tx.purchases.put(p);
} else {
@@ -974,7 +971,7 @@ export async function checkPaymentByProposalId(
if (!proposal) {
throw Error(`could not get proposal ${proposalId}`);
}
- if (proposal.purchaseStatus === PurchaseStatus.RepurchaseDetected) {
+ if (proposal.purchaseStatus === PurchaseStatus.DoneRepurchaseDetected) {
const existingProposalId = proposal.repurchaseProposalId;
if (existingProposalId) {
logger.trace("using existing purchase for same product");
@@ -1527,7 +1524,7 @@ export async function processPurchase(
return processPurchaseDialogShared(ws, purchase);
case PurchaseStatus.FailedClaim:
case PurchaseStatus.Done:
- case PurchaseStatus.RepurchaseDetected:
+ case PurchaseStatus.DoneRepurchaseDetected:
case PurchaseStatus.DialogProposed:
case PurchaseStatus.AbortedProposalRefused:
case PurchaseStatus.AbortedIncompletePayment:
@@ -2099,7 +2096,7 @@ export function computePayMerchantTransactionState(
return {
major: TransactionMajorState.Done,
};
- case PurchaseStatus.RepurchaseDetected:
+ case PurchaseStatus.DoneRepurchaseDetected:
return {
major: TransactionMajorState.Failed,
minor: TransactionMinorState.Repurchase,
@@ -2176,7 +2173,7 @@ export function computePayMerchantTransactionActions(
return [TransactionAction.Delete];
case PurchaseStatus.Done:
return [TransactionAction.Delete];
- case PurchaseStatus.RepurchaseDetected:
+ case PurchaseStatus.DoneRepurchaseDetected:
return [TransactionAction.Delete];
case PurchaseStatus.AbortedIncompletePayment:
return [TransactionAction.Delete];
diff --git a/packages/taler-wallet-core/src/operations/pay-peer-common.ts b/packages/taler-wallet-core/src/operations/pay-peer-common.ts
index 9e05e43d8..6d425289d 100644
--- a/packages/taler-wallet-core/src/operations/pay-peer-common.ts
+++ b/packages/taler-wallet-core/src/operations/pay-peer-common.ts
@@ -108,16 +108,8 @@ export async function getTotalPeerPaymentCost(
}
const allDenoms = await tx.denominations.indexes.byExchangeBaseUrl
.iter(coin.exchangeBaseUrl)
- .filter((x) =>
- Amounts.isSameCurrency(
- DenominationRecord.getValue(x),
- pcs[i].contribution,
- ),
- );
- const amountLeft = Amounts.sub(
- DenominationRecord.getValue(denom),
- pcs[i].contribution,
- ).amount;
+ .filter((x) => Amounts.isSameCurrency(x.value, pcs[i].contribution));
+ const amountLeft = Amounts.sub(denom.value, pcs[i].contribution).amount;
const refreshCost = getTotalRefreshCost(
allDenoms,
DenominationRecord.toDenomInfo(denom),
diff --git a/packages/taler-wallet-core/src/operations/pay-peer-pull-credit.ts b/packages/taler-wallet-core/src/operations/pay-peer-pull-credit.ts
index 29c0fff9e..0355eb152 100644
--- a/packages/taler-wallet-core/src/operations/pay-peer-pull-credit.ts
+++ b/packages/taler-wallet-core/src/operations/pay-peer-pull-credit.ts
@@ -27,6 +27,7 @@ import {
InitiatePeerPullCreditResponse,
Logger,
NotificationType,
+ PeerContractTerms,
TalerErrorCode,
TalerPreciseTimestamp,
TalerProtocolTimestamp,
@@ -55,8 +56,8 @@ import {
import {
KycPendingInfo,
KycUserType,
- PeerPullPaymentInitiationRecord,
- PeerPullPaymentInitiationStatus,
+ PeerPullCreditRecord,
+ PeerPullPaymentCreditStatus,
WithdrawalGroupStatus,
WithdrawalRecordType,
updateExchangeFromUrl,
@@ -90,7 +91,7 @@ const logger = new Logger("pay-peer-pull-credit.ts");
async function queryPurseForPeerPullCredit(
ws: InternalWalletState,
- pullIni: PeerPullPaymentInitiationRecord,
+ pullIni: PeerPullCreditRecord,
cancellationToken: CancellationToken,
): Promise<LongpollResult> {
const purseDepositUrl = new URL(
@@ -143,7 +144,6 @@ async function queryPurseForPeerPullCredit(
amount: Amounts.parseOrThrow(pullIni.amount),
wgInfo: {
withdrawalType: WithdrawalRecordType.PeerPullCredit,
- contractTerms: pullIni.contractTerms,
contractPriv: pullIni.contractPriv,
},
forcedWithdrawalGroupId: pullIni.withdrawalGroupId,
@@ -159,18 +159,18 @@ async function queryPurseForPeerPullCredit(
pursePub: pullIni.pursePub,
});
const transitionInfo = await ws.db
- .mktx((x) => [x.peerPullPaymentInitiations])
+ .mktx((x) => [x.peerPullCredit])
.runReadWrite(async (tx) => {
- const finPi = await tx.peerPullPaymentInitiations.get(pullIni.pursePub);
+ const finPi = await tx.peerPullCredit.get(pullIni.pursePub);
if (!finPi) {
- logger.warn("peerPullPaymentInitiation not found anymore");
+ logger.warn("peerPullCredit not found anymore");
return;
}
const oldTxState = computePeerPullCreditTransactionState(finPi);
- if (finPi.status === PeerPullPaymentInitiationStatus.PendingReady) {
- finPi.status = PeerPullPaymentInitiationStatus.PendingWithdrawing;
+ if (finPi.status === PeerPullPaymentCreditStatus.PendingReady) {
+ finPi.status = PeerPullPaymentCreditStatus.PendingWithdrawing;
}
- await tx.peerPullPaymentInitiations.put(finPi);
+ await tx.peerPullCredit.put(finPi);
const newTxState = computePeerPullCreditTransactionState(finPi);
return { oldTxState, newTxState };
});
@@ -214,22 +214,22 @@ async function longpollKycStatus(
kycStatusRes.status === HttpStatusCode.NoContent
) {
const transitionInfo = await ws.db
- .mktx((x) => [x.peerPullPaymentInitiations])
+ .mktx((x) => [x.peerPullCredit])
.runReadWrite(async (tx) => {
- const peerIni = await tx.peerPullPaymentInitiations.get(pursePub);
+ const peerIni = await tx.peerPullCredit.get(pursePub);
if (!peerIni) {
return;
}
if (
peerIni.status !==
- PeerPullPaymentInitiationStatus.PendingMergeKycRequired
+ PeerPullPaymentCreditStatus.PendingMergeKycRequired
) {
return;
}
const oldTxState = computePeerPullCreditTransactionState(peerIni);
- peerIni.status = PeerPullPaymentInitiationStatus.PendingCreatePurse;
+ peerIni.status = PeerPullPaymentCreditStatus.PendingCreatePurse;
const newTxState = computePeerPullCreditTransactionState(peerIni);
- await tx.peerPullPaymentInitiations.put(peerIni);
+ await tx.peerPullCredit.put(peerIni);
return { oldTxState, newTxState };
});
notifyTransition(ws, transactionId, transitionInfo);
@@ -250,7 +250,7 @@ async function longpollKycStatus(
async function processPeerPullCreditAbortingDeletePurse(
ws: InternalWalletState,
- peerPullIni: PeerPullPaymentInitiationRecord,
+ peerPullIni: PeerPullCreditRecord,
): Promise<TaskRunResult> {
const { pursePub, pursePriv } = peerPullIni;
const transactionId = constructTransactionIdentifier({
@@ -272,24 +272,22 @@ async function processPeerPullCreditAbortingDeletePurse(
const transitionInfo = await ws.db
.mktx((x) => [
- x.peerPullPaymentInitiations,
+ x.peerPullCredit,
x.refreshGroups,
x.denominations,
x.coinAvailability,
x.coins,
])
.runReadWrite(async (tx) => {
- const ppiRec = await tx.peerPullPaymentInitiations.get(pursePub);
+ const ppiRec = await tx.peerPullCredit.get(pursePub);
if (!ppiRec) {
return undefined;
}
- if (
- ppiRec.status !== PeerPullPaymentInitiationStatus.AbortingDeletePurse
- ) {
+ if (ppiRec.status !== PeerPullPaymentCreditStatus.AbortingDeletePurse) {
return undefined;
}
const oldTxState = computePeerPullCreditTransactionState(ppiRec);
- ppiRec.status = PeerPullPaymentInitiationStatus.Aborted;
+ ppiRec.status = PeerPullPaymentCreditStatus.Aborted;
const newTxState = computePeerPullCreditTransactionState(ppiRec);
return {
oldTxState,
@@ -303,7 +301,7 @@ async function processPeerPullCreditAbortingDeletePurse(
async function handlePeerPullCreditWithdrawing(
ws: InternalWalletState,
- pullIni: PeerPullPaymentInitiationRecord,
+ pullIni: PeerPullCreditRecord,
): Promise<TaskRunResult> {
if (!pullIni.withdrawalGroupId) {
throw Error("invalid db state (withdrawing, but no withdrawal group ID");
@@ -315,14 +313,14 @@ async function handlePeerPullCreditWithdrawing(
const wgId = pullIni.withdrawalGroupId;
let finished: boolean = false;
const transitionInfo = await ws.db
- .mktx((x) => [x.peerPullPaymentInitiations, x.withdrawalGroups])
+ .mktx((x) => [x.peerPullCredit, x.withdrawalGroups])
.runReadWrite(async (tx) => {
- const ppi = await tx.peerPullPaymentInitiations.get(pullIni.pursePub);
+ const ppi = await tx.peerPullCredit.get(pullIni.pursePub);
if (!ppi) {
finished = true;
return;
}
- if (ppi.status !== PeerPullPaymentInitiationStatus.PendingWithdrawing) {
+ if (ppi.status !== PeerPullPaymentCreditStatus.PendingWithdrawing) {
finished = true;
return;
}
@@ -333,13 +331,13 @@ async function handlePeerPullCreditWithdrawing(
return undefined;
}
switch (wg.status) {
- case WithdrawalGroupStatus.Finished:
+ case WithdrawalGroupStatus.Done:
finished = true;
- ppi.status = PeerPullPaymentInitiationStatus.Done;
+ ppi.status = PeerPullPaymentCreditStatus.Done;
break;
// FIXME: Also handle other final states!
}
- await tx.peerPullPaymentInitiations.put(ppi);
+ await tx.peerPullCredit.put(ppi);
const newTxState = computePeerPullCreditTransactionState(ppi);
return {
oldTxState,
@@ -357,7 +355,7 @@ async function handlePeerPullCreditWithdrawing(
async function handlePeerPullCreditCreatePurse(
ws: InternalWalletState,
- pullIni: PeerPullPaymentInitiationRecord,
+ pullIni: PeerPullCreditRecord,
): Promise<TaskRunResult> {
const purseFee = Amounts.stringify(Amounts.zeroOfAmount(pullIni.amount));
const pursePub = pullIni.pursePub;
@@ -371,6 +369,18 @@ async function handlePeerPullCreditCreatePurse(
throw Error("merge reserve for peer pull payment not found in database");
}
+ const contractTermsRecord = await ws.db
+ .mktx((x) => [x.contractTerms])
+ .runReadOnly(async (tx) => {
+ return tx.contractTerms.get(pullIni.contractTermsHash);
+ });
+
+ if (!contractTermsRecord) {
+ throw Error("contract terms for peer pull payment not found in database");
+ }
+
+ const contractTerms: PeerContractTerms = contractTermsRecord.contractTermsRaw;
+
const reservePayto = talerPaytoFromExchangeReserve(
pullIni.exchangeBaseUrl,
mergeReserve.reservePub,
@@ -379,19 +389,19 @@ async function handlePeerPullCreditCreatePurse(
const econtractResp = await ws.cryptoApi.encryptContractForDeposit({
contractPriv: pullIni.contractPriv,
contractPub: pullIni.contractPub,
- contractTerms: pullIni.contractTerms,
+ contractTerms: contractTermsRecord,
pursePriv: pullIni.pursePriv,
pursePub: pullIni.pursePub,
nonce: pullIni.contractEncNonce,
});
- const purseExpiration = pullIni.contractTerms.purse_expiration;
+ const purseExpiration = contractTerms.purse_expiration;
const sigRes = await ws.cryptoApi.signReservePurseCreate({
contractTermsHash: pullIni.contractTermsHash,
flags: WalletAccountMergeFlags.CreateWithPurseFee,
mergePriv: pullIni.mergePriv,
mergeTimestamp: TalerPreciseTimestamp.round(pullIni.mergeTimestamp),
- purseAmount: pullIni.contractTerms.amount,
+ purseAmount: pullIni.amount,
purseExpiration: purseExpiration,
purseFee: purseFee,
pursePriv: pullIni.pursePriv,
@@ -410,7 +420,7 @@ async function handlePeerPullCreditCreatePurse(
purse_fee: purseFee,
purse_pub: pullIni.pursePub,
purse_sig: sigRes.purseSig,
- purse_value: pullIni.contractTerms.amount,
+ purse_value: pullIni.amount,
reserve_sig: sigRes.accountSig,
econtract: econtractResp.econtract,
};
@@ -444,15 +454,15 @@ async function handlePeerPullCreditCreatePurse(
});
const transitionInfo = await ws.db
- .mktx((x) => [x.peerPullPaymentInitiations])
+ .mktx((x) => [x.peerPullCredit])
.runReadWrite(async (tx) => {
- const pi2 = await tx.peerPullPaymentInitiations.get(pursePub);
+ const pi2 = await tx.peerPullCredit.get(pursePub);
if (!pi2) {
return;
}
const oldTxState = computePeerPullCreditTransactionState(pi2);
- pi2.status = PeerPullPaymentInitiationStatus.PendingReady;
- await tx.peerPullPaymentInitiations.put(pi2);
+ pi2.status = PeerPullPaymentCreditStatus.PendingReady;
+ await tx.peerPullCredit.put(pi2);
const newTxState = computePeerPullCreditTransactionState(pi2);
return { oldTxState, newTxState };
});
@@ -466,9 +476,9 @@ export async function processPeerPullCredit(
pursePub: string,
): Promise<TaskRunResult> {
const pullIni = await ws.db
- .mktx((x) => [x.peerPullPaymentInitiations])
+ .mktx((x) => [x.peerPullCredit])
.runReadOnly(async (tx) => {
- return tx.peerPullPaymentInitiations.get(pursePub);
+ return tx.peerPullCredit.get(pursePub);
});
if (!pullIni) {
throw Error("peer pull payment initiation not found in database");
@@ -490,10 +500,10 @@ export async function processPeerPullCredit(
logger.trace(`processing ${retryTag}, status=${pullIni.status}`);
switch (pullIni.status) {
- case PeerPullPaymentInitiationStatus.Done: {
+ case PeerPullPaymentCreditStatus.Done: {
return TaskRunResult.finished();
}
- case PeerPullPaymentInitiationStatus.PendingReady:
+ case PeerPullPaymentCreditStatus.PendingReady:
runLongpollAsync(ws, retryTag, async (cancellationToken) =>
queryPurseForPeerPullCredit(ws, pullIni, cancellationToken),
);
@@ -503,7 +513,7 @@ export async function processPeerPullCredit(
return {
type: TaskRunResultType.Longpoll,
};
- case PeerPullPaymentInitiationStatus.PendingMergeKycRequired: {
+ case PeerPullPaymentCreditStatus.PendingMergeKycRequired: {
if (!pullIni.kycInfo) {
throw Error("invalid state, kycInfo required");
}
@@ -515,19 +525,19 @@ export async function processPeerPullCredit(
"individual",
);
}
- case PeerPullPaymentInitiationStatus.PendingCreatePurse:
+ case PeerPullPaymentCreditStatus.PendingCreatePurse:
return handlePeerPullCreditCreatePurse(ws, pullIni);
- case PeerPullPaymentInitiationStatus.AbortingDeletePurse:
+ case PeerPullPaymentCreditStatus.AbortingDeletePurse:
return await processPeerPullCreditAbortingDeletePurse(ws, pullIni);
- case PeerPullPaymentInitiationStatus.PendingWithdrawing:
+ case PeerPullPaymentCreditStatus.PendingWithdrawing:
return handlePeerPullCreditWithdrawing(ws, pullIni);
- case PeerPullPaymentInitiationStatus.Aborted:
- case PeerPullPaymentInitiationStatus.Failed:
- case PeerPullPaymentInitiationStatus.SuspendedAbortingDeletePurse:
- case PeerPullPaymentInitiationStatus.SuspendedCreatePurse:
- case PeerPullPaymentInitiationStatus.SuspendedMergeKycRequired:
- case PeerPullPaymentInitiationStatus.SuspendedReady:
- case PeerPullPaymentInitiationStatus.SuspendedWithdrawing:
+ case PeerPullPaymentCreditStatus.Aborted:
+ case PeerPullPaymentCreditStatus.Failed:
+ case PeerPullPaymentCreditStatus.SuspendedAbortingDeletePurse:
+ case PeerPullPaymentCreditStatus.SuspendedCreatePurse:
+ case PeerPullPaymentCreditStatus.SuspendedMergeKycRequired:
+ case PeerPullPaymentCreditStatus.SuspendedReady:
+ case PeerPullPaymentCreditStatus.SuspendedWithdrawing:
break;
default:
assertUnreachable(pullIni.status);
@@ -538,7 +548,7 @@ export async function processPeerPullCredit(
async function processPeerPullCreditKycRequired(
ws: InternalWalletState,
- peerIni: PeerPullPaymentInitiationRecord,
+ peerIni: PeerPullCreditRecord,
kycPending: WalletKycUuid,
): Promise<TaskRunResult> {
const transactionId = constructTransactionIdentifier({
@@ -570,9 +580,9 @@ async function processPeerPullCreditKycRequired(
const kycStatus = await kycStatusRes.json();
logger.info(`kyc status: ${j2s(kycStatus)}`);
const { transitionInfo, result } = await ws.db
- .mktx((x) => [x.peerPullPaymentInitiations])
+ .mktx((x) => [x.peerPullCredit])
.runReadWrite(async (tx) => {
- const peerInc = await tx.peerPullPaymentInitiations.get(pursePub);
+ const peerInc = await tx.peerPullCredit.get(pursePub);
if (!peerInc) {
return {
transitionInfo: undefined,
@@ -585,10 +595,9 @@ async function processPeerPullCreditKycRequired(
requirementRow: kycPending.requirement_row,
};
peerInc.kycUrl = kycStatus.kyc_url;
- peerInc.status =
- PeerPullPaymentInitiationStatus.PendingMergeKycRequired;
+ peerInc.status = PeerPullPaymentCreditStatus.PendingMergeKycRequired;
const newTxState = computePeerPullCreditTransactionState(peerInc);
- await tx.peerPullPaymentInitiations.put(peerInc);
+ await tx.peerPullCredit.put(peerInc);
// We'll remove this eventually! New clients should rely on the
// kycUrl field of the transaction, not the error code.
const res: TaskRunResult = {
@@ -758,9 +767,9 @@ export async function initiatePeerPullPayment(
);
const transitionInfo = await ws.db
- .mktx((x) => [x.peerPullPaymentInitiations, x.contractTerms])
+ .mktx((x) => [x.peerPullCredit, x.contractTerms])
.runReadWrite(async (tx) => {
- const ppi: PeerPullPaymentInitiationRecord = {
+ const ppi: PeerPullCreditRecord = {
amount: req.partialContractTerms.amount,
contractTermsHash: hContractTerms,
exchangeBaseUrl: exchangeBaseUrl,
@@ -768,8 +777,7 @@ export async function initiatePeerPullPayment(
pursePub: pursePair.pub,
mergePriv: mergePair.priv,
mergePub: mergePair.pub,
- status: PeerPullPaymentInitiationStatus.PendingCreatePurse,
- contractTerms: contractTerms,
+ status: PeerPullPaymentCreditStatus.PendingCreatePurse,
mergeTimestamp,
contractEncNonce,
mergeReserveRowId: mergeReserveRowId,
@@ -778,7 +786,7 @@ export async function initiatePeerPullPayment(
withdrawalGroupId,
estimatedAmountEffective: wi.withdrawalAmountEffective,
};
- await tx.peerPullPaymentInitiations.put(ppi);
+ await tx.peerPullCredit.put(ppi);
const oldTxState: TransactionState = {
major: TransactionMajorState.None,
};
@@ -826,39 +834,38 @@ export async function suspendPeerPullCreditTransaction(
});
stopLongpolling(ws, taskId);
const transitionInfo = await ws.db
- .mktx((x) => [x.peerPullPaymentInitiations])
+ .mktx((x) => [x.peerPullCredit])
.runReadWrite(async (tx) => {
- const pullCreditRec = await tx.peerPullPaymentInitiations.get(pursePub);
+ const pullCreditRec = await tx.peerPullCredit.get(pursePub);
if (!pullCreditRec) {
logger.warn(`peer pull credit ${pursePub} not found`);
return;
}
- let newStatus: PeerPullPaymentInitiationStatus | undefined = undefined;
+ let newStatus: PeerPullPaymentCreditStatus | undefined = undefined;
switch (pullCreditRec.status) {
- case PeerPullPaymentInitiationStatus.PendingCreatePurse:
- newStatus = PeerPullPaymentInitiationStatus.SuspendedCreatePurse;
+ case PeerPullPaymentCreditStatus.PendingCreatePurse:
+ newStatus = PeerPullPaymentCreditStatus.SuspendedCreatePurse;
break;
- case PeerPullPaymentInitiationStatus.PendingMergeKycRequired:
- newStatus = PeerPullPaymentInitiationStatus.SuspendedMergeKycRequired;
+ case PeerPullPaymentCreditStatus.PendingMergeKycRequired:
+ newStatus = PeerPullPaymentCreditStatus.SuspendedMergeKycRequired;
break;
- case PeerPullPaymentInitiationStatus.PendingWithdrawing:
- newStatus = PeerPullPaymentInitiationStatus.SuspendedWithdrawing;
+ case PeerPullPaymentCreditStatus.PendingWithdrawing:
+ newStatus = PeerPullPaymentCreditStatus.SuspendedWithdrawing;
break;
- case PeerPullPaymentInitiationStatus.PendingReady:
- newStatus = PeerPullPaymentInitiationStatus.SuspendedReady;
+ case PeerPullPaymentCreditStatus.PendingReady:
+ newStatus = PeerPullPaymentCreditStatus.SuspendedReady;
break;
- case PeerPullPaymentInitiationStatus.AbortingDeletePurse:
- newStatus =
- PeerPullPaymentInitiationStatus.SuspendedAbortingDeletePurse;
+ case PeerPullPaymentCreditStatus.AbortingDeletePurse:
+ newStatus = PeerPullPaymentCreditStatus.SuspendedAbortingDeletePurse;
break;
- case PeerPullPaymentInitiationStatus.Done:
- case PeerPullPaymentInitiationStatus.SuspendedCreatePurse:
- case PeerPullPaymentInitiationStatus.SuspendedMergeKycRequired:
- case PeerPullPaymentInitiationStatus.SuspendedReady:
- case PeerPullPaymentInitiationStatus.SuspendedWithdrawing:
- case PeerPullPaymentInitiationStatus.Aborted:
- case PeerPullPaymentInitiationStatus.Failed:
- case PeerPullPaymentInitiationStatus.SuspendedAbortingDeletePurse:
+ case PeerPullPaymentCreditStatus.Done:
+ case PeerPullPaymentCreditStatus.SuspendedCreatePurse:
+ case PeerPullPaymentCreditStatus.SuspendedMergeKycRequired:
+ case PeerPullPaymentCreditStatus.SuspendedReady:
+ case PeerPullPaymentCreditStatus.SuspendedWithdrawing:
+ case PeerPullPaymentCreditStatus.Aborted:
+ case PeerPullPaymentCreditStatus.Failed:
+ case PeerPullPaymentCreditStatus.SuspendedAbortingDeletePurse:
break;
default:
assertUnreachable(pullCreditRec.status);
@@ -867,7 +874,7 @@ export async function suspendPeerPullCreditTransaction(
const oldTxState = computePeerPullCreditTransactionState(pullCreditRec);
pullCreditRec.status = newStatus;
const newTxState = computePeerPullCreditTransactionState(pullCreditRec);
- await tx.peerPullPaymentInitiations.put(pullCreditRec);
+ await tx.peerPullCredit.put(pullCreditRec);
return {
oldTxState,
newTxState,
@@ -892,33 +899,33 @@ export async function abortPeerPullCreditTransaction(
});
stopLongpolling(ws, taskId);
const transitionInfo = await ws.db
- .mktx((x) => [x.peerPullPaymentInitiations])
+ .mktx((x) => [x.peerPullCredit])
.runReadWrite(async (tx) => {
- const pullCreditRec = await tx.peerPullPaymentInitiations.get(pursePub);
+ const pullCreditRec = await tx.peerPullCredit.get(pursePub);
if (!pullCreditRec) {
logger.warn(`peer pull credit ${pursePub} not found`);
return;
}
- let newStatus: PeerPullPaymentInitiationStatus | undefined = undefined;
+ let newStatus: PeerPullPaymentCreditStatus | undefined = undefined;
switch (pullCreditRec.status) {
- case PeerPullPaymentInitiationStatus.PendingCreatePurse:
- case PeerPullPaymentInitiationStatus.PendingMergeKycRequired:
- newStatus = PeerPullPaymentInitiationStatus.AbortingDeletePurse;
+ case PeerPullPaymentCreditStatus.PendingCreatePurse:
+ case PeerPullPaymentCreditStatus.PendingMergeKycRequired:
+ newStatus = PeerPullPaymentCreditStatus.AbortingDeletePurse;
break;
- case PeerPullPaymentInitiationStatus.PendingWithdrawing:
+ case PeerPullPaymentCreditStatus.PendingWithdrawing:
throw Error("can't abort anymore");
- case PeerPullPaymentInitiationStatus.PendingReady:
- newStatus = PeerPullPaymentInitiationStatus.AbortingDeletePurse;
+ case PeerPullPaymentCreditStatus.PendingReady:
+ newStatus = PeerPullPaymentCreditStatus.AbortingDeletePurse;
break;
- case PeerPullPaymentInitiationStatus.Done:
- case PeerPullPaymentInitiationStatus.SuspendedCreatePurse:
- case PeerPullPaymentInitiationStatus.SuspendedMergeKycRequired:
- case PeerPullPaymentInitiationStatus.SuspendedReady:
- case PeerPullPaymentInitiationStatus.SuspendedWithdrawing:
- case PeerPullPaymentInitiationStatus.Aborted:
- case PeerPullPaymentInitiationStatus.AbortingDeletePurse:
- case PeerPullPaymentInitiationStatus.Failed:
- case PeerPullPaymentInitiationStatus.SuspendedAbortingDeletePurse:
+ case PeerPullPaymentCreditStatus.Done:
+ case PeerPullPaymentCreditStatus.SuspendedCreatePurse:
+ case PeerPullPaymentCreditStatus.SuspendedMergeKycRequired:
+ case PeerPullPaymentCreditStatus.SuspendedReady:
+ case PeerPullPaymentCreditStatus.SuspendedWithdrawing:
+ case PeerPullPaymentCreditStatus.Aborted:
+ case PeerPullPaymentCreditStatus.AbortingDeletePurse:
+ case PeerPullPaymentCreditStatus.Failed:
+ case PeerPullPaymentCreditStatus.SuspendedAbortingDeletePurse:
break;
default:
assertUnreachable(pullCreditRec.status);
@@ -927,7 +934,7 @@ export async function abortPeerPullCreditTransaction(
const oldTxState = computePeerPullCreditTransactionState(pullCreditRec);
pullCreditRec.status = newStatus;
const newTxState = computePeerPullCreditTransactionState(pullCreditRec);
- await tx.peerPullPaymentInitiations.put(pullCreditRec);
+ await tx.peerPullCredit.put(pullCreditRec);
return {
oldTxState,
newTxState,
@@ -952,30 +959,30 @@ export async function failPeerPullCreditTransaction(
});
stopLongpolling(ws, taskId);
const transitionInfo = await ws.db
- .mktx((x) => [x.peerPullPaymentInitiations])
+ .mktx((x) => [x.peerPullCredit])
.runReadWrite(async (tx) => {
- const pullCreditRec = await tx.peerPullPaymentInitiations.get(pursePub);
+ const pullCreditRec = await tx.peerPullCredit.get(pursePub);
if (!pullCreditRec) {
logger.warn(`peer pull credit ${pursePub} not found`);
return;
}
- let newStatus: PeerPullPaymentInitiationStatus | undefined = undefined;
+ let newStatus: PeerPullPaymentCreditStatus | undefined = undefined;
switch (pullCreditRec.status) {
- case PeerPullPaymentInitiationStatus.PendingCreatePurse:
- case PeerPullPaymentInitiationStatus.PendingMergeKycRequired:
- case PeerPullPaymentInitiationStatus.PendingWithdrawing:
- case PeerPullPaymentInitiationStatus.PendingReady:
- case PeerPullPaymentInitiationStatus.Done:
- case PeerPullPaymentInitiationStatus.SuspendedCreatePurse:
- case PeerPullPaymentInitiationStatus.SuspendedMergeKycRequired:
- case PeerPullPaymentInitiationStatus.SuspendedReady:
- case PeerPullPaymentInitiationStatus.SuspendedWithdrawing:
- case PeerPullPaymentInitiationStatus.Aborted:
- case PeerPullPaymentInitiationStatus.Failed:
+ case PeerPullPaymentCreditStatus.PendingCreatePurse:
+ case PeerPullPaymentCreditStatus.PendingMergeKycRequired:
+ case PeerPullPaymentCreditStatus.PendingWithdrawing:
+ case PeerPullPaymentCreditStatus.PendingReady:
+ case PeerPullPaymentCreditStatus.Done:
+ case PeerPullPaymentCreditStatus.SuspendedCreatePurse:
+ case PeerPullPaymentCreditStatus.SuspendedMergeKycRequired:
+ case PeerPullPaymentCreditStatus.SuspendedReady:
+ case PeerPullPaymentCreditStatus.SuspendedWithdrawing:
+ case PeerPullPaymentCreditStatus.Aborted:
+ case PeerPullPaymentCreditStatus.Failed:
break;
- case PeerPullPaymentInitiationStatus.AbortingDeletePurse:
- case PeerPullPaymentInitiationStatus.SuspendedAbortingDeletePurse:
- newStatus = PeerPullPaymentInitiationStatus.Failed;
+ case PeerPullPaymentCreditStatus.AbortingDeletePurse:
+ case PeerPullPaymentCreditStatus.SuspendedAbortingDeletePurse:
+ newStatus = PeerPullPaymentCreditStatus.Failed;
break;
default:
assertUnreachable(pullCreditRec.status);
@@ -984,7 +991,7 @@ export async function failPeerPullCreditTransaction(
const oldTxState = computePeerPullCreditTransactionState(pullCreditRec);
pullCreditRec.status = newStatus;
const newTxState = computePeerPullCreditTransactionState(pullCreditRec);
- await tx.peerPullPaymentInitiations.put(pullCreditRec);
+ await tx.peerPullCredit.put(pullCreditRec);
return {
oldTxState,
newTxState,
@@ -1009,38 +1016,38 @@ export async function resumePeerPullCreditTransaction(
});
stopLongpolling(ws, taskId);
const transitionInfo = await ws.db
- .mktx((x) => [x.peerPullPaymentInitiations])
+ .mktx((x) => [x.peerPullCredit])
.runReadWrite(async (tx) => {
- const pullCreditRec = await tx.peerPullPaymentInitiations.get(pursePub);
+ const pullCreditRec = await tx.peerPullCredit.get(pursePub);
if (!pullCreditRec) {
logger.warn(`peer pull credit ${pursePub} not found`);
return;
}
- let newStatus: PeerPullPaymentInitiationStatus | undefined = undefined;
+ let newStatus: PeerPullPaymentCreditStatus | undefined = undefined;
switch (pullCreditRec.status) {
- case PeerPullPaymentInitiationStatus.PendingCreatePurse:
- case PeerPullPaymentInitiationStatus.PendingMergeKycRequired:
- case PeerPullPaymentInitiationStatus.PendingWithdrawing:
- case PeerPullPaymentInitiationStatus.PendingReady:
- case PeerPullPaymentInitiationStatus.AbortingDeletePurse:
- case PeerPullPaymentInitiationStatus.Done:
- case PeerPullPaymentInitiationStatus.Failed:
- case PeerPullPaymentInitiationStatus.Aborted:
+ case PeerPullPaymentCreditStatus.PendingCreatePurse:
+ case PeerPullPaymentCreditStatus.PendingMergeKycRequired:
+ case PeerPullPaymentCreditStatus.PendingWithdrawing:
+ case PeerPullPaymentCreditStatus.PendingReady:
+ case PeerPullPaymentCreditStatus.AbortingDeletePurse:
+ case PeerPullPaymentCreditStatus.Done:
+ case PeerPullPaymentCreditStatus.Failed:
+ case PeerPullPaymentCreditStatus.Aborted:
break;
- case PeerPullPaymentInitiationStatus.SuspendedCreatePurse:
- newStatus = PeerPullPaymentInitiationStatus.PendingCreatePurse;
+ case PeerPullPaymentCreditStatus.SuspendedCreatePurse:
+ newStatus = PeerPullPaymentCreditStatus.PendingCreatePurse;
break;
- case PeerPullPaymentInitiationStatus.SuspendedMergeKycRequired:
- newStatus = PeerPullPaymentInitiationStatus.PendingMergeKycRequired;
+ case PeerPullPaymentCreditStatus.SuspendedMergeKycRequired:
+ newStatus = PeerPullPaymentCreditStatus.PendingMergeKycRequired;
break;
- case PeerPullPaymentInitiationStatus.SuspendedReady:
- newStatus = PeerPullPaymentInitiationStatus.PendingReady;
+ case PeerPullPaymentCreditStatus.SuspendedReady:
+ newStatus = PeerPullPaymentCreditStatus.PendingReady;
break;
- case PeerPullPaymentInitiationStatus.SuspendedWithdrawing:
- newStatus = PeerPullPaymentInitiationStatus.PendingWithdrawing;
+ case PeerPullPaymentCreditStatus.SuspendedWithdrawing:
+ newStatus = PeerPullPaymentCreditStatus.PendingWithdrawing;
break;
- case PeerPullPaymentInitiationStatus.SuspendedAbortingDeletePurse:
- newStatus = PeerPullPaymentInitiationStatus.AbortingDeletePurse;
+ case PeerPullPaymentCreditStatus.SuspendedAbortingDeletePurse:
+ newStatus = PeerPullPaymentCreditStatus.AbortingDeletePurse;
break;
default:
assertUnreachable(pullCreditRec.status);
@@ -1049,7 +1056,7 @@ export async function resumePeerPullCreditTransaction(
const oldTxState = computePeerPullCreditTransactionState(pullCreditRec);
pullCreditRec.status = newStatus;
const newTxState = computePeerPullCreditTransactionState(pullCreditRec);
- await tx.peerPullPaymentInitiations.put(pullCreditRec);
+ await tx.peerPullCredit.put(pullCreditRec);
return {
oldTxState,
newTxState,
@@ -1062,67 +1069,67 @@ export async function resumePeerPullCreditTransaction(
}
export function computePeerPullCreditTransactionState(
- pullCreditRecord: PeerPullPaymentInitiationRecord,
+ pullCreditRecord: PeerPullCreditRecord,
): TransactionState {
switch (pullCreditRecord.status) {
- case PeerPullPaymentInitiationStatus.PendingCreatePurse:
+ case PeerPullPaymentCreditStatus.PendingCreatePurse:
return {
major: TransactionMajorState.Pending,
minor: TransactionMinorState.CreatePurse,
};
- case PeerPullPaymentInitiationStatus.PendingMergeKycRequired:
+ case PeerPullPaymentCreditStatus.PendingMergeKycRequired:
return {
major: TransactionMajorState.Pending,
minor: TransactionMinorState.MergeKycRequired,
};
- case PeerPullPaymentInitiationStatus.PendingReady:
+ case PeerPullPaymentCreditStatus.PendingReady:
return {
major: TransactionMajorState.Pending,
minor: TransactionMinorState.Ready,
};
- case PeerPullPaymentInitiationStatus.Done:
+ case PeerPullPaymentCreditStatus.Done:
return {
major: TransactionMajorState.Done,
};
- case PeerPullPaymentInitiationStatus.PendingWithdrawing:
+ case PeerPullPaymentCreditStatus.PendingWithdrawing:
return {
major: TransactionMajorState.Pending,
minor: TransactionMinorState.Withdraw,
};
- case PeerPullPaymentInitiationStatus.SuspendedCreatePurse:
+ case PeerPullPaymentCreditStatus.SuspendedCreatePurse:
return {
major: TransactionMajorState.Suspended,
minor: TransactionMinorState.CreatePurse,
};
- case PeerPullPaymentInitiationStatus.SuspendedReady:
+ case PeerPullPaymentCreditStatus.SuspendedReady:
return {
major: TransactionMajorState.Suspended,
minor: TransactionMinorState.Ready,
};
- case PeerPullPaymentInitiationStatus.SuspendedWithdrawing:
+ case PeerPullPaymentCreditStatus.SuspendedWithdrawing:
return {
major: TransactionMajorState.Pending,
minor: TransactionMinorState.Withdraw,
};
- case PeerPullPaymentInitiationStatus.SuspendedMergeKycRequired:
+ case PeerPullPaymentCreditStatus.SuspendedMergeKycRequired:
return {
major: TransactionMajorState.Suspended,
minor: TransactionMinorState.MergeKycRequired,
};
- case PeerPullPaymentInitiationStatus.Aborted:
+ case PeerPullPaymentCreditStatus.Aborted:
return {
major: TransactionMajorState.Aborted,
};
- case PeerPullPaymentInitiationStatus.AbortingDeletePurse:
+ case PeerPullPaymentCreditStatus.AbortingDeletePurse:
return {
major: TransactionMajorState.Aborting,
minor: TransactionMinorState.DeletePurse,
};
- case PeerPullPaymentInitiationStatus.Failed:
+ case PeerPullPaymentCreditStatus.Failed:
return {
major: TransactionMajorState.Failed,
};
- case PeerPullPaymentInitiationStatus.SuspendedAbortingDeletePurse:
+ case PeerPullPaymentCreditStatus.SuspendedAbortingDeletePurse:
return {
major: TransactionMajorState.Aborting,
minor: TransactionMinorState.DeletePurse,
@@ -1131,34 +1138,34 @@ export function computePeerPullCreditTransactionState(
}
export function computePeerPullCreditTransactionActions(
- pullCreditRecord: PeerPullPaymentInitiationRecord,
+ pullCreditRecord: PeerPullCreditRecord,
): TransactionAction[] {
switch (pullCreditRecord.status) {
- case PeerPullPaymentInitiationStatus.PendingCreatePurse:
+ case PeerPullPaymentCreditStatus.PendingCreatePurse:
return [TransactionAction.Abort, TransactionAction.Suspend];
- case PeerPullPaymentInitiationStatus.PendingMergeKycRequired:
+ case PeerPullPaymentCreditStatus.PendingMergeKycRequired:
return [TransactionAction.Abort, TransactionAction.Suspend];
- case PeerPullPaymentInitiationStatus.PendingReady:
+ case PeerPullPaymentCreditStatus.PendingReady:
return [TransactionAction.Abort, TransactionAction.Suspend];
- case PeerPullPaymentInitiationStatus.Done:
+ case PeerPullPaymentCreditStatus.Done:
return [TransactionAction.Delete];
- case PeerPullPaymentInitiationStatus.PendingWithdrawing:
+ case PeerPullPaymentCreditStatus.PendingWithdrawing:
return [TransactionAction.Abort, TransactionAction.Suspend];
- case PeerPullPaymentInitiationStatus.SuspendedCreatePurse:
+ case PeerPullPaymentCreditStatus.SuspendedCreatePurse:
return [TransactionAction.Resume, TransactionAction.Abort];
- case PeerPullPaymentInitiationStatus.SuspendedReady:
+ case PeerPullPaymentCreditStatus.SuspendedReady:
return [TransactionAction.Abort, TransactionAction.Resume];
- case PeerPullPaymentInitiationStatus.SuspendedWithdrawing:
+ case PeerPullPaymentCreditStatus.SuspendedWithdrawing:
return [TransactionAction.Resume, TransactionAction.Fail];
- case PeerPullPaymentInitiationStatus.SuspendedMergeKycRequired:
+ case PeerPullPaymentCreditStatus.SuspendedMergeKycRequired:
return [TransactionAction.Resume, TransactionAction.Fail];
- case PeerPullPaymentInitiationStatus.Aborted:
+ case PeerPullPaymentCreditStatus.Aborted:
return [TransactionAction.Delete];
- case PeerPullPaymentInitiationStatus.AbortingDeletePurse:
+ case PeerPullPaymentCreditStatus.AbortingDeletePurse:
return [TransactionAction.Suspend, TransactionAction.Fail];
- case PeerPullPaymentInitiationStatus.Failed:
+ case PeerPullPaymentCreditStatus.Failed:
return [TransactionAction.Delete];
- case PeerPullPaymentInitiationStatus.SuspendedAbortingDeletePurse:
+ case PeerPullPaymentCreditStatus.SuspendedAbortingDeletePurse:
return [TransactionAction.Resume, TransactionAction.Fail];
}
}
diff --git a/packages/taler-wallet-core/src/operations/pay-peer-pull-debit.ts b/packages/taler-wallet-core/src/operations/pay-peer-pull-debit.ts
index 0de91bf97..f357c41d5 100644
--- a/packages/taler-wallet-core/src/operations/pay-peer-pull-debit.ts
+++ b/packages/taler-wallet-core/src/operations/pay-peer-pull-debit.ts
@@ -140,10 +140,10 @@ async function handlePurseCreationConflict(
);
await ws.db
- .mktx((x) => [x.peerPullPaymentIncoming])
+ .mktx((x) => [x.peerPullDebit])
.runReadWrite(async (tx) => {
- const myPpi = await tx.peerPullPaymentIncoming.get(
- peerPullInc.peerPullPaymentIncomingId,
+ const myPpi = await tx.peerPullDebit.get(
+ peerPullInc.peerPullDebitId,
);
if (!myPpi) {
return;
@@ -162,7 +162,7 @@ async function handlePurseCreationConflict(
default:
return;
}
- await tx.peerPullPaymentIncoming.put(myPpi);
+ await tx.peerPullDebit.put(myPpi);
});
return TaskRunResult.finished();
}
@@ -171,7 +171,7 @@ async function processPeerPullDebitPendingDeposit(
ws: InternalWalletState,
peerPullInc: PeerPullPaymentIncomingRecord,
): Promise<TaskRunResult> {
- const peerPullPaymentIncomingId = peerPullInc.peerPullPaymentIncomingId;
+ const peerPullDebitId = peerPullInc.peerPullDebitId;
const pursePub = peerPullInc.pursePub;
const coinSel = peerPullInc.coinSel;
@@ -202,7 +202,7 @@ async function processPeerPullDebitPendingDeposit(
const transactionId = constructTransactionIdentifier({
tag: TransactionType.PeerPullDebit,
- peerPullPaymentIncomingId,
+ peerPullDebitId,
});
const httpResp = await ws.http.fetch(purseDepositUrl.href, {
@@ -218,10 +218,10 @@ async function processPeerPullDebitPendingDeposit(
logger.trace(`purse deposit response: ${j2s(resp)}`);
const transitionInfo = await ws.db
- .mktx((x) => [x.peerPullPaymentIncoming])
+ .mktx((x) => [x.peerPullDebit])
.runReadWrite(async (tx) => {
- const pi = await tx.peerPullPaymentIncoming.get(
- peerPullPaymentIncomingId,
+ const pi = await tx.peerPullDebit.get(
+ peerPullDebitId,
);
if (!pi) {
throw Error("peer pull payment not found anymore");
@@ -230,9 +230,9 @@ async function processPeerPullDebitPendingDeposit(
return;
}
const oldTxState = computePeerPullDebitTransactionState(pi);
- pi.status = PeerPullDebitRecordStatus.DonePaid;
+ pi.status = PeerPullDebitRecordStatus.Done;
const newTxState = computePeerPullDebitTransactionState(pi);
- await tx.peerPullPaymentIncoming.put(pi);
+ await tx.peerPullDebit.put(pi);
return { oldTxState, newTxState };
});
notifyTransition(ws, transactionId, transitionInfo);
@@ -241,15 +241,15 @@ async function processPeerPullDebitPendingDeposit(
case HttpStatusCode.Gone: {
const transitionInfo = await ws.db
.mktx((x) => [
- x.peerPullPaymentIncoming,
+ x.peerPullDebit,
x.refreshGroups,
x.denominations,
x.coinAvailability,
x.coins,
])
.runReadWrite(async (tx) => {
- const pi = await tx.peerPullPaymentIncoming.get(
- peerPullPaymentIncomingId,
+ const pi = await tx.peerPullDebit.get(
+ peerPullDebitId,
);
if (!pi) {
throw Error("peer pull payment not found anymore");
@@ -284,7 +284,7 @@ async function processPeerPullDebitPendingDeposit(
pi.status = PeerPullDebitRecordStatus.AbortingRefresh;
pi.abortRefreshGroupId = refresh.refreshGroupId;
const newTxState = computePeerPullDebitTransactionState(pi);
- await tx.peerPullPaymentIncoming.put(pi);
+ await tx.peerPullDebit.put(pi);
return { oldTxState, newTxState };
});
notifyTransition(ws, transactionId, transitionInfo);
@@ -308,15 +308,15 @@ async function processPeerPullDebitAbortingRefresh(
ws: InternalWalletState,
peerPullInc: PeerPullPaymentIncomingRecord,
): Promise<TaskRunResult> {
- const peerPullPaymentIncomingId = peerPullInc.peerPullPaymentIncomingId;
+ const peerPullDebitId = peerPullInc.peerPullDebitId;
const abortRefreshGroupId = peerPullInc.abortRefreshGroupId;
checkLogicInvariant(!!abortRefreshGroupId);
const transactionId = constructTransactionIdentifier({
tag: TransactionType.PeerPullDebit,
- peerPullPaymentIncomingId,
+ peerPullDebitId,
});
const transitionInfo = await ws.db
- .mktx((x) => [x.refreshGroups, x.peerPullPaymentIncoming])
+ .mktx((x) => [x.refreshGroups, x.peerPullDebit])
.runReadWrite(async (tx) => {
const refreshGroup = await tx.refreshGroups.get(abortRefreshGroupId);
let newOpState: PeerPullDebitRecordStatus | undefined;
@@ -335,8 +335,8 @@ async function processPeerPullDebitAbortingRefresh(
}
}
if (newOpState) {
- const newDg = await tx.peerPullPaymentIncoming.get(
- peerPullPaymentIncomingId,
+ const newDg = await tx.peerPullDebit.get(
+ peerPullDebitId,
);
if (!newDg) {
return;
@@ -344,7 +344,7 @@ async function processPeerPullDebitAbortingRefresh(
const oldTxState = computePeerPullDebitTransactionState(newDg);
newDg.status = newOpState;
const newTxState = computePeerPullDebitTransactionState(newDg);
- await tx.peerPullPaymentIncoming.put(newDg);
+ await tx.peerPullDebit.put(newDg);
return { oldTxState, newTxState };
}
return undefined;
@@ -356,12 +356,12 @@ async function processPeerPullDebitAbortingRefresh(
export async function processPeerPullDebit(
ws: InternalWalletState,
- peerPullPaymentIncomingId: string,
+ peerPullDebitId: string,
): Promise<TaskRunResult> {
const peerPullInc = await ws.db
- .mktx((x) => [x.peerPullPaymentIncoming])
+ .mktx((x) => [x.peerPullDebit])
.runReadOnly(async (tx) => {
- return tx.peerPullPaymentIncoming.get(peerPullPaymentIncomingId);
+ return tx.peerPullDebit.get(peerPullDebitId);
});
if (!peerPullInc) {
throw Error("peer pull debit not found");
@@ -380,31 +380,31 @@ export async function confirmPeerPullDebit(
ws: InternalWalletState,
req: ConfirmPeerPullDebitRequest,
): Promise<AcceptPeerPullPaymentResponse> {
- let peerPullPaymentIncomingId: string;
+ let peerPullDebitId: string;
if (req.transactionId) {
const parsedTx = parseTransactionIdentifier(req.transactionId);
if (!parsedTx || parsedTx.tag !== TransactionType.PeerPullDebit) {
throw Error("invalid peer-pull-debit transaction identifier");
}
- peerPullPaymentIncomingId = parsedTx.peerPullPaymentIncomingId;
- } else if (req.peerPullPaymentIncomingId) {
- peerPullPaymentIncomingId = req.peerPullPaymentIncomingId;
+ peerPullDebitId = parsedTx.peerPullDebitId;
+ } else if (req.peerPullDebitId) {
+ peerPullDebitId = req.peerPullDebitId;
} else {
throw Error(
- "invalid request, transactionId or peerPullPaymentIncomingId required",
+ "invalid request, transactionId or peerPullDebitId required",
);
}
const peerPullInc = await ws.db
- .mktx((x) => [x.peerPullPaymentIncoming])
+ .mktx((x) => [x.peerPullDebit])
.runReadOnly(async (tx) => {
- return tx.peerPullPaymentIncoming.get(peerPullPaymentIncomingId);
+ return tx.peerPullDebit.get(peerPullDebitId);
});
if (!peerPullInc) {
throw Error(
- `can't accept unknown incoming p2p pull payment (${req.peerPullPaymentIncomingId})`,
+ `can't accept unknown incoming p2p pull payment (${req.peerPullDebitId})`,
);
}
@@ -437,15 +437,15 @@ export async function confirmPeerPullDebit(
x.coins,
x.denominations,
x.refreshGroups,
- x.peerPullPaymentIncoming,
+ x.peerPullDebit,
x.coinAvailability,
])
.runReadWrite(async (tx) => {
await spendCoins(ws, tx, {
- // allocationId: `txn:peer-pull-debit:${req.peerPullPaymentIncomingId}`,
+ // allocationId: `txn:peer-pull-debit:${req.peerPullDebitId}`,
allocationId: constructTransactionIdentifier({
tag: TransactionType.PeerPullDebit,
- peerPullPaymentIncomingId,
+ peerPullDebitId,
}),
coinPubs: sel.coins.map((x) => x.coinPub),
contributions: sel.coins.map((x) =>
@@ -454,8 +454,8 @@ export async function confirmPeerPullDebit(
refreshReason: RefreshReason.PayPeerPull,
});
- const pi = await tx.peerPullPaymentIncoming.get(
- peerPullPaymentIncomingId,
+ const pi = await tx.peerPullDebit.get(
+ peerPullDebitId,
);
if (!pi) {
throw Error();
@@ -468,7 +468,7 @@ export async function confirmPeerPullDebit(
totalCost: Amounts.stringify(totalAmount),
};
}
- await tx.peerPullPaymentIncoming.put(pi);
+ await tx.peerPullDebit.put(pi);
return pi;
});
@@ -476,7 +476,7 @@ export async function confirmPeerPullDebit(
const transactionId = constructTransactionIdentifier({
tag: TransactionType.PeerPullDebit,
- peerPullPaymentIncomingId,
+ peerPullDebitId,
});
return {
@@ -499,9 +499,9 @@ export async function preparePeerPullDebit(
}
const existingPullIncomingRecord = await ws.db
- .mktx((x) => [x.peerPullPaymentIncoming])
+ .mktx((x) => [x.peerPullDebit])
.runReadOnly(async (tx) => {
- return tx.peerPullPaymentIncoming.indexes.byExchangeAndContractPriv.get([
+ return tx.peerPullDebit.indexes.byExchangeAndContractPriv.get([
uri.exchangeBaseUrl,
uri.contractPriv,
]);
@@ -513,12 +513,12 @@ export async function preparePeerPullDebit(
amountRaw: existingPullIncomingRecord.contractTerms.amount,
amountEffective: existingPullIncomingRecord.totalCostEstimated,
contractTerms: existingPullIncomingRecord.contractTerms,
- peerPullPaymentIncomingId:
- existingPullIncomingRecord.peerPullPaymentIncomingId,
+ peerPullDebitId:
+ existingPullIncomingRecord.peerPullDebitId,
transactionId: constructTransactionIdentifier({
tag: TransactionType.PeerPullDebit,
- peerPullPaymentIncomingId:
- existingPullIncomingRecord.peerPullPaymentIncomingId,
+ peerPullDebitId:
+ existingPullIncomingRecord.peerPullDebitId,
}),
};
}
@@ -553,7 +553,7 @@ export async function preparePeerPullDebit(
codecForExchangePurseStatus(),
);
- const peerPullPaymentIncomingId = encodeCrock(getRandomBytes(32));
+ const peerPullDebitId = encodeCrock(getRandomBytes(32));
let contractTerms: PeerContractTerms;
@@ -588,10 +588,10 @@ export async function preparePeerPullDebit(
);
await ws.db
- .mktx((x) => [x.peerPullPaymentIncoming])
+ .mktx((x) => [x.peerPullDebit])
.runReadWrite(async (tx) => {
- await tx.peerPullPaymentIncoming.add({
- peerPullPaymentIncomingId,
+ await tx.peerPullDebit.add({
+ peerPullDebitId,
contractPriv: contractPriv,
exchangeBaseUrl: exchangeBaseUrl,
pursePub: pursePub,
@@ -607,42 +607,42 @@ export async function preparePeerPullDebit(
amountEffective: Amounts.stringify(totalAmount),
amountRaw: contractTerms.amount,
contractTerms: contractTerms,
- peerPullPaymentIncomingId,
+ peerPullDebitId,
transactionId: constructTransactionIdentifier({
tag: TransactionType.PeerPullDebit,
- peerPullPaymentIncomingId: peerPullPaymentIncomingId,
+ peerPullDebitId: peerPullDebitId,
}),
};
}
export async function suspendPeerPullDebitTransaction(
ws: InternalWalletState,
- peerPullPaymentIncomingId: string,
+ peerPullDebitId: string,
) {
const taskId = constructTaskIdentifier({
tag: PendingTaskType.PeerPullDebit,
- peerPullPaymentIncomingId,
+ peerPullDebitId,
});
const transactionId = constructTransactionIdentifier({
tag: TransactionType.PeerPullDebit,
- peerPullPaymentIncomingId,
+ peerPullDebitId,
});
stopLongpolling(ws, taskId);
const transitionInfo = await ws.db
- .mktx((x) => [x.peerPullPaymentIncoming])
+ .mktx((x) => [x.peerPullDebit])
.runReadWrite(async (tx) => {
- const pullDebitRec = await tx.peerPullPaymentIncoming.get(
- peerPullPaymentIncomingId,
+ const pullDebitRec = await tx.peerPullDebit.get(
+ peerPullDebitId,
);
if (!pullDebitRec) {
- logger.warn(`peer pull debit ${peerPullPaymentIncomingId} not found`);
+ logger.warn(`peer pull debit ${peerPullDebitId} not found`);
return;
}
let newStatus: PeerPullDebitRecordStatus | undefined = undefined;
switch (pullDebitRec.status) {
case PeerPullDebitRecordStatus.DialogProposed:
break;
- case PeerPullDebitRecordStatus.DonePaid:
+ case PeerPullDebitRecordStatus.Done:
break;
case PeerPullDebitRecordStatus.PendingDeposit:
newStatus = PeerPullDebitRecordStatus.SuspendedDeposit;
@@ -665,7 +665,7 @@ export async function suspendPeerPullDebitTransaction(
const oldTxState = computePeerPullDebitTransactionState(pullDebitRec);
pullDebitRec.status = newStatus;
const newTxState = computePeerPullDebitTransactionState(pullDebitRec);
- await tx.peerPullPaymentIncoming.put(pullDebitRec);
+ await tx.peerPullDebit.put(pullDebitRec);
return {
oldTxState,
newTxState,
@@ -678,25 +678,25 @@ export async function suspendPeerPullDebitTransaction(
export async function abortPeerPullDebitTransaction(
ws: InternalWalletState,
- peerPullPaymentIncomingId: string,
+ peerPullDebitId: string,
) {
const taskId = constructTaskIdentifier({
tag: PendingTaskType.PeerPullDebit,
- peerPullPaymentIncomingId,
+ peerPullDebitId,
});
const transactionId = constructTransactionIdentifier({
tag: TransactionType.PeerPullDebit,
- peerPullPaymentIncomingId,
+ peerPullDebitId,
});
stopLongpolling(ws, taskId);
const transitionInfo = await ws.db
- .mktx((x) => [x.peerPullPaymentIncoming])
+ .mktx((x) => [x.peerPullDebit])
.runReadWrite(async (tx) => {
- const pullDebitRec = await tx.peerPullPaymentIncoming.get(
- peerPullPaymentIncomingId,
+ const pullDebitRec = await tx.peerPullDebit.get(
+ peerPullDebitId,
);
if (!pullDebitRec) {
- logger.warn(`peer pull debit ${peerPullPaymentIncomingId} not found`);
+ logger.warn(`peer pull debit ${peerPullDebitId} not found`);
return;
}
let newStatus: PeerPullDebitRecordStatus | undefined = undefined;
@@ -704,7 +704,7 @@ export async function abortPeerPullDebitTransaction(
case PeerPullDebitRecordStatus.DialogProposed:
newStatus = PeerPullDebitRecordStatus.Aborted;
break;
- case PeerPullDebitRecordStatus.DonePaid:
+ case PeerPullDebitRecordStatus.Done:
break;
case PeerPullDebitRecordStatus.PendingDeposit:
newStatus = PeerPullDebitRecordStatus.AbortingRefresh;
@@ -726,7 +726,7 @@ export async function abortPeerPullDebitTransaction(
const oldTxState = computePeerPullDebitTransactionState(pullDebitRec);
pullDebitRec.status = newStatus;
const newTxState = computePeerPullDebitTransactionState(pullDebitRec);
- await tx.peerPullPaymentIncoming.put(pullDebitRec);
+ await tx.peerPullDebit.put(pullDebitRec);
return {
oldTxState,
newTxState,
@@ -739,25 +739,25 @@ export async function abortPeerPullDebitTransaction(
export async function failPeerPullDebitTransaction(
ws: InternalWalletState,
- peerPullPaymentIncomingId: string,
+ peerPullDebitId: string,
) {
const taskId = constructTaskIdentifier({
tag: PendingTaskType.PeerPullDebit,
- peerPullPaymentIncomingId,
+ peerPullDebitId,
});
const transactionId = constructTransactionIdentifier({
tag: TransactionType.PeerPullDebit,
- peerPullPaymentIncomingId,
+ peerPullDebitId,
});
stopLongpolling(ws, taskId);
const transitionInfo = await ws.db
- .mktx((x) => [x.peerPullPaymentIncoming])
+ .mktx((x) => [x.peerPullDebit])
.runReadWrite(async (tx) => {
- const pullDebitRec = await tx.peerPullPaymentIncoming.get(
- peerPullPaymentIncomingId,
+ const pullDebitRec = await tx.peerPullDebit.get(
+ peerPullDebitId,
);
if (!pullDebitRec) {
- logger.warn(`peer pull debit ${peerPullPaymentIncomingId} not found`);
+ logger.warn(`peer pull debit ${peerPullDebitId} not found`);
return;
}
let newStatus: PeerPullDebitRecordStatus | undefined = undefined;
@@ -765,7 +765,7 @@ export async function failPeerPullDebitTransaction(
case PeerPullDebitRecordStatus.DialogProposed:
newStatus = PeerPullDebitRecordStatus.Aborted;
break;
- case PeerPullDebitRecordStatus.DonePaid:
+ case PeerPullDebitRecordStatus.Done:
break;
case PeerPullDebitRecordStatus.PendingDeposit:
break;
@@ -787,7 +787,7 @@ export async function failPeerPullDebitTransaction(
const oldTxState = computePeerPullDebitTransactionState(pullDebitRec);
pullDebitRec.status = newStatus;
const newTxState = computePeerPullDebitTransactionState(pullDebitRec);
- await tx.peerPullPaymentIncoming.put(pullDebitRec);
+ await tx.peerPullDebit.put(pullDebitRec);
return {
oldTxState,
newTxState,
@@ -800,31 +800,31 @@ export async function failPeerPullDebitTransaction(
export async function resumePeerPullDebitTransaction(
ws: InternalWalletState,
- peerPullPaymentIncomingId: string,
+ peerPullDebitId: string,
) {
const taskId = constructTaskIdentifier({
tag: PendingTaskType.PeerPullDebit,
- peerPullPaymentIncomingId,
+ peerPullDebitId,
});
const transactionId = constructTransactionIdentifier({
tag: TransactionType.PeerPullDebit,
- peerPullPaymentIncomingId,
+ peerPullDebitId,
});
stopLongpolling(ws, taskId);
const transitionInfo = await ws.db
- .mktx((x) => [x.peerPullPaymentIncoming])
+ .mktx((x) => [x.peerPullDebit])
.runReadWrite(async (tx) => {
- const pullDebitRec = await tx.peerPullPaymentIncoming.get(
- peerPullPaymentIncomingId,
+ const pullDebitRec = await tx.peerPullDebit.get(
+ peerPullDebitId,
);
if (!pullDebitRec) {
- logger.warn(`peer pull debit ${peerPullPaymentIncomingId} not found`);
+ logger.warn(`peer pull debit ${peerPullDebitId} not found`);
return;
}
let newStatus: PeerPullDebitRecordStatus | undefined = undefined;
switch (pullDebitRec.status) {
case PeerPullDebitRecordStatus.DialogProposed:
- case PeerPullDebitRecordStatus.DonePaid:
+ case PeerPullDebitRecordStatus.Done:
case PeerPullDebitRecordStatus.PendingDeposit:
break;
case PeerPullDebitRecordStatus.SuspendedDeposit:
@@ -846,7 +846,7 @@ export async function resumePeerPullDebitTransaction(
const oldTxState = computePeerPullDebitTransactionState(pullDebitRec);
pullDebitRec.status = newStatus;
const newTxState = computePeerPullDebitTransactionState(pullDebitRec);
- await tx.peerPullPaymentIncoming.put(pullDebitRec);
+ await tx.peerPullDebit.put(pullDebitRec);
return {
oldTxState,
newTxState,
@@ -872,7 +872,7 @@ export function computePeerPullDebitTransactionState(
major: TransactionMajorState.Pending,
minor: TransactionMinorState.Deposit,
};
- case PeerPullDebitRecordStatus.DonePaid:
+ case PeerPullDebitRecordStatus.Done:
return {
major: TransactionMajorState.Done,
};
@@ -910,7 +910,7 @@ export function computePeerPullDebitTransactionActions(
return [];
case PeerPullDebitRecordStatus.PendingDeposit:
return [TransactionAction.Abort, TransactionAction.Suspend];
- case PeerPullDebitRecordStatus.DonePaid:
+ case PeerPullDebitRecordStatus.Done:
return [TransactionAction.Delete];
case PeerPullDebitRecordStatus.SuspendedDeposit:
return [TransactionAction.Resume, TransactionAction.Abort];
diff --git a/packages/taler-wallet-core/src/operations/pay-peer-push-credit.ts b/packages/taler-wallet-core/src/operations/pay-peer-push-credit.ts
index 47e9eaddd..89d9e3b49 100644
--- a/packages/taler-wallet-core/src/operations/pay-peer-push-credit.ts
+++ b/packages/taler-wallet-core/src/operations/pay-peer-push-credit.ts
@@ -55,7 +55,7 @@ import {
KycPendingInfo,
KycUserType,
PeerPushPaymentIncomingRecord,
- PeerPushPaymentIncomingStatus,
+ PeerPushCreditStatus,
PendingTaskType,
WithdrawalGroupStatus,
WithdrawalRecordType,
@@ -99,10 +99,10 @@ export async function preparePeerPushCredit(
}
const existing = await ws.db
- .mktx((x) => [x.contractTerms, x.peerPushPaymentIncoming])
+ .mktx((x) => [x.contractTerms, x.peerPushCredit])
.runReadOnly(async (tx) => {
const existingPushInc =
- await tx.peerPushPaymentIncoming.indexes.byExchangeAndContractPriv.get([
+ await tx.peerPushCredit.indexes.byExchangeAndContractPriv.get([
uri.exchangeBaseUrl,
uri.contractPriv,
]);
@@ -129,12 +129,12 @@ export async function preparePeerPushCredit(
amountEffective: existing.existingPushInc.estimatedAmountEffective,
amountRaw: existing.existingContractTerms.amount,
contractTerms: existing.existingContractTerms,
- peerPushPaymentIncomingId:
- existing.existingPushInc.peerPushPaymentIncomingId,
+ peerPushCreditId:
+ existing.existingPushInc.peerPushCreditId,
transactionId: constructTransactionIdentifier({
tag: TransactionType.PeerPushCredit,
- peerPushPaymentIncomingId:
- existing.existingPushInc.peerPushPaymentIncomingId,
+ peerPushCreditId:
+ existing.existingPushInc.peerPushCreditId,
}),
};
}
@@ -172,7 +172,7 @@ export async function preparePeerPushCredit(
codecForExchangePurseStatus(),
);
- const peerPushPaymentIncomingId = encodeCrock(getRandomBytes(32));
+ const peerPushCreditId = encodeCrock(getRandomBytes(32));
const contractTermsHash = ContractTermsUtil.hashContractTerms(
dec.contractTerms,
@@ -188,17 +188,17 @@ export async function preparePeerPushCredit(
);
await ws.db
- .mktx((x) => [x.contractTerms, x.peerPushPaymentIncoming])
+ .mktx((x) => [x.contractTerms, x.peerPushCredit])
.runReadWrite(async (tx) => {
- await tx.peerPushPaymentIncoming.add({
- peerPushPaymentIncomingId,
+ await tx.peerPushCredit.add({
+ peerPushCreditId,
contractPriv: contractPriv,
exchangeBaseUrl: exchangeBaseUrl,
mergePriv: dec.mergePriv,
pursePub: pursePub,
timestamp: TalerPreciseTimestamp.now(),
contractTermsHash,
- status: PeerPushPaymentIncomingStatus.DialogProposed,
+ status: PeerPushCreditStatus.DialogProposed,
withdrawalGroupId,
currency: Amounts.currencyOf(purseStatus.balance),
estimatedAmountEffective: Amounts.stringify(
@@ -219,28 +219,28 @@ export async function preparePeerPushCredit(
amountEffective: wi.withdrawalAmountEffective,
amountRaw: purseStatus.balance,
contractTerms: dec.contractTerms,
- peerPushPaymentIncomingId,
+ peerPushCreditId,
transactionId: constructTransactionIdentifier({
tag: TransactionType.PeerPushCredit,
- peerPushPaymentIncomingId,
+ peerPushCreditId,
}),
};
}
async function longpollKycStatus(
ws: InternalWalletState,
- peerPushPaymentIncomingId: string,
+ peerPushCreditId: string,
exchangeUrl: string,
kycInfo: KycPendingInfo,
userType: KycUserType,
): Promise<TaskRunResult> {
const transactionId = constructTransactionIdentifier({
tag: TransactionType.PeerPushCredit,
- peerPushPaymentIncomingId,
+ peerPushCreditId,
});
const retryTag = constructTaskIdentifier({
tag: PendingTaskType.PeerPushCredit,
- peerPushPaymentIncomingId,
+ peerPushCreditId,
});
runLongpollAsync(ws, retryTag, async (ct) => {
@@ -261,24 +261,24 @@ async function longpollKycStatus(
kycStatusRes.status === HttpStatusCode.NoContent
) {
const transitionInfo = await ws.db
- .mktx((x) => [x.peerPushPaymentIncoming])
+ .mktx((x) => [x.peerPushCredit])
.runReadWrite(async (tx) => {
- const peerInc = await tx.peerPushPaymentIncoming.get(
- peerPushPaymentIncomingId,
+ const peerInc = await tx.peerPushCredit.get(
+ peerPushCreditId,
);
if (!peerInc) {
return;
}
if (
peerInc.status !==
- PeerPushPaymentIncomingStatus.PendingMergeKycRequired
+ PeerPushCreditStatus.PendingMergeKycRequired
) {
return;
}
const oldTxState = computePeerPushCreditTransactionState(peerInc);
- peerInc.status = PeerPushPaymentIncomingStatus.PendingMerge;
+ peerInc.status = PeerPushCreditStatus.PendingMerge;
const newTxState = computePeerPushCreditTransactionState(peerInc);
- await tx.peerPushPaymentIncoming.put(peerInc);
+ await tx.peerPushCredit.put(peerInc);
return { oldTxState, newTxState };
});
notifyTransition(ws, transactionId, transitionInfo);
@@ -304,9 +304,9 @@ async function processPeerPushCreditKycRequired(
): Promise<TaskRunResult> {
const transactionId = constructTransactionIdentifier({
tag: TransactionType.PeerPushCredit,
- peerPushPaymentIncomingId: peerInc.peerPushPaymentIncomingId,
+ peerPushCreditId: peerInc.peerPushCreditId,
});
- const { peerPushPaymentIncomingId } = peerInc;
+ const { peerPushCreditId } = peerInc;
const userType = "individual";
const url = new URL(
@@ -331,10 +331,10 @@ async function processPeerPushCreditKycRequired(
const kycStatus = await kycStatusRes.json();
logger.info(`kyc status: ${j2s(kycStatus)}`);
const { transitionInfo, result } = await ws.db
- .mktx((x) => [x.peerPushPaymentIncoming])
+ .mktx((x) => [x.peerPushCredit])
.runReadWrite(async (tx) => {
- const peerInc = await tx.peerPushPaymentIncoming.get(
- peerPushPaymentIncomingId,
+ const peerInc = await tx.peerPushCredit.get(
+ peerPushCreditId,
);
if (!peerInc) {
return {
@@ -348,9 +348,9 @@ async function processPeerPushCreditKycRequired(
requirementRow: kycPending.requirement_row,
};
peerInc.kycUrl = kycStatus.kyc_url;
- peerInc.status = PeerPushPaymentIncomingStatus.PendingMergeKycRequired;
+ peerInc.status = PeerPushCreditStatus.PendingMergeKycRequired;
const newTxState = computePeerPushCreditTransactionState(peerInc);
- await tx.peerPushPaymentIncoming.put(peerInc);
+ await tx.peerPushCredit.put(peerInc);
// We'll remove this eventually! New clients should rely on the
// kycUrl field of the transaction, not the error code.
const res: TaskRunResult = {
@@ -379,10 +379,10 @@ async function handlePendingMerge(
peerInc: PeerPushPaymentIncomingRecord,
contractTerms: PeerContractTerms,
): Promise<TaskRunResult> {
- const { peerPushPaymentIncomingId } = peerInc;
+ const { peerPushCreditId } = peerInc;
const transactionId = constructTransactionIdentifier({
tag: TransactionType.PeerPushCredit,
- peerPushPaymentIncomingId,
+ peerPushCreditId,
});
const amount = Amounts.parseOrThrow(contractTerms.amount);
@@ -446,7 +446,6 @@ async function handlePendingMerge(
amount,
wgInfo: {
withdrawalType: WithdrawalRecordType.PeerPushCredit,
- contractTerms,
},
forcedWithdrawalGroupId: peerInc.withdrawalGroupId,
exchangeBaseUrl: peerInc.exchangeBaseUrl,
@@ -460,16 +459,15 @@ async function handlePendingMerge(
const txRes = await ws.db
.mktx((x) => [
x.contractTerms,
- x.peerPushPaymentIncoming,
+ x.peerPushCredit,
x.withdrawalGroups,
x.reserves,
x.exchanges,
x.exchangeDetails,
- x.exchangeTrust,
])
.runReadWrite(async (tx) => {
- const peerInc = await tx.peerPushPaymentIncoming.get(
- peerPushPaymentIncomingId,
+ const peerInc = await tx.peerPushCredit.get(
+ peerPushCreditId,
);
if (!peerInc) {
return undefined;
@@ -477,9 +475,9 @@ async function handlePendingMerge(
let withdrawalTransition: TransitionInfo | undefined;
const oldTxState = computePeerPushCreditTransactionState(peerInc);
switch (peerInc.status) {
- case PeerPushPaymentIncomingStatus.PendingMerge:
- case PeerPushPaymentIncomingStatus.PendingMergeKycRequired: {
- peerInc.status = PeerPushPaymentIncomingStatus.PendingWithdrawing;
+ case PeerPushCreditStatus.PendingMerge:
+ case PeerPushCreditStatus.PendingMergeKycRequired: {
+ peerInc.status = PeerPushCreditStatus.PendingWithdrawing;
const wgRes = await internalPerformCreateWithdrawalGroup(
ws,
tx,
@@ -489,7 +487,7 @@ async function handlePendingMerge(
break;
}
}
- await tx.peerPushPaymentIncoming.put(peerInc);
+ await tx.peerPushCredit.put(peerInc);
const newTxState = computePeerPushCreditTransactionState(peerInc);
return {
peerPushCreditTransition: { oldTxState, newTxState },
@@ -515,21 +513,21 @@ async function handlePendingWithdrawing(
}
const transactionId = constructTransactionIdentifier({
tag: TransactionType.PeerPushCredit,
- peerPushPaymentIncomingId: peerInc.peerPushPaymentIncomingId,
+ peerPushCreditId: peerInc.peerPushCreditId,
});
const wgId = peerInc.withdrawalGroupId;
let finished: boolean = false;
const transitionInfo = await ws.db
- .mktx((x) => [x.peerPushPaymentIncoming, x.withdrawalGroups])
+ .mktx((x) => [x.peerPushCredit, x.withdrawalGroups])
.runReadWrite(async (tx) => {
- const ppi = await tx.peerPushPaymentIncoming.get(
- peerInc.peerPushPaymentIncomingId,
+ const ppi = await tx.peerPushCredit.get(
+ peerInc.peerPushCreditId,
);
if (!ppi) {
finished = true;
return;
}
- if (ppi.status !== PeerPushPaymentIncomingStatus.PendingWithdrawing) {
+ if (ppi.status !== PeerPushCreditStatus.PendingWithdrawing) {
finished = true;
return;
}
@@ -540,13 +538,13 @@ async function handlePendingWithdrawing(
return undefined;
}
switch (wg.status) {
- case WithdrawalGroupStatus.Finished:
+ case WithdrawalGroupStatus.Done:
finished = true;
- ppi.status = PeerPushPaymentIncomingStatus.Done;
+ ppi.status = PeerPushCreditStatus.Done;
break;
// FIXME: Also handle other final states!
}
- await tx.peerPushPaymentIncoming.put(ppi);
+ await tx.peerPushCredit.put(ppi);
const newTxState = computePeerPushCreditTransactionState(ppi);
return {
oldTxState,
@@ -564,14 +562,14 @@ async function handlePendingWithdrawing(
export async function processPeerPushCredit(
ws: InternalWalletState,
- peerPushPaymentIncomingId: string,
+ peerPushCreditId: string,
): Promise<TaskRunResult> {
let peerInc: PeerPushPaymentIncomingRecord | undefined;
let contractTerms: PeerContractTerms | undefined;
await ws.db
- .mktx((x) => [x.contractTerms, x.peerPushPaymentIncoming])
+ .mktx((x) => [x.contractTerms, x.peerPushCredit])
.runReadWrite(async (tx) => {
- peerInc = await tx.peerPushPaymentIncoming.get(peerPushPaymentIncomingId);
+ peerInc = await tx.peerPushCredit.get(peerPushCreditId);
if (!peerInc) {
return;
}
@@ -579,35 +577,35 @@ export async function processPeerPushCredit(
if (ctRec) {
contractTerms = ctRec.contractTermsRaw;
}
- await tx.peerPushPaymentIncoming.put(peerInc);
+ await tx.peerPushCredit.put(peerInc);
});
checkDbInvariant(!!contractTerms);
if (!peerInc) {
throw Error(
- `can't accept unknown incoming p2p push payment (${peerPushPaymentIncomingId})`,
+ `can't accept unknown incoming p2p push payment (${peerPushCreditId})`,
);
}
switch (peerInc.status) {
- case PeerPushPaymentIncomingStatus.PendingMergeKycRequired: {
+ case PeerPushCreditStatus.PendingMergeKycRequired: {
if (!peerInc.kycInfo) {
throw Error("invalid state, kycInfo required");
}
return await longpollKycStatus(
ws,
- peerPushPaymentIncomingId,
+ peerPushCreditId,
peerInc.exchangeBaseUrl,
peerInc.kycInfo,
"individual",
);
}
- case PeerPushPaymentIncomingStatus.PendingMerge:
+ case PeerPushCreditStatus.PendingMerge:
return handlePendingMerge(ws, peerInc, contractTerms);
- case PeerPushPaymentIncomingStatus.PendingWithdrawing:
+ case PeerPushCreditStatus.PendingWithdrawing:
return handlePendingWithdrawing(ws, peerInc);
default:
@@ -620,9 +618,9 @@ export async function confirmPeerPushCredit(
req: ConfirmPeerPushCreditRequest,
): Promise<AcceptPeerPushPaymentResponse> {
let peerInc: PeerPushPaymentIncomingRecord | undefined;
- let peerPushPaymentIncomingId: string;
- if (req.peerPushPaymentIncomingId) {
- peerPushPaymentIncomingId = req.peerPushPaymentIncomingId;
+ let peerPushCreditId: string;
+ if (req.peerPushCreditId) {
+ peerPushCreditId = req.peerPushCreditId;
} else if (req.transactionId) {
const parsedTx = parseTransactionIdentifier(req.transactionId);
if (!parsedTx) {
@@ -631,29 +629,29 @@ export async function confirmPeerPushCredit(
if (parsedTx.tag !== TransactionType.PeerPushCredit) {
throw Error("invalid transaction ID type");
}
- peerPushPaymentIncomingId = parsedTx.peerPushPaymentIncomingId;
+ peerPushCreditId = parsedTx.peerPushCreditId;
} else {
throw Error(
- "no transaction ID (or deprecated peerPushPaymentIncomingId) provided",
+ "no transaction ID (or deprecated peerPushCreditId) provided",
);
}
await ws.db
- .mktx((x) => [x.contractTerms, x.peerPushPaymentIncoming])
+ .mktx((x) => [x.contractTerms, x.peerPushCredit])
.runReadWrite(async (tx) => {
- peerInc = await tx.peerPushPaymentIncoming.get(peerPushPaymentIncomingId);
+ peerInc = await tx.peerPushCredit.get(peerPushCreditId);
if (!peerInc) {
return;
}
- if (peerInc.status === PeerPushPaymentIncomingStatus.DialogProposed) {
- peerInc.status = PeerPushPaymentIncomingStatus.PendingMerge;
+ if (peerInc.status === PeerPushCreditStatus.DialogProposed) {
+ peerInc.status = PeerPushCreditStatus.PendingMerge;
}
- await tx.peerPushPaymentIncoming.put(peerInc);
+ await tx.peerPushCredit.put(peerInc);
});
if (!peerInc) {
throw Error(
- `can't accept unknown incoming p2p push payment (${req.peerPushPaymentIncomingId})`,
+ `can't accept unknown incoming p2p push payment (${req.peerPushCreditId})`,
);
}
@@ -661,7 +659,7 @@ export async function confirmPeerPushCredit(
const transactionId = constructTransactionIdentifier({
tag: TransactionType.PeerPushCredit,
- peerPushPaymentIncomingId,
+ peerPushCreditId,
});
return {
@@ -671,48 +669,48 @@ export async function confirmPeerPushCredit(
export async function suspendPeerPushCreditTransaction(
ws: InternalWalletState,
- peerPushPaymentIncomingId: string,
+ peerPushCreditId: string,
) {
const taskId = constructTaskIdentifier({
tag: PendingTaskType.PeerPushCredit,
- peerPushPaymentIncomingId,
+ peerPushCreditId,
});
const transactionId = constructTransactionIdentifier({
tag: TransactionType.PeerPushCredit,
- peerPushPaymentIncomingId,
+ peerPushCreditId,
});
stopLongpolling(ws, taskId);
const transitionInfo = await ws.db
- .mktx((x) => [x.peerPushPaymentIncoming])
+ .mktx((x) => [x.peerPushCredit])
.runReadWrite(async (tx) => {
- const pushCreditRec = await tx.peerPushPaymentIncoming.get(
- peerPushPaymentIncomingId,
+ const pushCreditRec = await tx.peerPushCredit.get(
+ peerPushCreditId,
);
if (!pushCreditRec) {
- logger.warn(`peer push credit ${peerPushPaymentIncomingId} not found`);
+ logger.warn(`peer push credit ${peerPushCreditId} not found`);
return;
}
- let newStatus: PeerPushPaymentIncomingStatus | undefined = undefined;
+ let newStatus: PeerPushCreditStatus | undefined = undefined;
switch (pushCreditRec.status) {
- case PeerPushPaymentIncomingStatus.DialogProposed:
- case PeerPushPaymentIncomingStatus.Done:
- case PeerPushPaymentIncomingStatus.SuspendedMerge:
- case PeerPushPaymentIncomingStatus.SuspendedMergeKycRequired:
- case PeerPushPaymentIncomingStatus.SuspendedWithdrawing:
+ case PeerPushCreditStatus.DialogProposed:
+ case PeerPushCreditStatus.Done:
+ case PeerPushCreditStatus.SuspendedMerge:
+ case PeerPushCreditStatus.SuspendedMergeKycRequired:
+ case PeerPushCreditStatus.SuspendedWithdrawing:
break;
- case PeerPushPaymentIncomingStatus.PendingMergeKycRequired:
- newStatus = PeerPushPaymentIncomingStatus.SuspendedMergeKycRequired;
+ case PeerPushCreditStatus.PendingMergeKycRequired:
+ newStatus = PeerPushCreditStatus.SuspendedMergeKycRequired;
break;
- case PeerPushPaymentIncomingStatus.PendingMerge:
- newStatus = PeerPushPaymentIncomingStatus.SuspendedMerge;
+ case PeerPushCreditStatus.PendingMerge:
+ newStatus = PeerPushCreditStatus.SuspendedMerge;
break;
- case PeerPushPaymentIncomingStatus.PendingWithdrawing:
+ case PeerPushCreditStatus.PendingWithdrawing:
// FIXME: Suspend internal withdrawal transaction!
- newStatus = PeerPushPaymentIncomingStatus.SuspendedWithdrawing;
+ newStatus = PeerPushCreditStatus.SuspendedWithdrawing;
break;
- case PeerPushPaymentIncomingStatus.Aborted:
+ case PeerPushCreditStatus.Aborted:
break;
- case PeerPushPaymentIncomingStatus.Failed:
+ case PeerPushCreditStatus.Failed:
break;
default:
assertUnreachable(pushCreditRec.status);
@@ -721,7 +719,7 @@ export async function suspendPeerPushCreditTransaction(
const oldTxState = computePeerPushCreditTransactionState(pushCreditRec);
pushCreditRec.status = newStatus;
const newTxState = computePeerPushCreditTransactionState(pushCreditRec);
- await tx.peerPushPaymentIncoming.put(pushCreditRec);
+ await tx.peerPushCredit.put(pushCreditRec);
return {
oldTxState,
newTxState,
@@ -734,51 +732,51 @@ export async function suspendPeerPushCreditTransaction(
export async function abortPeerPushCreditTransaction(
ws: InternalWalletState,
- peerPushPaymentIncomingId: string,
+ peerPushCreditId: string,
) {
const taskId = constructTaskIdentifier({
tag: PendingTaskType.PeerPushCredit,
- peerPushPaymentIncomingId,
+ peerPushCreditId,
});
const transactionId = constructTransactionIdentifier({
tag: TransactionType.PeerPushCredit,
- peerPushPaymentIncomingId,
+ peerPushCreditId,
});
stopLongpolling(ws, taskId);
const transitionInfo = await ws.db
- .mktx((x) => [x.peerPushPaymentIncoming])
+ .mktx((x) => [x.peerPushCredit])
.runReadWrite(async (tx) => {
- const pushCreditRec = await tx.peerPushPaymentIncoming.get(
- peerPushPaymentIncomingId,
+ const pushCreditRec = await tx.peerPushCredit.get(
+ peerPushCreditId,
);
if (!pushCreditRec) {
- logger.warn(`peer push credit ${peerPushPaymentIncomingId} not found`);
+ logger.warn(`peer push credit ${peerPushCreditId} not found`);
return;
}
- let newStatus: PeerPushPaymentIncomingStatus | undefined = undefined;
+ let newStatus: PeerPushCreditStatus | undefined = undefined;
switch (pushCreditRec.status) {
- case PeerPushPaymentIncomingStatus.DialogProposed:
- newStatus = PeerPushPaymentIncomingStatus.Aborted;
+ case PeerPushCreditStatus.DialogProposed:
+ newStatus = PeerPushCreditStatus.Aborted;
break;
- case PeerPushPaymentIncomingStatus.Done:
+ case PeerPushCreditStatus.Done:
break;
- case PeerPushPaymentIncomingStatus.SuspendedMerge:
- case PeerPushPaymentIncomingStatus.SuspendedMergeKycRequired:
- case PeerPushPaymentIncomingStatus.SuspendedWithdrawing:
- newStatus = PeerPushPaymentIncomingStatus.Aborted;
+ case PeerPushCreditStatus.SuspendedMerge:
+ case PeerPushCreditStatus.SuspendedMergeKycRequired:
+ case PeerPushCreditStatus.SuspendedWithdrawing:
+ newStatus = PeerPushCreditStatus.Aborted;
break;
- case PeerPushPaymentIncomingStatus.PendingMergeKycRequired:
- newStatus = PeerPushPaymentIncomingStatus.Aborted;
+ case PeerPushCreditStatus.PendingMergeKycRequired:
+ newStatus = PeerPushCreditStatus.Aborted;
break;
- case PeerPushPaymentIncomingStatus.PendingMerge:
- newStatus = PeerPushPaymentIncomingStatus.Aborted;
+ case PeerPushCreditStatus.PendingMerge:
+ newStatus = PeerPushCreditStatus.Aborted;
break;
- case PeerPushPaymentIncomingStatus.PendingWithdrawing:
- newStatus = PeerPushPaymentIncomingStatus.Aborted;
+ case PeerPushCreditStatus.PendingWithdrawing:
+ newStatus = PeerPushCreditStatus.Aborted;
break;
- case PeerPushPaymentIncomingStatus.Aborted:
+ case PeerPushCreditStatus.Aborted:
break;
- case PeerPushPaymentIncomingStatus.Failed:
+ case PeerPushCreditStatus.Failed:
break;
default:
assertUnreachable(pushCreditRec.status);
@@ -787,7 +785,7 @@ export async function abortPeerPushCreditTransaction(
const oldTxState = computePeerPushCreditTransactionState(pushCreditRec);
pushCreditRec.status = newStatus;
const newTxState = computePeerPushCreditTransactionState(pushCreditRec);
- await tx.peerPushPaymentIncoming.put(pushCreditRec);
+ await tx.peerPushCredit.put(pushCreditRec);
return {
oldTxState,
newTxState,
@@ -800,7 +798,7 @@ export async function abortPeerPushCreditTransaction(
export async function failPeerPushCreditTransaction(
ws: InternalWalletState,
- peerPushPaymentIncomingId: string,
+ peerPushCreditId: string,
) {
// We don't have any "aborting" states!
throw Error("can't run cancel-aborting on peer-push-credit transaction");
@@ -808,47 +806,47 @@ export async function failPeerPushCreditTransaction(
export async function resumePeerPushCreditTransaction(
ws: InternalWalletState,
- peerPushPaymentIncomingId: string,
+ peerPushCreditId: string,
) {
const taskId = constructTaskIdentifier({
tag: PendingTaskType.PeerPushCredit,
- peerPushPaymentIncomingId,
+ peerPushCreditId,
});
const transactionId = constructTransactionIdentifier({
tag: TransactionType.PeerPushCredit,
- peerPushPaymentIncomingId,
+ peerPushCreditId,
});
stopLongpolling(ws, taskId);
const transitionInfo = await ws.db
- .mktx((x) => [x.peerPushPaymentIncoming])
+ .mktx((x) => [x.peerPushCredit])
.runReadWrite(async (tx) => {
- const pushCreditRec = await tx.peerPushPaymentIncoming.get(
- peerPushPaymentIncomingId,
+ const pushCreditRec = await tx.peerPushCredit.get(
+ peerPushCreditId,
);
if (!pushCreditRec) {
- logger.warn(`peer push credit ${peerPushPaymentIncomingId} not found`);
+ logger.warn(`peer push credit ${peerPushCreditId} not found`);
return;
}
- let newStatus: PeerPushPaymentIncomingStatus | undefined = undefined;
+ let newStatus: PeerPushCreditStatus | undefined = undefined;
switch (pushCreditRec.status) {
- case PeerPushPaymentIncomingStatus.DialogProposed:
- case PeerPushPaymentIncomingStatus.Done:
- case PeerPushPaymentIncomingStatus.PendingMergeKycRequired:
- case PeerPushPaymentIncomingStatus.PendingMerge:
- case PeerPushPaymentIncomingStatus.PendingWithdrawing:
- case PeerPushPaymentIncomingStatus.SuspendedMerge:
- newStatus = PeerPushPaymentIncomingStatus.PendingMerge;
+ case PeerPushCreditStatus.DialogProposed:
+ case PeerPushCreditStatus.Done:
+ case PeerPushCreditStatus.PendingMergeKycRequired:
+ case PeerPushCreditStatus.PendingMerge:
+ case PeerPushCreditStatus.PendingWithdrawing:
+ case PeerPushCreditStatus.SuspendedMerge:
+ newStatus = PeerPushCreditStatus.PendingMerge;
break;
- case PeerPushPaymentIncomingStatus.SuspendedMergeKycRequired:
- newStatus = PeerPushPaymentIncomingStatus.PendingMergeKycRequired;
+ case PeerPushCreditStatus.SuspendedMergeKycRequired:
+ newStatus = PeerPushCreditStatus.PendingMergeKycRequired;
break;
- case PeerPushPaymentIncomingStatus.SuspendedWithdrawing:
+ case PeerPushCreditStatus.SuspendedWithdrawing:
// FIXME: resume underlying "internal-withdrawal" transaction.
- newStatus = PeerPushPaymentIncomingStatus.PendingWithdrawing;
+ newStatus = PeerPushCreditStatus.PendingWithdrawing;
break;
- case PeerPushPaymentIncomingStatus.Aborted:
+ case PeerPushCreditStatus.Aborted:
break;
- case PeerPushPaymentIncomingStatus.Failed:
+ case PeerPushCreditStatus.Failed:
break;
default:
assertUnreachable(pushCreditRec.status);
@@ -857,7 +855,7 @@ export async function resumePeerPushCreditTransaction(
const oldTxState = computePeerPushCreditTransactionState(pushCreditRec);
pushCreditRec.status = newStatus;
const newTxState = computePeerPushCreditTransactionState(pushCreditRec);
- await tx.peerPushPaymentIncoming.put(pushCreditRec);
+ await tx.peerPushCredit.put(pushCreditRec);
return {
oldTxState,
newTxState,
@@ -873,50 +871,50 @@ export function computePeerPushCreditTransactionState(
pushCreditRecord: PeerPushPaymentIncomingRecord,
): TransactionState {
switch (pushCreditRecord.status) {
- case PeerPushPaymentIncomingStatus.DialogProposed:
+ case PeerPushCreditStatus.DialogProposed:
return {
major: TransactionMajorState.Dialog,
minor: TransactionMinorState.Proposed,
};
- case PeerPushPaymentIncomingStatus.PendingMerge:
+ case PeerPushCreditStatus.PendingMerge:
return {
major: TransactionMajorState.Pending,
minor: TransactionMinorState.Merge,
};
- case PeerPushPaymentIncomingStatus.Done:
+ case PeerPushCreditStatus.Done:
return {
major: TransactionMajorState.Done,
};
- case PeerPushPaymentIncomingStatus.PendingMergeKycRequired:
+ case PeerPushCreditStatus.PendingMergeKycRequired:
return {
major: TransactionMajorState.Pending,
minor: TransactionMinorState.KycRequired,
};
- case PeerPushPaymentIncomingStatus.PendingWithdrawing:
+ case PeerPushCreditStatus.PendingWithdrawing:
return {
major: TransactionMajorState.Pending,
minor: TransactionMinorState.Withdraw,
};
- case PeerPushPaymentIncomingStatus.SuspendedMerge:
+ case PeerPushCreditStatus.SuspendedMerge:
return {
major: TransactionMajorState.Suspended,
minor: TransactionMinorState.Merge,
};
- case PeerPushPaymentIncomingStatus.SuspendedMergeKycRequired:
+ case PeerPushCreditStatus.SuspendedMergeKycRequired:
return {
major: TransactionMajorState.Suspended,
minor: TransactionMinorState.MergeKycRequired,
};
- case PeerPushPaymentIncomingStatus.SuspendedWithdrawing:
+ case PeerPushCreditStatus.SuspendedWithdrawing:
return {
major: TransactionMajorState.Suspended,
minor: TransactionMinorState.Withdraw,
};
- case PeerPushPaymentIncomingStatus.Aborted:
+ case PeerPushCreditStatus.Aborted:
return {
major: TransactionMajorState.Aborted,
};
- case PeerPushPaymentIncomingStatus.Failed:
+ case PeerPushCreditStatus.Failed:
return {
major: TransactionMajorState.Failed,
};
@@ -929,25 +927,25 @@ export function computePeerPushCreditTransactionActions(
pushCreditRecord: PeerPushPaymentIncomingRecord,
): TransactionAction[] {
switch (pushCreditRecord.status) {
- case PeerPushPaymentIncomingStatus.DialogProposed:
+ case PeerPushCreditStatus.DialogProposed:
return [TransactionAction.Delete];
- case PeerPushPaymentIncomingStatus.PendingMerge:
+ case PeerPushCreditStatus.PendingMerge:
return [TransactionAction.Abort, TransactionAction.Suspend];
- case PeerPushPaymentIncomingStatus.Done:
+ case PeerPushCreditStatus.Done:
return [TransactionAction.Delete];
- case PeerPushPaymentIncomingStatus.PendingMergeKycRequired:
+ case PeerPushCreditStatus.PendingMergeKycRequired:
return [TransactionAction.Abort, TransactionAction.Suspend];
- case PeerPushPaymentIncomingStatus.PendingWithdrawing:
+ case PeerPushCreditStatus.PendingWithdrawing:
return [TransactionAction.Suspend, TransactionAction.Fail];
- case PeerPushPaymentIncomingStatus.SuspendedMerge:
+ case PeerPushCreditStatus.SuspendedMerge:
return [TransactionAction.Resume, TransactionAction.Abort];
- case PeerPushPaymentIncomingStatus.SuspendedMergeKycRequired:
+ case PeerPushCreditStatus.SuspendedMergeKycRequired:
return [TransactionAction.Resume, TransactionAction.Abort];
- case PeerPushPaymentIncomingStatus.SuspendedWithdrawing:
+ case PeerPushCreditStatus.SuspendedWithdrawing:
return [TransactionAction.Resume, TransactionAction.Fail];
- case PeerPushPaymentIncomingStatus.Aborted:
+ case PeerPushCreditStatus.Aborted:
return [TransactionAction.Delete];
- case PeerPushPaymentIncomingStatus.Failed:
+ case PeerPushCreditStatus.Failed:
return [TransactionAction.Delete];
default:
assertUnreachable(pushCreditRecord.status);
diff --git a/packages/taler-wallet-core/src/operations/pay-peer-push-debit.ts b/packages/taler-wallet-core/src/operations/pay-peer-push-debit.ts
index 2349e5c4a..e80ffc059 100644
--- a/packages/taler-wallet-core/src/operations/pay-peer-push-debit.ts
+++ b/packages/taler-wallet-core/src/operations/pay-peer-push-debit.ts
@@ -51,8 +51,8 @@ import {
} from "@gnu-taler/taler-util/http";
import { EncryptContractRequest } from "../crypto/cryptoTypes.js";
import {
- PeerPushPaymentInitiationRecord,
- PeerPushPaymentInitiationStatus,
+ PeerPushDebitRecord,
+ PeerPushDebitStatus,
RefreshOperationStatus,
createRefreshGroup,
} from "../index.js";
@@ -107,7 +107,7 @@ export async function checkPeerPushDebit(
async function handlePurseCreationConflict(
ws: InternalWalletState,
- peerPushInitiation: PeerPushPaymentInitiationRecord,
+ peerPushInitiation: PeerPushDebitRecord,
resp: HttpResponse,
): Promise<TaskRunResult> {
const pursePub = peerPushInitiation.pursePub;
@@ -152,17 +152,15 @@ async function handlePurseCreationConflict(
}
await ws.db
- .mktx((x) => [x.peerPushPaymentInitiations])
+ .mktx((x) => [x.peerPushDebit])
.runReadWrite(async (tx) => {
- const myPpi = await tx.peerPushPaymentInitiations.get(
- peerPushInitiation.pursePub,
- );
+ const myPpi = await tx.peerPushDebit.get(peerPushInitiation.pursePub);
if (!myPpi) {
return;
}
switch (myPpi.status) {
- case PeerPushPaymentInitiationStatus.PendingCreatePurse:
- case PeerPushPaymentInitiationStatus.SuspendedCreatePurse: {
+ case PeerPushDebitStatus.PendingCreatePurse:
+ case PeerPushDebitStatus.SuspendedCreatePurse: {
const sel = coinSelRes.result;
myPpi.coinSel = {
coinPubs: sel.coins.map((x) => x.coinPub),
@@ -173,19 +171,36 @@ async function handlePurseCreationConflict(
default:
return;
}
- await tx.peerPushPaymentInitiations.put(myPpi);
+ await tx.peerPushDebit.put(myPpi);
});
return TaskRunResult.finished();
}
async function processPeerPushDebitCreateReserve(
ws: InternalWalletState,
- peerPushInitiation: PeerPushPaymentInitiationRecord,
+ peerPushInitiation: PeerPushDebitRecord,
): Promise<TaskRunResult> {
- logger.info("processing peer-push-debit pending(create-reserve)");
const pursePub = peerPushInitiation.pursePub;
const purseExpiration = peerPushInitiation.purseExpiration;
const hContractTerms = peerPushInitiation.contractTermsHash;
+ const transactionId = constructTransactionIdentifier({
+ tag: TransactionType.PeerPushDebit,
+ pursePub: pursePub,
+ });
+
+ logger.trace(`processing ${transactionId} pending(create-reserve)`);
+
+ const contractTermsRecord = await ws.db
+ .mktx((x) => [x.contractTerms])
+ .runReadOnly(async (tx) => {
+ return tx.contractTerms.get(hContractTerms);
+ });
+
+ if (!contractTermsRecord) {
+ throw Error(
+ `db invariant failed, contract terms for ${transactionId} missing`,
+ );
+ }
const purseSigResp = await ws.cryptoApi.signPurseCreation({
hContractTerms,
@@ -208,7 +223,7 @@ async function processPeerPushDebitCreateReserve(
});
const encryptContractRequest: EncryptContractRequest = {
- contractTerms: peerPushInitiation.contractTerms,
+ contractTerms: contractTermsRecord.contractTermsRaw,
mergePriv: peerPushInitiation.mergePriv,
pursePriv: peerPushInitiation.pursePriv,
pursePub: peerPushInitiation.pursePub,
@@ -284,8 +299,8 @@ async function processPeerPushDebitCreateReserve(
}
await transitionPeerPushDebitTransaction(ws, pursePub, {
- stFrom: PeerPushPaymentInitiationStatus.PendingCreatePurse,
- stTo: PeerPushPaymentInitiationStatus.PendingReady,
+ stFrom: PeerPushDebitStatus.PendingCreatePurse,
+ stTo: PeerPushDebitStatus.PendingReady,
});
return TaskRunResult.finished();
@@ -293,7 +308,7 @@ async function processPeerPushDebitCreateReserve(
async function processPeerPushDebitAbortingDeletePurse(
ws: InternalWalletState,
- peerPushInitiation: PeerPushPaymentInitiationRecord,
+ peerPushInitiation: PeerPushDebitRecord,
): Promise<TaskRunResult> {
const { pursePub, pursePriv } = peerPushInitiation;
const transactionId = constructTransactionIdentifier({
@@ -318,20 +333,18 @@ async function processPeerPushDebitAbortingDeletePurse(
const transitionInfo = await ws.db
.mktx((x) => [
- x.peerPushPaymentInitiations,
+ x.peerPushDebit,
x.refreshGroups,
x.denominations,
x.coinAvailability,
x.coins,
])
.runReadWrite(async (tx) => {
- const ppiRec = await tx.peerPushPaymentInitiations.get(pursePub);
+ const ppiRec = await tx.peerPushDebit.get(pursePub);
if (!ppiRec) {
return undefined;
}
- if (
- ppiRec.status !== PeerPushPaymentInitiationStatus.AbortingDeletePurse
- ) {
+ if (ppiRec.status !== PeerPushDebitStatus.AbortingDeletePurse) {
return undefined;
}
const currency = Amounts.currencyOf(ppiRec.amount);
@@ -352,9 +365,9 @@ async function processPeerPushDebitAbortingDeletePurse(
coinPubs,
RefreshReason.AbortPeerPushDebit,
);
- ppiRec.status = PeerPushPaymentInitiationStatus.AbortingRefresh;
+ ppiRec.status = PeerPushDebitStatus.AbortingRefresh;
ppiRec.abortRefreshGroupId = refresh.refreshGroupId;
- await tx.peerPushPaymentInitiations.put(ppiRec);
+ await tx.peerPushDebit.put(ppiRec);
const newTxState = computePeerPushDebitTransactionState(ppiRec);
return {
oldTxState,
@@ -367,8 +380,8 @@ async function processPeerPushDebitAbortingDeletePurse(
}
interface SimpleTransition {
- stFrom: PeerPushPaymentInitiationStatus;
- stTo: PeerPushPaymentInitiationStatus;
+ stFrom: PeerPushDebitStatus;
+ stTo: PeerPushDebitStatus;
}
async function transitionPeerPushDebitTransaction(
@@ -381,9 +394,9 @@ async function transitionPeerPushDebitTransaction(
pursePub,
});
const transitionInfo = await ws.db
- .mktx((x) => [x.peerPushPaymentInitiations])
+ .mktx((x) => [x.peerPushDebit])
.runReadWrite(async (tx) => {
- const ppiRec = await tx.peerPushPaymentInitiations.get(pursePub);
+ const ppiRec = await tx.peerPushDebit.get(pursePub);
if (!ppiRec) {
return undefined;
}
@@ -392,7 +405,7 @@ async function transitionPeerPushDebitTransaction(
}
const oldTxState = computePeerPushDebitTransactionState(ppiRec);
ppiRec.status = transitionSpec.stTo;
- await tx.peerPushPaymentInitiations.put(ppiRec);
+ await tx.peerPushDebit.put(ppiRec);
const newTxState = computePeerPushDebitTransactionState(ppiRec);
return {
oldTxState,
@@ -404,7 +417,7 @@ async function transitionPeerPushDebitTransaction(
async function processPeerPushDebitAbortingRefresh(
ws: InternalWalletState,
- peerPushInitiation: PeerPushPaymentInitiationRecord,
+ peerPushInitiation: PeerPushDebitRecord,
): Promise<TaskRunResult> {
const pursePub = peerPushInitiation.pursePub;
const abortRefreshGroupId = peerPushInitiation.abortRefreshGroupId;
@@ -414,33 +427,33 @@ async function processPeerPushDebitAbortingRefresh(
pursePub: peerPushInitiation.pursePub,
});
const transitionInfo = await ws.db
- .mktx((x) => [x.refreshGroups, x.peerPushPaymentInitiations])
+ .mktx((x) => [x.refreshGroups, x.peerPushDebit])
.runReadWrite(async (tx) => {
const refreshGroup = await tx.refreshGroups.get(abortRefreshGroupId);
- let newOpState: PeerPushPaymentInitiationStatus | undefined;
+ let newOpState: PeerPushDebitStatus | undefined;
if (!refreshGroup) {
// Maybe it got manually deleted? Means that we should
// just go into failed.
logger.warn("no aborting refresh group found for deposit group");
- newOpState = PeerPushPaymentInitiationStatus.Failed;
+ newOpState = PeerPushDebitStatus.Failed;
} else {
if (refreshGroup.operationStatus === RefreshOperationStatus.Finished) {
- newOpState = PeerPushPaymentInitiationStatus.Aborted;
+ newOpState = PeerPushDebitStatus.Aborted;
} else if (
refreshGroup.operationStatus === RefreshOperationStatus.Failed
) {
- newOpState = PeerPushPaymentInitiationStatus.Failed;
+ newOpState = PeerPushDebitStatus.Failed;
}
}
if (newOpState) {
- const newDg = await tx.peerPushPaymentInitiations.get(pursePub);
+ const newDg = await tx.peerPushDebit.get(pursePub);
if (!newDg) {
return;
}
const oldTxState = computePeerPushDebitTransactionState(newDg);
newDg.status = newOpState;
const newTxState = computePeerPushDebitTransactionState(newDg);
- await tx.peerPushPaymentInitiations.put(newDg);
+ await tx.peerPushDebit.put(newDg);
return { oldTxState, newTxState };
}
return undefined;
@@ -455,7 +468,7 @@ async function processPeerPushDebitAbortingRefresh(
*/
async function processPeerPushDebitReady(
ws: InternalWalletState,
- peerPushInitiation: PeerPushPaymentInitiationRecord,
+ peerPushInitiation: PeerPushDebitRecord,
): Promise<TaskRunResult> {
logger.info("processing peer-push-debit pending(ready)");
const pursePub = peerPushInitiation.pursePub;
@@ -488,8 +501,8 @@ async function processPeerPushDebitReady(
ws,
peerPushInitiation.pursePub,
{
- stFrom: PeerPushPaymentInitiationStatus.PendingReady,
- stTo: PeerPushPaymentInitiationStatus.Done,
+ stFrom: PeerPushDebitStatus.PendingReady,
+ stTo: PeerPushDebitStatus.Done,
},
);
return {
@@ -501,8 +514,8 @@ async function processPeerPushDebitReady(
ws,
peerPushInitiation.pursePub,
{
- stFrom: PeerPushPaymentInitiationStatus.PendingReady,
- stTo: PeerPushPaymentInitiationStatus.Expired,
+ stFrom: PeerPushDebitStatus.PendingReady,
+ stTo: PeerPushDebitStatus.Expired,
},
);
return {
@@ -528,9 +541,9 @@ export async function processPeerPushDebit(
pursePub: string,
): Promise<TaskRunResult> {
const peerPushInitiation = await ws.db
- .mktx((x) => [x.peerPushPaymentInitiations])
+ .mktx((x) => [x.peerPushDebit])
.runReadOnly(async (tx) => {
- return tx.peerPushPaymentInitiations.get(pursePub);
+ return tx.peerPushDebit.get(pursePub);
});
if (!peerPushInitiation) {
throw Error("peer push payment not found");
@@ -550,13 +563,13 @@ export async function processPeerPushDebit(
}
switch (peerPushInitiation.status) {
- case PeerPushPaymentInitiationStatus.PendingCreatePurse:
+ case PeerPushDebitStatus.PendingCreatePurse:
return processPeerPushDebitCreateReserve(ws, peerPushInitiation);
- case PeerPushPaymentInitiationStatus.PendingReady:
+ case PeerPushDebitStatus.PendingReady:
return processPeerPushDebitReady(ws, peerPushInitiation);
- case PeerPushPaymentInitiationStatus.AbortingDeletePurse:
+ case PeerPushDebitStatus.AbortingDeletePurse:
return processPeerPushDebitAbortingDeletePurse(ws, peerPushInitiation);
- case PeerPushPaymentInitiationStatus.AbortingRefresh:
+ case PeerPushDebitStatus.AbortingRefresh:
return processPeerPushDebitAbortingRefresh(ws, peerPushInitiation);
default: {
const txState = computePeerPushDebitTransactionState(peerPushInitiation);
@@ -626,7 +639,7 @@ export async function initiatePeerPushDebit(
x.coinAvailability,
x.denominations,
x.refreshGroups,
- x.peerPushPaymentInitiations,
+ x.peerPushDebit,
])
.runReadWrite(async (tx) => {
// FIXME: Instead of directly doing a spendCoin here,
@@ -645,7 +658,7 @@ export async function initiatePeerPushDebit(
refreshReason: RefreshReason.PayPeerPush,
});
- const ppi: PeerPushPaymentInitiationRecord = {
+ const ppi: PeerPushDebitRecord = {
amount: Amounts.stringify(instructedAmount),
contractPriv: contractKeyPair.priv,
contractPub: contractKeyPair.pub,
@@ -657,8 +670,7 @@ export async function initiatePeerPushDebit(
pursePriv: pursePair.priv,
pursePub: pursePair.pub,
timestampCreated: TalerPreciseTimestamp.now(),
- status: PeerPushPaymentInitiationStatus.PendingCreatePurse,
- contractTerms: contractTerms,
+ status: PeerPushDebitStatus.PendingCreatePurse,
contractEncNonce,
coinSel: {
coinPubs: sel.coins.map((x) => x.coinPub),
@@ -667,7 +679,7 @@ export async function initiatePeerPushDebit(
totalCost: Amounts.stringify(totalAmount),
};
- await tx.peerPushPaymentInitiations.add(ppi);
+ await tx.peerPushDebit.add(ppi);
await tx.contractTerms.put({
h: hContractTerms,
@@ -701,32 +713,32 @@ export async function initiatePeerPushDebit(
}
export function computePeerPushDebitTransactionActions(
- ppiRecord: PeerPushPaymentInitiationRecord,
+ ppiRecord: PeerPushDebitRecord,
): TransactionAction[] {
switch (ppiRecord.status) {
- case PeerPushPaymentInitiationStatus.PendingCreatePurse:
+ case PeerPushDebitStatus.PendingCreatePurse:
return [TransactionAction.Abort, TransactionAction.Suspend];
- case PeerPushPaymentInitiationStatus.PendingReady:
+ case PeerPushDebitStatus.PendingReady:
return [TransactionAction.Abort, TransactionAction.Suspend];
- case PeerPushPaymentInitiationStatus.Aborted:
+ case PeerPushDebitStatus.Aborted:
return [TransactionAction.Delete];
- case PeerPushPaymentInitiationStatus.AbortingDeletePurse:
+ case PeerPushDebitStatus.AbortingDeletePurse:
return [TransactionAction.Suspend, TransactionAction.Fail];
- case PeerPushPaymentInitiationStatus.AbortingRefresh:
+ case PeerPushDebitStatus.AbortingRefresh:
return [TransactionAction.Suspend, TransactionAction.Fail];
- case PeerPushPaymentInitiationStatus.SuspendedAbortingDeletePurse:
+ case PeerPushDebitStatus.SuspendedAbortingDeletePurse:
return [TransactionAction.Resume, TransactionAction.Fail];
- case PeerPushPaymentInitiationStatus.SuspendedAbortingRefresh:
+ case PeerPushDebitStatus.SuspendedAbortingRefresh:
return [TransactionAction.Resume, TransactionAction.Fail];
- case PeerPushPaymentInitiationStatus.SuspendedCreatePurse:
+ case PeerPushDebitStatus.SuspendedCreatePurse:
return [TransactionAction.Resume, TransactionAction.Abort];
- case PeerPushPaymentInitiationStatus.SuspendedReady:
+ case PeerPushDebitStatus.SuspendedReady:
return [TransactionAction.Suspend, TransactionAction.Abort];
- case PeerPushPaymentInitiationStatus.Done:
+ case PeerPushDebitStatus.Done:
return [TransactionAction.Delete];
- case PeerPushPaymentInitiationStatus.Expired:
+ case PeerPushDebitStatus.Expired:
return [TransactionAction.Delete];
- case PeerPushPaymentInitiationStatus.Failed:
+ case PeerPushDebitStatus.Failed:
return [TransactionAction.Delete];
}
}
@@ -745,32 +757,32 @@ export async function abortPeerPushDebitTransaction(
});
stopLongpolling(ws, taskId);
const transitionInfo = await ws.db
- .mktx((x) => [x.peerPushPaymentInitiations])
+ .mktx((x) => [x.peerPushDebit])
.runReadWrite(async (tx) => {
- const pushDebitRec = await tx.peerPushPaymentInitiations.get(pursePub);
+ const pushDebitRec = await tx.peerPushDebit.get(pursePub);
if (!pushDebitRec) {
logger.warn(`peer push debit ${pursePub} not found`);
return;
}
- let newStatus: PeerPushPaymentInitiationStatus | undefined = undefined;
+ let newStatus: PeerPushDebitStatus | undefined = undefined;
switch (pushDebitRec.status) {
- case PeerPushPaymentInitiationStatus.PendingReady:
- case PeerPushPaymentInitiationStatus.SuspendedReady:
- newStatus = PeerPushPaymentInitiationStatus.AbortingDeletePurse;
+ case PeerPushDebitStatus.PendingReady:
+ case PeerPushDebitStatus.SuspendedReady:
+ newStatus = PeerPushDebitStatus.AbortingDeletePurse;
break;
- case PeerPushPaymentInitiationStatus.SuspendedCreatePurse:
- case PeerPushPaymentInitiationStatus.PendingCreatePurse:
+ case PeerPushDebitStatus.SuspendedCreatePurse:
+ case PeerPushDebitStatus.PendingCreatePurse:
// Network request might already be in-flight!
- newStatus = PeerPushPaymentInitiationStatus.AbortingDeletePurse;
+ newStatus = PeerPushDebitStatus.AbortingDeletePurse;
break;
- case PeerPushPaymentInitiationStatus.SuspendedAbortingRefresh:
- case PeerPushPaymentInitiationStatus.SuspendedAbortingDeletePurse:
- case PeerPushPaymentInitiationStatus.AbortingRefresh:
- case PeerPushPaymentInitiationStatus.Done:
- case PeerPushPaymentInitiationStatus.AbortingDeletePurse:
- case PeerPushPaymentInitiationStatus.Aborted:
- case PeerPushPaymentInitiationStatus.Expired:
- case PeerPushPaymentInitiationStatus.Failed:
+ case PeerPushDebitStatus.SuspendedAbortingRefresh:
+ case PeerPushDebitStatus.SuspendedAbortingDeletePurse:
+ case PeerPushDebitStatus.AbortingRefresh:
+ case PeerPushDebitStatus.Done:
+ case PeerPushDebitStatus.AbortingDeletePurse:
+ case PeerPushDebitStatus.Aborted:
+ case PeerPushDebitStatus.Expired:
+ case PeerPushDebitStatus.Failed:
// Do nothing
break;
default:
@@ -780,7 +792,7 @@ export async function abortPeerPushDebitTransaction(
const oldTxState = computePeerPushDebitTransactionState(pushDebitRec);
pushDebitRec.status = newStatus;
const newTxState = computePeerPushDebitTransactionState(pushDebitRec);
- await tx.peerPushPaymentInitiations.put(pushDebitRec);
+ await tx.peerPushDebit.put(pushDebitRec);
return {
oldTxState,
newTxState,
@@ -805,32 +817,32 @@ export async function failPeerPushDebitTransaction(
});
stopLongpolling(ws, taskId);
const transitionInfo = await ws.db
- .mktx((x) => [x.peerPushPaymentInitiations])
+ .mktx((x) => [x.peerPushDebit])
.runReadWrite(async (tx) => {
- const pushDebitRec = await tx.peerPushPaymentInitiations.get(pursePub);
+ const pushDebitRec = await tx.peerPushDebit.get(pursePub);
if (!pushDebitRec) {
logger.warn(`peer push debit ${pursePub} not found`);
return;
}
- let newStatus: PeerPushPaymentInitiationStatus | undefined = undefined;
+ let newStatus: PeerPushDebitStatus | undefined = undefined;
switch (pushDebitRec.status) {
- case PeerPushPaymentInitiationStatus.AbortingRefresh:
- case PeerPushPaymentInitiationStatus.SuspendedAbortingRefresh:
+ case PeerPushDebitStatus.AbortingRefresh:
+ case PeerPushDebitStatus.SuspendedAbortingRefresh:
// FIXME: What to do about the refresh group?
- newStatus = PeerPushPaymentInitiationStatus.Failed;
+ newStatus = PeerPushDebitStatus.Failed;
break;
- case PeerPushPaymentInitiationStatus.AbortingDeletePurse:
- case PeerPushPaymentInitiationStatus.SuspendedAbortingDeletePurse:
- case PeerPushPaymentInitiationStatus.PendingReady:
- case PeerPushPaymentInitiationStatus.SuspendedReady:
- case PeerPushPaymentInitiationStatus.SuspendedCreatePurse:
- case PeerPushPaymentInitiationStatus.PendingCreatePurse:
- newStatus = PeerPushPaymentInitiationStatus.Failed;
+ case PeerPushDebitStatus.AbortingDeletePurse:
+ case PeerPushDebitStatus.SuspendedAbortingDeletePurse:
+ case PeerPushDebitStatus.PendingReady:
+ case PeerPushDebitStatus.SuspendedReady:
+ case PeerPushDebitStatus.SuspendedCreatePurse:
+ case PeerPushDebitStatus.PendingCreatePurse:
+ newStatus = PeerPushDebitStatus.Failed;
break;
- case PeerPushPaymentInitiationStatus.Done:
- case PeerPushPaymentInitiationStatus.Aborted:
- case PeerPushPaymentInitiationStatus.Failed:
- case PeerPushPaymentInitiationStatus.Expired:
+ case PeerPushDebitStatus.Done:
+ case PeerPushDebitStatus.Aborted:
+ case PeerPushDebitStatus.Failed:
+ case PeerPushDebitStatus.Expired:
// Do nothing
break;
default:
@@ -840,7 +852,7 @@ export async function failPeerPushDebitTransaction(
const oldTxState = computePeerPushDebitTransactionState(pushDebitRec);
pushDebitRec.status = newStatus;
const newTxState = computePeerPushDebitTransactionState(pushDebitRec);
- await tx.peerPushPaymentInitiations.put(pushDebitRec);
+ await tx.peerPushDebit.put(pushDebitRec);
return {
oldTxState,
newTxState,
@@ -865,36 +877,35 @@ export async function suspendPeerPushDebitTransaction(
});
stopLongpolling(ws, taskId);
const transitionInfo = await ws.db
- .mktx((x) => [x.peerPushPaymentInitiations])
+ .mktx((x) => [x.peerPushDebit])
.runReadWrite(async (tx) => {
- const pushDebitRec = await tx.peerPushPaymentInitiations.get(pursePub);
+ const pushDebitRec = await tx.peerPushDebit.get(pursePub);
if (!pushDebitRec) {
logger.warn(`peer push debit ${pursePub} not found`);
return;
}
- let newStatus: PeerPushPaymentInitiationStatus | undefined = undefined;
+ let newStatus: PeerPushDebitStatus | undefined = undefined;
switch (pushDebitRec.status) {
- case PeerPushPaymentInitiationStatus.PendingCreatePurse:
- newStatus = PeerPushPaymentInitiationStatus.SuspendedCreatePurse;
+ case PeerPushDebitStatus.PendingCreatePurse:
+ newStatus = PeerPushDebitStatus.SuspendedCreatePurse;
break;
- case PeerPushPaymentInitiationStatus.AbortingRefresh:
- newStatus = PeerPushPaymentInitiationStatus.SuspendedAbortingRefresh;
+ case PeerPushDebitStatus.AbortingRefresh:
+ newStatus = PeerPushDebitStatus.SuspendedAbortingRefresh;
break;
- case PeerPushPaymentInitiationStatus.AbortingDeletePurse:
- newStatus =
- PeerPushPaymentInitiationStatus.SuspendedAbortingDeletePurse;
+ case PeerPushDebitStatus.AbortingDeletePurse:
+ newStatus = PeerPushDebitStatus.SuspendedAbortingDeletePurse;
break;
- case PeerPushPaymentInitiationStatus.PendingReady:
- newStatus = PeerPushPaymentInitiationStatus.SuspendedReady;
+ case PeerPushDebitStatus.PendingReady:
+ newStatus = PeerPushDebitStatus.SuspendedReady;
break;
- case PeerPushPaymentInitiationStatus.SuspendedAbortingDeletePurse:
- case PeerPushPaymentInitiationStatus.SuspendedAbortingRefresh:
- case PeerPushPaymentInitiationStatus.SuspendedReady:
- case PeerPushPaymentInitiationStatus.SuspendedCreatePurse:
- case PeerPushPaymentInitiationStatus.Done:
- case PeerPushPaymentInitiationStatus.Aborted:
- case PeerPushPaymentInitiationStatus.Failed:
- case PeerPushPaymentInitiationStatus.Expired:
+ case PeerPushDebitStatus.SuspendedAbortingDeletePurse:
+ case PeerPushDebitStatus.SuspendedAbortingRefresh:
+ case PeerPushDebitStatus.SuspendedReady:
+ case PeerPushDebitStatus.SuspendedCreatePurse:
+ case PeerPushDebitStatus.Done:
+ case PeerPushDebitStatus.Aborted:
+ case PeerPushDebitStatus.Failed:
+ case PeerPushDebitStatus.Expired:
// Do nothing
break;
default:
@@ -904,7 +915,7 @@ export async function suspendPeerPushDebitTransaction(
const oldTxState = computePeerPushDebitTransactionState(pushDebitRec);
pushDebitRec.status = newStatus;
const newTxState = computePeerPushDebitTransactionState(pushDebitRec);
- await tx.peerPushPaymentInitiations.put(pushDebitRec);
+ await tx.peerPushDebit.put(pushDebitRec);
return {
oldTxState,
newTxState,
@@ -929,35 +940,35 @@ export async function resumePeerPushDebitTransaction(
});
stopLongpolling(ws, taskId);
const transitionInfo = await ws.db
- .mktx((x) => [x.peerPushPaymentInitiations])
+ .mktx((x) => [x.peerPushDebit])
.runReadWrite(async (tx) => {
- const pushDebitRec = await tx.peerPushPaymentInitiations.get(pursePub);
+ const pushDebitRec = await tx.peerPushDebit.get(pursePub);
if (!pushDebitRec) {
logger.warn(`peer push debit ${pursePub} not found`);
return;
}
- let newStatus: PeerPushPaymentInitiationStatus | undefined = undefined;
+ let newStatus: PeerPushDebitStatus | undefined = undefined;
switch (pushDebitRec.status) {
- case PeerPushPaymentInitiationStatus.SuspendedAbortingDeletePurse:
- newStatus = PeerPushPaymentInitiationStatus.AbortingDeletePurse;
+ case PeerPushDebitStatus.SuspendedAbortingDeletePurse:
+ newStatus = PeerPushDebitStatus.AbortingDeletePurse;
break;
- case PeerPushPaymentInitiationStatus.SuspendedAbortingRefresh:
- newStatus = PeerPushPaymentInitiationStatus.AbortingRefresh;
+ case PeerPushDebitStatus.SuspendedAbortingRefresh:
+ newStatus = PeerPushDebitStatus.AbortingRefresh;
break;
- case PeerPushPaymentInitiationStatus.SuspendedReady:
- newStatus = PeerPushPaymentInitiationStatus.PendingReady;
+ case PeerPushDebitStatus.SuspendedReady:
+ newStatus = PeerPushDebitStatus.PendingReady;
break;
- case PeerPushPaymentInitiationStatus.SuspendedCreatePurse:
- newStatus = PeerPushPaymentInitiationStatus.PendingCreatePurse;
+ case PeerPushDebitStatus.SuspendedCreatePurse:
+ newStatus = PeerPushDebitStatus.PendingCreatePurse;
break;
- case PeerPushPaymentInitiationStatus.PendingCreatePurse:
- case PeerPushPaymentInitiationStatus.AbortingRefresh:
- case PeerPushPaymentInitiationStatus.AbortingDeletePurse:
- case PeerPushPaymentInitiationStatus.PendingReady:
- case PeerPushPaymentInitiationStatus.Done:
- case PeerPushPaymentInitiationStatus.Aborted:
- case PeerPushPaymentInitiationStatus.Failed:
- case PeerPushPaymentInitiationStatus.Expired:
+ case PeerPushDebitStatus.PendingCreatePurse:
+ case PeerPushDebitStatus.AbortingRefresh:
+ case PeerPushDebitStatus.AbortingDeletePurse:
+ case PeerPushDebitStatus.PendingReady:
+ case PeerPushDebitStatus.Done:
+ case PeerPushDebitStatus.Aborted:
+ case PeerPushDebitStatus.Failed:
+ case PeerPushDebitStatus.Expired:
// Do nothing
break;
default:
@@ -967,7 +978,7 @@ export async function resumePeerPushDebitTransaction(
const oldTxState = computePeerPushDebitTransactionState(pushDebitRec);
pushDebitRec.status = newStatus;
const newTxState = computePeerPushDebitTransactionState(pushDebitRec);
- await tx.peerPushPaymentInitiations.put(pushDebitRec);
+ await tx.peerPushDebit.put(pushDebitRec);
return {
oldTxState,
newTxState,
@@ -980,62 +991,62 @@ export async function resumePeerPushDebitTransaction(
}
export function computePeerPushDebitTransactionState(
- ppiRecord: PeerPushPaymentInitiationRecord,
+ ppiRecord: PeerPushDebitRecord,
): TransactionState {
switch (ppiRecord.status) {
- case PeerPushPaymentInitiationStatus.PendingCreatePurse:
+ case PeerPushDebitStatus.PendingCreatePurse:
return {
major: TransactionMajorState.Pending,
minor: TransactionMinorState.CreatePurse,
};
- case PeerPushPaymentInitiationStatus.PendingReady:
+ case PeerPushDebitStatus.PendingReady:
return {
major: TransactionMajorState.Pending,
minor: TransactionMinorState.Ready,
};
- case PeerPushPaymentInitiationStatus.Aborted:
+ case PeerPushDebitStatus.Aborted:
return {
major: TransactionMajorState.Aborted,
};
- case PeerPushPaymentInitiationStatus.AbortingDeletePurse:
+ case PeerPushDebitStatus.AbortingDeletePurse:
return {
major: TransactionMajorState.Aborting,
minor: TransactionMinorState.DeletePurse,
};
- case PeerPushPaymentInitiationStatus.AbortingRefresh:
+ case PeerPushDebitStatus.AbortingRefresh:
return {
major: TransactionMajorState.Aborting,
minor: TransactionMinorState.Refresh,
};
- case PeerPushPaymentInitiationStatus.SuspendedAbortingDeletePurse:
+ case PeerPushDebitStatus.SuspendedAbortingDeletePurse:
return {
major: TransactionMajorState.SuspendedAborting,
minor: TransactionMinorState.DeletePurse,
};
- case PeerPushPaymentInitiationStatus.SuspendedAbortingRefresh:
+ case PeerPushDebitStatus.SuspendedAbortingRefresh:
return {
major: TransactionMajorState.SuspendedAborting,
minor: TransactionMinorState.Refresh,
};
- case PeerPushPaymentInitiationStatus.SuspendedCreatePurse:
+ case PeerPushDebitStatus.SuspendedCreatePurse:
return {
major: TransactionMajorState.Suspended,
minor: TransactionMinorState.CreatePurse,
};
- case PeerPushPaymentInitiationStatus.SuspendedReady:
+ case PeerPushDebitStatus.SuspendedReady:
return {
major: TransactionMajorState.Suspended,
minor: TransactionMinorState.Ready,
};
- case PeerPushPaymentInitiationStatus.Done:
+ case PeerPushDebitStatus.Done:
return {
major: TransactionMajorState.Done,
};
- case PeerPushPaymentInitiationStatus.Failed:
+ case PeerPushDebitStatus.Failed:
return {
major: TransactionMajorState.Failed,
};
- case PeerPushPaymentInitiationStatus.Expired:
+ case PeerPushDebitStatus.Expired:
return {
major: TransactionMajorState.Expired,
};
diff --git a/packages/taler-wallet-core/src/operations/pending.ts b/packages/taler-wallet-core/src/operations/pending.ts
index e37e45c16..6115f848b 100644
--- a/packages/taler-wallet-core/src/operations/pending.ts
+++ b/packages/taler-wallet-core/src/operations/pending.ts
@@ -26,11 +26,10 @@ import {
WalletStoresV1,
BackupProviderStateTag,
RefreshCoinStatus,
- OperationStatusRange,
- PeerPushPaymentInitiationStatus,
+ PeerPushDebitStatus,
PeerPullDebitRecordStatus,
- PeerPushPaymentIncomingStatus,
- PeerPullPaymentInitiationStatus,
+ PeerPushCreditStatus,
+ PeerPullPaymentCreditStatus,
WithdrawalGroupStatus,
RewardRecordStatus,
DepositOperationStatus,
@@ -39,13 +38,15 @@ import {
DepositGroupRecord,
RewardRecord,
PurchaseRecord,
- PeerPullPaymentInitiationRecord,
+ PeerPullCreditRecord,
PeerPullPaymentIncomingRecord,
- PeerPushPaymentInitiationRecord,
+ PeerPushDebitRecord,
PeerPushPaymentIncomingRecord,
RefundGroupRecord,
RefundGroupStatus,
ExchangeEntryDbUpdateStatus,
+ RefreshOperationStatus,
+ DepositElementStatus,
} from "../db.js";
import {
PendingOperationsResponse,
@@ -136,8 +137,8 @@ export async function iterRecordsForRefresh(
let refreshGroups: RefreshGroupRecord[];
if (filter.onlyState === "nonfinal") {
const keyRange = GlobalIDB.KeyRange.bound(
- OperationStatusRange.ACTIVE_START,
- OperationStatusRange.ACTIVE_END,
+ RefreshOperationStatus.Pending,
+ RefreshOperationStatus.Suspended,
);
refreshGroups = await tx.refreshGroups.indexes.byStatus.getAll(keyRange);
} else {
@@ -277,8 +278,8 @@ async function gatherDepositPending(
): Promise<void> {
await iterRecordsForDeposit(tx, { onlyState: "nonfinal" }, async (dg) => {
let deposited = true;
- for (const d of dg.depositedPerCoin) {
- if (!d) {
+ for (const d of dg.statusPerCoin) {
+ if (d === DepositElementStatus.DepositPending) {
deposited = false;
}
}
@@ -470,28 +471,26 @@ async function gatherBackupPending(
export async function iterRecordsForPeerPullInitiation(
tx: GetReadOnlyAccess<{
- peerPullPaymentInitiations: typeof WalletStoresV1.peerPullPaymentInitiations;
+ peerPullCredit: typeof WalletStoresV1.peerPullCredit;
}>,
filter: TransactionRecordFilter,
- f: (r: PeerPullPaymentInitiationRecord) => Promise<void>,
+ f: (r: PeerPullCreditRecord) => Promise<void>,
): Promise<void> {
if (filter.onlyState === "nonfinal") {
const keyRange = GlobalIDB.KeyRange.bound(
- PeerPullPaymentInitiationStatus.PendingCreatePurse,
- PeerPullPaymentInitiationStatus.AbortingDeletePurse,
+ PeerPullPaymentCreditStatus.PendingCreatePurse,
+ PeerPullPaymentCreditStatus.AbortingDeletePurse,
);
- await tx.peerPullPaymentInitiations.indexes.byStatus
- .iter(keyRange)
- .forEachAsync(f);
+ await tx.peerPullCredit.indexes.byStatus.iter(keyRange).forEachAsync(f);
} else {
- await tx.peerPullPaymentInitiations.indexes.byStatus.iter().forEachAsync(f);
+ await tx.peerPullCredit.indexes.byStatus.iter().forEachAsync(f);
}
}
async function gatherPeerPullInitiationPending(
ws: InternalWalletState,
tx: GetReadOnlyAccess<{
- peerPullPaymentInitiations: typeof WalletStoresV1.peerPullPaymentInitiations;
+ peerPullCredit: typeof WalletStoresV1.peerPullCredit;
operationRetries: typeof WalletStoresV1.operationRetries;
}>,
now: AbsoluteTime,
@@ -518,7 +517,7 @@ async function gatherPeerPullInitiationPending(
export async function iterRecordsForPeerPullDebit(
tx: GetReadOnlyAccess<{
- peerPullPaymentIncoming: typeof WalletStoresV1.peerPullPaymentIncoming;
+ peerPullDebit: typeof WalletStoresV1.peerPullDebit;
}>,
filter: TransactionRecordFilter,
f: (r: PeerPullPaymentIncomingRecord) => Promise<void>,
@@ -528,18 +527,16 @@ export async function iterRecordsForPeerPullDebit(
PeerPullDebitRecordStatus.PendingDeposit,
PeerPullDebitRecordStatus.AbortingRefresh,
);
- await tx.peerPullPaymentIncoming.indexes.byStatus
- .iter(keyRange)
- .forEachAsync(f);
+ await tx.peerPullDebit.indexes.byStatus.iter(keyRange).forEachAsync(f);
} else {
- await tx.peerPullPaymentIncoming.indexes.byStatus.iter().forEachAsync(f);
+ await tx.peerPullDebit.indexes.byStatus.iter().forEachAsync(f);
}
}
async function gatherPeerPullDebitPending(
ws: InternalWalletState,
tx: GetReadOnlyAccess<{
- peerPullPaymentIncoming: typeof WalletStoresV1.peerPullPaymentIncoming;
+ peerPullDebit: typeof WalletStoresV1.peerPullDebit;
operationRetries: typeof WalletStoresV1.operationRetries;
}>,
now: AbsoluteTime,
@@ -558,7 +555,7 @@ async function gatherPeerPullDebitPending(
...getPendingCommon(ws, opId, timestampDue),
givesLifeness: true,
retryInfo: retryRecord?.retryInfo,
- peerPullPaymentIncomingId: pi.peerPullPaymentIncomingId,
+ peerPullDebitId: pi.peerPullDebitId,
});
},
);
@@ -566,28 +563,26 @@ async function gatherPeerPullDebitPending(
export async function iterRecordsForPeerPushInitiation(
tx: GetReadOnlyAccess<{
- peerPushPaymentInitiations: typeof WalletStoresV1.peerPushPaymentInitiations;
+ peerPushDebit: typeof WalletStoresV1.peerPushDebit;
}>,
filter: TransactionRecordFilter,
- f: (r: PeerPushPaymentInitiationRecord) => Promise<void>,
+ f: (r: PeerPushDebitRecord) => Promise<void>,
): Promise<void> {
if (filter.onlyState === "nonfinal") {
const keyRange = GlobalIDB.KeyRange.bound(
- PeerPushPaymentInitiationStatus.PendingCreatePurse,
- PeerPushPaymentInitiationStatus.AbortingRefresh,
+ PeerPushDebitStatus.PendingCreatePurse,
+ PeerPushDebitStatus.AbortingRefresh,
);
- await tx.peerPushPaymentInitiations.indexes.byStatus
- .iter(keyRange)
- .forEachAsync(f);
+ await tx.peerPushDebit.indexes.byStatus.iter(keyRange).forEachAsync(f);
} else {
- await tx.peerPushPaymentInitiations.indexes.byStatus.iter().forEachAsync(f);
+ await tx.peerPushDebit.indexes.byStatus.iter().forEachAsync(f);
}
}
async function gatherPeerPushInitiationPending(
ws: InternalWalletState,
tx: GetReadOnlyAccess<{
- peerPushPaymentInitiations: typeof WalletStoresV1.peerPushPaymentInitiations;
+ peerPushDebit: typeof WalletStoresV1.peerPushDebit;
operationRetries: typeof WalletStoresV1.operationRetries;
}>,
now: AbsoluteTime,
@@ -614,36 +609,34 @@ async function gatherPeerPushInitiationPending(
export async function iterRecordsForPeerPushCredit(
tx: GetReadOnlyAccess<{
- peerPushPaymentIncoming: typeof WalletStoresV1.peerPushPaymentIncoming;
+ peerPushCredit: typeof WalletStoresV1.peerPushCredit;
}>,
filter: TransactionRecordFilter,
f: (r: PeerPushPaymentIncomingRecord) => Promise<void>,
): Promise<void> {
if (filter.onlyState === "nonfinal") {
const keyRange = GlobalIDB.KeyRange.bound(
- PeerPushPaymentIncomingStatus.PendingMerge,
- PeerPushPaymentIncomingStatus.PendingWithdrawing,
+ PeerPushCreditStatus.PendingMerge,
+ PeerPushCreditStatus.PendingWithdrawing,
);
- await tx.peerPushPaymentIncoming.indexes.byStatus
- .iter(keyRange)
- .forEachAsync(f);
+ await tx.peerPushCredit.indexes.byStatus.iter(keyRange).forEachAsync(f);
} else {
- await tx.peerPushPaymentIncoming.indexes.byStatus.iter().forEachAsync(f);
+ await tx.peerPushCredit.indexes.byStatus.iter().forEachAsync(f);
}
}
async function gatherPeerPushCreditPending(
ws: InternalWalletState,
tx: GetReadOnlyAccess<{
- peerPushPaymentIncoming: typeof WalletStoresV1.peerPushPaymentIncoming;
+ peerPushCredit: typeof WalletStoresV1.peerPushCredit;
operationRetries: typeof WalletStoresV1.operationRetries;
}>,
now: AbsoluteTime,
resp: PendingOperationsResponse,
): Promise<void> {
const keyRange = GlobalIDB.KeyRange.bound(
- PeerPushPaymentIncomingStatus.PendingMerge,
- PeerPushPaymentIncomingStatus.PendingWithdrawing,
+ PeerPushCreditStatus.PendingMerge,
+ PeerPushCreditStatus.PendingWithdrawing,
);
await iterRecordsForPeerPushCredit(
tx,
@@ -658,7 +651,7 @@ async function gatherPeerPushCreditPending(
...getPendingCommon(ws, opId, timestampDue),
givesLifeness: true,
retryInfo: retryRecord?.retryInfo,
- peerPushPaymentIncomingId: pi.peerPushPaymentIncomingId,
+ peerPushCreditId: pi.peerPushCreditId,
});
},
);
@@ -682,10 +675,10 @@ export async function getPendingOperations(
x.depositGroups,
x.recoupGroups,
x.operationRetries,
- x.peerPullPaymentInitiations,
- x.peerPushPaymentInitiations,
- x.peerPullPaymentIncoming,
- x.peerPushPaymentIncoming,
+ x.peerPullCredit,
+ x.peerPushDebit,
+ x.peerPullDebit,
+ x.peerPushCredit,
])
.runReadWrite(async (tx) => {
const resp: PendingOperationsResponse = {
diff --git a/packages/taler-wallet-core/src/operations/refresh.ts b/packages/taler-wallet-core/src/operations/refresh.ts
index fb356f0fc..75adbc860 100644
--- a/packages/taler-wallet-core/src/operations/refresh.ts
+++ b/packages/taler-wallet-core/src/operations/refresh.ts
@@ -76,7 +76,11 @@ import {
RefreshReasonDetails,
WalletStoresV1,
} from "../db.js";
-import { isWithdrawableDenom, PendingTaskType } from "../index.js";
+import {
+ isWithdrawableDenom,
+ PendingTaskType,
+ RefreshSessionRecord,
+} from "../index.js";
import {
EXCHANGE_COINS_LOCK,
InternalWalletState,
@@ -130,11 +134,7 @@ export function getTotalRefreshCost(
const resultingAmount = Amounts.add(
Amounts.zeroOfCurrency(withdrawAmount.currency),
...withdrawDenoms.selectedDenoms.map(
- (d) =>
- Amounts.mult(
- DenominationRecord.getValue(denomMap[d.denomPubHash]),
- d.count,
- ).amount,
+ (d) => Amounts.mult(denomMap[d.denomPubHash].value, d.count).amount,
),
).amount;
const totalCost = Amounts.sub(amountLeft, resultingAmount).amount;
@@ -170,18 +170,23 @@ function updateGroupStatus(rg: RefreshGroupRecord): { final: boolean } {
/**
* Create a refresh session for one particular coin inside a refresh group.
+ *
+ * If the session already exists, return the existing one.
+ *
+ * If the session doesn't need to be created (refresh group gone or session already
+ * finished), return undefined.
*/
-async function refreshCreateSession(
+async function provideRefreshSession(
ws: InternalWalletState,
refreshGroupId: string,
coinIndex: number,
-): Promise<void> {
+): Promise<RefreshSessionRecord | undefined> {
logger.trace(
`creating refresh session for coin ${coinIndex} in refresh group ${refreshGroupId}`,
);
const d = await ws.db
- .mktx((x) => [x.refreshGroups, x.coins])
+ .mktx((x) => [x.refreshGroups, x.coins, x.refreshSessions])
.runReadWrite(async (tx) => {
const refreshGroup = await tx.refreshGroups.get(refreshGroupId);
if (!refreshGroup) {
@@ -192,21 +197,24 @@ async function refreshCreateSession(
) {
return;
}
- const existingRefreshSession =
- refreshGroup.refreshSessionPerCoin[coinIndex];
- if (existingRefreshSession) {
- return;
- }
+ const existingRefreshSession = await tx.refreshSessions.get([
+ refreshGroupId,
+ coinIndex,
+ ]);
const oldCoinPub = refreshGroup.oldCoinPubs[coinIndex];
const coin = await tx.coins.get(oldCoinPub);
if (!coin) {
throw Error("Can't refresh, coin not found");
}
- return { refreshGroup, coin };
+ return { refreshGroup, coin, existingRefreshSession };
});
if (!d) {
- return;
+ return undefined;
+ }
+
+ if (d.existingRefreshSession) {
+ return d.existingRefreshSession;
}
const { refreshGroup, coin } = d;
@@ -288,17 +296,23 @@ async function refreshCreateSession(
const sessionSecretSeed = encodeCrock(getRandomBytes(64));
// Store refresh session for this coin in the database.
- await ws.db
- .mktx((x) => [x.refreshGroups, x.coins])
+ const newSession = await ws.db
+ .mktx((x) => [x.refreshGroups, x.coins, x.refreshSessions])
.runReadWrite(async (tx) => {
const rg = await tx.refreshGroups.get(refreshGroupId);
if (!rg) {
return;
}
- if (rg.refreshSessionPerCoin[coinIndex]) {
+ const existingSession = await tx.refreshSessions.get([
+ refreshGroupId,
+ coinIndex,
+ ]);
+ if (existingSession) {
return;
}
- rg.refreshSessionPerCoin[coinIndex] = {
+ const newSession: RefreshSessionRecord = {
+ coinIndex,
+ refreshGroupId,
norevealIndex: undefined,
sessionSecretSeed: sessionSecretSeed,
newDenoms: newCoinDenoms.selectedDenoms.map((x) => ({
@@ -307,11 +321,13 @@ async function refreshCreateSession(
})),
amountRefreshOutput: Amounts.stringify(newCoinDenoms.totalCoinValue),
};
- await tx.refreshGroups.put(rg);
+ await tx.refreshSessions.put(newSession);
+ return newSession;
});
logger.trace(
`created refresh session for coin #${coinIndex} in ${refreshGroupId}`,
);
+ return newSession;
}
function getRefreshRequestTimeout(rg: RefreshGroupRecord): Duration {
@@ -326,13 +342,16 @@ async function refreshMelt(
coinIndex: number,
): Promise<void> {
const d = await ws.db
- .mktx((x) => [x.refreshGroups, x.coins, x.denominations])
+ .mktx((x) => [x.refreshGroups, x.refreshSessions, x.coins, x.denominations])
.runReadWrite(async (tx) => {
const refreshGroup = await tx.refreshGroups.get(refreshGroupId);
if (!refreshGroup) {
return;
}
- const refreshSession = refreshGroup.refreshSessionPerCoin[coinIndex];
+ const refreshSession = await tx.refreshSessions.get([
+ refreshGroupId,
+ coinIndex,
+ ]);
if (!refreshSession) {
return;
}
@@ -442,7 +461,12 @@ async function refreshMelt(
if (resp.status === HttpStatusCode.NotFound) {
const errDetails = await readUnexpectedResponseDetails(resp);
const transitionInfo = await ws.db
- .mktx((x) => [x.refreshGroups, x.coins, x.coinAvailability])
+ .mktx((x) => [
+ x.refreshGroups,
+ x.refreshSessions,
+ x.coins,
+ x.coinAvailability,
+ ])
.runReadWrite(async (tx) => {
const rg = await tx.refreshGroups.get(refreshGroupId);
if (!rg) {
@@ -456,12 +480,22 @@ async function refreshMelt(
}
const oldTxState = computeRefreshTransactionState(rg);
rg.statusPerCoin[coinIndex] = RefreshCoinStatus.Failed;
- rg.lastErrorPerCoin[coinIndex] = errDetails;
+ const refreshSession = await tx.refreshSessions.get([
+ refreshGroupId,
+ coinIndex,
+ ]);
+ if (!refreshSession) {
+ throw Error(
+ "db invariant failed: missing refresh session in database",
+ );
+ }
+ refreshSession.lastError = errDetails;
const updateRes = updateGroupStatus(rg);
if (updateRes.final) {
await makeCoinsVisible(ws, tx, transactionId);
}
await tx.refreshGroups.put(rg);
+ await tx.refreshSessions.put(refreshSession);
const newTxState = computeRefreshTransactionState(rg);
return {
oldTxState,
@@ -493,7 +527,7 @@ async function refreshMelt(
refreshSession.norevealIndex = norevealIndex;
await ws.db
- .mktx((x) => [x.refreshGroups])
+ .mktx((x) => [x.refreshGroups, x.refreshSessions])
.runReadWrite(async (tx) => {
const rg = await tx.refreshGroups.get(refreshGroupId);
if (!rg) {
@@ -502,7 +536,7 @@ async function refreshMelt(
if (rg.timestampFinished) {
return;
}
- const rs = rg.refreshSessionPerCoin[coinIndex];
+ const rs = await tx.refreshSessions.get([refreshGroupId, coinIndex]);
if (!rs) {
return;
}
@@ -510,7 +544,7 @@ async function refreshMelt(
return;
}
rs.norevealIndex = norevealIndex;
- await tx.refreshGroups.put(rg);
+ await tx.refreshSessions.put(rs);
});
}
@@ -581,13 +615,16 @@ async function refreshReveal(
`doing refresh reveal for ${refreshGroupId} (old coin ${coinIndex})`,
);
const d = await ws.db
- .mktx((x) => [x.refreshGroups, x.coins, x.denominations])
+ .mktx((x) => [x.refreshGroups, x.refreshSessions, x.coins, x.denominations])
.runReadOnly(async (tx) => {
const refreshGroup = await tx.refreshGroups.get(refreshGroupId);
if (!refreshGroup) {
return;
}
- const refreshSession = refreshGroup.refreshSessionPerCoin[coinIndex];
+ const refreshSession = await tx.refreshSessions.get([
+ refreshGroupId,
+ coinIndex,
+ ]);
if (!refreshSession) {
return;
}
@@ -755,6 +792,7 @@ async function refreshReveal(
x.denominations,
x.coinAvailability,
x.refreshGroups,
+ x.refreshSessions,
])
.runReadWrite(async (tx) => {
const rg = await tx.refreshGroups.get(refreshGroupId);
@@ -762,7 +800,7 @@ async function refreshReveal(
logger.warn("no refresh session found");
return;
}
- const rs = rg.refreshSessionPerCoin[coinIndex];
+ const rs = await tx.refreshSessions.get([refreshGroupId, coinIndex]);
if (!rs) {
return;
}
@@ -858,10 +896,15 @@ async function processRefreshSession(
logger.trace(
`processing refresh session for coin ${coinIndex} of group ${refreshGroupId}`,
);
- let refreshGroup = await ws.db
- .mktx((x) => [x.refreshGroups])
+ let { refreshGroup, refreshSession } = await ws.db
+ .mktx((x) => [x.refreshGroups, x.refreshSessions])
.runReadOnly(async (tx) => {
- return tx.refreshGroups.get(refreshGroupId);
+ const rg = await tx.refreshGroups.get(refreshGroupId);
+ const rs = await tx.refreshSessions.get([refreshGroupId, coinIndex]);
+ return {
+ refreshGroup: rg,
+ refreshSession: rs,
+ };
});
if (!refreshGroup) {
return;
@@ -869,18 +912,9 @@ async function processRefreshSession(
if (refreshGroup.statusPerCoin[coinIndex] === RefreshCoinStatus.Finished) {
return;
}
- if (!refreshGroup.refreshSessionPerCoin[coinIndex]) {
- await refreshCreateSession(ws, refreshGroupId, coinIndex);
- refreshGroup = await ws.db
- .mktx((x) => [x.refreshGroups])
- .runReadOnly(async (tx) => {
- return tx.refreshGroups.get(refreshGroupId);
- });
- if (!refreshGroup) {
- return;
- }
+ if (!refreshSession) {
+ refreshSession = await provideRefreshSession(ws, refreshGroupId, coinIndex);
}
- const refreshSession = refreshGroup.refreshSessionPerCoin[coinIndex];
if (!refreshSession) {
if (refreshGroup.statusPerCoin[coinIndex] !== RefreshCoinStatus.Finished) {
throw Error(
@@ -1058,13 +1092,11 @@ export async function createRefreshGroup(
timestampFinished: undefined,
statusPerCoin: oldCoinPubs.map(() => RefreshCoinStatus.Pending),
oldCoinPubs: oldCoinPubs.map((x) => x.coinPub),
- lastErrorPerCoin: {},
reasonDetails,
reason,
refreshGroupId,
- refreshSessionPerCoin: oldCoinPubs.map(() => undefined),
inputPerCoin: oldCoinPubs.map((x) => x.amount),
- estimatedOutputPerCoin: estimatedOutputPerCoin.map((x) =>
+ expectedOutputPerCoin: estimatedOutputPerCoin.map((x) =>
Amounts.stringify(x),
),
timestampCreated: TalerPreciseTimestamp.now(),
@@ -1164,11 +1196,7 @@ export async function autoRefresh(
if (AbsoluteTime.isExpired(executeThreshold)) {
refreshCoins.push({
coinPub: coin.coinPub,
- amount: Amounts.stringify({
- value: denom.amountVal,
- fraction: denom.amountFrac,
- currency: denom.currency,
- }),
+ amount: denom.value,
});
} else {
const checkThreshold = getAutoRefreshCheckThreshold(denom);
diff --git a/packages/taler-wallet-core/src/operations/reward.ts b/packages/taler-wallet-core/src/operations/reward.ts
index 6f9d3ce85..6ae021174 100644
--- a/packages/taler-wallet-core/src/operations/reward.ts
+++ b/packages/taler-wallet-core/src/operations/reward.ts
@@ -108,7 +108,7 @@ export function computeRewardTransactionStatus(
major: TransactionMajorState.Dialog,
minor: TransactionMinorState.Proposed,
};
- case RewardRecordStatus.SuspendidPickup:
+ case RewardRecordStatus.SuspendedPickup:
return {
major: TransactionMajorState.Pending,
minor: TransactionMinorState.Pickup,
@@ -128,7 +128,7 @@ export function computeTipTransactionActions(
return [TransactionAction.Delete];
case RewardRecordStatus.PendingPickup:
return [TransactionAction.Suspend, TransactionAction.Fail];
- case RewardRecordStatus.SuspendidPickup:
+ case RewardRecordStatus.SuspendedPickup:
return [TransactionAction.Resume, TransactionAction.Fail];
case RewardRecordStatus.DialogAccept:
return [TransactionAction.Abort];
@@ -255,7 +255,7 @@ export async function processTip(
case RewardRecordStatus.Aborted:
case RewardRecordStatus.DialogAccept:
case RewardRecordStatus.Done:
- case RewardRecordStatus.SuspendidPickup:
+ case RewardRecordStatus.SuspendedPickup:
return TaskRunResult.finished();
}
@@ -496,12 +496,12 @@ export async function suspendRewardTransaction(
let newStatus: RewardRecordStatus | undefined = undefined;
switch (tipRec.status) {
case RewardRecordStatus.Done:
- case RewardRecordStatus.SuspendidPickup:
+ case RewardRecordStatus.SuspendedPickup:
case RewardRecordStatus.Aborted:
case RewardRecordStatus.DialogAccept:
break;
case RewardRecordStatus.PendingPickup:
- newStatus = RewardRecordStatus.SuspendidPickup;
+ newStatus = RewardRecordStatus.SuspendedPickup;
break;
default:
@@ -551,7 +551,7 @@ export async function resumeTipTransaction(
case RewardRecordStatus.Aborted:
case RewardRecordStatus.DialogAccept:
break;
- case RewardRecordStatus.SuspendidPickup:
+ case RewardRecordStatus.SuspendedPickup:
newStatus = RewardRecordStatus.PendingPickup;
break;
default:
@@ -608,7 +608,7 @@ export async function abortTipTransaction(
case RewardRecordStatus.PendingPickup:
case RewardRecordStatus.DialogAccept:
break;
- case RewardRecordStatus.SuspendidPickup:
+ case RewardRecordStatus.SuspendedPickup:
newStatus = RewardRecordStatus.Aborted;
break;
default:
diff --git a/packages/taler-wallet-core/src/operations/testing.ts b/packages/taler-wallet-core/src/operations/testing.ts
index 1962c965c..f71d842c7 100644
--- a/packages/taler-wallet-core/src/operations/testing.ts
+++ b/packages/taler-wallet-core/src/operations/testing.ts
@@ -700,7 +700,7 @@ export async function runIntegrationTest2(
});
await confirmPeerPushCredit(ws, {
- peerPushPaymentIncomingId: peerPushCredit.peerPushPaymentIncomingId,
+ peerPushCreditId: peerPushCredit.peerPushCreditId,
});
const peerPullInit = await initiatePeerPullPayment(ws, {
@@ -723,7 +723,7 @@ export async function runIntegrationTest2(
});
await confirmPeerPullDebit(ws, {
- peerPullPaymentIncomingId: peerPullInc.peerPullPaymentIncomingId,
+ peerPullDebitId: peerPullInc.peerPullDebitId,
});
await waitUntilDone(ws);
diff --git a/packages/taler-wallet-core/src/operations/transactions.ts b/packages/taler-wallet-core/src/operations/transactions.ts
index 7f5302b25..7bdb9af5b 100644
--- a/packages/taler-wallet-core/src/operations/transactions.ts
+++ b/packages/taler-wallet-core/src/operations/transactions.ts
@@ -50,10 +50,10 @@ import {
OperationRetryRecord,
PeerPullPaymentIncomingRecord,
PeerPullDebitRecordStatus,
- PeerPullPaymentInitiationRecord,
+ PeerPullCreditRecord,
PeerPushPaymentIncomingRecord,
- PeerPushPaymentIncomingStatus,
- PeerPushPaymentInitiationRecord,
+ PeerPushCreditStatus,
+ PeerPushDebitRecord,
PurchaseRecord,
PurchaseStatus,
RefreshGroupRecord,
@@ -154,7 +154,18 @@ import {
resumePeerPushDebitTransaction,
abortPeerPushDebitTransaction,
} from "./pay-peer-push-debit.js";
-import { iterRecordsForDeposit, iterRecordsForPeerPullDebit, iterRecordsForPeerPullInitiation, iterRecordsForPeerPushCredit, iterRecordsForPeerPushInitiation, iterRecordsForPurchase, iterRecordsForRefresh, iterRecordsForRefund, iterRecordsForReward, iterRecordsForWithdrawal } from "./pending.js";
+import {
+ iterRecordsForDeposit,
+ iterRecordsForPeerPullDebit,
+ iterRecordsForPeerPullInitiation,
+ iterRecordsForPeerPushCredit,
+ iterRecordsForPeerPushInitiation,
+ iterRecordsForPurchase,
+ iterRecordsForRefresh,
+ iterRecordsForRefund,
+ iterRecordsForReward,
+ iterRecordsForWithdrawal,
+} from "./pending.js";
const logger = new Logger("taler-wallet-core:transactions.ts");
@@ -335,11 +346,9 @@ export async function getTransactionById(
}
case TransactionType.PeerPullDebit: {
return await ws.db
- .mktx((x) => [x.peerPullPaymentIncoming])
+ .mktx((x) => [x.peerPullDebit])
.runReadWrite(async (tx) => {
- const debit = await tx.peerPullPaymentIncoming.get(
- parsedTx.peerPullPaymentIncomingId,
- );
+ const debit = await tx.peerPullDebit.get(parsedTx.peerPullDebitId);
if (!debit) throw Error("not found");
return buildTransactionForPullPaymentDebit(debit);
});
@@ -347,11 +356,9 @@ export async function getTransactionById(
case TransactionType.PeerPushDebit: {
return await ws.db
- .mktx((x) => [x.peerPushPaymentInitiations, x.contractTerms])
+ .mktx((x) => [x.peerPushDebit, x.contractTerms])
.runReadWrite(async (tx) => {
- const debit = await tx.peerPushPaymentInitiations.get(
- parsedTx.pursePub,
- );
+ const debit = await tx.peerPushDebit.get(parsedTx.pursePub);
if (!debit) throw Error("not found");
const ct = await tx.contractTerms.get(debit.contractTermsHash);
checkDbInvariant(!!ct);
@@ -363,18 +370,16 @@ export async function getTransactionById(
}
case TransactionType.PeerPushCredit: {
- const peerPushPaymentIncomingId = parsedTx.peerPushPaymentIncomingId;
+ const peerPushCreditId = parsedTx.peerPushCreditId;
return await ws.db
.mktx((x) => [
- x.peerPushPaymentIncoming,
+ x.peerPushCredit,
x.contractTerms,
x.withdrawalGroups,
x.operationRetries,
])
.runReadWrite(async (tx) => {
- const pushInc = await tx.peerPushPaymentIncoming.get(
- peerPushPaymentIncomingId,
- );
+ const pushInc = await tx.peerPushCredit.get(peerPushCreditId);
if (!pushInc) throw Error("not found");
const ct = await tx.contractTerms.get(pushInc.contractTermsHash);
checkDbInvariant(!!ct);
@@ -405,13 +410,13 @@ export async function getTransactionById(
const pursePub = parsedTx.pursePub;
return await ws.db
.mktx((x) => [
- x.peerPullPaymentInitiations,
+ x.peerPullCredit,
x.contractTerms,
x.withdrawalGroups,
x.operationRetries,
])
.runReadWrite(async (tx) => {
- const pushInc = await tx.peerPullPaymentInitiations.get(pursePub);
+ const pushInc = await tx.peerPullCredit.get(pursePub);
if (!pushInc) throw Error("not found");
const ct = await tx.contractTerms.get(pushInc.contractTermsHash);
checkDbInvariant(!!ct);
@@ -442,7 +447,7 @@ export async function getTransactionById(
}
function buildTransactionForPushPaymentDebit(
- pi: PeerPushPaymentInitiationRecord,
+ pi: PeerPushDebitRecord,
contractTerms: PeerContractTerms,
ort?: OperationRetryRecord,
): Transaction {
@@ -490,14 +495,14 @@ function buildTransactionForPullPaymentDebit(
timestamp: pi.timestampCreated,
transactionId: constructTransactionIdentifier({
tag: TransactionType.PeerPullDebit,
- peerPullPaymentIncomingId: pi.peerPullPaymentIncomingId,
+ peerPullDebitId: pi.peerPullDebitId,
}),
...(ort?.lastError ? { error: ort.lastError } : {}),
};
}
function buildTransactionForPeerPullCredit(
- pullCredit: PeerPullPaymentInitiationRecord,
+ pullCredit: PeerPullCreditRecord,
pullCreditOrt: OperationRetryRecord | undefined,
peerContractTerms: PeerContractTerms,
wsr: WithdrawalGroupRecord | undefined,
@@ -532,8 +537,8 @@ function buildTransactionForPeerPullCredit(
// Old transactions don't have it!
timestamp: pullCredit.mergeTimestamp ?? TalerPreciseTimestamp.now(),
info: {
- expiration: wsr.wgInfo.contractTerms.purse_expiration,
- summary: wsr.wgInfo.contractTerms.summary,
+ expiration: peerContractTerms.purse_expiration,
+ summary: peerContractTerms.summary,
},
talerUri: stringifyPayPullUri({
exchangeBaseUrl: wsr.exchangeBaseUrl,
@@ -600,13 +605,13 @@ function buildTransactionForPeerPushCredit(
amountRaw: Amounts.stringify(wsr.instructedAmount),
exchangeBaseUrl: wsr.exchangeBaseUrl,
info: {
- expiration: wsr.wgInfo.contractTerms.purse_expiration,
- summary: wsr.wgInfo.contractTerms.summary,
+ expiration: peerContractTerms.purse_expiration,
+ summary: peerContractTerms.summary,
},
timestamp: wsr.timestampStart,
transactionId: constructTransactionIdentifier({
tag: TransactionType.PeerPushCredit,
- peerPushPaymentIncomingId: pushInc.peerPushPaymentIncomingId,
+ peerPushCreditId: pushInc.peerPushCreditId,
}),
kycUrl: pushInc.kycUrl,
...(wsrOrt?.lastError ? { error: wsrOrt.lastError } : {}),
@@ -629,7 +634,7 @@ function buildTransactionForPeerPushCredit(
timestamp: pushInc.timestamp,
transactionId: constructTransactionIdentifier({
tag: TransactionType.PeerPushCredit,
- peerPushPaymentIncomingId: pushInc.peerPushPaymentIncomingId,
+ peerPushCreditId: pushInc.peerPushCreditId,
}),
...(pushOrt?.lastError ? { error: pushOrt.lastError } : {}),
};
@@ -654,7 +659,7 @@ function buildTransactionForBankIntegratedWithdraw(
reservePub: wgRecord.reservePub,
bankConfirmationUrl: wgRecord.wgInfo.bankInfo.confirmUrl,
reserveIsReady:
- wgRecord.status === WithdrawalGroupStatus.Finished ||
+ wgRecord.status === WithdrawalGroupStatus.Done ||
wgRecord.status === WithdrawalGroupStatus.PendingReady,
},
kycUrl: wgRecord.kycUrl,
@@ -698,7 +703,7 @@ function buildTransactionForManualWithdraw(
reservePub: withdrawalGroup.reservePub,
exchangePaytoUris,
reserveIsReady:
- withdrawalGroup.status === WithdrawalGroupStatus.Finished ||
+ withdrawalGroup.status === WithdrawalGroupStatus.Done ||
withdrawalGroup.status === WithdrawalGroupStatus.PendingReady,
},
kycUrl: withdrawalGroup.kycUrl,
@@ -755,7 +760,7 @@ function buildTransactionForRefresh(
).amount;
const outputAmount = Amounts.sumOrZero(
refreshGroupRecord.currency,
- refreshGroupRecord.estimatedOutputPerCoin,
+ refreshGroupRecord.expectedOutputPerCoin,
).amount;
return {
type: TransactionType.Refresh,
@@ -786,8 +791,8 @@ function buildTransactionForDeposit(
ort?: OperationRetryRecord,
): Transaction {
let deposited = true;
- for (const d of dg.depositedPerCoin) {
- if (!d) {
+ for (const d of dg.statusPerCoin) {
+ if (d == DepositElementStatus.DepositPending) {
deposited = false;
}
}
@@ -796,7 +801,7 @@ function buildTransactionForDeposit(
type: TransactionType.Deposit,
txState: computeDepositTransactionStatus(dg),
txActions: computeDepositTransactionActions(dg),
- amountRaw: Amounts.stringify(dg.effectiveDepositAmount),
+ amountRaw: Amounts.stringify(dg.counterpartyEffectiveDepositAmount),
amountEffective: Amounts.stringify(dg.totalPayCost),
timestamp: dg.timestampCreated,
targetPaytoUri: dg.wire.payto_uri,
@@ -807,11 +812,11 @@ function buildTransactionForDeposit(
}),
wireTransferProgress:
(100 *
- dg.transactionPerCoin.reduce(
+ dg.statusPerCoin.reduce(
(prev, cur) => prev + (cur === DepositElementStatus.Wired ? 1 : 0),
0,
)) /
- dg.transactionPerCoin.length,
+ dg.statusPerCoin.length,
depositGroupId: dg.depositGroupId,
trackingState: Object.values(dg.trackingState ?? {}),
deposited,
@@ -879,7 +884,6 @@ async function buildTransactionForPurchase(
const info: OrderShortInfo = {
merchant: contractData.merchant,
orderId: contractData.orderId,
- products: contractData.products,
summary: contractData.summary,
summary_i18n: contractData.summaryI18n,
contractTermsHash: contractData.contractTermsHash,
@@ -944,10 +948,10 @@ export async function getTransactions(
x.exchangeDetails,
x.exchanges,
x.operationRetries,
- x.peerPullPaymentIncoming,
- x.peerPushPaymentInitiations,
- x.peerPushPaymentIncoming,
- x.peerPullPaymentInitiations,
+ x.peerPullDebit,
+ x.peerPushDebit,
+ x.peerPushCredit,
+ x.peerPullCredit,
x.planchets,
x.purchases,
x.contractTerms,
@@ -985,7 +989,7 @@ export async function getTransactions(
}
if (
pi.status !== PeerPullDebitRecordStatus.PendingDeposit &&
- pi.status !== PeerPullDebitRecordStatus.DonePaid
+ pi.status !== PeerPullDebitRecordStatus.Done
) {
return;
}
@@ -1004,7 +1008,7 @@ export async function getTransactions(
if (shouldSkipSearch(transactionsRequest, [])) {
return;
}
- if (pi.status === PeerPushPaymentIncomingStatus.DialogProposed) {
+ if (pi.status === PeerPushCreditStatus.DialogProposed) {
// We don't report proposed push credit transactions, user needs
// to scan URI again and confirm to see it.
return;
@@ -1033,7 +1037,7 @@ export async function getTransactions(
),
);
});
-
+
await iterRecordsForPeerPullInitiation(tx, filter, async (pi) => {
const currency = Amounts.currencyOf(pi.amount);
if (shouldSkipCurrency(transactionsRequest, currency)) {
@@ -1078,7 +1082,7 @@ export async function getTransactions(
);
transactions.push(buildTransactionForRefund(refundGroup, contractData));
});
-
+
await iterRecordsForRefresh(tx, filter, async (rg) => {
if (shouldSkipCurrency(transactionsRequest, rg.currency)) {
return;
@@ -1099,7 +1103,7 @@ export async function getTransactions(
}
});
- await iterRecordsForWithdrawal(tx, filter ,async (wsr) => {
+ await iterRecordsForWithdrawal(tx, filter, async (wsr) => {
if (
shouldSkipCurrency(
transactionsRequest,
@@ -1268,9 +1272,9 @@ export async function getTransactions(
export type ParsedTransactionIdentifier =
| { tag: TransactionType.Deposit; depositGroupId: string }
| { tag: TransactionType.Payment; proposalId: string }
- | { tag: TransactionType.PeerPullDebit; peerPullPaymentIncomingId: string }
+ | { tag: TransactionType.PeerPullDebit; peerPullDebitId: string }
| { tag: TransactionType.PeerPullCredit; pursePub: string }
- | { tag: TransactionType.PeerPushCredit; peerPushPaymentIncomingId: string }
+ | { tag: TransactionType.PeerPushCredit; peerPushCreditId: string }
| { tag: TransactionType.PeerPushDebit; pursePub: string }
| { tag: TransactionType.Refresh; refreshGroupId: string }
| { tag: TransactionType.Refund; refundGroupId: string }
@@ -1289,9 +1293,9 @@ export function constructTransactionIdentifier(
case TransactionType.PeerPullCredit:
return `txn:${pTxId.tag}:${pTxId.pursePub}` as TransactionIdStr;
case TransactionType.PeerPullDebit:
- return `txn:${pTxId.tag}:${pTxId.peerPullPaymentIncomingId}` as TransactionIdStr;
+ return `txn:${pTxId.tag}:${pTxId.peerPullDebitId}` as TransactionIdStr;
case TransactionType.PeerPushCredit:
- return `txn:${pTxId.tag}:${pTxId.peerPushPaymentIncomingId}` as TransactionIdStr;
+ return `txn:${pTxId.tag}:${pTxId.peerPushCreditId}` as TransactionIdStr;
case TransactionType.PeerPushDebit:
return `txn:${pTxId.tag}:${pTxId.pursePub}` as TransactionIdStr;
case TransactionType.Refresh:
@@ -1337,12 +1341,12 @@ export function parseTransactionIdentifier(
case TransactionType.PeerPullDebit:
return {
tag: TransactionType.PeerPullDebit,
- peerPullPaymentIncomingId: rest[0],
+ peerPullDebitId: rest[0],
};
case TransactionType.PeerPushCredit:
return {
tag: TransactionType.PeerPushCredit,
- peerPushPaymentIncomingId: rest[0],
+ peerPushCreditId: rest[0],
};
case TransactionType.PeerPushDebit:
return { tag: TransactionType.PeerPushDebit, pursePub: rest[0] };
@@ -1455,7 +1459,7 @@ export async function retryTransaction(
case TransactionType.PeerPullDebit: {
const taskId = constructTaskIdentifier({
tag: PendingTaskType.PeerPullDebit,
- peerPullPaymentIncomingId: parsedTx.peerPullPaymentIncomingId,
+ peerPullDebitId: parsedTx.peerPullDebitId,
});
await resetPendingTaskTimeout(ws, taskId);
stopLongpolling(ws, taskId);
@@ -1464,7 +1468,7 @@ export async function retryTransaction(
case TransactionType.PeerPushCredit: {
const taskId = constructTaskIdentifier({
tag: PendingTaskType.PeerPushCredit,
- peerPushPaymentIncomingId: parsedTx.peerPushPaymentIncomingId,
+ peerPushCreditId: parsedTx.peerPushCreditId,
});
await resetPendingTaskTimeout(ws, taskId);
stopLongpolling(ws, taskId);
@@ -1522,10 +1526,10 @@ export async function suspendTransaction(
await suspendPeerPushDebitTransaction(ws, tx.pursePub);
break;
case TransactionType.PeerPullDebit:
- await suspendPeerPullDebitTransaction(ws, tx.peerPullPaymentIncomingId);
+ await suspendPeerPullDebitTransaction(ws, tx.peerPullDebitId);
break;
case TransactionType.PeerPushCredit:
- await suspendPeerPushCreditTransaction(ws, tx.peerPushPaymentIncomingId);
+ await suspendPeerPushCreditTransaction(ws, tx.peerPushCreditId);
break;
case TransactionType.Refund:
throw Error("refund transactions can't be suspended or resumed");
@@ -1568,10 +1572,10 @@ export async function failTransaction(
await failPeerPullCreditTransaction(ws, tx.pursePub);
return;
case TransactionType.PeerPullDebit:
- await failPeerPullDebitTransaction(ws, tx.peerPullPaymentIncomingId);
+ await failPeerPullDebitTransaction(ws, tx.peerPullDebitId);
return;
case TransactionType.PeerPushCredit:
- await failPeerPushCreditTransaction(ws, tx.peerPushPaymentIncomingId);
+ await failPeerPushCreditTransaction(ws, tx.peerPushCreditId);
return;
case TransactionType.PeerPushDebit:
await failPeerPushDebitTransaction(ws, tx.pursePub);
@@ -1613,10 +1617,10 @@ export async function resumeTransaction(
await resumePeerPushDebitTransaction(ws, tx.pursePub);
break;
case TransactionType.PeerPullDebit:
- await resumePeerPullDebitTransaction(ws, tx.peerPullPaymentIncomingId);
+ await resumePeerPullDebitTransaction(ws, tx.peerPullDebitId);
break;
case TransactionType.PeerPushCredit:
- await resumePeerPushCreditTransaction(ws, tx.peerPushPaymentIncomingId);
+ await resumePeerPushCreditTransaction(ws, tx.peerPushCreditId);
break;
case TransactionType.Refund:
throw Error("refund transactions can't be suspended or resumed");
@@ -1641,17 +1645,11 @@ export async function deleteTransaction(
switch (parsedTx.tag) {
case TransactionType.PeerPushCredit: {
- const peerPushPaymentIncomingId = parsedTx.peerPushPaymentIncomingId;
+ const peerPushCreditId = parsedTx.peerPushCreditId;
await ws.db
- .mktx((x) => [
- x.withdrawalGroups,
- x.peerPushPaymentIncoming,
- x.tombstones,
- ])
+ .mktx((x) => [x.withdrawalGroups, x.peerPushCredit, x.tombstones])
.runReadWrite(async (tx) => {
- const pushInc = await tx.peerPushPaymentIncoming.get(
- peerPushPaymentIncomingId,
- );
+ const pushInc = await tx.peerPushCredit.get(peerPushCreditId);
if (!pushInc) {
return;
}
@@ -1668,12 +1666,9 @@ export async function deleteTransaction(
});
}
}
- await tx.peerPushPaymentIncoming.delete(peerPushPaymentIncomingId);
+ await tx.peerPushCredit.delete(peerPushCreditId);
await tx.tombstones.put({
- id:
- TombstoneTag.DeletePeerPushCredit +
- ":" +
- peerPushPaymentIncomingId,
+ id: TombstoneTag.DeletePeerPushCredit + ":" + peerPushCreditId,
});
});
return;
@@ -1682,13 +1677,9 @@ export async function deleteTransaction(
case TransactionType.PeerPullCredit: {
const pursePub = parsedTx.pursePub;
await ws.db
- .mktx((x) => [
- x.withdrawalGroups,
- x.peerPullPaymentInitiations,
- x.tombstones,
- ])
+ .mktx((x) => [x.withdrawalGroups, x.peerPullCredit, x.tombstones])
.runReadWrite(async (tx) => {
- const pullIni = await tx.peerPullPaymentInitiations.get(pursePub);
+ const pullIni = await tx.peerPullCredit.get(pursePub);
if (!pullIni) {
return;
}
@@ -1705,7 +1696,7 @@ export async function deleteTransaction(
});
}
}
- await tx.peerPullPaymentInitiations.delete(pursePub);
+ await tx.peerPullCredit.delete(pursePub);
await tx.tombstones.put({
id: TombstoneTag.DeletePeerPullCredit + ":" + pursePub,
});
@@ -1795,7 +1786,7 @@ export async function deleteTransaction(
case TransactionType.Refund: {
const refundGroupId = parsedTx.refundGroupId;
await ws.db
- .mktx((x) => [x.refundGroups, x.tombstones, x.refundItems])
+ .mktx((x) => [x.refundGroups, x.tombstones])
.runReadWrite(async (tx) => {
const refundRecord = await tx.refundGroups.get(refundGroupId);
if (!refundRecord) {
@@ -1809,15 +1800,13 @@ export async function deleteTransaction(
}
case TransactionType.PeerPullDebit: {
- const peerPullPaymentIncomingId = parsedTx.peerPullPaymentIncomingId;
+ const peerPullDebitId = parsedTx.peerPullDebitId;
await ws.db
- .mktx((x) => [x.peerPullPaymentIncoming, x.tombstones])
+ .mktx((x) => [x.peerPullDebit, x.tombstones])
.runReadWrite(async (tx) => {
- const debit = await tx.peerPullPaymentIncoming.get(
- peerPullPaymentIncomingId,
- );
+ const debit = await tx.peerPullDebit.get(peerPullDebitId);
if (debit) {
- await tx.peerPullPaymentIncoming.delete(peerPullPaymentIncomingId);
+ await tx.peerPullDebit.delete(peerPullDebitId);
await tx.tombstones.put({ id: transactionId });
}
});
@@ -1828,11 +1817,11 @@ export async function deleteTransaction(
case TransactionType.PeerPushDebit: {
const pursePub = parsedTx.pursePub;
await ws.db
- .mktx((x) => [x.peerPushPaymentInitiations, x.tombstones])
+ .mktx((x) => [x.peerPushDebit, x.tombstones])
.runReadWrite(async (tx) => {
- const debit = await tx.peerPushPaymentInitiations.get(pursePub);
+ const debit = await tx.peerPushDebit.get(pursePub);
if (debit) {
- await tx.peerPushPaymentInitiations.delete(pursePub);
+ await tx.peerPushDebit.delete(pursePub);
await tx.tombstones.put({ id: transactionId });
}
});
@@ -1875,10 +1864,10 @@ export async function abortTransaction(
await abortPeerPullCreditTransaction(ws, txId.pursePub);
break;
case TransactionType.PeerPullDebit:
- await abortPeerPullDebitTransaction(ws, txId.peerPullPaymentIncomingId);
+ await abortPeerPullDebitTransaction(ws, txId.peerPullDebitId);
break;
case TransactionType.PeerPushCredit:
- await abortPeerPushCreditTransaction(ws, txId.peerPushPaymentIncomingId);
+ await abortPeerPushCreditTransaction(ws, txId.peerPushCreditId);
break;
case TransactionType.PeerPushDebit:
await abortPeerPushDebitTransaction(ws, txId.pursePub);
diff --git a/packages/taler-wallet-core/src/operations/withdraw.test.ts b/packages/taler-wallet-core/src/operations/withdraw.test.ts
index 5a557b5de..2d9286610 100644
--- a/packages/taler-wallet-core/src/operations/withdraw.test.ts
+++ b/packages/taler-wallet-core/src/operations/withdraw.test.ts
@@ -78,8 +78,7 @@ test("withdrawal selection bug repro", (t) => {
},
verificationStatus: DenominationVerificationStatus.Unverified,
currency: "KUDOS",
- amountFrac: 0,
- amountVal: 1000,
+ value: "KUDOS:1000",
listIssueDate: { t_s: 0 },
},
{
@@ -133,8 +132,7 @@ test("withdrawal selection bug repro", (t) => {
t_s: 1585229388,
},
verificationStatus: DenominationVerificationStatus.Unverified,
- amountFrac: 0,
- amountVal: 10,
+ value: "KUDOS:10",
currency: "KUDOS",
listIssueDate: { t_s: 0 },
},
@@ -188,8 +186,7 @@ test("withdrawal selection bug repro", (t) => {
t_s: 1585229388,
},
verificationStatus: DenominationVerificationStatus.Unverified,
- amountFrac: 0,
- amountVal: 5,
+ value: "KUDOS:5",
currency: "KUDOS",
listIssueDate: { t_s: 0 },
},
@@ -244,8 +241,7 @@ test("withdrawal selection bug repro", (t) => {
t_s: 1585229388,
},
verificationStatus: DenominationVerificationStatus.Unverified,
- amountFrac: 0,
- amountVal: 1,
+ value: "KUDOS:1",
currency: "KUDOS",
listIssueDate: { t_s: 0 },
},
@@ -299,8 +295,11 @@ test("withdrawal selection bug repro", (t) => {
t_s: 1585229388,
},
verificationStatus: DenominationVerificationStatus.Unverified,
- amountFrac: 10000000,
- amountVal: 0,
+ value: Amounts.stringify({
+ currency: "KUDOS",
+ fraction: 10000000,
+ value: 0,
+ }),
currency: "KUDOS",
listIssueDate: { t_s: 0 },
},
@@ -354,8 +353,7 @@ test("withdrawal selection bug repro", (t) => {
t_s: 1585229388,
},
verificationStatus: DenominationVerificationStatus.Unverified,
- amountFrac: 0,
- amountVal: 2,
+ value: "KUDOS:2",
currency: "KUDOS",
listIssueDate: { t_s: 0 },
},
diff --git a/packages/taler-wallet-core/src/operations/withdraw.ts b/packages/taler-wallet-core/src/operations/withdraw.ts
index a3d95fb5c..bae348dc1 100644
--- a/packages/taler-wallet-core/src/operations/withdraw.ts
+++ b/packages/taler-wallet-core/src/operations/withdraw.ts
@@ -123,7 +123,6 @@ import {
import {
getExchangeDetails,
getExchangePaytoUri,
- getExchangeTrust,
updateExchangeFromUrl,
} from "./exchanges.js";
import {
@@ -320,7 +319,7 @@ export async function abortWithdrawalTransaction(
case WithdrawalGroupStatus.AbortingBank:
// No transition needed, but not an error
break;
- case WithdrawalGroupStatus.Finished:
+ case WithdrawalGroupStatus.Done:
case WithdrawalGroupStatus.FailedBankAborted:
case WithdrawalGroupStatus.AbortedExchange:
case WithdrawalGroupStatus.AbortedBank:
@@ -400,7 +399,7 @@ export function computeWithdrawalTransactionStatus(
return {
major: TransactionMajorState.Aborted,
};
- case WithdrawalGroupStatus.Finished:
+ case WithdrawalGroupStatus.Done:
return {
major: TransactionMajorState.Done,
};
@@ -504,7 +503,7 @@ export function computeWithdrawalTransactionActions(
switch (wgRecord.status) {
case WithdrawalGroupStatus.FailedBankAborted:
return [TransactionAction.Delete];
- case WithdrawalGroupStatus.Finished:
+ case WithdrawalGroupStatus.Done:
return [TransactionAction.Delete];
case WithdrawalGroupStatus.PendingRegisteringBank:
return [TransactionAction.Suspend, TransactionAction.Abort];
@@ -726,7 +725,9 @@ interface WithdrawalBatchResult {
batchResp: ExchangeWithdrawBatchResponse;
}
enum AmlStatus {
- normal= 0, pending = 1, fronzen = 2,
+ normal = 0,
+ pending = 1,
+ fronzen = 2,
}
async function handleKycRequired(
@@ -773,7 +774,9 @@ async function handleKycRequired(
const kycStatus = await kycStatusRes.json();
logger.info(`kyc status: ${j2s(kycStatus)}`);
kycUrl = kycStatus.kyc_url;
- } else if (kycStatusRes.status === HttpStatusCode.UnavailableForLegalReasons) {
+ } else if (
+ kycStatusRes.status === HttpStatusCode.UnavailableForLegalReasons
+ ) {
const kycStatus = await kycStatusRes.json();
logger.info(`aml status: ${j2s(kycStatus)}`);
amlStatus = kycStatus.aml_status;
@@ -809,11 +812,15 @@ async function handleKycRequired(
requirementRow: uuidResp.requirement_row,
};
wg2.kycUrl = kycUrl;
- wg2.status = amlStatus === AmlStatus.normal || amlStatus === undefined ? WithdrawalGroupStatus.PendingKyc :
- amlStatus === AmlStatus.pending ? WithdrawalGroupStatus.PendingAml :
- amlStatus === AmlStatus.fronzen ? WithdrawalGroupStatus.SuspendedAml :
- assertUnreachable(amlStatus);
-
+ wg2.status =
+ amlStatus === AmlStatus.normal || amlStatus === undefined
+ ? WithdrawalGroupStatus.PendingKyc
+ : amlStatus === AmlStatus.pending
+ ? WithdrawalGroupStatus.PendingAml
+ : amlStatus === AmlStatus.fronzen
+ ? WithdrawalGroupStatus.SuspendedAml
+ : assertUnreachable(amlStatus);
+
await tx.withdrawalGroups.put(wg2);
const newTxState = computeWithdrawalTransactionStatus(wg2);
return {
@@ -924,31 +931,31 @@ async function processPlanchetExchangeBatchRequest(
// FIXME: handle individual error codes better!
- const reqUrl = new URL(
- `reserves/${withdrawalGroup.reservePub}/batch-withdraw`,
- withdrawalGroup.exchangeBaseUrl,
- ).href;
+ const reqUrl = new URL(
+ `reserves/${withdrawalGroup.reservePub}/batch-withdraw`,
+ withdrawalGroup.exchangeBaseUrl,
+ ).href;
- try {
- const resp = await ws.http.postJson(reqUrl, batchReq);
- if (resp.status === HttpStatusCode.UnavailableForLegalReasons) {
- await handleKycRequired(ws, withdrawalGroup, resp, 0, requestCoinIdxs);
- }
- const r = await readSuccessResponseJsonOrThrow(
- resp,
- codecForWithdrawBatchResponse(),
- );
- return {
- coinIdxs: requestCoinIdxs,
- batchResp: r,
- };
- } catch (e) {
- await storeCoinError(e, requestCoinIdxs[0]);
- return {
- batchResp: { ev_sigs: [] },
- coinIdxs: [],
- };
+ try {
+ const resp = await ws.http.postJson(reqUrl, batchReq);
+ if (resp.status === HttpStatusCode.UnavailableForLegalReasons) {
+ await handleKycRequired(ws, withdrawalGroup, resp, 0, requestCoinIdxs);
}
+ const r = await readSuccessResponseJsonOrThrow(
+ resp,
+ codecForWithdrawBatchResponse(),
+ );
+ return {
+ coinIdxs: requestCoinIdxs,
+ batchResp: r,
+ };
+ } catch (e) {
+ await storeCoinError(e, requestCoinIdxs[0]);
+ return {
+ batchResp: { ev_sigs: [] },
+ coinIdxs: [],
+ };
+ }
}
async function processPlanchetVerifyAndStoreCoin(
@@ -1415,10 +1422,12 @@ async function processWithdrawalGroupPendingKyc(
logger.info(`kyc status: ${j2s(kycStatus)}`);
// FIXME: do we need to update the KYC url, or does it always stay constant?
return { ready: false };
- } else if (kycStatusRes.status === HttpStatusCode.UnavailableForLegalReasons) {
+ } else if (
+ kycStatusRes.status === HttpStatusCode.UnavailableForLegalReasons
+ ) {
const kycStatus = await kycStatusRes.json();
logger.info(`aml status: ${j2s(kycStatus)}`);
- return {ready : false}
+ return { ready: false };
} else {
throw Error(
`unexpected response from kyc-check (${kycStatusRes.status})`,
@@ -1453,7 +1462,7 @@ async function processWithdrawalGroupPendingReady(
return undefined;
}
const txStatusOld = computeWithdrawalTransactionStatus(wg);
- wg.status = WithdrawalGroupStatus.Finished;
+ wg.status = WithdrawalGroupStatus.Done;
wg.timestampFinish = TalerPreciseTimestamp.now();
const txStatusNew = computeWithdrawalTransactionStatus(wg);
await tx.withdrawalGroups.put(wg);
@@ -1551,7 +1560,7 @@ async function processWithdrawalGroupPendingReady(
logger.info(`now withdrawn ${numFinished} of ${numTotalCoins} coins`);
if (wg.timestampFinish === undefined && numFinished === numTotalCoins) {
wg.timestampFinish = TalerPreciseTimestamp.now();
- wg.status = WithdrawalGroupStatus.Finished;
+ wg.status = WithdrawalGroupStatus.Done;
await makeCoinsVisible(ws, tx, transactionId);
}
@@ -1643,7 +1652,7 @@ export async function processWithdrawalGroup(
}
break;
}
- case WithdrawalGroupStatus.Finished:
+ case WithdrawalGroupStatus.Done:
case WithdrawalGroupStatus.FailedBankAborted: {
// FIXME
return TaskRunResult.pending();
@@ -1714,11 +1723,6 @@ export async function getExchangeWithdrawalInfo(
exchangeWireAccounts.push(account.payto_uri);
}
- const { isTrusted, isAudited } = await ws.exchangeOps.getExchangeTrust(
- ws,
- exchange,
- );
-
let hasDenomWithAgeRestriction = false;
logger.trace("computing earliest deposit expiration");
@@ -1797,8 +1801,6 @@ export async function getExchangeWithdrawalInfo(
exchangePaytoUris: paytoUris,
exchangeWireAccounts,
exchangeVersion: exchangeDetails.protocolVersionRange || "unknown",
- isAudited,
- isTrusted,
numOfferedDenoms: possibleDenoms.length,
selectedDenoms,
// FIXME: delete this field / replace by something we can display to the user
@@ -1859,7 +1861,6 @@ export async function getWithdrawalDetailsForUri(
.mktx((x) => [
x.exchanges,
x.exchangeDetails,
- x.exchangeTos,
x.denominations,
x.operationRetries,
])
@@ -2215,8 +2216,6 @@ export interface PrepareCreateWithdrawalGroupResult {
withdrawalGroup: WithdrawalGroupRecord;
transactionId: string;
creationInfo?: {
- isTrusted: boolean;
- isAudited: boolean;
amount: AmountJson;
canonExchange: string;
exchangeDetails: ExchangeDetailsRecord;
@@ -2311,10 +2310,6 @@ export async function internalPrepareCreateWithdrawalGroup(
logger.trace(exchangeDetails);
throw Error("exchange not updated");
}
- const { isAudited, isTrusted } = await getExchangeTrust(
- ws,
- exchangeInfo.exchange,
- );
const transactionId = constructTransactionIdentifier({
tag: TransactionType.Withdrawal,
withdrawalGroupId: withdrawalGroup.withdrawalGroupId,
@@ -2324,8 +2319,6 @@ export async function internalPrepareCreateWithdrawalGroup(
withdrawalGroup,
transactionId,
creationInfo: {
- isAudited,
- isTrusted,
canonExchange,
amount,
exchangeDetails,
@@ -2344,7 +2337,6 @@ export async function internalPerformCreateWithdrawalGroup(
withdrawalGroups: typeof WalletStoresV1.withdrawalGroups;
reserves: typeof WalletStoresV1.reserves;
exchanges: typeof WalletStoresV1.exchanges;
- exchangeTrust: typeof WalletStoresV1.exchangeTrust;
}>,
prep: PrepareCreateWithdrawalGroupResult,
): Promise<PerformCreateWithdrawalGroupResult> {
@@ -2352,7 +2344,7 @@ export async function internalPerformCreateWithdrawalGroup(
if (!prep.creationInfo) {
return { withdrawalGroup, transitionInfo: undefined };
}
- const { isAudited, isTrusted, amount, canonExchange, exchangeDetails } =
+ const { amount, canonExchange, exchangeDetails } =
prep.creationInfo;
await tx.withdrawalGroups.add(withdrawalGroup);
@@ -2368,15 +2360,6 @@ export async function internalPerformCreateWithdrawalGroup(
await tx.exchanges.put(exchange);
}
- if (!isAudited && !isTrusted) {
- await tx.exchangeTrust.put({
- currency: amount.currency,
- exchangeBaseUrl: canonExchange,
- exchangeMasterPub: exchangeDetails.masterPublicKey,
- uids: [encodeCrock(getRandomBytes(32))],
- });
- }
-
const oldTxState = {
major: TransactionMajorState.None,
minor: undefined,
@@ -2422,7 +2405,6 @@ export async function internalCreateWithdrawalGroup(
x.reserves,
x.exchanges,
x.exchangeDetails,
- x.exchangeTrust,
])
.runReadWrite(async (tx) => {
return await internalPerformCreateWithdrawalGroup(ws, tx, prep);
@@ -2568,7 +2550,6 @@ export async function createManualWithdrawal(
x.withdrawalGroups,
x.exchanges,
x.exchangeDetails,
- x.exchangeTrust,
])
.runReadOnly(async (tx) => {
return await getFundingPaytoUris(tx, withdrawalGroup.withdrawalGroupId);