From 47f3928824871915dc8075498b24736c1b52594a Mon Sep 17 00:00:00 2001 From: andrew54068 Date: Mon, 5 Jun 2023 13:58:48 +0800 Subject: [PATCH] feat: support custom GRPC clients. --- Package.resolved | 8 +++--- .../FCL-SDK/AppUtilities/AppUtilities.swift | 5 ++-- Sources/FCL-SDK/FCL.swift | 27 +++++++++++++++---- .../WalletProvider/BloctoWalletProvider.swift | 9 +++---- .../WalletProvider/DapperWalletProvider.swift | 7 ++--- 5 files changed, 37 insertions(+), 19 deletions(-) diff --git a/Package.resolved b/Package.resolved index 713091c..fb0cf13 100644 --- a/Package.resolved +++ b/Package.resolved @@ -23,8 +23,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/portto/blocto-ios-sdk.git", "state" : { - "revision" : "6c24b03c33076f9d5f17c013483dad040a687467", - "version" : "0.4.2" + "revision" : "977b0a4f2284c85ce3795ba959866e675cc39aac", + "version" : "0.4.4" } }, { @@ -41,8 +41,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/portto/flow-swift-sdk.git", "state" : { - "revision" : "b5e4c381def8b166a39496f2a32e184f4d8a17d1", - "version" : "0.4.2" + "revision" : "52448238d0e887af02fc0bdaf50ca76426317289", + "version" : "0.5.0" } }, { diff --git a/Sources/FCL-SDK/AppUtilities/AppUtilities.swift b/Sources/FCL-SDK/AppUtilities/AppUtilities.swift index 82c01c9..fc3ccac 100644 --- a/Sources/FCL-SDK/AppUtilities/AppUtilities.swift +++ b/Sources/FCL-SDK/AppUtilities/AppUtilities.swift @@ -99,8 +99,9 @@ public enum AppUtilities { case .testnet: return Address(hexString: "0x74daa6f9c7ef24b1") case .canarynet, - .sandboxnet, - .emulator: + .sandboxnet, + .emulator, + .custom: throw FCLError.currentNetworkNotSupported } } diff --git a/Sources/FCL-SDK/FCL.swift b/Sources/FCL-SDK/FCL.swift index 6365288..dbdbb08 100644 --- a/Sources/FCL-SDK/FCL.swift +++ b/Sources/FCL-SDK/FCL.swift @@ -27,13 +27,20 @@ public class FCL: NSObject { var flowAPIClient: Client { get async throws { - let task = Task(priority: .utility) { - Client(network: config.network) + if let internalClient { + return internalClient + } else { + let task = Task(priority: .utility) { + let client = Client(network: config.network) + self.internalClient = client + return client + } + return await task.value } - return await task.value } } + private var internalClient: Client? private var webAuthSession: ASWebAuthenticationSession? private let requestSession = URLSession(configuration: .default) @@ -398,6 +405,7 @@ extension FCL { /// - cadence: Cadence Transaction used to mutate Flow /// - arguments: Arguments passed to cadence transaction /// - limit: Compute Limit (gas limit) for transaction + /// - authorizers: Addresses of accounts data being modify by current transaction. /// - Returns: Transaction id public func mutate( cadence: String, @@ -448,7 +456,12 @@ public extension FCL { options: CallOptions? = nil ) async throws -> [BlockEvents] { try await flowAPIClient - .getEventsForHeightRange(eventType: eventType, startHeight: startHeight, endHeight: endHeight, options: options) + .getEventsForHeightRange( + eventType: eventType, + startHeight: startHeight, + endHeight: endHeight, + options: options + ) } func getEventsForBlockIDs( @@ -457,7 +470,11 @@ public extension FCL { options: CallOptions? = nil ) async throws -> [BlockEvents] { try await flowAPIClient - .getEventsForBlockIDs(eventType: eventType, blockIds: blockIds, options: options) + .getEventsForBlockIDs( + eventType: eventType, + blockIds: blockIds, + options: options + ) } func getAccount(address: String) async throws -> FlowSDK.Account? { diff --git a/Sources/FCL-SDK/WalletProvider/BloctoWalletProvider.swift b/Sources/FCL-SDK/WalletProvider/BloctoWalletProvider.swift index f26fefd..b8ff909 100644 --- a/Sources/FCL-SDK/WalletProvider/BloctoWalletProvider.swift +++ b/Sources/FCL-SDK/WalletProvider/BloctoWalletProvider.swift @@ -332,11 +332,10 @@ public final class BloctoWalletProvider: WalletProvider { return .prod case .testnet: return .dev - case .canarynet: - return nil - case .sandboxnet: - return nil - case .emulator: + case .canarynet, + .sandboxnet, + .emulator, + .custom: return nil } } diff --git a/Sources/FCL-SDK/WalletProvider/DapperWalletProvider.swift b/Sources/FCL-SDK/WalletProvider/DapperWalletProvider.swift index ba5c0ac..b51478a 100644 --- a/Sources/FCL-SDK/WalletProvider/DapperWalletProvider.swift +++ b/Sources/FCL-SDK/WalletProvider/DapperWalletProvider.swift @@ -27,9 +27,10 @@ public final class DapperWalletProvider: WalletProvider { private var accessNodeApiString: String { switch fcl.config.network { case .testnet, - .canarynet, - .sandboxnet, - .emulator: + .canarynet, + .sandboxnet, + .emulator, + .custom: return "" case .mainnet: return "https://dapper-http-post.vercel.app/api/authn"