@walletconnect/react-native-compat 2.17.2-canary-rcnt-1 → 2.17.2-canary-ca-0
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/android/build.gradle +4 -0
- package/android/src/main/java/com/walletconnect/reactnativemodule/RNWalletConnectModuleModule.kt +156 -0
- package/android/src/main/java/uniffi/uniffi_yttrium.kt +2382 -0
- package/android/src/main/java/uniffi/yttrium.kt +2069 -0
- package/android/src/main/jniLibs/arm64-v8a/libuniffi_yttrium.so +0 -0
- package/android/src/main/jniLibs/armeabi-v7a/libuniffi_yttrium.so +0 -0
- package/android/src/oldarch/RNWalletConnectModuleSpec.kt +3 -0
- package/index.js +42 -0
- package/ios/Yttrium-Bridging-Header.h +2 -0
- package/ios/Yttrium.mm +22 -0
- package/ios/Yttrium.swift +154 -0
- package/package.json +1 -1
- package/react-native-compat.podspec +2 -1
|
Binary file
|
|
Binary file
|
|
@@ -3,11 +3,14 @@ package com.walletconnect.reactnativemodule
|
|
|
3
3
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
4
4
|
import com.facebook.react.bridge.ReactContextBaseJavaModule
|
|
5
5
|
import com.facebook.react.bridge.Promise
|
|
6
|
+
import com.facebook.react.bridge.ReadableMap
|
|
6
7
|
|
|
7
8
|
abstract class RNWalletConnectModuleSpec internal constructor(context: ReactApplicationContext) :
|
|
8
9
|
ReactContextBaseJavaModule(context) {
|
|
9
10
|
|
|
10
11
|
abstract fun isAppInstalled(packageName: String?, promise: Promise);
|
|
12
|
+
abstract fun checkRoute(params: ReadableMap, promise: Promise);
|
|
13
|
+
abstract fun checkStatus(params: ReadableMap, promise: Promise);
|
|
11
14
|
protected abstract fun getTypedExportedConstants(): Map<String, String>
|
|
12
15
|
|
|
13
16
|
override fun getConstants(): Map<String, String> {
|
package/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { NativeModules } from "react-native";
|
|
1
2
|
import { getApplicationModule } from "./module";
|
|
2
3
|
|
|
3
4
|
// Polyfill TextEncode / TextDecode
|
|
@@ -75,3 +76,44 @@ if (typeof global?.Application === "undefined") {
|
|
|
75
76
|
console.error("react-native-compat: Application module is not available");
|
|
76
77
|
}
|
|
77
78
|
}
|
|
79
|
+
|
|
80
|
+
// iOS uses Yttrium, Android uses RNWalletConnectModule
|
|
81
|
+
const yttrium = NativeModules.Yttrium || NativeModules.RNWalletConnectModule;
|
|
82
|
+
|
|
83
|
+
export async function checkRoute(params) {
|
|
84
|
+
if (!yttrium) {
|
|
85
|
+
throw new Error("RN Yttrium is not correctly linked");
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const result = await yttrium?.checkRoute(params);
|
|
89
|
+
return parseResult(result);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export async function checkStatus(params) {
|
|
93
|
+
if (!yttrium) {
|
|
94
|
+
throw new Error("RN Yttrium is not correctly linked");
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const result = await yttrium?.checkStatus(params);
|
|
98
|
+
return parseResult(result);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function parseResult(result) {
|
|
102
|
+
if (typeof result === "undefined") return;
|
|
103
|
+
|
|
104
|
+
// iOS returns parsed JSON object, while Android returns stringified
|
|
105
|
+
if (typeof result === "string") {
|
|
106
|
+
try {
|
|
107
|
+
return JSON.parse(result);
|
|
108
|
+
} catch (e) {}
|
|
109
|
+
}
|
|
110
|
+
return result;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
global.yttrium = {
|
|
114
|
+
checkRoute,
|
|
115
|
+
checkStatus,
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
// eslint-disable-next-line no-console
|
|
119
|
+
console.log("RN yttrium", global.yttrium);
|
package/ios/Yttrium.mm
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#import <React/RCTBridgeModule.h>
|
|
2
|
+
|
|
3
|
+
@interface RCT_EXTERN_MODULE(Yttrium, NSObject)
|
|
4
|
+
|
|
5
|
+
//RCT_EXTERN_METHOD(multiply:(float)a withB:(float)b
|
|
6
|
+
// withResolver:(RCTPromiseResolveBlock)resolve
|
|
7
|
+
// withRejecter:(RCTPromiseRejectBlock)reject)
|
|
8
|
+
//
|
|
9
|
+
RCT_EXTERN_METHOD(checkStatus:(id)params
|
|
10
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
11
|
+
reject:(RCTPromiseRejectBlock)reject)
|
|
12
|
+
|
|
13
|
+
RCT_EXTERN_METHOD(checkRoute:(id)params
|
|
14
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
15
|
+
reject:(RCTPromiseRejectBlock)reject)
|
|
16
|
+
|
|
17
|
+
+ (BOOL)requiresMainQueueSetup
|
|
18
|
+
{
|
|
19
|
+
return NO;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@end
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import YttriumWrapper
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
@objc(Yttrium)
|
|
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"
|
|
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
|
+
@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)
|
|
106
|
+
|
|
107
|
+
let routeResponseSuccess = try await client.route(transaction: transaction)
|
|
108
|
+
print("result", routeResponseSuccess)
|
|
109
|
+
|
|
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)
|
|
143
|
+
}
|
|
144
|
+
// resolve(result)
|
|
145
|
+
} catch {
|
|
146
|
+
print("Error occurred: \(error)")
|
|
147
|
+
print(error)
|
|
148
|
+
reject("yttrium err", "yttrium_err", error)
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
}
|
|
154
|
+
}
|
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-
|
|
4
|
+
"version": "2.17.2-canary-ca-0",
|
|
5
5
|
"author": "WalletConnect, Inc. <walletconnect.com>",
|
|
6
6
|
"homepage": "https://github.com/walletconnect/walletconnect-monorepo/",
|
|
7
7
|
"license": "Apache-2.0",
|
|
@@ -14,7 +14,8 @@ Pod::Spec.new do |s|
|
|
|
14
14
|
s.platforms = { :ios => "11.0", :visionos => "1.0" }
|
|
15
15
|
s.source = { :git => "https://github.com/walletconnect/walletconnect-monorepo.git", :tag => "#{s.version}" }
|
|
16
16
|
|
|
17
|
-
s.source_files = "ios/**/*.{h,m,mm}"
|
|
17
|
+
s.source_files = "ios/**/*.{h,m,mm,swift}"
|
|
18
|
+
s.dependency 'YttriumWrapper' , '0.2.22'
|
|
18
19
|
|
|
19
20
|
# Use install_modules_dependencies helper to install the dependencies if React Native version >=0.71.0.
|
|
20
21
|
# See https://github.com/facebook/react-native/blob/febf6b7f33fdb4904669f99d795eba4c0f95d7bf/scripts/cocoapods/new_architecture.rb#L79.
|