From b8826ace9be5031763dd11f4641b7c3112306771 Mon Sep 17 00:00:00 2001 From: superdooper86 Date: Mon, 11 May 2026 10:22:59 +0200 Subject: [PATCH] fix: NSNumber cast and use .page world in callAsyncJavaScript auth check callAsyncJavaScript returns JS numbers as NSNumber (Double-backed). 'val as? Int' silently returns nil for 200.0, so onAuthenticated never fired. Fixed with 'val as? NSNumber then .intValue == 200'. Also switched content world from .defaultClient to .page so the fetch runs in the same JS context as the loaded page. --- ClaudeChecker/Info.plist | 4 ++-- ClaudeChecker/LoginView.swift | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/ClaudeChecker/Info.plist b/ClaudeChecker/Info.plist index 9d6db50..38ee5fd 100644 --- a/ClaudeChecker/Info.plist +++ b/ClaudeChecker/Info.plist @@ -15,9 +15,9 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.2.1-beta.8 + 1.2.1-beta.9 CFBundleVersion - 56 + 57 LSMinimumSystemVersion 13.0 LSUIElement diff --git a/ClaudeChecker/LoginView.swift b/ClaudeChecker/LoginView.swift index 4176f4e..9b73520 100644 --- a/ClaudeChecker/LoginView.swift +++ b/ClaudeChecker/LoginView.swift @@ -41,10 +41,12 @@ struct LoginWebView: NSViewRepresentable { // cookie domain or name. webView.callAsyncJavaScript( "const r = await fetch('/api/bootstrap', {credentials: 'include'}); return r.status;", - arguments: [:], in: nil, in: .defaultClient + arguments: [:], in: nil, in: .page ) { [weak self] result in guard let self, !self.didAuthenticate else { return } - if case .success(let val) = result, let status = val as? Int, status == 200 { + // JS numbers arrive as NSNumber (Double-backed), not Swift Int + if case .success(let val) = result, + let n = val as? NSNumber, n.intValue == 200 { self.didAuthenticate = true DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { self.onAuthenticated()