Skip to content

Commit 61c84b1

Browse files
committed
iOS bindings
1 parent 1dad8d6 commit 61c84b1

File tree

22 files changed

+903
-1
lines changed

22 files changed

+903
-1
lines changed

ios/Callback.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
//
2+
// Callback.h
3+
// LncRn
4+
//
5+
#import <React/RCTBridgeModule.h>
6+
#import <React/RCTEventEmitter.h>
7+
8+
@interface Callback : NSObject
9+
@property (nonatomic, copy) RCTResponseSenderBlock rnCallback;
10+
-(void)setCallback:(RCTResponseSenderBlock)callback;
11+
-(void)sendResult:(NSString *)data;
12+
@end

ios/Callback.mm

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// Callback.m
2+
#import "Callback.h"
3+
#import <React/RCTEventEmitter.h>
4+
5+
@implementation Callback
6+
7+
-(void)setCallback:(RCTResponseSenderBlock)callback {
8+
NSLog(@"setCallback");
9+
self.rnCallback = callback;
10+
}
11+
12+
-(void)sendResult:(NSString *)data {
13+
NSLog(@"sendResult");
14+
NSLog(data);
15+
self.rnCallback(@[data]);
16+
}
17+
18+
@end

ios/LncModule.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#import <React/RCTEventEmitter.h>
2+
#import <React/RCTBridgeModule.h>
3+
4+
@interface LncModule : RCTEventEmitter <RCTBridgeModule>
5+
@end

ios/LncModule.mm

Lines changed: 219 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,219 @@
1+
#import "LncModule.h"
2+
#import "Callback.h"
3+
#import "StreamingCallback.h"
4+
#import "Lndmobile.xcframework/ios-arm64/Lndmobile.framework/Headers/Lndmobile.h"
5+
6+
7+
#ifdef RCT_NEW_ARCH_ENABLED
8+
#import "RNLncRnSpec.h"
9+
#endif
10+
11+
@implementation LncModule
12+
RCT_EXPORT_MODULE()
13+
14+
RCT_EXPORT_METHOD(initLNC:(NSString *)nameSpace)
15+
{
16+
NSError *error;
17+
MobileInitLNC(nameSpace, @"info", &error);
18+
if (error) {
19+
NSLog(@"Init error %@", error);
20+
}
21+
}
22+
23+
RCT_EXPORT_METHOD(registerLocalPrivCreateCallback:(NSString *)nameSpace
24+
resolver:(RCTResponseSenderBlock)onLocalPrivCreate)
25+
{
26+
Callback *lpccb = [[Callback alloc] init];
27+
[lpccb setCallback:onLocalPrivCreate];
28+
NSError *error;
29+
MobileRegisterLocalPrivCreateCallback(nameSpace, lpccb, &error);
30+
if (error) {
31+
NSLog(@"registerLocalPrivCreateCallback error %@", error);
32+
}
33+
}
34+
35+
RCT_EXPORT_METHOD(registerRemoteKeyReceiveCallback:(NSString *)nameSpace
36+
resolver:(RCTResponseSenderBlock)onRemoteKeyReceive)
37+
{
38+
Callback * rkrcb = [[Callback alloc] init];
39+
[rkrcb setCallback:onRemoteKeyReceive];
40+
NSError *error;
41+
MobileRegisterRemoteKeyReceiveCallback(nameSpace, rkrcb, &error);
42+
if (error) {
43+
NSLog(@"registerRemoteKeyReceiveCallback error %@", error);
44+
}
45+
}
46+
47+
RCT_EXPORT_METHOD(registerAuthDataCallback:(NSString *)nameSpace
48+
resolver:(RCTResponseSenderBlock)onAuthData)
49+
{
50+
Callback * oacb = [[Callback alloc] init];
51+
[oacb setCallback:onAuthData];
52+
NSError *error;
53+
MobileRegisterAuthDataCallback(nameSpace, oacb, &error);
54+
if (error) {
55+
NSLog(@"registerAuthDataCallback error %@", error);
56+
}
57+
}
58+
59+
RCT_EXPORT_METHOD(isConnected:(NSString *)nameSpace
60+
resolver:(RCTPromiseResolveBlock)resolve
61+
rejecter:(RCTPromiseRejectBlock)reject)
62+
{
63+
BOOL isConnected;
64+
NSError *error;
65+
MobileIsConnected(nameSpace, &isConnected, &error);
66+
if (error) {
67+
reject(@"isConnected_failure", @"error thrown", error);
68+
} else {
69+
resolve(@(isConnected));
70+
}
71+
}
72+
73+
RCT_EXPORT_METHOD(status:(NSString *)nameSpace
74+
resolver:(RCTPromiseResolveBlock)resolve
75+
rejecter:(RCTPromiseRejectBlock)reject)
76+
{
77+
NSError *error;
78+
NSString *status = MobileStatus(nameSpace, &error);
79+
if (status) {
80+
resolve(status);
81+
} else if (error) {
82+
reject(@"status_failure", @"error thrown", error);
83+
}
84+
}
85+
86+
RCT_EXPORT_METHOD(expiry:(NSString *)nameSpace
87+
resolver:(RCTPromiseResolveBlock)resolve
88+
rejecter:(RCTPromiseRejectBlock)reject)
89+
{
90+
NSError *error;
91+
NSString *expiry = MobileGetExpiry(nameSpace, &error);
92+
if (expiry) {
93+
resolve(expiry);
94+
} else if (error) {
95+
reject(@"expiry_error", @"error thrown", error);
96+
}
97+
}
98+
99+
RCT_EXPORT_METHOD(isReadOnly:(NSString *)nameSpace
100+
resolver:(RCTPromiseResolveBlock)resolve)
101+
{
102+
BOOL readOnly = MobileIsReadOnly(nameSpace, nil, nil);
103+
resolve(@(readOnly));
104+
}
105+
106+
RCT_EXPORT_METHOD(hasPerms:(NSString *)nameSpace
107+
permission:(NSString *)permission
108+
resolver:(RCTPromiseResolveBlock)resolve)
109+
{
110+
BOOL hasPermissions;
111+
NSError *error;
112+
MobileHasPermissions(nameSpace, permission, &hasPermissions, &error);
113+
resolve(@(hasPermissions));
114+
if (error) {
115+
NSLog(@"disconnect error %@", error);
116+
}
117+
}
118+
119+
RCT_EXPORT_METHOD(connectServer:(NSString *)nameSpace
120+
mailboxServerAddr:(NSString *)mailboxServerAddr
121+
isDevServer:(BOOL)isDevServer
122+
connectPhrase:(NSString *)connectPhrase
123+
localStatic:(NSString *)localStatic
124+
remoteStatic:(NSString *)remoteStatic)
125+
{
126+
NSError *error;
127+
MobileConnectServer(nameSpace, mailboxServerAddr, isDevServer, connectPhrase, localStatic, remoteStatic, nil);
128+
if (error) {
129+
NSLog(@"connectServer error %@", error);
130+
}
131+
}
132+
133+
RCT_EXPORT_METHOD(disconnect:(NSString *)nameSpace)
134+
{
135+
NSError *error;
136+
MobileDisconnect(nameSpace, &error);
137+
if (error) {
138+
NSLog(@"disconnect error %@", error);
139+
}
140+
}
141+
142+
RCT_EXPORT_METHOD(invokeRPC:(NSString *)nameSpace
143+
route:(NSString *)route
144+
requestData:(NSString *)requestData
145+
resolver:(RCTResponseSenderBlock)resolve)
146+
{
147+
Callback * gocb = [[Callback alloc] init];
148+
[gocb setCallback:resolve];
149+
NSError *error;
150+
MobileInvokeRPC(nameSpace, route, requestData, gocb, &error);
151+
if (error) {
152+
NSLog(@"connectServer error %@", error);
153+
}
154+
}
155+
156+
// placeholders to prevent NativeEventEmitter from erroring
157+
// on initialization
158+
-(void)startObserving {}
159+
-(void)stopObserving {}
160+
161+
RCT_EXPORT_METHOD(initListener:(NSString *)nameSpace
162+
eventName:(NSString *)eventName
163+
request:(NSString *)request)
164+
{
165+
StreamingCallback * gocb = [[StreamingCallback alloc] init];
166+
gocb.delegate = self;
167+
[gocb setEventName:eventName];
168+
NSError *error;
169+
MobileInvokeRPC(nameSpace, eventName, request, gocb, &error);
170+
if (error) {
171+
NSLog(@"%@ error %@", eventName, error);
172+
}
173+
}
174+
175+
- (NSArray<NSString *> *)supportedEvents {
176+
// TODO add all streaming events names to list
177+
return @[
178+
@"lnrpc.Lightning.SubscribePeerEvents",
179+
@"lnrpc.Lightning.SubscribePeerEvents",
180+
@"chainrpc.ChainNotifier.RegisterConfirmationsNtfn",
181+
@"chainrpc.ChainNotifier.RegisterSpendNtfn",
182+
@"chainrpc.ChainNotifier.RegisterBlockEpochNtfn",
183+
@"invoicesrpc.Invoices.SubscribeSingleInvoice",
184+
@"lnrpc.Lightning.SubscribeTransactions",
185+
@"lnrpc.Lightning.SubscribePeerEvents",
186+
@"lnrpc.Lightning.SubscribeChannelEvents",
187+
@"lnrpc.Lightning.OpenChannel",
188+
@"lnrpc.Lightning.ChannelAcceptor",
189+
@"lnrpc.Lightning.CloseChannel",
190+
@"lnrpc.Lightning.SendPayment",
191+
@"lnrpc.Lightning.SendToRoute",
192+
@"lnrpc.Lightning.SubscribeInvoices",
193+
@"lnrpc.Lightning.SubscribeChannelGraph",
194+
@"lnrpc.Lightning.SubscribeChannelBackups",
195+
@"lnrpc.Lightning.RegisterRPCMiddleware",
196+
@"lnrpc.Lightning.SubscribeCustomMessages",
197+
@"routerrpc.Router.SendPaymentV2",
198+
@"routerrpc.Router.TrackPaymentV2",
199+
@"routerrpc.Router.SubscribeHtlcEvents",
200+
@"routerrpc.Router.SendPayment",
201+
@"routerrpc.Router.TrackPayment",
202+
@"routerrpc.Router.HtlcInterceptor",
203+
@"looprpc.SwapClient.Monitor",
204+
@"poolrpc.ChannelAuctioneer.SubscribeBatchAuction",
205+
@"poolrpc.ChannelAuctioneer.SubscribeSidecar",
206+
@"poolrpc.HashMail.RecvStream"
207+
];
208+
}
209+
210+
// Don't compile this code when we build for the old architecture.
211+
#ifdef RCT_NEW_ARCH_ENABLED
212+
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
213+
(const facebook::react::ObjCTurboModule::InitParams &)params
214+
{
215+
return std::make_shared<facebook::react::NativeLncRnSpecJSI>(params);
216+
}
217+
#endif
218+
219+
@end

0 commit comments

Comments
 (0)