aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-util/src/http-client/bank-core.ts
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2023-10-23 15:49:13 -0300
committerSebastian <sebasjm@gmail.com>2023-10-23 15:49:35 -0300
commitc66f06eb73e53a8804b8c2b36ff45972836c633c (patch)
tree18461a0e29124326ccb70331971d5914f3ff56b3 /packages/taler-util/src/http-client/bank-core.ts
parent2512665e9462690162a5bae5fab3337217943269 (diff)
downloadwallet-core-c66f06eb73e53a8804b8c2b36ff45972836c633c.tar.gz
wallet-core-c66f06eb73e53a8804b8c2b36ff45972836c633c.tar.bz2
wallet-core-c66f06eb73e53a8804b8c2b36ff45972836c633c.zip
update conversion rate info, added test-bank-api in taler harness
Diffstat (limited to 'packages/taler-util/src/http-client/bank-core.ts')
-rw-r--r--packages/taler-util/src/http-client/bank-core.ts116
1 files changed, 50 insertions, 66 deletions
diff --git a/packages/taler-util/src/http-client/bank-core.ts b/packages/taler-util/src/http-client/bank-core.ts
index c49a094e4..bd35552f7 100644
--- a/packages/taler-util/src/http-client/bank-core.ts
+++ b/packages/taler-util/src/http-client/bank-core.ts
@@ -74,7 +74,6 @@ export class TalerCoreBankHttpClient {
method: "GET"
});
switch (resp.status) {
- //FIXME: missing in docs
case HttpStatusCode.Ok: return opSuccess(resp, codecForCoreBankConfig())
default: return opUnknownFailure(resp, await resp.text())
}
@@ -98,10 +97,9 @@ export class TalerCoreBankHttpClient {
},
});
switch (resp.status) {
- //FIXME: NOT IN THE DOOOCS
case HttpStatusCode.Created: return opEmptySuccess()
- case HttpStatusCode.NoContent: return opEmptySuccess()
case HttpStatusCode.BadRequest: return opKnownFailure("invalid-input", resp);
+ //FIXME: check when the server add code spec
case HttpStatusCode.Forbidden: {
if (body.username === "bank" || body.username === "admin") {
return opKnownFailure("unable-to-create", resp);
@@ -128,6 +126,7 @@ export class TalerCoreBankHttpClient {
switch (resp.status) {
case HttpStatusCode.NoContent: return opEmptySuccess()
case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp);
+ //FIXME: check when the server add code spec
case HttpStatusCode.Forbidden: {
if (auth.username === "bank" || auth.username === "admin") {
return opKnownFailure("unable-to-delete", resp);
@@ -156,7 +155,11 @@ export class TalerCoreBankHttpClient {
switch (resp.status) {
case HttpStatusCode.NoContent: return opEmptySuccess()
case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp);
- case HttpStatusCode.Forbidden: return opKnownFailure("unauthorized", resp);
+ case HttpStatusCode.Unauthorized: return opKnownFailure("unauthorized", resp);
+ //FIXME: missing error code for cases:
+ // * change legal name
+ // * admin tries to change its own account
+ case HttpStatusCode.Forbidden: return opKnownFailure("cant-change-legal-name-or-admin", resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
@@ -176,12 +179,9 @@ export class TalerCoreBankHttpClient {
});
switch (resp.status) {
case HttpStatusCode.NoContent: return opEmptySuccess()
- //FIXME: missing in docs
case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp);
- //FIXME: missing in docs
- case HttpStatusCode.Unauthorized: return opKnownFailure("no-rights", resp);
- //FIXME: missing in docs
- case HttpStatusCode.Forbidden: return opKnownFailure("unauthorized", resp);
+ case HttpStatusCode.Unauthorized: return opKnownFailure("unauthorized", resp);
+ case HttpStatusCode.Forbidden: return opKnownFailure("old-password-invalid-or-not-allowed", resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
@@ -192,7 +192,6 @@ export class TalerCoreBankHttpClient {
*/
async getPublicAccounts(pagination?: PaginationParams) {
const url = new URL(`public-accounts`, this.baseUrl);
- //FIXME: missing pagination in docs
addPaginationParams(url, pagination)
const resp = await this.httpLib.fetch(url.href, {
method: "GET",
@@ -200,10 +199,9 @@ export class TalerCoreBankHttpClient {
},
});
switch (resp.status) {
- //FIXME: missing in docs
case HttpStatusCode.Ok: return opSuccess(resp, codecForPublicAccountsResponse())
- //FIXME: missing in docs
case HttpStatusCode.NoContent: return opFixedSuccess({ public_accounts: [] })
+ case HttpStatusCode.ServiceUnavailable: return opKnownFailure("public-account-not-supported", resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
@@ -212,9 +210,12 @@ export class TalerCoreBankHttpClient {
* https://docs.taler.net/core/api-corebank.html#get--accounts
*
*/
- async getAccounts(auth: AccessToken, pagination?: PaginationParams) {
+ async getAccounts(auth: AccessToken, filter: {account? : string} = {}, pagination?: PaginationParams) {
const url = new URL(`accounts`, this.baseUrl);
addPaginationParams(url, pagination)
+ if (filter.account) {
+ url.searchParams.set("filter_name", filter.account)
+ }
const resp = await this.httpLib.fetch(url.href, {
method: "GET",
headers: {
@@ -224,7 +225,8 @@ export class TalerCoreBankHttpClient {
switch (resp.status) {
case HttpStatusCode.Ok: return opSuccess(resp, codecForListBankAccountsResponse())
case HttpStatusCode.NoContent: return opFixedSuccess({ accounts: [] })
- case HttpStatusCode.Forbidden: return opKnownFailure("unauthorized", resp);
+ case HttpStatusCode.Forbidden: return opKnownFailure("no-rights", resp);
+ case HttpStatusCode.Unauthorized: return opKnownFailure("unauthorized", resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
@@ -243,12 +245,9 @@ export class TalerCoreBankHttpClient {
});
switch (resp.status) {
case HttpStatusCode.Ok: return opSuccess(resp, codecForAccountData())
- //FIXME: missing in docs (401 when not found?)
- case HttpStatusCode.Unauthorized: return opKnownFailure("not-found", resp);
- //FIXME: missing in docs
+ case HttpStatusCode.Unauthorized: return opKnownFailure("unauthorized", resp);
case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp);
- //FIXME: missing in docs
- case HttpStatusCode.Forbidden: return opKnownFailure("unauthorized", resp);
+ case HttpStatusCode.Forbidden: return opKnownFailure("no-rights", resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
@@ -272,12 +271,9 @@ export class TalerCoreBankHttpClient {
});
switch (resp.status) {
case HttpStatusCode.Ok: return opSuccess(resp, codecForBankAccountTransactionsResponse())
- //FIXME: missing in docs
case HttpStatusCode.NoContent: return opFixedSuccess({ transactions: [] })
- //FIXME: missing in docs
case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp);
- //FIXME: missing in docs
- case HttpStatusCode.Forbidden: return opKnownFailure("unauthorized", resp);
+ case HttpStatusCode.Unauthorized: return opKnownFailure("unauthorized", resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
@@ -296,10 +292,8 @@ export class TalerCoreBankHttpClient {
});
switch (resp.status) {
case HttpStatusCode.Ok: return opSuccess(resp, codecForBankAccountTransactionInfo())
- //FIXME: missing in docs
case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp);
- //FIXME: missing in docs
- case HttpStatusCode.Forbidden: return opKnownFailure("unauthorized", resp);
+ case HttpStatusCode.Unauthorized: return opKnownFailure("unauthorized", resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
@@ -318,12 +312,12 @@ export class TalerCoreBankHttpClient {
body,
});
switch (resp.status) {
- //FIXME: fix docs... it should be NoContent
+ //FIXME: remove this after server has been updated
case HttpStatusCode.Ok: return opEmptySuccess()
case HttpStatusCode.NoContent: return opEmptySuccess()
+ //FIXME: check when the server add codes spec
case HttpStatusCode.BadRequest: return opKnownFailure("invalid-input", resp);
- //FIXME: missing in docs
- case HttpStatusCode.Forbidden: return opKnownFailure("unauthorized", resp);
+ case HttpStatusCode.Unauthorized: return opKnownFailure("unauthorized", resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
@@ -346,8 +340,9 @@ export class TalerCoreBankHttpClient {
body,
});
switch (resp.status) {
- //FIXME: missing in docs
case HttpStatusCode.Ok: return opSuccess(resp, codecForBankAccountCreateWithdrawalResponse())
+ case HttpStatusCode.PreconditionFailed: return opKnownFailure("insufficient-funds", resp);
+ //FIXME: remove when server is updated
case HttpStatusCode.Forbidden: return opKnownFailure("insufficient-funds", resp);
default: return opUnknownFailure(resp, await resp.text())
}
@@ -363,7 +358,6 @@ export class TalerCoreBankHttpClient {
method: "GET",
});
switch (resp.status) {
- //FIXME: missing in docs
case HttpStatusCode.Ok: return opSuccess(resp, codecForBankAccountGetWithdrawalResponse())
case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp)
default: return opUnknownFailure(resp, await resp.text())
@@ -380,7 +374,7 @@ export class TalerCoreBankHttpClient {
method: "POST",
});
switch (resp.status) {
- //FIXME: fix docs... it should be NoContent
+ //FIXME: remove when the server is fixed
case HttpStatusCode.Ok: return opEmptySuccess()
case HttpStatusCode.NoContent: return opEmptySuccess()
case HttpStatusCode.Conflict: return opKnownFailure("previously-confirmed", resp);
@@ -398,7 +392,7 @@ export class TalerCoreBankHttpClient {
method: "POST",
});
switch (resp.status) {
- //FIXME: fix docs... it should be NoContent
+ //FIXME: remove when the server is fixed
case HttpStatusCode.Ok: return opEmptySuccess()
case HttpStatusCode.NoContent: return opEmptySuccess()
case HttpStatusCode.Conflict: return opKnownFailure("previously-aborted", resp);
@@ -426,15 +420,14 @@ export class TalerCoreBankHttpClient {
});
switch (resp.status) {
case HttpStatusCode.Accepted: return opSuccess(resp, codecForCashoutPending())
- //FIXME: it should be precondition-failed
+ //FIXME: change when the server has been updated
case HttpStatusCode.Conflict: return opKnownFailure("no-contact-info", resp);
//FIXME: missing in the docs
- case HttpStatusCode.Forbidden: return opKnownFailure("no-allowed", resp);
- //FIXME: missing in the docs
case HttpStatusCode.PreconditionFailed: return opKnownFailure("no-enough-balance", resp);
//FIXME: missing in the docs
case HttpStatusCode.BadRequest: return opKnownFailure("incorrect-exchange-rate", resp);
- case HttpStatusCode.ServiceUnavailable: return opKnownFailure("tan-not-supported", resp);
+ //FIXME: check the code response to tell cashout or tan not supported
+ case HttpStatusCode.ServiceUnavailable: return opKnownFailure("cashout-or-tan-not-supported", resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
@@ -455,6 +448,7 @@ export class TalerCoreBankHttpClient {
case HttpStatusCode.NoContent: return opEmptySuccess()
case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp);
case HttpStatusCode.Conflict: return opKnownFailure("already-confirmed", resp);
+ case HttpStatusCode.ServiceUnavailable: return opKnownFailure("cashout-not-supported", resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
@@ -477,6 +471,7 @@ export class TalerCoreBankHttpClient {
case HttpStatusCode.Forbidden: return opKnownFailure("wrong-tan-or-credential", resp);
case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp);
case HttpStatusCode.Conflict: return opKnownFailure("cashout-address-changed", resp);
+ case HttpStatusCode.ServiceUnavailable: return opKnownFailure("cashout-not-supported", resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
@@ -500,6 +495,7 @@ export class TalerCoreBankHttpClient {
case HttpStatusCode.Ok: return opSuccess(resp, codecForCashoutConversionResponse())
case HttpStatusCode.BadRequest: return opKnownFailure("wrong-calculation", resp);
case HttpStatusCode.NotFound: return opKnownFailure("not-supported", resp);
+ case HttpStatusCode.ServiceUnavailable: return opKnownFailure("cashout-not-supported", resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
@@ -508,8 +504,9 @@ export class TalerCoreBankHttpClient {
* https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-cashouts
*
*/
- async getAccountCashouts(auth: UserAndToken) {
+ async getAccountCashouts(auth: UserAndToken, pagination?: PaginationParams) {
const url = new URL(`accounts/${auth.username}/cashouts`, this.baseUrl);
+ addPaginationParams(url, pagination)
const resp = await this.httpLib.fetch(url.href, {
method: "GET",
headers: {
@@ -518,9 +515,8 @@ export class TalerCoreBankHttpClient {
});
switch (resp.status) {
case HttpStatusCode.Ok: return opSuccess(resp, codecForCashouts())
- // FIXME: not in docs (maybe for admin and bank)
- case HttpStatusCode.NotFound: return opFixedSuccess({ cashouts: [] });
case HttpStatusCode.NoContent: return opFixedSuccess({ cashouts: [] });
+ case HttpStatusCode.ServiceUnavailable: return opKnownFailure("cashout-not-supported", resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
@@ -529,8 +525,9 @@ export class TalerCoreBankHttpClient {
* https://docs.taler.net/core/api-corebank.html#get--cashouts
*
*/
- async getGlobalCashouts(auth: AccessToken) {
+ async getGlobalCashouts(auth: AccessToken, pagination?: PaginationParams) {
const url = new URL(`cashouts`, this.baseUrl);
+ addPaginationParams(url, pagination)
const resp = await this.httpLib.fetch(url.href, {
method: "GET",
headers: {
@@ -540,6 +537,7 @@ export class TalerCoreBankHttpClient {
switch (resp.status) {
case HttpStatusCode.Ok: return opSuccess(resp, codecForGlobalCashouts())
case HttpStatusCode.NoContent: return opFixedSuccess({ cashouts: [] });
+ case HttpStatusCode.ServiceUnavailable: return opKnownFailure("cashout-not-supported", resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
@@ -557,29 +555,9 @@ export class TalerCoreBankHttpClient {
},
});
switch (resp.status) {
- //FIXME: missing in docs
case HttpStatusCode.Ok: return opSuccess(resp, codecForCashoutStatusResponse())
case HttpStatusCode.NotFound: return opKnownFailure("already-aborted", resp);
- default: return opUnknownFailure(resp, await resp.text())
- }
- }
-
- //
- // CONVERSION RATE
- //
-
- /**
- * https://docs.taler.net/core/api-corebank.html#get--conversion-rates
- *
- */
- async getConversionRates() {
- const url = new URL(`conversion-rates`, this.baseUrl);
- const resp = await this.httpLib.fetch(url.href, {
- method: "GET",
- });
- switch (resp.status) {
- case HttpStatusCode.Ok: return opSuccess(resp, codecForConversionRatesResponse())
- case HttpStatusCode.NotFound: return opKnownFailure("not-supported", resp);
+ case HttpStatusCode.ServiceUnavailable: return opKnownFailure("cashout-not-supported", resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
@@ -592,17 +570,23 @@ export class TalerCoreBankHttpClient {
* https://docs.taler.net/core/api-corebank.html#get--monitor
*
*/
- async getMonitor(params: { timeframe: TalerCorebankApi.MonitorTimeframeParam, which: number }) {
+ async getMonitor(params: { timeframe?: TalerCorebankApi.MonitorTimeframeParam, which?: number }) {
const url = new URL(`monitor`, this.baseUrl);
- url.searchParams.set("timeframe", params.timeframe.toString())
- url.searchParams.set("which", String(params.which))
+ if (params.timeframe) {
+ url.searchParams.set("timeframe", params.timeframe.toString())
+ }
+ if (params.which) {
+ url.searchParams.set("which", String(params.which))
+ }
const resp = await this.httpLib.fetch(url.href, {
method: "GET",
});
switch (resp.status) {
case HttpStatusCode.Ok: return opSuccess(resp, codecForMonitorResponse())
- case HttpStatusCode.NotFound: return opKnownFailure("not-supported", resp);
case HttpStatusCode.BadRequest: return opKnownFailure("invalid-input", resp);
+ //FIXME remove when server is updated
+ case HttpStatusCode.NotFound: return opKnownFailure("monitor-not-supported", resp);
+ case HttpStatusCode.ServiceUnavailable: return opKnownFailure("monitor-not-supported", resp);
default: return opUnknownFailure(resp, await resp.text())
}
}