| 
 | 1 | +import 'dart:async';  | 
1 | 2 | import 'dart:convert';  | 
2 |  | -import 'dart:html' as html;  | 
3 |  | -import 'dart:js_util' as js_util;  | 
 | 3 | +import 'dart:js_interop';  | 
4 | 4 | 
 
  | 
5 | 5 | import 'package:gotrue/src/types/types.dart';  | 
6 | 6 | import 'package:logging/logging.dart';  | 
 | 7 | +import 'package:web/web.dart' as web;  | 
7 | 8 | 
 
  | 
8 | 9 | final _log = Logger('supabase.auth');  | 
9 | 10 | 
 
  | 
10 | 11 | BroadcastChannel getBroadcastChannel(String broadcastKey) {  | 
11 |  | -  final broadcast = html.BroadcastChannel(broadcastKey);  | 
12 |  | -  return (  | 
13 |  | -    onMessage: broadcast.onMessage.map((event) {  | 
14 |  | -      final dataMap = js_util.dartify(event.data);  | 
 | 12 | +  final broadcast = web.BroadcastChannel(broadcastKey);  | 
 | 13 | +  final controller = StreamController<Map<String, dynamic>>();  | 
 | 14 | + | 
 | 15 | +  broadcast.addEventListener(  | 
 | 16 | +    'message',  | 
 | 17 | +    (web.Event event) {  | 
 | 18 | +      if (event is web.MessageEvent) {  | 
 | 19 | +        final dataMap = event.data.dartify();  | 
 | 20 | +        controller.add(json.decode(json.encode(dataMap)));  | 
 | 21 | +      }  | 
 | 22 | +    } as web.EventListener,  | 
 | 23 | +  );  | 
15 | 24 | 
 
  | 
16 |  | -      // some parts have the wrong map type. This is an easy workaround and  | 
17 |  | -      // should be efficient enough for the small session and user data  | 
18 |  | -      return json.decode(json.encode(dataMap));  | 
19 |  | -    }),  | 
 | 25 | +  return (  | 
 | 26 | +    onMessage: controller.stream,  | 
20 | 27 |     postMessage: (message) {  | 
21 | 28 |       _log.finest('Broadcasting message: $message');  | 
22 | 29 |       _log.fine('Broadcasting event: ${message['event']}');  | 
23 |  | -      final jsMessage = js_util.jsify(message);  | 
24 |  | -      broadcast.postMessage(jsMessage);  | 
 | 30 | +      broadcast.postMessage(message.jsify() as JSAny);  | 
 | 31 | +    },  | 
 | 32 | +    close: () {  | 
 | 33 | +      broadcast.close();  | 
 | 34 | +      controller.close();  | 
25 | 35 |     },  | 
26 |  | -    close: broadcast.close,  | 
27 | 36 |   );  | 
28 | 37 | }  | 
0 commit comments