Skip to content

Commit

Permalink
Merge pull request #72 from breez/savage-lnurl-drain
Browse files Browse the repository at this point in the history
Add LNURL-pay drain docs
  • Loading branch information
dangeross authored Feb 3, 2025
2 parents fd6ad23 + 0e71a3a commit db9c4c5
Show file tree
Hide file tree
Showing 13 changed files with 266 additions and 31 deletions.
26 changes: 24 additions & 2 deletions snippets/csharp/LnurlPay.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,13 @@ public void PrepareLnurlPay(BindingLiquidSdk sdk)
var input = sdk.Parse(lnurlPayUrl);
if (input is InputType.LnUrlPay lnurlp)
{
var amountMsat = lnurlp.data.minSendable;
var amount = new PayAmount.Bitcoin(5000);
var optionalComment = "<comment>";
var optionalValidateSuccessActionUrl = true;

var req = new PrepareLnUrlPayRequest(
lnurlp.data,
amountMsat,
amount,
optionalComment,
optionalValidateSuccessActionUrl);
var prepareResponse = sdk.PrepareLnurlPay(req);
Expand All @@ -37,6 +37,28 @@ public void PrepareLnurlPay(BindingLiquidSdk sdk)
}
// ANCHOR_END: prepare-lnurl-pay
}
public void PrepareLnurlPayDrain(BindingLiquidSdk sdk, LnUrlPayRequestData data)
{
// ANCHOR: prepare-lnurl-pay-drain
try
{
var amount = new PayAmount.Drain();
var optionalComment = "<comment>";
var optionalValidateSuccessActionUrl = true;

var req = new PrepareLnUrlPayRequest(
data,
amount,
optionalComment,
optionalValidateSuccessActionUrl);
var prepareResponse = sdk.PrepareLnurlPay(req);
}
catch (Exception)
{
// Handle error
}
// ANCHOR_END: prepare-lnurl-pay-drain
}

public void LnurlPay(BindingLiquidSdk sdk, PrepareLnUrlPayResponse prepareResponse)
{
Expand Down
21 changes: 19 additions & 2 deletions snippets/dart_snippets/lib/lnurl_pay.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@ Future<void> prepareLnurlPay() async {

InputType inputType = await breezSDKLiquid.instance!.parse(input: lnurlPayUrl);
if (inputType is InputType_LnUrlPay) {
BigInt amountMsat = inputType.data.minSendable;
PayAmount_Bitcoin amount = PayAmount_Bitcoin(receiverAmountSat: 5000 as BigInt);
String optionalComment = "<comment>";
bool optionalValidateSuccessActionUrl = true;

PrepareLnUrlPayRequest req = PrepareLnUrlPayRequest(
data: inputType.data,
amountMsat: amountMsat,
amount: amount,
comment: optionalComment,
validateSuccessActionUrl: optionalValidateSuccessActionUrl,
);
Expand All @@ -29,6 +29,23 @@ Future<void> prepareLnurlPay() async {
// ANCHOR_END: prepare-lnurl-pay
}

Future<void> prepareLnurlPayDrain({required LnUrlPayRequestData data}) async {
// ANCHOR: prepare-lnurl-pay-drain
PayAmount_Drain amount = PayAmount_Drain();
String optionalComment = "<comment>";
bool optionalValidateSuccessActionUrl = true;

PrepareLnUrlPayRequest req = PrepareLnUrlPayRequest(
data: data,
amount: amount,
comment: optionalComment,
validateSuccessActionUrl: optionalValidateSuccessActionUrl,
);
PrepareLnUrlPayResponse prepareResponse = await breezSDKLiquid.instance!.prepareLnurlPay(req: req);
// ANCHOR_END: prepare-lnurl-pay-drain
print(prepareResponse);
}

Future<void> lnurlPay({required PrepareLnUrlPayResponse prepareResponse}) async {
// ANCHOR: lnurl-pay
LnUrlPayResult result = await breezSDKLiquid.instance!.lnurlPay(
Expand Down
27 changes: 25 additions & 2 deletions snippets/go/lnurl_pay.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,15 @@ func PrepareLnurlPay(sdk *breez_sdk_liquid.BindingLiquidSdk) {
if input, err := sdk.Parse(lnurlPayUrl); err != nil {
switch inputType := input.(type) {
case breez_sdk_liquid.InputTypeLnUrlPay:
amountMsat := inputType.Data.MinSendable
var amount breez_sdk_liquid.PayAmount = breez_sdk_liquid.PayAmountBitcoin{
ReceiverAmountSat: uint64(5_000),
}
optionalComment := "<comment>"
optionalValidateSuccessActionUrl := true

req := breez_sdk_liquid.PrepareLnUrlPayRequest{
Data: inputType.Data,
AmountMsat: amountMsat,
Amount: amount,
Comment: &optionalComment,
ValidateSuccessActionUrl: &optionalValidateSuccessActionUrl,
}
Expand All @@ -40,6 +42,27 @@ func PrepareLnurlPay(sdk *breez_sdk_liquid.BindingLiquidSdk) {
// ANCHOR_END: prepare-lnurl-pay
}

func PrepareLnurlPayDrain(sdk *breez_sdk_liquid.BindingLiquidSdk, data breez_sdk_liquid.LnUrlPayRequestData) {
// ANCHOR: prepare-lnurl-pay-drain
var amount breez_sdk_liquid.PayAmount = breez_sdk_liquid.PayAmountDrain{}
optionalComment := "<comment>"
optionalValidateSuccessActionUrl := true

req := breez_sdk_liquid.PrepareLnUrlPayRequest{
Data: data,
Amount: amount,
Comment: &optionalComment,
ValidateSuccessActionUrl: &optionalValidateSuccessActionUrl,
}
prepareResponse, err := sdk.PrepareLnurlPay(req)
if err != nil {
log.Printf("Error: %#v", err)
return
}
// ANCHOR_END: prepare-lnurl-pay-drain
log.Printf("prepareResponse: %#v", prepareResponse)
}

func LnurlPay(sdk *breez_sdk_liquid.BindingLiquidSdk, prepareResponse breez_sdk_liquid.PrepareLnUrlPayResponse) {
// ANCHOR: lnurl-pay
req := breez_sdk_liquid.LnUrlPayRequest{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@ class LnurlPay {
try {
val inputType = sdk.parse(lnurlPayUrl)
if (inputType is InputType.LnUrlPay) {
val requestData = inputType.data
val amountMsat = requestData.minSendable
val amount = PayAmount.Bitcoin(5_000.toULong())
val optionalComment = "<comment>";
val optionalValidateSuccessActionUrl = true;

val lnurlData = inputType.data

val req = PrepareLnUrlPayRequest(
requestData,
amountMsat,
lnurlData,
amount,
optionalComment,
optionalValidateSuccessActionUrl)
val prepareResponse = sdk.prepareLnurlPay(req)
Expand All @@ -33,6 +33,25 @@ class LnurlPay {
// ANCHOR_END: prepare-lnurl-pay
}

fun prepareLnurlPayDrain(sdk: BindingLiquidSdk, lnurlData: LnUrlPayRequestData) {
// ANCHOR: prepare-lnurl-pay-drain
try {
val amount = PayAmount.Drain
val optionalComment = "<comment>";
val optionalValidateSuccessActionUrl = true;

val req = PrepareLnUrlPayRequest(
lnurlData,
amount,
optionalComment,
optionalValidateSuccessActionUrl)
val prepareResponse = sdk.prepareLnurlPay(req)
} catch (e: Exception) {
// handle error
}
// ANCHOR_END: prepare-lnurl-pay-drain
}

fun lnurlPay(sdk: BindingLiquidSdk, prepareResponse: PrepareLnUrlPayResponse) {
// ANCHOR: lnurl-pay
try {
Expand Down
24 changes: 21 additions & 3 deletions snippets/python/src/lnurl_pay.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import breez_sdk_liquid
import logging
from breez_sdk_liquid import BindingLiquidSdk, InputType, LnUrlPayRequest, PrepareLnUrlPayRequest, PrepareLnUrlPayResponse
from breez_sdk_liquid import BindingLiquidSdk, InputType, LnUrlPayRequest, LnUrlPayRequestData, PayAmount, PrepareLnUrlPayRequest, PrepareLnUrlPayResponse


def prepare_pay(sdk: BindingLiquidSdk):
Expand All @@ -12,12 +12,12 @@ def prepare_pay(sdk: BindingLiquidSdk):
try:
parsed_input = sdk.parse(lnurl_pay_url)
if isinstance(parsed_input, InputType.LN_URL_PAY):
amount_msat = parsed_input.data.min_sendable
amount = PayAmount.BITCOIN(5_000)
optional_comment = "<comment>"
optional_validate_success_action_url = True

req = PrepareLnUrlPayRequest(parsed_input.data,
amount_msat,
amount,
optional_comment,
optional_validate_success_action_url)
prepare_response = sdk.prepare_lnurl_pay(req)
Expand All @@ -31,6 +31,24 @@ def prepare_pay(sdk: BindingLiquidSdk):
raise
# ANCHOR_END: prepare-lnurl-pay

def prepare_pay_drain(sdk: BindingLiquidSdk, data: LnUrlPayRequestData):
# ANCHOR: prepare-lnurl-pay-drain
try:
amount = PayAmount.DRAIN
optional_comment = "<comment>"
optional_validate_success_action_url = True

req = PrepareLnUrlPayRequest(data,
amount,
optional_comment,
optional_validate_success_action_url)
prepare_response = sdk.prepare_lnurl_pay(req)
return prepare_response
except Exception as error:
logging.error(error)
raise
# ANCHOR_END: prepare-lnurl-pay-drain

def pay(sdk: BindingLiquidSdk, prepare_response: PrepareLnUrlPayResponse):
# ANCHOR: lnurl-pay
try:
Expand Down
31 changes: 27 additions & 4 deletions snippets/react-native/lnurl_pay.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
import {
InputTypeVariant,
lnurlPay,
type LnUrlPayRequestData,
parse,
type PayAmount,
PayAmountVariant,
prepareLnurlPay,
type PrepareLnUrlPayResponse,
lnurlPay
type PrepareLnUrlPayResponse
} from '@breeztech/react-native-breez-sdk-liquid'

const examplePrepareLnurlPay = async () => {
Expand All @@ -15,13 +18,16 @@ const examplePrepareLnurlPay = async () => {

const input = await parse(lnurlPayUrl)
if (input.type === InputTypeVariant.LN_URL_PAY) {
const amountMsat = input.data.minSendable
const amount: PayAmount = {
type: PayAmountVariant.BITCOIN,
receiverAmountSat: 5_000
}
const optionalComment = '<comment>'
const optionalValidateSuccessActionUrl = true

const prepareResponse = await prepareLnurlPay({
data: input.data,
amountMsat,
amount,
comment: optionalComment,
validateSuccessActionUrl: optionalValidateSuccessActionUrl
})
Expand All @@ -33,6 +39,23 @@ const examplePrepareLnurlPay = async () => {
// ANCHOR_END: prepare-lnurl-pay
}

const examplePrepareLnurlPayDrain = async (data: LnUrlPayRequestData) => {
// ANCHOR: prepare-lnurl-pay-drain
const amount: PayAmount = {
type: PayAmountVariant.DRAIN
}
const optionalComment = '<comment>'
const optionalValidateSuccessActionUrl = true

const prepareResponse = await prepareLnurlPay({
data,
amount,
comment: optionalComment,
validateSuccessActionUrl: optionalValidateSuccessActionUrl
})
// ANCHOR_END: prepare-lnurl-pay-drain
}

const exampleLnurlPay = async (prepareResponse: PrepareLnUrlPayResponse) => {
// ANCHOR: lnurl-pay
const result = await lnurlPay({
Expand Down
3 changes: 3 additions & 0 deletions snippets/rust/src/list_payments.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ async fn list_payments_filtered(sdk: Arc<LiquidSdk>) -> Result<Vec<Payment>> {
offset: Some(0),
limit: Some(50),
details: None,
sort_ascending: None,
})
.await?;
// ANCHOR_END: list-payments-filtered
Expand All @@ -52,6 +53,7 @@ async fn list_payments_details_address(sdk: Arc<LiquidSdk>) -> Result<Vec<Paymen
offset: None,
limit: None,
details: Some(ListPaymentDetails::Bitcoin { address }),
sort_ascending: None,
})
.await?;
// ANCHOR_END: list-payments-details-address
Expand All @@ -74,6 +76,7 @@ async fn list_payments_details_destination(sdk: Arc<LiquidSdk>) -> Result<Vec<Pa
asset_id: None,
destination,
}),
sort_ascending: None,
})
.await?;
// ANCHOR_END: list-payments-details-addrdestinationess
Expand Down
28 changes: 24 additions & 4 deletions snippets/rust/src/lnurl_pay.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,17 @@ async fn prepare_pay(sdk: Arc<LiquidSdk>) -> Result<()> {
// lnurl1dp68gurn8ghj7mr0vdskc6r0wd6z7mrww4excttsv9un7um9wdekjmmw84jxywf5x43rvv35xgmr2enrxanr2cfcvsmnwe3jxcukvde48qukgdec89snwde3vfjxvepjxpjnjvtpxd3kvdnxx5crxwpjvyunsephsz36jf
let lnurl_pay_url = "[email protected]";

if let Ok(InputType::LnUrlPay { data: pd }) = sdk.parse(lnurl_pay_url).await {
let amount_msat = pd.min_sendable;
if let Ok(InputType::LnUrlPay { data }) = sdk.parse(lnurl_pay_url).await {
let amount = PayAmount::Bitcoin {
receiver_amount_sat: 5_000,
};
let optional_comment = Some("<comment>".to_string());
let optional_validate_success_action_url = Some(true);

let prepare_response = sdk
.prepare_lnurl_pay(PrepareLnUrlPayRequest {
data: pd,
amount_msat,
data,
amount,
comment: optional_comment,
validate_success_action_url: optional_validate_success_action_url,
})
Expand All @@ -33,6 +35,24 @@ async fn prepare_pay(sdk: Arc<LiquidSdk>) -> Result<()> {
Ok(())
}

async fn prepare_pay_drain(sdk: Arc<LiquidSdk>, data: LnUrlPayRequestData) -> Result<()> {
// ANCHOR: prepare-lnurl-pay-drain
let amount = PayAmount::Drain;
let optional_comment = Some("<comment>".to_string());
let optional_validate_success_action_url = Some(true);

let prepare_response = sdk
.prepare_lnurl_pay(PrepareLnUrlPayRequest {
data,
amount,
comment: optional_comment,
validate_success_action_url: optional_validate_success_action_url,
})
.await?;
// ANCHOR_END: prepare-lnurl-pay-drain
Ok(())
}

async fn pay(sdk: Arc<LiquidSdk>, prepare_response: PrepareLnUrlPayResponse) -> Result<()> {
// ANCHOR: lnurl-pay
let result = sdk.lnurl_pay(LnUrlPayRequest { prepare_response }).await?;
Expand Down
2 changes: 1 addition & 1 deletion snippets/swift/BreezSDKExamples/Sources/ListPayments.swift
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ func ListPaymentsDetailsDestination(sdk: BindingLiquidSdk) -> [Payment]? {
let destination = "<Liquid BIP21 or address>"
let payments = try? sdk.listPayments(
req: ListPaymentsRequest(
details: ListPaymentDetails.liquid(destination: destination)
details: ListPaymentDetails.liquid(assetId: nil, destination: destination)
))
// ANCHOR_END: list-payments-details-destination
return payments
Expand Down
Loading

0 comments on commit db9c4c5

Please sign in to comment.