@walletconnect/react-native-compat 2.17.2-canary-ca-7 → 2.17.2-canary-ca-9

Sign up to get free protection for your applications and to get access to all the features.
package/ios/Yttrium.mm CHANGED
@@ -6,14 +6,27 @@
6
6
  // withResolver:(RCTPromiseResolveBlock)resolve
7
7
  // withRejecter:(RCTPromiseRejectBlock)reject)
8
8
  //
9
- RCT_EXTERN_METHOD(checkStatus:(id)params
9
+ RCT_EXTERN_METHOD(status:(id)params
10
10
  resolve:(RCTPromiseResolveBlock)resolve
11
11
  reject:(RCTPromiseRejectBlock)reject)
12
12
 
13
- RCT_EXTERN_METHOD(checkRoute:(id)params
13
+ RCT_EXTERN_METHOD(prepare:(id)params
14
14
  resolve:(RCTPromiseResolveBlock)resolve
15
15
  reject:(RCTPromiseRejectBlock)reject)
16
16
 
17
+ RCT_EXTERN_METHOD(getBridgeDetails:(id)params
18
+ resolve:(RCTPromiseResolveBlock)resolve
19
+ reject:(RCTPromiseRejectBlock)reject)
20
+
21
+ RCT_EXTERN_METHOD(getERC20Balance:(id)params
22
+ resolve:(RCTPromiseResolveBlock)resolve
23
+ reject:(RCTPromiseRejectBlock)reject)
24
+
25
+ RCT_EXTERN_METHOD(estimateFees:(id)params
26
+ resolve:(RCTPromiseResolveBlock)resolve
27
+ reject:(RCTPromiseRejectBlock)reject)
28
+
29
+
17
30
  + (BOOL)requiresMainQueueSetup
18
31
  {
19
32
  return NO;
package/ios/Yttrium.swift CHANGED
@@ -5,7 +5,7 @@ import YttriumWrapper
5
5
  class Yttrium: NSObject {
6
6
 
7
7
  @objc
8
- func checkStatus(_ params: Any, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
8
+ func status(_ params: Any, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
9
9
  print("checkStatus called with", params )
10
10
  if let dict = params as? [String: Any],
11
11
  let projectId = dict["projectId"] as? String,
@@ -49,68 +49,150 @@ class Yttrium: NSObject {
49
49
  }
50
50
  }
51
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] {
52
+ func convertRouteResponseAvailableToDictionary(_ routeResponse: RouteResponseAvailable) -> [String: Any] {
53
+ func transactionToDictionary(_ transaction: YttriumWrapper.Transaction) -> [String: Any] {
85
54
  return [
55
+ "chainId": transaction.chainId,
86
56
  "from": transaction.from,
87
57
  "to": transaction.to,
88
58
  "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
59
+ "input": transaction.input,
60
+ "gasLimit": transaction.gasLimit,
61
+ "nonce": transaction.nonce
96
62
  ]
97
63
  }
98
-
99
- func estimationToDictionary(estimation: YttriumWrapper.Eip1559Estimation) -> [String: Any] {
64
+
65
+ func fundingMetadataToDictionary(_ metadata: YttriumWrapper.FundingMetadata) -> [String: Any] {
100
66
  return [
101
- "maxFeePerGas": estimation.maxFeePerGas,
102
- "maxPriorityFeePerGas": estimation.maxPriorityFeePerGas
67
+ "chainId": metadata.chainId,
68
+ "tokenContract": metadata.tokenContract,
69
+ "symbol": metadata.symbol,
70
+ "amount": metadata.amount,
71
+ "bridgingFee": metadata.bridgingFee,
72
+ "decimals": metadata.decimals
103
73
  ]
104
74
  }
105
-
106
- func feeToDictionary(fee: YttriumWrapper.TransactionFee) -> [String: Any] {
75
+
76
+ func initialTransactionMetadataToDictionary(_ metadata: YttriumWrapper.InitialTransactionMetadata) -> [String: Any] {
77
+ return [
78
+ "transferTo": metadata.transferTo,
79
+ "amount": metadata.amount,
80
+ "tokenContract": metadata.tokenContract,
81
+ "symbol": metadata.symbol,
82
+ "decimals": metadata.decimals
83
+ ]
84
+ }
85
+
86
+ func metadataToDictionary(_ metadata: YttriumWrapper.Metadata) -> [String: Any] {
107
87
  return [
108
- "fee": amountToDictionary(amount: fee.fee),
109
- "localFee": amountToDictionary(amount: fee.localFee)
88
+ "fundingFrom": metadata.fundingFrom.map { fundingMetadataToDictionary($0) },
89
+ "initialTransaction": initialTransactionMetadataToDictionary(metadata.initialTransaction),
90
+ "checkIn": metadata.checkIn
110
91
  ]
111
92
  }
93
+
94
+ return [
95
+ "orchestrationId": routeResponse.orchestrationId,
96
+ "initialTransaction": transactionToDictionary(routeResponse.initialTransaction),
97
+ "transactions": routeResponse.transactions.map { transactionToDictionary($0) },
98
+ "metadata": metadataToDictionary(routeResponse.metadata)
99
+ ]
100
+ }
101
+
102
+ private var availableResponseDictionary: [String: RouteResponseAvailable] = [:]
103
+
104
+ @objc
105
+ func prepare(_ params: Any, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
106
+ print("checkRoute called with", params)
107
+ let dict = params as? [String: Any]
112
108
 
113
- func amountToDictionary(amount: YttriumWrapper.Amount) -> [String: Any] {
109
+ if let transactionData = dict?["transaction"] as? [String: String],
110
+ let from = transactionData["from"] ?? "" as Optional,
111
+ let chainId = transactionData["chainId"] ?? "" as Optional,
112
+ let data = transactionData["data"] ?? "" as Optional,
113
+ let value = transactionData["value"] ?? "" as Optional,
114
+ let to = transactionData["to"] ?? "" as Optional,
115
+ let projectId = dict?["projectId"] as? String {
116
+
117
+ let client = ChainAbstractionClient.init(projectId: projectId)
118
+ print("created client, checking route...")
119
+ Task {
120
+ do {
121
+ let transaction = InitialTransaction.init(chainId: chainId, from: from, to: to, value: value, input: data)
122
+
123
+ let routeResponseSuccess = try await client.prepare(initialTransaction: transaction)
124
+ print("result", routeResponseSuccess)
125
+
126
+ switch routeResponseSuccess {
127
+ case let .success(routeResponse):
128
+ switch routeResponse {
129
+ case let .available(availableResponse):
130
+
131
+ availableResponseDictionary[availableResponse.orchestrationId] = availableResponse;
132
+ // 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)
133
+ //
134
+ // let routesDetails = convertRouteUiFieldsToDictionary(uiFields)
135
+ // print("available result", availableResponse)
136
+ // print("ui_fields_json", routesDetails)
137
+ let responseDict = convertRouteResponseAvailableToDictionary(availableResponse)
138
+ print("parsed result dictionary", responseDict)
139
+ resolve(["status": "available", "data": responseDict])
140
+ // "routesDetails": routesDetails
141
+
142
+ case .notRequired(_):
143
+ print("not required")
144
+ resolve(["status": "not_required"])
145
+ }
146
+ case let .error(routeResponse):
147
+ switch routeResponse.error {
148
+ case BridgingError.insufficientFunds:
149
+ let responseDict: [String: Any] = [
150
+ "status": "error",
151
+ "reason": "insufficientFunds"
152
+ ]
153
+ resolve(responseDict)
154
+ case BridgingError.insufficientGasFunds:
155
+ let responseDict: [String: Any] = [
156
+ "status": "error",
157
+ "reason": "insufficientGasFunds"
158
+ ]
159
+ resolve(responseDict)
160
+ case BridgingError.noRoutesAvailable:
161
+ let responseDict: [String: Any] = [
162
+ "status": "error",
163
+ "reason": "noRoutesAvailable"
164
+ ]
165
+ resolve(responseDict)
166
+ }
167
+ print(routeResponse)
168
+ print(routeResponse.error)
169
+ }
170
+ // resolve(result)
171
+ } catch {
172
+ print("Error occurred: \(error)")
173
+ print(error)
174
+ reject("yttrium err", "yttrium_err", error)
175
+ }
176
+ }
177
+ }
178
+ }
179
+
180
+ func convertUiFieldsToDictionary(_ uiFields: UiFields) -> [String: Any] {
181
+ func feeEstimatedTransactionToDictionary(_ transaction: YttriumWrapper.FeeEstimatedTransaction) -> [String: Any] {
182
+ return [
183
+ "chainId": transaction.chainId,
184
+ "from": transaction.from,
185
+ "to": transaction.to,
186
+ "value": transaction.value,
187
+ "input": transaction.input,
188
+ "gasLimit": transaction.gasLimit,
189
+ "nonce": transaction.nonce,
190
+ "maxFeePerGas": transaction.maxFeePerGas,
191
+ "maxPriorityFeePerGas": transaction.maxPriorityFeePerGas
192
+ ]
193
+ }
194
+
195
+ func amountToDictionary(_ amount: YttriumWrapper.Amount) -> [String: Any] {
114
196
  return [
115
197
  "symbol": amount.symbol,
116
198
  "amount": amount.amount,
@@ -119,99 +201,104 @@ class Yttrium: NSObject {
119
201
  "formattedAlt": amount.formattedAlt
120
202
  ]
121
203
  }
122
-
123
- func txnDetailsToDictionary(details: YttriumWrapper.TxnDetails) -> [String: Any] {
204
+
205
+ func transactionFeeToDictionary(_ fee: YttriumWrapper.TransactionFee) -> [String: Any] {
124
206
  return [
125
- "transaction": transactionToDictionary(transaction: details.transaction),
126
- "estimate": estimationToDictionary(estimation: details.estimate),
127
- "fee": feeToDictionary(fee: details.fee)
207
+ "fee": amountToDictionary(fee.fee),
208
+ "localFee": amountToDictionary(fee.localFee)
128
209
  ]
129
210
  }
130
-
211
+
212
+ func txnDetailsToDictionary(_ txnDetails: YttriumWrapper.TxnDetails) -> [String: Any] {
213
+ return [
214
+ "transaction": feeEstimatedTransactionToDictionary(txnDetails.transaction),
215
+ "fee": transactionFeeToDictionary(txnDetails.fee)
216
+ ]
217
+ }
218
+
131
219
  return [
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)
220
+ "route": uiFields.route.map { txnDetailsToDictionary($0) },
221
+ "localRouteTotal": amountToDictionary(uiFields.localRouteTotal),
222
+ "bridge": uiFields.bridge.map { transactionFeeToDictionary($0) },
223
+ "localBridgeTotal": amountToDictionary(uiFields.localBridgeTotal),
224
+ "initial": txnDetailsToDictionary(uiFields.initial),
225
+ "localTotal": amountToDictionary(uiFields.localTotal)
136
226
  ]
137
227
  }
138
228
 
139
229
  @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 {
155
-
156
-
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
- }
214
- }
215
- }
230
+ func getBridgeDetails(_ params: Any, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
231
+ print("getBridgeDetails called with", params)
232
+ let dict = params as? [String: String]
233
+
234
+ if let orchestrationId = dict?["orchestrationId"] ?? "" as Optional,
235
+ let projectId = dict?["projectId"] as? String {
236
+
237
+ let client = ChainAbstractionClient.init(projectId: projectId)
238
+ print("created client, getting UI fields...")
239
+ Task {
240
+ do {
241
+
242
+ let availableResponse = availableResponseDictionary[orchestrationId]!
243
+ let uiFields = try await client.getUiFields(routeResponse: availableResponse, currency: Currency.usd)
244
+ let uiFIeldsDict = convertUiFieldsToDictionary(uiFields)
245
+ print("getBridgeDetails result", uiFields)
246
+ resolve(uiFIeldsDict)
247
+ } catch {
248
+ print("Error occurred: \(error)")
249
+ print(error)
250
+ reject("yttrium err", "yttrium_err getBridgeDetails", error)
251
+ }
252
+ }
253
+ }
254
+ }
255
+
256
+ @objc
257
+ func getERC20Balance(_ params: Any, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
258
+ print("getERC20Balance called with", params)
259
+ let dict = params as? [String: String]
260
+
261
+ if let tokenAddress = dict?["tokenAddress"] ?? "" as Optional,
262
+ let ownerAddress = dict?["ownerAddress"] ?? "" as Optional,
263
+ let chainId = dict?["chainId"] ?? "" as Optional,
264
+ let projectId = dict?["projectId"] as? String {
265
+
266
+ let client = ChainAbstractionClient.init(projectId: projectId)
267
+ Task {
268
+ do {
269
+ let balance = try await client.erc20TokenBalance(chainId: chainId, token: tokenAddress, owner: ownerAddress)
270
+ print("getERC20Balance result", balance)
271
+ resolve(balance)
272
+ } catch {
273
+ print("Error occurred: \(error)")
274
+ print(error)
275
+ reject("yttrium err", "yttrium_err getERC20Balance", error)
276
+ }
277
+ }
278
+ }
279
+ }
280
+
281
+ @objc
282
+ func estimateFees(_ params: Any, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
283
+ print("getERC20Balance called with", params)
284
+ let dict = params as? [String: String]
285
+
286
+ if let chainId = dict?["chainId"] ?? "" as Optional,
287
+ let projectId = dict?["projectId"] as? String {
288
+
289
+ let client = ChainAbstractionClient.init(projectId: projectId)
290
+ Task {
291
+ do {
292
+ let fees = try await client.estimateFees(chainId: chainId)
293
+ print("estimateFees result", fees)
294
+ resolve(["maxFeePerGas": fees.maxFeePerGas, "maxPriorityFeePerGas": fees.maxPriorityFeePerGas])
295
+ } catch {
296
+ print("Error occurred: \(error)")
297
+ print(error)
298
+ reject("yttrium err", "yttrium_err estimateFees", error)
299
+ }
300
+ }
301
+ }
216
302
  }
303
+
217
304
  }
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-7",
4
+ "version": "2.17.2-canary-ca-9",
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.4.6'
18
+ s.dependency 'YttriumWrapper' , '0.4.10'
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.