fix: send payment shows as failed even when succeeded

This commit is contained in:
2026-06-11 20:34:00 +02:00
parent a2754a7168
commit 78eb034327
4 changed files with 62 additions and 44 deletions
@@ -35,9 +35,9 @@ data class CreateInvoiceRequest(
@Serializable
data class CreateInvoiceResponse(
@SerialName("payment_hash") val paymentHash: String,
@SerialName("payment_request") val paymentRequest: String,
@SerialName("expiry") val expiry: String?
@SerialName("payment_hash") val paymentHash: String = "",
@SerialName("payment_request") val paymentRequest: String = "",
@SerialName("expiry") val expiry: String? = null
)
// ── Pay invoice ───────────────────────────────────────────────────────────────
@@ -49,22 +49,22 @@ data class PayInvoiceRequest(
@Serializable
data class PayInvoiceResponse(
@SerialName("payment_hash") val paymentHash: String,
@SerialName("checking_id") val checkingId: String
@SerialName("payment_hash") val paymentHash: String = "",
@SerialName("checking_id") val checkingId: String = ""
)
// ── Check payment ─────────────────────────────────────────────────────────────
@Serializable
data class PaymentStatusResponse(
val paid: Boolean,
val paid: Boolean = false,
val details: PaymentDetails? = null
)
@Serializable
data class PaymentDetails(
val amount: Long?,
val fee: Long?,
val memo: String?
val amount: Long? = null,
val fee: Long? = null,
val memo: String? = null
)
// ── Decode BOLT-11 ────────────────────────────────────────────────────────────
@@ -84,7 +84,7 @@ data class DecodeInvoiceResponse(
@Serializable
data class RouteHintHop(
@SerialName("public_key") val publicKey: String,
@SerialName("public_key") val publicKey: String = "",
@SerialName("short_channel_id") val shortChannelId: String? = null,
@SerialName("base_fee") val baseFeeMsat: Long = 0,
@SerialName("ppm_fee") val ppmFee: Long = 0,
@@ -94,7 +94,7 @@ data class RouteHintHop(
// ── LNURL scan ────────────────────────────────────────────────────────────────
@Serializable
data class LnurlScanResponse(
val tag: String?,
val tag: String? = null,
// ── payRequest fields ─────────────────────────────────────────────────────
val callback: String? = null,
@SerialName("minSendable") val minSendable: Long? = null,
@@ -121,7 +121,7 @@ data class LnurlScanResponse(
// ── LNURL-pay callback response (LUD-06) ─────────────────────────────────────
@Serializable
data class LnurlCallbackResponse(
val pr: String,
val pr: String = "",
val routes: List<JsonElement>? = null,
@SerialName("successAction") val successAction: SuccessAction? = null,
val status: String? = null,
@@ -131,12 +131,12 @@ data class LnurlCallbackResponse(
// ── LNURL pay ─────────────────────────────────────────────────────────────────
@Serializable
data class LnurlPayRes(
val tag: String?,
val callback: String?,
@SerialName("minSendable") val minSendable: Long?,
@SerialName("maxSendable") val maxSendable: Long?,
val metadata: String?,
@SerialName("commentAllowed") val commentAllowed: Int?,
val tag: String? = null,
val callback: String? = null,
@SerialName("minSendable") val minSendable: Long? = null,
@SerialName("maxSendable") val maxSendable: Long? = null,
val metadata: String? = null,
@SerialName("commentAllowed") val commentAllowed: Int? = null,
@SerialName("allowsNostr") val allowsNostr: Boolean? = null,
@SerialName("nostrPubkey") val nostrPubkey: String? = null
)
@@ -151,25 +151,25 @@ data class PayLnurlRequest(
@Serializable
data class PayLnurlResponse(
@SerialName("payment_hash") val paymentHash: String,
@SerialName("checking_id") val checkingId: String
@SerialName("payment_hash") val paymentHash: String = "",
@SerialName("checking_id") val checkingId: String = ""
)
@Serializable
data class WithdrawCallbackResponse(
val status: String,
val status: String = "",
val reason: String? = null
)
// ── LNURLp pay link (lightning address) ──────────────────────────────────────
@Serializable
data class LnurlpLink(
val id: String,
val wallet: String,
val username: String?, // the part before the @ in the lightning address
val description: String?,
@Serializable(with = LongAsDoubleSerializer::class) val min: Long,
@Serializable(with = LongAsDoubleSerializer::class) val max: Long
val id: String = "",
val wallet: String = "",
val username: String? = null,
val description: String? = null,
@Serializable(with = LongAsDoubleSerializer::class) val min: Long = 0L,
@Serializable(with = LongAsDoubleSerializer::class) val max: Long = 0L
)
// ── Payment history ───────────────────────────────────────────────────────────
@@ -303,6 +303,7 @@ object SuccessActionSerializer : KSerializer<SuccessAction?> {
}
}
@Serializable
data class PaymentDetailResponse(
val paid: Boolean,
val details: PaymentRecord?
@@ -311,30 +312,30 @@ data class PaymentDetailResponse(
// ── WebSocket payment message ─────────────────────────────────────────────────
@Serializable
data class WsPaymentMessage(
@SerialName("wallet_balance") val walletBalance: Long?,
val payment: WsPayment?
@SerialName("wallet_balance") val walletBalance: Long? = null,
val payment: WsPayment? = null
)
@Serializable
data class WsPayment(
@SerialName("payment_hash") val paymentHash: String,
@SerialName("checking_id") val checkingId: String,
@SerialName("amount") val amount: Long,
@SerialName("fee") val fee: Long,
@SerialName("memo") val memo: String?,
@SerialName("time") val time: String,
@SerialName("status") val status: String,
@SerialName("bolt11") val bolt11: String?,
@SerialName("pending") val pending: Boolean,
@SerialName("preimage") val preimage: String?,
@SerialName("extra") val extra: PaymentExtra?
@SerialName("payment_hash") val paymentHash: String = "",
@SerialName("checking_id") val checkingId: String = "",
@SerialName("amount") val amount: Long = 0L,
@SerialName("fee") val fee: Long = 0L,
@SerialName("memo") val memo: String? = null,
@SerialName("time") val time: String = "",
@SerialName("status") val status: String = "",
@SerialName("bolt11") val bolt11: String? = null,
@SerialName("pending") val pending: Boolean = false,
@SerialName("preimage") val preimage: String? = null,
@SerialName("extra") val extra: PaymentExtra? = null
)
// ── Fiat rate ─────────────────────────────────────────────────────────────────
@Serializable
data class FiatRateResponse(
val rate: Double, // sat to fiat rate
val price: Double // BTC price in the requested fiat currency
val rate: Double = 0.0, // sat to fiat rate
val price: Double = 0.0 // BTC price in the requested fiat currency
)
// ── History sync ──────────────────────────────────────────────────────────────