@walletconnect/react-native-compat 2.17.2-canary-ca-4 → 2.17.2-canary-ca-5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -71,7 +71,7 @@ class RNWalletConnectModuleModule internal constructor(context: ReactApplication
71
71
  var projectId = params.getString("projectId") as String
72
72
  val transactionMap = params.getMap("transaction")
73
73
  var client = ChainAbstractionClient(projectId)
74
-
74
+
75
75
  if (transactionMap != null) {
76
76
  // Extract values from the nested transaction map
77
77
  val chainId = transactionMap.getString("chainId") ?: ""
@@ -93,11 +93,18 @@ class RNWalletConnectModuleModule internal constructor(context: ReactApplication
93
93
  is RouteResponse.Success -> {
94
94
  when (result.v1) {
95
95
  is RouteResponseSuccess.Available -> {
96
+ val availableResult = (result.v1 as RouteResponseSuccess.Available).v1
97
+ val transaction = Transaction(from, to, value, gas, txData, nonce, chainId, gasPrice, maxFeePerGas, maxPriorityFeePerGas)
98
+ val uiFields = client.getRouteUiFields(availableResult, transaction, Currency.USD)
96
99
  val gson = Gson()
97
- val jsonElement: JsonElement = gson.toJsonTree((result.v1 as RouteResponseSuccess.Available).v1)
100
+ val routesJson: JsonElement = gson.toJsonTree(availableResult)
101
+ val routesDetailsJson: JsonElement = gson.toJsonTree(uiFields)
102
+ val dataObject = JsonObject()
103
+ dataObject.add("routes", routesJson)
104
+ dataObject.add("routesDetails", routesDetailsJson)
98
105
  val response = JsonObject()
99
106
  response.addProperty("status", "available")
100
- response.add("data", jsonElement)
107
+ response.add("data", dataObject)
101
108
  promise.resolve(gson.toJson(response))
102
109
  }
103
110
  is RouteResponseSuccess.NotRequired -> {
package/ios/Yttrium.swift CHANGED
@@ -3,152 +3,215 @@ import YttriumWrapper
3
3
 
4
4
  @objc(Yttrium)
5
5
  class Yttrium: NSObject {
6
-
7
- @objc
8
- func checkStatus(_ params: Any, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
9
- print("checkStatus called with", params )
10
- if let dict = params as? [String: Any],
11
- let projectId = dict["projectId"] as? String,
12
- let orchestrationId = dict["orchestrationId"] as? String {
13
- let client = ChainAbstractionClient.init(projectId: projectId)
14
- Task {
15
- do {
16
- let statusResponse = try await client.status(orchestrationId: orchestrationId)
17
-
18
- switch statusResponse {
19
- case let .completed(statusResponseCompleted):
20
- print("status response completed", statusResponseCompleted)
21
- let responseDict: [String: Any] = [
22
- "createdAt": statusResponseCompleted.createdAt,
23
- "status": "completed"
6
+
7
+ @objc
8
+ func checkStatus(_ params: Any, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
9
+ print("checkStatus called with", params )
10
+ if let dict = params as? [String: Any],
11
+ let projectId = dict["projectId"] as? String,
12
+ let orchestrationId = dict["orchestrationId"] as? String {
13
+ let client = ChainAbstractionClient.init(projectId: projectId)
14
+ Task {
15
+ do {
16
+ let statusResponse = try await client.status(orchestrationId: orchestrationId)
17
+
18
+ switch statusResponse {
19
+ case let .completed(statusResponseCompleted):
20
+ print("status response completed", statusResponseCompleted)
21
+ let responseDict: [String: Any] = [
22
+ "createdAt": statusResponseCompleted.createdAt,
23
+ "status": "completed"
24
+ ]
25
+ resolve(responseDict)
26
+ case let .error(statusResponseError):
27
+ print("status response error", statusResponseError)
28
+ let responseDict: [String: Any] = [
29
+ "createdAt": statusResponseError.createdAt,
30
+ "reason": statusResponseError.error,
31
+ "status": "error"
32
+ ]
33
+ resolve(responseDict)
34
+ case let .pending(statusResponsePending):
35
+ print("status response pending", statusResponsePending)
36
+ let responseDict: [String: Any] = [
37
+ "createdAt": statusResponsePending.createdAt,
38
+ "checkIn": statusResponsePending.checkIn,
39
+ "status": "pending"
40
+ ]
41
+ resolve(responseDict)
42
+ }
43
+ } catch {
44
+ print("Error occurred: \(error)")
45
+ print(error)
46
+ reject("checkStatus err", "checkStatus", error)
47
+ }
48
+ }
49
+ }
50
+ }
51
+
52
+ func availableResponseToDictionary(_ response: YttriumWrapper.RouteResponseAvailable) -> [String: Any] {
53
+ return [
54
+ "orchestrationId": response.orchestrationId,
55
+ "transactions": response.transactions.map { transaction in
56
+ return [
57
+ "from": transaction.from,
58
+ "to": transaction.to,
59
+ "value": transaction.value,
60
+ "gas": transaction.gas,
61
+ "data": transaction.data,
62
+ "nonce": transaction.nonce,
63
+ "chainId": transaction.chainId,
64
+ "gasPrice": transaction.gasPrice,
65
+ "maxFeePerGas": transaction.maxFeePerGas,
66
+ "maxPriorityFeePerGas": transaction.maxPriorityFeePerGas,
67
+ ]
68
+ },
69
+ "metadata": [
70
+ "fundingFrom": response.metadata.fundingFrom.map { funding in
71
+ return [
72
+ "chainId": funding.chainId,
73
+ "tokenContract": funding.tokenContract,
74
+ "symbol": funding.symbol,
75
+ "amount": funding.amount,
76
+ ]
77
+ }
78
+ ],
79
+ "checkIn": response.metadata.checkIn,
80
+ ]
81
+ }
82
+
83
+ func convertRouteUiFieldsToDictionary(_ routeUiFields: RouteUiFields) -> [String: Any] {
84
+ func transactionToDictionary(transaction: YttriumWrapper.Transaction) -> [String: Any] {
85
+ return [
86
+ "from": transaction.from,
87
+ "to": transaction.to,
88
+ "value": transaction.value,
89
+ "gas": transaction.gas,
90
+ "data": transaction.data,
91
+ "nonce": transaction.nonce,
92
+ "chainId": transaction.chainId,
93
+ "gasPrice": transaction.gasPrice,
94
+ "maxFeePerGas": transaction.maxFeePerGas,
95
+ "maxPriorityFeePerGas": transaction.maxPriorityFeePerGas
24
96
  ]
25
- resolve(responseDict)
26
- case let .error(statusResponseError):
27
- print("status response error", statusResponseError)
28
- let responseDict: [String: Any] = [
29
- "createdAt": statusResponseError.createdAt,
30
- "reason": statusResponseError.error,
31
- "status": "error"
97
+ }
98
+
99
+ func estimationToDictionary(estimation: YttriumWrapper.Eip1559Estimation) -> [String: Any] {
100
+ return [
101
+ "maxFeePerGas": estimation.maxFeePerGas,
102
+ "maxPriorityFeePerGas": estimation.maxPriorityFeePerGas
32
103
  ]
33
- resolve(responseDict)
34
- case let .pending(statusResponsePending):
35
- print("status response pending", statusResponsePending)
36
- let responseDict: [String: Any] = [
37
- "createdAt": statusResponsePending.createdAt,
38
- "checkIn": statusResponsePending.checkIn,
39
- "status": "pending"
104
+ }
105
+
106
+ func feeToDictionary(fee: YttriumWrapper.TransactionFee) -> [String: Any] {
107
+ return [
108
+ "fee": amountToDictionary(amount: fee.fee),
109
+ "localFee": amountToDictionary(amount: fee.localFee)
40
110
  ]
41
- resolve(responseDict)
42
- }
43
- } catch {
44
- print("Error occurred: \(error)")
45
- print(error)
46
- reject("checkStatus err", "checkStatus", error)
47
111
  }
48
- }
49
- }
50
- }
51
-
52
- func availableResponseToDictionary(_ response: YttriumWrapper.RouteResponseAvailable) -> [String: Any] {
53
- return [
54
- "orchestrationId": response.orchestrationId,
55
- "transactions": response.transactions.map { transaction in
112
+
113
+ func amountToDictionary(amount: YttriumWrapper.Amount) -> [String: Any] {
114
+ return [
115
+ "symbol": amount.symbol,
116
+ "amount": amount.amount,
117
+ "unit": amount.unit,
118
+ "formatted": amount.formatted,
119
+ "formattedAlt": amount.formattedAlt
120
+ ]
121
+ }
122
+
123
+ func txnDetailsToDictionary(details: YttriumWrapper.TxnDetails) -> [String: Any] {
124
+ return [
125
+ "transaction": transactionToDictionary(transaction: details.transaction),
126
+ "estimate": estimationToDictionary(estimation: details.estimate),
127
+ "fee": feeToDictionary(fee: details.fee)
128
+ ]
129
+ }
130
+
56
131
  return [
57
- "from": transaction.from,
58
- "to": transaction.to,
59
- "value": transaction.value,
60
- "gas": transaction.gas,
61
- "data": transaction.data,
62
- "nonce": transaction.nonce,
63
- "chainId": transaction.chainId,
64
- "gasPrice": transaction.gasPrice,
65
- "maxFeePerGas": transaction.maxFeePerGas,
66
- "maxPriorityFeePerGas": transaction.maxPriorityFeePerGas,
132
+ "route": routeUiFields.route.map { txnDetailsToDictionary(details: $0) },
133
+ "bridge": routeUiFields.bridge.map { feeToDictionary(fee: $0) },
134
+ "initial": txnDetailsToDictionary(details: routeUiFields.initial),
135
+ "localTotal": amountToDictionary(amount: routeUiFields.localTotal)
67
136
  ]
68
- },
69
- "metadata": [
70
- "fundingFrom": response.metadata.fundingFrom.map { funding in
71
- return [
72
- "chainId": funding.chainId,
73
- "tokenContract": funding.tokenContract,
74
- "symbol": funding.symbol,
75
- "amount": funding.amount,
76
- ]
77
- }
78
- ],
79
- "checkIn": response.metadata.checkIn,
80
- ]
81
- }
82
-
83
- @objc
84
- func checkRoute(_ params: Any, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
85
- print("checkRoute called with", params)
86
- if let dict = params as? [String: Any],
87
- let transactionData = dict["transaction"] as? [String: Any],
88
- let from = transactionData["from"] as? FfiAddress,
89
- let chainId = transactionData["chainId"] as? String,
90
- let data = transactionData["data"] as? FfiBytes,
91
- let gasPrice = transactionData["gasPrice"] as? String,
92
- let gas = transactionData["gas"] as? Ffiu64,
93
- let value = transactionData["value"] as? Ffiu256,
94
- let to = transactionData["to"] as? FfiAddress,
95
- let maxFeePerGas = transactionData["maxFeePerGas"] as? Ffiu256,
96
- let maxPriorityFeePerGas = transactionData["maxPriorityFeePerGas"] as? Ffiu256,
97
- let nonce = transactionData["nonce"] as? Ffiu64,
98
- let projectId = dict["projectId"] as? String {
99
-
100
-
101
- let client = ChainAbstractionClient.init(projectId: projectId)
102
- print("created client, checking route...")
103
- Task {
104
- do {
105
- let transaction = InitTransaction.init(from: from, to: to, value: value, gas: gas, gasPrice: gasPrice, data: data, nonce: nonce, maxFeePerGas: maxFeePerGas, maxPriorityFeePerGas: maxPriorityFeePerGas, chainId: chainId)
137
+ }
138
+
139
+ @objc
140
+ func checkRoute(_ params: Any, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
141
+ print("checkRoute called with", params)
142
+ if let dict = params as? [String: Any],
143
+ let transactionData = dict["transaction"] as? [String: Any],
144
+ let from = transactionData["from"] as? FfiAddress,
145
+ let chainId = transactionData["chainId"] as? String,
146
+ let data = transactionData["data"] as? FfiBytes,
147
+ let gasPrice = transactionData["gasPrice"] as? String,
148
+ let gas = transactionData["gas"] as? Ffiu64,
149
+ let value = transactionData["value"] as? Ffiu256,
150
+ let to = transactionData["to"] as? FfiAddress,
151
+ let maxFeePerGas = transactionData["maxFeePerGas"] as? Ffiu256,
152
+ let maxPriorityFeePerGas = transactionData["maxPriorityFeePerGas"] as? Ffiu256,
153
+ let nonce = transactionData["nonce"] as? Ffiu64,
154
+ let projectId = dict["projectId"] as? String {
106
155
 
107
- let routeResponseSuccess = try await client.route(transaction: transaction)
108
- print("result", routeResponseSuccess)
109
156
 
110
- switch routeResponseSuccess {
111
- case let .success(routeResponse):
112
- switch routeResponse {
113
- case let .available(availableResponse):
114
- let responseDict = availableResponseToDictionary(availableResponse)
115
- resolve(["status": "available", "data": responseDict])
116
- case .notRequired(_):
117
- print("not required")
118
- resolve(["status": "not_required"])
119
- }
120
- case let .error(routeResponse):
121
- switch routeResponse.error {
122
- case BridgingError.insufficientFunds:
123
- let responseDict: [String: Any] = [
124
- "status": "error",
125
- "reason": "insufficientFunds"
126
- ]
127
- resolve(responseDict)
128
- case BridgingError.insufficientGasFunds:
129
- let responseDict: [String: Any] = [
130
- "status": "error",
131
- "reason": "insufficientGasFunds"
132
- ]
133
- resolve(responseDict)
134
- case BridgingError.noRoutesAvailable:
135
- let responseDict: [String: Any] = [
136
- "status": true,
137
- "reason": "noRoutesAvailable"
138
- ]
139
- resolve(responseDict)
140
- }
141
- print(routeResponse)
142
- print(routeResponse.error)
157
+ let client = ChainAbstractionClient.init(projectId: projectId)
158
+ print("created client, checking route...")
159
+ Task {
160
+ do {
161
+ let transaction = InitTransaction.init(from: from, to: to, value: value, gas: gas, gasPrice: gasPrice, data: data, nonce: nonce, maxFeePerGas: maxFeePerGas, maxPriorityFeePerGas: maxPriorityFeePerGas, chainId: chainId)
162
+
163
+ let routeResponseSuccess = try await client.route(transaction: transaction)
164
+ print("result", routeResponseSuccess)
165
+
166
+ switch routeResponseSuccess {
167
+ case let .success(routeResponse):
168
+ switch routeResponse {
169
+ case let .available(availableResponse):
170
+ let uiFields = try await client.getRouteUiFields(routeResponse: availableResponse, initialTransaction: Transaction(from: from, to: to, value: value, gas: gas, data: data, nonce: nonce, chainId: chainId, gasPrice: gasPrice, maxFeePerGas: maxFeePerGas, maxPriorityFeePerGas: maxPriorityFeePerGas), currency: Currency.usd)
171
+
172
+ let routesDetails = convertRouteUiFieldsToDictionary(uiFields)
173
+
174
+ print("ui_fields_json", routesDetails)
175
+ let responseDict = availableResponseToDictionary(availableResponse)
176
+ resolve(["status": "available", "data": [
177
+ "routes": responseDict,
178
+ "routesDetails": routesDetails
179
+ ]])
180
+ case .notRequired(_):
181
+ print("not required")
182
+ resolve(["status": "not_required"])
183
+ }
184
+ case let .error(routeResponse):
185
+ switch routeResponse.error {
186
+ case BridgingError.insufficientFunds:
187
+ let responseDict: [String: Any] = [
188
+ "status": "error",
189
+ "reason": "insufficientFunds"
190
+ ]
191
+ resolve(responseDict)
192
+ case BridgingError.insufficientGasFunds:
193
+ let responseDict: [String: Any] = [
194
+ "status": "error",
195
+ "reason": "insufficientGasFunds"
196
+ ]
197
+ resolve(responseDict)
198
+ case BridgingError.noRoutesAvailable:
199
+ let responseDict: [String: Any] = [
200
+ "status": "error",
201
+ "reason": "noRoutesAvailable"
202
+ ]
203
+ resolve(responseDict)
204
+ }
205
+ print(routeResponse)
206
+ print(routeResponse.error)
207
+ }
208
+ // resolve(result)
209
+ } catch {
210
+ print("Error occurred: \(error)")
211
+ print(error)
212
+ reject("yttrium err", "yttrium_err", error)
213
+ }
143
214
  }
144
- // resolve(result)
145
- } catch {
146
- print("Error occurred: \(error)")
147
- print(error)
148
- reject("yttrium err", "yttrium_err", error)
149
- }
150
215
  }
151
216
  }
152
-
153
- }
154
217
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@walletconnect/react-native-compat",
3
3
  "description": "Shims for WalletConnect Protocol in React Native Projects",
4
- "version": "2.17.2-canary-ca-4",
4
+ "version": "2.17.2-canary-ca-5",
5
5
  "author": "WalletConnect, Inc. <walletconnect.com>",
6
6
  "homepage": "https://github.com/walletconnect/walletconnect-monorepo/",
7
7
  "license": "Apache-2.0",
@@ -15,7 +15,7 @@ Pod::Spec.new do |s|
15
15
  s.source = { :git => "https://github.com/walletconnect/walletconnect-monorepo.git", :tag => "#{s.version}" }
16
16
 
17
17
  s.source_files = "ios/**/*.{h,m,mm,swift}"
18
- s.dependency 'YttriumWrapper' , '0.2.22'
18
+ s.dependency 'YttriumWrapper' , '0.4.6'
19
19
 
20
20
  # Use install_modules_dependencies helper to install the dependencies if React Native version >=0.71.0.
21
21
  # See https://github.com/facebook/react-native/blob/febf6b7f33fdb4904669f99d795eba4c0f95d7bf/scripts/cocoapods/new_architecture.rb#L79.