Skip to content
This repository was archived by the owner on Feb 9, 2026. It is now read-only.

Commit 829f5c8

Browse files
committed
Event for pending HTLCs forwardable and swift implementation for processing them
1 parent 0bc1c34 commit 829f5c8

6 files changed

Lines changed: 53 additions & 1 deletion

File tree

ios/Classes/LdkChannelManagerPersister.swift

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,16 @@ class LdkChannelManagerPersister: Persister, ExtendedChannelManagerPersister {
139139
//Unused on mobile
140140
return
141141
case .PendingHTLCsForwardable:
142-
//TODO not sure if required.
142+
guard let pendingHTLCsForwardable = event.getValueAsPendingHTLCsForwardable() else {
143+
return handleEventError(event)
144+
}
145+
146+
LdkEventEmitter.shared.send(
147+
withEvent: .channel_manager_pending_htlcs_forwardable,
148+
body: [
149+
"time_forwardable": pendingHTLCsForwardable.getTime_forwardable(),
150+
]
151+
)
143152
return
144153
case .SpendableOutputs:
145154
guard let spendableOutputs = event.getValueAsSpendableOutputs() else {

ios/Ldk.m

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ @interface RCT_EXTERN_MODULE(Ldk, NSObject)
8080
description:(NSString *)description
8181
resolve:(RCTPromiseResolveBlock)resolve
8282
reject:(RCTPromiseRejectBlock)reject)
83+
RCT_EXTERN_METHOD(processPendingHtlcForwards:(RCTPromiseResolveBlock)resolve
84+
reject:(RCTPromiseRejectBlock)reject)
8385
@end
8486

8587
//MARK: Events

ios/Ldk.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ enum EventTypes: String, CaseIterable {
2121
case channel_manager_payment_path_successful = "channel_manager_payment_path_successful"
2222
case channel_manager_payment_path_failed = "channel_manager_payment_path_failed"
2323
case channel_manager_payment_failed = "channel_manager_payment_failed"
24+
case channel_manager_pending_htlcs_forwardable = "channel_manager_pending_htlcs_forwardable"
2425
case channel_manager_spendable_outputs = "channel_manager_spendable_outputs"
2526
case channel_manager_channel_closed = "channel_manager_channel_closed"
2627
case channel_manager_discard_funding = "channel_manager_discard_funding"
@@ -66,6 +67,7 @@ enum LdkCallbackResponses: String {
6667
case invoice_payment_success = "invoice_payment_success"
6768
case tx_set_confirmed = "tx_set_confirmed"
6869
case tx_set_unconfirmed = "tx_set_unconfirmed"
70+
case process_pending_htlc_forwards_success = "process_pending_htlc_forwards_success"
6971
}
7072

7173
@objc(Ldk)
@@ -467,6 +469,17 @@ class Ldk: NSObject {
467469
return handleReject(reject, .invoice_create_failed, nil, "Invoice creation error: \(creationError.rawValue)")
468470
}
469471

472+
@objc
473+
func processPendingHtlcForwards(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
474+
guard let channelManager = channelManager else {
475+
return handleReject(reject, .init_channel_manager)
476+
}
477+
478+
channelManager.process_pending_htlc_forwards()
479+
480+
handleResolve(resolve, .process_pending_htlc_forwards_success)
481+
}
482+
470483
//MARK: Fetch methods
471484
@objc
472485
func version(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {

src/ldk.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,19 @@ class LDK {
310310
}
311311
}
312312

313+
/**
314+
* https://docs.rs/lightning/latest/lightning/ln/channelmanager/struct.ChannelManager.html#method.process_pending_htlc_forwards
315+
* @returns {Promise<Err<unknown> | Ok<Ok<string> | Err<string>>>}
316+
*/
317+
async processPendingHtlcForwards(): Promise<Result<string>> {
318+
try {
319+
const res = await NativeLDK.processPendingHtlcForwards();
320+
return ok(res);
321+
} catch (e) {
322+
return err(e);
323+
}
324+
}
325+
313326
/**
314327
* Pays a bolt11 payment request
315328
* @param paymentRequest

src/lightning-manager.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import {
2020
TPersistManagerEvent,
2121
TRegisterOutputEvent,
2222
TRegisterTxEvent,
23+
TChannelManagerPendingHtlcsForwardable,
2324
} from './utils/types';
2425
import {
2526
dummyRandomSeed,
@@ -105,6 +106,10 @@ class LightningManager {
105106
EEventTypes.channel_manager_payment_failed,
106107
this.onChannelManagerPaymentFailed.bind(this),
107108
);
109+
ldk.onEvent(
110+
EEventTypes.channel_manager_pending_htlcs_forwardable,
111+
this.onChannelManagerPendingHtlcsForwardable.bind(this),
112+
);
108113
ldk.onEvent(
109114
EEventTypes.channel_manager_spendable_outputs,
110115
this.onChannelManagerSpendableOutputs.bind(this),
@@ -369,6 +374,12 @@ class LightningManager {
369374
console.log(`onChannelManagerPaymentFailed: ${JSON.stringify(res)}`); //TODO
370375
}
371376

377+
private onChannelManagerPendingHtlcsForwardable(
378+
res: TChannelManagerPendingHtlcsForwardable,
379+
): void {
380+
ldk.processPendingHtlcForwards().catch(console.error);
381+
}
382+
372383
private onChannelManagerSpendableOutputs(
373384
res: TChannelManagerSpendableOutputs,
374385
): void {

src/utils/types.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export enum EEventTypes {
2222
channel_manager_payment_path_successful = 'channel_manager_payment_path_successful',
2323
channel_manager_payment_path_failed = 'channel_manager_payment_path_failed',
2424
channel_manager_payment_failed = 'channel_manager_payment_failed',
25+
channel_manager_pending_htlcs_forwardable = 'channel_manager_pending_htlcs_forwardable',
2526
channel_manager_spendable_outputs = 'channel_manager_spendable_outputs',
2627
channel_manager_channel_closed = 'channel_manager_channel_closed',
2728
channel_manager_discard_funding = 'channel_manager_discard_funding',
@@ -89,6 +90,9 @@ export type TChannelManagerPaymentFailed = {
8990
payment_id: string;
9091
payment_hash: string;
9192
};
93+
export type TChannelManagerPendingHtlcsForwardable = {
94+
time_forwardable: number;
95+
};
9296
export type TChannelManagerSpendableOutputs = {
9397
outputs: string[];
9498
};

0 commit comments

Comments
 (0)