aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-wallet-core/src/operations/exchanges.ts
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2022-03-18 15:32:41 +0100
committerFlorian Dold <florian@dold.me>2022-03-21 19:20:48 +0100
commitf8d12f7b0d4af1b1769b89e80c87f9c169678564 (patch)
tree2478696c7bc1efc6d090b93aa340de542a7dccd9 /packages/taler-wallet-core/src/operations/exchanges.ts
parent32cd54e11d80bde0274b3c0238f8f5bd00ff83cb (diff)
downloadwallet-core-f8d12f7b0d4af1b1769b89e80c87f9c169678564.tar.xz
wallet: t_s/d_us migration
Diffstat (limited to 'packages/taler-wallet-core/src/operations/exchanges.ts')
-rw-r--r--packages/taler-wallet-core/src/operations/exchanges.ts66
1 files changed, 40 insertions, 26 deletions
diff --git a/packages/taler-wallet-core/src/operations/exchanges.ts b/packages/taler-wallet-core/src/operations/exchanges.ts
index 536d4e3bf..df7eee76d 100644
--- a/packages/taler-wallet-core/src/operations/exchanges.ts
+++ b/packages/taler-wallet-core/src/operations/exchanges.ts
@@ -28,8 +28,6 @@ import {
durationFromSpec,
ExchangeSignKeyJson,
ExchangeWireJson,
- getTimestampNow,
- isTimestampExpired,
Logger,
NotificationType,
parsePaytoUri,
@@ -37,13 +35,15 @@ import {
TalerErrorCode,
URL,
TalerErrorDetails,
- Timestamp,
+ AbsoluteTime,
hashDenomPub,
LibtoolVersion,
codecForAny,
DenominationPubKey,
DenomKeyType,
ExchangeKeysJson,
+ TalerProtocolTimestamp,
+ TalerProtocolDuration,
} from "@gnu-taler/taler-util";
import { decodeCrock, encodeCrock, hash } from "@gnu-taler/taler-util";
import { CryptoApi } from "../crypto/workers/cryptoApi.js";
@@ -57,7 +57,7 @@ import {
WireInfo,
} from "../db.js";
import {
- getExpiryTimestamp,
+ getExpiry,
HttpRequestLibrary,
readSuccessResponseJsonOrThrow,
readSuccessResponseTextOrThrow,
@@ -80,7 +80,7 @@ const logger = new Logger("exchanges.ts");
function denominationRecordFromKeys(
exchangeBaseUrl: string,
exchangeMasterPub: string,
- listIssueDate: Timestamp,
+ listIssueDate: TalerProtocolTimestamp,
denomIn: ExchangeDenomination,
): DenominationRecord {
let denomPub: DenominationPubKey;
@@ -132,7 +132,9 @@ async function handleExchangeUpdateError(
}
export function getExchangeRequestTimeout(): Duration {
- return { d_ms: 5000 };
+ return Duration.fromSpec({
+ seconds: 5,
+ });
}
export interface ExchangeTosDownloadResult {
@@ -362,12 +364,11 @@ export async function updateExchangeFromUrl(
async function provideExchangeRecord(
ws: InternalWalletState,
baseUrl: string,
- now: Timestamp,
+ now: AbsoluteTime,
): Promise<{
exchange: ExchangeRecord;
exchangeDetails: ExchangeDetailsRecord | undefined;
}> {
-
return await ws.db
.mktx((x) => ({
exchanges: x.exchanges,
@@ -376,14 +377,14 @@ async function provideExchangeRecord(
.runReadWrite(async (tx) => {
let exchange = await tx.exchanges.get(baseUrl);
if (!exchange) {
- const r = {
+ const r: ExchangeRecord = {
permanent: true,
baseUrl: baseUrl,
retryInfo: initRetryInfo(),
detailsPointer: undefined,
lastUpdate: undefined,
- nextUpdate: now,
- nextRefreshCheck: now,
+ nextUpdate: AbsoluteTime.toTimestamp(now),
+ nextRefreshCheck: AbsoluteTime.toTimestamp(now),
};
await tx.exchanges.put(r);
exchange = r;
@@ -400,10 +401,10 @@ interface ExchangeKeysDownloadResult {
currentDenominations: DenominationRecord[];
protocolVersion: string;
signingKeys: ExchangeSignKeyJson[];
- reserveClosingDelay: Duration;
- expiry: Timestamp;
+ reserveClosingDelay: TalerProtocolDuration;
+ expiry: TalerProtocolTimestamp;
recoup: Recoup[];
- listIssueDate: Timestamp;
+ listIssueDate: TalerProtocolTimestamp;
}
/**
@@ -475,9 +476,11 @@ async function downloadExchangeKeysInfo(
protocolVersion: exchangeKeysJsonUnchecked.version,
signingKeys: exchangeKeysJsonUnchecked.signkeys,
reserveClosingDelay: exchangeKeysJsonUnchecked.reserve_closing_delay,
- expiry: getExpiryTimestamp(resp, {
- minDuration: durationFromSpec({ hours: 1 }),
- }),
+ expiry: AbsoluteTime.toTimestamp(
+ getExpiry(resp, {
+ minDuration: durationFromSpec({ hours: 1 }),
+ }),
+ ),
recoup: exchangeKeysJsonUnchecked.recoup ?? [],
listIssueDate: exchangeKeysJsonUnchecked.list_issue_date,
};
@@ -529,12 +532,20 @@ async function updateExchangeFromUrlImpl(
exchangeDetails: ExchangeDetailsRecord;
}> {
logger.info(`updating exchange info for ${baseUrl}, forced: ${forceNow}`);
- const now = getTimestampNow();
+ const now = AbsoluteTime.now();
baseUrl = canonicalizeBaseUrl(baseUrl);
- const { exchange, exchangeDetails } = await provideExchangeRecord(ws, baseUrl, now);
+ const { exchange, exchangeDetails } = await provideExchangeRecord(
+ ws,
+ baseUrl,
+ now,
+ );
- if (!forceNow && exchangeDetails !== undefined && !isTimestampExpired(exchange.nextUpdate)) {
+ if (
+ !forceNow &&
+ exchangeDetails !== undefined &&
+ !AbsoluteTime.isExpired(AbsoluteTime.fromTimestamp(exchange.nextUpdate))
+ ) {
logger.info("using existing exchange info");
return { exchange, exchangeDetails };
}
@@ -575,7 +586,8 @@ async function updateExchangeFromUrlImpl(
timeout,
acceptedFormat,
);
- const tosHasBeenAccepted = exchangeDetails?.termsOfServiceAcceptedEtag === tosDownload.tosEtag
+ const tosHasBeenAccepted =
+ exchangeDetails?.termsOfServiceAcceptedEtag === tosDownload.tosEtag;
let recoupGroupId: string | undefined;
@@ -611,23 +623,25 @@ async function updateExchangeFromUrlImpl(
exchangeBaseUrl: r.baseUrl,
wireInfo,
termsOfServiceText: tosDownload.tosText,
- termsOfServiceAcceptedEtag: tosHasBeenAccepted ? tosDownload.tosEtag : undefined,
+ termsOfServiceAcceptedEtag: tosHasBeenAccepted
+ ? tosDownload.tosEtag
+ : undefined,
termsOfServiceContentType: tosDownload.tosContentType,
termsOfServiceLastEtag: tosDownload.tosEtag,
- termsOfServiceAcceptedTimestamp: getTimestampNow(),
+ termsOfServiceAcceptedTimestamp: TalerProtocolTimestamp.now(),
};
// FIXME: only update if pointer got updated
r.lastError = undefined;
r.retryInfo = initRetryInfo();
- r.lastUpdate = getTimestampNow();
+ r.lastUpdate = TalerProtocolTimestamp.now();
r.nextUpdate = keysInfo.expiry;
// New denominations might be available.
- r.nextRefreshCheck = getTimestampNow();
+ r.nextRefreshCheck = TalerProtocolTimestamp.now();
r.detailsPointer = {
currency: details.currency,
masterPublicKey: details.masterPublicKey,
// FIXME: only change if pointer really changed
- updateClock: getTimestampNow(),
+ updateClock: TalerProtocolTimestamp.now(),
protocolVersionRange: keysInfo.protocolVersion,
};
await tx.exchanges.put(r);