Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Networking] expose networking client interface #543

Merged
merged 13 commits into from
Oct 13, 2022
4 changes: 3 additions & 1 deletion Example/DApp/Auth/AuthCoordinator.swift
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import SwiftUI
import Auth
import WalletConnectPairing

final class AuthCoordinator {

Expand Down Expand Up @@ -30,7 +31,8 @@ final class AuthCoordinator {
url: "wallet.connect",
icons: ["https://avatars.githubusercontent.com/u/37784886"])

Auth.configure(metadata: metadata, account: nil)
Pair.configure(metadata: metadata)
Auth.configure(account: nil)

navigationController.viewControllers = [authViewController]
}
Expand Down
3 changes: 2 additions & 1 deletion Example/DApp/Sign/Connect/ConnectViewController.swift
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import Foundation
import UIKit
import WalletConnectSign
import WalletConnectPairing

class ConnectViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
let uri: WalletConnectURI
let activePairings: [Pairing] = Sign.instance.getPairings()
let activePairings: [Pairing] = Pair.instance.getPairings()
let segmentedControl = UISegmentedControl(items: ["Pairings", "New Pairing"])

init(uri: WalletConnectURI) {
Expand Down
6 changes: 4 additions & 2 deletions Example/DApp/Sign/SelectChain/SelectChainViewController.swift
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import Foundation
import WalletConnectSign
import WalletConnectPairing
import UIKit
import Combine

Expand Down Expand Up @@ -34,8 +35,9 @@ class SelectChainViewController: UIViewController, UITableViewDataSource {
let blockchains: Set<Blockchain> = [Blockchain("eip155:1")!, Blockchain("eip155:137")!]
let namespaces: [String: ProposalNamespace] = ["eip155": ProposalNamespace(chains: blockchains, methods: methods, events: [], extensions: nil)]
Task {
let uri = try await Sign.instance.connect(requiredNamespaces: namespaces)
showConnectScreen(uri: uri!)
let uri = try await Pair.instance.create()
try await Sign.instance.connect(requiredNamespaces: namespaces, topic: uri.topic)
showConnectScreen(uri: uri)
}
}

Expand Down
5 changes: 3 additions & 2 deletions Example/ExampleApp/SceneDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import Combine
import WalletConnectSign
import WalletConnectNetworking
import WalletConnectRelay
import WalletConnectPairing
import Starscream

extension WebSocket: WebSocketConnecting { }
Expand All @@ -27,7 +28,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
icons: ["https://avatars.githubusercontent.com/u/37784886"])

Networking.configure(projectId: InputConfig.projectId, socketFactory: SocketFactory())
Sign.configure(metadata: metadata)
Pair.configure(metadata: metadata)
#if DEBUG
if CommandLine.arguments.contains("-cleanInstall") {
try? Sign.instance.cleanup()
Expand Down Expand Up @@ -56,7 +57,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {

let wcUri = url.absoluteString.deletingPrefix("https://walletconnect.com/wc?uri=")
Task(priority: .high) {
try! await Sign.instance.pair(uri: WalletConnectURI(string: wcUri)!)
try! await Pair.instance.pair(uri: WalletConnectURI(string: wcUri)!)
}
}
}
Expand Down
3 changes: 2 additions & 1 deletion Example/ExampleApp/Wallet/WalletViewController.swift
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import UIKit
import WalletConnectSign
import WalletConnectUtils
import WalletConnectPairing
import WalletConnectRouter
import Web3
import CryptoSwift
Expand Down Expand Up @@ -122,7 +123,7 @@ final class WalletViewController: UIViewController {
print("[WALLET] Pairing to: \(uri)")
Task {
do {
try await Sign.instance.pair(uri: uri)
try await Pair.instance.pair(uri: uri)
} catch {
print("[DAPP] Pairing connect error: \(error)")
}
Expand Down
19 changes: 0 additions & 19 deletions Example/IntegrationTests/Sign/SignClientTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ final class SignClientTests: XCTestCase {
logger: logger,
keyValueStorage: keyValueStorage,
keychainStorage: keychain,
relayClient: relayClient,
pairingClient: pairingClient,
networkingClient: networkingClient
)
Expand Down Expand Up @@ -134,24 +133,6 @@ final class SignClientTests: XCTestCase {
wait(for: [sessionDeleteExpectation], timeout: InputConfig.defaultTimeout)
}

func testPairingPing() async throws {
let pongResponseExpectation = expectation(description: "Ping sender receives a pong response")

let uri = try await dapp.client.connect(requiredNamespaces: ProposalNamespace.stubRequired())!
try await wallet.client.pair(uri: uri)

let pairing = wallet.client.getPairings().first!

wallet.onPing = { topic in
XCTAssertEqual(topic, pairing.topic)
pongResponseExpectation.fulfill()
}

try await wallet.client.ping(topic: pairing.topic)

wait(for: [pongResponseExpectation], timeout: InputConfig.defaultTimeout)
}

func testSessionPing() async throws {
let expectation = expectation(description: "Proposer receives ping response")

Expand Down
34 changes: 10 additions & 24 deletions Sources/Auth/Auth.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,38 +18,24 @@ public class Auth {

/// Auth client instance
public static var instance: AuthClient = {
guard let config = Auth.config else {
fatalError("Error - you must call Auth.configure(_:) before accessing the shared instance.")
}

return AuthClientFactory.create(
metadata: config.metadata,
account: config.account,
networkingClient: Networking.instance,
pairingRegisterer: Pair.instance
metadata: Pair.metadata,
account: config?.account,
networkingClient: Networking.interactor,
pairingRegisterer: Pair.registerer
)
}()


private static var config: Config?

private init() { }

/// Auth instance config method
/// Auth instance wallet config method
/// - Parameters:
/// - metadata: App metadata
/// - account: account that wallet will be authenticating with. Should be nil for non wallet clients.
@available(*, deprecated, message: "Use Pair.configure(metadata:) with Auth.configure(account:) instead")
static public func configure(metadata: AppMetadata, account: Account?) {
Auth.config = Auth.Config(
metadata: metadata,
account: account)
}

/// Auth instance config method
/// - Parameters:
/// - account: account that wallet will be authenticating with. Should be nil for non wallet clients.
static public func configure(account: Account?) {
Auth.config = Auth.Config(
metadata: Pair.metadata,
account: account)
/// - account: account that wallet will be authenticating with.
static public func configure(account: Account) {
Auth.config = Auth.Config(account: account)
}
}
4 changes: 2 additions & 2 deletions Sources/Auth/AuthClientFactory.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@ import WalletConnectNetworking

public struct AuthClientFactory {

public static func create(metadata: AppMetadata, account: Account?, networkingClient: NetworkingClient, pairingRegisterer: PairingRegisterer) -> AuthClient {
public static func create(metadata: AppMetadata, account: Account?, networkingClient: NetworkingInteractor, pairingRegisterer: PairingRegisterer) -> AuthClient {
let logger = ConsoleLogger(loggingLevel: .off)
let keyValueStorage = UserDefaults.standard
let keychainStorage = KeychainStorage(serviceIdentifier: "com.walletconnect.sdk")
return AuthClientFactory.create(metadata: metadata, account: account, logger: logger, keyValueStorage: keyValueStorage, keychainStorage: keychainStorage, networkingClient: networkingClient, pairingRegisterer: pairingRegisterer)
}

static func create(metadata: AppMetadata, account: Account?, logger: ConsoleLogging, keyValueStorage: KeyValueStorage, keychainStorage: KeychainStorageProtocol, networkingClient: NetworkingClient, pairingRegisterer: PairingRegisterer) -> AuthClient {
static func create(metadata: AppMetadata, account: Account?, logger: ConsoleLogging, keyValueStorage: KeyValueStorage, keychainStorage: KeychainStorageProtocol, networkingClient: NetworkingInteractor, pairingRegisterer: PairingRegisterer) -> AuthClient {
let kms = KeyManagementService(keychain: keychainStorage)
let history = RPCHistoryFactory.createForNetwork(keyValueStorage: keyValueStorage)
let messageFormatter = SIWEMessageFormatter()
Expand Down
1 change: 0 additions & 1 deletion Sources/Auth/AuthConfig.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import Foundation

extension Auth {
struct Config {
let metadata: AppMetadata
let account: Account?
}
}
2 changes: 1 addition & 1 deletion Sources/Chat/ChatClientFactory.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public struct ChatClientFactory {
let topicToRegistryRecordStore = CodableStore<RegistryRecord>(defaults: keyValueStorage, identifier: StorageDomainIdentifiers.topicToInvitationPubKey.rawValue)
let serialiser = Serializer(kms: kms)
let rpcHistory = RPCHistoryFactory.createForNetwork(keyValueStorage: keyValueStorage)
let networkingInteractor = NetworkingClient(relayClient: relayClient, serializer: serialiser, logger: logger, rpcHistory: rpcHistory)
let networkingInteractor = NetworkingInteractor(relayClient: relayClient, serializer: serialiser, logger: logger, rpcHistory: rpcHistory)
let invitePayloadStore = CodableStore<RequestSubscriptionPayload<Invite>>(defaults: keyValueStorage, identifier: StorageDomainIdentifiers.invite.rawValue)
let registryService = RegistryService(registry: registry, networkingInteractor: networkingInteractor, kms: kms, logger: logger, topicToRegistryRecordStore: topicToRegistryRecordStore)
let threadStore = Database<Thread>(keyValueStorage: keyValueStorage, identifier: StorageDomainIdentifiers.threads.rawValue)
Expand Down
11 changes: 7 additions & 4 deletions Sources/WalletConnectNetworking/Networking.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,17 @@ import Foundation
public class Networking {

/// Networking client instance
public static var instance: NetworkingClient = {
guard let config = Networking.config else {
public static var instance: NetworkingClient {
return Networking.interactor
}

public static var interactor: NetworkingInteractor {
guard let _ = Networking.config else {
fatalError("Error - you must call Networking.configure(_:) before accessing the shared instance.")
}

return NetworkingClientFactory.create(relayClient: Relay.instance)
}()
}

private static var config: Config?

Expand Down Expand Up @@ -43,4 +47,3 @@ public class Networking {
socketConnectionType: socketConnectionType)
}
}

Loading