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/backup/export.ts18
-rw-r--r--packages/taler-wallet-core/src/operations/backup/import.ts32
-rw-r--r--packages/taler-wallet-core/src/operations/common.ts32
-rw-r--r--packages/taler-wallet-core/src/operations/pending.ts18
-rw-r--r--packages/taler-wallet-core/src/operations/recoup.ts6
-rw-r--r--packages/taler-wallet-core/src/operations/reward.ts (renamed from packages/taler-wallet-core/src/operations/tip.ts)242
-rw-r--r--packages/taler-wallet-core/src/operations/transactions.ts84
7 files changed, 217 insertions, 215 deletions
diff --git a/packages/taler-wallet-core/src/operations/backup/export.ts b/packages/taler-wallet-core/src/operations/backup/export.ts
index 21ba5dc37..c9446a05f 100644
--- a/packages/taler-wallet-core/src/operations/backup/export.ts
+++ b/packages/taler-wallet-core/src/operations/backup/export.ts
@@ -96,7 +96,7 @@ export async function exportBackup(
x.purchases,
x.refreshGroups,
x.backupProviders,
- x.tips,
+ x.rewards,
x.recoupGroups,
x.withdrawalGroups,
])
@@ -184,12 +184,12 @@ export async function exportBackup(
});
});
- await tx.tips.iter().forEach((tip) => {
+ await tx.rewards.iter().forEach((tip) => {
backupTips.push({
exchange_base_url: tip.exchangeBaseUrl,
merchant_base_url: tip.merchantBaseUrl,
- merchant_tip_id: tip.merchantTipId,
- wallet_tip_id: tip.walletTipId,
+ merchant_tip_id: tip.merchantRewardId,
+ wallet_tip_id: tip.walletRewardId,
next_url: tip.next_url,
secret_seed: tip.secretSeed,
selected_denoms: tip.denomsSel.selectedDenoms.map((x) => ({
@@ -199,8 +199,8 @@ export async function exportBackup(
timestamp_finished: tip.pickedUpTimestamp,
timestamp_accepted: tip.acceptedTimestamp,
timestamp_created: tip.createdTimestamp,
- timestamp_expiration: tip.tipExpiration,
- tip_amount_raw: Amounts.stringify(tip.tipAmountRaw),
+ timestamp_expiration: tip.rewardExpiration,
+ tip_amount_raw: Amounts.stringify(tip.rewardAmountRaw),
selected_denoms_uid: tip.denomSelUid,
});
});
@@ -244,11 +244,11 @@ export async function exportBackup(
refresh_group_id: coin.coinSource.refreshGroupId,
};
break;
- case CoinSourceType.Tip:
+ case CoinSourceType.Reward:
bcs = {
- type: BackupCoinSourceType.Tip,
+ type: BackupCoinSourceType.Reward,
coin_index: coin.coinSource.coinIndex,
- wallet_tip_id: coin.coinSource.walletTipId,
+ wallet_tip_id: coin.coinSource.walletRewardId,
};
break;
case CoinSourceType.Withdraw:
diff --git a/packages/taler-wallet-core/src/operations/backup/import.ts b/packages/taler-wallet-core/src/operations/backup/import.ts
index b161aa8f2..a53b624e8 100644
--- a/packages/taler-wallet-core/src/operations/backup/import.ts
+++ b/packages/taler-wallet-core/src/operations/backup/import.ts
@@ -56,7 +56,7 @@ import {
WithdrawalGroupStatus,
WithdrawalRecordType,
RefreshOperationStatus,
- TipRecordStatus,
+ RewardRecordStatus,
} from "../../db.js";
import { InternalWalletState } from "../../internal-wallet-state.js";
import { assertUnreachable } from "../../util/assertUnreachable.js";
@@ -250,11 +250,11 @@ export async function importCoin(
refreshGroupId: backupCoin.coin_source.refresh_group_id,
};
break;
- case BackupCoinSourceType.Tip:
+ case BackupCoinSourceType.Reward:
coinSource = {
- type: CoinSourceType.Tip,
+ type: CoinSourceType.Reward,
coinIndex: backupCoin.coin_source.coin_index,
- walletTipId: backupCoin.coin_source.wallet_tip_id,
+ walletRewardId: backupCoin.coin_source.wallet_tip_id,
};
break;
case BackupCoinSourceType.Withdraw:
@@ -311,7 +311,7 @@ export async function importBackup(
x.purchases,
x.refreshGroups,
x.backupProviders,
- x.tips,
+ x.rewards,
x.recoupGroups,
x.withdrawalGroups,
x.tombstones,
@@ -812,13 +812,13 @@ export async function importBackup(
for (const backupTip of backupBlob.tips) {
const ts = constructTombstone({
- tag: TombstoneTag.DeleteTip,
+ tag: TombstoneTag.DeleteReward,
walletTipId: backupTip.wallet_tip_id,
});
if (tombstoneSet.has(ts)) {
continue;
}
- const existingTip = await tx.tips.get(backupTip.wallet_tip_id);
+ const existingTip = await tx.rewards.get(backupTip.wallet_tip_id);
if (!existingTip) {
const tipAmountRaw = Amounts.parseOrThrow(backupTip.tip_amount_raw);
const denomsSel = await getDenomSelStateFromBackup(
@@ -827,22 +827,22 @@ export async function importBackup(
backupTip.exchange_base_url,
backupTip.selected_denoms,
);
- await tx.tips.put({
+ await tx.rewards.put({
acceptedTimestamp: backupTip.timestamp_accepted,
createdTimestamp: backupTip.timestamp_created,
denomsSel,
next_url: backupTip.next_url,
exchangeBaseUrl: backupTip.exchange_base_url,
merchantBaseUrl: backupTip.exchange_base_url,
- merchantTipId: backupTip.merchant_tip_id,
+ merchantRewardId: backupTip.merchant_tip_id,
pickedUpTimestamp: backupTip.timestamp_finished,
secretSeed: backupTip.secret_seed,
- tipAmountEffective: Amounts.stringify(denomsSel.totalCoinValue),
- tipAmountRaw: Amounts.stringify(tipAmountRaw),
- tipExpiration: backupTip.timestamp_expiration,
- walletTipId: backupTip.wallet_tip_id,
+ rewardAmountEffective: Amounts.stringify(denomsSel.totalCoinValue),
+ rewardAmountRaw: Amounts.stringify(tipAmountRaw),
+ rewardExpiration: backupTip.timestamp_expiration,
+ walletRewardId: backupTip.wallet_tip_id,
denomSelUid: backupTip.selected_denoms_uid,
- status: TipRecordStatus.Done, // FIXME!
+ status: RewardRecordStatus.Done, // FIXME!
});
}
}
@@ -863,8 +863,8 @@ export async function importBackup(
} else if (type === TombstoneTag.DeleteRefund) {
// Nothing required, will just prevent display
// in the transactions list
- } else if (type === TombstoneTag.DeleteTip) {
- await tx.tips.delete(rest[0]);
+ } else if (type === TombstoneTag.DeleteReward) {
+ await tx.rewards.delete(rest[0]);
} else if (type === TombstoneTag.DeleteWithdrawalGroup) {
await tx.withdrawalGroups.delete(rest[0]);
} else {
diff --git a/packages/taler-wallet-core/src/operations/common.ts b/packages/taler-wallet-core/src/operations/common.ts
index cc16a4704..7a8b78b53 100644
--- a/packages/taler-wallet-core/src/operations/common.ts
+++ b/packages/taler-wallet-core/src/operations/common.ts
@@ -57,7 +57,7 @@ import {
PurchaseRecord,
RecoupGroupRecord,
RefreshGroupRecord,
- TipRecord,
+ RewardRecord,
WithdrawalGroupRecord,
} from "../db.js";
import { makeErrorDetail, TalerError } from "@gnu-taler/taler-util";
@@ -293,10 +293,10 @@ function convertTaskToTransactionId(
tag: TransactionType.Refresh,
refreshGroupId: parsedTaskId.refreshGroupId,
});
- case PendingTaskType.TipPickup:
+ case PendingTaskType.RewardPickup:
return constructTransactionIdentifier({
- tag: TransactionType.Tip,
- walletTipId: parsedTaskId.walletTipId,
+ tag: TransactionType.Reward,
+ walletRewardId: parsedTaskId.walletRewardId,
});
case PendingTaskType.PeerPushDebit:
return constructTransactionIdentifier({
@@ -515,7 +515,7 @@ export enum TombstoneTag {
DeleteWithdrawalGroup = "delete-withdrawal-group",
DeleteReserve = "delete-reserve",
DeletePayment = "delete-payment",
- DeleteTip = "delete-tip",
+ DeleteReward = "delete-reward",
DeleteRefreshGroup = "delete-refresh-group",
DeleteDepositGroup = "delete-deposit-group",
DeleteRefund = "delete-refund",
@@ -601,7 +601,9 @@ export function runLongpollAsync(
};
res = await reqFn(cts.token);
} catch (e) {
- await storePendingTaskError(ws, retryTag, getErrorDetailFromException(e));
+ const errDetail = getErrorDetailFromException(e);
+ logger.warn(`got error during long-polling: ${j2s(errDetail)}`);
+ await storePendingTaskError(ws, retryTag, errDetail);
return;
} finally {
delete ws.activeLongpoll[retryTag];
@@ -622,7 +624,7 @@ export type ParsedTombstone =
| { tag: TombstoneTag.DeleteRefund; refundGroupId: string }
| { tag: TombstoneTag.DeleteReserve; reservePub: string }
| { tag: TombstoneTag.DeleteRefreshGroup; refreshGroupId: string }
- | { tag: TombstoneTag.DeleteTip; walletTipId: string }
+ | { tag: TombstoneTag.DeleteReward; walletTipId: string }
| { tag: TombstoneTag.DeletePayment; proposalId: string };
export function constructTombstone(p: ParsedTombstone): TombstoneIdStr {
@@ -637,7 +639,7 @@ export function constructTombstone(p: ParsedTombstone): TombstoneIdStr {
return `tmb:${p.tag}:${p.proposalId}` as TombstoneIdStr;
case TombstoneTag.DeleteRefreshGroup:
return `tmb:${p.tag}:${p.refreshGroupId}` as TombstoneIdStr;
- case TombstoneTag.DeleteTip:
+ case TombstoneTag.DeleteReward:
return `tmb:${p.tag}:${p.walletTipId}` as TombstoneIdStr;
default:
assertUnreachable(p);
@@ -810,7 +812,7 @@ export type ParsedTaskIdentifier =
| { tag: PendingTaskType.PeerPushDebit; pursePub: string }
| { tag: PendingTaskType.Purchase; proposalId: string }
| { tag: PendingTaskType.Recoup; recoupGroupId: string }
- | { tag: PendingTaskType.TipPickup; walletTipId: string }
+ | { tag: PendingTaskType.RewardPickup; walletRewardId: string }
| { tag: PendingTaskType.Refresh; refreshGroupId: string };
export function parseTaskIdentifier(x: string): ParsedTaskIdentifier {
@@ -844,8 +846,8 @@ export function parseTaskIdentifier(x: string): ParsedTaskIdentifier {
return { tag: type, recoupGroupId: rest[0] };
case PendingTaskType.Refresh:
return { tag: type, refreshGroupId: rest[0] };
- case PendingTaskType.TipPickup:
- return { tag: type, walletTipId: rest[0] };
+ case PendingTaskType.RewardPickup:
+ return { tag: type, walletRewardId: rest[0] };
case PendingTaskType.Withdraw:
return { tag: type, withdrawalGroupId: rest[0] };
default:
@@ -877,8 +879,8 @@ export function constructTaskIdentifier(p: ParsedTaskIdentifier): TaskId {
return `${p.tag}:${p.recoupGroupId}` as TaskId;
case PendingTaskType.Refresh:
return `${p.tag}:${p.refreshGroupId}` as TaskId;
- case PendingTaskType.TipPickup:
- return `${p.tag}:${p.walletTipId}` as TaskId;
+ case PendingTaskType.RewardPickup:
+ return `${p.tag}:${p.walletRewardId}` as TaskId;
case PendingTaskType.Withdraw:
return `${p.tag}:${p.withdrawalGroupId}` as TaskId;
default:
@@ -899,8 +901,8 @@ export namespace TaskIdentifiers {
export function forExchangeCheckRefresh(exch: ExchangeRecord): TaskId {
return `${PendingTaskType.ExchangeCheckRefresh}:${exch.baseUrl}` as TaskId;
}
- export function forTipPickup(tipRecord: TipRecord): TaskId {
- return `${PendingTaskType.TipPickup}:${tipRecord.walletTipId}` as TaskId;
+ export function forTipPickup(tipRecord: RewardRecord): TaskId {
+ return `${PendingTaskType.RewardPickup}:${tipRecord.walletRewardId}` as TaskId;
}
export function forRefresh(refreshGroupRecord: RefreshGroupRecord): TaskId {
return `${PendingTaskType.Refresh}:${refreshGroupRecord.refreshGroupId}` as TaskId;
diff --git a/packages/taler-wallet-core/src/operations/pending.ts b/packages/taler-wallet-core/src/operations/pending.ts
index 870437e2e..cc9217d67 100644
--- a/packages/taler-wallet-core/src/operations/pending.ts
+++ b/packages/taler-wallet-core/src/operations/pending.ts
@@ -32,7 +32,7 @@ import {
PeerPushPaymentIncomingStatus,
PeerPullPaymentInitiationStatus,
WithdrawalGroupStatus,
- TipRecordStatus,
+ RewardRecordStatus,
DepositOperationStatus,
} from "../db.js";
import {
@@ -232,17 +232,17 @@ async function gatherDepositPending(
async function gatherTipPending(
ws: InternalWalletState,
tx: GetReadOnlyAccess<{
- tips: typeof WalletStoresV1.tips;
+ rewards: typeof WalletStoresV1.rewards;
operationRetries: typeof WalletStoresV1.operationRetries;
}>,
now: AbsoluteTime,
resp: PendingOperationsResponse,
): Promise<void> {
const range = GlobalIDB.KeyRange.bound(
- TipRecordStatus.PendingPickup,
- TipRecordStatus.PendingPickup,
+ RewardRecordStatus.PendingPickup,
+ RewardRecordStatus.PendingPickup,
);
- await tx.tips.indexes.byStatus.iter(range).forEachAsync(async (tip) => {
+ await tx.rewards.indexes.byStatus.iter(range).forEachAsync(async (tip) => {
// FIXME: The tip record needs a proper status field!
if (tip.pickedUpTimestamp) {
return;
@@ -252,13 +252,13 @@ async function gatherTipPending(
const timestampDue = retryRecord?.retryInfo.nextRetry ?? AbsoluteTime.now();
if (tip.acceptedTimestamp) {
resp.pendingOperations.push({
- type: PendingTaskType.TipPickup,
+ type: PendingTaskType.RewardPickup,
...getPendingCommon(ws, opId, timestampDue),
givesLifeness: true,
timestampDue: retryRecord?.retryInfo.nextRetry ?? AbsoluteTime.now(),
merchantBaseUrl: tip.merchantBaseUrl,
- tipId: tip.walletTipId,
- merchantTipId: tip.merchantTipId,
+ tipId: tip.walletRewardId,
+ merchantTipId: tip.merchantRewardId,
});
}
});
@@ -494,7 +494,7 @@ export async function getPendingOperations(
x.refreshGroups,
x.coins,
x.withdrawalGroups,
- x.tips,
+ x.rewards,
x.purchases,
x.planchets,
x.depositGroups,
diff --git a/packages/taler-wallet-core/src/operations/recoup.ts b/packages/taler-wallet-core/src/operations/recoup.ts
index dea2d4b16..abeca1119 100644
--- a/packages/taler-wallet-core/src/operations/recoup.ts
+++ b/packages/taler-wallet-core/src/operations/recoup.ts
@@ -82,7 +82,7 @@ async function putGroupAsFinished(
await tx.recoupGroups.put(recoupGroup);
}
-async function recoupTipCoin(
+async function recoupRewardCoin(
ws: InternalWalletState,
recoupGroupId: string,
coinIdx: number,
@@ -482,8 +482,8 @@ async function processRecoup(
const cs = coin.coinSource;
switch (cs.type) {
- case CoinSourceType.Tip:
- return recoupTipCoin(ws, recoupGroupId, coinIdx, coin);
+ case CoinSourceType.Reward:
+ return recoupRewardCoin(ws, recoupGroupId, coinIdx, coin);
case CoinSourceType.Refresh:
return recoupRefreshCoin(ws, recoupGroupId, coinIdx, coin, cs);
case CoinSourceType.Withdraw:
diff --git a/packages/taler-wallet-core/src/operations/tip.ts b/packages/taler-wallet-core/src/operations/reward.ts
index e56fb1e8d..58c745780 100644
--- a/packages/taler-wallet-core/src/operations/tip.ts
+++ b/packages/taler-wallet-core/src/operations/reward.ts
@@ -48,8 +48,8 @@ import {
CoinRecord,
CoinSourceType,
DenominationRecord,
- TipRecord,
- TipRecordStatus,
+ RewardRecord,
+ RewardRecordStatus,
} from "../db.js";
import { makeErrorDetail } from "@gnu-taler/taler-util";
import { InternalWalletState } from "../internal-wallet-state.js";
@@ -84,31 +84,31 @@ const logger = new Logger("operations/tip.ts");
/**
* Get the (DD37-style) transaction status based on the
- * database record of a tip.
+ * database record of a reward.
*/
-export function computeTipTransactionStatus(
- tipRecord: TipRecord,
+export function computeRewardTransactionStatus(
+ tipRecord: RewardRecord,
): TransactionState {
switch (tipRecord.status) {
- case TipRecordStatus.Done:
+ case RewardRecordStatus.Done:
return {
major: TransactionMajorState.Done,
};
- case TipRecordStatus.Aborted:
+ case RewardRecordStatus.Aborted:
return {
major: TransactionMajorState.Aborted,
};
- case TipRecordStatus.PendingPickup:
+ case RewardRecordStatus.PendingPickup:
return {
major: TransactionMajorState.Pending,
minor: TransactionMinorState.Pickup,
};
- case TipRecordStatus.DialogAccept:
+ case RewardRecordStatus.DialogAccept:
return {
major: TransactionMajorState.Dialog,
minor: TransactionMinorState.Proposed,
};
- case TipRecordStatus.SuspendidPickup:
+ case RewardRecordStatus.SuspendidPickup:
return {
major: TransactionMajorState.Pending,
minor: TransactionMinorState.Pickup,
@@ -119,18 +119,18 @@ export function computeTipTransactionStatus(
}
export function computeTipTransactionActions(
- tipRecord: TipRecord,
+ tipRecord: RewardRecord,
): TransactionAction[] {
switch (tipRecord.status) {
- case TipRecordStatus.Done:
+ case RewardRecordStatus.Done:
return [TransactionAction.Delete];
- case TipRecordStatus.Aborted:
+ case RewardRecordStatus.Aborted:
return [TransactionAction.Delete];
- case TipRecordStatus.PendingPickup:
+ case RewardRecordStatus.PendingPickup:
return [TransactionAction.Suspend, TransactionAction.Fail];
- case TipRecordStatus.SuspendidPickup:
+ case RewardRecordStatus.SuspendidPickup:
return [TransactionAction.Resume, TransactionAction.Fail];
- case TipRecordStatus.DialogAccept:
+ case RewardRecordStatus.DialogAccept:
return [TransactionAction.Abort];
default:
assertUnreachable(tipRecord.status);
@@ -147,9 +147,9 @@ export async function prepareTip(
}
let tipRecord = await ws.db
- .mktx((x) => [x.tips])
+ .mktx((x) => [x.rewards])
.runReadOnly(async (tx) => {
- return tx.tips.indexes.byMerchantTipIdAndBaseUrl.get([
+ return tx.rewards.indexes.byMerchantTipIdAndBaseUrl.get([
res.merchantTipId,
res.merchantBaseUrl,
]);
@@ -194,44 +194,44 @@ export async function prepareTip(
const secretSeed = encodeCrock(getRandomBytes(64));
const denomSelUid = encodeCrock(getRandomBytes(32));
- const newTipRecord: TipRecord = {
- walletTipId: walletTipId,
+ const newTipRecord: RewardRecord = {
+ walletRewardId: walletTipId,
acceptedTimestamp: undefined,
- status: TipRecordStatus.DialogAccept,
- tipAmountRaw: Amounts.stringify(amount),
- tipExpiration: tipPickupStatus.expiration,
+ status: RewardRecordStatus.DialogAccept,
+ rewardAmountRaw: Amounts.stringify(amount),
+ rewardExpiration: tipPickupStatus.expiration,
exchangeBaseUrl: tipPickupStatus.exchange_url,
next_url: tipPickupStatus.next_url,
merchantBaseUrl: res.merchantBaseUrl,
createdTimestamp: TalerPreciseTimestamp.now(),
- merchantTipId: res.merchantTipId,
- tipAmountEffective: Amounts.stringify(selectedDenoms.totalCoinValue),
+ merchantRewardId: res.merchantTipId,
+ rewardAmountEffective: Amounts.stringify(selectedDenoms.totalCoinValue),
denomsSel: selectedDenoms,
pickedUpTimestamp: undefined,
secretSeed,
denomSelUid,
};
await ws.db
- .mktx((x) => [x.tips])
+ .mktx((x) => [x.rewards])
.runReadWrite(async (tx) => {
- await tx.tips.put(newTipRecord);
+ await tx.rewards.put(newTipRecord);
});
tipRecord = newTipRecord;
}
const transactionId = constructTransactionIdentifier({
- tag: TransactionType.Tip,
- walletTipId: tipRecord.walletTipId,
+ tag: TransactionType.Reward,
+ walletRewardId: tipRecord.walletRewardId,
});
const tipStatus: PrepareTipResult = {
accepted: !!tipRecord && !!tipRecord.acceptedTimestamp,
- tipAmountRaw: Amounts.stringify(tipRecord.tipAmountRaw),
+ rewardAmountRaw: Amounts.stringify(tipRecord.rewardAmountRaw),
exchangeBaseUrl: tipRecord.exchangeBaseUrl,
merchantBaseUrl: tipRecord.merchantBaseUrl,
- expirationTimestamp: tipRecord.tipExpiration,
- tipAmountEffective: Amounts.stringify(tipRecord.tipAmountEffective),
- walletTipId: tipRecord.walletTipId,
+ expirationTimestamp: tipRecord.rewardExpiration,
+ rewardAmountEffective: Amounts.stringify(tipRecord.rewardAmountEffective),
+ walletRewardId: tipRecord.walletRewardId,
transactionId,
};
@@ -243,25 +243,25 @@ export async function processTip(
walletTipId: string,
): Promise<TaskRunResult> {
const tipRecord = await ws.db
- .mktx((x) => [x.tips])
+ .mktx((x) => [x.rewards])
.runReadOnly(async (tx) => {
- return tx.tips.get(walletTipId);
+ return tx.rewards.get(walletTipId);
});
if (!tipRecord) {
return TaskRunResult.finished();
}
switch (tipRecord.status) {
- case TipRecordStatus.Aborted:
- case TipRecordStatus.DialogAccept:
- case TipRecordStatus.Done:
- case TipRecordStatus.SuspendidPickup:
+ case RewardRecordStatus.Aborted:
+ case RewardRecordStatus.DialogAccept:
+ case RewardRecordStatus.Done:
+ case RewardRecordStatus.SuspendidPickup:
return TaskRunResult.finished();
}
const transactionId = constructTransactionIdentifier({
- tag: TransactionType.Tip,
- walletTipId,
+ tag: TransactionType.Reward,
+ walletRewardId: walletTipId,
});
const denomsForWithdraw = tipRecord.denomsSel;
@@ -300,7 +300,7 @@ export async function processTip(
}
const tipStatusUrl = new URL(
- `tips/${tipRecord.merchantTipId}/pickup`,
+ `tips/${tipRecord.merchantRewardId}/pickup`,
tipRecord.merchantBaseUrl,
);
@@ -384,9 +384,9 @@ export async function processTip(
coinPriv: planchet.coinPriv,
coinPub: planchet.coinPub,
coinSource: {
- type: CoinSourceType.Tip,
+ type: CoinSourceType.Reward,
coinIndex: i,
- walletTipId: walletTipId,
+ walletRewardId: walletTipId,
},
sourceTransactionId: transactionId,
denomPubHash: denom.denomPubHash,
@@ -401,20 +401,20 @@ export async function processTip(
}
const transitionInfo = await ws.db
- .mktx((x) => [x.coins, x.coinAvailability, x.denominations, x.tips])
+ .mktx((x) => [x.coins, x.coinAvailability, x.denominations, x.rewards])
.runReadWrite(async (tx) => {
- const tr = await tx.tips.get(walletTipId);
+ const tr = await tx.rewards.get(walletTipId);
if (!tr) {
return;
}
- if (tr.status !== TipRecordStatus.PendingPickup) {
+ if (tr.status !== RewardRecordStatus.PendingPickup) {
return;
}
- const oldTxState = computeTipTransactionStatus(tr);
+ const oldTxState = computeRewardTransactionStatus(tr);
tr.pickedUpTimestamp = TalerPreciseTimestamp.now();
- tr.status = TipRecordStatus.Done;
- await tx.tips.put(tr);
- const newTxState = computeTipTransactionStatus(tr);
+ tr.status = RewardRecordStatus.Done;
+ await tx.rewards.put(tr);
+ const newTxState = computeRewardTransactionStatus(tr);
for (const cr of newCoinRecords) {
await makeCoinAvailable(ws, tx, cr);
}
@@ -432,26 +432,26 @@ export async function acceptTip(
walletTipId: string,
): Promise<AcceptTipResponse> {
const transactionId = constructTransactionIdentifier({
- tag: TransactionType.Tip,
- walletTipId,
+ tag: TransactionType.Reward,
+ walletRewardId: walletTipId,
});
const dbRes = await ws.db
- .mktx((x) => [x.tips])
+ .mktx((x) => [x.rewards])
.runReadWrite(async (tx) => {
- const tipRecord = await tx.tips.get(walletTipId);
+ const tipRecord = await tx.rewards.get(walletTipId);
if (!tipRecord) {
logger.error("tip not found");
return;
}
- if (tipRecord.status != TipRecordStatus.DialogAccept) {
+ if (tipRecord.status != RewardRecordStatus.DialogAccept) {
logger.warn("Unable to accept tip in the current state");
return { tipRecord };
}
- const oldTxState = computeTipTransactionStatus(tipRecord);
+ const oldTxState = computeRewardTransactionStatus(tipRecord);
tipRecord.acceptedTimestamp = TalerPreciseTimestamp.now();
- tipRecord.status = TipRecordStatus.PendingPickup;
- await tx.tips.put(tipRecord);
- const newTxState = computeTipTransactionStatus(tipRecord);
+ tipRecord.status = RewardRecordStatus.PendingPickup;
+ await tx.rewards.put(tipRecord);
+ const newTxState = computeRewardTransactionStatus(tipRecord);
return { tipRecord, transitionInfo: { oldTxState, newTxState } };
});
@@ -465,53 +465,53 @@ export async function acceptTip(
return {
transactionId: constructTransactionIdentifier({
- tag: TransactionType.Tip,
- walletTipId: walletTipId,
+ tag: TransactionType.Reward,
+ walletRewardId: walletTipId,
}),
next_url: tipRecord.next_url,
};
}
-export async function suspendTipTransaction(
+export async function suspendRewardTransaction(
ws: InternalWalletState,
- walletTipId: string,
+ walletRewardId: string,
): Promise<void> {
const taskId = constructTaskIdentifier({
- tag: PendingTaskType.TipPickup,
- walletTipId,
+ tag: PendingTaskType.RewardPickup,
+ walletRewardId: walletRewardId,
});
const transactionId = constructTransactionIdentifier({
- tag: TransactionType.Tip,
- walletTipId,
+ tag: TransactionType.Reward,
+ walletRewardId: walletRewardId,
});
stopLongpolling(ws, taskId);
const transitionInfo = await ws.db
- .mktx((x) => [x.tips])
+ .mktx((x) => [x.rewards])
.runReadWrite(async (tx) => {
- const tipRec = await tx.tips.get(walletTipId);
+ const tipRec = await tx.rewards.get(walletRewardId);
if (!tipRec) {
- logger.warn(`transaction tip ${walletTipId} not found`);
+ logger.warn(`transaction tip ${walletRewardId} not found`);
return;
}
- let newStatus: TipRecordStatus | undefined = undefined;
+ let newStatus: RewardRecordStatus | undefined = undefined;
switch (tipRec.status) {
- case TipRecordStatus.Done:
- case TipRecordStatus.SuspendidPickup:
- case TipRecordStatus.Aborted:
- case TipRecordStatus.DialogAccept:
+ case RewardRecordStatus.Done:
+ case RewardRecordStatus.SuspendidPickup:
+ case RewardRecordStatus.Aborted:
+ case RewardRecordStatus.DialogAccept:
break;
- case TipRecordStatus.PendingPickup:
- newStatus = TipRecordStatus.SuspendidPickup;
+ case RewardRecordStatus.PendingPickup:
+ newStatus = RewardRecordStatus.SuspendidPickup;
break;
default:
assertUnreachable(tipRec.status);
}
if (newStatus != null) {
- const oldTxState = computeTipTransactionStatus(tipRec);
+ const oldTxState = computeRewardTransactionStatus(tipRec);
tipRec.status = newStatus;
- const newTxState = computeTipTransactionStatus(tipRec);
- await tx.tips.put(tipRec);
+ const newTxState = computeRewardTransactionStatus(tipRec);
+ await tx.rewards.put(tipRec);
return {
oldTxState,
newTxState,
@@ -525,43 +525,43 @@ export async function suspendTipTransaction(
export async function resumeTipTransaction(
ws: InternalWalletState,
- walletTipId: string,
+ walletRewardId: string,
): Promise<void> {
const taskId = constructTaskIdentifier({
- tag: PendingTaskType.TipPickup,
- walletTipId,
+ tag: PendingTaskType.RewardPickup,
+ walletRewardId: walletRewardId,
});
const transactionId = constructTransactionIdentifier({
- tag: TransactionType.Tip,
- walletTipId,
+ tag: TransactionType.Reward,
+ walletRewardId: walletRewardId,
});
stopLongpolling(ws, taskId);
const transitionInfo = await ws.db
- .mktx((x) => [x.tips])
+ .mktx((x) => [x.rewards])
.runReadWrite(async (tx) => {
- const tipRec = await tx.tips.get(walletTipId);
- if (!tipRec) {
- logger.warn(`transaction tip ${walletTipId} not found`);
+ const rewardRec = await tx.rewards.get(walletRewardId);
+ if (!rewardRec) {
+ logger.warn(`transaction reward ${walletRewardId} not found`);
return;
}
- let newStatus: TipRecordStatus | undefined = undefined;
- switch (tipRec.status) {
- case TipRecordStatus.Done:
- case TipRecordStatus.PendingPickup:
- case TipRecordStatus.Aborted:
- case TipRecordStatus.DialogAccept:
+ let newStatus: RewardRecordStatus | undefined = undefined;
+ switch (rewardRec.status) {
+ case RewardRecordStatus.Done:
+ case RewardRecordStatus.PendingPickup:
+ case RewardRecordStatus.Aborted:
+ case RewardRecordStatus.DialogAccept:
break;
- case TipRecordStatus.SuspendidPickup:
- newStatus = TipRecordStatus.PendingPickup;
+ case RewardRecordStatus.SuspendidPickup:
+ newStatus = RewardRecordStatus.PendingPickup;
break;
default:
- assertUnreachable(tipRec.status);
+ assertUnreachable(rewardRec.status);
}
if (newStatus != null) {
- const oldTxState = computeTipTransactionStatus(tipRec);
- tipRec.status = newStatus;
- const newTxState = computeTipTransactionStatus(tipRec);
- await tx.tips.put(tipRec);
+ const oldTxState = computeRewardTransactionStatus(rewardRec);
+ rewardRec.status = newStatus;
+ const newTxState = computeRewardTransactionStatus(rewardRec);
+ await tx.rewards.put(rewardRec);
return {
oldTxState,
newTxState,
@@ -582,43 +582,43 @@ export async function failTipTransaction(
export async function abortTipTransaction(
ws: InternalWalletState,
- walletTipId: string,
+ walletRewardId: string,
): Promise<void> {
const taskId = constructTaskIdentifier({
- tag: PendingTaskType.TipPickup,
- walletTipId,
+ tag: PendingTaskType.RewardPickup,
+ walletRewardId: walletRewardId,
});
const transactionId = constructTransactionIdentifier({
- tag: TransactionType.Tip,
- walletTipId,
+ tag: TransactionType.Reward,
+ walletRewardId: walletRewardId,
});
stopLongpolling(ws, taskId);
const transitionInfo = await ws.db
- .mktx((x) => [x.tips])
+ .mktx((x) => [x.rewards])
.runReadWrite(async (tx) => {
- const tipRec = await tx.tips.get(walletTipId);
+ const tipRec = await tx.rewards.get(walletRewardId);
if (!tipRec) {
- logger.warn(`transaction tip ${walletTipId} not found`);
+ logger.warn(`transaction tip ${walletRewardId} not found`);
return;
}
- let newStatus: TipRecordStatus | undefined = undefined;
+ let newStatus: RewardRecordStatus | undefined = undefined;
switch (tipRec.status) {
- case TipRecordStatus.Done:
- case TipRecordStatus.Aborted:
- case TipRecordStatus.PendingPickup:
- case TipRecordStatus.DialogAccept:
+ case RewardRecordStatus.Done:
+ case RewardRecordStatus.Aborted:
+ case RewardRecordStatus.PendingPickup:
+ case RewardRecordStatus.DialogAccept:
break;
- case TipRecordStatus.SuspendidPickup:
- newStatus = TipRecordStatus.Aborted;
+ case RewardRecordStatus.SuspendidPickup:
+ newStatus = RewardRecordStatus.Aborted;
break;
default:
assertUnreachable(tipRec.status);
}
if (newStatus != null) {
- const oldTxState = computeTipTransactionStatus(tipRec);
+ const oldTxState = computeRewardTransactionStatus(tipRec);
tipRec.status = newStatus;
- const newTxState = computeTipTransactionStatus(tipRec);
- await tx.tips.put(tipRec);
+ const newTxState = computeRewardTransactionStatus(tipRec);
+ await tx.rewards.put(tipRec);
return {
oldTxState,
newTxState,
diff --git a/packages/taler-wallet-core/src/operations/transactions.ts b/packages/taler-wallet-core/src/operations/transactions.ts
index 868f00de7..a16809b36 100644
--- a/packages/taler-wallet-core/src/operations/transactions.ts
+++ b/packages/taler-wallet-core/src/operations/transactions.ts
@@ -58,7 +58,7 @@ import {
RefreshGroupRecord,
RefreshOperationStatus,
RefundGroupRecord,
- TipRecord,
+ RewardRecord,
WalletContractData,
WithdrawalGroupRecord,
WithdrawalGroupStatus,
@@ -107,11 +107,11 @@ import {
import {
abortTipTransaction,
failTipTransaction,
- computeTipTransactionStatus,
+ computeRewardTransactionStatus,
resumeTipTransaction,
- suspendTipTransaction,
+ suspendRewardTransaction,
computeTipTransactionActions,
-} from "./tip.js";
+} from "./reward.js";
import {
abortWithdrawalTransaction,
augmentPaytoUrisForWithdrawal,
@@ -187,7 +187,7 @@ function shouldSkipSearch(
*/
const txOrder: { [t in TransactionType]: number } = {
[TransactionType.Withdrawal]: 1,
- [TransactionType.Tip]: 2,
+ [TransactionType.Reward]: 2,
[TransactionType.Payment]: 3,
[TransactionType.PeerPullCredit]: 4,
[TransactionType.PeerPullDebit]: 5,
@@ -284,12 +284,12 @@ export async function getTransactionById(
throw Error(`no tx for refresh`);
}
- case TransactionType.Tip: {
- const tipId = parsedTx.walletTipId;
+ case TransactionType.Reward: {
+ const tipId = parsedTx.walletRewardId;
return await ws.db
- .mktx((x) => [x.tips, x.operationRetries])
+ .mktx((x) => [x.rewards, x.operationRetries])
.runReadWrite(async (tx) => {
- const tipRecord = await tx.tips.get(tipId);
+ const tipRecord = await tx.rewards.get(tipId);
if (!tipRecord) throw Error("not found");
const retries = await tx.operationRetries.get(
@@ -818,21 +818,21 @@ function buildTransactionForDeposit(
}
function buildTransactionForTip(
- tipRecord: TipRecord,
+ tipRecord: RewardRecord,
ort?: OperationRetryRecord,
): Transaction {
checkLogicInvariant(!!tipRecord.acceptedTimestamp);
return {
- type: TransactionType.Tip,
- txState: computeTipTransactionStatus(tipRecord),
+ type: TransactionType.Reward,
+ txState: computeRewardTransactionStatus(tipRecord),
txActions: computeTipTransactionActions(tipRecord),
- amountEffective: Amounts.stringify(tipRecord.tipAmountEffective),
- amountRaw: Amounts.stringify(tipRecord.tipAmountRaw),
+ amountEffective: Amounts.stringify(tipRecord.rewardAmountEffective),
+ amountRaw: Amounts.stringify(tipRecord.rewardAmountRaw),
timestamp: tipRecord.acceptedTimestamp,
transactionId: constructTransactionIdentifier({
- tag: TransactionType.Tip,
- walletTipId: tipRecord.walletTipId,
+ tag: TransactionType.Reward,
+ walletRewardId: tipRecord.walletRewardId,
}),
merchantBaseUrl: tipRecord.merchantBaseUrl,
...(ort?.lastError ? { error: ort.lastError } : {}),
@@ -945,7 +945,7 @@ export async function getTransactions(
x.purchases,
x.contractTerms,
x.recoupGroups,
- x.tips,
+ x.rewards,
x.tombstones,
x.withdrawalGroups,
x.refreshGroups,
@@ -1200,11 +1200,11 @@ export async function getTransactions(
);
});
- tx.tips.iter().forEachAsync(async (tipRecord) => {
+ tx.rewards.iter().forEachAsync(async (tipRecord) => {
if (
shouldSkipCurrency(
transactionsRequest,
- Amounts.parseOrThrow(tipRecord.tipAmountRaw).currency,
+ Amounts.parseOrThrow(tipRecord.rewardAmountRaw).currency,
)
) {
return;
@@ -1267,7 +1267,7 @@ export type ParsedTransactionIdentifier =
| { tag: TransactionType.PeerPushDebit; pursePub: string }
| { tag: TransactionType.Refresh; refreshGroupId: string }
| { tag: TransactionType.Refund; refundGroupId: string }
- | { tag: TransactionType.Tip; walletTipId: string }
+ | { tag: TransactionType.Reward; walletRewardId: string }
| { tag: TransactionType.Withdrawal; withdrawalGroupId: string }
| { tag: TransactionType.InternalWithdrawal; withdrawalGroupId: string };
@@ -1291,8 +1291,8 @@ export function constructTransactionIdentifier(
return `txn:${pTxId.tag}:${pTxId.refreshGroupId}` as TransactionIdStr;
case TransactionType.Refund:
return `txn:${pTxId.tag}:${pTxId.refundGroupId}` as TransactionIdStr;
- case TransactionType.Tip:
- return `txn:${pTxId.tag}:${pTxId.walletTipId}` as TransactionIdStr;
+ case TransactionType.Reward:
+ return `txn:${pTxId.tag}:${pTxId.walletRewardId}` as TransactionIdStr;
case TransactionType.Withdrawal:
return `txn:${pTxId.tag}:${pTxId.withdrawalGroupId}` as TransactionIdStr;
case TransactionType.InternalWithdrawal:
@@ -1346,10 +1346,10 @@ export function parseTransactionIdentifier(
tag: TransactionType.Refund,
refundGroupId: rest[0],
};
- case TransactionType.Tip:
+ case TransactionType.Reward:
return {
- tag: TransactionType.Tip,
- walletTipId: rest[0],
+ tag: TransactionType.Reward,
+ walletRewardId: rest[0],
};
case TransactionType.Withdrawal:
return {
@@ -1427,10 +1427,10 @@ export async function retryTransaction(
stopLongpolling(ws, taskId);
break;
}
- case TransactionType.Tip: {
+ case TransactionType.Reward: {
const taskId = constructTaskIdentifier({
- tag: PendingTaskType.TipPickup,
- walletTipId: parsedTx.walletTipId,
+ tag: PendingTaskType.RewardPickup,
+ walletRewardId: parsedTx.walletRewardId,
});
await resetPendingTaskTimeout(ws, taskId);
stopLongpolling(ws, taskId);
@@ -1522,8 +1522,8 @@ export async function suspendTransaction(
break;
case TransactionType.Refund:
throw Error("refund transactions can't be suspended or resumed");
- case TransactionType.Tip:
- await suspendTipTransaction(ws, tx.walletTipId);
+ case TransactionType.Reward:
+ await suspendRewardTransaction(ws, tx.walletRewardId);
break;
default:
assertUnreachable(tx);
@@ -1551,8 +1551,8 @@ export async function failTransaction(
return;
case TransactionType.Refund:
throw Error("can't do cancel-aborting on refund transaction");
- case TransactionType.Tip:
- await failTipTransaction(ws, tx.walletTipId);
+ case TransactionType.Reward:
+ await failTipTransaction(ws, tx.walletRewardId);
return;
case TransactionType.Refresh:
await failRefreshGroup(ws, tx.refreshGroupId);
@@ -1613,8 +1613,8 @@ export async function resumeTransaction(
break;
case TransactionType.Refund:
throw Error("refund transactions can't be suspended or resumed");
- case TransactionType.Tip:
- await resumeTipTransaction(ws, tx.walletTipId);
+ case TransactionType.Reward:
+ await resumeTipTransaction(ws, tx.walletRewardId);
break;
}
}
@@ -1763,16 +1763,16 @@ export async function deleteTransaction(
return;
}
- case TransactionType.Tip: {
- const tipId = parsedTx.walletTipId;
+ case TransactionType.Reward: {
+ const tipId = parsedTx.walletRewardId;
await ws.db
- .mktx((x) => [x.tips, x.tombstones])
+ .mktx((x) => [x.rewards, x.tombstones])
.runReadWrite(async (tx) => {
- const tipRecord = await tx.tips.get(tipId);
+ const tipRecord = await tx.rewards.get(tipId);
if (tipRecord) {
- await tx.tips.delete(tipId);
+ await tx.rewards.delete(tipId);
await tx.tombstones.put({
- id: TombstoneTag.DeleteTip + ":" + tipId,
+ id: TombstoneTag.DeleteReward + ":" + tipId,
});
}
});
@@ -1856,8 +1856,8 @@ export async function abortTransaction(
case TransactionType.Deposit:
await abortDepositGroup(ws, txId.depositGroupId);
break;
- case TransactionType.Tip:
- await abortTipTransaction(ws, txId.walletTipId);
+ case TransactionType.Reward:
+ await abortTipTransaction(ws, txId.walletRewardId);
break;
case TransactionType.Refund:
throw Error("can't abort refund transactions");