diff options
Diffstat (limited to 'packages/merchant-backoffice-ui/src/hooks/backend.ts')
-rw-r--r-- | packages/merchant-backoffice-ui/src/hooks/backend.ts | 115 |
1 files changed, 12 insertions, 103 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 |