From 8df44b99b92de29dc3bf5b33a495fb0af5a81a6c Mon Sep 17 00:00:00 2001 From: Juergen Kunz Date: Thu, 4 Dec 2025 18:06:49 +0000 Subject: [PATCH] feat: Enhance WebSocket integration and add SPA fallback for routing --- ts/index.ts | 4 ++++ ts_idpclient/classes.idpclient.ts | 12 ++++++------ ts_idpclient/classes.idprequests.ts | 28 +++++++++++----------------- 3 files changed, 21 insertions(+), 23 deletions(-) diff --git a/ts/index.ts b/ts/index.ts index 88ca382..38db723 100644 --- a/ts/index.ts +++ b/ts/index.ts @@ -8,6 +8,10 @@ export const runCli = async () => { feedMetadata: null, domain: 'idp.global', serveDir: paths.distWebDir, + addCustomRoutes: async (typedserver) => { + // Enable SPA fallback - serves index.html for non-file routes (e.g., /login, /dashboard) + typedserver.options.spaFallback = true; + }, }); // lets add the reception routes diff --git a/ts_idpclient/classes.idpclient.ts b/ts_idpclient/classes.idpclient.ts index bfcf41d..86a4877 100644 --- a/ts_idpclient/classes.idpclient.ts +++ b/ts_idpclient/classes.idpclient.ts @@ -126,9 +126,9 @@ export class IdpClient { if (!refreshTokenArg) { extractedJwt = await this.helpers.extractDataFromJwtString(await this.getJwt()); } + await this.typedsocketDeferred.promise; const refreshJwtReq = - new plugins.typedrequest.TypedRequest( - this.parsedReceptionUrl.toString(), + this.typedsocket.createTypedRequest( 'refreshJwt' ); const response = await refreshJwtReq.fire({ @@ -149,9 +149,9 @@ export class IdpClient { public async getTransferToken(appDataArg?: plugins.idpInterfaces.data.IAppLegacy): Promise { const jwt = await this.performJwtHousekeeping(); const extractedJwt = await this.helpers.extractDataFromJwtString(jwt); + await this.typedsocketDeferred.promise; const getTransferToken = - new plugins.typedrequest.TypedRequest( - this.parsedReceptionUrl.toString(), + this.typedsocket.createTypedRequest( 'exchangeRefreshTokenAndTransferToken' ); const response = await getTransferToken.fire({ @@ -187,9 +187,9 @@ export class IdpClient { const url = plugins.smarturl.Smarturl.createFromUrl(href); const transferToken = url.searchParams['transfertoken']; if (transferToken) { + await this.typedsocketDeferred.promise; const getTransferToken = - new plugins.typedrequest.TypedRequest( - this.parsedReceptionUrl.toString(), + this.typedsocket.createTypedRequest( 'exchangeRefreshTokenAndTransferToken' ); const response = await getTransferToken.fire({ diff --git a/ts_idpclient/classes.idprequests.ts b/ts_idpclient/classes.idprequests.ts index db111ca..8a6fe8e 100644 --- a/ts_idpclient/classes.idprequests.ts +++ b/ts_idpclient/classes.idprequests.ts @@ -3,6 +3,7 @@ import type { IdpClient } from "./classes.idpclient.js"; /** * this class bundles all the typed requests that are used by the idp + * All requests use TypedSocket (WebSocket) transport */ export class IdpRequests { idpClientArg: IdpClient; @@ -11,52 +12,45 @@ export class IdpRequests { } public get afterRegistrationEmailClicked () { - return new plugins.typedrequest.TypedRequest( - this.idpClientArg.parsedReceptionUrl.toString(), + return this.idpClientArg.typedsocket.createTypedRequest( 'afterRegistrationEmailClicked' ); } public get setData() { - return new plugins.typedrequest.TypedRequest( - this.idpClientArg.parsedReceptionUrl.toString(), + return this.idpClientArg.typedsocket.createTypedRequest( 'setDataForRegistration' ); } public get mobileNumberVerification () { - return new plugins.typedrequest.TypedRequest( - this.idpClientArg.parsedReceptionUrl.toString(), + return this.idpClientArg.typedsocket.createTypedRequest( 'mobileVerificationForRegistration' ); } - + public get finishRegistration() { - return new plugins.typedrequest.TypedRequest( - this.idpClientArg.parsedReceptionUrl.toString(), + return this.idpClientArg.typedsocket.createTypedRequest( 'finishRegistration' ); } public get loginWithUserNameAndPassword () { - return new plugins.typedrequest.TypedRequest( - this.idpClientArg.parsedReceptionUrl.toString(), + return this.idpClientArg.typedsocket.createTypedRequest( 'loginWithEmailOrUsernameAndPassword' ); - } + } public get obtainJwt () { - return new plugins.typedrequest.TypedRequest( - this.idpClientArg.parsedReceptionUrl.toString(), + return this.idpClientArg.typedsocket.createTypedRequest( 'refreshJwt' ); } public get obtainOneTimeToken () { - return new plugins.typedrequest.TypedRequest( - this.idpClientArg.parsedReceptionUrl.toString(), + return this.idpClientArg.typedsocket.createTypedRequest( 'exchangeRefreshTokenAndTransferToken' ); } -} \ No newline at end of file +}