bridgefy-react-native 1.1.8 → 1.1.9

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 (105) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +137 -76
  3. package/android/build.gradle +37 -56
  4. package/android/gradle.properties +4 -4
  5. package/android/src/main/AndroidManifest.xml +1 -11
  6. package/android/src/main/java/me/bridgefy/plugin/react_native/BridgefyReactNativeModule.kt +590 -333
  7. package/android/src/main/java/me/bridgefy/plugin/react_native/BridgefyReactNativePackage.kt +25 -8
  8. package/android/src/main/java/me/bridgefy/plugin/react_native/service/BridgefyService.kt +625 -0
  9. package/android/src/main/java/me/bridgefy/plugin/react_native/util/BridgefyOperationModeManager.kt +193 -0
  10. package/android/src/main/java/me/bridgefy/plugin/react_native/util/BridgefyServiceManager.kt +123 -0
  11. package/android/src/main/java/me/bridgefy/plugin/react_native/util/Utils.kt +172 -0
  12. package/bridgefy-react-native.podspec +5 -25
  13. package/ios/BridgefyReactNativeModule.m +88 -0
  14. package/ios/BridgefyReactNativeModule.swift +524 -0
  15. package/lib/module/NativeBridgefy.js +117 -0
  16. package/lib/module/NativeBridgefy.js.map +1 -0
  17. package/lib/module/index.js +172 -207
  18. package/lib/module/index.js.map +1 -1
  19. package/lib/module/package.json +1 -0
  20. package/lib/typescript/package.json +1 -0
  21. package/lib/typescript/src/NativeBridgefy.d.ts +250 -0
  22. package/lib/typescript/src/NativeBridgefy.d.ts.map +1 -0
  23. package/lib/typescript/src/index.d.ts +146 -0
  24. package/lib/typescript/src/index.d.ts.map +1 -0
  25. package/package.json +77 -74
  26. package/src/NativeBridgefy.ts +321 -0
  27. package/src/index.tsx +283 -225
  28. package/ios/BridgefyReactNative.m +0 -56
  29. package/ios/BridgefyReactNative.swift +0 -368
  30. package/ios/BridgefyReactNative.xcodeproj/project.pbxproj +0 -293
  31. package/ios/BridgefyReactNative.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  32. package/ios/BridgefyReactNative.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  33. package/ios/BridgefyReactNative.xcodeproj/project.xcworkspace/xcuserdata/bridgefy.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  34. package/ios/BridgefyReactNative.xcodeproj/xcuserdata/bridgefy.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
  35. package/ios/Frameworks/BridgefySDK.xcframework/Info.plist +0 -48
  36. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64/BridgefySDK.framework/BridgefySDK +0 -0
  37. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64/BridgefySDK.framework/Headers/BridgefySDK-Swift.h +0 -317
  38. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64/BridgefySDK.framework/Headers/BridgefySDK.h +0 -15
  39. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64/BridgefySDK.framework/Info.plist +0 -0
  40. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64/BridgefySDK.framework/Modules/BridgefySDK.swiftmodule/arm64-apple-ios.abi.json +0 -5523
  41. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64/BridgefySDK.framework/Modules/BridgefySDK.swiftmodule/arm64-apple-ios.private.swiftinterface +0 -116
  42. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64/BridgefySDK.framework/Modules/BridgefySDK.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
  43. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64/BridgefySDK.framework/Modules/BridgefySDK.swiftmodule/arm64-apple-ios.swiftinterface +0 -116
  44. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64/BridgefySDK.framework/Modules/module.modulemap +0 -11
  45. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64/BridgefySDK.framework/_CodeSignature/CodeResources +0 -190
  46. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64/dSYMs/BridgefySDK.framework.dSYM/Contents/Info.plist +0 -20
  47. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64/dSYMs/BridgefySDK.framework.dSYM/Contents/Resources/DWARF/BridgefySDK +0 -0
  48. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64/dSYMs/BridgefySDK.framework.dSYM/Contents/Resources/Relocations/aarch64/BridgefySDK.yml +0 -12529
  49. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64_x86_64-simulator/BridgefySDK.framework/BridgefySDK +0 -0
  50. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64_x86_64-simulator/BridgefySDK.framework/Headers/BridgefySDK-Swift.h +0 -630
  51. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64_x86_64-simulator/BridgefySDK.framework/Headers/BridgefySDK.h +0 -15
  52. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64_x86_64-simulator/BridgefySDK.framework/Info.plist +0 -0
  53. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64_x86_64-simulator/BridgefySDK.framework/Modules/BridgefySDK.swiftmodule/arm64-apple-ios-simulator.abi.json +0 -5523
  54. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64_x86_64-simulator/BridgefySDK.framework/Modules/BridgefySDK.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +0 -116
  55. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64_x86_64-simulator/BridgefySDK.framework/Modules/BridgefySDK.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
  56. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64_x86_64-simulator/BridgefySDK.framework/Modules/BridgefySDK.swiftmodule/arm64-apple-ios-simulator.swiftinterface +0 -116
  57. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64_x86_64-simulator/BridgefySDK.framework/Modules/BridgefySDK.swiftmodule/x86_64-apple-ios-simulator.abi.json +0 -5523
  58. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64_x86_64-simulator/BridgefySDK.framework/Modules/BridgefySDK.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +0 -116
  59. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64_x86_64-simulator/BridgefySDK.framework/Modules/BridgefySDK.swiftmodule/x86_64-apple-ios-simulator.swiftdoc +0 -0
  60. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64_x86_64-simulator/BridgefySDK.framework/Modules/BridgefySDK.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +0 -116
  61. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64_x86_64-simulator/BridgefySDK.framework/Modules/module.modulemap +0 -11
  62. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64_x86_64-simulator/BridgefySDK.framework/_CodeSignature/CodeResources +0 -245
  63. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64_x86_64-simulator/dSYMs/BridgefySDK.framework.dSYM/Contents/Info.plist +0 -20
  64. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64_x86_64-simulator/dSYMs/BridgefySDK.framework.dSYM/Contents/Resources/DWARF/BridgefySDK +0 -0
  65. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64_x86_64-simulator/dSYMs/BridgefySDK.framework.dSYM/Contents/Resources/Relocations/aarch64/BridgefySDK.yml +0 -12276
  66. package/ios/Frameworks/BridgefySDK.xcframework/ios-arm64_x86_64-simulator/dSYMs/BridgefySDK.framework.dSYM/Contents/Resources/Relocations/x86_64/BridgefySDK.yml +0 -11932
  67. package/lib/commonjs/index.js +0 -278
  68. package/lib/commonjs/index.js.map +0 -1
  69. package/lib/commonjs/infraestructure/index.js +0 -28
  70. package/lib/commonjs/infraestructure/index.js.map +0 -1
  71. package/lib/commonjs/infraestructure/interfaces/ibridgefy.js +0 -6
  72. package/lib/commonjs/infraestructure/interfaces/ibridgefy.js.map +0 -1
  73. package/lib/commonjs/infraestructure/interfaces/index.js +0 -17
  74. package/lib/commonjs/infraestructure/interfaces/index.js.map +0 -1
  75. package/lib/commonjs/infraestructure/services/bridgefy_service.js +0 -6
  76. package/lib/commonjs/infraestructure/services/bridgefy_service.js.map +0 -1
  77. package/lib/commonjs/infraestructure/services/index.js +0 -17
  78. package/lib/commonjs/infraestructure/services/index.js.map +0 -1
  79. package/lib/module/infraestructure/index.js +0 -3
  80. package/lib/module/infraestructure/index.js.map +0 -1
  81. package/lib/module/infraestructure/interfaces/ibridgefy.js +0 -2
  82. package/lib/module/infraestructure/interfaces/ibridgefy.js.map +0 -1
  83. package/lib/module/infraestructure/interfaces/index.js +0 -2
  84. package/lib/module/infraestructure/interfaces/index.js.map +0 -1
  85. package/lib/module/infraestructure/services/bridgefy_service.js +0 -2
  86. package/lib/module/infraestructure/services/bridgefy_service.js.map +0 -1
  87. package/lib/module/infraestructure/services/index.js +0 -2
  88. package/lib/module/infraestructure/services/index.js.map +0 -1
  89. package/lib/typescript/index.d.ts +0 -219
  90. package/lib/typescript/index.d.ts.map +0 -1
  91. package/lib/typescript/infraestructure/index.d.ts +0 -3
  92. package/lib/typescript/infraestructure/index.d.ts.map +0 -1
  93. package/lib/typescript/infraestructure/interfaces/ibridgefy.d.ts +0 -10
  94. package/lib/typescript/infraestructure/interfaces/ibridgefy.d.ts.map +0 -1
  95. package/lib/typescript/infraestructure/interfaces/index.d.ts +0 -2
  96. package/lib/typescript/infraestructure/interfaces/index.d.ts.map +0 -1
  97. package/lib/typescript/infraestructure/services/bridgefy_service.d.ts +0 -17
  98. package/lib/typescript/infraestructure/services/bridgefy_service.d.ts.map +0 -1
  99. package/lib/typescript/infraestructure/services/index.d.ts +0 -2
  100. package/lib/typescript/infraestructure/services/index.d.ts.map +0 -1
  101. package/src/infraestructure/index.tsx +0 -2
  102. package/src/infraestructure/interfaces/ibridgefy.tsx +0 -10
  103. package/src/infraestructure/interfaces/index.tsx +0 -1
  104. package/src/infraestructure/services/bridgefy_service.tsx +0 -20
  105. package/src/infraestructure/services/index.tsx +0 -1
@@ -0,0 +1,524 @@
1
+ import BridgefySDK
2
+ import React
3
+
4
+ @objc(BridgefyReactNative)
5
+ class BridgefyReactNative: RCTEventEmitter, BridgefyDelegate {
6
+ // MARK: - Properties
7
+
8
+ private var bridgefy: Bridgefy?
9
+ private var isInitialized = false
10
+ private var isStarted = false
11
+ private var currentUserId: UUID?
12
+
13
+ private var pendingStartResolve: RCTPromiseResolveBlock?
14
+ private var pendingStartReject: RCTPromiseRejectBlock?
15
+
16
+ private var pendingStopResolve: RCTPromiseResolveBlock?
17
+ private var pendingStopReject: RCTPromiseRejectBlock?
18
+
19
+ private var pendingDestroyResolve: RCTPromiseResolveBlock?
20
+ private var pendingDestroyReject: RCTPromiseRejectBlock?
21
+
22
+ private var pendingConnectionResolve: RCTPromiseResolveBlock?
23
+ private var pendingConnectionReject: RCTPromiseRejectBlock?
24
+
25
+ func requiresMainQueueSetup() -> DarwinBoolean {
26
+ return false;
27
+ }
28
+
29
+ override func supportedEvents() -> [String]! {
30
+ return [
31
+ // Lifecycle Events
32
+ "bridgefyDidStart",
33
+ "bridgefyDidStop",
34
+ "bridgefyDidFailToStart",
35
+ "bridgefyDidFailToStop",
36
+ "bridgefyDidDestroySession",
37
+ "bridgefyDidFailToDestroySession",
38
+
39
+ // Connection Events
40
+ "bridgefyDidConnect",
41
+ "bridgefyDidDisconnect",
42
+ "bridgefyDidUpdateConnectedPeers",
43
+ "bridgefyDidEstablishSecureConnection",
44
+ "bridgefyDidFailToEstablishSecureConnection",
45
+
46
+ // Message Events
47
+ "bridgefyDidSendMessage",
48
+ "bridgefyDidFailSendingMessage",
49
+ "bridgefyDidReceiveData",
50
+ "bridgefyMessageReceived",
51
+ "bridgefyDidSendDataProgress",
52
+
53
+ // License Events
54
+ "bridgefyDidUpdateLicense",
55
+ "bridgefyDidFailToUpdateLicense",
56
+ ];
57
+ }
58
+
59
+ // MARK: - Initialization Methods
60
+
61
+ @objc(initialize:withResolver:withRejecter:)
62
+ func initialize(config: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
63
+ guard let apiKey = config["apiKey"] as? String else {
64
+ reject("INVALID_API_KEY", "API key is required", nil)
65
+ return
66
+ }
67
+
68
+ let verboseLogging = config["verboseLogging"] as? Bool ?? false
69
+ do {
70
+
71
+ // Initialize Bridgefy SDK with API key
72
+ bridgefy = try Bridgefy(
73
+ withApiKey: apiKey,
74
+ delegate: self,
75
+ verboseLogging: verboseLogging
76
+ )
77
+ isInitialized = true
78
+ if verboseLogging {
79
+ print("[Bridgefy] SDK initialized successfully")
80
+ }
81
+
82
+ resolve(NSNull())
83
+ } catch {
84
+ reject("INITIALIZATION_ERROR", error.localizedDescription, error)
85
+ }
86
+ }
87
+
88
+ // MARK: - Lifecycle Methods
89
+
90
+ @objc(start:propagationProfile:withResolver:withRejecter:)
91
+ func start(userId: String?, propagationProfile: String?, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
92
+
93
+ guard isInitialized else {
94
+ reject("SERVICE_NOT_STARTED", "Bridgefy SDK not initialized", nil)
95
+ return
96
+ }
97
+
98
+ guard !isStarted else {
99
+ reject("SERVICE_ALREADY_STARTED", "Bridgefy SDK already started", nil)
100
+ return
101
+ }
102
+
103
+ guard let bridgefy = bridgefy else {
104
+ reject("SERVICE_NOT_STARTED", "Bridgefy instance not available", nil)
105
+ return
106
+ }
107
+
108
+ // Parse propagation profile
109
+ let profile = parseProfile(propagationProfile ?? "standard")
110
+
111
+ // Convert user ID if provided
112
+ let customUserId: UUID? = userId != nil ? UUID(uuidString: userId!) : nil
113
+
114
+ pendingStartResolve = resolve
115
+ pendingStartReject = reject
116
+
117
+ bridgefy.start(withUserId: customUserId, andPropagationProfile: profile)
118
+ }
119
+
120
+ @objc(stop:withRejecter:)
121
+ func stop(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
122
+ guard isStarted else {
123
+ reject("SERVICE_NOT_STARTED", "Bridgefy SDK not started", nil)
124
+ return
125
+ }
126
+
127
+ guard let bridgefy = bridgefy else {
128
+ reject("SERVICE_NOT_STARTED", "Bridgefy instance not available", nil)
129
+ return
130
+ }
131
+
132
+ pendingStopResolve = resolve
133
+ pendingStopReject = reject
134
+
135
+ bridgefy.stop()
136
+ }
137
+
138
+ @objc(destroySession:withRejecter:)
139
+ func destroySession(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
140
+ guard let bridgefy = bridgefy else {
141
+ reject("DESTROY_SESSION_ERROR", "Bridgefy instance not available", nil)
142
+ return
143
+ }
144
+
145
+ pendingDestroyResolve = resolve
146
+ pendingDestroyReject = reject
147
+
148
+ bridgefy.destroySession()
149
+ }
150
+
151
+ // MARK: - Messaging Methods
152
+
153
+ @objc(send:transmissionMode:withResolver:withRejecter:)
154
+ func send(data: String, transmissionMode: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
155
+ guard isStarted else {
156
+ reject("SERVICE_NOT_STARTED", "Bridgefy SDK not started", nil)
157
+ return
158
+ }
159
+
160
+ guard let bridgefy = bridgefy else {
161
+ reject("SERVICE_NOT_STARTED", "Bridgefy instance not available", nil)
162
+ return
163
+ }
164
+
165
+ guard let type = transmissionMode["type"] as? String else {
166
+ reject("INVALID_MESSAGE", "Transmission mode type is required", nil)
167
+ return
168
+ }
169
+
170
+ let messageData = data.data(using: .utf8) ?? Data()
171
+
172
+ let mode: TransmissionMode
173
+ switch type {
174
+ case "broadcast":
175
+ guard let userId = currentUserId else {
176
+ reject("SERVICE_NOT_STARTED", "User ID not available", nil)
177
+ return
178
+ }
179
+ mode = .broadcast(senderId: userId)
180
+
181
+ case "p2p":
182
+ guard let uuidString = transmissionMode["uuid"] as? String,
183
+ let uuid = UUID(uuidString: uuidString) else {
184
+ reject("INVALID_MESSAGE", "UUID required for P2P transmission", nil)
185
+ return
186
+ }
187
+ mode = .p2p(userId: uuid)
188
+
189
+ case "mesh":
190
+ guard let uuidString = transmissionMode["uuid"] as? String,
191
+ let uuid = UUID(uuidString: uuidString) else {
192
+ reject("INVALID_MESSAGE", "UUID required for Mesh transmission", nil)
193
+ return
194
+ }
195
+ mode = .mesh(userId: uuid)
196
+
197
+ default:
198
+ reject("INVALID_MESSAGE", "Invalid transmission mode type", nil)
199
+ return
200
+ }
201
+
202
+ do {
203
+ let messageId = try bridgefy.send(messageData, using: mode)
204
+ resolve(messageId.uuidString)
205
+ } catch let error as NSError {
206
+ reject("MESSAGE_SEND_FAILED", error.localizedDescription, error)
207
+ }
208
+ }
209
+
210
+ @objc(establishSecureConnection:withResolver:withRejecter:)
211
+ func establishSecureConnection(userId: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
212
+ guard isStarted else {
213
+ reject("SERVICE_NOT_STARTED", "Bridgefy SDK not started", nil)
214
+ return
215
+ }
216
+
217
+ guard let bridgefy = bridgefy else {
218
+ reject("SERVICE_NOT_STARTED", "Bridgefy instance not available", nil)
219
+ return
220
+ }
221
+
222
+ guard let uuid = UUID(uuidString: userId) else {
223
+ reject("INVALID_MESSAGE", "Invalid user ID format", nil)
224
+ return
225
+ }
226
+
227
+ self.pendingConnectionResolve = resolve
228
+ self.pendingConnectionReject = reject
229
+
230
+ bridgefy.establishSecureConnection(with: uuid)
231
+ }
232
+
233
+ // MARK: - Info Methods
234
+
235
+ @objc(currentUserId:withRejecter:)
236
+ func currentUserId(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
237
+ if let userId = currentUserId {
238
+ resolve(userId.uuidString)
239
+ } else {
240
+ reject("SERVICE_NOT_STARTED", "User ID not available", nil)
241
+ }
242
+ }
243
+
244
+ @objc(connectedPeers:withRejecter:)
245
+ func connectedPeers(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
246
+ guard isStarted else {
247
+ reject("SERVICE_NOT_STARTED", "Bridgefy SDK not started", nil)
248
+ return
249
+ }
250
+
251
+ guard let bridgefy = bridgefy else {
252
+ reject("SERVICE_NOT_STARTED", "Bridgefy instance not available", nil)
253
+ return
254
+ }
255
+
256
+ let peers = bridgefy.connectedPeers?.map { $0.uuidString } ?? []
257
+ resolve(peers)
258
+ }
259
+
260
+ @objc(licenseExpirationDate:withRejecter:)
261
+ func licenseExpirationDate(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
262
+ guard let bridgefy = bridgefy else {
263
+ reject("LICENSE_ERROR", "Bridgefy instance not available", nil)
264
+ return
265
+ }
266
+
267
+ let expirationDate = bridgefy.licenseExpirationDate?.timeIntervalSince1970 ?? 0
268
+ let licenseInfo: [String: Any] = [
269
+ "expirationDate": expirationDate * 1000,
270
+ "isValid": expirationDate > Date().timeIntervalSince1970
271
+ ]
272
+ resolve(licenseInfo)
273
+ }
274
+
275
+ // MARK: - Status Methods
276
+
277
+ @objc(isInitialized:withRejecter:)
278
+ func isInitialized(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
279
+ resolve(isInitialized)
280
+ }
281
+
282
+ @objc(isStarted:withRejecter:)
283
+ func isStarted(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
284
+ resolve(isStarted)
285
+ }
286
+
287
+ // MARK: Operation Mode Control
288
+
289
+ @objc(setOperationMode:withResolver:withRejecter:)
290
+ func setOperationMode(config: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
291
+ resolve(NSNull())
292
+ }
293
+
294
+ @objc(getOperationMode:withRejecter:)
295
+ func getOperationMode(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
296
+ let operation: [String: Any] = ["mode": "foreground"]
297
+ resolve(operation)
298
+ }
299
+
300
+ @objc(switchToForeground:withRejecter:)
301
+ func switchToForeground(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
302
+ resolve(NSNull())
303
+ }
304
+
305
+ @objc(switchToBackground:withRejecter:)
306
+ func switchToBackground(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
307
+ resolve(NSNull())
308
+ }
309
+
310
+ @objc(getOperationStatus:withRejecter:)
311
+ func getOperationStatus(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
312
+ let status: [String: Any] =
313
+ [
314
+ "operationMode": "foreground",
315
+ "isInitialized": isInitialized,
316
+ "isStarted": isStarted,
317
+ "shouldRunInService": false,
318
+ "debugInfo": "foreground",
319
+ ]
320
+ resolve(status)
321
+ }
322
+
323
+ // MARK: - BridgefyDelegate Methods
324
+
325
+ func bridgefyDidStart(with userId: UUID) {
326
+ currentUserId = userId
327
+ isStarted = true
328
+ sendEvent(withName: "bridgefyDidStart", body: ["userId": userId.uuidString])
329
+ pendingStartResolve?(NSNull())
330
+ pendingStartResolve = nil
331
+ pendingStartReject = nil
332
+ }
333
+
334
+ func bridgefyDidStop() {
335
+ isStarted = false
336
+ sendEvent(withName: "bridgefyDidStop", body: nil)
337
+ pendingStopResolve?(NSNull())
338
+ pendingStopResolve = nil
339
+ pendingStopReject = nil
340
+ }
341
+
342
+ func bridgefyDidFailToStart(with error: BridgefyError) {
343
+ let errorBody = errorDictionary(from: error)
344
+ sendEvent(withName: "bridgefyDidFailToStart", body: errorBody)
345
+ pendingStartReject?("SERVICE_NOT_STARTED", error.localizedDescription, error)
346
+ pendingStartResolve = nil
347
+ pendingStartReject = nil
348
+ }
349
+
350
+ func bridgefyDidFailToStop(with error: BridgefyError) {
351
+ let errorBody = errorDictionary(from: error)
352
+ sendEvent(withName: "bridgefyDidFailToStop", body: errorBody)
353
+ pendingStopReject?("BRIDGEFY_DID_FAIL_TO_STOP", error.localizedDescription, error)
354
+ pendingStopResolve = nil
355
+ pendingStopReject = nil
356
+ }
357
+
358
+ func bridgefyDidConnect(with userId: UUID) {
359
+ sendEvent(withName: "bridgefyDidConnect", body: ["userId": userId.uuidString])
360
+ bridgefyDidUpdateConnectedPeers()
361
+ }
362
+
363
+ func bridgefyDidUpdateConnectedPeers() {
364
+ guard let bridgefy = bridgefy else {
365
+ return sendEvent(withName: "bridgefyDidUpdateConnectedPeers", body: ["peers": []])
366
+ }
367
+ let peers = bridgefy.connectedPeers?.map { $0.uuidString } ?? []
368
+ sendEvent(withName: "bridgefyDidUpdateConnectedPeers", body: ["peers": peers])
369
+ }
370
+
371
+ func bridgefyDidDisconnect(from userId: UUID) {
372
+ sendEvent(withName: "bridgefyDidDisconnect", body: ["userId": userId.uuidString])
373
+ bridgefyDidUpdateConnectedPeers()
374
+ }
375
+
376
+ func bridgefyDidEstablishSecureConnection(with userId: UUID) {
377
+ sendEvent(withName: "bridgefyDidEstablishSecureConnection", body: ["userId": userId.uuidString])
378
+ pendingConnectionResolve?(NSNull())
379
+ pendingConnectionResolve = nil
380
+ pendingConnectionReject = nil
381
+ }
382
+
383
+ func bridgefyDidFailToEstablishSecureConnection(with userId: UUID, error: BridgefyError) {
384
+ let errorBody = errorDictionary(from: error)
385
+ sendEvent(withName: "bridgefyDidFailToEstablishSecureConnection", body: errorBody)
386
+ pendingConnectionReject?("CONNECTION_ERROR", error.localizedDescription, error)
387
+ pendingConnectionResolve = nil
388
+ pendingConnectionReject = nil
389
+ }
390
+
391
+ func bridgefyDidSendMessage(with messageId: UUID) {
392
+ sendEvent(withName: "bridgefyDidSendMessage", body: ["messageId": messageId.uuidString])
393
+ }
394
+
395
+ func bridgefyDidFailSendingMessage(with messageId: UUID, withError error: BridgefyError) {
396
+ let errorBody = errorDictionary(from: error)
397
+ sendEvent(withName: "bridgefyDidFailSendingMessage", body: errorBody)
398
+ }
399
+
400
+ func bridgefyDidReceiveData(_ data: Data, with messageId: UUID, using transmissionMode: TransmissionMode) {
401
+ let dataString = String(data: data, encoding: .utf8) ?? ""
402
+ let transmissionModeType = transmissionModeDictionary(from: transmissionMode)
403
+
404
+ let messageBody: [String: Any] = [
405
+ "data": dataString,
406
+ "messageId": messageId.uuidString,
407
+ "transmissionMode": transmissionModeType
408
+ ]
409
+ sendEvent(withName: "bridgefyDidReceiveData", body: messageBody)
410
+ }
411
+
412
+ func bridgefyDidDestroySession() {
413
+ // Clean
414
+ isInitialized = false
415
+ isStarted = false
416
+ bridgefy = nil
417
+ currentUserId = nil
418
+
419
+ sendEvent(withName: "bridgefyDidDestroySession", body: nil)
420
+
421
+ pendingDestroyResolve?(NSNull())
422
+ pendingDestroyResolve = nil
423
+ pendingDestroyReject = nil
424
+ }
425
+
426
+ func bridgefyDidFailToDestroySession(with error: BridgefyError) {
427
+ let errorBody = errorDictionary(from: error)
428
+ sendEvent(withName: "bridgefyDidFailToDestroySession", body: errorBody)
429
+
430
+ pendingDestroyReject?("DESTROY_SESSION_ERROR", error.localizedDescription, error)
431
+ pendingDestroyResolve = nil
432
+ pendingDestroyReject = nil
433
+ }
434
+
435
+ func bridgefyDidUpdateLicense() {
436
+ sendEvent(withName: "bridgefyDidUpdateLicense", body: nil)
437
+ }
438
+
439
+ func bridgefyDidFailToUpdateLicense(with error: BridgefyError) {
440
+ let errorBody = errorDictionary(from: error)
441
+ sendEvent(withName: "bridgefyDidFailToUpdateLicense", body: errorBody)
442
+ }
443
+
444
+ // MARK: - Helper Methods
445
+
446
+ private func parseProfile(_ profile: String) -> PropagationProfile {
447
+ switch profile {
448
+ case "highDensityNetwork":
449
+ return .highDensityNetwork
450
+ case "sparseNetwork":
451
+ return .sparseNetwork
452
+ case "longReach":
453
+ return .longReach
454
+ case "shortReach":
455
+ return .shortReach
456
+ case "realTime":
457
+ return .realTime
458
+ default:
459
+ return .standard
460
+ }
461
+ }
462
+
463
+ private func transmissionModeDictionary(from transmissionMode: TransmissionMode)
464
+ -> Dictionary<String, String> {
465
+ switch transmissionMode {
466
+ case .p2p(userId: let uuid):
467
+ return ["mode": "p2p", "uuid": uuid.uuidString]
468
+ case .mesh(userId: let uuid):
469
+ return ["mode": "mesh", "uuid": uuid.uuidString]
470
+ case .broadcast(senderId: let uuid):
471
+ return ["mode": "broadcast", "uuid": uuid.uuidString]
472
+ @unknown default:
473
+ return [:]
474
+ }
475
+ }
476
+
477
+ private func errorDictionary(from bridgefyError: BridgefyError) -> [String: Any] {
478
+ struct ErrorInfo {
479
+ let type: String
480
+ let details: Int?
481
+ }
482
+ let info: ErrorInfo
483
+ switch bridgefyError {
484
+ case .licenseError(let code, let data): info = .init(type: "licenseError", details: code)
485
+ case .storageError(let code): info = .init(type: "storageError", details: code)
486
+ case .encodingError(let code): info = .init(type: "encodingError", details: code)
487
+ case .encryptionError(let code): info = .init(type: "encryptionError", details: code)
488
+ case .simulatorIsNotSupported: info = .init(type: "simulatorIsNotSupported", details: nil)
489
+ case .notStarted: info = .init(type: "notStarted", details: nil)
490
+ case .alreadyInstantiated: info = .init(type: "alreadyInstantiated", details: nil)
491
+ case .startInProgress: info = .init(type: "startInProgress", details: nil)
492
+ case .alreadyStarted: info = .init(type: "alreadyStarted", details: nil)
493
+ case .serviceNotStarted: info = .init(type: "serviceNotStarted", details: nil)
494
+ case .missingBundleID: info = .init(type: "missingBundleID", details: nil)
495
+ case .invalidApiKey: info = .init(type: "invalidAPIKey", details: nil)
496
+ case .internetConnectionRequired: info = .init(type: "internetConnectionRequired", details: nil)
497
+ case .sessionError: info = .init(type: "sessionError", details: nil)
498
+ case .expiredLicense: info = .init(type: "expiredLicense", details: nil)
499
+ case .inconsistentDeviceTime: info = .init(type: "inconsistentDeviceTime", details: nil)
500
+ case .BLEUsageNotGranted: info = .init(type: "BLEUsageNotGranted", details: nil)
501
+ case .BLEUsageRestricted: info = .init(type: "BLEUsageRestricted", details: nil)
502
+ case .BLEPoweredOff: info = .init(type: "BLEPoweredOff", details: nil)
503
+ case .BLEUnsupported: info = .init(type: "BLEUnsupported", details: nil)
504
+ case .BLEUnknownError: info = .init(type: "BLEUnknownError", details: nil)
505
+ case .inconsistentConnection: info = .init(type: "inconsistentConnection", details: nil)
506
+ case .connectionIsAlreadySecure: info = .init(type: "connectionIsAlreadySecure", details: nil)
507
+ case .cannotCreateSecureConnection: info = .init(type: "cannotCreateSecureConnection", details: nil)
508
+ case .dataLengthExceeded: info = .init(type: "dataLengthExceeded", details: nil)
509
+ case .dataValueIsEmpty: info = .init(type: "dataValueIsEmpty", details: nil)
510
+ case .peerIsNotConnected: info = .init(type: "peerIsNotConnected", details: nil)
511
+ case .internalError: info = .init(type: "internalError", details: nil)
512
+ case .inconsistentUserId: info = .init(type: "inconsistentUserId", details: nil)
513
+ case .stopInProgress: info = .init(type: "stopInProgress", details: nil)
514
+ case .destroySessionInProgress: info = .init(type: "destroySessionInProgress", details: nil)
515
+ @unknown default: return [:]
516
+ }
517
+
518
+ return [
519
+ "code": info.type,
520
+ "message": bridgefyError.localizedDescription,
521
+ "details": info.details as Any
522
+ ].compactMapValues { $0 }
523
+ }
524
+ }
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * BridgefyReactNative.ts
5
+ * TurboModule Spec for Bridgefy SDK
6
+ *
7
+ * This spec defines all methods from the Bridgefy SDK for both Android and iOS
8
+ * Based on: https://github.com/bridgefy/bridgefy-react-native
9
+ */
10
+
11
+ import { TurboModuleRegistry } from 'react-native';
12
+
13
+ // ==================== ENUMS ====================
14
+
15
+ export let BridgefyPropagationProfile = /*#__PURE__*/function (BridgefyPropagationProfile) {
16
+ BridgefyPropagationProfile["STANDARD"] = "standard";
17
+ BridgefyPropagationProfile["HIGH_DENSITY_NETWORK"] = "highDensityNetwork";
18
+ BridgefyPropagationProfile["SPARSE_NETWORK"] = "sparseNetwork";
19
+ BridgefyPropagationProfile["LONG_REACH"] = "longReach";
20
+ BridgefyPropagationProfile["SHORT_REACH"] = "shortReach";
21
+ BridgefyPropagationProfile["REALTIME"] = "realTime";
22
+ return BridgefyPropagationProfile;
23
+ }({});
24
+ export let BridgefyTransmissionModeType = /*#__PURE__*/function (BridgefyTransmissionModeType) {
25
+ BridgefyTransmissionModeType["BROADCAST"] = "broadcast";
26
+ BridgefyTransmissionModeType["P2P"] = "p2p";
27
+ BridgefyTransmissionModeType["MESH"] = "mesh";
28
+ return BridgefyTransmissionModeType;
29
+ }({});
30
+ export let BridgefyEvents = /*#__PURE__*/function (BridgefyEvents) {
31
+ // Lifecycle Events
32
+ BridgefyEvents["BRIDGEFY_DID_START"] = "bridgefyDidStart";
33
+ BridgefyEvents["BRIDGEFY_DID_STOP"] = "bridgefyDidStop";
34
+ BridgefyEvents["BRIDGEFY_DID_FAIL_TO_START"] = "bridgefyDidFailToStart";
35
+ BridgefyEvents["BRIDGEFY_DID_FAIL_TO_STOP"] = "bridgefyDidFailToStop";
36
+ BridgefyEvents["BRIDGEFY_DID_DESTROY_SESSION"] = "bridgefyDidDestroySession";
37
+ BridgefyEvents["BRIDGEFY_DID_FAIL_TO_DESTROY_SESSION"] = "bridgefyDidFailToDestroySession";
38
+ // Connection Events
39
+ BridgefyEvents["BRIDGEFY_DID_CONNECT"] = "bridgefyDidConnect";
40
+ BridgefyEvents["BRIDGEFY_DID_UPDATE_CONNECTED_PEERS"] = "bridgefyDidUpdateConnectedPeers";
41
+ BridgefyEvents["BRIDGEFY_DID_DISCONNECT"] = "bridgefyDidDisconnect";
42
+ BridgefyEvents["BRIDGEFY_DID_ESTABLISH_SECURE_CONNECTION"] = "bridgefyDidEstablishSecureConnection";
43
+ BridgefyEvents["BRIDGEFY_DID_FAIL_TO_ESTABLISH_SECURE_CONNECTION"] = "bridgefyDidFailToEstablishSecureConnection";
44
+ // Message Events
45
+ BridgefyEvents["BRIDGEFY_DID_SEND_MESSAGE"] = "bridgefyDidSendMessage";
46
+ BridgefyEvents["BRIDGEFY_DID_SEND_DATA_PROGRESS"] = "bridgefyDidSendDataProgress";
47
+ BridgefyEvents["BRIDGEFY_DID_FAIL_SENDING_MESSAGE"] = "bridgefyDidFailSendingMessage";
48
+ BridgefyEvents["BRIDGEFY_DID_RECEIVE_DATA"] = "bridgefyDidReceiveData";
49
+ BridgefyEvents["BRIDGEFY_MESSAGE_RECEIVED"] = "bridgefyMessageReceived";
50
+ // License Events
51
+ BridgefyEvents["BRIDGEFY_DID_UPDATE_LICENSE"] = "bridgefyDidUpdateLicense";
52
+ BridgefyEvents["BRIDGEFY_DID_FAIL_TO_UPDATE_LICENSE"] = "bridgefyDidFailToUpdateLicense";
53
+ return BridgefyEvents;
54
+ }({});
55
+ export let BridgefyErrorCode = /*#__PURE__*/function (BridgefyErrorCode) {
56
+ // Initialization Errors
57
+ BridgefyErrorCode["INVALID_API_KEY"] = "INVALID_API_KEY";
58
+ BridgefyErrorCode["SESSION_ERROR"] = "SESSION_ERROR";
59
+ BridgefyErrorCode["INITIALIZATION_ERROR"] = "INITIALIZATION_ERROR";
60
+ BridgefyErrorCode["LICENSE_ERROR"] = "LICENSE_ERROR";
61
+ // Connection Errors
62
+ BridgefyErrorCode["CONNECTION_ERROR"] = "CONNECTION_ERROR";
63
+ BridgefyErrorCode["BLUETOOTH_DISABLED"] = "BLUETOOTH_DISABLED";
64
+ BridgefyErrorCode["LOCATION_PERMISSION_DENIED"] = "LOCATION_PERMISSION_DENIED";
65
+ BridgefyErrorCode["BLUETOOTH_PERMISSION_DENIED"] = "BLUETOOTH_PERMISSION_DENIED";
66
+ // Message Errors
67
+ BridgefyErrorCode["MESSAGE_SEND_FAILED"] = "MESSAGE_SEND_FAILED";
68
+ BridgefyErrorCode["INVALID_MESSAGE"] = "INVALID_MESSAGE";
69
+ BridgefyErrorCode["ENCRYPTION_ERROR"] = "ENCRYPTION_ERROR";
70
+ // Service Errors
71
+ BridgefyErrorCode["SERVICE_NOT_STARTED"] = "SERVICE_NOT_STARTED";
72
+ BridgefyErrorCode["SERVICE_ALREADY_STARTED"] = "SERVICE_ALREADY_STARTED";
73
+ BridgefyErrorCode["DESTROY_SESSION_ERROR"] = "DESTROY_SESSION_ERROR";
74
+ // License Errors
75
+ BridgefyErrorCode["LICENSE_EXPIRED"] = "LICENSE_EXPIRED";
76
+ BridgefyErrorCode["LICENSE_UPDATE_FAILED"] = "LICENSE_UPDATE_FAILED";
77
+ // Network Errors
78
+ BridgefyErrorCode["NETWORK_ERROR"] = "NETWORK_ERROR";
79
+ BridgefyErrorCode["TIMEOUT_ERROR"] = "TIMEOUT_ERROR";
80
+ // Unknown
81
+ BridgefyErrorCode["UNKNOWN_ERROR"] = "UNKNOWN_ERROR";
82
+ return BridgefyErrorCode;
83
+ }({});
84
+ export let BridgefyOperationMode = /*#__PURE__*/function (BridgefyOperationMode) {
85
+ /**
86
+ * FOREGROUND: SDK runs only when app is in foreground
87
+ * - Lower battery usage
88
+ * - No background service
89
+ * - Simpler lifecycle
90
+ * - Good for testing/development
91
+ */
92
+ BridgefyOperationMode["FOREGROUND"] = "foreground";
93
+ /**
94
+ * BACKGROUND: SDK runs in background service
95
+ * - Continuous mesh networking
96
+ * - Higher battery usage
97
+ * - Foreground service with notification
98
+ * - Survives app backgrounding
99
+ */
100
+ BridgefyOperationMode["BACKGROUND"] = "background";
101
+ /**
102
+ * HYBRID: Foreground in app, background in service
103
+ * - Starts in foreground when app is active
104
+ * - Switches to background service when app backgrounded
105
+ * - Automatic mode switching
106
+ * - Best of both worlds
107
+ */
108
+ BridgefyOperationMode["HYBRID"] = "hybrid";
109
+ return BridgefyOperationMode;
110
+ }({});
111
+
112
+ // ==================== TYPES ====================
113
+
114
+ // ==================== TURBOMODULE SPEC ====================
115
+
116
+ export default TurboModuleRegistry.getEnforcing('BridgefyReactNative');
117
+ //# sourceMappingURL=NativeBridgefy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TurboModuleRegistry","BridgefyPropagationProfile","BridgefyTransmissionModeType","BridgefyEvents","BridgefyErrorCode","BridgefyOperationMode","getEnforcing"],"sourceRoot":"../../src","sources":["NativeBridgefy.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,mBAAmB,QAAQ,cAAc;;AAElD;;AAEA,WAAYC,0BAA0B,0BAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAAA,OAA1BA,0BAA0B;AAAA;AAStC,WAAYC,4BAA4B,0BAA5BA,4BAA4B;EAA5BA,4BAA4B;EAA5BA,4BAA4B;EAA5BA,4BAA4B;EAAA,OAA5BA,4BAA4B;AAAA;AAMxC,WAAYC,cAAc,0BAAdA,cAAc;EACxB;EADUA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EASxB;EATUA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAgBxB;EAhBUA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAuBxB;EAvBUA,cAAc;EAAdA,cAAc;EAAA,OAAdA,cAAc;AAAA;AA4B1B,WAAYC,iBAAiB,0BAAjBA,iBAAiB;EAC3B;EADUA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAO3B;EAPUA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAa3B;EAbUA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAkB3B;EAlBUA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAuB3B;EAvBUA,iBAAiB;EAAjBA,iBAAiB;EA2B3B;EA3BUA,iBAAiB;EAAjBA,iBAAiB;EA+B3B;EA/BUA,iBAAiB;EAAA,OAAjBA,iBAAiB;AAAA;AAmC7B,WAAYC,qBAAqB,0BAArBA,qBAAqB;EAC/B;AACF;AACA;AACA;AACA;AACA;AACA;EAPYA,qBAAqB;EAU/B;AACF;AACA;AACA;AACA;AACA;AACA;EAhBYA,qBAAqB;EAmB/B;AACF;AACA;AACA;AACA;AACA;AACA;EAzBYA,qBAAqB;EAAA,OAArBA,qBAAqB;AAAA;;AA6BjC;;AAiFA;;AAuHA,eAAeL,mBAAmB,CAACM,YAAY,CAAO,qBAAqB,CAAC","ignoreList":[]}