diff options
Diffstat (limited to 'packages/taler-util/src/http-client/merchant.ts')
-rw-r--r-- | packages/taler-util/src/http-client/merchant.ts | 499 |
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", }); } - - - - } |