taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

commit 207ca1b7c401ec4ae5b17b110b232d1305943d8f
parent a49bca2917cfa9c044efb8681965ab29c4af54e9
Author: Sebastian <sebasjm@gmail.com>
Date:   Fri, 23 Aug 2024 18:01:36 -0300

fix spa url

Diffstat:
Mpackages/kyc-ui/src/Routing.tsx | 36+++++++++++++++++++++---------------
Mpackages/kyc-ui/src/hooks/kyc.ts | 11++++++-----
Mpackages/kyc-ui/src/hooks/session.ts | 12++++--------
Mpackages/kyc-ui/src/pages/CallengeCompleted.tsx | 3---
Mpackages/kyc-ui/src/pages/Start.tsx | 22+++++++++-------------
Mpackages/taler-wallet-core/src/exchanges.ts | 2+-
Mpackages/taler-wallet-core/src/pay-peer-pull-credit.ts | 2+-
Mpackages/taler-wallet-core/src/pay-peer-push-credit.ts | 2+-
Mpackages/taler-wallet-core/src/withdraw.ts | 4++--
9 files changed, 45 insertions(+), 49 deletions(-)

diff --git a/packages/kyc-ui/src/Routing.tsx b/packages/kyc-ui/src/Routing.tsx @@ -43,10 +43,6 @@ export function Routing(): VNode { const publicPages = { completed: urlPattern(/\/completed/, () => `#/completed`), start: urlPattern(/\/start/, () => `#/start`), - token: urlPattern<{ token: string }>( - /\/token\/(?<token>[0-9A-Za-z]+)/, - ({ token }) => `#/token/${token}`, - ), }; function safeGetParam( @@ -66,6 +62,19 @@ export function safeToURL(s: string | undefined): URL | undefined { } } +/** + * by how the exchange + * /kyc-spa/KXAFXEWM7E3EJSYD9GJ30FYK1C17AKZWV119ZJA3XGPBBMZFJ2C0 + * + * @returns + */ +function getAccessTokenFromURL(): AccessToken | undefined { + if (typeof window === "undefined") return undefined; + const paths = window.location.pathname.split("/"); + if (paths.length < 3) return undefined; + return paths[2] as AccessToken; +} + function PublicRounting(): VNode { const location = useCurrentLocation(publicPages); const { navigateTo } = useNavigationContext(); @@ -73,23 +82,20 @@ function PublicRounting(): VNode { console.log("error", e); }); + const at = getAccessTokenFromURL(); + if (!at) { + return <div>no access token</div>; + } + switch (location.name) { case undefined: { - return <div>not found</div>; - } - case "token": { - return ( - <SaveToken - token={location.values.token as AccessToken} - onStarted={() => { - navigateTo(publicPages.start.url({})); - }} - /> - ); + navigateTo(publicPages.start.url({})); + return <Loading />; } case "start": { return ( <Start + token={at} onLoggedOut={() => { navigateTo(publicPages.completed.url({})); }} diff --git a/packages/kyc-ui/src/hooks/kyc.ts b/packages/kyc-ui/src/hooks/kyc.ts @@ -14,8 +14,9 @@ GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/> */ import { + AccessToken, TalerExchangeResultByMethod, - TalerHttpError + TalerHttpError, } from "@gnu-taler/taler-util"; import { useExchangeApiContext } from "@gnu-taler/web-util/browser"; import _useSWR, { SWRHook, mutate } from "swr"; @@ -30,18 +31,18 @@ export function revalidateKycInfo() { ); } -export function useKycInfo(session: SessionId) { +export function useKycInfo(token: AccessToken) { const { lib: { exchange: api }, } = useExchangeApiContext(); - async function fetcher([s]: [SessionId]) { - return await api.checkKycInfo(s.accessToken, [], { timeout: 1000 }); + async function fetcher([ac]: [AccessToken]) { + return await api.checkKycInfo(ac, [], { timeout: 1000 }); } const { data, error } = useSWR< TalerExchangeResultByMethod<"checkKycInfo">, TalerHttpError - >(!session ? undefined : [session, "checkKycInfo"], fetcher, { + >([token, "checkKycInfo"], fetcher, { revalidateIfStale: false, errorRetryCount: 0, errorRetryInterval: 1, diff --git a/packages/kyc-ui/src/hooks/session.ts b/packages/kyc-ui/src/hooks/session.ts @@ -28,16 +28,16 @@ import { buildStorageKey, useLocalStorage } from "@gnu-taler/web-util/browser"; * authenticate at the bank's backend. */ export type SessionId = { - accessToken: AccessToken; + // accessToken: AccessToken; }; export type SessionState = { - accessToken: AccessToken; + // accessToken: AccessToken; }; export const codecForSessionState = (): Codec<SessionState> => buildCodecForObject<SessionState>() - .property("accessToken", codecForAccessToken()) + // .property("accessToken", codecForAccessToken()) // .property("lastAddress", codecOptional(codecForList(codecForLastAddress()))) .build("SessionState"); @@ -61,10 +61,6 @@ export function useSessionState(): SessionStateHandler { return { state, - start(s) { - update({ - accessToken: s.accessToken, - }); - }, + start(s) {}, }; } diff --git a/packages/kyc-ui/src/pages/CallengeCompleted.tsx b/packages/kyc-ui/src/pages/CallengeCompleted.tsx @@ -15,11 +15,8 @@ */ import { Attention, useTranslationContext } from "@gnu-taler/web-util/browser"; import { Fragment, VNode, h } from "preact"; -import { useSessionState } from "../hooks/session.js"; export function CallengeCompleted(): VNode { - const { state } = useSessionState(); - const { i18n } = useTranslationContext(); return ( diff --git a/packages/kyc-ui/src/pages/Start.tsx b/packages/kyc-ui/src/pages/Start.tsx @@ -38,6 +38,7 @@ import { useSessionState } from "../hooks/session.js"; type Props = { onLoggedOut: () => void; + token: AccessToken; }; function ShowReqList({ @@ -51,7 +52,7 @@ function ShowReqList({ const [notification, withErrorHandler] = useLocalNotificationHandler(); // const { lib } = useExchangeApiContext(); // const { state, start } = useSessionState(); - const result = useKycInfo({ accessToken: token }); + const result = useKycInfo(token); if (!result) { return <Loading />; } @@ -189,25 +190,20 @@ function ShowReqList({ </Fragment> ); } -export function Start({ onLoggedOut }: Props): VNode { - const { state } = useSessionState(); +export function Start({ token, onLoggedOut }: Props): VNode { + // const { state } = useSessionState(); const [req, setReq] = useState<KycRequirementInformation>(); - if (!state) { - return <Loading />; - } + // if (!state) { + // return <Loading />; + // } if (!req) { - return ( - <ShowReqList - token={state.accessToken} - onFormSelected={(r) => setReq(r)} - /> - ); + return <ShowReqList token={token} onFormSelected={(r) => setReq(r)} />; } return ( <FillForm formId={req.form} requirement={req} - token={state.accessToken} + token={token} onComplete={() => { setReq(undefined); }} diff --git a/packages/taler-wallet-core/src/exchanges.ts b/packages/taler-wallet-core/src/exchanges.ts @@ -459,7 +459,7 @@ async function makeExchangeListItem( walletKycReservePub: reserveRec?.reservePub, // FIXME: #9109 this should not be constructed here, it should be an opaque URL from exchange response walletKycUrl: reserveRec?.kycAccessToken - ? new URL(`kyc-spa/#/token/${reserveRec.kycAccessToken}`, r.baseUrl).href + ? new URL(`kyc-spa/${reserveRec.kycAccessToken}`, r.baseUrl).href : undefined, walletKycAccessToken: reserveRec?.kycAccessToken, tosStatus: getExchangeTosStatusFromRecord(r), diff --git a/packages/taler-wallet-core/src/pay-peer-pull-credit.ts b/packages/taler-wallet-core/src/pay-peer-pull-credit.ts @@ -1221,7 +1221,7 @@ async function processPeerPullCreditBalanceKyc( rec.kycAccessToken = ret.walletKycAccessToken; // FIXME: #9109 this should not be constructed here, it should be an opaque URL from exchange response rec.kycUrl = new URL( - `kyc-spa/#/token/${ret.walletKycAccessToken}`, + `kyc-spa/${ret.walletKycAccessToken}`, exchangeBaseUrl, ).href; return TransitionResult.transition(rec); diff --git a/packages/taler-wallet-core/src/pay-peer-push-credit.ts b/packages/taler-wallet-core/src/pay-peer-push-credit.ts @@ -1259,7 +1259,7 @@ async function processPeerPushCreditBalanceKyc( rec.kycAccessToken = ret.walletKycAccessToken; // FIXME: #9109 this should not be constructed here, it should be an opaque URL from exchange response rec.kycUrl = new URL( - `kyc-spa/#/token/${ret.walletKycAccessToken}`, + `kyc-spa/${ret.walletKycAccessToken}`, exchangeBaseUrl, ).href; return TransitionResult.transition(rec); diff --git a/packages/taler-wallet-core/src/withdraw.ts b/packages/taler-wallet-core/src/withdraw.ts @@ -1031,7 +1031,7 @@ async function processWithdrawalGroupBalanceKyc( wg.kycAccessToken = ret.walletKycAccessToken; // FIXME: #9109 this should not be constructed here, it should be an opaque URL from exchange response wg.kycUrl = new URL( - `kyc-spa/#/token/${ret.walletKycAccessToken}`, + `kyc-spa/${ret.walletKycAccessToken}`, exchangeBaseUrl, ).href; return TransitionResult.transition(wg); @@ -1437,7 +1437,7 @@ async function handleKycRequired( }; // FIXME: #9109 this should not be constructed here, it should be an opaque URL from exchange response wg2.kycUrl = new URL( - `kyc-spa/#/token/${kycStatus.access_token}`, + `kyc-spa/${kycStatus.access_token}`, exchangeUrl, ).href; wg2.kycAccessToken = kycStatus.access_token;