import ExpoModulesCore import WatchConnectivity public class WatchConnectivityModule: Module { public func definition() -> ModuleDefinition { Name("WatchConnectivity") AsyncFunction("isSupported") { () -> Bool in return WCSession.isSupported() } AsyncFunction("isPaired") { () -> Bool in return WCSession.default.isPaired } AsyncFunction("isWatchAppInstalled") { () -> Bool in return WCSession.default.isWatchAppInstalled } AsyncFunction("isReachable") { () -> Bool in return WCSession.default.isReachable } AsyncFunction("sendWorkoutPlan") { (plan: [String: Any], promise: Promise) in var message = plan message["type"] = "workoutPlan" if WCSession.default.isReachable { WCSession.default.sendMessage(message, replyHandler: { reply in promise.resolve(reply) }, errorHandler: { error in promise.reject(error) }) } else { WCSession.default.transferUserInfo(message) promise.resolve(["status": "queued"]) } } AsyncFunction("sendWorkoutCompletion") { (data: [String: Any], promise: Promise) in var message = data message["type"] = "workoutCompleted" if WCSession.default.isReachable { WCSession.default.sendMessage(message, replyHandler: { reply in promise.resolve(reply) }, errorHandler: { error in promise.reject(error) }) } else { WCSession.default.transferUserInfo(message) promise.resolve(["status": "queued"]) } } AsyncFunction("getApplicationContext") { () -> [String: Any]? in return WCSession.default.receivedApplicationContext as [String: Any] } AsyncFunction("updateApplicationContext") { (context: [String: Any]) in try? WCSession.default.updateApplicationContext(context) } } }