@cloudflare/realtimekit-react-native 0.0.0 → 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/LICENSE +13 -0
  2. package/README.md +83 -0
  3. package/RealtimeKitCore.podspec +19 -0
  4. package/android/build.gradle +58 -0
  5. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  6. package/android/gradle/wrapper/gradle-wrapper.properties +5 -0
  7. package/android/gradlew +185 -0
  8. package/android/gradlew.bat +89 -0
  9. package/android/src/main/AndroidManifest.xml +23 -0
  10. package/android/src/main/java/com/reactnativecore/BackgroundTimer/RNBackgroundTimer.java +97 -0
  11. package/android/src/main/java/com/reactnativecore/Constants.java +14 -0
  12. package/android/src/main/java/com/reactnativecore/CoreModule.java +49 -0
  13. package/android/src/main/java/com/reactnativecore/CorePackage.java +34 -0
  14. package/android/src/main/java/com/reactnativecore/DyteHelperModule.java +268 -0
  15. package/android/src/main/java/com/reactnativecore/DyteHolder.java +7 -0
  16. package/android/src/main/java/com/reactnativecore/ForegroundService.java +48 -0
  17. package/android/src/main/java/com/reactnativecore/NotificationHelper.java +127 -0
  18. package/android/src/main/java/com/reactnativecore/RNPermissionsModule.java +226 -0
  19. package/android/src/main/java/com/reactnativecore/incallmanager/AppRTCBluetoothManager.java +637 -0
  20. package/android/src/main/java/com/reactnativecore/incallmanager/AppRTCProximitySensor.java +133 -0
  21. package/android/src/main/java/com/reactnativecore/incallmanager/AppRTCUtils.java +41 -0
  22. package/android/src/main/java/com/reactnativecore/incallmanager/InCallManagerModule.java +1881 -0
  23. package/android/src/main/java/com/reactnativecore/incallmanager/InCallProximityManager.java +162 -0
  24. package/android/src/main/java/com/reactnativecore/incallmanager/InCallWakeLockUtils.java +116 -0
  25. package/android/src/main/java/com/reactnativecore/incallmanager/ThreadUtils.java +39 -0
  26. package/app.plugin.js +1 -0
  27. package/ios/BroadcastEventEmitter.h +11 -0
  28. package/ios/BroadcastEventEmitter.m +72 -0
  29. package/ios/Core.h +5 -0
  30. package/ios/Core.m +28 -0
  31. package/ios/Core.xcodeproj/project.pbxproj +287 -0
  32. package/ios/DyteRNBackgroundTimer.h +22 -0
  33. package/ios/DyteRNBackgroundTimer.m +90 -0
  34. package/ios/DyteRNPermissionHandlerNotifications.h +17 -0
  35. package/ios/DyteRNPermissionHandlerNotifications.m +127 -0
  36. package/ios/DyteRNPermissions.h +50 -0
  37. package/ios/DyteRNPermissions.m +275 -0
  38. package/ios/DyteScreensharePickerView.h +8 -0
  39. package/ios/DyteScreensharePickerView.m +27 -0
  40. package/ios/PrivacyInfo.xcprivacy +60 -0
  41. package/ios/RNInCallManager.h +16 -0
  42. package/ios/RNInCallManager.m +1354 -0
  43. package/ios/permissions/DyteRNPermissionHandlerBluetoothPeripheral.h +4 -0
  44. package/ios/permissions/DyteRNPermissionHandlerBluetoothPeripheral.m +87 -0
  45. package/ios/permissions/DyteRNPermissionHandlerCamera.h +5 -0
  46. package/ios/permissions/DyteRNPermissionHandlerCamera.m +38 -0
  47. package/ios/permissions/DyteRNPermissionHandlerMicrophone.h +5 -0
  48. package/ios/permissions/DyteRNPermissionHandlerMicrophone.m +34 -0
  49. package/ios/permissions/DyteRNPermissionHandlerPhotoLibrary.h +8 -0
  50. package/ios/permissions/DyteRNPermissionHandlerPhotoLibrary.m +70 -0
  51. package/ios/screenshare/DyteDarwinNotificationCenter.swift +21 -0
  52. package/ios/screenshare/DyteScreenshareAtomic.swift +29 -0
  53. package/ios/screenshare/DyteScreenshareHandler.swift +103 -0
  54. package/ios/screenshare/DyteScreenshareUploader.swift +139 -0
  55. package/ios/screenshare/DyteSocketConnection.swift +190 -0
  56. package/lib/BackgroundHandler.d.ts +20 -0
  57. package/lib/BackgroundHandler.js +87 -0
  58. package/lib/LocalMediaError.d.ts +4 -0
  59. package/lib/LocalMediaError.js +6 -0
  60. package/lib/LocalMediaHandler.d.ts +118 -0
  61. package/lib/LocalMediaHandler.js +853 -0
  62. package/lib/LocalMediaInterfaces.d.ts +76 -0
  63. package/lib/LocalMediaInterfaces.js +1 -0
  64. package/lib/LocalMediaUtils.d.ts +93 -0
  65. package/lib/LocalMediaUtils.js +276 -0
  66. package/lib/NativeAudioManager.d.ts +16 -0
  67. package/lib/NativeAudioManager.js +93 -0
  68. package/lib/PermissionHandler.d.ts +34 -0
  69. package/lib/PermissionHandler.js +179 -0
  70. package/lib/ReactContext.d.ts +42 -0
  71. package/lib/ReactContext.js +96 -0
  72. package/lib/ReactHooks.d.ts +11 -0
  73. package/lib/ReactHooks.js +73 -0
  74. package/lib/index.d.ts +10 -0
  75. package/lib/index.js +40 -0
  76. package/lib/utils/crypto.d.ts +17 -0
  77. package/lib/utils/crypto.js +82 -0
  78. package/package.json +51 -4
  79. package/plugin/build/withDyte.d.ts +25 -0
  80. package/plugin/build/withDyte.js +100 -0
  81. package/plugin/src/withDyte.ts +150 -0
  82. package/plugin/tsconfig.json +10 -0
  83. package/plugin/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,275 @@
1
+ #import "DyteRNPermissions.h"
2
+ #import <React/RCTLog.h>
3
+ #import <React/RCTConvert.h>
4
+ #import "DyteRNPermissionHandlerBluetoothPeripheral.h"
5
+ #import "DyteRNPermissionHandlerCamera.h"
6
+ #import "DyteRNPermissionHandlerMicrophone.h"
7
+ #import "DyteRNPermissionHandlerPhotoLibrary.h"
8
+ #import "DyteRNPermissionHandlerNotifications.h"
9
+
10
+ static NSString* SETTING_KEY = @"@RNPermissions:Requested";
11
+
12
+ @implementation RCTConvert(RNPermission)
13
+
14
+ RCT_ENUM_CONVERTER(RNPermission, (@{
15
+ [DyteRNPermissionHandlerBluetoothPeripheral handlerUniqueId]: @(RNPermissionBluetoothPeripheral),
16
+ [DyteRNPermissionHandlerCamera handlerUniqueId]: @(RNPermissionCamera),
17
+ [DyteRNPermissionHandlerMicrophone handlerUniqueId]: @(RNPermissionMicrophone),
18
+ [DyteRNPermissionHandlerPhotoLibrary handlerUniqueId]: @(RNPermissionPhotoLibrary),
19
+ }), RNPermissionUnknown, integerValue);
20
+
21
+ @end
22
+
23
+ @interface DyteRNPermissions()
24
+
25
+ @property (nonatomic, strong) NSMutableDictionary<NSString *, id<DyteRNPermissionHandler>> *_Nonnull handlers;
26
+
27
+ @end
28
+
29
+ @implementation DyteRNPermissions
30
+
31
+ RCT_EXPORT_MODULE();
32
+
33
+ + (BOOL)requiresMainQueueSetup {
34
+ return YES;
35
+ }
36
+
37
+ - (dispatch_queue_t)methodQueue {
38
+ return dispatch_get_main_queue();
39
+ }
40
+
41
+ - (NSDictionary *)constantsToExport {
42
+ NSMutableArray<NSString *> *available = [NSMutableArray new];
43
+
44
+
45
+ [available addObject:[DyteRNPermissionHandlerBluetoothPeripheral handlerUniqueId]];
46
+ [available addObject:[DyteRNPermissionHandlerCamera handlerUniqueId]];
47
+ [available addObject:[DyteRNPermissionHandlerMicrophone handlerUniqueId]];
48
+ [available addObject:[DyteRNPermissionHandlerPhotoLibrary handlerUniqueId]];
49
+
50
+ #if RCT_DEV
51
+ if ([available count] == 0) {
52
+ NSMutableString *message = [NSMutableString new];
53
+
54
+ [message appendString:@"⚠ No permission handler detected.\n\n"];
55
+ [message appendString:@"• Check that you link at least one permission handler in your Podfile.\n"];
56
+ [message appendString:@"• Uninstall this app, delete your Xcode DerivedData folder and rebuild it.\n"];
57
+ [message appendString:@"• If you use `use_frameworks!`, follow the workaround guide in the project README."];
58
+
59
+ RCTLogError(@"%@", message);
60
+ }
61
+ #endif
62
+
63
+ return @{ @"available": available };
64
+ }
65
+
66
+ - (void)checkUsageDescriptionKeys:(NSArray<NSString *> * _Nonnull)keys {
67
+ #if RCT_DEV
68
+ for (NSString *key in keys) {
69
+ if (![[NSBundle mainBundle] objectForInfoDictionaryKey:key]) {
70
+ RCTLogError(@"Cannot check or request permission without the required \"%@\" entry in your app \"Info.plist\" file", key);
71
+ return;
72
+ }
73
+ }
74
+ #endif
75
+ }
76
+
77
+ - (id<DyteRNPermissionHandler> _Nullable)handlerForPermission:(RNPermission)permission {
78
+ id<DyteRNPermissionHandler> handler = nil;
79
+
80
+ switch (permission) {
81
+
82
+ case RNPermissionBluetoothPeripheral:
83
+ handler = [DyteRNPermissionHandlerBluetoothPeripheral new];
84
+ break;
85
+
86
+ case RNPermissionCamera:
87
+ handler = [DyteRNPermissionHandlerCamera new];
88
+ break;
89
+ case RNPermissionMicrophone:
90
+ handler = [DyteRNPermissionHandlerMicrophone new];
91
+ break;
92
+ case RNPermissionPhotoLibrary:
93
+ handler = [DyteRNPermissionHandlerPhotoLibrary new];
94
+ break;
95
+ case RNPermissionUnknown:
96
+ break; // RCTConvert prevents this case
97
+ }
98
+
99
+ [self checkUsageDescriptionKeys:[[handler class] usageDescriptionKeys]];
100
+ return handler;
101
+ }
102
+
103
+ - (NSString *)stringForStatus:(RNPermissionStatus)status {
104
+ switch (status) {
105
+ case RNPermissionStatusNotAvailable:
106
+ case RNPermissionStatusRestricted:
107
+ return @"unavailable";
108
+ case RNPermissionStatusNotDetermined:
109
+ return @"denied";
110
+ case RNPermissionStatusDenied:
111
+ return @"blocked";
112
+ case RNPermissionStatusLimited:
113
+ return @"limited";
114
+ case RNPermissionStatusAuthorized:
115
+ return @"granted";
116
+ }
117
+ }
118
+
119
+ - (NSString *)lockHandler:(id<DyteRNPermissionHandler>)handler {
120
+ if (_handlers == nil) {
121
+ _handlers = [NSMutableDictionary new];
122
+ }
123
+
124
+ NSString *lockId = [[NSUUID UUID] UUIDString];
125
+ [_handlers setObject:handler forKey:lockId];
126
+
127
+ return lockId;
128
+ }
129
+
130
+ - (void)unlockHandler:(NSString * _Nonnull)lockId {
131
+ if (_handlers != nil) {
132
+ [self.handlers removeObjectForKey:lockId];
133
+ }
134
+ }
135
+
136
+ + (bool)isFlaggedAsRequested:(NSString * _Nonnull)handlerId {
137
+ NSArray<NSString *> *requested = [[NSUserDefaults standardUserDefaults] arrayForKey:SETTING_KEY];
138
+ return requested == nil ? false : [requested containsObject:handlerId];
139
+ }
140
+
141
+ + (void)flagAsRequested:(NSString * _Nonnull)handlerId {
142
+ NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
143
+ NSMutableArray *requested = [[userDefaults arrayForKey:SETTING_KEY] mutableCopy];
144
+
145
+ if (requested == nil) {
146
+ requested = [NSMutableArray new];
147
+ }
148
+
149
+ if (![requested containsObject:handlerId]) {
150
+ [requested addObject:handlerId];
151
+ [userDefaults setObject:requested forKey:SETTING_KEY];
152
+ [userDefaults synchronize];
153
+ }
154
+ }
155
+
156
+ RCT_REMAP_METHOD(openSettings,
157
+ openSettingsWithResolver:(RCTPromiseResolveBlock)resolve
158
+ rejecter:(RCTPromiseRejectBlock)reject) {
159
+ UIApplication *sharedApplication = [UIApplication sharedApplication];
160
+ NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
161
+
162
+ [sharedApplication openURL:url options:@{} completionHandler:^(BOOL success) {
163
+ if (success) {
164
+ resolve(@(true));
165
+ } else {
166
+ reject(@"cannot_open_settings", @"Cannot open application settings", nil);
167
+ }
168
+ }];
169
+ }
170
+
171
+ RCT_REMAP_METHOD(check,
172
+ checkWithPermission:(RNPermission)permission
173
+ resolver:(RCTPromiseResolveBlock)resolve
174
+ rejecter:(RCTPromiseRejectBlock)reject) {
175
+ id<DyteRNPermissionHandler> handler = [self handlerForPermission:permission];
176
+ NSString *lockId = [self lockHandler:handler];
177
+
178
+ [handler checkWithResolver:^(RNPermissionStatus status) {
179
+ resolve([self stringForStatus:status]);
180
+ [self unlockHandler:lockId];
181
+ } rejecter:^(NSError *error) {
182
+ reject([NSString stringWithFormat:@"%ld", (long)error.code], error.localizedDescription, error);
183
+ [self unlockHandler:lockId];
184
+ }];
185
+ }
186
+
187
+ RCT_REMAP_METHOD(request,
188
+ requestWithPermission:(RNPermission)permission
189
+ resolver:(RCTPromiseResolveBlock)resolve
190
+ rejecter:(RCTPromiseRejectBlock)reject) {
191
+ id<DyteRNPermissionHandler> handler = [self handlerForPermission:permission];
192
+ NSString *lockId = [self lockHandler:handler]; [handler requestWithResolver:^(RNPermissionStatus status) {
193
+ resolve([self stringForStatus:status]);
194
+ [self unlockHandler:lockId];
195
+ } rejecter:^(NSError *error) {
196
+ reject([NSString stringWithFormat:@"%ld", (long)error.code], error.localizedDescription, error);
197
+ [self unlockHandler:lockId];
198
+ }];
199
+ }
200
+
201
+ RCT_REMAP_METHOD(checkNotifications,
202
+ checkNotificationsWithResolver:(RCTPromiseResolveBlock)resolve
203
+ rejecter:(RCTPromiseRejectBlock)reject) {
204
+ #if __has_include("DyteRNPermissionHandlerNotifications.h")
205
+ DyteRNPermissionHandlerNotifications *handler = [DyteRNPermissionHandlerNotifications new];
206
+ NSString *lockId = [self lockHandler:(id<DyteRNPermissionHandler>)handler];
207
+
208
+ [handler checkWithResolver:^(RNPermissionStatus status, NSDictionary * _Nonnull settings) {
209
+ resolve(@{ @"status": [self stringForStatus:status], @"settings": settings });
210
+ [self unlockHandler:lockId];
211
+ } rejecter:^(NSError * _Nonnull error) {
212
+ reject([NSString stringWithFormat:@"%ld", (long)error.code], error.localizedDescription, error);
213
+ [self unlockHandler:lockId];
214
+ }];
215
+ #else
216
+ reject(@"notifications_pod_missing", @"Notifications permission pod is missing", nil);
217
+ #endif
218
+ }
219
+
220
+ RCT_REMAP_METHOD(requestNotifications,
221
+ requestNotificationsWithOptions:(NSArray<NSString *> * _Nonnull)options
222
+ resolver:(RCTPromiseResolveBlock)resolve
223
+ rejecter:(RCTPromiseRejectBlock)reject) {
224
+ #if __has_include("DyteRNPermissionHandlerNotifications.h")
225
+ DyteRNPermissionHandlerNotifications *handler = [DyteRNPermissionHandlerNotifications new];
226
+ NSString *lockId = [self lockHandler:(id<DyteRNPermissionHandler>)handler];
227
+
228
+ [handler requestWithResolver:^(RNPermissionStatus status, NSDictionary * _Nonnull settings) {
229
+ resolve(@{ @"status": [self stringForStatus:status], @"settings": settings });
230
+ [self unlockHandler:lockId];
231
+ } rejecter:^(NSError * _Nonnull error) {
232
+ reject([NSString stringWithFormat:@"%ld", (long)error.code], error.localizedDescription, error);
233
+ [self unlockHandler:lockId];
234
+ } options:options];
235
+ #else
236
+ reject(@"notifications_pod_missing", @"Notifications permission pod is missing", nil);
237
+ #endif
238
+ }
239
+
240
+ RCT_REMAP_METHOD(openLimitedPhotoLibraryPicker,
241
+ openLimitedPhotoLibraryPickerWithResolver:(RCTPromiseResolveBlock)resolve
242
+ rejecter:(RCTPromiseRejectBlock)reject) {
243
+
244
+ DyteRNPermissionHandlerPhotoLibrary *handler = [DyteRNPermissionHandlerPhotoLibrary new];
245
+ [handler openLimitedPhotoLibraryPickerWithResolver:resolve rejecter:reject];
246
+ }
247
+
248
+ RCT_REMAP_METHOD(checkLocationAccuracy,
249
+ checkLocationAccuracyWithResolver:(RCTPromiseResolveBlock)resolve
250
+ rejecter:(RCTPromiseRejectBlock)reject) {
251
+ #if __has_include("RNPermissionHandlerLocationAccuracy.h")
252
+ [self checkUsageDescriptionKeys:[RNPermissionHandlerLocationAccuracy usageDescriptionKeys]];
253
+
254
+ RNPermissionHandlerLocationAccuracy *handler = [RNPermissionHandlerLocationAccuracy new];
255
+ [handler checkWithResolver:resolve rejecter:reject];
256
+ #else
257
+ reject(@"location_accuracy_pod_missing", @"LocationAccuracy permission pod is missing", nil);
258
+ #endif
259
+ }
260
+
261
+ RCT_REMAP_METHOD(requestLocationAccuracy,
262
+ requestLocationAccuracyWithPurposeKey:(NSString * _Nonnull)purposeKey
263
+ resolver:(RCTPromiseResolveBlock)resolve
264
+ rejecter:(RCTPromiseRejectBlock)reject) {
265
+ #if __has_include("RNPermissionHandlerLocationAccuracy.h")
266
+ [self checkUsageDescriptionKeys:[RNPermissionHandlerLocationAccuracy usageDescriptionKeys]];
267
+
268
+ RNPermissionHandlerLocationAccuracy *handler = [RNPermissionHandlerLocationAccuracy new];
269
+ [handler requestWithPurposeKey:purposeKey resolver:resolve rejecter:reject];
270
+ #else
271
+ reject(@"location_accuracy_pod_missing", @"LocationAccuracy permission pod is missing", nil);
272
+ #endif
273
+ }
274
+
275
+ @end
@@ -0,0 +1,8 @@
1
+ #import <React/RCTBridgeModule.h>
2
+ #import <ReplayKit/ReplayKit.h>
3
+
4
+ @interface DyteScreensharePickerView : NSObject <RCTBridgeModule>
5
+
6
+ - (void)showScreenSharePickerView;
7
+
8
+ @end
@@ -0,0 +1,27 @@
1
+ #import "DyteScreensharePickerView.h"
2
+ #import <React/RCTLog.h>
3
+
4
+ @implementation DyteScreensharePickerView
5
+
6
+ RCT_EXPORT_MODULE()
7
+
8
+ RCT_EXPORT_METHOD(showScreenSharePickerView)
9
+ {
10
+ dispatch_async(dispatch_get_main_queue(), ^{
11
+ NSString *screenShareExtensionId = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"RTCAppScreenSharingExtension"];
12
+
13
+ RPSystemBroadcastPickerView *view = [[RPSystemBroadcastPickerView alloc] init];
14
+ view.preferredExtension = screenShareExtensionId;
15
+ view.showsMicrophoneButton = NO;
16
+
17
+ SEL selector = NSSelectorFromString(@"buttonPressed:");
18
+ if ([view respondsToSelector:selector]) {
19
+ #pragma clang diagnostic push
20
+ #pragma clang diagnostic ignored "-Warc-performSelector-leaks"
21
+ [view performSelector:selector withObject:nil];
22
+ #pragma clang diagnostic pop
23
+ }
24
+ });
25
+ }
26
+
27
+ @end
@@ -0,0 +1,60 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>NSPrivacyTracking</key>
6
+ <false />
7
+ <key>NSPrivacyTrackingDomains</key>
8
+ <array />
9
+ <key>NSPrivacyCollectedDataTypes</key>
10
+ <array>
11
+ <dict>
12
+ <key>NSPrivacyCollectedDataType</key>
13
+ <string>NSPrivacyCollectedDataTypeAudioData</string>
14
+ <key>NSPrivacyCollectedDataTypeLinked</key>
15
+ <false />
16
+ <key>NSPrivacyCollectedDataTypeTracking</key>
17
+ <false />
18
+ <key>NSPrivacyCollectedDataTypePurposes</key>
19
+ <array>
20
+ <string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
21
+ </array>
22
+ </dict>
23
+ <dict>
24
+ <key>NSPrivacyCollectedDataType</key>
25
+ <string>NSPrivacyCollectedDataTypePhotosorVideos</string>
26
+ <key>NSPrivacyCollectedDataTypeLinked</key>
27
+ <false />
28
+ <key>NSPrivacyCollectedDataTypeTracking</key>
29
+ <false />
30
+ <key>NSPrivacyCollectedDataTypePurposes</key>
31
+ <array>
32
+ <string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
33
+ </array>
34
+ </dict>
35
+ <dict>
36
+ <key>NSPrivacyCollectedDataType</key>
37
+ <string>NSPrivacyCollectedDataTypeCoarseLocation</string>
38
+ <key>NSPrivacyCollectedDataTypeLinked</key>
39
+ <false />
40
+ <key>NSPrivacyCollectedDataTypeTracking</key>
41
+ <false />
42
+ <key>NSPrivacyCollectedDataTypePurposes</key>
43
+ <array>
44
+ <string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
45
+ </array>
46
+ </dict>
47
+ </array>
48
+ <key>NSPrivacyAccessedAPITypes</key>
49
+ <array>
50
+ <dict>
51
+ <key>NSPrivacyAccessedAPIType</key>
52
+ <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
53
+ <key>NSPrivacyAccessedAPITypeReasons</key>
54
+ <array>
55
+ <string>C56D.1</string>
56
+ </array>
57
+ </dict>
58
+ </array>
59
+ </dict>
60
+ </plist>
@@ -0,0 +1,16 @@
1
+ //
2
+ // RNInCallManager.h
3
+ // RNInCallManager
4
+ //
5
+ // Created by Ian Yu-Hsun Lin (@ianlin) on 05/12/2017.
6
+ // Copyright © 2017 zxcpoiu. All rights reserved.
7
+ //
8
+
9
+
10
+ #import <Foundation/Foundation.h>
11
+ #import <AVFoundation/AVFoundation.h>
12
+ #import <React/RCTEventEmitter.h>
13
+
14
+ @interface RNInCallManager : RCTEventEmitter <RCTBridgeModule, AVAudioPlayerDelegate>
15
+
16
+ @end