From 7e7ccb57db68ea8aeee087274bf43f0996221a12 Mon Sep 17 00:00:00 2001 From: Arnau Mora Date: Wed, 17 Sep 2025 10:58:26 +0200 Subject: [PATCH 1/6] Upgrade AGP, Compose, Kotlin and KSP to their latest versions --- gradle/libs.versions.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d2ed091..d6d6b68 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,13 +5,13 @@ minSdk = "21" jvmTarget = "17" # https://developer.android.com/build/releases/gradle-plugin#compatibility -agp = "8.10.1" +agp = "8.11.1" #https://github.com/JetBrains/compose-multiplatform -compose-multiplatform = "1.8.2" -kotlin = "2.1.21" +compose-multiplatform = "1.9.0" +kotlin = "2.2.20" # https://github.com/google/ksp -ksp = "2.1.21-2.0.1" +ksp = "2.2.20-2.0.3" kotlin-inject = "0.8.0" # https://developer.android.com/jetpack/androidx/releases/activity From 2ce14db5a3417da0b42f41be55bb7166524c607f Mon Sep 17 00:00:00 2001 From: Arnau Mora Date: Wed, 17 Sep 2025 12:10:37 +0200 Subject: [PATCH 2/6] Upgrade KotlinX browser Signed-off-by: Arnau Mora --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d6d6b68..476bca0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -31,7 +31,7 @@ kotlinxDatetime = "0.7.1" # https://github.com/Kotlin/kotlinx-atomicfu kotlinxAtomicfu = "0.28.0" -kotlinxBrowser = "0.3" +kotlinxBrowser = "0.5.0" # https://github.com/slackhq/circuit/releases circuit = "0.28.1" From 47a24d5c86e35d33ef2a07c3b609ea284e90239b Mon Sep 17 00:00:00 2001 From: Arnau Mora Date: Wed, 17 Sep 2025 12:27:11 +0200 Subject: [PATCH 3/6] Use interop functions instead of string conversion --- .../multiplatform/oidc/appsupport/WebPopupFlow.kt | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/oidc-appsupport/src/wasmJsMain/kotlin/org/publicvalue/multiplatform/oidc/appsupport/WebPopupFlow.kt b/oidc-appsupport/src/wasmJsMain/kotlin/org/publicvalue/multiplatform/oidc/appsupport/WebPopupFlow.kt index c016ba6..54e099f 100644 --- a/oidc-appsupport/src/wasmJsMain/kotlin/org/publicvalue/multiplatform/oidc/appsupport/WebPopupFlow.kt +++ b/oidc-appsupport/src/wasmJsMain/kotlin/org/publicvalue/multiplatform/oidc/appsupport/WebPopupFlow.kt @@ -65,12 +65,20 @@ internal class WebPopupFlow( private fun getEventData(event: MessageEvent): String = js("JSON.stringify(event.data)") -private fun getOpenerOrigin(): String = js("window.opener.location.origin") +private fun getOpenerOrigin(): String = (window.opener as Window?)!!.location.origin private fun postMessage(url: String, targetOrigin: String) { - js("window.opener.postMessage(url, targetOrigin)") + val opener = window.opener as Window? + opener?.postMessage(url.toJsString(), targetOrigin) + ?: throw TechnicalFailure("Could not post message to opener: opener is null", null) } private fun closeTheWindow(delay: Int = 100) { - js("setTimeout(() => window.close(), delay)") + window.setTimeout( + handler = { + window.close() + null + }, + timeout = delay + ) } \ No newline at end of file From a7b99005a2f4278827dc3d283154f399d886c692 Mon Sep 17 00:00:00 2001 From: Arnau Mora Date: Wed, 17 Sep 2025 12:56:21 +0200 Subject: [PATCH 4/6] Rollback changes Signed-off-by: Arnau Mora --- .../multiplatform/oidc/appsupport/WebPopupFlow.kt | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/oidc-appsupport/src/wasmJsMain/kotlin/org/publicvalue/multiplatform/oidc/appsupport/WebPopupFlow.kt b/oidc-appsupport/src/wasmJsMain/kotlin/org/publicvalue/multiplatform/oidc/appsupport/WebPopupFlow.kt index 54e099f..9095f47 100644 --- a/oidc-appsupport/src/wasmJsMain/kotlin/org/publicvalue/multiplatform/oidc/appsupport/WebPopupFlow.kt +++ b/oidc-appsupport/src/wasmJsMain/kotlin/org/publicvalue/multiplatform/oidc/appsupport/WebPopupFlow.kt @@ -65,20 +65,11 @@ internal class WebPopupFlow( private fun getEventData(event: MessageEvent): String = js("JSON.stringify(event.data)") -private fun getOpenerOrigin(): String = (window.opener as Window?)!!.location.origin - +private fun getOpenerOrigin(): String = js("window.opener.location.origin") private fun postMessage(url: String, targetOrigin: String) { - val opener = window.opener as Window? - opener?.postMessage(url.toJsString(), targetOrigin) - ?: throw TechnicalFailure("Could not post message to opener: opener is null", null) + js("window.opener.postMessage(url, targetOrigin)") } private fun closeTheWindow(delay: Int = 100) { - window.setTimeout( - handler = { - window.close() - null - }, - timeout = delay - ) + js("setTimeout(() => window.close(), delay)") } \ No newline at end of file From db1d4e62d892c6a54bf837ec06a6fdad55cb49ea Mon Sep 17 00:00:00 2001 From: Arnau Mora Date: Wed, 17 Sep 2025 13:20:16 +0200 Subject: [PATCH 5/6] Fix line break Signed-off-by: Arnau Mora --- .../publicvalue/multiplatform/oidc/appsupport/WebPopupFlow.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/oidc-appsupport/src/wasmJsMain/kotlin/org/publicvalue/multiplatform/oidc/appsupport/WebPopupFlow.kt b/oidc-appsupport/src/wasmJsMain/kotlin/org/publicvalue/multiplatform/oidc/appsupport/WebPopupFlow.kt index 9095f47..c016ba6 100644 --- a/oidc-appsupport/src/wasmJsMain/kotlin/org/publicvalue/multiplatform/oidc/appsupport/WebPopupFlow.kt +++ b/oidc-appsupport/src/wasmJsMain/kotlin/org/publicvalue/multiplatform/oidc/appsupport/WebPopupFlow.kt @@ -66,6 +66,7 @@ internal class WebPopupFlow( private fun getEventData(event: MessageEvent): String = js("JSON.stringify(event.data)") private fun getOpenerOrigin(): String = js("window.opener.location.origin") + private fun postMessage(url: String, targetOrigin: String) { js("window.opener.postMessage(url, targetOrigin)") } From d8d4c8f469104dd0b20b627d3032eadfe686b94f Mon Sep 17 00:00:00 2001 From: Arnau Mora Date: Wed, 17 Sep 2025 13:24:57 +0200 Subject: [PATCH 6/6] Clean handleRedirect Signed-off-by: Arnau Mora --- .../oidc/appsupport/WebPopupFlow.kt | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/oidc-appsupport/src/wasmJsMain/kotlin/org/publicvalue/multiplatform/oidc/appsupport/WebPopupFlow.kt b/oidc-appsupport/src/wasmJsMain/kotlin/org/publicvalue/multiplatform/oidc/appsupport/WebPopupFlow.kt index c016ba6..8140168 100644 --- a/oidc-appsupport/src/wasmJsMain/kotlin/org/publicvalue/multiplatform/oidc/appsupport/WebPopupFlow.kt +++ b/oidc-appsupport/src/wasmJsMain/kotlin/org/publicvalue/multiplatform/oidc/appsupport/WebPopupFlow.kt @@ -51,26 +51,25 @@ internal class WebPopupFlow( internal companion object { @ExperimentalOpenIdConnect fun handleRedirect() { - if (window.opener != null) { - postMessage( - url = window.location.toString(), - targetOrigin = getOpenerOrigin() + val opener = window.opener as Window? + if (opener != null) { + opener.postMessage( + message = window.location.toString().toJsString(), + targetOrigin = opener.location.origin ) - closeTheWindow(delay = 0) + window.setTimeout( + handler = { + window.close() + null + }, + timeout = 0 + ) + } else { + println("No window opener, not a popup flow.") } } } } private fun getEventData(event: MessageEvent): String = js("JSON.stringify(event.data)") - -private fun getOpenerOrigin(): String = js("window.opener.location.origin") - -private fun postMessage(url: String, targetOrigin: String) { - js("window.opener.postMessage(url, targetOrigin)") -} - -private fun closeTheWindow(delay: Int = 100) { - js("setTimeout(() => window.close(), delay)") -} \ No newline at end of file