@@ -46,6 +46,8 @@ enum LdkErrors: String {
4646 case decode_invoice_fail = " decode_invoice_fail "
4747 case init_invoice_payer = " init_invoice_payer "
4848 case invoice_payment_fail = " invoice_payment_fail "
49+ case init_ldk_currency = " init_ldk_currency "
50+ case invoice_create_failed = " invoice_create_failed "
4951}
5052
5153enum LdkCallbackResponses : String {
@@ -86,6 +88,8 @@ class Ldk: NSObject {
8688 var peerHandler : TCPPeerHandler ?
8789 var channelManagerConstructor : ChannelManagerConstructor ?
8890 var invoicePayer : InvoicePayer ?
91+ var ldkNetwork : LDKNetwork ?
92+ var ldkCurrency : LDKCurrency ?
8993
9094 lazy var ldkStorage : URL = {
9195 let docsurl = try ! FileManager . default. url ( for: . documentDirectory, in: . userDomainMask, appropriateFor: nil , create: false )
@@ -205,14 +209,16 @@ class Ldk: NSObject {
205209 return handleReject ( reject, . init_network_graph)
206210 }
207211
208- let ldkNetwork : LDKNetwork !
209212 switch network {
210213 case " regtest " :
211214 ldkNetwork = LDKNetwork_Regtest
215+ ldkCurrency = LDKCurrency_Regtest
212216 case " testnet " :
213217 ldkNetwork = LDKNetwork_Testnet
218+ ldkCurrency = LDKCurrency_BitcoinTestnet
214219 case " mainnet " :
215220 ldkNetwork = LDKNetwork_Bitcoin
221+ ldkCurrency = LDKCurrency_Bitcoin
216222 default :
217223 return handleReject ( reject, . invalid_network)
218224 }
@@ -221,7 +227,7 @@ class Ldk: NSObject {
221227 if channelMonitors. count == 0 {
222228 //New node
223229 channelManagerConstructor = ChannelManagerConstructor (
224- network: ldkNetwork,
230+ network: ldkNetwork! ,
225231 config: userConfig,
226232 current_blockchain_tip_hash: String ( blockHash) . hexaBytes,
227233 current_blockchain_tip_height: UInt32 ( blockHeight) ,
@@ -331,23 +337,8 @@ class Ldk: NSObject {
331337 let error = parsedInvoice. getError ( ) ? . getValueAsParseError ( )
332338 return handleReject ( reject, . decode_invoice_fail, nil , error? . to_str ( ) )
333339 }
334-
335-
336- resolve ( [
337- " amount_milli_satoshis " : invoice. amount_milli_satoshis ( ) . getValue ( ) as Any ,
338- " check_signature " : invoice. check_signature ( ) . isOk ( ) ,
339- " is_expired " : invoice. is_expired ( ) ,
340- " duration_since_epoch " : invoice. duration_since_epoch ( ) ,
341- " expiry_time " : invoice. expiry_time ( ) ,
342- " min_final_cltv_expiry " : invoice. min_final_cltv_expiry ( ) ,
343- " payee_pub_key " : Data ( invoice. payee_pub_key ( ) ) . hexEncodedString ( ) ,
344- " recover_payee_pub_key " : Data ( invoice. recover_payee_pub_key ( ) ) . hexEncodedString ( ) ,
345- " payment_hash " : Data ( invoice. payment_hash ( ) ) . hexEncodedString ( ) ,
346- " payment_secret " : Data ( invoice. payment_secret ( ) ) . hexEncodedString ( ) ,
347- " timestamp " : invoice. timestamp ( ) ,
348- " features " : Data ( invoice. features ( ) . write ( ) ) . hexEncodedString ( ) ,
349- " currency " : invoice. currency ( ) . rawValue
350- ] )
340+
341+ resolve ( invoice. asJson) //Invoice class extended in Helpers file
351342 }
352343
353344 @objc
@@ -393,7 +384,43 @@ class Ldk: NSObject {
393384 default :
394385 return handleReject ( reject, . invoice_payment_fail, nil , res. getError ( ) . debugDescription)
395386 }
387+ }
388+
389+ @objc
390+ func createPaymentRequest( _ amountSats: NSInteger , description: NSString , resolve: @escaping RCTPromiseResolveBlock , reject: @escaping RCTPromiseRejectBlock ) {
391+ guard let channelManager = channelManager else {
392+ return handleReject ( reject, . init_channel_manager)
393+ }
394+
395+ guard let keysManager = keysManager else {
396+ return handleReject ( reject, . init_keys_manager)
397+ }
396398
399+ guard let ldkCurrency = ldkCurrency else {
400+ return handleReject ( reject, . init_ldk_currency)
401+ }
402+
403+ let res = Bindings . createInvoiceFromChannelManager (
404+ channelManager: channelManager,
405+ keysManager: keysManager. as_KeysInterface ( ) ,
406+ network: ldkCurrency,
407+ amountMsat: UInt64 ( amountSats) ,
408+ description: String ( description)
409+ )
410+
411+ if res. isOk ( ) {
412+ guard let invoice = res. getValue ( ) else {
413+ return handleReject ( reject, . invoice_create_failed)
414+ }
415+
416+ return resolve ( invoice. asJson) //Invoice class extended in Helpers file
417+ }
418+
419+ guard let error = res. getError ( ) , let creationError = error. getValueAsCreationError ( ) else {
420+ return handleReject ( reject, . invoice_create_failed)
421+ }
422+
423+ return handleReject ( reject, . invoice_create_failed, nil , " Invoice creation error: \( creationError. rawValue) " )
397424 }
398425
399426 //MARK: Fetch methods
@@ -410,7 +437,7 @@ class Ldk: NSObject {
410437 @objc
411438 func nodeId( _ resolve: @escaping RCTPromiseResolveBlock , reject: @escaping RCTPromiseRejectBlock ) {
412439 guard let channelManager = channelManager else {
413- return handleReject ( reject, . load_channel_monitors )
440+ return handleReject ( reject, . init_channel_manager )
414441 }
415442
416443 resolve ( Data ( channelManager. get_our_node_id ( ) ) . hexEncodedString ( ) )
0 commit comments