gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-wallet-core] branch master updated: update api from wire revenue


From: gnunet
Subject: [taler-wallet-core] branch master updated: update api from wire revenue and integration
Date: Sat, 04 Nov 2023 00:04:36 +0100

This is an automated email from the git hooks/post-receive script.

sebasjm pushed a commit to branch master
in repository wallet-core.

The following commit(s) were added to refs/heads/master by this push:
     new 78240f6c0 update api from wire revenue and integration
78240f6c0 is described below

commit 78240f6c0f600f905f29e6dceb75286461297f24
Author: Sebastian <sebasjm@gmail.com>
AuthorDate: Fri Nov 3 20:04:29 2023 -0300

    update api from wire revenue and integration
---
 .../taler-util/src/http-client/bank-integration.ts | 42 ++++++++++++++--
 .../taler-util/src/http-client/bank-revenue.ts     | 16 ++++--
 packages/taler-util/src/http-client/bank-wire.ts   | 57 +++++++++++++++-------
 packages/taler-util/src/http-client/types.ts       | 43 ++++++++++++----
 4 files changed, 125 insertions(+), 33 deletions(-)

diff --git a/packages/taler-util/src/http-client/bank-integration.ts 
b/packages/taler-util/src/http-client/bank-integration.ts
index e59f6086a..7cddcb9a9 100644
--- a/packages/taler-util/src/http-client/bank-integration.ts
+++ b/packages/taler-util/src/http-client/bank-integration.ts
@@ -1,11 +1,14 @@
 import { HttpRequestLibrary, readSuccessResponseJsonOrThrow } from 
"../http-common.js";
 import { HttpStatusCode } from "../http-status-codes.js";
 import { createPlatformHttpLib } from "../http.js";
-import { opSuccess, opUnknownFailure } from "../operation.js";
+import { opKnownFailure, opSuccess, opUnknownFailure } from "../operation.js";
+import { TalerErrorCode } from "../taler-error-codes.js";
+import { codecForTalerErrorDetail } from "../wallet-types.js";
 import {
   TalerBankIntegrationApi,
   codecForBankWithdrawalOperationPostResponse,
-  codecForBankWithdrawalOperationStatus
+  codecForBankWithdrawalOperationStatus,
+  codecForIntegrationBankConfig
 } from "./types.js";
 
 export class TalerBankIntegrationHttpClient {
@@ -18,11 +21,26 @@ export class TalerBankIntegrationHttpClient {
     this.httpLib = httpClient ?? createPlatformHttpLib();
   }
 
+  /**
+   * https://docs.taler.net/core/api-bank-integration.html#get--config
+   * 
+   */
+  async getConfig() {
+    const url = new URL(`config`, this.baseUrl);
+    const resp = await this.httpLib.fetch(url.href, {
+      method: "GET"
+    });
+    switch (resp.status) {
+      case HttpStatusCode.Ok: return opSuccess(resp, 
codecForIntegrationBankConfig())
+      default: return opUnknownFailure(resp, await resp.text())
+    }
+  }
+
   /**
    * 
https://docs.taler.net/core/api-bank-integration.html#get-$BANK_API_BASE_URL-withdrawal-operation-$wopid
    * 
    */
-  async getWithdrawalOperationById(woid: string, timeoutMs?: number): 
Promise<TalerBankIntegrationApi.BankWithdrawalOperationStatus> {
+  async getWithdrawalOperationById(woid: string, timeoutMs?: number) {
     const url = new URL(`withdrawal-operation/${woid}`, this.baseUrl);
     if (timeoutMs) {
       url.searchParams.set("long_poll_ms", String(timeoutMs))
@@ -30,7 +48,11 @@ export class TalerBankIntegrationHttpClient {
     const resp = await this.httpLib.fetch(url.href, {
       method: "GET"
     });
-    return readSuccessResponseJsonOrThrow(resp, 
codecForBankWithdrawalOperationStatus());
+    switch (resp.status) {
+      case HttpStatusCode.Ok: return opSuccess(resp, 
codecForBankWithdrawalOperationStatus())
+      case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp)
+      default: return opUnknownFailure(resp, await resp.text())
+    }
   }
 
   /**
@@ -45,6 +67,18 @@ export class TalerBankIntegrationHttpClient {
     });
     switch (resp.status) {
       case HttpStatusCode.Ok: return opSuccess(resp, 
codecForBankWithdrawalOperationPostResponse())
+      case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp)
+      case HttpStatusCode.Conflict: {
+        const body = await resp.json()
+        const details = codecForTalerErrorDetail().decode(body)
+        switch (details.code) {
+          case 
TalerErrorCode.BANK_WITHDRAWAL_OPERATION_RESERVE_SELECTION_CONFLICT: return 
opKnownFailure("already-selected", resp);
+          case TalerErrorCode.BANK_DUPLICATE_RESERVE_PUB_SUBJECT: return 
opKnownFailure("duplicated-reserve-id", resp);
+          // case TalerErrorCode.BANK_ACCOUNT_NOT_FOUND: return 
opKnownFailure("account-not-found", resp);
+          case TalerErrorCode.BANK_ACCOUNT_IS_NOT_EXCHANGE: return 
opKnownFailure("account-not-exchange", resp);
+          default: return opUnknownFailure(resp, body)
+        }
+      }
       default: return opUnknownFailure(resp, await resp.text())
     }
   }
diff --git a/packages/taler-util/src/http-client/bank-revenue.ts 
b/packages/taler-util/src/http-client/bank-revenue.ts
index d594da574..c6adac557 100644
--- a/packages/taler-util/src/http-client/bank-revenue.ts
+++ b/packages/taler-util/src/http-client/bank-revenue.ts
@@ -1,6 +1,9 @@
 import { HttpRequestLibrary, makeBasicAuthHeader, 
readSuccessResponseJsonOrThrow } from "../http-common.js";
+import { HttpStatusCode } from "../http-status-codes.js";
 import { createPlatformHttpLib } from "../http.js";
-import { TalerRevenueApi, codecForMerchantIncomingHistory } from "./types.js";
+import { opKnownFailure, opSuccess, opUnknownFailure } from "../operation.js";
+import { PaginationParams, TalerRevenueApi, codecForMerchantIncomingHistory } 
from "./types.js";
+import { addPaginationParams } from "./utils.js";
 
 export class TalerRevenueHttpClient {
   httpLib: HttpRequestLibrary;
@@ -18,14 +21,21 @@ export class TalerRevenueHttpClient {
    * 
    * @returns 
    */
-  async getHistory(auth: string): 
Promise<TalerRevenueApi.MerchantIncomingHistory> {
+  async getHistory(auth: string, pagination?: PaginationParams) {
     const url = new URL(`history`, this.baseUrl);
+    addPaginationParams(url, pagination)
     const resp = await this.httpLib.fetch(url.href, {
       method: "GET",
       headers: {
         Authorization: makeBasicAuthHeader(this.username, auth),
       }
     });
-    return readSuccessResponseJsonOrThrow(resp, 
codecForMerchantIncomingHistory());
+    switch (resp.status) {
+      case HttpStatusCode.Ok: return opSuccess(resp, 
codecForMerchantIncomingHistory())
+      case HttpStatusCode.BadRequest: return opKnownFailure("invalid-input", 
resp);
+      case HttpStatusCode.Unauthorized: return opKnownFailure("unauthorized", 
resp);
+      case HttpStatusCode.NotFound: return 
opKnownFailure("endpoint-wrong-or-username-wrong", resp);
+      default: return opUnknownFailure(resp, await resp.text())
+    }
   }
 }
\ No newline at end of file
diff --git a/packages/taler-util/src/http-client/bank-wire.ts 
b/packages/taler-util/src/http-client/bank-wire.ts
index 0a032cc61..af0857ac5 100644
--- a/packages/taler-util/src/http-client/bank-wire.ts
+++ b/packages/taler-util/src/http-client/bank-wire.ts
@@ -1,5 +1,7 @@
 import { HttpRequestLibrary, makeBasicAuthHeader, 
readSuccessResponseJsonOrThrow } from "../http-common.js";
+import { HttpStatusCode } from "../http-status-codes.js";
 import { createPlatformHttpLib } from "../http.js";
+import { opEmptySuccess, opFixedSuccess, opKnownFailure, opSuccess, 
opUnknownFailure } from "../operation.js";
 import { PaginationParams, TalerWireGatewayApi, codecForAddIncomingResponse, 
codecForIncomingHistory, codecForOutgoingHistory, codecForTransferResponse } 
from "./types.js";
 import { addPaginationParams } from "./utils.js";
 
@@ -28,7 +30,7 @@ export class TalerWireGatewayHttpClient {
   async transfer(
     auth: string,
     body: TalerWireGatewayApi.TransferRequest,
-  ): Promise<TalerWireGatewayApi.TransferResponse> {
+  ) {
     const url = new URL(`transfer`, this.baseUrl);
     const resp = await this.httpLib.fetch(url.href, {
       method: "POST",
@@ -37,17 +39,21 @@ export class TalerWireGatewayHttpClient {
       },
       body
     });
-    return readSuccessResponseJsonOrThrow(resp, codecForTransferResponse());
+    switch (resp.status) {
+      case HttpStatusCode.Ok: return opSuccess(resp, 
codecForTransferResponse())
+      case HttpStatusCode.BadRequest: return opKnownFailure("invalid-input", 
resp);
+      case HttpStatusCode.Unauthorized: return opKnownFailure("unauthorized", 
resp);
+      case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp);
+      case HttpStatusCode.Conflict: return 
opKnownFailure("request-uid-already-used", resp);
+      default: return opUnknownFailure(resp, await resp.text())
+    }
   }
 
   /**
    * 
https://docs.taler.net/core/api-bank-wire.html#get-$BASE_URL-history-incoming
    * 
    */
-  async getHistoryIncoming(
-    auth: string,
-    pagination?: PaginationParams
-  ): Promise<TalerWireGatewayApi.IncomingHistory> {
+  async getHistoryIncoming(auth: string, pagination?: PaginationParams) {
     const url = new URL(`history/incoming`, this.baseUrl);
     addPaginationParams(url, pagination)
     const resp = await this.httpLib.fetch(url.href, {
@@ -56,16 +62,21 @@ export class TalerWireGatewayHttpClient {
         Authorization: makeBasicAuthHeader(this.username, auth),
       }
     });
-    return readSuccessResponseJsonOrThrow(resp, codecForIncomingHistory());
+    switch (resp.status) {
+      case HttpStatusCode.Ok: return opSuccess(resp, codecForIncomingHistory())
+      case HttpStatusCode.NoContent: return opFixedSuccess({ 
incoming_transactions: [], credit_account: "" })
+      case HttpStatusCode.BadRequest: return opKnownFailure("invalid-input", 
resp);
+      case HttpStatusCode.Unauthorized: return opKnownFailure("unauthorized", 
resp);
+      case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp);
+      default: return opUnknownFailure(resp, await resp.text())
+    }
+    // return readSuccessResponseJsonOrThrow(resp, codecForIncomingHistory());
   }
   /**
    * 
https://docs.taler.net/core/api-bank-wire.html#get-$BASE_URL-history-outgoing
    * 
    */
-  async getHistoryOutgoing(
-    auth: string,
-    pagination?: PaginationParams
-  ): Promise<TalerWireGatewayApi.OutgoingHistory> {
+  async getHistoryOutgoing(auth: string, pagination?: PaginationParams) {
     const url = new URL(`history/outgoing`, this.baseUrl);
     addPaginationParams(url, pagination)
     const resp = await this.httpLib.fetch(url.href, {
@@ -74,16 +85,20 @@ export class TalerWireGatewayHttpClient {
         Authorization: makeBasicAuthHeader(this.username, auth),
       }
     });
-    return readSuccessResponseJsonOrThrow(resp, codecForOutgoingHistory());
+    switch (resp.status) {
+      case HttpStatusCode.Ok: return opSuccess(resp, codecForOutgoingHistory())
+      case HttpStatusCode.NoContent: return opFixedSuccess({ 
outgoing_transactions: [], debit_account: "" })
+      case HttpStatusCode.BadRequest: return opKnownFailure("invalid-input", 
resp);
+      case HttpStatusCode.Unauthorized: return opKnownFailure("unauthorized", 
resp);
+      case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp);
+      default: return opUnknownFailure(resp, await resp.text())
+    }
   }
   /**
    * 
https://docs.taler.net/core/api-bank-wire.html#post-$BASE_URL-admin-add-incoming
    * 
    */
-  async addIncoming(
-    auth: string,
-    body: TalerWireGatewayApi.AddIncomingRequest,
-  ): Promise<TalerWireGatewayApi.AddIncomingResponse> {
+  async addIncoming(auth: string, body: 
TalerWireGatewayApi.AddIncomingRequest,) {
     const url = new URL(`admin/add-incoming`, this.baseUrl);
     const resp = await this.httpLib.fetch(url.href, {
       method: "POST",
@@ -92,7 +107,15 @@ export class TalerWireGatewayHttpClient {
       },
       body
     });
-    return readSuccessResponseJsonOrThrow(resp, codecForAddIncomingResponse());
+    switch (resp.status) {
+      case HttpStatusCode.Ok: return opSuccess(resp, 
codecForAddIncomingResponse())
+      case HttpStatusCode.NoContent: return opFixedSuccess({ 
outgoing_transactions: [], debit_account: "" })
+      case HttpStatusCode.BadRequest: return opKnownFailure("invalid-input", 
resp);
+      case HttpStatusCode.Unauthorized: return opKnownFailure("unauthorized", 
resp);
+      case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp);
+      case HttpStatusCode.Conflict: return 
opKnownFailure("reserve-id-already-used", resp);
+      default: return opUnknownFailure(resp, await resp.text())
+    }
   }
 }
 
diff --git a/packages/taler-util/src/http-client/types.ts 
b/packages/taler-util/src/http-client/types.ts
index 95d0f8dd6..38df08f9a 100644
--- a/packages/taler-util/src/http-client/types.ts
+++ b/packages/taler-util/src/http-client/types.ts
@@ -227,10 +227,19 @@ export const codecForCurrencySpecificiation =
       .property("alt_unit_names", codecForMap(codecForString()))
       .build("CurrencySpecification")
 
+export const codecForIntegrationBankConfig =
+  (): Codec<TalerCorebankApi.IntegrationConfig> =>
+    buildCodecForObject<TalerCorebankApi.IntegrationConfig>()
+      .property("name", codecForConstString("taler-bank-integration"))
+      .property("version", codecForString())
+      .property("currency", codecForString())
+      .property("currency_specification", codecForCurrencySpecificiation())
+      .build("TalerCorebankApi.IntegrationConfig")
+
 export const codecForCoreBankConfig =
   (): Codec<TalerCorebankApi.Config> =>
     buildCodecForObject<TalerCorebankApi.Config>()
-      .property("name", codecForString())
+      .property("name", codecForConstString("taler-corebank"))
       .property("version", codecForString())
       .property("allow_deletions", codecForBoolean())
       .property("allow_registrations", codecForBoolean())
@@ -431,12 +440,12 @@ export const codecForBankWithdrawalOperationStatus =
   (): Codec<TalerBankIntegrationApi.BankWithdrawalOperationStatus> =>
     
buildCodecForObject<TalerBankIntegrationApi.BankWithdrawalOperationStatus>()
       .property("aborted", codecForBoolean())
-      .property("amount", codecForAmountString())
-      .property("confirm_transfer_url", codecOptional(codecForURL()))
       .property("selection_done", codecForBoolean())
-      .property("sender_wire", codecForPaytoString())
-      .property("suggested_exchange", codecOptional(codecForString()))
       .property("transfer_done", codecForBoolean())
+      .property("amount", codecForAmountString())
+      .property("sender_wire", codecOptional(codecForPaytoString()))
+      .property("suggested_exchange", codecOptional(codecForString()))
+      .property("confirm_transfer_url", codecOptional(codecForURL()))
       .property("wire_types", codecForList(codecForString()))
       .build("TalerBankIntegrationApi.BankWithdrawalOperationStatus");
 
@@ -457,11 +466,11 @@ export const codecForMerchantIncomingHistory =
 export const codecForMerchantIncomingBankTransaction =
   (): Codec<TalerRevenueApi.MerchantIncomingBankTransaction> =>
     buildCodecForObject<TalerRevenueApi.MerchantIncomingBankTransaction>()
-      .property("amount", codecForAmountString())
+      .property("row_id", codecForNumber())
       .property("date", codecForTimestamp)
+      .property("amount", codecForAmountString())
       .property("debit_account", codecForPaytoString())
       .property("exchange_url", codecForURL())
-      .property("row_id", codecForNumber())
       .property("wtid", codecForString())
       .build("TalerRevenueApi.MerchantIncomingBankTransaction");
 
@@ -842,9 +851,25 @@ export namespace TalerBankIntegrationApi {
 }
 export namespace TalerCorebankApi {
 
+  export interface IntegrationConfig {
+    // libtool-style representation of the Bank protocol version, see
+    // 
https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning
+    // The format is "current:revision:age".
+    version: string;
+
+    // Currency used by this bank.
+    currency: string;
+
+    // How the bank SPA should render this currency.
+    currency_specification: CurrencySpecification;
+
+    // Name of the API.
+    name: "taler-bank-integration";
+
+  }
   export interface Config {
-    // Name of this API, always "circuit".
-    name: string;
+    // Name of this API, always "taler-corebank".
+    name: "taler-corebank";
     // API version in the form $n:$n:$n
     version: string;
 

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]