diff options
author | Florian Dold <florian@dold.me> | 2023-02-20 20:14:37 +0100 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2023-02-20 20:14:46 +0100 |
commit | 3daa4dbb3fc5199fb05d58b40c0d7c9ee287595e (patch) | |
tree | bdf3bcd9af71ce9cc77a8c4dc32ff0537654e83f /packages/taler-wallet-core/src/util | |
parent | 7bb81a008b7148cfd3fd656f858e4cbd755531ac (diff) | |
download | wallet-core-3daa4dbb3fc5199fb05d58b40c0d7c9ee287595e.tar.xz |
wallet-core: fix retryTransaction, improve tx/op identifier parsing/construction
Diffstat (limited to 'packages/taler-wallet-core/src/util')
-rw-r--r-- | packages/taler-wallet-core/src/util/retries.ts | 75 |
1 files changed, 61 insertions, 14 deletions
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( |