@@ -71,6 +71,7 @@ enum LdkCallbackResponses: String {
7171 case fees_updated = " fees_updated "
7272 case log_level_updated = " log_level_updated "
7373 case log_path_updated = " log_path_updated "
74+ case log_write_success = " log_write_success "
7475 case chain_monitor_init_success = " chain_monitor_init_success "
7576 case keys_manager_init_success = " keys_manager_init_success "
7677 case channel_manager_init_success = " channel_manager_init_success "
@@ -174,6 +175,12 @@ class Ldk: NSObject {
174175 return handleResolve ( resolve, . log_path_updated)
175176 }
176177
178+ @objc
179+ func writeToLogFile( _ line: NSString , resolve: @escaping RCTPromiseResolveBlock , reject: @escaping RCTPromiseRejectBlock ) {
180+ Logfile . log. write ( String ( line) )
181+ return handleResolve ( resolve, . log_write_success)
182+ }
183+
177184 @objc
178185 func initChainMonitor( _ resolve: @escaping RCTPromiseResolveBlock , reject: @escaping RCTPromiseRejectBlock ) {
179186 guard chainMonitor == nil else {
@@ -250,13 +257,14 @@ class Ldk: NSObject {
250257 if read. isOk ( ) {
251258 networkGraph = read. getValue ( )
252259 LdkEventEmitter . shared. send ( withEvent: . native_log, body: " Loaded network graph from file " )
253-
254260 }
255261 } catch {
256262 networkGraph = NetworkGraph ( genesis_hash: String ( genesisHash) . hexaBytes, logger: logger)
257263 LdkEventEmitter . shared. send ( withEvent: . native_log, body: " Failed to load cached network graph from disk. Will sync from scratch. \( error. localizedDescription) " )
258264 }
259265
266+ print ( " rapidGossipSyncUrl: \( rapidGossipSyncUrl) " )
267+
260268 //Download url passed, enable rapid gossip sync
261269 if rapidGossipSyncUrl != " " {
262270 do {
@@ -377,6 +385,8 @@ class Ldk: NSObject {
377385 channelMonitorsSerialized. append ( [ UInt8] ( try ! Data ( contentsOf: channelFile. standardizedFileURL) ) )
378386 }
379387
388+ print ( " enableP2PGossip \( enableP2PGossip) " )
389+
380390 do {
381391 //Only restore a node if we have existing channel monitors to restore. Else we lose our UserConfig settings when restoring.
382392 if let channelManagerSerialized = storedChannelManager, channelMonitorsSerialized. count > 0 {
@@ -430,6 +440,10 @@ class Ldk: NSObject {
430440 peerHandler = channelManagerConstructor!. getTCPPeerHandler ( )
431441 invoicePayer = channelManagerConstructor!. payer
432442
443+ if enableP2PGossip {
444+ self . networkGraph = channelManagerConstructor!. net_graph
445+ }
446+
433447 return handleResolve ( resolve, . channel_manager_init_success)
434448 }
435449
@@ -819,7 +833,7 @@ class Ldk: NSObject {
819833 }
820834
821835 @objc
822- func networkGraphListNodes ( _ resolve: @escaping RCTPromiseResolveBlock , reject: @escaping RCTPromiseRejectBlock ) {
836+ func networkGraphListNodeIds ( _ resolve: @escaping RCTPromiseResolveBlock , reject: @escaping RCTPromiseRejectBlock ) {
823837 guard let networkGraph = networkGraph? . read_only ( ) else {
824838 return handleReject ( reject, . init_network_graph)
825839 }
@@ -833,20 +847,31 @@ class Ldk: NSObject {
833847 }
834848
835849 @objc
836- func networkGraphNode ( _ nodeId : NSString , resolve: @escaping RCTPromiseResolveBlock , reject: @escaping RCTPromiseRejectBlock ) {
850+ func networkGraphNodes ( _ nodeIds : NSArray , resolve: @escaping RCTPromiseResolveBlock , reject: @escaping RCTPromiseRejectBlock ) {
837851 guard let networkGraph = networkGraph? . read_only ( ) else {
838852 return handleReject ( reject, . init_network_graph)
839853 }
854+
855+ let graphNodes = networkGraph. list_nodes ( ) . map { Data ( $0. as_slice ( ) ) . hexEncodedString ( ) }
856+
857+ //Filter out nodes we don't know about as querying unknown nodes will cause a crash
858+ let includedList = nodeIds. map ( { $0 as! String } ) . filter { id in
859+ return graphNodes. contains { id == $0 }
860+ }
840861
841- return resolve ( networkGraph. node ( node_id: NodeId ( pubkey: String ( nodeId) . hexaBytes) ) . asJson)
862+ return resolve ( includedList. map ( { id in
863+ var info = networkGraph. node ( node_id: NodeId ( pubkey: id. hexaBytes) ) . asJson
864+ info [ " id " ] = id
865+ return info
866+ } ) )
842867 }
843868
844869 @objc
845870 func networkGraphListChannels( _ resolve: @escaping RCTPromiseResolveBlock , reject: @escaping RCTPromiseRejectBlock ) {
846871 guard let networkGraph = networkGraph? . read_only ( ) else {
847872 return handleReject ( reject, . init_network_graph)
848873 }
849-
874+
850875 let total = networkGraph. list_channels ( ) . count
851876 if total > 100 {
852877 return handleReject ( reject, . data_too_large_for_rn, nil , " Too many channels to return ( \( total) ) " )
@@ -861,7 +886,14 @@ class Ldk: NSObject {
861886 return handleReject ( reject, . init_network_graph)
862887 }
863888
864- return resolve ( networkGraph. channel ( short_channel_id: UInt64 ( shortChannelId as String ) !) . asJson)
889+ let channelId = String ( shortChannelId)
890+
891+ let channels = networkGraph. list_channels ( )
892+ if !channels. contains{ channelId == String ( $0) } {
893+ return handleReject ( reject, . init_network_graph)
894+ }
895+
896+ return resolve ( networkGraph. channel ( short_channel_id: UInt64 ( channelId) !) . asJson)
865897 }
866898
867899 @objc
0 commit comments