aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-wallet-core/src/db.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/taler-wallet-core/src/db.ts')
-rw-r--r--packages/taler-wallet-core/src/db.ts97
1 files changed, 63 insertions, 34 deletions
diff --git a/packages/taler-wallet-core/src/db.ts b/packages/taler-wallet-core/src/db.ts
index cebe3635b..4fc6db68a 100644
--- a/packages/taler-wallet-core/src/db.ts
+++ b/packages/taler-wallet-core/src/db.ts
@@ -27,6 +27,7 @@ import {
structuredEncapsulate,
} from "@gnu-taler/idb-bridge";
import {
+ AbsoluteTime,
AgeCommitmentProof,
AmountString,
Amounts,
@@ -51,12 +52,13 @@ import {
TalerPreciseTimestamp,
TalerProtocolDuration,
TalerProtocolTimestamp,
+ //TalerProtocolTimestamp,
TransactionIdStr,
UnblindedSignature,
WireInfo,
codecForAny,
} from "@gnu-taler/taler-util";
-import { RetryInfo, TaskIdentifiers } from "./operations/common.js";
+import { DbRetryInfo, TaskIdentifiers } from "./operations/common.js";
import {
DbAccess,
DbReadOnlyTransaction,
@@ -193,6 +195,44 @@ export function timestampPreciseToDb(
}
}
+export function timestampProtocolToDb(
+ stamp: TalerProtocolTimestamp,
+): DbProtocolTimestamp {
+ if (stamp.t_s === "never") {
+ return DB_TIMESTAMP_FOREVER as DbProtocolTimestamp;
+ } else {
+ let tUs = stamp.t_s * 1000000;
+ return tUs as DbProtocolTimestamp;
+ }
+}
+
+export function timestampProtocolFromDb(
+ stamp: DbProtocolTimestamp,
+): TalerProtocolTimestamp {
+ return TalerProtocolTimestamp.fromSeconds(Math.floor(stamp / 1000000));
+}
+
+export function timestampAbsoluteFromDb(
+ stamp: DbProtocolTimestamp | DbPreciseTimestamp,
+): AbsoluteTime {
+ if (stamp >= DB_TIMESTAMP_FOREVER) {
+ return AbsoluteTime.never();
+ }
+ return AbsoluteTime.fromMilliseconds(Math.floor(stamp / 1000));
+}
+
+export function timestampOptionalAbsoluteFromDb(
+ stamp: DbProtocolTimestamp | DbPreciseTimestamp | undefined,
+): AbsoluteTime | undefined {
+ if (stamp == null) {
+ return undefined;
+ }
+ if (stamp >= DB_TIMESTAMP_FOREVER) {
+ return AbsoluteTime.never();
+ }
+ return AbsoluteTime.fromMilliseconds(Math.floor(stamp / 1000));
+}
+
/**
* Format of the operation status code: 0x0abc_nnnn
@@ -391,22 +431,22 @@ export interface DenominationRecord {
/**
* Validity start date of the denomination.
*/
- stampStart: TalerProtocolTimestamp;
+ stampStart: DbProtocolTimestamp;
/**
* Date after which the currency can't be withdrawn anymore.
*/
- stampExpireWithdraw: TalerProtocolTimestamp;
+ stampExpireWithdraw: DbProtocolTimestamp;
/**
* Date after the denomination officially doesn't exist anymore.
*/
- stampExpireLegal: TalerProtocolTimestamp;
+ stampExpireLegal: DbProtocolTimestamp;
/**
* Data after which coins of this denomination can't be deposited anymore.
*/
- stampExpireDeposit: TalerProtocolTimestamp;
+ stampExpireDeposit: DbProtocolTimestamp;
/**
* Signature by the exchange's master key over the denomination
@@ -448,7 +488,7 @@ export interface DenominationRecord {
* Latest list issue date of the "/keys" response
* that includes this denomination.
*/
- listIssueDate: TalerProtocolTimestamp;
+ listIssueDate: DbProtocolTimestamp;
}
export namespace DenominationRecord {
@@ -460,10 +500,10 @@ export namespace DenominationRecord {
feeRefresh: Amounts.stringify(d.fees.feeRefresh),
feeRefund: Amounts.stringify(d.fees.feeRefund),
feeWithdraw: Amounts.stringify(d.fees.feeWithdraw),
- stampExpireDeposit: d.stampExpireDeposit,
- stampExpireLegal: d.stampExpireLegal,
- stampExpireWithdraw: d.stampExpireWithdraw,
- stampStart: d.stampStart,
+ stampExpireDeposit: timestampProtocolFromDb(d.stampExpireDeposit),
+ stampExpireLegal: timestampProtocolFromDb(d.stampExpireLegal),
+ stampExpireWithdraw: timestampProtocolFromDb(d.stampExpireWithdraw),
+ stampStart: timestampProtocolFromDb(d.stampStart),
value: Amounts.stringify(d.value),
exchangeBaseUrl: d.exchangeBaseUrl,
};
@@ -471,9 +511,9 @@ export namespace DenominationRecord {
}
export interface ExchangeSignkeysRecord {
- stampStart: TalerProtocolTimestamp;
- stampExpire: TalerProtocolTimestamp;
- stampEnd: TalerProtocolTimestamp;
+ stampStart: DbProtocolTimestamp;
+ stampExpire: DbProtocolTimestamp;
+ stampEnd: DbProtocolTimestamp;
signkeyPub: EddsaPublicKeyString;
masterSig: EddsaSignatureString;
@@ -591,11 +631,6 @@ export enum ExchangeEntryDbUpdateStatus {
}
/**
- * Timestamp stored as a IEEE 754 double, in milliseconds.
- */
-export type DbIndexableTimestampMs = number;
-
-/**
* Exchange record as stored in the wallet's database.
*/
export interface ExchangeEntryRecord {
@@ -634,13 +669,8 @@ export interface ExchangeEntryRecord {
/**
* Next scheduled update for the exchange.
- *
- * (This field must always be present, so we can index on the timestamp.)
- *
- * FIXME: To index on the timestamp, this needs to be a number of
- * binary timestamp!
*/
- nextUpdateStampMs: DbIndexableTimestampMs;
+ nextUpdateStamp: DbPreciseTimestamp;
lastKeysEtag: string | undefined;
@@ -650,7 +680,7 @@ export interface ExchangeEntryRecord {
* Updated whenever the exchange's denominations are updated or when
* the refresh check has been done.
*/
- nextRefreshCheckStampMs: DbIndexableTimestampMs;
+ nextRefreshCheckStamp: DbPreciseTimestamp;
/**
* Public key of the reserve that we're currently using for
@@ -873,7 +903,7 @@ export interface RewardRecord {
/**
* Timestamp, the tip can't be picked up anymore after this deadline.
*/
- rewardExpiration: TalerProtocolTimestamp;
+ rewardExpiration: DbProtocolTimestamp;
/**
* The exchange that will sign our coins, chosen by the merchant.
@@ -1287,7 +1317,7 @@ export interface PurchaseRecord {
/**
* Continue querying the refund status until this deadline has expired.
*/
- autoRefundDeadline: TalerProtocolTimestamp | undefined;
+ autoRefundDeadline: DbProtocolTimestamp | undefined;
/**
* How much merchant has refund to be taken but the wallet
@@ -1668,7 +1698,7 @@ export interface DepositTrackingInfo {
// Raw wire transfer identifier of the deposit.
wireTransferId: string;
// When was the wire transfer given to the bank.
- timestampExecuted: TalerProtocolTimestamp;
+ timestampExecuted: DbProtocolTimestamp;
// Total amount transfer for this wtid (including fees)
amountRaw: AmountString;
// Wire fee amount for this exchange
@@ -1690,7 +1720,7 @@ export interface DepositGroupRecord {
*/
amount: AmountString;
- wireTransferDeadline: TalerProtocolTimestamp;
+ wireTransferDeadline: DbProtocolTimestamp;
merchantPub: string;
merchantPriv: string;
@@ -1831,7 +1861,7 @@ export interface PeerPushDebitRecord {
*/
contractEncNonce: string;
- purseExpiration: TalerProtocolTimestamp;
+ purseExpiration: DbProtocolTimestamp;
timestampCreated: DbPreciseTimestamp;
@@ -2077,7 +2107,7 @@ export interface OperationRetryRecord {
lastError?: TalerErrorDetail;
- retryInfo: RetryInfo;
+ retryInfo: DbRetryInfo;
}
/**
@@ -2130,9 +2160,8 @@ export interface UserAttentionRecord {
/**
* When the notification was created.
- * FIXME: This should be a TalerPreciseTimestamp
*/
- createdMs: number;
+ created: DbPreciseTimestamp;
/**
* When the user mark this notification as read.
@@ -2233,7 +2262,7 @@ export interface RefundItemRecord {
/**
* Execution time as claimed by the merchant
*/
- executionTime: TalerProtocolTimestamp;
+ executionTime: DbProtocolTimestamp;
/**
* Time when the wallet became aware of the refund.