diff --git a/README.md b/README.md index 561c479..80b5f27 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ npm install @synonymdev/react-native-pubky - [x] [resolveHttps](#resolveHttps): Resolve HTTPS records. - [x] [getSignupToken](#getSignupToken): Get a signup token from a homeserver with admin credentials. - [x] [signUp](#signUp): Sign-up to a homeserver and update Pkarr accordingly, with optional signup token support. +- [x] [republishHomeserver](#republishHomeserver): Republish homeserver information to the DHT. - [x] [signIn](#signIn): Sign-in to a homeserver. - [x] [session](#session): Check the current session for a given Pubky in its homeserver. - [x] [signOut](#signOut): Sign-out from a homeserver. @@ -239,6 +240,21 @@ if (signUpWithTokenRes.isErr()) { console.log(signUpWithTokenRes.value); ``` +### republishHomeserver +```js +import { republishHomeserver } from '@synonymdev/react-native-pubky'; + +const republishRes = await republishHomeserver( + 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', // Secret Key + 'pubky://8pinxxgqs41n4aididenw5apqp1urfmzdztr8jt4abrkdn435ewo' // Homeserver +); +if (republishRes.isErr()) { + console.log(republishRes.error.message); + return; +} +console.log(republishRes.value); // "Homeserver republished successfully" +``` + ### signIn ```js import { signIn } from '@synonymdev/react-native-pubky'; diff --git a/android/src/main/java/com/pubky/PubkyModule.kt b/android/src/main/java/com/pubky/PubkyModule.kt index c3cbd9b..2b13276 100644 --- a/android/src/main/java/com/pubky/PubkyModule.kt +++ b/android/src/main/java/com/pubky/PubkyModule.kt @@ -205,6 +205,25 @@ class PubkyModule(reactContext: ReactApplicationContext) : } } + @ReactMethod + fun republishHomeserver(secretKey: String, homeserver: String, promise: Promise) { + CoroutineScope(Dispatchers.IO).launch { + try { + val result = republishHomeserver(secretKey, homeserver) + val array = Arguments.createArray().apply { + result.forEach { pushString(it) } + } + withContext(Dispatchers.Main) { + promise.resolve(array) + } + } catch (e: Exception) { + withContext(Dispatchers.Main) { + promise.reject("Error", e.message) + } + } + } + } + @ReactMethod fun signIn(secretKey: String, promise: Promise) { CoroutineScope(Dispatchers.IO).launch { diff --git a/android/src/main/java/uniffi/pubkycore/pubkycore.kt b/android/src/main/java/uniffi/pubkycore/pubkycore.kt index 4f3a0f0..8256880 100644 --- a/android/src/main/java/uniffi/pubkycore/pubkycore.kt +++ b/android/src/main/java/uniffi/pubkycore/pubkycore.kt @@ -418,6 +418,8 @@ internal interface _UniFFILib : Library { ): RustBuffer.ByValue fun uniffi_pubkycore_fn_func_remove_event_listener(_uniffi_out_err: RustCallStatus, ): Unit + fun uniffi_pubkycore_fn_func_republish_homeserver(`secretKey`: RustBuffer.ByValue,`homeserver`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, + ): RustBuffer.ByValue fun uniffi_pubkycore_fn_func_resolve(`publicKey`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, ): RustBuffer.ByValue fun uniffi_pubkycore_fn_func_resolve_https(`publicKey`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, @@ -576,6 +578,8 @@ internal interface _UniFFILib : Library { ): Short fun uniffi_pubkycore_checksum_func_remove_event_listener( ): Short + fun uniffi_pubkycore_checksum_func_republish_homeserver( + ): Short fun uniffi_pubkycore_checksum_func_resolve( ): Short fun uniffi_pubkycore_checksum_func_resolve_https( @@ -653,6 +657,9 @@ private fun uniffiCheckApiChecksums(lib: _UniFFILib) { if (lib.uniffi_pubkycore_checksum_func_remove_event_listener() != 23534.toShort()) { throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project") } + if (lib.uniffi_pubkycore_checksum_func_republish_homeserver() != 63919.toShort()) { + throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project") + } if (lib.uniffi_pubkycore_checksum_func_resolve() != 34317.toShort()) { throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project") } @@ -1305,6 +1312,14 @@ fun `removeEventListener`() = +fun `republishHomeserver`(`secretKey`: String, `homeserver`: String): List { + return FfiConverterSequenceString.lift( + rustCall() { _status -> + _UniFFILib.INSTANCE.uniffi_pubkycore_fn_func_republish_homeserver(FfiConverterString.lower(`secretKey`),FfiConverterString.lower(`homeserver`),_status) +}) +} + + fun `resolve`(`publicKey`: String): List { return FfiConverterSequenceString.lift( rustCall() { _status -> diff --git a/android/src/main/jniLibs/arm64-v8a/libpubkycore.so b/android/src/main/jniLibs/arm64-v8a/libpubkycore.so index e903eef..614542a 100755 Binary files a/android/src/main/jniLibs/arm64-v8a/libpubkycore.so and b/android/src/main/jniLibs/arm64-v8a/libpubkycore.so differ diff --git a/android/src/main/jniLibs/armeabi-v7a/libpubkycore.so b/android/src/main/jniLibs/armeabi-v7a/libpubkycore.so index de05cec..14d2894 100755 Binary files a/android/src/main/jniLibs/armeabi-v7a/libpubkycore.so and b/android/src/main/jniLibs/armeabi-v7a/libpubkycore.so differ diff --git a/android/src/main/jniLibs/x86/libpubkycore.so b/android/src/main/jniLibs/x86/libpubkycore.so index 6741d1a..e0bfd98 100755 Binary files a/android/src/main/jniLibs/x86/libpubkycore.so and b/android/src/main/jniLibs/x86/libpubkycore.so differ diff --git a/android/src/main/jniLibs/x86_64/libpubkycore.so b/android/src/main/jniLibs/x86_64/libpubkycore.so index b5edb74..df8a3d6 100755 Binary files a/android/src/main/jniLibs/x86_64/libpubkycore.so and b/android/src/main/jniLibs/x86_64/libpubkycore.so differ diff --git a/ios/Frameworks/PubkyCore.xcframework/Info.plist b/ios/Frameworks/PubkyCore.xcframework/Info.plist index d2c2fe2..ed336bd 100644 --- a/ios/Frameworks/PubkyCore.xcframework/Info.plist +++ b/ios/Frameworks/PubkyCore.xcframework/Info.plist @@ -4,22 +4,6 @@ AvailableLibraries - - BinaryPath - libpubkycore.a - HeadersPath - Headers - LibraryIdentifier - ios-arm64 - LibraryPath - libpubkycore.a - SupportedArchitectures - - arm64 - - SupportedPlatform - ios - BinaryPath libpubkycore.a @@ -38,6 +22,22 @@ SupportedPlatformVariant simulator + + BinaryPath + libpubkycore.a + HeadersPath + Headers + LibraryIdentifier + ios-arm64 + LibraryPath + libpubkycore.a + SupportedArchitectures + + arm64 + + SupportedPlatform + ios + CFBundlePackageType XFWK diff --git a/ios/Frameworks/PubkyCore.xcframework/ios-arm64-simulator/Headers/pubkycoreFFI.h b/ios/Frameworks/PubkyCore.xcframework/ios-arm64-simulator/Headers/pubkycoreFFI.h index db9bc67..14cc9ee 100644 --- a/ios/Frameworks/PubkyCore.xcframework/ios-arm64-simulator/Headers/pubkycoreFFI.h +++ b/ios/Frameworks/PubkyCore.xcframework/ios-arm64-simulator/Headers/pubkycoreFFI.h @@ -96,6 +96,8 @@ RustBuffer uniffi_pubkycore_fn_func_put(RustBuffer url, RustBuffer content, Rust ); void uniffi_pubkycore_fn_func_remove_event_listener(RustCallStatus *_Nonnull out_status +); +RustBuffer uniffi_pubkycore_fn_func_republish_homeserver(RustBuffer secret_key, RustBuffer homeserver, RustCallStatus *_Nonnull out_status ); RustBuffer uniffi_pubkycore_fn_func_resolve(RustBuffer public_key, RustCallStatus *_Nonnull out_status ); @@ -268,6 +270,9 @@ uint16_t uniffi_pubkycore_checksum_func_put(void ); uint16_t uniffi_pubkycore_checksum_func_remove_event_listener(void +); +uint16_t uniffi_pubkycore_checksum_func_republish_homeserver(void + ); uint16_t uniffi_pubkycore_checksum_func_resolve(void diff --git a/ios/Frameworks/PubkyCore.xcframework/ios-arm64-simulator/libpubkycore.a b/ios/Frameworks/PubkyCore.xcframework/ios-arm64-simulator/libpubkycore.a index 6fbcc36..e41adbc 100644 Binary files a/ios/Frameworks/PubkyCore.xcframework/ios-arm64-simulator/libpubkycore.a and b/ios/Frameworks/PubkyCore.xcframework/ios-arm64-simulator/libpubkycore.a differ diff --git a/ios/Frameworks/PubkyCore.xcframework/ios-arm64/Headers/pubkycoreFFI.h b/ios/Frameworks/PubkyCore.xcframework/ios-arm64/Headers/pubkycoreFFI.h index db9bc67..14cc9ee 100644 --- a/ios/Frameworks/PubkyCore.xcframework/ios-arm64/Headers/pubkycoreFFI.h +++ b/ios/Frameworks/PubkyCore.xcframework/ios-arm64/Headers/pubkycoreFFI.h @@ -96,6 +96,8 @@ RustBuffer uniffi_pubkycore_fn_func_put(RustBuffer url, RustBuffer content, Rust ); void uniffi_pubkycore_fn_func_remove_event_listener(RustCallStatus *_Nonnull out_status +); +RustBuffer uniffi_pubkycore_fn_func_republish_homeserver(RustBuffer secret_key, RustBuffer homeserver, RustCallStatus *_Nonnull out_status ); RustBuffer uniffi_pubkycore_fn_func_resolve(RustBuffer public_key, RustCallStatus *_Nonnull out_status ); @@ -268,6 +270,9 @@ uint16_t uniffi_pubkycore_checksum_func_put(void ); uint16_t uniffi_pubkycore_checksum_func_remove_event_listener(void +); +uint16_t uniffi_pubkycore_checksum_func_republish_homeserver(void + ); uint16_t uniffi_pubkycore_checksum_func_resolve(void diff --git a/ios/Frameworks/PubkyCore.xcframework/ios-arm64/libpubkycore.a b/ios/Frameworks/PubkyCore.xcframework/ios-arm64/libpubkycore.a index 77b41a8..7ca48a6 100644 Binary files a/ios/Frameworks/PubkyCore.xcframework/ios-arm64/libpubkycore.a and b/ios/Frameworks/PubkyCore.xcframework/ios-arm64/libpubkycore.a differ diff --git a/ios/Pubky.mm b/ios/Pubky.mm index 596b7d7..4bcff36 100644 --- a/ios/Pubky.mm +++ b/ios/Pubky.mm @@ -47,6 +47,11 @@ RCT_EXTERN_METHOD(signUp:(NSString *)secretKey withResolver:(RCTPromiseResolveBlock)resolve withRejecter:(RCTPromiseRejectBlock)reject) +RCT_EXTERN_METHOD(republishHomeserver:(NSString *)secretKey + homeserver:(NSString *)homeserver + withResolver:(RCTPromiseResolveBlock)resolve + withRejecter:(RCTPromiseRejectBlock)reject) + RCT_EXTERN_METHOD(signIn:(NSString *)secretKey withResolver:(RCTPromiseResolveBlock)resolve withRejecter:(RCTPromiseRejectBlock)reject) diff --git a/ios/Pubky.swift b/ios/Pubky.swift index 7e605c5..9c252d8 100644 --- a/ios/Pubky.swift +++ b/ios/Pubky.swift @@ -111,6 +111,18 @@ class Pubky: RCTEventEmitter { } } + @objc(republishHomeserver:homeserver:withResolver:withRejecter:) + func republishHomeserver(_ secretKey: String, homeserver: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) { + Task { + do { + let result = try await react_native_pubky.republishHomeserver(secretKey: secretKey, homeserver: homeserver) + resolve(result) + } catch { + reject("republishHomeserver Error", "Failed to republish homeserver", error) + } + } + } + @objc(signIn:withResolver:withRejecter:) func signIn(_ secretKey: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) { Task { diff --git a/ios/pubkycore.swift b/ios/pubkycore.swift index 140857b..c887c9e 100644 --- a/ios/pubkycore.swift +++ b/ios/pubkycore.swift @@ -766,6 +766,16 @@ public func removeEventListener() { +public func republishHomeserver(secretKey: String, homeserver: String) -> [String] { + return try! FfiConverterSequenceString.lift( + try! rustCall() { + uniffi_pubkycore_fn_func_republish_homeserver( + FfiConverterString.lower(secretKey), + FfiConverterString.lower(homeserver),$0) +} + ) +} + public func resolve(publicKey: String) -> [String] { return try! FfiConverterSequenceString.lift( try! rustCall() { @@ -897,6 +907,9 @@ private var initializationResult: InitializationResult { if (uniffi_pubkycore_checksum_func_remove_event_listener() != 23534) { return InitializationResult.apiChecksumMismatch } + if (uniffi_pubkycore_checksum_func_republish_homeserver() != 63919) { + return InitializationResult.apiChecksumMismatch + } if (uniffi_pubkycore_checksum_func_resolve() != 34317) { return InitializationResult.apiChecksumMismatch } diff --git a/src/index.tsx b/src/index.tsx index 7bdc282..1a7ff99 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -160,6 +160,21 @@ export async function signUp( } } +export async function republishHomeserver( + secretKey: string, + homeserver: string +): Promise> { + try { + const res = await Pubky.republishHomeserver(secretKey, homeserver); + if (res[0] === 'error') { + return err(res[1]); + } + return ok(res[1]); + } catch (e) { + return err(JSON.stringify(e)); + } +} + export async function signIn(secretKey: string): Promise> { try { const res = await Pubky.signIn(secretKey);