Skip to content
This repository was archived by the owner on Oct 10, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion MagicSDK.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#
Pod::Spec.new do |s|
s.name = 'MagicSDK'
s.version = '10.0.0'
s.version = '10.1.0'
s.summary = 'Magic IOS SDK'

s.description = <<-DESC
Expand Down
1 change: 1 addition & 0 deletions Sources/MagicSDK/Core/Relayer/Types/BasicTypes.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ enum InboundMessageType: String, CaseIterable {
case MAGIC_SHOW_OVERLAY
case MAGIC_HIDE_OVERLAY
case MAGIC_HANDLE_EVENT
case MAGIC_SEND_PRODUCT_ANNOUNCEMENT
}

enum OutboundMessageType: String, CaseIterable {
Expand Down
12 changes: 12 additions & 0 deletions Sources/MagicSDK/Core/Relayer/Types/ProductAnnouncement.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
//
// ProductAnnouncement.swift
//
//
// Created by Arian Flores - Magic on 2/28/24.
//

import Foundation

struct ProductAnnouncement: Codable {
let product_announcement: String
}
33 changes: 30 additions & 3 deletions Sources/MagicSDK/Core/Relayer/WebViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,16 @@

import WebKit
import UIKit
import os

/// An instance of the Fortmatc Phantom WebView
class WebViewController: UIViewController, WKUIDelegate, WKScriptMessageHandler, WKNavigationDelegate, UIScrollViewDelegate {

@available(iOS 14.0, *)
private static let logger = Logger(
subsystem: Bundle.main.bundleIdentifier!,
category: String(describing: WebViewController.self)
)

/// Various errors that may occur while processing Web3 requests
public enum AuthRelayerError: Error {

Expand Down Expand Up @@ -99,6 +105,8 @@ class WebViewController: UIViewController, WKUIDelegate, WKScriptMessageHandler,
try handleEvent(payloadStr: payloadStr)
} else if payloadStr.contains(InboundMessageType.MAGIC_HANDLE_RESPONSE.rawValue) {
try handleResponse(payloadStr: payloadStr)
} else if payloadStr.contains(InboundMessageType.MAGIC_SEND_PRODUCT_ANNOUNCEMENT.rawValue) {
try makeProductAnnouncement(payloadStr: payloadStr)
}
}
try self.dequeue()
Expand All @@ -115,8 +123,9 @@ class WebViewController: UIViewController, WKUIDelegate, WKScriptMessageHandler,

// post event to the obeserver
let event = eventResponse.response
let eventName = event.result.event
NotificationCenter.default.post(name: Notification.Name.init(eventName), object: nil, userInfo: ["event": event.result])
if let eventName = event.result.event {
NotificationCenter.default.post(name: Notification.Name.init(eventName), object: nil, userInfo: ["event": event.result])
}
}

private func handleResponse(payloadStr: String) throws -> Void {
Expand All @@ -143,6 +152,24 @@ class WebViewController: UIViewController, WKUIDelegate, WKScriptMessageHandler,
throw RpcProvider.ProviderError.invalidJsonResponse(json: payloadStr)
}
}

private func makeProductAnnouncement(payloadStr: String) throws {
// Decoding the JSON string into the Payload struct
guard let data = payloadStr.data(using: .utf8) else { return }

// Define a typealias for the expected payload type
typealias PayloadType = MagicResponseData<MagicEventResponse<ProductAnnouncement>>

let payload = try JSONDecoder().decode(PayloadType.self, from: data)
if let announcement = payload.response.result.product_announcement {
if #available(iOS 14.0, *) {
os_log("%{public}@", log: .default, type: .info, announcement)
} else {
print(announcement)
}
}
}



// MARK: - Post Messages
Expand Down
18 changes: 0 additions & 18 deletions Sources/MagicSDK/Modules/Auth/AuthModule.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,22 +9,10 @@
import Foundation
import MagicSDK_Web3
import PromiseKit
import os

public class AuthModule: BaseModule {
@available(iOS 14.0, *)
private static let logger = Logger(
subsystem: Bundle.main.bundleIdentifier!,
category: String(describing: AuthModule.self)
)

// MARK: - Login with SMS
public func loginWithSMS (_ configuration: LoginWithSmsConfiguration, response: @escaping Web3ResponseCompletion<String> ) {
if #available(iOS 14.0, *) {
AuthModule.logger.warning("loginWithSMS: \(BaseWarningLog.MA_Method)")
} else {
print("loginWithSMS: \(BaseWarningLog.MA_Method)")
}
let request = RPCRequest<[LoginWithSmsConfiguration]>(method: AuthMethod.magic_auth_login_with_sms.rawValue, params: [configuration])
self.provider.send(request: request, response: response)
}
Expand All @@ -37,12 +25,6 @@ public class AuthModule: BaseModule {

// MARK: - Login with EmailOTP
public func loginWithEmailOTP (_ configuration: LoginWithEmailOTPConfiguration, response: @escaping Web3ResponseCompletion<String> ) {
if #available(iOS 14.0, *) {
AuthModule.logger.warning("loginWithEmailOTP: \(BaseWarningLog.MA_Method)")
} else {
print("loginWithEmailOTP: \(BaseWarningLog.MA_Method)")
}

let request = RPCRequest<[LoginWithEmailOTPConfiguration]>(method: AuthMethod.magic_auth_login_with_email_otp.rawValue, params: [configuration])
self.provider.send(request: request, response: response)
}
Expand Down
13 changes: 0 additions & 13 deletions Sources/MagicSDK/Modules/BaseWarningLog.swift

This file was deleted.

4 changes: 2 additions & 2 deletions Sources/MagicSDK/Modules/Event/EventCenter.swift
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,13 @@ public class EventCenter {
/// Recieve events
@objc func onDidReceiveEventOnce(_ notification: Notification) {

if let eventResult = (notification.userInfo?["event"]) as? MagicEventResult<[AnyValue]>, let handler = eventHandlerDict[eventResult.event] {
if let eventResult = (notification.userInfo?["event"]) as? MagicEventResult<[AnyValue]>, let event = eventResult.event, let handler = eventHandlerDict[event] {

if (eventLog) {
print("MagicSDK Event: \(eventResult)")
}

NotificationCenter.default.removeObserver(self, name: Notification.Name(eventResult.event), object: nil)
NotificationCenter.default.removeObserver(self, name: Notification.Name(event), object: nil)
handler()
} else {
// handleRollbarError(Error.eventCallbackMissing)
Expand Down
28 changes: 8 additions & 20 deletions Sources/MagicSDK/Modules/Event/EventResponse.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,36 +8,24 @@
import Foundation


internal struct MagicEventResponse<Params: Codable>: Codable {

/// The rpc id
public let id: Int

/// The jsonrpc version. Typically 2.0
internal struct MagicEventResponse<ResultType: Codable>: Codable {
public let id: Int?
public let jsonrpc: String

/// The result
public let result: MagicEventResult<Params>

/// The error
public let result: MagicEventResult<ResultType?>
public let error: Error?


// Error struct remains the same
public struct Error: Swift.Error, Codable {

/// The error code
public let code: Int

/// The error message
public let message: String

/// Description
public var localizedDescription: String {
return "Magic Event Error (\(code)) \(message)"
}
}
}

internal struct MagicEventResult<Params: Codable>: Codable {
let event: String
let params: Params
let event: String?
let params: Params?
let product_announcement: String?
}
47 changes: 0 additions & 47 deletions Sources/MagicSDK/Modules/User/UserModule.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,24 +8,12 @@
import Foundation
import MagicSDK_Web3
import PromiseKit
import os

public class UserModule: BaseModule {
@available(iOS 14.0, *)
private static let logger = Logger(
subsystem: Bundle.main.bundleIdentifier!,
category: String(describing: UserModule.self)
)
/**
GetIdToken
*/
public func getIdToken(_ configuration: GetIdTokenConfiguration? = nil, response: @escaping Web3ResponseCompletion<String>) {
if #available(iOS 14.0, *) {
UserModule.logger.warning("getIdToken: \(BaseWarningLog.MA_Method)")
} else {
print("getIdToken: \(BaseWarningLog.MA_Method)")
}

let request = RPCRequest<[GetIdTokenConfiguration?]>(method: UserMethod.magic_auth_get_id_token.rawValue, params: [configuration])

return self.provider.send(request: request, response: response)
Expand All @@ -41,12 +29,6 @@ public class UserModule: BaseModule {
Generate Id Token
*/
public func generateIdToken(_ configuration: GenerateIdTokenConfiguration? = nil, response: @escaping Web3ResponseCompletion<String>) {
if #available(iOS 14.0, *) {
UserModule.logger.warning("generateIdToken: \(BaseWarningLog.MA_Method)")
} else {
print("generateIdToken: \(BaseWarningLog.MA_Method)")
}

let request = RPCRequest<[GenerateIdTokenConfiguration?]>(method: UserMethod.magic_auth_generate_id_token.rawValue, params: [configuration])

return self.provider.send(request: request, response: response)
Expand All @@ -63,12 +45,6 @@ public class UserModule: BaseModule {
Get Info
*/
public func getInfo(response: @escaping Web3ResponseCompletion<UserInfo>) {
if #available(iOS 14.0, *) {
UserModule.logger.warning("getInfo: \(BaseWarningLog.MA_Method)")
} else {
print("getInfo: \(BaseWarningLog.MA_Method)")
}

let request = BasicRPCRequest(method: UserMethod.magic_get_info.rawValue, params: [])
return self.provider.send(request: request, response: response)
}
Expand All @@ -83,11 +59,6 @@ public class UserModule: BaseModule {
IsLogged In
*/
public func isLoggedIn(response: @escaping Web3ResponseCompletion<Bool>) {
if #available(iOS 14.0, *) {
UserModule.logger.warning("isLoggedIn: \(BaseWarningLog.MA_Method)")
} else {
print("isLoggedIn: \(BaseWarningLog.MA_Method)")
}
let request = BasicRPCRequest(method: UserMethod.magic_auth_is_logged_in.rawValue, params: [])
self.provider.send(request: request, response: response)
}
Expand Down Expand Up @@ -123,12 +94,6 @@ public class UserModule: BaseModule {
Logout
*/
public func logout (response: @escaping Web3ResponseCompletion<Bool>) {
if #available(iOS 14.0, *) {
UserModule.logger.warning("logout: \(BaseWarningLog.MA_Method)")
} else {
print("logout: \(BaseWarningLog.MA_Method)")
}

let request = BasicRPCRequest(method: UserMethod.magic_auth_logout.rawValue, params: [])
self.provider.send(request: request, response: response)
}
Expand All @@ -142,12 +107,6 @@ public class UserModule: BaseModule {
showSettings
*/
public func showSettings(response: @escaping Web3ResponseCompletion<UserInfo>) {
if #available(iOS 14.0, *) {
UserModule.logger.warning("showSettings: \(BaseWarningLog.MA_Method)")
} else {
print("showSettings: \(BaseWarningLog.MA_Method)")
}

let request = BasicRPCRequest(method: UserMethod.magic_auth_settings.rawValue, params: [])
self.provider.send(request: request, response: response)
}
Expand Down Expand Up @@ -176,12 +135,6 @@ public class UserModule: BaseModule {
recoverAccount
*/
public func recoverAccount(_ configuration: RecoverAccountConfiguration, response: @escaping Web3ResponseCompletion<Bool>) {
if #available(iOS 14.0, *) {
UserModule.logger.warning("recoverAccount: \(BaseWarningLog.MA_Method)")
} else {
print("recoverAccount: \(BaseWarningLog.MA_Method)")
}

let request = RPCRequest<[RecoverAccountConfiguration]>(method: UserMethod.magic_auth_recover_account.rawValue, params: [configuration])

return self.provider.send(request: request, response: response)
Expand Down
38 changes: 0 additions & 38 deletions Sources/MagicSDK/Modules/Wallet/WalletModule.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,26 +7,12 @@

import Foundation
import MagicSDK_Web3
import os

public class WalletModule: BaseModule {
@available(iOS 14.0, *)
private static let logger = Logger(
subsystem: Bundle.main.bundleIdentifier!,
category: String(describing: WalletModule.self)
)


/**
connectWithUI
*/
public func connectWithUI(response: @escaping Web3ResponseCompletion<[String]>) {
if #available(iOS 14.0, *) {
WalletModule.logger.warning("connectWithUI: \(BaseWarningLog.MC_Method)")
} else {
print("connectWithUI: \(BaseWarningLog.MC_Method)")
}

let request = BasicRPCRequest(method: WalletMethod.mc_login.rawValue, params: [])

return self.provider.send(request: request, response: response)
Expand All @@ -36,12 +22,6 @@ public class WalletModule: BaseModule {
showUI
*/
public func showUI(response: @escaping Web3ResponseCompletion<Bool>) {
if #available(iOS 14.0, *) {
WalletModule.logger.warning("showUI: \(BaseWarningLog.MC_Method)")
} else {
print("showUI: \(BaseWarningLog.MC_Method)")
}

let request = BasicRPCRequest(method: WalletMethod.mc_wallet.rawValue, params: [])

return self.provider.send(request: request, response: response)
Expand All @@ -51,12 +31,6 @@ public class WalletModule: BaseModule {
getInfo
*/
public func getInfo(response: @escaping Web3ResponseCompletion<WalletInfoResponse>) {
if #available(iOS 14.0, *) {
WalletModule.logger.warning("getInfo: \(BaseWarningLog.MC_Method)")
} else {
print("getInfo: \(BaseWarningLog.MC_Method)")
}

let request = BasicRPCRequest(method: WalletMethod.mc_get_wallet_info.rawValue, params: [])

return self.provider.send(request: request, response: response)
Expand All @@ -67,12 +41,6 @@ public class WalletModule: BaseModule {
requestUserInfoWithUI
*/
public func requestUserInfoWithUI(_ configuration: RequestUserInfoWithUIConfiguration? = nil, response: @escaping Web3ResponseCompletion<UserInfoResponse>) {
if #available(iOS 14.0, *) {
WalletModule.logger.warning("requestUserInfoWithUI: \(BaseWarningLog.MC_Method)")
} else {
print("requestUserInfoWithUI: \(BaseWarningLog.MC_Method)")
}

let request = RPCRequest<[RequestUserInfoWithUIConfiguration?]>(method: WalletMethod.mc_request_user_info.rawValue, params: (configuration != nil) ? [configuration]: [])

return self.provider.send(request: request, response: response)
Expand All @@ -82,12 +50,6 @@ public class WalletModule: BaseModule {
disconnect
*/
public func disconnect(response: @escaping Web3ResponseCompletion<Bool>) {
if #available(iOS 14.0, *) {
WalletModule.logger.warning("disconnect: \(BaseWarningLog.MC_Method)")
} else {
print("disconnect: \(BaseWarningLog.MC_Method)")
}

let request = BasicRPCRequest(method: WalletMethod.mc_disconnect.rawValue, params: [])

return self.provider.send(request: request, response: response)
Expand Down