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

[Core] Add Relay Client factory #932

Merged
merged 5 commits into from
Jun 29, 2023
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
10 changes: 8 additions & 2 deletions Example/IntegrationTests/Auth/AuthTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,15 @@ final class AuthTests: XCTestCase {

func makeClients(prefix: String, iatProvider: IATProvider) -> (PairingClient, AuthClient) {
let logger = ConsoleLogger(suffix: prefix, loggingLevel: .debug)
let keychain = KeychainStorageMock()
let relayClient = RelayClient(relayHost: InputConfig.relayHost, projectId: InputConfig.projectId, keychainStorage: keychain, socketFactory: DefaultSocketFactory(), logger: logger)
let keyValueStorage = RuntimeKeyValueStorage()
let keychain = KeychainStorageMock()
let relayClient = RelayClientFactory.create(
relayHost: InputConfig.relayHost,
projectId: InputConfig.projectId,
keyValueStorage: keyValueStorage,
keychainStorage: keychain,
socketFactory: DefaultSocketFactory(),
logger: logger)

let networkingClient = NetworkingClientFactory.create(
relayClient: relayClient,
Expand Down
11 changes: 9 additions & 2 deletions Example/IntegrationTests/Chat/ChatTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,16 @@ final class ChatTests: XCTestCase {
func makeClient(prefix: String, account: Account) -> ChatClient {
let keyserverURL = URL(string: "https://keys.walletconnect.com")!
let logger = ConsoleLogger(suffix: prefix, loggingLevel: .debug)
let keychain = KeychainStorageMock()
let relayClient = RelayClient(relayHost: InputConfig.relayHost, projectId: InputConfig.projectId, keychainStorage: keychain, socketFactory: DefaultSocketFactory(), logger: logger)
let keyValueStorage = RuntimeKeyValueStorage()
let keychain = KeychainStorageMock()
let relayClient = RelayClientFactory.create(
relayHost: InputConfig.relayHost,
projectId: InputConfig.projectId,
keyValueStorage: keyValueStorage,
keychainStorage: keychain,
socketFactory: DefaultSocketFactory(),
logger: logger)

let networkingInteractor = NetworkingClientFactory.create(
relayClient: relayClient,
logger: logger,
Expand Down
2 changes: 1 addition & 1 deletion Example/IntegrationTests/History/HistoryTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ final class HistoryTests: XCTestCase {
}

private func makeRelayClient(prefix: String, keychain: KeychainStorageProtocol) -> RelayClient {
return RelayClient(
return RelayClientFactory.create(
relayHost: InputConfig.relayHost,
projectId: InputConfig.projectId,
keyValueStorage: RuntimeKeyValueStorage(),
Expand Down
2 changes: 1 addition & 1 deletion Example/IntegrationTests/Pairing/PairingTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ final class PairingTests: XCTestCase {
let pairingLogger = ConsoleLogger(suffix: prefix + " [Pairing]", loggingLevel: .debug)
let networkingLogger = ConsoleLogger(suffix: prefix + " [Networking]", loggingLevel: .debug)

let relayClient = RelayClient(
let relayClient = RelayClientFactory.create(
relayHost: InputConfig.relayHost,
projectId: InputConfig.projectId,
keyValueStorage: RuntimeKeyValueStorage(),
Expand Down
4 changes: 2 additions & 2 deletions Example/IntegrationTests/Push/PushTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,10 @@ final class PushTests: XCTestCase {
let pairingLogger = ConsoleLogger(suffix: prefix + " [Pairing]", loggingLevel: .debug)
let networkingLogger = ConsoleLogger(suffix: prefix + " [Networking]", loggingLevel: .debug)

let relayClient = RelayClient(
let relayClient = RelayClientFactory.create(
relayHost: InputConfig.relayHost,
projectId: InputConfig.projectId,
keyValueStorage: RuntimeKeyValueStorage(),
keyValueStorage: keyValueStorage,
keychainStorage: keychain,
socketFactory: DefaultSocketFactory(),
logger: relayLogger)
Expand Down
7 changes: 3 additions & 4 deletions Example/IntegrationTests/Sign/SignClientTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,15 @@ final class SignClientTests: XCTestCase {
static private func makeClientDelegate(name: String) -> ClientDelegate {
let logger = ConsoleLogger(suffix: name, loggingLevel: .debug)
let keychain = KeychainStorageMock()
let relayClient = RelayClient(
let keyValueStorage = RuntimeKeyValueStorage()
let relayClient = RelayClientFactory.create(
relayHost: InputConfig.relayHost,
projectId: InputConfig.projectId,
keyValueStorage: RuntimeKeyValueStorage(),
keyValueStorage: keyValueStorage,
keychainStorage: keychain,
socketFactory: DefaultSocketFactory(),
socketConnectionType: .automatic,
logger: logger
)
let keyValueStorage = RuntimeKeyValueStorage()

let networkingClient = NetworkingClientFactory.create(
relayClient: relayClient,
Expand Down
8 changes: 7 additions & 1 deletion Example/IntegrationTests/Sync/SyncTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,13 @@ final class SyncTests: XCTestCase {
let kms = KeyManagementService(keychain: keychain)
let derivationService = SyncDerivationService(syncStorage: syncSignatureStore, bip44: DefaultBIP44Provider(), kms: kms)
let logger = ConsoleLogger(suffix: suffix, loggingLevel: .debug)
let relayClient = RelayClient(relayHost: InputConfig.relayHost, projectId: InputConfig.projectId, keychainStorage: keychain, socketFactory: DefaultSocketFactory(), logger: logger)
let relayClient = RelayClientFactory.create(
relayHost: InputConfig.relayHost,
projectId: InputConfig.projectId,
keyValueStorage: RuntimeKeyValueStorage(),
keychainStorage: keychain,
socketFactory: DefaultSocketFactory(),
logger: logger)
let networkingInteractor = NetworkingClientFactory.create(
relayClient: relayClient,
logger: logger,
Expand Down
12 changes: 11 additions & 1 deletion Example/RelayIntegrationTests/RelayClientEndToEndTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,17 @@ final class RelayClientEndToEndTests: XCTestCase {
socketConnectionType: .manual,
logger: logger
)
let relayClient = RelayClient(dispatcher: dispatcher, logger: logger, keyValueStorage: RuntimeKeyValueStorage(), clientIdStorage: clientIdStorage)
let keychain = KeychainStorageMock()
let keyValueStorage = RuntimeKeyValueStorage()
let relayClient = RelayClientFactory.create(
relayHost: InputConfig.relayHost,
projectId: InputConfig.projectId,
keyValueStorage: keyValueStorage,
keychainStorage: keychain,
socketFactory: DefaultSocketFactory(),
socketConnectionType: .manual,
logger: logger
)
let clientId = try! relayClient.getClientId()
logger.debug("My client id is: \(clientId)")

Expand Down
2 changes: 1 addition & 1 deletion Sources/WalletConnectRelay/Relay.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public class Relay {
guard let config = Relay.config else {
fatalError("Error - you must call Relay.configure(_:) before accessing the shared instance.")
}
return RelayClient(
return RelayClientFactory.create(
relayHost: config.relayHost,
projectId: config.projectId,
socketFactory: config.socketFactory,
Expand Down
39 changes: 2 additions & 37 deletions Sources/WalletConnectRelay/RelayClient.swift
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,12 @@ public final class RelayClient {
init(
dispatcher: Dispatching,
logger: ConsoleLogging,
keyValueStorage: KeyValueStorage,
rpcHistory: RPCHistory,
clientIdStorage: ClientIdStoring
) {
self.logger = logger
self.dispatcher = dispatcher
self.rpcHistory = RPCHistoryFactory.createForRelay(keyValueStorage: keyValueStorage)
self.rpcHistory = rpcHistory
self.clientIdStorage = clientIdStorage
setUpBindings()
}
Expand All @@ -63,41 +63,6 @@ public final class RelayClient {
}
}

/// Instantiates Relay Client
/// - Parameters:
/// - relayHost: proxy server host that your application will use to connect to Relay Network. If you register your project at `www.walletconnect.com` you can use `relay.walletconnect.com`
/// - projectId: an optional parameter used to access the public WalletConnect infrastructure. Go to `www.walletconnect.com` for info.
/// - keyValueStorage: by default WalletConnect SDK will store sequences in UserDefaults
/// - socketConnectionType: socket connection type
/// - logger: logger instance
public convenience init(
relayHost: String,
projectId: String,
keyValueStorage: KeyValueStorage = UserDefaults.standard,
keychainStorage: KeychainStorageProtocol = KeychainStorage(serviceIdentifier: "com.walletconnect.sdk"),
socketFactory: WebSocketFactory,
socketConnectionType: SocketConnectionType = .automatic,
logger: ConsoleLogging = ConsoleLogger(loggingLevel: .debug)
) {
let clientIdStorage = ClientIdStorage(keychain: keychainStorage)
let socketAuthenticator = ClientIdAuthenticator(
clientIdStorage: clientIdStorage,
url: "wss://\(relayHost)"
)
let relayUrlFactory = RelayUrlFactory(
relayHost: relayHost,
projectId: projectId,
socketAuthenticator: socketAuthenticator
)
let dispatcher = Dispatcher(
socketFactory: socketFactory,
relayUrlFactory: relayUrlFactory,
socketConnectionType: socketConnectionType,
logger: logger
)
self.init(dispatcher: dispatcher, logger: logger, keyValueStorage: keyValueStorage, clientIdStorage: clientIdStorage)
}

/// Connects web socket
///
/// Use this method for manual socket connection only
Expand Down
64 changes: 64 additions & 0 deletions Sources/WalletConnectRelay/RelayClientFactory.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
//
import Foundation


public struct RelayClientFactory {

public static func create(
relayHost: String,
projectId: String,
socketFactory: WebSocketFactory,
socketConnectionType: SocketConnectionType
) -> RelayClient {

let keyValueStorage = UserDefaults.standard

let keychainStorage = KeychainStorage(serviceIdentifier: "com.walletconnect.sdk")

let logger = ConsoleLogger(suffix: "🚄" ,loggingLevel: .debug)

return RelayClientFactory.create(
relayHost: relayHost,
projectId: projectId,
keyValueStorage: keyValueStorage,
keychainStorage: keychainStorage,
socketFactory: socketFactory,
socketConnectionType: socketConnectionType,
logger: logger
)
}


public static func create(
relayHost: String,
projectId: String,
keyValueStorage: KeyValueStorage,
keychainStorage: KeychainStorageProtocol,
socketFactory: WebSocketFactory,
socketConnectionType: SocketConnectionType = .automatic,
logger: ConsoleLogging
) -> RelayClient {

let clientIdStorage = ClientIdStorage(keychain: keychainStorage)

let socketAuthenticator = ClientIdAuthenticator(
clientIdStorage: clientIdStorage,
url: "wss://\(relayHost)"
)
let relayUrlFactory = RelayUrlFactory(
relayHost: relayHost,
projectId: projectId,
socketAuthenticator: socketAuthenticator
)
let dispatcher = Dispatcher(
socketFactory: socketFactory,
relayUrlFactory: relayUrlFactory,
socketConnectionType: socketConnectionType,
logger: logger
)

let rpcHistory = RPCHistoryFactory.createForRelay(keyValueStorage: keyValueStorage)

return RelayClient(dispatcher: dispatcher, logger: logger, rpcHistory: rpcHistory, clientIdStorage: clientIdStorage)
}
}
3 changes: 2 additions & 1 deletion Tests/RelayerTests/RelayClientTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ final class RelayClientTests: XCTestCase {
dispatcher = DispatcherMock()
let logger = ConsoleLogger()
let clientIdStorage = ClientIdStorageMock()
sut = RelayClient(dispatcher: dispatcher, logger: logger, keyValueStorage: RuntimeKeyValueStorage(), clientIdStorage: clientIdStorage)
let rpcHistory = RPCHistoryFactory.createForRelay(keyValueStorage: RuntimeKeyValueStorage())
sut = RelayClient(dispatcher: dispatcher, logger: logger, rpcHistory: rpcHistory, clientIdStorage: clientIdStorage)
}

override func tearDown() {
Expand Down