aboutsummaryrefslogtreecommitdiff
path: root/packages/merchant-backoffice-ui/src/hooks
diff options
context:
space:
mode:
Diffstat (limited to 'packages/merchant-backoffice-ui/src/hooks')
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/backend.ts115
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/bank.ts32
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/instance.test.ts100
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/instance.ts51
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/merchant.ts32
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/order.test.ts21
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/order.ts56
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/otp.ts45
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/product.test.ts44
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/product.ts34
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/reserve.test.ts207
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/reserves.ts94
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/templates.ts48
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/transfer.test.ts10
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/transfer.ts26
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/urls.ts120
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/webhooks.ts31
17 files changed, 293 insertions, 773 deletions
diff --git a/packages/merchant-backoffice-ui/src/hooks/backend.ts b/packages/merchant-backoffice-ui/src/hooks/backend.ts
index 37dfd8fd6..8eb9b4cf2 100644
--- a/packages/merchant-backoffice-ui/src/hooks/backend.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/backend.ts
@@ -20,24 +20,21 @@
*/
import {
- AbsoluteTime,
- AccessToken,
- HttpStatusCode,
+ TalerErrorDetail,
+ TalerMerchantApi
} from "@gnu-taler/taler-util";
import {
EmptyObject,
- ErrorType,
HttpError,
HttpResponse,
HttpResponseOk,
RequestError,
RequestOptions,
- useApiContext,
+ useApiContext
} from "@gnu-taler/web-util/browser";
import { useCallback, useEffect, useState } from "preact/hooks";
import { useSWRConfig } from "swr";
import { useSessionContext } from "../context/session.js";
-import { LoginToken, MerchantBackend, Timestamp } from "../declaration.js";
export function useMatchMutate(): (
re?: RegExp,
@@ -72,21 +69,21 @@ export function useMatchMutate(): (
}
export function useBackendInstancesTestForAdmin(): HttpResponse<
- MerchantBackend.Instances.InstancesResponse,
- MerchantBackend.ErrorDetail
+ TalerMerchantApi.InstancesResponse,
+ TalerErrorDetail
> {
const { request } = useBackendBaseRequest();
- type Type = MerchantBackend.Instances.InstancesResponse;
+ type Type = TalerMerchantApi.InstancesResponse;
const [result, setResult] = useState<
- HttpResponse<Type, MerchantBackend.ErrorDetail>
+ HttpResponse<Type, TalerErrorDetail>
>({ loading: true });
useEffect(() => {
request<Type>(`/management/instances`)
.then((data) => setResult(data))
- .catch((error: RequestError<MerchantBackend.ErrorDetail>) =>
+ .catch((error: RequestError<TalerErrorDetail>) =>
setResult(error.cause),
);
}, [request]);
@@ -98,14 +95,14 @@ const CHECK_CONFIG_INTERVAL_OK = 5 * 60 * 1000;
const CHECK_CONFIG_INTERVAL_FAIL = 2 * 1000;
export function useBackendConfig(): HttpResponse<
- MerchantBackend.VersionResponse | undefined,
- RequestError<MerchantBackend.ErrorDetail>
+ TalerMerchantApi.VersionResponse | undefined,
+ RequestError<TalerErrorDetail>
> {
const { request } = useBackendBaseRequest();
- type Type = MerchantBackend.VersionResponse;
+ type Type = TalerMerchantApi.VersionResponse;
type State = {
- data: HttpResponse<Type, RequestError<MerchantBackend.ErrorDetail>>;
+ data: HttpResponse<Type, RequestError<TalerErrorDetail>>;
timer: number;
};
const [result, setResult] = useState<State>({
@@ -191,94 +188,6 @@ type LoginResult =
cause: HttpError<EmptyObject>;
};
-export function useCredentialsChecker() {
- const { request } = useApiContext();
- //check against instance details endpoint
- //while merchant backend doesn't have a login endpoint
- async function requestNewLoginToken(
- baseUrl: string,
- token: AccessToken,
- ): Promise<LoginResult> {
- const data: MerchantBackend.Instances.LoginTokenRequest = {
- scope: "write",
- duration: {
- d_us: "forever",
- },
- refreshable: true,
- };
- try {
- const response =
- await request<MerchantBackend.Instances.LoginTokenSuccessResponse>(
- baseUrl,
- `/private/token`,
- {
- method: "POST",
- token,
- data,
- },
- );
- return {
- valid: true,
- token: response.data.token,
- expiration: response.data.expiration,
- };
- } catch (error) {
- if (error instanceof RequestError) {
- return { valid: false, cause: error.cause };
- }
-
- return {
- valid: false,
- cause: {
- type: ErrorType.UNEXPECTED,
- loading: false,
- info: {
- hasToken: true,
- status: 0,
- options: {},
- url: `/private/token`,
- payload: {},
- },
- exception: error,
- message:
- error instanceof Error ? error.message : "unpexepected error",
- },
- };
- }
- }
-
- async function refreshLoginToken(
- baseUrl: string,
- token: LoginToken,
- ): Promise<LoginResult> {
- if (
- AbsoluteTime.isExpired(
- AbsoluteTime.fromProtocolTimestamp(token.expiration),
- )
- ) {
- return {
- valid: false,
- cause: {
- type: ErrorType.CLIENT,
- status: HttpStatusCode.Unauthorized,
- message: "login token expired, login again.",
- info: {
- hasToken: true,
- status: 401,
- options: {},
- url: `/private/token`,
- payload: {},
- },
- payload: {},
- },
- };
- }
-
- return requestNewLoginToken(baseUrl, token.token as AccessToken);
- }
- return { requestNewLoginToken, refreshLoginToken };
-}
-
/**
*
* @param root the request is intended to the base URL and no the instance URL
diff --git a/packages/merchant-backoffice-ui/src/hooks/bank.ts b/packages/merchant-backoffice-ui/src/hooks/bank.ts
index d01b579b9..3cf9c7846 100644
--- a/packages/merchant-backoffice-ui/src/hooks/bank.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/bank.ts
@@ -20,15 +20,15 @@ import {
RequestError,
} from "@gnu-taler/web-util/browser";
import { useEffect, useState } from "preact/hooks";
-import { MerchantBackend } from "../declaration.js";
import { MAX_RESULT_SIZE, PAGE_SIZE } from "../utils/constants.js";
import { useBackendInstanceRequest, useMatchMutate } from "./backend.js";
// FIX default import https://github.com/microsoft/TypeScript/issues/49189
import _useSWR, { SWRHook, mutate } from "swr";
+import { TalerErrorDetail, TalerMerchantApi } from "@gnu-taler/taler-util";
const useSWR = _useSWR as unknown as SWRHook;
-// const MOCKED_ACCOUNTS: Record<string, MerchantBackend.BankAccounts.AccountAddDetails> = {
+// const MOCKED_ACCOUNTS: Record<string, TalerMerchantApi.AccountAddDetails> = {
// "hwire1": {
// h_wire: "hwire1",
// payto_uri: "payto://fake/iban/123",
@@ -46,7 +46,7 @@ export function useBankAccountAPI(): BankAccountAPI {
const { request } = useBackendInstanceRequest();
const createBankAccount = async (
- data: MerchantBackend.BankAccounts.AccountAddDetails,
+ data: TalerMerchantApi.AccountAddDetails,
): Promise<HttpResponseOk<void>> => {
// MOCKED_ACCOUNTS[data.h_wire] = data
// return Promise.resolve({ ok: true, data: undefined });
@@ -60,7 +60,7 @@ export function useBankAccountAPI(): BankAccountAPI {
const updateBankAccount = async (
h_wire: string,
- data: MerchantBackend.BankAccounts.AccountPatchDetails,
+ data: TalerMerchantApi.AccountPatchDetails,
): Promise<HttpResponseOk<void>> => {
// MOCKED_ACCOUNTS[h_wire].credit_facade_credentials = data.credit_facade_credentials
// MOCKED_ACCOUNTS[h_wire].credit_facade_url = data.credit_facade_url
@@ -94,11 +94,11 @@ export function useBankAccountAPI(): BankAccountAPI {
export interface BankAccountAPI {
createBankAccount: (
- data: MerchantBackend.BankAccounts.AccountAddDetails,
+ data: TalerMerchantApi.AccountAddDetails,
) => Promise<HttpResponseOk<void>>;
updateBankAccount: (
id: string,
- data: MerchantBackend.BankAccounts.AccountPatchDetails,
+ data: TalerMerchantApi.AccountPatchDetails,
) => Promise<HttpResponseOk<void>>;
deleteBankAccount: (id: string) => Promise<HttpResponseOk<void>>;
}
@@ -114,8 +114,8 @@ export function useInstanceBankAccounts(
args?: InstanceBankAccountFilter,
updatePosition?: (id: string) => void,
): HttpResponsePaginated<
- MerchantBackend.BankAccounts.AccountsSummaryResponse,
- MerchantBackend.ErrorDetail
+ TalerMerchantApi.AccountsSummaryResponse,
+ TalerErrorDetail
> {
const { fetcher } = useBackendInstanceRequest();
@@ -128,14 +128,14 @@ export function useInstanceBankAccounts(
error: afterError,
isValidating: loadingAfter,
} = useSWR<
- HttpResponseOk<MerchantBackend.BankAccounts.AccountsSummaryResponse>,
- RequestError<MerchantBackend.ErrorDetail>
+ HttpResponseOk<TalerMerchantApi.AccountsSummaryResponse>,
+ RequestError<TalerErrorDetail>
>([`/private/accounts`], fetcher);
const [lastAfter, setLastAfter] = useState<
HttpResponse<
- MerchantBackend.BankAccounts.AccountsSummaryResponse,
- MerchantBackend.ErrorDetail
+ TalerMerchantApi.AccountsSummaryResponse,
+ TalerErrorDetail
>
>({ loading: true });
useEffect(() => {
@@ -179,8 +179,8 @@ export function useInstanceBankAccounts(
export function useBankAccountDetails(
h_wire: string,
): HttpResponse<
- MerchantBackend.BankAccounts.BankAccountEntry,
- MerchantBackend.ErrorDetail
+ TalerMerchantApi.BankAccountEntry,
+ TalerErrorDetail
> {
// return {
// ok: true,
@@ -192,8 +192,8 @@ export function useBankAccountDetails(
const { fetcher } = useBackendInstanceRequest();
const { data, error, isValidating } = useSWR<
- HttpResponseOk<MerchantBackend.BankAccounts.BankAccountEntry>,
- RequestError<MerchantBackend.ErrorDetail>
+ HttpResponseOk<TalerMerchantApi.BankAccountEntry>,
+ RequestError<TalerErrorDetail>
>([`/private/accounts/${h_wire}`], fetcher, {
refreshInterval: 0,
refreshWhenHidden: false,
diff --git a/packages/merchant-backoffice-ui/src/hooks/instance.test.ts b/packages/merchant-backoffice-ui/src/hooks/instance.test.ts
index a1bb3d5d4..f73f07d68 100644
--- a/packages/merchant-backoffice-ui/src/hooks/instance.test.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/instance.test.ts
@@ -19,9 +19,9 @@
* @author Sebastian Javier Marchano (sebasjm)
*/
+import { AccessToken, TalerMerchantApi } from "@gnu-taler/taler-util";
import * as tests from "@gnu-taler/web-util/testing";
import { expect } from "chai";
-import { MerchantBackend } from "../declaration.js";
import {
useAdminAPI,
useBackendInstances,
@@ -35,12 +35,10 @@ import {
API_DELETE_INSTANCE,
API_GET_CURRENT_INSTANCE,
API_LIST_INSTANCES,
- API_NEW_LOGIN,
API_UPDATE_CURRENT_INSTANCE,
API_UPDATE_CURRENT_INSTANCE_AUTH,
API_UPDATE_INSTANCE_BY_ID,
} from "./urls.js";
-import { AccessToken } from "@gnu-taler/taler-util";
describe("instance api interaction with details", () => {
it("should evict cache when updating an instance", async () => {
@@ -49,7 +47,7 @@ describe("instance api interaction with details", () => {
env.addRequestExpectation(API_GET_CURRENT_INSTANCE, {
response: {
name: "instance_name",
- } as MerchantBackend.Instances.QueryInstancesResponse,
+ } as TalerMerchantApi.QueryInstancesResponse,
});
const hookBehavior = await tests.hookBehaveLikeThis(
@@ -77,16 +75,16 @@ describe("instance api interaction with details", () => {
env.addRequestExpectation(API_UPDATE_CURRENT_INSTANCE, {
request: {
name: "other_name",
- } as MerchantBackend.Instances.InstanceReconfigurationMessage,
+ } as TalerMerchantApi.InstanceReconfigurationMessage,
});
env.addRequestExpectation(API_GET_CURRENT_INSTANCE, {
response: {
name: "other_name",
- } as MerchantBackend.Instances.QueryInstancesResponse,
+ } as TalerMerchantApi.QueryInstancesResponse,
});
api.updateInstance({
name: "other_name",
- } as MerchantBackend.Instances.InstanceReconfigurationMessage);
+ } as TalerMerchantApi.InstanceReconfigurationMessage);
},
({ query, api }) => {
expect(env.assertJustExpectedRequestWereMade()).deep.eq({
@@ -110,15 +108,15 @@ describe("instance api interaction with details", () => {
it("should evict cache when setting the instance's token", async () => {
const env = new ApiMockEnvironment();
- env.addRequestExpectation(API_GET_CURRENT_INSTANCE, {
- response: {
- name: "instance_name",
- auth: {
- method: "token",
- // token: "not-secret",
- },
- } as MerchantBackend.Instances.QueryInstancesResponse,
- });
+ // env.addRequestExpectation(API_GET_CURRENT_INSTANCE, {
+ // response: {
+ // name: "instance_name",
+ // auth: {
+ // method: "token",
+ // // token: "not-secret",
+ // },
+ // } as TalerMerchantApi.QueryInstancesResponse,
+ // });
const hookBehavior = await tests.hookBehaveLikeThis(
() => {
@@ -148,26 +146,26 @@ describe("instance api interaction with details", () => {
request: {
method: "token",
token: "secret",
- } as MerchantBackend.Instances.InstanceAuthConfigurationMessage,
- });
- env.addRequestExpectation(API_NEW_LOGIN, {
- auth: "secret",
- request: {
- scope: "write",
- duration: {
- "d_us": "forever",
- },
- refreshable: true,
- },
- });
+ } as TalerMerchantApi.InstanceAuthConfigurationMessage,
+ });
+ // env.addRequestExpectation(API_NEW_LOGIN, {
+ // auth: "secret",
+ // request: {
+ // scope: "write",
+ // duration: {
+ // "d_us": "forever",
+ // },
+ // refreshable: true,
+ // },
+ // });
env.addRequestExpectation(API_GET_CURRENT_INSTANCE, {
response: {
name: "instance_name",
auth: {
- method: "token",
+ type: "token",
// token: "secret",
},
- } as MerchantBackend.Instances.QueryInstancesResponse,
+ } as TalerMerchantApi.QueryInstancesResponse,
});
api.setNewAccessToken(undefined, "secret" as AccessToken);
},
@@ -200,10 +198,10 @@ describe("instance api interaction with details", () => {
response: {
name: "instance_name",
auth: {
- method: "token",
+ type: "token",
// token: "not-secret",
},
- } as MerchantBackend.Instances.QueryInstancesResponse,
+ } as TalerMerchantApi.QueryInstancesResponse,
});
const hookBehavior = await tests.hookBehaveLikeThis(
@@ -234,15 +232,15 @@ describe("instance api interaction with details", () => {
env.addRequestExpectation(API_UPDATE_CURRENT_INSTANCE_AUTH, {
request: {
method: "external",
- } as MerchantBackend.Instances.InstanceAuthConfigurationMessage,
+ } as TalerMerchantApi.InstanceAuthConfigurationMessage,
});
env.addRequestExpectation(API_GET_CURRENT_INSTANCE, {
response: {
name: "instance_name",
auth: {
- method: "external",
+ type: "external",
},
- } as MerchantBackend.Instances.QueryInstancesResponse,
+ } as TalerMerchantApi.QueryInstancesResponse,
});
api.clearAccessToken(undefined);
@@ -332,7 +330,7 @@ describe("instance admin api interaction with listing", () => {
instances: [
{
name: "instance_name",
- } as MerchantBackend.Instances.Instance,
+ } as TalerMerchantApi.Instance,
],
},
});
@@ -366,24 +364,24 @@ describe("instance admin api interaction with listing", () => {
env.addRequestExpectation(API_CREATE_INSTANCE, {
request: {
name: "other_name",
- } as MerchantBackend.Instances.InstanceConfigurationMessage,
+ } as TalerMerchantApi.InstanceConfigurationMessage,
});
env.addRequestExpectation(API_LIST_INSTANCES, {
response: {
instances: [
{
name: "instance_name",
- } as MerchantBackend.Instances.Instance,
+ } as TalerMerchantApi.Instance,
{
name: "other_name",
- } as MerchantBackend.Instances.Instance,
+ } as TalerMerchantApi.Instance,
],
},
});
api.createInstance({
name: "other_name",
- } as MerchantBackend.Instances.InstanceConfigurationMessage);
+ } as TalerMerchantApi.InstanceConfigurationMessage);
},
({ query, api }) => {
expect(env.assertJustExpectedRequestWereMade()).deep.eq({
@@ -419,11 +417,11 @@ describe("instance admin api interaction with listing", () => {
{
id: "default",
name: "instance_name",
- } as MerchantBackend.Instances.Instance,
+ } as TalerMerchantApi.Instance,
{
id: "the_id",
name: "second_instance",
- } as MerchantBackend.Instances.Instance,
+ } as TalerMerchantApi.Instance,
],
},
});
@@ -466,7 +464,7 @@ describe("instance admin api interaction with listing", () => {
{
id: "default",
name: "instance_name",
- } as MerchantBackend.Instances.Instance,
+ } as TalerMerchantApi.Instance,
],
},
});
@@ -543,7 +541,7 @@ describe("instance admin api interaction with listing", () => {
// instances: [{
// id: 'default',
// name: 'instance_name'
- // } as MerchantBackend.Instances.Instance]
+ // } as TalerMerchantApi.Instance]
// },
// });
@@ -573,11 +571,11 @@ describe("instance admin api interaction with listing", () => {
{
id: "default",
name: "instance_name",
- } as MerchantBackend.Instances.Instance,
+ } as TalerMerchantApi.Instance,
{
id: "the_id",
name: "second_instance",
- } as MerchantBackend.Instances.Instance,
+ } as TalerMerchantApi.Instance,
],
},
});
@@ -624,7 +622,7 @@ describe("instance admin api interaction with listing", () => {
{
id: "default",
name: "instance_name",
- } as MerchantBackend.Instances.Instance,
+ } as TalerMerchantApi.Instance,
],
},
});
@@ -665,7 +663,7 @@ describe("instance management api interaction with listing", () => {
{
id: "managed",
name: "instance_name",
- } as MerchantBackend.Instances.Instance,
+ } as TalerMerchantApi.Instance,
],
},
});
@@ -700,7 +698,7 @@ describe("instance management api interaction with listing", () => {
env.addRequestExpectation(API_UPDATE_INSTANCE_BY_ID("managed"), {
request: {
name: "other_name",
- } as MerchantBackend.Instances.InstanceReconfigurationMessage,
+ } as TalerMerchantApi.InstanceReconfigurationMessage,
});
env.addRequestExpectation(API_LIST_INSTANCES, {
response: {
@@ -708,14 +706,14 @@ describe("instance management api interaction with listing", () => {
{
id: "managed",
name: "other_name",
- } as MerchantBackend.Instances.Instance,
+ } as TalerMerchantApi.Instance,
],
},
});
api.updateInstance({
name: "other_name",
- } as MerchantBackend.Instances.InstanceConfigurationMessage);
+ } as TalerMerchantApi.InstanceConfigurationMessage);
},
({ query, api }) => {
expect(env.assertJustExpectedRequestWereMade()).deep.eq({
diff --git a/packages/merchant-backoffice-ui/src/hooks/instance.ts b/packages/merchant-backoffice-ui/src/hooks/instance.ts
index dfe97fd61..2da82989b 100644
--- a/packages/merchant-backoffice-ui/src/hooks/instance.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/instance.ts
@@ -16,26 +16,23 @@
import {
HttpResponse,
HttpResponseOk,
- RequestError,
- useMerchantApiContext,
+ RequestError
} from "@gnu-taler/web-util/browser";
-import { MerchantBackend } from "../declaration.js";
import {
useBackendBaseRequest,
useBackendInstanceRequest,
- useCredentialsChecker,
useMatchMutate,
} from "./backend.js";
// FIX default import https://github.com/microsoft/TypeScript/issues/49189
+import { AccessToken, TalerErrorDetail, TalerMerchantApi } from "@gnu-taler/taler-util";
import _useSWR, { SWRHook, useSWRConfig } from "swr";
import { useSessionContext } from "../context/session.js";
-import { AccessToken } from "@gnu-taler/taler-util";
const useSWR = _useSWR as unknown as SWRHook;
interface InstanceAPI {
updateInstance: (
- data: MerchantBackend.Instances.InstanceReconfigurationMessage,
+ data: TalerMerchantApi.InstanceReconfigurationMessage,
) => Promise<void>;
deleteInstance: () => Promise<void>;
clearAccessToken: (currentToken: AccessToken | undefined) => Promise<void>;
@@ -50,7 +47,7 @@ export function useAdminAPI(): AdminAPI {
const mutateAll = useMatchMutate();
const createInstance = async (
- instance: MerchantBackend.Instances.InstanceConfigurationMessage,
+ instance: TalerMerchantApi.InstanceConfigurationMessage,
): Promise<void> => {
await request(`/management/instances`, {
method: "POST",
@@ -84,7 +81,7 @@ export function useAdminAPI(): AdminAPI {
export interface AdminAPI {
createInstance: (
- data: MerchantBackend.Instances.InstanceConfigurationMessage,
+ data: TalerMerchantApi.InstanceConfigurationMessage,
) => Promise<void>;
deleteInstance: (id: string) => Promise<void>;
purgeInstance: (id: string) => Promise<void>;
@@ -98,10 +95,9 @@ export function useManagementAPI(instanceId: string): InstanceAPI {
logOut,
} = useSessionContext();
const { request } = useBackendBaseRequest();
- const { requestNewLoginToken } = useCredentialsChecker();
const updateInstance = async (
- instance: MerchantBackend.Instances.InstanceReconfigurationMessage,
+ instance: TalerMerchantApi.InstanceReconfigurationMessage,
): Promise<void> => {
await request(`/management/instances/${instanceId}`, {
method: "PATCH",
@@ -166,14 +162,13 @@ export function useInstanceAPI(): InstanceAPI {
} = useSessionContext();
const { request } = useBackendInstanceRequest();
- const { requestNewLoginToken } = useCredentialsChecker();
const { state, logIn, logOut } = useSessionContext();
const adminToken =
state.status === "loggedIn" && state.isAdmin ? state.token : undefined;
const updateInstance = async (
- instance: MerchantBackend.Instances.InstanceReconfigurationMessage,
+ instance: TalerMerchantApi.InstanceReconfigurationMessage,
): Promise<void> => {
await request(`/private/`, {
method: "PATCH",
@@ -239,14 +234,14 @@ export function useInstanceAPI(): InstanceAPI {
}
export function useInstanceDetails(): HttpResponse<
- MerchantBackend.Instances.QueryInstancesResponse,
- MerchantBackend.ErrorDetail
+ TalerMerchantApi.QueryInstancesResponse,
+ TalerErrorDetail
> {
const { fetcher } = useBackendInstanceRequest();
const { data, error, isValidating } = useSWR<
- HttpResponseOk<MerchantBackend.Instances.QueryInstancesResponse>,
- RequestError<MerchantBackend.ErrorDetail>
+ HttpResponseOk<TalerMerchantApi.QueryInstancesResponse>,
+ RequestError<TalerErrorDetail>
>([`/private/`], fetcher, {
refreshInterval: 0,
refreshWhenHidden: false,
@@ -267,17 +262,17 @@ export function useInstanceDetails(): HttpResponse<
type KYCStatus =
| { type: "ok" }
- | { type: "redirect"; status: MerchantBackend.KYC.AccountKycRedirects };
+ | { type: "redirect"; status: TalerMerchantApi.AccountKycRedirects };
export function useInstanceKYCDetails(): HttpResponse<
KYCStatus,
- MerchantBackend.ErrorDetail
+ TalerErrorDetail
> {
const { fetcher } = useBackendInstanceRequest();
const { data, error } = useSWR<
- HttpResponseOk<MerchantBackend.KYC.AccountKycRedirects>,
- RequestError<MerchantBackend.ErrorDetail>
+ HttpResponseOk<TalerMerchantApi.AccountKycRedirects>,
+ RequestError<TalerErrorDetail>
>([`/private/kyc`], fetcher, {
refreshInterval: 60 * 1000,
refreshWhenHidden: false,
@@ -303,14 +298,14 @@ export function useInstanceKYCDetails(): HttpResponse<
export function useManagedInstanceDetails(
instanceId: string,
): HttpResponse<
- MerchantBackend.Instances.QueryInstancesResponse,
- MerchantBackend.ErrorDetail
+ TalerMerchantApi.QueryInstancesResponse,
+ TalerErrorDetail
> {
const { request } = useBackendBaseRequest();
const { data, error, isValidating } = useSWR<
- HttpResponseOk<MerchantBackend.Instances.QueryInstancesResponse>,
- RequestError<MerchantBackend.ErrorDetail>
+ HttpResponseOk<TalerMerchantApi.QueryInstancesResponse>,
+ RequestError<TalerErrorDetail>
>([`/management/instances/${instanceId}`], request, {
refreshInterval: 0,
refreshWhenHidden: false,
@@ -329,14 +324,14 @@ export function useManagedInstanceDetails(
}
export function useBackendInstances(): HttpResponse<
- MerchantBackend.Instances.InstancesResponse,
- MerchantBackend.ErrorDetail
+ TalerMerchantApi.InstancesResponse,
+ TalerErrorDetail
> {
const { request } = useBackendBaseRequest();
const { data, error, isValidating } = useSWR<
- HttpResponseOk<MerchantBackend.Instances.InstancesResponse>,
- RequestError<MerchantBackend.ErrorDetail>
+ HttpResponseOk<TalerMerchantApi.InstancesResponse>,
+ RequestError<TalerErrorDetail>
>(["/management/instances"], request);
if (isValidating) return { loading: true, data: data?.data };
diff --git a/packages/merchant-backoffice-ui/src/hooks/merchant.ts b/packages/merchant-backoffice-ui/src/hooks/merchant.ts
index d01b579b9..47d9e5624 100644
--- a/packages/merchant-backoffice-ui/src/hooks/merchant.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/merchant.ts
@@ -20,15 +20,15 @@ import {
RequestError,
} from "@gnu-taler/web-util/browser";
import { useEffect, useState } from "preact/hooks";
-import { MerchantBackend } from "../declaration.js";
import { MAX_RESULT_SIZE, PAGE_SIZE } from "../utils/constants.js";
import { useBackendInstanceRequest, useMatchMutate } from "./backend.js";
// FIX default import https://github.com/microsoft/TypeScript/issues/49189
+import { TalerErrorDetail, TalerMerchantApi } from "@gnu-taler/taler-util";
import _useSWR, { SWRHook, mutate } from "swr";
const useSWR = _useSWR as unknown as SWRHook;
-// const MOCKED_ACCOUNTS: Record<string, MerchantBackend.BankAccounts.AccountAddDetails> = {
+// const MOCKED_ACCOUNTS: Record<string, TalerMerchantApi.AccountAddDetails> = {
// "hwire1": {
// h_wire: "hwire1",
// payto_uri: "payto://fake/iban/123",
@@ -46,7 +46,7 @@ export function useBankAccountAPI(): BankAccountAPI {
const { request } = useBackendInstanceRequest();
const createBankAccount = async (
- data: MerchantBackend.BankAccounts.AccountAddDetails,
+ data: TalerMerchantApi.AccountAddDetails,
): Promise<HttpResponseOk<void>> => {
// MOCKED_ACCOUNTS[data.h_wire] = data
// return Promise.resolve({ ok: true, data: undefined });
@@ -60,7 +60,7 @@ export function useBankAccountAPI(): BankAccountAPI {
const updateBankAccount = async (
h_wire: string,
- data: MerchantBackend.BankAccounts.AccountPatchDetails,
+ data: TalerMerchantApi.AccountPatchDetails,
): Promise<HttpResponseOk<void>> => {
// MOCKED_ACCOUNTS[h_wire].credit_facade_credentials = data.credit_facade_credentials
// MOCKED_ACCOUNTS[h_wire].credit_facade_url = data.credit_facade_url
@@ -94,11 +94,11 @@ export function useBankAccountAPI(): BankAccountAPI {
export interface BankAccountAPI {
createBankAccount: (
- data: MerchantBackend.BankAccounts.AccountAddDetails,
+ data: TalerMerchantApi.AccountAddDetails,
) => Promise<HttpResponseOk<void>>;
updateBankAccount: (
id: string,
- data: MerchantBackend.BankAccounts.AccountPatchDetails,
+ data: TalerMerchantApi.AccountPatchDetails,
) => Promise<HttpResponseOk<void>>;
deleteBankAccount: (id: string) => Promise<HttpResponseOk<void>>;
}
@@ -114,8 +114,8 @@ export function useInstanceBankAccounts(
args?: InstanceBankAccountFilter,
updatePosition?: (id: string) => void,
): HttpResponsePaginated<
- MerchantBackend.BankAccounts.AccountsSummaryResponse,
- MerchantBackend.ErrorDetail
+ TalerMerchantApi.AccountsSummaryResponse,
+ TalerErrorDetail
> {
const { fetcher } = useBackendInstanceRequest();
@@ -128,14 +128,14 @@ export function useInstanceBankAccounts(
error: afterError,
isValidating: loadingAfter,
} = useSWR<
- HttpResponseOk<MerchantBackend.BankAccounts.AccountsSummaryResponse>,
- RequestError<MerchantBackend.ErrorDetail>
+ HttpResponseOk<TalerMerchantApi.AccountsSummaryResponse>,
+ RequestError<TalerErrorDetail>
>([`/private/accounts`], fetcher);
const [lastAfter, setLastAfter] = useState<
HttpResponse<
- MerchantBackend.BankAccounts.AccountsSummaryResponse,
- MerchantBackend.ErrorDetail
+ TalerMerchantApi.AccountsSummaryResponse,
+ TalerErrorDetail
>
>({ loading: true });
useEffect(() => {
@@ -179,8 +179,8 @@ export function useInstanceBankAccounts(
export function useBankAccountDetails(
h_wire: string,
): HttpResponse<
- MerchantBackend.BankAccounts.BankAccountEntry,
- MerchantBackend.ErrorDetail
+ TalerMerchantApi.BankAccountEntry,
+ TalerErrorDetail
> {
// return {
// ok: true,
@@ -192,8 +192,8 @@ export function useBankAccountDetails(
const { fetcher } = useBackendInstanceRequest();
const { data, error, isValidating } = useSWR<
- HttpResponseOk<MerchantBackend.BankAccounts.BankAccountEntry>,
- RequestError<MerchantBackend.ErrorDetail>
+ HttpResponseOk<TalerMerchantApi.BankAccountEntry>,
+ RequestError<TalerErrorDetail>
>([`/private/accounts/${h_wire}`], fetcher, {
refreshInterval: 0,
refreshWhenHidden: false,
diff --git a/packages/merchant-backoffice-ui/src/hooks/order.test.ts b/packages/merchant-backoffice-ui/src/hooks/order.test.ts
index 86f53a342..08fffbcf0 100644
--- a/packages/merchant-backoffice-ui/src/hooks/order.test.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/order.test.ts
@@ -19,9 +19,9 @@
* @author Sebastian Javier Marchano (sebasjm)
*/
+import { AmountString, TalerMerchantApi } from "@gnu-taler/taler-util";
import * as tests from "@gnu-taler/web-util/testing";
import { expect } from "chai";
-import { MerchantBackend } from "../declaration.js";
import { useInstanceOrders, useOrderAPI, useOrderDetails } from "./order.js";
import { ApiMockEnvironment } from "./testing.js";
import {
@@ -40,7 +40,7 @@ describe("order api interaction with listing", () => {
env.addRequestExpectation(API_LIST_ORDERS, {
qparam: { delta: -20, paid: "yes" },
response: {
- orders: [{ order_id: "1" }, { order_id: "2" } as MerchantBackend.Orders.OrderHistoryEntry],
+ orders: [{ order_id: "1" }, { order_id: "2" } as TalerMerchantApi.OrderHistoryEntry],
},
});
@@ -72,7 +72,8 @@ describe("order api interaction with listing", () => {
env.addRequestExpectation(API_CREATE_ORDER, {
request: {
- order: { amount: "ARS:12", summary: "pay me" },
+ order: { amount: "ARS:12" as AmountString, summary: "pay me" },
+ lock_uuids: []
},
response: { order_id: "3" },
});
@@ -116,7 +117,7 @@ describe("order api interaction with listing", () => {
order_id: "1",
amount: "EUR:12",
refundable: true,
- } as MerchantBackend.Orders.OrderHistoryEntry] },
+ } as TalerMerchantApi.OrderHistoryEntry] },
});
const newDate = (d: Date) => {
@@ -202,7 +203,7 @@ describe("order api interaction with listing", () => {
env.addRequestExpectation(API_LIST_ORDERS, {
qparam: { delta: -20, paid: "yes" },
response: {
- orders: [{ order_id: "1" }, { order_id: "2" } as MerchantBackend.Orders.OrderHistoryEntry],
+ orders: [{ order_id: "1" }, { order_id: "2" } as TalerMerchantApi.OrderHistoryEntry],
},
});
@@ -271,7 +272,7 @@ describe("order api interaction with details", () => {
response: {
summary: "description",
refund_amount: "EUR:0",
- } as unknown as MerchantBackend.Orders.CheckPaymentPaidResponse,
+ } as unknown as TalerMerchantApi.CheckPaymentPaidResponse,
});
const newDate = (d: Date) => {
@@ -311,12 +312,12 @@ describe("order api interaction with details", () => {
response: {
summary: "description",
refund_amount: "EUR:1",
- } as unknown as MerchantBackend.Orders.CheckPaymentPaidResponse,
+ } as unknown as TalerMerchantApi.CheckPaymentPaidResponse,
});
api.refundOrder("1", {
reason: "double pay",
- refund: "EUR:1",
+ refund: "EUR:1" as AmountString,
});
},
({ query, api }) => {
@@ -347,7 +348,7 @@ describe("order api interaction with details", () => {
response: {
summary: "description",
refund_amount: "EUR:0",
- } as unknown as MerchantBackend.Orders.CheckPaymentPaidResponse,
+ } as unknown as TalerMerchantApi.CheckPaymentPaidResponse,
});
const newDate = (d: Date) => {
@@ -385,7 +386,7 @@ describe("order api interaction with details", () => {
env.addRequestExpectation(API_GET_ORDER_BY_ID("1"), {
response: {
summary: undefined,
- } as unknown as MerchantBackend.Orders.CheckPaymentPaidResponse,
+ } as unknown as TalerMerchantApi.CheckPaymentPaidResponse,
});
api.forgetOrder("1", {
diff --git a/packages/merchant-backoffice-ui/src/hooks/order.ts b/packages/merchant-backoffice-ui/src/hooks/order.ts
index efc7bdcbe..39bc1725b 100644
--- a/packages/merchant-backoffice-ui/src/hooks/order.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/order.ts
@@ -20,27 +20,27 @@ import {
RequestError,
} from "@gnu-taler/web-util/browser";
import { useEffect, useState } from "preact/hooks";
-import { MerchantBackend } from "../declaration.js";
import { MAX_RESULT_SIZE, PAGE_SIZE } from "../utils/constants.js";
import { useBackendInstanceRequest, useMatchMutate } from "./backend.js";
// FIX default import https://github.com/microsoft/TypeScript/issues/49189
+import { TalerErrorDetail, TalerMerchantApi } from "@gnu-taler/taler-util";
import _useSWR, { SWRHook } from "swr";
const useSWR = _useSWR as unknown as SWRHook;
export interface OrderAPI {
//FIXME: add OutOfStockResponse on 410
createOrder: (
- data: MerchantBackend.Orders.PostOrderRequest,
- ) => Promise<HttpResponseOk<MerchantBackend.Orders.PostOrderResponse>>;
+ data: TalerMerchantApi.PostOrderRequest,
+ ) => Promise<HttpResponseOk<TalerMerchantApi.PostOrderResponse>>;
forgetOrder: (
id: string,
- data: MerchantBackend.Orders.ForgetRequest,
+ data: TalerMerchantApi.ForgetRequest,
) => Promise<HttpResponseOk<void>>;
refundOrder: (
id: string,
- data: MerchantBackend.Orders.RefundRequest,
- ) => Promise<HttpResponseOk<MerchantBackend.Orders.MerchantRefundResponse>>;
+ data: TalerMerchantApi.RefundRequest,
+ ) => Promise<HttpResponseOk<TalerMerchantApi.MerchantRefundResponse>>;
deleteOrder: (id: string) => Promise<HttpResponseOk<void>>;
getPaymentURL: (id: string) => Promise<HttpResponseOk<string>>;
}
@@ -52,9 +52,9 @@ export function useOrderAPI(): OrderAPI {
const { request } = useBackendInstanceRequest();
const createOrder = async (
- data: MerchantBackend.Orders.PostOrderRequest,
- ): Promise<HttpResponseOk<MerchantBackend.Orders.PostOrderResponse>> => {
- const res = await request<MerchantBackend.Orders.PostOrderResponse>(
+ data: TalerMerchantApi.PostOrderRequest,
+ ): Promise<HttpResponseOk<TalerMerchantApi.PostOrderResponse>> => {
+ const res = await request<TalerMerchantApi.PostOrderResponse>(
`/private/orders`,
{
method: "POST",
@@ -67,10 +67,10 @@ export function useOrderAPI(): OrderAPI {
};
const refundOrder = async (
orderId: string,
- data: MerchantBackend.Orders.RefundRequest,
- ): Promise<HttpResponseOk<MerchantBackend.Orders.MerchantRefundResponse>> => {
+ data: TalerMerchantApi.RefundRequest,
+ ): Promise<HttpResponseOk<TalerMerchantApi.MerchantRefundResponse>> => {
mutateAll(/@"\/private\/orders"@/);
- const res = request<MerchantBackend.Orders.MerchantRefundResponse>(
+ const res = request<TalerMerchantApi.MerchantRefundResponse>(
`/private/orders/${orderId}/refund`,
{
method: "POST",
@@ -85,7 +85,7 @@ export function useOrderAPI(): OrderAPI {
const forgetOrder = async (
orderId: string,
- data: MerchantBackend.Orders.ForgetRequest,
+ data: TalerMerchantApi.ForgetRequest,
): Promise<HttpResponseOk<void>> => {
mutateAll(/@"\/private\/orders"@/);
const res = request<void>(`/private/orders/${orderId}/forget`, {
@@ -110,7 +110,7 @@ export function useOrderAPI(): OrderAPI {
const getPaymentURL = async (
orderId: string,
): Promise<HttpResponseOk<string>> => {
- return request<MerchantBackend.Orders.MerchantOrderStatusResponse>(
+ return request<TalerMerchantApi.MerchantOrderStatusResponse>(
`/private/orders/${orderId}`,
{
method: "GET",
@@ -132,14 +132,14 @@ export function useOrderAPI(): OrderAPI {
export function useOrderDetails(
oderId: string,
): HttpResponse<
- MerchantBackend.Orders.MerchantOrderStatusResponse,
- MerchantBackend.ErrorDetail
+ TalerMerchantApi.MerchantOrderStatusResponse,
+ TalerErrorDetail
> {
const { fetcher } = useBackendInstanceRequest();
const { data, error, isValidating } = useSWR<
- HttpResponseOk<MerchantBackend.Orders.MerchantOrderStatusResponse>,
- RequestError<MerchantBackend.ErrorDetail>
+ HttpResponseOk<TalerMerchantApi.MerchantOrderStatusResponse>,
+ RequestError<TalerErrorDetail>
>([`/private/orders/${oderId}`], fetcher, {
refreshInterval: 0,
refreshWhenHidden: false,
@@ -165,8 +165,8 @@ export function useInstanceOrders(
args?: InstanceOrderFilter,
updateFilter?: (d: Date) => void,
): HttpResponsePaginated<
- MerchantBackend.Orders.OrderHistory,
- MerchantBackend.ErrorDetail
+ TalerMerchantApi.OrderHistory,
+ TalerErrorDetail
> {
const { orderFetcher } = useBackendInstanceRequest();
@@ -187,8 +187,8 @@ export function useInstanceOrders(
error: beforeError,
isValidating: loadingBefore,
} = useSWR<
- HttpResponseOk<MerchantBackend.Orders.OrderHistory>,
- RequestError<MerchantBackend.ErrorDetail>
+ HttpResponseOk<TalerMerchantApi.OrderHistory>,
+ RequestError<TalerErrorDetail>
>(
[
`/private/orders`,
@@ -205,8 +205,8 @@ export function useInstanceOrders(
error: afterError,
isValidating: loadingAfter,
} = useSWR<
- HttpResponseOk<MerchantBackend.Orders.OrderHistory>,
- RequestError<MerchantBackend.ErrorDetail>
+ HttpResponseOk<TalerMerchantApi.OrderHistory>,
+ RequestError<TalerErrorDetail>
>(
[
`/private/orders`,
@@ -222,14 +222,14 @@ export function useInstanceOrders(
//this will save last result
const [lastBefore, setLastBefore] = useState<
HttpResponse<
- MerchantBackend.Orders.OrderHistory,
- MerchantBackend.ErrorDetail
+ TalerMerchantApi.OrderHistory,
+ TalerErrorDetail
>
>({ loading: true });
const [lastAfter, setLastAfter] = useState<
HttpResponse<
- MerchantBackend.Orders.OrderHistory,
- MerchantBackend.ErrorDetail
+ TalerMerchantApi.OrderHistory,
+ TalerErrorDetail
>
>({ loading: true });
useEffect(() => {
diff --git a/packages/merchant-backoffice-ui/src/hooks/otp.ts b/packages/merchant-backoffice-ui/src/hooks/otp.ts
index 76ece7055..4b45dcf06 100644
--- a/packages/merchant-backoffice-ui/src/hooks/otp.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/otp.ts
@@ -20,35 +20,20 @@ import {
RequestError,
} from "@gnu-taler/web-util/browser";
import { useEffect, useState } from "preact/hooks";
-import { MerchantBackend } from "../declaration.js";
import { MAX_RESULT_SIZE, PAGE_SIZE } from "../utils/constants.js";
import { useBackendInstanceRequest, useMatchMutate } from "./backend.js";
// FIX default import https://github.com/microsoft/TypeScript/issues/49189
+import { TalerErrorDetail, TalerMerchantApi } from "@gnu-taler/taler-util";
import _useSWR, { SWRHook } from "swr";
const useSWR = _useSWR as unknown as SWRHook;
-const MOCKED_DEVICES: Record<string, MerchantBackend.OTP.OtpDeviceAddDetails> = {
- "1": {
- otp_device_description: "first device",
- otp_algorithm: 1,
- otp_device_id: "1",
- otp_key: "123",
- },
- "2": {
- otp_device_description: "second device",
- otp_algorithm: 0,
- otp_device_id: "2",
- otp_key: "456",
- }
-}
-
export function useOtpDeviceAPI(): OtpDeviceAPI {
const mutateAll = useMatchMutate();
const { request } = useBackendInstanceRequest();
const createOtpDevice = async (
- data: MerchantBackend.OTP.OtpDeviceAddDetails,
+ data: TalerMerchantApi.OtpDeviceAddDetails,
): Promise<HttpResponseOk<void>> => {
// MOCKED_DEVICES[data.otp_device_id] = data
// return Promise.resolve({ ok: true, data: undefined });
@@ -62,7 +47,7 @@ export function useOtpDeviceAPI(): OtpDeviceAPI {
const updateOtpDevice = async (
deviceId: string,
- data: MerchantBackend.OTP.OtpDevicePatchDetails,
+ data: TalerMerchantApi.OtpDevicePatchDetails,
): Promise<HttpResponseOk<void>> => {
// MOCKED_DEVICES[deviceId].otp_algorithm = data.otp_algorithm
// MOCKED_DEVICES[deviceId].otp_ctr = data.otp_ctr
@@ -98,11 +83,11 @@ export function useOtpDeviceAPI(): OtpDeviceAPI {
export interface OtpDeviceAPI {
createOtpDevice: (
- data: MerchantBackend.OTP.OtpDeviceAddDetails,
+ data: TalerMerchantApi.OtpDeviceAddDetails,
) => Promise<HttpResponseOk<void>>;
updateOtpDevice: (
id: string,
- data: MerchantBackend.OTP.OtpDevicePatchDetails,
+ data: TalerMerchantApi.OtpDevicePatchDetails,
) => Promise<HttpResponseOk<void>>;
deleteOtpDevice: (id: string) => Promise<HttpResponseOk<void>>;
}
@@ -114,8 +99,8 @@ export function useInstanceOtpDevices(
args?: InstanceOtpDeviceFilter,
updatePosition?: (id: string) => void,
): HttpResponsePaginated<
- MerchantBackend.OTP.OtpDeviceSummaryResponse,
- MerchantBackend.ErrorDetail
+ TalerMerchantApi.OtpDeviceSummaryResponse,
+ TalerErrorDetail
> {
// return {
// ok: true,
@@ -139,14 +124,14 @@ export function useInstanceOtpDevices(
error: afterError,
isValidating: loadingAfter,
} = useSWR<
- HttpResponseOk<MerchantBackend.OTP.OtpDeviceSummaryResponse>,
- RequestError<MerchantBackend.ErrorDetail>
+ HttpResponseOk<TalerMerchantApi.OtpDeviceSummaryResponse>,
+ RequestError<TalerErrorDetail>
>([`/private/otp-devices`], fetcher);
const [lastAfter, setLastAfter] = useState<
HttpResponse<
- MerchantBackend.OTP.OtpDeviceSummaryResponse,
- MerchantBackend.ErrorDetail
+ TalerMerchantApi.OtpDeviceSummaryResponse,
+ TalerErrorDetail
>
>({ loading: true });
useEffect(() => {
@@ -190,8 +175,8 @@ export function useInstanceOtpDevices(
export function useOtpDeviceDetails(
deviceId: string,
): HttpResponse<
- MerchantBackend.OTP.OtpDeviceDetails,
- MerchantBackend.ErrorDetail
+ TalerMerchantApi.OtpDeviceDetails,
+ TalerErrorDetail
> {
// return {
// ok: true,
@@ -204,8 +189,8 @@ export function useOtpDeviceDetails(
const { fetcher } = useBackendInstanceRequest();
const { data, error, isValidating } = useSWR<
- HttpResponseOk<MerchantBackend.OTP.OtpDeviceDetails>,
- RequestError<MerchantBackend.ErrorDetail>
+ HttpResponseOk<TalerMerchantApi.OtpDeviceDetails>,
+ RequestError<TalerErrorDetail>
>([`/private/otp-devices/${deviceId}`], fetcher, {
refreshInterval: 0,
refreshWhenHidden: false,
diff --git a/packages/merchant-backoffice-ui/src/hooks/product.test.ts b/packages/merchant-backoffice-ui/src/hooks/product.test.ts
index fd2b83ecc..64dbd0103 100644
--- a/packages/merchant-backoffice-ui/src/hooks/product.test.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/product.test.ts
@@ -21,7 +21,6 @@
import * as tests from "@gnu-taler/web-util/testing";
import { expect } from "chai";
-import { MerchantBackend } from "../declaration.js";
import {
useInstanceProducts,
useProductAPI,
@@ -35,6 +34,7 @@ import {
API_LIST_PRODUCTS,
API_UPDATE_PRODUCT_BY_ID,
} from "./urls.js";
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
describe("product api interaction with listing", () => {
it("should evict cache when creating a product", async () => {
@@ -42,11 +42,11 @@ describe("product api interaction with listing", () => {
env.addRequestExpectation(API_LIST_PRODUCTS, {
response: {
- products: [{ product_id: "1234" }],
+ products: [{ product_id: "1234", product_serial: 1 }],
},
});
env.addRequestExpectation(API_GET_PRODUCT_BY_ID("1234"), {
- response: { price: "ARS:12" } as MerchantBackend.Products.ProductDetail,
+ response: { price: "ARS:12" } as TalerMerchantApi.ProductDetail,
});
const hookBehavior = await tests.hookBehaveLikeThis(
@@ -70,33 +70,33 @@ describe("product api interaction with listing", () => {
expect(query.loading).undefined;
expect(query.ok).true;
if (!query.ok) return;
- expect(query.data).deep.equals([{ id: "1234", price: "ARS:12" }]);
+ expect(query.data).deep.equals([{ id: "1234" , price: "ARS:12" }]);
env.addRequestExpectation(API_CREATE_PRODUCT, {
request: {
price: "ARS:23",
- } as MerchantBackend.Products.ProductAddDetail,
+ } as TalerMerchantApi.ProductAddDetail,
});
env.addRequestExpectation(API_LIST_PRODUCTS, {
response: {
- products: [{ product_id: "1234" }, { product_id: "2345" }],
+ products: [{ product_id: "1234", product_serial: 1 }, { product_id: "2345", product_serial: 2 }],
},
});
env.addRequestExpectation(API_GET_PRODUCT_BY_ID("1234"), {
response: {
price: "ARS:12",
- } as MerchantBackend.Products.ProductDetail,
+ } as TalerMerchantApi.ProductDetail,
});
env.addRequestExpectation(API_GET_PRODUCT_BY_ID("1234"), {
response: {
price: "ARS:12",
- } as MerchantBackend.Products.ProductDetail,
+ } as TalerMerchantApi.ProductDetail,
});
env.addRequestExpectation(API_GET_PRODUCT_BY_ID("2345"), {
response: {
price: "ARS:23",
- } as MerchantBackend.Products.ProductDetail,
+ } as TalerMerchantApi.ProductDetail,
});
api.createProduct({
@@ -140,11 +140,11 @@ describe("product api interaction with listing", () => {
env.addRequestExpectation(API_LIST_PRODUCTS, {
response: {
- products: [{ product_id: "1234" }],
+ products: [{ product_id: "1234", product_serial: 1 }],
},
});
env.addRequestExpectation(API_GET_PRODUCT_BY_ID("1234"), {
- response: { price: "ARS:12" } as MerchantBackend.Products.ProductDetail,
+ response: { price: "ARS:12" } as TalerMerchantApi.ProductDetail,
});
const hookBehavior = await tests.hookBehaveLikeThis(
@@ -173,18 +173,18 @@ describe("product api interaction with listing", () => {
env.addRequestExpectation(API_UPDATE_PRODUCT_BY_ID("1234"), {
request: {
price: "ARS:13",
- } as MerchantBackend.Products.ProductPatchDetail,
+ } as TalerMerchantApi.ProductPatchDetail,
});
env.addRequestExpectation(API_LIST_PRODUCTS, {
response: {
- products: [{ product_id: "1234" }],
+ products: [{ product_id: "1234", product_serial: 1 }],
},
});
env.addRequestExpectation(API_GET_PRODUCT_BY_ID("1234"), {
response: {
price: "ARS:13",
- } as MerchantBackend.Products.ProductDetail,
+ } as TalerMerchantApi.ProductDetail,
});
api.updateProduct("1234", {
@@ -218,14 +218,14 @@ describe("product api interaction with listing", () => {
env.addRequestExpectation(API_LIST_PRODUCTS, {
response: {
- products: [{ product_id: "1234" }, { product_id: "2345" }],
+ products: [{ product_id: "1234" , product_serial: 1}, { product_id: "2345", product_serial: 2 }],
},
});
env.addRequestExpectation(API_GET_PRODUCT_BY_ID("1234"), {
- response: { price: "ARS:12" } as MerchantBackend.Products.ProductDetail,
+ response: { price: "ARS:12" } as TalerMerchantApi.ProductDetail,
});
env.addRequestExpectation(API_GET_PRODUCT_BY_ID("2345"), {
- response: { price: "ARS:23" } as MerchantBackend.Products.ProductDetail,
+ response: { price: "ARS:23" } as TalerMerchantApi.ProductDetail,
});
const hookBehavior = await tests.hookBehaveLikeThis(
@@ -258,14 +258,14 @@ describe("product api interaction with listing", () => {
env.addRequestExpectation(API_LIST_PRODUCTS, {
response: {
- products: [{ product_id: "1234" }],
+ products: [{ product_id: "1234", product_serial: 1 }],
},
});
env.addRequestExpectation(API_GET_PRODUCT_BY_ID("1234"), {
response: {
price: "ARS:12",
- } as MerchantBackend.Products.ProductDetail,
+ } as TalerMerchantApi.ProductDetail,
});
api.deleteProduct("2345");
},
@@ -300,7 +300,7 @@ describe("product api interaction with details", () => {
env.addRequestExpectation(API_GET_PRODUCT_BY_ID("12"), {
response: {
description: "this is a description",
- } as MerchantBackend.Products.ProductDetail,
+ } as TalerMerchantApi.ProductDetail,
});
const hookBehavior = await tests.hookBehaveLikeThis(
@@ -328,13 +328,13 @@ describe("product api interaction with details", () => {
env.addRequestExpectation(API_UPDATE_PRODUCT_BY_ID("12"), {
request: {
description: "other description",
- } as MerchantBackend.Products.ProductPatchDetail,
+ } as TalerMerchantApi.ProductPatchDetail,
});
env.addRequestExpectation(API_GET_PRODUCT_BY_ID("12"), {
response: {
description: "other description",
- } as MerchantBackend.Products.ProductDetail,
+ } as TalerMerchantApi.ProductDetail,
});
api.updateProduct("12", {
diff --git a/packages/merchant-backoffice-ui/src/hooks/product.ts b/packages/merchant-backoffice-ui/src/hooks/product.ts
index 345ca5bf2..c0ace0d32 100644
--- a/packages/merchant-backoffice-ui/src/hooks/product.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/product.ts
@@ -18,11 +18,11 @@ import {
HttpResponseOk,
RequestError,
} from "@gnu-taler/web-util/browser";
-import { MerchantBackend, WithId } from "../declaration.js";
import { useBackendInstanceRequest, useMatchMutate } from "./backend.js";
// FIX default import https://github.com/microsoft/TypeScript/issues/49189
import _useSWR, { SWRHook, useSWRConfig } from "swr";
+import { TalerErrorDetail, TalerMerchantApi } from "@gnu-taler/taler-util";
const useSWR = _useSWR as unknown as SWRHook;
export interface ProductAPI {
@@ -30,16 +30,16 @@ export interface ProductAPI {
id: string,
) => Promise<void>;
createProduct: (
- data: MerchantBackend.Products.ProductAddDetail,
+ data: TalerMerchantApi.ProductAddDetail,
) => Promise<void>;
updateProduct: (
id: string,
- data: MerchantBackend.Products.ProductPatchDetail,
+ data: TalerMerchantApi.ProductPatchDetail,
) => Promise<void>;
deleteProduct: (id: string) => Promise<void>;
lockProduct: (
id: string,
- data: MerchantBackend.Products.LockRequest,
+ data: TalerMerchantApi.LockRequest,
) => Promise<void>;
}
@@ -50,7 +50,7 @@ export function useProductAPI(): ProductAPI {
const { request } = useBackendInstanceRequest();
const createProduct = async (
- data: MerchantBackend.Products.ProductAddDetail,
+ data: TalerMerchantApi.ProductAddDetail,
): Promise<void> => {
const res = await request(`/private/products`, {
method: "POST",
@@ -62,7 +62,7 @@ export function useProductAPI(): ProductAPI {
const updateProduct = async (
productId: string,
- data: MerchantBackend.Products.ProductPatchDetail,
+ data: TalerMerchantApi.ProductPatchDetail,
): Promise<void> => {
const r = await request(`/private/products/${productId}`, {
method: "PATCH",
@@ -81,7 +81,7 @@ export function useProductAPI(): ProductAPI {
const lockProduct = async (
productId: string,
- data: MerchantBackend.Products.LockRequest,
+ data: TalerMerchantApi.LockRequest,
): Promise<void> => {
await request(`/private/products/${productId}/lock`, {
method: "POST",
@@ -105,14 +105,14 @@ export function useProductAPI(): ProductAPI {
}
export function useInstanceProducts(): HttpResponse<
- (MerchantBackend.Products.ProductDetail & WithId)[],
- MerchantBackend.ErrorDetail
+ (TalerMerchantApi.ProductDetail & WithId)[],
+ TalerErrorDetail
> {
const { fetcher, multiFetcher } = useBackendInstanceRequest();
const { data: list, error: listError } = useSWR<
- HttpResponseOk<MerchantBackend.Products.InventorySummaryResponse>,
- RequestError<MerchantBackend.ErrorDetail>
+ HttpResponseOk<TalerMerchantApi.InventorySummaryResponse>,
+ RequestError<TalerErrorDetail>
>([`/private/products`], fetcher, {
refreshInterval: 0,
refreshWhenHidden: false,
@@ -125,8 +125,8 @@ export function useInstanceProducts(): HttpResponse<
(p) => `/private/products/${p.product_id}`,
);
const { data: products, error: productError } = useSWR<
- HttpResponseOk<MerchantBackend.Products.ProductDetail>[],
- RequestError<MerchantBackend.ErrorDetail>
+ HttpResponseOk<TalerMerchantApi.ProductDetail>[],
+ RequestError<TalerErrorDetail>
>([paths], multiFetcher, {
refreshInterval: 0,
refreshWhenHidden: false,
@@ -154,14 +154,14 @@ export function useInstanceProducts(): HttpResponse<
export function useProductDetails(
productId: string,
): HttpResponse<
- MerchantBackend.Products.ProductDetail,
- MerchantBackend.ErrorDetail
+ TalerMerchantApi.ProductDetail,
+ TalerErrorDetail
> {
const { fetcher } = useBackendInstanceRequest();
const { data, error, isValidating } = useSWR<
- HttpResponseOk<MerchantBackend.Products.ProductDetail>,
- RequestError<MerchantBackend.ErrorDetail>
+ HttpResponseOk<TalerMerchantApi.ProductDetail>,
+ RequestError<TalerErrorDetail>
>([`/private/products/${productId}`], fetcher, {
refreshInterval: 0,
refreshWhenHidden: false,
diff --git a/packages/merchant-backoffice-ui/src/hooks/reserve.test.ts b/packages/merchant-backoffice-ui/src/hooks/reserve.test.ts
deleted file mode 100644
index 58472399f..000000000
--- a/packages/merchant-backoffice-ui/src/hooks/reserve.test.ts
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2021-2024 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- *
- * @author Sebastian Javier Marchano (sebasjm)
- */
-
-import * as tests from "@gnu-taler/web-util/testing";
-import { expect } from "chai";
-import { MerchantBackend } from "../declaration.js";
-import {
- useInstanceReserves,
- useReservesAPI,
-} from "./reserves.js";
-import { ApiMockEnvironment } from "./testing.js";
-import {
- API_CREATE_RESERVE,
- API_DELETE_RESERVE,
- API_LIST_RESERVES
-} from "./urls.js";
-
-describe("reserve api interaction with listing", () => {
- it("should evict cache when creating a reserve", async () => {
- const env = new ApiMockEnvironment();
-
- env.addRequestExpectation(API_LIST_RESERVES, {
- response: {
- reserves: [
- {
- reserve_pub: "11",
- } as MerchantBackend.Rewards.ReserveStatusEntry,
- ],
- },
- });
-
- const hookBehavior = await tests.hookBehaveLikeThis(
- () => {
- const api = useReservesAPI();
- const query = useInstanceReserves();
- return { query, api };
- },
- {},
- [
- ({ query, api }) => {
- expect(query.loading).true;
- },
- ({ query, api }) => {
- expect(query.loading).false;
- expect(query.ok).true;
- if (!query.ok) return;
- expect(query.data).deep.equals({
- reserves: [{ reserve_pub: "11" }],
- });
-
- env.addRequestExpectation(API_CREATE_RESERVE, {
- request: {
- initial_balance: "ARS:3333",
- exchange_url: "http://url",
- wire_method: "iban",
- },
- response: {
- reserve_pub: "22",
- accounts: [],
- },
- });
-
- env.addRequestExpectation(API_LIST_RESERVES, {
- response: {
- reserves: [
- {
- reserve_pub: "11",
- } as MerchantBackend.Rewards.ReserveStatusEntry,
- {
- reserve_pub: "22",
- } as MerchantBackend.Rewards.ReserveStatusEntry,
- ],
- },
- });
-
- api.createReserve({
- initial_balance: "ARS:3333",
- exchange_url: "http://url",
- wire_method: "iban",
- });
- },
- ({ query, api }) => {
- expect(env.assertJustExpectedRequestWereMade()).deep.eq({
- result: "ok",
- });
- expect(query.loading).false;
- expect(query.ok).true;
- if (!query.ok) return;
-
- expect(query.data).deep.equals({
- reserves: [
- {
- reserve_pub: "11",
- } as MerchantBackend.Rewards.ReserveStatusEntry,
- {
- reserve_pub: "22",
- } as MerchantBackend.Rewards.ReserveStatusEntry,
- ],
- });
- },
- ],
- env.buildTestingContext(),
- );
-
- expect(hookBehavior).deep.eq({ result: "ok" });
- expect(env.assertJustExpectedRequestWereMade()).deep.eq({ result: "ok" });
- });
-
- it("should evict cache when deleting a reserve", async () => {
- const env = new ApiMockEnvironment();
-
- env.addRequestExpectation(API_LIST_RESERVES, {
- response: {
- reserves: [
- {
- reserve_pub: "11",
- } as MerchantBackend.Rewards.ReserveStatusEntry,
- {
- reserve_pub: "22",
- } as MerchantBackend.Rewards.ReserveStatusEntry,
- {
- reserve_pub: "33",
- } as MerchantBackend.Rewards.ReserveStatusEntry,
- ],
- },
- });
-
- const hookBehavior = await tests.hookBehaveLikeThis(
- () => {
- const api = useReservesAPI();
- const query = useInstanceReserves();
- return { query, api };
- },
- {},
- [
- ({ query, api }) => {
- expect(query.loading).true;
- },
- ({ query, api }) => {
- expect(env.assertJustExpectedRequestWereMade()).deep.eq({
- result: "ok",
- });
-
- expect(query.loading).false;
- expect(query.ok).true;
- if (!query.ok) return;
- expect(query.data).deep.equals({
- reserves: [
- { reserve_pub: "11" },
- { reserve_pub: "22" },
- { reserve_pub: "33" },
- ],
- });
-
- env.addRequestExpectation(API_DELETE_RESERVE("11"), {});
- env.addRequestExpectation(API_LIST_RESERVES, {
- response: {
- reserves: [
- {
- reserve_pub: "22",
- } as MerchantBackend.Rewards.ReserveStatusEntry,
- {
- reserve_pub: "33",
- } as MerchantBackend.Rewards.ReserveStatusEntry,
- ],
- },
- });
-
- api.deleteReserve("11");
- },
- ({ query, api }) => {
- expect(env.assertJustExpectedRequestWereMade()).deep.eq({
- result: "ok",
- });
- expect(query.loading).false;
- expect(query.ok).true;
- if (!query.ok) return;
- expect(query.data).deep.equals({
- reserves: [{ reserve_pub: "22" }, { reserve_pub: "33" }],
- });
- },
- ],
- env.buildTestingContext(),
- );
-
- expect(hookBehavior).deep.eq({ result: "ok" });
- expect(env.assertJustExpectedRequestWereMade()).deep.eq({ result: "ok" });
- });
-});
diff --git a/packages/merchant-backoffice-ui/src/hooks/reserves.ts b/packages/merchant-backoffice-ui/src/hooks/reserves.ts
deleted file mode 100644
index 13e4bcce8..000000000
--- a/packages/merchant-backoffice-ui/src/hooks/reserves.ts
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2021-2024 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-import {
- HttpResponse,
- HttpResponseOk,
- RequestError,
-} from "@gnu-taler/web-util/browser";
-import { MerchantBackend } from "../declaration.js";
-import { useBackendInstanceRequest, useMatchMutate } from "./backend.js";
-
-// FIX default import https://github.com/microsoft/TypeScript/issues/49189
-import _useSWR, { SWRHook, useSWRConfig } from "swr";
-const useSWR = _useSWR as unknown as SWRHook;
-
-export function useReservesAPI(): ReserveMutateAPI {
- const mutateAll = useMatchMutate();
- const { mutate } = useSWRConfig();
- const { request } = useBackendInstanceRequest();
-
- const createReserve = async (
- data: MerchantBackend.Rewards.ReserveCreateRequest,
- ): Promise<
- HttpResponseOk<MerchantBackend.Rewards.ReserveCreateConfirmation>
- > => {
- const res = await request<MerchantBackend.Rewards.ReserveCreateConfirmation>(
- `/private/reserves`,
- {
- method: "POST",
- data,
- },
- );
-
- //evict reserve list query
- await mutateAll(/.*private\/reserves.*/);
-
- return res;
- };
-
-
- const deleteReserve = async (
- pub: string,
- ): Promise<HttpResponse<void, MerchantBackend.ErrorDetail>> => {
- const res = await request<void>(`/private/reserves/${pub}`, {
- method: "DELETE",
- });
-
- //evict reserve list query
- await mutateAll(/.*private\/reserves.*/);
-
- return res;
- };
-
- return { createReserve, deleteReserve };
-}
-
-export interface ReserveMutateAPI {
- createReserve: (
- data: MerchantBackend.Rewards.ReserveCreateRequest,
- ) => Promise<HttpResponseOk<MerchantBackend.Rewards.ReserveCreateConfirmation>>;
- deleteReserve: (
- id: string,
- ) => Promise<HttpResponse<void, MerchantBackend.ErrorDetail>>;
-}
-
-export function useInstanceReserves(): HttpResponse<
- MerchantBackend.Rewards.RewardReserveStatus,
- MerchantBackend.ErrorDetail
-> {
- const { fetcher } = useBackendInstanceRequest();
-
- const { data, error, isValidating } = useSWR<
- HttpResponseOk<MerchantBackend.Rewards.RewardReserveStatus>,
- RequestError<MerchantBackend.ErrorDetail>
- >([`/private/reserves`], fetcher);
-
- if (isValidating) return { loading: true, data: data?.data };
- if (data) return data;
- if (error) return error.cause;
- return { loading: true };
-}
-
diff --git a/packages/merchant-backoffice-ui/src/hooks/templates.ts b/packages/merchant-backoffice-ui/src/hooks/templates.ts
index 96671452e..cdcc418ef 100644
--- a/packages/merchant-backoffice-ui/src/hooks/templates.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/templates.ts
@@ -20,11 +20,11 @@ import {
RequestError,
} from "@gnu-taler/web-util/browser";
import { useEffect, useState } from "preact/hooks";
-import { MerchantBackend } from "../declaration.js";
import { MAX_RESULT_SIZE, PAGE_SIZE } from "../utils/constants.js";
import { useBackendInstanceRequest, useMatchMutate } from "./backend.js";
// FIX default import https://github.com/microsoft/TypeScript/issues/49189
+import { TalerErrorDetail, TalerMerchantApi } from "@gnu-taler/taler-util";
import _useSWR, { SWRHook } from "swr";
const useSWR = _useSWR as unknown as SWRHook;
@@ -33,7 +33,7 @@ export function useTemplateAPI(): TemplateAPI {
const { request } = useBackendInstanceRequest();
const createTemplate = async (
- data: MerchantBackend.Template.TemplateAddDetails,
+ data: TalerMerchantApi.TemplateAddDetails,
): Promise<HttpResponseOk<void>> => {
const res = await request<void>(`/private/templates`, {
method: "POST",
@@ -45,7 +45,7 @@ export function useTemplateAPI(): TemplateAPI {
const updateTemplate = async (
templateId: string,
- data: MerchantBackend.Template.TemplatePatchDetails,
+ data: TalerMerchantApi.TemplatePatchDetails,
): Promise<HttpResponseOk<void>> => {
const res = await request<void>(`/private/templates/${templateId}`, {
method: "PATCH",
@@ -67,11 +67,11 @@ export function useTemplateAPI(): TemplateAPI {
const createOrderFromTemplate = async (
templateId: string,
- data: MerchantBackend.Template.UsingTemplateDetails,
+ data: TalerMerchantApi.UsingTemplateDetails,
): Promise<
- HttpResponseOk<MerchantBackend.Template.UsingTemplateResponse>
+ HttpResponseOk<TalerMerchantApi.UsingTemplateResponse>
> => {
- const res = await request<MerchantBackend.Template.UsingTemplateResponse>(
+ const res = await request<TalerMerchantApi.UsingTemplateResponse>(
`/templates/${templateId}`,
{
method: "POST",
@@ -101,11 +101,11 @@ export function useTemplateAPI(): TemplateAPI {
export interface TemplateAPI {
createTemplate: (
- data: MerchantBackend.Template.TemplateAddDetails,
+ data: TalerMerchantApi.TemplateAddDetails,
) => Promise<HttpResponseOk<void>>;
updateTemplate: (
id: string,
- data: MerchantBackend.Template.TemplatePatchDetails,
+ data: TalerMerchantApi.TemplatePatchDetails,
) => Promise<HttpResponseOk<void>>;
testTemplateExist: (
id: string
@@ -113,8 +113,8 @@ export interface TemplateAPI {
deleteTemplate: (id: string) => Promise<HttpResponseOk<void>>;
createOrderFromTemplate: (
id: string,
- data: MerchantBackend.Template.UsingTemplateDetails,
- ) => Promise<HttpResponseOk<MerchantBackend.Template.UsingTemplateResponse>>;
+ data: TalerMerchantApi.UsingTemplateDetails,
+ ) => Promise<HttpResponseOk<TalerMerchantApi.UsingTemplateResponse>>;
}
export interface InstanceTemplateFilter {
@@ -126,8 +126,8 @@ export function useInstanceTemplates(
args?: InstanceTemplateFilter,
updatePosition?: (id: string) => void,
): HttpResponsePaginated<
- MerchantBackend.Template.TemplateSummaryResponse,
- MerchantBackend.ErrorDetail
+ TalerMerchantApi.TemplateSummaryResponse,
+ TalerErrorDetail
> {
const { templateFetcher } = useBackendInstanceRequest();
@@ -148,8 +148,8 @@ export function useInstanceTemplates(
error: beforeError,
isValidating: loadingBefore,
} = useSWR<
- HttpResponseOk<MerchantBackend.Template.TemplateSummaryResponse>,
- RequestError<MerchantBackend.ErrorDetail>>(
+ HttpResponseOk<TalerMerchantApi.TemplateSummaryResponse>,
+ RequestError<TalerErrorDetail>>(
[
`/private/templates`,
args?.position,
@@ -162,22 +162,22 @@ export function useInstanceTemplates(
error: afterError,
isValidating: loadingAfter,
} = useSWR<
- HttpResponseOk<MerchantBackend.Template.TemplateSummaryResponse>,
- RequestError<MerchantBackend.ErrorDetail>
+ HttpResponseOk<TalerMerchantApi.TemplateSummaryResponse>,
+ RequestError<TalerErrorDetail>
>([`/private/templates`, args?.position, -totalAfter], templateFetcher);
//this will save last result
const [lastBefore, setLastBefore] = useState<
HttpResponse<
- MerchantBackend.Template.TemplateSummaryResponse,
- MerchantBackend.ErrorDetail
+ TalerMerchantApi.TemplateSummaryResponse,
+ TalerErrorDetail
>
>({ loading: true });
const [lastAfter, setLastAfter] = useState<
HttpResponse<
- MerchantBackend.Template.TemplateSummaryResponse,
- MerchantBackend.ErrorDetail
+ TalerMerchantApi.TemplateSummaryResponse,
+ TalerErrorDetail
>
>({ loading: true });
useEffect(() => {
@@ -241,14 +241,14 @@ export function useInstanceTemplates(
export function useTemplateDetails(
templateId: string,
): HttpResponse<
- MerchantBackend.Template.TemplateDetails,
- MerchantBackend.ErrorDetail
+ TalerMerchantApi.TemplateDetails,
+ TalerErrorDetail
> {
const { templateFetcher } = useBackendInstanceRequest();
const { data, error, isValidating } = useSWR<
- HttpResponseOk<MerchantBackend.Template.TemplateDetails>,
- RequestError<MerchantBackend.ErrorDetail>
+ HttpResponseOk<TalerMerchantApi.TemplateDetails>,
+ RequestError<TalerErrorDetail>
>([`/private/templates/${templateId}`], templateFetcher, {
refreshInterval: 0,
refreshWhenHidden: false,
diff --git a/packages/merchant-backoffice-ui/src/hooks/transfer.test.ts b/packages/merchant-backoffice-ui/src/hooks/transfer.test.ts
index 2fd11f02e..ee987af7e 100644
--- a/packages/merchant-backoffice-ui/src/hooks/transfer.test.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/transfer.test.ts
@@ -19,12 +19,12 @@
* @author Sebastian Javier Marchano (sebasjm)
*/
+import { AmountString, PaytoString, TalerMerchantApi } from "@gnu-taler/taler-util";
import * as tests from "@gnu-taler/web-util/testing";
import { expect } from "chai";
-import { MerchantBackend } from "../declaration.js";
-import { API_INFORM_TRANSFERS, API_LIST_TRANSFERS } from "./urls.js";
import { ApiMockEnvironment } from "./testing.js";
import { useInstanceTransfers, useTransferAPI } from "./transfer.js";
+import { API_INFORM_TRANSFERS, API_LIST_TRANSFERS } from "./urls.js";
describe("transfer api interaction with listing", () => {
it("should evict cache when informing a transfer", async () => {
@@ -33,7 +33,7 @@ describe("transfer api interaction with listing", () => {
env.addRequestExpectation(API_LIST_TRANSFERS, {
qparam: { limit: -20 },
response: {
- transfers: [{ wtid: "2" } as MerchantBackend.Transfers.TransferDetails],
+ transfers: [{ wtid: "2" } as TalerMerchantApi.TransferDetails],
},
});
@@ -83,9 +83,9 @@ describe("transfer api interaction with listing", () => {
api.informTransfer({
wtid: "3",
- credit_amount: "EUR:1",
+ credit_amount: "EUR:1" as AmountString,
exchange_url: "exchange.url",
- payto_uri: "payto://",
+ payto_uri: "payto://" as PaytoString,
});
},
({ query, api }) => {
diff --git a/packages/merchant-backoffice-ui/src/hooks/transfer.ts b/packages/merchant-backoffice-ui/src/hooks/transfer.ts
index 924bd202f..20062a5e2 100644
--- a/packages/merchant-backoffice-ui/src/hooks/transfer.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/transfer.ts
@@ -20,11 +20,11 @@ import {
RequestError,
} from "@gnu-taler/web-util/browser";
import { useEffect, useState } from "preact/hooks";
-import { MerchantBackend } from "../declaration.js";
import { MAX_RESULT_SIZE, PAGE_SIZE } from "../utils/constants.js";
import { useBackendInstanceRequest, useMatchMutate } from "./backend.js";
// FIX default import https://github.com/microsoft/TypeScript/issues/49189
+import { TalerErrorDetail, TalerMerchantApi } from "@gnu-taler/taler-util";
import _useSWR, { SWRHook } from "swr";
const useSWR = _useSWR as unknown as SWRHook;
@@ -33,7 +33,7 @@ export function useTransferAPI(): TransferAPI {
const { request } = useBackendInstanceRequest();
const informTransfer = async (
- data: MerchantBackend.Transfers.TransferInformation,
+ data: TalerMerchantApi.TransferInformation,
): Promise<HttpResponseOk<{}>> => {
const res = await request<{}>(`/private/transfers`, {
method: "POST",
@@ -49,7 +49,7 @@ export function useTransferAPI(): TransferAPI {
export interface TransferAPI {
informTransfer: (
- data: MerchantBackend.Transfers.TransferInformation,
+ data: TalerMerchantApi.TransferInformation,
) => Promise<HttpResponseOk<{}>>;
}
@@ -63,8 +63,8 @@ export function useInstanceTransfers(
args?: InstanceTransferFilter,
updatePosition?: (id: string) => void,
): HttpResponsePaginated<
- MerchantBackend.Transfers.TransferList,
- MerchantBackend.ErrorDetail
+ TalerMerchantApi.TransferList,
+ TalerErrorDetail
> {
const { transferFetcher } = useBackendInstanceRequest();
@@ -85,8 +85,8 @@ export function useInstanceTransfers(
error: beforeError,
isValidating: loadingBefore,
} = useSWR<
- HttpResponseOk<MerchantBackend.Transfers.TransferList>,
- RequestError<MerchantBackend.ErrorDetail>
+ HttpResponseOk<TalerMerchantApi.TransferList>,
+ RequestError<TalerErrorDetail>
>(
[
`/private/transfers`,
@@ -102,8 +102,8 @@ export function useInstanceTransfers(
error: afterError,
isValidating: loadingAfter,
} = useSWR<
- HttpResponseOk<MerchantBackend.Transfers.TransferList>,
- RequestError<MerchantBackend.ErrorDetail>
+ HttpResponseOk<TalerMerchantApi.TransferList>,
+ RequestError<TalerErrorDetail>
>(
[
`/private/transfers`,
@@ -118,14 +118,14 @@ export function useInstanceTransfers(
//this will save last result
const [lastBefore, setLastBefore] = useState<
HttpResponse<
- MerchantBackend.Transfers.TransferList,
- MerchantBackend.ErrorDetail
+ TalerMerchantApi.TransferList,
+ TalerErrorDetail
>
>({ loading: true });
const [lastAfter, setLastAfter] = useState<
HttpResponse<
- MerchantBackend.Transfers.TransferList,
- MerchantBackend.ErrorDetail
+ TalerMerchantApi.TransferList,
+ TalerErrorDetail
>
>({ loading: true });
useEffect(() => {
diff --git a/packages/merchant-backoffice-ui/src/hooks/urls.ts b/packages/merchant-backoffice-ui/src/hooks/urls.ts
index 76c117224..95e1c04f3 100644
--- a/packages/merchant-backoffice-ui/src/hooks/urls.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/urls.ts
@@ -18,16 +18,16 @@
*
* @author Sebastian Javier Marchano (sebasjm)
*/
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
import { Query } from "@gnu-taler/web-util/testing";
-import { MerchantBackend } from "../declaration.js";
////////////////////
// ORDER
////////////////////
export const API_CREATE_ORDER: Query<
- MerchantBackend.Orders.PostOrderRequest,
- MerchantBackend.Orders.PostOrderResponse
+ TalerMerchantApi.PostOrderRequest,
+ TalerMerchantApi.PostOrderResponse
> = {
method: "POST",
url: "http://backend/instances/default/private/orders",
@@ -35,14 +35,14 @@ export const API_CREATE_ORDER: Query<
export const API_GET_ORDER_BY_ID = (
id: string,
-): Query<unknown, MerchantBackend.Orders.MerchantOrderStatusResponse> => ({
+): Query<unknown, TalerMerchantApi.MerchantOrderStatusResponse> => ({
method: "GET",
url: `http://backend/instances/default/private/orders/${id}`,
});
export const API_LIST_ORDERS: Query<
unknown,
- MerchantBackend.Orders.OrderHistory
+ TalerMerchantApi.OrderHistory
> = {
method: "GET",
url: "http://backend/instances/default/private/orders",
@@ -51,8 +51,8 @@ export const API_LIST_ORDERS: Query<
export const API_REFUND_ORDER_BY_ID = (
id: string,
): Query<
- MerchantBackend.Orders.RefundRequest,
- MerchantBackend.Orders.MerchantRefundResponse
+ TalerMerchantApi.RefundRequest,
+ TalerMerchantApi.MerchantRefundResponse
> => ({
method: "POST",
url: `http://backend/instances/default/private/orders/${id}/refund`,
@@ -60,14 +60,14 @@ export const API_REFUND_ORDER_BY_ID = (
export const API_FORGET_ORDER_BY_ID = (
id: string,
-): Query<MerchantBackend.Orders.ForgetRequest, unknown> => ({
+): Query<TalerMerchantApi.ForgetRequest, unknown> => ({
method: "PATCH",
url: `http://backend/instances/default/private/orders/${id}/forget`,
});
export const API_DELETE_ORDER = (
id: string,
-): Query<MerchantBackend.Orders.ForgetRequest, unknown> => ({
+): Query<TalerMerchantApi.ForgetRequest, unknown> => ({
method: "DELETE",
url: `http://backend/instances/default/private/orders/${id}`,
});
@@ -78,14 +78,14 @@ export const API_DELETE_ORDER = (
export const API_LIST_TRANSFERS: Query<
unknown,
- MerchantBackend.Transfers.TransferList
+ TalerMerchantApi.TransferList
> = {
method: "GET",
url: "http://backend/instances/default/private/transfers",
};
export const API_INFORM_TRANSFERS: Query<
- MerchantBackend.Transfers.TransferInformation,
+ TalerMerchantApi.TransferInformation,
{}
> = {
method: "POST",
@@ -97,7 +97,7 @@ export const API_INFORM_TRANSFERS: Query<
////////////////////
export const API_CREATE_PRODUCT: Query<
- MerchantBackend.Products.ProductAddDetail,
+ TalerMerchantApi.ProductAddDetail,
unknown
> = {
method: "POST",
@@ -106,7 +106,7 @@ export const API_CREATE_PRODUCT: Query<
export const API_LIST_PRODUCTS: Query<
unknown,
- MerchantBackend.Products.InventorySummaryResponse
+ TalerMerchantApi.InventorySummaryResponse
> = {
method: "GET",
url: "http://backend/instances/default/private/products",
@@ -114,7 +114,7 @@ export const API_LIST_PRODUCTS: Query<
export const API_GET_PRODUCT_BY_ID = (
id: string,
-): Query<unknown, MerchantBackend.Products.ProductDetail> => ({
+): Query<unknown, TalerMerchantApi.ProductDetail> => ({
method: "GET",
url: `http://backend/instances/default/private/products/${id}`,
});
@@ -122,8 +122,8 @@ export const API_GET_PRODUCT_BY_ID = (
export const API_UPDATE_PRODUCT_BY_ID = (
id: string,
): Query<
- MerchantBackend.Products.ProductPatchDetail,
- MerchantBackend.Products.InventorySummaryResponse
+ TalerMerchantApi.ProductPatchDetail,
+ TalerMerchantApi.InventorySummaryResponse
> => ({
method: "PATCH",
url: `http://backend/instances/default/private/products/${id}`,
@@ -135,67 +135,11 @@ export const API_DELETE_PRODUCT = (id: string): Query<unknown, unknown> => ({
});
////////////////////
-// RESERVES
-////////////////////
-
-export const API_CREATE_RESERVE: Query<
- MerchantBackend.Rewards.ReserveCreateRequest,
- MerchantBackend.Rewards.ReserveCreateConfirmation
-> = {
- method: "POST",
- url: "http://backend/instances/default/private/reserves",
-};
-export const API_LIST_RESERVES: Query<
- unknown,
- MerchantBackend.Rewards.RewardReserveStatus
-> = {
- method: "GET",
- url: "http://backend/instances/default/private/reserves",
-};
-
-export const API_GET_RESERVE_BY_ID = (
- pub: string,
-): Query<unknown, MerchantBackend.Rewards.ReserveDetail> => ({
- method: "GET",
- url: `http://backend/instances/default/private/reserves/${pub}`,
-});
-
-export const API_GET_REWARD_BY_ID = (
- pub: string,
-): Query<unknown, MerchantBackend.Rewards.RewardDetails> => ({
- method: "GET",
- url: `http://backend/instances/default/private/rewards/${pub}`,
-});
-
-export const API_AUTHORIZE_REWARD_FOR_RESERVE = (
- pub: string,
-): Query<
- MerchantBackend.Rewards.RewardCreateRequest,
- MerchantBackend.Rewards.RewardCreateConfirmation
-> => ({
- method: "POST",
- url: `http://backend/instances/default/private/reserves/${pub}/authorize-reward`,
-});
-
-export const API_AUTHORIZE_REWARD: Query<
- MerchantBackend.Rewards.RewardCreateRequest,
- MerchantBackend.Rewards.RewardCreateConfirmation
-> = {
- method: "POST",
- url: `http://backend/instances/default/private/rewards`,
-};
-
-export const API_DELETE_RESERVE = (id: string): Query<unknown, unknown> => ({
- method: "DELETE",
- url: `http://backend/instances/default/private/reserves/${id}`,
-});
-
-////////////////////
// INSTANCE ADMIN
////////////////////
export const API_CREATE_INSTANCE: Query<
- MerchantBackend.Instances.InstanceConfigurationMessage,
+ TalerMerchantApi.InstanceConfigurationMessage,
unknown
> = {
method: "POST",
@@ -204,21 +148,21 @@ export const API_CREATE_INSTANCE: Query<
export const API_GET_INSTANCE_BY_ID = (
id: string,
-): Query<unknown, MerchantBackend.Instances.QueryInstancesResponse> => ({
+): Query<unknown, TalerMerchantApi.QueryInstancesResponse> => ({
method: "GET",
url: `http://backend/management/instances/${id}`,
});
export const API_GET_INSTANCE_KYC_BY_ID = (
id: string,
-): Query<unknown, MerchantBackend.KYC.AccountKycRedirects> => ({
+): Query<unknown, TalerMerchantApi.AccountKycRedirects> => ({
method: "GET",
url: `http://backend/management/instances/${id}/kyc`,
});
export const API_LIST_INSTANCES: Query<
unknown,
- MerchantBackend.Instances.InstancesResponse
+ TalerMerchantApi.InstancesResponse
> = {
method: "GET",
url: "http://backend/management/instances",
@@ -227,7 +171,7 @@ export const API_LIST_INSTANCES: Query<
export const API_UPDATE_INSTANCE_BY_ID = (
id: string,
): Query<
- MerchantBackend.Instances.InstanceReconfigurationMessage,
+ TalerMerchantApi.InstanceReconfigurationMessage,
unknown
> => ({
method: "PATCH",
@@ -237,7 +181,7 @@ export const API_UPDATE_INSTANCE_BY_ID = (
export const API_UPDATE_INSTANCE_AUTH_BY_ID = (
id: string,
): Query<
- MerchantBackend.Instances.InstanceAuthConfigurationMessage,
+ TalerMerchantApi.InstanceAuthConfigurationMessage,
unknown
> => ({
method: "POST",
@@ -250,24 +194,12 @@ export const API_DELETE_INSTANCE = (id: string): Query<unknown, unknown> => ({
});
////////////////////
-// AUTH
-////////////////////
-
-export const API_NEW_LOGIN: Query<
- MerchantBackend.Instances.LoginTokenRequest,
- unknown
-> = ({
- method: "POST",
- url: `http://backend/private/token`,
-});
-
-////////////////////
// INSTANCE
////////////////////
export const API_GET_CURRENT_INSTANCE: Query<
unknown,
- MerchantBackend.Instances.QueryInstancesResponse
+ TalerMerchantApi.QueryInstancesResponse
> = {
method: "GET",
url: `http://backend/instances/default/private/`,
@@ -275,14 +207,14 @@ export const API_GET_CURRENT_INSTANCE: Query<
export const API_GET_CURRENT_INSTANCE_KYC: Query<
unknown,
- MerchantBackend.KYC.AccountKycRedirects
+ TalerMerchantApi.AccountKycRedirects
> = {
method: "GET",
url: `http://backend/instances/default/private/kyc`,
};
export const API_UPDATE_CURRENT_INSTANCE: Query<
- MerchantBackend.Instances.InstanceReconfigurationMessage,
+ TalerMerchantApi.InstanceReconfigurationMessage,
unknown
> = {
method: "PATCH",
@@ -290,7 +222,7 @@ export const API_UPDATE_CURRENT_INSTANCE: Query<
};
export const API_UPDATE_CURRENT_INSTANCE_AUTH: Query<
- MerchantBackend.Instances.InstanceAuthConfigurationMessage,
+ TalerMerchantApi.InstanceAuthConfigurationMessage,
unknown
> = {
method: "POST",
diff --git a/packages/merchant-backoffice-ui/src/hooks/webhooks.ts b/packages/merchant-backoffice-ui/src/hooks/webhooks.ts
index 994bfdbb0..4e62a81c9 100644
--- a/packages/merchant-backoffice-ui/src/hooks/webhooks.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/webhooks.ts
@@ -20,11 +20,11 @@ import {
RequestError,
} from "@gnu-taler/web-util/browser";
import { useEffect, useState } from "preact/hooks";
-import { MerchantBackend } from "../declaration.js";
import { MAX_RESULT_SIZE, PAGE_SIZE } from "../utils/constants.js";
import { useBackendInstanceRequest, useMatchMutate } from "./backend.js";
// FIX default import https://github.com/microsoft/TypeScript/issues/49189
+import { TalerErrorDetail, TalerMerchantApi } from "@gnu-taler/taler-util";
import _useSWR, { SWRHook } from "swr";
const useSWR = _useSWR as unknown as SWRHook;
@@ -33,7 +33,7 @@ export function useWebhookAPI(): WebhookAPI {
const { request } = useBackendInstanceRequest();
const createWebhook = async (
- data: MerchantBackend.Webhooks.WebhookAddDetails,
+ data: TalerMerchantApi.WebhookAddDetails,
): Promise<HttpResponseOk<void>> => {
const res = await request<void>(`/private/webhooks`, {
method: "POST",
@@ -45,7 +45,7 @@ export function useWebhookAPI(): WebhookAPI {
const updateWebhook = async (
webhookId: string,
- data: MerchantBackend.Webhooks.WebhookPatchDetails,
+ data: TalerMerchantApi.WebhookPatchDetails,
): Promise<HttpResponseOk<void>> => {
const res = await request<void>(`/private/webhooks/${webhookId}`, {
method: "PATCH",
@@ -70,11 +70,11 @@ export function useWebhookAPI(): WebhookAPI {
export interface WebhookAPI {
createWebhook: (
- data: MerchantBackend.Webhooks.WebhookAddDetails,
+ data: TalerMerchantApi.WebhookAddDetails,
) => Promise<HttpResponseOk<void>>;
updateWebhook: (
id: string,
- data: MerchantBackend.Webhooks.WebhookPatchDetails,
+ data: TalerMerchantApi.WebhookPatchDetails,
) => Promise<HttpResponseOk<void>>;
deleteWebhook: (id: string) => Promise<HttpResponseOk<void>>;
}
@@ -88,8 +88,8 @@ export function useInstanceWebhooks(
args?: InstanceWebhookFilter,
updatePosition?: (id: string) => void,
): HttpResponsePaginated<
- MerchantBackend.Webhooks.WebhookSummaryResponse,
- MerchantBackend.ErrorDetail
+ TalerMerchantApi.WebhookSummaryResponse,
+ TalerErrorDetail
> {
const { webhookFetcher } = useBackendInstanceRequest();
@@ -104,14 +104,15 @@ export function useInstanceWebhooks(
error: afterError,
isValidating: loadingAfter,
} = useSWR<
- HttpResponseOk<MerchantBackend.Webhooks.WebhookSummaryResponse>,
- RequestError<MerchantBackend.ErrorDetail>
+ HttpResponseOk<TalerMerchantApi.WebhookSummaryResponse>,
+ RequestError<TalerErrorDetail>
+
>([`/private/webhooks`, args?.position, -totalAfter], webhookFetcher);
const [lastAfter, setLastAfter] = useState<
HttpResponse<
- MerchantBackend.Webhooks.WebhookSummaryResponse,
- MerchantBackend.ErrorDetail
+ TalerMerchantApi.WebhookSummaryResponse,
+ TalerErrorDetail
>
>({ loading: true });
useEffect(() => {
@@ -155,14 +156,14 @@ export function useInstanceWebhooks(
export function useWebhookDetails(
webhookId: string,
): HttpResponse<
- MerchantBackend.Webhooks.WebhookDetails,
- MerchantBackend.ErrorDetail
+ TalerMerchantApi.WebhookDetails,
+ TalerErrorDetail
> {
const { webhookFetcher } = useBackendInstanceRequest();
const { data, error, isValidating } = useSWR<
- HttpResponseOk<MerchantBackend.Webhooks.WebhookDetails>,
- RequestError<MerchantBackend.ErrorDetail>
+ HttpResponseOk<TalerMerchantApi.WebhookDetails>,
+ RequestError<TalerErrorDetail>
>([`/private/webhooks/${webhookId}`], webhookFetcher, {
refreshInterval: 0,
refreshWhenHidden: false,