diff --git a/src/commonMain/kotlin/fr/acinq/lightning/bin/Main.kt b/src/commonMain/kotlin/fr/acinq/lightning/bin/Main.kt index a2876cd..28ec35d 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/bin/Main.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/bin/Main.kt @@ -28,6 +28,7 @@ import fr.acinq.lightning.bin.conf.getOrGenerateSeed import fr.acinq.lightning.bin.conf.readConfFile import fr.acinq.lightning.bin.db.SqliteChannelsDb import fr.acinq.lightning.bin.db.SqlitePaymentsDb +import fr.acinq.lightning.bin.db.WalletPaymentId import fr.acinq.lightning.bin.db.payments.LightningOutgoingQueries import fr.acinq.lightning.bin.json.ApiType import fr.acinq.lightning.bin.logs.FileLogWriter @@ -235,12 +236,14 @@ class Phoenixd : CliktCommand() { lease_typeAdapter = EnumColumnAdapter() ) ) + val channelsDb = SqliteChannelsDb(driver, database) + val paymentsDb = SqlitePaymentsDb(database) val electrum = ElectrumClient(scope, loggerFactory) val peer = Peer( nodeParams = nodeParams, walletParams = lsp.walletParams, watcher = ElectrumWatcher(electrum, scope, loggerFactory), db = object : Databases { - override val channels: ChannelsDb get() = SqliteChannelsDb(driver, database) - override val payments: PaymentsDb get() = SqlitePaymentsDb(database) + override val channels: ChannelsDb get() = channelsDb + override val payments: PaymentsDb get() = paymentsDb }, socketBuilder = TcpSocket.Builder(), scope ) @@ -250,16 +253,10 @@ class Phoenixd : CliktCommand() { nodeParams.nodeEvents .collect { when { - it is PaymentEvents.PaymentReceived && it.amount > 0.msat -> emit(ApiType.PaymentReceived(it)) - else -> {} - } - } - } - launch { - peer.eventsFlow - .collect { - when { - it is fr.acinq.lightning.io.PaymentSent -> emit(ApiType.PaymentSent(it)) + it is PaymentEvents.PaymentReceived && it.amount > 0.msat -> { + val metadata = paymentsDb.metadataQueries.get(WalletPaymentId.IncomingPaymentId(it.paymentHash)) + emit(ApiType.PaymentReceived(it, metadata)) + } else -> {} } } diff --git a/src/commonMain/kotlin/fr/acinq/lightning/bin/json/JsonSerializers.kt b/src/commonMain/kotlin/fr/acinq/lightning/bin/json/JsonSerializers.kt index 442b265..d400dc1 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/bin/json/JsonSerializers.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/bin/json/JsonSerializers.kt @@ -72,13 +72,13 @@ sealed class ApiType { @Serializable @SerialName("payment_received") - data class PaymentReceived(@SerialName("amountSat") val amount: Satoshi, val paymentHash: ByteVector32) : ApiEvent() { - constructor(event: fr.acinq.lightning.PaymentEvents.PaymentReceived) : this(event.amount.truncateToSatoshi(), event.paymentHash) + data class PaymentReceived(@SerialName("amountSat") val amount: Satoshi, val paymentHash: ByteVector32, val externalId: String?) : ApiEvent() { + constructor(event: fr.acinq.lightning.PaymentEvents.PaymentReceived, metadata: PaymentMetadata?) : this(event.amount.truncateToSatoshi(), event.paymentHash, metadata?.externalId) } @Serializable @SerialName("payment_sent") - data class PaymentSent(@SerialName("recipientAmountSat") val recipientAmount: Satoshi, @SerialName("routingFeeSat") val routingFee: Satoshi, @SerialName("paymentId") val uuid: UUID, val paymentHash: ByteVector32, val paymentPreimage: ByteVector32) : ApiEvent() { + data class PaymentSent(@SerialName("recipientAmountSat") val recipientAmount: Satoshi, @SerialName("routingFeeSat") val routingFee: Satoshi, @SerialName("paymentId") val uuid: UUID, val paymentHash: ByteVector32, val paymentPreimage: ByteVector32) : ApiType() { constructor(event: fr.acinq.lightning.io.PaymentSent) : this( event.payment.recipientAmount.truncateToSatoshi(), event.payment.routingFee.truncateToSatoshi(),