commit 207ca1b7c401ec4ae5b17b110b232d1305943d8f
parent a49bca2917cfa9c044efb8681965ab29c4af54e9
Author: Sebastian <sebasjm@gmail.com>
Date: Fri, 23 Aug 2024 18:01:36 -0300
fix spa url
Diffstat:
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;