             refreshAuthToken(result)
         }
     }
-
+}
+
+/**
+ Refresh Auth Token Recursive with Timeout
+ */
+private func refreshAuthToken(_ expirationToken:String){
+    after(interval: getTimeout(Double(expirationToken)!)).then{ result -> Void in
+        refreshToken().then{ result -> Void in
+            setTokenSDK(result)
+            expLogging("EXP refreshAuthToken: \(result.document)")
+            socketManager.refreshConnection()
+            refreshAuthToken(result)
+        }
+    }
 }
 
 /**

 @param params.
 @return Promise<User>.
 */
public func getUser(_ host:String, auth:Auth) -> Promise<User>{
    expLogging("EXP GET USER  : \(auth.document)")
    setTokenSDK(auth)
    refreshAuthToken(auth)
    if let callBack = authConnection[Config.UPDATE]{
        callBack(Config.UPDATE)
    }

}

/**
 Get Time Out
 */
private func getTimeout(_ expiration:Double) -> TimeInterval{
    let startDate = Date(timeIntervalSince1970: expiration/1000)
    let timeout = startDate.timeIntervalSince(Date())
    return TimeInterval(Int64(timeout))
}

/**
 Set Token SDK
 */
private func setTokenSDK(_ data:Auth){
