diff options
Diffstat (limited to 'packages/merchant-backoffice-ui/src')
7 files changed, 98 insertions, 80 deletions
diff --git a/packages/merchant-backoffice-ui/src/hooks/instance.test.ts b/packages/merchant-backoffice-ui/src/hooks/instance.test.ts index f73f07d68..35147d988 100644 --- a/packages/merchant-backoffice-ui/src/hooks/instance.test.ts +++ b/packages/merchant-backoffice-ui/src/hooks/instance.test.ts @@ -167,7 +167,7 @@ describe("instance api interaction with details", () => { }, } as TalerMerchantApi.QueryInstancesResponse, }); - api.setNewAccessToken(undefined, "secret" as AccessToken); + // api.setNewAccessToken(undefined, "secret" as AccessToken); }, ({ query, api }) => { expect(env.assertJustExpectedRequestWereMade()).deep.eq({ diff --git a/packages/merchant-backoffice-ui/src/hooks/instance.ts b/packages/merchant-backoffice-ui/src/hooks/instance.ts index 2da82989b..5f17dbf79 100644 --- a/packages/merchant-backoffice-ui/src/hooks/instance.ts +++ b/packages/merchant-backoffice-ui/src/hooks/instance.ts @@ -36,10 +36,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 { @@ -127,30 +127,31 @@ export function useManagementAPI(instanceId: string): InstanceAPI { mutateAll(/\/management\/instances/); }; - 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 setNewAccessToken = async ( + // currentToken: AccessToken | undefined, + // newToken: AccessToken, + // ): Promise<void> => { - const resp = await requestNewLoginToken(backendUrl, newToken); - if (resp.valid) { - logIn({ token: resp.token as AccessToken }); - } else { - logOut(); - } + // await request(`/management/instances/${instanceId}/auth`, { + // method: "POST", + // token: currentToken, + // data: { method: "token", token: newToken }, + // }); - mutateAll(/\/management\/instances/); - }; + // const resp = await requestNewLoginToken(backendUrl, newToken); + // if (resp.valid) { + // logIn({ token: resp.token as AccessToken }); + // } else { + // logOut(); + // } + + // mutateAll(/\/management\/instances/); + // }; return { updateInstance, deleteInstance, - setNewAccessToken, + // setNewAccessToken, clearAccessToken, }; } @@ -205,30 +206,30 @@ export function useInstanceAPI(): InstanceAPI { mutate([`/private/`], null); }; - 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); - if (resp.valid) { - logIn({ token: resp.token as AccessToken }); - } else { - logOut(); - } - - mutate([`/private/`], null); - }; + // 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); + // if (resp.valid) { + // logIn({ token: resp.token as AccessToken }); + // } else { + // logOut(); + // } + + // mutate([`/private/`], null); + // }; return { updateInstance, deleteInstance, - setNewAccessToken, + // setNewAccessToken, clearAccessToken, }; } diff --git a/packages/merchant-backoffice-ui/src/hooks/order.test.ts b/packages/merchant-backoffice-ui/src/hooks/order.test.ts index 08fffbcf0..0d4199875 100644 --- a/packages/merchant-backoffice-ui/src/hooks/order.test.ts +++ b/packages/merchant-backoffice-ui/src/hooks/order.test.ts @@ -113,11 +113,13 @@ describe("order api interaction with listing", () => { env.addRequestExpectation(API_LIST_ORDERS, { qparam: { delta: -20, paid: "yes" }, - response: { orders: [{ - order_id: "1", - amount: "EUR:12", - refundable: true, - } as TalerMerchantApi.OrderHistoryEntry] }, + response: { + orders: [{ + order_id: "1", + amount: "EUR:12", + refundable: true, + } as TalerMerchantApi.OrderHistoryEntry] + }, }); const newDate = (d: Date) => { @@ -161,14 +163,16 @@ describe("order api interaction with listing", () => { env.addRequestExpectation(API_LIST_ORDERS, { qparam: { delta: -20, paid: "yes" }, - response: { orders: [ - { order_id: "1", amount: "EUR:12", refundable: false } as any, - ] }, + response: { + orders: [ + { order_id: "1", amount: "EUR:12", refundable: false } as any, + ] + }, }); api.refundOrder("1", { reason: "double pay", - refund: "EUR:1", + refund: "EUR:1" as AmountString, }); }, ({ query, api }) => { diff --git a/packages/merchant-backoffice-ui/src/hooks/templates.ts b/packages/merchant-backoffice-ui/src/hooks/templates.ts index cdcc418ef..2e39a0c46 100644 --- a/packages/merchant-backoffice-ui/src/hooks/templates.ts +++ b/packages/merchant-backoffice-ui/src/hooks/templates.ts @@ -69,9 +69,9 @@ export function useTemplateAPI(): TemplateAPI { templateId: string, data: TalerMerchantApi.UsingTemplateDetails, ): Promise< - HttpResponseOk<TalerMerchantApi.UsingTemplateResponse> + HttpResponseOk<TalerMerchantApi.PostOrderResponse> > => { - const res = await request<TalerMerchantApi.UsingTemplateResponse>( + const res = await request<TalerMerchantApi.PostOrderResponse>( `/templates/${templateId}`, { method: "POST", @@ -114,7 +114,7 @@ export interface TemplateAPI { createOrderFromTemplate: ( id: string, data: TalerMerchantApi.UsingTemplateDetails, - ) => Promise<HttpResponseOk<TalerMerchantApi.UsingTemplateResponse>>; + ) => Promise<HttpResponseOk<TalerMerchantApi.PostOrderResponse>>; } export interface InstanceTemplateFilter { @@ -190,20 +190,20 @@ export function useInstanceTemplates( // if the query returns less that we ask, then we have reach the end or beginning const isReachingEnd = - afterData && afterData.data.templates.length < totalAfter; + afterData && afterData.data.templates_list.length < totalAfter; const isReachingStart = args?.position === undefined || - (beforeData && beforeData.data.templates.length < totalBefore); + (beforeData && beforeData.data.templates_list.length < totalBefore); const pagination = { isReachingEnd, isReachingStart, loadMore: () => { if (!afterData || isReachingEnd) return; - if (afterData.data.templates.length < MAX_RESULT_SIZE) { + if (afterData.data.templates_list.length < MAX_RESULT_SIZE) { setPageAfter(pageAfter + 1); } else { - const from = `${afterData.data.templates[afterData.data.templates.length - 1] + const from = `${afterData.data.templates_list[afterData.data.templates_list.length - 1] .template_id }`; if (from && updatePosition) updatePosition(from); @@ -211,10 +211,10 @@ export function useInstanceTemplates( }, loadMorePrev: () => { if (!beforeData || isReachingStart) return; - if (beforeData.data.templates.length < MAX_RESULT_SIZE) { + if (beforeData.data.templates_list.length < MAX_RESULT_SIZE) { setPageBefore(pageBefore + 1); } else if (beforeData) { - const from = `${beforeData.data.templates[beforeData.data.templates.length - 1] + const from = `${beforeData.data.templates_list[beforeData.data.templates_list.length - 1] .template_id }`; if (from && updatePosition) updatePosition(from); @@ -223,17 +223,17 @@ export function useInstanceTemplates( }; // const templates = !afterData ? [] : (afterData || lastAfter).data.templates; - const templates = + const templates_list = !beforeData || !afterData ? [] - : (beforeData || lastBefore).data.templates + : (beforeData || lastBefore).data.templates_list .slice() .reverse() - .concat((afterData || lastAfter).data.templates); + .concat((afterData || lastAfter).data.templates_list); if (loadingAfter || loadingBefore) - return { loading: true, data: { templates } }; + return { loading: true, data: { templates_list } }; if (beforeData && afterData) { - return { ok: true, data: { templates }, ...pagination }; + return { ok: true, data: { templates_list }, ...pagination }; } return { loading: true }; } diff --git a/packages/merchant-backoffice-ui/src/paths/admin/create/index.tsx b/packages/merchant-backoffice-ui/src/paths/admin/create/index.tsx index 99e20dcd7..3db38acc3 100644 --- a/packages/merchant-backoffice-ui/src/paths/admin/create/index.tsx +++ b/packages/merchant-backoffice-ui/src/paths/admin/create/index.tsx @@ -71,13 +71,6 @@ export default function Create({ onBack, onConfirm, forceId }: Props): VNode { const { access_token } = result.body; logIn({ token: access_token }); } - // const resp = await requestNewLoginToken(backendURL.href, d.auth.token as AccessToken) - // if (resp.valid) { - // const { token, expiration } = resp - // updateToken({ token, expiration }); - // } else { - // updateToken(undefined) - // } } onConfirm(); } catch (ex) { diff --git a/packages/merchant-backoffice-ui/src/paths/instance/templates/list/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/templates/list/index.tsx index 40ca6ac98..2138d24a4 100644 --- a/packages/merchant-backoffice-ui/src/paths/instance/templates/list/index.tsx +++ b/packages/merchant-backoffice-ui/src/paths/instance/templates/list/index.tsx @@ -92,7 +92,7 @@ export default function ListTemplates({ /> <ListPage - templates={result.data.templates} + templates={result.data.templates_list} onLoadMoreBefore={ result.isReachingStart ? result.loadMorePrev : undefined } diff --git a/packages/merchant-backoffice-ui/src/paths/instance/token/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/token/index.tsx index 50e7d500d..889ef6f5d 100644 --- a/packages/merchant-backoffice-ui/src/paths/instance/token/index.tsx +++ b/packages/merchant-backoffice-ui/src/paths/instance/token/index.tsx @@ -13,8 +13,8 @@ You should have received a copy of the GNU General Public License along with GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/> */ -import { HttpStatusCode, TalerErrorDetail } from "@gnu-taler/taler-util"; -import { ErrorType, HttpError, useTranslationContext } from "@gnu-taler/web-util/browser"; +import { AccessToken, HttpStatusCode, TalerErrorDetail } from "@gnu-taler/taler-util"; +import { ErrorType, HttpError, useMerchantApiContext, useTranslationContext } from "@gnu-taler/web-util/browser"; import { Fragment, VNode, h } from "preact"; import { useState } from "preact/hooks"; import { Loading } from "../../../components/exception/loading.js"; @@ -22,6 +22,7 @@ import { NotificationCard } from "../../../components/menu/index.js"; import { useInstanceAPI, useInstanceDetails } from "../../../hooks/instance.js"; import { Notification } from "../../../utils/types.js"; import { DetailPage } from "./DetailPage.js"; +import { useSessionContext } from "../../../context/session.js"; interface Props { onUnauthorized: () => VNode; @@ -39,9 +40,10 @@ export default function Token({ onCancel, }: Props): VNode { const { i18n } = useTranslationContext(); - + const { lib } = useMerchantApiContext(); + const { logIn } = useSessionContext(); const [notif, setNotif] = useState<Notification | undefined>(undefined); - const { clearAccessToken, setNewAccessToken } = useInstanceAPI(); + const { clearAccessToken } = useInstanceAPI(); const result = useInstanceDetails() if (result.loading) return <Loading />; @@ -83,8 +85,26 @@ export default function Token({ }} onNewToken={async (currentToken, newToken): Promise<void> => { try { - await setNewAccessToken(currentToken, newToken); - onChange(); + await lib.management.updateInstanceAuthentication(currentToken, { + token: newToken, + method: "token" + }) + const resp = await lib.authenticate.createAccessTokenMerchant(newToken, { + scope: "write", + duration: { + d_us: "forever" + }, + refreshable: true, + }) + if (resp.type === "ok") { + logIn({ token: resp.body.token }) + onChange(); + } else { + setNotif({ + message: i18n.str`Failed to set new token`, + type: "ERROR", + }); + } } catch (error) { if (error instanceof Error) { setNotif({ |