From ee7f83481e714bdc1575b12ebe3fa601b3640e51 Mon Sep 17 00:00:00 2001 From: hugocasa Date: Tue, 19 May 2026 16:59:13 +0200 Subject: [PATCH 1/2] fix(frontend): open customer portal in popup synchronously to bypass Safari blocker Safari blocks window.open() called after an await because it loses the user-gesture context. Open a blank tab synchronously on click, then assign location.href once the portal URL resolves. Co-Authored-By: Claude Opus 4.7 (1M context) --- frontend/src/lib/components/InstanceSetting.svelte | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/frontend/src/lib/components/InstanceSetting.svelte b/frontend/src/lib/components/InstanceSetting.svelte index 703b833a2fc51..dff859132270f 100644 --- a/frontend/src/lib/components/InstanceSetting.svelte +++ b/frontend/src/lib/components/InstanceSetting.svelte @@ -123,11 +123,19 @@ export async function openCustomerPortal() { opening = true + const newWindow = window.open('', '_blank') try { const url = await SettingService.createCustomerPortalSession({ licenseKey: $values['license_key'] || undefined }) - window.open(url, '_blank') + if (newWindow) { + newWindow.location.href = url + } else { + window.location.href = url + } + } catch (err) { + newWindow?.close() + throw err } finally { opening = false } From fc77e63a866b0f5a65b78bf56108a12533fc3f72 Mon Sep 17 00:00:00 2001 From: hugocasa Date: Tue, 19 May 2026 16:59:16 +0200 Subject: [PATCH 2/2] chore(backend): wire dev_override feature flag in backend crate Co-Authored-By: Claude Opus 4.7 (1M context) --- backend/Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 1bfddee455fc9..a46744aa7da19 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -154,6 +154,7 @@ no_auth = ["windmill-api/no_auth"] operator = ["dep:windmill-operator"] test_job_debouncing = [] private_registry_test = [] +dev_override = ["windmill-common/dev_override"] # Languages python = ["windmill-worker/python", "windmill-api/python", "windmill-test-utils/python"] rust = ["windmill-worker/rust"]