Skip to content
Draft
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,15 @@ class ReceivePaymentJob(
private val logger: ServiceLogger,
) : Job {
private var receivedPayment: Payment? = null
private var breezSDK: BlockingBreezServices? = null

companion object {
private const val TAG = "ReceivePaymentJob"
}

override fun start(breezSDK: BlockingBreezServices) {
try {
this.breezSDK = breezSDK
val decoder = Json { ignoreUnknownKeys = true }
val request = decoder.decodeFromString(ReceivePaymentRequest.serializer(), payload)
val payment = breezSDK.paymentByHash(request.paymentHash)
Expand All @@ -54,8 +56,18 @@ class ReceivePaymentJob(
when (e) {
is BreezEvent.InvoicePaid -> {
val pd = e.details
handleReceivedPayment(pd.bolt11, pd.paymentHash, pd.payment?.amountMsat)
receivedPayment = pd.payment
handleReceivedPayment(pd.paymentHash, pd.amountMsat)
val payment = try {
breezSDK?.paymentByHash(pd.paymentHash)
} catch (e: Exception) {
logger.log(
TAG,
"Failed to load payment by hash ${pd.paymentHash}: ${e.message}",
"WARN"
)
null
}
receivedPayment = payment
}

is BreezEvent.Synced -> {
Expand All @@ -71,13 +83,9 @@ class ReceivePaymentJob(

override fun onShutdown() {}

private fun handleReceivedPayment(
bolt11: String,
paymentHash: String,
amountMsat: ULong?,
) {
logger.log(TAG, "Received payment. Bolt11:${bolt11}\nPayment Hash:${paymentHash}", "INFO")
val amountSat = (amountMsat ?: ULong.MIN_VALUE) / 1000u
private fun handleReceivedPayment(paymentHash: String, amountMsat: ULong) {
logger.log(TAG, "Received payment. Payment Hash:${paymentHash}", "INFO")
val amountSat = amountMsat / 1000u
notifyChannel(
context,
NOTIFICATION_CHANNEL_PAYMENT_RECEIVED,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ class ReceivePaymentTask : TaskProtocol {
internal var bestAttemptContent: UNMutableNotificationContent?
internal var logger: ServiceLogger
internal var receivedPayment: Payment? = nil
internal var breezSDK: BlockingBreezServices? = nil

init(payload: String, logger: ServiceLogger, contentHandler: ((UNNotificationContent) -> Void)? = nil, bestAttemptContent: UNMutableNotificationContent? = nil) {
self.payload = payload
Expand All @@ -24,8 +25,15 @@ class ReceivePaymentTask : TaskProtocol {
public func onEvent(e: BreezEvent) {
switch e {
case .invoicePaid(details: let details):
self.logger.log(tag: TAG, line: "Received payment. Bolt11: \(details.bolt11)\nPayment Hash:\(details.paymentHash)", level: "INFO")
receivedPayment = details.payment
self.logger.log(tag: TAG, line: "Received payment.\nPayment Hash:\(details.paymentHash)", level: "INFO")
let loadedPayment: Payment?
do {
loadedPayment = try self.breezSDK?.paymentByHash(hash: details.paymentHash)
} catch let e {
self.logger.log(tag: TAG, line: "Failed to load payment by hash \(details.paymentHash): \(e)", level: "WARN")
loadedPayment = nil
}
receivedPayment = loadedPayment
break
case .synced:
self.logger.log(tag: TAG, line: "got synced event", level: "INFO")
Expand All @@ -40,6 +48,7 @@ class ReceivePaymentTask : TaskProtocol {

func start(breezSDK: BlockingBreezServices) throws {
do {
self.breezSDK = breezSDK
let request = try JSONDecoder().decode(ReceivePaymentNotificationRequest.self, from: self.payload.data(using: .utf8)!)
let existingPayment = try breezSDK.paymentByHash(hash: request.payment_hash)
if existingPayment != nil {
Expand Down
30 changes: 27 additions & 3 deletions libs/sdk-bindings/src/breez_sdk.udl
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,6 @@ dictionary Payment {
u64 fee_msat;
PaymentStatus status;
string? error;
string? description;
PaymentDetails details;
string? metadata;
};
Expand Down Expand Up @@ -320,16 +319,41 @@ dictionary LnPaymentDetails {
string payment_preimage;
boolean keysend;
string bolt11;
string description;
SuccessActionProcessed? lnurl_success_action;
string? lnurl_pay_domain;
string? lnurl_pay_comment;
string? lnurl_metadata;
string? ln_address;
string? lnurl_withdraw_endpoint;
LnUrlInfo? lnurl_info;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we remove now the redundant old lnurl fields from the udl?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, I will remove.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

SwapInfo? swap_info;
ReverseSwapInfo? reverse_swap_info;
};

[Enum]
interface LnUrlPayTarget {
LnAddress(string address);
Domain(string domain);
};

dictionary LnUrlPayInfo {
LnUrlPayTarget target;
string metadata;
string? comment;
SuccessActionProcessed? success_action;
};

dictionary LnUrlWithdrawInfo {
string endpoint;
};

[Enum]
interface LnUrlInfo {
Pay(LnUrlPayInfo info);
Withdraw(LnUrlWithdrawInfo info);
};

dictionary ClosedChannelPaymentDetails {
ChannelState state;
string funding_txid;
Expand Down Expand Up @@ -395,8 +419,8 @@ dictionary LogEntry {

dictionary InvoicePaidDetails {
string payment_hash;
string bolt11;
Payment? payment;
string payment_preimage;
u64 amount_msat;
};

dictionary PaymentFailedData {
Expand Down
17 changes: 9 additions & 8 deletions libs/sdk-bindings/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,15 @@ use breez_sdk_core::{
ConnectRequest, CurrencyInfo, EnvironmentType, EventListener, FeeratePreset, FiatCurrency,
HealthCheckStatus, InputType, InvoicePaidDetails, LNInvoice, LNOffer, ListPaymentsRequest,
ListSwapsRequest, LnOfferBlindedPath, LnPaymentDetails, LnUrlAuthError, LnUrlAuthRequestData,
LnUrlCallbackStatus, LnUrlErrorData, LnUrlPayError, LnUrlPayErrorData, LnUrlPayRequest,
LnUrlPayRequestData, LnUrlWithdrawError, LnUrlWithdrawRequest, LnUrlWithdrawRequestData,
LnUrlWithdrawResult, LnUrlWithdrawSuccessData, LocaleOverrides, LocalizedName, LogEntry,
LogStream, LspInformation, MessageSuccessActionData, MetadataFilter, MetadataItem, Network,
NodeState, OnchainPaymentLimitsResponse, OpenChannelFeeRequest, OpenChannelFeeResponse,
OpeningFeeParams, OpeningFeeParamsMenu, PayOnchainRequest, PayOnchainResponse, Payment,
PaymentDetails, PaymentFailedData, PaymentStatus, PaymentType, PaymentTypeFilter,
PrepareOnchainPaymentRequest, PrepareOnchainPaymentResponse, PrepareRedeemOnchainFundsRequest,
LnUrlCallbackStatus, LnUrlErrorData, LnUrlInfo, LnUrlPayError, LnUrlPayErrorData, LnUrlPayInfo,
LnUrlPayRequest, LnUrlPayRequestData, LnUrlPayTarget, LnUrlWithdrawError, LnUrlWithdrawInfo,
LnUrlWithdrawRequest, LnUrlWithdrawRequestData, LnUrlWithdrawResult, LnUrlWithdrawSuccessData,
LocaleOverrides, LocalizedName, LogEntry, LogStream, LspInformation, MessageSuccessActionData,
MetadataFilter, MetadataItem, Network, NodeState, OnchainPaymentLimitsResponse,
OpenChannelFeeRequest, OpenChannelFeeResponse, OpeningFeeParams, OpeningFeeParamsMenu,
PayOnchainRequest, PayOnchainResponse, Payment, PaymentDetails, PaymentFailedData,
PaymentStatus, PaymentType, PaymentTypeFilter, PrepareOnchainPaymentRequest,
PrepareOnchainPaymentResponse, PrepareRedeemOnchainFundsRequest,
PrepareRedeemOnchainFundsResponse, PrepareRefundRequest, PrepareRefundResponse, Rate,
ReceiveOnchainRequest, ReceivePaymentRequest, ReceivePaymentResponse, RecommendedFees,
RedeemOnchainFundsRequest, RedeemOnchainFundsResponse, RefundRequest, RefundResponse,
Expand Down
Loading
Loading