summaryrefslogtreecommitdiff
path: root/packages/taler-util/src/http-client/merchant.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/taler-util/src/http-client/merchant.ts')
-rw-r--r--packages/taler-util/src/http-client/merchant.ts499
1 files changed, 380 insertions, 119 deletions
diff --git a/packages/taler-util/src/http-client/merchant.ts b/packages/taler-util/src/http-client/merchant.ts
index 00efc5a71..b054a04eb 100644
--- a/packages/taler-util/src/http-client/merchant.ts
+++ b/packages/taler-util/src/http-client/merchant.ts
@@ -17,20 +17,33 @@
import {
HttpStatusCode,
LibtoolVersion,
+ PaginationParams,
TalerMerchantApi,
+ codecForAbortResponse,
+ codecForAccountAddDetails,
+ codecForAccountAddResponse,
+ codecForAccountKycRedirects,
+ codecForAccountsSummaryResponse,
+ codecForBankAccountEntry,
codecForClaimResponse,
+ codecForInventorySummaryResponse,
codecForMerchantConfig,
- opKnownHttpFailure
+ codecForPaidRefundStatusResponse,
+ codecForPaymentResponse,
+ codecForQueryInstancesResponse,
+ codecForStatusGoto,
+ codecForStatusPaid,
+ codecForStatusStatusUnpaid,
+ codecForWalletRefundResponse,
+ opEmptySuccess,
+ opKnownHttpFailure,
} from "@gnu-taler/taler-util";
import {
HttpRequestLibrary,
createPlatformHttpLib,
} from "@gnu-taler/taler-util/http";
-import {
- opSuccessFromHttp,
- opUnknownFailure
-} from "../operation.js";
-import { CacheEvictor, nullEvictor } from "./utils.js";
+import { opSuccessFromHttp, opUnknownFailure } from "../operation.js";
+import { CacheEvictor, addMerchantPaginationParams, addPaginationParams, nullEvictor } from "./utils.js";
export enum TalerMerchantCacheEviction {
CREATE_ORDER,
@@ -44,7 +57,8 @@ export enum TalerMerchantCacheEviction {
*
* Uses libtool's current:revision:age versioning.
*/
-class TalerMerchantInstanceHttpClient {
+export class TalerMerchantInstanceHttpClient {
+ public readonly PROTOCOL_VERSION = "10:0:6";
readonly httpLib: HttpRequestLibrary;
readonly cacheEvictor: CacheEvictor<TalerMerchantCacheEviction>;
@@ -58,6 +72,28 @@ class TalerMerchantInstanceHttpClient {
this.cacheEvictor = cacheEvictor ?? nullEvictor;
}
+ isCompatible(version: string): boolean {
+ const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);
+ return compare?.compatible ?? false;
+ }
+
+ /**
+ * https://docs.taler.net/core/api-merchant.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 opSuccessFromHttp(resp, codecForMerchantConfig());
+ default:
+ return opUnknownFailure(resp, await resp.text());
+ }
+ }
+
//
// Wallet API
//
@@ -77,9 +113,9 @@ class TalerMerchantInstanceHttpClient {
case HttpStatusCode.Ok:
return opSuccessFromHttp(resp, codecForClaimResponse());
case HttpStatusCode.Conflict:
- return opKnownHttpFailure(resp.status, resp)
+ return opKnownHttpFailure(resp.status, resp);
case HttpStatusCode.NotFound:
- return opKnownHttpFailure(resp.status, resp)
+ return opKnownHttpFailure(resp.status, resp);
default:
return opUnknownFailure(resp, await resp.text());
}
@@ -96,36 +132,70 @@ class TalerMerchantInstanceHttpClient {
body,
});
- ///
+ switch (resp.status) {
+ case HttpStatusCode.Ok:
+ return opSuccessFromHttp(resp, codecForPaymentResponse());
+ case HttpStatusCode.BadRequest:
+ return opKnownHttpFailure(resp.status, resp);
+ case HttpStatusCode.PaymentRequired:
+ return opKnownHttpFailure(resp.status, resp);
+ case HttpStatusCode.Forbidden:
+ return opKnownHttpFailure(resp.status, resp);
+ case HttpStatusCode.NotFound:
+ return opKnownHttpFailure(resp.status, resp);
+ case HttpStatusCode.RequestTimeout:
+ return opKnownHttpFailure(resp.status, resp);
+ case HttpStatusCode.Conflict:
+ return opKnownHttpFailure(resp.status, resp);
+ case HttpStatusCode.Gone:
+ return opKnownHttpFailure(resp.status, resp);
+ case HttpStatusCode.PreconditionFailed:
+ return opKnownHttpFailure(resp.status, resp);
+ case HttpStatusCode.BadGateway:
+ return opKnownHttpFailure(resp.status, resp);
+ case HttpStatusCode.GatewayTimeout:
+ return opKnownHttpFailure(resp.status, resp);
+ default:
+ return opUnknownFailure(resp, await resp.text());
+ }
}
/**
* https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-orders-$ORDER_ID
*/
- async getPaymentStatus(orderId: string, params: TalerMerchantApi.PaymentStatusRequestParams = {}) {
+ async getPaymentStatus(
+ orderId: string,
+ params: TalerMerchantApi.PaymentStatusRequestParams = {},
+ ) {
const url = new URL(`orders/${orderId}`, this.baseUrl);
if (params.allowRefundedForRepurchase !== undefined) {
- url.searchParams.set("allow_refunded_for_repurchase", params.allowRefundedForRepurchase ? "YES" : "NO")
+ url.searchParams.set(
+ "allow_refunded_for_repurchase",
+ params.allowRefundedForRepurchase ? "YES" : "NO",
+ );
}
if (params.awaitRefundObtained !== undefined) {
- url.searchParams.set("await_refund_obtained", params.allowRefundedForRepurchase ? "YES" : "NO")
+ url.searchParams.set(
+ "await_refund_obtained",
+ params.allowRefundedForRepurchase ? "YES" : "NO",
+ );
}
if (params.claimToken !== undefined) {
- url.searchParams.set("token", params.claimToken)
+ url.searchParams.set("token", params.claimToken);
}
if (params.contractTermHash !== undefined) {
- url.searchParams.set("h_contract", params.contractTermHash)
+ url.searchParams.set("h_contract", params.contractTermHash);
}
if (params.refund !== undefined) {
- url.searchParams.set("refund", params.refund)
+ url.searchParams.set("refund", params.refund);
}
if (params.sessionId !== undefined) {
- url.searchParams.set("session_id", params.sessionId)
+ url.searchParams.set("session_id", params.sessionId);
}
if (params.timeout !== undefined) {
- url.searchParams.set("timeout_ms", String(params.timeout))
+ url.searchParams.set("timeout_ms", String(params.timeout));
}
const resp = await this.httpLib.fetch(url.href, {
@@ -133,7 +203,23 @@ class TalerMerchantInstanceHttpClient {
// body,
});
- ///
+ switch (resp.status) {
+ case HttpStatusCode.Ok:
+ return opSuccessFromHttp(resp, codecForStatusPaid());
+ case HttpStatusCode.Accepted:
+ return opSuccessFromHttp(resp, codecForStatusGoto());
+ // case HttpStatusCode.Found: not possible since content is not HTML
+ case HttpStatusCode.PaymentRequired:
+ return opSuccessFromHttp(resp, codecForStatusStatusUnpaid());
+ case HttpStatusCode.Forbidden:
+ return opKnownHttpFailure(resp.status, resp);
+ case HttpStatusCode.NotFound:
+ return opKnownHttpFailure(resp.status, resp);
+ case HttpStatusCode.NotAcceptable:
+ return opKnownHttpFailure(resp.status, resp);
+ default:
+ return opUnknownFailure(resp, await resp.text());
+ }
}
/**
@@ -146,40 +232,87 @@ class TalerMerchantInstanceHttpClient {
method: "POST",
body,
});
+
+ switch (resp.status) {
+ case HttpStatusCode.Ok:
+ return opSuccessFromHttp(resp, codecForPaidRefundStatusResponse());
+ case HttpStatusCode.BadRequest:
+ return opKnownHttpFailure(resp.status, resp);
+ case HttpStatusCode.Forbidden:
+ return opKnownHttpFailure(resp.status, resp);
+ case HttpStatusCode.NotFound:
+ return opKnownHttpFailure(resp.status, resp);
+ default:
+ return opUnknownFailure(resp, await resp.text());
+ }
}
/**
* https://docs.taler.net/core/api-merchant.html#aborting-incomplete-payments
*/
- async abortIncompletePayment(orderId: string, body: TalerMerchantApi.AbortRequest) {
+ async abortIncompletePayment(
+ orderId: string,
+ body: TalerMerchantApi.AbortRequest,
+ ) {
const url = new URL(`orders/${orderId}/abort`, this.baseUrl);
const resp = await this.httpLib.fetch(url.href, {
method: "POST",
body,
});
+
+ switch (resp.status) {
+ case HttpStatusCode.Ok:
+ return opSuccessFromHttp(resp, codecForAbortResponse());
+ case HttpStatusCode.BadRequest:
+ return opKnownHttpFailure(resp.status, resp);
+ case HttpStatusCode.Forbidden:
+ return opKnownHttpFailure(resp.status, resp);
+ case HttpStatusCode.NotFound:
+ return opKnownHttpFailure(resp.status, resp);
+ default:
+ return opUnknownFailure(resp, await resp.text());
+ }
}
/**
* https://docs.taler.net/core/api-merchant.html#obtaining-refunds
*/
- async obtainRefund(orderId: string, body: TalerMerchantApi.WalletRefundRequest) {
+ async obtainRefund(
+ orderId: string,
+ body: TalerMerchantApi.WalletRefundRequest,
+ ) {
const url = new URL(`orders/${orderId}/refund`, this.baseUrl);
const resp = await this.httpLib.fetch(url.href, {
method: "POST",
body,
});
+
+ switch (resp.status) {
+ case HttpStatusCode.Ok:
+ return opSuccessFromHttp(resp, codecForWalletRefundResponse());
+ case HttpStatusCode.BadRequest:
+ return opKnownHttpFailure(resp.status, resp);
+ case HttpStatusCode.Forbidden:
+ return opKnownHttpFailure(resp.status, resp);
+ case HttpStatusCode.NotFound:
+ return opKnownHttpFailure(resp.status, resp);
+ default:
+ return opUnknownFailure(resp, await resp.text());
+ }
}
- //
+ //
// Management
//
/**
* https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-auth
*/
- async updateCurrentInstanceAuthentication(body: TalerMerchantApi.InstanceAuthConfigurationMessage) {
+ async updateCurrentInstanceAuthentication(
+ body: TalerMerchantApi.InstanceAuthConfigurationMessage,
+ ) {
const url = new URL(`private/auth`, this.baseUrl);
const resp = await this.httpLib.fetch(url.href, {
@@ -188,11 +321,19 @@ class TalerMerchantInstanceHttpClient {
});
//
+ switch (resp.status) {
+ case HttpStatusCode.Ok:
+ return opEmptySuccess(resp);
+ case HttpStatusCode.NotFound:
+ return opKnownHttpFailure(resp.status, resp);
+ default:
+ return opUnknownFailure(resp, await resp.text());
+ }
}
/**
* Get the auth api agaisnt the current instance
- *
+ *
* https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCE]-private-token
* https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private-token
*/
@@ -201,20 +342,30 @@ class TalerMerchantInstanceHttpClient {
}
/**
- * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private
- */
- async updateCurrentInstance(body: TalerMerchantApi.InstanceReconfigurationMessage) {
+ * https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private
+ */
+ async updateCurrentInstance(
+ body: TalerMerchantApi.InstanceReconfigurationMessage,
+ ) {
const url = new URL(`private`, this.baseUrl);
const resp = await this.httpLib.fetch(url.href, {
method: "PATCH",
body,
});
+ switch (resp.status) {
+ case HttpStatusCode.Ok:
+ return opEmptySuccess(resp);
+ case HttpStatusCode.NotFound:
+ return opKnownHttpFailure(resp.status, resp);
+ default:
+ return opUnknownFailure(resp, await resp.text());
+ }
}
/**
* https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private
- *
+ *
*/
async getCurrentInstance() {
const url = new URL(`private`, this.baseUrl);
@@ -222,43 +373,79 @@ class TalerMerchantInstanceHttpClient {
const resp = await this.httpLib.fetch(url.href, {
method: "GET",
});
+
+ switch (resp.status) {
+ case HttpStatusCode.Ok:
+ return opSuccessFromHttp(resp, codecForQueryInstancesResponse());
+ default:
+ return opUnknownFailure(resp, await resp.text());
+ }
}
/**
- * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private
- */
+ * https://docs.taler.net/core/api-merchant.html#delete-[-instances-$INSTANCE]-private
+ */
async deleteCurrentInstance(params: { purge?: boolean }) {
const url = new URL(`private`, this.baseUrl);
if (params.purge) {
- url.searchParams.set("purge", "YES")
+ url.searchParams.set("purge", "YES");
}
const resp = await this.httpLib.fetch(url.href, {
method: "DELETE",
});
+
+ switch (resp.status) {
+ case HttpStatusCode.NoContent:
+ return opEmptySuccess(resp);
+ case HttpStatusCode.Unauthorized:
+ return opKnownHttpFailure(resp.status, resp);
+ case HttpStatusCode.NotFound:
+ return opKnownHttpFailure(resp.status, resp);
+ case HttpStatusCode.Conflict:
+ return opKnownHttpFailure(resp.status, resp);
+ default:
+ return opUnknownFailure(resp, await resp.text());
+ }
}
/**
* https://docs.taler.net/core/api-merchant.html#get--instances-$INSTANCE-private-kyc
*/
- async getCurrentIntanceKycStatus(params: TalerMerchantApi.GetKycStatusRequestParams) {
+ async getCurrentIntanceKycStatus(
+ params: TalerMerchantApi.GetKycStatusRequestParams,
+ ) {
const url = new URL(`private/kyc`, this.baseUrl);
if (params.wireHash) {
- url.searchParams.set("h_wire", params.wireHash)
+ url.searchParams.set("h_wire", params.wireHash);
}
if (params.exchangeURL) {
- url.searchParams.set("exchange_url", params.exchangeURL)
+ url.searchParams.set("exchange_url", params.exchangeURL);
}
if (params.timeout) {
- url.searchParams.set("timeout_ms", String(params.timeout))
+ url.searchParams.set("timeout_ms", String(params.timeout));
}
const resp = await this.httpLib.fetch(url.href, {
method: "GET",
});
+ switch (resp.status) {
+ case HttpStatusCode.Accepted:
+ return opSuccessFromHttp(resp, codecForAccountKycRedirects());
+ case HttpStatusCode.NoContent:
+ return opEmptySuccess(resp);
+ case HttpStatusCode.BadGateway:
+ return opKnownHttpFailure(resp.status, resp);
+ case HttpStatusCode.ServiceUnavailable:
+ return opKnownHttpFailure(resp.status, resp);
+ case HttpStatusCode.Conflict:
+ return opKnownHttpFailure(resp.status, resp);
+ default:
+ return opUnknownFailure(resp, await resp.text());
+ }
}
//
@@ -275,18 +462,40 @@ class TalerMerchantInstanceHttpClient {
method: "POST",
body,
});
+
+ switch (resp.status) {
+ case HttpStatusCode.Ok:
+ return opSuccessFromHttp(resp, codecForAccountAddResponse());
+ case HttpStatusCode.NotFound:
+ return opKnownHttpFailure(resp.status, resp);
+ case HttpStatusCode.Conflict:
+ return opKnownHttpFailure(resp.status, resp);
+ default:
+ return opUnknownFailure(resp, await resp.text());
+ }
}
/**
* https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-accounts-$H_WIRE
*/
- async updateAccount(wireAccount: string, body: TalerMerchantApi.AccountPatchDetails) {
+ async updateAccount(
+ wireAccount: string,
+ body: TalerMerchantApi.AccountPatchDetails,
+ ) {
const url = new URL(`private/accounts/${wireAccount}`, this.baseUrl);
const resp = await this.httpLib.fetch(url.href, {
method: "PATCH",
body,
});
+ switch (resp.status) {
+ case HttpStatusCode.NoContent:
+ return opEmptySuccess(resp);
+ case HttpStatusCode.NotFound:
+ return opKnownHttpFailure(resp.status, resp);
+ default:
+ return opUnknownFailure(resp, await resp.text());
+ }
}
/**
@@ -298,6 +507,15 @@ class TalerMerchantInstanceHttpClient {
const resp = await this.httpLib.fetch(url.href, {
method: "GET",
});
+
+ switch (resp.status) {
+ case HttpStatusCode.Ok:
+ return opSuccessFromHttp(resp, codecForAccountsSummaryResponse());
+ case HttpStatusCode.NotFound:
+ return opKnownHttpFailure(resp.status, resp);
+ default:
+ return opUnknownFailure(resp, await resp.text());
+ }
}
/**
@@ -309,6 +527,15 @@ class TalerMerchantInstanceHttpClient {
const resp = await this.httpLib.fetch(url.href, {
method: "GET",
});
+
+ switch (resp.status) {
+ case HttpStatusCode.Ok:
+ return opSuccessFromHttp(resp, codecForBankAccountEntry());
+ case HttpStatusCode.NotFound:
+ return opKnownHttpFailure(resp.status, resp);
+ default:
+ return opUnknownFailure(resp, await resp.text());
+ }
}
/**
@@ -320,6 +547,15 @@ class TalerMerchantInstanceHttpClient {
const resp = await this.httpLib.fetch(url.href, {
method: "DELETE",
});
+
+ switch (resp.status) {
+ case HttpStatusCode.NoContent:
+ return opEmptySuccess(resp);
+ case HttpStatusCode.NotFound:
+ return opKnownHttpFailure(resp.status, resp);
+ default:
+ return opUnknownFailure(resp, await resp.text());
+ }
}
//
@@ -336,29 +572,63 @@ class TalerMerchantInstanceHttpClient {
method: "POST",
body,
});
+
+ switch (resp.status) {
+ case HttpStatusCode.NoContent:
+ return opEmptySuccess(resp);
+ case HttpStatusCode.Conflict:
+ return opKnownHttpFailure(resp.status, resp);
+ default:
+ return opUnknownFailure(resp, await resp.text());
+ }
}
/**
* https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-products-$PRODUCT_ID
*/
- async updateProduct(productId: string, body: TalerMerchantApi.ProductAddDetail) {
+ async updateProduct(
+ productId: string,
+ body: TalerMerchantApi.ProductAddDetail,
+ ) {
const url = new URL(`private/products/${productId}`, this.baseUrl);
const resp = await this.httpLib.fetch(url.href, {
method: "PATCH",
body,
});
+
+ switch (resp.status) {
+ case HttpStatusCode.NoContent:
+ return opEmptySuccess(resp);
+ case HttpStatusCode.NotFound:
+ return opKnownHttpFailure(resp.status, resp);
+ case HttpStatusCode.Conflict:
+ return opKnownHttpFailure(resp.status, resp);
+ default:
+ return opUnknownFailure(resp, await resp.text());
+ }
}
/**
* https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-products
*/
- async listProducts() {
+ async listProducts(params?: PaginationParams) {
const url = new URL(`private/products`, this.baseUrl);
+ addMerchantPaginationParams(url, params);
+
const resp = await this.httpLib.fetch(url.href, {
method: "GET",
});
+
+ switch (resp.status) {
+ case HttpStatusCode.Ok:
+ return opSuccessFromHttp(resp, codecForInventorySummaryResponse());
+ case HttpStatusCode.NotFound:
+ return opKnownHttpFailure(resp.status, resp);
+ default:
+ return opUnknownFailure(resp, await resp.text());
+ }
}
/**
@@ -417,31 +687,31 @@ class TalerMerchantInstanceHttpClient {
const url = new URL(`private/orders`, this.baseUrl);
if (params.date) {
- url.searchParams.set("date_s", String(params.date))
+ url.searchParams.set("date_s", String(params.date));
}
if (params.delta) {
- url.searchParams.set("delta", String(params.delta))
+ url.searchParams.set("delta", String(params.delta));
}
if (params.fulfillmentUrl) {
- url.searchParams.set("fulfillment_url", params.fulfillmentUrl)
+ url.searchParams.set("fulfillment_url", params.fulfillmentUrl);
}
if (params.paid) {
- url.searchParams.set("paid", "YES")
+ url.searchParams.set("paid", "YES");
}
if (params.refunded) {
- url.searchParams.set("refunded", "YES")
+ url.searchParams.set("refunded", "YES");
}
if (params.sessionId) {
- url.searchParams.set("session_id", params.sessionId)
+ url.searchParams.set("session_id", params.sessionId);
}
if (params.start) {
- url.searchParams.set("start", String(params.start))
+ url.searchParams.set("start", String(params.start));
}
if (params.timeout) {
- url.searchParams.set("timeout", String(params.timeout))
+ url.searchParams.set("timeout", String(params.timeout));
}
if (params.wired) {
- url.searchParams.set("wired", "YES")
+ url.searchParams.set("wired", "YES");
}
const resp = await this.httpLib.fetch(url.href, {
@@ -452,17 +722,20 @@ class TalerMerchantInstanceHttpClient {
/**
* https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-orders-$ORDER_ID
*/
- async getOrder(orderId: string, params: TalerMerchantApi.GetOrderRequestParams = {}) {
+ async getOrder(
+ orderId: string,
+ params: TalerMerchantApi.GetOrderRequestParams = {},
+ ) {
const url = new URL(`private/orders/${orderId}`, this.baseUrl);
if (params.allowRefundedForRepurchase) {
- url.searchParams.set("allow_refunded_for_repurchase", "YES")
+ url.searchParams.set("allow_refunded_for_repurchase", "YES");
}
if (params.sessionId) {
- url.searchParams.set("session_id", params.sessionId)
+ url.searchParams.set("session_id", params.sessionId);
}
if (params.timeout) {
- url.searchParams.set("timeout_ms", String(params.timeout))
+ url.searchParams.set("timeout_ms", String(params.timeout));
}
const resp = await this.httpLib.fetch(url.href, {
@@ -493,7 +766,7 @@ class TalerMerchantInstanceHttpClient {
});
}
- //
+ //
// Refunds
//
@@ -528,26 +801,28 @@ class TalerMerchantInstanceHttpClient {
/**
* https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-transfers
*/
- async listWireTransfers(params: TalerMerchantApi.ListWireTransferRequestParams = {}) {
+ async listWireTransfers(
+ params: TalerMerchantApi.ListWireTransferRequestParams = {},
+ ) {
const url = new URL(`private/transfers`, this.baseUrl);
if (params.after) {
- url.searchParams.set("after", String(params.after))
+ url.searchParams.set("after", String(params.after));
}
if (params.before) {
- url.searchParams.set("before", String(params.before))
+ url.searchParams.set("before", String(params.before));
}
if (params.limit) {
- url.searchParams.set("limit", String(params.limit))
+ url.searchParams.set("limit", String(params.limit));
}
if (params.offset) {
- url.searchParams.set("offset", String(params.offset))
+ url.searchParams.set("offset", String(params.offset));
}
if (params.paytoURI) {
- url.searchParams.set("payto_uri", params.paytoURI)
+ url.searchParams.set("payto_uri", params.paytoURI);
}
if (params.verified) {
- url.searchParams.set("verified", "YES")
+ url.searchParams.set("verified", "YES");
}
const resp = await this.httpLib.fetch(url.href, {
@@ -585,7 +860,10 @@ class TalerMerchantInstanceHttpClient {
/**
* https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-otp-devices-$DEVICE_ID
*/
- async updateOtpDevice(deviceId: string, body: TalerMerchantApi.OtpDevicePatchDetails) {
+ async updateOtpDevice(
+ deviceId: string,
+ body: TalerMerchantApi.OtpDevicePatchDetails,
+ ) {
const url = new URL(`private/otp-devices/${deviceId}`, this.baseUrl);
const resp = await this.httpLib.fetch(url.href, {
@@ -608,19 +886,21 @@ class TalerMerchantInstanceHttpClient {
/**
* https://docs.taler.net/core/api-merchant.html#get-[-instances-$INSTANCE]-private-otp-devices-$DEVICE_ID
*/
- async getOtpDevice(deviceId: string, params: TalerMerchantApi.GetOtpDeviceRequestParams = {}) {
+ async getOtpDevice(
+ deviceId: string,
+ params: TalerMerchantApi.GetOtpDeviceRequestParams = {},
+ ) {
const url = new URL(`private/otp-devices/${deviceId}`, this.baseUrl);
if (params.faketime) {
- url.searchParams.set("faketime", String(params.faketime))
+ url.searchParams.set("faketime", String(params.faketime));
}
if (params.price) {
- url.searchParams.set("price", params.price)
+ url.searchParams.set("price", params.price);
}
const resp = await this.httpLib.fetch(url.href, {
method: "GET",
});
-
}
/**
@@ -653,7 +933,10 @@ class TalerMerchantInstanceHttpClient {
/**
* https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCE]-private-templates-$TEMPLATE_ID
*/
- async updateTemplate(templateId: string, body: TalerMerchantApi.TemplatePatchDetails) {
+ async updateTemplate(
+ templateId: string,
+ body: TalerMerchantApi.TemplatePatchDetails,
+ ) {
const url = new URL(`private/templates/${templateId}`, this.baseUrl);
const resp = await this.httpLib.fetch(url.href, {
@@ -704,13 +987,15 @@ class TalerMerchantInstanceHttpClient {
const resp = await this.httpLib.fetch(url.href, {
method: "GET",
});
-
}
/**
* https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCES]-templates-$TEMPLATE_ID
*/
- async useTemplateCreateOrder(templateId: string, body: TalerMerchantApi.UsingTemplateDetails) {
+ async useTemplateCreateOrder(
+ templateId: string,
+ body: TalerMerchantApi.UsingTemplateDetails,
+ ) {
const url = new URL(`templates/${templateId}`, this.baseUrl);
const resp = await this.httpLib.fetch(url.href, {
@@ -723,7 +1008,6 @@ class TalerMerchantInstanceHttpClient {
// Webhooks
//
-
/**
* https://docs.taler.net/core/api-merchant.html#post-[-instances-$INSTANCES]-private-webhooks
*/
@@ -739,7 +1023,10 @@ class TalerMerchantInstanceHttpClient {
/**
* https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCES]-private-webhooks-$WEBHOOK_ID
*/
- async updateWebhook(webhookId: string, body: TalerMerchantApi.WebhookPatchDetails) {
+ async updateWebhook(
+ webhookId: string,
+ body: TalerMerchantApi.WebhookPatchDetails,
+ ) {
const url = new URL(`private/webhooks/${webhookId}`, this.baseUrl);
const resp = await this.httpLib.fetch(url.href, {
@@ -800,7 +1087,10 @@ class TalerMerchantInstanceHttpClient {
/**
* https://docs.taler.net/core/api-merchant.html#patch-[-instances-$INSTANCES]-private-tokenfamilies-$TOKEN_FAMILY_SLUG
*/
- async updateTokenFamily(tokenSlug: string,body: TalerMerchantApi.TokenFamilyCreateRequest) {
+ async updateTokenFamily(
+ tokenSlug: string,
+ body: TalerMerchantApi.TokenFamilyCreateRequest,
+ ) {
const url = new URL(`private/tokenfamilies/${tokenSlug}`, this.baseUrl);
const resp = await this.httpLib.fetch(url.href, {
@@ -829,7 +1119,6 @@ class TalerMerchantInstanceHttpClient {
const resp = await this.httpLib.fetch(url.href, {
method: "GET",
});
-
}
/**
@@ -842,49 +1131,21 @@ class TalerMerchantInstanceHttpClient {
method: "DELETE",
});
}
-
}
export class TalerMerchantManagementHttpClient extends TalerMerchantInstanceHttpClient {
- public readonly PROTOCOL_VERSION = "10:0:6";
-
- httpLib: HttpRequestLibrary;
- cacheEvictor: CacheEvictor<TalerMerchantCacheEviction>;
constructor(
readonly baseUrl: string,
httpClient?: HttpRequestLibrary,
cacheEvictor?: CacheEvictor<TalerMerchantCacheEviction>,
) {
- super(baseUrl, httpClient, cacheEvictor)
- }
-
- isCompatible(version: string): boolean {
- const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);
- return compare?.compatible ?? false;
+ super(baseUrl, httpClient, cacheEvictor);
}
getSubInstanceApi(instanceId: string) {
- return new URL(`instances/${instanceId}`, this.baseUrl)
- }
-
- /**
- * https://docs.taler.net/core/api-merchant.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 opSuccessFromHttp(resp, codecForMerchantConfig());
- default:
- return opUnknownFailure(resp, await resp.text());
- }
+ return new URL(`instances/${instanceId}`, this.baseUrl);
}
-
//
// Instance Management
//
@@ -906,7 +1167,9 @@ export class TalerMerchantManagementHttpClient extends TalerMerchantInstanceHttp
/**
* https://docs.taler.net/core/api-merchant.html#post--management-instances-$INSTANCE-auth
*/
- async updateInstanceAuthentication(body: TalerMerchantApi.InstanceAuthConfigurationMessage) {
+ async updateInstanceAuthentication(
+ body: TalerMerchantApi.InstanceAuthConfigurationMessage,
+ ) {
const url = new URL(`management/instances`, this.baseUrl);
const resp = await this.httpLib.fetch(url.href, {
@@ -917,19 +1180,19 @@ export class TalerMerchantManagementHttpClient extends TalerMerchantInstanceHttp
//
}
-
/**
* https://docs.taler.net/core/api-merchant.html#patch--management-instances-$INSTANCE
*/
- async updateInstance(isntanceId: string, body: TalerMerchantApi.InstanceReconfigurationMessage) {
+ async updateInstance(
+ isntanceId: string,
+ body: TalerMerchantApi.InstanceReconfigurationMessage,
+ ) {
const url = new URL(`management/instances/${isntanceId}`, this.baseUrl);
const resp = await this.httpLib.fetch(url.href, {
method: "PATCH",
body,
});
-
-
}
/**
@@ -941,12 +1204,11 @@ export class TalerMerchantManagementHttpClient extends TalerMerchantInstanceHttp
const resp = await this.httpLib.fetch(url.href, {
method: "GET",
});
-
}
/**
* https://docs.taler.net/core/api-merchant.html#get--management-instances-$INSTANCE
- *
+ *
*/
async getInstance(instanceId: string) {
const url = new URL(`management/instances/${instanceId}`, this.baseUrl);
@@ -959,11 +1221,11 @@ export class TalerMerchantManagementHttpClient extends TalerMerchantInstanceHttp
/**
* https://docs.taler.net/core/api-merchant.html#delete--management-instances-$INSTANCE
*/
- async deleteInstance(instanceId: string, params: {purge?: boolean} = {}) {
+ async deleteInstance(instanceId: string, params: { purge?: boolean } = {}) {
const url = new URL(`management/instances/${instanceId}`, this.baseUrl);
if (params.purge) {
- url.searchParams.set("purge", "YES")
+ url.searchParams.set("purge", "YES");
}
const resp = await this.httpLib.fetch(url.href, {
@@ -974,25 +1236,24 @@ export class TalerMerchantManagementHttpClient extends TalerMerchantInstanceHttp
/**
* https://docs.taler.net/core/api-merchant.html#get--management-instances-$INSTANCE-kyc
*/
- async getIntanceKycStatus(instanceId: string, params: TalerMerchantApi.GetKycStatusRequestParams) {
+ async getIntanceKycStatus(
+ instanceId: string,
+ params: TalerMerchantApi.GetKycStatusRequestParams,
+ ) {
const url = new URL(`management/instances/${instanceId}/kyc`, this.baseUrl);
if (params.wireHash) {
- url.searchParams.set("h_wire", params.wireHash)
+ url.searchParams.set("h_wire", params.wireHash);
}
if (params.exchangeURL) {
- url.searchParams.set("exchange_url", params.exchangeURL)
+ url.searchParams.set("exchange_url", params.exchangeURL);
}
if (params.timeout) {
- url.searchParams.set("timeout_ms", String(params.timeout))
+ url.searchParams.set("timeout_ms", String(params.timeout));
}
-
+
const resp = await this.httpLib.fetch(url.href, {
method: "GET",
});
}
-
-
-
-
}