From 43a2000dc764109e0026a20770bb53a550a79aa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Granh=C3=A3o?= Date: Thu, 6 Feb 2025 13:56:53 +0000 Subject: [PATCH 1/2] sdk-common: Expose if BIP353 is used for parsing --- libs/sdk-bindings/src/breez_sdk.udl | 2 +- libs/sdk-common/src/input_parser.rs | 63 ++++++++++---- libs/sdk-core/src/binding.rs | 33 ++++++-- libs/sdk-core/src/bridge_generated.rs | 15 +++- libs/sdk-flutter/lib/bridge_generated.dart | 2 + .../lib/bridge_generated.freezed.dart | 82 +++++++++++-------- .../main/java/com/breezsdk/BreezSDKMapper.kt | 1 + .../sdk-react-native/ios/BreezSDKMapper.swift | 3 +- libs/sdk-react-native/src/index.ts | 1 + tools/sdk-cli/src/command_handlers.rs | 2 +- 10 files changed, 137 insertions(+), 67 deletions(-) diff --git a/libs/sdk-bindings/src/breez_sdk.udl b/libs/sdk-bindings/src/breez_sdk.udl index 6e78ff4fe..a2ebd0447 100644 --- a/libs/sdk-bindings/src/breez_sdk.udl +++ b/libs/sdk-bindings/src/breez_sdk.udl @@ -744,7 +744,7 @@ interface InputType { Bolt11(LNInvoice invoice); NodeId(string node_id); Url(string url); - LnUrlPay(LnUrlPayRequestData data); + LnUrlPay(LnUrlPayRequestData data, string? bip353_address); LnUrlWithdraw(LnUrlWithdrawRequestData data); LnUrlAuth(LnUrlAuthRequestData data); LnUrlError(LnUrlErrorData data); diff --git a/libs/sdk-common/src/input_parser.rs b/libs/sdk-common/src/input_parser.rs index be8e466f3..acd6a6e26 100644 --- a/libs/sdk-common/src/input_parser.rs +++ b/libs/sdk-common/src/input_parser.rs @@ -3,7 +3,7 @@ use std::ops::Not; use std::str::FromStr; use ::bip21::Uri; -use anyhow::{anyhow, Context, Result}; +use anyhow::{anyhow, bail, Context, Result}; use bitcoin::bech32; use bitcoin::bech32::FromBase32; use hickory_resolver::config::{ResolverConfig, ResolverOpts}; @@ -117,11 +117,11 @@ lazy_static! { /// async fn main() -> Result<()> { /// let lnurl_pay_url = "lnurl1dp68gurn8ghj7mr0vdskc6r0wd6z7mrww4excttsv9un7um9wdekjmmw84jxywf5x43rvv35xgmr2enrxanr2cfcvsmnwe3jxcukvde48qukgdec89snwde3vfjxvepjxpjnjvtpxd3kvdnxx5crxwpjvyunsephsz36jf"; /// -/// assert!(matches!( parse(lnurl_pay_url, None).await, Ok(LnUrlPay{data: _}) )); +/// assert!(matches!( parse(lnurl_pay_url, None).await, Ok(LnUrlPay{data: _, bip353_address: _}) )); /// // assert!(matches!( parse("lnurlp://domain.com/lnurl-pay?key=val").await, Ok(LnUrlPay{data: _}) )); /// // assert!(matches!( parse("lightning@address.com").await, Ok(LnUrlPay{data: _}) )); /// -/// if let Ok(LnUrlPay{data: pd}) = parse(lnurl_pay_url,None).await { +/// if let Ok(LnUrlPay{data: pd, bip353_address}) = parse(lnurl_pay_url,None).await { /// assert_eq!(pd.callback, "https://localhost/lnurl-pay/callback/db945b624265fc7f5a8d77f269f7589d789a771bdfd20e91a3cf6f50382a98d7"); /// assert_eq!(pd.max_sendable, 16000); // Max sendable amount, in msats /// assert_eq!(pd.max_sendable_sats(), 16); // Max sendable amount, in sats @@ -206,14 +206,29 @@ pub async fn parse( let input = input.trim(); // Try to parse the destination as a bip353 address. - let input_parsed = match bip353_parse(input, &DNS_RESOLVER).await { - Some(value) => value, - None => input.to_string(), + let (bip353_parsed_input, is_bip353) = match bip353_parse(input, &DNS_RESOLVER).await { + Some(value) => (value, true), + None => (input.to_string(), false), }; - let input = input_parsed.as_str(); + if let Ok(input_type) = parse_core(&bip353_parsed_input).await { + let input_type = if is_bip353 { + match input_type { + #[cfg(feature = "liquid")] + InputType::Bolt12Offer { offer, .. } => InputType::Bolt12Offer { + offer, + bip353_address: Some(input.to_string()), + }, + InputType::LnUrlPay { data, .. } => InputType::LnUrlPay { + data, + bip353_address: Some(input.to_string()), + }, + i => bail!("Unexpected input type was resolved from a BIP353 address: {i:?}"), + } + } else { + input_type + }; - if let Ok(input_type) = parse_core(input).await { return Ok(input_type); } @@ -325,7 +340,10 @@ async fn parse_core(input: &str) -> Result { #[cfg(feature = "liquid")] if let Ok(offer) = parse_bolt12_offer(input) { - return Ok(InputType::Bolt12Offer { offer }); + return Ok(InputType::Bolt12Offer { + offer, + bip353_address: None, + }); } if let Ok(invoice) = parse_invoice(input) { @@ -412,8 +430,9 @@ async fn parse_external( let input_type = lnurl_data.into(); let input_type = match input_type { // Modify the LnUrlPay payload by adding the domain of the LNURL endpoint - InputType::LnUrlPay { data } => InputType::LnUrlPay { + InputType::LnUrlPay { data, .. } => InputType::LnUrlPay { data: LnUrlPayRequestData { domain, ..data }, + bip353_address: None, }, _ => input_type, }; @@ -588,12 +607,13 @@ async fn resolve_lnurl( let temp = lnurl_data.into(); let temp = match temp { // Modify the LnUrlPay payload by adding the domain of the LNURL endpoint - InputType::LnUrlPay { data } => InputType::LnUrlPay { + InputType::LnUrlPay { data, .. } => InputType::LnUrlPay { data: LnUrlPayRequestData { domain, ln_address, ..data }, + bip353_address: None, }, _ => temp, }; @@ -628,6 +648,8 @@ pub enum InputType { #[cfg(feature = "liquid")] Bolt12Offer { offer: LNOffer, + /// The BIP353 address in case one was resolved + bip353_address: Option, }, NodeId { node_id: String, @@ -644,6 +666,8 @@ pub enum InputType { /// - LUD-17 Support for lnurlp prefix with non-bech32-encoded LNURL URLs LnUrlPay { data: LnUrlPayRequestData, + /// The BIP353 address in case one was resolved + bip353_address: Option, }, /// # Supported standards @@ -705,7 +729,10 @@ pub enum LnUrlRequestData { impl From for InputType { fn from(lnurl_data: LnUrlRequestData) -> Self { match lnurl_data { - PayRequest { data } => Self::LnUrlPay { data }, + PayRequest { data } => Self::LnUrlPay { + data, + bip353_address: None, + }, WithdrawRequest { data } => Self::LnUrlWithdraw { data }, AuthRequest { data } => Self::LnUrlAuth { data }, Error { data } => Self::LnUrlError { data }, @@ -1568,7 +1595,7 @@ pub(crate) mod tests { ("localhost".into(), format!("https://localhost{path}"), None) ); - if let InputType::LnUrlPay { data: pd } = parse(lnurl_pay_encoded, None).await? { + if let InputType::LnUrlPay { data: pd, .. } = parse(lnurl_pay_encoded, None).await? { assert_eq!(pd.callback, "https://localhost/lnurl-pay/callback/db945b624265fc7f5a8d77f269f7589d789a771bdfd20e91a3cf6f50382a98d7"); assert_eq!(pd.max_sendable, 16000); assert_eq!(pd.min_sendable, 4000); @@ -1608,7 +1635,7 @@ pub(crate) mod tests { ] { assert!(matches!( parse(lnurl_pay, None).await?, - InputType::LnUrlPay { data: _ } + InputType::LnUrlPay { .. } )); } Ok(()) @@ -1622,7 +1649,7 @@ pub(crate) mod tests { let ln_address = "user@domain.net"; let _m = mock_lnurl_ln_address_endpoint(ln_address, None)?; - if let InputType::LnUrlPay { data: pd } = parse(ln_address, None).await? { + if let InputType::LnUrlPay { data: pd, .. } = parse(ln_address, None).await? { assert_eq!(pd.callback, "https://localhost/lnurl-pay/callback/db945b624265fc7f5a8d77f269f7589d789a771bdfd20e91a3cf6f50382a98d7"); assert_eq!(pd.max_sendable, 16000); assert_eq!(pd.min_sendable, 4000); @@ -1665,7 +1692,7 @@ pub(crate) mod tests { let server_ln_address = "user@domain.net"; let _m = mock_lnurl_ln_address_endpoint(server_ln_address, None)?; - if let InputType::LnUrlPay { data: pd } = parse(ln_address, None).await? { + if let InputType::LnUrlPay { data: pd, .. } = parse(ln_address, None).await? { assert_eq!(pd.callback, "https://localhost/lnurl-pay/callback/db945b624265fc7f5a8d77f269f7589d789a771bdfd20e91a3cf6f50382a98d7"); assert_eq!(pd.max_sendable, 16000); assert_eq!(pd.min_sendable, 4000); @@ -1871,7 +1898,7 @@ pub(crate) mod tests { let _m = mock_lnurl_pay_endpoint(pay_path, None); let lnurl_pay_url = format!("lnurlp://localhost{pay_path}"); - if let InputType::LnUrlPay { data: pd } = parse(&lnurl_pay_url, None).await? { + if let InputType::LnUrlPay { data: pd, .. } = parse(&lnurl_pay_url, None).await? { assert_eq!(pd.callback, "https://localhost/lnurl-pay/callback/db945b624265fc7f5a8d77f269f7589d789a771bdfd20e91a3cf6f50382a98d7"); assert_eq!(pd.max_sendable, 16000); assert_eq!(pd.min_sendable, 4000); @@ -2007,7 +2034,7 @@ pub(crate) mod tests { }]; let input_type = parse(input, Some(&parsers)).await?; - if let InputType::LnUrlPay { data } = input_type { + if let InputType::LnUrlPay { data, .. } = input_type { assert_eq!(data.callback, "callback_url"); assert_eq!(data.max_sendable, 57000); assert_eq!(data.min_sendable, 57000); diff --git a/libs/sdk-core/src/binding.rs b/libs/sdk-core/src/binding.rs index 09b0db4f1..6be201454 100644 --- a/libs/sdk-core/src/binding.rs +++ b/libs/sdk-core/src/binding.rs @@ -160,14 +160,31 @@ pub struct _LnUrlWithdrawRequestData { #[frb(mirror(InputType))] pub enum _InputType { - BitcoinAddress { address: BitcoinAddressData }, - Bolt11 { invoice: LNInvoice }, - NodeId { node_id: String }, - Url { url: String }, - LnUrlPay { data: LnUrlPayRequestData }, - LnUrlWithdraw { data: LnUrlWithdrawRequestData }, - LnUrlAuth { data: LnUrlAuthRequestData }, - LnUrlError { data: LnUrlErrorData }, + BitcoinAddress { + address: BitcoinAddressData, + }, + Bolt11 { + invoice: LNInvoice, + }, + NodeId { + node_id: String, + }, + Url { + url: String, + }, + LnUrlPay { + data: LnUrlPayRequestData, + bip353_address: Option, + }, + LnUrlWithdraw { + data: LnUrlWithdrawRequestData, + }, + LnUrlAuth { + data: LnUrlAuthRequestData, + }, + LnUrlError { + data: LnUrlErrorData, + }, } #[frb(mirror(BitcoinAddressData))] diff --git a/libs/sdk-core/src/bridge_generated.rs b/libs/sdk-core/src/bridge_generated.rs index 4f75246bb..5d41807a2 100644 --- a/libs/sdk-core/src/bridge_generated.rs +++ b/libs/sdk-core/src/bridge_generated.rs @@ -1009,8 +1009,12 @@ const _: fn() = || { InputType::Url { url } => { let _: String = url; } - InputType::LnUrlPay { data } => { + InputType::LnUrlPay { + data, + bip353_address, + } => { let _: LnUrlPayRequestData = data; + let _: Option = bip353_address; } InputType::LnUrlWithdraw { data } => { let _: LnUrlWithdrawRequestData = data; @@ -1608,7 +1612,14 @@ impl support::IntoDart for mirror_InputType { vec![2.into_dart(), node_id.into_into_dart().into_dart()] } InputType::Url { url } => vec![3.into_dart(), url.into_into_dart().into_dart()], - InputType::LnUrlPay { data } => vec![4.into_dart(), data.into_into_dart().into_dart()], + InputType::LnUrlPay { + data, + bip353_address, + } => vec![ + 4.into_dart(), + data.into_into_dart().into_dart(), + bip353_address.into_dart(), + ], InputType::LnUrlWithdraw { data } => { vec![5.into_dart(), data.into_into_dart().into_dart()] } diff --git a/libs/sdk-flutter/lib/bridge_generated.dart b/libs/sdk-flutter/lib/bridge_generated.dart index 823ea2406..42d47332b 100644 --- a/libs/sdk-flutter/lib/bridge_generated.dart +++ b/libs/sdk-flutter/lib/bridge_generated.dart @@ -668,6 +668,7 @@ sealed class InputType with _$InputType { }) = InputType_Url; const factory InputType.lnUrlPay({ required LnUrlPayRequestData data, + String? bip353Address, }) = InputType_LnUrlPay; const factory InputType.lnUrlWithdraw({ required LnUrlWithdrawRequestData data, @@ -3378,6 +3379,7 @@ class BreezSdkCoreImpl implements BreezSdkCore { case 4: return InputType_LnUrlPay( data: _wire2api_box_autoadd_ln_url_pay_request_data(raw[1]), + bip353Address: _wire2api_opt_String(raw[2]), ); case 5: return InputType_LnUrlWithdraw( diff --git a/libs/sdk-flutter/lib/bridge_generated.freezed.dart b/libs/sdk-flutter/lib/bridge_generated.freezed.dart index 15ddfc256..ae7583145 100644 --- a/libs/sdk-flutter/lib/bridge_generated.freezed.dart +++ b/libs/sdk-flutter/lib/bridge_generated.freezed.dart @@ -2182,7 +2182,7 @@ mixin _$InputType { required TResult Function(LNInvoice invoice) bolt11, required TResult Function(String nodeId) nodeId, required TResult Function(String url) url, - required TResult Function(LnUrlPayRequestData data) lnUrlPay, + required TResult Function(LnUrlPayRequestData data, String? bip353Address) lnUrlPay, required TResult Function(LnUrlWithdrawRequestData data) lnUrlWithdraw, required TResult Function(LnUrlAuthRequestData data) lnUrlAuth, required TResult Function(LnUrlErrorData data) lnUrlError, @@ -2194,7 +2194,7 @@ mixin _$InputType { TResult? Function(LNInvoice invoice)? bolt11, TResult? Function(String nodeId)? nodeId, TResult? Function(String url)? url, - TResult? Function(LnUrlPayRequestData data)? lnUrlPay, + TResult? Function(LnUrlPayRequestData data, String? bip353Address)? lnUrlPay, TResult? Function(LnUrlWithdrawRequestData data)? lnUrlWithdraw, TResult? Function(LnUrlAuthRequestData data)? lnUrlAuth, TResult? Function(LnUrlErrorData data)? lnUrlError, @@ -2206,7 +2206,7 @@ mixin _$InputType { TResult Function(LNInvoice invoice)? bolt11, TResult Function(String nodeId)? nodeId, TResult Function(String url)? url, - TResult Function(LnUrlPayRequestData data)? lnUrlPay, + TResult Function(LnUrlPayRequestData data, String? bip353Address)? lnUrlPay, TResult Function(LnUrlWithdrawRequestData data)? lnUrlWithdraw, TResult Function(LnUrlAuthRequestData data)? lnUrlAuth, TResult Function(LnUrlErrorData data)? lnUrlError, @@ -2336,7 +2336,7 @@ class _$InputType_BitcoinAddressImpl implements InputType_BitcoinAddress { required TResult Function(LNInvoice invoice) bolt11, required TResult Function(String nodeId) nodeId, required TResult Function(String url) url, - required TResult Function(LnUrlPayRequestData data) lnUrlPay, + required TResult Function(LnUrlPayRequestData data, String? bip353Address) lnUrlPay, required TResult Function(LnUrlWithdrawRequestData data) lnUrlWithdraw, required TResult Function(LnUrlAuthRequestData data) lnUrlAuth, required TResult Function(LnUrlErrorData data) lnUrlError, @@ -2351,7 +2351,7 @@ class _$InputType_BitcoinAddressImpl implements InputType_BitcoinAddress { TResult? Function(LNInvoice invoice)? bolt11, TResult? Function(String nodeId)? nodeId, TResult? Function(String url)? url, - TResult? Function(LnUrlPayRequestData data)? lnUrlPay, + TResult? Function(LnUrlPayRequestData data, String? bip353Address)? lnUrlPay, TResult? Function(LnUrlWithdrawRequestData data)? lnUrlWithdraw, TResult? Function(LnUrlAuthRequestData data)? lnUrlAuth, TResult? Function(LnUrlErrorData data)? lnUrlError, @@ -2366,7 +2366,7 @@ class _$InputType_BitcoinAddressImpl implements InputType_BitcoinAddress { TResult Function(LNInvoice invoice)? bolt11, TResult Function(String nodeId)? nodeId, TResult Function(String url)? url, - TResult Function(LnUrlPayRequestData data)? lnUrlPay, + TResult Function(LnUrlPayRequestData data, String? bip353Address)? lnUrlPay, TResult Function(LnUrlWithdrawRequestData data)? lnUrlWithdraw, TResult Function(LnUrlAuthRequestData data)? lnUrlAuth, TResult Function(LnUrlErrorData data)? lnUrlError, @@ -2505,7 +2505,7 @@ class _$InputType_Bolt11Impl implements InputType_Bolt11 { required TResult Function(LNInvoice invoice) bolt11, required TResult Function(String nodeId) nodeId, required TResult Function(String url) url, - required TResult Function(LnUrlPayRequestData data) lnUrlPay, + required TResult Function(LnUrlPayRequestData data, String? bip353Address) lnUrlPay, required TResult Function(LnUrlWithdrawRequestData data) lnUrlWithdraw, required TResult Function(LnUrlAuthRequestData data) lnUrlAuth, required TResult Function(LnUrlErrorData data) lnUrlError, @@ -2520,7 +2520,7 @@ class _$InputType_Bolt11Impl implements InputType_Bolt11 { TResult? Function(LNInvoice invoice)? bolt11, TResult? Function(String nodeId)? nodeId, TResult? Function(String url)? url, - TResult? Function(LnUrlPayRequestData data)? lnUrlPay, + TResult? Function(LnUrlPayRequestData data, String? bip353Address)? lnUrlPay, TResult? Function(LnUrlWithdrawRequestData data)? lnUrlWithdraw, TResult? Function(LnUrlAuthRequestData data)? lnUrlAuth, TResult? Function(LnUrlErrorData data)? lnUrlError, @@ -2535,7 +2535,7 @@ class _$InputType_Bolt11Impl implements InputType_Bolt11 { TResult Function(LNInvoice invoice)? bolt11, TResult Function(String nodeId)? nodeId, TResult Function(String url)? url, - TResult Function(LnUrlPayRequestData data)? lnUrlPay, + TResult Function(LnUrlPayRequestData data, String? bip353Address)? lnUrlPay, TResult Function(LnUrlWithdrawRequestData data)? lnUrlWithdraw, TResult Function(LnUrlAuthRequestData data)? lnUrlAuth, TResult Function(LnUrlErrorData data)? lnUrlError, @@ -2672,7 +2672,7 @@ class _$InputType_NodeIdImpl implements InputType_NodeId { required TResult Function(LNInvoice invoice) bolt11, required TResult Function(String nodeId) nodeId, required TResult Function(String url) url, - required TResult Function(LnUrlPayRequestData data) lnUrlPay, + required TResult Function(LnUrlPayRequestData data, String? bip353Address) lnUrlPay, required TResult Function(LnUrlWithdrawRequestData data) lnUrlWithdraw, required TResult Function(LnUrlAuthRequestData data) lnUrlAuth, required TResult Function(LnUrlErrorData data) lnUrlError, @@ -2687,7 +2687,7 @@ class _$InputType_NodeIdImpl implements InputType_NodeId { TResult? Function(LNInvoice invoice)? bolt11, TResult? Function(String nodeId)? nodeId, TResult? Function(String url)? url, - TResult? Function(LnUrlPayRequestData data)? lnUrlPay, + TResult? Function(LnUrlPayRequestData data, String? bip353Address)? lnUrlPay, TResult? Function(LnUrlWithdrawRequestData data)? lnUrlWithdraw, TResult? Function(LnUrlAuthRequestData data)? lnUrlAuth, TResult? Function(LnUrlErrorData data)? lnUrlError, @@ -2702,7 +2702,7 @@ class _$InputType_NodeIdImpl implements InputType_NodeId { TResult Function(LNInvoice invoice)? bolt11, TResult Function(String nodeId)? nodeId, TResult Function(String url)? url, - TResult Function(LnUrlPayRequestData data)? lnUrlPay, + TResult Function(LnUrlPayRequestData data, String? bip353Address)? lnUrlPay, TResult Function(LnUrlWithdrawRequestData data)? lnUrlWithdraw, TResult Function(LnUrlAuthRequestData data)? lnUrlAuth, TResult Function(LnUrlErrorData data)? lnUrlError, @@ -2837,7 +2837,7 @@ class _$InputType_UrlImpl implements InputType_Url { required TResult Function(LNInvoice invoice) bolt11, required TResult Function(String nodeId) nodeId, required TResult Function(String url) url, - required TResult Function(LnUrlPayRequestData data) lnUrlPay, + required TResult Function(LnUrlPayRequestData data, String? bip353Address) lnUrlPay, required TResult Function(LnUrlWithdrawRequestData data) lnUrlWithdraw, required TResult Function(LnUrlAuthRequestData data) lnUrlAuth, required TResult Function(LnUrlErrorData data) lnUrlError, @@ -2852,7 +2852,7 @@ class _$InputType_UrlImpl implements InputType_Url { TResult? Function(LNInvoice invoice)? bolt11, TResult? Function(String nodeId)? nodeId, TResult? Function(String url)? url, - TResult? Function(LnUrlPayRequestData data)? lnUrlPay, + TResult? Function(LnUrlPayRequestData data, String? bip353Address)? lnUrlPay, TResult? Function(LnUrlWithdrawRequestData data)? lnUrlWithdraw, TResult? Function(LnUrlAuthRequestData data)? lnUrlAuth, TResult? Function(LnUrlErrorData data)? lnUrlError, @@ -2867,7 +2867,7 @@ class _$InputType_UrlImpl implements InputType_Url { TResult Function(LNInvoice invoice)? bolt11, TResult Function(String nodeId)? nodeId, TResult Function(String url)? url, - TResult Function(LnUrlPayRequestData data)? lnUrlPay, + TResult Function(LnUrlPayRequestData data, String? bip353Address)? lnUrlPay, TResult Function(LnUrlWithdrawRequestData data)? lnUrlWithdraw, TResult Function(LnUrlAuthRequestData data)? lnUrlAuth, TResult Function(LnUrlErrorData data)? lnUrlError, @@ -2943,7 +2943,7 @@ abstract class _$$InputType_LnUrlPayImplCopyWith<$Res> { _$InputType_LnUrlPayImpl value, $Res Function(_$InputType_LnUrlPayImpl) then) = __$$InputType_LnUrlPayImplCopyWithImpl<$Res>; @useResult - $Res call({LnUrlPayRequestData data}); + $Res call({LnUrlPayRequestData data, String? bip353Address}); } /// @nodoc @@ -2958,12 +2958,17 @@ class __$$InputType_LnUrlPayImplCopyWithImpl<$Res> @override $Res call({ Object? data = null, + Object? bip353Address = freezed, }) { return _then(_$InputType_LnUrlPayImpl( data: null == data ? _value.data : data // ignore: cast_nullable_to_non_nullable as LnUrlPayRequestData, + bip353Address: freezed == bip353Address + ? _value.bip353Address + : bip353Address // ignore: cast_nullable_to_non_nullable + as String?, )); } } @@ -2971,14 +2976,16 @@ class __$$InputType_LnUrlPayImplCopyWithImpl<$Res> /// @nodoc class _$InputType_LnUrlPayImpl implements InputType_LnUrlPay { - const _$InputType_LnUrlPayImpl({required this.data}); + const _$InputType_LnUrlPayImpl({required this.data, this.bip353Address}); @override final LnUrlPayRequestData data; + @override + final String? bip353Address; @override String toString() { - return 'InputType.lnUrlPay(data: $data)'; + return 'InputType.lnUrlPay(data: $data, bip353Address: $bip353Address)'; } @override @@ -2986,11 +2993,12 @@ class _$InputType_LnUrlPayImpl implements InputType_LnUrlPay { return identical(this, other) || (other.runtimeType == runtimeType && other is _$InputType_LnUrlPayImpl && - (identical(other.data, data) || other.data == data)); + (identical(other.data, data) || other.data == data) && + (identical(other.bip353Address, bip353Address) || other.bip353Address == bip353Address)); } @override - int get hashCode => Object.hash(runtimeType, data); + int get hashCode => Object.hash(runtimeType, data, bip353Address); @JsonKey(ignore: true) @override @@ -3005,12 +3013,12 @@ class _$InputType_LnUrlPayImpl implements InputType_LnUrlPay { required TResult Function(LNInvoice invoice) bolt11, required TResult Function(String nodeId) nodeId, required TResult Function(String url) url, - required TResult Function(LnUrlPayRequestData data) lnUrlPay, + required TResult Function(LnUrlPayRequestData data, String? bip353Address) lnUrlPay, required TResult Function(LnUrlWithdrawRequestData data) lnUrlWithdraw, required TResult Function(LnUrlAuthRequestData data) lnUrlAuth, required TResult Function(LnUrlErrorData data) lnUrlError, }) { - return lnUrlPay(data); + return lnUrlPay(data, bip353Address); } @override @@ -3020,12 +3028,12 @@ class _$InputType_LnUrlPayImpl implements InputType_LnUrlPay { TResult? Function(LNInvoice invoice)? bolt11, TResult? Function(String nodeId)? nodeId, TResult? Function(String url)? url, - TResult? Function(LnUrlPayRequestData data)? lnUrlPay, + TResult? Function(LnUrlPayRequestData data, String? bip353Address)? lnUrlPay, TResult? Function(LnUrlWithdrawRequestData data)? lnUrlWithdraw, TResult? Function(LnUrlAuthRequestData data)? lnUrlAuth, TResult? Function(LnUrlErrorData data)? lnUrlError, }) { - return lnUrlPay?.call(data); + return lnUrlPay?.call(data, bip353Address); } @override @@ -3035,14 +3043,14 @@ class _$InputType_LnUrlPayImpl implements InputType_LnUrlPay { TResult Function(LNInvoice invoice)? bolt11, TResult Function(String nodeId)? nodeId, TResult Function(String url)? url, - TResult Function(LnUrlPayRequestData data)? lnUrlPay, + TResult Function(LnUrlPayRequestData data, String? bip353Address)? lnUrlPay, TResult Function(LnUrlWithdrawRequestData data)? lnUrlWithdraw, TResult Function(LnUrlAuthRequestData data)? lnUrlAuth, TResult Function(LnUrlErrorData data)? lnUrlError, required TResult orElse(), }) { if (lnUrlPay != null) { - return lnUrlPay(data); + return lnUrlPay(data, bip353Address); } return orElse(); } @@ -3098,9 +3106,11 @@ class _$InputType_LnUrlPayImpl implements InputType_LnUrlPay { } abstract class InputType_LnUrlPay implements InputType { - const factory InputType_LnUrlPay({required final LnUrlPayRequestData data}) = _$InputType_LnUrlPayImpl; + const factory InputType_LnUrlPay({required final LnUrlPayRequestData data, final String? bip353Address}) = + _$InputType_LnUrlPayImpl; LnUrlPayRequestData get data; + String? get bip353Address; @JsonKey(ignore: true) _$$InputType_LnUrlPayImplCopyWith<_$InputType_LnUrlPayImpl> get copyWith => throw _privateConstructorUsedError; @@ -3174,7 +3184,7 @@ class _$InputType_LnUrlWithdrawImpl implements InputType_LnUrlWithdraw { required TResult Function(LNInvoice invoice) bolt11, required TResult Function(String nodeId) nodeId, required TResult Function(String url) url, - required TResult Function(LnUrlPayRequestData data) lnUrlPay, + required TResult Function(LnUrlPayRequestData data, String? bip353Address) lnUrlPay, required TResult Function(LnUrlWithdrawRequestData data) lnUrlWithdraw, required TResult Function(LnUrlAuthRequestData data) lnUrlAuth, required TResult Function(LnUrlErrorData data) lnUrlError, @@ -3189,7 +3199,7 @@ class _$InputType_LnUrlWithdrawImpl implements InputType_LnUrlWithdraw { TResult? Function(LNInvoice invoice)? bolt11, TResult? Function(String nodeId)? nodeId, TResult? Function(String url)? url, - TResult? Function(LnUrlPayRequestData data)? lnUrlPay, + TResult? Function(LnUrlPayRequestData data, String? bip353Address)? lnUrlPay, TResult? Function(LnUrlWithdrawRequestData data)? lnUrlWithdraw, TResult? Function(LnUrlAuthRequestData data)? lnUrlAuth, TResult? Function(LnUrlErrorData data)? lnUrlError, @@ -3204,7 +3214,7 @@ class _$InputType_LnUrlWithdrawImpl implements InputType_LnUrlWithdraw { TResult Function(LNInvoice invoice)? bolt11, TResult Function(String nodeId)? nodeId, TResult Function(String url)? url, - TResult Function(LnUrlPayRequestData data)? lnUrlPay, + TResult Function(LnUrlPayRequestData data, String? bip353Address)? lnUrlPay, TResult Function(LnUrlWithdrawRequestData data)? lnUrlWithdraw, TResult Function(LnUrlAuthRequestData data)? lnUrlAuth, TResult Function(LnUrlErrorData data)? lnUrlError, @@ -3344,7 +3354,7 @@ class _$InputType_LnUrlAuthImpl implements InputType_LnUrlAuth { required TResult Function(LNInvoice invoice) bolt11, required TResult Function(String nodeId) nodeId, required TResult Function(String url) url, - required TResult Function(LnUrlPayRequestData data) lnUrlPay, + required TResult Function(LnUrlPayRequestData data, String? bip353Address) lnUrlPay, required TResult Function(LnUrlWithdrawRequestData data) lnUrlWithdraw, required TResult Function(LnUrlAuthRequestData data) lnUrlAuth, required TResult Function(LnUrlErrorData data) lnUrlError, @@ -3359,7 +3369,7 @@ class _$InputType_LnUrlAuthImpl implements InputType_LnUrlAuth { TResult? Function(LNInvoice invoice)? bolt11, TResult? Function(String nodeId)? nodeId, TResult? Function(String url)? url, - TResult? Function(LnUrlPayRequestData data)? lnUrlPay, + TResult? Function(LnUrlPayRequestData data, String? bip353Address)? lnUrlPay, TResult? Function(LnUrlWithdrawRequestData data)? lnUrlWithdraw, TResult? Function(LnUrlAuthRequestData data)? lnUrlAuth, TResult? Function(LnUrlErrorData data)? lnUrlError, @@ -3374,7 +3384,7 @@ class _$InputType_LnUrlAuthImpl implements InputType_LnUrlAuth { TResult Function(LNInvoice invoice)? bolt11, TResult Function(String nodeId)? nodeId, TResult Function(String url)? url, - TResult Function(LnUrlPayRequestData data)? lnUrlPay, + TResult Function(LnUrlPayRequestData data, String? bip353Address)? lnUrlPay, TResult Function(LnUrlWithdrawRequestData data)? lnUrlWithdraw, TResult Function(LnUrlAuthRequestData data)? lnUrlAuth, TResult Function(LnUrlErrorData data)? lnUrlError, @@ -3513,7 +3523,7 @@ class _$InputType_LnUrlErrorImpl implements InputType_LnUrlError { required TResult Function(LNInvoice invoice) bolt11, required TResult Function(String nodeId) nodeId, required TResult Function(String url) url, - required TResult Function(LnUrlPayRequestData data) lnUrlPay, + required TResult Function(LnUrlPayRequestData data, String? bip353Address) lnUrlPay, required TResult Function(LnUrlWithdrawRequestData data) lnUrlWithdraw, required TResult Function(LnUrlAuthRequestData data) lnUrlAuth, required TResult Function(LnUrlErrorData data) lnUrlError, @@ -3528,7 +3538,7 @@ class _$InputType_LnUrlErrorImpl implements InputType_LnUrlError { TResult? Function(LNInvoice invoice)? bolt11, TResult? Function(String nodeId)? nodeId, TResult? Function(String url)? url, - TResult? Function(LnUrlPayRequestData data)? lnUrlPay, + TResult? Function(LnUrlPayRequestData data, String? bip353Address)? lnUrlPay, TResult? Function(LnUrlWithdrawRequestData data)? lnUrlWithdraw, TResult? Function(LnUrlAuthRequestData data)? lnUrlAuth, TResult? Function(LnUrlErrorData data)? lnUrlError, @@ -3543,7 +3553,7 @@ class _$InputType_LnUrlErrorImpl implements InputType_LnUrlError { TResult Function(LNInvoice invoice)? bolt11, TResult Function(String nodeId)? nodeId, TResult Function(String url)? url, - TResult Function(LnUrlPayRequestData data)? lnUrlPay, + TResult Function(LnUrlPayRequestData data, String? bip353Address)? lnUrlPay, TResult Function(LnUrlWithdrawRequestData data)? lnUrlWithdraw, TResult Function(LnUrlAuthRequestData data)? lnUrlAuth, TResult Function(LnUrlErrorData data)? lnUrlError, diff --git a/libs/sdk-react-native/android/src/main/java/com/breezsdk/BreezSDKMapper.kt b/libs/sdk-react-native/android/src/main/java/com/breezsdk/BreezSDKMapper.kt index 558a3237d..303438fab 100644 --- a/libs/sdk-react-native/android/src/main/java/com/breezsdk/BreezSDKMapper.kt +++ b/libs/sdk-react-native/android/src/main/java/com/breezsdk/BreezSDKMapper.kt @@ -3964,6 +3964,7 @@ fun readableMapOf(inputType: InputType): ReadableMap? { is InputType.LnUrlPay -> { pushToMap(map, "type", "lnUrlPay") pushToMap(map, "data", readableMapOf(inputType.data)) + pushToMap(map, "bip353Address", inputType.bip353Address) } is InputType.LnUrlWithdraw -> { pushToMap(map, "type", "lnUrlWithdraw") diff --git a/libs/sdk-react-native/ios/BreezSDKMapper.swift b/libs/sdk-react-native/ios/BreezSDKMapper.swift index 83074ff39..60382381b 100644 --- a/libs/sdk-react-native/ios/BreezSDKMapper.swift +++ b/libs/sdk-react-native/ios/BreezSDKMapper.swift @@ -4763,11 +4763,12 @@ enum BreezSDKMapper { ] case let .lnUrlPay( - data + data, bip353Address ): return [ "type": "lnUrlPay", "data": dictionaryOf(lnUrlPayRequestData: data), + "bip353Address": bip353Address == nil ? nil : bip353Address, ] case let .lnUrlWithdraw( diff --git a/libs/sdk-react-native/src/index.ts b/libs/sdk-react-native/src/index.ts index 42ffc3417..b6faeaf97 100644 --- a/libs/sdk-react-native/src/index.ts +++ b/libs/sdk-react-native/src/index.ts @@ -690,6 +690,7 @@ export type InputType = { } | { type: InputTypeVariant.LN_URL_PAY, data: LnUrlPayRequestData + bip353Address?: string } | { type: InputTypeVariant.LN_URL_WITHDRAW, data: LnUrlWithdrawRequestData diff --git a/tools/sdk-cli/src/command_handlers.rs b/tools/sdk-cli/src/command_handlers.rs index fd58acec6..76fa3cfe0 100644 --- a/tools/sdk-cli/src/command_handlers.rs +++ b/tools/sdk-cli/src/command_handlers.rs @@ -467,7 +467,7 @@ pub(crate) async fn handle_command( validate_success_url, use_trampoline, } => match parse(&lnurl, None).await? { - LnUrlPay { data: pd } => { + LnUrlPay { data: pd, .. } => { let prompt = format!( "Amount to pay in millisatoshi (min {} msat, max {} msat: ", pd.min_sendable, pd.max_sendable From e6cea9b08c75364ea10fbc6e3cd4f925d1aabaa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Granh=C3=A3o?= Date: Thu, 6 Feb 2025 14:56:20 +0000 Subject: [PATCH 2/2] Clarify bip353_address field documentation --- libs/sdk-common/src/input_parser.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/sdk-common/src/input_parser.rs b/libs/sdk-common/src/input_parser.rs index acd6a6e26..b59780430 100644 --- a/libs/sdk-common/src/input_parser.rs +++ b/libs/sdk-common/src/input_parser.rs @@ -648,7 +648,7 @@ pub enum InputType { #[cfg(feature = "liquid")] Bolt12Offer { offer: LNOffer, - /// The BIP353 address in case one was resolved + /// The BIP353 address from which this InputType was resolved bip353_address: Option, }, NodeId { @@ -666,7 +666,7 @@ pub enum InputType { /// - LUD-17 Support for lnurlp prefix with non-bech32-encoded LNURL URLs LnUrlPay { data: LnUrlPayRequestData, - /// The BIP353 address in case one was resolved + /// The BIP353 address from which this InputType was resolved bip353_address: Option, },