diff options
author | Sebastian <sebasjm@gmail.com> | 2023-07-20 17:01:35 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2023-07-20 17:01:35 -0300 |
commit | 2335c3418cfbcc8a0196f0f161bab31ade99acb2 (patch) | |
tree | 76edf53acc5810ecfe215f6f99f755833a492af8 /packages/aml-backoffice-ui/src/hooks/useBackend.ts | |
parent | 24d05d87ecfb880b174e90a3d585240d190eaefe (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.ts | 81 |
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); +} |