From 4331a086d2295edd8419cdec69f75618a47b4fc4 Mon Sep 17 00:00:00 2001 From: MichaelVerdon Date: Thu, 23 Oct 2025 11:42:01 +0100 Subject: [PATCH 1/7] fix(app-check, web): More explicit interop types --- .../lib/src/interop/app_check.dart | 22 ++++++++----------- .../lib/src/interop/app_check_interop.dart | 17 ++++---------- 2 files changed, 13 insertions(+), 26 deletions(-) diff --git a/packages/firebase_app_check/firebase_app_check_web/lib/src/interop/app_check.dart b/packages/firebase_app_check/firebase_app_check_web/lib/src/interop/app_check.dart index 34d63e984274..34ef4481b1ca 100644 --- a/packages/firebase_app_check/firebase_app_check_web/lib/src/interop/app_check.dart +++ b/packages/firebase_app_check/firebase_app_check_web/lib/src/interop/app_check.dart @@ -58,22 +58,18 @@ class AppCheck extends JsObjectWrapper { isTokenAutoRefreshEnabled.toJS, ); - Future getToken(bool? forceRefresh) => - app_check_interop.getToken(jsObject, forceRefresh?.toJS).toDart.then( - (value) => value! as app_check_interop.AppCheckTokenResult, - ); + Future getToken(bool? forceRefresh) => + app_check_interop.getToken(jsObject, forceRefresh?.toJS).toDart; - Future getLimitedUseToken() => - app_check_interop.getLimitedUseToken(jsObject).toDart.then( - (value) => value! as app_check_interop.AppCheckTokenResult, - ); + Future getLimitedUseToken() => + app_check_interop.getLimitedUseToken(jsObject).toDart; JSFunction? _idTokenChangedUnsubscribe; - StreamController? + StreamController? get idTokenChangedController => _idTokenChangedController; - StreamController? + StreamController? // ignore: close_sinks _idTokenChangedController; @@ -92,11 +88,11 @@ class AppCheck extends JsObjectWrapper { return 'no-op'; } - Stream onTokenChanged(String appName) { + Stream onTokenChanged(String appName) { final appCheckWindowsKey = _appCheckWindowsKey(appName); unsubscribeWindowsListener(appCheckWindowsKey); if (_idTokenChangedController == null) { - final nextWrapper = ((app_check_interop.AppCheckTokenResult result) { + final nextWrapper = ((app_check_interop.AppCheckTokenResultJsImpl result) { _idTokenChangedController!.add(result); }).toJS; @@ -120,7 +116,7 @@ class AppCheck extends JsObjectWrapper { } _idTokenChangedController = - StreamController.broadcast( + StreamController.broadcast( onListen: startListen, onCancel: stopListen, sync: true, diff --git a/packages/firebase_app_check/firebase_app_check_web/lib/src/interop/app_check_interop.dart b/packages/firebase_app_check/firebase_app_check_web/lib/src/interop/app_check_interop.dart index c80074972e3f..f4f63a9b048a 100644 --- a/packages/firebase_app_check/firebase_app_check_web/lib/src/interop/app_check_interop.dart +++ b/packages/firebase_app_check/firebase_app_check_web/lib/src/interop/app_check_interop.dart @@ -21,14 +21,14 @@ external AppCheckJsImpl initializeAppCheck( @JS() @staticInterop -external JSPromise /* AppCheckTokenResult */ getToken( +external JSPromise getToken( AppCheckJsImpl? appCheck, JSBoolean? forceRefresh, ); @JS() @staticInterop -external JSPromise /* AppCheckTokenResult */ getLimitedUseToken( +external JSPromise getLimitedUseToken( AppCheckJsImpl? appCheck, ); @@ -63,12 +63,7 @@ class ReCaptchaV3Provider implements ReCaptchaProvider { class ReCaptchaEnterpriseProvider implements ReCaptchaProvider { external factory ReCaptchaEnterpriseProvider(JSString recaptchaKey); } - -@JS() -@staticInterop -abstract class AppCheckTokenResult {} - -extension AppCheckTokenResultJsImplX on AppCheckTokenResult { +extension type AppCheckTokenResultJsImpl._(JSObject _) implements JSObject { external JSString get token; } @@ -88,10 +83,6 @@ extension AppCheckOptionsJsImplX on AppCheckOptions { external ReCaptchaProvider get provider; } -@JS('AppCheck') -@staticInterop -abstract class AppCheckJsImpl {} - -extension AppCheckJsImplX on AppCheckJsImpl { +extension type AppCheckJsImpl._(JSObject _) implements JSObject { external AppJsImpl get app; } From d8be8fd7c90e4c9e41abf60ca956e043189d3a75 Mon Sep 17 00:00:00 2001 From: MichaelVerdon Date: Thu, 23 Oct 2025 11:47:13 +0100 Subject: [PATCH 2/7] fix: types --- .../firebase_app_check_web/lib/firebase_app_check_web.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/firebase_app_check/firebase_app_check_web/lib/firebase_app_check_web.dart b/packages/firebase_app_check/firebase_app_check_web/lib/firebase_app_check_web.dart index ddf8d2db28ee..e028a042348e 100644 --- a/packages/firebase_app_check/firebase_app_check_web/lib/firebase_app_check_web.dart +++ b/packages/firebase_app_check/firebase_app_check_web/lib/firebase_app_check_web.dart @@ -157,7 +157,7 @@ class FirebaseAppCheckWeb extends FirebaseAppCheckPlatform { @override Future getToken(bool forceRefresh) async { return convertWebExceptions>(() async { - app_check_interop.AppCheckTokenResult result = + app_check_interop.AppCheckTokenResultJsImpl result = await _delegate!.getToken(forceRefresh); return result.token.toDart; }); @@ -166,7 +166,7 @@ class FirebaseAppCheckWeb extends FirebaseAppCheckPlatform { @override Future getLimitedUseToken() async { return convertWebExceptions>(() async { - app_check_interop.AppCheckTokenResult result = + app_check_interop.AppCheckTokenResultJsImpl result = await _delegate!.getLimitedUseToken(); return result.token.toDart; }); From 6aae50184bd31a8d569a97ee8fbbcafb90911c2d Mon Sep 17 00:00:00 2001 From: MichaelVerdon Date: Thu, 23 Oct 2025 11:53:20 +0100 Subject: [PATCH 3/7] format: app-check --- .../lib/src/interop/app_check.dart | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/firebase_app_check/firebase_app_check_web/lib/src/interop/app_check.dart b/packages/firebase_app_check/firebase_app_check_web/lib/src/interop/app_check.dart index 34ef4481b1ca..8cfdb5b2f2d7 100644 --- a/packages/firebase_app_check/firebase_app_check_web/lib/src/interop/app_check.dart +++ b/packages/firebase_app_check/firebase_app_check_web/lib/src/interop/app_check.dart @@ -58,7 +58,8 @@ class AppCheck extends JsObjectWrapper { isTokenAutoRefreshEnabled.toJS, ); - Future getToken(bool? forceRefresh) => + Future getToken( + bool? forceRefresh) => app_check_interop.getToken(jsObject, forceRefresh?.toJS).toDart; Future getLimitedUseToken() => @@ -88,11 +89,13 @@ class AppCheck extends JsObjectWrapper { return 'no-op'; } - Stream onTokenChanged(String appName) { + Stream onTokenChanged( + String appName) { final appCheckWindowsKey = _appCheckWindowsKey(appName); unsubscribeWindowsListener(appCheckWindowsKey); if (_idTokenChangedController == null) { - final nextWrapper = ((app_check_interop.AppCheckTokenResultJsImpl result) { + final nextWrapper = + ((app_check_interop.AppCheckTokenResultJsImpl result) { _idTokenChangedController!.add(result); }).toJS; @@ -115,8 +118,8 @@ class AppCheck extends JsObjectWrapper { removeWindowsListener(appCheckWindowsKey); } - _idTokenChangedController = - StreamController.broadcast( + _idTokenChangedController = StreamController< + app_check_interop.AppCheckTokenResultJsImpl>.broadcast( onListen: startListen, onCancel: stopListen, sync: true, From df5eb498928fd38f9b0063abd4632e53cbe4d9d1 Mon Sep 17 00:00:00 2001 From: MichaelVerdon Date: Thu, 23 Oct 2025 12:47:32 +0100 Subject: [PATCH 4/7] chore: fix format --- .../firebase_app_check_web/lib/src/interop/app_check.dart | 6 ++++-- .../lib/src/interop/app_check_interop.dart | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/firebase_app_check/firebase_app_check_web/lib/src/interop/app_check.dart b/packages/firebase_app_check/firebase_app_check_web/lib/src/interop/app_check.dart index 8cfdb5b2f2d7..65ab7d46e1dd 100644 --- a/packages/firebase_app_check/firebase_app_check_web/lib/src/interop/app_check.dart +++ b/packages/firebase_app_check/firebase_app_check_web/lib/src/interop/app_check.dart @@ -59,7 +59,8 @@ class AppCheck extends JsObjectWrapper { ); Future getToken( - bool? forceRefresh) => + bool? forceRefresh, + ) => app_check_interop.getToken(jsObject, forceRefresh?.toJS).toDart; Future getLimitedUseToken() => @@ -90,7 +91,8 @@ class AppCheck extends JsObjectWrapper { } Stream onTokenChanged( - String appName) { + String appName, + ) { final appCheckWindowsKey = _appCheckWindowsKey(appName); unsubscribeWindowsListener(appCheckWindowsKey); if (_idTokenChangedController == null) { diff --git a/packages/firebase_app_check/firebase_app_check_web/lib/src/interop/app_check_interop.dart b/packages/firebase_app_check/firebase_app_check_web/lib/src/interop/app_check_interop.dart index f4f63a9b048a..a72b2cf0c2a4 100644 --- a/packages/firebase_app_check/firebase_app_check_web/lib/src/interop/app_check_interop.dart +++ b/packages/firebase_app_check/firebase_app_check_web/lib/src/interop/app_check_interop.dart @@ -63,6 +63,7 @@ class ReCaptchaV3Provider implements ReCaptchaProvider { class ReCaptchaEnterpriseProvider implements ReCaptchaProvider { external factory ReCaptchaEnterpriseProvider(JSString recaptchaKey); } + extension type AppCheckTokenResultJsImpl._(JSObject _) implements JSObject { external JSString get token; } From 2c6576837efce690be30d7211bd7dc8a28b62ec7 Mon Sep 17 00:00:00 2001 From: MichaelVerdon Date: Thu, 23 Oct 2025 13:12:06 +0100 Subject: [PATCH 5/7] fix: format --- .../firebase_app_check_web/lib/src/interop/app_check.dart | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/firebase_app_check/firebase_app_check_web/lib/src/interop/app_check.dart b/packages/firebase_app_check/firebase_app_check_web/lib/src/interop/app_check.dart index 65ab7d46e1dd..63f261ca8fa6 100644 --- a/packages/firebase_app_check/firebase_app_check_web/lib/src/interop/app_check.dart +++ b/packages/firebase_app_check/firebase_app_check_web/lib/src/interop/app_check.dart @@ -59,8 +59,8 @@ class AppCheck extends JsObjectWrapper { ); Future getToken( - bool? forceRefresh, - ) => + bool? forceRefresh, + ) => app_check_interop.getToken(jsObject, forceRefresh?.toJS).toDart; Future getLimitedUseToken() => @@ -91,8 +91,8 @@ class AppCheck extends JsObjectWrapper { } Stream onTokenChanged( - String appName, - ) { + String appName, + ) { final appCheckWindowsKey = _appCheckWindowsKey(appName); unsubscribeWindowsListener(appCheckWindowsKey); if (_idTokenChangedController == null) { From 36e544d30b48c44c108d7447d01ac22bd7219da0 Mon Sep 17 00:00:00 2001 From: MichaelVerdon Date: Fri, 24 Oct 2025 10:24:16 +0100 Subject: [PATCH 6/7] chore: unskip web test --- .../firebase_app_check/firebase_app_check_e2e_test.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/integration_test/firebase_app_check/firebase_app_check_e2e_test.dart b/tests/integration_test/firebase_app_check/firebase_app_check_e2e_test.dart index 61950b98d28a..c5de61f6806c 100644 --- a/tests/integration_test/firebase_app_check/firebase_app_check_e2e_test.dart +++ b/tests/integration_test/firebase_app_check/firebase_app_check_e2e_test.dart @@ -46,7 +46,6 @@ void main() { } // This will fail until this is resolved: https://github.com/dart-lang/sdk/issues/52572 }, - skip: kIsWeb, ); test( From c4aa38ff05e4917441e2c2699cc38e18a77f9341 Mon Sep 17 00:00:00 2001 From: MichaelVerdon Date: Fri, 24 Oct 2025 10:49:32 +0100 Subject: [PATCH 7/7] fix: unskip tests --- .../firebase_app_check/firebase_app_check_e2e_test.dart | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/integration_test/firebase_app_check/firebase_app_check_e2e_test.dart b/tests/integration_test/firebase_app_check/firebase_app_check_e2e_test.dart index c5de61f6806c..2046367d76b1 100644 --- a/tests/integration_test/firebase_app_check/firebase_app_check_e2e_test.dart +++ b/tests/integration_test/firebase_app_check/firebase_app_check_e2e_test.dart @@ -44,7 +44,6 @@ void main() { // Needs a debug token pasted in the Firebase console to work so we catch the exception. expect(exception, isA()); } - // This will fail until this is resolved: https://github.com/dart-lang/sdk/issues/52572 }, ); @@ -72,9 +71,7 @@ void main() { // Needs a debug token pasted in the Firebase console to work so we catch the exception. expect(exception, isA()); } - // This will fail until this is resolved: https://github.com/dart-lang/sdk/issues/52572 }, - skip: kIsWeb, ); test(