docs: public CompletableFuture<Map<InetSocketAddress, List<String>>> getRpcNodeWebSocketAddresses(final Serializable userid) {
          CompletableFuture<Collection<InetSocketAddress>> sncpFuture = getRpcNodeAddresses(userid);
          return sncpFuture.thenCompose((Collection<InetSocketAddress> addrs) -> {
              if (logger.isLoggable(Level.FINEST)) logger.finest("websocket found userid:" + userid + " on " + addrs);
              if (addrs == null || addrs.isEmpty()) return CompletableFuture.completedFuture(new HashMap<>());
              CompletableFuture<Map<InetSocketAddress, List<String>>> future = null;
              for (final InetSocketAddress nodeAddress : addrs) {
                  CompletableFuture<Map<InetSocketAddress, List<String>>> mapFuture = getWebSocketAddresses(nodeAddress, userid)
                      .thenCompose((List<String> list) -> CompletableFuture.completedFuture(Utility.ofMap(nodeAddress, list)));
                  future = future == null ? mapFuture : future.thenCombine(mapFuture, (a, b) -> Utility.merge(a, b));
              }
              return future == null ? CompletableFuture.completedFuture(new HashMap<>()) : future;
          });
      }