diff --git a/iosApp/iosApp/Frameworks/PubkyCore.xcframework/Info.plist b/iosApp/iosApp/Frameworks/PubkyCore.xcframework/Info.plist index d2c2fe26..ed336bd6 100644 --- a/iosApp/iosApp/Frameworks/PubkyCore.xcframework/Info.plist +++ b/iosApp/iosApp/Frameworks/PubkyCore.xcframework/Info.plist @@ -10,7 +10,7 @@ HeadersPath Headers LibraryIdentifier - ios-arm64 + ios-arm64-simulator LibraryPath libpubkycore.a SupportedArchitectures @@ -19,6 +19,8 @@ SupportedPlatform ios + SupportedPlatformVariant + simulator BinaryPath @@ -26,7 +28,7 @@ HeadersPath Headers LibraryIdentifier - ios-arm64-simulator + ios-arm64 LibraryPath libpubkycore.a SupportedArchitectures @@ -35,8 +37,6 @@ SupportedPlatform ios - SupportedPlatformVariant - simulator CFBundlePackageType diff --git a/iosApp/iosApp/Frameworks/PubkyCore.xcframework/ios-arm64-simulator/Headers/pubkycoreFFI.h b/iosApp/iosApp/Frameworks/PubkyCore.xcframework/ios-arm64-simulator/Headers/pubkycoreFFI.h index bb00823b..6bc94872 100644 --- a/iosApp/iosApp/Frameworks/PubkyCore.xcframework/ios-arm64-simulator/Headers/pubkycoreFFI.h +++ b/iosApp/iosApp/Frameworks/PubkyCore.xcframework/ios-arm64-simulator/Headers/pubkycoreFFI.h @@ -71,6 +71,12 @@ RustBuffer uniffi_pubkycore_fn_func_auth(RustBuffer url, RustBuffer secret_key, ); RustBuffer uniffi_pubkycore_fn_func_await_auth_approval(RustCallStatus *_Nonnull out_status +); +RustBuffer uniffi_pubkycore_fn_func_await_cookie_auth_approval(RustCallStatus *_Nonnull out_status + +); +RustBuffer uniffi_pubkycore_fn_func_await_grant_auth_approval(RustCallStatus *_Nonnull out_status + ); RustBuffer uniffi_pubkycore_fn_func_create_recovery_file(RustBuffer secret_key, RustBuffer passphrase, RustCallStatus *_Nonnull out_status ); @@ -78,7 +84,7 @@ RustBuffer uniffi_pubkycore_fn_func_create_tag_id(RustBuffer uri, RustBuffer lab ); RustBuffer uniffi_pubkycore_fn_func_decrypt_recovery_file(RustBuffer recovery_file, RustBuffer passphrase, RustCallStatus *_Nonnull out_status ); -RustBuffer uniffi_pubkycore_fn_func_delete_file(RustBuffer url, RustBuffer secret_key, RustCallStatus *_Nonnull out_status +RustBuffer uniffi_pubkycore_fn_func_delete_file(RustBuffer url, RustBuffer secret_key, RustBuffer client_id, RustCallStatus *_Nonnull out_status ); RustBuffer uniffi_pubkycore_fn_func_delete_with_session(RustBuffer url, RustBuffer session_secret, RustCallStatus *_Nonnull out_status ); @@ -110,13 +116,15 @@ RustBuffer uniffi_pubkycore_fn_func_mnemonic_phrase_to_keypair(RustBuffer mnemon ); RustBuffer uniffi_pubkycore_fn_func_parse_auth_url(RustBuffer url, RustCallStatus *_Nonnull out_status ); +RustBuffer uniffi_pubkycore_fn_func_parse_deep_link(RustBuffer url, RustCallStatus *_Nonnull out_status +); RustBuffer uniffi_pubkycore_fn_func_publish(RustBuffer record_name, RustBuffer record_content, RustBuffer secret_key, RustCallStatus *_Nonnull out_status ); RustBuffer uniffi_pubkycore_fn_func_publish_https(RustBuffer record_name, RustBuffer target, RustBuffer secret_key, RustCallStatus *_Nonnull out_status ); -RustBuffer uniffi_pubkycore_fn_func_put(RustBuffer url, RustBuffer content, RustBuffer secret_key, RustCallStatus *_Nonnull out_status +RustBuffer uniffi_pubkycore_fn_func_put(RustBuffer url, RustBuffer content, RustBuffer secret_key, RustBuffer client_id, RustCallStatus *_Nonnull out_status ); -RustBuffer uniffi_pubkycore_fn_func_put_bytes(RustBuffer url, RustBuffer content, RustBuffer secret_key, RustCallStatus *_Nonnull out_status +RustBuffer uniffi_pubkycore_fn_func_put_bytes(RustBuffer url, RustBuffer content, RustBuffer secret_key, RustBuffer client_id, RustCallStatus *_Nonnull out_status ); RustBuffer uniffi_pubkycore_fn_func_put_bytes_with_session(RustBuffer url, RustBuffer content, RustBuffer session_secret, RustCallStatus *_Nonnull out_status ); @@ -135,13 +143,25 @@ RustBuffer uniffi_pubkycore_fn_func_revalidate_session(RustBuffer session_secret ); void uniffi_pubkycore_fn_func_set_event_listener(uint64_t listener, RustCallStatus *_Nonnull out_status ); -RustBuffer uniffi_pubkycore_fn_func_sign_in(RustBuffer secret_key, RustCallStatus *_Nonnull out_status +RustBuffer uniffi_pubkycore_fn_func_sign_in(RustBuffer secret_key, RustBuffer client_id, RustCallStatus *_Nonnull out_status +); +RustBuffer uniffi_pubkycore_fn_func_sign_in_cookie(RustBuffer secret_key, RustCallStatus *_Nonnull out_status +); +RustBuffer uniffi_pubkycore_fn_func_sign_in_grant(RustBuffer secret_key, RustBuffer client_id, RustCallStatus *_Nonnull out_status ); RustBuffer uniffi_pubkycore_fn_func_sign_out(RustBuffer session_secret, RustCallStatus *_Nonnull out_status ); -RustBuffer uniffi_pubkycore_fn_func_sign_up(RustBuffer secret_key, RustBuffer homeserver, RustBuffer signup_token, RustCallStatus *_Nonnull out_status +RustBuffer uniffi_pubkycore_fn_func_sign_up(RustBuffer secret_key, RustBuffer homeserver, RustBuffer signup_token, RustBuffer client_id, RustCallStatus *_Nonnull out_status +); +RustBuffer uniffi_pubkycore_fn_func_sign_up_cookie(RustBuffer secret_key, RustBuffer homeserver, RustBuffer signup_token, RustCallStatus *_Nonnull out_status ); -RustBuffer uniffi_pubkycore_fn_func_start_auth_flow(RustBuffer capabilities_str, RustCallStatus *_Nonnull out_status +RustBuffer uniffi_pubkycore_fn_func_sign_up_grant(RustBuffer secret_key, RustBuffer homeserver, RustBuffer signup_token, RustBuffer client_id, RustCallStatus *_Nonnull out_status +); +RustBuffer uniffi_pubkycore_fn_func_start_auth_flow(RustBuffer capabilities_str, RustBuffer client_id, RustCallStatus *_Nonnull out_status +); +RustBuffer uniffi_pubkycore_fn_func_start_cookie_auth_flow(RustBuffer capabilities_str, RustCallStatus *_Nonnull out_status +); +RustBuffer uniffi_pubkycore_fn_func_start_grant_auth_flow(RustBuffer capabilities_str, RustBuffer client_id, RustCallStatus *_Nonnull out_status ); RustBuffer uniffi_pubkycore_fn_func_switch_network(int8_t use_testnet, RustCallStatus *_Nonnull out_status ); @@ -266,6 +286,12 @@ uint16_t uniffi_pubkycore_checksum_func_auth(void ); uint16_t uniffi_pubkycore_checksum_func_await_auth_approval(void +); +uint16_t uniffi_pubkycore_checksum_func_await_cookie_auth_approval(void + +); +uint16_t uniffi_pubkycore_checksum_func_await_grant_auth_approval(void + ); uint16_t uniffi_pubkycore_checksum_func_create_recovery_file(void @@ -317,6 +343,9 @@ uint16_t uniffi_pubkycore_checksum_func_mnemonic_phrase_to_keypair(void ); uint16_t uniffi_pubkycore_checksum_func_parse_auth_url(void +); +uint16_t uniffi_pubkycore_checksum_func_parse_deep_link(void + ); uint16_t uniffi_pubkycore_checksum_func_publish(void @@ -356,15 +385,33 @@ uint16_t uniffi_pubkycore_checksum_func_set_event_listener(void ); uint16_t uniffi_pubkycore_checksum_func_sign_in(void +); +uint16_t uniffi_pubkycore_checksum_func_sign_in_cookie(void + +); +uint16_t uniffi_pubkycore_checksum_func_sign_in_grant(void + ); uint16_t uniffi_pubkycore_checksum_func_sign_out(void ); uint16_t uniffi_pubkycore_checksum_func_sign_up(void +); +uint16_t uniffi_pubkycore_checksum_func_sign_up_cookie(void + +); +uint16_t uniffi_pubkycore_checksum_func_sign_up_grant(void + ); uint16_t uniffi_pubkycore_checksum_func_start_auth_flow(void +); +uint16_t uniffi_pubkycore_checksum_func_start_cookie_auth_flow(void + +); +uint16_t uniffi_pubkycore_checksum_func_start_grant_auth_flow(void + ); uint16_t uniffi_pubkycore_checksum_func_switch_network(void diff --git a/iosApp/iosApp/Frameworks/PubkyCore.xcframework/ios-arm64-simulator/libpubkycore.a b/iosApp/iosApp/Frameworks/PubkyCore.xcframework/ios-arm64-simulator/libpubkycore.a index 9017230d..2132cb17 100644 Binary files a/iosApp/iosApp/Frameworks/PubkyCore.xcframework/ios-arm64-simulator/libpubkycore.a and b/iosApp/iosApp/Frameworks/PubkyCore.xcframework/ios-arm64-simulator/libpubkycore.a differ diff --git a/iosApp/iosApp/Frameworks/PubkyCore.xcframework/ios-arm64/Headers/pubkycoreFFI.h b/iosApp/iosApp/Frameworks/PubkyCore.xcframework/ios-arm64/Headers/pubkycoreFFI.h index bb00823b..6bc94872 100644 --- a/iosApp/iosApp/Frameworks/PubkyCore.xcframework/ios-arm64/Headers/pubkycoreFFI.h +++ b/iosApp/iosApp/Frameworks/PubkyCore.xcframework/ios-arm64/Headers/pubkycoreFFI.h @@ -71,6 +71,12 @@ RustBuffer uniffi_pubkycore_fn_func_auth(RustBuffer url, RustBuffer secret_key, ); RustBuffer uniffi_pubkycore_fn_func_await_auth_approval(RustCallStatus *_Nonnull out_status +); +RustBuffer uniffi_pubkycore_fn_func_await_cookie_auth_approval(RustCallStatus *_Nonnull out_status + +); +RustBuffer uniffi_pubkycore_fn_func_await_grant_auth_approval(RustCallStatus *_Nonnull out_status + ); RustBuffer uniffi_pubkycore_fn_func_create_recovery_file(RustBuffer secret_key, RustBuffer passphrase, RustCallStatus *_Nonnull out_status ); @@ -78,7 +84,7 @@ RustBuffer uniffi_pubkycore_fn_func_create_tag_id(RustBuffer uri, RustBuffer lab ); RustBuffer uniffi_pubkycore_fn_func_decrypt_recovery_file(RustBuffer recovery_file, RustBuffer passphrase, RustCallStatus *_Nonnull out_status ); -RustBuffer uniffi_pubkycore_fn_func_delete_file(RustBuffer url, RustBuffer secret_key, RustCallStatus *_Nonnull out_status +RustBuffer uniffi_pubkycore_fn_func_delete_file(RustBuffer url, RustBuffer secret_key, RustBuffer client_id, RustCallStatus *_Nonnull out_status ); RustBuffer uniffi_pubkycore_fn_func_delete_with_session(RustBuffer url, RustBuffer session_secret, RustCallStatus *_Nonnull out_status ); @@ -110,13 +116,15 @@ RustBuffer uniffi_pubkycore_fn_func_mnemonic_phrase_to_keypair(RustBuffer mnemon ); RustBuffer uniffi_pubkycore_fn_func_parse_auth_url(RustBuffer url, RustCallStatus *_Nonnull out_status ); +RustBuffer uniffi_pubkycore_fn_func_parse_deep_link(RustBuffer url, RustCallStatus *_Nonnull out_status +); RustBuffer uniffi_pubkycore_fn_func_publish(RustBuffer record_name, RustBuffer record_content, RustBuffer secret_key, RustCallStatus *_Nonnull out_status ); RustBuffer uniffi_pubkycore_fn_func_publish_https(RustBuffer record_name, RustBuffer target, RustBuffer secret_key, RustCallStatus *_Nonnull out_status ); -RustBuffer uniffi_pubkycore_fn_func_put(RustBuffer url, RustBuffer content, RustBuffer secret_key, RustCallStatus *_Nonnull out_status +RustBuffer uniffi_pubkycore_fn_func_put(RustBuffer url, RustBuffer content, RustBuffer secret_key, RustBuffer client_id, RustCallStatus *_Nonnull out_status ); -RustBuffer uniffi_pubkycore_fn_func_put_bytes(RustBuffer url, RustBuffer content, RustBuffer secret_key, RustCallStatus *_Nonnull out_status +RustBuffer uniffi_pubkycore_fn_func_put_bytes(RustBuffer url, RustBuffer content, RustBuffer secret_key, RustBuffer client_id, RustCallStatus *_Nonnull out_status ); RustBuffer uniffi_pubkycore_fn_func_put_bytes_with_session(RustBuffer url, RustBuffer content, RustBuffer session_secret, RustCallStatus *_Nonnull out_status ); @@ -135,13 +143,25 @@ RustBuffer uniffi_pubkycore_fn_func_revalidate_session(RustBuffer session_secret ); void uniffi_pubkycore_fn_func_set_event_listener(uint64_t listener, RustCallStatus *_Nonnull out_status ); -RustBuffer uniffi_pubkycore_fn_func_sign_in(RustBuffer secret_key, RustCallStatus *_Nonnull out_status +RustBuffer uniffi_pubkycore_fn_func_sign_in(RustBuffer secret_key, RustBuffer client_id, RustCallStatus *_Nonnull out_status +); +RustBuffer uniffi_pubkycore_fn_func_sign_in_cookie(RustBuffer secret_key, RustCallStatus *_Nonnull out_status +); +RustBuffer uniffi_pubkycore_fn_func_sign_in_grant(RustBuffer secret_key, RustBuffer client_id, RustCallStatus *_Nonnull out_status ); RustBuffer uniffi_pubkycore_fn_func_sign_out(RustBuffer session_secret, RustCallStatus *_Nonnull out_status ); -RustBuffer uniffi_pubkycore_fn_func_sign_up(RustBuffer secret_key, RustBuffer homeserver, RustBuffer signup_token, RustCallStatus *_Nonnull out_status +RustBuffer uniffi_pubkycore_fn_func_sign_up(RustBuffer secret_key, RustBuffer homeserver, RustBuffer signup_token, RustBuffer client_id, RustCallStatus *_Nonnull out_status +); +RustBuffer uniffi_pubkycore_fn_func_sign_up_cookie(RustBuffer secret_key, RustBuffer homeserver, RustBuffer signup_token, RustCallStatus *_Nonnull out_status ); -RustBuffer uniffi_pubkycore_fn_func_start_auth_flow(RustBuffer capabilities_str, RustCallStatus *_Nonnull out_status +RustBuffer uniffi_pubkycore_fn_func_sign_up_grant(RustBuffer secret_key, RustBuffer homeserver, RustBuffer signup_token, RustBuffer client_id, RustCallStatus *_Nonnull out_status +); +RustBuffer uniffi_pubkycore_fn_func_start_auth_flow(RustBuffer capabilities_str, RustBuffer client_id, RustCallStatus *_Nonnull out_status +); +RustBuffer uniffi_pubkycore_fn_func_start_cookie_auth_flow(RustBuffer capabilities_str, RustCallStatus *_Nonnull out_status +); +RustBuffer uniffi_pubkycore_fn_func_start_grant_auth_flow(RustBuffer capabilities_str, RustBuffer client_id, RustCallStatus *_Nonnull out_status ); RustBuffer uniffi_pubkycore_fn_func_switch_network(int8_t use_testnet, RustCallStatus *_Nonnull out_status ); @@ -266,6 +286,12 @@ uint16_t uniffi_pubkycore_checksum_func_auth(void ); uint16_t uniffi_pubkycore_checksum_func_await_auth_approval(void +); +uint16_t uniffi_pubkycore_checksum_func_await_cookie_auth_approval(void + +); +uint16_t uniffi_pubkycore_checksum_func_await_grant_auth_approval(void + ); uint16_t uniffi_pubkycore_checksum_func_create_recovery_file(void @@ -317,6 +343,9 @@ uint16_t uniffi_pubkycore_checksum_func_mnemonic_phrase_to_keypair(void ); uint16_t uniffi_pubkycore_checksum_func_parse_auth_url(void +); +uint16_t uniffi_pubkycore_checksum_func_parse_deep_link(void + ); uint16_t uniffi_pubkycore_checksum_func_publish(void @@ -356,15 +385,33 @@ uint16_t uniffi_pubkycore_checksum_func_set_event_listener(void ); uint16_t uniffi_pubkycore_checksum_func_sign_in(void +); +uint16_t uniffi_pubkycore_checksum_func_sign_in_cookie(void + +); +uint16_t uniffi_pubkycore_checksum_func_sign_in_grant(void + ); uint16_t uniffi_pubkycore_checksum_func_sign_out(void ); uint16_t uniffi_pubkycore_checksum_func_sign_up(void +); +uint16_t uniffi_pubkycore_checksum_func_sign_up_cookie(void + +); +uint16_t uniffi_pubkycore_checksum_func_sign_up_grant(void + ); uint16_t uniffi_pubkycore_checksum_func_start_auth_flow(void +); +uint16_t uniffi_pubkycore_checksum_func_start_cookie_auth_flow(void + +); +uint16_t uniffi_pubkycore_checksum_func_start_grant_auth_flow(void + ); uint16_t uniffi_pubkycore_checksum_func_switch_network(void diff --git a/iosApp/iosApp/Frameworks/PubkyCore.xcframework/ios-arm64/libpubkycore.a b/iosApp/iosApp/Frameworks/PubkyCore.xcframework/ios-arm64/libpubkycore.a index a0ed1802..e41a99d6 100644 Binary files a/iosApp/iosApp/Frameworks/PubkyCore.xcframework/ios-arm64/libpubkycore.a and b/iosApp/iosApp/Frameworks/PubkyCore.xcframework/ios-arm64/libpubkycore.a differ diff --git a/iosApp/iosApp/Pubky/IosPubkyClient.swift b/iosApp/iosApp/Pubky/IosPubkyClient.swift index 88813f13..9adb97f7 100644 --- a/iosApp/iosApp/Pubky/IosPubkyClient.swift +++ b/iosApp/iosApp/Pubky/IosPubkyClient.swift @@ -1,6 +1,15 @@ import Foundation import Shared +/// Which application the homeserver is being told it is talking to, required by pubky 0.10's +/// `ClientId` on every sign-in, sign-up, auth flow and secret-key write. +/// +/// The type wants a domain string (its own example is `franky.pubky.app`), non-empty and at most +/// 253 characters — not the iOS bundle identifier. Kept byte-for-byte identical to +/// `LOOPKY_CLIENT_ID` in `AndroidPubkyClient.kt`: it travels to the homeserver, so the two +/// platforms must identify as the same client. +private let loopkyClientId = "loopky.app" + /// Swift implementation of the shared `RawPubkyClient` interface — a dumb pass-through to /// the UniFFI-generated free functions in `pubkycore.swift` (backed by /// `PubkyCore.xcframework`). Every method returns the FFI's native `[status, payload]` @@ -45,14 +54,19 @@ final class IosPubkyClient: NSObject, RawPubkyClient { // MARK: - Auth / sessions func signUp(secretKey: String, homeserver: String, signupToken: String?) -> [String] { - Loopky.signUp(secretKey: secretKey, homeserver: homeserver, signupToken: signupToken) + Loopky.signUp( + secretKey: secretKey, + homeserver: homeserver, + signupToken: signupToken, + clientId: loopkyClientId + ) } func getSignupToken(homeserverPubky: String, adminPassword: String) -> [String] { Loopky.getSignupToken(homeserverPubky: homeserverPubky, adminPassword: adminPassword) } - func signIn(secretKey: String) -> [String] { Loopky.signIn(secretKey: secretKey) } + func signIn(secretKey: String) -> [String] { Loopky.signIn(secretKey: secretKey, clientId: loopkyClientId) } func signOut(sessionSecret: String) -> [String] { Loopky.signOut(sessionSecret: sessionSecret) } @@ -61,7 +75,7 @@ final class IosPubkyClient: NSObject, RawPubkyClient { } func startAuthFlow(capabilities: String) -> [String] { - Loopky.startAuthFlow(capabilitiesStr: capabilities) + Loopky.startAuthFlow(capabilitiesStr: capabilities, clientId: loopkyClientId) } func awaitAuthApproval() -> [String] { Loopky.awaitAuthApproval() } @@ -83,14 +97,14 @@ final class IosPubkyClient: NSObject, RawPubkyClient { } func put(url: String, content: String, secretKey: String) -> [String] { - Loopky.put(url: url, content: content, secretKey: secretKey) + Loopky.put(url: url, content: content, secretKey: secretKey, clientId: loopkyClientId) } func putBytesBase64(url: String, contentBase64: String, secretKey: String) -> [String] { guard let data = Data(base64Encoded: contentBase64) else { return ["true", "Invalid Base64 payload"] } - return Loopky.putBytes(url: url, content: data, secretKey: secretKey) + return Loopky.putBytes(url: url, content: data, secretKey: secretKey, clientId: loopkyClientId) } func get(url: String) -> [String] { Loopky.get(url: url) } @@ -114,7 +128,7 @@ final class IosPubkyClient: NSObject, RawPubkyClient { } func deleteFile(url: String, secretKey: String) -> [String] { - Loopky.deleteFile(url: url, secretKey: secretKey) + Loopky.deleteFile(url: url, secretKey: secretKey, clientId: loopkyClientId) } func republishHomeserver(secretKey: String, homeserver: String) -> [String] { diff --git a/iosApp/iosApp/Pubky/pubkycore.swift b/iosApp/iosApp/Pubky/pubkycore.swift index 97b4c68f..63b27b3a 100644 --- a/iosApp/iosApp/Pubky/pubkycore.swift +++ b/iosApp/iosApp/Pubky/pubkycore.swift @@ -710,6 +710,22 @@ public func awaitAuthApproval() -> [String] { ) } +public func awaitCookieAuthApproval() -> [String] { + return try! FfiConverterSequenceString.lift( + try! rustCall { + uniffi_pubkycore_fn_func_await_cookie_auth_approval($0) + } + ) +} + +public func awaitGrantAuthApproval() -> [String] { + return try! FfiConverterSequenceString.lift( + try! rustCall { + uniffi_pubkycore_fn_func_await_grant_auth_approval($0) + } + ) +} + public func createRecoveryFile(secretKey: String, passphrase: String) -> [String] { return try! FfiConverterSequenceString.lift( try! rustCall { @@ -743,12 +759,13 @@ public func decryptRecoveryFile(recoveryFile: String, passphrase: String) -> [St ) } -public func deleteFile(url: String, secretKey: String) -> [String] { +public func deleteFile(url: String, secretKey: String, clientId: String) -> [String] { return try! FfiConverterSequenceString.lift( try! rustCall { uniffi_pubkycore_fn_func_delete_file( FfiConverterString.lower(url), - FfiConverterString.lower(secretKey), $0 + FfiConverterString.lower(secretKey), + FfiConverterString.lower(clientId), $0 ) } ) @@ -880,6 +897,16 @@ public func parseAuthUrl(url: String) -> [String] { ) } +public func parseDeepLink(url: String) -> [String] { + return try! FfiConverterSequenceString.lift( + try! rustCall { + uniffi_pubkycore_fn_func_parse_deep_link( + FfiConverterString.lower(url), $0 + ) + } + ) +} + public func publish(recordName: String, recordContent: String, secretKey: String) -> [String] { return try! FfiConverterSequenceString.lift( try! rustCall { @@ -904,25 +931,27 @@ public func publishHttps(recordName: String, target: String, secretKey: String) ) } -public func put(url: String, content: String, secretKey: String) -> [String] { +public func put(url: String, content: String, secretKey: String, clientId: String) -> [String] { return try! FfiConverterSequenceString.lift( try! rustCall { uniffi_pubkycore_fn_func_put( FfiConverterString.lower(url), FfiConverterString.lower(content), - FfiConverterString.lower(secretKey), $0 + FfiConverterString.lower(secretKey), + FfiConverterString.lower(clientId), $0 ) } ) } -public func putBytes(url: String, content: Data, secretKey: String) -> [String] { +public func putBytes(url: String, content: Data, secretKey: String, clientId: String) -> [String] { return try! FfiConverterSequenceString.lift( try! rustCall { uniffi_pubkycore_fn_func_put_bytes( FfiConverterString.lower(url), FfiConverterData.lower(content), - FfiConverterString.lower(secretKey), $0 + FfiConverterString.lower(secretKey), + FfiConverterString.lower(clientId), $0 ) } ) @@ -1007,16 +1036,38 @@ public func setEventListener(listener: EventListener) { } } -public func signIn(secretKey: String) -> [String] { +public func signIn(secretKey: String, clientId: String) -> [String] { return try! FfiConverterSequenceString.lift( try! rustCall { uniffi_pubkycore_fn_func_sign_in( + FfiConverterString.lower(secretKey), + FfiConverterString.lower(clientId), $0 + ) + } + ) +} + +public func signInCookie(secretKey: String) -> [String] { + return try! FfiConverterSequenceString.lift( + try! rustCall { + uniffi_pubkycore_fn_func_sign_in_cookie( FfiConverterString.lower(secretKey), $0 ) } ) } +public func signInGrant(secretKey: String, clientId: String) -> [String] { + return try! FfiConverterSequenceString.lift( + try! rustCall { + uniffi_pubkycore_fn_func_sign_in_grant( + FfiConverterString.lower(secretKey), + FfiConverterString.lower(clientId), $0 + ) + } + ) +} + public func signOut(sessionSecret: String) -> [String] { return try! FfiConverterSequenceString.lift( try! rustCall { @@ -1027,10 +1078,23 @@ public func signOut(sessionSecret: String) -> [String] { ) } -public func signUp(secretKey: String, homeserver: String, signupToken: String?) -> [String] { +public func signUp(secretKey: String, homeserver: String, signupToken: String?, clientId: String) -> [String] { return try! FfiConverterSequenceString.lift( try! rustCall { uniffi_pubkycore_fn_func_sign_up( + FfiConverterString.lower(secretKey), + FfiConverterString.lower(homeserver), + FfiConverterOptionString.lower(signupToken), + FfiConverterString.lower(clientId), $0 + ) + } + ) +} + +public func signUpCookie(secretKey: String, homeserver: String, signupToken: String?) -> [String] { + return try! FfiConverterSequenceString.lift( + try! rustCall { + uniffi_pubkycore_fn_func_sign_up_cookie( FfiConverterString.lower(secretKey), FfiConverterString.lower(homeserver), FfiConverterOptionString.lower(signupToken), $0 @@ -1039,16 +1103,51 @@ public func signUp(secretKey: String, homeserver: String, signupToken: String?) ) } -public func startAuthFlow(capabilitiesStr: String) -> [String] { +public func signUpGrant(secretKey: String, homeserver: String, signupToken: String?, clientId: String) -> [String] { + return try! FfiConverterSequenceString.lift( + try! rustCall { + uniffi_pubkycore_fn_func_sign_up_grant( + FfiConverterString.lower(secretKey), + FfiConverterString.lower(homeserver), + FfiConverterOptionString.lower(signupToken), + FfiConverterString.lower(clientId), $0 + ) + } + ) +} + +public func startAuthFlow(capabilitiesStr: String, clientId: String) -> [String] { return try! FfiConverterSequenceString.lift( try! rustCall { uniffi_pubkycore_fn_func_start_auth_flow( + FfiConverterString.lower(capabilitiesStr), + FfiConverterString.lower(clientId), $0 + ) + } + ) +} + +public func startCookieAuthFlow(capabilitiesStr: String) -> [String] { + return try! FfiConverterSequenceString.lift( + try! rustCall { + uniffi_pubkycore_fn_func_start_cookie_auth_flow( FfiConverterString.lower(capabilitiesStr), $0 ) } ) } +public func startGrantAuthFlow(capabilitiesStr: String, clientId: String) -> [String] { + return try! FfiConverterSequenceString.lift( + try! rustCall { + uniffi_pubkycore_fn_func_start_grant_auth_flow( + FfiConverterString.lower(capabilitiesStr), + FfiConverterString.lower(clientId), $0 + ) + } + ) +} + public func switchNetwork(useTestnet: Bool) -> [String] { return try! FfiConverterSequenceString.lift( try! rustCall { @@ -1091,6 +1190,12 @@ private var initializationResult: InitializationResult { if uniffi_pubkycore_checksum_func_await_auth_approval() != 56488 { return InitializationResult.apiChecksumMismatch } + if uniffi_pubkycore_checksum_func_await_cookie_auth_approval() != 44552 { + return InitializationResult.apiChecksumMismatch + } + if uniffi_pubkycore_checksum_func_await_grant_auth_approval() != 15252 { + return InitializationResult.apiChecksumMismatch + } if uniffi_pubkycore_checksum_func_create_recovery_file() != 48846 { return InitializationResult.apiChecksumMismatch } @@ -1100,7 +1205,7 @@ private var initializationResult: InitializationResult { if uniffi_pubkycore_checksum_func_decrypt_recovery_file() != 26407 { return InitializationResult.apiChecksumMismatch } - if uniffi_pubkycore_checksum_func_delete_file() != 47931 { + if uniffi_pubkycore_checksum_func_delete_file() != 43485 { return InitializationResult.apiChecksumMismatch } if uniffi_pubkycore_checksum_func_delete_with_session() != 26332 { @@ -1142,16 +1247,19 @@ private var initializationResult: InitializationResult { if uniffi_pubkycore_checksum_func_parse_auth_url() != 27379 { return InitializationResult.apiChecksumMismatch } + if uniffi_pubkycore_checksum_func_parse_deep_link() != 29971 { + return InitializationResult.apiChecksumMismatch + } if uniffi_pubkycore_checksum_func_publish() != 48989 { return InitializationResult.apiChecksumMismatch } if uniffi_pubkycore_checksum_func_publish_https() != 5614 { return InitializationResult.apiChecksumMismatch } - if uniffi_pubkycore_checksum_func_put() != 64514 { + if uniffi_pubkycore_checksum_func_put() != 32173 { return InitializationResult.apiChecksumMismatch } - if uniffi_pubkycore_checksum_func_put_bytes() != 16335 { + if uniffi_pubkycore_checksum_func_put_bytes() != 47888 { return InitializationResult.apiChecksumMismatch } if uniffi_pubkycore_checksum_func_put_bytes_with_session() != 50346 { @@ -1178,16 +1286,34 @@ private var initializationResult: InitializationResult { if uniffi_pubkycore_checksum_func_set_event_listener() != 60071 { return InitializationResult.apiChecksumMismatch } - if uniffi_pubkycore_checksum_func_sign_in() != 21584 { + if uniffi_pubkycore_checksum_func_sign_in() != 23529 { + return InitializationResult.apiChecksumMismatch + } + if uniffi_pubkycore_checksum_func_sign_in_cookie() != 28058 { + return InitializationResult.apiChecksumMismatch + } + if uniffi_pubkycore_checksum_func_sign_in_grant() != 49219 { return InitializationResult.apiChecksumMismatch } if uniffi_pubkycore_checksum_func_sign_out() != 27163 { return InitializationResult.apiChecksumMismatch } - if uniffi_pubkycore_checksum_func_sign_up() != 48789 { + if uniffi_pubkycore_checksum_func_sign_up() != 6399 { + return InitializationResult.apiChecksumMismatch + } + if uniffi_pubkycore_checksum_func_sign_up_cookie() != 55185 { + return InitializationResult.apiChecksumMismatch + } + if uniffi_pubkycore_checksum_func_sign_up_grant() != 65298 { + return InitializationResult.apiChecksumMismatch + } + if uniffi_pubkycore_checksum_func_start_auth_flow() != 45230 { + return InitializationResult.apiChecksumMismatch + } + if uniffi_pubkycore_checksum_func_start_cookie_auth_flow() != 49536 { return InitializationResult.apiChecksumMismatch } - if uniffi_pubkycore_checksum_func_start_auth_flow() != 25681 { + if uniffi_pubkycore_checksum_func_start_grant_auth_flow() != 48937 { return InitializationResult.apiChecksumMismatch } if uniffi_pubkycore_checksum_func_switch_network() != 64215 { diff --git a/shared/src/androidMain/jniLibs/arm64-v8a/libpubkycore.so b/shared/src/androidMain/jniLibs/arm64-v8a/libpubkycore.so index b8702bd1..d5c6c84f 100755 Binary files a/shared/src/androidMain/jniLibs/arm64-v8a/libpubkycore.so and b/shared/src/androidMain/jniLibs/arm64-v8a/libpubkycore.so differ diff --git a/shared/src/androidMain/jniLibs/armeabi-v7a/libpubkycore.so b/shared/src/androidMain/jniLibs/armeabi-v7a/libpubkycore.so index 56f31334..4568a25d 100755 Binary files a/shared/src/androidMain/jniLibs/armeabi-v7a/libpubkycore.so and b/shared/src/androidMain/jniLibs/armeabi-v7a/libpubkycore.so differ diff --git a/shared/src/androidMain/jniLibs/x86/libpubkycore.so b/shared/src/androidMain/jniLibs/x86/libpubkycore.so index 742cf467..01debc5f 100755 Binary files a/shared/src/androidMain/jniLibs/x86/libpubkycore.so and b/shared/src/androidMain/jniLibs/x86/libpubkycore.so differ diff --git a/shared/src/androidMain/jniLibs/x86_64/libpubkycore.so b/shared/src/androidMain/jniLibs/x86_64/libpubkycore.so index fa3a4e0f..44a0bd26 100755 Binary files a/shared/src/androidMain/jniLibs/x86_64/libpubkycore.so and b/shared/src/androidMain/jniLibs/x86_64/libpubkycore.so differ diff --git a/shared/src/androidMain/kotlin/com/github/jvsena42/loopky/data/pubky/AndroidPubkyClient.kt b/shared/src/androidMain/kotlin/com/github/jvsena42/loopky/data/pubky/AndroidPubkyClient.kt index ab68a715..c154002d 100644 --- a/shared/src/androidMain/kotlin/com/github/jvsena42/loopky/data/pubky/AndroidPubkyClient.kt +++ b/shared/src/androidMain/kotlin/com/github/jvsena42/loopky/data/pubky/AndroidPubkyClient.kt @@ -37,6 +37,18 @@ import uniffi.pubkycore.startAuthFlow as ffiStartAuthFlow import uniffi.pubkycore.switchNetwork as ffiSwitchNetwork import uniffi.pubkycore.validateMnemonicPhrase as ffiValidateMnemonicPhrase +/** + * Which application the homeserver is being told it is talking to, required by pubky 0.10's + * `ClientId` on every sign-in, sign-up, auth flow and secret-key write. + * + * The type wants a domain string (its own example is `franky.pubky.app`), non-empty and at most + * 253 characters — not the Android application id, which is what makes this a constant here + * rather than something derived from `BuildConfig`. It travels to the homeserver, so treat it as + * a public, stable name for Loopky and not as a build-variant knob: staging and release identify + * as the same client on purpose. + */ +private const val LOOPKY_CLIENT_ID = "loopky.app" + /** * Android implementation of [PubkyClient] delegating to the UniFFI-generated Kotlin * bindings in `uniffi.pubkycore`. JNI libraries are shipped in `shared/androidMain/jniLibs`. @@ -76,12 +88,14 @@ class AndroidPubkyClient : PubkyClient { secretKey: String, homeserver: String, signupToken: String?, - ) = runFfiSuspend { ffiSignUp(secretKey, homeserver, signupToken) } + ) = runFfiSuspend { ffiSignUp(secretKey, homeserver, signupToken, LOOPKY_CLIENT_ID) } override suspend fun getSignupToken(homeserverPubky: String, adminPassword: String) = runFfiSuspend { ffiGetSignupToken(homeserverPubky, adminPassword) } - override suspend fun signIn(secretKey: String) = runFfiSuspend { ffiSignIn(secretKey) } + override suspend fun signIn(secretKey: String) = + runFfiSuspend { ffiSignIn(secretKey, LOOPKY_CLIENT_ID) } + override suspend fun signOut(sessionSecret: String) = runFfiSuspend { ffiSignOut(sessionSecret) } @@ -89,7 +103,7 @@ class AndroidPubkyClient : PubkyClient { runFfiSuspend { ffiRevalidateSession(sessionSecret) } override suspend fun startAuthFlow(capabilities: String) = - runFfiSuspend { ffiStartAuthFlow(capabilities) } + runFfiSuspend { ffiStartAuthFlow(capabilities, LOOPKY_CLIENT_ID) } override suspend fun awaitAuthApproval() = runFfiSuspend { ffiAwaitAuthApproval() } override fun parseAuthUrl(url: String) = runFfi { ffiParseAuthUrl(url) } @@ -104,10 +118,10 @@ class AndroidPubkyClient : PubkyClient { runFfiSuspend { ffiPublishHttps(recordName, target, secretKey) } override suspend fun put(url: String, content: String, secretKey: String) = - runFfiSuspend { ffiPut(url, content, secretKey) } + runFfiSuspend { ffiPut(url, content, secretKey, LOOPKY_CLIENT_ID) } override suspend fun putBytes(url: String, content: ByteArray, secretKey: String) = - runFfiSuspend { ffiPutBytes(url, content, secretKey) } + runFfiSuspend { ffiPutBytes(url, content, secretKey, LOOPKY_CLIENT_ID) } override suspend fun get(url: String) = runFfiSuspend { ffiGet(url) } override suspend fun getBytes(url: String) = runFfiSuspend { ffiGetBytes(url) } @@ -120,7 +134,7 @@ class AndroidPubkyClient : PubkyClient { ) = runFfiSuspend { ffiList(url, cursor, reverse, limit, shallow) } override suspend fun deleteFile(url: String, secretKey: String) = - runFfiSuspend { ffiDeleteFile(url, secretKey) } + runFfiSuspend { ffiDeleteFile(url, secretKey, LOOPKY_CLIENT_ID) } override suspend fun republishHomeserver(secretKey: String, homeserver: String) = runFfiSuspend { ffiRepublishHomeserver(secretKey, homeserver) } diff --git a/shared/src/androidMain/kotlin/uniffi/pubkycore/pubkycore.kt b/shared/src/androidMain/kotlin/uniffi/pubkycore/pubkycore.kt index c539ffb5..8af28cf9 100644 --- a/shared/src/androidMain/kotlin/uniffi/pubkycore/pubkycore.kt +++ b/shared/src/androidMain/kotlin/uniffi/pubkycore/pubkycore.kt @@ -394,13 +394,17 @@ internal interface _UniFFILib : Library { ): RustBuffer.ByValue fun uniffi_pubkycore_fn_func_await_auth_approval(_uniffi_out_err: RustCallStatus, ): RustBuffer.ByValue + fun uniffi_pubkycore_fn_func_await_cookie_auth_approval(_uniffi_out_err: RustCallStatus, + ): RustBuffer.ByValue + fun uniffi_pubkycore_fn_func_await_grant_auth_approval(_uniffi_out_err: RustCallStatus, + ): RustBuffer.ByValue fun uniffi_pubkycore_fn_func_create_recovery_file(`secretKey`: RustBuffer.ByValue,`passphrase`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, ): RustBuffer.ByValue fun uniffi_pubkycore_fn_func_create_tag_id(`uri`: RustBuffer.ByValue,`label`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, ): RustBuffer.ByValue fun uniffi_pubkycore_fn_func_decrypt_recovery_file(`recoveryFile`: RustBuffer.ByValue,`passphrase`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, ): RustBuffer.ByValue - fun uniffi_pubkycore_fn_func_delete_file(`url`: RustBuffer.ByValue,`secretKey`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, + fun uniffi_pubkycore_fn_func_delete_file(`url`: RustBuffer.ByValue,`secretKey`: RustBuffer.ByValue,`clientId`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, ): RustBuffer.ByValue fun uniffi_pubkycore_fn_func_delete_with_session(`url`: RustBuffer.ByValue,`sessionSecret`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, ): RustBuffer.ByValue @@ -428,13 +432,15 @@ internal interface _UniFFILib : Library { ): RustBuffer.ByValue fun uniffi_pubkycore_fn_func_parse_auth_url(`url`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, ): RustBuffer.ByValue + fun uniffi_pubkycore_fn_func_parse_deep_link(`url`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, + ): RustBuffer.ByValue fun uniffi_pubkycore_fn_func_publish(`recordName`: RustBuffer.ByValue,`recordContent`: RustBuffer.ByValue,`secretKey`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, ): RustBuffer.ByValue fun uniffi_pubkycore_fn_func_publish_https(`recordName`: RustBuffer.ByValue,`target`: RustBuffer.ByValue,`secretKey`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, ): RustBuffer.ByValue - fun uniffi_pubkycore_fn_func_put(`url`: RustBuffer.ByValue,`content`: RustBuffer.ByValue,`secretKey`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, + fun uniffi_pubkycore_fn_func_put(`url`: RustBuffer.ByValue,`content`: RustBuffer.ByValue,`secretKey`: RustBuffer.ByValue,`clientId`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, ): RustBuffer.ByValue - fun uniffi_pubkycore_fn_func_put_bytes(`url`: RustBuffer.ByValue,`content`: RustBuffer.ByValue,`secretKey`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, + fun uniffi_pubkycore_fn_func_put_bytes(`url`: RustBuffer.ByValue,`content`: RustBuffer.ByValue,`secretKey`: RustBuffer.ByValue,`clientId`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, ): RustBuffer.ByValue fun uniffi_pubkycore_fn_func_put_bytes_with_session(`url`: RustBuffer.ByValue,`content`: RustBuffer.ByValue,`sessionSecret`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, ): RustBuffer.ByValue @@ -452,13 +458,25 @@ internal interface _UniFFILib : Library { ): RustBuffer.ByValue fun uniffi_pubkycore_fn_func_set_event_listener(`listener`: Long,_uniffi_out_err: RustCallStatus, ): Unit - fun uniffi_pubkycore_fn_func_sign_in(`secretKey`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, + fun uniffi_pubkycore_fn_func_sign_in(`secretKey`: RustBuffer.ByValue,`clientId`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, + ): RustBuffer.ByValue + fun uniffi_pubkycore_fn_func_sign_in_cookie(`secretKey`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, + ): RustBuffer.ByValue + fun uniffi_pubkycore_fn_func_sign_in_grant(`secretKey`: RustBuffer.ByValue,`clientId`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, ): RustBuffer.ByValue fun uniffi_pubkycore_fn_func_sign_out(`sessionSecret`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, ): RustBuffer.ByValue - fun uniffi_pubkycore_fn_func_sign_up(`secretKey`: RustBuffer.ByValue,`homeserver`: RustBuffer.ByValue,`signupToken`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, + fun uniffi_pubkycore_fn_func_sign_up(`secretKey`: RustBuffer.ByValue,`homeserver`: RustBuffer.ByValue,`signupToken`: RustBuffer.ByValue,`clientId`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, + ): RustBuffer.ByValue + fun uniffi_pubkycore_fn_func_sign_up_cookie(`secretKey`: RustBuffer.ByValue,`homeserver`: RustBuffer.ByValue,`signupToken`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, ): RustBuffer.ByValue - fun uniffi_pubkycore_fn_func_start_auth_flow(`capabilitiesStr`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, + fun uniffi_pubkycore_fn_func_sign_up_grant(`secretKey`: RustBuffer.ByValue,`homeserver`: RustBuffer.ByValue,`signupToken`: RustBuffer.ByValue,`clientId`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, + ): RustBuffer.ByValue + fun uniffi_pubkycore_fn_func_start_auth_flow(`capabilitiesStr`: RustBuffer.ByValue,`clientId`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, + ): RustBuffer.ByValue + fun uniffi_pubkycore_fn_func_start_cookie_auth_flow(`capabilitiesStr`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, + ): RustBuffer.ByValue + fun uniffi_pubkycore_fn_func_start_grant_auth_flow(`capabilitiesStr`: RustBuffer.ByValue,`clientId`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus, ): RustBuffer.ByValue fun uniffi_pubkycore_fn_func_switch_network(`useTestnet`: Byte,_uniffi_out_err: RustCallStatus, ): RustBuffer.ByValue @@ -582,6 +600,10 @@ internal interface _UniFFILib : Library { ): Short fun uniffi_pubkycore_checksum_func_await_auth_approval( ): Short + fun uniffi_pubkycore_checksum_func_await_cookie_auth_approval( + ): Short + fun uniffi_pubkycore_checksum_func_await_grant_auth_approval( + ): Short fun uniffi_pubkycore_checksum_func_create_recovery_file( ): Short fun uniffi_pubkycore_checksum_func_create_tag_id( @@ -616,6 +638,8 @@ internal interface _UniFFILib : Library { ): Short fun uniffi_pubkycore_checksum_func_parse_auth_url( ): Short + fun uniffi_pubkycore_checksum_func_parse_deep_link( + ): Short fun uniffi_pubkycore_checksum_func_publish( ): Short fun uniffi_pubkycore_checksum_func_publish_https( @@ -642,12 +666,24 @@ internal interface _UniFFILib : Library { ): Short fun uniffi_pubkycore_checksum_func_sign_in( ): Short + fun uniffi_pubkycore_checksum_func_sign_in_cookie( + ): Short + fun uniffi_pubkycore_checksum_func_sign_in_grant( + ): Short fun uniffi_pubkycore_checksum_func_sign_out( ): Short fun uniffi_pubkycore_checksum_func_sign_up( ): Short + fun uniffi_pubkycore_checksum_func_sign_up_cookie( + ): Short + fun uniffi_pubkycore_checksum_func_sign_up_grant( + ): Short fun uniffi_pubkycore_checksum_func_start_auth_flow( ): Short + fun uniffi_pubkycore_checksum_func_start_cookie_auth_flow( + ): Short + fun uniffi_pubkycore_checksum_func_start_grant_auth_flow( + ): Short fun uniffi_pubkycore_checksum_func_switch_network( ): Short fun uniffi_pubkycore_checksum_func_validate_mnemonic_phrase( @@ -677,6 +713,12 @@ private fun uniffiCheckApiChecksums(lib: _UniFFILib) { if (lib.uniffi_pubkycore_checksum_func_await_auth_approval() != 56488.toShort()) { throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project") } + if (lib.uniffi_pubkycore_checksum_func_await_cookie_auth_approval() != 44552.toShort()) { + throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project") + } + if (lib.uniffi_pubkycore_checksum_func_await_grant_auth_approval() != 15252.toShort()) { + throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project") + } if (lib.uniffi_pubkycore_checksum_func_create_recovery_file() != 48846.toShort()) { throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project") } @@ -686,7 +728,7 @@ private fun uniffiCheckApiChecksums(lib: _UniFFILib) { if (lib.uniffi_pubkycore_checksum_func_decrypt_recovery_file() != 26407.toShort()) { throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project") } - if (lib.uniffi_pubkycore_checksum_func_delete_file() != 47931.toShort()) { + if (lib.uniffi_pubkycore_checksum_func_delete_file() != 43485.toShort()) { throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project") } if (lib.uniffi_pubkycore_checksum_func_delete_with_session() != 26332.toShort()) { @@ -728,16 +770,19 @@ private fun uniffiCheckApiChecksums(lib: _UniFFILib) { if (lib.uniffi_pubkycore_checksum_func_parse_auth_url() != 27379.toShort()) { throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project") } + if (lib.uniffi_pubkycore_checksum_func_parse_deep_link() != 29971.toShort()) { + throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project") + } if (lib.uniffi_pubkycore_checksum_func_publish() != 48989.toShort()) { throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project") } if (lib.uniffi_pubkycore_checksum_func_publish_https() != 5614.toShort()) { throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project") } - if (lib.uniffi_pubkycore_checksum_func_put() != 64514.toShort()) { + if (lib.uniffi_pubkycore_checksum_func_put() != 32173.toShort()) { throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project") } - if (lib.uniffi_pubkycore_checksum_func_put_bytes() != 16335.toShort()) { + if (lib.uniffi_pubkycore_checksum_func_put_bytes() != 47888.toShort()) { throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project") } if (lib.uniffi_pubkycore_checksum_func_put_bytes_with_session() != 50346.toShort()) { @@ -764,16 +809,34 @@ private fun uniffiCheckApiChecksums(lib: _UniFFILib) { if (lib.uniffi_pubkycore_checksum_func_set_event_listener() != 60071.toShort()) { throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project") } - if (lib.uniffi_pubkycore_checksum_func_sign_in() != 21584.toShort()) { + if (lib.uniffi_pubkycore_checksum_func_sign_in() != 23529.toShort()) { + throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project") + } + if (lib.uniffi_pubkycore_checksum_func_sign_in_cookie() != 28058.toShort()) { + throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project") + } + if (lib.uniffi_pubkycore_checksum_func_sign_in_grant() != 49219.toShort()) { throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project") } if (lib.uniffi_pubkycore_checksum_func_sign_out() != 27163.toShort()) { throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project") } - if (lib.uniffi_pubkycore_checksum_func_sign_up() != 48789.toShort()) { + if (lib.uniffi_pubkycore_checksum_func_sign_up() != 6399.toShort()) { + throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project") + } + if (lib.uniffi_pubkycore_checksum_func_sign_up_cookie() != 55185.toShort()) { + throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project") + } + if (lib.uniffi_pubkycore_checksum_func_sign_up_grant() != 65298.toShort()) { + throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project") + } + if (lib.uniffi_pubkycore_checksum_func_start_auth_flow() != 45230.toShort()) { throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project") } - if (lib.uniffi_pubkycore_checksum_func_start_auth_flow() != 25681.toShort()) { + if (lib.uniffi_pubkycore_checksum_func_start_cookie_auth_flow() != 49536.toShort()) { + throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project") + } + if (lib.uniffi_pubkycore_checksum_func_start_grant_auth_flow() != 48937.toShort()) { throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project") } if (lib.uniffi_pubkycore_checksum_func_switch_network() != 64215.toShort()) { @@ -1408,6 +1471,22 @@ fun `awaitAuthApproval`(): List { } +fun `awaitCookieAuthApproval`(): List { + return FfiConverterSequenceString.lift( + rustCall() { _status -> + _UniFFILib.INSTANCE.uniffi_pubkycore_fn_func_await_cookie_auth_approval(_status) +}) +} + + +fun `awaitGrantAuthApproval`(): List { + return FfiConverterSequenceString.lift( + rustCall() { _status -> + _UniFFILib.INSTANCE.uniffi_pubkycore_fn_func_await_grant_auth_approval(_status) +}) +} + + fun `createRecoveryFile`(`secretKey`: String, `passphrase`: String): List { return FfiConverterSequenceString.lift( rustCall() { _status -> @@ -1432,10 +1511,10 @@ fun `decryptRecoveryFile`(`recoveryFile`: String, `passphrase`: String): List { +fun `deleteFile`(`url`: String, `secretKey`: String, `clientId`: String): List { return FfiConverterSequenceString.lift( rustCall() { _status -> - _UniFFILib.INSTANCE.uniffi_pubkycore_fn_func_delete_file(FfiConverterString.lower(`url`),FfiConverterString.lower(`secretKey`),_status) + _UniFFILib.INSTANCE.uniffi_pubkycore_fn_func_delete_file(FfiConverterString.lower(`url`),FfiConverterString.lower(`secretKey`),FfiConverterString.lower(`clientId`),_status) }) } @@ -1544,6 +1623,14 @@ fun `parseAuthUrl`(`url`: String): List { } +fun `parseDeepLink`(`url`: String): List { + return FfiConverterSequenceString.lift( + rustCall() { _status -> + _UniFFILib.INSTANCE.uniffi_pubkycore_fn_func_parse_deep_link(FfiConverterString.lower(`url`),_status) +}) +} + + fun `publish`(`recordName`: String, `recordContent`: String, `secretKey`: String): List { return FfiConverterSequenceString.lift( rustCall() { _status -> @@ -1560,18 +1647,18 @@ fun `publishHttps`(`recordName`: String, `target`: String, `secretKey`: String): } -fun `put`(`url`: String, `content`: String, `secretKey`: String): List { +fun `put`(`url`: String, `content`: String, `secretKey`: String, `clientId`: String): List { return FfiConverterSequenceString.lift( rustCall() { _status -> - _UniFFILib.INSTANCE.uniffi_pubkycore_fn_func_put(FfiConverterString.lower(`url`),FfiConverterString.lower(`content`),FfiConverterString.lower(`secretKey`),_status) + _UniFFILib.INSTANCE.uniffi_pubkycore_fn_func_put(FfiConverterString.lower(`url`),FfiConverterString.lower(`content`),FfiConverterString.lower(`secretKey`),FfiConverterString.lower(`clientId`),_status) }) } -fun `putBytes`(`url`: String, `content`: ByteArray, `secretKey`: String): List { +fun `putBytes`(`url`: String, `content`: ByteArray, `secretKey`: String, `clientId`: String): List { return FfiConverterSequenceString.lift( rustCall() { _status -> - _UniFFILib.INSTANCE.uniffi_pubkycore_fn_func_put_bytes(FfiConverterString.lower(`url`),FfiConverterByteArray.lower(`content`),FfiConverterString.lower(`secretKey`),_status) + _UniFFILib.INSTANCE.uniffi_pubkycore_fn_func_put_bytes(FfiConverterString.lower(`url`),FfiConverterByteArray.lower(`content`),FfiConverterString.lower(`secretKey`),FfiConverterString.lower(`clientId`),_status) }) } @@ -1640,10 +1727,26 @@ fun `setEventListener`(`listener`: EventListener) = -fun `signIn`(`secretKey`: String): List { +fun `signIn`(`secretKey`: String, `clientId`: String): List { return FfiConverterSequenceString.lift( rustCall() { _status -> - _UniFFILib.INSTANCE.uniffi_pubkycore_fn_func_sign_in(FfiConverterString.lower(`secretKey`),_status) + _UniFFILib.INSTANCE.uniffi_pubkycore_fn_func_sign_in(FfiConverterString.lower(`secretKey`),FfiConverterString.lower(`clientId`),_status) +}) +} + + +fun `signInCookie`(`secretKey`: String): List { + return FfiConverterSequenceString.lift( + rustCall() { _status -> + _UniFFILib.INSTANCE.uniffi_pubkycore_fn_func_sign_in_cookie(FfiConverterString.lower(`secretKey`),_status) +}) +} + + +fun `signInGrant`(`secretKey`: String, `clientId`: String): List { + return FfiConverterSequenceString.lift( + rustCall() { _status -> + _UniFFILib.INSTANCE.uniffi_pubkycore_fn_func_sign_in_grant(FfiConverterString.lower(`secretKey`),FfiConverterString.lower(`clientId`),_status) }) } @@ -1656,18 +1759,50 @@ fun `signOut`(`sessionSecret`: String): List { } -fun `signUp`(`secretKey`: String, `homeserver`: String, `signupToken`: String?): List { +fun `signUp`(`secretKey`: String, `homeserver`: String, `signupToken`: String?, `clientId`: String): List { + return FfiConverterSequenceString.lift( + rustCall() { _status -> + _UniFFILib.INSTANCE.uniffi_pubkycore_fn_func_sign_up(FfiConverterString.lower(`secretKey`),FfiConverterString.lower(`homeserver`),FfiConverterOptionalString.lower(`signupToken`),FfiConverterString.lower(`clientId`),_status) +}) +} + + +fun `signUpCookie`(`secretKey`: String, `homeserver`: String, `signupToken`: String?): List { + return FfiConverterSequenceString.lift( + rustCall() { _status -> + _UniFFILib.INSTANCE.uniffi_pubkycore_fn_func_sign_up_cookie(FfiConverterString.lower(`secretKey`),FfiConverterString.lower(`homeserver`),FfiConverterOptionalString.lower(`signupToken`),_status) +}) +} + + +fun `signUpGrant`(`secretKey`: String, `homeserver`: String, `signupToken`: String?, `clientId`: String): List { + return FfiConverterSequenceString.lift( + rustCall() { _status -> + _UniFFILib.INSTANCE.uniffi_pubkycore_fn_func_sign_up_grant(FfiConverterString.lower(`secretKey`),FfiConverterString.lower(`homeserver`),FfiConverterOptionalString.lower(`signupToken`),FfiConverterString.lower(`clientId`),_status) +}) +} + + +fun `startAuthFlow`(`capabilitiesStr`: String, `clientId`: String): List { + return FfiConverterSequenceString.lift( + rustCall() { _status -> + _UniFFILib.INSTANCE.uniffi_pubkycore_fn_func_start_auth_flow(FfiConverterString.lower(`capabilitiesStr`),FfiConverterString.lower(`clientId`),_status) +}) +} + + +fun `startCookieAuthFlow`(`capabilitiesStr`: String): List { return FfiConverterSequenceString.lift( rustCall() { _status -> - _UniFFILib.INSTANCE.uniffi_pubkycore_fn_func_sign_up(FfiConverterString.lower(`secretKey`),FfiConverterString.lower(`homeserver`),FfiConverterOptionalString.lower(`signupToken`),_status) + _UniFFILib.INSTANCE.uniffi_pubkycore_fn_func_start_cookie_auth_flow(FfiConverterString.lower(`capabilitiesStr`),_status) }) } -fun `startAuthFlow`(`capabilitiesStr`: String): List { +fun `startGrantAuthFlow`(`capabilitiesStr`: String, `clientId`: String): List { return FfiConverterSequenceString.lift( rustCall() { _status -> - _UniFFILib.INSTANCE.uniffi_pubkycore_fn_func_start_auth_flow(FfiConverterString.lower(`capabilitiesStr`),_status) + _UniFFILib.INSTANCE.uniffi_pubkycore_fn_func_start_grant_auth_flow(FfiConverterString.lower(`capabilitiesStr`),FfiConverterString.lower(`clientId`),_status) }) }