diff --git a/lib/bindings/langs/flutter/breez_sdk_liquid/include/breez_sdk_liquid.h b/lib/bindings/langs/flutter/breez_sdk_liquid/include/breez_sdk_liquid.h index d3f1601..d02b1bd 100644 --- a/lib/bindings/langs/flutter/breez_sdk_liquid/include/breez_sdk_liquid.h +++ b/lib/bindings/langs/flutter/breez_sdk_liquid/include/breez_sdk_liquid.h @@ -447,8 +447,8 @@ typedef struct wire_cst_config { } wire_cst_config; typedef struct wire_cst_connect_request { - struct wire_cst_list_prim_u_8_strict *mnemonic; struct wire_cst_config config; + struct wire_cst_list_prim_u_8_strict *mnemonic; } wire_cst_connect_request; typedef struct wire_cst_aes_success_action_data_decrypted { diff --git a/lib/bindings/src/breez_sdk_liquid.udl b/lib/bindings/src/breez_sdk_liquid.udl index 86c557b..2902675 100644 --- a/lib/bindings/src/breez_sdk_liquid.udl +++ b/lib/bindings/src/breez_sdk_liquid.udl @@ -320,10 +320,14 @@ enum LiquidNetwork { }; dictionary ConnectRequest { - Config config; + Config config; string mnemonic; }; +dictionary ConnectWithSignerRequest { + Config config; +}; + dictionary GetInfoResponse { u64 balance_sat; u64 pending_send_sat; @@ -601,6 +605,9 @@ namespace breez_sdk_liquid { [Throws=SdkError] BindingLiquidSdk connect(ConnectRequest req); + [Throws=SdkError] + BindingLiquidSdk connect_with_signer(ConnectWithSignerRequest req, Signer signer); + [Throws=SdkError] void set_logger(Logger logger); @@ -614,6 +621,31 @@ namespace breez_sdk_liquid { LNInvoice parse_invoice(string input); }; +[Error] +interface SignerError { + Generic(string err); +}; + +callback interface Signer { + [Throws=SignerError] + sequence xpub(); + + [Throws=SignerError] + sequence derive_xpub(string derivation_path); + + [Throws=SignerError] + sequence sign_ecdsa(sequence msg, string derivation_path); + + [Throws=SignerError] + sequence sign_ecdsa_recoverable(sequence msg); + + [Throws=SignerError] + sequence slip77_master_blinding_key(); + + [Throws=SignerError] + sequence hmac_sha256(sequence msg, string derivation_path); +}; + interface BindingLiquidSdk { [Throws=SdkError] string add_event_listener(EventListener listener); diff --git a/lib/bindings/src/lib.rs b/lib/bindings/src/lib.rs index 9dd5e0c..5653934 100644 --- a/lib/bindings/src/lib.rs +++ b/lib/bindings/src/lib.rs @@ -54,6 +54,16 @@ pub fn connect(req: ConnectRequest) -> Result, SdkError> { }) } +pub fn connect_with_signer( + req: ConnectWithSignerRequest, + signer: Box, +) -> Result, SdkError> { + rt().block_on(async { + let sdk = LiquidSdk::connect_with_signer(req, signer).await?; + Ok(Arc::from(BindingLiquidSdk { sdk })) + }) +} + pub fn default_config( network: LiquidNetwork, breez_api_key: Option, diff --git a/packages/dart/lib/src/frb_generated.dart b/packages/dart/lib/src/frb_generated.dart index 3c56a0f..a382c9d 100644 --- a/packages/dart/lib/src/frb_generated.dart +++ b/packages/dart/lib/src/frb_generated.dart @@ -1666,8 +1666,8 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { final arr = raw as List; if (arr.length != 2) throw Exception('unexpected arr length: expect 2 but see ${arr.length}'); return ConnectRequest( - mnemonic: dco_decode_String(arr[0]), - config: dco_decode_config(arr[1]), + config: dco_decode_config(arr[0]), + mnemonic: dco_decode_String(arr[1]), ); } @@ -3442,9 +3442,9 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { @protected ConnectRequest sse_decode_connect_request(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs - var var_mnemonic = sse_decode_String(deserializer); var var_config = sse_decode_config(deserializer); - return ConnectRequest(mnemonic: var_mnemonic, config: var_config); + var var_mnemonic = sse_decode_String(deserializer); + return ConnectRequest(config: var_config, mnemonic: var_mnemonic); } @protected @@ -5330,8 +5330,8 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { @protected void sse_encode_connect_request(ConnectRequest self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs - sse_encode_String(self.mnemonic, serializer); sse_encode_config(self.config, serializer); + sse_encode_String(self.mnemonic, serializer); } @protected diff --git a/packages/dart/lib/src/frb_generated.io.dart b/packages/dart/lib/src/frb_generated.io.dart index 4fa8697..d5f2bf4 100644 --- a/packages/dart/lib/src/frb_generated.io.dart +++ b/packages/dart/lib/src/frb_generated.io.dart @@ -2003,8 +2003,8 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected void cst_api_fill_to_wire_connect_request(ConnectRequest apiObj, wire_cst_connect_request wireObj) { - wireObj.mnemonic = cst_encode_String(apiObj.mnemonic); cst_api_fill_to_wire_config(apiObj.config, wireObj.config); + wireObj.mnemonic = cst_encode_String(apiObj.mnemonic); } @protected @@ -5580,9 +5580,9 @@ final class wire_cst_config extends ffi.Struct { } final class wire_cst_connect_request extends ffi.Struct { - external ffi.Pointer mnemonic; - external wire_cst_config config; + + external ffi.Pointer mnemonic; } final class wire_cst_aes_success_action_data_decrypted extends ffi.Struct { diff --git a/packages/dart/lib/src/lib.dart b/packages/dart/lib/src/lib.dart new file mode 100644 index 0000000..fb0def6 --- /dev/null +++ b/packages/dart/lib/src/lib.dart @@ -0,0 +1,10 @@ +// This file is automatically generated, so please do not edit it. +// @generated by `flutter_rust_bridge`@ 2.4.0. + +// ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import + +import 'frb_generated.dart'; +import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart'; + +// Rust type: RustOpaqueNom >>> +abstract class ArcBoxSigner implements RustOpaqueInterface {} diff --git a/packages/dart/lib/src/model.dart b/packages/dart/lib/src/model.dart index 86caddb..bc2ea5c 100644 --- a/packages/dart/lib/src/model.dart +++ b/packages/dart/lib/src/model.dart @@ -180,24 +180,24 @@ class Config { /// An argument when calling [crate::sdk::LiquidSdk::connect]. class ConnectRequest { - final String mnemonic; final Config config; + final String mnemonic; const ConnectRequest({ - required this.mnemonic, required this.config, + required this.mnemonic, }); @override - int get hashCode => mnemonic.hashCode ^ config.hashCode; + int get hashCode => config.hashCode ^ mnemonic.hashCode; @override bool operator ==(Object other) => identical(this, other) || other is ConnectRequest && runtimeType == other.runtimeType && - mnemonic == other.mnemonic && - config == other.config; + config == other.config && + mnemonic == other.mnemonic; } /// Returned when calling [crate::sdk::LiquidSdk::get_info]. diff --git a/packages/flutter/lib/flutter_breez_liquid_bindings_generated.dart b/packages/flutter/lib/flutter_breez_liquid_bindings_generated.dart index a7d64b8..f1efd2b 100644 --- a/packages/flutter/lib/flutter_breez_liquid_bindings_generated.dart +++ b/packages/flutter/lib/flutter_breez_liquid_bindings_generated.dart @@ -4267,9 +4267,9 @@ final class wire_cst_config extends ffi.Struct { } final class wire_cst_connect_request extends ffi.Struct { - external ffi.Pointer mnemonic; - external wire_cst_config config; + + external ffi.Pointer mnemonic; } final class wire_cst_aes_success_action_data_decrypted extends ffi.Struct {