@react-native-firebase/app 26.3.3 → 27.0.0

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 (283) hide show
  1. package/CHANGELOG.md +75 -0
  2. package/README.md +10 -27
  3. package/RNFBApp.podspec +13 -5
  4. package/android/build.gradle +3 -0
  5. package/android/src/main/java/io/invertase/firebase/common/RNFBHandleCollisionException.kt +29 -0
  6. package/android/src/main/java/io/invertase/firebase/common/RNFBHandleMap.kt +146 -0
  7. package/android/src/main/java/io/invertase/firebase/common/TaskExecutorService.kt +156 -0
  8. package/android/src/main/java/io/invertase/firebase/common/UniversalFirebaseModule.kt +44 -0
  9. package/android/src/main/java/io/invertase/firebase/common/UniversalFirebasePreferences.kt +100 -0
  10. package/android/src/reactnative/java/io/invertase/firebase/app/NativeRNFBTurboApp.kt +250 -0
  11. package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseApp.kt +64 -0
  12. package/android/src/reactnative/java/io/invertase/firebase/app/{ReactNativeFirebaseAppInitProvider.java → ReactNativeFirebaseAppInitProvider.kt} +3 -4
  13. package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseAppPackage.kt +47 -0
  14. package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseAppRegistrar.kt +33 -0
  15. package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseVersion.java +1 -1
  16. package/android/src/reactnative/java/io/invertase/firebase/common/RCTConvertFirebase.kt +185 -0
  17. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseEvent.kt +35 -0
  18. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseEventEmitter.kt +662 -0
  19. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseJSON.kt +103 -0
  20. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseMeta.kt +96 -0
  21. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseModule.kt +140 -0
  22. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebasePreferences.kt +109 -0
  23. package/android/src/reactnative/java/io/invertase/firebase/common/SharedUtils.kt +451 -0
  24. package/android/src/reactnative/java/io/invertase/firebase/interfaces/{ContextProvider.java → ContextProvider.kt} +8 -8
  25. package/android/src/reactnative/java/io/invertase/firebase/interfaces/{NativeError.java → NativeError.kt} +8 -8
  26. package/android/src/reactnative/java/io/invertase/firebase/interfaces/{NativeEvent.java → NativeEvent.kt} +6 -6
  27. package/android/src/reactnative/java/io/invertase/firebase/utils/NativeRNFBTurboUtils.kt +219 -0
  28. package/android/src/test/java/expo/core/ModuleRegistry.java +9 -0
  29. package/android/src/test/java/io/invertase/firebase/app/NativeRNFBTurboAppTest.java +208 -60
  30. package/android/src/test/java/io/invertase/firebase/app/ReactNativeFirebaseAppComponentsJavaCompatibilityTest.java +70 -0
  31. package/android/src/test/java/io/invertase/firebase/app/ReactNativeFirebaseAppJavaCompatibilityTest.java +60 -0
  32. package/android/src/test/java/io/invertase/firebase/app/ReactNativeFirebaseAppPackageTest.java +165 -0
  33. package/android/src/test/java/io/invertase/firebase/app/ReactNativeFirebaseAppTest.kt +167 -0
  34. package/android/src/test/java/io/invertase/firebase/common/RCTConvertFirebaseJavaCompatibilityTest.java +112 -0
  35. package/android/src/test/java/io/invertase/firebase/common/RCTConvertFirebaseTest.kt +317 -0
  36. package/android/src/test/java/io/invertase/firebase/common/RNFBHandleMapTest.kt +309 -0
  37. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseEventEmitterJavaCompatibilityTest.java +176 -0
  38. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseEventEmitterTest.java +144 -13
  39. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseEventTest.kt +61 -0
  40. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseJSONJavaCompatibilityTest.java +85 -0
  41. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseJSONTest.kt +296 -0
  42. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseMetaJavaCompatibilityTest.java +67 -0
  43. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseMetaTest.kt +246 -0
  44. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseModuleTest.kt +254 -0
  45. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebasePreferencesJavaCompatibilityTest.java +87 -0
  46. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebasePreferencesTest.kt +260 -0
  47. package/android/src/test/java/io/invertase/firebase/common/SharedUtilsJavaCompatibilityTest.java +255 -0
  48. package/android/src/test/java/io/invertase/firebase/common/SharedUtilsTest.kt +674 -0
  49. package/android/src/test/java/io/invertase/firebase/common/TaskExecutorServiceTest.kt +290 -0
  50. package/android/src/test/java/io/invertase/firebase/common/UniversalFirebaseModuleJavaCompatibilityTest.java +178 -0
  51. package/android/src/test/java/io/invertase/firebase/common/UniversalFirebasePreferencesJavaCompatibilityTest.java +99 -0
  52. package/android/src/test/java/io/invertase/firebase/common/UniversalFirebasePreferencesTest.kt +217 -0
  53. package/android/src/test/java/io/invertase/firebase/commoncompat/ReactNativeFirebaseModuleJavaCompatibilityTest.java +176 -0
  54. package/android/src/test/java/io/invertase/firebase/commoncompat/ReactNativeFirebaseModuleKotlinCompatibilityTest.kt +52 -0
  55. package/android/src/test/java/io/invertase/firebase/interfaces/InterfacesJavaCompatibilityTest.java +144 -0
  56. package/android/src/test/java/io/invertase/firebase/interfaces/NativeEventTest.kt +56 -0
  57. package/android/src/test/java/io/invertase/firebase/utils/NativeRNFBTurboUtilsTest.java +517 -23
  58. package/dist/module/FirebaseApp.js +10 -0
  59. package/dist/module/FirebaseApp.js.map +1 -1
  60. package/dist/module/common/Base64.js +13 -21
  61. package/dist/module/common/Base64.js.map +1 -1
  62. package/dist/module/common/deeps.js +3 -0
  63. package/dist/module/common/deeps.js.map +1 -1
  64. package/dist/module/common/index.js +17 -9
  65. package/dist/module/common/index.js.map +1 -1
  66. package/dist/module/internal/FirebaseModule.js.map +1 -1
  67. package/dist/module/internal/RNFBNativeEventEmitter.js +12 -1
  68. package/dist/module/internal/RNFBNativeEventEmitter.js.map +1 -1
  69. package/dist/module/internal/SharedEventEmitter.js +3 -1
  70. package/dist/module/internal/SharedEventEmitter.js.map +1 -1
  71. package/dist/module/internal/asyncStorage.js +7 -11
  72. package/dist/module/internal/asyncStorage.js.map +1 -1
  73. package/dist/module/internal/index.js +1 -0
  74. package/dist/module/internal/index.js.map +1 -1
  75. package/dist/module/internal/logger.js +44 -40
  76. package/dist/module/internal/logger.js.map +1 -1
  77. package/dist/module/internal/nativeModuleAndroidIos.js +2 -29
  78. package/dist/module/internal/nativeModuleAndroidIos.js.map +1 -1
  79. package/dist/module/internal/nativeModuleDebug.js +74 -0
  80. package/dist/module/internal/nativeModuleDebug.js.map +1 -0
  81. package/dist/module/internal/nativeModuleWeb.js +9 -29
  82. package/dist/module/internal/nativeModuleWeb.js.map +1 -1
  83. package/dist/module/internal/registry/app.js +8 -2
  84. package/dist/module/internal/registry/app.js.map +1 -1
  85. package/dist/module/internal/registry/modular.js +2 -2
  86. package/dist/module/internal/registry/modular.js.map +1 -1
  87. package/dist/module/internal/registry/nativeModule.js +3 -3
  88. package/dist/module/internal/registry/nativeModule.js.map +1 -1
  89. package/dist/module/internal/web/RNFBAppModule.js +16 -15
  90. package/dist/module/internal/web/RNFBAppModule.js.map +1 -1
  91. package/dist/module/internal/web/memidb/lib/FakeEventTarget.js +3 -1
  92. package/dist/module/internal/web/memidb/lib/FakeEventTarget.js.map +1 -1
  93. package/dist/module/types/app.js.map +1 -1
  94. package/dist/module/types/internal.js +2 -0
  95. package/dist/module/version.js +1 -1
  96. package/dist/typescript/lib/FirebaseApp.d.ts +7 -0
  97. package/dist/typescript/lib/FirebaseApp.d.ts.map +1 -1
  98. package/dist/typescript/lib/common/Base64.d.ts.map +1 -1
  99. package/dist/typescript/lib/common/deeps.d.ts.map +1 -1
  100. package/dist/typescript/lib/common/index.d.ts.map +1 -1
  101. package/dist/typescript/lib/internal/FirebaseModule.d.ts +2 -3
  102. package/dist/typescript/lib/internal/FirebaseModule.d.ts.map +1 -1
  103. package/dist/typescript/lib/internal/NativeModules.d.ts +4 -1
  104. package/dist/typescript/lib/internal/NativeModules.d.ts.map +1 -1
  105. package/dist/typescript/lib/internal/RNFBNativeEventEmitter.d.ts +2 -2
  106. package/dist/typescript/lib/internal/RNFBNativeEventEmitter.d.ts.map +1 -1
  107. package/dist/typescript/lib/internal/SharedEventEmitter.d.ts +3 -3
  108. package/dist/typescript/lib/internal/SharedEventEmitter.d.ts.map +1 -1
  109. package/dist/typescript/lib/internal/asyncStorage.d.ts.map +1 -1
  110. package/dist/typescript/lib/internal/index.d.ts +1 -0
  111. package/dist/typescript/lib/internal/index.d.ts.map +1 -1
  112. package/dist/typescript/lib/internal/logger.d.ts.map +1 -1
  113. package/dist/typescript/lib/internal/nativeModuleAndroidIos.d.ts.map +1 -1
  114. package/dist/typescript/lib/internal/nativeModuleDebug.d.ts +2 -0
  115. package/dist/typescript/lib/internal/nativeModuleDebug.d.ts.map +1 -0
  116. package/dist/typescript/lib/internal/nativeModuleWeb.d.ts.map +1 -1
  117. package/dist/typescript/lib/internal/registry/app.d.ts.map +1 -1
  118. package/dist/typescript/lib/internal/web/RNFBAppModule.d.ts +7 -7
  119. package/dist/typescript/lib/internal/web/RNFBAppModule.d.ts.map +1 -1
  120. package/dist/typescript/lib/types/app.d.ts +10 -3
  121. package/dist/typescript/lib/types/app.d.ts.map +1 -1
  122. package/dist/typescript/lib/types/internal.d.ts +12 -0
  123. package/dist/typescript/lib/types/internal.d.ts.map +1 -1
  124. package/dist/typescript/lib/version.d.ts +1 -1
  125. package/firebase-schema.json +5 -1
  126. package/firebase_spm.rb +552 -96
  127. package/ios/RNFBApp/RCTConvert+FIRApp.h +2 -5
  128. package/ios/RNFBApp/RCTConvert+FIRApp.m +11 -6
  129. package/ios/RNFBApp/RCTConvert+FIROptions.h +2 -5
  130. package/ios/RNFBApp/RCTConvert+FIROptions.m +11 -10
  131. package/ios/RNFBApp/RCTConvertFIRApp.swift +86 -0
  132. package/ios/RNFBApp/RCTConvertFIROptions.swift +259 -0
  133. package/ios/RNFBApp/RNFBAppCustomAuthDomains.swift +63 -0
  134. package/ios/RNFBApp/RNFBAppInitializeOptionsMapper.swift +113 -0
  135. package/ios/RNFBApp/RNFBAppLogLevelMapper.swift +53 -0
  136. package/ios/RNFBApp/RNFBAppModule+CustomAuthDomain.m +35 -0
  137. package/ios/RNFBApp/RNFBAppModule.h +6 -2
  138. package/ios/RNFBApp/RNFBAppModule.mm +67 -204
  139. package/ios/RNFBApp/RNFBAppModuleFirebase.swift +439 -0
  140. package/ios/RNFBApp/RNFBAppModuleImplementation.h +68 -0
  141. package/ios/RNFBApp/RNFBAppModuleImplementation.m +195 -0
  142. package/ios/RNFBApp/RNFBHandleMap.h +73 -0
  143. package/ios/RNFBApp/RNFBHandleMap.m +87 -0
  144. package/ios/RNFBApp/RNFBHandleMapStorage.swift +90 -0
  145. package/ios/RNFBApp/RNFBInitializeAppArguments.swift +82 -0
  146. package/ios/RNFBApp/RNFBJSON.m +22 -38
  147. package/ios/RNFBApp/RNFBJSONImplementation.swift +71 -0
  148. package/ios/RNFBApp/RNFBMeta.m +24 -26
  149. package/ios/RNFBApp/RNFBMetaStorage.swift +76 -0
  150. package/ios/RNFBApp/RNFBNullSentinelDecoding.swift +135 -0
  151. package/ios/RNFBApp/RNFBNullSentinelInterceptor.h +30 -3
  152. package/ios/RNFBApp/RNFBNullSentinelInterceptor.m +28 -5
  153. package/ios/RNFBApp/RNFBPreferences.m +22 -20
  154. package/ios/RNFBApp/RNFBPreferencesStorage.swift +101 -0
  155. package/ios/RNFBApp/RNFBRCTEventEmitter.m +36 -93
  156. package/ios/RNFBApp/RNFBRCTEventEmitterCore.swift +161 -0
  157. package/ios/RNFBApp/RNFBSharedUtils.h +2 -5
  158. package/ios/RNFBApp/RNFBSharedUtils.m +109 -197
  159. package/ios/RNFBApp/RNFBSharedUtilsConfig.swift +72 -0
  160. package/ios/RNFBApp/RNFBSharedUtilsFIRApp.swift +271 -0
  161. package/ios/RNFBApp/RNFBSharedUtilsFormatting.swift +59 -0
  162. package/ios/RNFBApp/RNFBSharedUtilsPromiseRejection.swift +88 -0
  163. package/ios/RNFBApp/RNFBUtilsHelpers.swift +116 -0
  164. package/ios/RNFBApp/RNFBUtilsModule+Foundation.m +44 -0
  165. package/ios/RNFBApp/RNFBUtilsModule+PhotoAssets.m +47 -0
  166. package/ios/RNFBApp/RNFBUtilsModule.h +11 -1
  167. package/ios/RNFBApp/RNFBUtilsModule.mm +10 -85
  168. package/ios/RNFBApp/RNFBUtilsModuleImplementation.h +32 -0
  169. package/ios/RNFBApp/RNFBUtilsModuleImplementation.m +56 -0
  170. package/ios/RNFBApp/RNFBVersion.m +1 -1
  171. package/ios/RNFBApp.xcodeproj/project.pbxproj +106 -0
  172. package/ios/RNFBAppUnitTests/HostStubs/FirebaseCore/FIRApp.m +171 -0
  173. package/ios/RNFBAppUnitTests/HostStubs/FirebaseCore/FirebaseCore.h +78 -0
  174. package/ios/RNFBAppUnitTests/HostStubs/FirebaseInstallations/FIRInstallations.m +7 -0
  175. package/ios/RNFBAppUnitTests/HostStubs/FirebaseInstallations/FirebaseInstallations.h +8 -0
  176. package/ios/RNFBAppUnitTests/HostStubs/RNFBAppModuleHostStub.m +55 -0
  177. package/ios/RNFBAppUnitTests/HostStubs/RNFBAppTurboModules.h +89 -0
  178. package/ios/RNFBAppUnitTests/HostStubs/RNFBAppTurboModules.mm +30 -0
  179. package/ios/RNFBAppUnitTests/HostStubs/React/RCTBridge.h +19 -0
  180. package/ios/RNFBAppUnitTests/HostStubs/React/RCTBridge.m +32 -0
  181. package/ios/RNFBAppUnitTests/HostStubs/React/RCTBridgeModule.h +19 -0
  182. package/ios/RNFBAppUnitTests/HostStubs/React/RCTConvert.h +28 -0
  183. package/ios/RNFBAppUnitTests/HostStubs/React/RCTConvert.m +23 -0
  184. package/ios/RNFBAppUnitTests/HostStubs/React/RCTEventEmitter.h +9 -0
  185. package/ios/RNFBAppUnitTests/HostStubs/React/RCTInvalidating.h +24 -0
  186. package/ios/RNFBAppUnitTests/HostStubs/React/RCTUtils.h +9 -0
  187. package/ios/RNFBAppUnitTests/HostStubs/module.modulemap +13 -0
  188. package/ios/RNFBAppUnitTests/RCTConvertFIRAppFacadeTests.m +61 -0
  189. package/ios/RNFBAppUnitTests/RCTConvertFIRAppTests.swift +73 -0
  190. package/ios/RNFBAppUnitTests/RCTConvertFIROptionsFacadeTests.m +57 -0
  191. package/ios/RNFBAppUnitTests/RCTConvertFIROptionsTests.swift +243 -0
  192. package/ios/RNFBAppUnitTests/RNFBAppCustomAuthDomainsFacadeTests.m +73 -0
  193. package/ios/RNFBAppUnitTests/RNFBAppCustomAuthDomainsTests.swift +70 -0
  194. package/ios/RNFBAppUnitTests/RNFBAppInitializeOptionsMapperTests.swift +190 -0
  195. package/ios/RNFBAppUnitTests/RNFBAppLogLevelFacadeTests.m +76 -0
  196. package/ios/RNFBAppUnitTests/RNFBAppLogLevelMapperTests.swift +59 -0
  197. package/ios/RNFBAppUnitTests/RNFBAppModuleFirebaseFacadeTests.m +215 -0
  198. package/ios/RNFBAppUnitTests/RNFBAppModuleFirebaseTests.swift +430 -0
  199. package/ios/RNFBAppUnitTests/RNFBAppModuleLifecycleTests.m +206 -0
  200. package/ios/RNFBAppUnitTests/RNFBAppModuleShellTests.mm +367 -0
  201. package/ios/RNFBAppUnitTests/RNFBAppUnitTests.xcodeproj/project.pbxproj +590 -0
  202. package/ios/RNFBAppUnitTests/RNFBAppUnitTests.xcodeproj/xcshareddata/xcschemes/RNFBAppUnitTests.xcscheme +69 -0
  203. package/ios/RNFBAppUnitTests/RNFBFirebaseAppClientTests.swift +165 -0
  204. package/ios/RNFBAppUnitTests/RNFBHandleMapStorageTests.swift +121 -0
  205. package/ios/RNFBAppUnitTests/RNFBHandleMapTests.m +238 -0
  206. package/ios/RNFBAppUnitTests/RNFBInitializeAppArgumentsTests.swift +256 -0
  207. package/ios/RNFBAppUnitTests/RNFBJSONImplementationTests.swift +126 -0
  208. package/ios/RNFBAppUnitTests/RNFBJSONTests.m +172 -0
  209. package/ios/RNFBAppUnitTests/RNFBMetaStorageTests.swift +106 -0
  210. package/ios/RNFBAppUnitTests/RNFBMetaTests.m +65 -0
  211. package/ios/RNFBAppUnitTests/RNFBNullSentinelDecodingTests.swift +286 -0
  212. package/ios/RNFBAppUnitTests/RNFBNullSentinelInterceptorTests.m +312 -0
  213. package/ios/RNFBAppUnitTests/RNFBPreferencesStorageTests.swift +105 -0
  214. package/ios/RNFBAppUnitTests/RNFBPreferencesTests.m +110 -0
  215. package/ios/RNFBAppUnitTests/RNFBRCTEventEmitterCoreTests.swift +163 -0
  216. package/ios/RNFBAppUnitTests/RNFBRCTEventEmitterFacadeTests.m +141 -0
  217. package/ios/RNFBAppUnitTests/RNFBSharedUtilsConfigFacadeTests.m +100 -0
  218. package/ios/RNFBAppUnitTests/RNFBSharedUtilsConfigTests.swift +234 -0
  219. package/ios/RNFBAppUnitTests/RNFBSharedUtilsFIRAppFacadeTests.m +145 -0
  220. package/ios/RNFBAppUnitTests/RNFBSharedUtilsFIRAppTests.swift +173 -0
  221. package/ios/RNFBAppUnitTests/RNFBSharedUtilsFormattingFacadeTests.m +38 -0
  222. package/ios/RNFBAppUnitTests/RNFBSharedUtilsFormattingTests.swift +82 -0
  223. package/ios/RNFBAppUnitTests/RNFBSharedUtilsNullSentinelTests.m +35 -0
  224. package/ios/RNFBAppUnitTests/RNFBSharedUtilsPromiseRejectionFacadeTests.m +107 -0
  225. package/ios/RNFBAppUnitTests/RNFBSharedUtilsPromiseRejectionTests.swift +133 -0
  226. package/ios/RNFBAppUnitTests/RNFBUtilsHelpersTests.swift +144 -0
  227. package/ios/RNFBAppUnitTests/RNFBUtilsModuleFacadeTests.m +72 -0
  228. package/ios/RNFBAppUnitTests/RNFBUtilsModuleShellTests.mm +282 -0
  229. package/ios/RNFBFirebase/Package.swift +53 -0
  230. package/ios/RNFBFirebase/Sources/RNFBFirebase/RNFBFirebase.swift +285 -0
  231. package/ios/RNFBFirebase/Sources/RNFBFirebaseBridge/Public/.gitkeep +0 -0
  232. package/ios/RNFBFirebase/Sources/RNFBFirebaseBridge/RNFBFirebaseBridge.m +169 -0
  233. package/ios/RNFBFirebase/Sources/RNFBFirebaseBridge/include/RNFBFirebaseBridge.h +52 -0
  234. package/ios/RNFBFirebaseUnitTests/RNFBAppDynamicFacadeTests.swift +240 -0
  235. package/{android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseAppRegistrar.java → ios/RNFBFirebaseUnitTests/RNFBFirebaseClientImport.swift} +22 -17
  236. package/ios/RNFBFirebaseUnitTests/RNFBFirebaseUnitTests.xcodeproj/project.pbxproj +588 -0
  237. package/ios/RNFBFirebaseUnitTests/RNFBFirebaseUnitTests.xcodeproj/xcshareddata/xcschemes/RNFBFirebaseUnitTests.xcscheme +83 -0
  238. package/ios_config.sh +50 -22
  239. package/lib/FirebaseApp.ts +10 -0
  240. package/lib/common/Base64.ts +10 -16
  241. package/lib/common/deeps.ts +3 -0
  242. package/lib/common/index.ts +20 -9
  243. package/lib/internal/FirebaseModule.ts +6 -3
  244. package/lib/internal/NativeModules.ts +4 -1
  245. package/lib/internal/RNFBNativeEventEmitter.ts +14 -5
  246. package/lib/internal/SharedEventEmitter.ts +5 -1
  247. package/lib/internal/asyncStorage.ts +7 -11
  248. package/lib/internal/index.ts +1 -0
  249. package/lib/internal/logger.ts +53 -43
  250. package/lib/internal/nativeModuleAndroidIos.ts +2 -40
  251. package/lib/internal/nativeModuleDebug.ts +97 -0
  252. package/lib/internal/nativeModuleWeb.ts +10 -40
  253. package/lib/internal/react-native-vendor-emitter.d.ts +11 -0
  254. package/lib/internal/registry/app.ts +8 -2
  255. package/lib/internal/registry/modular.ts +2 -2
  256. package/lib/internal/registry/nativeModule.ts +3 -3
  257. package/lib/internal/web/RNFBAppModule.ts +16 -15
  258. package/lib/internal/web/memidb/lib/FakeEventTarget.js +3 -1
  259. package/lib/types/app.ts +10 -3
  260. package/lib/types/internal.ts +19 -0
  261. package/lib/version.ts +1 -1
  262. package/package.json +9 -8
  263. package/plugin/build/ios/appDelegate.js +19 -9
  264. package/plugin/build/ios/podfile.js +16 -16
  265. package/plugin/build/pluginConfig.d.ts +4 -2
  266. package/plugin/src/ios/appDelegate.ts +45 -15
  267. package/plugin/src/ios/podfile.ts +20 -23
  268. package/plugin/src/pluginConfig.ts +4 -2
  269. package/android/src/main/java/io/invertase/firebase/common/TaskExecutorService.java +0 -124
  270. package/android/src/main/java/io/invertase/firebase/common/UniversalFirebaseModule.java +0 -62
  271. package/android/src/main/java/io/invertase/firebase/common/UniversalFirebasePreferences.java +0 -91
  272. package/android/src/reactnative/java/io/invertase/firebase/app/NativeRNFBTurboApp.java +0 -222
  273. package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseApp.java +0 -46
  274. package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseAppPackage.java +0 -49
  275. package/android/src/reactnative/java/io/invertase/firebase/common/RCTConvertFirebase.java +0 -191
  276. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseEvent.java +0 -53
  277. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseEventEmitter.java +0 -606
  278. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseJSON.java +0 -107
  279. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseMeta.java +0 -101
  280. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseModule.java +0 -146
  281. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebasePreferences.java +0 -96
  282. package/android/src/reactnative/java/io/invertase/firebase/common/SharedUtils.java +0 -441
  283. package/android/src/reactnative/java/io/invertase/firebase/utils/NativeRNFBTurboUtils.java +0 -223
@@ -0,0 +1,169 @@
1
+ /**
2
+ * Copyright (c) 2016-present Invertase Limited & Contributors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this library except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ #import "RNFBFirebaseBridge.h"
18
+
19
+ #import <objc/message.h>
20
+
21
+ @import FirebaseCore;
22
+ @import FirebaseInstallations;
23
+
24
+ static FIROptions *RNFBFirebaseOptions(NSObject *options) { return (FIROptions *)options; }
25
+
26
+ static id RNFBFirebaseNilOrString(NSString *_Nullable value) { return value ?: [NSNull null]; }
27
+
28
+ static NSString *RNFBFirebaseString(const char *value) {
29
+ return value == NULL ? nil : [NSString stringWithUTF8String:value];
30
+ }
31
+
32
+ // Link anchor, not API. Nothing else in this bridge uses FirebaseInstallations, so this class
33
+ // reference is what makes the RNFBFirebase dynamic product take a symbol dependency on the
34
+ // FirebaseInstallations package product (declared in Package.swift, requested by
35
+ // RNFBApp.podspec) instead of only importing its module. Its only caller is
36
+ // RNFBFirebaseAppClientTests.testInstallationsLinkageAnchorIsDistinctFromNSObject.
37
+ BOOL RNFBFirebaseInstallationsLinked(void) { return [FIRInstallations class] != [NSObject class]; }
38
+
39
+ NS_RETURNS_RETAINED NSObject *RNFBFirebaseCreateOptions(const char *googleAppID,
40
+ const char *senderID) {
41
+ // alloc and initWithGoogleAppID:GCMSenderID: are each +1. The function name
42
+ // contains Create, so ARC returns the object at +1. That is the same retain
43
+ // balance as takeRetainedValue plus Unmanaged.passRetained on perform.
44
+ return [[FIROptions alloc] initWithGoogleAppID:RNFBFirebaseString(googleAppID)
45
+ GCMSenderID:RNFBFirebaseString(senderID)];
46
+ }
47
+
48
+ NSString *RNFBFirebaseOptionsAPIKey(NSObject *options) {
49
+ return RNFBFirebaseOptions(options).APIKey;
50
+ }
51
+
52
+ void RNFBFirebaseOptionsSetAPIKey(NSObject *options, const char *value) {
53
+ RNFBFirebaseOptions(options).APIKey = RNFBFirebaseString(value);
54
+ }
55
+
56
+ NSString *RNFBFirebaseOptionsProjectID(NSObject *options) {
57
+ return RNFBFirebaseOptions(options).projectID;
58
+ }
59
+
60
+ void RNFBFirebaseOptionsSetProjectID(NSObject *options, const char *value) {
61
+ RNFBFirebaseOptions(options).projectID = RNFBFirebaseString(value);
62
+ }
63
+
64
+ NSString *RNFBFirebaseOptionsClientID(NSObject *options) {
65
+ return RNFBFirebaseOptions(options).clientID;
66
+ }
67
+
68
+ void RNFBFirebaseOptionsSetClientID(NSObject *options, const char *value) {
69
+ RNFBFirebaseOptions(options).clientID = RNFBFirebaseString(value);
70
+ }
71
+
72
+ NSString *RNFBFirebaseOptionsDatabaseURL(NSObject *options) {
73
+ return RNFBFirebaseOptions(options).databaseURL;
74
+ }
75
+
76
+ void RNFBFirebaseOptionsSetDatabaseURL(NSObject *options, const char *value) {
77
+ RNFBFirebaseOptions(options).databaseURL = RNFBFirebaseString(value);
78
+ }
79
+
80
+ NSString *RNFBFirebaseOptionsStorageBucket(NSObject *options) {
81
+ return RNFBFirebaseOptions(options).storageBucket;
82
+ }
83
+
84
+ void RNFBFirebaseOptionsSetStorageBucket(NSObject *options, const char *value) {
85
+ RNFBFirebaseOptions(options).storageBucket = RNFBFirebaseString(value);
86
+ }
87
+
88
+ NSString *RNFBFirebaseOptionsBundleID(NSObject *options) {
89
+ return RNFBFirebaseOptions(options).bundleID;
90
+ }
91
+
92
+ void RNFBFirebaseOptionsSetBundleID(NSObject *options, const char *value) {
93
+ RNFBFirebaseOptions(options).bundleID = RNFBFirebaseString(value);
94
+ }
95
+
96
+ NSString *RNFBFirebaseOptionsAppGroupID(NSObject *options) {
97
+ return RNFBFirebaseOptions(options).appGroupID;
98
+ }
99
+
100
+ void RNFBFirebaseOptionsSetAppGroupID(NSObject *options, const char *value) {
101
+ RNFBFirebaseOptions(options).appGroupID = RNFBFirebaseString(value);
102
+ }
103
+
104
+ NSObject *RNFBFirebaseDefaultApp(void) { return [FIRApp defaultApp]; }
105
+
106
+ NSObject *RNFBFirebaseAppNamed(const char *name) {
107
+ return [FIRApp appNamed:RNFBFirebaseString(name)];
108
+ }
109
+
110
+ NSDictionary<NSString *, id> *RNFBFirebaseAllApps(void) { return [FIRApp allApps]; }
111
+
112
+ void RNFBFirebaseConfigure(void) { [FIRApp configure]; }
113
+
114
+ void RNFBFirebaseConfigureWithOptions(NSObject *options) {
115
+ [FIRApp configureWithOptions:RNFBFirebaseOptions(options)];
116
+ }
117
+
118
+ void RNFBFirebaseConfigureWithName(const char *name, NSObject *options) {
119
+ [FIRApp configureWithName:RNFBFirebaseString(name) options:RNFBFirebaseOptions(options)];
120
+ }
121
+
122
+ NSDictionary<NSString *, id> *RNFBFirebaseSnapshot(NSObject *app) {
123
+ FIRApp *firebaseApp = (FIRApp *)app;
124
+ FIROptions *options = firebaseApp.options;
125
+ return @{
126
+ @"name" : firebaseApp.name,
127
+ @"apiKey" : RNFBFirebaseNilOrString(options.APIKey),
128
+ @"googleAppID" : RNFBFirebaseNilOrString(options.googleAppID),
129
+ @"projectID" : RNFBFirebaseNilOrString(options.projectID),
130
+ @"databaseURL" : RNFBFirebaseNilOrString(options.databaseURL),
131
+ @"storageBucket" : RNFBFirebaseNilOrString(options.storageBucket),
132
+ @"gcmSenderID" : RNFBFirebaseNilOrString(options.GCMSenderID),
133
+ @"clientID" : RNFBFirebaseNilOrString(options.clientID),
134
+ @"isDataCollectionDefaultEnabled" : @(firebaseApp.isDataCollectionDefaultEnabled),
135
+ };
136
+ }
137
+
138
+ BOOL RNFBFirebaseSetDataCollectionDefaultEnabled(BOOL enabled, NSObject *app) {
139
+ if (![app isKindOfClass:[FIRApp class]]) {
140
+ return NO;
141
+ }
142
+ ((FIRApp *)app).dataCollectionDefaultEnabled = enabled;
143
+ return YES;
144
+ }
145
+
146
+ BOOL RNFBFirebaseDeleteApp(NSObject *app, void (^completion)(BOOL)) {
147
+ if (![app isKindOfClass:[FIRApp class]]) {
148
+ return NO;
149
+ }
150
+ [(FIRApp *)app deleteApp:completion];
151
+ return YES;
152
+ }
153
+
154
+ void RNFBFirebaseSetLoggerLevel(NSInteger level) {
155
+ // Unknown raw values pass through. Do not clamp them to FIRLoggerLevelError.
156
+ [[FIRConfiguration sharedInstance] setLoggerLevel:(FIRLoggerLevel)level];
157
+ }
158
+
159
+ void RNFBFirebaseRegisterLibrary(const char *name, const char *version) {
160
+ SEL selector = NSSelectorFromString(@"registerLibrary:withVersion:");
161
+ if (![FIRApp respondsToSelector:selector]) {
162
+ return;
163
+ }
164
+ NSString *libraryName = RNFBFirebaseString(name);
165
+ NSString *libraryVersion = RNFBFirebaseString(version);
166
+ void (*send)(id, SEL, NSString *, NSString *) =
167
+ (void (*)(id, SEL, NSString *, NSString *))objc_msgSend;
168
+ send([FIRApp class], selector, libraryName, libraryVersion);
169
+ }
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Copyright (c) 2016-present Invertase Limited & Contributors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this library except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ #import <Foundation/Foundation.h>
18
+
19
+ NS_ASSUME_NONNULL_BEGIN
20
+
21
+ /// Foundation-only entry points. The implementation file is the only place
22
+ /// that imports the SDK.
23
+ BOOL RNFBFirebaseInstallationsLinked(void);
24
+ NS_RETURNS_RETAINED NSObject *RNFBFirebaseCreateOptions(const char *_Nullable googleAppID,
25
+ const char *_Nullable senderID);
26
+ NSString *_Nullable RNFBFirebaseOptionsAPIKey(NSObject *options);
27
+ void RNFBFirebaseOptionsSetAPIKey(NSObject *options, const char *_Nullable value);
28
+ NSString *_Nullable RNFBFirebaseOptionsProjectID(NSObject *options);
29
+ void RNFBFirebaseOptionsSetProjectID(NSObject *options, const char *_Nullable value);
30
+ NSString *_Nullable RNFBFirebaseOptionsClientID(NSObject *options);
31
+ void RNFBFirebaseOptionsSetClientID(NSObject *options, const char *_Nullable value);
32
+ NSString *_Nullable RNFBFirebaseOptionsDatabaseURL(NSObject *options);
33
+ void RNFBFirebaseOptionsSetDatabaseURL(NSObject *options, const char *_Nullable value);
34
+ NSString *_Nullable RNFBFirebaseOptionsStorageBucket(NSObject *options);
35
+ void RNFBFirebaseOptionsSetStorageBucket(NSObject *options, const char *_Nullable value);
36
+ NSString *_Nullable RNFBFirebaseOptionsBundleID(NSObject *options);
37
+ void RNFBFirebaseOptionsSetBundleID(NSObject *options, const char *_Nullable value);
38
+ NSString *_Nullable RNFBFirebaseOptionsAppGroupID(NSObject *options);
39
+ void RNFBFirebaseOptionsSetAppGroupID(NSObject *options, const char *_Nullable value);
40
+ NSObject *_Nullable RNFBFirebaseDefaultApp(void);
41
+ NSObject *_Nullable RNFBFirebaseAppNamed(const char *name);
42
+ NSDictionary<NSString *, id> *_Nullable RNFBFirebaseAllApps(void);
43
+ void RNFBFirebaseConfigure(void);
44
+ void RNFBFirebaseConfigureWithOptions(NSObject *options);
45
+ void RNFBFirebaseConfigureWithName(const char *name, NSObject *options);
46
+ NSDictionary<NSString *, id> *RNFBFirebaseSnapshot(NSObject *app);
47
+ BOOL RNFBFirebaseSetDataCollectionDefaultEnabled(BOOL enabled, NSObject *app);
48
+ BOOL RNFBFirebaseDeleteApp(NSObject *app, void (^_Nonnull completion)(BOOL success));
49
+ void RNFBFirebaseSetLoggerLevel(NSInteger level);
50
+ void RNFBFirebaseRegisterLibrary(const char *name, const char *version);
51
+
52
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,240 @@
1
+ /**
2
+ * Copyright (c) 2016-present Invertase Limited & Contributors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this library except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import FirebaseCore
18
+ import Foundation
19
+ import RNFBFirebase
20
+ import XCTest
21
+
22
+ private final class DynamicDomainProvider: NSObject, RNFBCustomDomainProviding {
23
+ var domains: [String: String] = [:]
24
+
25
+ func getCustomDomain(_ appName: String) -> String? {
26
+ domains[appName]
27
+ }
28
+ }
29
+
30
+ private final class DynamicEventSender: NSObject, RNFBJSEventSending {
31
+ var name: String?
32
+ var body: NSDictionary?
33
+
34
+ func sendEvent(name: String, body: Any?) {
35
+ self.name = name
36
+ self.body = body as? NSDictionary
37
+ }
38
+ }
39
+
40
+ /// Compiles RNFBApp with `RNFB_DYNAMIC_FIREBASE_PROBE` so the opaque facade branch is executed.
41
+ final class RNFBAppDynamicFacadeTests: XCTestCase {
42
+ override func tearDown() {
43
+ FirebaseApp.resetRegistryForTesting()
44
+ FirebaseConfiguration.resetForTesting()
45
+ RNFBAppModuleFirebase.resetRegisterLibraryOnceForTesting()
46
+ RNFBAppCustomAuthDomains.resetCustomDomainsForTesting()
47
+ super.tearDown()
48
+ }
49
+
50
+ func testGeneratedPublicInterfaceHidesFirebaseModules() throws {
51
+ let products = Bundle(for: RNFBAppDynamicFacadeTests.self).bundleURL.deletingLastPathComponent()
52
+ let moduleDir = products.appendingPathComponent(
53
+ "RNFBFirebase.framework/Modules/RNFBFirebase.swiftmodule"
54
+ )
55
+ let interfaces = try FileManager.default.contentsOfDirectory(at: moduleDir, includingPropertiesForKeys: nil)
56
+ .filter { $0.pathExtension == "swiftinterface" }
57
+ XCTAssertFalse(interfaces.isEmpty, "missing swiftinterface under \(moduleDir.path)")
58
+ let text = try interfaces.map { try String(contentsOf: $0, encoding: .utf8) }.joined(separator: "\n")
59
+ let forbidden = try NSRegularExpression(
60
+ pattern: #"\b(?:import Firebase\w*|FirebaseCore|FirebaseInstallations|FirebaseOptions|FirebaseApp|FirebaseConfiguration|FirebaseLoggerLevel|FIROptions|FIRApp)\b"#
61
+ )
62
+ let range = NSRange(text.startIndex..<text.endIndex, in: text)
63
+ let match = forbidden.firstMatch(in: text, range: range)
64
+ XCTAssertNil(match, "public interface names a Firebase SDK type")
65
+ }
66
+
67
+ func testFacadeOptionsRoundTripNilBundleAndDeallocation() {
68
+ weak var released: FirebaseOptions?
69
+ autoreleasepool {
70
+ let configured = RNFBFIROptionsFactoryAdapter.shared.create(googleAppID: nil, gcmSenderID: nil)
71
+ let adapter = configured as! RNFBFIROptionsConfiguringAdapter
72
+ released = adapter.options as? FirebaseOptions
73
+ XCTAssertNil(adapter.options.value(forKey: "googleAppID") as? String)
74
+ XCTAssertNil(adapter.options.value(forKey: "GCMSenderID") as? String)
75
+
76
+ adapter.APIKey = "api-key"
77
+ adapter.projectID = "project-id"
78
+ adapter.clientID = "client-id"
79
+ adapter.databaseURL = "https://example.firebaseio.com"
80
+ adapter.storageBucket = "example.appspot.com"
81
+ adapter.bundleID = "com.example.app"
82
+ adapter.appGroupID = "group.com.example"
83
+ XCTAssertEqual(adapter.APIKey, "api-key")
84
+ XCTAssertEqual(adapter.projectID, "project-id")
85
+ XCTAssertEqual(adapter.clientID, "client-id")
86
+ XCTAssertEqual(adapter.databaseURL, "https://example.firebaseio.com")
87
+ XCTAssertEqual(adapter.storageBucket, "example.appspot.com")
88
+ XCTAssertEqual(adapter.bundleID, "com.example.app")
89
+ XCTAssertEqual(adapter.appGroupID, "group.com.example")
90
+ adapter.bundleID = nil
91
+ adapter.appGroupID = nil
92
+ XCTAssertNil(adapter.bundleID)
93
+ XCTAssertNil(adapter.appGroupID)
94
+ }
95
+ XCTAssertNil(released)
96
+
97
+ let moduleConfigured = RNFBAppModuleFirebase.optionsFactory().create(
98
+ googleAppID: "module-app",
99
+ gcmSenderID: "module-sender"
100
+ )
101
+ let moduleAdapter = moduleConfigured as! RNFBFIROptionsConfiguringAdapter
102
+ XCTAssertEqual(moduleAdapter.options.value(forKey: "googleAppID") as? String, "module-app")
103
+ XCTAssertEqual(moduleAdapter.options.value(forKey: "GCMSenderID") as? String, "module-sender")
104
+ }
105
+
106
+ func testConvertRawOptionsReturnsLiveOptions() {
107
+ let raw: NSDictionary = [
108
+ "appId": "app-id",
109
+ "messagingSenderId": "sender-id",
110
+ "apiKey": "api-key",
111
+ "projectId": "project-id",
112
+ "clientId": "client-id",
113
+ "databaseURL": "https://example.firebaseio.com",
114
+ "storageBucket": "example.appspot.com",
115
+ ]
116
+ let result = RCTConvertFIROptions.convertRawOptions(raw) as! FirebaseOptions
117
+ XCTAssertEqual(result.googleAppID, "app-id")
118
+ XCTAssertEqual(result.gcmSenderID, "sender-id")
119
+ XCTAssertEqual(result.apiKey, "api-key")
120
+ XCTAssertEqual(result.projectID, "project-id")
121
+ XCTAssertEqual(result.clientID, "client-id")
122
+ XCTAssertEqual(result.databaseURL, "https://example.firebaseio.com")
123
+ XCTAssertEqual(result.storageBucket, "example.appspot.com")
124
+ }
125
+
126
+ func testAppLookupConfigureReuseAndAllApps() {
127
+ XCTAssertNil(RCTConvertFIRApp.firApp(fromString: "missing"))
128
+ XCTAssertEqual(RNFBAppModuleFirebase.allApps().count, 0)
129
+
130
+ let options = RNFBFIROptionsFactoryAdapter.shared.create(googleAppID: "app-id", gcmSenderID: "sender")
131
+ let missingDefault = RNFBAppInitializeNameResolution(
132
+ appName: nil,
133
+ jsAppName: "[DEFAULT]",
134
+ isDefaultApp: true
135
+ )
136
+ let created = RNFBAppModuleFirebase.configureOrReuseApp(
137
+ options: options,
138
+ nameResolution: missingDefault
139
+ )
140
+ XCTAssertTrue(created === FirebaseApp.app())
141
+ XCTAssertTrue(RCTConvertFIRApp.firApp(fromString: "[DEFAULT]") === FirebaseApp.app())
142
+
143
+ let reused = RNFBAppModuleFirebase.configureOrReuseApp(
144
+ options: options,
145
+ nameResolution: missingDefault
146
+ )
147
+ XCTAssertTrue(reused === created)
148
+
149
+ let named = RNFBAppInitializeNameResolution(
150
+ appName: "secondary",
151
+ jsAppName: "secondary",
152
+ isDefaultApp: false
153
+ )
154
+ let secondary = RNFBAppModuleFirebase.configureOrReuseApp(
155
+ options: RNFBFIROptionsFactoryAdapter.shared.create(googleAppID: "named", gcmSenderID: "named-sender"),
156
+ nameResolution: named
157
+ )
158
+ XCTAssertTrue(secondary === FirebaseApp.app(name: "secondary"))
159
+ XCTAssertTrue(RNFBAppModuleFirebase.app(forName: "secondary") === secondary)
160
+ XCTAssertEqual(RNFBAppModuleFirebase.allApps().count, 2)
161
+ }
162
+
163
+ func testDictionaryAndEventUseFacadeSnapshot() {
164
+ let options = FirebaseOptions(googleAppID: "app-id", gcmSenderID: "sender-id")
165
+ options.apiKey = "api-key"
166
+ options.projectID = "project-id"
167
+ options.databaseURL = "https://example.firebaseio.com"
168
+ options.storageBucket = "example.appspot.com"
169
+ options.clientID = "client-id"
170
+ let app = FirebaseApp(name: "__FIRAPP_DEFAULT", options: options)
171
+ app.isDataCollectionDefaultEnabled = true
172
+
173
+ let domains = DynamicDomainProvider()
174
+ domains.domains["[DEFAULT]"] = "auth.example.com"
175
+ let result = RNFBSharedUtilsFIRApp.firAppToDictionary(fromFIRApp: app, customDomainProvider: domains)
176
+ let appConfig = result["appConfig"] as! NSDictionary
177
+ let mapped = result["options"] as! NSDictionary
178
+ XCTAssertEqual(appConfig["name"] as? String, "[DEFAULT]")
179
+ XCTAssertEqual(appConfig["automaticDataCollectionEnabled"] as? Bool, true)
180
+ XCTAssertEqual(mapped["apiKey"] as? String, "api-key")
181
+ XCTAssertEqual(mapped["appId"] as? String, "app-id")
182
+ XCTAssertEqual(mapped["projectId"] as? String, "project-id")
183
+ XCTAssertEqual(mapped["databaseURL"] as? String, "https://example.firebaseio.com")
184
+ XCTAssertEqual(mapped["storageBucket"] as? String, "example.appspot.com")
185
+ XCTAssertEqual(mapped["messagingSenderId"] as? String, "sender-id")
186
+ XCTAssertEqual(mapped["clientId"] as? String, "client-id")
187
+ XCTAssertEqual(mapped["authDomain"] as? String, "auth.example.com")
188
+
189
+ let sender = DynamicEventSender()
190
+ RNFBSharedUtilsFIRApp.sendJSEvent(
191
+ forFIRApp: app,
192
+ name: "app-ready",
193
+ body: ["ok": true],
194
+ eventSender: sender
195
+ )
196
+ XCTAssertEqual(sender.name, "app-ready")
197
+ XCTAssertEqual(sender.body?["appName"] as? String, "[DEFAULT]")
198
+ XCTAssertEqual(sender.body?["ok"] as? Bool, true)
199
+ }
200
+
201
+ func testLoggerRegistrationDataCollectionAndDelete() {
202
+ RNFBAppModuleFirebase.setLoggerLevel(7)
203
+ XCTAssertEqual(FirebaseConfiguration.shared.loggerLevel, unsafeBitCast(7, to: FirebaseLoggerLevel.self))
204
+ RNFBAppModuleFirebase.setLoggerLevel(99)
205
+ XCTAssertEqual(FirebaseConfiguration.shared.loggerLevel, unsafeBitCast(99, to: FirebaseLoggerLevel.self))
206
+
207
+ RNFBAppModuleFirebase.registerLibraryOnce(name: "react-native-firebase", version: "9.9.9")
208
+ RNFBAppModuleFirebase.registerLibraryOnce(name: "react-native-firebase", version: "ignored")
209
+ XCTAssertEqual(FirebaseApp.lastRegisteredLibraryNameForTesting(), "react-native-firebase")
210
+ XCTAssertEqual(FirebaseApp.lastRegisteredLibraryVersionForTesting(), "9.9.9")
211
+
212
+ let options = FirebaseOptions(googleAppID: "app-id", gcmSenderID: "sender")
213
+ let app = FirebaseApp(name: "secondary", options: options)
214
+ FirebaseApp.register(forTesting: app)
215
+ RNFBAppModuleFirebase.setAutomaticDataCollectionEnabled(true, forAppName: "missing")
216
+ XCTAssertFalse(app.isDataCollectionDefaultEnabled)
217
+ RNFBAppModuleFirebase.setAutomaticDataCollectionEnabled(true, forAppName: "secondary")
218
+ XCTAssertTrue(app.isDataCollectionDefaultEnabled)
219
+
220
+ RNFBAppModuleFirebase.setDataCollectionDefaultEnabled(false, forApp: NSObject())
221
+ XCTAssertTrue(app.isDataCollectionDefaultEnabled)
222
+ RNFBAppModuleFirebase.setDataCollectionDefaultEnabled(false, forApp: app)
223
+ XCTAssertFalse(app.isDataCollectionDefaultEnabled)
224
+
225
+ let castFailure = expectation(description: "cast-failure")
226
+ RNFBAppModuleFirebase.deleteApp(NSObject()) { success in
227
+ XCTAssertFalse(success)
228
+ castFailure.fulfill()
229
+ }
230
+ waitForExpectations(timeout: 1)
231
+
232
+ let deleted = expectation(description: "deleted")
233
+ RNFBAppModuleFirebase.deleteApp(app) { success in
234
+ XCTAssertTrue(success)
235
+ deleted.fulfill()
236
+ }
237
+ waitForExpectations(timeout: 1)
238
+ XCTAssertNil(FirebaseApp.app(name: "secondary"))
239
+ }
240
+ }
@@ -1,6 +1,4 @@
1
- package io.invertase.firebase.app;
2
-
3
- /*
1
+ /**
4
2
  * Copyright (c) 2016-present Invertase Limited & Contributors
5
3
  *
6
4
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -14,22 +12,29 @@ package io.invertase.firebase.app;
14
12
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
13
  * See the License for the specific language governing permissions and
16
14
  * limitations under the License.
17
- *
18
15
  */
19
16
 
20
- import androidx.annotation.Keep;
21
- import com.google.firebase.components.Component;
22
- import com.google.firebase.components.ComponentRegistrar;
23
- import com.google.firebase.platforminfo.LibraryVersionComponent;
24
- import java.util.Collections;
25
- import java.util.List;
17
+ import Foundation
18
+ import RNFBFirebase
19
+
20
+ /// Client of RNFBFirebase compiled with FirebaseCore and FirebaseInstallations
21
+ /// absent from the module path. `import RNFBFirebase` is the dynamic-probe failure.
22
+ enum RNFBFirebaseClientImportCheck {
23
+ static func boot() {
24
+ RNFBFirebaseAppClient.configure()
25
+ }
26
26
 
27
- @Keep
28
- public class ReactNativeFirebaseAppRegistrar implements ComponentRegistrar {
29
- @Override
30
- public List<Component<?>> getComponents() {
31
- return Collections.singletonList(
32
- LibraryVersionComponent.create(
33
- "react-native-firebase", ReactNativeFirebaseVersion.VERSION));
27
+ static func snapshot() -> RNFBFirebaseAppSnapshot {
28
+ RNFBFirebaseAppSnapshot(
29
+ name: "client",
30
+ apiKey: nil,
31
+ googleAppID: nil,
32
+ projectID: nil,
33
+ databaseURL: nil,
34
+ storageBucket: nil,
35
+ gcmSenderID: nil,
36
+ clientID: nil,
37
+ isDataCollectionDefaultEnabled: false
38
+ )
34
39
  }
35
40
  }