request method

Future<Map<String, dynamic>> request(
  1. String url,
  2. Filter filter,
  3. dynamic onEvent(
    1. Nip01Event
    )
)

Implementation

Future<Map<String, dynamic>> request(
    String url, Filter filter, Function(Nip01Event) onEvent) {
  WebSocket? webSocket = webSockets[url];
  if (webSocket != null) {
    // TODO should check if connected / state
    String id = Random().nextInt(4294967296).toString();
    List<dynamic> request = ["REQ", id, filter.toMap()];
    final encoded = jsonEncode(request);
    var completer = Completer<Map<String, dynamic>>();
    _completers[id] = completer;
    _subscriptions[id] = onEvent;
    webSocket.add(encoded);
    var future =
        completer.future.timeout(const Duration(seconds: 10), onTimeout: () {
      // log("Rtimeout: ${id}, $url");
      return {};
    });

    return future;
  }
  return Future.error("invalid relay $url");
}