summaryrefslogtreecommitdiff
path: root/packages/taler-wallet-core/src/util/retries.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/taler-wallet-core/src/util/retries.ts')
-rw-r--r--packages/taler-wallet-core/src/util/retries.ts75
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(