summaryrefslogtreecommitdiff
path: root/packages/merchant-backoffice-ui/src/hooks/instance.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/merchant-backoffice-ui/src/hooks/instance.ts')
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/instance.ts87
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<