Skip to content

Commit fc9c589

Browse files
committed
Init logger
1 parent 4c8a95f commit fc9c589

File tree

7 files changed

+143
-70
lines changed

7 files changed

+143
-70
lines changed

example/App.tsx

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,7 @@ const App = () => {
5757
title={'Version'}
5858
onPress={async () => {
5959
const res = await ldk.version();
60-
if (res.isOk()) {
61-
alert(res.value.c_bindings_get_compiled_version);
62-
}
60+
alert(JSON.stringify(res));
6361
}}
6462
/>
6563

@@ -71,9 +69,23 @@ const App = () => {
7169
normal: 500,
7270
low: 100,
7371
});
74-
if (res.isOk()) {
75-
alert(res.value);
76-
}
72+
alert(JSON.stringify(res));
73+
}}
74+
/>
75+
76+
<Button
77+
title={'initLogger'}
78+
onPress={async () => {
79+
const res = await ldk.initLogger();
80+
alert(JSON.stringify(res));
81+
}}
82+
/>
83+
84+
<Button
85+
title={'setLogLevel'}
86+
onPress={async () => {
87+
const res = await ldk.setLogLevel(2, true);
88+
alert(JSON.stringify(res));
7789
}}
7890
/>
7991

ios/Classes/LdkLogger.swift

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,21 @@ import Foundation
99
import LDKFramework
1010

1111
class LdkLogger: Logger {
12+
var activeLevels: [UInt32: Bool] = [:]
13+
1214
override func log(record: Record) {
15+
let level = record.get_level().rawValue
1316

14-
//TODO separate logs for:
15-
// LDKLevel_Info
16-
// LDKLevel_Warn
17-
// LDKLevel_Debug
18-
// LDKLevel_Error
19-
// LDKLevel_Trace
17+
//Only when the JS code has set the log level to active
18+
if activeLevels[level] == true {
19+
let line = "\(record.get_args())"
20+
sendEvent(eventName: .log, eventBody: ["line" : line, "level": "\(level)" ])
21+
}
2022

21-
let line = "LDK Log \(record.get_level()): \(record.get_args())"
22-
sendEvent(eventName: .log, eventBody: ["line" : line])
23+
}
24+
25+
func setLevel(level: UInt32, active: Bool) {
26+
print("SETTING \(level) as \(active)")
27+
self.activeLevels[level] = active
2328
}
2429
}

ios/Helpers.swift

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,38 +18,30 @@ enum LdkEventNames: String {
1818
case update_persisted_channel = "update_persisted_channel"
1919
}
2020

21-
enum LdkError: Error {
22-
case unknown_error
23-
case init_fee_estimator
24-
}
25-
26-
extension LdkError: LocalizedError {
27-
public var errorDescription: String? {
28-
switch self {
29-
case .unknown_error:
30-
return "unknown_error"
31-
case .init_fee_estimator:
32-
return "init_fee_estimator"
33-
}
34-
}
21+
enum LdkErrors: String {
22+
case unknown_error = "unknown_error"
23+
case init_fee_estimator = "init_fee_estimator"
24+
case already_initialised = "already_initialised"
25+
case init_logger = "init_logger"
3526
}
3627

3728
enum LdkCallbackResponses: String {
3829
case fee_estimator_initialised = "fee_estimator_initialised"
3930
case fees_updated = "fees_updated"
31+
case logger_initialised = "logger_initialised"
32+
case log_level_updated = "log_level_updated"
4033
}
4134

4235
func handleResolve(_ resolve: RCTPromiseResolveBlock, _ res: LdkCallbackResponses) {
4336
//TODO log
4437
resolve(res.rawValue)
4538
}
4639

47-
func handleReject(_ reject: RCTPromiseRejectBlock, _ error: LdkError) {
40+
func handleReject(_ reject: RCTPromiseRejectBlock, _ error: LdkErrors) {
4841
//TODO log
49-
reject(error.errorDescription, error.localizedDescription, error)
42+
reject(error.rawValue, error.rawValue, NSError(domain: error.rawValue, code: error.hashValue))
5043
}
5144

52-
5345
func sendEvent(eventName: LdkEventNames, eventBody: [String: String]) {
5446
// ReactEventEmitter.sharedInstance()?.sendEvent(withName: eventName, body: eventBody)
5547
print("\(eventName)")

ios/Ldk.m

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,20 @@ @interface RCT_EXTERN_MODULE(Ldk, NSObject)
44

55
RCT_EXTERN_METHOD(version:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
66

7-
RCT_EXTERN_METHOD(startChainMonitor:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
8-
97
//Startup methods
108
RCT_EXTERN_METHOD(initFeeEstimator:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
9+
RCT_EXTERN_METHOD(initLogger:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
10+
RCT_EXTERN_METHOD(startChainMonitor:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
1111

1212
//Update state methods
1313
RCT_EXTERN_METHOD(updateFees:(NSInteger *)high
1414
normal:(NSInteger *)normal
1515
low:(NSInteger *)low
1616
resolve:(RCTPromiseResolveBlock)resolve
1717
reject:(RCTPromiseRejectBlock)reject)
18+
RCT_EXTERN_METHOD(setLogLevel:(NSInteger *)high
19+
active:(BOOL *)active
20+
resolve:(RCTPromiseResolveBlock)resolve
21+
reject:(RCTPromiseRejectBlock)reject)
1822

1923
@end

ios/Ldk.swift

Lines changed: 50 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import LDKFramework
44
@objc(Ldk)
55
class Ldk: NSObject {
66
var feeEstimator: LdkFeeEstimator?
7+
var logger: LdkLogger?
78

89
lazy var ldkStorage: URL = {
910
let docsurl = try! FileManager.default.url(for:.documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
@@ -19,19 +20,33 @@ class Ldk: NSObject {
1920
@objc
2021
func version(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
2122
let res: [String: String] = [
22-
"c_bindings_get_compiled_version": Bindings.swift_ldk_c_bindings_get_compiled_version(),
23-
"ldk_get_compiled_version": Bindings.swift_ldk_get_compiled_version(),
23+
"c_bindings": Bindings.swift_ldk_c_bindings_get_compiled_version(),
24+
"ldk": Bindings.swift_ldk_get_compiled_version(),
2425
]
2526

2627
resolve(String(data: try! JSONEncoder().encode(res), encoding: .utf8)!)
2728
}
2829

2930
@objc
3031
func initFeeEstimator(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
32+
guard feeEstimator == nil else {
33+
return handleReject(reject, .already_initialised)
34+
}
35+
3136
feeEstimator = LdkFeeEstimator()
3237
handleResolve(resolve, .fee_estimator_initialised)
3338
}
3439

40+
@objc
41+
func initLogger(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
42+
guard logger == nil else {
43+
return handleReject(reject, .already_initialised)
44+
}
45+
46+
logger = LdkLogger()
47+
handleResolve(resolve, .logger_initialised)
48+
}
49+
3550
@objc
3651
func updateFees(_ high: NSInteger, normal: NSInteger, low: NSInteger, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
3752
guard let feeEstimator = feeEstimator else {
@@ -42,15 +57,29 @@ class Ldk: NSObject {
4257
handleResolve(resolve, .fees_updated)
4358
}
4459

60+
@objc
61+
func setLogLevel(_ level: NSInteger, active: Bool, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
62+
guard let logger = logger else {
63+
return handleReject(reject, .init_logger)
64+
}
65+
66+
logger.setLevel(level: UInt32(level), active: active)
67+
handleResolve(resolve, .log_level_updated)
68+
}
69+
4570
@objc
4671
func startChainMonitor(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
4772
guard let feeEstimator = feeEstimator else {
4873
return handleReject(reject, .init_fee_estimator)
4974
}
5075

76+
guard let logger = logger else {
77+
return handleReject(reject, .init_logger)
78+
}
79+
5180
let filter = LdkFilter()
5281
let broadcaster = LdkBroadcaster()
53-
let logger = LdkLogger()
82+
5483
//TODO set these fees from the JS code. They should be able to be updated live.
5584

5685
let persister = LdkPersister()
@@ -63,26 +92,24 @@ class Ldk: NSObject {
6392
persister: persister
6493
)
6594

66-
67-
68-
let seed: [UInt8] = [0] //TODO
69-
70-
let seconds = UInt64(NSDate().timeIntervalSince1970)
71-
let nanoSeconds = UInt32.init(truncating: NSNumber(value: seconds * 1000 * 1000))
72-
73-
let keysManager = KeysManager(seed: seed, starting_time_secs: seconds, starting_time_nanos: nanoSeconds)
74-
75-
let network = LDKNetwork_Bitcoin
76-
77-
let _ = ChannelManager(
78-
fee_est: feeEstimator,
79-
chain_monitor: Watch(),
80-
tx_broadcaster: broadcaster,
81-
logger: logger,
82-
keys_manager: keysManager.as_KeysInterface(),
83-
config: UserConfig(),
84-
params: ChainParameters(network_arg: network, best_block_arg: BestBlock(block_hash: [], height: 0))
85-
)
95+
// let seed: [UInt8] = [0] //TODO
96+
//
97+
// let seconds = UInt64(NSDate().timeIntervalSince1970)
98+
// let nanoSeconds = UInt32.init(truncating: NSNumber(value: seconds * 1000 * 1000))
99+
//
100+
// let keysManager = KeysManager(seed: seed, starting_time_secs: seconds, starting_time_nanos: nanoSeconds)
101+
//
102+
// let network = LDKNetwork_Bitcoin
103+
//
104+
// let _ = ChannelManager(
105+
// fee_est: feeEstimator,
106+
// chain_monitor: Watch(),
107+
// tx_broadcaster: broadcaster,
108+
// logger: logger,
109+
// keys_manager: keysManager.as_KeysInterface(),
110+
// config: UserConfig(),
111+
// params: ChainParameters(network_arg: network, best_block_arg: BestBlock(block_hash: [], height: 0))
112+
// )
86113

87114
resolve("Chain monitor started")
88115
}

src/ldk.ts

Lines changed: 39 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { NativeModules, Platform } from 'react-native';
22
import { err, ok, Result } from './utils/result';
3-
import { TFeeUpdateReq, TLogListener } from './utils/types';
3+
import { ELdkLogLevels, TFeeUpdateReq, TLogListener } from "./utils/types";
44

55
const LINKING_ERROR =
66
`The package 'react-native-ldk' doesn't seem to be linked. Make sure: \n\n` +
@@ -34,7 +34,7 @@ class LDK {
3434

3535
//TODO
3636
// Step 1: Initialize the FeeEstimator ✅
37-
// Step 2: Initialize the Logger
37+
// Step 2: Initialize the Logger
3838
// Step 3: Initialize the BroadcasterInterface
3939
// Step 4: Initialize Persist
4040
// Step 5: Initialize the ChainMonitor
@@ -54,32 +54,57 @@ class LDK {
5454
// Step 19: Background Processing
5555

5656
async initFeeEstimator(fees: TFeeUpdateReq): Promise<Result<string>> {
57-
const res = await NativeLDK.initFeeEstimator();
58-
await this.updateFees(fees);
59-
return ok(res);
57+
try {
58+
const res = await NativeLDK.initFeeEstimator();
59+
return ok(res);
60+
} catch (e) {
61+
return err(e);
62+
}
63+
}
64+
65+
async initLogger(): Promise<Result<string>> {
66+
try {
67+
const res = await NativeLDK.initLogger();
68+
return ok(res);
69+
} catch (e) {
70+
return err(e);
71+
}
72+
}
73+
74+
async setLogLevel(level: ELdkLogLevels, active: boolean): Promise<Result<string>> {
75+
try {
76+
const res = await NativeLDK.setLogLevel(level, active);
77+
return ok(res);
78+
} catch (e) {
79+
return err(e);
80+
}
6081
}
6182

6283
async updateFees({ high, normal, low }: TFeeUpdateReq): Promise<Result<string>> {
63-
const res = await NativeLDK.updateFees(high, normal, low);
64-
return ok(res);
84+
try {
85+
const res = await NativeLDK.updateFees(high, normal, low);
86+
return ok(res);
87+
} catch (e) {
88+
return err(e);
89+
}
6590
}
6691

6792
/**
6893
* Starts the startChainMonitor service
6994
* @return {Promise<Err<unknown> | Ok<string>>}
7095
*/
7196
async startChainMonitor(): Promise<Result<string>> {
72-
const res = await NativeLDK.startChainMonitor();
73-
74-
return ok(res);
97+
try {
98+
const res = await NativeLDK.startChainMonitor();
99+
return ok(res);
100+
} catch (e) {
101+
return err(e);
102+
}
75103
}
76104

77-
async version(): Promise<
78-
Result<{ c_bindings_get_compiled_version: string; ldk_get_compiled_version: string }>
79-
> {
105+
async version(): Promise<Result<{ c_bindings: string; ldk: string }>> {
80106
try {
81107
const res = await NativeLDK.version();
82-
console.log(res);
83108
return ok(JSON.parse(res));
84109
} catch (e) {
85110
return err(e);

src/utils/types.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,11 @@ export type TFeeUpdateReq = {
3131
normal: number,
3232
low: number
3333
}
34+
35+
export enum ELdkLogLevels {
36+
trace = 1, //LDKLevel_Trace
37+
debug = 2, //LDKLevel_Debug
38+
info = 3, //LDKLevel_Info
39+
warn = 4, //LDKLevel_Warn
40+
error = 5, //LDKLevel_Error
41+
}

0 commit comments

Comments
 (0)