diff options
author | Sebastian <sebasjm@gmail.com> | 2024-03-08 12:19:20 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2024-03-08 12:19:20 -0300 |
commit | e0e82cdf07930d766081e42203c5a4e66d43191f (patch) | |
tree | 0c0b96cb88d701c7b19b0ef34ec1c67255a2f49e /packages/taler-util/src | |
parent | b3ae213bc5987fbb6a2ce5c08d626f9f65508b03 (diff) | |
download | wallet-core-e0e82cdf07930d766081e42203c5a4e66d43191f.tar.xz |
wip #8489
Diffstat (limited to 'packages/taler-util/src')
-rw-r--r-- | packages/taler-util/src/http-client/bank-conversion.ts | 13 | ||||
-rw-r--r-- | packages/taler-util/src/http-client/bank-core.ts | 78 | ||||
-rw-r--r-- | packages/taler-util/src/http-client/utils.ts | 8 | ||||
-rw-r--r-- | packages/taler-util/src/index.ts | 1 |
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"; |