diff options
Diffstat (limited to 'packages/taler-util/src/http-client/bank-conversion.ts')
-rw-r--r-- | packages/taler-util/src/http-client/bank-conversion.ts | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/packages/taler-util/src/http-client/bank-conversion.ts b/packages/taler-util/src/http-client/bank-conversion.ts index f53b6a661..2bc9fdb79 100644 --- a/packages/taler-util/src/http-client/bank-conversion.ts +++ b/packages/taler-util/src/http-client/bank-conversion.ts @@ -2,14 +2,18 @@ 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 { FailCasesByMethod, ResultByMethod, opKnownFailure, opSuccess, opUnknownFailure } from "../operation.js"; +import { FailCasesByMethod, ResultByMethod, opEmptySuccess, opKnownFailure, opSuccess, opUnknownFailure } from "../operation.js"; import { TalerErrorCode } from "../taler-error-codes.js"; import { codecForTalerErrorDetail } from "../wallet-types.js"; import { + AccessToken, + TalerBankConversionApi, + UserAndToken, codecForCashinConversionResponse, codecForCashoutConversionResponse, 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> @@ -70,7 +74,7 @@ export class TalerBankConversionHttpClient { } } case HttpStatusCode.Conflict: return opKnownFailure("amount-too-small", resp); - case HttpStatusCode.NotImplemented: return opKnownFailure("cashout-not-supported", resp); + case HttpStatusCode.NotImplemented: return opKnownFailure("conversion-not-supported", resp); default: return opUnknownFailure(resp, await resp.text()) } } @@ -103,11 +107,31 @@ export class TalerBankConversionHttpClient { } } case HttpStatusCode.Conflict: return opKnownFailure("amount-too-small", resp); - case HttpStatusCode.NotImplemented: return opKnownFailure("cashout-not-supported", resp); + case HttpStatusCode.NotImplemented: return opKnownFailure("conversion-not-supported", 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) { + const url = new URL(`conversion-rate`, this.baseUrl); + const resp = await this.httpLib.fetch(url.href, { + method: "POST", + headers: { + Authorization: makeBearerTokenAuthHeader(auth) + }, + body + }); + switch (resp.status) { + case HttpStatusCode.NoContent: return opEmptySuccess() + case HttpStatusCode.Unauthorized: return opKnownFailure("unauthorized", resp); + case HttpStatusCode.NotImplemented: return opKnownFailure("conversion-not-supported", resp); + default: return opUnknownFailure(resp, await resp.text()) + } + } } |