aboutsummaryrefslogtreecommitdiff
path: root/packages/demobank-ui/src/hooks
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2023-04-07 17:30:01 -0300
committerSebastian <sebasjm@gmail.com>2023-04-07 17:30:01 -0300
commita3aa7d95d09c83794067c47df4a455c0e3f21806 (patch)
tree00837196305227fe6f7cbc7289f96b256d5de089 /packages/demobank-ui/src/hooks
parent43ae414a55b84b1125c5e4377c6d485ca6c748e2 (diff)
anon withdrawal confirmation, and fix error with infinity loop
Diffstat (limited to 'packages/demobank-ui/src/hooks')
-rw-r--r--packages/demobank-ui/src/hooks/access.ts64
-rw-r--r--packages/demobank-ui/src/hooks/backend.ts26
2 files changed, 54 insertions, 36 deletions
diff --git a/packages/demobank-ui/src/hooks/access.ts b/packages/demobank-ui/src/hooks/access.ts
index ee8566efe..546d59a84 100644
--- a/packages/demobank-ui/src/hooks/access.ts
+++ b/packages/demobank-ui/src/hooks/access.ts
@@ -59,30 +59,6 @@ export function useAccessAPI(): AccessAPI {
);
return res;
};
- const abortWithdrawal = async (id: string): Promise<HttpResponseOk<void>> => {
- const res = await request<void>(
- `access-api/accounts/${account}/withdrawals/${id}/abort`,
- {
- method: "POST",
- contentType: "json",
- },
- );
- await mutateAll(/.*accounts\/.*\/withdrawals\/.*/);
- return res;
- };
- const confirmWithdrawal = async (
- id: string,
- ): Promise<HttpResponseOk<void>> => {
- const res = await request<void>(
- `access-api/accounts/${account}/withdrawals/${id}/confirm`,
- {
- method: "POST",
- contentType: "json",
- },
- );
- await mutateAll(/.*accounts\/.*\/withdrawals\/.*/);
- return res;
- };
const createTransaction = async (
data: SandboxBackend.Access.CreateBankAccountTransactionCreate,
): Promise<HttpResponseOk<void>> => {
@@ -107,14 +83,41 @@ export function useAccessAPI(): AccessAPI {
};
return {
- abortWithdrawal,
- confirmWithdrawal,
createWithdrawal,
createTransaction,
deleteAccount,
};
}
+export function useAccessAnonAPI(): AccessAnonAPI {
+ const mutateAll = useMatchMutate();
+ const { request } = useAuthenticatedBackend();
+
+ const abortWithdrawal = async (id: string): Promise<HttpResponseOk<void>> => {
+ const res = await request<void>(`access-api/withdrawals/${id}/abort`, {
+ method: "POST",
+ contentType: "json",
+ });
+ await mutateAll(/.*withdrawals\/.*/);
+ return res;
+ };
+ const confirmWithdrawal = async (
+ id: string,
+ ): Promise<HttpResponseOk<void>> => {
+ const res = await request<void>(`access-api/withdrawals/${id}/confirm`, {
+ method: "POST",
+ contentType: "json",
+ });
+ await mutateAll(/.*withdrawals\/.*/);
+ return res;
+ };
+
+ return {
+ abortWithdrawal,
+ confirmWithdrawal,
+ };
+}
+
export function useTestingAPI(): TestingAPI {
const mutateAll = useMatchMutate();
const { request: noAuthRequest } = usePublicBackend();
@@ -145,13 +148,15 @@ export interface AccessAPI {
) => Promise<
HttpResponseOk<SandboxBackend.Access.BankAccountCreateWithdrawalResponse>
>;
- abortWithdrawal: (wid: string) => Promise<HttpResponseOk<void>>;
- confirmWithdrawal: (wid: string) => Promise<HttpResponseOk<void>>;
createTransaction: (
data: SandboxBackend.Access.CreateBankAccountTransactionCreate,
) => Promise<HttpResponseOk<void>>;
deleteAccount: () => Promise<HttpResponseOk<void>>;
}
+export interface AccessAnonAPI {
+ abortWithdrawal: (wid: string) => Promise<HttpResponseOk<void>>;
+ confirmWithdrawal: (wid: string) => Promise<HttpResponseOk<void>>;
+}
export interface InstanceTemplateFilter {
//FIXME: add filter to the template list
@@ -210,7 +215,6 @@ export function useAccountDetails(
// FIXME: should poll
export function useWithdrawalDetails(
- account: string,
wid: string,
): HttpResponse<
SandboxBackend.Access.BankAccountGetWithdrawalResponse,
@@ -221,7 +225,7 @@ export function useWithdrawalDetails(
const { data, error } = useSWR<
HttpResponseOk<SandboxBackend.Access.BankAccountGetWithdrawalResponse>,
RequestError<SandboxBackend.SandboxError>
- >([`access-api/accounts/${account}/withdrawals/${wid}`], fetcher, {
+ >([`access-api/withdrawals/${wid}`], fetcher, {
refreshInterval: 1000,
refreshWhenHidden: false,
revalidateOnFocus: false,
diff --git a/packages/demobank-ui/src/hooks/backend.ts b/packages/demobank-ui/src/hooks/backend.ts
index 3fe744874..e0b8d83ef 100644
--- a/packages/demobank-ui/src/hooks/backend.ts
+++ b/packages/demobank-ui/src/hooks/backend.ts
@@ -17,6 +17,7 @@
import { canonicalizeBaseUrl } from "@gnu-taler/taler-util";
import {
ErrorType,
+ HttpError,
RequestError,
useLocalStorage,
} from "@gnu-taler/web-util/lib/index.browser";
@@ -193,6 +194,22 @@ export function usePublicBackend(): useBackendType {
};
}
+type CheckResult = ValidResult | RequestInvalidResult | InvalidationResult;
+
+interface ValidResult {
+ valid: true;
+}
+interface RequestInvalidResult {
+ valid: false;
+ requestError: true;
+ cause: RequestError<any>["cause"];
+}
+interface InvalidationResult {
+ valid: false;
+ requestError: false;
+ error: unknown;
+}
+
export function useCredentialsChecker() {
const { request } = useApiContext();
const baseUrl = getInitialBackendBaseURL();
@@ -201,10 +218,7 @@ export function useCredentialsChecker() {
return async function testLogin(
username: string,
password: string,
- ): Promise<{
- valid: boolean;
- cause?: ErrorType;
- }> {
+ ): Promise<CheckResult> {
try {
await request(baseUrl, `access-api/accounts/${username}/`, {
basicAuth: { username, password },
@@ -213,9 +227,9 @@ export function useCredentialsChecker() {
return { valid: true };
} catch (error) {
if (error instanceof RequestError) {
- return { valid: false, cause: error.cause.type };
+ return { valid: false, requestError: true, cause: error.cause };
}
- return { valid: false, cause: ErrorType.UNEXPECTED };
+ return { valid: false, requestError: false, error };
}
};
}