commit 6f6e9a6fab4ecbf05264766e9b2661bdebad49eb
parent 2785521f6eaaed711ba5705086988f30746748b7
Author: Florian Dold <florian@dold.me>
Date: Tue, 27 Aug 2024 01:56:53 +0200
auditor SPA: minor cleanup, base URL canonicalization
Diffstat:
9 files changed, 77 insertions(+), 98 deletions(-)
diff --git a/packages/auditor-backoffice-ui/src/InstanceRoutes.tsx b/packages/auditor-backoffice-ui/src/InstanceRoutes.tsx
@@ -272,11 +272,7 @@ export interface Props {
path: string;
}
-export function InstanceRoutes({
- // id,
- path,
- // setInstanceName
-}: Props): VNode {
+export function InstanceRoutes({ path }: Props): VNode {
type GlobalNotifState =
| (Notification & { to: string | undefined })
| undefined;
diff --git a/packages/auditor-backoffice-ui/src/hooks/backend.ts b/packages/auditor-backoffice-ui/src/hooks/backend.ts
@@ -20,6 +20,9 @@
* @author Nic Eigel
*/
+/**
+ * Imports.
+ */
import {
HttpResponse,
HttpResponseOk,
@@ -162,9 +165,6 @@ interface useBackendInstanceRequestType {
) => Promise<HttpResponseOk<T>>;
fetcher: <T>(endpoint: string) => Promise<HttpResponseOk<T>>;
multiFetcher: <T>(params: string[]) => Promise<HttpResponseOk<T>[]>;
- depositConfirmationFetcher: <T>(
- params: [endpoint: string],
- ) => Promise<HttpResponseOk<T>>;
}
interface useBackendBaseRequestType {
@@ -183,9 +183,6 @@ interface useBackendBaseRequestType {
export function useBackendBaseRequest(): useBackendBaseRequestType {
const { url: backend } = useBackendContext();
const { request: requestHandler } = useApiContext();
- //const { token } = useBackendTokenContext();
- const token =
- "D4CST1Z6AHN3RT03M0T9NSTF2QGHTB5ZD2D3RYZB4HAWG8SX0JEFWBXCKXZHMB7Y3Z7KVFW0B3XPXD5BHCFP8EB0R6CNH2KAWDWVET0";
const request = useCallback(
function requestImpl<T>(
@@ -193,7 +190,7 @@ export function useBackendBaseRequest(): useBackendBaseRequestType {
//todo: remove
options: RequestOptions = {},
): Promise<HttpResponseOk<T>> {
- return requestHandler<T>(backend, endpoint, { ...options, token })
+ return requestHandler<T>(backend, endpoint, { ...options })
.then((res) => {
return res;
})
@@ -211,15 +208,12 @@ export function useBackendRequest(): useBackendInstanceRequestType {
const { url: baseUrl } = useBackendContext();
const { request: requestHandler } = useApiContext();
- const token =
- "D4CST1Z6AHN3RT03M0T9NSTF2QGHTB5ZD2D3RYZB4HAWG8SX0JEFWBXCKXZHMB7Y3Z7KVFW0B3XPXD5BHCFP8EB0R6CNH2KAWDWVET0";
-
const request = useCallback(
function requestImpl<T>(
endpoint: string,
options: RequestOptions = {},
): Promise<HttpResponseOk<T>> {
- return requestHandler<T>(baseUrl, endpoint, { ...options, token });
+ return requestHandler<T>(baseUrl, endpoint, { ...options });
},
[baseUrl],
);
@@ -231,7 +225,7 @@ export function useBackendRequest(): useBackendInstanceRequestType {
): Promise<HttpResponseOk<T>[]> {
return Promise.all(
params.map((endpoint) =>
- requestHandler<T>(baseUrl, endpoint, { ...options, token }),
+ requestHandler<T>(baseUrl, endpoint, { ...options }),
),
);
},
@@ -240,21 +234,7 @@ export function useBackendRequest(): useBackendInstanceRequestType {
const fetcher = useCallback(
function fetcherImpl<T>(endpoint: string): Promise<HttpResponseOk<T>> {
- return requestHandler<T>(baseUrl, endpoint, { token });
- },
- [baseUrl],
- );
-
- const depositConfirmationFetcher = useCallback(
- function orderFetcherImpl<T>(
- args: [endpoint: string],
- ): Promise<HttpResponseOk<T>> {
- const [endpoint] = args;
- const params: any = {
- token:
- "D4CST1Z6AHN3RT03M0T9NSTF2QGHTB5ZD2D3RYZB4HAWG8SX0JEFWBXCKXZHMB7Y3Z7KVFW0B3XPXD5BHCFP8EB0R6CNH2KAWDWVET0",
- };
- return requestHandler<T>(baseUrl, endpoint, { params, token });
+ return requestHandler<T>(baseUrl, endpoint, {});
},
[baseUrl],
);
@@ -262,7 +242,6 @@ export function useBackendRequest(): useBackendInstanceRequestType {
return {
request,
fetcher,
- depositConfirmationFetcher,
multiFetcher,
};
}
diff --git a/packages/auditor-backoffice-ui/src/hooks/critical.ts b/packages/auditor-backoffice-ui/src/hooks/critical.ts
@@ -16,16 +16,13 @@
import {
HttpResponse,
HttpResponseOk,
- HttpResponsePaginated,
RequestError,
} from "@gnu-taler/web-util/browser";
-import { useEffect, useState } from "preact/hooks";
-import { AuditorBackend, WithId } from "../declaration.js";
-import { MAX_RESULT_SIZE, PAGE_SIZE } from "../utils/constants.js";
-import { useBackendRequest, useMatchMutate } from "./backend.js";
+import { AuditorBackend } from "../declaration.js";
+import { useBackendRequest } from "./backend.js";
// FIX default import https://github.com/microsoft/TypeScript/issues/49189
-import _useSWR, { SWRHook, useSWRConfig } from "swr";
+import _useSWR, { SWRHook } from "swr";
const useSWR = _useSWR as unknown as SWRHook;
@@ -50,9 +47,9 @@ export function getCriticalData(
"monitoring/reserve-balance-insufficient-inconsistency",
];
-
const { data: list, error: listError } = useSWR<
- HttpResponseOk<any>[], RequestError<AuditorBackend.ErrorDetail>
+ HttpResponseOk<any>[],
+ RequestError<AuditorBackend.ErrorDetail>
>(endpoints, multiFetcher, {
refreshInterval: 60,
refreshWhenHidden: false,
@@ -67,4 +64,4 @@ export function getCriticalData(
return { ok: true, data: [list] };
}
return { loading: true };
-}
-\ No newline at end of file
+}
diff --git a/packages/auditor-backoffice-ui/src/hooks/entity.ts b/packages/auditor-backoffice-ui/src/hooks/entity.ts
@@ -13,16 +13,20 @@
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/>
*/
+
+/**
+ * Imports.
+ */
import {
HttpResponse,
HttpResponseOk,
RequestError,
} from "@gnu-taler/web-util/browser";
-import { AuditorBackend, WithId } from "../declaration.js";
+import { AuditorBackend } from "../declaration.js";
import { useBackendRequest, useMatchMutate } from "./backend.js";
// FIX default import https://github.com/microsoft/TypeScript/issues/49189
-import _useSWR, { SWRHook, useSWRConfig } from "swr";
+import _useSWR, { SWRHook } from "swr";
import { useEntityContext } from "../context/entity.js";
const useSWR = _useSWR as unknown as SWRHook;
@@ -34,7 +38,10 @@ interface Props {
entity: any;
}
-export function getEntityList({ endpoint, entity }: Props): HttpResponse<any, AuditorBackend.ErrorDetail> {
+export function getEntityList({
+ endpoint,
+ entity,
+}: Props): HttpResponse<any, AuditorBackend.ErrorDetail> {
const { fetcher } = useBackendRequest();
const { data: list, error: listError } = useSWR<
@@ -56,20 +63,16 @@ export function getEntityList({ endpoint, entity }: Props): HttpResponse<any, Au
return { loading: true };
}
export interface EntityAPI {
- updateEntity: (
- id: string
- ) => Promise<void>;
+ updateEntity: (id: string) => Promise<void>;
}
export function useEntityAPI(): EntityAPI {
const mutateAll = useMatchMutate();
const { request } = useBackendRequest();
- const { endpoint } = useEntityContext();
- const data = {"suppressed": true};
+ const { endpoint } = useEntityContext();
+ const data = { suppressed: true };
- const updateEntity = async (
- id: string,
- ): Promise<void> => {
+ const updateEntity = async (id: string): Promise<void> => {
const r = await request(`monitoring/${endpoint}/${id}`, {
method: "PATCH",
data,
@@ -79,4 +82,4 @@ export function useEntityAPI(): EntityAPI {
};
return { updateEntity };
-}
-\ No newline at end of file
+}
diff --git a/packages/auditor-backoffice-ui/src/hooks/finance.ts b/packages/auditor-backoffice-ui/src/hooks/finance.ts
@@ -13,21 +13,27 @@
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/>
*/
+
+/**
+ * Imports.
+ */
import {
HttpResponse,
HttpResponseOk,
RequestError,
} from "@gnu-taler/web-util/browser";
-import { AuditorBackend, WithId } from "../declaration.js";
-import { useBackendRequest, useMatchMutate } from "./backend.js";
+import { AuditorBackend } from "../declaration.js";
+import { useBackendRequest } from "./backend.js";
// FIX default import https://github.com/microsoft/TypeScript/issues/49189
-import _useSWR, { SWRHook, useSWRConfig } from "swr";
+import _useSWR, { SWRHook } from "swr";
const useSWR = _useSWR as unknown as SWRHook;
-
-export function getKeyFiguresData(): HttpResponse<any, AuditorBackend.ErrorDetail> {
+export function getKeyFiguresData(): HttpResponse<
+ any,
+ AuditorBackend.ErrorDetail
+> {
const { multiFetcher } = useBackendRequest();
const endpoints = [
"monitoring/misattribution-in-inconsistency",
@@ -39,11 +45,11 @@ export function getKeyFiguresData(): HttpResponse<any, AuditorBackend.ErrorDetai
"monitoring/wire-format-inconsistency",
"monitoring/wire-out-inconsistency",
"monitoring/reserve-balance-summary-wrong-inconsistency",
-
];
const { data: list, error: listError } = useSWR<
- HttpResponseOk<any>[], RequestError<AuditorBackend.ErrorDetail>
+ HttpResponseOk<any>[],
+ RequestError<AuditorBackend.ErrorDetail>
>(endpoints, multiFetcher, {
refreshInterval: 60,
refreshWhenHidden: false,
diff --git a/packages/auditor-backoffice-ui/src/hooks/index.ts b/packages/auditor-backoffice-ui/src/hooks/index.ts
@@ -14,16 +14,17 @@
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
+import { canonicalizeBaseUrl } from "@gnu-taler/taler-util";
import { StateUpdater, useState } from "preact/hooks";
import { ValueOrFunction } from "../utils/types.js";
export function useBackendURL(url?: string): [string, StateUpdater<string>] {
- const [value, setter] = useSimpleLocalStorage(
- "auditor-base-url",
- url || calculateRootPath(),
- );
+ const canonUrl = canonicalizeBaseUrl(url ?? calculateRootPath());
+
+ const [value, setter] = useSimpleLocalStorage("auditor-base-url", canonUrl);
const checkedSetter = (v: ValueOrFunction<string>) => {
+ // FIXME: Explain?!
return setter((p) =>
(v instanceof Function ? v(p ?? "") : v).replace(/\/$/, ""),
);
diff --git a/packages/auditor-backoffice-ui/src/hooks/operational.ts b/packages/auditor-backoffice-ui/src/hooks/operational.ts
@@ -18,11 +18,11 @@ import {
HttpResponseOk,
RequestError,
} from "@gnu-taler/web-util/browser";
-import { AuditorBackend, WithId } from "../declaration.js";
-import { useBackendRequest, useMatchMutate } from "./backend.js";
+import { AuditorBackend } from "../declaration.js";
+import { useBackendRequest } from "./backend.js";
// FIX default import https://github.com/microsoft/TypeScript/issues/49189
-import _useSWR, { SWRHook, useSWRConfig } from "swr";
+import _useSWR, { SWRHook } from "swr";
const useSWR = _useSWR as unknown as SWRHook;
@@ -49,17 +49,16 @@ export function getOperationData(
"monitoring/denomination-key-validity-withdraw-inconsistency",
"monitoring/refreshes-hanging",
//TODO fix endpoint
- // "monitoring/closure-lags",
- // "monitoring/row-minor-inconsistencies",
- // "monitoring/historic-denomination-revenue",
- // "monitoring/denomination-pending",
+ // "monitoring/closure-lags",
+ // "monitoring/row-minor-inconsistencies",
+ // "monitoring/historic-denomination-revenue",
+ // "monitoring/denomination-pending",
"monitoring/historic-reserve-summary",
-
];
-
const { data: list, error: listError } = useSWR<
- HttpResponseOk<any>[], RequestError<AuditorBackend.ErrorDetail>
+ HttpResponseOk<any>[],
+ RequestError<AuditorBackend.ErrorDetail>
>(endpoints, multiFetcher, {
refreshInterval: 60,
refreshWhenHidden: false,
@@ -77,7 +76,5 @@ export function getOperationData(
}
export interface EntityAPI {
- updateEntity: (
- id: string,
- ) => Promise<void>;
-}
-\ No newline at end of file
+ updateEntity: (id: string) => Promise<void>;
+}
diff --git a/packages/web-util/src/context/api.ts b/packages/web-util/src/context/api.ts
@@ -19,7 +19,12 @@
* @author Sebastian Javier Marchano (sebasjm)
*/
-import { TalerBankIntegrationHttpClient, TalerCoreBankHttpClient, TalerRevenueHttpClient, TalerWireGatewayHttpClient } from "@gnu-taler/taler-util";
+import {
+ TalerBankIntegrationHttpClient,
+ TalerCoreBankHttpClient,
+ TalerRevenueHttpClient,
+ TalerWireGatewayHttpClient,
+} from "@gnu-taler/taler-util";
import { ComponentChildren, createContext, h, VNode } from "preact";
import { useContext } from "preact/hooks";
import { defaultRequestHandler } from "../utils/request.js";
@@ -29,10 +34,10 @@ interface Type {
* @deprecated this show not be used
*/
request: typeof defaultRequestHandler;
- bankCore: TalerCoreBankHttpClient,
- bankIntegration: TalerBankIntegrationHttpClient,
- bankWire: TalerWireGatewayHttpClient,
- bankRevenue: TalerRevenueHttpClient,
+ bankCore: TalerCoreBankHttpClient;
+ bankIntegration: TalerBankIntegrationHttpClient;
+ bankWire: TalerWireGatewayHttpClient;
+ bankRevenue: TalerRevenueHttpClient;
}
const Context = createContext<Type>({ request: defaultRequestHandler } as any);
diff --git a/packages/web-util/src/utils/request.ts b/packages/web-util/src/utils/request.ts
@@ -28,8 +28,6 @@ export enum ErrorType {
UNEXPECTED,
}
-
-
/**
*
* @param baseUrl URL where the service is located
@@ -53,7 +51,9 @@ export async function defaultRequestHandler<T>(
}
requestHeaders["Content-Type"] =
- !options.contentType || options.contentType === "json" ? "application/json" : "text/plain";
+ !options.contentType || options.contentType === "json"
+ ? "application/json"
+ : "text/plain";
if (options.talerAmlOfficerSignature) {
requestHeaders["Taler-AML-Officer-Signature"] =
@@ -83,7 +83,7 @@ export async function defaultRequestHandler<T>(
loading: false,
message: `invalid URL: "${baseUrl}${endpoint}"`,
};
- throw new RequestError(error)
+ throw new RequestError(error);
}
Object.entries(requestParams).forEach(([key, value]) => {
@@ -114,7 +114,7 @@ export async function defaultRequestHandler<T>(
loading: false,
message: `unsupported request body type: "${typeof requestBody}"`,
};
- throw new RequestError(error)
+ throw new RequestError(error);
}
}
@@ -159,7 +159,7 @@ export async function defaultRequestHandler<T>(
type: ErrorType.UNEXPECTED,
exception: ex,
loading: false,
- message: (ex instanceof Error ? ex.message : ""),
+ message: ex instanceof Error ? ex.message : "",
};
throw new RequestError(error);
}
@@ -470,9 +470,8 @@ export function buildRequestFailed<ErrorDetail>(
*/
function validateURL(baseUrl: string, endpoint: string): URL | undefined {
try {
- return new URL(`${baseUrl}${endpoint}`)
+ return new URL(`${baseUrl}${endpoint}`);
} catch (ex) {
- return undefined
+ return undefined;
}
-
-}
-\ No newline at end of file
+}