aboutsummaryrefslogtreecommitdiff
path: root/packages/aml-backoffice-ui/src/hooks/useBackend.ts
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2023-07-20 17:01:35 -0300
committerSebastian <sebasjm@gmail.com>2023-07-20 17:01:35 -0300
commit2335c3418cfbcc8a0196f0f161bab31ade99acb2 (patch)
tree76edf53acc5810ecfe215f6f99f755833a492af8 /packages/aml-backoffice-ui/src/hooks/useBackend.ts
parent24d05d87ecfb880b174e90a3d585240d190eaefe (diff)
make signed request to exchange
Diffstat (limited to 'packages/aml-backoffice-ui/src/hooks/useBackend.ts')
-rw-r--r--packages/aml-backoffice-ui/src/hooks/useBackend.ts81
1 files changed, 81 insertions, 0 deletions
diff --git a/packages/aml-backoffice-ui/src/hooks/useBackend.ts b/packages/aml-backoffice-ui/src/hooks/useBackend.ts
new file mode 100644
index 000000000..e68efb2e3
--- /dev/null
+++ b/packages/aml-backoffice-ui/src/hooks/useBackend.ts
@@ -0,0 +1,81 @@
+import {
+ HttpResponseOk,
+ RequestOptions,
+ useApiContext,
+} from "@gnu-taler/web-util/browser";
+import { useCallback } from "preact/hooks";
+import { uiSettings } from "../settings.js";
+import { canonicalizeBaseUrl } from "@gnu-taler/taler-util";
+import { useOfficer } from "./useOfficer.js";
+import { buildQuerySignature } from "../account.js";
+
+interface useBackendType {
+ request: <T>(
+ path: string,
+ options?: RequestOptions,
+ ) => Promise<HttpResponseOk<T>>;
+ fetcher: <T>(endpoint: string) => Promise<HttpResponseOk<T>>;
+ paginatedFetcher: <T>(
+ args: [string, number, number, string],
+ ) => Promise<HttpResponseOk<T>>;
+}
+export function usePublicBackend(): useBackendType {
+ const { request: requestHandler } = useApiContext();
+
+ const baseUrl = getInitialBackendBaseURL();
+
+ const request = useCallback(
+ function requestImpl<T>(
+ path: string,
+ options: RequestOptions = {},
+ ): Promise<HttpResponseOk<T>> {
+ return requestHandler<T>(baseUrl, path, options);
+ },
+ [baseUrl],
+ );
+
+ const fetcher = useCallback(
+ function fetcherImpl<T>(endpoint: string): Promise<HttpResponseOk<T>> {
+ return requestHandler<T>(baseUrl, endpoint);
+ },
+ [baseUrl],
+ );
+ const paginatedFetcher = useCallback(
+ function fetcherImpl<T>([endpoint, page, size, talerAmlOfficerSignature]: [
+ string,
+ number,
+ number,
+ string,
+ ]): Promise<HttpResponseOk<T>> {
+ return requestHandler<T>(baseUrl, endpoint, {
+ params: { page: page || 1, size },
+ talerAmlOfficerSignature,
+ });
+ },
+ [baseUrl],
+ );
+ return {
+ request,
+ fetcher,
+ paginatedFetcher,
+ };
+}
+
+export function getInitialBackendBaseURL(): string {
+ const overrideUrl =
+ typeof localStorage !== "undefined"
+ ? localStorage.getItem("exchange-aml-base-url")
+ : undefined;
+ if (!overrideUrl) {
+ //normal path
+ if (!uiSettings.backendBaseURL) {
+ console.error(
+ "ERROR: backendBaseURL was overridden by a setting file and missing. Setting value to 'window.origin'",
+ );
+ return canonicalizeBaseUrl(window.origin);
+ }
+ return canonicalizeBaseUrl(uiSettings.backendBaseURL);
+ }
+ // testing/development path
+ return canonicalizeBaseUrl(overrideUrl);
+}