ngx-firebase 1.1.12 → 22.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 (274) hide show
  1. package/README.md +51 -11
  2. package/fesm2022/ngx-firebase.mjs +158 -0
  3. package/fesm2022/ngx-firebase.mjs.map +1 -0
  4. package/package.json +40 -30
  5. package/types/ngx-firebase.d.ts +55 -0
  6. package/bundles/ngx-firebase-capacitor.umd.js +0 -763
  7. package/bundles/ngx-firebase-capacitor.umd.js.map +0 -1
  8. package/bundles/ngx-firebase-capacitor.umd.min.js +0 -16
  9. package/bundles/ngx-firebase-capacitor.umd.min.js.map +0 -1
  10. package/bundles/ngx-firebase-iap.umd.js +0 -718
  11. package/bundles/ngx-firebase-iap.umd.js.map +0 -1
  12. package/bundles/ngx-firebase-iap.umd.min.js +0 -2
  13. package/bundles/ngx-firebase-iap.umd.min.js.map +0 -1
  14. package/bundles/ngx-firebase-ionic-auth-ui.umd.js +0 -2116
  15. package/bundles/ngx-firebase-ionic-auth-ui.umd.js.map +0 -1
  16. package/bundles/ngx-firebase-ionic-auth-ui.umd.min.js +0 -16
  17. package/bundles/ngx-firebase-ionic-auth-ui.umd.min.js.map +0 -1
  18. package/bundles/ngx-firebase-ionic.umd.js +0 -979
  19. package/bundles/ngx-firebase-ionic.umd.js.map +0 -1
  20. package/bundles/ngx-firebase-ionic.umd.min.js +0 -16
  21. package/bundles/ngx-firebase-ionic.umd.min.js.map +0 -1
  22. package/bundles/ngx-firebase-testing.umd.js +0 -801
  23. package/bundles/ngx-firebase-testing.umd.js.map +0 -1
  24. package/bundles/ngx-firebase-testing.umd.min.js +0 -2
  25. package/bundles/ngx-firebase-testing.umd.min.js.map +0 -1
  26. package/bundles/ngx-firebase.umd.js +0 -2271
  27. package/bundles/ngx-firebase.umd.js.map +0 -1
  28. package/bundles/ngx-firebase.umd.min.js +0 -2
  29. package/bundles/ngx-firebase.umd.min.js.map +0 -1
  30. package/capacitor/capacitor.module.d.ts +0 -9
  31. package/capacitor/interfaces/config.d.ts +0 -12
  32. package/capacitor/interfaces/index.d.ts +0 -1
  33. package/capacitor/ngx-firebase-capacitor.d.ts +0 -5
  34. package/capacitor/ngx-firebase-capacitor.metadata.json +0 -1
  35. package/capacitor/package.json +0 -25
  36. package/capacitor/public-api.d.ts +0 -3
  37. package/capacitor/services/analytics-firebase-capacitor.service.d.ts +0 -9
  38. package/capacitor/services/crashlytics-firebase-capacitor.service.d.ts +0 -8
  39. package/capacitor/services/credential-factory-capacitor.service.d.ts +0 -18
  40. package/capacitor/services/index.d.ts +0 -3
  41. package/esm2015/capacitor/capacitor.module.js +0 -78
  42. package/esm2015/capacitor/interfaces/config.js +0 -3
  43. package/esm2015/capacitor/interfaces/index.js +0 -2
  44. package/esm2015/capacitor/ngx-firebase-capacitor.js +0 -6
  45. package/esm2015/capacitor/public-api.js +0 -4
  46. package/esm2015/capacitor/services/analytics-firebase-capacitor.service.js +0 -43
  47. package/esm2015/capacitor/services/crashlytics-firebase-capacitor.service.js +0 -40
  48. package/esm2015/capacitor/services/credential-factory-capacitor.service.js +0 -182
  49. package/esm2015/capacitor/services/index.js +0 -4
  50. package/esm2015/iap/iap.module.js +0 -32
  51. package/esm2015/iap/interfaces/index.js +0 -5
  52. package/esm2015/iap/ngx-firebase-iap.js +0 -5
  53. package/esm2015/iap/public-api.js +0 -5
  54. package/esm2015/iap/services/iap.service.js +0 -317
  55. package/esm2015/iap/tokens/index.js +0 -4
  56. package/esm2015/ionic/animations/index.js +0 -30
  57. package/esm2015/ionic/components/avatar/avatar.component.js +0 -98
  58. package/esm2015/ionic/components/avatar/index.js +0 -2
  59. package/esm2015/ionic/components/index.js +0 -3
  60. package/esm2015/ionic/components/popover-menu/index.js +0 -3
  61. package/esm2015/ionic/components/popover-menu/interface.js +0 -2
  62. package/esm2015/ionic/components/popover-menu/popover-menu.component.js +0 -34
  63. package/esm2015/ionic/ionic.module.js +0 -46
  64. package/esm2015/ionic/ngx-firebase-ionic.js +0 -5
  65. package/esm2015/ionic/public-api.js +0 -5
  66. package/esm2015/ionic/services/alerts-ionic.service.js +0 -107
  67. package/esm2015/ionic/services/index.js +0 -6
  68. package/esm2015/ionic/services/legality-dialog-ionic.service.js +0 -85
  69. package/esm2015/ionic/services/loading-ionic.service.js +0 -46
  70. package/esm2015/ionic/services/picker-ionic.service.js +0 -44
  71. package/esm2015/ionic/services/toast-ionic.service.js +0 -49
  72. package/esm2015/ionic-auth-ui/animations/index.js +0 -30
  73. package/esm2015/ionic-auth-ui/components/email-confirmation/email-confirmation.component.js +0 -99
  74. package/esm2015/ionic-auth-ui/components/email-field/email-field.component.js +0 -25
  75. package/esm2015/ionic-auth-ui/components/form-field/form-field.component.js +0 -82
  76. package/esm2015/ionic-auth-ui/components/index.js +0 -12
  77. package/esm2015/ionic-auth-ui/components/name-field/name-field.component.js +0 -30
  78. package/esm2015/ionic-auth-ui/components/or-divider/or-divider.component.js +0 -11
  79. package/esm2015/ionic-auth-ui/components/password-field/password-field.component.js +0 -138
  80. package/esm2015/ionic-auth-ui/components/password-field/passwordValidatorFunctions.js +0 -62
  81. package/esm2015/ionic-auth-ui/components/providers/providers.component.js +0 -70
  82. package/esm2015/ionic-auth-ui/components/reauthenticate/reauthenticate.component.js +0 -99
  83. package/esm2015/ionic-auth-ui/components/register/register.component.js +0 -142
  84. package/esm2015/ionic-auth-ui/components/register-with-email/register-with-email.component.js +0 -60
  85. package/esm2015/ionic-auth-ui/components/register-with-email-popover/register-with-email-popover.component.js +0 -26
  86. package/esm2015/ionic-auth-ui/components/signin/signin.component.js +0 -92
  87. package/esm2015/ionic-auth-ui/components/terms-field/terms-field.component.js +0 -99
  88. package/esm2015/ionic-auth-ui/components/user/user.component.js +0 -195
  89. package/esm2015/ionic-auth-ui/ionic-auth-ui.module.js +0 -92
  90. package/esm2015/ionic-auth-ui/ngx-firebase-ionic-auth-ui.js +0 -23
  91. package/esm2015/ionic-auth-ui/pages/index.js +0 -5
  92. package/esm2015/ionic-auth-ui/pages/register/index.js +0 -2
  93. package/esm2015/ionic-auth-ui/pages/register/register.page.js +0 -56
  94. package/esm2015/ionic-auth-ui/pages/signin/index.js +0 -2
  95. package/esm2015/ionic-auth-ui/pages/signin/signin.page.js +0 -78
  96. package/esm2015/ionic-auth-ui/pages/user/index.js +0 -2
  97. package/esm2015/ionic-auth-ui/pages/user/user.page.js +0 -11
  98. package/esm2015/ionic-auth-ui/pages/verifyemail/index.js +0 -2
  99. package/esm2015/ionic-auth-ui/pages/verifyemail/verifyemail.page.js +0 -85
  100. package/esm2015/ionic-auth-ui/public-api.js +0 -5
  101. package/esm2015/ngx-firebase.js +0 -6
  102. package/esm2015/public-api.js +0 -6
  103. package/esm2015/shared/guards/index.js +0 -3
  104. package/esm2015/shared/guards/logged-in.guard.js +0 -60
  105. package/esm2015/shared/guards/verify-email.guard.js +0 -41
  106. package/esm2015/shared/interfaces/accounts.enum.js +0 -9
  107. package/esm2015/shared/interfaces/authprovider.enum.js +0 -15
  108. package/esm2015/shared/interfaces/config.interface.js +0 -61
  109. package/esm2015/shared/interfaces/index.js +0 -8
  110. package/esm2015/shared/interfaces/main.interface.js +0 -7
  111. package/esm2015/shared/interfaces/providers.interface.js +0 -2
  112. package/esm2015/shared/interfaces/tokens.js +0 -19
  113. package/esm2015/shared/interfaces/ui-providers.interface.js +0 -2
  114. package/esm2015/shared/services/analytics.service.js +0 -24
  115. package/esm2015/shared/services/auth-process.service.js +0 -752
  116. package/esm2015/shared/services/crashlytics.service.js +0 -42
  117. package/esm2015/shared/services/device-info.service.js +0 -14
  118. package/esm2015/shared/services/firebase.service.js +0 -37
  119. package/esm2015/shared/services/firestore-sync.service.js +0 -60
  120. package/esm2015/shared/services/index.js +0 -10
  121. package/esm2015/shared/services/performance.service.js +0 -28
  122. package/esm2015/shared/services/remoteconfig.service.js +0 -49
  123. package/esm2015/shared/services/ui.service.js +0 -45
  124. package/esm2015/shared/shared.module.js +0 -175
  125. package/esm2015/shared/types/DisplayWidth.js +0 -9
  126. package/esm2015/shared/types/Location.js +0 -2
  127. package/esm2015/shared/types/ValueAccessorControlComponent.js +0 -85
  128. package/esm2015/shared/types/ValueAccessorValueComponent.js +0 -40
  129. package/esm2015/shared/types/index.js +0 -5
  130. package/esm2015/testing/fakeavatar.module.js +0 -22
  131. package/esm2015/testing/fakes/FakeAuthProcessService.js +0 -31
  132. package/esm2015/testing/fakes/FakeAvatarComponent.js +0 -13
  133. package/esm2015/testing/fakes/FakeFireService.js +0 -21
  134. package/esm2015/testing/fakes/FakeFirestoreSyncService.js +0 -11
  135. package/esm2015/testing/fakes/FakeIAPurchaseService.js +0 -11
  136. package/esm2015/testing/fakes/FakePickerService.js +0 -9
  137. package/esm2015/testing/fakes/FakeRemoteConfigService.js +0 -44
  138. package/esm2015/testing/fakes/FakeTranslateService.js +0 -21
  139. package/esm2015/testing/fakes/FakeUiService.js +0 -26
  140. package/esm2015/testing/fakes/angular-fire/FakeAngularFireAuth.js +0 -30
  141. package/esm2015/testing/fakes/angular-fire/FakeAngularFireFunctions.js +0 -17
  142. package/esm2015/testing/fakes/angular-fire/FakeAngularFirePerformance.js +0 -17
  143. package/esm2015/testing/fakes/angular-fire/FakeAngularFireStorage.js +0 -8
  144. package/esm2015/testing/fakes/angular-fire/FakeAngularFirestore.js +0 -8
  145. package/esm2015/testing/fakes/angular-fire/FakeUserCredential.js +0 -18
  146. package/esm2015/testing/fakes/index.js +0 -19
  147. package/esm2015/testing/ngx-firebase-testing.js +0 -6
  148. package/esm2015/testing/public-api.js +0 -5
  149. package/esm2015/testing/test.module.js +0 -66
  150. package/esm2015/testing/utils/index.js +0 -17
  151. package/esm2015/testing/utils/patchConsole.js +0 -14
  152. package/fesm2015/ngx-firebase-capacitor.js +0 -328
  153. package/fesm2015/ngx-firebase-capacitor.js.map +0 -1
  154. package/fesm2015/ngx-firebase-iap.js +0 -354
  155. package/fesm2015/ngx-firebase-iap.js.map +0 -1
  156. package/fesm2015/ngx-firebase-ionic-auth-ui.js +0 -1482
  157. package/fesm2015/ngx-firebase-ionic-auth-ui.js.map +0 -1
  158. package/fesm2015/ngx-firebase-ionic.js +0 -495
  159. package/fesm2015/ngx-firebase-ionic.js.map +0 -1
  160. package/fesm2015/ngx-firebase-testing.js +0 -388
  161. package/fesm2015/ngx-firebase-testing.js.map +0 -1
  162. package/fesm2015/ngx-firebase.js +0 -1482
  163. package/fesm2015/ngx-firebase.js.map +0 -1
  164. package/iap/iap.module.d.ts +0 -5
  165. package/iap/interfaces/index.d.ts +0 -11
  166. package/iap/ngx-firebase-iap.d.ts +0 -4
  167. package/iap/ngx-firebase-iap.metadata.json +0 -1
  168. package/iap/package.json +0 -23
  169. package/iap/public-api.d.ts +0 -4
  170. package/iap/services/iap.service.d.ts +0 -47
  171. package/iap/tokens/index.d.ts +0 -3
  172. package/ionic/animations/index.d.ts +0 -1
  173. package/ionic/components/avatar/avatar.component.d.ts +0 -27
  174. package/ionic/components/avatar/index.d.ts +0 -1
  175. package/ionic/components/index.d.ts +0 -2
  176. package/ionic/components/popover-menu/index.d.ts +0 -2
  177. package/ionic/components/popover-menu/interface.d.ts +0 -6
  178. package/ionic/components/popover-menu/popover-menu.component.d.ts +0 -10
  179. package/ionic/ionic.module.d.ts +0 -2
  180. package/ionic/ngx-firebase-ionic.d.ts +0 -4
  181. package/ionic/ngx-firebase-ionic.metadata.json +0 -1
  182. package/ionic/package.json +0 -30
  183. package/ionic/public-api.d.ts +0 -4
  184. package/ionic/services/alerts-ionic.service.d.ts +0 -13
  185. package/ionic/services/index.d.ts +0 -5
  186. package/ionic/services/legality-dialog-ionic.service.d.ts +0 -10
  187. package/ionic/services/loading-ionic.service.d.ts +0 -17
  188. package/ionic/services/picker-ionic.service.d.ts +0 -9
  189. package/ionic/services/toast-ionic.service.d.ts +0 -11
  190. package/ionic-auth-ui/animations/index.d.ts +0 -1
  191. package/ionic-auth-ui/components/email-confirmation/email-confirmation.component.d.ts +0 -31
  192. package/ionic-auth-ui/components/email-field/email-field.component.d.ts +0 -7
  193. package/ionic-auth-ui/components/form-field/form-field.component.d.ts +0 -28
  194. package/ionic-auth-ui/components/index.d.ts +0 -11
  195. package/ionic-auth-ui/components/name-field/name-field.component.d.ts +0 -8
  196. package/ionic-auth-ui/components/or-divider/or-divider.component.d.ts +0 -2
  197. package/ionic-auth-ui/components/password-field/password-field.component.d.ts +0 -34
  198. package/ionic-auth-ui/components/password-field/passwordValidatorFunctions.d.ts +0 -4
  199. package/ionic-auth-ui/components/providers/providers.component.d.ts +0 -26
  200. package/ionic-auth-ui/components/reauthenticate/reauthenticate.component.d.ts +0 -30
  201. package/ionic-auth-ui/components/register/register.component.d.ts +0 -26
  202. package/ionic-auth-ui/components/register-with-email/register-with-email.component.d.ts +0 -24
  203. package/ionic-auth-ui/components/register-with-email-popover/register-with-email-popover.component.d.ts +0 -7
  204. package/ionic-auth-ui/components/signin/signin.component.d.ts +0 -28
  205. package/ionic-auth-ui/components/terms-field/terms-field.component.d.ts +0 -27
  206. package/ionic-auth-ui/components/user/user.component.d.ts +0 -45
  207. package/ionic-auth-ui/ionic-auth-ui.module.d.ts +0 -32
  208. package/ionic-auth-ui/ngx-firebase-ionic-auth-ui.d.ts +0 -22
  209. package/ionic-auth-ui/ngx-firebase-ionic-auth-ui.metadata.json +0 -1
  210. package/ionic-auth-ui/package.json +0 -30
  211. package/ionic-auth-ui/pages/index.d.ts +0 -4
  212. package/ionic-auth-ui/pages/register/index.d.ts +0 -1
  213. package/ionic-auth-ui/pages/register/register.page.d.ts +0 -16
  214. package/ionic-auth-ui/pages/signin/index.d.ts +0 -1
  215. package/ionic-auth-ui/pages/signin/signin.page.d.ts +0 -22
  216. package/ionic-auth-ui/pages/user/index.d.ts +0 -1
  217. package/ionic-auth-ui/pages/user/user.page.d.ts +0 -3
  218. package/ionic-auth-ui/pages/verifyemail/index.d.ts +0 -1
  219. package/ionic-auth-ui/pages/verifyemail/verifyemail.page.d.ts +0 -19
  220. package/ionic-auth-ui/public-api.d.ts +0 -4
  221. package/ngx-firebase.d.ts +0 -5
  222. package/ngx-firebase.metadata.json +0 -1
  223. package/public-api.d.ts +0 -5
  224. package/shared/guards/index.d.ts +0 -2
  225. package/shared/guards/logged-in.guard.d.ts +0 -13
  226. package/shared/guards/verify-email.guard.d.ts +0 -11
  227. package/shared/interfaces/accounts.enum.d.ts +0 -7
  228. package/shared/interfaces/authprovider.enum.d.ts +0 -13
  229. package/shared/interfaces/config.interface.d.ts +0 -63
  230. package/shared/interfaces/index.d.ts +0 -7
  231. package/shared/interfaces/main.interface.d.ts +0 -13
  232. package/shared/interfaces/providers.interface.d.ts +0 -63
  233. package/shared/interfaces/tokens.d.ts +0 -16
  234. package/shared/interfaces/ui-providers.interface.d.ts +0 -65
  235. package/shared/services/analytics.service.d.ts +0 -10
  236. package/shared/services/auth-process.service.d.ts +0 -172
  237. package/shared/services/crashlytics.service.d.ts +0 -11
  238. package/shared/services/device-info.service.d.ts +0 -3
  239. package/shared/services/firebase.service.d.ts +0 -16
  240. package/shared/services/firestore-sync.service.d.ts +0 -16
  241. package/shared/services/index.d.ts +0 -9
  242. package/shared/services/performance.service.d.ts +0 -12
  243. package/shared/services/remoteconfig.service.d.ts +0 -18
  244. package/shared/services/ui.service.d.ts +0 -22
  245. package/shared/shared.module.d.ts +0 -14
  246. package/shared/types/DisplayWidth.d.ts +0 -7
  247. package/shared/types/Location.d.ts +0 -8
  248. package/shared/types/ValueAccessorControlComponent.d.ts +0 -27
  249. package/shared/types/ValueAccessorValueComponent.d.ts +0 -19
  250. package/shared/types/index.d.ts +0 -4
  251. package/testing/fakeavatar.module.d.ts +0 -2
  252. package/testing/fakes/FakeAuthProcessService.d.ts +0 -28
  253. package/testing/fakes/FakeAvatarComponent.d.ts +0 -3
  254. package/testing/fakes/FakeFireService.d.ts +0 -20
  255. package/testing/fakes/FakeFirestoreSyncService.d.ts +0 -9
  256. package/testing/fakes/FakeIAPurchaseService.d.ts +0 -9
  257. package/testing/fakes/FakePickerService.d.ts +0 -6
  258. package/testing/fakes/FakeRemoteConfigService.d.ts +0 -19
  259. package/testing/fakes/FakeTranslateService.d.ts +0 -15
  260. package/testing/fakes/FakeUiService.d.ts +0 -25
  261. package/testing/fakes/angular-fire/FakeAngularFireAuth.d.ts +0 -52
  262. package/testing/fakes/angular-fire/FakeAngularFireFunctions.d.ts +0 -11
  263. package/testing/fakes/angular-fire/FakeAngularFirePerformance.d.ts +0 -10
  264. package/testing/fakes/angular-fire/FakeAngularFireStorage.d.ts +0 -5
  265. package/testing/fakes/angular-fire/FakeAngularFirestore.d.ts +0 -5
  266. package/testing/fakes/angular-fire/FakeUserCredential.d.ts +0 -9
  267. package/testing/fakes/index.d.ts +0 -16
  268. package/testing/ngx-firebase-testing.d.ts +0 -5
  269. package/testing/ngx-firebase-testing.metadata.json +0 -1
  270. package/testing/package.json +0 -29
  271. package/testing/public-api.d.ts +0 -4
  272. package/testing/test.module.d.ts +0 -4
  273. package/testing/utils/index.d.ts +0 -5
  274. package/testing/utils/patchConsole.d.ts +0 -4
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../projects/ngx-firebase/src/shared/services/device-info.service.ts","../../../node_modules/tslib/tslib.es6.js","../../../projects/ngx-firebase/src/shared/services/remoteconfig.service.ts","../../../projects/ngx-firebase/src/shared/interfaces/authprovider.enum.ts","../../../projects/ngx-firebase/src/shared/interfaces/accounts.enum.ts","../../../projects/ngx-firebase/src/shared/interfaces/config.interface.ts","../../../projects/ngx-firebase/src/shared/interfaces/main.interface.ts","../../../projects/ngx-firebase/src/shared/interfaces/tokens.ts","../../../projects/ngx-firebase/src/shared/services/analytics.service.ts","../../../projects/ngx-firebase/src/shared/services/crashlytics.service.ts","../../../projects/ngx-firebase/src/shared/services/performance.service.ts","../../../projects/ngx-firebase/src/shared/services/firebase.service.ts","../../../projects/ngx-firebase/src/shared/services/firestore-sync.service.ts","../../../projects/ngx-firebase/src/shared/services/ui.service.ts","../../../projects/ngx-firebase/src/shared/types/DisplayWidth.ts","../../../projects/ngx-firebase/src/shared/services/auth-process.service.ts","../../../projects/ngx-firebase/src/shared/types/ValueAccessorValueComponent.ts","../../../projects/ngx-firebase/src/shared/types/ValueAccessorControlComponent.ts","../../../projects/ngx-firebase/src/shared/guards/logged-in.guard.ts","../../../projects/ngx-firebase/src/shared/guards/verify-email.guard.ts","../../../projects/ngx-firebase/src/shared/shared.module.ts"],"names":["MalDeviceInfoService","Object","defineProperty","prototype","Injectable","args","providedIn","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","this","n","v","op","TypeError","call","pop","length","push","create","__read","o","m","r","i","ar","error","__spread","arguments","concat","AuthProvider","Accounts","MalServiceEnabled","StaticValue","asBoolean","asString","asNumber","getSource","RemoteConfigService","remoteConfigProvider","injector","defaults","get","REMOTE_CONFIG_DEFAULTS","remoteConfig$","of","parameters","getBoolean","getNumber","getString","getValue","pipe","mapToObject","key","_a","AngularFireRemoteConfig","decorators","type","Optional","Injector","defaultAuthFirebaseUIConfig","services","firebaseAnalytics","firebaseCrashlytics","firebasePerformance","firebaseRemoteConfig","inAppPurchase","firebaseAuth","firebaseFirestore","firebaseFunctions","authUi","enableFirestoreSync","toastMessageOnAuthSuccess","toastMessageOnAuthError","toastDefaultDurationMil","authGuardFallbackURL","authGuardLoggedInURL","authGuardVerifyEmailURL","undefined","reSignInUrl","passwordMaxLength","passwordMinLength","passwordRequireLowercase","passwordRequireUppercase","passwordRequireSpecial","passwordRequireNumbers","nameMaxLength","nameMinLength","supportedProviders","ALL","guestEnabled","allowAccountEdit","allowAccountDelete","allowAccountLogout","guardProtectedRoutesUntilEmailIsVerified","enableEmailVerification","malSharedConfigFactory","userProvidedConfig","firebase","assign","configDefaults","PHONE_NUMBER_REGEX","RegExp","join","FirebaseErrorCodes","MalAnalyticsProviderToken","InjectionToken","MalCrashlyticsProviderToken","MalAuthServiceProviderToken","MalMergeUserServiceToken","MalCredentialFactoryProviderToken","MalUserProvidedConfigToken","MalSharedConfigToken","MalLoadingUIProviderToken","MalAlertsUIProviderToken","MalPickerUIProviderToken","MalToastUIProviderToken","MalLegaliyDialogUIProiderToken","analytics","_this","logEvent","name","params","console","log","setScreenName","screenName","screenClass","setUserId","userId","Inject","forwardRef","CrashlyticsService","crashlyticsProvider","_recordException","_options","_addLogMessage","message","_setUserId","uid","recordException","addLogMessage","options","Error","PerformanceTraceNoop","start","stop","putAttribute","PerformanceService","performanceProvider","dataCollectionEnabled","createTrace","trace","AngularFirePerformance","FirebaseService","crashlyticsService","analyticsService","performanceService","bind","AnalyticsService","FirestoreSyncService","afs","fire","getUserData","getUserDocRefByUID","toPromise","data","error_1","doc","USER_COLLECTION","setUserData","user","set","updateUserData","update","AngularFirestore","UiService","toastService","alertService","loadingService","legalityDialog","toast","createToast","errorToast","okAlert","infoAlert","errorAlert","textboxInputAlert","yesNoAlert","createLoading","watchLoading","confirmTos","logError","messagePrefix","DisplayWidth","AuthProcessService","config","mergeService","credFactory","fireStoreService","afa","ui","onErrorEmitter","EventEmitter","onSignInEmitter","onRegisterEmitter","onSignOutEmitter","onUserUpdatedEmitter","onUserDeletedEmitter","showProfileDialog","_user$","BehaviorSubject","user$","_authState$","authState$","authState","uid$","map","distinctUntilChanged","isLoggedIn$","isAnonymous$","isAnonymous","isNamedUser$","isNotNamedUser$","canEdit$","canRegister$","canSignIn$","isLoggedIn","canSignInAsGuest$","canSignOut$","onSignOut$","filter","onSignIn$","tokenRefreshed$","Subject","subscribe","emit","providerData","item","providerId","Google","includes","location","protocol","isProviderSupported","provider","_b","_c","isWebPlatform","_d","_e","refreshToken","currentUser","getIdToken","selectCurrentUserClaim","claim","Observable","subscriber","handleTokenRefresh","getIdTokenResult","token","claims","getCurrentUserClaim","take","resetPassword","email","sendPasswordResetEmail","duration","interpolateParams","position","handleError","signInWith","loading","userCred","mergeContext","ANONYMOUS","prepareSource","EmailAndPassword","PhoneNumber","present","signInAnonymously","dismiss","skipTosCheck","credentials","signInWithEmailAndPassword","password","signOut","getCredential","factoryCred","signInWithCredential","signInWithPopup","getAuthProvider","handleSignInSuccess","applyToTarget","error_2","error_3","reauthenicateWithProvider","auth","authCred","EmailAuthProvider","credential","reauthenticateWithCredential","reauthenticateWithPopup","error_4","linkCurrentUserToProvider","linkWithCredential","linkWithPopup","userData","parseUserInfo","displayName","photoURL","updateUserInfo","error_5","registerWith","createUserWithEmailAndPassword","sendEmailVerification","emailConfirmationSent","emailToConfirm","error_6","tosUrl","privacyPolicyUrl","acceptedTos","Date","toISOString","additionalUserInfo","isNewUser","merge","sendNewVerificationEmail","error_7","error_8","userInfo","updateEmail","phoneNumber","updatePhoneNumber","updateProfile","updateCurrentUser","error_9","forEach","getUserPhotoUrl","emailVerified","CHECK","OFF","NONE","cred","successMessage","reloadUserInfo","reload","deleteUser","currentUid","delete","code","requiresRecentLogin","error_10","JSON","stringify","toString","GoogleAuthProvider","Apple","OAuthProvider","Facebook","FacebookAuthProvider","Twitter","TwitterAuthProvider","Github","GithubAuthProvider","Microsoft","Yahoo","AngularFireAuth","ValueAccessorValueComponent","valueChange","propagateChange","propagateTouch","propagateValidatorChange","_value","val","validate","control","writeValue","registerOnChange","fn","registerOnTouched","registerOnValidatorChange","Input","Output","ValueAccessorControlComponent","cdRef","destroy$","ReplaySubject","_control","setValue","reset","ngOnInit","valueChanges","takeUntil","dirty","statusChanges","ngAfterViewInit","parentControl","NgControl","detectChanges","ngOnDestroy","complete","setDisabledState","isDisabled","disable","enable","errors","LoggedInGuard","router","aps","guardOutcome","redirectUrl","createUrlTree","queryParams","canLoad","route","segments","url","canActivate","state","Router","VerifyEmailGuard","MODULES","HttpClientModule","AngularFireAuthModule","AngularFirestoreModule","AngularFireFunctionsModule","MalSharedModule","forRoot","appNameFactory","ngModule","providers","provide","useValue","useFactory","deps","REMOTE_CONFIG_SETTINGS","isDevMode","minimumFetchIntervalMillis","FIREBASE_OPTIONS","FIREBASE_APP_NAME","AUTH_EMULATOR","authEmulatorFactory","FIRESTORE_EMULATOR","firestoreEmulatorFactory","FUNCTIONS_EMULATOR","functionsEmulatorFactory","REGION","firebaseRegion","performanceProviderFactory","FirebaseApp","DATA_COLLECTION_ENABLED","INSTRUMENTATION_ENABLED","NgZone","PLATFORM_ID","remoteConfigFirebaseService","app","instrumentationEnabled","zone","platformId","nameOrConfig","settings","defaultConfig","NgModule","imports","TranslateModule","forChild","AngularFireModule","exports"],"mappings":"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","sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class MalDeviceInfoService {\n\n get dateFormat(): string {\n return 'dd/MM/yyyy';\n }\n\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { Injectable, Injector, Optional } from '@angular/core';\nimport { AngularFireRemoteConfig, mapToObject, DEFAULTS as REMOTE_CONFIG_DEFAULTS } from '@angular/fire/remote-config';\nimport { of } from 'rxjs';\nimport { Value, ValueSource } from '@firebase/remote-config-types';\n\nclass StaticValue implements Value {\n constructor(private value: any) { }\n asBoolean() { return this.value as boolean; }\n asString() { return this.value as string; }\n asNumber() { return this.value as number; }\n getSource() { return 'static' as ValueSource; }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class RemoteConfigService {\n\n defaults: { [key: string]: any } = this.injector.get(REMOTE_CONFIG_DEFAULTS) || {};\n\n remoteConfig$ = of(this.defaults);\n parameters = of([]);\n async getBoolean(key: string): Promise<boolean> { return (await this.getValue(key)).asBoolean(); }\n async getNumber(key: string): Promise<number> { return (await this.getValue(key)).asNumber(); }\n async getString(key: string): Promise<string> { return (await this.getValue(key)).asString(); }\n getValue(key: string): Promise<Value> { return Promise.resolve(new StaticValue(this.defaults[key])); }\n\n constructor(\n @Optional() remoteConfigProvider: AngularFireRemoteConfig,\n private injector: Injector\n ) {\n if (remoteConfigProvider) {\n this.getBoolean = remoteConfigProvider.getBoolean;\n this.getNumber = remoteConfigProvider.getNumber;\n this.getString = remoteConfigProvider.getString;\n this.getValue = remoteConfigProvider.getValue;\n this.remoteConfig$ = remoteConfigProvider.parameters.pipe(\n mapToObject(this.defaults)\n );\n }\n }\n\n}\n","export enum AuthProvider {\n ALL = 'all',\n ANONYMOUS = 'anonymous',\n EmailAndPassword = 'firebase',\n Google = 'google',\n Apple = 'apple',\n Facebook = 'facebook',\n Twitter = 'twitter',\n Github = 'github',\n Microsoft = 'microsoft',\n Yahoo = 'yahoo',\n PhoneNumber = 'phoneNumber'\n}\n","export enum Accounts {\n NONE = 'account',\n CHECK = 'account-check',\n EDIT = 'account-edit',\n OFF = 'account-off',\n REMOVE = 'account-remove',\n}\n","// import * as firebase from 'firebase';\n\nimport { FirebaseAppConfig } from '@angular/fire';\nimport { ConfigTemplate } from '@angular/fire/remote-config';\nimport { AuthProvider } from './authprovider.enum';\n\nexport interface MalAuthUIConfig {\n authGuardFallbackURL: string;\n authGuardLoggedInURL: string;\n authGuardVerifyEmailURL?: string;\n enableFirestoreSync: boolean;\n reSignInUrl: string;\n\n // Toasts\n toastMessageOnAuthSuccess: boolean | string;\n toastMessageOnAuthError: boolean | string;\n toastDefaultDurationMil: number;\n\n logoUrl?: string;\n\n // Terms and Conditions\n tosUrl?: string;\n privacyPolicyUrl?: string;\n\n // Password length min/max in forms independently of each componenet min/max.\n // `min/max` input parameters in components should be within this range.\n passwordMaxLength: number;\n passwordMinLength: number;\n passwordRequireLowercase: boolean;\n passwordRequireUppercase: boolean;\n passwordRequireSpecial: boolean;\n passwordRequireNumbers: boolean;\n\n // Same as password but for the name\n nameMaxLength: number;\n nameMinLength: number;\n\n // Custom Backgrounds\n verifyEmailBackground?: string;\n\n supportedProviders: AuthProvider.ALL | AuthProvider[];\n\n guestEnabled: boolean;\n\n allowAccountEdit: boolean;\n allowAccountDelete: boolean;\n allowAccountLogout: boolean;\n\n // If set, sign-in/up form is not available until email has been verified.\n // Plus protected routes are still protected even though user is connected.\n guardProtectedRoutesUntilEmailIsVerified: boolean;\n\n // Control whether or not email verification is used\n enableEmailVerification: boolean;\n}\n\nexport enum MalServiceEnabled {\n emulate = 2,\n enabled = 1,\n disabled = 0\n}\n\nexport type UseEmulatorArguments = [string, number];\n\nexport interface MalServicesConifg {\n firebaseAnalytics: boolean;\n firebaseCrashlytics: boolean;\n firebasePerformance: boolean;\n firebaseRemoteConfig: boolean;\n inAppPurchase: boolean;\n firebaseAuth: true | UseEmulatorArguments;\n firebaseFirestore: true | UseEmulatorArguments;\n firebaseFunctions: true | UseEmulatorArguments;\n firebaseRegion?: string;\n}\n\n\nexport interface MalUserProvidedConfig<T extends ConfigTemplate = ConfigTemplate> {\n firebase: FirebaseAppConfig;\n services?: Partial<MalServicesConifg>;\n authUi?: Partial<MalAuthUIConfig>;\n configDefaults?: T;\n}\n\nexport interface MalSharedConfig<T extends ConfigTemplate = ConfigTemplate> {\n firebase: FirebaseAppConfig;\n services: MalServicesConifg;\n authUi: MalAuthUIConfig;\n configDefaults: T;\n}\n\nexport const defaultAuthFirebaseUIConfig: Omit<MalSharedConfig, 'firebase' | 'configDefaults'> = {\n services: {\n firebaseAnalytics: true,\n firebaseCrashlytics: true,\n firebasePerformance: true,\n firebaseRemoteConfig: true,\n inAppPurchase: true,\n firebaseAuth: true,\n firebaseFirestore: true,\n firebaseFunctions: true\n },\n authUi: {\n enableFirestoreSync: true,\n toastMessageOnAuthSuccess: true,\n toastMessageOnAuthError: true,\n toastDefaultDurationMil: 3000,\n authGuardFallbackURL: '/',\n authGuardLoggedInURL: '/',\n authGuardVerifyEmailURL: undefined,\n reSignInUrl: '/auth/signin',\n\n // Password length min/max in forms independently of each componenet min/max.\n // `min/max` input parameters in components should be within this range.\n passwordMaxLength: 60,\n passwordMinLength: 8,\n passwordRequireLowercase: true,\n passwordRequireUppercase: true,\n passwordRequireSpecial: true,\n passwordRequireNumbers: true,\n\n // Same as password but for the name\n nameMaxLength: 50,\n nameMinLength: 2,\n\n supportedProviders: AuthProvider.ALL,\n\n guestEnabled: false,\n\n allowAccountEdit: true,\n allowAccountDelete: true,\n allowAccountLogout: true,\n\n // If set, sign-in/up form is not available until email has been verified.\n // Plus protected routes are still protected even though user is connected.\n guardProtectedRoutesUntilEmailIsVerified: true,\n\n // Default to email verification on\n enableEmailVerification: true\n }\n};\n\n// Merge default config with user provided config.\nexport function malSharedConfigFactory<T extends ConfigTemplate>(userProvidedConfig: MalUserProvidedConfig<T>): MalSharedConfig<T> {\n return {\n firebase: userProvidedConfig.firebase,\n services: Object.assign({}, defaultAuthFirebaseUIConfig.services, userProvidedConfig.services || {}),\n authUi: Object.assign({}, defaultAuthFirebaseUIConfig.authUi, userProvidedConfig.authUi || {}),\n configDefaults: userProvidedConfig.configDefaults || {} as T\n };\n}\n","export interface ICredentials {\n email: string;\n password: string;\n}\n\nexport interface ISignInOptions {\n displayName?: string;\n credentials?: ICredentials;\n skipTosCheck?: boolean;\n}\n\n// tslint:disable-next-line max-len\nexport const PHONE_NUMBER_REGEX = new RegExp(['^[+]{0,1}[(]{0,1}[0-9]{1,4}[)]{0,1}[-\\\\s\\\\.]{0,1}[(]{0,1}[0-9]{1,4}[)]{0,1}[-\\\\s\\\\./0-9]{4,12}$'].join(''));\n\nexport enum FirebaseErrorCodes {\n requiresRecentLogin = 'auth/requires-recent-login'\n}\n","// This token is the official token containing the final configuration; ie. the merge between default and user provided configurations\nimport { InjectionToken } from '@angular/core';\n\nimport { MalSharedConfig, MalUserProvidedConfig } from './config.interface';\nimport { IAnalyticsProvider, IAuthMergeUserService, IAuthProcessService, ICrashlyticsProvider, ICredentialFactoryProvider } from './providers.interface';\nimport { ILoadingUIProvider, IAlertsUIProvider, IPickerUIProvider, IToastUIProvider, ILegalityDialogUIProvider} from './ui-providers.interface'\n\n// Firebase Functional Areas\nexport const MalAnalyticsProviderToken = new InjectionToken<IAnalyticsProvider>('MalAnalyticsProviderToken');\nexport const MalCrashlyticsProviderToken = new InjectionToken<ICrashlyticsProvider>('MalCrashlyticsProviderToken');\nexport const MalAuthServiceProviderToken = new InjectionToken<IAuthProcessService>('MalAuthServiceProviderToken');\n\n// Auth Process Service\nexport const MalMergeUserServiceToken = new InjectionToken<IAuthMergeUserService>('MalMergeUserServiceToken');\nexport const MalCredentialFactoryProviderToken = new InjectionToken<ICredentialFactoryProvider>('MalCredentialFactoryProviderToken');\n\n// Configuration\nexport const MalUserProvidedConfigToken = new InjectionToken<MalUserProvidedConfig>('MalUserProvidedConfigToken');\nexport const MalSharedConfigToken = new InjectionToken<MalSharedConfig>('MalSharedConfigToken');\n\n// UI Providers\nexport const MalLoadingUIProviderToken = new InjectionToken<ILoadingUIProvider>('MalLoadingUIProviderToken');\nexport const MalAlertsUIProviderToken = new InjectionToken<IAlertsUIProvider>('MalAlertsUIProviderToken');\nexport const MalPickerUIProviderToken = new InjectionToken<IPickerUIProvider>('MalPickerMalPickerUIProviderTokenUIProvider');\nexport const MalToastUIProviderToken = new InjectionToken<IToastUIProvider>('MalToastUIProviderToken');\nexport const MalLegaliyDialogUIProiderToken = new InjectionToken<ILegalityDialogUIProvider>(\"MalLegaliyDialogUIProiderToken\");","import { forwardRef, Inject, Injectable, Optional } from '@angular/core';\nimport { IAnalyticsProvider, MalAnalyticsProviderToken } from '../interfaces';\n\n@Injectable()\nexport class AnalyticsService implements IAnalyticsProvider {\n\n // Analytics NoOp\n logEvent = async (name: string, params?: { [key: string]: any }) => { console.log('NotLogged:LogEvent ' + name, params); };\n setScreenName = (screenName: string, screenClass?: string) => Promise.resolve();\n setUserId = (userId: string | null) => { };\n\n constructor(\n @Optional() @Inject(forwardRef(() => MalAnalyticsProviderToken)) private analytics: IAnalyticsProvider\n ) {\n if (this.analytics) {\n this.logEvent = this.analytics.logEvent;\n this.setScreenName = this.analytics.setScreenName;\n this.setUserId = this.analytics.setUserId;\n }\n }\n\n}\n","import { Injectable, Optional, forwardRef, Inject } from '@angular/core';\nimport { AndroidException, ICrashlyticsProvider, iOSException, MalCrashlyticsProviderToken } from '../interfaces';\n\n@Injectable()\nexport class CrashlyticsService implements ICrashlyticsProvider {\n\n // Crashlyitcs\n private _recordException = (_options: iOSException | AndroidException) => Promise.resolve();\n private _addLogMessage = (message: string) => Promise.resolve();\n private _setUserId = (uid: string | null) => { };\n\n constructor(\n @Optional() @Inject(forwardRef(() => MalCrashlyticsProviderToken)) private crashlyticsProvider: ICrashlyticsProvider,\n ) {\n if (this.crashlyticsProvider) {\n this._recordException = this.crashlyticsProvider.recordException;\n this._addLogMessage = this.crashlyticsProvider.addLogMessage;\n }\n }\n\n setUserId(uid: string | null) {\n this._setUserId(uid);\n }\n\n recordException(options: string | iOSException | AndroidException | Error): Promise<void> {\n let e: iOSException | AndroidException = { message: 'An unknown error occured' };\n if ('string' === typeof options) {\n e.message = options;\n } else if (options instanceof Error) {\n e.message = options.message;\n } else if (e.message) {\n e = options;\n }\n return this._recordException(e);\n }\n\n addLogMessage(message: string): Promise<void> {\n console.log('addLogMessage ' + message);\n return this._addLogMessage(message);\n }\n\n}\n","import { Injectable, Optional } from '@angular/core';\nimport { AngularFirePerformance } from '@angular/fire/performance';\nimport { IPerformanceTrace, IPerformanceProvider } from '../interfaces';\n\nexport class PerformanceTraceNoop implements IPerformanceTrace {\n start() { }\n stop() { }\n putAttribute(key: string, value: any) { }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class PerformanceService implements IPerformanceProvider {\n\n dataCollectionEnabled = Promise.resolve(false);\n\n createTrace(label: string): Promise<IPerformanceTrace> {\n return Promise.resolve(new PerformanceTraceNoop());\n }\n\n constructor(\n @Optional() performanceProvider: AngularFirePerformance\n ) {\n if (performanceProvider) {\n this.createTrace = performanceProvider.trace;\n }\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { IFirebaseProvider } from '../interfaces';\nimport { AnalyticsService } from './analytics.service';\nimport { CrashlyticsService } from './crashlytics.service';\nimport { PerformanceService } from './performance.service';\n\n@Injectable({ providedIn: 'root' })\nexport class FirebaseService implements IFirebaseProvider {\n\n recordException = this.crashlyticsService.recordException.bind(this.crashlyticsService);\n addLogMessage = this.crashlyticsService.addLogMessage.bind(this.crashlyticsService);\n\n setScreenName = this.analyticsService.setScreenName.bind(this.analyticsService);\n logEvent = this.analyticsService.logEvent.bind(this.analyticsService);\n\n createTrace = this.performanceService.createTrace;\n\n constructor(\n private crashlyticsService: CrashlyticsService,\n private analyticsService: AnalyticsService,\n private performanceService: PerformanceService\n ) {\n }\n\n async setUserId(userId: string | null) {\n this.analyticsService.setUserId(userId);\n this.crashlyticsService.setUserId(userId);\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { AngularFirestore, AngularFirestoreDocument } from '@angular/fire/firestore';\nimport { UserInfo } from '@firebase/auth-types';\nimport { SetOptions } from '@firebase/firestore-types'\nimport { FirebaseService } from './firebase.service';\n\nconst USER_COLLECTION = '/users';\n\nexport interface UserProfile extends UserInfo {\n acceptedTos: string | null;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FirestoreSyncService {\n\n constructor(\n public afs: AngularFirestore,\n public fire: FirebaseService\n ) {\n }\n\n public async getUserData(uid: string): Promise<UserProfile | null> {\n try {\n const doc = await this.getUserDocRefByUID(uid).get().toPromise();\n return doc.data() || null;\n } catch (error) {\n this.fire.recordException(error);\n return null;\n }\n }\n\n private getUserDocRefByUID(uid: string): AngularFirestoreDocument<UserProfile> {\n return this.afs.doc(`${USER_COLLECTION}/${uid}`);\n }\n\n public async setUserData(uid: string, user: Partial<UserProfile>, options?: SetOptions): Promise<void> {\n try {\n return this.afs.doc(`${USER_COLLECTION}/${uid}`).set(user, options);\n } catch (error) {\n this.fire.recordException(error);\n }\n }\n\n public async updateUserData(uid: string, user: Partial<UserProfile>): Promise<void> {\n try {\n return this.getUserDocRefByUID(uid).update({ ...user, uid });\n } catch (error) {\n this.fire.recordException(error);\n }\n }\n\n}\n","import { forwardRef, Inject, Injectable } from '@angular/core';\nimport {\n ILegalityDialogUIProvider, MalLegaliyDialogUIProiderToken,\n IAlertsUIProvider, ILoadingUIProvider, IToastUIProvider, MalAlertsUIProviderToken,\n MalLoadingUIProviderToken, MalToastUIProviderToken, IUIProvider\n} from '../interfaces';\nimport { FirebaseService } from './firebase.service';\n\n@Injectable({ providedIn: 'root' })\nexport class UiService implements IUIProvider {\n\n toast = this.toastService.toast.bind(this.toastService);\n createToast = this.toastService.createToast.bind(this.toastService);\n errorToast = this.toastService.errorToast.bind(this.toastService);\n\n okAlert = this.alertService.okAlert.bind(this.alertService);\n infoAlert = this.alertService.infoAlert.bind(this.alertService);\n errorAlert = this.alertService.errorAlert.bind(this.alertService);\n textboxInputAlert = this.alertService.textboxInputAlert.bind(this.alertService);\n yesNoAlert = this.alertService.yesNoAlert.bind(this.alertService);\n\n createLoading = this.loadingService.createLoading.bind(this.loadingService);\n watchLoading = this.loadingService.watchLoading.bind(this.loadingService);\n\n confirmTos = this.legalityDialog.confirmTos.bind(this.legalityDialog);\n\n constructor(\n @Inject(forwardRef(() => MalToastUIProviderToken)) private toastService: IToastUIProvider,\n @Inject(forwardRef(() => MalAlertsUIProviderToken)) private alertService: IAlertsUIProvider,\n @Inject(forwardRef(() => MalLoadingUIProviderToken)) private loadingService: ILoadingUIProvider,\n @Inject(forwardRef(() => MalLegaliyDialogUIProiderToken)) private legalityDialog: ILegalityDialogUIProvider,\n private fire: FirebaseService\n ) {\n }\n\n logError(error: Error, messagePrefix?: string | null) {\n console.log(error);\n this.fire.recordException(error);\n if (messagePrefix !== null) {\n this.toastService.errorToast(error, messagePrefix);\n }\n }\n\n}\n","export enum DisplayWidth {\n xs = 1,\n sm = 576,\n md = 768,\n lg = 992,\n xl = 1200\n}\n","// Angular\nimport { EventEmitter, forwardRef, Inject, Injectable, Optional } from '@angular/core';\n\n// RXJS\nimport { BehaviorSubject, combineLatest, Observable, Subject } from 'rxjs';\nimport { distinctUntilChanged, filter, map, take } from 'rxjs/operators';\n\n// Firebase & AngularFire\nimport { firebase } from '@firebase/app';\nimport 'firebase/auth';\nimport { User, UserInfo, UserCredential, AuthProvider as FirebaseAuthProvider } from '@firebase/auth-types';\nimport { AngularFireAuth } from '@angular/fire/auth';\n\n// Mal\nimport { FirestoreSyncService } from './firestore-sync.service';\nimport {\n MalCredentialFactoryProviderToken,\n MalMergeUserServiceToken, MalSharedConfigToken,\n MalSharedConfig, AuthProvider, ISignInOptions, Accounts, IAuthMergeUserService,\n ICredentialFactoryProvider, FirebaseErrorCodes\n} from '../interfaces';\nimport { UiService } from './ui.service';\nimport { FirebaseService } from './firebase.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthProcessService {\n\n public readonly onErrorEmitter: EventEmitter<any> = new EventEmitter<any>();\n public readonly onSignInEmitter: EventEmitter<User> = new EventEmitter<User>();\n public readonly onRegisterEmitter: EventEmitter<User> = new EventEmitter<User>();\n public readonly onSignOutEmitter: EventEmitter<void> = new EventEmitter<void>();\n public readonly onUserUpdatedEmitter: EventEmitter<UserInfo> = new EventEmitter<UserInfo>();\n public readonly onUserDeletedEmitter: EventEmitter<void> = new EventEmitter<void>();\n public readonly showProfileDialog: EventEmitter<any> = new EventEmitter<any>();\n\n /**\n * Useful to know about auth state even between reloads.\n *\n **/\n private _user$ = new BehaviorSubject<User | null>(null);\n get user(): User | null {\n return this._user$.value;\n }\n\n public readonly user$ = this.afa.user;\n\n /**\n * Useful to know about auth state even between reloads.\n **/\n private _authState$ = new BehaviorSubject<User | null>(null);\n public readonly authState$ = this.afa.authState;\n\n /**\n * Obersable for current user - that only emits when the uid changes\n * Useful to reset session info when user changes.\n */\n public uid$: Observable<string | null> =\n this.user$.pipe(\n map(user => user?.uid || null),\n distinctUntilChanged()\n );\n\n /**\n * UserInterface helper observables - indicating what user actions are currently permitted and\n * the current status of authentication.\n */\n public readonly isLoggedIn$: Observable<boolean> = this.user$.pipe(map(user => null !== user));\n public readonly isAnonymous$: Observable<boolean> = this.user$.pipe(map(user => null !== user && user.isAnonymous));\n public readonly isNamedUser$: Observable<boolean> = this.user$.pipe(map(user => null !== user && !user.isAnonymous));\n public readonly isNotNamedUser$: Observable<boolean> = this.user$.pipe(map(user => null === user || user.isAnonymous));\n public readonly canEdit$ = this.isLoggedIn$;\n public readonly canRegister$: Observable<boolean> = this.isNotNamedUser$;\n public readonly canSignIn$: Observable<boolean> = this.isLoggedIn$.pipe(map(isLoggedIn => !isLoggedIn));\n public readonly canSignInAsGuest$: Observable<boolean> =\n this.isLoggedIn$.pipe(map(isLoggedIn => !isLoggedIn && this.config.authUi.guestEnabled));\n public readonly canSignOut$: Observable<boolean> = this.isNamedUser$;\n\n /**\n * Observable. Emits whenever currentUser signsOut\n */\n public readonly onSignOut$: Observable<void> = this.authState$.pipe(\n filter(user => user === null),\n map(() => { return; })\n );\n\n /**\n * Observable emits whenever a new user signsIn\n */\n public readonly onSignIn$: Observable<User> = this.authState$.pipe(\n filter(user => null !== user),\n map(user => user as User)\n );\n\n public get reauthenticateProviders$(): Observable<AuthProvider[]> {\n return this.user$.pipe(\n map(user => (user?.providerData || [])\n .map(item => {\n switch (item?.providerId) {\n case 'google.com': return AuthProvider.Google;\n default: console.log('NO MATCH', item); return;\n }\n })\n .filter(item => !!item) as AuthProvider[]\n )\n );\n }\n\n private readonly tokenRefreshed$: Subject<void> = new Subject<void>();\n\n // Legacy field that is set to true after sign up.\n // Value is lost in case of reload. The idea here is to know if we just sent a verification email.\n emailConfirmationSent?: boolean;\n // Legacy fieled that contain the mail to confirm. Same lifecycle than emailConfirmationSent.\n emailToConfirm?: string;\n\n constructor(\n @Inject(forwardRef(() => MalSharedConfigToken)) public config: MalSharedConfig,\n @Optional() @Inject(forwardRef(() => MalMergeUserServiceToken)) public mergeService: IAuthMergeUserService,\n @Optional() @Inject(forwardRef(() => MalCredentialFactoryProviderToken)) public credFactory: ICredentialFactoryProvider,\n private fireStoreService: FirestoreSyncService,\n private afa: AngularFireAuth, // TODO should be private\n private fire: FirebaseService,\n private ui: UiService\n ) {\n this.afa.user.subscribe(user => this._user$.next(user));\n this.afa.authState.subscribe(authState => this._authState$.next(authState));\n this.authState$.subscribe(user => {\n this.fire.setUserId(user?.uid || null);\n });\n this.onSignOut$.subscribe(() => this.onSignOutEmitter.emit());\n }\n\n /**\n * Returns true if current platform is webplatform supported by @angular/fire\n */\n get isWebPlatform(): boolean {\n return ['https:', 'http:', 'chrome-extension'].includes(location.protocol);\n }\n\n /**\n * Indicates if the specified provider is supported on the current platform\n */\n async isProviderSupported(provider: AuthProvider): Promise<boolean> {\n return (this.config.authUi.supportedProviders === AuthProvider.ALL || this.config.authUi.supportedProviders.includes(provider))\n && (this.isWebPlatform || (this.credFactory && await this.credFactory.isProviderSupported(provider)));\n }\n\n public async refreshToken(): Promise<void> {\n const user = await this.afa.currentUser;\n if (user) {\n await user.getIdToken(true);\n await this.tokenRefreshed$.next();\n }\n }\n\n public selectCurrentUserClaim<T>(claim: string): Observable<T | null | undefined> {\n return new Observable<T | null | undefined>(subscriber => {\n const handleTokenRefresh = async (user: User | null) => {\n if (user) {\n const token = await user.getIdTokenResult();\n subscriber.next(token.claims[claim]);\n } else {\n subscriber.next(null);\n }\n };\n this.tokenRefreshed$.subscribe(async () => {\n const user = await this.afa.currentUser;\n await handleTokenRefresh(user);\n });\n this.afa.user.subscribe(async user => {\n await handleTokenRefresh(user);\n });\n });\n }\n\n public getCurrentUserClaim<T>(claim: string): Promise<T | null | undefined> {\n return this.selectCurrentUserClaim<T>(claim).pipe(take(1)).toPromise();\n }\n\n /**\n * Reset the password of currently authenticated user via email\n *\n * @param email - the email to reset\n */\n public async resetPassword(email: string): Promise<void> {\n try {\n this.fire.addLogMessage('Password reset email sent');\n this.afa.sendPasswordResetEmail(email);\n this.ui.toast(\n 'auth.resetPassword.onResetRequestedTo',\n { duration: this.config.authUi.toastDefaultDurationMil, interpolateParams: { email }, position: 'bottom' }\n );\n } catch (error) {\n await this.handleError(error);\n }\n }\n\n /**\n * General sign in mechanism to authenticate the users with a firebase project\n * using a traditional way, via username and password or by using an authentication provider\n * like google, facebook, twitter and github\n *\n * [Current State -> Target State]\n * Null -> Anon/named: OK\n * Anon -> Anon: Throws Error\n * Anon -> Named: Triggers MergeService\n * Named -> Any: Throws Error\n *\n * @param provider - the provider to authenticate with (google, facebook, twitter, github)\n * @param credentials optional email and password\n */\n public async signInWith(provider: AuthProvider, options?: ISignInOptions)\n : Promise<UserCredential | null> {\n\n this.fire.addLogMessage(`SignInWithProvider; provider=${provider}`);\n const loading = await this.ui.createLoading();\n try {\n let userCred: UserCredential | null = null;\n\n const currentUser = await this.afa.currentUser;\n\n // Only merge an anonymous user >>> non-anonymous user\n // Don't catch any errors, so they are caught by function and trigger a login abort.\n let mergeContext: any = null;\n if (currentUser && currentUser.isAnonymous && this.mergeService && provider !== AuthProvider.ANONYMOUS) {\n mergeContext = await this.mergeService.prepareSource(currentUser);\n }\n\n switch (provider) {\n case AuthProvider.ANONYMOUS:\n if (currentUser) {\n throw new Error('Cannot signIn anonymously whilst already signedIn, SignOut first');\n }\n if (await this.confirmTos(null, options)) {\n loading.present();\n userCred = await this.afa.signInAnonymously();\n await loading.dismiss();\n await this.confirmTos(userCred, { skipTosCheck: true }); // Save tosAcceptance in firestore\n }\n break;\n\n case AuthProvider.EmailAndPassword:\n if (currentUser && !currentUser.isAnonymous) {\n throw new Error('Cannot signIn whilst already signedIn, SignOut first');\n }\n if (!options?.credentials) {\n throw new Error('Credentials are required when signing in with AuthProvider.EmailAndPassword');\n }\n loading.present();\n userCred = await this.afa.signInWithEmailAndPassword(options.credentials.email, options.credentials.password);\n await loading.dismiss();\n if (!await this.confirmTos(userCred, options)) {\n await this.signOut();\n userCred = null;\n };\n break;\n\n case AuthProvider.PhoneNumber:\n // coming soon - see feature/sms branch\n break;\n\n default:\n if (currentUser && !currentUser.isAnonymous) {\n throw new Error('Cannot signIn whilst already signedIn, SignOut first');\n }\n if (this.credFactory && await this.credFactory.isProviderSupported(provider)) {\n loading.present();\n const factoryCred = await this.credFactory.getCredential(provider);\n if (factoryCred) {\n userCred = await this.afa.signInWithCredential(factoryCred);\n }\n await loading.dismiss();\n } else if (this.isWebPlatform) {\n loading.present();\n userCred = await this.afa.signInWithPopup(this.getAuthProvider(provider));\n await loading.dismiss();\n /*\n a: null\ncode: \"auth/popup-closed-by-user\"\nmessage: \"The popup has been closed by the user before finalizing the operation.\"\n__proto__: Error\n*/\n } else {\n throw new Error('A CredentialFactory is required to use AuthProcessService on a non-web platform');\n }\n await loading.dismiss();\n if (!await this.confirmTos(userCred, options)) {\n await this.signOut();\n userCred = null;\n };\n break;\n }\n\n // Will be null if user cancels operation\n if (userCred) {\n await this.handleSignInSuccess(userCred);\n if (userCred.user && mergeContext && this.mergeService) {\n try {\n await this.mergeService.applyToTarget(userCred.user, mergeContext);\n } catch (error) {\n // If a failure occurs in merge applyToTarget we can't do much about it (we are already logged in as new user)\n // but we should at least log it. The onus is really on the applyToTarget function to handle it's own errors.\n this.fire.recordException(error);\n }\n }\n this.onSignInEmitter.emit(userCred.user);\n }\n\n await loading.dismiss();\n return userCred || null;\n\n } catch (error) {\n // code auth/user-not-found\n await this.handleError(error);\n await loading.dismiss();\n return null;\n }\n }\n\n /**\n */\n public async reauthenicateWithProvider(provider: AuthProvider, options?: ISignInOptions)\n : Promise<UserCredential | null> {\n\n this.fire.addLogMessage(`reauthenicateWithProvider; provider=${provider}`);\n const loading = await this.ui.createLoading();\n try {\n let userCred: UserCredential | null = null;\n\n // Throw error if reauthentication attempted whilst signed in as guest, nor not signed in.\n const currentUser = await this.afa.currentUser;\n if (!currentUser || currentUser.isAnonymous) {\n throw new Error('Caanot reauthticate if no currentUser or currentUser is anonymous');\n }\n\n loading.present();\n\n switch (provider) {\n case AuthProvider.ANONYMOUS:\n throw new Error('Cannot reauthenticate with anonymous Credentials');\n\n case AuthProvider.EmailAndPassword:\n if (!options?.credentials) {\n throw new Error('Credentials are required when signing in with AuthProvider.EmailAndPassword');\n }\n if (!currentUser.email) {\n throw new Error('Cannot reauthenticate with email for an account without email');\n }\n if (!firebase.auth) {\n throw new Error('firebase.auth is undefined');\n }\n this.fire.addLogMessage(`creating email credential with firebase; email=${options.credentials.email}`);\n const authCred = firebase.auth.EmailAuthProvider.credential(currentUser.email, options.credentials.password);\n userCred = await currentUser.reauthenticateWithCredential(authCred);\n break;\n\n case AuthProvider.PhoneNumber:\n // coming soon - see feature/sms branch\n break;\n\n default:\n if (this.credFactory && await this.credFactory.isProviderSupported(provider)) {\n const factoryCred = await this.credFactory.getCredential(provider);\n if (factoryCred) {\n userCred = await currentUser.reauthenticateWithCredential(factoryCred);\n }\n } else if (this.isWebPlatform) {\n userCred = await currentUser.reauthenticateWithPopup(this.getAuthProvider(provider));\n } else {\n throw new Error('A CredentialFactory is required to use AuthProcessService on a non-web platform');\n }\n break;\n }\n\n await loading.dismiss();\n return userCred || null;\n\n } catch (error) {\n // code auth/user-not-found\n await this.handleError(error);\n await loading.dismiss();\n return null;\n }\n }\n\n /**\n * Link the current user to credentials from another auth provider.\n *\n * @param provider Provider to link.\n */\n public async linkCurrentUserToProvider(provider: AuthProvider, options?: ISignInOptions): Promise<UserCredential | null> {\n\n this.fire.addLogMessage(`Linking current anon user to provider; provider=${provider}`);\n const loading = await this.ui.createLoading();\n try {\n const currentUser = await this.afa.currentUser;\n if (null === currentUser) {\n throw new Error('CurrentUser is null');\n }\n\n await loading.present();\n let userCred: UserCredential | null = null;\n switch (provider) {\n case AuthProvider.ANONYMOUS:\n throw new Error('Linking anonymous user makes no sense');\n\n case AuthProvider.EmailAndPassword:\n if (!options?.credentials) {\n throw new Error('Credentials required to link to email credentential');\n }\n if (!firebase.auth) {\n throw new Error('firebase.auth is undefined');\n }\n this.fire.addLogMessage(`creating email credential with firebase; email=${options.credentials.email}`);\n const authCred = firebase.auth.EmailAuthProvider.credential(options.credentials.email, options.credentials.password);\n this.fire.addLogMessage(`linking userCredential to email authCredential`);\n userCred = await currentUser.linkWithCredential(authCred);\n break;\n\n case AuthProvider.PhoneNumber:\n throw new Error('Linking phone number not suported');\n\n default:\n if (this.credFactory && await this.credFactory.isProviderSupported(provider)) {\n const factoryCred = await this.credFactory.getCredential(provider);\n if (factoryCred) {\n userCred = await currentUser.linkWithCredential(factoryCred);\n }\n } else if (this.isWebPlatform) {\n userCred = await currentUser.linkWithPopup(this.getAuthProvider(provider));\n } else {\n throw new Error('A CredentialFactory is required to use AuthProcessService on a non-web platform');\n }\n }\n\n if (userCred && userCred.user) { // Null if user cancels (or perhaps fails) sign-in\n const userData = this.parseUserInfo(userCred.user);\n if (\n userData.displayName\n && (userCred.user.displayName !== userData.displayName || userCred.user.photoURL !== userData.displayName)\n ) {\n this.fire.addLogMessage(`Updating user profile; displayName=${userData.displayName}, photoUrl=${userData.photoURL}`); // tslint:disable-line max-line-length\n await this.updateUserInfo({ displayName: userData.displayName, photoURL: userData.photoURL });\n }\n await this.handleSignInSuccess(userCred);\n }\n\n await loading.dismiss();\n return userCred || null;\n\n } catch (error) {\n // Merge\n await this.handleError(error);\n await loading.dismiss();\n return null;\n\n }\n }\n\n /**\n * Creates a firebase user account authenticated with the specified provider.\n * If AuthProvider.EmailAndPassword is specified credentials and displayname must also be provided.\n */\n public async registerWith(provider: AuthProvider, options?: ISignInOptions): Promise<UserCredential | null> {\n\n this.fire.addLogMessage(`SigningUp with provider; provider=${provider}`);\n const loading = await this.ui.createLoading();\n try {\n\n // If the current user is anonymous - link the credentials to the existing user.\n // Otherwise if the user is logged in un-Anonymously, throw error\n const currentUser = await this.afa.currentUser;\n if (currentUser?.isAnonymous) { // Anonymous User\n return this.linkCurrentUserToProvider(provider, options);\n } else if (null !== currentUser) { // Non-Anonymous User\n throw new Error('Cannot Register whilst signed in as a non-Anonymous user. SignOut first');\n } else if (!await this.confirmTos(null, options)) { // No current user\n this.fire.addLogMessage('User declined TOS during register');\n return null;\n }\n\n let userCred: UserCredential | null = null;\n switch (provider) {\n\n case AuthProvider.EmailAndPassword:\n if (!options?.credentials || !options?.displayName) {\n throw new Error('Credentials & displayName required to SignUp by email');\n }\n await loading.present();\n this.fire.addLogMessage(`creaating user with email and password; email=${options.credentials.email}`);\n userCred = await this.afa.createUserWithEmailAndPassword(options.credentials.email, options.credentials.password);\n if (null === userCred.user) {\n throw new Error('User is null following successful signUp');\n }\n await this.updateUserInfo({ displayName: options.displayName });\n await this.confirmTos(userCred, { skipTosCheck: true }); // To save the tosAcceptance\n if (this.config.authUi.enableEmailVerification) {\n await userCred.user.sendEmailVerification();\n }\n // Legacy fields\n this.emailConfirmationSent = true;\n this.emailToConfirm = userCred.user.email || undefined;\n await this.handleSignInSuccess(userCred);\n await loading.dismiss();\n break;\n\n default:\n userCred = await this.signInWith(provider, { ...options, skipTosCheck: true });\n\n }\n\n if (userCred.user) {\n this.onRegisterEmitter.emit(userCred.user);\n }\n return userCred || null;\n } catch (error) {\n // This is where I would handle merge\n await this.handleError(error);\n await loading.dismiss();\n return null;\n }\n\n }\n\n /**\n * Present dialog and confirm the user agress to the privacy policy and terms of service (if either configured).\n * If nether configured returns true;\n *\n * @returns True if either user agrees to TOS/PrivacyUrl || no TOS/PrivacyUrl configured.\n */\n private async confirmTos(userCred: UserCredential | null = null, options: { skipTosCheck?: boolean } = {}): Promise<boolean> {\n if (this.config.authUi.tosUrl || this.config.authUi.privacyPolicyUrl) {\n let acceptedTos: string | null = (options.skipTosCheck) ? new Date().toISOString() : null;\n\n if (!acceptedTos && userCred?.user && !userCred?.additionalUserInfo?.isNewUser && this.config.authUi.enableFirestoreSync) {\n const userData = await this.fireStoreService.getUserData(userCred.user.uid);\n acceptedTos = userData?.acceptedTos || null;\n }\n\n if (!acceptedTos && await this.ui.confirmTos()) {\n acceptedTos = new Date().toISOString();\n }\n\n if (userCred?.user && this.config.authUi.enableFirestoreSync) {\n await this.fireStoreService.setUserData(userCred.user.uid, { acceptedTos }, { merge: true });\n }\n\n return !!acceptedTos;\n\n } else { // No tosUrl || privacyPolicyUrl\n return true;\n }\n }\n\n /**\n * Send the currently authenticated user another verficiation email.\n */\n async sendNewVerificationEmail(): Promise<void> {\n try {\n const currentUser = await this.afa.currentUser;\n if (!currentUser) {\n throw new Error('No signed in user');\n }\n await currentUser.sendEmailVerification();\n } catch (error) {\n this.fire.recordException(error);\n throw error;\n }\n }\n\n /**\n * SignOut the currently authenticated user.\n */\n async signOut() {\n try {\n await this.afa.signOut();\n if (this.credFactory) {\n this.credFactory.signOut();\n }\n } catch (error) {\n await this.handleError(error);\n }\n }\n\n /**\n * Update the details for the authenticated user of in the firebase authentication and sync with firestore.\n *\n * @param userInfo - UserInfo object containing those properties for which change is requried. Only provider\n * the properties actually to be changed. Others should be ommitted.\n */\n public async updateUserInfo(userInfo: Partial<UserInfo>): Promise<void> {\n try {\n const user: User | null = await this.afa.currentUser;\n if (!user) {\n throw new Error('No currentUser');\n }\n\n if (userInfo.email) {\n await user.updateEmail(userInfo.email);\n }\n\n if (userInfo.phoneNumber) {\n await user.updatePhoneNumber(userInfo.phoneNumber as any); // TODO - bet this doesn't actually work\n }\n\n if (userInfo.displayName || userInfo.photoURL) {\n await user.updateProfile({\n displayName: userInfo.displayName,\n photoURL: userInfo.photoURL\n });\n }\n await this.afa.updateCurrentUser(user);\n\n if (this.config.authUi.enableFirestoreSync) {\n // await this.fireStoreService.updateUserData(user.uid, this.parseUserInfo(user));\n await this.fireStoreService.updateUserData(user.uid, {\n displayName: user.displayName,\n email: user.email,\n photoURL: user.photoURL\n });\n }\n\n this.onUserUpdatedEmitter.emit();\n\n } catch (error) {\n this.fire.recordException(error);\n }\n }\n\n /**\n * Extract UserInfo object from the User object\n * If multiple providers are supplied these are amalgamated to create the most complete\n * UserInfo object possible\n */\n public parseUserInfo(user: User): UserInfo {\n const userInfo: UserInfo = {\n uid: user.uid,\n displayName: user.displayName,\n email: user.email,\n phoneNumber: user.phoneNumber,\n photoURL: user.photoURL,\n providerId: user.providerId\n };\n if (user.providerData) {\n user.providerData.forEach(item => {\n if (!userInfo.displayName && item?.displayName) { userInfo.displayName = item.displayName; }\n if (!userInfo.email && item?.email) { userInfo.email = item.email; }\n if (!userInfo.phoneNumber && item?.phoneNumber) { userInfo.phoneNumber = item.phoneNumber; }\n if (!userInfo.photoURL && item?.photoURL) { userInfo.photoURL = item.photoURL; }\n if (!userInfo.providerId && item?.providerId) { userInfo.providerId = item.providerId; }\n });\n }\n return userInfo;\n }\n\n /**\n * Returns the UserPhotoUrl, or an appropraite placeholder if not provided\n * ToDo - this would probably bet better inside a user-photo component\n */\n public getUserPhotoUrl(): Observable<string | null> {\n return this.user$.pipe(\n map((user: User | null) => {\n if (!user) {\n return null;\n } else if (user.photoURL) {\n return user.photoURL;\n } else if (user.emailVerified) {\n return `assets/user/${Accounts.CHECK}.svg`;\n } else if (user.isAnonymous) {\n return `assets/user/${Accounts.OFF}.svg`;\n } else {\n return `assets/user/${Accounts.NONE}.svg`;\n }\n })\n );\n }\n\n /**\n * Common handler for successful signIn\n * Refreshes FireStore User document based on current user (if enabled)\n * And provides welcome back toast (if enabled)\n *\n * @param cred UserCredential object provided by signIn function\n */\n async handleSignInSuccess(cred: UserCredential) {\n if (null === cred.user) {\n throw new Error('user is null whilst handling sucessful login');\n }\n // if (this.config.authUi.enableFirestoreSync) {\n // Now done by server-side trigger await this.fireStoreService.createUserData(userData);\n // try {\n // const userData = this.parseUserInfo(cred.user);\n // this.fire.addLogMessage(`About to create user data in firestore; user=${JSON.stringify(userData)}`);\n // } catch (error) {\n // this.fire.recordException(error);\n // }\n // }\n if (this.config.authUi.toastMessageOnAuthSuccess) {\n const successMessage = ('string' === typeof this.config.authUi.toastMessageOnAuthSuccess)\n ? this.config.authUi.toastMessageOnAuthSuccess\n : `Hello ${cred.user.displayName ? cred.user.displayName : ''}!`;\n this.ui.toast(successMessage, { duration: this.config.authUi.toastDefaultDurationMil });\n }\n }\n\n /**\n * Refresh user info. Can be useful for instance to get latest status regarding email verification.\n */\n async reloadUserInfo() {\n const user = await this.user$.pipe(take(1)).toPromise();\n if (user) {\n await user.reload();\n }\n }\n\n /**\n * Deletes the current user\n */\n async deleteUser() {\n const currentUser = await this.afa.currentUser;\n const currentUid = currentUser?.uid;\n if (!currentUser || !currentUid) {\n throw new Error('Unable to delete currentUser if null');\n }\n try {\n // Userdata deleted by DB trigger\n await currentUser.delete();\n this.onUserDeletedEmitter.emit();\n } catch (error) {\n if (error.code !== FirebaseErrorCodes.requiresRecentLogin) {\n this.fire.recordException(error);\n }\n throw (error);\n }\n }\n\n /**\n * Logs the error and provides user error notifcation if appropriate\n */\n async handleError(error: any) {\n await this.fire.recordException(error);\n this.onErrorEmitter.emit(error);\n if (this.config.authUi.toastMessageOnAuthError) {\n let message: string = 'auth.common.pleaseRetry';\n if (error && typeof error === 'string') {\n message = error;\n } else if (error && error.message) {\n message = error.message;\n } else if (error && typeof error === 'object') {\n message = JSON.stringify(error);\n } else if (error) {\n message = error.toString();\n }\n await this.ui.toast(message, { duration: this.config.authUi.toastDefaultDurationMil });\n }\n }\n\n /**\n * Returns a firebase auth provider object for the specified provider\n */\n private getAuthProvider(provider: AuthProvider): FirebaseAuthProvider {\n if (!firebase.auth) {\n throw new Error('firebase.auth is undefined');\n }\n switch (provider) {\n case AuthProvider.Google: return new firebase.auth.GoogleAuthProvider();\n case AuthProvider.Apple: return new firebase.auth.OAuthProvider('apple.com');\n case AuthProvider.Facebook: return new firebase.auth.FacebookAuthProvider();\n case AuthProvider.Twitter: return new firebase.auth.TwitterAuthProvider();\n case AuthProvider.Github: return new firebase.auth.GithubAuthProvider();\n case AuthProvider.Microsoft: return new firebase.auth.OAuthProvider('microsoft.com');\n case AuthProvider.Yahoo: return new firebase.auth.OAuthProvider('yahoo.com');\n default: throw new Error(`${provider} is not available as auth provider`);\n }\n }\n\n}\n","import { Input, Output, EventEmitter } from '@angular/core';\nimport { ControlValueAccessor, Validator, ValidationErrors, AbstractControl } from '@angular/forms';\n\ndeclare type ValueAccessorHandler<T> = (_: T) => void;\ndeclare type ValidatorChangeHandler = () => void;\n\n/* @Component({\n template: ''\n}) */\nexport class ValueAccessorValueComponent<T> implements ControlValueAccessor, Validator {\n\n @Input()\n get value(): T | undefined { return this._value; }\n set value(val: T | undefined) {\n if (val) {\n this._value = val;\n this.valueChange.emit(val);\n this.propagateChange(val);\n }\n }\n protected _value: T | undefined;\n\n @Output()\n valueChange: EventEmitter<T> = new EventEmitter<T>();\n\n validate(control: AbstractControl): ValidationErrors | null {\n return null;\n }\n\n propagateChange: ValueAccessorHandler<T> = (_: T) => { };\n propagateTouch: ValueAccessorHandler<T> = (_: T) => { }; // TODO - Not implemented.\n propagateValidatorChange: ValidatorChangeHandler = () => { }; // TODO - Not implemented.\n\n writeValue(value: T) {\n this.value = value;\n }\n\n registerOnChange(fn: ValueAccessorHandler<T>) {\n this.propagateChange = fn;\n }\n\n registerOnTouched(fn: ValueAccessorHandler<T>) {\n this.propagateTouch = fn;\n }\n\n registerOnValidatorChange(fn: ValidatorChangeHandler) {\n this.propagateValidatorChange = fn;\n }\n\n}\n","import { Input, Output, EventEmitter, OnDestroy, AfterViewInit, Injector, ChangeDetectorRef, OnInit } from '@angular/core';\nimport { ControlValueAccessor, Validator, ValidationErrors, AbstractControl, FormControl, NgControl } from '@angular/forms';\nimport { ReplaySubject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n/* @Component({\n template: ''\n}) */\nexport class ValueAccessorControlComponent<T> implements ControlValueAccessor, Validator, OnInit, OnDestroy, AfterViewInit {\n\n public parentControl?: NgControl | null;\n public control?: FormControl;\n private get _control(): FormControl {\n if (!this.control) {\n throw new Error('ValueAccessorControlComponent: this.control must be eclipsed in the subclass');\n }\n return this.control;\n }\n\n protected destroy$: ReplaySubject<void> = new ReplaySubject<void>();\n\n @Input()\n set value(val: T | undefined) {\n if (val) {\n this._control.setValue(val);\n } else {\n this._control.reset();\n }\n }\n get value(): T | undefined {\n return this._control.value;\n }\n\n @Output()\n valueChange: EventEmitter<T | undefined> = new EventEmitter<T | undefined>();\n\n constructor(\n private injector: Injector,\n private cdRef: ChangeDetectorRef\n ) { }\n\n ngOnInit() {\n this._control.valueChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe(val => {\n if (this._control.dirty) {\n this.propagateChange(val);\n this.propagateTouch();\n this.valueChange.emit(val);\n }\n });\n this._control.statusChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => this.propagateValidatorChange());\n }\n\n ngAfterViewInit() {\n this.parentControl = this.injector.get(NgControl, null);\n this.cdRef.detectChanges();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n propagateChange = (val: T | undefined) => { };\n propagateTouch = () => { };\n propagateValidatorChange = () => { };\n\n writeValue(value: T | undefined) {\n this.value = value;\n }\n\n registerOnChange(fn: any) {\n this.propagateChange = fn;\n }\n\n registerOnTouched(fn: any) {\n this.propagateTouch = fn;\n }\n\n registerOnValidatorChange(fn: () => void) {\n this.propagateValidatorChange = fn;\n }\n\n setDisabledState(isDisabled: boolean) {\n if (isDisabled) {\n this._control.disable();\n } else {\n this._control.enable();\n }\n }\n\n validate(control: AbstractControl): ValidationErrors | null {\n return this._control.errors;\n }\n\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, CanLoad, Route, Router, RouterStateSnapshot, UrlSegment, UrlTree } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { map, take } from 'rxjs/operators';\nimport { MalSharedConfig, MalSharedConfigToken } from '../interfaces';\nimport { AuthProcessService } from '../services/auth-process.service';\nimport { User } from '@firebase/auth-types';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LoggedInGuard implements CanActivate, CanLoad {\n constructor(\n @Inject(MalSharedConfigToken)\n private config: MalSharedConfig,\n private router: Router,\n private aps: AuthProcessService\n ) {\n }\n\n private guardOutcome(redirectUrl?: string): Observable<boolean | UrlTree> {\n return this.aps.user$.pipe(\n take(1),\n map((user: User | null) => {\n if (user) {\n if (this.config.authUi.guardProtectedRoutesUntilEmailIsVerified && !user.emailVerified) {\n if (this.config.authUi.authGuardVerifyEmailURL) {\n return this.router.createUrlTree(\n [`${this.config.authUi.authGuardVerifyEmailURL}`], { queryParams: { redirectUrl } }\n );\n } else if (this.config.authUi.authGuardFallbackURL) {\n return this.router.createUrlTree(\n [`${this.config.authUi.authGuardFallbackURL}`], { queryParams: { redirectUrl } }\n );\n } else {\n return false;\n }\n } else {\n return true;\n }\n } else {\n if (this.config.authUi.authGuardFallbackURL) {\n return this.router.createUrlTree(\n [`${this.config.authUi.authGuardFallbackURL}`], { queryParams: { redirectUrl } }\n );\n }\n return false;\n }\n })\n );\n }\n\n canLoad(route: Route, segments: UrlSegment[]): Observable<boolean | UrlTree> {\n return this.guardOutcome(segments[0].parameters.url);\n }\n\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> {\n return this.guardOutcome(state.url);\n }\n\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTree } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { MalSharedConfig, MalSharedConfigToken } from '../interfaces';\nimport { AuthProcessService } from '../services/auth-process.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class VerifyEmailGuard implements CanActivate {\n constructor(\n @Inject(MalSharedConfigToken)\n private config: MalSharedConfig,\n private router: Router,\n private aps: AuthProcessService\n ) {\n }\n\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> {\n return this.aps.user$.pipe(\n map(user => {\n if (user\n && !user.emailVerified\n && !user.isAnonymous\n && this.config.authUi.authGuardVerifyEmailURL\n ) {\n return this.router.createUrlTree([`${this.config.authUi.authGuardVerifyEmailURL}`], { queryParams: { redirectUrl: state.url } });\n } else {\n return true;\n }\n })\n );\n }\n\n}\n","// @angular/*\nimport { NgModule, ModuleWithProviders, Optional, NgZone, PLATFORM_ID, isDevMode } from '@angular/core';\nimport { HttpClientModule } from '@angular/common/http';\n\n// Ionic\nimport { IonicModule } from '@ionic/angular';\n\n// Imported\nimport { TranslateModule } from '@ngx-translate/core';\n\n// Configuration\nimport {\n malSharedConfigFactory, MalSharedConfig, MalUserProvidedConfig, UseEmulatorArguments,\n MalSharedConfigToken, MalUserProvidedConfigToken\n} from './interfaces';\n\n// @angular/fire\nimport { FIREBASE_APP_NAME, FIREBASE_OPTIONS, FirebaseAppConfig, FirebaseApp, FirebaseOptions, AngularFireModule } from '@angular/fire';\nimport { AngularFireAuth, AngularFireAuthModule, USE_EMULATOR as AUTH_EMULATOR } from '@angular/fire/auth';\nimport { AngularFirestoreModule, USE_EMULATOR as FIRESTORE_EMULATOR } from '@angular/fire/firestore';\nimport { AngularFireRemoteConfig, ConfigTemplate, DEFAULTS as REMOTE_CONFIG_DEFAULTS, SETTINGS as REMOTE_CONFIG_SETTINGS } from '@angular/fire/remote-config';\nimport { DATA_COLLECTION_ENABLED, INSTRUMENTATION_ENABLED } from '@angular/fire/performance';\nimport { Settings as RemoteConfigSettings } from '@firebase/remote-config-types';\nimport { AngularFirePerformance } from '@angular/fire/performance';\nimport { USE_EMULATOR as FUNCTIONS_EMULATOR, AngularFireFunctionsModule, REGION } from '@angular/fire/functions';\n\n// Guards\nimport { LoggedInGuard, VerifyEmailGuard } from './guards';\n\n// Components\n// import { ValueAccessorControlComponent } from './types/ValueAccessorControlComponent';\n// import { ValueAccessorValueComponent } from './types/ValueAccessorValueComponent';\n\n// services\nimport { FirestoreSyncService } from './services/firestore-sync.service';\nimport { AuthProcessService } from './services/auth-process.service';\nimport { CrashlyticsService } from './services/crashlytics.service';\nimport { AnalyticsService } from './services/analytics.service';\nimport { RemoteConfigService } from './services/remoteconfig.service';\nimport { PerformanceService } from './services/performance.service';\nimport { FirebaseService } from './services/firebase.service';\nimport { UiService } from './services/ui.service';\n\nconst MODULES = [\n HttpClientModule,\n AngularFireAuthModule,\n AngularFirestoreModule,\n AngularFireFunctionsModule\n];\n\n@NgModule({\n imports: [\n ...MODULES,\n TranslateModule.forChild(),\n AngularFireModule,\n ],\n exports: [\n ...MODULES,\n TranslateModule\n ]\n})\nexport class MalSharedModule {\n\n static forRoot(\n config: MalUserProvidedConfig,\n appNameFactory: () => string | undefined = () => undefined,\n ): ModuleWithProviders<MalSharedModule> {\n return {\n ngModule: MalSharedModule,\n providers:\n [\n {\n provide: MalUserProvidedConfigToken,\n useValue: config\n },\n {\n provide: MalSharedConfigToken,\n useFactory: malSharedConfigFactory,\n deps: [MalUserProvidedConfigToken]\n },\n {\n provide: REMOTE_CONFIG_DEFAULTS,\n useValue: config.configDefaults\n },\n {\n provide: REMOTE_CONFIG_SETTINGS,\n useFactory: () => isDevMode() ? { minimumFetchIntervalMillis: 3600000 } : {} // 1 hour§\n },\n {\n provide: FIREBASE_OPTIONS,\n useValue: config.firebase\n },\n {\n provide: FIREBASE_APP_NAME,\n useFactory: appNameFactory\n },\n {\n provide: AUTH_EMULATOR,\n useFactory: authEmulatorFactory,\n deps: [MalSharedConfigToken]\n },\n {\n provide: FIRESTORE_EMULATOR,\n useFactory: firestoreEmulatorFactory,\n deps: [MalSharedConfigToken]\n },\n {\n provide: FUNCTIONS_EMULATOR,\n useFactory: functionsEmulatorFactory,\n deps: [MalSharedConfigToken]\n },\n {\n provide: REGION,\n useValue: config.services?.firebaseRegion || null\n },\n {\n provide: AngularFirePerformance,\n useFactory: performanceProviderFactory,\n deps: [\n MalSharedConfigToken,\n FirebaseApp,\n [new Optional(), DATA_COLLECTION_ENABLED],\n [new Optional(), INSTRUMENTATION_ENABLED],\n NgZone,\n PLATFORM_ID\n ]\n },\n {\n provide: AngularFireRemoteConfig,\n useFactory: remoteConfigFirebaseService,\n deps: [\n MalSharedConfigToken,\n FIREBASE_OPTIONS,\n FIREBASE_APP_NAME,\n REMOTE_CONFIG_SETTINGS,\n REMOTE_CONFIG_DEFAULTS,\n NgZone,\n PLATFORM_ID\n ]\n },\n AnalyticsService,\n CrashlyticsService,\n FirebaseService,\n UiService,\n RemoteConfigService,\n AuthProcessService,\n FirestoreSyncService,\n PerformanceService,\n AngularFireAuth,\n LoggedInGuard,\n VerifyEmailGuard\n ],\n };\n }\n\n}\n\nexport function performanceProviderFactory(\n config: MalSharedConfig,\n app: FirebaseApp,\n dataCollectionEnabled: boolean,\n instrumentationEnabled: boolean,\n zone: NgZone,\n platformId: any\n): AngularFirePerformance | null {\n if (config.services.firebasePerformance) {\n return new AngularFirePerformance(app, dataCollectionEnabled, instrumentationEnabled, zone, platformId);\n }\n return null;\n}\n\nexport function remoteConfigFirebaseService(\n config: MalSharedConfig,\n options: FirebaseOptions,\n nameOrConfig: string | FirebaseAppConfig,\n settings: RemoteConfigSettings,\n defaultConfig: ConfigTemplate,\n zone: NgZone,\n platformId: any\n): AngularFireRemoteConfig | null {\n if (config.services.firebaseRemoteConfig) {\n return new AngularFireRemoteConfig(options, nameOrConfig, settings, defaultConfig, zone, platformId);\n }\n return null;\n}\n\nexport function authEmulatorFactory(config: MalSharedConfig): UseEmulatorArguments | undefined {\n if (true === config.services.firebaseAuth) {\n return undefined;\n } else {\n return config.services.firebaseAuth;\n }\n}\n\nexport function firestoreEmulatorFactory(config: MalSharedConfig): UseEmulatorArguments | undefined {\n if (true === config.services.firebaseFirestore) {\n return undefined;\n } else {\n return config.services.firebaseFirestore;\n }\n}\n\nexport function functionsEmulatorFactory(config: MalSharedConfig): UseEmulatorArguments | undefined {\n if (true === config.services.firebaseFunctions) {\n return undefined;\n } else {\n return config.services.firebaseFunctions;\n }\n}\n"]}
@@ -1,9 +0,0 @@
1
- import { ModuleWithProviders } from '@angular/core';
2
- import { IAnalyticsProvider, ICrashlyticsProvider, ICredentialFactoryProvider, MalSharedConfig, FirebaseService } from 'ngx-firebase';
3
- import { MalCapacitorConfig } from './interfaces';
4
- export declare class MalCapacitorModule {
5
- static forRoot(config: MalCapacitorConfig): ModuleWithProviders<MalCapacitorModule>;
6
- }
7
- export declare function analyticsProviderFactory(config: MalSharedConfig): IAnalyticsProvider | null;
8
- export declare function crashlyticsProviderFactory(config: MalSharedConfig): ICrashlyticsProvider | null;
9
- export declare function credFactoryProviderFactory(fire: FirebaseService, sharedConfig: MalSharedConfig, capConfig: MalCapacitorConfig): ICredentialFactoryProvider | null;
@@ -1,12 +0,0 @@
1
- import { InjectionToken } from "@angular/core";
2
- export interface MalSignInWithAppleConfig {
3
- authUrl?: string;
4
- redirectUrl: string;
5
- redirectDeekLink: string;
6
- scopes?: string;
7
- clientId: string;
8
- }
9
- export interface MalCapacitorConfig {
10
- signInWithApple?: MalSignInWithAppleConfig;
11
- }
12
- export declare const MalCapacitorConfigToken: InjectionToken<MalCapacitorConfig>;
@@ -1 +0,0 @@
1
- export * from './config';
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public-api';
5
- export { MalCapacitorConfigToken as ɵa } from './interfaces';
@@ -1 +0,0 @@
1
- {"__symbolic":"module","version":4,"exports":[{"from":"./analytics-firebase-capacitor.service"},{"from":"./crashlytics-firebase-capacitor.service"},{"from":"./credential-factory-capacitor.service"}],"metadata":{"MalCapacitorModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":23,"character":1}}],"members":{},"statics":{"forRoot":{"__symbolic":"function","parameters":["config"],"value":{"ngModule":{"__symbolic":"reference","name":"MalCapacitorModule"},"providers":[{"provide":{"__symbolic":"reference","name":"ɵa"},"useValue":{"__symbolic":"reference","name":"config"}},{"provide":{"__symbolic":"reference","module":"ngx-firebase","name":"MalAnalyticsProviderToken","line":36,"character":21},"useFactory":{"__symbolic":"reference","name":"analyticsProviderFactory"},"deps":[{"__symbolic":"reference","module":"ngx-firebase","name":"MalSharedConfigToken","line":38,"character":19}]},{"provide":{"__symbolic":"reference","module":"ngx-firebase","name":"MalCrashlyticsProviderToken","line":41,"character":21},"useFactory":{"__symbolic":"reference","name":"crashlyticsProviderFactory"},"deps":[{"__symbolic":"reference","module":"ngx-firebase","name":"MalSharedConfigToken","line":43,"character":19}]},{"provide":{"__symbolic":"reference","module":"ngx-firebase","name":"MalCredentialFactoryProviderToken","line":46,"character":21},"useFactory":{"__symbolic":"reference","name":"credFactoryProviderFactory"},"deps":[{"__symbolic":"reference","module":"ngx-firebase","name":"FirebaseService","line":48,"character":19},{"__symbolic":"reference","module":"ngx-firebase","name":"MalSharedConfigToken","line":48,"character":36},{"__symbolic":"reference","name":"ɵa"}]}]}}}},"analyticsProviderFactory":{"__symbolic":"function"},"crashlyticsProviderFactory":{"__symbolic":"function"},"credFactoryProviderFactory":{"__symbolic":"function"}},"origins":{"MalCapacitorModule":"./capacitor.module","analyticsProviderFactory":"./capacitor.module","crashlyticsProviderFactory":"./capacitor.module","credFactoryProviderFactory":"./capacitor.module","ɵa":"./interfaces"},"importAs":"ngx-firebase/capacitor"}
@@ -1,25 +0,0 @@
1
- {
2
- "peerDependencies": {
3
- "@angular/core": "^11.2.5",
4
- "@capacitor/core": "2.4.7",
5
- "scriptjs": "^2.5.9",
6
- "@capacitor-community/firebase-analytics": "^0.2.0",
7
- "@capacitor-community/firebase-crashlytics": "^0.3.0",
8
- "@capacitor-community/firebase-remote-config": "https://github.com/Sebschock/firebase-remote-config/releases/download/v0.1.4/capacitor-community-firebase-remote-config-0.1.4.tgz",
9
- "@turnoutt/capacitor-firebase-dynamic-links": "^0.2.3",
10
- "capacitor-firebase-auth": "2.4.0",
11
- "rxjs": "~6.5.4",
12
- "zone.js": "^0.11.3",
13
- "js-sha256": "^0.9.0",
14
- "firebase": "^8.2.6"
15
- },
16
- "main": "../bundles/ngx-firebase-capacitor.umd.js",
17
- "module": "../fesm2015/ngx-firebase-capacitor.js",
18
- "es2015": "../fesm2015/ngx-firebase-capacitor.js",
19
- "esm2015": "../esm2015/capacitor/ngx-firebase-capacitor.js",
20
- "fesm2015": "../fesm2015/ngx-firebase-capacitor.js",
21
- "typings": "ngx-firebase-capacitor.d.ts",
22
- "metadata": "ngx-firebase-capacitor.metadata.json",
23
- "sideEffects": false,
24
- "name": "ngx-firebase/capacitor"
25
- }
@@ -1,3 +0,0 @@
1
- export * from './interfaces';
2
- export * from './services';
3
- export * from './capacitor.module';
@@ -1,9 +0,0 @@
1
- import { IAnalyticsProvider } from 'ngx-firebase';
2
- export declare class AnalyticsFirebaseCapacitorService implements IAnalyticsProvider {
3
- get isWeb(): boolean;
4
- setUserId(userId: string | null): void;
5
- logEvent(name: string, params?: {
6
- [key: string]: any;
7
- }): Promise<void>;
8
- setScreenName(screenName: string, screenClass?: string): Promise<void>;
9
- }
@@ -1,8 +0,0 @@
1
- import { iOSException, AndroidException } from '@capacitor-community/firebase-crashlytics';
2
- import { ICrashlyticsProvider } from 'ngx-firebase';
3
- export declare class CrashlyticsFirebaseCapacitorService implements ICrashlyticsProvider {
4
- constructor();
5
- setUserId(uid: string | null): void;
6
- recordException(options: iOSException | AndroidException): Promise<void>;
7
- addLogMessage(message: string): Promise<void>;
8
- }
@@ -1,18 +0,0 @@
1
- import 'firebase/auth';
2
- import { AuthCredential } from '@firebase/auth-types';
3
- import { AuthProvider, ICredentialFactoryProvider, FirebaseService, MalSharedConfig } from 'ngx-firebase';
4
- import { MalCapacitorConfig } from '../interfaces';
5
- export declare class AuthCredentialFactoryCapacitorService implements ICredentialFactoryProvider {
6
- private fire;
7
- sharedConfig: MalSharedConfig;
8
- capConfg: MalCapacitorConfig;
9
- /**
10
- * Returns true if current platform is webplatform supported by @angular/fire
11
- */
12
- get isWebPlatform(): boolean;
13
- constructor(fire: FirebaseService, sharedConfig: MalSharedConfig, capConfg: MalCapacitorConfig);
14
- private deviceSupportsNativeApple;
15
- isProviderSupported(provider: AuthProvider): Promise<boolean>;
16
- getCredential(provider: AuthProvider): Promise<AuthCredential | null>;
17
- signOut(): Promise<void>;
18
- }
@@ -1,3 +0,0 @@
1
- export * from './analytics-firebase-capacitor.service';
2
- export * from './crashlytics-firebase-capacitor.service';
3
- export * from './credential-factory-capacitor.service';
@@ -1,78 +0,0 @@
1
- // @angular/*
2
- import { NgModule } from '@angular/core';
3
- // Configuration
4
- import { FirebaseService, MalCredentialFactoryProviderToken, MalSharedConfigToken, MalAnalyticsProviderToken, MalCrashlyticsProviderToken } from 'ngx-firebase';
5
- // Capacitor
6
- import { Capacitor } from '@capacitor/core';
7
- // Guards
8
- // Components
9
- // services
10
- import { AnalyticsFirebaseCapacitorService } from './services/analytics-firebase-capacitor.service';
11
- import { CrashlyticsFirebaseCapacitorService } from './services/crashlytics-firebase-capacitor.service';
12
- import { AuthCredentialFactoryCapacitorService } from './services/credential-factory-capacitor.service';
13
- import { MalCapacitorConfigToken } from './interfaces';
14
- export class MalCapacitorModule {
15
- static forRoot(config) {
16
- return {
17
- ngModule: MalCapacitorModule,
18
- providers: [
19
- {
20
- provide: MalCapacitorConfigToken,
21
- useValue: config
22
- },
23
- {
24
- provide: MalAnalyticsProviderToken,
25
- useFactory: analyticsProviderFactory,
26
- deps: [MalSharedConfigToken]
27
- },
28
- {
29
- provide: MalCrashlyticsProviderToken,
30
- useFactory: crashlyticsProviderFactory,
31
- deps: [MalSharedConfigToken]
32
- },
33
- {
34
- provide: MalCredentialFactoryProviderToken,
35
- useFactory: credFactoryProviderFactory,
36
- deps: [FirebaseService, MalSharedConfigToken, MalCapacitorConfigToken]
37
- }
38
- ]
39
- };
40
- }
41
- }
42
- MalCapacitorModule.decorators = [
43
- { type: NgModule }
44
- ];
45
- export function analyticsProviderFactory(config) {
46
- if (config.services.firebaseAnalytics) {
47
- if (Capacitor.platform === 'web') {
48
- console.info('Unable to instantiate firebaseeAnalytics, Capacitor plugin not supported on web platforn.');
49
- }
50
- else if (Capacitor.isPluginAvailable('FirebaseAnalytics')) {
51
- return new AnalyticsFirebaseCapacitorService();
52
- }
53
- else {
54
- console.info('Unable to instantiate firebaseeAnalytics, Capacitor plugin is not available');
55
- }
56
- }
57
- return null;
58
- }
59
- export function crashlyticsProviderFactory(config) {
60
- if (true === config.services.firebaseCrashlytics) {
61
- if (Capacitor.isPluginAvailable('FirebaseCrashlytics')) {
62
- return new CrashlyticsFirebaseCapacitorService();
63
- }
64
- else {
65
- console.info('Unable to instantiate FirebaseCrashlytics, Capacitor plugin is not available');
66
- }
67
- }
68
- return null;
69
- }
70
- export function credFactoryProviderFactory(fire, sharedConfig, capConfig) {
71
- if (Capacitor.isNative) {
72
- return new AuthCredentialFactoryCapacitorService(fire, sharedConfig, capConfig);
73
- }
74
- else {
75
- return null;
76
- }
77
- }
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwYWNpdG9yLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1maXJlYmFzZS9jYXBhY2l0b3Ivc3JjL2NhcGFjaXRvci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYTtBQUNiLE9BQU8sRUFBdUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTlELGdCQUFnQjtBQUNoQixPQUFPLEVBRVksZUFBZSxFQUNoQyxpQ0FBaUMsRUFBRSxvQkFBb0IsRUFBRSx5QkFBeUIsRUFBRSwyQkFBMkIsRUFDaEgsTUFBTSxjQUFjLENBQUM7QUFFdEIsWUFBWTtBQUNaLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU1QyxTQUFTO0FBRVQsYUFBYTtBQUViLFdBQVc7QUFDWCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNwRyxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN4RyxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUN4RyxPQUFPLEVBQXNCLHVCQUF1QixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRzNFLE1BQU0sT0FBTyxrQkFBa0I7SUFFN0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUEwQjtRQUN2QyxPQUFPO1lBQ0wsUUFBUSxFQUFFLGtCQUFrQjtZQUM1QixTQUFTLEVBQ1A7Z0JBQ0U7b0JBQ0UsT0FBTyxFQUFFLHVCQUF1QjtvQkFDaEMsUUFBUSxFQUFFLE1BQU07aUJBQ2pCO2dCQUNEO29CQUNFLE9BQU8sRUFBRSx5QkFBeUI7b0JBQ2xDLFVBQVUsRUFBRSx3QkFBd0I7b0JBQ3BDLElBQUksRUFBRSxDQUFDLG9CQUFvQixDQUFDO2lCQUM3QjtnQkFDRDtvQkFDRSxPQUFPLEVBQUUsMkJBQTJCO29CQUNwQyxVQUFVLEVBQUUsMEJBQTBCO29CQUN0QyxJQUFJLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztpQkFDN0I7Z0JBQ0Q7b0JBQ0UsT0FBTyxFQUFFLGlDQUFpQztvQkFDMUMsVUFBVSxFQUFFLDBCQUEwQjtvQkFDdEMsSUFBSSxFQUFFLENBQUMsZUFBZSxFQUFFLG9CQUFvQixFQUFFLHVCQUF1QixDQUFDO2lCQUN2RTthQUNGO1NBQ0osQ0FBQTtJQUNILENBQUM7OztZQTdCRixRQUFROztBQWdDVCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsTUFBdUI7SUFDOUQsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFO1FBQ3JDLElBQUksU0FBUyxDQUFDLFFBQVEsS0FBSyxLQUFLLEVBQUU7WUFDaEMsT0FBTyxDQUFDLElBQUksQ0FBQywyRkFBMkYsQ0FBQyxDQUFDO1NBQzNHO2FBQU0sSUFBSSxTQUFTLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLENBQUMsRUFBRTtZQUMzRCxPQUFPLElBQUksaUNBQWlDLEVBQUUsQ0FBQztTQUNoRDthQUFNO1lBQ0wsT0FBTyxDQUFDLElBQUksQ0FBQyw2RUFBNkUsQ0FBQyxDQUFDO1NBQzdGO0tBQ0Y7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsTUFBdUI7SUFDaEUsSUFBSSxJQUFJLEtBQUssTUFBTSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRTtRQUNoRCxJQUFJLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO1lBQ3RELE9BQU8sSUFBSSxtQ0FBbUMsRUFBRSxDQUFDO1NBQ2xEO2FBQU07WUFDTCxPQUFPLENBQUMsSUFBSSxDQUFDLDhFQUE4RSxDQUFDLENBQUM7U0FDOUY7S0FDRjtJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELE1BQU0sVUFBVSwwQkFBMEIsQ0FBQyxJQUFxQixFQUFFLFlBQTZCLEVBQUUsU0FBNkI7SUFDNUgsSUFBSSxTQUFTLENBQUMsUUFBUSxFQUFFO1FBQ3RCLE9BQU8sSUFBSSxxQ0FBcUMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQ2pGO1NBQU07UUFDTCxPQUFPLElBQUksQ0FBQztLQUNiO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEBhbmd1bGFyLypcbmltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8vIENvbmZpZ3VyYXRpb25cbmltcG9ydCB7XG4gIElBbmFseXRpY3NQcm92aWRlciwgSUNyYXNobHl0aWNzUHJvdmlkZXIsIElDcmVkZW50aWFsRmFjdG9yeVByb3ZpZGVyLFxuICBNYWxTaGFyZWRDb25maWcsIEZpcmViYXNlU2VydmljZSxcbiAgTWFsQ3JlZGVudGlhbEZhY3RvcnlQcm92aWRlclRva2VuLCBNYWxTaGFyZWRDb25maWdUb2tlbiwgTWFsQW5hbHl0aWNzUHJvdmlkZXJUb2tlbiwgTWFsQ3Jhc2hseXRpY3NQcm92aWRlclRva2VuXG59IGZyb20gJ25neC1maXJlYmFzZSc7XG5cbi8vIENhcGFjaXRvclxuaW1wb3J0IHsgQ2FwYWNpdG9yIH0gZnJvbSAnQGNhcGFjaXRvci9jb3JlJztcblxuLy8gR3VhcmRzXG5cbi8vIENvbXBvbmVudHNcblxuLy8gc2VydmljZXNcbmltcG9ydCB7IEFuYWx5dGljc0ZpcmViYXNlQ2FwYWNpdG9yU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvYW5hbHl0aWNzLWZpcmViYXNlLWNhcGFjaXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IENyYXNobHl0aWNzRmlyZWJhc2VDYXBhY2l0b3JTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9jcmFzaGx5dGljcy1maXJlYmFzZS1jYXBhY2l0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoQ3JlZGVudGlhbEZhY3RvcnlDYXBhY2l0b3JTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9jcmVkZW50aWFsLWZhY3RvcnktY2FwYWNpdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWFsQ2FwYWNpdG9yQ29uZmlnLCBNYWxDYXBhY2l0b3JDb25maWdUb2tlbiB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbkBOZ01vZHVsZSgpXG5leHBvcnQgY2xhc3MgTWFsQ2FwYWNpdG9yTW9kdWxlIHtcblxuICBzdGF0aWMgZm9yUm9vdChjb25maWc6IE1hbENhcGFjaXRvckNvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8TWFsQ2FwYWNpdG9yTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBNYWxDYXBhY2l0b3JNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6XG4gICAgICAgIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBNYWxDYXBhY2l0b3JDb25maWdUb2tlbixcbiAgICAgICAgICAgIHVzZVZhbHVlOiBjb25maWdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE1hbEFuYWx5dGljc1Byb3ZpZGVyVG9rZW4sXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiBhbmFseXRpY3NQcm92aWRlckZhY3RvcnksXG4gICAgICAgICAgICBkZXBzOiBbTWFsU2hhcmVkQ29uZmlnVG9rZW5dXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBNYWxDcmFzaGx5dGljc1Byb3ZpZGVyVG9rZW4sXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiBjcmFzaGx5dGljc1Byb3ZpZGVyRmFjdG9yeSxcbiAgICAgICAgICAgIGRlcHM6IFtNYWxTaGFyZWRDb25maWdUb2tlbl1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE1hbENyZWRlbnRpYWxGYWN0b3J5UHJvdmlkZXJUb2tlbixcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6IGNyZWRGYWN0b3J5UHJvdmlkZXJGYWN0b3J5LFxuICAgICAgICAgICAgZGVwczogW0ZpcmViYXNlU2VydmljZSwgTWFsU2hhcmVkQ29uZmlnVG9rZW4sIE1hbENhcGFjaXRvckNvbmZpZ1Rva2VuXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5hbHl0aWNzUHJvdmlkZXJGYWN0b3J5KGNvbmZpZzogTWFsU2hhcmVkQ29uZmlnKTogSUFuYWx5dGljc1Byb3ZpZGVyIHwgbnVsbCB7XG4gIGlmIChjb25maWcuc2VydmljZXMuZmlyZWJhc2VBbmFseXRpY3MpIHtcbiAgICBpZiAoQ2FwYWNpdG9yLnBsYXRmb3JtID09PSAnd2ViJykge1xuICAgICAgY29uc29sZS5pbmZvKCdVbmFibGUgdG8gaW5zdGFudGlhdGUgZmlyZWJhc2VlQW5hbHl0aWNzLCBDYXBhY2l0b3IgcGx1Z2luIG5vdCBzdXBwb3J0ZWQgb24gd2ViIHBsYXRmb3JuLicpO1xuICAgIH0gZWxzZSBpZiAoQ2FwYWNpdG9yLmlzUGx1Z2luQXZhaWxhYmxlKCdGaXJlYmFzZUFuYWx5dGljcycpKSB7XG4gICAgICByZXR1cm4gbmV3IEFuYWx5dGljc0ZpcmViYXNlQ2FwYWNpdG9yU2VydmljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmluZm8oJ1VuYWJsZSB0byBpbnN0YW50aWF0ZSBmaXJlYmFzZWVBbmFseXRpY3MsIENhcGFjaXRvciBwbHVnaW4gaXMgbm90IGF2YWlsYWJsZScpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyYXNobHl0aWNzUHJvdmlkZXJGYWN0b3J5KGNvbmZpZzogTWFsU2hhcmVkQ29uZmlnKTogSUNyYXNobHl0aWNzUHJvdmlkZXIgfCBudWxsIHtcbiAgaWYgKHRydWUgPT09IGNvbmZpZy5zZXJ2aWNlcy5maXJlYmFzZUNyYXNobHl0aWNzKSB7XG4gICAgaWYgKENhcGFjaXRvci5pc1BsdWdpbkF2YWlsYWJsZSgnRmlyZWJhc2VDcmFzaGx5dGljcycpKSB7XG4gICAgICByZXR1cm4gbmV3IENyYXNobHl0aWNzRmlyZWJhc2VDYXBhY2l0b3JTZXJ2aWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuaW5mbygnVW5hYmxlIHRvIGluc3RhbnRpYXRlIEZpcmViYXNlQ3Jhc2hseXRpY3MsIENhcGFjaXRvciBwbHVnaW4gaXMgbm90IGF2YWlsYWJsZScpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWRGYWN0b3J5UHJvdmlkZXJGYWN0b3J5KGZpcmU6IEZpcmViYXNlU2VydmljZSwgc2hhcmVkQ29uZmlnOiBNYWxTaGFyZWRDb25maWcsIGNhcENvbmZpZzogTWFsQ2FwYWNpdG9yQ29uZmlnKTogSUNyZWRlbnRpYWxGYWN0b3J5UHJvdmlkZXIgfCBudWxsIHtcbiAgaWYgKENhcGFjaXRvci5pc05hdGl2ZSkge1xuICAgIHJldHVybiBuZXcgQXV0aENyZWRlbnRpYWxGYWN0b3J5Q2FwYWNpdG9yU2VydmljZShmaXJlLCBzaGFyZWRDb25maWcsIGNhcENvbmZpZyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuIl19
@@ -1,3 +0,0 @@
1
- import { InjectionToken } from "@angular/core";
2
- export const MalCapacitorConfigToken = new InjectionToken('MalCapacitorConfigToken');
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWZpcmViYXNlL2NhcGFjaXRvci9zcmMvaW50ZXJmYWNlcy9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQWMvQyxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLGNBQWMsQ0FBcUIseUJBQXlCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBNYWxTaWduSW5XaXRoQXBwbGVDb25maWcge1xuICAgIGF1dGhVcmw/OiBzdHJpbmc7XG4gICAgcmVkaXJlY3RVcmw6IHN0cmluZztcbiAgICByZWRpcmVjdERlZWtMaW5rOiBzdHJpbmc7XG4gICAgc2NvcGVzPzogc3RyaW5nO1xuICAgIGNsaWVudElkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFsQ2FwYWNpdG9yQ29uZmlnIHtcbiAgICBzaWduSW5XaXRoQXBwbGU/OiBNYWxTaWduSW5XaXRoQXBwbGVDb25maWc7XG59XG5cbmV4cG9ydCBjb25zdCBNYWxDYXBhY2l0b3JDb25maWdUb2tlbiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxNYWxDYXBhY2l0b3JDb25maWc+KCdNYWxDYXBhY2l0b3JDb25maWdUb2tlbicpOyJdfQ==
@@ -1,2 +0,0 @@
1
- export * from './config';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZmlyZWJhc2UvY2FwYWNpdG9yL3NyYy9pbnRlcmZhY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jb25maWcnOyJdfQ==
@@ -1,6 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public-api';
5
- export { MalCapacitorConfigToken as ɵa } from './interfaces';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWZpcmViYXNlLWNhcGFjaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1maXJlYmFzZS9jYXBhY2l0b3Ivc3JjL25neC1maXJlYmFzZS1jYXBhY2l0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQztBQUU3QixPQUFPLEVBQUMsdUJBQXVCLElBQUksRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuXG5leHBvcnQge01hbENhcGFjaXRvckNvbmZpZ1Rva2VuIGFzIMm1YX0gZnJvbSAnLi9pbnRlcmZhY2VzJzsiXX0=
@@ -1,4 +0,0 @@
1
- export * from './interfaces';
2
- export * from './services';
3
- export * from './capacitor.module';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1maXJlYmFzZS9jYXBhY2l0b3Ivc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vY2FwYWNpdG9yLm1vZHVsZSc7XG4iXX0=
@@ -1,43 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { Plugins, Capacitor } from '@capacitor/core';
3
- import { Injectable } from '@angular/core';
4
- import * as i0 from "@angular/core";
5
- const { FirebaseAnalytics } = Plugins;
6
- export class AnalyticsFirebaseCapacitorService {
7
- get isWeb() {
8
- return Capacitor.platform === 'web';
9
- }
10
- setUserId(userId) {
11
- if (!this.isWeb) {
12
- FirebaseAnalytics.setUserId({ userId });
13
- }
14
- }
15
- logEvent(name, params = {}) {
16
- return __awaiter(this, void 0, void 0, function* () {
17
- if (!this.isWeb) {
18
- FirebaseAnalytics.logEvent({ name, params });
19
- }
20
- else {
21
- console.log('Firebase Analytics Event (not sent)>', name);
22
- }
23
- });
24
- }
25
- setScreenName(screenName, screenClass) {
26
- return __awaiter(this, void 0, void 0, function* () {
27
- if (!this.isWeb) {
28
- yield this.logEvent('screen_view', {
29
- screen_name: screenName,
30
- screen_class: screenClass
31
- });
32
- }
33
- else {
34
- console.log('Firebase Analytics ScreenName (not sent)>', screenName, screenClass);
35
- }
36
- });
37
- }
38
- }
39
- AnalyticsFirebaseCapacitorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AnalyticsFirebaseCapacitorService_Factory() { return new AnalyticsFirebaseCapacitorService(); }, token: AnalyticsFirebaseCapacitorService, providedIn: "root" });
40
- AnalyticsFirebaseCapacitorService.decorators = [
41
- { type: Injectable, args: [{ providedIn: 'root' },] }
42
- ];
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl0aWNzLWZpcmViYXNlLWNhcGFjaXRvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWZpcmViYXNlL2NhcGFjaXRvci9zcmMvc2VydmljZXMvYW5hbHl0aWNzLWZpcmViYXNlLWNhcGFjaXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTNDLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxHQUFHLE9BQU8sQ0FBQztBQUd0QyxNQUFNLE9BQU8saUNBQWlDO0lBRTFDLElBQUksS0FBSztRQUNMLE9BQU8sU0FBUyxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUM7SUFDeEMsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFxQjtRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNiLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7U0FDM0M7SUFDTCxDQUFDO0lBRUssUUFBUSxDQUFDLElBQVksRUFBRSxTQUFpQyxFQUFFOztZQUM1RCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDYixpQkFBaUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQzthQUNoRDtpQkFBTTtnQkFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLHNDQUFzQyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQzdEO1FBQ0wsQ0FBQztLQUFBO0lBRUssYUFBYSxDQUFDLFVBQWtCLEVBQUUsV0FBb0I7O1lBQ3hELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNiLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUU7b0JBQy9CLFdBQVcsRUFBRSxVQUFVO29CQUN2QixZQUFZLEVBQUUsV0FBVztpQkFDNUIsQ0FBQyxDQUFDO2FBQ047aUJBQU07Z0JBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQ0FBMkMsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7YUFDckY7UUFDTCxDQUFDO0tBQUE7Ozs7WUE5QkosVUFBVSxTQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsdWdpbnMsIENhcGFjaXRvciB9IGZyb20gJ0BjYXBhY2l0b3IvY29yZSc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJQW5hbHl0aWNzUHJvdmlkZXIgfSBmcm9tICduZ3gtZmlyZWJhc2UnO1xuY29uc3QgeyBGaXJlYmFzZUFuYWx5dGljcyB9ID0gUGx1Z2lucztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBbmFseXRpY3NGaXJlYmFzZUNhcGFjaXRvclNlcnZpY2UgaW1wbGVtZW50cyBJQW5hbHl0aWNzUHJvdmlkZXIge1xuXG4gICAgZ2V0IGlzV2ViKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gQ2FwYWNpdG9yLnBsYXRmb3JtID09PSAnd2ViJztcbiAgICB9XG5cbiAgICBzZXRVc2VySWQodXNlcklkOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1dlYikge1xuICAgICAgICAgICAgRmlyZWJhc2VBbmFseXRpY3Muc2V0VXNlcklkKHsgdXNlcklkIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgbG9nRXZlbnQobmFtZTogc3RyaW5nLCBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fSkge1xuICAgICAgICBpZiAoIXRoaXMuaXNXZWIpIHtcbiAgICAgICAgICAgIEZpcmViYXNlQW5hbHl0aWNzLmxvZ0V2ZW50KHsgbmFtZSwgcGFyYW1zIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0ZpcmViYXNlIEFuYWx5dGljcyBFdmVudCAobm90IHNlbnQpPicsIG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgc2V0U2NyZWVuTmFtZShzY3JlZW5OYW1lOiBzdHJpbmcsIHNjcmVlbkNsYXNzPzogc3RyaW5nKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1dlYikge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2dFdmVudCgnc2NyZWVuX3ZpZXcnLCB7XG4gICAgICAgICAgICAgICAgc2NyZWVuX25hbWU6IHNjcmVlbk5hbWUsXG4gICAgICAgICAgICAgICAgc2NyZWVuX2NsYXNzOiBzY3JlZW5DbGFzc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRmlyZWJhc2UgQW5hbHl0aWNzIFNjcmVlbk5hbWUgKG5vdCBzZW50KT4nLCBzY3JlZW5OYW1lLCBzY3JlZW5DbGFzcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cbiJdfQ==