diff options
Diffstat (limited to 'packages/taler-util/src/http-client/bank-wire.ts')
-rw-r--r-- | packages/taler-util/src/http-client/bank-wire.ts | 80 |
1 files changed, 56 insertions, 24 deletions
diff --git a/packages/taler-util/src/http-client/bank-wire.ts b/packages/taler-util/src/http-client/bank-wire.ts index 7e3c00637..90c3aeae5 100644 --- a/packages/taler-util/src/http-client/bank-wire.ts +++ b/packages/taler-util/src/http-client/bank-wire.ts @@ -1,9 +1,9 @@ import { HttpRequestLibrary, makeBasicAuthHeader } from "../http-common.js"; import { HttpStatusCode } from "../http-status-codes.js"; import { createPlatformHttpLib } from "../http.js"; -import { FailCasesByMethod, ResultByMethod, opFixedSuccess, opKnownFailure, opSuccess, opUnknownFailure } from "../operation.js"; -import { PaginationParams, TalerWireGatewayApi, codecForAddIncomingResponse, codecForIncomingHistory, codecForOutgoingHistory, codecForTransferResponse } from "./types.js"; -import { addPaginationParams } from "./utils.js"; +import { FailCasesByMethod, ResultByMethod, opFixedSuccess, opKnownHttpFailure, opSuccess, opUnknownFailure } from "../operation.js"; +import { LongPollParams, PaginationParams, TalerWireGatewayApi, codecForAddIncomingResponse, codecForIncomingHistory, codecForOutgoingHistory, codecForTransferResponse } from "./types.js"; +import { addLongPollingParam, addPaginationParams } from "./utils.js"; export type TalerWireGatewayResultByMethod<prop extends keyof TalerWireGatewayHttpClient> = ResultByMethod<TalerWireGatewayHttpClient, prop> export type TalerWireGatewayErrorsByMethod<prop extends keyof TalerWireGatewayHttpClient> = FailCasesByMethod<TalerWireGatewayHttpClient, prop> @@ -25,6 +25,27 @@ export class TalerWireGatewayHttpClient { ) { this.httpLib = httpClient ?? createPlatformHttpLib(); } + // public readonly PROTOCOL_VERSION = "4:0:0"; + // isCompatible(version: string): boolean { + // const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version) + // return compare?.compatible ?? false + // } + + // /** + // * https://docs.taler.net/core/api-corebank.html#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, codecForCoreBankConfig()) + // default: return opUnknownFailure(resp, await resp.text()) + // } + // } + /** * https://docs.taler.net/core/api-bank-wire.html#post--transfer @@ -42,10 +63,12 @@ export class TalerWireGatewayHttpClient { }); 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); + //FIXME: show more details in docs + case HttpStatusCode.BadRequest: return opKnownHttpFailure(resp.status, resp); + case HttpStatusCode.Unauthorized: return opKnownHttpFailure(resp.status, resp); + //FIXME: show more details in docs + case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); + case HttpStatusCode.Conflict: return opKnownHttpFailure(resp.status, resp); default: return opUnknownFailure(resp, await resp.text()) } } @@ -54,9 +77,10 @@ export class TalerWireGatewayHttpClient { * https://docs.taler.net/core/api-bank-wire.html#get--history-incoming * */ - async getHistoryIncoming(auth: string, pagination?: PaginationParams) { + async getHistoryIncoming(auth: string, params?: PaginationParams & LongPollParams) { const url = new URL(`history/incoming`, this.baseUrl); - addPaginationParams(url, pagination) + addPaginationParams(url, params) + addLongPollingParam(url, params) const resp = await this.httpLib.fetch(url.href, { method: "GET", headers: { @@ -65,22 +89,25 @@ export class TalerWireGatewayHttpClient { }); switch (resp.status) { case HttpStatusCode.Ok: return opSuccess(resp, codecForIncomingHistory()) - case HttpStatusCode.NoContent: return opFixedSuccess({ incoming_transactions: [] }) - case HttpStatusCode.BadRequest: return opKnownFailure("invalid-input", resp); - case HttpStatusCode.Unauthorized: return opKnownFailure("unauthorized", resp); - case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp); + //FIXME: account should not be returned or make it optional + case HttpStatusCode.NoContent: return opFixedSuccess({ incoming_transactions: [], credit_account: undefined }) + //FIXME: show more details in docs + case HttpStatusCode.BadRequest: return opKnownHttpFailure(resp.status, resp); + case HttpStatusCode.Unauthorized: return opKnownHttpFailure(resp.status, resp); + //FIXME: show more details in docs + case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: return opUnknownFailure(resp, await resp.text()) } - // return readSuccessResponseJsonOrThrow(resp, codecForIncomingHistory()); } /** * https://docs.taler.net/core/api-bank-wire.html#get--history-outgoing * */ - async getHistoryOutgoing(auth: string, pagination?: PaginationParams) { + async getHistoryOutgoing(auth: string, params?: PaginationParams & LongPollParams) { const url = new URL(`history/outgoing`, this.baseUrl); - addPaginationParams(url, pagination) + addPaginationParams(url, params) + addLongPollingParam(url, params) const resp = await this.httpLib.fetch(url.href, { method: "GET", headers: { @@ -89,10 +116,13 @@ export class TalerWireGatewayHttpClient { }); switch (resp.status) { case HttpStatusCode.Ok: return opSuccess(resp, codecForOutgoingHistory()) - case HttpStatusCode.NoContent: return opFixedSuccess({ outgoing_transactions: [] }) - case HttpStatusCode.BadRequest: return opKnownFailure("invalid-input", resp); - case HttpStatusCode.Unauthorized: return opKnownFailure("unauthorized", resp); - case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp); + //FIXME: account should not be returned or make it optional + case HttpStatusCode.NoContent: return opFixedSuccess({ outgoing_transactions: [], debit_account: undefined }) + //FIXME: show more details in docs + case HttpStatusCode.BadRequest: return opKnownHttpFailure(resp.status, resp); + case HttpStatusCode.Unauthorized: return opKnownHttpFailure(resp.status, resp); + //FIXME: show more details in docs + case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: return opUnknownFailure(resp, await resp.text()) } } @@ -112,10 +142,12 @@ export class TalerWireGatewayHttpClient { }); switch (resp.status) { case HttpStatusCode.Ok: return opSuccess(resp, codecForAddIncomingResponse()) - 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); + //FIXME: show more details in docs + case HttpStatusCode.BadRequest: return opKnownHttpFailure(resp.status, resp); + case HttpStatusCode.Unauthorized: return opKnownHttpFailure(resp.status, resp); + //FIXME: show more details in docs + case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); + case HttpStatusCode.Conflict: return opKnownHttpFailure(resp.status, resp); default: return opUnknownFailure(resp, await resp.text()) } } |