diff --git a/Sources/ElixxirDAppsSDK/Client.swift b/Sources/ElixxirDAppsSDK/Client.swift
index 47f4b2ef586c2f2cdbe7bb3730c4308af5d7faa3..7183cc636a9f2c5410d14d437e9c41d5f540d71f 100644
--- a/Sources/ElixxirDAppsSDK/Client.swift
+++ b/Sources/ElixxirDAppsSDK/Client.swift
@@ -2,12 +2,14 @@ import Bindings
 
 public struct Client {
   public var networkFollower: NetworkFollower
+  public var waitForNetwork: NetworkWaiter
 }
 
 extension Client {
   public static func live(bindingsClient: BindingsClient) -> Client {
     Client(
-      networkFollower: .live(bindingsClient: bindingsClient)
+      networkFollower: .live(bindingsClient: bindingsClient),
+      waitForNetwork: .live(bindingsClient: bindingsClient)
     )
   }
 }
@@ -15,7 +17,8 @@ extension Client {
 #if DEBUG
 extension Client {
   public static let failing = Client(
-    networkFollower: .failing
+    networkFollower: .failing,
+    waitForNetwork: .failing
   )
 }
 #endif
diff --git a/Sources/ElixxirDAppsSDK/NetworkWaiter.swift b/Sources/ElixxirDAppsSDK/NetworkWaiter.swift
new file mode 100644
index 0000000000000000000000000000000000000000..2f1ac828bb23f56a8e4be1f04ce5f8ff2bf4a04e
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/NetworkWaiter.swift
@@ -0,0 +1,25 @@
+import Bindings
+
+public struct NetworkWaiter {
+  public var wait: (_ timeoutMS: Int) -> Bool
+
+  public func callAsFunction(timeoutMS: Int) -> Bool {
+    wait(timeoutMS)
+  }
+}
+
+extension NetworkWaiter {
+  public static func live(bindingsClient: BindingsClient) -> NetworkWaiter {
+    NetworkWaiter { timeoutMS in
+      bindingsClient.wait(forNetwork: timeoutMS)
+    }
+  }
+}
+
+#if DEBUG
+extension NetworkWaiter {
+  public static let failing = NetworkWaiter { _ in
+    false
+  }
+}
+#endif