From f55b565b36fea781f6e061830b75d82e6d14edee Mon Sep 17 00:00:00 2001 From: ehsan shariati Date: Sat, 23 Dec 2023 21:58:50 -0500 Subject: [PATCH 1/2] completed iOS and added TransferToFula 1- added TransferToFula to both Android and iOS 2- added AssetsBalance to iOS --- android/build.gradle | 2 +- .../main/java/land/fx/fula/FulaModule.java | 15 ++++++++++ ios/Fula.mm | 12 ++++++++ ios/Fula.swift | 29 +++++++++++++++++++ package.json | 2 +- src/interfaces/fulaNativeModule.ts | 19 ++++++++---- src/protocols/blockchain.ts | 27 +++++++++++++++++ src/types/blockchain.ts | 5 ++++ 8 files changed, 104 insertions(+), 7 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 10ace59..81b673a 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -94,7 +94,7 @@ dependencies { // For > 0.71, this will be replaced by `com.facebook.react:react-android:$version` by react gradle plugin //noinspection GradleDynamicVersion implementation "com.facebook.react:react-native:+" - implementation 'com.github.functionland:fula-build-aar:v1.32.0' // From jitpack.io + implementation 'com.github.functionland:fula-build-aar:v1.33.0' // From jitpack.io implementation 'com.github.functionland:wnfs-android:v1.8.1' // From jitpack.io implementation 'commons-io:commons-io:20030203.000550' implementation 'commons-codec:commons-codec:1.15' diff --git a/android/src/main/java/land/fx/fula/FulaModule.java b/android/src/main/java/land/fx/fula/FulaModule.java index c30a227..fef6cbb 100755 --- a/android/src/main/java/land/fx/fula/FulaModule.java +++ b/android/src/main/java/land/fx/fula/FulaModule.java @@ -1183,6 +1183,21 @@ public void assetsBalance(String account, String assetId, String classId, Promis }); } + @ReactMethod + public void transferToFula(String amount, String wallet, String chain, Promise promise) { + ThreadUtils.runOnExecutor(() -> { + Log.d("ReactNative", "transferToFula called "); + try { + byte[] result = this.fula.transferToFula(amount, wallet, chain); + String resultString = toString(result); + promise.resolve(resultString); + } catch (Exception e) { + Log.d("ReactNative", e.getMessage()); + promise.reject(e); + } + }); + } + @ReactMethod public void checkAccountExists(String accountString, Promise promise) { ThreadUtils.runOnExecutor(() -> { diff --git a/ios/Fula.mm b/ios/Fula.mm index 6a26275..5cb022c 100644 --- a/ios/Fula.mm +++ b/ios/Fula.mm @@ -189,6 +189,18 @@ @interface RCT_EXTERN_MODULE(FulaModule, NSObject) RCT_EXTERN_METHOD(bloxFreeSpace:(RCTPromiseResolveBlock)resolve withRejecter:(RCTPromiseRejectBlock)reject) +RCT_EXTERN_METHOD(assetsBalance:(NSString *)account + assetId:(NSString *)assetId + classId:(NSString *)classId + withResolver:(RCTPromiseResolveBlock)resolve + withRejecter:(RCTPromiseRejectBlock)reject) + +RCT_EXTERN_METHOD(transferToFula:(NSString *)amount + wallet:(NSString *)wallet + chain:(NSString *)chain + withResolver:(RCTPromiseResolveBlock)resolve + withRejecter:(RCTPromiseRejectBlock)reject) + + (BOOL)requiresMainQueueSetup { return NO; diff --git a/ios/Fula.swift b/ios/Fula.swift index f7d39a4..ba6ba17 100644 --- a/ios/Fula.swift +++ b/ios/Fula.swift @@ -1218,4 +1218,33 @@ class FulaModule: NSObject { } + @objc(assetsBalance:assetId:classId:withResolver:withRejecter:) + func assetsBalance(account: String, assetId: String, classId: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) { + DispatchQueue.global(qos: .default).async { + do { + print("ReactNative", "assetsBalance called") + let result = try fula!.assetsBalance(account, assetId: assetId, classId: classId) + let resultString = String(data: result!, encoding: .utf8) + resolve(resultString) + } catch let error { + print("ReactNative", "assetsBalance failed with Error: \(error.localizedDescription)") + reject("ERR_FULA_ASSETS_BALANCE", "assetsBalance failed", error) + } + } + } + @objc(transferToFula:wallet:chain:withResolver:withRejecter:) + func transferToFula(amount: String, wallet: String, chain: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) { + DispatchQueue.global(qos: .default).async { + do { + print("ReactNative", "transferToFula called") + let result = try fula!.transferToFula(amount, wallet: wallet, chain: chain) + let resultString = String(data: result!, encoding: .utf8) + resolve(resultString) + } catch let error { + print("ReactNative", "transferToFula failed with Error: \(error.localizedDescription)") + reject("ERR_FULA_TRANSFER", "transferToFula failed", error) + } + } + } + } diff --git a/package.json b/package.json index b13104a..80527a6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@functionland/react-native-fula", - "version": "1.32.0", + "version": "1.33.0", "description": "This package is a bridge to use the Fula libp2p protocols in the react-native which is using wnfs", "main": "lib/commonjs/index", "module": "lib/module/index", diff --git a/src/interfaces/fulaNativeModule.ts b/src/interfaces/fulaNativeModule.ts index 7a3016a..9bd18aa 100644 --- a/src/interfaces/fulaNativeModule.ts +++ b/src/interfaces/fulaNativeModule.ts @@ -1,4 +1,5 @@ import { NativeModules, Platform } from 'react-native'; +import { transferToFula } from '../../.history/src/protocols/blockchain_20231223214858'; interface FulaNativeModule { initFula: ( @@ -98,16 +99,24 @@ interface FulaNativeModule { cid: string ) => Promise; - //Hardware - bloxFreeSpace: () => Promise; - wifiRemoveall: () => Promise; - reboot: () => Promise; - getAccount: () => Promise; + //On Blox calls for chain assetsBalance: ( account: string, assetId: string, classId: string ) => Promise; + transferToFula: ( + amount: string, + wallet: string, + chain: string + ) => Promise; + + + //Hardware + bloxFreeSpace: () => Promise; + wifiRemoveall: () => Promise; + reboot: () => Promise; + getAccount: () => Promise; } const LINKING_ERROR = diff --git a/src/protocols/blockchain.ts b/src/protocols/blockchain.ts index bdf2da0..eae9199 100644 --- a/src/protocols/blockchain.ts +++ b/src/protocols/blockchain.ts @@ -547,3 +547,30 @@ export const assetsBalance = ( }); return res; }; + +export const transferToFula = ( + amount: string, + wallet: string, + chain: string +): Promise => { + console.log('transferToFula in react-native started'); + let res = Fula.transferToFula(amount, wallet, chain) + .then((res) => { + try { + let jsonRes: BType.TransferToFulaResponse = JSON.parse(res); + return jsonRes; + } catch (e) { + try { + return JSON.parse(res); + } catch (e1) { + console.error('Error parsing res in transferToFula:', e1); + throw e1; // Rethrow the error to maintain the rejection state + } + } + }) + .catch((err) => { + console.error('Error getting transferToFula:', err); + throw err; // Rethrow the error to maintain the rejection state + }); + return res; +}; diff --git a/src/types/blockchain.ts b/src/types/blockchain.ts index 4da2b14..ad57104 100644 --- a/src/types/blockchain.ts +++ b/src/types/blockchain.ts @@ -21,6 +21,11 @@ export interface AssetsBalanceResponse { amount: string; } +export interface TransferToFulaResponse { + msg: string; + description: string; +} + export interface PoolJoinResponse { account: string; poolID: number; From bf8554433d428b4970772fcdfda48152e56b09a6 Mon Sep 17 00:00:00 2001 From: ehsan shariati Date: Mon, 25 Dec 2023 09:37:14 +0100 Subject: [PATCH 2/2] Update App.tsx --- example/src/App.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example/src/App.tsx b/example/src/App.tsx index 0103e34..0bca20f 100644 --- a/example/src/App.tsx +++ b/example/src/App.tsx @@ -13,7 +13,7 @@ const App = () => { const [value, setValue] = React.useState(''); const [inprogress, setInprogress] = React.useState(false); const [newRootCid, setNewRootCid] = React.useState(''); - const root_cid = 'bafyr4id2oxonbgmyg7tul53omvmb7r23et2p2bf3jzi6c2p2zmh4fyi26m'; + const root_cid = 'bafyr4igvbqjrqi4ukrj4skydwpdeo4zaof5iduk7jfzdz6bd7z5wkmokwq'; const seed = '0xmd93c00b5v99f99ti871r8r17r2rt66ee277777ge1be6fb47709b691efb0e777';