diff options
Diffstat (limited to 'packages/merchant-backoffice-ui/src/hooks/instance.ts')
-rw-r--r-- | packages/merchant-backoffice-ui/src/hooks/instance.ts | 87 |
1 files changed, 60 insertions, 27 deletions
diff --git a/packages/merchant-backoffice-ui/src/hooks/instance.ts b/packages/merchant-backoffice-ui/src/hooks/instance.ts index 352f54982..dfe97fd61 100644 --- a/packages/merchant-backoffice-ui/src/hooks/instance.ts +++ b/packages/merchant-backoffice-ui/src/hooks/instance.ts @@ -17,9 +17,9 @@ import { HttpResponse, HttpResponseOk, RequestError, + useMerchantApiContext, } from "@gnu-taler/web-util/browser"; -import { useBackendContext } from "../context/backend.js"; -import { AccessToken, MerchantBackend } from "../declaration.js"; +import { MerchantBackend } from "../declaration.js"; import { useBackendBaseRequest, useBackendInstanceRequest, @@ -29,6 +29,8 @@ import { // FIX default import https://github.com/microsoft/TypeScript/issues/49189 import _useSWR, { SWRHook, useSWRConfig } from "swr"; +import { useSessionContext } from "../context/session.js"; +import { AccessToken } from "@gnu-taler/taler-util"; const useSWR = _useSWR as unknown as SWRHook; interface InstanceAPI { @@ -37,7 +39,10 @@ interface InstanceAPI { ) => Promise<void>; deleteInstance: () => Promise<void>; clearAccessToken: (currentToken: AccessToken | undefined) => Promise<void>; - setNewAccessToken: (currentToken: AccessToken | undefined, token: AccessToken) => Promise<void>; + setNewAccessToken: ( + currentToken: AccessToken | undefined, + token: AccessToken, + ) => Promise<void>; } export function useAdminAPI(): AdminAPI { @@ -87,10 +92,13 @@ export interface AdminAPI { export function useManagementAPI(instanceId: string): InstanceAPI { const mutateAll = useMatchMutate(); - const { url: backendURL } = useBackendContext() - const { updateToken } = useBackendContext(); + const { + state: { backendUrl }, + logIn, + logOut, + } = useSessionContext(); const { request } = useBackendBaseRequest(); - const { requestNewLoginToken } = useCredentialsChecker() + const { requestNewLoginToken } = useCredentialsChecker(); const updateInstance = async ( instance: MerchantBackend.Instances.InstanceReconfigurationMessage, @@ -111,7 +119,9 @@ export function useManagementAPI(instanceId: string): InstanceAPI { mutateAll(/\/management\/instances/); }; - const clearAccessToken = async (currentToken: AccessToken | undefined): Promise<void> => { + const clearAccessToken = async ( + currentToken: AccessToken | undefined, + ): Promise<void> => { await request(`/management/instances/${instanceId}/auth`, { method: "POST", token: currentToken, @@ -121,36 +131,46 @@ export function useManagementAPI(instanceId: string): InstanceAPI { mutateAll(/\/management\/instances/); }; - const setNewAccessToken = async (currentToken: AccessToken | undefined, newToken: AccessToken): Promise<void> => { + const setNewAccessToken = async ( + currentToken: AccessToken | undefined, + newToken: AccessToken, + ): Promise<void> => { await request(`/management/instances/${instanceId}/auth`, { method: "POST", token: currentToken, data: { method: "token", token: newToken }, }); - const resp = await requestNewLoginToken(backendURL, newToken) + const resp = await requestNewLoginToken(backendUrl, newToken); if (resp.valid) { - const { token, expiration } = resp - updateToken({ token, expiration }); + logIn({ token: resp.token as AccessToken }); } else { - updateToken(undefined) + logOut(); } mutateAll(/\/management\/instances/); }; - return { updateInstance, deleteInstance, setNewAccessToken, clearAccessToken }; + return { + updateInstance, + deleteInstance, + setNewAccessToken, + clearAccessToken, + }; } export function useInstanceAPI(): InstanceAPI { const { mutate } = useSWRConfig(); - const { url: backendURL, updateToken } = useBackendContext() - const { - token: adminToken, - } = useBackendContext(); + state: { backendUrl }, + } = useSessionContext(); + const { request } = useBackendInstanceRequest(); - const { requestNewLoginToken } = useCredentialsChecker() + const { requestNewLoginToken } = useCredentialsChecker(); + const { state, logIn, logOut } = useSessionContext(); + + const adminToken = + state.status === "loggedIn" && state.isAdmin ? state.token : undefined; const updateInstance = async ( instance: MerchantBackend.Instances.InstanceReconfigurationMessage, @@ -160,7 +180,9 @@ export function useInstanceAPI(): InstanceAPI { data: instance, }); - if (adminToken) mutate(["/private/instances", adminToken, backendURL], null); + if (adminToken) { + mutate(["/private/instances", adminToken, backendUrl], null); + } mutate([`/private/`], null); }; @@ -170,11 +192,15 @@ export function useInstanceAPI(): InstanceAPI { // token: adminToken, }); - if (adminToken) mutate(["/private/instances", adminToken, backendURL], null); + if (adminToken) { + mutate(["/private/instances", adminToken, backendUrl], null); + } mutate([`/private/`], null); }; - const clearAccessToken = async (currentToken: AccessToken | undefined): Promise<void> => { + const clearAccessToken = async ( + currentToken: AccessToken | undefined, + ): Promise<void> => { await request(`/private/auth`, { method: "POST", token: currentToken, @@ -184,25 +210,32 @@ export function useInstanceAPI(): InstanceAPI { mutate([`/private/`], null); }; - const setNewAccessToken = async (currentToken: AccessToken | undefined, newToken: AccessToken): Promise<void> => { + const setNewAccessToken = async ( + currentToken: AccessToken | undefined, + newToken: AccessToken, + ): Promise<void> => { await request(`/private/auth`, { method: "POST", token: currentToken, data: { method: "token", token: newToken }, }); - const resp = await requestNewLoginToken(backendURL, newToken) + const resp = await requestNewLoginToken(backendUrl, newToken); if (resp.valid) { - const { token, expiration } = resp - updateToken({ token, expiration }); + logIn({ token: resp.token as AccessToken }); } else { - updateToken(undefined) + logOut(); } mutate([`/private/`], null); }; - return { updateInstance, deleteInstance, setNewAccessToken, clearAccessToken }; + return { + updateInstance, + deleteInstance, + setNewAccessToken, + clearAccessToken, + }; } export function useInstanceDetails(): HttpResponse< |