diff options
author | Sebastian <sebasjm@gmail.com> | 2024-03-22 13:56:16 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2024-03-26 16:57:58 -0300 |
commit | e2bfbced7ab027c901913e83ff7dd82240661990 (patch) | |
tree | 33752605ccaf19498f8c2a64e0117db16f22ce26 /packages/taler-util/src | |
parent | 0c265558c4b7b78a13272abf1c4c84e3cf93c987 (diff) | |
download | wallet-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.ts | 30 | ||||
-rw-r--r-- | packages/taler-util/src/http-client/merchant.ts | 14 | ||||
-rw-r--r-- | packages/taler-util/src/http-client/types.ts | 17 |
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>() |