diff --git a/.swiftpm/xcode/xcshareddata/xcschemes/WalletConnect.xcscheme b/.swiftpm/xcode/xcshareddata/xcschemes/WalletConnect.xcscheme
index 5bb6db710..70e18c35a 100644
--- a/.swiftpm/xcode/xcshareddata/xcschemes/WalletConnect.xcscheme
+++ b/.swiftpm/xcode/xcshareddata/xcschemes/WalletConnect.xcscheme
@@ -76,34 +76,6 @@
ReferencedContainer = "container:">
-
-
-
-
-
-
-
-
-
-
-
-
())) -> Int64 {
- let params = RelayJSONRPC.PublishParams(topic: topic, message: payload, ttl: defaultTtl)
+ @discardableResult public func publish(
+ topic: String,
+ payload: String,
+ prompt: Bool = false,
+ completion: @escaping ((Error?) -> ())) -> Int64 {
+ let params = RelayJSONRPC.PublishParams(topic: topic, message: payload, ttl: defaultTtl, prompt: prompt)
let request = JSONRPCRequest(method: RelayJSONRPC.Method.publish.rawValue, params: params)
let requestJson = try! request.json()
logger.debug("waku: Publishing Payload on Topic: \(topic)")
@@ -209,7 +213,7 @@ public final class Relayer {
}
}
- static private func makeRelayUrl(host: String, projectId: String) -> URL {
+ static func makeRelayUrl(host: String, projectId: String) -> URL {
var components = URLComponents()
components.scheme = "wss"
components.host = host
diff --git a/Sources/WalletConnect/Relay/NetworkRelaying.swift b/Sources/WalletConnect/Relay/NetworkRelaying.swift
index 93f9a2b9b..b8139cdde 100644
--- a/Sources/WalletConnect/Relay/NetworkRelaying.swift
+++ b/Sources/WalletConnect/Relay/NetworkRelaying.swift
@@ -10,7 +10,7 @@ protocol NetworkRelaying {
func connect() throws
func disconnect(closeCode: URLSessionWebSocketTask.CloseCode) throws
/// - returns: request id
- @discardableResult func publish(topic: String, payload: String, completion: @escaping ((Error?)->())) -> Int64
+ @discardableResult func publish(topic: String, payload: String, prompt: Bool, completion: @escaping ((Error?)->())) -> Int64
/// - returns: request id
@discardableResult func subscribe(topic: String, completion: @escaping (Error?)->()) -> Int64
/// - returns: request id
diff --git a/Sources/WalletConnect/Relay/WalletConnectRelay.swift b/Sources/WalletConnect/Relay/WalletConnectRelay.swift
index 36360a95e..4b98078f2 100644
--- a/Sources/WalletConnect/Relay/WalletConnectRelay.swift
+++ b/Sources/WalletConnect/Relay/WalletConnectRelay.swift
@@ -77,7 +77,8 @@ class WalletConnectRelay: WalletConnectRelaying {
do {
try jsonRpcHistory.set(topic: topic, request: payload, chainId: getChainId(payload))
let message = try serializer.serialize(topic: topic, encodable: payload)
- networkRelayer.publish(topic: topic, payload: message) { [weak self] error in
+ let prompt = shouldPrompt(payload.method)
+ networkRelayer.publish(topic: topic, payload: message, prompt: prompt) { [weak self] error in
guard let self = self else {return}
if let error = error {
self.logger.error(error)
@@ -110,7 +111,7 @@ class WalletConnectRelay: WalletConnectRelaying {
_ = try jsonRpcHistory.resolve(response: response)
let message = try serializer.serialize(topic: topic, encodable: response.value)
logger.debug("Responding....topic: \(topic)")
- networkRelayer.publish(topic: topic, payload: message) { error in
+ networkRelayer.publish(topic: topic, payload: message, prompt: false) { error in
completion(error)
}
} catch WalletConnectError.internal(.jsonRpcDuplicateDetected) {
@@ -216,6 +217,15 @@ class WalletConnectRelay: WalletConnectRelaying {
}
}
+ private func shouldPrompt(_ method: WCRequest.Method) -> Bool {
+ switch method {
+ case .sessionPayload, .pairingPayload:
+ return true
+ default:
+ return false
+ }
+ }
+
func getChainId(_ request: WCRequest) -> String? {
guard case let .sessionPayload(payload) = request.params else {return nil}
return payload.chainId
diff --git a/Tests/IntegrationTests/ClientTest.swift b/Tests/IntegrationTests/ClientTest.swift
index 667db180d..885050949 100644
--- a/Tests/IntegrationTests/ClientTest.swift
+++ b/Tests/IntegrationTests/ClientTest.swift
@@ -16,8 +16,8 @@ final class ClientTests: XCTestCase {
let defaultTimeout: TimeInterval = 5.0
- let relayHost = "staging.walletconnect.org"
- let projectId = ""
+ let relayHost = "relay.dev.walletconnect.com"
+ let projectId = "52af113ee0c1e1a20f4995730196c13e"
var proposer: ClientDelegate!
var responder: ClientDelegate!
diff --git a/Tests/RelayerTests/RelayerEndToEndTests.swift b/Tests/RelayerTests/RelayerEndToEndTests.swift
index 2e60956e5..e246ec0b6 100644
--- a/Tests/RelayerTests/RelayerEndToEndTests.swift
+++ b/Tests/RelayerTests/RelayerEndToEndTests.swift
@@ -8,13 +8,15 @@ import TestingUtils
final class RelayerEndToEndTests: XCTestCase {
- let url = URL(string: "wss://staging.walletconnect.org")!
+ let relayHost = "relay.dev.walletconnect.com"
+ let projectId = "52af113ee0c1e1a20f4995730196c13e"
private var publishers = [AnyCancellable]()
- func makeRelayer(_ uniqueIdentifier: String = "") -> Relayer {
+ func makeRelayer() -> Relayer {
let logger = ConsoleLogger()
let socketConnectionObserver = SocketConnectionObserver()
let urlSession = URLSession(configuration: .default, delegate: socketConnectionObserver, delegateQueue: OperationQueue())
+ let url = Relayer.makeRelayUrl(host: relayHost, projectId: projectId)
let socket = WebSocketSession(session: urlSession, url: url)
let dispatcher = Dispatcher(socket: socket, socketConnectionObserver: socketConnectionObserver, socketConnectionHandler: ManualSocketConnectionHandler(socket: socket))
return Relayer(dispatcher: dispatcher, logger: logger, keyValueStorage: RuntimeKeyValueStorage())
@@ -32,8 +34,8 @@ final class RelayerEndToEndTests: XCTestCase {
}
func testEndToEndPayload() {
- let relayA = makeRelayer("A")
- let relayB = makeRelayer("B")
+ let relayA = makeRelayer()
+ let relayB = makeRelayer()
try! relayA.connect()
try! relayB.connect()
diff --git a/Tests/WalletConnectTests/Mocks/MockedNetworkRelayer.swift b/Tests/WalletConnectTests/Mocks/MockedNetworkRelayer.swift
index 8729aedae..ca163e2d3 100644
--- a/Tests/WalletConnectTests/Mocks/MockedNetworkRelayer.swift
+++ b/Tests/WalletConnectTests/Mocks/MockedNetworkRelayer.swift
@@ -6,7 +6,9 @@ class MockedNetworkRelayer: NetworkRelaying {
var onConnect: (() -> ())?
var onMessage: ((String, String) -> ())?
var error: Error?
- func publish(topic: String, payload: String, completion: @escaping ((Error?) -> ())) -> Int64 {
+ var prompt = false
+ func publish(topic: String, payload: String, prompt: Bool, completion: @escaping ((Error?) -> ())) -> Int64 {
+ self.prompt = prompt
completion(error)
return 0
}
diff --git a/Tests/WalletConnectTests/Mocks/SerializerMock.swift b/Tests/WalletConnectTests/Mocks/SerializerMock.swift
index b018a2b96..381c97e78 100644
--- a/Tests/WalletConnectTests/Mocks/SerializerMock.swift
+++ b/Tests/WalletConnectTests/Mocks/SerializerMock.swift
@@ -8,7 +8,7 @@ import WalletConnectUtils
class SerializerMock: Serializing {
var deserialized: Any!
- var serialized: String!
+ var serialized: String = ""
func serialize(topic: String, encodable: Encodable) throws -> String {
try serialize(json: try encodable.json(), agreementKeys: AgreementSecret(sharedSecret: Data(), publicKey: AgreementPrivateKey().publicKey))
diff --git a/Tests/WalletConnectTests/WCRelayTests.swift b/Tests/WalletConnectTests/WCRelayTests.swift
index 17acb7662..5422bc07b 100644
--- a/Tests/WalletConnectTests/WCRelayTests.swift
+++ b/Tests/WalletConnectTests/WCRelayTests.swift
@@ -71,8 +71,20 @@ class WalletConnectRelayTests: XCTestCase {
waitForExpectations(timeout: 0.01, handler: nil)
}
- func testRequestCompletesWithError() {
- //todo
+ func testPromptOnSessionPayload() {
+ let topic = "fefc3dc39cacbc562ed58f92b296e2d65a6b07ef08992b93db5b3cb86280635a"
+ let request = getWCSessionPayloadRequest()
+ networkRelayer.prompt = false
+ wcRelay.request(topic: topic, payload: request) { _ in }
+ XCTAssertTrue(networkRelayer.prompt)
+ }
+
+ func testNoPromptOnSessionUpgrade() {
+ let topic = "fefc3dc39cacbc562ed58f92b296e2d65a6b07ef08992b93db5b3cb86280635a"
+ let request = getWCSessionUpgrade()
+ networkRelayer.prompt = false
+ wcRelay.request(topic: topic, payload: request) { _ in }
+ XCTAssertTrue(networkRelayer.prompt)
}
}
@@ -89,6 +101,14 @@ extension WalletConnectRelayTests {
let wcRequest = WCRequest(id: wcRequestId, method: WCRequest.Method.sessionPayload, params: params)
return wcRequest
}
+
+ func getWCSessionUpgrade() -> WCRequest {
+ let wcRequestId: Int64 = 123456
+ let sessionUpgradeParams = SessionType.UpgradeParams(permissions: SessionPermissions(blockchain: SessionPermissions.Blockchain(chains: []), jsonrpc: SessionPermissions.JSONRPC(methods: []), notifications: SessionPermissions.Notifications(types: [])))
+ let params = WCRequest.Params.sessionUpgrade(sessionUpgradeParams)
+ let wcRequest = WCRequest(id: wcRequestId, method: WCRequest.Method.sessionPayload, params: params)
+ return wcRequest
+ }
}
fileprivate let testPayload =