From 3daa4dbb3fc5199fb05d58b40c0d7c9ee287595e Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Mon, 20 Feb 2023 20:14:37 +0100 Subject: wallet-core: fix retryTransaction, improve tx/op identifier parsing/construction --- packages/taler-wallet-core/src/util/retries.ts | 75 +++++++++++++++++++++----- 1 file changed, 61 insertions(+), 14 deletions(-) (limited to 'packages/taler-wallet-core/src/util') diff --git a/packages/taler-wallet-core/src/util/retries.ts b/packages/taler-wallet-core/src/util/retries.ts index 5744bf8fe..5b6645924 100644 --- a/packages/taler-wallet-core/src/util/retries.ts +++ b/packages/taler-wallet-core/src/util/retries.ts @@ -46,6 +46,7 @@ import { TalerError } from "@gnu-taler/taler-util"; import { InternalWalletState } from "../internal-wallet-state.js"; import { PendingTaskType } from "../pending-types.js"; import { GetReadWriteAccess } from "./query.js"; +import { assertUnreachable } from "./assertUnreachable.js"; const logger = new Logger("util/retries.ts"); @@ -176,7 +177,66 @@ export namespace RetryInfo { } } -export namespace RetryTags { +/** + * Parsed representation of task identifiers. + */ +export type ParsedTaskIdentifier = + | { + tag: PendingTaskType.Withdraw; + withdrawalGroupId: string; + } + | { tag: PendingTaskType.ExchangeUpdate; exchangeBaseUrl: string } + | { tag: PendingTaskType.Backup; backupProviderBaseUrl: string } + | { tag: PendingTaskType.Deposit; depositGroupId: string } + | { tag: PendingTaskType.ExchangeCheckRefresh; exchangeBaseUrl: string } + | { tag: PendingTaskType.ExchangeUpdate; exchangeBaseUrl: string } + | { tag: PendingTaskType.PeerPullDebit; peerPullPaymentIncomingId: string } + | { tag: PendingTaskType.PeerPullInitiation; pursePub: string } + | { tag: PendingTaskType.PeerPushCredit; peerPushPaymentIncomingId: string } + | { tag: PendingTaskType.PeerPushInitiation; pursePub: string } + | { tag: PendingTaskType.Purchase; proposalId: string } + | { tag: PendingTaskType.Recoup; recoupGroupId: string } + | { tag: PendingTaskType.TipPickup; walletTipId: string } + | { tag: PendingTaskType.Refresh; refreshGroupId: string }; + +export function parseTaskIdentifier(x: string): ParsedTaskIdentifier { + throw Error("not yet implemented"); +} + +export function constructTaskIdentifier(p: ParsedTaskIdentifier): string { + switch (p.tag) { + case PendingTaskType.Backup: + return `${p.tag}:${p.backupProviderBaseUrl}`; + case PendingTaskType.Deposit: + return `${p.tag}:${p.depositGroupId}`; + case PendingTaskType.ExchangeCheckRefresh: + return `${p.tag}:${p.exchangeBaseUrl}`; + case PendingTaskType.ExchangeUpdate: + return `${p.tag}:${p.exchangeBaseUrl}`; + case PendingTaskType.PeerPullDebit: + return `${p.tag}:${p.peerPullPaymentIncomingId}`; + case PendingTaskType.PeerPushCredit: + return `${p.tag}:${p.peerPushPaymentIncomingId}`; + case PendingTaskType.PeerPullInitiation: + return `${p.tag}:${p.pursePub}`; + case PendingTaskType.PeerPushInitiation: + return `${p.tag}:${p.pursePub}`; + case PendingTaskType.Purchase: + return `${p.tag}:${p.proposalId}`; + case PendingTaskType.Recoup: + return `${p.tag}:${p.recoupGroupId}`; + case PendingTaskType.Refresh: + return `${p.tag}:${p.refreshGroupId}`; + case PendingTaskType.TipPickup: + return `${p.tag}:${p.walletTipId}`; + case PendingTaskType.Withdraw: + return `${p.tag}:${p.withdrawalGroupId}`; + default: + assertUnreachable(p); + } +} + +export namespace TaskIdentifiers { export function forWithdrawal(wg: WithdrawalGroupRecord): string { return `${PendingTaskType.Withdraw}:${wg.withdrawalGroupId}`; } @@ -227,19 +287,6 @@ export namespace RetryTags { ): string { return `${PendingTaskType.PeerPushCredit}:${ppi.peerPushPaymentIncomingId}`; } - export function byPaymentProposalId(proposalId: string): string { - return `${PendingTaskType.Purchase}:${proposalId}`; - } - export function byPeerPushPaymentInitiationPursePub( - pursePub: string, - ): string { - return `${PendingTaskType.PeerPushInitiation}:${pursePub}`; - } - export function byPeerPullPaymentInitiationPursePub( - pursePub: string, - ): string { - return `${PendingTaskType.PeerPullInitiation}:${pursePub}`; - } } export async function scheduleRetryInTx( -- cgit v1.2.3