summaryrefslogtreecommitdiff
path: root/packages/taler-util/src
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2024-03-22 13:56:16 -0300
committerSebastian <sebasjm@gmail.com>2024-03-26 16:57:58 -0300
commite2bfbced7ab027c901913e83ff7dd82240661990 (patch)
tree33752605ccaf19498f8c2a64e0117db16f22ce26 /packages/taler-util/src
parent0c265558c4b7b78a13272abf1c4c84e3cf93c987 (diff)
downloadwallet-core-e2bfbced7ab027c901913e83ff7dd82240661990.tar.gz
wallet-core-e2bfbced7ab027c901913e83ff7dd82240661990.tar.bz2
wallet-core-e2bfbced7ab027c901913e83ff7dd82240661990.zip
work in progress, new api being used. merchant now should move into using the full API
Diffstat (limited to 'packages/taler-util/src')
-rw-r--r--packages/taler-util/src/http-client/authentication.ts30
-rw-r--r--packages/taler-util/src/http-client/merchant.ts14
-rw-r--r--packages/taler-util/src/http-client/types.ts17
3 files changed, 58 insertions, 3 deletions
diff --git a/packages/taler-util/src/http-client/authentication.ts b/packages/taler-util/src/http-client/authentication.ts
index e8ef6a274..00ef21a06 100644
--- a/packages/taler-util/src/http-client/authentication.ts
+++ b/packages/taler-util/src/http-client/authentication.ts
@@ -34,6 +34,7 @@ import {
AccessToken,
TalerAuthentication,
codecForTokenSuccessResponse,
+ codecForTokenSuccessResponseMerchant,
} from "./types.js";
import { makeBearerTokenAuthHeader } from "./utils.js";
@@ -85,6 +86,35 @@ export class TalerAuthenticationHttpClient {
}
}
+ /**
+ *
+ * @returns
+ */
+ async createAccessTokenMerchant(
+ password: string,
+ body: TalerAuthentication.TokenRequest,
+ ) {
+ const url = new URL(`token`, this.baseUrl);
+ const resp = await this.httpLib.fetch(url.href, {
+ method: "POST",
+ headers: {
+ Authorization: makeBearerTokenAuthHeader(password as AccessToken),
+ },
+ body,
+ });
+ switch (resp.status) {
+ case HttpStatusCode.Ok:
+ return opSuccessFromHttp(resp, codecForTokenSuccessResponseMerchant());
+ //FIXME: missing in docs
+ case HttpStatusCode.Unauthorized:
+ return opKnownHttpFailure(resp.status, resp);
+ case HttpStatusCode.NotFound:
+ return opKnownHttpFailure(resp.status, resp);
+ default:
+ return opUnknownFailure(resp, await resp.text());
+ }
+ }
+
async deleteAccessToken(token: AccessToken) {
const url = new URL(`token`, this.baseUrl);
const resp = await this.httpLib.fetch(url.href, {
diff --git a/packages/taler-util/src/http-client/merchant.ts b/packages/taler-util/src/http-client/merchant.ts
index 7407cce66..688e80c29 100644
--- a/packages/taler-util/src/http-client/merchant.ts
+++ b/packages/taler-util/src/http-client/merchant.ts
@@ -15,6 +15,7 @@
*/
import {
+ AccessToken,
HttpStatusCode,
LibtoolVersion,
PaginationParams,
@@ -64,6 +65,7 @@ import { opSuccessFromHttp, opUnknownFailure } from "../operation.js";
import {
CacheEvictor,
addMerchantPaginationParams,
+ makeBearerTokenAuthHeader,
nullEvictor,
} from "./utils.js";
@@ -126,12 +128,15 @@ export class TalerMerchantInstanceHttpClient {
/**
* https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-orders-$ORDER_ID-claim
*/
- async claimOrder(orderId: string, body: TalerMerchantApi.ClaimRequest) {
+ async claimOrder(token: AccessToken, orderId: string, body: TalerMerchantApi.ClaimRequest) {
const url = new URL(`orders/${orderId}/claim`, this.baseUrl);
const resp = await this.httpLib.fetch(url.href, {
method: "POST",
body,
+ headers: {
+ Authorization: makeBearerTokenAuthHeader(token),
+ }
});
switch (resp.status) {
@@ -516,11 +521,14 @@ export class TalerMerchantInstanceHttpClient {
/**
* https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-accounts
*/
- async listAccounts() {
+ async listAccounts(token: AccessToken) {
const url = new URL(`private/accounts`, this.baseUrl);
const resp = await this.httpLib.fetch(url.href, {
method: "GET",
+ headers: {
+ Authorization: makeBearerTokenAuthHeader(token),
+ }
});
switch (resp.status) {
@@ -1496,7 +1504,7 @@ export class TalerMerchantManagementHttpClient extends TalerMerchantInstanceHttp
}
getSubInstanceAPI(instanceId: string) {
- return new URL(`instances/${instanceId}`, this.baseUrl);
+ return new URL(`instances/${instanceId}/`, this.baseUrl);
}
//
diff --git a/packages/taler-util/src/http-client/types.ts b/packages/taler-util/src/http-client/types.ts
index 05897614a..7f97f9ff1 100644
--- a/packages/taler-util/src/http-client/types.ts
+++ b/packages/taler-util/src/http-client/types.ts
@@ -221,6 +221,16 @@ export namespace TalerAuthentication {
// Opque access token.
access_token: AccessToken;
}
+ export interface TokenSuccessResponseMerchant {
+ // Expiration determined by the server.
+ // Can be based on the token_duration
+ // from the request, but ultimately the
+ // server decides the expiration.
+ expiration: Timestamp;
+
+ // Opque access token.
+ token: AccessToken;
+ }
}
// DD51 https://docs.taler.net/design-documents/051-fractional-digits.html
@@ -254,6 +264,13 @@ export const codecForTokenSuccessResponse =
.property("expiration", codecForTimestamp)
.build("TalerAuthentication.TokenSuccessResponse");
+export const codecForTokenSuccessResponseMerchant =
+ (): Codec<TalerAuthentication.TokenSuccessResponseMerchant> =>
+ buildCodecForObject<TalerAuthentication.TokenSuccessResponseMerchant>()
+ .property("token", codecForAccessToken())
+ .property("expiration", codecForTimestamp)
+ .build("TalerAuthentication.TokenSuccessResponseMerchant");
+
export const codecForCurrencySpecificiation =
(): Codec<CurrencySpecification> =>
buildCodecForObject<CurrencySpecification>()