summaryrefslogtreecommitdiff
path: root/packages/taler-util/src
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2024-03-08 12:19:20 -0300
committerSebastian <sebasjm@gmail.com>2024-03-08 12:19:20 -0300
commite0e82cdf07930d766081e42203c5a4e66d43191f (patch)
tree0c0b96cb88d701c7b19b0ef34ec1c67255a2f49e /packages/taler-util/src
parentb3ae213bc5987fbb6a2ce5c08d626f9f65508b03 (diff)
downloadwallet-core-e0e82cdf07930d766081e42203c5a4e66d43191f.tar.gz
wallet-core-e0e82cdf07930d766081e42203c5a4e66d43191f.tar.bz2
wallet-core-e0e82cdf07930d766081e42203c5a4e66d43191f.zip
wip #8489
Diffstat (limited to 'packages/taler-util/src')
-rw-r--r--packages/taler-util/src/http-client/bank-conversion.ts13
-rw-r--r--packages/taler-util/src/http-client/bank-core.ts78
-rw-r--r--packages/taler-util/src/http-client/utils.ts8
-rw-r--r--packages/taler-util/src/index.ts1
4 files changed, 65 insertions, 35 deletions
diff --git a/packages/taler-util/src/http-client/bank-conversion.ts b/packages/taler-util/src/http-client/bank-conversion.ts
index 91d07b11b..ea247ccfc 100644
--- a/packages/taler-util/src/http-client/bank-conversion.ts
+++ b/packages/taler-util/src/http-client/bank-conversion.ts
@@ -39,7 +39,7 @@ import {
codecForCashoutConversionResponse,
codecForConversionBankConfig,
} from "./types.js";
-import { makeBearerTokenAuthHeader } from "./utils.js";
+import { CacheEvictor, makeBearerTokenAuthHeader, nullEvictor } from "./utils.js";
export type TalerBankConversionResultByMethod<
prop extends keyof TalerBankConversionHttpClient,
@@ -48,6 +48,10 @@ export type TalerBankConversionErrorsByMethod<
prop extends keyof TalerBankConversionHttpClient,
> = FailCasesByMethod<TalerBankConversionHttpClient, prop>;
+export enum TalerBankConversionCacheEviction {
+ UPDATE_RATE,
+}
+
/**
* The API is used by the wallets.
*/
@@ -55,12 +59,15 @@ export class TalerBankConversionHttpClient {
public readonly PROTOCOL_VERSION = "0:0:0";
httpLib: HttpRequestLibrary;
+ cacheEvictor: CacheEvictor<TalerBankConversionCacheEviction>;
constructor(
readonly baseUrl: string,
httpClient?: HttpRequestLibrary,
+ cacheEvictor?: CacheEvictor<TalerBankConversionCacheEviction>,
) {
this.httpLib = httpClient ?? createPlatformHttpLib();
+ this.cacheEvictor = cacheEvictor ?? nullEvictor;
}
isCompatible(version: string): boolean {
@@ -195,8 +202,10 @@ export class TalerBankConversionHttpClient {
body,
});
switch (resp.status) {
- case HttpStatusCode.NoContent:
+ case HttpStatusCode.NoContent: {
+ this.cacheEvictor.notifySuccess(TalerBankConversionCacheEviction.UPDATE_RATE);
return opEmptySuccess(resp);
+ }
case HttpStatusCode.Unauthorized:
return opKnownHttpFailure(resp.status, resp);
case HttpStatusCode.NotImplemented:
diff --git a/packages/taler-util/src/http-client/bank-core.ts b/packages/taler-util/src/http-client/bank-core.ts
index 40e29dcef..4131edb11 100644
--- a/packages/taler-util/src/http-client/bank-core.ts
+++ b/packages/taler-util/src/http-client/bank-core.ts
@@ -38,11 +38,6 @@ import {
opSuccessFromHttp,
opUnknownFailure,
} from "../operation.js";
-import { TalerAuthenticationHttpClient } from "./authentication.js";
-import { TalerBankConversionHttpClient } from "./bank-conversion.js";
-import { TalerBankIntegrationHttpClient } from "./bank-integration.js";
-import { TalerRevenueHttpClient } from "./bank-revenue.js";
-import { TalerWireGatewayHttpClient } from "./bank-wire.js";
import {
AccessToken,
PaginationParams,
@@ -66,9 +61,11 @@ import {
codecForWithdrawalPublicInfo,
} from "./types.js";
import {
+ CacheEvictor,
addLongPollingParam,
addPaginationParams,
makeBearerTokenAuthHeader,
+ nullEvictor,
} from "./utils.js";
export type TalerCoreBankResultByMethod<
@@ -78,25 +75,38 @@ export type TalerCoreBankErrorsByMethod<
prop extends keyof TalerCoreBankHttpClient,
> = FailCasesByMethod<TalerCoreBankHttpClient, prop>;
-/**
- * Protocol version spoken with the core bank.
- *
- * Endpoint must be ordered in the same way that in the docs
- * Response code (http and taler) must have the same order that in the docs
- * That way is easier to see changes
- *
- * Uses libtool's current:revision:age versioning.
- */
-export class TalerCoreBankHttpClient {
+export enum TalerCoreBankCacheEviction {
+ DELELE_ACCOUNT,
+ CREATE_ACCOUNT,
+ UPDATE_ACCOUNT,
+ UPDATE_PASSWORD,
+ CREATE_TRANSACTION,
+ CONFIRM_WITHDRAWAL,
+ ABORT_WITHDRAWAL,
+ CREATE_WITHDRAWAL,
+ CREATE_CASHOUT,
+}
+ /**
+ * Protocol version spoken with the core bank.
+ *
+ * Endpoint must be ordered in the same way that in the docs
+ * Response code (http and taler) must have the same order that in the docs
+ * That way is easier to see changes
+ *
+ * Uses libtool's current:revision:age versioning.
+ */
+ export class TalerCoreBankHttpClient {
public readonly PROTOCOL_VERSION = "4:0:0";
httpLib: HttpRequestLibrary;
-
+ cacheEvictor: CacheEvictor<TalerCoreBankCacheEviction>;
constructor(
readonly baseUrl: string,
httpClient?: HttpRequestLibrary,
+ cacheEvictor?: CacheEvictor<TalerCoreBankCacheEviction>,
) {
this.httpLib = httpClient ?? createPlatformHttpLib();
+ this.cacheEvictor = cacheEvictor ?? nullEvictor;
}
isCompatible(version: string): boolean {
@@ -142,8 +152,10 @@ export class TalerCoreBankHttpClient {
},
});
switch (resp.status) {
- case HttpStatusCode.Ok:
+ case HttpStatusCode.Ok: {
+ await this.cacheEvictor.notifySuccess(TalerCoreBankCacheEviction.CREATE_ACCOUNT)
return opSuccessFromHttp(resp, codecForRegisterAccountResponse());
+ }
case HttpStatusCode.BadRequest:
return opKnownHttpFailure(resp.status, resp);
case HttpStatusCode.Unauthorized:
@@ -948,47 +960,47 @@ export class TalerCoreBankHttpClient {
* https://docs.taler.net/core/api-corebank.html#taler-bank-integration-api
*
*/
- getIntegrationAPI(): TalerBankIntegrationHttpClient {
- const url = new URL(`taler-integration/`, this.baseUrl);
- return new TalerBankIntegrationHttpClient(url.href, this.httpLib);
+ getIntegrationAPI(): string {
+ return new URL(`taler-integration/`, this.baseUrl).href;
+ // return new TalerBankIntegrationHttpClient(url.href, this.httpLib);
}
/**
* https://docs.taler.net/core/api-corebank.html#taler-bank-integration-api
*
*/
- getWireGatewayAPI(username: string): TalerWireGatewayHttpClient {
- const url = new URL(
+ getWireGatewayAPI(username: string): string {
+ return new URL(
`accounts/${username}/taler-wire-gateway/`,
this.baseUrl,
- );
- return new TalerWireGatewayHttpClient(url.href, username, this.httpLib);
+ ).href;
+ // return new TalerWireGatewayHttpClient(url.href, username, this.httpLib);
}
/**
* https://docs.taler.net/core/api-corebank.html#taler-bank-integration-api
*
*/
- getRevenueAPI(username: string): TalerRevenueHttpClient {
- const url = new URL(`accounts/${username}/taler-revenue/`, this.baseUrl);
- return new TalerRevenueHttpClient(url.href, username, this.httpLib);
+ getRevenueAPI(username: string): string {
+ return new URL(`accounts/${username}/taler-revenue/`, this.baseUrl).href;
+ // return new TalerRevenueHttpClient(url.href, username, this.httpLib);
}
/**
* https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-token
*
*/
- getAuthenticationAPI(username: string): TalerAuthenticationHttpClient {
- const url = new URL(`accounts/${username}/`, this.baseUrl);
- return new TalerAuthenticationHttpClient(url.href, username, this.httpLib);
+ getAuthenticationAPI(username: string): string {
+ return new URL(`accounts/${username}/`, this.baseUrl).href;
+ // return new TalerAuthenticationHttpClient(url.href, username, this.httpLib);
}
/**
* https://docs.taler.net/core/api-corebank.html#post--accounts-$USERNAME-token
*
*/
- getConversionInfoAPI(): TalerBankConversionHttpClient {
- const url = new URL(`conversion-info/`, this.baseUrl);
- return new TalerBankConversionHttpClient(url.href, this.httpLib);
+ getConversionInfoAPI(): string {
+ return new URL(`conversion-info/`, this.baseUrl).href;
+ // TalerBankConversionHttpClient
}
}
diff --git a/packages/taler-util/src/http-client/utils.ts b/packages/taler-util/src/http-client/utils.ts
index 7abedae63..2b8920b66 100644
--- a/packages/taler-util/src/http-client/utils.ts
+++ b/packages/taler-util/src/http-client/utils.ts
@@ -65,3 +65,11 @@ export function addLongPollingParam(url: URL, param?: LongPollParams) {
url.searchParams.set("long_poll_ms", String(param.timeoutMs));
}
}
+
+export interface CacheEvictor<T> {
+ notifySuccess: (op: T) => Promise<void>;
+}
+
+export const nullEvictor: CacheEvictor<unknown> = {
+ notifySuccess: () => Promise.resolve()
+}
diff --git a/packages/taler-util/src/index.ts b/packages/taler-util/src/index.ts
index 28909facb..74ef9e8e6 100644
--- a/packages/taler-util/src/index.ts
+++ b/packages/taler-util/src/index.ts
@@ -19,6 +19,7 @@ export * from "./errors.js";
export { fnutil } from "./fnutils.js";
export * from "./helpers.js";
export * from "./http-client/bank-conversion.js";
+export * from "./http-client/authentication.js";
export * from "./http-client/bank-core.js";
export * from "./http-client/bank-integration.js";
export * from "./http-client/bank-revenue.js";