diff --git a/Sources/XXMessengerClient/Messenger/Functors/MessengerWaitForNetwork.swift b/Sources/XXMessengerClient/Messenger/Functors/MessengerWaitForNetwork.swift
new file mode 100644
index 0000000000000000000000000000000000000000..df8fea1885d56a9c8df0757d1886064d607447e9
--- /dev/null
+++ b/Sources/XXMessengerClient/Messenger/Functors/MessengerWaitForNetwork.swift
@@ -0,0 +1,36 @@
+import XXClient
+import XCTestDynamicOverlay
+
+public struct MessengerWaitForNetwork {
+  public enum Error: Swift.Error {
+    case notLoaded
+    case timeout
+  }
+
+  public var run: (Int) throws -> Void
+
+  public func callAsFunction(
+    timeoutMS: Int = 30_000
+  ) throws {
+    try run(timeoutMS)
+  }
+}
+
+extension MessengerWaitForNetwork {
+  public static func live(_ env: MessengerEnvironment) -> MessengerWaitForNetwork {
+    MessengerWaitForNetwork { timeoutMS in
+      guard let cMix = env.ctx.getCMix() else {
+        throw Error.notLoaded
+      }
+      guard cMix.waitForNetwork(timeoutMS: timeoutMS) else {
+        throw Error.timeout
+      }
+    }
+  }
+}
+
+extension MessengerWaitForNetwork {
+  public static let unimplemented = MessengerWaitForNetwork(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}
diff --git a/Sources/XXMessengerClient/Messenger/Messenger.swift b/Sources/XXMessengerClient/Messenger/Messenger.swift
index 5526c59c243900c600a4686b1edc10214a5fe213..959aff7ffec86419698f34b9512c5939a31be1ad 100644
--- a/Sources/XXMessengerClient/Messenger/Messenger.swift
+++ b/Sources/XXMessengerClient/Messenger/Messenger.swift
@@ -15,6 +15,7 @@ public struct Messenger {
   public var register: MessengerRegister
   public var isLoggedIn: MessengerIsLoggedIn
   public var logIn: MessengerLogIn
+  public var waitForNetwork: MessengerWaitForNetwork
 }
 
 extension Messenger {
@@ -33,7 +34,8 @@ extension Messenger {
       isRegistered: .live(env),
       register: .live(env),
       isLoggedIn: .live(env),
-      logIn: .live(env)
+      logIn: .live(env),
+      waitForNetwork: .live(env)
     )
   }
 }
@@ -53,6 +55,7 @@ extension Messenger {
     isRegistered: .unimplemented,
     register: .unimplemented,
     isLoggedIn: .unimplemented,
-    logIn: .unimplemented
+    logIn: .unimplemented,
+    waitForNetwork: .unimplemented
   )
 }
diff --git a/Tests/XXMessengerClientTests/Messenger/Functors/MessengerWaitForNetworkTests.swift b/Tests/XXMessengerClientTests/Messenger/Functors/MessengerWaitForNetworkTests.swift
new file mode 100644
index 0000000000000000000000000000000000000000..9e4892269f0ca9cb7819723548c35222c13d1699
--- /dev/null
+++ b/Tests/XXMessengerClientTests/Messenger/Functors/MessengerWaitForNetworkTests.swift
@@ -0,0 +1,55 @@
+import CustomDump
+import XCTest
+import XXClient
+@testable import XXMessengerClient
+
+final class MessengerWaitForNetworkTests: XCTestCase {
+  func testWaitSuccess() throws {
+    var didWaitForNetwork: [Int] = []
+
+    var env: MessengerEnvironment = .unimplemented
+    env.ctx.getCMix = {
+      var cMix: CMix = .unimplemented
+      cMix.waitForNetwork.run = { timeoutMS in
+        didWaitForNetwork.append(timeoutMS)
+        return true
+      }
+      return cMix
+    }
+    let waitForNetwork: MessengerWaitForNetwork = .live(env)
+
+    try waitForNetwork(timeoutMS: 123)
+
+    XCTAssertNoDifference(didWaitForNetwork, [123])
+  }
+
+  func testWaitWhenNotLoaded() {
+    var env: MessengerEnvironment = .unimplemented
+    env.ctx.getCMix = { nil }
+    let waitForNetwork: MessengerWaitForNetwork = .live(env)
+
+    XCTAssertThrowsError(try waitForNetwork()) { error in
+      XCTAssertEqual(
+        error as? MessengerWaitForNetwork.Error,
+        MessengerWaitForNetwork.Error.notLoaded
+      )
+    }
+  }
+
+  func testWaitTimeout() {
+    var env: MessengerEnvironment = .unimplemented
+    env.ctx.getCMix = {
+      var cMix: CMix = .unimplemented
+      cMix.waitForNetwork.run = { _ in false }
+      return cMix
+    }
+    let waitForNetwork: MessengerWaitForNetwork = .live(env)
+
+    XCTAssertThrowsError(try waitForNetwork()) { error in
+      XCTAssertEqual(
+        error as? MessengerWaitForNetwork.Error,
+        MessengerWaitForNetwork.Error.timeout
+      )
+    }
+  }
+}