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

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.
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.