diff options
author | Florian Dold <florian@dold.me> | 2024-01-30 15:05:01 +0100 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2024-01-30 15:05:01 +0100 |
commit | 0e79a79e6b9f159b3aebc39f2e278f062c4d4410 (patch) | |
tree | 30273b53255d22a567f1f6eec4f6c11cabbd72d7 /packages/taler-util/src/http-client/bank-conversion.ts | |
parent | 2d2c43a3015a52de9a4c08a329e51b3e713380dc (diff) | |
download | wallet-core-0e79a79e6b9f159b3aebc39f2e278f062c4d4410.tar.xz |
formatting, comments, always return httpResp in OperationResult
Diffstat (limited to 'packages/taler-util/src/http-client/bank-conversion.ts')
-rw-r--r-- | packages/taler-util/src/http-client/bank-conversion.ts | 161 |
1 files changed, 112 insertions, 49 deletions
diff --git a/packages/taler-util/src/http-client/bank-conversion.ts b/packages/taler-util/src/http-client/bank-conversion.ts index 3ecb036ee..5242a5fc6 100644 --- a/packages/taler-util/src/http-client/bank-conversion.ts +++ b/packages/taler-util/src/http-client/bank-conversion.ts @@ -1,9 +1,35 @@ +/* + This file is part of GNU Taler + (C) 2022-2024 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/> + */ + +/** + * Imports. + */ import { AmountJson, Amounts } from "../amounts.js"; import { HttpRequestLibrary } from "../http-common.js"; import { HttpStatusCode } from "../http-status-codes.js"; import { createPlatformHttpLib } from "../http.js"; import { LibtoolVersion } from "../libtool-version.js"; -import { FailCasesByMethod, ResultByMethod, opEmptySuccess, opKnownHttpFailure, opSuccess, opUnknownFailure } from "../operation.js"; +import { + FailCasesByMethod, + ResultByMethod, + opEmptySuccess, + opKnownHttpFailure, + opSuccess, + opUnknownFailure, +} from "../operation.js"; import { TalerErrorCode } from "../taler-error-codes.js"; import { codecForTalerErrorDetail } from "../wallet-types.js"; import { @@ -11,12 +37,16 @@ import { TalerBankConversionApi, codecForCashinConversionResponse, codecForCashoutConversionResponse, - codecForConversionBankConfig + codecForConversionBankConfig, } from "./types.js"; import { makeBearerTokenAuthHeader } from "./utils.js"; -export type TalerBankConversionResultByMethod<prop extends keyof TalerBankConversionHttpClient> = ResultByMethod<TalerBankConversionHttpClient, prop> -export type TalerBankConversionErrorsByMethod<prop extends keyof TalerBankConversionHttpClient> = FailCasesByMethod<TalerBankConversionHttpClient, prop> +export type TalerBankConversionResultByMethod< + prop extends keyof TalerBankConversionHttpClient, +> = ResultByMethod<TalerBankConversionHttpClient, prop>; +export type TalerBankConversionErrorsByMethod< + prop extends keyof TalerBankConversionHttpClient, +> = FailCasesByMethod<TalerBankConversionHttpClient, prop>; /** * The API is used by the wallets. @@ -34,112 +64,145 @@ export class TalerBankConversionHttpClient { } isCompatible(version: string): boolean { - const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version) - return compare?.compatible ?? false + const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version); + return compare?.compatible ?? false; } /** * https://docs.taler.net/core/api-bank-conversion-info.html#get--config - * + * */ async getConfig() { const url = new URL(`config`, this.baseUrl); const resp = await this.httpLib.fetch(url.href, { - method: "GET" + method: "GET", }); switch (resp.status) { - case HttpStatusCode.Ok: return opSuccess(resp, codecForConversionBankConfig()) - case HttpStatusCode.NotImplemented: return opKnownHttpFailure(resp.status, resp) - default: return opUnknownFailure(resp, await resp.text()) + case HttpStatusCode.Ok: + return opSuccess(resp, codecForConversionBankConfig()); + case HttpStatusCode.NotImplemented: + return opKnownHttpFailure(resp.status, resp); + default: + return opUnknownFailure(resp, await resp.text()); } } /** * https://docs.taler.net/core/api-bank-conversion-info.html#get--cashin-rate - * + * */ - async getCashinRate(conversion: { debit?: AmountJson, credit?: AmountJson }) { + async getCashinRate(conversion: { debit?: AmountJson; credit?: AmountJson }) { const url = new URL(`cashin-rate`, this.baseUrl); if (conversion.debit) { - url.searchParams.set("amount_debit", Amounts.stringify(conversion.debit)) + url.searchParams.set("amount_debit", Amounts.stringify(conversion.debit)); } if (conversion.credit) { - url.searchParams.set("amount_credit", Amounts.stringify(conversion.credit)) + url.searchParams.set( + "amount_credit", + Amounts.stringify(conversion.credit), + ); } const resp = await this.httpLib.fetch(url.href, { method: "GET", }); switch (resp.status) { - case HttpStatusCode.Ok: return opSuccess(resp, codecForCashinConversionResponse()) + case HttpStatusCode.Ok: + return opSuccess(resp, codecForCashinConversionResponse()); case HttpStatusCode.BadRequest: { - const body = await resp.json() - const details = codecForTalerErrorDetail().decode(body) + const body = await resp.json(); + const details = codecForTalerErrorDetail().decode(body); switch (details.code) { - case TalerErrorCode.GENERIC_PARAMETER_MISSING: return opKnownHttpFailure(resp.status, resp); - case TalerErrorCode.GENERIC_PARAMETER_MALFORMED: return opKnownHttpFailure(resp.status, resp); - case TalerErrorCode.GENERIC_CURRENCY_MISMATCH: return opKnownHttpFailure(resp.status, resp); - default: return opUnknownFailure(resp, body) + case TalerErrorCode.GENERIC_PARAMETER_MISSING: + return opKnownHttpFailure(resp.status, resp); + case TalerErrorCode.GENERIC_PARAMETER_MALFORMED: + return opKnownHttpFailure(resp.status, resp); + case TalerErrorCode.GENERIC_CURRENCY_MISMATCH: + return opKnownHttpFailure(resp.status, resp); + default: + return opUnknownFailure(resp, body); } } - case HttpStatusCode.Conflict: return opKnownHttpFailure(resp.status, resp); - case HttpStatusCode.NotImplemented: return opKnownHttpFailure(resp.status, resp); - default: return opUnknownFailure(resp, await resp.text()) + case HttpStatusCode.Conflict: + return opKnownHttpFailure(resp.status, resp); + case HttpStatusCode.NotImplemented: + return opKnownHttpFailure(resp.status, resp); + default: + return opUnknownFailure(resp, await resp.text()); } } /** * https://docs.taler.net/core/api-bank-conversion-info.html#get--cashout-rate - * + * */ - async getCashoutRate(conversion: { debit?: AmountJson, credit?: AmountJson }) { + async getCashoutRate(conversion: { + debit?: AmountJson; + credit?: AmountJson; + }) { const url = new URL(`cashout-rate`, this.baseUrl); if (conversion.debit) { - url.searchParams.set("amount_debit", Amounts.stringify(conversion.debit)) + url.searchParams.set("amount_debit", Amounts.stringify(conversion.debit)); } if (conversion.credit) { - url.searchParams.set("amount_credit", Amounts.stringify(conversion.credit)) + url.searchParams.set( + "amount_credit", + Amounts.stringify(conversion.credit), + ); } const resp = await this.httpLib.fetch(url.href, { method: "GET", }); switch (resp.status) { - case HttpStatusCode.Ok: return opSuccess(resp, codecForCashoutConversionResponse()) + case HttpStatusCode.Ok: + return opSuccess(resp, codecForCashoutConversionResponse()); case HttpStatusCode.BadRequest: { - const body = await resp.json() - const details = codecForTalerErrorDetail().decode(body) + const body = await resp.json(); + const details = codecForTalerErrorDetail().decode(body); switch (details.code) { - case TalerErrorCode.GENERIC_PARAMETER_MISSING: return opKnownHttpFailure(resp.status, resp); - case TalerErrorCode.GENERIC_PARAMETER_MALFORMED: return opKnownHttpFailure(resp.status, resp); - case TalerErrorCode.GENERIC_CURRENCY_MISMATCH: return opKnownHttpFailure(resp.status, resp); - default: return opUnknownFailure(resp, body) + case TalerErrorCode.GENERIC_PARAMETER_MISSING: + return opKnownHttpFailure(resp.status, resp); + case TalerErrorCode.GENERIC_PARAMETER_MALFORMED: + return opKnownHttpFailure(resp.status, resp); + case TalerErrorCode.GENERIC_CURRENCY_MISMATCH: + return opKnownHttpFailure(resp.status, resp); + default: + return opUnknownFailure(resp, body); } } - case HttpStatusCode.Conflict: return opKnownHttpFailure(resp.status, resp); - case HttpStatusCode.NotImplemented: return opKnownHttpFailure(resp.status, resp); - default: return opUnknownFailure(resp, await resp.text()) + case HttpStatusCode.Conflict: + return opKnownHttpFailure(resp.status, resp); + case HttpStatusCode.NotImplemented: + return opKnownHttpFailure(resp.status, resp); + default: + return opUnknownFailure(resp, await resp.text()); } } /** * https://docs.taler.net/core/api-bank-conversion-info.html#post--conversion-rate - * + * */ - async updateConversionRate(auth: AccessToken, body: TalerBankConversionApi.ConversionRate) { + async updateConversionRate( + auth: AccessToken, + body: TalerBankConversionApi.ConversionRate, + ) { const url = new URL(`conversion-rate`, this.baseUrl); const resp = await this.httpLib.fetch(url.href, { method: "POST", headers: { - Authorization: makeBearerTokenAuthHeader(auth) + Authorization: makeBearerTokenAuthHeader(auth), }, - body + body, }); switch (resp.status) { - case HttpStatusCode.NoContent: return opEmptySuccess() - case HttpStatusCode.Unauthorized: return opKnownHttpFailure(resp.status, resp); - case HttpStatusCode.NotImplemented: return opKnownHttpFailure(resp.status, resp); - default: return opUnknownFailure(resp, await resp.text()) + case HttpStatusCode.NoContent: + return opEmptySuccess(resp); + case HttpStatusCode.Unauthorized: + return opKnownHttpFailure(resp.status, resp); + case HttpStatusCode.NotImplemented: + return opKnownHttpFailure(resp.status, resp); + default: + return opUnknownFailure(resp, await resp.text()); } } - } - |